@mhmo91/schmancy 0.10.34 → 0.10.36

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 (414) hide show
  1. package/custom-elements.json +1144 -1101
  2. package/dist/SchmancyElement-BBzRWB1w.cjs +2 -0
  3. package/dist/SchmancyElement-BBzRWB1w.cjs.map +1 -0
  4. package/dist/SchmancyElement-C3CpdNsi.js +284 -0
  5. package/dist/SchmancyElement-C3CpdNsi.js.map +1 -0
  6. package/dist/agent/schmancy.agent.js +3414 -3263
  7. package/dist/agent/schmancy.agent.js.map +1 -1
  8. package/dist/agent/schmancy.manifest.json +335 -276
  9. package/dist/{area-DviXdbDx.js → area-BA96mwFY.js} +2 -2
  10. package/dist/{area-DviXdbDx.js.map → area-BA96mwFY.js.map} +1 -1
  11. package/dist/{area-CTSTgjlx.cjs → area-DtyQDdOF.cjs} +1 -1
  12. package/dist/{area-CTSTgjlx.cjs.map → area-DtyQDdOF.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-B_jT9Xr7.cjs} +1 -1
  16. package/dist/{audio-Q9oB_cQR.cjs.map → audio-B_jT9Xr7.cjs.map} +1 -1
  17. package/dist/{audio-DFYoaw0M.js → audio-D52h1jAT.js} +1 -1
  18. package/dist/{audio-DFYoaw0M.js.map → audio-D52h1jAT.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-Bts5Jwwr.cjs} +1 -1
  22. package/dist/{autocomplete-DmLXJr7C.cjs.map → autocomplete-Bts5Jwwr.cjs.map} +1 -1
  23. package/dist/{autocomplete-BDvuma6D.js → autocomplete-CI4QJXAN.js} +3 -3
  24. package/dist/{autocomplete-BDvuma6D.js.map → autocomplete-CI4QJXAN.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-I4B1UNMc.cjs +34 -0
  32. package/dist/boat-I4B1UNMc.cjs.map +1 -0
  33. package/dist/boat-_N1x5U_3.js +191 -0
  34. package/dist/boat-_N1x5U_3.js.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-BIUonyPk.cjs} +1 -1
  40. package/dist/{busy-CgzZbGfx.cjs.map → busy-BIUonyPk.cjs.map} +1 -1
  41. package/dist/{busy-DgQ4ux5N.js → busy-CCB3qKnh.js} +2 -2
  42. package/dist/{busy-DgQ4ux5N.js.map → busy-CCB3qKnh.js.map} +1 -1
  43. package/dist/busy.cjs +1 -1
  44. package/dist/busy.js +1 -1
  45. package/dist/{button-qbN1muQ0.js → button-C89bPnHt.js} +2 -2
  46. package/dist/{button-qbN1muQ0.js.map → button-C89bPnHt.js.map} +1 -1
  47. package/dist/{button-DFvR1iXX.cjs → button-CkwQH-g3.cjs} +1 -1
  48. package/dist/{button-DFvR1iXX.cjs.map → button-CkwQH-g3.cjs.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-BO93_oxQ.cjs} +1 -1
  54. package/dist/{card-D_GlwZ5q.cjs.map → card-BO93_oxQ.cjs.map} +1 -1
  55. package/dist/{card-DAbr-7Vy.js → card-CFsCgJKZ.js} +2 -2
  56. package/dist/{card-DAbr-7Vy.js.map → card-CFsCgJKZ.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-Bh7q0djq.js} +2 -2
  60. package/dist/{checkbox-BNORaxMF.js.map → checkbox-Bh7q0djq.js.map} +1 -1
  61. package/dist/{checkbox-BUY_uc_r.cjs → checkbox-CFUBUFtW.cjs} +1 -1
  62. package/dist/{checkbox-BUY_uc_r.cjs.map → checkbox-CFUBUFtW.cjs.map} +1 -1
  63. package/dist/checkbox.cjs +1 -1
  64. package/dist/checkbox.js +1 -1
  65. package/dist/{chips-Dg6Lk6BT.js → chips-6YaoRmeG.js} +145 -122
  66. package/dist/chips-6YaoRmeG.js.map +1 -0
  67. package/dist/{chips-CXZ4dJCK.cjs → chips-BfzpsyV1.cjs} +44 -33
  68. package/dist/chips-BfzpsyV1.cjs.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-BU6WX7d5.js → date-range-CEo_Kjqw.js} +129 -137
  76. package/dist/date-range-CEo_Kjqw.js.map +1 -0
  77. package/dist/{date-range-C-_be3_E.cjs → date-range-N-A249O9.cjs} +25 -19
  78. package/dist/date-range-N-A249O9.cjs.map +1 -0
  79. package/dist/{date-range-inline-7o7xtVIu.js → date-range-inline-BwialV9j.js} +2 -2
  80. package/dist/{date-range-inline-7o7xtVIu.js.map → date-range-inline-BwialV9j.js.map} +1 -1
  81. package/dist/{date-range-inline-DJtUmHKF.cjs → date-range-inline-DFopysWF.cjs} +1 -1
  82. package/dist/{date-range-inline-DJtUmHKF.cjs.map → date-range-inline-DFopysWF.cjs.map} +1 -1
  83. package/dist/date-range-inline.cjs +1 -1
  84. package/dist/date-range-inline.js +1 -1
  85. package/dist/date-range.cjs +1 -1
  86. package/dist/date-range.js +1 -1
  87. package/dist/delay.cjs +1 -1
  88. package/dist/delay.js +2 -2
  89. package/dist/{details-Bs0MyyvF.cjs → details-BLRPV8sY.cjs} +1 -1
  90. package/dist/{details-Bs0MyyvF.cjs.map → details-BLRPV8sY.cjs.map} +1 -1
  91. package/dist/{details-EfbDPVEo.js → details-GtpfI2hA.js} +2 -2
  92. package/dist/{details-EfbDPVEo.js.map → details-GtpfI2hA.js.map} +1 -1
  93. package/dist/details.cjs +1 -1
  94. package/dist/details.js +1 -1
  95. package/dist/{directives-zi1Mm2er.js → directives-C2dXgpCY.js} +13 -6
  96. package/dist/directives-C2dXgpCY.js.map +1 -0
  97. package/dist/{directives-fLwDj6b0.cjs → directives-CvYGSW_a.cjs} +2 -2
  98. package/dist/directives-CvYGSW_a.cjs.map +1 -0
  99. package/dist/directives.cjs +1 -1
  100. package/dist/directives.js +2 -2
  101. package/dist/{divider-CEPfrIwe.js → divider-D0pGX2VB.js} +2 -2
  102. package/dist/{divider-CEPfrIwe.js.map → divider-D0pGX2VB.js.map} +1 -1
  103. package/dist/{divider-CdIsWZrM.cjs → divider-rNsWCvMi.cjs} +1 -1
  104. package/dist/{divider-CdIsWZrM.cjs.map → divider-rNsWCvMi.cjs.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-FcKAzJta.js} +3 -3
  110. package/dist/{expand-g1vqqUp1.js.map → expand-FcKAzJta.js.map} +1 -1
  111. package/dist/{expand--at1k3qo.cjs → expand-tffQHGbZ.cjs} +1 -1
  112. package/dist/{expand--at1k3qo.cjs.map → expand-tffQHGbZ.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-P9HukAm-.cjs → float-CDjgxWyy.cjs} +1 -1
  120. package/dist/{float-P9HukAm-.cjs.map → float-CDjgxWyy.cjs.map} +1 -1
  121. package/dist/{float-DxVzgI9o.js → float-CQ1WEp3M.js} +2 -2
  122. package/dist/{float-DxVzgI9o.js.map → float-CQ1WEp3M.js.map} +1 -1
  123. package/dist/float.cjs +1 -1
  124. package/dist/float.js +1 -1
  125. package/dist/{form-CqLaozHp.js → form-H24puioV.js} +3 -3
  126. package/dist/{form-CqLaozHp.js.map → form-H24puioV.js.map} +1 -1
  127. package/dist/{form-ByYhXe1p.cjs → form-VYhbbir3.cjs} +1 -1
  128. package/dist/{form-ByYhXe1p.cjs.map → form-VYhbbir3.cjs.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-DYtiRU5V.cjs → icons-B_a1HStW.cjs} +1 -1
  136. package/dist/{icons-DYtiRU5V.cjs.map → icons-B_a1HStW.cjs.map} +1 -1
  137. package/dist/{icons-CkphcMp6.js → icons-DBxfN91B.js} +2 -2
  138. package/dist/{icons-CkphcMp6.js.map → icons-DBxfN91B.js.map} +1 -1
  139. package/dist/icons.cjs +1 -1
  140. package/dist/icons.js +1 -1
  141. package/dist/{iframe-CjqJksl8.js → iframe-BDVElN8z.js} +2 -2
  142. package/dist/{iframe-CjqJksl8.js.map → iframe-BDVElN8z.js.map} +1 -1
  143. package/dist/{iframe-C3trkP8q.cjs → iframe-CG-z9qev.cjs} +1 -1
  144. package/dist/{iframe-C3trkP8q.cjs.map → iframe-CG-z9qev.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-DuavpwNL.cjs → input-B14Nn6xD.cjs} +1 -1
  150. package/dist/{input-DuavpwNL.cjs.map → input-B14Nn6xD.cjs.map} +1 -1
  151. package/dist/{input-CG51zDVh.js → input-Bt_o4sYo.js} +2 -2
  152. package/dist/{input-CG51zDVh.js.map → input-Bt_o4sYo.js.map} +1 -1
  153. package/dist/{input-chip-C6Lq1927.js → input-chip-DEqO0DXc.js} +2 -2
  154. package/dist/input-chip-DEqO0DXc.js.map +1 -0
  155. package/dist/{input-chip-57tgNXKT.cjs → input-chip-ugYu9Fn9.cjs} +1 -1
  156. package/dist/input-chip-ugYu9Fn9.cjs.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-D4IOwx7p.js → layout-BJ_43VrH.js} +1 -1
  164. package/dist/{layout-D4IOwx7p.js.map → layout-BJ_43VrH.js.map} +1 -1
  165. package/dist/{layout-6ipbiWTl.cjs → layout-DF9ZaQ-b.cjs} +1 -1
  166. package/dist/{layout-6ipbiWTl.cjs.map → layout-DF9ZaQ-b.cjs.map} +1 -1
  167. package/dist/layout.cjs +1 -1
  168. package/dist/layout.js +2 -2
  169. package/dist/{lightbox-H8pVWGMX.cjs → lightbox-B47Zoqv-.cjs} +1 -1
  170. package/dist/{lightbox-H8pVWGMX.cjs.map → lightbox-B47Zoqv-.cjs.map} +1 -1
  171. package/dist/{lightbox-CsyO2XSr.js → lightbox-ZmuoBBFT.js} +2 -2
  172. package/dist/{lightbox-CsyO2XSr.js.map → lightbox-ZmuoBBFT.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-C47xzld_.js} +2 -2
  176. package/dist/{list-BAwH0pQW.js.map → list-C47xzld_.js.map} +1 -1
  177. package/dist/{list-Bs9m8kw7.cjs → list-CaSWrlG2.cjs} +1 -1
  178. package/dist/{list-Bs9m8kw7.cjs.map → list-CaSWrlG2.cjs.map} +1 -1
  179. package/dist/list.cjs +1 -1
  180. package/dist/list.js +1 -1
  181. package/dist/{menu-tQVARVaC.js → menu-8RObM6Ie.js} +3 -3
  182. package/dist/{menu-tQVARVaC.js.map → menu-8RObM6Ie.js.map} +1 -1
  183. package/dist/{menu-BMcGzj1h.cjs → menu-Jpsy85SX.cjs} +1 -1
  184. package/dist/{menu-BMcGzj1h.cjs.map → menu-Jpsy85SX.cjs.map} +1 -1
  185. package/dist/menu.cjs +1 -1
  186. package/dist/menu.js +1 -1
  187. package/dist/{mixins-CGXSzZc7.cjs → mixins-DPdzC9ZH.cjs} +1 -1
  188. package/dist/{mixins-CGXSzZc7.cjs.map → mixins-DPdzC9ZH.cjs.map} +1 -1
  189. package/dist/{mixins-Bp0wIHg2.js → mixins-DTzfFVyv.js} +1 -1
  190. package/dist/{mixins-Bp0wIHg2.js.map → mixins-DTzfFVyv.js.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-Ccktcj9H.js} +4 -4
  200. package/dist/{notification-D1tX2nx5.js.map → notification-Ccktcj9H.js.map} +1 -1
  201. package/dist/{notification-Bz00zdpV.cjs → notification-DSkB-sn0.cjs} +1 -1
  202. package/dist/{notification-Bz00zdpV.cjs.map → notification-DSkB-sn0.cjs.map} +1 -1
  203. package/dist/notification.cjs +1 -1
  204. package/dist/notification.js +1 -1
  205. package/dist/{option-BnybLEDO.cjs → option-0aNiVB3Q.cjs} +1 -1
  206. package/dist/{option-BnybLEDO.cjs.map → option-0aNiVB3Q.cjs.map} +1 -1
  207. package/dist/{option-BpGV8Apj.js → option-CkMxwBqU.js} +2 -2
  208. package/dist/{option-BpGV8Apj.js.map → option-CkMxwBqU.js.map} +1 -1
  209. package/dist/option.cjs +1 -1
  210. package/dist/option.js +1 -1
  211. package/dist/{overlay-UQR2Dy3u.cjs → overlay-BS-ta-zq.cjs} +5 -5
  212. package/dist/overlay-BS-ta-zq.cjs.map +1 -0
  213. package/dist/{overlay-BpNhd74N.js → overlay-H3Wt_dgQ.js} +108 -108
  214. package/dist/overlay-H3Wt_dgQ.js.map +1 -0
  215. package/dist/overlay.cjs +1 -1
  216. package/dist/{overlay.confirm-body-CVDtVk5X.cjs → overlay.confirm-body-CR9xaqOE.cjs} +1 -1
  217. package/dist/{overlay.confirm-body-CVDtVk5X.cjs.map → overlay.confirm-body-CR9xaqOE.cjs.map} +1 -1
  218. package/dist/{overlay.confirm-body-BHcXu5Wk.js → overlay.confirm-body-Dxn_wNm3.js} +6 -6
  219. package/dist/{overlay.confirm-body-BHcXu5Wk.js.map → overlay.confirm-body-Dxn_wNm3.js.map} +1 -1
  220. package/dist/overlay.js +3 -3
  221. package/dist/{overlay.service-DTE6NwIM.js → overlay.service-C46kOtUi.js} +2 -2
  222. package/dist/{overlay.service-DTE6NwIM.js.map → overlay.service-C46kOtUi.js.map} +1 -1
  223. package/dist/{overlay.service-C8RsQzgM.cjs → overlay.service-DEj3rfRr.cjs} +1 -1
  224. package/dist/{overlay.service-C8RsQzgM.cjs.map → overlay.service-DEj3rfRr.cjs.map} +1 -1
  225. package/dist/{progress-CAKsxp29.js → progress-BK7gSq8j.js} +2 -2
  226. package/dist/{progress-CAKsxp29.js.map → progress-BK7gSq8j.js.map} +1 -1
  227. package/dist/{progress-gbIALDRs.cjs → progress-zs18GR6C.cjs} +1 -1
  228. package/dist/{progress-gbIALDRs.cjs.map → progress-zs18GR6C.cjs.map} +1 -1
  229. package/dist/progress.cjs +1 -1
  230. package/dist/progress.js +1 -1
  231. package/dist/{radio-group-otyvZvUk.js → radio-group-1HCpzRUB.js} +2 -2
  232. package/dist/{radio-group-otyvZvUk.js.map → radio-group-1HCpzRUB.js.map} +1 -1
  233. package/dist/{radio-group-CfJ5DtI4.cjs → radio-group-DbYlyPc-.cjs} +1 -1
  234. package/dist/{radio-group-CfJ5DtI4.cjs.map → radio-group-DbYlyPc-.cjs.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-B-SSmUDe.cjs} +1 -1
  240. package/dist/{select-81jniVTs.cjs.map → select-B-SSmUDe.cjs.map} +1 -1
  241. package/dist/{select-9vXx1fhr.js → select-CEyhNtZ2.js} +3 -3
  242. package/dist/{select-9vXx1fhr.js.map → select-CEyhNtZ2.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 +6 -7
  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 +6 -7
  253. package/dist/skills/schmancy/boat.md +21 -15
  254. package/dist/skills/schmancy/fab.md +75 -0
  255. package/dist/skills/schmancy/theme.md +1 -1
  256. package/dist/skills/theme.md +1 -1
  257. package/dist/slider.cjs +1 -1
  258. package/dist/slider.js +2 -2
  259. package/dist/{sound.service-D3ZSq1Kj.js → sound.service-DO4SmUUT.js} +1 -1
  260. package/dist/{sound.service-D3ZSq1Kj.js.map → sound.service-DO4SmUUT.js.map} +1 -1
  261. package/dist/{sound.service-CmIw63aM.cjs → sound.service-G_8GV_6L.cjs} +1 -1
  262. package/dist/{sound.service-CmIw63aM.cjs.map → sound.service-G_8GV_6L.cjs.map} +1 -1
  263. package/dist/{splash-screen-BOjrmGLk.js → splash-screen-B1mM4_xz.js} +2 -2
  264. package/dist/{splash-screen-BOjrmGLk.js.map → splash-screen-B1mM4_xz.js.map} +1 -1
  265. package/dist/{splash-screen-C5KAWXvA.cjs → splash-screen-cbz4bxjB.cjs} +1 -1
  266. package/dist/{splash-screen-C5KAWXvA.cjs.map → splash-screen-cbz4bxjB.cjs.map} +1 -1
  267. package/dist/splash-screen.cjs +1 -1
  268. package/dist/splash-screen.js +1 -1
  269. package/dist/{src-Bm1vop0l.cjs → src-czeiuT1m.cjs} +1 -1
  270. package/dist/{src-Bm1vop0l.cjs.map → src-czeiuT1m.cjs.map} +1 -1
  271. package/dist/{src-DoOhMBtI.js → src-tncsWsTY.js} +36 -35
  272. package/dist/{src-DoOhMBtI.js.map → src-tncsWsTY.js.map} +1 -1
  273. package/dist/{state-Cex3rmx2.cjs → state-Cx0aoL5e.cjs} +1 -1
  274. package/dist/{state-Cex3rmx2.cjs.map → state-Cx0aoL5e.cjs.map} +1 -1
  275. package/dist/{state-CWBRTSvE.js → state-DJDp3N7J.js} +1 -1
  276. package/dist/{state-CWBRTSvE.js.map → state-DJDp3N7J.js.map} +1 -1
  277. package/dist/state.cjs +1 -1
  278. package/dist/state.js +2 -2
  279. package/dist/steps.cjs +1 -1
  280. package/dist/steps.js +2 -2
  281. package/dist/{surface-PfiejLuw.cjs → surface-C3cxTcJD.cjs} +1 -1
  282. package/dist/{surface-PfiejLuw.cjs.map → surface-C3cxTcJD.cjs.map} +1 -1
  283. package/dist/{surface-9S5scTsD.js → surface-CYBl8_a3.js} +2 -2
  284. package/dist/{surface-9S5scTsD.js.map → surface-CYBl8_a3.js.map} +1 -1
  285. package/dist/surface.cjs +1 -1
  286. package/dist/surface.js +1 -1
  287. package/dist/switch.cjs +1 -1
  288. package/dist/switch.js +2 -2
  289. package/dist/table.cjs +1 -1
  290. package/dist/table.js +2 -2
  291. package/dist/{tabs-BBOjAmgG.js → tabs-DHy93Q3N.js} +2 -2
  292. package/dist/{tabs-BBOjAmgG.js.map → tabs-DHy93Q3N.js.map} +1 -1
  293. package/dist/{tabs-uYvb1P06.cjs → tabs-ORQ_Zd43.cjs} +1 -1
  294. package/dist/{tabs-uYvb1P06.cjs.map → tabs-ORQ_Zd43.cjs.map} +1 -1
  295. package/dist/tabs.cjs +1 -1
  296. package/dist/tabs.js +1 -1
  297. package/dist/teleport.cjs +1 -1
  298. package/dist/teleport.js +1 -1
  299. package/dist/{textarea-YPHX4g7Y.cjs → textarea-CEUaDURR.cjs} +1 -1
  300. package/dist/{textarea-YPHX4g7Y.cjs.map → textarea-CEUaDURR.cjs.map} +1 -1
  301. package/dist/{textarea-QzSj8Dkl.js → textarea-DHIMt-ly.js} +2 -2
  302. package/dist/{textarea-QzSj8Dkl.js.map → textarea-DHIMt-ly.js.map} +1 -1
  303. package/dist/textarea.cjs +1 -1
  304. package/dist/textarea.js +1 -1
  305. package/dist/theme-CJpjkqHr.cjs +181 -0
  306. package/dist/{theme-iKUaS9JB.cjs.map → theme-CJpjkqHr.cjs.map} +1 -1
  307. package/dist/{theme-C2Mp-VGt.js → theme-CgI9PRco.js} +6 -5
  308. package/dist/{theme-C2Mp-VGt.js.map → theme-CgI9PRco.js.map} +1 -1
  309. package/dist/{theme-button-CJmhxfMe.cjs → theme-button--FuBkuVr.cjs} +1 -1
  310. package/dist/{theme-button-CJmhxfMe.cjs.map → theme-button--FuBkuVr.cjs.map} +1 -1
  311. package/dist/{theme-button-DGWAXhzd.js → theme-button-D-FXb3oO.js} +2 -2
  312. package/dist/{theme-button-DGWAXhzd.js.map → theme-button-D-FXb3oO.js.map} +1 -1
  313. package/dist/theme-button.cjs +1 -1
  314. package/dist/theme-button.js +1 -1
  315. package/dist/theme.cjs +1 -1
  316. package/dist/theme.js +3 -3
  317. package/dist/{theme.service-hc4N-1Oz.js → theme.service-BfTK1Wtl.js} +1 -1
  318. package/dist/{theme.service-hc4N-1Oz.js.map → theme.service-BfTK1Wtl.js.map} +1 -1
  319. package/dist/{theme.service-p61RsJBF.cjs → theme.service-Dg7LO0Qz.cjs} +1 -1
  320. package/dist/{theme.service-p61RsJBF.cjs.map → theme.service-Dg7LO0Qz.cjs.map} +1 -1
  321. package/dist/tree.cjs +1 -1
  322. package/dist/tree.js +2 -2
  323. package/dist/{typography-DwV0sqht.js → typography-BEGLfHwz.js} +2 -2
  324. package/dist/{typography-DwV0sqht.js.map → typography-BEGLfHwz.js.map} +1 -1
  325. package/dist/{typography-Bdt8RlX2.cjs → typography-CxA3sx9B.cjs} +1 -1
  326. package/dist/{typography-Bdt8RlX2.cjs.map → typography-CxA3sx9B.cjs.map} +1 -1
  327. package/dist/typography.cjs +1 -1
  328. package/dist/typography.js +1 -1
  329. package/dist/visually-hidden.cjs +1 -1
  330. package/dist/visually-hidden.js +2 -2
  331. package/dist/{window-n4jN60B_.js → window-B_n4P9az.js} +3 -3
  332. package/dist/{window-n4jN60B_.js.map → window-B_n4P9az.js.map} +1 -1
  333. package/dist/{window-D2WfvNng.cjs → window-Vl1u1-EG.cjs} +1 -1
  334. package/dist/{window-D2WfvNng.cjs.map → window-Vl1u1-EG.cjs.map} +1 -1
  335. package/dist/window.cjs +1 -1
  336. package/dist/window.js +1 -1
  337. package/package.json +1 -1
  338. package/skills/schmancy/INDEX.md +1 -1
  339. package/skills/schmancy/SKILL.md +6 -7
  340. package/skills/schmancy/boat.md +21 -15
  341. package/skills/schmancy/fab.md +75 -0
  342. package/skills/schmancy/theme.md +1 -1
  343. package/src/CLAUDE.md +22 -16
  344. package/src/boat/boat.test.ts +130 -0
  345. package/src/boat/boat.ts +192 -186
  346. package/src/button/icon-button.ts +18 -30
  347. package/src/chips/assist-chip.ts +2 -263
  348. package/src/chips/chips.ts +2 -259
  349. package/src/chips/filter-chip.ts +2 -255
  350. package/src/chips/index.ts +2 -5
  351. package/src/chips/input-chip.ts +2 -413
  352. package/src/chips/suggestion-chip.ts +2 -266
  353. package/src/directives/fill.ts +28 -5
  354. package/src/fab/fab.test.ts +101 -0
  355. package/src/fab/fab.ts +226 -0
  356. package/src/fab/index.ts +1 -0
  357. package/src/form/fields/chips/assist-chip.ts +263 -0
  358. package/src/form/fields/chips/chips.ts +234 -0
  359. package/src/form/fields/chips/filter-chip.ts +255 -0
  360. package/src/form/fields/chips/index.ts +5 -0
  361. package/src/form/fields/chips/input-chip.ts +413 -0
  362. package/src/form/fields/chips/suggestion-chip.ts +266 -0
  363. package/src/form/fields/date-range/date-range.test.ts +44 -0
  364. package/src/form/fields/date-range/date-range.ts +103 -97
  365. package/src/form/fields/index.ts +1 -0
  366. package/src/index.ts +2 -1
  367. package/src/overlay/overlay.animations.ts +2 -3
  368. package/src/overlay/overlay.component.ts +8 -4
  369. package/src/overlay/overlay.types.ts +14 -2
  370. package/src/theme/theme.component.ts +1 -0
  371. package/src/theme/theme.style.css +3 -0
  372. package/types/src/boat/boat.d.ts +40 -25
  373. package/types/src/boat/boat.test.d.ts +2 -0
  374. package/types/src/button/icon-button.d.ts +3 -2
  375. package/types/src/chips/assist-chip.d.ts +1 -47
  376. package/types/src/chips/chips.d.ts +1 -43
  377. package/types/src/chips/filter-chip.d.ts +1 -67
  378. package/types/src/chips/index.d.ts +1 -5
  379. package/types/src/chips/input-chip.d.ts +1 -82
  380. package/types/src/chips/suggestion-chip.d.ts +1 -52
  381. package/types/src/fab/fab.d.ts +80 -0
  382. package/types/src/fab/fab.test.d.ts +2 -0
  383. package/types/src/fab/index.d.ts +1 -0
  384. package/types/src/form/fields/chips/assist-chip.d.ts +47 -0
  385. package/types/src/form/fields/chips/chips.d.ts +35 -0
  386. package/types/src/form/fields/chips/filter-chip.d.ts +67 -0
  387. package/types/src/form/fields/chips/index.d.ts +5 -0
  388. package/types/src/form/fields/chips/input-chip.d.ts +82 -0
  389. package/types/src/form/fields/chips/suggestion-chip.d.ts +52 -0
  390. package/types/src/form/fields/date-range/date-range.d.ts +5 -10
  391. package/types/src/form/fields/index.d.ts +1 -0
  392. package/types/src/index.d.ts +2 -1
  393. package/types/src/overlay/overlay.component.d.ts +1 -0
  394. package/types/src/overlay/overlay.types.d.ts +12 -2
  395. package/types/src/theme/theme.component.d.ts +1 -0
  396. package/dist/SchmancyElement-CA0Wqt8m.js +0 -284
  397. package/dist/SchmancyElement-CA0Wqt8m.js.map +0 -1
  398. package/dist/SchmancyElement-CYIif26I.cjs +0 -2
  399. package/dist/SchmancyElement-CYIif26I.cjs.map +0 -1
  400. package/dist/boat-BgpWcLnV.cjs +0 -38
  401. package/dist/boat-BgpWcLnV.cjs.map +0 -1
  402. package/dist/boat-Y5UMiJCV.js +0 -216
  403. package/dist/boat-Y5UMiJCV.js.map +0 -1
  404. package/dist/chips-CXZ4dJCK.cjs.map +0 -1
  405. package/dist/chips-Dg6Lk6BT.js.map +0 -1
  406. package/dist/date-range-BU6WX7d5.js.map +0 -1
  407. package/dist/date-range-C-_be3_E.cjs.map +0 -1
  408. package/dist/directives-fLwDj6b0.cjs.map +0 -1
  409. package/dist/directives-zi1Mm2er.js.map +0 -1
  410. package/dist/input-chip-57tgNXKT.cjs.map +0 -1
  411. package/dist/input-chip-C6Lq1927.js.map +0 -1
  412. package/dist/overlay-BpNhd74N.js.map +0 -1
  413. package/dist/overlay-UQR2Dy3u.cjs.map +0 -1
  414. package/dist/theme-iKUaS9JB.cjs +0 -181
@@ -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 }
@@ -0,0 +1,234 @@
1
+ import { SchmancyFormField } from '@mixins/formField.mixin'
2
+ import { css, html, nothing, PropertyValues } from 'lit'
3
+ import { customElement, property, queryAssignedElements } from 'lit/decorators.js'
4
+ import { ifDefined } from 'lit/directives/if-defined.js'
5
+ import { when } from 'lit/directives/when.js'
6
+ import { BehaviorSubject, combineLatest } from 'rxjs'
7
+ import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators'
8
+ import { fullWidth } from '../../../directives/layout'
9
+ import type { FilterChipChangeEvent as SchmancyChipChangeEvent } from './filter-chip'
10
+ import { SchmancyFilterChip as SchmancyChip } from './filter-chip'
11
+
12
+ export type SchmancyChipsChangeEvent = CustomEvent<{ value: string | string[] }>
13
+
14
+ @customElement('schmancy-chips')
15
+ export default class SchmancyChips extends SchmancyFormField(css`
16
+ :host {
17
+ display: block;
18
+ height: fit-content;
19
+ width: fit-content;
20
+ }
21
+ `) {
22
+ // FACE wiring (formAssociated, internals, attachInternals) comes from
23
+ // SchmancyFormField. Same for: name, required, disabled, validationMessage,
24
+ // validateOn, touched/dirty/pristine/submitted, markTouched/markSubmitted,
25
+ // formResetCallback, formDisabledCallback, FIELD_CONNECT_EVENT dispatch,
26
+ // emitChange(), checkValidity(), reportValidity(), setCustomValidity().
27
+
28
+ /** Whether multiple chips can be selected simultaneously. */
29
+ @property({ type: Boolean, reflect: true })
30
+ multi: boolean = false
31
+
32
+ // Override `value` with the chips-specific type and a custom getter/setter
33
+ // pair backed by reactive subjects.
34
+ @property({ reflect: false })
35
+ override get value(): string | string[] {
36
+ return this.multi
37
+ ? (this.values$?.value ?? [])
38
+ : (this.value$?.value ?? '')
39
+ }
40
+ override set value(v: string | string[]) {
41
+ const old = this.value
42
+ if (this.multi) {
43
+ const arr = Array.isArray(v)
44
+ ? v
45
+ : v ? String(v).split(',').map(s => s.trim()).filter(Boolean) : []
46
+ this.values$?.next(arr)
47
+ } else {
48
+ this.value$?.next(Array.isArray(v) ? (v[0] ?? '') : String(v ?? ''))
49
+ }
50
+ this.requestUpdate('value', old)
51
+ }
52
+
53
+ /** Typed convenience alias for multi-mode consumers. */
54
+ get values(): string[] {
55
+ return [...(this.values$?.value ?? [])]
56
+ }
57
+ set values(v: string[]) {
58
+ this.values$?.next(Array.isArray(v) ? [...v] : [])
59
+ }
60
+
61
+ @property({ type: Boolean, reflect: true })
62
+ wrap: boolean = false
63
+
64
+ @property({ type: String, reflect: true })
65
+ justify: 'start' | 'center' | 'end' = 'start'
66
+
67
+ @queryAssignedElements({
68
+ selector:
69
+ 'schmancy-chip, schmancy-filter-chip, schmancy-assist-chip, schmancy-input-chip, schmancy-suggestion-chip',
70
+ flatten: true,
71
+ })
72
+ chips!: (SchmancyChip | HTMLElement)[]
73
+
74
+ // Two internal streams — one for single mode, one for multi mode.
75
+ private value$ = new BehaviorSubject<string>('')
76
+ private values$ = new BehaviorSubject<string[]>([])
77
+
78
+ protected override willUpdate(changedProps: PropertyValues): void {
79
+ super.willUpdate(changedProps)
80
+ // super handles the string path; fix the array path for multi mode.
81
+ if (changedProps.has('value') && Array.isArray(this.value) && this.name) {
82
+ const fd = new FormData()
83
+ this.value.forEach(v => fd.append(this.name, v))
84
+ this.internals?.setFormValue(fd)
85
+ }
86
+ }
87
+
88
+ override checkValidity(): boolean {
89
+ if (this.required && Array.isArray(this.value) && this.value.length === 0) {
90
+ const msg = this.errorMessages?.valueMissing ?? 'This field is required'
91
+ this.internals?.setValidity({ valueMissing: true }, msg)
92
+ if (this.submitted || this.dirty || this.touched || this.validateOn === 'always') {
93
+ this.error = true
94
+ this.validationMessage = msg
95
+ }
96
+ return false
97
+ }
98
+ return super.checkValidity()
99
+ }
100
+
101
+ override connectedCallback() {
102
+ super.connectedCallback()
103
+
104
+ // Sync BehaviorSubjects with whatever value was set before connection.
105
+ if (this.multi) {
106
+ const cur = this.value
107
+ this.values$.next(Array.isArray(cur) ? cur : [])
108
+ } else {
109
+ const cur = this.value
110
+ this.value$.next(Array.isArray(cur) ? (cur[0] ?? '') : String(cur ?? ''))
111
+ }
112
+
113
+ combineLatest([
114
+ this.value$.pipe(distinctUntilChanged()),
115
+ this.values$.pipe(
116
+ distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i])),
117
+ ),
118
+ ])
119
+ .pipe(
120
+ debounceTime(0),
121
+ takeUntil(this.disconnecting),
122
+ )
123
+ .subscribe(([value, values]) => {
124
+ this.updateChipStates(value, values)
125
+ })
126
+ }
127
+
128
+ private updateChipStates(value: string, values: string[]) {
129
+ if (!this.chips) return
130
+
131
+ this.chips.forEach(chip => {
132
+ if ('value' in chip && 'selected' in chip) {
133
+ const filterChip = chip as SchmancyChip
134
+ if (this.multi) {
135
+ filterChip.selected = values.length > 0 && values.includes(filterChip.value)
136
+ } else {
137
+ filterChip.selected = value !== '' && value === filterChip.value
138
+ }
139
+ }
140
+ })
141
+ }
142
+
143
+ async change(e: CustomEvent<SchmancyChipChangeEvent>) {
144
+ e.preventDefault()
145
+ e.stopPropagation()
146
+
147
+ const { value: chipValue, selected } = e.detail
148
+
149
+ if (this.multi) {
150
+ const old = this.value
151
+ if (selected) {
152
+ if (!this.values$.value.includes(chipValue)) {
153
+ this.values$.next([...this.values$.value, chipValue])
154
+ }
155
+ } else {
156
+ this.values$.next(this.values$.value.filter(v => v !== chipValue))
157
+ }
158
+ this.requestUpdate('value', old)
159
+ } else {
160
+ const old = this.value
161
+ if (selected) {
162
+ this.value$.next(chipValue)
163
+ } else if (!this.required) {
164
+ this.value$.next('')
165
+ } else {
166
+ // Required single-mode: ignore deselection attempt.
167
+ return
168
+ }
169
+ this.requestUpdate('value', old)
170
+ }
171
+
172
+ this.emitChange({ value: this.multi ? this.values$.value : this.value$.value })
173
+ }
174
+
175
+ override resetForm(): void {
176
+ super.resetForm()
177
+ this.value$.next('')
178
+ this.values$.next([])
179
+ }
180
+
181
+ protected firstUpdated(_changedProperties: PropertyValues): void {
182
+ super.firstUpdated(_changedProperties)
183
+ this.updateChipStates(this.value$.value, this.values$.value)
184
+ }
185
+
186
+ protected render(): unknown {
187
+ const classes = {
188
+ 'flex flex-nowrap justify-center gap-2': true,
189
+ 'flex-wrap': this.wrap,
190
+ 'justify-center': this.justify === 'center',
191
+ }
192
+ const wrapperClasses = {
193
+ 'rounded-lg transition-all duration-200': true,
194
+ 'outline outline-2 outline-offset-4 outline-error-default': this.error,
195
+ }
196
+ return html`
197
+ <div class="${this.classMap(wrapperClasses)}">
198
+ <schmancy-scroll
199
+ hide
200
+ .direction=${this.wrap ? 'vertical' : 'horizontal'}
201
+ class="${this.classMap(classes)}"
202
+ ${fullWidth()}
203
+ @change=${this.change}
204
+ >
205
+ <slot
206
+ @slotchange=${() => {
207
+ this.updateChipStates(this.value$.value, this.values$.value)
208
+ }}
209
+ ></slot>
210
+ </schmancy-scroll>
211
+ </div>
212
+
213
+ ${when(
214
+ this.hint || (this.error && this.validationMessage),
215
+ () => html`
216
+ <div
217
+ id="hint-${this.id}"
218
+ class="mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}"
219
+ role=${ifDefined(this.error ? 'alert' : undefined)}
220
+ aria-live="polite"
221
+ >
222
+ ${this.error && this.validationMessage ? this.validationMessage : this.hint}
223
+ </div>
224
+ `,
225
+ () => nothing,
226
+ )}`
227
+ }
228
+ }
229
+
230
+ declare global {
231
+ interface HTMLElementTagNameMap {
232
+ 'schmancy-chips': SchmancyChips
233
+ }
234
+ }