@mhmo91/schmancy 0.10.35 → 0.10.37

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 (430) hide show
  1. package/custom-elements.json +1165 -1109
  2. package/dist/SchmancyElement-BHfQg3Tj.cjs +2 -0
  3. package/dist/SchmancyElement-BHfQg3Tj.cjs.map +1 -0
  4. package/dist/SchmancyElement-CDT2q1lA.js +284 -0
  5. package/dist/SchmancyElement-CDT2q1lA.js.map +1 -0
  6. package/dist/agent/schmancy.agent.js +3488 -3290
  7. package/dist/agent/schmancy.agent.js.map +1 -1
  8. package/dist/agent/schmancy.manifest.json +335 -275
  9. package/dist/{area-DviXdbDx.js → area-KtULlxuA.js} +2 -2
  10. package/dist/{area-DviXdbDx.js.map → area-KtULlxuA.js.map} +1 -1
  11. package/dist/{area-CTSTgjlx.cjs → area-fdKhYB6T.cjs} +1 -1
  12. package/dist/{area-CTSTgjlx.cjs.map → area-fdKhYB6T.cjs.map} +1 -1
  13. package/dist/area.cjs +1 -1
  14. package/dist/area.js +1 -1
  15. package/dist/{audio-Q9oB_cQR.cjs → audio-CUMAv9D_.cjs} +1 -1
  16. package/dist/{audio-Q9oB_cQR.cjs.map → audio-CUMAv9D_.cjs.map} +1 -1
  17. package/dist/{audio-DFYoaw0M.js → audio-zIJVTo_V.js} +1 -1
  18. package/dist/{audio-DFYoaw0M.js.map → audio-zIJVTo_V.js.map} +1 -1
  19. package/dist/audio.cjs +1 -1
  20. package/dist/audio.js +2 -2
  21. package/dist/{autocomplete-DmLXJr7C.cjs → autocomplete-DEZk6wBD.cjs} +1 -1
  22. package/dist/{autocomplete-DmLXJr7C.cjs.map → autocomplete-DEZk6wBD.cjs.map} +1 -1
  23. package/dist/{autocomplete-BDvuma6D.js → autocomplete-DIScyo8Q.js} +3 -3
  24. package/dist/{autocomplete-BDvuma6D.js.map → autocomplete-DIScyo8Q.js.map} +1 -1
  25. package/dist/autocomplete.cjs +1 -1
  26. package/dist/autocomplete.js +1 -1
  27. package/dist/avatar.cjs +1 -1
  28. package/dist/avatar.js +3 -3
  29. package/dist/badge.cjs +1 -1
  30. package/dist/badge.js +1 -1
  31. package/dist/{boat-lr7MPZ7H.js → boat-BHPqSqJd.js} +67 -83
  32. package/dist/boat-BHPqSqJd.js.map +1 -0
  33. package/dist/boat-OBZ77exO.cjs +34 -0
  34. package/dist/boat-OBZ77exO.cjs.map +1 -0
  35. package/dist/boat.cjs +1 -1
  36. package/dist/boat.js +1 -1
  37. package/dist/breadcrumb.cjs +1 -1
  38. package/dist/breadcrumb.js +2 -2
  39. package/dist/{busy-CgzZbGfx.cjs → busy-BJNsKSCM.cjs} +1 -1
  40. package/dist/{busy-CgzZbGfx.cjs.map → busy-BJNsKSCM.cjs.map} +1 -1
  41. package/dist/{busy-DgQ4ux5N.js → busy-Dut78y4L.js} +2 -2
  42. package/dist/{busy-DgQ4ux5N.js.map → busy-Dut78y4L.js.map} +1 -1
  43. package/dist/busy.cjs +1 -1
  44. package/dist/busy.js +1 -1
  45. package/dist/{button-DFvR1iXX.cjs → button-DzlHLjWO.cjs} +1 -1
  46. package/dist/{button-DFvR1iXX.cjs.map → button-DzlHLjWO.cjs.map} +1 -1
  47. package/dist/{button-qbN1muQ0.js → button-kcpPQavY.js} +2 -2
  48. package/dist/{button-qbN1muQ0.js.map → button-kcpPQavY.js.map} +1 -1
  49. package/dist/button.cjs +4 -4
  50. package/dist/button.cjs.map +1 -1
  51. package/dist/button.js +16 -22
  52. package/dist/button.js.map +1 -1
  53. package/dist/{card-D_GlwZ5q.cjs → card-BLxPLqdQ.cjs} +1 -1
  54. package/dist/{card-D_GlwZ5q.cjs.map → card-BLxPLqdQ.cjs.map} +1 -1
  55. package/dist/{card-DAbr-7Vy.js → card-DxSKxCid.js} +2 -2
  56. package/dist/{card-DAbr-7Vy.js.map → card-DxSKxCid.js.map} +1 -1
  57. package/dist/card.cjs +1 -1
  58. package/dist/card.js +1 -1
  59. package/dist/{checkbox-BNORaxMF.js → checkbox-B1wiM3Dv.js} +2 -2
  60. package/dist/{checkbox-BNORaxMF.js.map → checkbox-B1wiM3Dv.js.map} +1 -1
  61. package/dist/{checkbox-BUY_uc_r.cjs → checkbox-BCLkhp5G.cjs} +1 -1
  62. package/dist/{checkbox-BUY_uc_r.cjs.map → checkbox-BCLkhp5G.cjs.map} +1 -1
  63. package/dist/checkbox.cjs +1 -1
  64. package/dist/checkbox.js +1 -1
  65. package/dist/{chips-CXZ4dJCK.cjs → chips-C9dS1WKn.cjs} +44 -33
  66. package/dist/chips-C9dS1WKn.cjs.map +1 -0
  67. package/dist/{chips-Dg6Lk6BT.js → chips-vWmwqQed.js} +145 -122
  68. package/dist/chips-vWmwqQed.js.map +1 -0
  69. package/dist/chips.cjs +1 -1
  70. package/dist/chips.js +2 -2
  71. package/dist/connectivity.cjs +1 -1
  72. package/dist/connectivity.js +3 -3
  73. package/dist/content-drawer.cjs +1 -1
  74. package/dist/content-drawer.js +1 -1
  75. package/dist/{date-range-C-_be3_E.cjs → date-range-BV6HuvLw.cjs} +25 -19
  76. package/dist/date-range-BV6HuvLw.cjs.map +1 -0
  77. package/dist/{date-range-BU6WX7d5.js → date-range-D3ge1b4c.js} +129 -137
  78. package/dist/date-range-D3ge1b4c.js.map +1 -0
  79. package/dist/{date-range-inline-DJtUmHKF.cjs → date-range-inline-DpYgdLRv.cjs} +1 -1
  80. package/dist/{date-range-inline-DJtUmHKF.cjs.map → date-range-inline-DpYgdLRv.cjs.map} +1 -1
  81. package/dist/{date-range-inline-7o7xtVIu.js → date-range-inline-DuWQaWps.js} +2 -2
  82. package/dist/{date-range-inline-7o7xtVIu.js.map → date-range-inline-DuWQaWps.js.map} +1 -1
  83. package/dist/date-range-inline.cjs +1 -1
  84. package/dist/date-range-inline.js +1 -1
  85. package/dist/date-range.cjs +1 -1
  86. package/dist/date-range.js +1 -1
  87. package/dist/delay.cjs +1 -1
  88. package/dist/delay.js +2 -2
  89. package/dist/{details-EfbDPVEo.js → details-C-GZaq3j.js} +2 -2
  90. package/dist/{details-EfbDPVEo.js.map → details-C-GZaq3j.js.map} +1 -1
  91. package/dist/{details-Bs0MyyvF.cjs → details-Dp5rLIWk.cjs} +1 -1
  92. package/dist/{details-Bs0MyyvF.cjs.map → details-Dp5rLIWk.cjs.map} +1 -1
  93. package/dist/details.cjs +1 -1
  94. package/dist/details.js +1 -1
  95. package/dist/{directives-fLwDj6b0.cjs → directives-D_l1E5H6.cjs} +3 -3
  96. package/dist/directives-D_l1E5H6.cjs.map +1 -0
  97. package/dist/{directives-zi1Mm2er.js → directives-DyS51FUh.js} +37 -21
  98. package/dist/directives-DyS51FUh.js.map +1 -0
  99. package/dist/directives.cjs +1 -1
  100. package/dist/directives.js +2 -2
  101. package/dist/{divider-CdIsWZrM.cjs → divider-CBnAmHMZ.cjs} +1 -1
  102. package/dist/{divider-CdIsWZrM.cjs.map → divider-CBnAmHMZ.cjs.map} +1 -1
  103. package/dist/{divider-CEPfrIwe.js → divider-nQffE0AD.js} +2 -2
  104. package/dist/{divider-CEPfrIwe.js.map → divider-nQffE0AD.js.map} +1 -1
  105. package/dist/divider.cjs +1 -1
  106. package/dist/divider.js +1 -1
  107. package/dist/dropdown.cjs +1 -1
  108. package/dist/dropdown.js +2 -2
  109. package/dist/{expand-g1vqqUp1.js → expand-DvTb-UPR.js} +3 -3
  110. package/dist/{expand-g1vqqUp1.js.map → expand-DvTb-UPR.js.map} +1 -1
  111. package/dist/{expand--at1k3qo.cjs → expand-mlP_3XWz.cjs} +1 -1
  112. package/dist/{expand--at1k3qo.cjs.map → expand-mlP_3XWz.cjs.map} +1 -1
  113. package/dist/expand.cjs +1 -1
  114. package/dist/expand.js +1 -1
  115. package/dist/fab.cjs +77 -0
  116. package/dist/fab.cjs.map +1 -0
  117. package/dist/fab.js +151 -0
  118. package/dist/fab.js.map +1 -0
  119. package/dist/{float-DxVzgI9o.js → float-C-Ko0Le3.js} +2 -2
  120. package/dist/{float-DxVzgI9o.js.map → float-C-Ko0Le3.js.map} +1 -1
  121. package/dist/{float-P9HukAm-.cjs → float-C17xgMT1.cjs} +1 -1
  122. package/dist/{float-P9HukAm-.cjs.map → float-C17xgMT1.cjs.map} +1 -1
  123. package/dist/float.cjs +1 -1
  124. package/dist/float.js +1 -1
  125. package/dist/{form-ByYhXe1p.cjs → form-CwPHcQYB.cjs} +1 -1
  126. package/dist/{form-ByYhXe1p.cjs.map → form-CwPHcQYB.cjs.map} +1 -1
  127. package/dist/{form-CqLaozHp.js → form-DA0hUu2h.js} +3 -3
  128. package/dist/{form-CqLaozHp.js.map → form-DA0hUu2h.js.map} +1 -1
  129. package/dist/form.cjs +6 -6
  130. package/dist/form.cjs.map +1 -1
  131. package/dist/form.js +25 -23
  132. package/dist/form.js.map +1 -1
  133. package/dist/handover/agent-runtime-followups.md +1 -1
  134. package/dist/handover/agent-runtime-v1.md +3 -3
  135. package/dist/{icons-CkphcMp6.js → icons-C6UfxmHZ.js} +2 -2
  136. package/dist/{icons-CkphcMp6.js.map → icons-C6UfxmHZ.js.map} +1 -1
  137. package/dist/{icons-DYtiRU5V.cjs → icons-CW3-oMSb.cjs} +1 -1
  138. package/dist/{icons-DYtiRU5V.cjs.map → icons-CW3-oMSb.cjs.map} +1 -1
  139. package/dist/icons.cjs +1 -1
  140. package/dist/icons.js +1 -1
  141. package/dist/{iframe-CjqJksl8.js → iframe-BTjZfYyh.js} +2 -2
  142. package/dist/{iframe-CjqJksl8.js.map → iframe-BTjZfYyh.js.map} +1 -1
  143. package/dist/{iframe-C3trkP8q.cjs → iframe-wuYT2xFz.cjs} +1 -1
  144. package/dist/{iframe-C3trkP8q.cjs.map → iframe-wuYT2xFz.cjs.map} +1 -1
  145. package/dist/iframe.cjs +1 -1
  146. package/dist/iframe.js +1 -1
  147. package/dist/index.cjs +1 -1
  148. package/dist/index.js +57 -56
  149. package/dist/{input-CG51zDVh.js → input-B_4g2ulO.js} +2 -2
  150. package/dist/{input-CG51zDVh.js.map → input-B_4g2ulO.js.map} +1 -1
  151. package/dist/{input-DuavpwNL.cjs → input-BrDiIT60.cjs} +1 -1
  152. package/dist/{input-DuavpwNL.cjs.map → input-BrDiIT60.cjs.map} +1 -1
  153. package/dist/{input-chip-57tgNXKT.cjs → input-chip-B-XWh4aE.cjs} +1 -1
  154. package/dist/input-chip-B-XWh4aE.cjs.map +1 -0
  155. package/dist/{input-chip-C6Lq1927.js → input-chip-BlWhOruv.js} +2 -2
  156. package/dist/input-chip-BlWhOruv.js.map +1 -0
  157. package/dist/input.cjs +1 -1
  158. package/dist/input.js +1 -1
  159. package/dist/json.cjs +1 -1
  160. package/dist/json.js +3 -3
  161. package/dist/kbd.cjs +1 -1
  162. package/dist/kbd.js +2 -2
  163. package/dist/{layout-6ipbiWTl.cjs → layout-BhyIcEVu.cjs} +1 -1
  164. package/dist/{layout-6ipbiWTl.cjs.map → layout-BhyIcEVu.cjs.map} +1 -1
  165. package/dist/{layout-D4IOwx7p.js → layout-Dxit9enO.js} +1 -1
  166. package/dist/{layout-D4IOwx7p.js.map → layout-Dxit9enO.js.map} +1 -1
  167. package/dist/layout.cjs +1 -1
  168. package/dist/layout.js +2 -2
  169. package/dist/{lightbox-H8pVWGMX.cjs → lightbox-CVBogswK.cjs} +1 -1
  170. package/dist/{lightbox-H8pVWGMX.cjs.map → lightbox-CVBogswK.cjs.map} +1 -1
  171. package/dist/{lightbox-CsyO2XSr.js → lightbox-D85XAAuC.js} +2 -2
  172. package/dist/{lightbox-CsyO2XSr.js.map → lightbox-D85XAAuC.js.map} +1 -1
  173. package/dist/lightbox.cjs +1 -1
  174. package/dist/lightbox.js +1 -1
  175. package/dist/{list-BAwH0pQW.js → list-DOF_yVn5.js} +2 -2
  176. package/dist/{list-BAwH0pQW.js.map → list-DOF_yVn5.js.map} +1 -1
  177. package/dist/{list-Bs9m8kw7.cjs → list-nVjLskgx.cjs} +1 -1
  178. package/dist/{list-Bs9m8kw7.cjs.map → list-nVjLskgx.cjs.map} +1 -1
  179. package/dist/list.cjs +1 -1
  180. package/dist/list.js +1 -1
  181. package/dist/{menu-BMcGzj1h.cjs → menu-DqmNjLgY.cjs} +1 -1
  182. package/dist/{menu-BMcGzj1h.cjs.map → menu-DqmNjLgY.cjs.map} +1 -1
  183. package/dist/{menu-tQVARVaC.js → menu-QrAK5Uu9.js} +3 -3
  184. package/dist/{menu-tQVARVaC.js.map → menu-QrAK5Uu9.js.map} +1 -1
  185. package/dist/menu.cjs +1 -1
  186. package/dist/menu.js +1 -1
  187. package/dist/{mixins-Bp0wIHg2.js → mixins-De1zjyhy.js} +1 -1
  188. package/dist/{mixins-Bp0wIHg2.js.map → mixins-De1zjyhy.js.map} +1 -1
  189. package/dist/{mixins-CGXSzZc7.cjs → mixins-DxHpyMHA.cjs} +1 -1
  190. package/dist/{mixins-CGXSzZc7.cjs.map → mixins-DxHpyMHA.cjs.map} +1 -1
  191. package/dist/mixins.cjs +1 -1
  192. package/dist/mixins.js +2 -2
  193. package/dist/nav-drawer.cjs +1 -1
  194. package/dist/nav-drawer.js +1 -1
  195. package/dist/navigation-bar.cjs +1 -1
  196. package/dist/navigation-bar.js +1 -1
  197. package/dist/navigation-rail.cjs +1 -1
  198. package/dist/navigation-rail.js +2 -2
  199. package/dist/{notification-D1tX2nx5.js → notification-BtAK7NK8.js} +4 -4
  200. package/dist/{notification-D1tX2nx5.js.map → notification-BtAK7NK8.js.map} +1 -1
  201. package/dist/{notification-Bz00zdpV.cjs → notification-DYzbUb5C.cjs} +1 -1
  202. package/dist/{notification-Bz00zdpV.cjs.map → notification-DYzbUb5C.cjs.map} +1 -1
  203. package/dist/notification.cjs +1 -1
  204. package/dist/notification.js +1 -1
  205. package/dist/{option-BpGV8Apj.js → option-DHwA0miA.js} +2 -2
  206. package/dist/{option-BpGV8Apj.js.map → option-DHwA0miA.js.map} +1 -1
  207. package/dist/{option-BnybLEDO.cjs → option-DnSPa8ro.cjs} +1 -1
  208. package/dist/{option-BnybLEDO.cjs.map → option-DnSPa8ro.cjs.map} +1 -1
  209. package/dist/option.cjs +1 -1
  210. package/dist/option.js +1 -1
  211. package/dist/{overlay-UQR2Dy3u.cjs → overlay-BVkqZmoS.cjs} +5 -5
  212. package/dist/overlay-BVkqZmoS.cjs.map +1 -0
  213. package/dist/{overlay-BpNhd74N.js → overlay-Del1sBEB.js} +108 -108
  214. package/dist/overlay-Del1sBEB.js.map +1 -0
  215. package/dist/overlay.cjs +1 -1
  216. package/dist/{overlay.confirm-body-CVDtVk5X.cjs → overlay.confirm-body-BV9umTAl.cjs} +1 -1
  217. package/dist/{overlay.confirm-body-CVDtVk5X.cjs.map → overlay.confirm-body-BV9umTAl.cjs.map} +1 -1
  218. package/dist/{overlay.confirm-body-BHcXu5Wk.js → overlay.confirm-body-DSONXUzl.js} +6 -6
  219. package/dist/{overlay.confirm-body-BHcXu5Wk.js.map → overlay.confirm-body-DSONXUzl.js.map} +1 -1
  220. package/dist/overlay.js +3 -3
  221. package/dist/{overlay.service-DTE6NwIM.js → overlay.service-BTp5Oq7f.js} +2 -2
  222. package/dist/{overlay.service-DTE6NwIM.js.map → overlay.service-BTp5Oq7f.js.map} +1 -1
  223. package/dist/{overlay.service-C8RsQzgM.cjs → overlay.service-XLlrsSdA.cjs} +1 -1
  224. package/dist/{overlay.service-C8RsQzgM.cjs.map → overlay.service-XLlrsSdA.cjs.map} +1 -1
  225. package/dist/{progress-gbIALDRs.cjs → progress-DUbTL9g9.cjs} +1 -1
  226. package/dist/{progress-gbIALDRs.cjs.map → progress-DUbTL9g9.cjs.map} +1 -1
  227. package/dist/{progress-CAKsxp29.js → progress-DYA83CFU.js} +2 -2
  228. package/dist/{progress-CAKsxp29.js.map → progress-DYA83CFU.js.map} +1 -1
  229. package/dist/progress.cjs +1 -1
  230. package/dist/progress.js +1 -1
  231. package/dist/{radio-group-CfJ5DtI4.cjs → radio-group-B-ORNtvR.cjs} +1 -1
  232. package/dist/{radio-group-CfJ5DtI4.cjs.map → radio-group-B-ORNtvR.cjs.map} +1 -1
  233. package/dist/{radio-group-otyvZvUk.js → radio-group-DxX0iJBo.js} +2 -2
  234. package/dist/{radio-group-otyvZvUk.js.map → radio-group-DxX0iJBo.js.map} +1 -1
  235. package/dist/radio-group.cjs +1 -1
  236. package/dist/radio-group.js +1 -1
  237. package/dist/range.cjs +1 -1
  238. package/dist/range.js +2 -2
  239. package/dist/{select-81jniVTs.cjs → select-B9uj_u-s.cjs} +1 -1
  240. package/dist/{select-81jniVTs.cjs.map → select-B9uj_u-s.cjs.map} +1 -1
  241. package/dist/{select-9vXx1fhr.js → select-C7gkA-ab.js} +3 -3
  242. package/dist/{select-9vXx1fhr.js.map → select-C7gkA-ab.js.map} +1 -1
  243. package/dist/select.cjs +1 -1
  244. package/dist/select.js +1 -1
  245. package/dist/skeleton.cjs +1 -1
  246. package/dist/skeleton.js +2 -2
  247. package/dist/skills/INDEX.md +1 -1
  248. package/dist/skills/SKILL.md +20 -18
  249. package/dist/skills/boat.md +21 -15
  250. package/dist/skills/fab.md +75 -0
  251. package/dist/skills/schmancy/INDEX.md +1 -1
  252. package/dist/skills/schmancy/SKILL.md +20 -18
  253. package/dist/skills/schmancy/boat.md +21 -15
  254. package/dist/skills/schmancy/fab.md +75 -0
  255. package/dist/skills/schmancy/steps.md +68 -34
  256. package/dist/skills/schmancy/theme.md +1 -1
  257. package/dist/skills/steps.md +68 -34
  258. package/dist/skills/theme.md +1 -1
  259. package/dist/slider.cjs +1 -1
  260. package/dist/slider.js +2 -2
  261. package/dist/{sound.service-CmIw63aM.cjs → sound.service-C7FDY_yD.cjs} +1 -1
  262. package/dist/{sound.service-CmIw63aM.cjs.map → sound.service-C7FDY_yD.cjs.map} +1 -1
  263. package/dist/{sound.service-D3ZSq1Kj.js → sound.service-O0232os6.js} +1 -1
  264. package/dist/{sound.service-D3ZSq1Kj.js.map → sound.service-O0232os6.js.map} +1 -1
  265. package/dist/{splash-screen-C5KAWXvA.cjs → splash-screen-DIS4odDr.cjs} +1 -1
  266. package/dist/{splash-screen-C5KAWXvA.cjs.map → splash-screen-DIS4odDr.cjs.map} +1 -1
  267. package/dist/{splash-screen-BOjrmGLk.js → splash-screen-jfE47xl0.js} +2 -2
  268. package/dist/{splash-screen-BOjrmGLk.js.map → splash-screen-jfE47xl0.js.map} +1 -1
  269. package/dist/splash-screen.cjs +1 -1
  270. package/dist/splash-screen.js +1 -1
  271. package/dist/{src-C5g3p1J5.js → src-BP3h-9d9.js} +36 -35
  272. package/dist/{src-C5g3p1J5.js.map → src-BP3h-9d9.js.map} +1 -1
  273. package/dist/{src-qzUpLbje.cjs → src-Um_pzb-U.cjs} +1 -1
  274. package/dist/{src-qzUpLbje.cjs.map → src-Um_pzb-U.cjs.map} +1 -1
  275. package/dist/{state-Cex3rmx2.cjs → state-Bj0M9a6T.cjs} +1 -1
  276. package/dist/{state-Cex3rmx2.cjs.map → state-Bj0M9a6T.cjs.map} +1 -1
  277. package/dist/{state-CWBRTSvE.js → state-DscWQpoM.js} +1 -1
  278. package/dist/{state-CWBRTSvE.js.map → state-DscWQpoM.js.map} +1 -1
  279. package/dist/state.cjs +1 -1
  280. package/dist/state.js +2 -2
  281. package/dist/steps.cjs +35 -19
  282. package/dist/steps.cjs.map +1 -1
  283. package/dist/steps.js +96 -73
  284. package/dist/steps.js.map +1 -1
  285. package/dist/{surface-9S5scTsD.js → surface-B4Wn4SOO.js} +2 -2
  286. package/dist/{surface-9S5scTsD.js.map → surface-B4Wn4SOO.js.map} +1 -1
  287. package/dist/{surface-PfiejLuw.cjs → surface-DRq6cVW6.cjs} +1 -1
  288. package/dist/{surface-PfiejLuw.cjs.map → surface-DRq6cVW6.cjs.map} +1 -1
  289. package/dist/surface.cjs +1 -1
  290. package/dist/surface.js +1 -1
  291. package/dist/switch.cjs +1 -1
  292. package/dist/switch.js +2 -2
  293. package/dist/table.cjs +1 -1
  294. package/dist/table.js +2 -2
  295. package/dist/{tabs-uYvb1P06.cjs → tabs-Ca_fbHPW.cjs} +1 -1
  296. package/dist/{tabs-uYvb1P06.cjs.map → tabs-Ca_fbHPW.cjs.map} +1 -1
  297. package/dist/{tabs-BBOjAmgG.js → tabs-CnQPo-XS.js} +2 -2
  298. package/dist/{tabs-BBOjAmgG.js.map → tabs-CnQPo-XS.js.map} +1 -1
  299. package/dist/tabs.cjs +1 -1
  300. package/dist/tabs.js +1 -1
  301. package/dist/teleport.cjs +1 -1
  302. package/dist/teleport.js +1 -1
  303. package/dist/{textarea-QzSj8Dkl.js → textarea-BvqENhTW.js} +2 -2
  304. package/dist/{textarea-QzSj8Dkl.js.map → textarea-BvqENhTW.js.map} +1 -1
  305. package/dist/{textarea-YPHX4g7Y.cjs → textarea-qr7oL8oU.cjs} +1 -1
  306. package/dist/{textarea-YPHX4g7Y.cjs.map → textarea-qr7oL8oU.cjs.map} +1 -1
  307. package/dist/textarea.cjs +1 -1
  308. package/dist/textarea.js +1 -1
  309. package/dist/theme-BSwJ2YZo.cjs +181 -0
  310. package/dist/{theme-iKUaS9JB.cjs.map → theme-BSwJ2YZo.cjs.map} +1 -1
  311. package/dist/{theme-C2Mp-VGt.js → theme-BV0EzHQ1.js} +6 -5
  312. package/dist/{theme-C2Mp-VGt.js.map → theme-BV0EzHQ1.js.map} +1 -1
  313. package/dist/{theme-button-CJmhxfMe.cjs → theme-button-C6fpUzPM.cjs} +1 -1
  314. package/dist/{theme-button-CJmhxfMe.cjs.map → theme-button-C6fpUzPM.cjs.map} +1 -1
  315. package/dist/{theme-button-DGWAXhzd.js → theme-button-O_xNCgI7.js} +2 -2
  316. package/dist/{theme-button-DGWAXhzd.js.map → theme-button-O_xNCgI7.js.map} +1 -1
  317. package/dist/theme-button.cjs +1 -1
  318. package/dist/theme-button.js +1 -1
  319. package/dist/theme.cjs +1 -1
  320. package/dist/theme.js +3 -3
  321. package/dist/{theme.service-hc4N-1Oz.js → theme.service-DwLhhOmP.js} +1 -1
  322. package/dist/{theme.service-hc4N-1Oz.js.map → theme.service-DwLhhOmP.js.map} +1 -1
  323. package/dist/{theme.service-p61RsJBF.cjs → theme.service-kn9MC025.cjs} +1 -1
  324. package/dist/{theme.service-p61RsJBF.cjs.map → theme.service-kn9MC025.cjs.map} +1 -1
  325. package/dist/tree.cjs +1 -1
  326. package/dist/tree.js +2 -2
  327. package/dist/{typography-DwV0sqht.js → typography-Dtdooaic.js} +2 -2
  328. package/dist/{typography-DwV0sqht.js.map → typography-Dtdooaic.js.map} +1 -1
  329. package/dist/{typography-Bdt8RlX2.cjs → typography-opFYuUYS.cjs} +1 -1
  330. package/dist/{typography-Bdt8RlX2.cjs.map → typography-opFYuUYS.cjs.map} +1 -1
  331. package/dist/typography.cjs +1 -1
  332. package/dist/typography.js +1 -1
  333. package/dist/visually-hidden.cjs +1 -1
  334. package/dist/visually-hidden.js +2 -2
  335. package/dist/{window-D2WfvNng.cjs → window-BSAemI9J.cjs} +1 -1
  336. package/dist/{window-D2WfvNng.cjs.map → window-BSAemI9J.cjs.map} +1 -1
  337. package/dist/{window-n4jN60B_.js → window-ConcHirJ.js} +3 -3
  338. package/dist/{window-n4jN60B_.js.map → window-ConcHirJ.js.map} +1 -1
  339. package/dist/window.cjs +1 -1
  340. package/dist/window.js +1 -1
  341. package/package.json +1 -1
  342. package/skills/schmancy/INDEX.md +1 -1
  343. package/skills/schmancy/SKILL.md +20 -18
  344. package/skills/schmancy/boat.md +21 -15
  345. package/skills/schmancy/fab.md +75 -0
  346. package/skills/schmancy/steps.md +68 -34
  347. package/skills/schmancy/theme.md +1 -1
  348. package/src/CLAUDE.md +22 -16
  349. package/src/boat/boat.test.ts +130 -0
  350. package/src/boat/boat.ts +144 -121
  351. package/src/button/icon-button.ts +18 -30
  352. package/src/chips/assist-chip.ts +2 -263
  353. package/src/chips/chips.ts +2 -259
  354. package/src/chips/filter-chip.ts +2 -255
  355. package/src/chips/index.ts +2 -5
  356. package/src/chips/input-chip.ts +2 -413
  357. package/src/chips/suggestion-chip.ts +2 -266
  358. package/src/directives/fill.ts +28 -5
  359. package/src/directives/reveal.ts +192 -118
  360. package/src/fab/fab.test.ts +101 -0
  361. package/src/fab/fab.ts +226 -0
  362. package/src/fab/index.ts +1 -0
  363. package/src/form/fields/chips/assist-chip.ts +263 -0
  364. package/src/form/fields/chips/chips.ts +234 -0
  365. package/src/form/fields/chips/filter-chip.ts +255 -0
  366. package/src/form/fields/chips/index.ts +5 -0
  367. package/src/form/fields/chips/input-chip.ts +413 -0
  368. package/src/form/fields/chips/suggestion-chip.ts +266 -0
  369. package/src/form/fields/date-range/date-range.test.ts +44 -0
  370. package/src/form/fields/date-range/date-range.ts +103 -97
  371. package/src/form/fields/index.ts +1 -0
  372. package/src/index.ts +2 -1
  373. package/src/overlay/overlay.animations.ts +2 -3
  374. package/src/overlay/overlay.component.ts +8 -4
  375. package/src/overlay/overlay.types.ts +14 -2
  376. package/src/steps/index.ts +1 -1
  377. package/src/steps/schmancy-step.ts +91 -65
  378. package/src/steps/{schmancy-steps-container.ts → schmancy-steps.ts} +18 -38
  379. package/src/steps/steps.context.ts +5 -4
  380. package/src/steps/steps.test.ts +120 -0
  381. package/src/theme/theme.component.ts +1 -0
  382. package/src/theme/theme.style.css +3 -0
  383. package/types/src/boat/boat.d.ts +27 -9
  384. package/types/src/boat/boat.test.d.ts +2 -0
  385. package/types/src/button/icon-button.d.ts +3 -2
  386. package/types/src/chips/assist-chip.d.ts +1 -47
  387. package/types/src/chips/chips.d.ts +1 -43
  388. package/types/src/chips/filter-chip.d.ts +1 -67
  389. package/types/src/chips/index.d.ts +1 -5
  390. package/types/src/chips/input-chip.d.ts +1 -82
  391. package/types/src/chips/suggestion-chip.d.ts +1 -52
  392. package/types/src/directives/reveal.d.ts +15 -5
  393. package/types/src/fab/fab.d.ts +80 -0
  394. package/types/src/fab/fab.test.d.ts +2 -0
  395. package/types/src/fab/index.d.ts +1 -0
  396. package/types/src/form/fields/chips/assist-chip.d.ts +47 -0
  397. package/types/src/form/fields/chips/chips.d.ts +35 -0
  398. package/types/src/form/fields/chips/filter-chip.d.ts +67 -0
  399. package/types/src/form/fields/chips/index.d.ts +5 -0
  400. package/types/src/form/fields/chips/input-chip.d.ts +82 -0
  401. package/types/src/form/fields/chips/suggestion-chip.d.ts +52 -0
  402. package/types/src/form/fields/date-range/date-range.d.ts +5 -10
  403. package/types/src/form/fields/index.d.ts +1 -0
  404. package/types/src/index.d.ts +2 -1
  405. package/types/src/overlay/overlay.component.d.ts +1 -0
  406. package/types/src/overlay/overlay.types.d.ts +12 -2
  407. package/types/src/steps/index.d.ts +1 -1
  408. package/types/src/steps/schmancy-step.d.ts +8 -23
  409. package/types/src/steps/{schmancy-steps-container.d.ts → schmancy-steps.d.ts} +8 -9
  410. package/types/src/steps/steps.context.d.ts +2 -1
  411. package/types/src/steps/steps.test.d.ts +2 -0
  412. package/types/src/theme/theme.component.d.ts +1 -0
  413. package/dist/SchmancyElement-CA0Wqt8m.js +0 -284
  414. package/dist/SchmancyElement-CA0Wqt8m.js.map +0 -1
  415. package/dist/SchmancyElement-CYIif26I.cjs +0 -2
  416. package/dist/SchmancyElement-CYIif26I.cjs.map +0 -1
  417. package/dist/boat-Vqjgo10B.cjs +0 -33
  418. package/dist/boat-Vqjgo10B.cjs.map +0 -1
  419. package/dist/boat-lr7MPZ7H.js.map +0 -1
  420. package/dist/chips-CXZ4dJCK.cjs.map +0 -1
  421. package/dist/chips-Dg6Lk6BT.js.map +0 -1
  422. package/dist/date-range-BU6WX7d5.js.map +0 -1
  423. package/dist/date-range-C-_be3_E.cjs.map +0 -1
  424. package/dist/directives-fLwDj6b0.cjs.map +0 -1
  425. package/dist/directives-zi1Mm2er.js.map +0 -1
  426. package/dist/input-chip-57tgNXKT.cjs.map +0 -1
  427. package/dist/input-chip-C6Lq1927.js.map +0 -1
  428. package/dist/overlay-BpNhd74N.js.map +0 -1
  429. package/dist/overlay-UQR2Dy3u.cjs.map +0 -1
  430. package/dist/theme-iKUaS9JB.cjs +0 -181
package/src/fab/fab.ts ADDED
@@ -0,0 +1,226 @@
1
+ import { SchmancyElement } from '@mixins/index'
2
+ import { css, html, LitElement } from 'lit'
3
+ import { customElement, property, query } from 'lit/decorators.js'
4
+ import { ifDefined } from 'lit/directives/if-defined.js'
5
+ import { when } from 'lit/directives/when.js'
6
+ import { magnetic } from '../directives/magnetic'
7
+
8
+ export type FabVariant = 'surface' | 'primary' | 'secondary' | 'tertiary'
9
+ export type FabSize = 'small' | 'medium' | 'large'
10
+
11
+ /**
12
+ * Material 3 Floating Action Button.
13
+ *
14
+ * Mirrors the `md-fab` reference implementation
15
+ * (github.com/material-components/material-web) and the M3 spec
16
+ * (m3.material.io/components/floating-action-button): four colour
17
+ * variants, three container sizes, an extended form (set `label`),
18
+ * and a `lowered` elevation register. Per M3 guidance a FAB is never
19
+ * disabled, so there is no `disabled` property.
20
+ *
21
+ * Sizing, shape, icon size and elevation are M3 design tokens expressed
22
+ * as `:host` rules (the same token-driven model as `md-fab`'s SCSS);
23
+ * colour roles and the state layer are schmancy theme utilities. The
24
+ * host shrink-wraps the inner button and clips its rounded shape.
25
+ *
26
+ * @element schmancy-fab
27
+ * @slot - The icon (typically `<schmancy-icon>`).
28
+ * @csspart base - The underlying native `<button>`.
29
+ */
30
+ @customElement('schmancy-fab')
31
+ export class SchmancyFab extends SchmancyElement {
32
+ static styles = [
33
+ css`
34
+ :host {
35
+ /* M3 FAB (medium) — 16dp shape, 24dp icon, resting level 3 */
36
+ display: inline-flex;
37
+ position: relative;
38
+ touch-action: manipulation;
39
+ overflow: hidden;
40
+ border-radius: 16px;
41
+ --_icon: 24px;
42
+ --_elevation: var(--schmancy-sys-elevation-3);
43
+ --_elevation-hover: var(--schmancy-sys-elevation-4);
44
+ box-shadow: var(--_elevation);
45
+ transition:
46
+ box-shadow 280ms cubic-bezier(0.34, 1.56, 0.64, 1),
47
+ transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
48
+ }
49
+ /* M3 small FAB — 12dp shape */
50
+ :host([size='small']) {
51
+ border-radius: 12px;
52
+ }
53
+ /* M3 large FAB — 28dp shape, 36dp icon */
54
+ :host([size='large']) {
55
+ border-radius: 28px;
56
+ --_icon: 36px;
57
+ }
58
+ /* Extended FAB always uses the 16dp shape / 24dp icon */
59
+ :host([extended]) {
60
+ border-radius: 16px;
61
+ --_icon: 24px;
62
+ }
63
+ /* M3 lowered register — resting level 1, hover level 2 */
64
+ :host([lowered]) {
65
+ --_elevation: var(--schmancy-sys-elevation-1);
66
+ --_elevation-hover: var(--schmancy-sys-elevation-2);
67
+ }
68
+ :host(:hover) {
69
+ box-shadow: var(--_elevation-hover);
70
+ }
71
+ :host(:active) {
72
+ /* M3 pressed elevation == resting; schmancy spring press */
73
+ box-shadow: var(--_elevation);
74
+ transform: scale(0.96);
75
+ transition-duration: 100ms;
76
+ }
77
+ ::slotted(*) {
78
+ font-size: var(--_icon);
79
+ width: var(--_icon);
80
+ height: var(--_icon);
81
+ }
82
+ :host([extended]) ::slotted(*) {
83
+ margin-inline-end: 12px;
84
+ }
85
+ @media (prefers-reduced-motion: reduce) {
86
+ :host {
87
+ transition: none;
88
+ }
89
+ :host(:active) {
90
+ transform: none;
91
+ }
92
+ }
93
+ :host *,
94
+ * {
95
+ touch-action: manipulation;
96
+ }
97
+ `,
98
+ ]
99
+
100
+ protected static shadowRootOptions = {
101
+ ...LitElement.shadowRootOptions,
102
+ mode: 'open',
103
+ delegatesFocus: true,
104
+ }
105
+
106
+ @query('[part="base"]', true)
107
+ private nativeElement!: HTMLElement
108
+
109
+ private ariaLabelValue!: string
110
+
111
+ /**
112
+ * Colour variant. M3 maps each to a container + on-container role.
113
+ * @attr
114
+ * @default 'surface'
115
+ */
116
+ @property({ reflect: true, type: String })
117
+ public variant: FabVariant = 'surface'
118
+
119
+ /**
120
+ * Container size. Ignored while extended (extended is always 56dp tall).
121
+ * @attr
122
+ * @default 'medium'
123
+ */
124
+ @property({ reflect: true, type: String })
125
+ public size: FabSize = 'medium'
126
+
127
+ /**
128
+ * Extended-FAB label. A non-empty value switches the FAB to its
129
+ * extended form (icon + text), exactly as `md-fab` derives extended
130
+ * from a truthy label.
131
+ * @attr
132
+ */
133
+ @property({ type: String })
134
+ public label = ''
135
+
136
+ /**
137
+ * Reflected mirror of "label is non-empty" so `:host([extended])`
138
+ * can drive the extended geometry. Synced from `label`; read it,
139
+ * don't set it.
140
+ * @attr
141
+ */
142
+ @property({ type: Boolean, reflect: true })
143
+ public extended = false
144
+
145
+ /**
146
+ * Lowers the FAB's elevation register (M3 lowered FAB).
147
+ * @attr
148
+ * @default false
149
+ */
150
+ @property({ type: Boolean, reflect: true })
151
+ public lowered = false
152
+
153
+ public override set ariaLabel(value: string) {
154
+ const oldVal = this.ariaLabelValue
155
+ this.ariaLabelValue = value
156
+ if (this.hasAttribute('aria-label')) {
157
+ this.removeAttribute('aria-label')
158
+ }
159
+ this.requestUpdate('ariaLabel', oldVal)
160
+ }
161
+
162
+ @property({ attribute: 'aria-label' })
163
+ public override get ariaLabel() {
164
+ return this.ariaLabelValue
165
+ }
166
+
167
+ /** Sets focus on the FAB. */
168
+ public override focus(options?: FocusOptions) {
169
+ this.nativeElement.focus(options)
170
+ }
171
+
172
+ /** Removes focus from the FAB. */
173
+ public override blur() {
174
+ this.nativeElement.blur()
175
+ }
176
+
177
+ protected willUpdate(changed: Map<string, unknown>) {
178
+ if (changed.has('label')) this.extended = this.label.length > 0
179
+ }
180
+
181
+ render() {
182
+ const classes = {
183
+ 'relative z-0 flex items-center justify-center overflow-hidden border-0 cursor-pointer outline-hidden focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-secondary-default':
184
+ true,
185
+ // M3 container — fixed square per size, content-width when extended
186
+ 'size-10': !this.extended && this.size === 'small',
187
+ 'size-14': !this.extended && this.size === 'medium',
188
+ 'size-24': !this.extended && this.size === 'large',
189
+ 'h-14 ps-4 pe-5 gap-3 text-sm font-medium leading-5': this.extended,
190
+ // M3 container + on-container colour roles per variant
191
+ 'bg-surface-containerHigh text-primary-default': this.variant === 'surface',
192
+ 'bg-primary-container text-primary-onContainer': this.variant === 'primary',
193
+ 'bg-secondary-container text-secondary-onContainer': this.variant === 'secondary',
194
+ 'bg-tertiary-container text-tertiary-onContainer': this.variant === 'tertiary',
195
+ }
196
+
197
+ const stateLayerClasses = {
198
+ 'absolute inset-0 z-0 opacity-0 transition-opacity duration-150 hover:opacity-8 focus-visible:opacity-10 active:opacity-10':
199
+ true,
200
+ 'bg-primary-default': this.variant === 'surface',
201
+ 'bg-primary-onContainer': this.variant === 'primary',
202
+ 'bg-secondary-onContainer': this.variant === 'secondary',
203
+ 'bg-tertiary-onContainer': this.variant === 'tertiary',
204
+ }
205
+
206
+ return html`
207
+ <button
208
+ ${magnetic({ strength: 3, radius: 60 })}
209
+ part="base"
210
+ type="button"
211
+ aria-label=${ifDefined(this.ariaLabel)}
212
+ class="${this.classMap(classes)}"
213
+ >
214
+ <div class="${this.classMap(stateLayerClasses)}"></div>
215
+ <slot aria-hidden=${ifDefined(this.ariaLabel || this.label ? 'true' : undefined)}></slot>
216
+ ${when(this.extended, () => html`<span class="relative z-0">${this.label}</span>`)}
217
+ </button>
218
+ `
219
+ }
220
+ }
221
+
222
+ declare global {
223
+ interface HTMLElementTagNameMap {
224
+ 'schmancy-fab': SchmancyFab
225
+ }
226
+ }
@@ -0,0 +1 @@
1
+ export * from './fab'
@@ -0,0 +1,263 @@
1
+ import { SchmancyElement } from '@mixins/index'
2
+ import { css, html, LitElement } from 'lit'
3
+ import { customElement, property, state } from 'lit/decorators.js'
4
+ import { classMap } from 'lit/directives/class-map.js'
5
+ import { BehaviorSubject, combineLatest } from 'rxjs'
6
+ import { takeUntil } from 'rxjs/operators'
7
+
8
+ /**
9
+ * Assist chip component - prompts user actions like opening calendar events or sharing content
10
+ * Pure Schmancy implementation with Tailwind CSS and RxJS state management
11
+ */
12
+ @customElement('schmancy-assist-chip')
13
+ export class SchmancyAssistChip extends SchmancyElement {
14
+ static styles = [css`
15
+ :host {
16
+ display: inline-block;
17
+ outline: none;
18
+ width: fit-content;
19
+ min-width: fit-content;
20
+ }
21
+
22
+ :host([disabled]) {
23
+ pointer-events: none;
24
+ }
25
+
26
+ .ripple {
27
+ position: absolute;
28
+ border-radius: 50%;
29
+ transform: scale(0);
30
+ animation: ripple 600ms linear;
31
+ background-color: rgba(0, 0, 0, 0.08);
32
+ pointer-events: none;
33
+ }
34
+
35
+ @keyframes ripple {
36
+ to {
37
+ transform: scale(4);
38
+ opacity: 0;
39
+ }
40
+ }
41
+
42
+ /* State layer for M3 hover/focus/pressed states */
43
+ .state-layer {
44
+ position: absolute;
45
+ inset: 0;
46
+ border-radius: inherit;
47
+ pointer-events: none;
48
+ background-color: currentColor;
49
+ opacity: 0;
50
+ transition: opacity 200ms ease;
51
+ }
52
+
53
+ :host(:not([disabled])) button:hover .state-layer {
54
+ opacity: 0.08;
55
+ }
56
+
57
+ :host(:not([disabled])) button:focus-visible .state-layer {
58
+ opacity: 0.1;
59
+ }
60
+
61
+ :host(:not([disabled])) button:active .state-layer {
62
+ opacity: 0.1;
63
+ }
64
+ `];
65
+ /** Value identifier for the chip */
66
+ @property({ reflect: true }) value = ''
67
+
68
+ /** Optional icon name (Material Symbols) */
69
+ @property({ reflect: true }) icon = ''
70
+
71
+ /** Optional href for navigation */
72
+ @property({ reflect: true }) href = ''
73
+
74
+ /** Target for navigation (e.g., '_blank') */
75
+ @property({ reflect: true }) target = ''
76
+
77
+ /** Disable the chip */
78
+ @property({ type: Boolean, reflect: true }) disabled = false
79
+
80
+ /** Elevated style variant - true by default per M3 spec for assist chips */
81
+ @property({ type: Boolean, reflect: true }) elevated = true
82
+
83
+ // RxJS state streams
84
+ private hover$ = new BehaviorSubject<boolean>(false)
85
+ private pressed$ = new BehaviorSubject<boolean>(false)
86
+ private focused$ = new BehaviorSubject<boolean>(false)
87
+
88
+ // UI state - only ripples needed for rendering
89
+ @state() private ripples: Array<{ x: number; y: number; id: number }> = []
90
+
91
+ protected static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }
92
+
93
+ private nextRippleId = 0
94
+
95
+ connectedCallback() {
96
+ super.connectedCallback()
97
+
98
+ // Stream management for future extensions
99
+ // Currently, states are handled directly in event handlers
100
+ // This pipeline can be extended for more complex state interactions
101
+ combineLatest([
102
+ this.hover$,
103
+ this.pressed$,
104
+ this.focused$
105
+ ]).pipe(
106
+ // States are managed through event handlers directly
107
+ // This pipeline is kept for potential future state combinations
108
+ takeUntil(this.disconnecting)
109
+ ).subscribe()
110
+ }
111
+
112
+ private handleClick = (e: MouseEvent) => {
113
+ if (this.disabled) return
114
+
115
+ // Add ripple effect
116
+ const button = this.shadowRoot?.querySelector('button')
117
+ if (button) {
118
+ const rect = button.getBoundingClientRect()
119
+ const x = e.clientX - rect.left
120
+ const y = e.clientY - rect.top
121
+ const id = this.nextRippleId++
122
+
123
+ this.ripples = [...this.ripples, { x, y, id }]
124
+
125
+ // Remove ripple after animation
126
+ setTimeout(() => {
127
+ this.ripples = this.ripples.filter(r => r.id !== id)
128
+ }, 600)
129
+ }
130
+
131
+ // Navigate if href is provided
132
+ if (this.href) {
133
+ if (this.target === '_blank') {
134
+ window.open(this.href, '_blank')
135
+ } else {
136
+ window.location.href = this.href
137
+ }
138
+ }
139
+
140
+ // Dispatch action event
141
+ this.dispatchEvent(new CustomEvent('action', {
142
+ detail: { value: this.value },
143
+ bubbles: true,
144
+ composed: true
145
+ }))
146
+ }
147
+
148
+ private handleKeyDown = (e: KeyboardEvent) => {
149
+ if (this.disabled) return
150
+
151
+ if (e.key === 'Enter' || e.key === ' ') {
152
+ e.preventDefault()
153
+ this.pressed$.next(true)
154
+
155
+ // Simulate click
156
+ const clickEvent = new MouseEvent('click', {
157
+ bubbles: true,
158
+ cancelable: true,
159
+ clientX: 0,
160
+ clientY: 0
161
+ })
162
+ this.handleClick(clickEvent)
163
+
164
+ setTimeout(() => this.pressed$.next(false), 100)
165
+ }
166
+ }
167
+
168
+ private handleFocus = () => {
169
+ this.focused$.next(true)
170
+ }
171
+
172
+ private handleBlur = () => {
173
+ this.focused$.next(false)
174
+ }
175
+
176
+ render() {
177
+ const hasIcon = !!this.icon;
178
+
179
+ const classes = {
180
+ 'relative': true,
181
+ 'inline-flex': true,
182
+ 'items-center': true,
183
+ 'gap-2': true,
184
+ 'h-8': true, // M3: 32px height
185
+ 'min-h-[32px]': true,
186
+ 'rounded-full': true,
187
+ 'cursor-pointer': !this.disabled,
188
+ 'transition-all': true,
189
+ 'duration-200': true,
190
+ 'select-none': true,
191
+ 'overflow-hidden': true,
192
+
193
+ // M3 Padding: 8px with icon, 16px without (leading), 16px trailing
194
+ 'pl-2': hasIcon, // 8px with icon
195
+ 'pl-4': !hasIcon, // 16px without icon
196
+ 'pr-4': true, // 16px trailing
197
+
198
+ // M3 Colors - assist chips are elevated by default
199
+ 'bg-surface-containerLow': true,
200
+ 'text-surface-onVariant': true,
201
+
202
+ // M3: Assist chips elevated by default (shadow-1)
203
+ 'shadow-sm': this.elevated && !this.disabled, // shadow-1 for elevation
204
+ 'hover:shadow-md': this.elevated && !this.disabled, // elevated on hover
205
+
206
+ // Focus state
207
+ 'focus-visible:outline': !this.disabled,
208
+ 'focus-visible:outline-2': !this.disabled,
209
+ 'focus-visible:outline-primary': !this.disabled,
210
+ 'focus-visible:outline-offset-2': !this.disabled,
211
+
212
+ // Disabled
213
+ 'opacity-38': this.disabled, // M3 disabled opacity
214
+ 'cursor-not-allowed': this.disabled
215
+ }
216
+
217
+ return html`
218
+ <button
219
+ type="button"
220
+ class=${classMap(classes)}
221
+ ?disabled=${this.disabled}
222
+ @click=${this.handleClick}
223
+ @keydown=${this.handleKeyDown}
224
+ @mouseenter=${() => this.hover$.next(true)}
225
+ @mouseleave=${() => this.hover$.next(false)}
226
+ @mousedown=${() => this.pressed$.next(true)}
227
+ @mouseup=${() => this.pressed$.next(false)}
228
+ @focus=${this.handleFocus}
229
+ @blur=${this.handleBlur}
230
+ tabindex=${this.disabled ? '-1' : '0'}
231
+ role="button"
232
+ aria-disabled=${this.disabled}
233
+ aria-label=${this.value}
234
+ >
235
+ ${this.icon ? html`
236
+ <schmancy-icon class="text-[18px] shrink-0">${this.icon}</schmancy-icon>
237
+ ` : ''}
238
+ <span class="text-sm font-medium leading-5">
239
+ <slot></slot>
240
+ </span>
241
+
242
+ <!-- Ripple effects -->
243
+ ${this.ripples.map(ripple => html`
244
+ <span
245
+ class="ripple"
246
+ style="left: ${ripple.x}px; top: ${ripple.y}px;"
247
+ ></span>
248
+ `)}
249
+
250
+ <!-- State layer for M3 hover/focus/pressed states -->
251
+ <div class="state-layer"></div>
252
+ </button>
253
+ `
254
+ }
255
+ }
256
+
257
+ declare global {
258
+ interface HTMLElementTagNameMap {
259
+ 'schmancy-assist-chip': SchmancyAssistChip
260
+ }
261
+ }
262
+
263
+ export type AssistChipActionEvent = { value: string }