@mhmo91/schmancy 0.10.37 → 0.10.39

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 (558) hide show
  1. package/custom-elements.json +39 -0
  2. package/dist/{SchmancyElement-CDT2q1lA.js → SchmancyElement-BNnyBOwk.js} +9 -7
  3. package/dist/{SchmancyElement-CDT2q1lA.js.map → SchmancyElement-BNnyBOwk.js.map} +1 -1
  4. package/dist/{SchmancyElement-BHfQg3Tj.cjs → SchmancyElement-C41uPa6l.cjs} +2 -2
  5. package/dist/{SchmancyElement-BHfQg3Tj.cjs.map → SchmancyElement-C41uPa6l.cjs.map} +1 -1
  6. package/dist/agent/schmancy.agent.js +2334 -2297
  7. package/dist/agent/schmancy.agent.js.map +1 -1
  8. package/dist/area-2FrTZI_T.cjs +21 -0
  9. package/dist/area-2FrTZI_T.cjs.map +1 -0
  10. package/dist/{area-KtULlxuA.js → area-KVDzhT4s.js} +4 -4
  11. package/dist/area-KVDzhT4s.js.map +1 -0
  12. package/dist/area.cjs +1 -1
  13. package/dist/area.js +2 -2
  14. package/dist/{audio-zIJVTo_V.js → audio-D3gnp15Y.js} +1 -1
  15. package/dist/{audio-zIJVTo_V.js.map → audio-D3gnp15Y.js.map} +1 -1
  16. package/dist/{audio-CUMAv9D_.cjs → audio-EaD0Ggfh.cjs} +1 -1
  17. package/dist/{audio-CUMAv9D_.cjs.map → audio-EaD0Ggfh.cjs.map} +1 -1
  18. package/dist/audio.cjs +1 -1
  19. package/dist/audio.js +2 -2
  20. package/dist/autocomplete-DMmxsvUe.cjs +115 -0
  21. package/dist/autocomplete-DMmxsvUe.cjs.map +1 -0
  22. package/dist/{autocomplete-DIScyo8Q.js → autocomplete-DWiEqlQf.js} +96 -96
  23. package/dist/autocomplete-DWiEqlQf.js.map +1 -0
  24. package/dist/autocomplete.cjs +1 -1
  25. package/dist/autocomplete.js +1 -1
  26. package/dist/avatar.cjs +1 -1
  27. package/dist/avatar.js +3 -3
  28. package/dist/badge.cjs +1 -1
  29. package/dist/badge.js +1 -1
  30. package/dist/{boat-OBZ77exO.cjs → boat-DsFJNfPH.cjs} +1 -1
  31. package/dist/{boat-OBZ77exO.cjs.map → boat-DsFJNfPH.cjs.map} +1 -1
  32. package/dist/{boat-BHPqSqJd.js → boat-fqodYt2n.js} +4 -4
  33. package/dist/{boat-BHPqSqJd.js.map → boat-fqodYt2n.js.map} +1 -1
  34. package/dist/boat.cjs +1 -1
  35. package/dist/boat.js +1 -1
  36. package/dist/breadcrumb.cjs +3 -3
  37. package/dist/breadcrumb.cjs.map +1 -1
  38. package/dist/breadcrumb.js +4 -4
  39. package/dist/breadcrumb.js.map +1 -1
  40. package/dist/{busy-BJNsKSCM.cjs → busy-Cj_PV7oC.cjs} +1 -1
  41. package/dist/{busy-BJNsKSCM.cjs.map → busy-Cj_PV7oC.cjs.map} +1 -1
  42. package/dist/{busy-Dut78y4L.js → busy-enYCTssB.js} +2 -2
  43. package/dist/{busy-Dut78y4L.js.map → busy-enYCTssB.js.map} +1 -1
  44. package/dist/busy.cjs +1 -1
  45. package/dist/busy.js +1 -1
  46. package/dist/button-B9RfBt-n.cjs +63 -0
  47. package/dist/button-B9RfBt-n.cjs.map +1 -0
  48. package/dist/{button-kcpPQavY.js → button-D6LJC-HC.js} +11 -9
  49. package/dist/button-D6LJC-HC.js.map +1 -0
  50. package/dist/button.cjs +7 -6
  51. package/dist/button.cjs.map +1 -1
  52. package/dist/button.js +18 -16
  53. package/dist/button.js.map +1 -1
  54. package/dist/{card-DxSKxCid.js → card-BHTz1GwB.js} +16 -16
  55. package/dist/card-BHTz1GwB.js.map +1 -0
  56. package/dist/{card-BLxPLqdQ.cjs → card-ThG_ZaQE.cjs} +3 -3
  57. package/dist/card-ThG_ZaQE.cjs.map +1 -0
  58. package/dist/card.cjs +1 -1
  59. package/dist/card.js +1 -1
  60. package/dist/{checkbox-BCLkhp5G.cjs → checkbox-C4zeib84.cjs} +2 -2
  61. package/dist/{checkbox-BCLkhp5G.cjs.map → checkbox-C4zeib84.cjs.map} +1 -1
  62. package/dist/{checkbox-B1wiM3Dv.js → checkbox-Ce0DlAdW.js} +6 -6
  63. package/dist/{checkbox-B1wiM3Dv.js.map → checkbox-Ce0DlAdW.js.map} +1 -1
  64. package/dist/checkbox.cjs +1 -1
  65. package/dist/checkbox.js +1 -1
  66. package/dist/{chips-vWmwqQed.js → chips-BoZSpSh_.js} +21 -19
  67. package/dist/chips-BoZSpSh_.js.map +1 -0
  68. package/dist/{chips-C9dS1WKn.cjs → chips-wfJ7YtWv.cjs} +4 -3
  69. package/dist/chips-wfJ7YtWv.cjs.map +1 -0
  70. package/dist/chips.cjs +1 -1
  71. package/dist/chips.js +2 -2
  72. package/dist/connectivity.cjs +1 -1
  73. package/dist/connectivity.js +3 -3
  74. package/dist/content-drawer.cjs +1 -1
  75. package/dist/content-drawer.js +1 -1
  76. package/dist/cursor-glow-Ah7VXSj7.js.map +1 -1
  77. package/dist/cursor-glow-Bulq-38P.cjs.map +1 -1
  78. package/dist/{date-range-BV6HuvLw.cjs → date-range-BHSzlwSL.cjs} +2 -2
  79. package/dist/date-range-BHSzlwSL.cjs.map +1 -0
  80. package/dist/{date-range-D3ge1b4c.js → date-range-DJrdpzev.js} +4 -4
  81. package/dist/date-range-DJrdpzev.js.map +1 -0
  82. package/dist/{date-range-inline-DpYgdLRv.cjs → date-range-inline-D0I6k84h.cjs} +1 -1
  83. package/dist/{date-range-inline-DpYgdLRv.cjs.map → date-range-inline-D0I6k84h.cjs.map} +1 -1
  84. package/dist/{date-range-inline-DuWQaWps.js → date-range-inline-DjRdMZ1z.js} +2 -2
  85. package/dist/{date-range-inline-DuWQaWps.js.map → date-range-inline-DjRdMZ1z.js.map} +1 -1
  86. package/dist/date-range-inline.cjs +1 -1
  87. package/dist/date-range-inline.js +1 -1
  88. package/dist/date-range.cjs +1 -1
  89. package/dist/date-range.js +1 -1
  90. package/dist/delay.cjs +1 -1
  91. package/dist/delay.js +2 -2
  92. package/dist/{details-C-GZaq3j.js → details-CY49XVfp.js} +43 -35
  93. package/dist/details-CY49XVfp.js.map +1 -0
  94. package/dist/details-DQNj2oaU.cjs +164 -0
  95. package/dist/details-DQNj2oaU.cjs.map +1 -0
  96. package/dist/details.cjs +1 -1
  97. package/dist/details.js +1 -1
  98. package/dist/{directives-D_l1E5H6.cjs → directives-Bb0S1DKZ.cjs} +3 -3
  99. package/dist/directives-Bb0S1DKZ.cjs.map +1 -0
  100. package/dist/{directives-DyS51FUh.js → directives-Bfm1lkoy.js} +6 -8
  101. package/dist/directives-Bfm1lkoy.js.map +1 -0
  102. package/dist/directives.cjs +1 -1
  103. package/dist/directives.js +2 -2
  104. package/dist/{divider-nQffE0AD.js → divider-BeyX_C0A.js} +2 -2
  105. package/dist/{divider-nQffE0AD.js.map → divider-BeyX_C0A.js.map} +1 -1
  106. package/dist/{divider-CBnAmHMZ.cjs → divider-Ck2C1sKl.cjs} +1 -1
  107. package/dist/{divider-CBnAmHMZ.cjs.map → divider-Ck2C1sKl.cjs.map} +1 -1
  108. package/dist/divider.cjs +1 -1
  109. package/dist/divider.js +1 -1
  110. package/dist/dropdown.cjs +1 -1
  111. package/dist/dropdown.js +2 -2
  112. package/dist/{expand-DvTb-UPR.js → expand-BYsSEtp6.js} +53 -53
  113. package/dist/expand-BYsSEtp6.js.map +1 -0
  114. package/dist/expand-CUF163mg.cjs +141 -0
  115. package/dist/expand-CUF163mg.cjs.map +1 -0
  116. package/dist/expand.cjs +1 -1
  117. package/dist/expand.js +1 -1
  118. package/dist/fab.cjs +2 -1
  119. package/dist/fab.cjs.map +1 -1
  120. package/dist/fab.js +3 -2
  121. package/dist/fab.js.map +1 -1
  122. package/dist/{float-C-Ko0Le3.js → float-Cgllk_H9.js} +2 -2
  123. package/dist/{float-C-Ko0Le3.js.map → float-Cgllk_H9.js.map} +1 -1
  124. package/dist/{float-C17xgMT1.cjs → float-OvqX0nqG.cjs} +1 -1
  125. package/dist/{float-C17xgMT1.cjs.map → float-OvqX0nqG.cjs.map} +1 -1
  126. package/dist/float.cjs +1 -1
  127. package/dist/float.js +1 -1
  128. package/dist/form-4GKROq2P.cjs +27 -0
  129. package/dist/form-4GKROq2P.cjs.map +1 -0
  130. package/dist/{form-DA0hUu2h.js → form-DxaV_Ose.js} +39 -39
  131. package/dist/form-DxaV_Ose.js.map +1 -0
  132. package/dist/form.cjs +3 -3
  133. package/dist/form.cjs.map +1 -1
  134. package/dist/form.js +34 -34
  135. package/dist/form.js.map +1 -1
  136. package/dist/gravity-6pL6CfIr.cjs.map +1 -1
  137. package/dist/gravity-sVK3zGBF.js.map +1 -1
  138. package/dist/handover/agent-runtime-followups.md +1 -1
  139. package/dist/handover/agent-runtime-v1.md +3 -3
  140. package/dist/{icons-C6UfxmHZ.js → icons-CJ2mXcBi.js} +9 -9
  141. package/dist/icons-CJ2mXcBi.js.map +1 -0
  142. package/dist/icons-sZ-LybA9.cjs +24 -0
  143. package/dist/icons-sZ-LybA9.cjs.map +1 -0
  144. package/dist/icons.cjs +1 -1
  145. package/dist/icons.js +1 -1
  146. package/dist/{iframe-BTjZfYyh.js → iframe-DWvN5nGB.js} +11 -11
  147. package/dist/iframe-DWvN5nGB.js.map +1 -0
  148. package/dist/{iframe-wuYT2xFz.cjs → iframe-DpCv-QH2.cjs} +7 -7
  149. package/dist/iframe-DpCv-QH2.cjs.map +1 -0
  150. package/dist/iframe.cjs +1 -1
  151. package/dist/iframe.js +1 -1
  152. package/dist/index.cjs +1 -1
  153. package/dist/index.js +35 -35
  154. package/dist/{input-B_4g2ulO.js → input-BCCHz6tB.js} +7 -7
  155. package/dist/input-BCCHz6tB.js.map +1 -0
  156. package/dist/{input-BrDiIT60.cjs → input-Z-3N5JMv.cjs} +2 -2
  157. package/dist/input-Z-3N5JMv.cjs.map +1 -0
  158. package/dist/{input-chip-BlWhOruv.js → input-chip-BOrcKH-H.js} +2 -2
  159. package/dist/{input-chip-BlWhOruv.js.map → input-chip-BOrcKH-H.js.map} +1 -1
  160. package/dist/{input-chip-B-XWh4aE.cjs → input-chip-ChAgRCXZ.cjs} +1 -1
  161. package/dist/{input-chip-B-XWh4aE.cjs.map → input-chip-ChAgRCXZ.cjs.map} +1 -1
  162. package/dist/input.cjs +1 -1
  163. package/dist/input.js +1 -1
  164. package/dist/json.cjs +1 -1
  165. package/dist/json.js +3 -3
  166. package/dist/kbd.cjs +1 -1
  167. package/dist/kbd.js +2 -2
  168. package/dist/{layout-Dxit9enO.js → layout-CFiG3lNT.js} +1 -1
  169. package/dist/{layout-Dxit9enO.js.map → layout-CFiG3lNT.js.map} +1 -1
  170. package/dist/{layout-BhyIcEVu.cjs → layout-DZ4dpLh9.cjs} +1 -1
  171. package/dist/{layout-BhyIcEVu.cjs.map → layout-DZ4dpLh9.cjs.map} +1 -1
  172. package/dist/layout.cjs +1 -1
  173. package/dist/layout.js +2 -2
  174. package/dist/lazy-BaAiIUru.js +19 -0
  175. package/dist/lazy-BaAiIUru.js.map +1 -0
  176. package/dist/lazy-C-7a4FAe.cjs +1 -0
  177. package/dist/lazy-C-7a4FAe.cjs.map +1 -0
  178. package/dist/{lightbox-D85XAAuC.js → lightbox-B7Y4Nij_.js} +2 -2
  179. package/dist/lightbox-B7Y4Nij_.js.map +1 -0
  180. package/dist/{lightbox-CVBogswK.cjs → lightbox-Dpwsn8Qr.cjs} +1 -1
  181. package/dist/lightbox-Dpwsn8Qr.cjs.map +1 -0
  182. package/dist/lightbox.cjs +1 -1
  183. package/dist/lightbox.js +1 -1
  184. package/dist/{list-nVjLskgx.cjs → list-BhM-6dAi.cjs} +1 -1
  185. package/dist/{list-nVjLskgx.cjs.map → list-BhM-6dAi.cjs.map} +1 -1
  186. package/dist/{list-DOF_yVn5.js → list-C5WVoIfJ.js} +2 -2
  187. package/dist/{list-DOF_yVn5.js.map → list-C5WVoIfJ.js.map} +1 -1
  188. package/dist/list.cjs +1 -1
  189. package/dist/list.js +1 -1
  190. package/dist/magnetic-DKtc4umC.cjs.map +1 -1
  191. package/dist/magnetic-DaOOv5Dz.js.map +1 -1
  192. package/dist/{menu-QrAK5Uu9.js → menu-Dvi_tQgH.js} +3 -3
  193. package/dist/{menu-QrAK5Uu9.js.map → menu-Dvi_tQgH.js.map} +1 -1
  194. package/dist/{menu-DqmNjLgY.cjs → menu-GZARYp6I.cjs} +1 -1
  195. package/dist/{menu-DqmNjLgY.cjs.map → menu-GZARYp6I.cjs.map} +1 -1
  196. package/dist/menu.cjs +1 -1
  197. package/dist/menu.js +1 -1
  198. package/dist/{mixins-De1zjyhy.js → mixins-DGBI7YPO.js} +11 -11
  199. package/dist/mixins-DGBI7YPO.js.map +1 -0
  200. package/dist/{mixins-DxHpyMHA.cjs → mixins-fIpzhVMd.cjs} +1 -1
  201. package/dist/mixins-fIpzhVMd.cjs.map +1 -0
  202. package/dist/mixins.cjs +1 -1
  203. package/dist/mixins.js +2 -2
  204. package/dist/nav-drawer.cjs +1 -1
  205. package/dist/nav-drawer.js +1 -1
  206. package/dist/navigation-bar.cjs +1 -1
  207. package/dist/navigation-bar.js +1 -1
  208. package/dist/navigation-rail.cjs +3 -3
  209. package/dist/navigation-rail.cjs.map +1 -1
  210. package/dist/navigation-rail.js +11 -10
  211. package/dist/navigation-rail.js.map +1 -1
  212. package/dist/notification-B6yDL91t.cjs +24 -0
  213. package/dist/notification-B6yDL91t.cjs.map +1 -0
  214. package/dist/{notification-BtAK7NK8.js → notification-BB9OBRCr.js} +22 -22
  215. package/dist/notification-BB9OBRCr.js.map +1 -0
  216. package/dist/notification.cjs +1 -1
  217. package/dist/notification.js +1 -1
  218. package/dist/{option-DHwA0miA.js → option-B21ImL0k.js} +2 -2
  219. package/dist/{option-DHwA0miA.js.map → option-B21ImL0k.js.map} +1 -1
  220. package/dist/{option-DnSPa8ro.cjs → option-CJQM5I9q.cjs} +1 -1
  221. package/dist/{option-DnSPa8ro.cjs.map → option-CJQM5I9q.cjs.map} +1 -1
  222. package/dist/option.cjs +1 -1
  223. package/dist/option.js +1 -1
  224. package/dist/{overlay-Del1sBEB.js → overlay-DwJWVyk2.js} +75 -67
  225. package/dist/overlay-DwJWVyk2.js.map +1 -0
  226. package/dist/overlay-N0trD-4u.cjs +58 -0
  227. package/dist/overlay-N0trD-4u.cjs.map +1 -0
  228. package/dist/overlay.cjs +1 -1
  229. package/dist/{overlay.confirm-body-BV9umTAl.cjs → overlay.confirm-body-CtXIi421.cjs} +3 -3
  230. package/dist/overlay.confirm-body-CtXIi421.cjs.map +1 -0
  231. package/dist/{overlay.confirm-body-DSONXUzl.js → overlay.confirm-body-DwzKhXxM.js} +10 -10
  232. package/dist/overlay.confirm-body-DwzKhXxM.js.map +1 -0
  233. package/dist/overlay.js +4 -4
  234. package/dist/{overlay.service-BTp5Oq7f.js → overlay.service-BDLi0p5M.js} +4 -4
  235. package/dist/{overlay.service-BTp5Oq7f.js.map → overlay.service-BDLi0p5M.js.map} +1 -1
  236. package/dist/overlay.service-Dbu5uP9E.cjs +1 -0
  237. package/dist/{overlay.service-XLlrsSdA.cjs.map → overlay.service-Dbu5uP9E.cjs.map} +1 -1
  238. package/dist/{progress-DUbTL9g9.cjs → progress-B-Qg44XY.cjs} +1 -1
  239. package/dist/{progress-DUbTL9g9.cjs.map → progress-B-Qg44XY.cjs.map} +1 -1
  240. package/dist/{progress-DYA83CFU.js → progress-CUSS1sNz.js} +2 -2
  241. package/dist/{progress-DYA83CFU.js.map → progress-CUSS1sNz.js.map} +1 -1
  242. package/dist/progress.cjs +1 -1
  243. package/dist/progress.js +1 -1
  244. package/dist/{radio-group-DxX0iJBo.js → radio-group-AHLvrN8O.js} +7 -7
  245. package/dist/radio-group-AHLvrN8O.js.map +1 -0
  246. package/dist/{radio-group-B-ORNtvR.cjs → radio-group-BEtvCSS1.cjs} +2 -2
  247. package/dist/radio-group-BEtvCSS1.cjs.map +1 -0
  248. package/dist/radio-group.cjs +1 -1
  249. package/dist/radio-group.js +1 -1
  250. package/dist/range.cjs +1 -1
  251. package/dist/range.js +2 -2
  252. package/dist/select-BWpV2iv-.cjs +56 -0
  253. package/dist/select-BWpV2iv-.cjs.map +1 -0
  254. package/dist/{select-C7gkA-ab.js → select-Cawz88lG.js} +46 -46
  255. package/dist/select-Cawz88lG.js.map +1 -0
  256. package/dist/select.cjs +1 -1
  257. package/dist/select.js +1 -1
  258. package/dist/skeleton.cjs +1 -1
  259. package/dist/skeleton.js +2 -2
  260. package/dist/skills/SKILL.md +9 -0
  261. package/dist/skills/overlay.md +14 -7
  262. package/dist/skills/schmancy/SKILL.md +9 -0
  263. package/dist/skills/schmancy/overlay.md +14 -7
  264. package/dist/slider.cjs +1 -1
  265. package/dist/slider.js +2 -2
  266. package/dist/{sound.service-O0232os6.js → sound.service-CK-5zob-.js} +4 -3
  267. package/dist/sound.service-CK-5zob-.js.map +1 -0
  268. package/dist/{sound.service-C7FDY_yD.cjs → sound.service-D2GGaBXc.cjs} +1 -1
  269. package/dist/sound.service-D2GGaBXc.cjs.map +1 -0
  270. package/dist/{splash-screen-jfE47xl0.js → splash-screen-BUEtjHXC.js} +13 -13
  271. package/dist/splash-screen-BUEtjHXC.js.map +1 -0
  272. package/dist/{splash-screen-DIS4odDr.cjs → splash-screen-DqPuipox.cjs} +6 -6
  273. package/dist/splash-screen-DqPuipox.cjs.map +1 -0
  274. package/dist/splash-screen.cjs +1 -1
  275. package/dist/splash-screen.js +1 -1
  276. package/dist/{src-BP3h-9d9.js → src-8VJ7eluk.js} +46 -45
  277. package/dist/src-8VJ7eluk.js.map +1 -0
  278. package/dist/{src-Um_pzb-U.cjs → src-GJA8uSAS.cjs} +7 -6
  279. package/dist/src-GJA8uSAS.cjs.map +1 -0
  280. package/dist/{state-Bj0M9a6T.cjs → state-BxDNox-2.cjs} +1 -1
  281. package/dist/{state-Bj0M9a6T.cjs.map → state-BxDNox-2.cjs.map} +1 -1
  282. package/dist/{state-DscWQpoM.js → state-CnZCDMT0.js} +9 -9
  283. package/dist/{state-DscWQpoM.js.map → state-CnZCDMT0.js.map} +1 -1
  284. package/dist/state.cjs +1 -1
  285. package/dist/state.js +2 -2
  286. package/dist/steps.cjs +1 -1
  287. package/dist/steps.js +2 -2
  288. package/dist/{surface-B4Wn4SOO.js → surface-BMdG3dKQ.js} +2 -2
  289. package/dist/{surface-B4Wn4SOO.js.map → surface-BMdG3dKQ.js.map} +1 -1
  290. package/dist/{surface-DRq6cVW6.cjs → surface-CWwYD_z2.cjs} +1 -1
  291. package/dist/{surface-DRq6cVW6.cjs.map → surface-CWwYD_z2.cjs.map} +1 -1
  292. package/dist/surface.cjs +1 -1
  293. package/dist/surface.js +1 -1
  294. package/dist/switch.cjs +4 -4
  295. package/dist/switch.cjs.map +1 -1
  296. package/dist/switch.js +11 -11
  297. package/dist/switch.js.map +1 -1
  298. package/dist/table.cjs +1 -1
  299. package/dist/table.js +2 -2
  300. package/dist/{tabs-CnQPo-XS.js → tabs-CDQYDc6v.js} +2 -2
  301. package/dist/{tabs-CnQPo-XS.js.map → tabs-CDQYDc6v.js.map} +1 -1
  302. package/dist/{tabs-Ca_fbHPW.cjs → tabs-CbD9E1gd.cjs} +1 -1
  303. package/dist/{tabs-Ca_fbHPW.cjs.map → tabs-CbD9E1gd.cjs.map} +1 -1
  304. package/dist/tabs.cjs +1 -1
  305. package/dist/tabs.js +1 -1
  306. package/dist/teleport.cjs +1 -1
  307. package/dist/teleport.js +1 -1
  308. package/dist/textarea-Brgi-vD2.cjs +43 -0
  309. package/dist/textarea-Brgi-vD2.cjs.map +1 -0
  310. package/dist/{textarea-BvqENhTW.js → textarea-MPyrMi-S.js} +4 -4
  311. package/dist/textarea-MPyrMi-S.js.map +1 -0
  312. package/dist/textarea.cjs +1 -1
  313. package/dist/textarea.js +1 -1
  314. package/dist/{theme-BSwJ2YZo.cjs → theme-BMbXoqi0.cjs} +1 -1
  315. package/dist/{theme-BSwJ2YZo.cjs.map → theme-BMbXoqi0.cjs.map} +1 -1
  316. package/dist/{theme-BV0EzHQ1.js → theme-DZu-xmVp.js} +5 -5
  317. package/dist/{theme-BV0EzHQ1.js.map → theme-DZu-xmVp.js.map} +1 -1
  318. package/dist/{theme-button-C6fpUzPM.cjs → theme-button-B0OLb-43.cjs} +1 -1
  319. package/dist/{theme-button-C6fpUzPM.cjs.map → theme-button-B0OLb-43.cjs.map} +1 -1
  320. package/dist/{theme-button-O_xNCgI7.js → theme-button-D_qGvEYs.js} +2 -2
  321. package/dist/{theme-button-O_xNCgI7.js.map → theme-button-D_qGvEYs.js.map} +1 -1
  322. package/dist/theme-button.cjs +1 -1
  323. package/dist/theme-button.js +1 -1
  324. package/dist/theme.cjs +1 -1
  325. package/dist/theme.js +3 -3
  326. package/dist/{theme.service-DwLhhOmP.js → theme.service-7VkM-hVf.js} +15 -11
  327. package/dist/theme.service-7VkM-hVf.js.map +1 -0
  328. package/dist/theme.service-B15FdjOS.cjs +1 -0
  329. package/dist/theme.service-B15FdjOS.cjs.map +1 -0
  330. package/dist/tree.cjs +4 -4
  331. package/dist/tree.cjs.map +1 -1
  332. package/dist/tree.js +8 -8
  333. package/dist/tree.js.map +1 -1
  334. package/dist/{typography-opFYuUYS.cjs → typography-D4Fo1UGh.cjs} +3 -3
  335. package/dist/{typography-opFYuUYS.cjs.map → typography-D4Fo1UGh.cjs.map} +1 -1
  336. package/dist/{typography-Dtdooaic.js → typography-SZhjb_4R.js} +9 -9
  337. package/dist/{typography-Dtdooaic.js.map → typography-SZhjb_4R.js.map} +1 -1
  338. package/dist/typography.cjs +1 -1
  339. package/dist/typography.js +1 -1
  340. package/dist/visually-hidden.cjs +1 -1
  341. package/dist/visually-hidden.js +2 -2
  342. package/dist/{window-ConcHirJ.js → window-BDVyrBnk.js} +101 -100
  343. package/dist/window-BDVyrBnk.js.map +1 -0
  344. package/dist/window-BbBYjm7R.cjs +59 -0
  345. package/dist/window-BbBYjm7R.cjs.map +1 -0
  346. package/dist/window.cjs +1 -1
  347. package/dist/window.js +1 -1
  348. package/package.json +1 -1
  349. package/skills/schmancy/SKILL.md +9 -0
  350. package/skills/schmancy/overlay.md +14 -7
  351. package/src/area/area.component.ts +1 -1
  352. package/src/area/area.service.test.ts +2 -2
  353. package/src/area/area.service.ts +1 -1
  354. package/src/area/lazy.ts +87 -83
  355. package/src/audio/sound.service.ts +3 -3
  356. package/src/badge/badge.ts +1 -0
  357. package/src/breadcrumb/breadcrumb.ts +2 -2
  358. package/src/button/button.ts +12 -11
  359. package/src/button/icon-button.ts +19 -18
  360. package/src/card/card.ts +16 -16
  361. package/src/content-drawer/drawer.ts +6 -6
  362. package/src/details/details.ts +55 -55
  363. package/src/directives/ai-badge.ts +2 -1
  364. package/src/directives/animate-text.ts +2 -1
  365. package/src/directives/art/art.directive.ts +2 -1
  366. package/src/directives/battery.ts +2 -1
  367. package/src/directives/confirm-click.ts +5 -3
  368. package/src/directives/cursor-glow.ts +2 -1
  369. package/src/directives/cycle-text.ts +2 -1
  370. package/src/directives/depth-of-field.ts +2 -1
  371. package/src/directives/drag.ts +4 -2
  372. package/src/directives/fyi.ts +2 -1
  373. package/src/directives/gravity.ts +2 -1
  374. package/src/directives/hummingbird.ts +2 -1
  375. package/src/directives/intersect.ts +3 -2
  376. package/src/directives/liquid.ts +2 -1
  377. package/src/directives/living-border.ts +2 -1
  378. package/src/directives/long-press.ts +2 -1
  379. package/src/directives/magnetic.ts +2 -1
  380. package/src/directives/missed-punch.ts +2 -1
  381. package/src/directives/nebula.ts +6 -5
  382. package/src/directives/overflow-within.ts +2 -1
  383. package/src/directives/reveal.ts +2 -1
  384. package/src/directives/urgent.ts +2 -1
  385. package/src/directives/working-snake.ts +2 -1
  386. package/src/expand/expand-root.component.ts +27 -27
  387. package/src/expand/expand.component.ts +48 -48
  388. package/src/fab/fab.ts +1 -0
  389. package/src/form/fields/autocomplete/autocomplete.ts +154 -154
  390. package/src/form/fields/checkbox/checkbox.ts +4 -4
  391. package/src/form/fields/chips/chips.ts +2 -2
  392. package/src/form/fields/chips/filter-chip.ts +16 -15
  393. package/src/form/fields/date-range/date-range.ts +2 -2
  394. package/src/form/fields/input/input.ts +12 -12
  395. package/src/form/fields/radio-group/radio-button.ts +2 -2
  396. package/src/form/fields/radio-group/radio-group.ts +3 -3
  397. package/src/form/fields/select/select.ts +56 -56
  398. package/src/form/fields/switch/switch.ts +10 -10
  399. package/src/form/fields/textarea/textarea.ts +2 -2
  400. package/src/form/form-summary.ts +33 -33
  401. package/src/form/form.ts +45 -45
  402. package/src/icons/icon.ts +10 -8
  403. package/src/iframe/iframe.ts +11 -11
  404. package/src/lightbox/flip-directive.ts +2 -1
  405. package/src/lightbox/lightbox.directive.ts +2 -1
  406. package/src/nav-drawer/navbar.ts +3 -3
  407. package/src/navigation-rail/navigation-rail.ts +10 -10
  408. package/src/notification/notification.ts +22 -22
  409. package/src/overlay/overlay.component.ts +106 -83
  410. package/src/overlay/overlay.confirm-body.ts +4 -4
  411. package/src/overlay/overlay.service.ts +3 -3
  412. package/src/overlay/overlay.types.ts +4 -2
  413. package/src/splash-screen/splash-screen.ts +11 -11
  414. package/src/state/index.ts +12 -12
  415. package/src/state/schmancy-context.ts +9 -9
  416. package/src/teleport/teleport.component.ts +2 -2
  417. package/src/theme/theme.service.ts +17 -17
  418. package/src/tree/tree.ts +7 -7
  419. package/src/typography/typography.ts +7 -7
  420. package/src/window/window-manager.ts +20 -20
  421. package/src/window/window.ts +100 -100
  422. package/types/mixins/SchmancyElement.d.ts +3 -2
  423. package/types/mixins/formField.mixin.d.ts +1 -1
  424. package/types/src/area/area.service.d.ts +1 -1
  425. package/types/src/area/lazy.d.ts +0 -6
  426. package/types/src/audio/sound.service.d.ts +1 -2
  427. package/types/src/breadcrumb/breadcrumb.d.ts +1 -1
  428. package/types/src/button/button.d.ts +3 -3
  429. package/types/src/button/icon-button.d.ts +6 -7
  430. package/types/src/card/card.d.ts +5 -5
  431. package/types/src/content-drawer/drawer.d.ts +1 -1
  432. package/types/src/details/details.d.ts +2 -21
  433. package/types/src/directives/ai-badge.d.ts +2 -2
  434. package/types/src/directives/animate-text.d.ts +2 -2
  435. package/types/src/directives/art/art.directive.d.ts +2 -2
  436. package/types/src/directives/battery.d.ts +2 -2
  437. package/types/src/directives/confirm-click.d.ts +2 -2
  438. package/types/src/directives/cursor-glow.d.ts +2 -2
  439. package/types/src/directives/cycle-text.d.ts +2 -2
  440. package/types/src/directives/depth-of-field.d.ts +2 -2
  441. package/types/src/directives/drag.d.ts +4 -4
  442. package/types/src/directives/fyi.d.ts +2 -2
  443. package/types/src/directives/gravity.d.ts +2 -2
  444. package/types/src/directives/hummingbird.d.ts +2 -2
  445. package/types/src/directives/intersect.d.ts +2 -2
  446. package/types/src/directives/liquid.d.ts +2 -2
  447. package/types/src/directives/living-border.d.ts +2 -2
  448. package/types/src/directives/long-press.d.ts +2 -2
  449. package/types/src/directives/magnetic.d.ts +2 -2
  450. package/types/src/directives/missed-punch.d.ts +2 -2
  451. package/types/src/directives/nebula.d.ts +2 -2
  452. package/types/src/directives/overflow-within.d.ts +2 -2
  453. package/types/src/directives/reveal.d.ts +2 -2
  454. package/types/src/directives/urgent.d.ts +2 -2
  455. package/types/src/directives/working-snake.d.ts +2 -2
  456. package/types/src/expand/expand-root.component.d.ts +8 -8
  457. package/types/src/expand/expand.component.d.ts +11 -11
  458. package/types/src/form/fields/autocomplete/autocomplete.d.ts +29 -29
  459. package/types/src/form/fields/checkbox/checkbox.d.ts +1 -1
  460. package/types/src/form/fields/chips/chips.d.ts +1 -1
  461. package/types/src/form/fields/chips/filter-chip.d.ts +1 -2
  462. package/types/src/form/fields/input/input.d.ts +3 -3
  463. package/types/src/form/fields/radio-group/radio-button.d.ts +1 -1
  464. package/types/src/form/fields/radio-group/radio-group.d.ts +1 -1
  465. package/types/src/form/fields/select/select.d.ts +8 -8
  466. package/types/src/form/fields/switch/switch.d.ts +3 -3
  467. package/types/src/form/fields/textarea/textarea.d.ts +1 -1
  468. package/types/src/form/form-summary.d.ts +7 -7
  469. package/types/src/form/form.d.ts +11 -11
  470. package/types/src/icons/icon.d.ts +2 -2
  471. package/types/src/iframe/iframe.d.ts +3 -3
  472. package/types/src/lightbox/flip-directive.d.ts +2 -2
  473. package/types/src/lightbox/lightbox.directive.d.ts +2 -2
  474. package/types/src/nav-drawer/navbar.d.ts +1 -1
  475. package/types/src/navigation-rail/navigation-rail.d.ts +2 -2
  476. package/types/src/notification/notification.d.ts +8 -8
  477. package/types/src/overlay/overlay.component.d.ts +16 -16
  478. package/types/src/overlay/overlay.confirm-body.d.ts +1 -1
  479. package/types/src/overlay/overlay.types.d.ts +4 -2
  480. package/types/src/splash-screen/splash-screen.d.ts +2 -2
  481. package/types/src/state/index.d.ts +1 -1
  482. package/types/src/state/schmancy-context.d.ts +3 -3
  483. package/types/src/teleport/teleport.component.d.ts +1 -1
  484. package/types/src/theme/theme.service.d.ts +1 -4
  485. package/types/src/tree/tree.d.ts +3 -3
  486. package/types/src/typography/typography.d.ts +1 -1
  487. package/types/src/window/window-manager.d.ts +2 -2
  488. package/types/src/window/window.d.ts +20 -20
  489. package/dist/area-KtULlxuA.js.map +0 -1
  490. package/dist/area-fdKhYB6T.cjs +0 -21
  491. package/dist/area-fdKhYB6T.cjs.map +0 -1
  492. package/dist/autocomplete-DEZk6wBD.cjs +0 -115
  493. package/dist/autocomplete-DEZk6wBD.cjs.map +0 -1
  494. package/dist/autocomplete-DIScyo8Q.js.map +0 -1
  495. package/dist/button-DzlHLjWO.cjs +0 -62
  496. package/dist/button-DzlHLjWO.cjs.map +0 -1
  497. package/dist/button-kcpPQavY.js.map +0 -1
  498. package/dist/card-BLxPLqdQ.cjs.map +0 -1
  499. package/dist/card-DxSKxCid.js.map +0 -1
  500. package/dist/chips-C9dS1WKn.cjs.map +0 -1
  501. package/dist/chips-vWmwqQed.js.map +0 -1
  502. package/dist/date-range-BV6HuvLw.cjs.map +0 -1
  503. package/dist/date-range-D3ge1b4c.js.map +0 -1
  504. package/dist/details-C-GZaq3j.js.map +0 -1
  505. package/dist/details-Dp5rLIWk.cjs +0 -164
  506. package/dist/details-Dp5rLIWk.cjs.map +0 -1
  507. package/dist/directives-D_l1E5H6.cjs.map +0 -1
  508. package/dist/directives-DyS51FUh.js.map +0 -1
  509. package/dist/expand-DvTb-UPR.js.map +0 -1
  510. package/dist/expand-mlP_3XWz.cjs +0 -141
  511. package/dist/expand-mlP_3XWz.cjs.map +0 -1
  512. package/dist/form-CwPHcQYB.cjs +0 -27
  513. package/dist/form-CwPHcQYB.cjs.map +0 -1
  514. package/dist/form-DA0hUu2h.js.map +0 -1
  515. package/dist/icons-C6UfxmHZ.js.map +0 -1
  516. package/dist/icons-CW3-oMSb.cjs +0 -24
  517. package/dist/icons-CW3-oMSb.cjs.map +0 -1
  518. package/dist/iframe-BTjZfYyh.js.map +0 -1
  519. package/dist/iframe-wuYT2xFz.cjs.map +0 -1
  520. package/dist/input-B_4g2ulO.js.map +0 -1
  521. package/dist/input-BrDiIT60.cjs.map +0 -1
  522. package/dist/lazy-CayEFyC3.cjs +0 -1
  523. package/dist/lazy-CayEFyC3.cjs.map +0 -1
  524. package/dist/lazy-D-bO2r4m.js +0 -13
  525. package/dist/lazy-D-bO2r4m.js.map +0 -1
  526. package/dist/lightbox-CVBogswK.cjs.map +0 -1
  527. package/dist/lightbox-D85XAAuC.js.map +0 -1
  528. package/dist/mixins-De1zjyhy.js.map +0 -1
  529. package/dist/mixins-DxHpyMHA.cjs.map +0 -1
  530. package/dist/notification-BtAK7NK8.js.map +0 -1
  531. package/dist/notification-DYzbUb5C.cjs +0 -24
  532. package/dist/notification-DYzbUb5C.cjs.map +0 -1
  533. package/dist/overlay-BVkqZmoS.cjs +0 -58
  534. package/dist/overlay-BVkqZmoS.cjs.map +0 -1
  535. package/dist/overlay-Del1sBEB.js.map +0 -1
  536. package/dist/overlay.confirm-body-BV9umTAl.cjs.map +0 -1
  537. package/dist/overlay.confirm-body-DSONXUzl.js.map +0 -1
  538. package/dist/overlay.service-XLlrsSdA.cjs +0 -1
  539. package/dist/radio-group-B-ORNtvR.cjs.map +0 -1
  540. package/dist/radio-group-DxX0iJBo.js.map +0 -1
  541. package/dist/select-B9uj_u-s.cjs +0 -56
  542. package/dist/select-B9uj_u-s.cjs.map +0 -1
  543. package/dist/select-C7gkA-ab.js.map +0 -1
  544. package/dist/sound.service-C7FDY_yD.cjs.map +0 -1
  545. package/dist/sound.service-O0232os6.js.map +0 -1
  546. package/dist/splash-screen-DIS4odDr.cjs.map +0 -1
  547. package/dist/splash-screen-jfE47xl0.js.map +0 -1
  548. package/dist/src-BP3h-9d9.js.map +0 -1
  549. package/dist/src-Um_pzb-U.cjs.map +0 -1
  550. package/dist/textarea-BvqENhTW.js.map +0 -1
  551. package/dist/textarea-qr7oL8oU.cjs +0 -43
  552. package/dist/textarea-qr7oL8oU.cjs.map +0 -1
  553. package/dist/theme.service-DwLhhOmP.js.map +0 -1
  554. package/dist/theme.service-kn9MC025.cjs +0 -1
  555. package/dist/theme.service-kn9MC025.cjs.map +0 -1
  556. package/dist/window-BSAemI9J.cjs +0 -59
  557. package/dist/window-BSAemI9J.cjs.map +0 -1
  558. package/dist/window-ConcHirJ.js.map +0 -1
package/dist/form.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-BHfQg3Tj.cjs`);require(`./mixins-DxHpyMHA.cjs`),require(`./autocomplete-DEZk6wBD.cjs`);const t=require(`./input-chip-B-XWh4aE.cjs`),n=require(`./checkbox-BCLkhp5G.cjs`),r=require(`./chips-C9dS1WKn.cjs`),i=require(`./date-range-BV6HuvLw.cjs`),a=require(`./form-CwPHcQYB.cjs`),o=require(`./input-BrDiIT60.cjs`);require(`./input.cjs`);const s=require(`./radio-group-B-ORNtvR.cjs`),c=require(`./range.cjs`),l=require(`./select-B9uj_u-s.cjs`),u=require(`./switch.cjs`);require(`./textarea-qr7oL8oU.cjs`);let d=require(`lit/decorators.js`),f=require(`lit`);var p=class extends e.t{constructor(...e){super(...e),this._bump=0,this._form=null}connectedCallback(){super.connectedCallback(),this._form=this.closest(`schmancy-form`),this._form&&(this._formObserver=new MutationObserver(()=>{this._bump++}),this._formObserver.observe(this._form,{attributes:!0,subtree:!0}),(async()=>{await this._form?.updateComplete;let e=this._form?.shadowRoot?.querySelector(`[role="status"]`);e&&this._formObserver?.observe(e,{childList:!0,characterData:!0,subtree:!0}),this._bump++})())}disconnectedCallback(){this._formObserver?.disconnect(),this._formObserver=void 0,super.disconnectedCallback()}_readFormStatus(){return this._form?this._form.matches(`:state(error)`)?`error`:this._form.matches(`:state(submitting)`)?`submitting`:this._form.matches(`:state(success)`)?`success`:`idle`:`idle`}_readFormMessage(){return(this._form?.shadowRoot?.querySelector(`[role="status"]`))?.textContent?.trim()??``}_readInvalidFields(){if(!this._form)return[];let e=[];for(let t of Array.from(this._form.querySelectorAll(`*`))){if(!(t instanceof HTMLElement))continue;let n=!1;try{n=t.matches(`:state(invalid)`)}catch{continue}if(!n)continue;let r=t;e.push({id:r.id,label:r.label||r.name||`(field)`,message:r.validationMessage||`Invalid value`})}return e}render(){if(this._bump,this._readFormStatus()!==`error`)return f.nothing;let e=this._readFormMessage(),t=this._readInvalidFields(),n=t.length;return f.html`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`);require(`./mixins-fIpzhVMd.cjs`),require(`./autocomplete-DMmxsvUe.cjs`);const t=require(`./input-chip-ChAgRCXZ.cjs`),n=require(`./checkbox-C4zeib84.cjs`),r=require(`./chips-wfJ7YtWv.cjs`),i=require(`./date-range-BHSzlwSL.cjs`),a=require(`./form-4GKROq2P.cjs`),o=require(`./input-Z-3N5JMv.cjs`);require(`./input.cjs`);const s=require(`./radio-group-BEtvCSS1.cjs`),c=require(`./range.cjs`),l=require(`./select-BWpV2iv-.cjs`),u=require(`./switch.cjs`);require(`./textarea-Brgi-vD2.cjs`);let d=require(`lit/decorators.js`),f=require(`lit`);var p=class extends e.t{constructor(...e){super(...e),this.bump=0,this.form=null}connectedCallback(){super.connectedCallback(),this.form=this.closest(`schmancy-form`),this.form&&(this.formObserver=new MutationObserver(()=>{this.bump++}),this.formObserver.observe(this.form,{attributes:!0,subtree:!0}),(async()=>{await this.form?.updateComplete;let e=this.form?.shadowRoot?.querySelector(`[role="status"]`);e&&this.formObserver?.observe(e,{childList:!0,characterData:!0,subtree:!0}),this.bump++})())}disconnectedCallback(){this.formObserver?.disconnect(),this.formObserver=void 0,super.disconnectedCallback()}readFormStatus(){return this.form?this.form.matches(`:state(error)`)?`error`:this.form.matches(`:state(submitting)`)?`submitting`:this.form.matches(`:state(success)`)?`success`:`idle`:`idle`}readFormMessage(){return(this.form?.shadowRoot?.querySelector(`[role="status"]`))?.textContent?.trim()??``}readInvalidFields(){if(!this.form)return[];let e=[];for(let t of Array.from(this.form.querySelectorAll(`*`))){if(!(t instanceof HTMLElement))continue;let n=!1;try{n=t.matches(`:state(invalid)`)}catch{continue}if(!n)continue;let r=t;e.push({id:r.id,label:r.label||r.name||`(field)`,message:r.validationMessage||`Invalid value`})}return e}render(){if(this.bump,this.readFormStatus()!==`error`)return f.nothing;let e=this.readFormMessage(),t=this.readInvalidFields(),n=t.length;return f.html`
2
2
  <div role="alert" aria-labelledby="schmancy-form-summary-heading">
3
3
  <h2 id="schmancy-form-summary-heading">${this.heading??(n===0?`There is a problem with this form`:`There ${n===1?`is`:`are`} ${n} problem${n===1?``:`s`} with this form`)}</h2>
4
4
  ${e?f.html`<p>${e}</p>`:f.nothing}
@@ -8,11 +8,11 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
8
8
  <li>
9
9
  <a
10
10
  href="#${e.id}"
11
- @click=${t=>this._jumpToField(t,e.id)}
11
+ @click=${t=>this.jumpToField(t,e.id)}
12
12
  >${e.label}: ${e.message}</a>
13
13
  </li>
14
14
  `)}
15
15
  </ul>
16
16
  `:f.nothing}
17
17
  </div>
18
- `}_jumpToField(e,t){e.preventDefault(),(this._form?.querySelector(`#${CSS.escape(t)}`))?.focus()}};e.u([(0,d.property)({type:String})],p.prototype,`heading`,void 0),e.u([(0,d.state)()],p.prototype,`_bump`,void 0),p=e.u([(0,d.customElement)(`schmancy-form-summary`)],p),Object.defineProperty(exports,`RadioButton`,{enumerable:!0,get:function(){return s.t}}),Object.defineProperty(exports,`RadioGroup`,{enumerable:!0,get:function(){return s.n}}),Object.defineProperty(exports,`SchmancyAssistChip`,{enumerable:!0,get:function(){return r.r}}),Object.defineProperty(exports,`SchmancyCheckbox`,{enumerable:!0,get:function(){return n.t}}),exports.SchmancyChip=r.n,exports.SchmancyFilterChip=r.n,Object.defineProperty(exports,`SchmancyDateRange`,{enumerable:!0,get:function(){return i.t}}),exports.SchmancyForm=a.t,Object.defineProperty(exports,`SchmancyFormSummary`,{enumerable:!0,get:function(){return p}}),exports.SchmancyInput=o.n,Object.defineProperty(exports,`SchmancyInputChip`,{enumerable:!0,get:function(){return t.t}}),Object.defineProperty(exports,`SchmancyInputCompat`,{enumerable:!0,get:function(){return o.t}}),Object.defineProperty(exports,`SchmancyRange`,{enumerable:!0,get:function(){return c.SchmancyRange}}),Object.defineProperty(exports,`SchmancySelect`,{enumerable:!0,get:function(){return l.t}}),Object.defineProperty(exports,`SchmancySuggestionChip`,{enumerable:!0,get:function(){return r.t}}),Object.defineProperty(exports,`SchmancySwitch`,{enumerable:!0,get:function(){return u.SchmancySwitch}}),exports.formSubmitState=a.n,exports.validateInitialDateRange=i.n;
18
+ `}jumpToField(e,t){e.preventDefault(),(this.form?.querySelector(`#${CSS.escape(t)}`))?.focus()}};e.u([(0,d.property)({type:String})],p.prototype,`heading`,void 0),e.u([(0,d.state)()],p.prototype,`bump`,void 0),p=e.u([(0,d.customElement)(`schmancy-form-summary`)],p),Object.defineProperty(exports,`RadioButton`,{enumerable:!0,get:function(){return s.t}}),Object.defineProperty(exports,`RadioGroup`,{enumerable:!0,get:function(){return s.n}}),Object.defineProperty(exports,`SchmancyAssistChip`,{enumerable:!0,get:function(){return r.r}}),Object.defineProperty(exports,`SchmancyCheckbox`,{enumerable:!0,get:function(){return n.t}}),exports.SchmancyChip=r.n,exports.SchmancyFilterChip=r.n,Object.defineProperty(exports,`SchmancyDateRange`,{enumerable:!0,get:function(){return i.t}}),exports.SchmancyForm=a.t,Object.defineProperty(exports,`SchmancyFormSummary`,{enumerable:!0,get:function(){return p}}),exports.SchmancyInput=o.n,Object.defineProperty(exports,`SchmancyInputChip`,{enumerable:!0,get:function(){return t.t}}),Object.defineProperty(exports,`SchmancyInputCompat`,{enumerable:!0,get:function(){return o.t}}),Object.defineProperty(exports,`SchmancyRange`,{enumerable:!0,get:function(){return c.SchmancyRange}}),Object.defineProperty(exports,`SchmancySelect`,{enumerable:!0,get:function(){return l.t}}),Object.defineProperty(exports,`SchmancySuggestionChip`,{enumerable:!0,get:function(){return r.t}}),Object.defineProperty(exports,`SchmancySwitch`,{enumerable:!0,get:function(){return u.SchmancySwitch}}),exports.formSubmitState=a.n,exports.validateInitialDateRange=i.n;
package/dist/form.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"form.cjs","names":[],"sources":["../src/form/form-summary.ts"],"sourcesContent":["/**\n * `<schmancy-form-summary>` — top-of-form error summary with anchor links to\n * each invalid field. Linear / GOV.UK / GitHub pattern.\n *\n * Drop one inside any `<schmancy-form>`; on submit-failure or when\n * `<schmancy-form>.setFormError(...)` is called, the summary renders a\n * `role=\"alert\"` banner with the form-level error message and a list of\n * links pointing at each invalid field's `id`.\n *\n * Hidden when the form is idle, submitting, or successful — only `error`\n * populates it.\n *\n * @element schmancy-form-summary\n */\n\nimport { html, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyElement } from '../../mixins'\nimport type SchmancyForm from './form'\n\n@customElement('schmancy-form-summary')\nexport class SchmancyFormSummary extends SchmancyElement {\n\t/**\n\t * Optional heading text. Defaults to a count-based summary\n\t * (\"1 problem with this form\" / \"3 problems with this form\").\n\t */\n\t@property({ type: String }) heading?: string\n\n\t/**\n\t * Render bumper — incremented to force a re-render when the form's state\n\t * changes (the actual content is computed from the DOM in render()).\n\t */\n\t@state() private _bump: number = 0\n\n\tprivate _form: SchmancyForm | null = null\n\tprivate _formObserver?: MutationObserver\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis._form = this.closest('schmancy-form') as SchmancyForm | null\n\t\tif (!this._form) {\n\t\t\tconsole.error('[schmancy-form-summary] must be a descendant of <schmancy-form>')\n\t\t\treturn\n\t\t}\n\t\tconst bump = () => { this._bump++ }\n\t\tthis._formObserver = new MutationObserver(bump)\n\t\t// Form host attribute changes (aria-busy, :state class reflections,\n\t\t// descendant attribute changes for fields' aria-invalid). subtree:true\n\t\t// catches attribute mutations on every descendant including light-DOM\n\t\t// fields and the form's own host.\n\t\tthis._formObserver.observe(this._form, {\n\t\t\tattributes: true,\n\t\t\tsubtree: true,\n\t\t})\n\t\t// Defer live-region observation until the form has rendered its\n\t\t// shadow tree.\n\t\tconst attachLiveRegionObserver = async (): Promise<void> => {\n\t\t\tawait this._form?.updateComplete\n\t\t\tconst liveRegion = this._form?.shadowRoot?.querySelector('[role=\"status\"]')\n\t\t\tif (liveRegion) {\n\t\t\t\tthis._formObserver?.observe(liveRegion, {\n\t\t\t\t\tchildList: true,\n\t\t\t\t\tcharacterData: true,\n\t\t\t\t\tsubtree: true,\n\t\t\t\t})\n\t\t\t}\n\t\t\t// Force a render so the initial state is reflected.\n\t\t\tthis._bump++\n\t\t}\n\t\tvoid attachLiveRegionObserver()\n\t}\n\n\toverride disconnectedCallback(): void {\n\t\tthis._formObserver?.disconnect()\n\t\tthis._formObserver = undefined\n\t\tsuper.disconnectedCallback()\n\t}\n\n\tprivate _readFormStatus(): 'idle' | 'submitting' | 'success' | 'error' {\n\t\tif (!this._form) return 'idle'\n\t\tif (this._form.matches(':state(error)')) return 'error'\n\t\tif (this._form.matches(':state(submitting)')) return 'submitting'\n\t\tif (this._form.matches(':state(success)')) return 'success'\n\t\treturn 'idle'\n\t}\n\n\tprivate _readFormMessage(): string {\n\t\tconst liveRegion = this._form?.shadowRoot?.querySelector('[role=\"status\"]')\n\t\treturn liveRegion?.textContent?.trim() ?? ''\n\t}\n\n\tprivate _readInvalidFields(): Array<{ id: string; label: string; message: string }> {\n\t\tif (!this._form) return []\n\t\tconst result: Array<{ id: string; label: string; message: string }> = []\n\t\tfor (const el of Array.from(this._form.querySelectorAll('*'))) {\n\t\t\tif (!(el instanceof HTMLElement)) continue\n\t\t\tlet isInvalid = false\n\t\t\ttry {\n\t\t\t\tisInvalid = el.matches(':state(invalid)')\n\t\t\t} catch {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!isInvalid) continue\n\t\t\tconst f = el as HTMLElement & {\n\t\t\t\tlabel?: string\n\t\t\t\tname?: string\n\t\t\t\tvalidationMessage?: string\n\t\t\t}\n\t\t\tresult.push({\n\t\t\t\tid: f.id,\n\t\t\t\tlabel: f.label || f.name || '(field)',\n\t\t\t\tmessage: f.validationMessage || 'Invalid value',\n\t\t\t})\n\t\t}\n\t\treturn result\n\t}\n\n\trender() {\n\t\t// Read everything fresh from the DOM each render — no @state cache, no\n\t\t// re-render loops. The MutationObserver bumps `_bump` to trigger this\n\t\t// render; `_bump` itself is never read here.\n\t\tvoid this._bump\n\n\t\tconst status = this._readFormStatus()\n\t\tif (status !== 'error') return nothing\n\n\t\tconst formMessage = this._readFormMessage()\n\t\tconst invalid = this._readInvalidFields()\n\t\tconst count = invalid.length\n\t\tconst heading =\n\t\t\tthis.heading ??\n\t\t\t(count === 0\n\t\t\t\t? 'There is a problem with this form'\n\t\t\t\t: `There ${count === 1 ? 'is' : 'are'} ${count} problem${count === 1 ? '' : 's'} with this form`)\n\n\t\treturn html`\n\t\t\t<div role=\"alert\" aria-labelledby=\"schmancy-form-summary-heading\">\n\t\t\t\t<h2 id=\"schmancy-form-summary-heading\">${heading}</h2>\n\t\t\t\t${formMessage ? html`<p>${formMessage}</p>` : nothing}\n\t\t\t\t${count > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t${invalid.map(\n\t\t\t\t\t\t\t\tf => html`\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\thref=\"#${f.id}\"\n\t\t\t\t\t\t\t\t\t\t\t@click=${(e: MouseEvent) => this._jumpToField(e, f.id)}\n\t\t\t\t\t\t\t\t\t\t>${f.label}: ${f.message}</a>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate _jumpToField(e: MouseEvent, fieldId: string): void {\n\t\te.preventDefault()\n\t\tconst target = this._form?.querySelector(`#${CSS.escape(fieldId)}`) as HTMLElement | null\n\t\ttarget?.focus()\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-form-summary': SchmancyFormSummary\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"form.cjs","names":[],"sources":["../src/form/form-summary.ts"],"sourcesContent":["/**\n * `<schmancy-form-summary>` — top-of-form error summary with anchor links to\n * each invalid field. Linear / GOV.UK / GitHub pattern.\n *\n * Drop one inside any `<schmancy-form>`; on submit-failure or when\n * `<schmancy-form>.setFormError(...)` is called, the summary renders a\n * `role=\"alert\"` banner with the form-level error message and a list of\n * links pointing at each invalid field's `id`.\n *\n * Hidden when the form is idle, submitting, or successful — only `error`\n * populates it.\n *\n * @element schmancy-form-summary\n */\n\nimport { html, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyElement } from '../../mixins'\nimport type SchmancyForm from './form'\n\n@customElement('schmancy-form-summary')\nexport class SchmancyFormSummary extends SchmancyElement {\n\t/**\n\t * Optional heading text. Defaults to a count-based summary\n\t * (\"1 problem with this form\" / \"3 problems with this form\").\n\t */\n\t@property({ type: String }) heading?: string\n\n\t/**\n\t * Render bumper — incremented to force a re-render when the form's state\n\t * changes (the actual content is computed from the DOM in render()).\n\t */\n\t@state() private bump: number = 0\n\n\tprivate form: SchmancyForm | null = null\n\tprivate formObserver?: MutationObserver\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis.form = this.closest('schmancy-form') as SchmancyForm | null\n\t\tif (!this.form) {\n\t\t\tconsole.error('[schmancy-form-summary] must be a descendant of <schmancy-form>')\n\t\t\treturn\n\t\t}\n\t\tconst bump = () => { this.bump++ }\n\t\tthis.formObserver = new MutationObserver(bump)\n\t\t// Form host attribute changes (aria-busy, :state class reflections,\n\t\t// descendant attribute changes for fields' aria-invalid). subtree:true\n\t\t// catches attribute mutations on every descendant including light-DOM\n\t\t// fields and the form's own host.\n\t\tthis.formObserver.observe(this.form, {\n\t\t\tattributes: true,\n\t\t\tsubtree: true,\n\t\t})\n\t\t// Defer live-region observation until the form has rendered its\n\t\t// shadow tree.\n\t\tconst attachLiveRegionObserver = async (): Promise<void> => {\n\t\t\tawait this.form?.updateComplete\n\t\t\tconst liveRegion = this.form?.shadowRoot?.querySelector('[role=\"status\"]')\n\t\t\tif (liveRegion) {\n\t\t\t\tthis.formObserver?.observe(liveRegion, {\n\t\t\t\t\tchildList: true,\n\t\t\t\t\tcharacterData: true,\n\t\t\t\t\tsubtree: true,\n\t\t\t\t})\n\t\t\t}\n\t\t\t// Force a render so the initial state is reflected.\n\t\t\tthis.bump++\n\t\t}\n\t\tvoid attachLiveRegionObserver()\n\t}\n\n\toverride disconnectedCallback(): void {\n\t\tthis.formObserver?.disconnect()\n\t\tthis.formObserver = undefined\n\t\tsuper.disconnectedCallback()\n\t}\n\n\tprivate readFormStatus(): 'idle' | 'submitting' | 'success' | 'error' {\n\t\tif (!this.form) return 'idle'\n\t\tif (this.form.matches(':state(error)')) return 'error'\n\t\tif (this.form.matches(':state(submitting)')) return 'submitting'\n\t\tif (this.form.matches(':state(success)')) return 'success'\n\t\treturn 'idle'\n\t}\n\n\tprivate readFormMessage(): string {\n\t\tconst liveRegion = this.form?.shadowRoot?.querySelector('[role=\"status\"]')\n\t\treturn liveRegion?.textContent?.trim() ?? ''\n\t}\n\n\tprivate readInvalidFields(): Array<{ id: string; label: string; message: string }> {\n\t\tif (!this.form) return []\n\t\tconst result: Array<{ id: string; label: string; message: string }> = []\n\t\tfor (const el of Array.from(this.form.querySelectorAll('*'))) {\n\t\t\tif (!(el instanceof HTMLElement)) continue\n\t\t\tlet isInvalid = false\n\t\t\ttry {\n\t\t\t\tisInvalid = el.matches(':state(invalid)')\n\t\t\t} catch {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!isInvalid) continue\n\t\t\tconst f = el as HTMLElement & {\n\t\t\t\tlabel?: string\n\t\t\t\tname?: string\n\t\t\t\tvalidationMessage?: string\n\t\t\t}\n\t\t\tresult.push({\n\t\t\t\tid: f.id,\n\t\t\t\tlabel: f.label || f.name || '(field)',\n\t\t\t\tmessage: f.validationMessage || 'Invalid value',\n\t\t\t})\n\t\t}\n\t\treturn result\n\t}\n\n\trender() {\n\t\t// Read everything fresh from the DOM each render — no @state cache, no\n\t\t// re-render loops. The MutationObserver bumps `bump` to trigger this\n\t\t// render; `bump` itself is never read here.\n\t\tvoid this.bump\n\n\t\tconst status = this.readFormStatus()\n\t\tif (status !== 'error') return nothing\n\n\t\tconst formMessage = this.readFormMessage()\n\t\tconst invalid = this.readInvalidFields()\n\t\tconst count = invalid.length\n\t\tconst heading =\n\t\t\tthis.heading ??\n\t\t\t(count === 0\n\t\t\t\t? 'There is a problem with this form'\n\t\t\t\t: `There ${count === 1 ? 'is' : 'are'} ${count} problem${count === 1 ? '' : 's'} with this form`)\n\n\t\treturn html`\n\t\t\t<div role=\"alert\" aria-labelledby=\"schmancy-form-summary-heading\">\n\t\t\t\t<h2 id=\"schmancy-form-summary-heading\">${heading}</h2>\n\t\t\t\t${formMessage ? html`<p>${formMessage}</p>` : nothing}\n\t\t\t\t${count > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t${invalid.map(\n\t\t\t\t\t\t\t\tf => html`\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\thref=\"#${f.id}\"\n\t\t\t\t\t\t\t\t\t\t\t@click=${(e: MouseEvent) => this.jumpToField(e, f.id)}\n\t\t\t\t\t\t\t\t\t\t>${f.label}: ${f.message}</a>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate jumpToField(e: MouseEvent, fieldId: string): void {\n\t\te.preventDefault()\n\t\tconst target = this.form?.querySelector(`#${CSS.escape(fieldId)}`) as HTMLElement | null\n\t\ttarget?.focus()\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-form-summary': SchmancyFormSummary\n\t}\n}\n"],"mappings":"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"}
package/dist/form.js CHANGED
@@ -1,53 +1,53 @@
1
- import { t as e, u as t } from "./SchmancyElement-CDT2q1lA.js";
2
- import "./mixins-De1zjyhy.js";
3
- import "./autocomplete-DIScyo8Q.js";
4
- import { t as n } from "./input-chip-BlWhOruv.js";
5
- import { t as r } from "./checkbox-B1wiM3Dv.js";
6
- import { n as i, r as a, t as o } from "./chips-vWmwqQed.js";
7
- import { n as s, t as c } from "./date-range-D3ge1b4c.js";
8
- import { n as l, t as u } from "./form-DA0hUu2h.js";
9
- import { n as d, t as f } from "./input-B_4g2ulO.js";
1
+ import { t as e, u as t } from "./SchmancyElement-BNnyBOwk.js";
2
+ import "./mixins-DGBI7YPO.js";
3
+ import "./autocomplete-DWiEqlQf.js";
4
+ import { t as n } from "./input-chip-BOrcKH-H.js";
5
+ import { t as r } from "./checkbox-Ce0DlAdW.js";
6
+ import { n as i, r as a, t as o } from "./chips-BoZSpSh_.js";
7
+ import { n as s, t as c } from "./date-range-DJrdpzev.js";
8
+ import { n as l, t as u } from "./form-DxaV_Ose.js";
9
+ import { n as d, t as f } from "./input-BCCHz6tB.js";
10
10
  import "./input.js";
11
- import { n as p, t as m } from "./radio-group-DxX0iJBo.js";
11
+ import { n as p, t as m } from "./radio-group-AHLvrN8O.js";
12
12
  import { SchmancyRange as h } from "./range.js";
13
- import { t as g } from "./select-C7gkA-ab.js";
13
+ import { t as g } from "./select-Cawz88lG.js";
14
14
  import { SchmancySwitch as _ } from "./switch.js";
15
- import "./textarea-BvqENhTW.js";
15
+ import "./textarea-MPyrMi-S.js";
16
16
  import { customElement as v, property as y, state as b } from "lit/decorators.js";
17
17
  import { html as x, nothing as S } from "lit";
18
18
  var C = class extends e {
19
19
  constructor(...e) {
20
- super(...e), this._bump = 0, this._form = null;
20
+ super(...e), this.bump = 0, this.form = null;
21
21
  }
22
22
  connectedCallback() {
23
- super.connectedCallback(), this._form = this.closest("schmancy-form"), this._form && (this._formObserver = new MutationObserver(() => {
24
- this._bump++;
25
- }), this._formObserver.observe(this._form, {
23
+ super.connectedCallback(), this.form = this.closest("schmancy-form"), this.form && (this.formObserver = new MutationObserver(() => {
24
+ this.bump++;
25
+ }), this.formObserver.observe(this.form, {
26
26
  attributes: !0,
27
27
  subtree: !0
28
28
  }), (async () => {
29
- await this._form?.updateComplete;
30
- let e = this._form?.shadowRoot?.querySelector("[role=\"status\"]");
31
- e && this._formObserver?.observe(e, {
29
+ await this.form?.updateComplete;
30
+ let e = this.form?.shadowRoot?.querySelector("[role=\"status\"]");
31
+ e && this.formObserver?.observe(e, {
32
32
  childList: !0,
33
33
  characterData: !0,
34
34
  subtree: !0
35
- }), this._bump++;
35
+ }), this.bump++;
36
36
  })());
37
37
  }
38
38
  disconnectedCallback() {
39
- this._formObserver?.disconnect(), this._formObserver = void 0, super.disconnectedCallback();
39
+ this.formObserver?.disconnect(), this.formObserver = void 0, super.disconnectedCallback();
40
40
  }
41
- _readFormStatus() {
42
- return this._form ? this._form.matches(":state(error)") ? "error" : this._form.matches(":state(submitting)") ? "submitting" : this._form.matches(":state(success)") ? "success" : "idle" : "idle";
41
+ readFormStatus() {
42
+ return this.form ? this.form.matches(":state(error)") ? "error" : this.form.matches(":state(submitting)") ? "submitting" : this.form.matches(":state(success)") ? "success" : "idle" : "idle";
43
43
  }
44
- _readFormMessage() {
45
- return (this._form?.shadowRoot?.querySelector("[role=\"status\"]"))?.textContent?.trim() ?? "";
44
+ readFormMessage() {
45
+ return (this.form?.shadowRoot?.querySelector("[role=\"status\"]"))?.textContent?.trim() ?? "";
46
46
  }
47
- _readInvalidFields() {
48
- if (!this._form) return [];
47
+ readInvalidFields() {
48
+ if (!this.form) return [];
49
49
  let e = [];
50
- for (let t of Array.from(this._form.querySelectorAll("*"))) {
50
+ for (let t of Array.from(this.form.querySelectorAll("*"))) {
51
51
  if (!(t instanceof HTMLElement)) continue;
52
52
  let n = !1;
53
53
  try {
@@ -66,8 +66,8 @@ var C = class extends e {
66
66
  return e;
67
67
  }
68
68
  render() {
69
- if (this._bump, this._readFormStatus() !== "error") return S;
70
- let e = this._readFormMessage(), t = this._readInvalidFields(), n = t.length;
69
+ if (this.bump, this.readFormStatus() !== "error") return S;
70
+ let e = this.readFormMessage(), t = this.readInvalidFields(), n = t.length;
71
71
  return x`
72
72
  <div role="alert" aria-labelledby="schmancy-form-summary-heading">
73
73
  <h2 id="schmancy-form-summary-heading">${this.heading ?? (n === 0 ? "There is a problem with this form" : `There ${n === 1 ? "is" : "are"} ${n} problem${n === 1 ? "" : "s"} with this form`)}</h2>
@@ -78,7 +78,7 @@ var C = class extends e {
78
78
  <li>
79
79
  <a
80
80
  href="#${e.id}"
81
- @click=${(t) => this._jumpToField(t, e.id)}
81
+ @click=${(t) => this.jumpToField(t, e.id)}
82
82
  >${e.label}: ${e.message}</a>
83
83
  </li>
84
84
  `)}
@@ -87,9 +87,9 @@ var C = class extends e {
87
87
  </div>
88
88
  `;
89
89
  }
90
- _jumpToField(e, t) {
91
- e.preventDefault(), (this._form?.querySelector(`#${CSS.escape(t)}`))?.focus();
90
+ jumpToField(e, t) {
91
+ e.preventDefault(), (this.form?.querySelector(`#${CSS.escape(t)}`))?.focus();
92
92
  }
93
93
  };
94
- t([y({ type: String })], C.prototype, "heading", void 0), t([b()], C.prototype, "_bump", void 0), C = t([v("schmancy-form-summary")], C);
94
+ t([y({ type: String })], C.prototype, "heading", void 0), t([b()], C.prototype, "bump", void 0), C = t([v("schmancy-form-summary")], C);
95
95
  export { m as RadioButton, p as RadioGroup, a as SchmancyAssistChip, r as SchmancyCheckbox, i as SchmancyChip, i as SchmancyFilterChip, c as SchmancyDateRange, u as SchmancyForm, C as SchmancyFormSummary, d as SchmancyInput, n as SchmancyInputChip, f as SchmancyInputCompat, h as SchmancyRange, g as SchmancySelect, o as SchmancySuggestionChip, _ as SchmancySwitch, l as formSubmitState, s as validateInitialDateRange };
package/dist/form.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","names":[],"sources":["../src/form/form-summary.ts"],"sourcesContent":["/**\n * `<schmancy-form-summary>` — top-of-form error summary with anchor links to\n * each invalid field. Linear / GOV.UK / GitHub pattern.\n *\n * Drop one inside any `<schmancy-form>`; on submit-failure or when\n * `<schmancy-form>.setFormError(...)` is called, the summary renders a\n * `role=\"alert\"` banner with the form-level error message and a list of\n * links pointing at each invalid field's `id`.\n *\n * Hidden when the form is idle, submitting, or successful — only `error`\n * populates it.\n *\n * @element schmancy-form-summary\n */\n\nimport { html, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyElement } from '../../mixins'\nimport type SchmancyForm from './form'\n\n@customElement('schmancy-form-summary')\nexport class SchmancyFormSummary extends SchmancyElement {\n\t/**\n\t * Optional heading text. Defaults to a count-based summary\n\t * (\"1 problem with this form\" / \"3 problems with this form\").\n\t */\n\t@property({ type: String }) heading?: string\n\n\t/**\n\t * Render bumper — incremented to force a re-render when the form's state\n\t * changes (the actual content is computed from the DOM in render()).\n\t */\n\t@state() private _bump: number = 0\n\n\tprivate _form: SchmancyForm | null = null\n\tprivate _formObserver?: MutationObserver\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis._form = this.closest('schmancy-form') as SchmancyForm | null\n\t\tif (!this._form) {\n\t\t\tconsole.error('[schmancy-form-summary] must be a descendant of <schmancy-form>')\n\t\t\treturn\n\t\t}\n\t\tconst bump = () => { this._bump++ }\n\t\tthis._formObserver = new MutationObserver(bump)\n\t\t// Form host attribute changes (aria-busy, :state class reflections,\n\t\t// descendant attribute changes for fields' aria-invalid). subtree:true\n\t\t// catches attribute mutations on every descendant including light-DOM\n\t\t// fields and the form's own host.\n\t\tthis._formObserver.observe(this._form, {\n\t\t\tattributes: true,\n\t\t\tsubtree: true,\n\t\t})\n\t\t// Defer live-region observation until the form has rendered its\n\t\t// shadow tree.\n\t\tconst attachLiveRegionObserver = async (): Promise<void> => {\n\t\t\tawait this._form?.updateComplete\n\t\t\tconst liveRegion = this._form?.shadowRoot?.querySelector('[role=\"status\"]')\n\t\t\tif (liveRegion) {\n\t\t\t\tthis._formObserver?.observe(liveRegion, {\n\t\t\t\t\tchildList: true,\n\t\t\t\t\tcharacterData: true,\n\t\t\t\t\tsubtree: true,\n\t\t\t\t})\n\t\t\t}\n\t\t\t// Force a render so the initial state is reflected.\n\t\t\tthis._bump++\n\t\t}\n\t\tvoid attachLiveRegionObserver()\n\t}\n\n\toverride disconnectedCallback(): void {\n\t\tthis._formObserver?.disconnect()\n\t\tthis._formObserver = undefined\n\t\tsuper.disconnectedCallback()\n\t}\n\n\tprivate _readFormStatus(): 'idle' | 'submitting' | 'success' | 'error' {\n\t\tif (!this._form) return 'idle'\n\t\tif (this._form.matches(':state(error)')) return 'error'\n\t\tif (this._form.matches(':state(submitting)')) return 'submitting'\n\t\tif (this._form.matches(':state(success)')) return 'success'\n\t\treturn 'idle'\n\t}\n\n\tprivate _readFormMessage(): string {\n\t\tconst liveRegion = this._form?.shadowRoot?.querySelector('[role=\"status\"]')\n\t\treturn liveRegion?.textContent?.trim() ?? ''\n\t}\n\n\tprivate _readInvalidFields(): Array<{ id: string; label: string; message: string }> {\n\t\tif (!this._form) return []\n\t\tconst result: Array<{ id: string; label: string; message: string }> = []\n\t\tfor (const el of Array.from(this._form.querySelectorAll('*'))) {\n\t\t\tif (!(el instanceof HTMLElement)) continue\n\t\t\tlet isInvalid = false\n\t\t\ttry {\n\t\t\t\tisInvalid = el.matches(':state(invalid)')\n\t\t\t} catch {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!isInvalid) continue\n\t\t\tconst f = el as HTMLElement & {\n\t\t\t\tlabel?: string\n\t\t\t\tname?: string\n\t\t\t\tvalidationMessage?: string\n\t\t\t}\n\t\t\tresult.push({\n\t\t\t\tid: f.id,\n\t\t\t\tlabel: f.label || f.name || '(field)',\n\t\t\t\tmessage: f.validationMessage || 'Invalid value',\n\t\t\t})\n\t\t}\n\t\treturn result\n\t}\n\n\trender() {\n\t\t// Read everything fresh from the DOM each render — no @state cache, no\n\t\t// re-render loops. The MutationObserver bumps `_bump` to trigger this\n\t\t// render; `_bump` itself is never read here.\n\t\tvoid this._bump\n\n\t\tconst status = this._readFormStatus()\n\t\tif (status !== 'error') return nothing\n\n\t\tconst formMessage = this._readFormMessage()\n\t\tconst invalid = this._readInvalidFields()\n\t\tconst count = invalid.length\n\t\tconst heading =\n\t\t\tthis.heading ??\n\t\t\t(count === 0\n\t\t\t\t? 'There is a problem with this form'\n\t\t\t\t: `There ${count === 1 ? 'is' : 'are'} ${count} problem${count === 1 ? '' : 's'} with this form`)\n\n\t\treturn html`\n\t\t\t<div role=\"alert\" aria-labelledby=\"schmancy-form-summary-heading\">\n\t\t\t\t<h2 id=\"schmancy-form-summary-heading\">${heading}</h2>\n\t\t\t\t${formMessage ? html`<p>${formMessage}</p>` : nothing}\n\t\t\t\t${count > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t${invalid.map(\n\t\t\t\t\t\t\t\tf => html`\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\thref=\"#${f.id}\"\n\t\t\t\t\t\t\t\t\t\t\t@click=${(e: MouseEvent) => this._jumpToField(e, f.id)}\n\t\t\t\t\t\t\t\t\t\t>${f.label}: ${f.message}</a>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate _jumpToField(e: MouseEvent, fieldId: string): void {\n\t\te.preventDefault()\n\t\tconst target = this._form?.querySelector(`#${CSS.escape(fieldId)}`) as HTMLElement | null\n\t\ttarget?.focus()\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-form-summary': SchmancyFormSummary\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"form.js","names":[],"sources":["../src/form/form-summary.ts"],"sourcesContent":["/**\n * `<schmancy-form-summary>` — top-of-form error summary with anchor links to\n * each invalid field. Linear / GOV.UK / GitHub pattern.\n *\n * Drop one inside any `<schmancy-form>`; on submit-failure or when\n * `<schmancy-form>.setFormError(...)` is called, the summary renders a\n * `role=\"alert\"` banner with the form-level error message and a list of\n * links pointing at each invalid field's `id`.\n *\n * Hidden when the form is idle, submitting, or successful — only `error`\n * populates it.\n *\n * @element schmancy-form-summary\n */\n\nimport { html, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyElement } from '../../mixins'\nimport type SchmancyForm from './form'\n\n@customElement('schmancy-form-summary')\nexport class SchmancyFormSummary extends SchmancyElement {\n\t/**\n\t * Optional heading text. Defaults to a count-based summary\n\t * (\"1 problem with this form\" / \"3 problems with this form\").\n\t */\n\t@property({ type: String }) heading?: string\n\n\t/**\n\t * Render bumper — incremented to force a re-render when the form's state\n\t * changes (the actual content is computed from the DOM in render()).\n\t */\n\t@state() private bump: number = 0\n\n\tprivate form: SchmancyForm | null = null\n\tprivate formObserver?: MutationObserver\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis.form = this.closest('schmancy-form') as SchmancyForm | null\n\t\tif (!this.form) {\n\t\t\tconsole.error('[schmancy-form-summary] must be a descendant of <schmancy-form>')\n\t\t\treturn\n\t\t}\n\t\tconst bump = () => { this.bump++ }\n\t\tthis.formObserver = new MutationObserver(bump)\n\t\t// Form host attribute changes (aria-busy, :state class reflections,\n\t\t// descendant attribute changes for fields' aria-invalid). subtree:true\n\t\t// catches attribute mutations on every descendant including light-DOM\n\t\t// fields and the form's own host.\n\t\tthis.formObserver.observe(this.form, {\n\t\t\tattributes: true,\n\t\t\tsubtree: true,\n\t\t})\n\t\t// Defer live-region observation until the form has rendered its\n\t\t// shadow tree.\n\t\tconst attachLiveRegionObserver = async (): Promise<void> => {\n\t\t\tawait this.form?.updateComplete\n\t\t\tconst liveRegion = this.form?.shadowRoot?.querySelector('[role=\"status\"]')\n\t\t\tif (liveRegion) {\n\t\t\t\tthis.formObserver?.observe(liveRegion, {\n\t\t\t\t\tchildList: true,\n\t\t\t\t\tcharacterData: true,\n\t\t\t\t\tsubtree: true,\n\t\t\t\t})\n\t\t\t}\n\t\t\t// Force a render so the initial state is reflected.\n\t\t\tthis.bump++\n\t\t}\n\t\tvoid attachLiveRegionObserver()\n\t}\n\n\toverride disconnectedCallback(): void {\n\t\tthis.formObserver?.disconnect()\n\t\tthis.formObserver = undefined\n\t\tsuper.disconnectedCallback()\n\t}\n\n\tprivate readFormStatus(): 'idle' | 'submitting' | 'success' | 'error' {\n\t\tif (!this.form) return 'idle'\n\t\tif (this.form.matches(':state(error)')) return 'error'\n\t\tif (this.form.matches(':state(submitting)')) return 'submitting'\n\t\tif (this.form.matches(':state(success)')) return 'success'\n\t\treturn 'idle'\n\t}\n\n\tprivate readFormMessage(): string {\n\t\tconst liveRegion = this.form?.shadowRoot?.querySelector('[role=\"status\"]')\n\t\treturn liveRegion?.textContent?.trim() ?? ''\n\t}\n\n\tprivate readInvalidFields(): Array<{ id: string; label: string; message: string }> {\n\t\tif (!this.form) return []\n\t\tconst result: Array<{ id: string; label: string; message: string }> = []\n\t\tfor (const el of Array.from(this.form.querySelectorAll('*'))) {\n\t\t\tif (!(el instanceof HTMLElement)) continue\n\t\t\tlet isInvalid = false\n\t\t\ttry {\n\t\t\t\tisInvalid = el.matches(':state(invalid)')\n\t\t\t} catch {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!isInvalid) continue\n\t\t\tconst f = el as HTMLElement & {\n\t\t\t\tlabel?: string\n\t\t\t\tname?: string\n\t\t\t\tvalidationMessage?: string\n\t\t\t}\n\t\t\tresult.push({\n\t\t\t\tid: f.id,\n\t\t\t\tlabel: f.label || f.name || '(field)',\n\t\t\t\tmessage: f.validationMessage || 'Invalid value',\n\t\t\t})\n\t\t}\n\t\treturn result\n\t}\n\n\trender() {\n\t\t// Read everything fresh from the DOM each render — no @state cache, no\n\t\t// re-render loops. The MutationObserver bumps `bump` to trigger this\n\t\t// render; `bump` itself is never read here.\n\t\tvoid this.bump\n\n\t\tconst status = this.readFormStatus()\n\t\tif (status !== 'error') return nothing\n\n\t\tconst formMessage = this.readFormMessage()\n\t\tconst invalid = this.readInvalidFields()\n\t\tconst count = invalid.length\n\t\tconst heading =\n\t\t\tthis.heading ??\n\t\t\t(count === 0\n\t\t\t\t? 'There is a problem with this form'\n\t\t\t\t: `There ${count === 1 ? 'is' : 'are'} ${count} problem${count === 1 ? '' : 's'} with this form`)\n\n\t\treturn html`\n\t\t\t<div role=\"alert\" aria-labelledby=\"schmancy-form-summary-heading\">\n\t\t\t\t<h2 id=\"schmancy-form-summary-heading\">${heading}</h2>\n\t\t\t\t${formMessage ? html`<p>${formMessage}</p>` : nothing}\n\t\t\t\t${count > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t${invalid.map(\n\t\t\t\t\t\t\t\tf => html`\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\thref=\"#${f.id}\"\n\t\t\t\t\t\t\t\t\t\t\t@click=${(e: MouseEvent) => this.jumpToField(e, f.id)}\n\t\t\t\t\t\t\t\t\t\t>${f.label}: ${f.message}</a>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate jumpToField(e: MouseEvent, fieldId: string): void {\n\t\te.preventDefault()\n\t\tconst target = this.form?.querySelector(`#${CSS.escape(fieldId)}`) as HTMLElement | null\n\t\ttarget?.focus()\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-form-summary': SchmancyFormSummary\n\t}\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gravity-6pL6CfIr.cjs","names":[],"sources":["../src/directives/gravity.ts"],"sourcesContent":["import { directive, type ElementPart, PartType } from 'lit/directive.js'\nimport { AsyncDirective } from 'lit/async-directive.js'\nimport { from, EMPTY } from 'rxjs'\nimport { take, catchError, tap } from 'rxjs/operators'\nimport { SPRING_SMOOTH, SPRING_BOUNCY } from '../utils/animation'\nimport { reducedMotion$ } from './reduced-motion'\n\nexport interface GravityOptions {\n\t/** Mass: 0.5 (light/bouncy) to 2.0 (heavy/damped). Default: 1.0 */\n\tmass?: number\n\t/** Fall distance in pixels (default: 30) */\n\tdistance?: number\n\t/** Delay before falling in ms (default: 0) */\n\tdelay?: number\n\t/** Stagger delay per item for lists — multiply by index (default: 0) */\n\tstagger?: number\n}\n\n/**\n * Gravity directive — elements fall into place and settle with mass-based bounce.\n *\n * Only animates ONCE on first render. Re-renders do not re-trigger.\n * Disconnecting and reconnecting re-triggers the animation.\n *\n * @example\n * ```html\n * <schmancy-card ${gravity()}>content</schmancy-card>\n *\n * ${repeat(items, item => item.id, (item, i) => html`\n * <div ${gravity({ stagger: 50 * i, mass: 0.8 })}>...</div>\n * `)}\n * ```\n */\nclass GravityDirective extends AsyncDirective {\n\tprivate element!: HTMLElement\n\tprivate animation?: Animation\n\tprivate hasAnimated = false\n\tprivate options?: GravityOptions\n\n\trender(_options?: GravityOptions) {\n\t\treturn undefined\n\t}\n\n\toverride update(part: ElementPart, [options]: [GravityOptions?]) {\n\t\tif (part.type !== PartType.ELEMENT) {\n\t\t\tthrow new Error('gravity directive must be used on an element')\n\t\t}\n\n\t\tthis.element = part.element as HTMLElement\n\t\tthis.options = options\n\n\t\tif (this.hasAnimated) return undefined\n\t\tif (reducedMotion$.value) {\n\t\t\tthis.hasAnimated = true\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst mass = Math.max(0.3, Math.min(3.0, options?.mass ?? 1.0))\n\t\tconst distance = options?.distance ?? 30\n\t\tconst delay = (options?.delay ?? 0) + (options?.stagger ?? 0)\n\n\t\tthis.animate(mass, distance, delay)\n\t\tthis.hasAnimated = true\n\n\t\treturn undefined\n\t}\n\n\toverride reconnected() {\n\t\tthis.hasAnimated = false\n\t\tif (this.options && !reducedMotion$.value) {\n\t\t\tconst mass = Math.max(0.3, Math.min(3.0, this.options.mass ?? 1.0))\n\t\t\tconst distance = this.options.distance ?? 30\n\t\t\tconst delay = (this.options.delay ?? 0) + (this.options.stagger ?? 0)\n\t\t\tthis.animate(mass, distance, delay)\n\t\t\tthis.hasAnimated = true\n\t\t}\n\t}\n\n\tprivate animate(mass: number, distance: number, delay: number) {\n\t\tconst preset = mass < 0.7 ? SPRING_BOUNCY : SPRING_SMOOTH\n\t\tconst duration = preset.duration * (1 / Math.sqrt(mass))\n\t\tconst fallDistance = distance * (1 / mass)\n\n\t\tthis.animation?.cancel()\n\n\t\tthis.element.style.willChange = 'transform, opacity'\n\t\tthis.animation = this.element.animate(\n\t\t\t[\n\t\t\t\t{ opacity: 0, transform: `translateY(-${fallDistance}px)` },\n\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration,\n\t\t\t\tdelay,\n\t\t\t\teasing: preset.easingFallback,\n\t\t\t\tfill: 'backwards',\n\t\t\t},\n\t\t)\n\n\t\t// RxJS cleanup instead of raw .then()\n\t\tfrom(this.animation.finished).pipe(\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tthis.element.style.willChange = ''\n\t\t\t\tthis.animation = undefined\n\t\t\t}),\n\t\t\tcatchError(() => EMPTY), // Animation cancelled — no cleanup needed\n\t\t).subscribe()\n\t}\n\n\toverride disconnected() {\n\t\tthis.animation?.cancel()\n\t\tthis.animation = undefined\n\t}\n}\n\nexport const gravity = directive(GravityDirective)\n"],"mappings":"2OAiCA,IAAM,EAAN,cAA+B,EAAA,cAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,YAAA,CAGR,CAAA,CAGtB,OAAO,EAAA,CAEP,CAEA,OAAgB,EAAA,CAAoB,GAAA,CACnC,GAAI,EAAK,OAAS,EAAA,SAAS,QAC1B,MAAU,MAAM,8CAAA,EAMjB,GAHA,KAAK,QAAU,EAAK,QACpB,KAAK,QAAU,EAEX,KAAK,YAAa,OACtB,GAAI,EAAA,EAAe,MAElB,OAAA,KADA,KAAK,YAAA,CAAc,GAIpB,IAAM,EAAO,KAAK,IAAI,GAAK,KAAK,IAAI,EAAK,GAAS,MAAQ,CAAA,CAAA,EACpD,EAAW,GAAS,UAAY,GAChC,GAAS,GAAS,OAAS,IAAM,GAAS,SAAW,GAE3D,KAAK,QAAQ,EAAM,EAAU,CAAA,EAC7B,KAAK,YAAA,CAAc,CAGpB,CAEA,aAAA,CAEC,GADA,KAAK,YAAA,CAAc,EACf,KAAK,SAAA,CAAY,EAAA,EAAe,MAAO,CAC1C,IAAM,EAAO,KAAK,IAAI,GAAK,KAAK,IAAI,EAAK,KAAK,QAAQ,MAAQ,CAAA,CAAA,EACxD,EAAW,KAAK,QAAQ,UAAY,GACpC,GAAS,KAAK,QAAQ,OAAS,IAAM,KAAK,QAAQ,SAAW,GACnE,KAAK,QAAQ,EAAM,EAAU,CAAA,EAC7B,KAAK,YAAA,CAAc,CACpB,CACD,CAEA,QAAgB,EAAc,EAAkB,EAAA,CAC/C,IAAM,EAAS,EAAO,GAAM,EAAA,EAAgB,EAAA,EACtC,EAAW,EAAO,UAAY,EAAI,KAAK,KAAK,CAAA,GAC5C,EAA2B,EAAI,EAAhB,EAErB,KAAK,WAAW,OAAA,EAEhB,KAAK,QAAQ,MAAM,WAAa,qBAChC,KAAK,UAAY,KAAK,QAAQ,QAC7B,CACC,CAAE,QAAS,EAAG,UAAW,eAAe,EAAA,IAAA,EACxC,CAAE,QAAS,EAAG,UAAW,eAAA,CAAA,EAE1B,CACC,SAAA,EACA,MAAA,EACA,OAAQ,EAAO,eACf,KAAM,WAAA,CAAA,GAKR,EAAA,EAAA,MAAK,KAAK,UAAU,QAAA,EAAU,MAAA,EAAA,EAAA,MACxB,CAAA,GAAC,EAAA,EAAA,SAAA,CAEL,KAAK,QAAQ,MAAM,WAAa,GAChC,KAAK,UAAA,IAAY,EAAA,CAAA,GACjB,EAAA,EAAA,gBACgB,EAAA,KAAA,CAAA,EAChB,UAAA,CACH,CAEA,cAAA,CACC,KAAK,WAAW,OAAA,EAChB,KAAK,UAAA,IAAY,EAClB,CAAA,EAGY,GAAA,EAAA,EAAA,WAAoB,CAAA,EAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"gravity-6pL6CfIr.cjs","names":[],"sources":["../src/directives/gravity.ts"],"sourcesContent":["import { directive, type ElementPart, PartType } from 'lit/directive.js'\nimport { AsyncDirective } from 'lit/async-directive.js'\nimport { from, EMPTY } from 'rxjs'\nimport { take, catchError, tap } from 'rxjs/operators'\nimport { SPRING_SMOOTH, SPRING_BOUNCY } from '../utils/animation'\nimport { reducedMotion$ } from './reduced-motion'\n\nexport interface GravityOptions {\n\t/** Mass: 0.5 (light/bouncy) to 2.0 (heavy/damped). Default: 1.0 */\n\tmass?: number\n\t/** Fall distance in pixels (default: 30) */\n\tdistance?: number\n\t/** Delay before falling in ms (default: 0) */\n\tdelay?: number\n\t/** Stagger delay per item for lists — multiply by index (default: 0) */\n\tstagger?: number\n}\n\n/**\n * Gravity directive — elements fall into place and settle with mass-based bounce.\n *\n * Only animates ONCE on first render. Re-renders do not re-trigger.\n * Disconnecting and reconnecting re-triggers the animation.\n *\n * @example\n * ```html\n * <schmancy-card ${gravity()}>content</schmancy-card>\n *\n * ${repeat(items, item => item.id, (item, i) => html`\n * <div ${gravity({ stagger: 50 * i, mass: 0.8 })}>...</div>\n * `)}\n * ```\n */\nclass GravityDirective extends AsyncDirective {\n\tprivate element!: HTMLElement\n\tprivate animation?: Animation\n\tprivate hasAnimated = false\n\tprivate options?: GravityOptions\n\n\trender(options?: GravityOptions) {\n\t\tvoid options\n\t\treturn undefined\n\t}\n\n\toverride update(part: ElementPart, [options]: [GravityOptions?]) {\n\t\tif (part.type !== PartType.ELEMENT) {\n\t\t\tthrow new Error('gravity directive must be used on an element')\n\t\t}\n\n\t\tthis.element = part.element as HTMLElement\n\t\tthis.options = options\n\n\t\tif (this.hasAnimated) return undefined\n\t\tif (reducedMotion$.value) {\n\t\t\tthis.hasAnimated = true\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst mass = Math.max(0.3, Math.min(3.0, options?.mass ?? 1.0))\n\t\tconst distance = options?.distance ?? 30\n\t\tconst delay = (options?.delay ?? 0) + (options?.stagger ?? 0)\n\n\t\tthis.animate(mass, distance, delay)\n\t\tthis.hasAnimated = true\n\n\t\treturn undefined\n\t}\n\n\toverride reconnected() {\n\t\tthis.hasAnimated = false\n\t\tif (this.options && !reducedMotion$.value) {\n\t\t\tconst mass = Math.max(0.3, Math.min(3.0, this.options.mass ?? 1.0))\n\t\t\tconst distance = this.options.distance ?? 30\n\t\t\tconst delay = (this.options.delay ?? 0) + (this.options.stagger ?? 0)\n\t\t\tthis.animate(mass, distance, delay)\n\t\t\tthis.hasAnimated = true\n\t\t}\n\t}\n\n\tprivate animate(mass: number, distance: number, delay: number) {\n\t\tconst preset = mass < 0.7 ? SPRING_BOUNCY : SPRING_SMOOTH\n\t\tconst duration = preset.duration * (1 / Math.sqrt(mass))\n\t\tconst fallDistance = distance * (1 / mass)\n\n\t\tthis.animation?.cancel()\n\n\t\tthis.element.style.willChange = 'transform, opacity'\n\t\tthis.animation = this.element.animate(\n\t\t\t[\n\t\t\t\t{ opacity: 0, transform: `translateY(-${fallDistance}px)` },\n\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration,\n\t\t\t\tdelay,\n\t\t\t\teasing: preset.easingFallback,\n\t\t\t\tfill: 'backwards',\n\t\t\t},\n\t\t)\n\n\t\t// RxJS cleanup instead of raw .then()\n\t\tfrom(this.animation.finished).pipe(\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tthis.element.style.willChange = ''\n\t\t\t\tthis.animation = undefined\n\t\t\t}),\n\t\t\tcatchError(() => EMPTY), // Animation cancelled — no cleanup needed\n\t\t).subscribe()\n\t}\n\n\toverride disconnected() {\n\t\tthis.animation?.cancel()\n\t\tthis.animation = undefined\n\t}\n}\n\nexport const gravity = directive(GravityDirective)\n"],"mappings":"2OAiCA,IAAM,EAAN,cAA+B,EAAA,cAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,YAAA,CAGR,CAAA,CAGtB,OAAO,EAAA,CAGP,CAEA,OAAgB,EAAA,CAAoB,GAAA,CACnC,GAAI,EAAK,OAAS,EAAA,SAAS,QAC1B,MAAU,MAAM,8CAAA,EAMjB,GAHA,KAAK,QAAU,EAAK,QACpB,KAAK,QAAU,EAEX,KAAK,YAAa,OACtB,GAAI,EAAA,EAAe,MAElB,OAAA,KADA,KAAK,YAAA,CAAc,GAIpB,IAAM,EAAO,KAAK,IAAI,GAAK,KAAK,IAAI,EAAK,GAAS,MAAQ,CAAA,CAAA,EACpD,EAAW,GAAS,UAAY,GAChC,GAAS,GAAS,OAAS,IAAM,GAAS,SAAW,GAE3D,KAAK,QAAQ,EAAM,EAAU,CAAA,EAC7B,KAAK,YAAA,CAAc,CAGpB,CAEA,aAAA,CAEC,GADA,KAAK,YAAA,CAAc,EACf,KAAK,SAAA,CAAY,EAAA,EAAe,MAAO,CAC1C,IAAM,EAAO,KAAK,IAAI,GAAK,KAAK,IAAI,EAAK,KAAK,QAAQ,MAAQ,CAAA,CAAA,EACxD,EAAW,KAAK,QAAQ,UAAY,GACpC,GAAS,KAAK,QAAQ,OAAS,IAAM,KAAK,QAAQ,SAAW,GACnE,KAAK,QAAQ,EAAM,EAAU,CAAA,EAC7B,KAAK,YAAA,CAAc,CACpB,CACD,CAEA,QAAgB,EAAc,EAAkB,EAAA,CAC/C,IAAM,EAAS,EAAO,GAAM,EAAA,EAAgB,EAAA,EACtC,EAAW,EAAO,UAAY,EAAI,KAAK,KAAK,CAAA,GAC5C,EAA2B,EAAI,EAAhB,EAErB,KAAK,WAAW,OAAA,EAEhB,KAAK,QAAQ,MAAM,WAAa,qBAChC,KAAK,UAAY,KAAK,QAAQ,QAC7B,CACC,CAAE,QAAS,EAAG,UAAW,eAAe,EAAA,IAAA,EACxC,CAAE,QAAS,EAAG,UAAW,eAAA,CAAA,EAE1B,CACC,SAAA,EACA,MAAA,EACA,OAAQ,EAAO,eACf,KAAM,WAAA,CAAA,GAKR,EAAA,EAAA,MAAK,KAAK,UAAU,QAAA,EAAU,MAAA,EAAA,EAAA,MACxB,CAAA,GAAC,EAAA,EAAA,SAAA,CAEL,KAAK,QAAQ,MAAM,WAAa,GAChC,KAAK,UAAA,IAAY,EAAA,CAAA,GACjB,EAAA,EAAA,gBACgB,EAAA,KAAA,CAAA,EAChB,UAAA,CACH,CAEA,cAAA,CACC,KAAK,WAAW,OAAA,EAChB,KAAK,UAAA,IAAY,EAClB,CAAA,EAGY,GAAA,EAAA,EAAA,WAAoB,CAAA,EAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"gravity-sVK3zGBF.js","names":[],"sources":["../src/directives/gravity.ts"],"sourcesContent":["import { directive, type ElementPart, PartType } from 'lit/directive.js'\nimport { AsyncDirective } from 'lit/async-directive.js'\nimport { from, EMPTY } from 'rxjs'\nimport { take, catchError, tap } from 'rxjs/operators'\nimport { SPRING_SMOOTH, SPRING_BOUNCY } from '../utils/animation'\nimport { reducedMotion$ } from './reduced-motion'\n\nexport interface GravityOptions {\n\t/** Mass: 0.5 (light/bouncy) to 2.0 (heavy/damped). Default: 1.0 */\n\tmass?: number\n\t/** Fall distance in pixels (default: 30) */\n\tdistance?: number\n\t/** Delay before falling in ms (default: 0) */\n\tdelay?: number\n\t/** Stagger delay per item for lists — multiply by index (default: 0) */\n\tstagger?: number\n}\n\n/**\n * Gravity directive — elements fall into place and settle with mass-based bounce.\n *\n * Only animates ONCE on first render. Re-renders do not re-trigger.\n * Disconnecting and reconnecting re-triggers the animation.\n *\n * @example\n * ```html\n * <schmancy-card ${gravity()}>content</schmancy-card>\n *\n * ${repeat(items, item => item.id, (item, i) => html`\n * <div ${gravity({ stagger: 50 * i, mass: 0.8 })}>...</div>\n * `)}\n * ```\n */\nclass GravityDirective extends AsyncDirective {\n\tprivate element!: HTMLElement\n\tprivate animation?: Animation\n\tprivate hasAnimated = false\n\tprivate options?: GravityOptions\n\n\trender(_options?: GravityOptions) {\n\t\treturn undefined\n\t}\n\n\toverride update(part: ElementPart, [options]: [GravityOptions?]) {\n\t\tif (part.type !== PartType.ELEMENT) {\n\t\t\tthrow new Error('gravity directive must be used on an element')\n\t\t}\n\n\t\tthis.element = part.element as HTMLElement\n\t\tthis.options = options\n\n\t\tif (this.hasAnimated) return undefined\n\t\tif (reducedMotion$.value) {\n\t\t\tthis.hasAnimated = true\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst mass = Math.max(0.3, Math.min(3.0, options?.mass ?? 1.0))\n\t\tconst distance = options?.distance ?? 30\n\t\tconst delay = (options?.delay ?? 0) + (options?.stagger ?? 0)\n\n\t\tthis.animate(mass, distance, delay)\n\t\tthis.hasAnimated = true\n\n\t\treturn undefined\n\t}\n\n\toverride reconnected() {\n\t\tthis.hasAnimated = false\n\t\tif (this.options && !reducedMotion$.value) {\n\t\t\tconst mass = Math.max(0.3, Math.min(3.0, this.options.mass ?? 1.0))\n\t\t\tconst distance = this.options.distance ?? 30\n\t\t\tconst delay = (this.options.delay ?? 0) + (this.options.stagger ?? 0)\n\t\t\tthis.animate(mass, distance, delay)\n\t\t\tthis.hasAnimated = true\n\t\t}\n\t}\n\n\tprivate animate(mass: number, distance: number, delay: number) {\n\t\tconst preset = mass < 0.7 ? SPRING_BOUNCY : SPRING_SMOOTH\n\t\tconst duration = preset.duration * (1 / Math.sqrt(mass))\n\t\tconst fallDistance = distance * (1 / mass)\n\n\t\tthis.animation?.cancel()\n\n\t\tthis.element.style.willChange = 'transform, opacity'\n\t\tthis.animation = this.element.animate(\n\t\t\t[\n\t\t\t\t{ opacity: 0, transform: `translateY(-${fallDistance}px)` },\n\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration,\n\t\t\t\tdelay,\n\t\t\t\teasing: preset.easingFallback,\n\t\t\t\tfill: 'backwards',\n\t\t\t},\n\t\t)\n\n\t\t// RxJS cleanup instead of raw .then()\n\t\tfrom(this.animation.finished).pipe(\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tthis.element.style.willChange = ''\n\t\t\t\tthis.animation = undefined\n\t\t\t}),\n\t\t\tcatchError(() => EMPTY), // Animation cancelled — no cleanup needed\n\t\t).subscribe()\n\t}\n\n\toverride disconnected() {\n\t\tthis.animation?.cancel()\n\t\tthis.animation = undefined\n\t}\n}\n\nexport const gravity = directive(GravityDirective)\n"],"mappings":";;;;;;AAiCA,IAmFa,IAAU,EAnFvB,cAA+B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,cAAA,CAGR;CAAA;CAGtB,OAAO,GAAA,CAEP;CAEA,OAAgB,GAAA,CAAoB,IAAA;EACnC,IAAI,EAAK,SAAS,EAAS,SAC1B,MAAU,MAAM,8CAAA;EAMjB,IAHA,KAAK,UAAU,EAAK,SACpB,KAAK,UAAU,GAEX,KAAK,aAAa;EACtB,IAAI,EAAe,OAElB,OAAA,MADA,KAAK,cAAA,CAAc;EAIpB,IAAM,IAAO,KAAK,IAAI,IAAK,KAAK,IAAI,GAAK,GAAS,QAAQ,CAAA,CAAA,GACpD,IAAW,GAAS,YAAY,IAChC,KAAS,GAAS,SAAS,MAAM,GAAS,WAAW;EAE3D,KAAK,QAAQ,GAAM,GAAU,CAAA,GAC7B,KAAK,cAAA,CAAc;CAGpB;CAEA,cAAA;EAEC,IADA,KAAK,cAAA,CAAc,GACf,KAAK,WAAA,CAAY,EAAe,OAAO;GAC1C,IAAM,IAAO,KAAK,IAAI,IAAK,KAAK,IAAI,GAAK,KAAK,QAAQ,QAAQ,CAAA,CAAA,GACxD,IAAW,KAAK,QAAQ,YAAY,IACpC,KAAS,KAAK,QAAQ,SAAS,MAAM,KAAK,QAAQ,WAAW;GACnE,KAAK,QAAQ,GAAM,GAAU,CAAA,GAC7B,KAAK,cAAA,CAAc;EACpB;CACD;CAEA,QAAgB,GAAc,GAAkB,GAAA;EAC/C,IAAM,IAAS,IAAO,KAAM,IAAgB,GACtC,IAAW,EAAO,YAAY,IAAI,KAAK,KAAK,CAAA,IAC5C,IAA2B,IAAI,IAAhB;EAErB,KAAK,WAAW,OAAA,GAEhB,KAAK,QAAQ,MAAM,aAAa,sBAChC,KAAK,YAAY,KAAK,QAAQ,QAC7B,CACC;GAAE,SAAS;GAAG,WAAW,eAAe,EAAA;EAAA,GACxC;GAAE,SAAS;GAAG,WAAW;EAAA,CAAA,GAE1B;GACC,UAAA;GACA,OAAA;GACA,QAAQ,EAAO;GACf,MAAM;EAAA,CAAA,GAKR,EAAK,KAAK,UAAU,QAAA,EAAU,KAC7B,EAAK,CAAA,GACL,QAAA;GACC,KAAK,QAAQ,MAAM,aAAa,IAChC,KAAK,YAAA,KAAY;EAAA,CAAA,GAElB,QAAiB,CAAA,CAAA,EAChB,UAAA;CACH;CAEA,eAAA;EACC,KAAK,WAAW,OAAA,GAChB,KAAK,YAAA,KAAY;CAClB;AAAA,CAAA;AAAA,SAAA,KAAA"}
1
+ {"version":3,"file":"gravity-sVK3zGBF.js","names":[],"sources":["../src/directives/gravity.ts"],"sourcesContent":["import { directive, type ElementPart, PartType } from 'lit/directive.js'\nimport { AsyncDirective } from 'lit/async-directive.js'\nimport { from, EMPTY } from 'rxjs'\nimport { take, catchError, tap } from 'rxjs/operators'\nimport { SPRING_SMOOTH, SPRING_BOUNCY } from '../utils/animation'\nimport { reducedMotion$ } from './reduced-motion'\n\nexport interface GravityOptions {\n\t/** Mass: 0.5 (light/bouncy) to 2.0 (heavy/damped). Default: 1.0 */\n\tmass?: number\n\t/** Fall distance in pixels (default: 30) */\n\tdistance?: number\n\t/** Delay before falling in ms (default: 0) */\n\tdelay?: number\n\t/** Stagger delay per item for lists — multiply by index (default: 0) */\n\tstagger?: number\n}\n\n/**\n * Gravity directive — elements fall into place and settle with mass-based bounce.\n *\n * Only animates ONCE on first render. Re-renders do not re-trigger.\n * Disconnecting and reconnecting re-triggers the animation.\n *\n * @example\n * ```html\n * <schmancy-card ${gravity()}>content</schmancy-card>\n *\n * ${repeat(items, item => item.id, (item, i) => html`\n * <div ${gravity({ stagger: 50 * i, mass: 0.8 })}>...</div>\n * `)}\n * ```\n */\nclass GravityDirective extends AsyncDirective {\n\tprivate element!: HTMLElement\n\tprivate animation?: Animation\n\tprivate hasAnimated = false\n\tprivate options?: GravityOptions\n\n\trender(options?: GravityOptions) {\n\t\tvoid options\n\t\treturn undefined\n\t}\n\n\toverride update(part: ElementPart, [options]: [GravityOptions?]) {\n\t\tif (part.type !== PartType.ELEMENT) {\n\t\t\tthrow new Error('gravity directive must be used on an element')\n\t\t}\n\n\t\tthis.element = part.element as HTMLElement\n\t\tthis.options = options\n\n\t\tif (this.hasAnimated) return undefined\n\t\tif (reducedMotion$.value) {\n\t\t\tthis.hasAnimated = true\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst mass = Math.max(0.3, Math.min(3.0, options?.mass ?? 1.0))\n\t\tconst distance = options?.distance ?? 30\n\t\tconst delay = (options?.delay ?? 0) + (options?.stagger ?? 0)\n\n\t\tthis.animate(mass, distance, delay)\n\t\tthis.hasAnimated = true\n\n\t\treturn undefined\n\t}\n\n\toverride reconnected() {\n\t\tthis.hasAnimated = false\n\t\tif (this.options && !reducedMotion$.value) {\n\t\t\tconst mass = Math.max(0.3, Math.min(3.0, this.options.mass ?? 1.0))\n\t\t\tconst distance = this.options.distance ?? 30\n\t\t\tconst delay = (this.options.delay ?? 0) + (this.options.stagger ?? 0)\n\t\t\tthis.animate(mass, distance, delay)\n\t\t\tthis.hasAnimated = true\n\t\t}\n\t}\n\n\tprivate animate(mass: number, distance: number, delay: number) {\n\t\tconst preset = mass < 0.7 ? SPRING_BOUNCY : SPRING_SMOOTH\n\t\tconst duration = preset.duration * (1 / Math.sqrt(mass))\n\t\tconst fallDistance = distance * (1 / mass)\n\n\t\tthis.animation?.cancel()\n\n\t\tthis.element.style.willChange = 'transform, opacity'\n\t\tthis.animation = this.element.animate(\n\t\t\t[\n\t\t\t\t{ opacity: 0, transform: `translateY(-${fallDistance}px)` },\n\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration,\n\t\t\t\tdelay,\n\t\t\t\teasing: preset.easingFallback,\n\t\t\t\tfill: 'backwards',\n\t\t\t},\n\t\t)\n\n\t\t// RxJS cleanup instead of raw .then()\n\t\tfrom(this.animation.finished).pipe(\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tthis.element.style.willChange = ''\n\t\t\t\tthis.animation = undefined\n\t\t\t}),\n\t\t\tcatchError(() => EMPTY), // Animation cancelled — no cleanup needed\n\t\t).subscribe()\n\t}\n\n\toverride disconnected() {\n\t\tthis.animation?.cancel()\n\t\tthis.animation = undefined\n\t}\n}\n\nexport const gravity = directive(GravityDirective)\n"],"mappings":";;;;;;AAiCA,IAoFa,IAAU,EApFvB,cAA+B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,cAAA,CAGR;CAAA;CAGtB,OAAO,GAAA,CAGP;CAEA,OAAgB,GAAA,CAAoB,IAAA;EACnC,IAAI,EAAK,SAAS,EAAS,SAC1B,MAAU,MAAM,8CAAA;EAMjB,IAHA,KAAK,UAAU,EAAK,SACpB,KAAK,UAAU,GAEX,KAAK,aAAa;EACtB,IAAI,EAAe,OAElB,OAAA,MADA,KAAK,cAAA,CAAc;EAIpB,IAAM,IAAO,KAAK,IAAI,IAAK,KAAK,IAAI,GAAK,GAAS,QAAQ,CAAA,CAAA,GACpD,IAAW,GAAS,YAAY,IAChC,KAAS,GAAS,SAAS,MAAM,GAAS,WAAW;EAE3D,KAAK,QAAQ,GAAM,GAAU,CAAA,GAC7B,KAAK,cAAA,CAAc;CAGpB;CAEA,cAAA;EAEC,IADA,KAAK,cAAA,CAAc,GACf,KAAK,WAAA,CAAY,EAAe,OAAO;GAC1C,IAAM,IAAO,KAAK,IAAI,IAAK,KAAK,IAAI,GAAK,KAAK,QAAQ,QAAQ,CAAA,CAAA,GACxD,IAAW,KAAK,QAAQ,YAAY,IACpC,KAAS,KAAK,QAAQ,SAAS,MAAM,KAAK,QAAQ,WAAW;GACnE,KAAK,QAAQ,GAAM,GAAU,CAAA,GAC7B,KAAK,cAAA,CAAc;EACpB;CACD;CAEA,QAAgB,GAAc,GAAkB,GAAA;EAC/C,IAAM,IAAS,IAAO,KAAM,IAAgB,GACtC,IAAW,EAAO,YAAY,IAAI,KAAK,KAAK,CAAA,IAC5C,IAA2B,IAAI,IAAhB;EAErB,KAAK,WAAW,OAAA,GAEhB,KAAK,QAAQ,MAAM,aAAa,sBAChC,KAAK,YAAY,KAAK,QAAQ,QAC7B,CACC;GAAE,SAAS;GAAG,WAAW,eAAe,EAAA;EAAA,GACxC;GAAE,SAAS;GAAG,WAAW;EAAA,CAAA,GAE1B;GACC,UAAA;GACA,OAAA;GACA,QAAQ,EAAO;GACf,MAAM;EAAA,CAAA,GAKR,EAAK,KAAK,UAAU,QAAA,EAAU,KAC7B,EAAK,CAAA,GACL,QAAA;GACC,KAAK,QAAQ,MAAM,aAAa,IAChC,KAAK,YAAA,KAAY;EAAA,CAAA,GAElB,QAAiB,CAAA,CAAA,EAChB,UAAA;CACH;CAEA,eAAA;EACC,KAAK,WAAW,OAAA,GAChB,KAAK,YAAA,KAAY;CAClB;AAAA,CAAA;AAAA,SAAA,KAAA"}
@@ -203,7 +203,7 @@ The manifest already has everything needed; the package is just the JSON-RPC wra
203
203
 
204
204
  **Problem.** `handover/agent-runtime-v1.md` had `<PENDING>` placeholders that we manually replaced with `0.9.13` after the first publish. Future handover docs will have the same issue.
205
205
 
206
- **Fix.** A build step that substitutes `0.10.37` in `handover/**/*.md` against `package.json`'s `version` field on every build. `dist/handover/**/*.md` gets the rendered version; the source stays templated.
206
+ **Fix.** A build step that substitutes `0.10.39` in `handover/**/*.md` against `package.json`'s `version` field on every build. `dist/handover/**/*.md` gets the rendered version; the source stays templated.
207
207
 
208
208
  **Effort:** ~30 min (one sed step or a tiny script).
209
209
 
@@ -7,8 +7,8 @@
7
7
  ## The URLs you asked for
8
8
 
9
9
  ```
10
- https://esm.sh/@mhmo91/schmancy/agent@0.10.37
11
- https://esm.sh/@mhmo91/schmancy/agent/manifest@0.10.37
10
+ https://esm.sh/@mhmo91/schmancy/agent@0.10.39
11
+ https://esm.sh/@mhmo91/schmancy/agent/manifest@0.10.39
12
12
  ```
13
13
 
14
14
  `0.9.13` is the first release containing `/agent`; every subsequent publish serves the same subpath. `npm view @mhmo91/schmancy version` always returns the current pin if you want to float forward.
@@ -20,7 +20,7 @@ One script tag. No bundler, no bare specifiers, no npm install.
20
20
  ```html
21
21
  <!doctype html>
22
22
  <script type="module">
23
- import { $dialog, theme } from 'https://esm.sh/@mhmo91/schmancy/agent@0.10.37';
23
+ import { $dialog, theme } from 'https://esm.sh/@mhmo91/schmancy/agent@0.10.39';
24
24
  </script>
25
25
  <schmancy-theme root scheme="dark">
26
26
  <schmancy-surface type="solid" fill="all">
@@ -1,10 +1,10 @@
1
- import { t as e, u as t } from "./SchmancyElement-CDT2q1lA.js";
2
- import "./mixins-De1zjyhy.js";
1
+ import { t as e, u as t } from "./SchmancyElement-BNnyBOwk.js";
2
+ import "./mixins-DGBI7YPO.js";
3
3
  import { customElement as n, state as r } from "lit/decorators.js";
4
4
  import { css as i, html as a, nothing as o, svg as s } from "lit";
5
5
  var c = class extends e {
6
6
  constructor(...e) {
7
- super(...e), this._name = "";
7
+ super(...e), this.name = "";
8
8
  }
9
9
  static {
10
10
  this.styles = [i`
@@ -28,19 +28,19 @@ var c = class extends e {
28
28
  `];
29
29
  }
30
30
  connectedCallback() {
31
- super.connectedCallback(), this._name = this.textContent?.trim() ?? "", this._observer = new MutationObserver(() => {
32
- this._name = this.textContent?.trim() ?? "";
33
- }), this._observer.observe(this, {
31
+ super.connectedCallback(), this.name = this.textContent?.trim() ?? "", this.observer = new MutationObserver(() => {
32
+ this.name = this.textContent?.trim() ?? "";
33
+ }), this.observer.observe(this, {
34
34
  childList: !0,
35
35
  characterData: !0,
36
36
  subtree: !0
37
37
  }), this.setAttribute("aria-hidden", "true"), this.setAttribute("translate", "no");
38
38
  }
39
39
  disconnectedCallback() {
40
- super.disconnectedCallback(), this._observer?.disconnect();
40
+ super.disconnectedCallback(), this.observer?.disconnect();
41
41
  }
42
42
  render() {
43
- let e = window.__siIcons?.[this._name];
43
+ let e = window.__siIcons?.[this.name];
44
44
  return a`
45
45
  <slot style="display:none"></slot>
46
46
  ${e ? a`<svg viewBox="0 -960 960 960" xmlns="http://www.w3.org/2000/svg">
@@ -49,4 +49,4 @@ var c = class extends e {
49
49
  `;
50
50
  }
51
51
  };
52
- t([r()], c.prototype, "_name", void 0), c = t([n("schmancy-icon")], c);
52
+ t([r()], c.prototype, "name", void 0), c = t([n("schmancy-icon")], c);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons-CJ2mXcBi.js","names":[],"sources":["../src/icons/icon.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, nothing, svg } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line no-underscore-dangle -- public runtime contract: global populated by the external schmancy-icons Vite plugin; renaming breaks consumers\n __siIcons?: Record<string, string>\n }\n}\n\n/**\n * @element schmancy-icon\n * Renders a Material Symbol inline as SVG — path data comes from\n * window.__siIcons populated by the schmancy-icons Vite plugin.\n *\n * Size: set font-size on the host via Tailwind (e.g. class=\"text-2xl\").\n * Color: inherits currentColor.\n * Active fill: use the \"-fill\" variant name: \"home-fill\".\n *\n * Usage:\n * <schmancy-icon>home</schmancy-icon>\n * <schmancy-icon class=\"text-lg text-primary-default\">delete</schmancy-icon>\n * <schmancy-icon>${active ? 'home-fill' : 'home'}</schmancy-icon>\n */\n@customElement('schmancy-icon')\nexport default class SchmancyIcon extends SchmancyElement {\n\tstatic styles = [css`\n\t\t:host {\n\t\t\tdisplay: inline-flex;\n\t\t\tplace-items: center;\n\t\t\tplace-content: center;\n\t\t\tfont-size: 24px;\n\t\t\twidth: 1em;\n\t\t\theight: 1em;\n\t\t\tflex-shrink: 0;\n\t\t\tcolor: inherit;\n\t\t}\n\n\t\tsvg {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tfill: currentColor;\n\t\t\toverflow: visible;\n\t\t}\n\t`]\n\n\t@state() private name = ''\n\n\tprivate observer?: MutationObserver\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis.name = this.textContent?.trim() ?? ''\n\t\tthis.observer = new MutationObserver(() => {\n\t\t\tthis.name = this.textContent?.trim() ?? ''\n\t\t})\n\t\tthis.observer.observe(this, { childList: true, characterData: true, subtree: true })\n\t\tthis.setAttribute('aria-hidden', 'true')\n\t\tthis.setAttribute('translate', 'no')\n\t}\n\n\toverride disconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.observer?.disconnect()\n\t}\n\n\tprotected override render(): unknown {\n\t\t// eslint-disable-next-line no-underscore-dangle -- public runtime contract: see Window.__siIcons declaration above\n\t\tconst path = window.__siIcons?.[this.name]\n\t\treturn html`\n\t\t\t<slot style=\"display:none\"></slot>\n\t\t\t${path\n\t\t\t\t? html`<svg viewBox=\"0 -960 960 960\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t\t${svg`<path d=\"${path}\"/>`}\n\t\t\t\t\t</svg>`\n\t\t\t\t: nothing}\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon': SchmancyIcon\n\t}\n}\n"],"mappings":";;;;AA0Be,IAAA,IAAA,cAA2B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,OAqBjB;CAAA;CAAA;EAAA,KAAA,SApBR,CAAC,CAAG;;;;;;;;;;;;;;;;;;;;CAwBpB,oBAAA;EACC,MAAM,kBAAA,GACN,KAAK,OAAO,KAAK,aAAa,KAAA,KAAU,IACxC,KAAK,WAAW,IAAI,uBAAA;GACnB,KAAK,OAAO,KAAK,aAAa,KAAA,KAAU;EAAA,CAAA,GAEzC,KAAK,SAAS,QAAQ,MAAM;GAAE,WAAA,CAAW;GAAM,eAAA,CAAe;GAAM,SAAA,CAAS;EAAA,CAAA,GAC7E,KAAK,aAAa,eAAe,MAAA,GACjC,KAAK,aAAa,aAAa,IAAA;CAChC;CAEA,uBAAA;EACC,MAAM,qBAAA,GACN,KAAK,UAAU,WAAA;CAChB;CAEA,SAAA;EAEC,IAAM,IAAO,OAAO,YAAY,KAAK;EACrC,OAAO,CAAI;;KAER,IACC,CAAI;QACF,CAAG,YAAY,EAAA,KAAA;eAEjB,EAAA;;CAEL;AAAA;AAAA,EAAA,CA/BC,EAAA,CAAA,GAAM,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CAtBP,EAAc,eAAA,CAAA,GAAe,CAAA"}
@@ -0,0 +1,24 @@
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`);require(`./mixins-fIpzhVMd.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`);var r=class extends e.t{constructor(...e){super(...e),this.name=``}static{this.styles=[n.css`
2
+ :host {
3
+ display: inline-flex;
4
+ place-items: center;
5
+ place-content: center;
6
+ font-size: 24px;
7
+ width: 1em;
8
+ height: 1em;
9
+ flex-shrink: 0;
10
+ color: inherit;
11
+ }
12
+
13
+ svg {
14
+ width: 100%;
15
+ height: 100%;
16
+ fill: currentColor;
17
+ overflow: visible;
18
+ }
19
+ `]}connectedCallback(){super.connectedCallback(),this.name=this.textContent?.trim()??``,this.observer=new MutationObserver(()=>{this.name=this.textContent?.trim()??``}),this.observer.observe(this,{childList:!0,characterData:!0,subtree:!0}),this.setAttribute(`aria-hidden`,`true`),this.setAttribute(`translate`,`no`)}disconnectedCallback(){super.disconnectedCallback(),this.observer?.disconnect()}render(){let e=window.__siIcons?.[this.name];return n.html`
20
+ <slot style="display:none"></slot>
21
+ ${e?n.html`<svg viewBox="0 -960 960 960" xmlns="http://www.w3.org/2000/svg">
22
+ ${n.svg`<path d="${e}"/>`}
23
+ </svg>`:n.nothing}
24
+ `}};e.u([(0,t.state)()],r.prototype,`name`,void 0),r=e.u([(0,t.customElement)(`schmancy-icon`)],r);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons-sZ-LybA9.cjs","names":[],"sources":["../src/icons/icon.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, nothing, svg } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line no-underscore-dangle -- public runtime contract: global populated by the external schmancy-icons Vite plugin; renaming breaks consumers\n __siIcons?: Record<string, string>\n }\n}\n\n/**\n * @element schmancy-icon\n * Renders a Material Symbol inline as SVG — path data comes from\n * window.__siIcons populated by the schmancy-icons Vite plugin.\n *\n * Size: set font-size on the host via Tailwind (e.g. class=\"text-2xl\").\n * Color: inherits currentColor.\n * Active fill: use the \"-fill\" variant name: \"home-fill\".\n *\n * Usage:\n * <schmancy-icon>home</schmancy-icon>\n * <schmancy-icon class=\"text-lg text-primary-default\">delete</schmancy-icon>\n * <schmancy-icon>${active ? 'home-fill' : 'home'}</schmancy-icon>\n */\n@customElement('schmancy-icon')\nexport default class SchmancyIcon extends SchmancyElement {\n\tstatic styles = [css`\n\t\t:host {\n\t\t\tdisplay: inline-flex;\n\t\t\tplace-items: center;\n\t\t\tplace-content: center;\n\t\t\tfont-size: 24px;\n\t\t\twidth: 1em;\n\t\t\theight: 1em;\n\t\t\tflex-shrink: 0;\n\t\t\tcolor: inherit;\n\t\t}\n\n\t\tsvg {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tfill: currentColor;\n\t\t\toverflow: visible;\n\t\t}\n\t`]\n\n\t@state() private name = ''\n\n\tprivate observer?: MutationObserver\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis.name = this.textContent?.trim() ?? ''\n\t\tthis.observer = new MutationObserver(() => {\n\t\t\tthis.name = this.textContent?.trim() ?? ''\n\t\t})\n\t\tthis.observer.observe(this, { childList: true, characterData: true, subtree: true })\n\t\tthis.setAttribute('aria-hidden', 'true')\n\t\tthis.setAttribute('translate', 'no')\n\t}\n\n\toverride disconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.observer?.disconnect()\n\t}\n\n\tprotected override render(): unknown {\n\t\t// eslint-disable-next-line no-underscore-dangle -- public runtime contract: see Window.__siIcons declaration above\n\t\tconst path = window.__siIcons?.[this.name]\n\t\treturn html`\n\t\t\t<slot style=\"display:none\"></slot>\n\t\t\t${path\n\t\t\t\t? html`<svg viewBox=\"0 -960 960 960\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t\t${svg`<path d=\"${path}\"/>`}\n\t\t\t\t\t</svg>`\n\t\t\t\t: nothing}\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon': SchmancyIcon\n\t}\n}\n"],"mappings":"uKA0Be,IAAA,EAAA,cAA2B,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,KAqBjB,EAAA,CAAA,OAAA,KAAA,OApBR,CAAC,EAAA,GAAG;;;;;;;;;;;;;;;;;;IAwBpB,mBAAA,CACC,MAAM,kBAAA,EACN,KAAK,KAAO,KAAK,aAAa,KAAA,GAAU,GACxC,KAAK,SAAW,IAAI,qBAAA,CACnB,KAAK,KAAO,KAAK,aAAa,KAAA,GAAU,EAAA,CAAA,EAEzC,KAAK,SAAS,QAAQ,KAAM,CAAE,UAAA,CAAW,EAAM,cAAA,CAAe,EAAM,QAAA,CAAS,CAAA,CAAA,EAC7E,KAAK,aAAa,cAAe,MAAA,EACjC,KAAK,aAAa,YAAa,IAAA,CAChC,CAEA,sBAAA,CACC,MAAM,qBAAA,EACN,KAAK,UAAU,WAAA,CAChB,CAEA,QAAA,CAEC,IAAM,EAAO,OAAO,YAAY,KAAK,MACrC,MAAO,GAAA,IAAI;;KAER,EACC,EAAA,IAAI;QACF,EAAA,GAAG,YAAY,EAAA,KAAA;aAEjB,EAAA,QAAA;GAEL,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,CAAA,EA/BO,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eAtBO,eAAA,CAAA,EAAe,CAAA"}
package/dist/icons.cjs CHANGED
@@ -1 +1 @@
1
- require(`./icons-CW3-oMSb.cjs`);
1
+ require(`./icons-sZ-LybA9.cjs`);
package/dist/icons.js CHANGED
@@ -1 +1 @@
1
- import "./icons-C6UfxmHZ.js";
1
+ import "./icons-CJ2mXcBi.js";
@@ -1,11 +1,11 @@
1
- import { t as e, u as t } from "./SchmancyElement-CDT2q1lA.js";
2
- import "./mixins-De1zjyhy.js";
1
+ import { t as e, u as t } from "./SchmancyElement-BNnyBOwk.js";
2
+ import "./mixins-DGBI7YPO.js";
3
3
  import { customElement as n, property as r, state as i } from "lit/decorators.js";
4
4
  import { css as a, html as o } from "lit";
5
5
  import { createRef as s, ref as c } from "lit/directives/ref.js";
6
6
  var l = class extends e {
7
7
  constructor(...e) {
8
- super(...e), this.html = "", this.css = "", this.baseCss = "html,body{margin:0;padding:0;overflow:hidden;background:#fff;color:#1a1a1a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;line-height:1.6;word-wrap:break-word;overflow-wrap:break-word}\nbody{padding:16px}\np{margin:0 0 1em}p:last-child{margin-bottom:0}\nul,ol{margin:0 0 1em;padding-left:1.5em}li{margin-bottom:.25em}\nh1,h2,h3,h4{margin:0 0 .5em;line-height:1.3}h1{font-size:1.5em}h2{font-size:1.25em}h3{font-size:1.1em}h4{font-size:1em}\nhr{border:none;border-top:1px solid #dadce0;margin:1em 0}\nimg{max-width:100%;height:auto}\ntable{border-collapse:collapse;max-width:100%}td,th{padding:4px 8px;border:1px solid #dadce0}\nblockquote{margin:0 0 1em;padding:.5em 0 .5em 1em;border-left:3px solid #dadce0;color:#5f6368}\npre{background:#f5f5f5;padding:.75em;border-radius:4px;overflow-x:auto;font-size:.9em}\ncode{background:#f5f5f5;padding:.1em .3em;border-radius:3px;font-size:.9em}", this.sandbox = "allow-same-origin allow-popups", this.minHeight = 60, this._height = 60, this._srcdoc = "", this._iframeRef = s();
8
+ super(...e), this.html = "", this.css = "", this.baseCss = "html,body{margin:0;padding:0;overflow:hidden;background:#fff;color:#1a1a1a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;line-height:1.6;word-wrap:break-word;overflow-wrap:break-word}\nbody{padding:16px}\np{margin:0 0 1em}p:last-child{margin-bottom:0}\nul,ol{margin:0 0 1em;padding-left:1.5em}li{margin-bottom:.25em}\nh1,h2,h3,h4{margin:0 0 .5em;line-height:1.3}h1{font-size:1.5em}h2{font-size:1.25em}h3{font-size:1.1em}h4{font-size:1em}\nhr{border:none;border-top:1px solid #dadce0;margin:1em 0}\nimg{max-width:100%;height:auto}\ntable{border-collapse:collapse;max-width:100%}td,th{padding:4px 8px;border:1px solid #dadce0}\nblockquote{margin:0 0 1em;padding:.5em 0 .5em 1em;border-left:3px solid #dadce0;color:#5f6368}\npre{background:#f5f5f5;padding:.75em;border-radius:4px;overflow-x:auto;font-size:.9em}\ncode{background:#f5f5f5;padding:.1em .3em;border-radius:3px;font-size:.9em}", this.sandbox = "allow-same-origin allow-popups", this.minHeight = 60, this.height = 60, this.srcdoc = "", this.iframeRef = s();
9
9
  }
10
10
  static {
11
11
  this.styles = [a`
@@ -19,10 +19,10 @@ var l = class extends e {
19
19
  `];
20
20
  }
21
21
  willUpdate(e) {
22
- (e.has("html") || e.has("css") || e.has("baseCss")) && (this._srcdoc = this.html ? this.buildSrcdoc() : "", this._height = this.minHeight);
22
+ (e.has("html") || e.has("css") || e.has("baseCss")) && (this.srcdoc = this.html ? this.buildSrcdoc() : "", this.height = this.minHeight);
23
23
  }
24
24
  updated(e) {
25
- e.has("sandbox") && this._iframeRef.value?.setAttribute("sandbox", this.sandbox);
25
+ e.has("sandbox") && this.iframeRef.value?.setAttribute("sandbox", this.sandbox);
26
26
  }
27
27
  buildSrcdoc() {
28
28
  return `<!DOCTYPE html><html><head>\n<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">\n<base target="_blank">\n<style>${this.css ? `${this.baseCss}\n${this.css}` : this.baseCss}</style></head><body>${this.html}</body></html>`;
@@ -32,20 +32,20 @@ var l = class extends e {
32
32
  try {
33
33
  let e = t.contentDocument;
34
34
  if (!e) return;
35
- this._height = Math.max(e.documentElement.scrollHeight, this.minHeight);
35
+ this.height = Math.max(e.documentElement.scrollHeight, this.minHeight);
36
36
  } catch {
37
- this._height = Math.max(200, this.minHeight);
37
+ this.height = Math.max(200, this.minHeight);
38
38
  }
39
39
  }
40
40
  render() {
41
41
  return this.html ? o`<iframe
42
- ${c(this._iframeRef)}
43
- .srcdoc=${this._srcdoc}
44
- style="height:${this._height}px;min-height:${this.minHeight}px;overflow:hidden"
42
+ ${c(this.iframeRef)}
43
+ .srcdoc=${this.srcdoc}
44
+ style="height:${this.height}px;min-height:${this.minHeight}px;overflow:hidden"
45
45
  @load=${this.onLoad}
46
46
  ></iframe>` : o``;
47
47
  }
48
48
  };
49
- t([r({ type: String })], l.prototype, "html", void 0), t([r({ type: String })], l.prototype, "css", void 0), t([r({ type: String })], l.prototype, "baseCss", void 0), t([r({ type: String })], l.prototype, "sandbox", void 0), t([r({ type: Number })], l.prototype, "minHeight", void 0), t([i()], l.prototype, "_height", void 0);
49
+ t([r({ type: String })], l.prototype, "html", void 0), t([r({ type: String })], l.prototype, "css", void 0), t([r({ type: String })], l.prototype, "baseCss", void 0), t([r({ type: String })], l.prototype, "sandbox", void 0), t([r({ type: Number })], l.prototype, "minHeight", void 0), t([i()], l.prototype, "height", void 0);
50
50
  var u = l = t([n("schmancy-iframe")], l);
51
51
  export { u as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframe-DWvN5nGB.js","names":[],"sources":["../src/iframe/iframe.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\n\n/** Sensible document reset for iframe content — font, spacing, word-wrap */\nconst DEFAULT_BASE_CSS = `html,body{margin:0;padding:0;overflow:hidden;background:#fff;color:#1a1a1a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;line-height:1.6;word-wrap:break-word;overflow-wrap:break-word}\nbody{padding:16px}\np{margin:0 0 1em}p:last-child{margin-bottom:0}\nul,ol{margin:0 0 1em;padding-left:1.5em}li{margin-bottom:.25em}\nh1,h2,h3,h4{margin:0 0 .5em;line-height:1.3}h1{font-size:1.5em}h2{font-size:1.25em}h3{font-size:1.1em}h4{font-size:1em}\nhr{border:none;border-top:1px solid #dadce0;margin:1em 0}\nimg{max-width:100%;height:auto}\ntable{border-collapse:collapse;max-width:100%}td,th{padding:4px 8px;border:1px solid #dadce0}\nblockquote{margin:0 0 1em;padding:.5em 0 .5em 1em;border-left:3px solid #dadce0;color:#5f6368}\npre{background:#f5f5f5;padding:.75em;border-radius:4px;overflow-x:auto;font-size:.9em}\ncode{background:#f5f5f5;padding:.1em .3em;border-radius:3px;font-size:.9em}`\n\n/**\n * Renders an HTML fragment inside a sandboxed, auto-sizing iframe.\n *\n * @slot - (none)\n * @fires load — native iframe load event\n *\n * @example\n * ```html\n * <schmancy-iframe .html=${bodyHtml} .css=${extraStyles}></schmancy-iframe>\n * ```\n */\n@customElement('schmancy-iframe')\nexport default class SchmancyIframe extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t}\n\tiframe {\n\t\tborder: 0;\n\t\twidth: 100%;\n\t}\n`];\n\t/** HTML body fragment to render inside the iframe */\n\t@property({ type: String }) html = ''\n\n\t/** Additional CSS injected after the base styles (consumer-specific) */\n\t@property({ type: String }) css = ''\n\n\t/** Base document CSS (font, spacing, resets). Override for fully custom styling */\n\t@property({ type: String }) baseCss = DEFAULT_BASE_CSS\n\n\t/** iframe sandbox attribute */\n\t@property({ type: String }) sandbox = 'allow-same-origin allow-popups'\n\n\t/** Minimum height in pixels */\n\t@property({ type: Number }) minHeight = 60\n\n\t@state() private height = 60\n\tprivate srcdoc = ''\n\tprivate iframeRef = createRef<HTMLIFrameElement>()\n\n\tprotected willUpdate(changed: PropertyValues) {\n\t\tif (changed.has('html') || changed.has('css') || changed.has('baseCss')) {\n\t\t\tthis.srcdoc = this.html ? this.buildSrcdoc() : ''\n\t\t\tthis.height = this.minHeight\n\t\t}\n\t}\n\n\tprotected updated(changed: PropertyValues) {\n\t\tif (changed.has('sandbox')) {\n\t\t\tthis.iframeRef.value?.setAttribute('sandbox', this.sandbox)\n\t\t}\n\t}\n\n\tprivate buildSrcdoc(): string {\n\t\tconst styles = this.css ? `${this.baseCss}\\n${this.css}` : this.baseCss\n\t\treturn `<!DOCTYPE html><html><head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<base target=\"_blank\">\n<style>${styles}</style></head><body>${this.html}</body></html>`\n\t}\n\n\tprivate onLoad(e: Event) {\n\t\tconst iframe = e.target as HTMLIFrameElement\n\t\ttry {\n\t\t\tconst doc = iframe.contentDocument\n\t\t\tif (!doc) return\n\t\t\tthis.height = Math.max(doc.documentElement.scrollHeight, this.minHeight)\n\t\t} catch {\n\t\t\tthis.height = Math.max(200, this.minHeight)\n\t\t}\n\t}\n\n\tprotected render() {\n\t\tif (!this.html) return html``\n\t\treturn html`<iframe\n\t\t\t${ref(this.iframeRef)}\n\t\t\t.srcdoc=${this.srcdoc}\n\t\t\tstyle=\"height:${this.height}px;min-height:${this.minHeight}px;overflow:hidden\"\n\t\t\t@load=${this.onLoad}\n\t\t></iframe>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-iframe': SchmancyIframe\n\t}\n}\n"],"mappings":";;;;;AAMA,IAwBe,IAAA,cAA6B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,OAWR,IAAA,KAAA,MAGD,IAAA,KAAA,UAtCV,27BAAA,KAAA,UA4Cc,kCAAA,KAAA,YAGE,IAAA,KAAA,SAEd,IAAA,KAAA,SACT,IAAA,KAAA,YACG,EAAA;CAAA;CAAA;EAAA,KAAA,SA1BJ,CAAC,CAAG;;;;;;;;;;CA4BpB,WAAqB,GAAA;EAAA,CAChB,EAAQ,IAAI,MAAA,KAAW,EAAQ,IAAI,KAAA,KAAU,EAAQ,IAAI,SAAA,OAC5D,KAAK,SAAS,KAAK,OAAO,KAAK,YAAA,IAAgB,IAC/C,KAAK,SAAS,KAAK;CAErB;CAEA,QAAkB,GAAA;EACb,EAAQ,IAAI,SAAA,KACf,KAAK,UAAU,OAAO,aAAa,WAAW,KAAK,OAAA;CAErD;CAEA,cAAA;EAEC,OAAO,0JADQ,KAAK,MAAM,GAAG,KAAK,QAAA,IAAY,KAAK,QAAQ,KAAK,QAAA,uBAI3B,KAAK,KAAA;CAC3C;CAEA,OAAe,GAAA;EACd,IAAM,IAAS,EAAE;EACjB,IAAA;GACC,IAAM,IAAM,EAAO;GACnB,IAAA,CAAK,GAAK;GACV,KAAK,SAAS,KAAK,IAAI,EAAI,gBAAgB,cAAc,KAAK,SAAA;EAC/D,QAAA;GACC,KAAK,SAAS,KAAK,IAAI,KAAK,KAAK,SAAA;EAClC;CACD;CAEA,SAAA;EACC,OAAK,KAAK,OACH,CAAI;KACR,EAAI,KAAK,SAAA,EAAA;aACD,KAAK,OAAA;mBACC,KAAK,OAAA,gBAAuB,KAAK,UAAA;WACzC,KAAK,OAAA;gBALS,CAAI;CAO5B;AAAA;AAAA,EAAA,CA1DC,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CAGzB,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,OAAA,KAAA,CAAA,GAAA,EAAA,CAGzB,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,WAAA,KAAA,CAAA,GAAA,EAAA,CAGzB,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,WAAA,KAAA,CAAA,GAAA,EAAA,CAGzB,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,aAAA,KAAA,CAAA,GAAA,EAAA,CAEzB,EAAA,CAAA,GAAM,EAAA,WAAA,UAAA,KAAA,CAAA;AAAA,IAAA,IAAA,IAAA,EAAA,CA1BP,EAAc,iBAAA,CAAA,GAAiB,CAAA;AAAA,SAAA,KAAA"}
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-BHfQg3Tj.cjs`);require(`./mixins-DxHpyMHA.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`),r=require(`lit/directives/ref.js`);var i=class extends e.t{constructor(...e){super(...e),this.html=``,this.css=``,this.baseCss=`html,body{margin:0;padding:0;overflow:hidden;background:#fff;color:#1a1a1a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;line-height:1.6;word-wrap:break-word;overflow-wrap:break-word}
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`);require(`./mixins-fIpzhVMd.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`),r=require(`lit/directives/ref.js`);var i=class extends e.t{constructor(...e){super(...e),this.html=``,this.css=``,this.baseCss=`html,body{margin:0;padding:0;overflow:hidden;background:#fff;color:#1a1a1a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;line-height:1.6;word-wrap:break-word;overflow-wrap:break-word}
2
2
  body{padding:16px}
3
3
  p{margin:0 0 1em}p:last-child{margin-bottom:0}
4
4
  ul,ol{margin:0 0 1em;padding-left:1.5em}li{margin-bottom:.25em}
@@ -8,7 +8,7 @@ img{max-width:100%;height:auto}
8
8
  table{border-collapse:collapse;max-width:100%}td,th{padding:4px 8px;border:1px solid #dadce0}
9
9
  blockquote{margin:0 0 1em;padding:.5em 0 .5em 1em;border-left:3px solid #dadce0;color:#5f6368}
10
10
  pre{background:#f5f5f5;padding:.75em;border-radius:4px;overflow-x:auto;font-size:.9em}
11
- code{background:#f5f5f5;padding:.1em .3em;border-radius:3px;font-size:.9em}`,this.sandbox=`allow-same-origin allow-popups`,this.minHeight=60,this._height=60,this._srcdoc=``,this._iframeRef=(0,r.createRef)()}static{this.styles=[n.css`
11
+ code{background:#f5f5f5;padding:.1em .3em;border-radius:3px;font-size:.9em}`,this.sandbox=`allow-same-origin allow-popups`,this.minHeight=60,this.height=60,this.srcdoc=``,this.iframeRef=(0,r.createRef)()}static{this.styles=[n.css`
12
12
  :host {
13
13
  display: block;
14
14
  }
@@ -16,9 +16,9 @@ code{background:#f5f5f5;padding:.1em .3em;border-radius:3px;font-size:.9em}`,thi
16
16
  border: 0;
17
17
  width: 100%;
18
18
  }
19
- `]}willUpdate(e){(e.has(`html`)||e.has(`css`)||e.has(`baseCss`))&&(this._srcdoc=this.html?this.buildSrcdoc():``,this._height=this.minHeight)}updated(e){e.has(`sandbox`)&&this._iframeRef.value?.setAttribute(`sandbox`,this.sandbox)}buildSrcdoc(){return`<!DOCTYPE html><html><head>\n<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">\n<base target="_blank">\n<style>${this.css?`${this.baseCss}\n${this.css}`:this.baseCss}</style></head><body>${this.html}</body></html>`}onLoad(e){let t=e.target;try{let e=t.contentDocument;if(!e)return;this._height=Math.max(e.documentElement.scrollHeight,this.minHeight)}catch{this._height=Math.max(200,this.minHeight)}}render(){return this.html?n.html`<iframe
20
- ${(0,r.ref)(this._iframeRef)}
21
- .srcdoc=${this._srcdoc}
22
- style="height:${this._height}px;min-height:${this.minHeight}px;overflow:hidden"
19
+ `]}willUpdate(e){(e.has(`html`)||e.has(`css`)||e.has(`baseCss`))&&(this.srcdoc=this.html?this.buildSrcdoc():``,this.height=this.minHeight)}updated(e){e.has(`sandbox`)&&this.iframeRef.value?.setAttribute(`sandbox`,this.sandbox)}buildSrcdoc(){return`<!DOCTYPE html><html><head>\n<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">\n<base target="_blank">\n<style>${this.css?`${this.baseCss}\n${this.css}`:this.baseCss}</style></head><body>${this.html}</body></html>`}onLoad(e){let t=e.target;try{let e=t.contentDocument;if(!e)return;this.height=Math.max(e.documentElement.scrollHeight,this.minHeight)}catch{this.height=Math.max(200,this.minHeight)}}render(){return this.html?n.html`<iframe
20
+ ${(0,r.ref)(this.iframeRef)}
21
+ .srcdoc=${this.srcdoc}
22
+ style="height:${this.height}px;min-height:${this.minHeight}px;overflow:hidden"
23
23
  @load=${this.onLoad}
24
- ></iframe>`:n.html``}};e.u([(0,t.property)({type:String})],i.prototype,`html`,void 0),e.u([(0,t.property)({type:String})],i.prototype,`css`,void 0),e.u([(0,t.property)({type:String})],i.prototype,`baseCss`,void 0),e.u([(0,t.property)({type:String})],i.prototype,`sandbox`,void 0),e.u([(0,t.property)({type:Number})],i.prototype,`minHeight`,void 0),e.u([(0,t.state)()],i.prototype,`_height`,void 0);var a=i=e.u([(0,t.customElement)(`schmancy-iframe`)],i);Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
24
+ ></iframe>`:n.html``}};e.u([(0,t.property)({type:String})],i.prototype,`html`,void 0),e.u([(0,t.property)({type:String})],i.prototype,`css`,void 0),e.u([(0,t.property)({type:String})],i.prototype,`baseCss`,void 0),e.u([(0,t.property)({type:String})],i.prototype,`sandbox`,void 0),e.u([(0,t.property)({type:Number})],i.prototype,`minHeight`,void 0),e.u([(0,t.state)()],i.prototype,`height`,void 0);var a=i=e.u([(0,t.customElement)(`schmancy-iframe`)],i);Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframe-DpCv-QH2.cjs","names":[],"sources":["../src/iframe/iframe.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\n\n/** Sensible document reset for iframe content — font, spacing, word-wrap */\nconst DEFAULT_BASE_CSS = `html,body{margin:0;padding:0;overflow:hidden;background:#fff;color:#1a1a1a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;line-height:1.6;word-wrap:break-word;overflow-wrap:break-word}\nbody{padding:16px}\np{margin:0 0 1em}p:last-child{margin-bottom:0}\nul,ol{margin:0 0 1em;padding-left:1.5em}li{margin-bottom:.25em}\nh1,h2,h3,h4{margin:0 0 .5em;line-height:1.3}h1{font-size:1.5em}h2{font-size:1.25em}h3{font-size:1.1em}h4{font-size:1em}\nhr{border:none;border-top:1px solid #dadce0;margin:1em 0}\nimg{max-width:100%;height:auto}\ntable{border-collapse:collapse;max-width:100%}td,th{padding:4px 8px;border:1px solid #dadce0}\nblockquote{margin:0 0 1em;padding:.5em 0 .5em 1em;border-left:3px solid #dadce0;color:#5f6368}\npre{background:#f5f5f5;padding:.75em;border-radius:4px;overflow-x:auto;font-size:.9em}\ncode{background:#f5f5f5;padding:.1em .3em;border-radius:3px;font-size:.9em}`\n\n/**\n * Renders an HTML fragment inside a sandboxed, auto-sizing iframe.\n *\n * @slot - (none)\n * @fires load — native iframe load event\n *\n * @example\n * ```html\n * <schmancy-iframe .html=${bodyHtml} .css=${extraStyles}></schmancy-iframe>\n * ```\n */\n@customElement('schmancy-iframe')\nexport default class SchmancyIframe extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t}\n\tiframe {\n\t\tborder: 0;\n\t\twidth: 100%;\n\t}\n`];\n\t/** HTML body fragment to render inside the iframe */\n\t@property({ type: String }) html = ''\n\n\t/** Additional CSS injected after the base styles (consumer-specific) */\n\t@property({ type: String }) css = ''\n\n\t/** Base document CSS (font, spacing, resets). Override for fully custom styling */\n\t@property({ type: String }) baseCss = DEFAULT_BASE_CSS\n\n\t/** iframe sandbox attribute */\n\t@property({ type: String }) sandbox = 'allow-same-origin allow-popups'\n\n\t/** Minimum height in pixels */\n\t@property({ type: Number }) minHeight = 60\n\n\t@state() private height = 60\n\tprivate srcdoc = ''\n\tprivate iframeRef = createRef<HTMLIFrameElement>()\n\n\tprotected willUpdate(changed: PropertyValues) {\n\t\tif (changed.has('html') || changed.has('css') || changed.has('baseCss')) {\n\t\t\tthis.srcdoc = this.html ? this.buildSrcdoc() : ''\n\t\t\tthis.height = this.minHeight\n\t\t}\n\t}\n\n\tprotected updated(changed: PropertyValues) {\n\t\tif (changed.has('sandbox')) {\n\t\t\tthis.iframeRef.value?.setAttribute('sandbox', this.sandbox)\n\t\t}\n\t}\n\n\tprivate buildSrcdoc(): string {\n\t\tconst styles = this.css ? `${this.baseCss}\\n${this.css}` : this.baseCss\n\t\treturn `<!DOCTYPE html><html><head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<base target=\"_blank\">\n<style>${styles}</style></head><body>${this.html}</body></html>`\n\t}\n\n\tprivate onLoad(e: Event) {\n\t\tconst iframe = e.target as HTMLIFrameElement\n\t\ttry {\n\t\t\tconst doc = iframe.contentDocument\n\t\t\tif (!doc) return\n\t\t\tthis.height = Math.max(doc.documentElement.scrollHeight, this.minHeight)\n\t\t} catch {\n\t\t\tthis.height = Math.max(200, this.minHeight)\n\t\t}\n\t}\n\n\tprotected render() {\n\t\tif (!this.html) return html``\n\t\treturn html`<iframe\n\t\t\t${ref(this.iframeRef)}\n\t\t\t.srcdoc=${this.srcdoc}\n\t\t\tstyle=\"height:${this.height}px;min-height:${this.minHeight}px;overflow:hidden\"\n\t\t\t@load=${this.onLoad}\n\t\t></iframe>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-iframe': SchmancyIframe\n\t}\n}\n"],"mappings":"0MAMA,IAwBe,EAAA,cAA6B,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,KAWR,GAAA,KAAA,IAGD,GAAA,KAAA,QAtCV;;;;;;;;;;6EAAA,KAAA,QA4Cc,iCAAA,KAAA,UAGE,GAAA,KAAA,OAEd,GAAA,KAAA,OACT,GAAA,KAAA,WAAA,EAAA,EAAA,WAAA,CAAA,CAAA,OAAA,KAAA,OAzBD,CAAC,EAAA,GAAG;;;;;;;;GA4BpB,WAAqB,EAAA,EAChB,EAAQ,IAAI,MAAA,GAAW,EAAQ,IAAI,KAAA,GAAU,EAAQ,IAAI,SAAA,KAC5D,KAAK,OAAS,KAAK,KAAO,KAAK,YAAA,EAAgB,GAC/C,KAAK,OAAS,KAAK,UAErB,CAEA,QAAkB,EAAA,CACb,EAAQ,IAAI,SAAA,GACf,KAAK,UAAU,OAAO,aAAa,UAAW,KAAK,OAAA,CAErD,CAEA,aAAA,CAEC,MAAO,0JADQ,KAAK,IAAM,GAAG,KAAK,QAAA,IAAY,KAAK,MAAQ,KAAK,QAAA,uBAI3B,KAAK,KAAA,eAC3C,CAEA,OAAe,EAAA,CACd,IAAM,EAAS,EAAE,OACjB,GAAA,CACC,IAAM,EAAM,EAAO,gBACnB,GAAA,CAAK,EAAK,OACV,KAAK,OAAS,KAAK,IAAI,EAAI,gBAAgB,aAAc,KAAK,SAAA,CAC/D,MAAA,CACC,KAAK,OAAS,KAAK,IAAI,IAAK,KAAK,SAAA,CAClC,CACD,CAEA,QAAA,CACC,OAAK,KAAK,KACH,EAAA,IAAI;eACJ,KAAK,SAAA,EAAA;aACD,KAAK,OAAA;mBACC,KAAK,OAAA,gBAAuB,KAAK,UAAA;WACzC,KAAK,OAAA;cALS,EAAA,IAAI,EAO5B,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UA1DU,CAAE,KAAM,MAAA,CAAA,CAAA,EAAQ,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAGhB,CAAE,KAAM,MAAA,CAAA,CAAA,EAAQ,EAAA,UAAA,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAGhB,CAAE,KAAM,MAAA,CAAA,CAAA,EAAQ,EAAA,UAAA,UAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAGhB,CAAE,KAAM,MAAA,CAAA,CAAA,EAAQ,EAAA,UAAA,UAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAGhB,CAAE,KAAM,MAAA,CAAA,CAAA,EAAQ,EAAA,UAAA,YAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,CAAA,EAEnB,EAAA,UAAA,SAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eA1BO,iBAAA,CAAA,EAAiB,CAAA,EAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,CAAA,CAAA,CAAA"}
package/dist/iframe.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./iframe-wuYT2xFz.cjs`);exports.SchmancyIframe=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./iframe-DpCv-QH2.cjs`);exports.SchmancyIframe=e.t;
package/dist/iframe.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as e } from "./iframe-BTjZfYyh.js";
1
+ import { t as e } from "./iframe-DWvN5nGB.js";
2
2
  export { e as SchmancyIframe };