@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
@@ -1,413 +1,2 @@
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 { map, takeUntil, tap } from 'rxjs/operators'
7
-
8
- /**
9
- * Input chip component - represents user-provided information that can be removed.
10
- *
11
- * IMPORTANT: Per Material Design 3 specification, input chips do NOT have selected state.
12
- * They represent discrete pieces of user input (like entered tags, selections from lists, etc.)
13
- * that can only be removed, not toggled on/off.
14
- *
15
- * Use cases:
16
- * - Displaying selected recipients in an email
17
- * - Showing applied filters that can be removed
18
- * - Tags or keywords entered by the user
19
- * - Selected items from a multi-select dropdown
20
- *
21
- * @fires click - Optional click event on chip body (value)
22
- * @fires remove - Dispatched when remove button is clicked (value)
23
- *
24
- * @example
25
- * ```html
26
- * <schmancy-input-chip value="john@example.com" avatar="/avatars/john.jpg">
27
- * John Doe
28
- * </schmancy-input-chip>
29
- * ```
30
- */
31
- @customElement('schmancy-input-chip')
32
- export class SchmancyInputChip extends SchmancyElement {
33
- static styles = [css`
34
- :host {
35
- display: inline-block;
36
- outline: none;
37
- width: fit-content;
38
- min-width: fit-content;
39
- }
40
-
41
- :host([disabled]) {
42
- pointer-events: none;
43
- }
44
-
45
- button {
46
- font-family: inherit;
47
- }
48
-
49
- .avatar-img {
50
- width: 20px;
51
- height: 20px;
52
- object-fit: cover;
53
- }
54
-
55
- /* Material Symbols font for icons */
56
- .material-symbols-outlined {
57
- font-family: 'Material Symbols Outlined';
58
- font-weight: normal;
59
- font-style: normal;
60
- font-size: 18px;
61
- line-height: 1;
62
- letter-spacing: normal;
63
- text-transform: none;
64
- display: inline-block;
65
- white-space: nowrap;
66
- word-wrap: normal;
67
- direction: ltr;
68
- -webkit-font-smoothing: antialiased;
69
- text-rendering: optimizeLegibility;
70
- -moz-osx-font-smoothing: grayscale;
71
- font-feature-settings: 'liga';
72
- vertical-align: middle;
73
- }
74
-
75
- .ripple {
76
- position: absolute;
77
- border-radius: 50%;
78
- transform: scale(0);
79
- animation: ripple 600ms linear;
80
- background-color: rgba(0, 0, 0, 0.08);
81
- pointer-events: none;
82
- }
83
-
84
- @keyframes ripple {
85
- to {
86
- transform: scale(4);
87
- opacity: 0;
88
- }
89
- }
90
-
91
- /* State layer for M3 hover/focus/pressed states */
92
- .state-layer {
93
- position: absolute;
94
- inset: 0;
95
- border-radius: inherit;
96
- pointer-events: none;
97
- background-color: currentColor;
98
- opacity: 0;
99
- transition: opacity 200ms ease;
100
- }
101
-
102
- :host(:not([disabled])) .chip-container:hover .state-layer {
103
- opacity: 0.08;
104
- }
105
-
106
- :host(:not([disabled])) .chip-container:focus-visible .state-layer {
107
- opacity: 0.1;
108
- }
109
-
110
- :host(:not([disabled])) .chip-container:active .state-layer {
111
- opacity: 0.1;
112
- }
113
- `];
114
- /** Value identifier for the chip */
115
- @property({ type: String, reflect: true })
116
- value: string = ''
117
-
118
- /** Optional icon name (Material Symbols) */
119
- @property({ type: String, reflect: true })
120
- icon: string = ''
121
-
122
- /** Optional avatar image URL */
123
- @property({ type: String, reflect: true })
124
- avatar: string = ''
125
-
126
- /** Whether to show remove button (default true for input chips) */
127
- @property({ type: Boolean, reflect: true })
128
- removable: boolean = true
129
-
130
- /** Disable the chip */
131
- @property({ type: Boolean, reflect: true })
132
- disabled: boolean = false
133
-
134
- /** Elevated style variant */
135
- @property({ type: Boolean, reflect: true })
136
- elevated: boolean = false
137
-
138
- // RxJS state streams
139
- private chipHover$ = new BehaviorSubject<boolean>(false)
140
- private removeHover$ = new BehaviorSubject<boolean>(false)
141
- private focused$ = new BehaviorSubject<boolean>(false)
142
- private pressed$ = new BehaviorSubject<boolean>(false)
143
-
144
- // UI state from combined streams
145
- @state() uiState = {
146
- chipHover: false,
147
- removeHover: false,
148
- focused: false,
149
- pressed: false
150
- }
151
-
152
- // Ripple effects
153
- @state() private ripples: Array<{ x: number; y: number; id: number }> = []
154
- private nextRippleId = 0
155
-
156
- constructor() {
157
- super()
158
- try {
159
- this.internals = this.attachInternals()
160
- } catch {
161
- this.internals = undefined
162
- }
163
- }
164
-
165
- protected static shadowRootOptions = {
166
- ...LitElement.shadowRootOptions,
167
- delegatesFocus: true,
168
- }
169
-
170
- static formAssociated = true
171
- internals: ElementInternals | undefined
172
- get form() {
173
- return this.internals?.form
174
- }
175
-
176
- protected updated(changed: Map<string, unknown>) {
177
- super.updated?.(changed)
178
- if (changed.has('value')) {
179
- this.internals?.setFormValue(this.value || null)
180
- }
181
- }
182
-
183
- connectedCallback() {
184
- super.connectedCallback()
185
-
186
- // Combine all UI state streams
187
- combineLatest([
188
- this.chipHover$,
189
- this.removeHover$,
190
- this.focused$,
191
- this.pressed$
192
- ]).pipe(
193
- map(([chipHover, removeHover, focused, pressed]) => ({
194
- chipHover,
195
- removeHover,
196
- focused,
197
- pressed
198
- })),
199
- tap(state => {
200
- this.uiState = state
201
- }),
202
- takeUntil(this.disconnecting)
203
- ).subscribe()
204
- }
205
-
206
- private handleChipClick = (e: MouseEvent) => {
207
- if (this.disabled) return
208
-
209
- // Add ripple effect
210
- const chip = this.shadowRoot?.querySelector('.chip-container') as HTMLElement
211
- if (chip) {
212
- const rect = chip.getBoundingClientRect()
213
- const x = e.clientX - rect.left
214
- const y = e.clientY - rect.top
215
- const id = this.nextRippleId++
216
-
217
- this.ripples = [...this.ripples, { x, y, id }]
218
-
219
- // Remove ripple after animation
220
- setTimeout(() => {
221
- this.ripples = this.ripples.filter(r => r.id !== id)
222
- }, 600)
223
- }
224
-
225
- // Dispatch optional click event (for custom handling if needed)
226
- this.dispatchEvent(
227
- new CustomEvent('click', {
228
- detail: { value: this.value },
229
- bubbles: true,
230
- composed: true,
231
- })
232
- )
233
- }
234
-
235
- private handleRemove = (e: Event) => {
236
- if (this.disabled) return
237
-
238
- e.stopPropagation()
239
-
240
- // Dispatch remove event
241
- this.dispatchEvent(
242
- new CustomEvent('remove', {
243
- detail: { value: this.value },
244
- bubbles: true,
245
- composed: true,
246
- })
247
- )
248
- }
249
-
250
- private handleKeyDown = (e: KeyboardEvent) => {
251
- if (this.disabled) return
252
-
253
- // Delete or Backspace removes the chip
254
- if ((e.key === 'Delete' || e.key === 'Backspace') && this.removable) {
255
- e.preventDefault()
256
- this.handleRemove(e)
257
- }
258
- // Enter can optionally trigger click
259
- else if (e.key === 'Enter') {
260
- e.preventDefault()
261
- const clickEvent = new MouseEvent('click', {
262
- bubbles: true,
263
- cancelable: true,
264
- clientX: 0,
265
- clientY: 0
266
- })
267
- this.handleChipClick(clickEvent)
268
- }
269
- }
270
-
271
- private handleFocus = () => {
272
- this.focused$.next(true)
273
- }
274
-
275
- private handleBlur = () => {
276
- this.focused$.next(false)
277
- }
278
-
279
- protected render(): unknown {
280
- const hasLeadingIcon = this.avatar || this.icon;
281
-
282
- const chipClasses = {
283
- 'chip-container': true,
284
- 'inline-flex': true,
285
- 'items-center': true,
286
- 'gap-2': true,
287
- 'h-8': true, // M3: 32px height
288
- 'min-h-[32px]': true,
289
- 'rounded-full': true,
290
- 'cursor-default': true,
291
- 'transition-all': true,
292
- 'duration-200': true,
293
- 'select-none': true,
294
- 'text-sm': true, // M3: 14px Label Large
295
- 'font-medium': true, // M3: 500 weight
296
- 'relative': true,
297
- 'overflow-hidden': true,
298
-
299
- // M3 Padding: 8px with icon, 16px without (leading), 8px with trailing icon
300
- 'pl-2': hasLeadingIcon, // 8px with avatar/icon
301
- 'pl-4': !hasLeadingIcon, // 16px without
302
- 'pr-2': this.removable, // 8px with remove button
303
- 'pr-4': !this.removable, // 16px without
304
-
305
- // M3 Colors for input chips
306
- 'bg-surface-containerLow': true,
307
- 'text-surface-onVariant': true,
308
- // Input chips are flat (no elevation) per M3
309
-
310
- // Focus-visible state
311
- 'focus-visible:outline': !this.disabled,
312
- 'focus-visible:outline-2': !this.disabled,
313
- 'focus-visible:outline-primary': !this.disabled,
314
- 'focus-visible:outline-offset-2': !this.disabled,
315
-
316
- // Disabled state
317
- 'opacity-38': this.disabled, // M3 disabled opacity
318
- 'cursor-not-allowed': this.disabled
319
- }
320
-
321
- const removeButtonClasses = {
322
- 'size-[18px]': true, // M3: 18px icon size
323
- 'flex': true,
324
- 'items-center': true,
325
- 'justify-center': true,
326
- 'rounded-full': true,
327
- 'transition-all': true,
328
- 'duration-200': true,
329
- 'cursor-pointer': !this.disabled,
330
- '-mr-1': true, // Adjust for visual balance
331
-
332
- // Hover state for remove button
333
- 'hover:bg-surface-containerHighest': !this.disabled,
334
- 'opacity-50': this.disabled
335
- }
336
-
337
- return html`
338
- <div
339
- class=${classMap(chipClasses)}
340
- @click=${this.handleChipClick}
341
- @keydown=${this.handleKeyDown}
342
- @mouseenter=${() => this.chipHover$.next(true)}
343
- @mouseleave=${() => this.chipHover$.next(false)}
344
- @mousedown=${() => this.pressed$.next(true)}
345
- @mouseup=${() => this.pressed$.next(false)}
346
- @focus=${this.handleFocus}
347
- @blur=${this.handleBlur}
348
- role="button"
349
- tabindex=${this.disabled ? '-1' : '0'}
350
- aria-disabled=${this.disabled}
351
- aria-label=${this.value}
352
- >
353
- <!-- Avatar image (if provided) -->
354
- ${this.avatar ? html`
355
- <img
356
- src=${this.avatar}
357
- alt=""
358
- class="avatar-img rounded-full size-5"
359
- />
360
- ` : ''}
361
-
362
- <!-- Icon (if provided and no avatar) -->
363
- ${this.icon && !this.avatar ? html`
364
- <span class="material-symbols-outlined text-[18px] shrink-0">
365
- ${this.icon}
366
- </span>
367
- ` : ''}
368
-
369
- <!-- Chip content -->
370
- <span class="text-sm font-medium leading-5">
371
- <slot></slot>
372
- </span>
373
-
374
- <!-- Remove button (shown by default for input chips) -->
375
- ${this.removable ? html`
376
- <button
377
- class=${classMap(removeButtonClasses)}
378
- @click=${this.handleRemove}
379
- @mouseenter=${() => this.removeHover$.next(true)}
380
- @mouseleave=${() => this.removeHover$.next(false)}
381
- aria-label="Remove"
382
- tabindex="-1"
383
- ?disabled=${this.disabled}
384
- >
385
- <span class="material-symbols-outlined text-[18px]">
386
- close
387
- </span>
388
- </button>
389
- ` : ''}
390
-
391
- <!-- Ripple effects -->
392
- ${this.ripples.map(ripple => html`
393
- <span
394
- class="ripple"
395
- style="left: ${ripple.x}px; top: ${ripple.y}px;"
396
- ></span>
397
- `)}
398
-
399
- <!-- State layer for M3 hover/focus/pressed states -->
400
- <div class="state-layer"></div>
401
- </div>
402
- `
403
- }
404
- }
405
-
406
- declare global {
407
- interface HTMLElementTagNameMap {
408
- 'schmancy-input-chip': SchmancyInputChip
409
- }
410
- }
411
-
412
- export type InputChipClickEvent = { value: string }
413
- export type InputChipRemoveEvent = { value: string }
1
+ // Moved to src/form/fields/chips/ this is a backward-compat re-export shim.
2
+ export * from '../form/fields/chips/input-chip';
@@ -1,266 +1,2 @@
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
- * Suggestion chip component - provides contextual recommendations to users
10
- *
11
- * IMPORTANT: Suggestion chips do NOT have a selected state. They are designed to
12
- * provide suggestions and recommendations that trigger actions when clicked.
13
- * Unlike filter chips, they cannot be toggled on/off.
14
- *
15
- * Pure Schmancy implementation with Tailwind CSS and RxJS state management
16
- */
17
- @customElement('schmancy-suggestion-chip')
18
- export class SchmancySuggestionChip extends SchmancyElement {
19
- static styles = [css`
20
- :host {
21
- display: inline-block;
22
- outline: none;
23
- width: fit-content;
24
- min-width: fit-content;
25
- }
26
-
27
- :host([disabled]) {
28
- pointer-events: none;
29
- }
30
-
31
- .ripple {
32
- position: absolute;
33
- border-radius: 50%;
34
- transform: scale(0);
35
- animation: ripple 600ms linear;
36
- background-color: rgba(0, 0, 0, 0.08);
37
- pointer-events: none;
38
- }
39
-
40
- @keyframes ripple {
41
- to {
42
- transform: scale(4);
43
- opacity: 0;
44
- }
45
- }
46
-
47
- /* State layer for M3 hover/focus/pressed states */
48
- .state-layer {
49
- position: absolute;
50
- inset: 0;
51
- border-radius: inherit;
52
- pointer-events: none;
53
- background-color: currentColor;
54
- opacity: 0;
55
- transition: opacity 200ms ease;
56
- }
57
-
58
- :host(:not([disabled])) button:hover .state-layer {
59
- opacity: 0.08;
60
- }
61
-
62
- :host(:not([disabled])) button:focus-visible .state-layer {
63
- opacity: 0.1;
64
- }
65
-
66
- :host(:not([disabled])) button:active .state-layer {
67
- opacity: 0.1;
68
- }
69
- `];
70
- /** Value identifier for the chip */
71
- @property({ reflect: true }) value = ''
72
-
73
- /** Optional icon name (Material Symbols) */
74
- @property({ reflect: true }) icon = ''
75
-
76
- /** Optional href for navigation */
77
- @property({ reflect: true }) href = ''
78
-
79
- /** Target for navigation (e.g., '_blank') */
80
- @property({ reflect: true }) target = ''
81
-
82
- /** Disable the chip */
83
- @property({ type: Boolean, reflect: true }) disabled = false
84
-
85
- /** Elevated style variant - flat by default per M3 spec */
86
- @property({ type: Boolean, reflect: true }) elevated = false
87
-
88
- // RxJS state streams
89
- private hover$ = new BehaviorSubject<boolean>(false)
90
- private pressed$ = new BehaviorSubject<boolean>(false)
91
- private focused$ = new BehaviorSubject<boolean>(false)
92
-
93
- // UI state - only ripples needed for rendering
94
- @state() private ripples: Array<{ x: number; y: number; id: number }> = []
95
-
96
- protected static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }
97
-
98
- private nextRippleId = 0
99
-
100
- connectedCallback() {
101
- super.connectedCallback()
102
-
103
- // Stream management for future extensions
104
- // Currently, states are handled directly in event handlers
105
- // This pipeline can be extended for more complex state interactions
106
- combineLatest([
107
- this.hover$,
108
- this.pressed$,
109
- this.focused$
110
- ]).pipe(
111
- // States are managed through event handlers directly
112
- // This pipeline is kept for potential future state combinations
113
- takeUntil(this.disconnecting)
114
- ).subscribe()
115
- }
116
-
117
- private handleClick = (e: MouseEvent) => {
118
- if (this.disabled) return
119
-
120
- // Add ripple effect
121
- const button = this.shadowRoot?.querySelector('button')
122
- if (button) {
123
- const rect = button.getBoundingClientRect()
124
- const x = e.clientX - rect.left
125
- const y = e.clientY - rect.top
126
- const id = this.nextRippleId++
127
-
128
- this.ripples = [...this.ripples, { x, y, id }]
129
-
130
- // Remove ripple after animation
131
- setTimeout(() => {
132
- this.ripples = this.ripples.filter(r => r.id !== id)
133
- }, 600)
134
- }
135
-
136
- // Navigate if href is provided
137
- if (this.href) {
138
- if (this.target === '_blank') {
139
- window.open(this.href, '_blank')
140
- } else {
141
- window.location.href = this.href
142
- }
143
- }
144
-
145
- // Dispatch action event
146
- this.dispatchEvent(new CustomEvent('action', {
147
- detail: { value: this.value },
148
- bubbles: true,
149
- composed: true
150
- }))
151
- }
152
-
153
- private handleKeyDown = (e: KeyboardEvent) => {
154
- if (this.disabled) return
155
-
156
- if (e.key === 'Enter' || e.key === ' ') {
157
- e.preventDefault()
158
- this.pressed$.next(true)
159
-
160
- // Simulate click
161
- const clickEvent = new MouseEvent('click', {
162
- bubbles: true,
163
- cancelable: true,
164
- clientX: 0,
165
- clientY: 0
166
- })
167
- this.handleClick(clickEvent)
168
-
169
- setTimeout(() => this.pressed$.next(false), 100)
170
- }
171
- }
172
-
173
- private handleFocus = () => {
174
- this.focused$.next(true)
175
- }
176
-
177
- private handleBlur = () => {
178
- this.focused$.next(false)
179
- }
180
-
181
- protected render(): unknown {
182
- const hasIcon = !!this.icon;
183
-
184
- const classes = {
185
- 'relative': true,
186
- 'inline-flex': true,
187
- 'items-center': true,
188
- 'gap-2': true,
189
- 'h-8': true, // M3: 32px height
190
- 'min-h-[32px]': true,
191
- 'rounded-full': true,
192
- 'cursor-pointer': !this.disabled,
193
- 'transition-all': true,
194
- 'duration-200': true,
195
- 'select-none': true,
196
- 'overflow-hidden': true,
197
-
198
- // M3 Padding: 8px with icon, 16px without (leading), 16px trailing
199
- 'pl-2': hasIcon, // 8px with icon
200
- 'pl-4': !hasIcon, // 16px without icon
201
- 'pr-4': true, // 16px trailing
202
-
203
- // M3 Colors for suggestion chips
204
- 'bg-surface-containerLow': true,
205
- 'text-surface-onVariant': true,
206
-
207
- // Suggestion chips are flat by default (no elevation per M3)
208
-
209
- // Focus state
210
- 'focus-visible:outline': !this.disabled,
211
- 'focus-visible:outline-2': !this.disabled,
212
- 'focus-visible:outline-primary': !this.disabled,
213
- 'focus-visible:outline-offset-2': !this.disabled,
214
-
215
- // Disabled
216
- 'opacity-38': this.disabled, // M3 disabled opacity
217
- 'cursor-not-allowed': this.disabled
218
- }
219
-
220
- return html`
221
- <button
222
- type="button"
223
- class=${classMap(classes)}
224
- ?disabled=${this.disabled}
225
- @click=${this.handleClick}
226
- @keydown=${this.handleKeyDown}
227
- @mouseenter=${() => this.hover$.next(true)}
228
- @mouseleave=${() => this.hover$.next(false)}
229
- @mousedown=${() => this.pressed$.next(true)}
230
- @mouseup=${() => this.pressed$.next(false)}
231
- @focus=${this.handleFocus}
232
- @blur=${this.handleBlur}
233
- tabindex=${this.disabled ? '-1' : '0'}
234
- role="button"
235
- aria-disabled=${this.disabled}
236
- aria-label=${this.value}
237
- >
238
- ${this.icon ? html`
239
- <schmancy-icon class="text-[18px] shrink-0">${this.icon}</schmancy-icon>
240
- ` : ''}
241
- <span class="text-sm font-medium leading-5">
242
- <slot></slot>
243
- </span>
244
-
245
- <!-- Ripple effects -->
246
- ${this.ripples.map(ripple => html`
247
- <span
248
- class="ripple"
249
- style="left: ${ripple.x}px; top: ${ripple.y}px;"
250
- ></span>
251
- `)}
252
-
253
- <!-- State layer for M3 hover/focus/pressed states -->
254
- <div class="state-layer"></div>
255
- </button>
256
- `
257
- }
258
- }
259
-
260
- declare global {
261
- interface HTMLElementTagNameMap {
262
- 'schmancy-suggestion-chip': SchmancySuggestionChip
263
- }
264
- }
265
-
266
- export type SuggestionChipActionEvent = { value: string }
1
+ // Moved to src/form/fields/chips/ this is a backward-compat re-export shim.
2
+ export * from '../form/fields/chips/suggestion-chip';