@mhmo91/schmancy 0.10.16 → 0.10.18

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 (372) hide show
  1. package/dist/active-host-BP0zy_Y9.js.map +1 -1
  2. package/dist/agent/flow-CvG1fLW5.js.map +1 -1
  3. package/dist/agent/schmancy.agent.js +3730 -3804
  4. package/dist/agent/schmancy.agent.js.map +1 -1
  5. package/dist/agent/vendor-material-color-DcL7ZPxx.js.map +1 -1
  6. package/dist/animation-DCznELuT.js.map +1 -1
  7. package/dist/{area-ChxsDTu_.js → area-BIipuSyO.js} +1 -1
  8. package/dist/{area-ChxsDTu_.js.map → area-BIipuSyO.js.map} +1 -1
  9. package/dist/{area-Qt6yUnuA.cjs → area-C-EMiNEE.cjs} +1 -1
  10. package/dist/{area-Qt6yUnuA.cjs.map → area-C-EMiNEE.cjs.map} +1 -1
  11. package/dist/area.cjs +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/audio-DS43uoRA.js.map +1 -1
  14. package/dist/{autocomplete-Ck2zbdF9.cjs → autocomplete-B8CE5vGw.cjs} +1 -1
  15. package/dist/{autocomplete-Ck2zbdF9.cjs.map → autocomplete-B8CE5vGw.cjs.map} +1 -1
  16. package/dist/{autocomplete-CXvUjMD-.js → autocomplete-Mrb3koUN.js} +2 -2
  17. package/dist/{autocomplete-CXvUjMD-.js.map → autocomplete-Mrb3koUN.js.map} +1 -1
  18. package/dist/autocomplete.cjs +1 -1
  19. package/dist/autocomplete.js +1 -1
  20. package/dist/avatar.cjs +1 -1
  21. package/dist/avatar.js +2 -2
  22. package/dist/avatar.js.map +1 -1
  23. package/dist/badge.cjs +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{boat-DpFkILFF.cjs → boat-DN1_tyvx.cjs} +2 -2
  26. package/dist/{boat-DpFkILFF.cjs.map → boat-DN1_tyvx.cjs.map} +1 -1
  27. package/dist/{boat-Bj0wVcZi.js → boat-cuoSkhGI.js} +1 -4
  28. package/dist/{boat-Bj0wVcZi.js.map → boat-cuoSkhGI.js.map} +1 -1
  29. package/dist/boat.cjs +1 -1
  30. package/dist/boat.js +1 -1
  31. package/dist/breadcrumb.cjs +2 -1
  32. package/dist/breadcrumb.cjs.map +1 -1
  33. package/dist/breadcrumb.js +2 -1
  34. package/dist/breadcrumb.js.map +1 -1
  35. package/dist/{busy-CtcnclA3.cjs → busy-CMKX4oQf.cjs} +1 -1
  36. package/dist/{busy-CtcnclA3.cjs.map → busy-CMKX4oQf.cjs.map} +1 -1
  37. package/dist/{busy-CyZSBnZP.js → busy-Cetzws-m.js} +1 -1
  38. package/dist/{busy-CyZSBnZP.js.map → busy-Cetzws-m.js.map} +1 -1
  39. package/dist/busy.cjs +1 -1
  40. package/dist/busy.js +1 -1
  41. package/dist/button.cjs +4 -3
  42. package/dist/button.cjs.map +1 -1
  43. package/dist/button.js +4 -3
  44. package/dist/button.js.map +1 -1
  45. package/dist/{card-Cl6jp1yX.cjs → card-8VXoo2C_.cjs} +1 -1
  46. package/dist/{card-Cl6jp1yX.cjs.map → card-8VXoo2C_.cjs.map} +1 -1
  47. package/dist/{card-nYZCKmOO.js → card-D2k3dRL0.js} +1 -1
  48. package/dist/{card-nYZCKmOO.js.map → card-D2k3dRL0.js.map} +1 -1
  49. package/dist/card.cjs +1 -1
  50. package/dist/card.js +1 -1
  51. package/dist/{checkbox-DiUrZiyc.js → checkbox-8hNsBejz.js} +1 -1
  52. package/dist/{checkbox-DiUrZiyc.js.map → checkbox-8hNsBejz.js.map} +1 -1
  53. package/dist/{checkbox-BeNo0ZGt.cjs → checkbox-Cq5wzeaY.cjs} +1 -1
  54. package/dist/{checkbox-BeNo0ZGt.cjs.map → checkbox-Cq5wzeaY.cjs.map} +1 -1
  55. package/dist/checkbox.cjs +1 -1
  56. package/dist/checkbox.js +1 -1
  57. package/dist/{chips-DK6m-VCM.cjs → chips-DSdvCpmi.cjs} +9 -18
  58. package/dist/chips-DSdvCpmi.cjs.map +1 -0
  59. package/dist/{chips-CfPFXv7Z.js → chips-m2NPN480.js} +8 -22
  60. package/dist/chips-m2NPN480.js.map +1 -0
  61. package/dist/chips.cjs +1 -1
  62. package/dist/chips.js +2 -2
  63. package/dist/connectivity.cjs +1 -1
  64. package/dist/connectivity.js +1 -1
  65. package/dist/connectivity.js.map +1 -1
  66. package/dist/content-drawer.cjs +1 -1
  67. package/dist/content-drawer.js +1 -1
  68. package/dist/cursor-glow-Cs2XLDB9.js.map +1 -1
  69. package/dist/{date-range-DjlF2u7o.js → date-range-D98QcCHl.js} +2 -2
  70. package/dist/{date-range-DjlF2u7o.js.map → date-range-D98QcCHl.js.map} +1 -1
  71. package/dist/{date-range-DA6anfcF.cjs → date-range-DxS3Agbj.cjs} +1 -1
  72. package/dist/{date-range-DA6anfcF.cjs.map → date-range-DxS3Agbj.cjs.map} +1 -1
  73. package/dist/{date-range-inline-BfYK795W.cjs → date-range-inline-Bvs2ZvEY.cjs} +1 -1
  74. package/dist/{date-range-inline-BfYK795W.cjs.map → date-range-inline-Bvs2ZvEY.cjs.map} +1 -1
  75. package/dist/{date-range-inline-n7y_H6PJ.js → date-range-inline-TWWnTZlw.js} +1 -1
  76. package/dist/{date-range-inline-n7y_H6PJ.js.map → date-range-inline-TWWnTZlw.js.map} +1 -1
  77. package/dist/date-range-inline.cjs +1 -1
  78. package/dist/date-range-inline.js +1 -1
  79. package/dist/date-range.cjs +1 -1
  80. package/dist/date-range.js +1 -1
  81. package/dist/delay.cjs +1 -1
  82. package/dist/delay.js +1 -1
  83. package/dist/delay.js.map +1 -1
  84. package/dist/{details-CS_ToAOj.js → details-Cpg8sH2F.js} +3 -8
  85. package/dist/details-Cpg8sH2F.js.map +1 -0
  86. package/dist/{details-BdAVsLl-.cjs → details-CwSDur6j.cjs} +2 -6
  87. package/dist/details-CwSDur6j.cjs.map +1 -0
  88. package/dist/details.cjs +1 -1
  89. package/dist/details.js +1 -1
  90. package/dist/directives.cjs.map +1 -1
  91. package/dist/directives.js.map +1 -1
  92. package/dist/discovery.js.map +1 -1
  93. package/dist/{divider-CvWAnvdO.cjs → divider-BNdVLE0H.cjs} +1 -1
  94. package/dist/{divider-CvWAnvdO.cjs.map → divider-BNdVLE0H.cjs.map} +1 -1
  95. package/dist/{divider-COLK0RbT.js → divider-Be833gGZ.js} +1 -1
  96. package/dist/{divider-COLK0RbT.js.map → divider-Be833gGZ.js.map} +1 -1
  97. package/dist/divider.cjs +1 -1
  98. package/dist/divider.js +1 -1
  99. package/dist/dropdown.cjs +1 -1
  100. package/dist/dropdown.js +1 -1
  101. package/dist/dropdown.js.map +1 -1
  102. package/dist/{expand-r2sATPUJ.cjs → expand-BP6RLzHw.cjs} +1 -1
  103. package/dist/{expand-r2sATPUJ.cjs.map → expand-BP6RLzHw.cjs.map} +1 -1
  104. package/dist/{expand-D9LzmpoV.js → expand-CtoffNNj.js} +2 -2
  105. package/dist/{expand-D9LzmpoV.js.map → expand-CtoffNNj.js.map} +1 -1
  106. package/dist/expand.cjs +1 -1
  107. package/dist/expand.js +1 -1
  108. package/dist/{float-2nHYuBx-.cjs → float-B8NcSE3a.cjs} +1 -1
  109. package/dist/{float-2nHYuBx-.cjs.map → float-B8NcSE3a.cjs.map} +1 -1
  110. package/dist/{float-BWy39CXr.js → float-C-glc-3u.js} +1 -1
  111. package/dist/{float-BWy39CXr.js.map → float-C-glc-3u.js.map} +1 -1
  112. package/dist/float.cjs +1 -1
  113. package/dist/float.js +1 -1
  114. package/dist/{form-DhjedCWm.js → form-DJvxIyfW.js} +10 -1
  115. package/dist/{form-DhjedCWm.js.map → form-DJvxIyfW.js.map} +1 -1
  116. package/dist/form-St_IwR7y.cjs +42 -0
  117. package/dist/{form-g5c70rac.cjs.map → form-St_IwR7y.cjs.map} +1 -1
  118. package/dist/form.cjs +1 -1
  119. package/dist/form.js +9 -2
  120. package/dist/handover/agent-runtime-followups.md +1 -1
  121. package/dist/handover/agent-runtime-v1.md +3 -3
  122. package/dist/hashContent-dJrI-9sc.js.map +1 -1
  123. package/dist/{icons-1HIENBco.cjs → icons-BJld4JHp.cjs} +1 -1
  124. package/dist/{icons-1HIENBco.cjs.map → icons-BJld4JHp.cjs.map} +1 -1
  125. package/dist/{icons-3y0kr1aB.js → icons-D7df1ysG.js} +1 -1
  126. package/dist/{icons-3y0kr1aB.js.map → icons-D7df1ysG.js.map} +1 -1
  127. package/dist/icons.cjs +1 -1
  128. package/dist/icons.js +1 -1
  129. package/dist/{iframe-Z5gTK-gd.js → iframe-DAbgW9tT.js} +1 -1
  130. package/dist/{iframe-Z5gTK-gd.js.map → iframe-DAbgW9tT.js.map} +1 -1
  131. package/dist/{iframe-CjqYuZG5.cjs → iframe-GT6D8l5Z.cjs} +1 -1
  132. package/dist/{iframe-CjqYuZG5.cjs.map → iframe-GT6D8l5Z.cjs.map} +1 -1
  133. package/dist/iframe.cjs +1 -1
  134. package/dist/iframe.js +1 -1
  135. package/dist/index.cjs +1 -1
  136. package/dist/index.js +45 -45
  137. package/dist/{input-BtcIhu0Q.cjs → input-BE9wEEw4.cjs} +1 -1
  138. package/dist/{input-BtcIhu0Q.cjs.map → input-BE9wEEw4.cjs.map} +1 -1
  139. package/dist/{input-B-fw6f_r.js → input-DC6ap_uN.js} +1 -1
  140. package/dist/{input-B-fw6f_r.js.map → input-DC6ap_uN.js.map} +1 -1
  141. package/dist/{input-chip-DZktYohr.cjs → input-chip-MsiMu-b5.cjs} +4 -4
  142. package/dist/input-chip-MsiMu-b5.cjs.map +1 -0
  143. package/dist/{input-chip-CtQ0pH5b.js → input-chip-c5n547tg.js} +3 -6
  144. package/dist/input-chip-c5n547tg.js.map +1 -0
  145. package/dist/input.cjs +1 -1
  146. package/dist/input.js +1 -1
  147. package/dist/json.cjs +1 -1
  148. package/dist/json.js +2 -2
  149. package/dist/json.js.map +1 -1
  150. package/dist/kbd.cjs +1 -1
  151. package/dist/kbd.js +1 -1
  152. package/dist/kbd.js.map +1 -1
  153. package/dist/layout-BH28sKGc.js.map +1 -1
  154. package/dist/layout.cjs +1 -1
  155. package/dist/layout.js +1 -1
  156. package/dist/lazy-D-bO2r4m.js.map +1 -1
  157. package/dist/{lightbox-BL3LWp-P.js → lightbox-CNX9Eg3U.js} +4 -4
  158. package/dist/lightbox-CNX9Eg3U.js.map +1 -0
  159. package/dist/{lightbox-BHTZOn8K.cjs → lightbox-HqJBBjAT.cjs} +4 -4
  160. package/dist/lightbox-HqJBBjAT.cjs.map +1 -0
  161. package/dist/lightbox.cjs +1 -1
  162. package/dist/lightbox.js +1 -1
  163. package/dist/{list-DLJL1JQj.js → list-C76Pb-c1.js} +1 -1
  164. package/dist/{list-DLJL1JQj.js.map → list-C76Pb-c1.js.map} +1 -1
  165. package/dist/{list-CHYa5VGY.cjs → list-bhyuQSyO.cjs} +1 -1
  166. package/dist/{list-CHYa5VGY.cjs.map → list-bhyuQSyO.cjs.map} +1 -1
  167. package/dist/list.cjs +1 -1
  168. package/dist/list.js +1 -1
  169. package/dist/magnetic-DxvoEz8_.js.map +1 -1
  170. package/dist/{menu-BNq93w6X.js → menu-B_-weNpZ.js} +2 -2
  171. package/dist/{menu-BNq93w6X.js.map → menu-B_-weNpZ.js.map} +1 -1
  172. package/dist/{menu-DAikvkeV.cjs → menu-Dag0cuWV.cjs} +1 -1
  173. package/dist/{menu-DAikvkeV.cjs.map → menu-Dag0cuWV.cjs.map} +1 -1
  174. package/dist/menu.cjs +1 -1
  175. package/dist/menu.js +1 -1
  176. package/dist/mixins-DCVXqL1Q.js +636 -0
  177. package/dist/{mixins-BWb9_e1s.js.map → mixins-DCVXqL1Q.js.map} +1 -1
  178. package/dist/mixins-Du9HMrIG.cjs +254 -0
  179. package/dist/{mixins-BOOu6q2n.cjs.map → mixins-Du9HMrIG.cjs.map} +1 -1
  180. package/dist/mixins.cjs +1 -1
  181. package/dist/mixins.js +1 -1
  182. package/dist/nav-drawer.cjs +1 -1
  183. package/dist/nav-drawer.js +1 -1
  184. package/dist/navigation-bar.cjs +1 -1
  185. package/dist/navigation-bar.js +1 -1
  186. package/dist/navigation-rail.cjs +1 -1
  187. package/dist/navigation-rail.js +1 -1
  188. package/dist/navigation-rail.js.map +1 -1
  189. package/dist/{notification-CUmb9c3Y.js → notification-DySnvQeO.js} +3 -3
  190. package/dist/notification-DySnvQeO.js.map +1 -0
  191. package/dist/{notification-Dy2azMyt.cjs → notification-yd2KeHjd.cjs} +1 -1
  192. package/dist/notification-yd2KeHjd.cjs.map +1 -0
  193. package/dist/notification.cjs +1 -1
  194. package/dist/notification.js +1 -1
  195. package/dist/{option-CDgIKifG.cjs → option-BDOKUqTy.cjs} +1 -1
  196. package/dist/{option-CDgIKifG.cjs.map → option-BDOKUqTy.cjs.map} +1 -1
  197. package/dist/{option-DFvQ551b.js → option-CBEHYG4U.js} +1 -1
  198. package/dist/{option-DFvQ551b.js.map → option-CBEHYG4U.js.map} +1 -1
  199. package/dist/option.cjs +1 -1
  200. package/dist/option.js +1 -1
  201. package/dist/overlay-stack-BR4iYivO.js.map +1 -1
  202. package/dist/overlay.cjs +1 -1
  203. package/dist/overlay.cjs.map +1 -1
  204. package/dist/{overlay.confirm-body-uFp-0Zfh.js → overlay.confirm-body-DESGpbru.js} +2 -2
  205. package/dist/{overlay.confirm-body-uFp-0Zfh.js.map → overlay.confirm-body-DESGpbru.js.map} +1 -1
  206. package/dist/{overlay.confirm-body-BkhNvr0c.cjs → overlay.confirm-body-sUmd_zVy.cjs} +2 -2
  207. package/dist/{overlay.confirm-body-BkhNvr0c.cjs.map → overlay.confirm-body-sUmd_zVy.cjs.map} +1 -1
  208. package/dist/overlay.js +3 -3
  209. package/dist/overlay.js.map +1 -1
  210. package/dist/{overlay.service-1YWfUD2S.cjs → overlay.service-BxtEFFSH.cjs} +1 -1
  211. package/dist/{overlay.service-1YWfUD2S.cjs.map → overlay.service-BxtEFFSH.cjs.map} +1 -1
  212. package/dist/{overlay.service-BcF12kGb.js → overlay.service-DV_o_xQ0.js} +2 -2
  213. package/dist/{overlay.service-BcF12kGb.js.map → overlay.service-DV_o_xQ0.js.map} +1 -1
  214. package/dist/page.cjs +1 -1
  215. package/dist/page.js +2 -2
  216. package/dist/page.js.map +1 -1
  217. package/dist/{progress-bLbGRuQ1.js → progress-C4kDZfb7.js} +1 -1
  218. package/dist/{progress-bLbGRuQ1.js.map → progress-C4kDZfb7.js.map} +1 -1
  219. package/dist/{progress-C02sWkmE.cjs → progress-CMSst_2U.cjs} +1 -1
  220. package/dist/{progress-C02sWkmE.cjs.map → progress-CMSst_2U.cjs.map} +1 -1
  221. package/dist/progress.cjs +1 -1
  222. package/dist/progress.js +1 -1
  223. package/dist/{radio-group-DA4eIGCj.js → radio-group-DB9D2ZkA.js} +1 -1
  224. package/dist/{radio-group-DA4eIGCj.js.map → radio-group-DB9D2ZkA.js.map} +1 -1
  225. package/dist/{radio-group-BA-jRct5.cjs → radio-group-dVUvYFq7.cjs} +1 -1
  226. package/dist/{radio-group-BA-jRct5.cjs.map → radio-group-dVUvYFq7.cjs.map} +1 -1
  227. package/dist/radio-group.cjs +1 -1
  228. package/dist/radio-group.js +1 -1
  229. package/dist/range.cjs +1 -1
  230. package/dist/range.js +1 -1
  231. package/dist/range.js.map +1 -1
  232. package/dist/reduced-motion-D7LqTUMn.js.map +1 -1
  233. package/dist/{rxjs-utils-kWPShgKu.cjs.map → rxjs-utils-BKB2UM_j.cjs.map} +1 -1
  234. package/dist/{rxjs-utils-D9U4MW0Q.js.map → rxjs-utils-Dv9T9IpA.js.map} +1 -1
  235. package/dist/rxjs-utils.cjs +1 -1
  236. package/dist/rxjs-utils.js +1 -1
  237. package/dist/{scroll-CG5up5oy.js → scroll-C1klVgSQ.js} +1 -1
  238. package/dist/{scroll-CG5up5oy.js.map → scroll-C1klVgSQ.js.map} +1 -1
  239. package/dist/{scroll-D8vBF_gY.cjs → scroll-S-bXF2u6.cjs} +1 -1
  240. package/dist/{scroll-D8vBF_gY.cjs.map → scroll-S-bXF2u6.cjs.map} +1 -1
  241. package/dist/search-MvIBA93K.js.map +1 -1
  242. package/dist/{select-BrK1BJoU.js → select-UU2pB67h.js} +2 -2
  243. package/dist/{select-BrK1BJoU.js.map → select-UU2pB67h.js.map} +1 -1
  244. package/dist/{select-Dh2j7Qc-.cjs → select-fu_-rZyn.cjs} +1 -1
  245. package/dist/{select-Dh2j7Qc-.cjs.map → select-fu_-rZyn.cjs.map} +1 -1
  246. package/dist/select.cjs +1 -1
  247. package/dist/select.js +1 -1
  248. package/dist/skeleton.cjs +1 -1
  249. package/dist/skeleton.js +1 -1
  250. package/dist/skeleton.js.map +1 -1
  251. package/dist/skills/SKILL.md +3 -0
  252. package/dist/skills/schmancy/SKILL.md +3 -0
  253. package/dist/slider.cjs +1 -1
  254. package/dist/slider.js +1 -1
  255. package/dist/slider.js.map +1 -1
  256. package/dist/sound.service-BIN2W7Rv.js.map +1 -1
  257. package/dist/{splash-screen-Kr1sPtME.cjs → splash-screen-25PTDqnp.cjs} +1 -1
  258. package/dist/{splash-screen-Kr1sPtME.cjs.map → splash-screen-25PTDqnp.cjs.map} +1 -1
  259. package/dist/{splash-screen-BcjjJSlK.js → splash-screen-bGW_sS4i.js} +1 -1
  260. package/dist/{splash-screen-BcjjJSlK.js.map → splash-screen-bGW_sS4i.js.map} +1 -1
  261. package/dist/splash-screen.cjs +1 -1
  262. package/dist/splash-screen.js +1 -1
  263. package/dist/{src-B2-CU8fu.cjs → src-Blm9PNcf.cjs} +1 -1
  264. package/dist/{src-B2-CU8fu.cjs.map → src-Blm9PNcf.cjs.map} +1 -1
  265. package/dist/{src-DvywUq7l.js → src-olrlFt4e.js} +35 -35
  266. package/dist/{src-DvywUq7l.js.map → src-olrlFt4e.js.map} +1 -1
  267. package/dist/state-avic94Ft.cjs.map +1 -1
  268. package/dist/state-nm8yzMPp.js.map +1 -1
  269. package/dist/steps.cjs +1 -1
  270. package/dist/steps.js +1 -1
  271. package/dist/steps.js.map +1 -1
  272. package/dist/{surface-BtMMHKol.js → surface-DCRy-EyT.js} +1 -1
  273. package/dist/{surface-BtMMHKol.js.map → surface-DCRy-EyT.js.map} +1 -1
  274. package/dist/{surface-CgXeKdGL.cjs → surface-DWwQDX9r.cjs} +1 -1
  275. package/dist/{surface-CgXeKdGL.cjs.map → surface-DWwQDX9r.cjs.map} +1 -1
  276. package/dist/surface.cjs +1 -1
  277. package/dist/surface.js +1 -1
  278. package/dist/switch.cjs +1 -1
  279. package/dist/switch.js +1 -1
  280. package/dist/switch.js.map +1 -1
  281. package/dist/table.cjs +1 -1
  282. package/dist/table.js +1 -1
  283. package/dist/table.js.map +1 -1
  284. package/dist/{tabs-CikPr7by.js → tabs-BVC_qn8S.js} +1 -1
  285. package/dist/{tabs-CikPr7by.js.map → tabs-BVC_qn8S.js.map} +1 -1
  286. package/dist/{tabs-CitVls3_.cjs → tabs-Dc3_Ox2B.cjs} +1 -1
  287. package/dist/{tabs-CitVls3_.cjs.map → tabs-Dc3_Ox2B.cjs.map} +1 -1
  288. package/dist/tabs.cjs +1 -1
  289. package/dist/tabs.js +1 -1
  290. package/dist/teleport.cjs +1 -1
  291. package/dist/teleport.js +1 -1
  292. package/dist/{textarea-CqV1wvmB.cjs → textarea-CNa4dSvF.cjs} +1 -1
  293. package/dist/{textarea-CqV1wvmB.cjs.map → textarea-CNa4dSvF.cjs.map} +1 -1
  294. package/dist/{textarea-DVkwQSis.js → textarea-DkfGmRSI.js} +1 -1
  295. package/dist/{textarea-DVkwQSis.js.map → textarea-DkfGmRSI.js.map} +1 -1
  296. package/dist/textarea.cjs +1 -1
  297. package/dist/textarea.js +1 -1
  298. package/dist/{theme-BIWS4TOW.js → theme-BiCwFfCf.js} +2 -2
  299. package/dist/{theme-BIWS4TOW.js.map → theme-BiCwFfCf.js.map} +1 -1
  300. package/dist/{theme-DMgjiKda.cjs → theme-DCybsrfv.cjs} +1 -1
  301. package/dist/{theme-DMgjiKda.cjs.map → theme-DCybsrfv.cjs.map} +1 -1
  302. package/dist/{theme-button-DC_shZ_7.js → theme-button-DqiA0rJg.js} +1 -1
  303. package/dist/{theme-button-DC_shZ_7.js.map → theme-button-DqiA0rJg.js.map} +1 -1
  304. package/dist/{theme-button-ENKa3TPT.cjs → theme-button-cZGRyQRK.cjs} +1 -1
  305. package/dist/{theme-button-ENKa3TPT.cjs.map → theme-button-cZGRyQRK.cjs.map} +1 -1
  306. package/dist/theme-button.cjs +1 -1
  307. package/dist/theme-button.js +1 -1
  308. package/dist/theme.cjs +1 -1
  309. package/dist/{theme.interface-C8OHheXg.js.map → theme.interface-C2XNgsLB.js.map} +1 -1
  310. package/dist/{theme.interface-CYo4UpWK.cjs.map → theme.interface-D4NeufQA.cjs.map} +1 -1
  311. package/dist/theme.js +3 -3
  312. package/dist/theme.service-BOWIT_5k.js.map +1 -1
  313. package/dist/tooltip.js.map +1 -1
  314. package/dist/tree.cjs +1 -1
  315. package/dist/tree.js +1 -1
  316. package/dist/tree.js.map +1 -1
  317. package/dist/types.js.map +1 -1
  318. package/dist/typewriter.cjs.map +1 -1
  319. package/dist/typewriter.js.map +1 -1
  320. package/dist/typography.cjs +1 -1
  321. package/dist/typography.js +1 -1
  322. package/dist/typography.js.map +1 -1
  323. package/dist/utils-Cj_nRRyx.js.map +1 -1
  324. package/dist/visually-hidden.cjs +1 -1
  325. package/dist/visually-hidden.js +1 -1
  326. package/dist/visually-hidden.js.map +1 -1
  327. package/dist/{window-DGydMS0g.cjs → window-BMecbTzs.cjs} +3 -3
  328. package/dist/window-BMecbTzs.cjs.map +1 -0
  329. package/dist/{window-BTecgE_U.js → window-DMy5Gsgu.js} +3 -10
  330. package/dist/window-DMy5Gsgu.js.map +1 -0
  331. package/dist/window.cjs +1 -1
  332. package/dist/window.js +1 -1
  333. package/package.json +1 -1
  334. package/skills/schmancy/SKILL.md +3 -0
  335. package/src/boat/boat.ts +0 -3
  336. package/src/breadcrumb/breadcrumb.ts +1 -0
  337. package/src/button/button.ts +1 -1
  338. package/src/button/icon-button.ts +2 -1
  339. package/src/chips/assist-chip.ts +2 -1
  340. package/src/chips/filter-chip.ts +2 -16
  341. package/src/chips/input-chip.ts +2 -5
  342. package/src/chips/suggestion-chip.ts +2 -3
  343. package/src/details/details.ts +2 -7
  344. package/src/form/fields/index.ts +9 -0
  345. package/src/form/index.ts +1 -0
  346. package/src/lightbox/lightbox.ts +3 -3
  347. package/src/notification/notification.scss +0 -1
  348. package/src/overlay/overlay.confirm-body.ts +1 -1
  349. package/src/surface/surface.styles.ts +1 -45
  350. package/src/window/window.ts +0 -12
  351. package/types/src/form/fields/index.d.ts +9 -0
  352. package/types/src/form/index.d.ts +1 -0
  353. package/types/src/window/window.d.ts +0 -2
  354. package/dist/chips-CfPFXv7Z.js.map +0 -1
  355. package/dist/chips-DK6m-VCM.cjs.map +0 -1
  356. package/dist/details-BdAVsLl-.cjs.map +0 -1
  357. package/dist/details-CS_ToAOj.js.map +0 -1
  358. package/dist/form-g5c70rac.cjs +0 -42
  359. package/dist/input-chip-CtQ0pH5b.js.map +0 -1
  360. package/dist/input-chip-DZktYohr.cjs.map +0 -1
  361. package/dist/lightbox-BHTZOn8K.cjs.map +0 -1
  362. package/dist/lightbox-BL3LWp-P.js.map +0 -1
  363. package/dist/mixins-BOOu6q2n.cjs +0 -298
  364. package/dist/mixins-BWb9_e1s.js +0 -680
  365. package/dist/notification-CUmb9c3Y.js.map +0 -1
  366. package/dist/notification-Dy2azMyt.cjs.map +0 -1
  367. package/dist/window-BTecgE_U.js.map +0 -1
  368. package/dist/window-DGydMS0g.cjs.map +0 -1
  369. /package/dist/{rxjs-utils-kWPShgKu.cjs → rxjs-utils-BKB2UM_j.cjs} +0 -0
  370. /package/dist/{rxjs-utils-D9U4MW0Q.js → rxjs-utils-Dv9T9IpA.js} +0 -0
  371. /package/dist/{theme.interface-C8OHheXg.js → theme.interface-C2XNgsLB.js} +0 -0
  372. /package/dist/{theme.interface-CYo4UpWK.cjs → theme.interface-D4NeufQA.cjs} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window-DMy5Gsgu.js","names":[],"sources":["../src/window/window-manager.ts","../src/window/window-position.ts","../src/window/window.ts"],"sourcesContent":["/**\n * Window Manager — singleton service for multi-window coordination.\n *\n * Tracks all schmancy-window instances: positions, z-indices, focus, visual states.\n * Components register on connectedCallback, unregister on disconnectedCallback.\n * Focus changes, position updates, and overlap queries all flow through here.\n *\n * Follows the ThemeService singleton pattern (theme/theme.service.ts).\n *\n * Example:\n * windowManager.register('chat-1', bounds, 'bottom-right')\n * windowManager.focus('chat-1') // bumps z-index, updates focusedId\n * const overlaps = windowManager.findOverlaps(projectedBounds, 'chat-1')\n */\n\nimport { BehaviorSubject, Observable, distinctUntilChanged, map } from 'rxjs'\nimport { overlayStack } from '../utils/overlay-stack.js'\nimport type { WindowBounds, WindowRecord, WindowRegistryState, SnapTarget } from './window-registry.js'\n\nconst STORAGE_PREFIX = 'schmancy-window-'\nconst LEGACY_STORAGE_PREFIX = 'schmancy-float-'\n\nclass WindowManagerService {\n\tprivate static instance: WindowManagerService\n\n\tprivate readonly _state$ = new BehaviorSubject<WindowRegistryState>({\n\t\twindows: new Map(),\n\t\tfocusedId: null,\n\t\tstackOrder: [],\n\t})\n\n\treadonly state$ = this._state$.asObservable()\n\n\tprivate constructor() {}\n\n\tstatic getInstance(): WindowManagerService {\n\t\tif (!WindowManagerService.instance) {\n\t\t\tWindowManagerService.instance = new WindowManagerService()\n\t\t}\n\t\treturn WindowManagerService.instance\n\t}\n\n\t// ── Synchronous accessors ──────────────────────────────────────────\n\n\tget windows(): Map<string, WindowRecord> {\n\t\treturn this._state$.value.windows\n\t}\n\n\tget focusedId(): string | null {\n\t\treturn this._state$.value.focusedId\n\t}\n\n\t// ── Registration ───────────────────────────────────────────────────\n\n\tregister(id: string, initialBounds: WindowBounds, snapTarget: SnapTarget): void {\n\t\tconst state = this._state$.value\n\t\tif (state.windows.has(id)) return\n\n\t\tconst zIndex = overlayStack.assignZIndex(id)\n\t\tconst record: WindowRecord = {\n\t\t\tid,\n\t\t\tbounds: initialBounds,\n\t\t\tvisualState: 'normal',\n\t\t\tzIndex,\n\t\t\topen: false,\n\t\t\tsnapTarget,\n\t\t}\n\n\t\tconst windows = new Map(state.windows)\n\t\twindows.set(id, record)\n\t\tconst stackOrder = overlayStack.getStackOrder()\n\n\t\tthis._state$.next({ ...state, windows, stackOrder })\n\t}\n\n\tunregister(id: string): void {\n\t\tconst state = this._state$.value\n\t\tif (!state.windows.has(id)) return\n\n\t\toverlayStack.releaseId(id)\n\t\tconst windows = new Map(state.windows)\n\t\twindows.delete(id)\n\t\tconst stackOrder = overlayStack.getStackOrder()\n\t\tconst focusedId = state.focusedId === id ? null : state.focusedId\n\n\t\tthis._state$.next({ ...state, windows, stackOrder, focusedId })\n\t}\n\n\t// ── State mutations ────────────────────────────────────────────────\n\n\tupdateBounds(id: string, bounds: WindowBounds): void {\n\t\tthis._updateRecord(id, { bounds })\n\t}\n\n\tupdateVisualState(id: string, visualState: WindowRecord['visualState']): void {\n\t\tthis._updateRecord(id, { visualState })\n\t}\n\n\tupdateOpen(id: string, open: boolean): void {\n\t\tthis._updateRecord(id, { open })\n\t}\n\n\tfocus(id: string): void {\n\t\tconst state = this._state$.value\n\t\tif (!state.windows.has(id)) return\n\t\tif (state.focusedId === id) return\n\n\t\tconst zIndex = overlayStack.bringToFront(id)\n\t\tconst windows = new Map(state.windows)\n\t\tconst record = windows.get(id)\n\t\tif (record) {\n\t\t\twindows.set(id, { ...record, zIndex })\n\t\t}\n\t\tconst stackOrder = overlayStack.getStackOrder()\n\n\t\tthis._state$.next({ ...state, windows, stackOrder, focusedId: id })\n\t}\n\n\t// ── Queries ────────────────────────────────────────────────────────\n\n\tfindOverlaps(bounds: WindowBounds, excludeId: string): WindowRecord[] {\n\t\tconst result: WindowRecord[] = []\n\t\tfor (const [id, record] of this._state$.value.windows) {\n\t\t\tif (id === excludeId) continue\n\t\t\tif (rectsOverlap(bounds, record.bounds)) {\n\t\t\t\tresult.push(record)\n\t\t\t}\n\t\t}\n\t\treturn result\n\t}\n\n\tgetNeighbors(id: string): WindowRecord[] {\n\t\tconst result: WindowRecord[] = []\n\t\tfor (const [otherId, record] of this._state$.value.windows) {\n\t\t\tif (otherId !== id) result.push(record)\n\t\t}\n\t\treturn result\n\t}\n\n\t// ── Selectors ──────────────────────────────────────────────────────\n\n\tselectWindow(id: string): Observable<WindowRecord | undefined> {\n\t\treturn this._state$.pipe(\n\t\t\tmap(state => state.windows.get(id)),\n\t\t\tdistinctUntilChanged(),\n\t\t)\n\t}\n\n\tselectFocused(): Observable<string | null> {\n\t\treturn this._state$.pipe(\n\t\t\tmap(state => state.focusedId),\n\t\t\tdistinctUntilChanged(),\n\t\t)\n\t}\n\n\t// ── Persistence ────────────────────────────────────────────────────\n\n\tloadPosition(id: string): { x: number; y: number; anchor: string } | null {\n\t\ttry {\n\t\t\t// Try new key first, fall back to legacy\n\t\t\tconst raw = localStorage.getItem(STORAGE_PREFIX + id) ?? localStorage.getItem(LEGACY_STORAGE_PREFIX + id)\n\t\t\tif (!raw) return null\n\t\t\treturn JSON.parse(raw) as { x: number; y: number; anchor: string }\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t}\n\n\tsavePosition(id: string, data: { x: number; y: number; anchor: string }): void {\n\t\ttry {\n\t\t\tlocalStorage.setItem(STORAGE_PREFIX + id, JSON.stringify(data))\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t}\n\n\tclearPosition(id: string): void {\n\t\ttry {\n\t\t\tlocalStorage.removeItem(STORAGE_PREFIX + id)\n\t\t\tlocalStorage.removeItem(LEGACY_STORAGE_PREFIX + id)\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t}\n\n\t// ── Internal ───────────────────────────────────────────────────────\n\n\tprivate _updateRecord(id: string, updates: Partial<WindowRecord>): void {\n\t\tconst state = this._state$.value\n\t\tconst record = state.windows.get(id)\n\t\tif (!record) return\n\n\t\tconst windows = new Map(state.windows)\n\t\twindows.set(id, { ...record, ...updates })\n\t\tthis._state$.next({ ...state, windows })\n\t}\n}\n\n/** Simple rect overlap check (inline — no circular import with window-position) */\nfunction rectsOverlap(a: WindowBounds, b: WindowBounds): boolean {\n\treturn !(a.left >= b.left + b.width || a.left + a.width <= b.left || a.top >= b.top + b.height || a.top + a.height <= b.top)\n}\n\nexport const windowManager = WindowManagerService.getInstance()\n","/**\n * Window Position — pure functions for overlap resolution, cascade, and snapping.\n *\n * All functions are stateless: they take window bounds and viewport dimensions,\n * return new bounds. No side effects, no DOM access, no subscriptions.\n *\n * Example:\n * const projected = { left: 100, top: 400, width: 360, height: 500 }\n * const neighbors = windowManager.findOverlaps(projected, 'my-id')\n * const resolved = resolveOverlap(projected, neighbors, { width: 1440, height: 900 })\n * // → { left: 144, top: 444, width: 360, height: 500 } (cascaded away from conflict)\n */\n\nimport type { WindowBounds, WindowRecord } from './window-registry.js'\n\nconst HEAD_HEIGHT = 44\nconst CASCADE_OFFSET = HEAD_HEIGHT\nconst MAX_CASCADE_ATTEMPTS = 10\n\n/** Check if two rectangles overlap (edges touching does NOT count as overlap) */\nexport function rectsOverlap(a: WindowBounds, b: WindowBounds): boolean {\n\treturn !(a.left >= b.left + b.width || a.left + a.width <= b.left || a.top >= b.top + b.height || a.top + a.height <= b.top)\n}\n\n/**\n * Resolve overlap by cascading diagonally until no conflict.\n * Shifts by (HEAD_HEIGHT, HEAD_HEIGHT) per attempt, clamped to viewport.\n */\nexport function resolveOverlap(\n\tcandidate: WindowBounds,\n\texisting: WindowRecord[],\n\tviewport: { width: number; height: number },\n): WindowBounds {\n\tconst bounds = { ...candidate }\n\n\tfor (let attempt = 0; attempt < MAX_CASCADE_ATTEMPTS; attempt++) {\n\t\tconst hasOverlap = existing.some(w => rectsOverlap(bounds, w.bounds))\n\t\tif (!hasOverlap) break\n\n\t\tbounds.left += CASCADE_OFFSET\n\t\tbounds.top += CASCADE_OFFSET\n\t}\n\n\treturn clampToViewport(bounds, viewport)\n}\n\n/**\n * Clamp bounds so the window stays fully within the viewport.\n */\nexport function clampToViewport(\n\tbounds: WindowBounds,\n\tviewport: { width: number; height: number },\n): WindowBounds {\n\treturn {\n\t\twidth: bounds.width,\n\t\theight: bounds.height,\n\t\tleft: Math.max(0, Math.min(bounds.left, viewport.width - bounds.width)),\n\t\ttop: Math.max(0, Math.min(bounds.top, viewport.height - bounds.height)),\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport {\n\tanimationFrameScheduler,\n\tauditTime,\n\tcatchError,\n\tEMPTY,\n\tfilter,\n\tfinalize,\n\tfrom,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tObservable,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n} from 'rxjs'\nimport { SPRING_SMOOTH, SPRING_SNAPPY } from '../utils/animation.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { reducedMotion$ } from '../directives/reduced-motion'\nimport { theme } from '../theme/theme.service.js'\nimport type { SnapCorner, WindowBounds, WindowVisualState } from './window-registry.js'\nimport { windowManager } from './window-manager.js'\nimport { resolveOverlap } from './window-position.js'\n\nconst HEAD_HEIGHT = 48\nconst DRAG_THRESHOLD = 5\n\ninterface Position {\n\tx: number\n\ty: number\n}\n\n@customElement('schmancy-window')\nexport default class SchmancyWindow extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: contents;\n\t\tposition: relative;\n\t\tz-index: 1000;\n\t}\n\t:host([hidden]) {\n\t\tdisplay: none !important;\n\t}\n`]\n\n\t@property({ type: String }) id: string = 'default'\n\t/** Override the expanded panel width (e.g. '320px', '24rem'). Defaults to responsive sizing. */\n\t@property({ type: String }) expandedWidth?: string\n\t/** Override the expanded panel height (e.g. '400px', '50vh'). */\n\t@property({ type: String }) expandedHeight?: string\n\t/** When true, uses a lower elevation shadow in the collapsed state. */\n\t@property({ type: Boolean, reflect: true }) lowered: boolean = false\n\t/** Corner the window is anchored to. */\n\t@property({ type: String }) corner: SnapCorner = 'bottom-right'\n\t/** When true, window can be resized by the user. */\n\t@property({ type: Boolean }) resizable = false\n\t/** When true, window stays at its dragged position instead of snapping to a corner. */\n\t@property({ type: Boolean }) freePosition = false\n\t/** Visual state of the window (minimized, normal, maximized). */\n\t@property({ type: String, reflect: true }) visualState: WindowVisualState = 'normal'\n\t/** Minimum width in pixels. */\n\t@property({ type: Number }) minWidth = 280\n\t/** Minimum height in pixels. */\n\t@property({ type: Number }) minHeight = 200\n\n\t/** Whether the body is expanded. */\n\t@property({ type: Boolean, reflect: true }) open = false\n\n\tprivate _currentAnimation?: Animation\n\n\t/** Lazy rendering: body content not in DOM until first expand. */\n\t@state() private _hasOpened = false\n\n\t// Internal position -- plain fields, updated directly during drag\n\tprivate _position: Position = { x: 16, y: 16 }\n\t@state() private _currentCorner: SnapCorner = 'bottom-right'\n\n\t// Track applied corner to avoid unnecessary style.removeProperty calls during drag\n\tprivate _appliedCorner: string = ''\n\n\t// Refs\n\tprivate _containerRef = createRef<HTMLElement>()\n\tprivate _bodyRef = createRef<HTMLElement>()\n\tprivate _headRef = createRef<HTMLElement>()\n\n\t// ============================================\n\t// COMPUTED\n\t// ============================================\n\n\tprivate get panelWidth(): string {\n\t\treturn this.expandedWidth ?? 'min(360px, calc(100vw - 32px))'\n\t}\n\n\tprivate get isBottomCorner(): boolean {\n\t\treturn this._currentCorner.startsWith('bottom')\n\t}\n\n\tprivate get closedClipPath(): string {\n\t\treturn this.isBottomCorner\n\t\t\t? `inset(calc(100% - ${HEAD_HEIGHT}px) 0px 0px 0px round 22px)`\n\t\t\t: `inset(0px 0px calc(100% - ${HEAD_HEIGHT}px) 0px round 22px)`\n\t}\n\n\tprivate get openClipPath(): string {\n\t\treturn 'inset(0px 0px 0px 0px round 12px)'\n\t}\n\n\tprivate get elevation(): 0 | 1 | 2 | 3 | 4 | 5 {\n\t\tif (this.open) return 4\n\t\treturn this.lowered ? 1 : 3\n\t}\n\n\t// ============================================\n\t// POSITION MANAGEMENT\n\t// ============================================\n\n\tprivate _applyContainerPosition() {\n\t\tconst container = this._containerRef.value\n\t\tif (!container) return\n\t\t// Only clear position properties when corner changes (avoids 4 style invalidations per drag frame)\n\t\tif (this._appliedCorner !== this._currentCorner) {\n\t\t\tcontainer.style.removeProperty('left')\n\t\t\tcontainer.style.removeProperty('right')\n\t\t\tcontainer.style.removeProperty('top')\n\t\t\tcontainer.style.removeProperty('bottom')\n\t\t\tthis._appliedCorner = this._currentCorner\n\t\t}\n\t\tconst { x, y } = this._position\n\t\tif (this._currentCorner.includes('right')) {\n\t\t\tcontainer.style.right = `${x}px`\n\t\t} else {\n\t\t\tcontainer.style.left = `${x}px`\n\t\t}\n\t\tif (this._currentCorner.includes('bottom')) {\n\t\t\tcontainer.style.bottom = `${y + theme.bottomOffset}px`\n\t\t} else {\n\t\t\tcontainer.style.top = `${y}px`\n\t\t}\n\t}\n\n\tprivate static readonly VALID_CORNERS = new Set<string>(['top-left', 'top-right', 'bottom-left', 'bottom-right'])\n\n\tprivate _loadPosition() {\n\t\tconst saved = windowManager.loadPosition(this.id)\n\t\tif (saved) {\n\t\t\tthis._position = { x: saved.x, y: saved.y }\n\t\t\tif (SchmancyWindow.VALID_CORNERS.has(saved.anchor)) {\n\t\t\t\tthis._currentCorner = saved.anchor as SnapCorner\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _savePosition() {\n\t\twindowManager.savePosition(this.id, { ...this._position, anchor: this._currentCorner })\n\t}\n\n\tprivate _validateBounds() {\n\t\tconst container = this._containerRef.value\n\t\tif (!container) return\n\t\tconst rect = container.getBoundingClientRect()\n\t\tif (rect.width === 0) return\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\t\tconst isRight = this._currentCorner.includes('right')\n\t\tconst isBottom = this._currentCorner.includes('bottom')\n\t\tconst actualLeft = isRight ? vw - this._position.x - rect.width : this._position.x\n\t\tconst actualTop = isBottom ? vh - this._position.y - rect.height : this._position.y\n\t\tconst newLeft = Math.max(0, Math.min(actualLeft, vw - rect.width))\n\t\tconst newTop = Math.max(0, Math.min(actualTop, vh - rect.height))\n\t\tthis._position = {\n\t\t\tx: isRight ? vw - newLeft - rect.width : newLeft,\n\t\t\ty: isBottom ? vh - newTop - rect.height : newTop,\n\t\t}\n\t\tthis._applyContainerPosition()\n\t}\n\n\t// ============================================\n\t// CORNER SNAPPING\n\t// ============================================\n\n\tprivate _reorientToNearestCorner(skipAnimation = false): void {\n\t\t// Free position mode: skip corner snapping\n\t\tif (this.freePosition) {\n\t\t\tthis._savePosition()\n\t\t\tconst rect = this._containerRef.value?.getBoundingClientRect()\n\t\t\tif (rect) {\n\t\t\t\twindowManager.updateBounds(this.id, { left: rect.left, top: rect.top, width: rect.width, height: rect.height })\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst container = this._containerRef.value\n\t\tif (!container) return\n\n\t\t// F -- record current screen position before DOM mutation\n\t\tconst rect = container.getBoundingClientRect()\n\n\t\t// L -- calculate nearest corner using head visual center\n\t\tconst currentIsBottom = this._currentCorner.includes('bottom')\n\t\tconst headCenterX = rect.left + rect.width / 2\n\t\tconst headCenterY = currentIsBottom\n\t\t\t? rect.bottom - HEAD_HEIGHT / 2\n\t\t\t: rect.top + HEAD_HEIGHT / 2\n\t\tconst side = headCenterX > window.innerWidth / 2 ? 'right' : 'left'\n\t\tconst vert = headCenterY > window.innerHeight / 2 ? 'bottom' : 'top'\n\t\tconst newCorner: SnapCorner = `${vert}-${side}` as SnapCorner\n\n\t\t// Snap corner and reset offset to standard edge gap\n\t\tthis._currentCorner = newCorner\n\t\tthis._position = { x: 16, y: 16 }\n\t\tthis._applyContainerPosition()\n\t\t// Sync clip-path to new corner\n\t\tif (!this.open) {\n\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t}\n\n\t\tif (skipAnimation || reducedMotion$.value) {\n\t\t\tthis._savePosition()\n\t\t\tconst snapRect = container.getBoundingClientRect()\n\t\t\twindowManager.updateBounds(this.id, { left: snapRect.left, top: snapRect.top, width: snapRect.width, height: snapRect.height })\n\t\t\treturn\n\t\t}\n\n\t\t// I -- invert: shift element back to its original visual position\n\t\tconst newRect = container.getBoundingClientRect()\n\t\tconst dx = rect.left - newRect.left\n\t\tconst dy = rect.top - newRect.top\n\t\tcontainer.style.translate = `${dx}px ${dy}px`\n\n\t\t// P -- play: animate from the inverse offset to natural resting position\n\t\tconst flipKeyframes: Keyframe[] = [{ translate: `${dx}px ${dy}px` }, { translate: '0px 0px' }]\n\t\tconst anim = container.animate(\n\t\t\tflipKeyframes,\n\t\t\t{\n\t\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t)\n\t\tfrom(anim.finished).pipe(\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tif (container.isConnected) container.style.translate = ''\n\t\t\t\t// Report final resting bounds after animation completes\n\t\t\t\tconst finalRect = container.getBoundingClientRect()\n\t\t\t\twindowManager.updateBounds(this.id, { left: finalRect.left, top: finalRect.top, width: finalRect.width, height: finalRect.height })\n\t\t\t}),\n\t\t\tcatchError(() => EMPTY),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\n\t\tthis._savePosition()\n\t}\n\n\t// ============================================\n\t// DRAG PIPELINE\n\t// ============================================\n\n\tprivate _drag$(): Observable<never> {\n\t\treturn new Observable(() => {\n\t\t\tconst head = this._headRef.value\n\t\t\tconst container = this._containerRef.value\n\t\t\tif (!head || !container) return\n\n\t\t\tlet didDrag = false\n\n\t\t\tconst sub = fromEvent<PointerEvent>(head, 'pointerdown').pipe(\n\t\t\t\tfilter(e => e.button === 0),\n\t\t\t\tfilter(e => {\n\t\t\t\t\tconst tag = (e.target as HTMLElement).tagName?.toLowerCase()\n\t\t\t\t\treturn !['input', 'textarea', 'select', 'button'].includes(tag)\n\t\t\t\t\t\t&& !(e.target as HTMLElement).closest('schmancy-input, schmancy-icon-button, button, a')\n\t\t\t\t}),\n\t\t\t\ttap(e => {\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\te.stopPropagation()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t\t.pipe(\n\t\t\t\t\tmap(e => {\n\t\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\t\tconst isBottom = this._currentCorner.includes('bottom')\n\t\t\t\t\t\tconst wasOpen = this.open\n\t\t\t\t\t\tdidDrag = false\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstartX: e.clientX,\n\t\t\t\t\t\t\tstartY: e.clientY,\n\t\t\t\t\t\t\toffsetX: e.clientX - rect.left,\n\t\t\t\t\t\t\toffsetY: e.clientY - rect.top,\n\t\t\t\t\t\t\trect,\n\t\t\t\t\t\t\tvw: window.innerWidth,\n\t\t\t\t\t\t\tvh: window.innerHeight,\n\t\t\t\t\t\t\tisBottom,\n\t\t\t\t\t\t\twasOpen,\n\t\t\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tswitchMap(({ startX, startY, offsetX, offsetY, rect, vw, vh, isBottom, wasOpen, pointerId }) => {\n\t\t\t\t\t\tconst move$ = fromEvent<PointerEvent>(window, 'pointermove').pipe(\n\t\t\t\t\t\t\tfilter(e => e.pointerId === pointerId),\n\t\t\t\t\t\t\tauditTime(0, animationFrameScheduler),\n\t\t\t\t\t\t\tmap(e => ({ clientX: e.clientX, clientY: e.clientY })),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst end$ = fromEvent<PointerEvent>(window, 'pointerup').pipe(\n\t\t\t\t\t\t\tfilter(e => e.pointerId === pointerId),\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\treturn move$.pipe(\n\t\t\t\t\t\t\ttap(({ clientX, clientY }) => {\n\t\t\t\t\t\t\t\tconst dx = clientX - startX\n\t\t\t\t\t\t\t\tconst dy = clientY - startY\n\t\t\t\t\t\t\t\tif (Math.sqrt(dx * dx + dy * dy) > DRAG_THRESHOLD && !didDrag) {\n\t\t\t\t\t\t\t\t\tdidDrag = true\n\t\t\t\t\t\t\t\t\tthis._applyDragVisuals(true)\n\t\t\t\t\t\t\t\t\t// Collapse on first confirmed drag move\n\t\t\t\t\t\t\t\t\tif (wasOpen) {\n\t\t\t\t\t\t\t\t\t\tthis.open = false\n\t\t\t\t\t\t\t\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t\t\t\t\t\t\t\t\tcontainer.style.overflow = 'hidden'\n\t\t\t\t\t\t\t\t\t\tconst body = this._bodyRef.value\n\t\t\t\t\t\t\t\t\t\tif (body) {\n\t\t\t\t\t\t\t\t\t\t\tbody.inert = true\n\t\t\t\t\t\t\t\t\t\t\tbody.style.visibility = 'hidden'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!didDrag) return\n\n\t\t\t\t\t\t\t\tconst left = Math.max(0, Math.min(clientX - offsetX, vw - rect.width))\n\t\t\t\t\t\t\t\tconst minTop = isBottom ? HEAD_HEIGHT - rect.height : 0\n\t\t\t\t\t\t\t\tconst maxTop = isBottom ? vh - rect.height : vh - HEAD_HEIGHT\n\t\t\t\t\t\t\t\tconst top = Math.max(minTop, Math.min(clientY - offsetY, maxTop))\n\n\t\t\t\t\t\t\t\tthis._position = {\n\t\t\t\t\t\t\t\t\tx: this._currentCorner.includes('right') ? vw - left - rect.width : left,\n\t\t\t\t\t\t\t\t\ty: isBottom ? vh - top - rect.height : top,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._applyContainerPosition()\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\ttakeUntil(end$),\n\t\t\t\t\t\t\tfinalize(() => {\n\t\t\t\t\t\t\t\tif (didDrag) {\n\t\t\t\t\t\t\t\t\tthis._reorientToNearestCorner()\n\t\t\t\t\t\t\t\t\tthis._applyDragVisuals(false)\n\t\t\t\t\t\t\t\t\tdidDrag = false\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdidDrag = false\n\t\t\t\t\t\t\t\t\tthis.toggle()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.subscribe()\n\n\t\t\treturn () => sub.unsubscribe()\n\t\t})\n\t}\n\n\t// ============================================\n\t// LIFECYCLE\n\t// ============================================\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Pipeline 1: DOM setup + manager registration + drag + z-index sync\n\t\tfrom(this.updateComplete).pipe(\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tthis._currentCorner = this.corner\n\t\t\t\tthis._loadPosition()\n\t\t\t\tthis._applyContainerPosition()\n\t\t\t\tthis._initDOMState()\n\t\t\t\t// Register with window manager\n\t\t\t\tconst container = this._containerRef.value\n\t\t\t\tif (container) {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tconst bounds: WindowBounds = { left: rect.left, top: rect.top, width: rect.width, height: rect.height }\n\t\t\t\t\twindowManager.register(this.id, bounds, this.freePosition ? 'free' : this._currentCorner)\n\t\t\t\t}\n\t\t\t}),\n\t\t\tswitchMap(() => merge(\n\t\t\t\tthis._drag$(),\n\t\t\t\twindowManager.selectWindow(this.id).pipe(\n\t\t\t\t\ttap(record => {\n\t\t\t\t\t\tif (!record) return\n\t\t\t\t\t\tconst container = this._containerRef.value\n\t\t\t\t\t\tif (container) container.style.zIndex = String(record.zIndex)\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t)),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\n\n\t\t// Pipeline 3: Environment -- one subscription\n\t\tmerge(\n\t\t\tfromEvent(window, 'resize').pipe(\n\t\t\t\tauditTime(0, animationFrameScheduler),\n\t\t\t\ttap(() => this._validateBounds()),\n\t\t\t),\n\t\t\ttheme.bottomOffset$.pipe(\n\t\t\t\ttap(() => this._applyContainerPosition()),\n\t\t\t),\n\t\t).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\twindowManager.unregister(this.id)\n\t}\n\n\tprivate _initDOMState() {\n\t\tconst container = this._containerRef.value\n\t\tconst body = this._bodyRef.value\n\t\tif (!container) return\n\n\t\tthis._applyContainerPosition()\n\n\t\tif (this.open) {\n\t\t\tthis._hasOpened = true\n\t\t\tcontainer.style.overflow = ''\n\t\t\tif (body) {\n\t\t\t\tbody.inert = false\n\t\t\t\tbody.style.visibility = 'visible'\n\t\t\t}\n\t\t} else {\n\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t\tcontainer.style.overflow = 'hidden'\n\t\t\tif (body) {\n\t\t\t\tbody.inert = true\n\t\t\t\tbody.style.visibility = 'hidden'\n\t\t\t}\n\t\t}\n\t}\n\n\t// ============================================\n\t// ANIMATION\n\t// ============================================\n\n\tprivate _animateOpen() {\n\t\tconst container = this._containerRef.value\n\t\tconst body = this._bodyRef.value\n\t\tif (!container) return\n\n\t\tthis._hasOpened = true\n\t\tthis.open = true\n\n\t\t// Overlap avoidance\n\t\tconst rect = container.getBoundingClientRect()\n\t\tconst projectedBounds: WindowBounds = {\n\t\t\tleft: rect.left,\n\t\t\ttop: this.isBottomCorner ? rect.top - 400 : rect.top,\n\t\t\twidth: rect.width,\n\t\t\theight: 400 + HEAD_HEIGHT,\n\t\t}\n\t\tconst overlaps = windowManager.findOverlaps(projectedBounds, this.id)\n\t\tif (overlaps.length > 0) {\n\t\t\tconst resolved = resolveOverlap(projectedBounds, overlaps, { width: window.innerWidth, height: window.innerHeight })\n\t\t\tif (Math.abs(resolved.left - projectedBounds.left) > 10 || Math.abs(resolved.top - projectedBounds.top) > 10) {\n\t\t\t\tconst isRight = this._currentCorner.includes('right')\n\t\t\t\tconst isBottom = this._currentCorner.includes('bottom')\n\t\t\t\tthis._position = {\n\t\t\t\t\tx: isRight ? window.innerWidth - resolved.left - resolved.width : resolved.left,\n\t\t\t\t\ty: isBottom ? window.innerHeight - resolved.top - resolved.height : resolved.top,\n\t\t\t\t}\n\t\t\t\tthis._applyContainerPosition()\n\t\t\t}\n\t\t}\n\n\t\tif (body) {\n\t\t\tbody.style.visibility = 'visible'\n\t\t\tbody.inert = false\n\t\t}\n\n\t\tif (reducedMotion$.value) {\n\t\t\tcontainer.style.clipPath = ''\n\t\t\tcontainer.style.overflow = ''\n\t\t\tthis.dispatchScopedEvent('window-toggle', { state: 'expanded' })\n\t\t\treturn\n\t\t}\n\n\t\tthis._currentAnimation?.cancel()\n\t\tcontainer.style.overflow = 'hidden'\n\t\tcontainer.style.willChange = 'opacity'\n\t\tconst openKeyframes: Keyframe[] = [\n\t\t\t{ clipPath: this.closedClipPath, opacity: 0.95 },\n\t\t\t{ clipPath: this.openClipPath, opacity: 1 },\n\t\t]\n\t\tconst anim = container.animate(openKeyframes, {\n\t\t\tduration: SPRING_SNAPPY.duration,\n\t\t\teasing: SPRING_SNAPPY.easingFallback,\n\t\t\tfill: 'forwards',\n\t\t})\n\t\tthis._currentAnimation = anim\n\n\t\tfrom(anim.finished).pipe(\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tif (container.isConnected) {\n\t\t\t\t\tcontainer.style.clipPath = ''\n\t\t\t\t\tcontainer.style.overflow = ''\n\t\t\t\t\tcontainer.style.willChange = ''\n\t\t\t\t}\n\t\t\t}),\n\t\t\tcatchError(() => EMPTY),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\n\t\tthis.dispatchScopedEvent('window-toggle', { state: 'expanded' })\n\t}\n\n\tprivate _animateClose() {\n\t\tconst container = this._containerRef.value\n\t\tif (!container) return\n\n\t\tif (reducedMotion$.value) {\n\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t\tcontainer.style.overflow = 'hidden'\n\t\t\tthis.open = false\n\t\t\tconst body = this._bodyRef.value\n\t\t\tif (body) { body.inert = true; body.style.visibility = 'hidden' }\n\t\t\tthis.dispatchScopedEvent('window-toggle', { state: 'collapsed' })\n\t\t\treturn\n\t\t}\n\n\t\tthis._currentAnimation?.cancel()\n\t\tcontainer.style.overflow = 'hidden'\n\t\tcontainer.style.willChange = 'opacity'\n\t\tconst closeKeyframes: Keyframe[] = [\n\t\t\t{ clipPath: this.openClipPath, opacity: 1 },\n\t\t\t{ clipPath: this.closedClipPath, opacity: 0.95 },\n\t\t]\n\t\tconst anim = container.animate(closeKeyframes, {\n\t\t\tduration: Math.round(SPRING_SNAPPY.duration * 0.7),\n\t\t\teasing: 'cubic-bezier(0.4, 0, 0.8, 0.15)',\n\t\t\tfill: 'forwards',\n\t\t})\n\t\tthis._currentAnimation = anim\n\n\t\tfrom(anim.finished).pipe(\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tthis.open = false\n\t\t\t\tcontainer.style.willChange = ''\n\t\t\t\tconst body = this._bodyRef.value\n\t\t\t\tif (body) { body.inert = true; body.style.visibility = 'hidden' }\n\t\t\t}),\n\t\t\tcatchError(() => EMPTY),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\n\t\tthis.dispatchScopedEvent('window-toggle', { state: 'collapsed' })\n\t}\n\n\t// ============================================\n\t// VISUAL STATE HELPERS\n\t// ============================================\n\n\t/** Apply drag visuals directly on DOM refs — avoids full Lit re-render for cursor + opacity */\n\tprivate _applyDragVisuals(dragging: boolean) {\n\t\tconst head = this._headRef.value\n\t\tconst container = this._containerRef.value\n\t\tif (head) {\n\t\t\thead.classList.toggle('cursor-grabbing', dragging)\n\t\t\thead.classList.toggle('cursor-move', !dragging)\n\t\t}\n\t\tif (container) {\n\t\t\tcontainer.style.opacity = dragging ? '0.95' : ''\n\t\t}\n\t}\n\n\tprivate _handleFocus = () => windowManager.focus(this.id)\n\n\tprivate _handleHeadKeydown = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis.toggle()\n\t\t\treturn\n\t\t}\n\t\tif (e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n\t\t\te.preventDefault()\n\t\t\tconst step = e.shiftKey ? 20 : 5\n\t\t\tconst dx = e.key === 'ArrowRight' ? step : e.key === 'ArrowLeft' ? -step : 0\n\t\t\tconst dy = e.key === 'ArrowDown' ? step : e.key === 'ArrowUp' ? -step : 0\n\t\t\tthis._position = { x: this._position.x + dx, y: this._position.y + dy }\n\t\t\tthis._applyContainerPosition()\n\t\t\tthis._savePosition()\n\t\t}\n\t}\n\n\t// ============================================\n\t// PUBLIC API\n\t// ============================================\n\n\ttoggle() {\n\t\tif (this.open) this._animateClose()\n\t\telse this._animateOpen()\n\t}\n\n\texpand() {\n\t\tif (this.open) return\n\t\tthis._animateOpen()\n\t}\n\n\tclose() {\n\t\tif (!this.open) return\n\t\tthis._animateClose()\n\t}\n\n\t// ============================================\n\t// RENDER\n\t// ============================================\n\n\tprotected render(): unknown {\n\t\tconst isBottom = this._currentCorner.startsWith('bottom')\n\n\t\tconst containerClasses = classMap({\n\t\t\tfixed: true,\n\t\t\tflex: true,\n\t\t\t'flex-col': isBottom,\n\t\t\t'flex-col-reverse': !isBottom,\n\t\t\t'z-1000': true,\n\t\t\t'rounded-2xl': this.open,\n\t\t\t'rounded-[22px]': !this.open,\n\t\t\t'overflow-hidden': true,\n\t\t})\n\n\t\tconst containerStyles = styleMap({\n\t\t\twidth: this.panelWidth,\n\t\t\t'max-height': 'calc(100vh - 32px)',\n\t\t\t'pointer-events': 'none',\n\t\t})\n\n\t\tconst bodyStyles = styleMap({\n\t\t\t'pointer-events': this.open ? 'auto' : 'none',\n\t\t})\n\n\t\tconst headClasses = classMap({\n\t\t\t'h-full': true,\n\t\t\t'px-3': true,\n\t\t\tflex: true,\n\t\t\t'items-center': true,\n\t\t\t'gap-2': true,\n\t\t\t'select-none': true,\n\t\t\t'cursor-move': true,\n\t\t})\n\n\t\treturn html`\n\t\t\t<schmancy-surface\n\t\t\t\t${ref(this._containerRef)}\n\t\t\t\ttype=\"glass\"\n\t\t\t\t.elevation=${this.elevation}\n\t\t\t\tclass=${containerClasses}\n\t\t\t\tstyle=${containerStyles}\n\t\t\t\taria-expanded=${this.open}\n\t\t\t\t@pointerdown=${this._handleFocus}\n\t\t\t>\n\t\t\t\t<!-- Details section (visually above summary for bottom corners) -->\n\t\t\t\t<section\n\t\t\t\t\t${ref(this._bodyRef)}\n\t\t\t\t\tclass=\"flex-1 min-h-0 overflow-hidden flex flex-col\"\n\t\t\t\t\tstyle=${bodyStyles}\n\t\t\t\t\trole=\"region\"\n\t\t\t\t\taria-label=\"Expandable content\"\n\t\t\t\t>\n\t\t\t\t\t${this._hasOpened ? html`<slot name=\"details\"></slot>` : nothing}\n\t\t\t\t</section>\n\n\t\t\t\t<!-- Summary section -- always interactive, always visible -->\n\t\t\t\t<section\n\t\t\t\t\tclass=\"shrink-0 bg-surface-lowest\"\n\t\t\t\t\tstyle=${styleMap({ 'pointer-events': 'auto', height: `${HEAD_HEIGHT}px` })}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\t${ref(this._headRef)}\n\t\t\t\t\t\t${cursorGlow({ radius: 200, intensity: 0.10 })}\n\t\t\t\t\t\tclass=${headClasses}\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\ttitle=\"Drag to move, click to expand\"\n\t\t\t\t\t\taria-label=\"${this.open ? 'Collapse window' : 'Expand window'}\"\n\t\t\t\t\t\t@keydown=${this._handleHeadKeydown}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"flex-1 min-w-0\">\n\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n\t\t\t\t\t\t\tclass=\"shrink-0 text-surface-on/40 transition-transform duration-200 ${this.open ? 'rotate-180' : ''}\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"M6 9L12 15L18 9\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-window': SchmancyWindow\n\t}\n}\n"],"mappings":"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"}
package/dist/window.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./window-DGydMS0g.cjs`);exports.SchmancyWindow=e.t,exports.windowManager=e.n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./window-BMecbTzs.cjs`);exports.SchmancyWindow=e.t,exports.windowManager=e.n;
package/dist/window.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./window-BTecgE_U.js";
1
+ import { n as e, t } from "./window-DMy5Gsgu.js";
2
2
  export { t as SchmancyWindow, e as windowManager };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mhmo91/schmancy",
3
- "version": "0.10.16",
3
+ "version": "0.10.18",
4
4
  "description": "UI library build with web components",
5
5
  "main": "./dist/index.js",
6
6
  "customElements": "custom-elements.json",
@@ -57,6 +57,9 @@ Use component tags (`<schmancy-menu>`, `<schmancy-dropdown>`, `<schmancy-tooltip
57
57
  - **Schmancy primitive first** (`PRIMITIVE_FIRST`). Within `web/**`, every visible UI element is a custom element exported from `packages/schmancy/src/**`, and an element absent from that export set is added there before being imported into `web/**`. The rule sits above the styling rules: a `<div class="text-xs text-surface-on-variant">…</div>` whose role is typography is a violation even when every utility resolves to a registered token, because `<schmancy-typography>` already covers that role; the styling rules apply only to whatever class strings remain after the right primitive has been selected.
58
58
  Sources: [packages/schmancy/skills/schmancy/INDEX.md](../INDEX.md) catalogues the export set by job (foundations / atoms / forms / navigation / overlays / interaction / feedback / display); each role's reference file (`typography.md`, `surface.md`, `button.md`, `overlay.md`, …) names the props, slots, and events that displace the equivalent `<div>` + utility-class pattern. The export set is the single source — a primitive that is not exported from `packages/schmancy/src/**` does not satisfy this rule even if it lives in a private file inside the schmancy tree.
59
59
  Remediation: walk every `.ts` and `.html` file under `web/**` and list every raw HTML element whose class string carries design-system styling (typography, color, spacing-as-design-decision, surface, layout-as-design-decision, motion, overlay) — those are the violations. For each, look up the matching schmancy primitive in `INDEX.md` and rewrite the element through that primitive (`<schmancy-typography type=… token=…>` for type-scale text, `<schmancy-surface type=… fill=…>` for elevated/bounded surfaces, `<schmancy-grid>`/`<schmancy-flex>` for layout primitives with design intent, the imperative `show`/`$notify`/`schmancyContentDrawer.push` services for overlays, `<schmancy-scroll>` for scroll containers). When a needed primitive is absent from the export set, design and implement it as a new component under `packages/schmancy/src/<role>/` — extending `SchmancyElement` with `static styles = [css\`...\`]`, registered in `HTMLElementTagNameMap`, exported through the package barrel, and documented with a sibling `.md` in the skill's reference set — and only then introduce the first call site in `web/**`. The audit subagent iterates the whole `web/**` tree, surfaces the violation list, applies the rewrites, runs `yarn workspace @momo/web tsc --noEmit` plus the colocated `*-view.test.ts` suites, and reports pre-existing violations that require a new schmancy primitive as a separate punch list for designer/architect approval before the implementation lands. The loop exits when every `web/**` file's visible UI elements are schmancy primitives and the typecheck plus the test suites pass.
60
+ - **Module index re-exports the subpath surface** (`MODULE_INDEX_REEXPORTS_SUBPATH`). Each schmancy module exposed through the package's `./*` subpath export resolves to `src/<name>/index.ts`, and any other source file under `src/<name>/` is visible to consumers only through symbols that index re-exports.
61
+ Sources: the `exports` field in [packages/schmancy/package.json](../../package.json) maps the `./*` subpath to `./dist/*.js` and the matching `./types/src/*/index.d.ts` types entry, so the only declaration a consumer reaches for `import … from '@mhmo91/schmancy/<name>'` is the one emitted from `src/<name>/index.ts`. Files placed in subdirectories of that module are bundled into the same dist output, but they cross the package boundary only through symbols re-exported up the chain into the module index. Past incident: `packages/schmancy/src/form/index.ts` exposed only `form`, `form-state`, and `form-summary`; consumers importing field types like `SchmancyInput` and `SchmancyFormSubmitDetail` from `@mhmo91/schmancy/form` saw nothing because `form/fields/*` had no path into the module index.
62
+ Remediation: list every direct subdirectory of `packages/schmancy/src/<name>/` that owns its own `index.ts` with component exports, and for each one verify that `packages/schmancy/src/<name>/index.ts` carries an `export * from './<subdir>'` (directly, or via a grouping barrel such as `<subdir>/index.ts` re-exported by the module index). The audit subagent runs `ls -d packages/schmancy/src/<name>/*/` for every module under `./*`, greps each subdirectory's `index.ts` for `^export`, then greps the module's `index.ts` for `export \* from './<subdir>'` (or for an intermediate barrel that re-exports it), and lists every subdirectory that fails the second grep as a violation. The fix per violation is one line in the module's `index.ts`; when a module groups several subdirectories under one role (e.g. `form/fields/*`), the loop also adds an intermediate `<subdir>/index.ts` barrel and re-exports that single barrel from the module index rather than enumerating leaves. The loop exits when every direct subdirectory's symbols round-trip through the module index and `yarn workspace @momo/web tsc --noEmit` passes against the consumers that import from `@mhmo91/schmancy/<name>`.
60
63
 
61
64
  ## Non-negotiable conventions
62
65
 
package/src/boat/boat.ts CHANGED
@@ -527,10 +527,7 @@ export default class SchmancyBoat extends SchmancyElement {
527
527
  'flex-col-reverse': !isBottom,
528
528
  'will-change-[clip-path]': true,
529
529
  'z-1000': true,
530
- 'ring-1': true,
531
- 'ring-primary-default/15': this.open,
532
530
  'rounded-2xl': this.open,
533
- 'ring-outline-variant/40': !this.open,
534
531
  'rounded-[22px]': !this.open,
535
532
  'overflow-hidden': true,
536
533
  'opacity-95': this.isDragging,
@@ -83,6 +83,7 @@ export class SchmancyBreadcrumbItem extends SchmancyElement {
83
83
  static styles = [css`
84
84
  :host {
85
85
  display: inline-block;
86
+ width: fit-content;
86
87
  }
87
88
  a, span {
88
89
  color: inherit;
@@ -301,7 +301,7 @@ export class SchmancyButton extends SchmancyElement {
301
301
 
302
302
  // Compute classes for the interactive element.
303
303
  const classes = {
304
- 'z-0 transition-all duration-200 relative rounded-2xl inline-flex justify-center items-center outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden w-[inherit] overflow-hidden':
304
+ 'z-0 transition-all duration-200 relative rounded-2xl flex justify-center items-center outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden w-full overflow-hidden':
305
305
  true,
306
306
  // Height - M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (large) → 56dp (XL)
307
307
  'h-6': this.size === 'xxs', // 24px - Ultra-compact
@@ -16,7 +16,8 @@ import { ButtonVariant } from './button'
16
16
  export class SchmnacyIconButton extends SchmancyElement {
17
17
  static styles = [css`
18
18
  :host {
19
- display: block;
19
+ display: inline-block;
20
+ width: fit-content;
20
21
  border-radius: 9999px;
21
22
  transition:
22
23
  box-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),
@@ -15,7 +15,8 @@ export class SchmancyAssistChip extends SchmancyElement {
15
15
  :host {
16
16
  display: inline-block;
17
17
  outline: none;
18
- min-width:fit-content
18
+ width: fit-content;
19
+ min-width: fit-content;
19
20
  }
20
21
 
21
22
  :host([disabled]) {
@@ -24,15 +24,10 @@ export class SchmancyFilterChip extends SchmancyElement {
24
24
  :host {
25
25
  display: inline-block;
26
26
  outline: none;
27
+ width: fit-content;
27
28
  min-width: fit-content;
28
29
  border-radius: 0.5rem;
29
- transition:
30
- box-shadow 300ms ease,
31
- transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
32
- }
33
-
34
- :host(:hover:not([disabled])) {
35
- box-shadow: 0 2px 8px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);
30
+ transition: transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
36
31
  }
37
32
 
38
33
  :host(:active:not([disabled])) {
@@ -40,10 +35,6 @@ export class SchmancyFilterChip extends SchmancyElement {
40
35
  transition-duration: 100ms;
41
36
  }
42
37
 
43
- :host([selected]) {
44
- box-shadow: 0 0 12px -2px color-mix(in srgb, var(--schmancy-sys-color-secondary-default) 20%, transparent);
45
- }
46
-
47
38
  :host([disabled]) {
48
39
  pointer-events: none;
49
40
  opacity: var(--schmancy-sys-state-disabled-opacity);
@@ -51,9 +42,7 @@ export class SchmancyFilterChip extends SchmancyElement {
51
42
 
52
43
  @media (prefers-reduced-motion: reduce) {
53
44
  :host { transition: none; }
54
- :host(:hover:not([disabled])) { box-shadow: none; }
55
45
  :host(:active:not([disabled])) { transform: none; }
56
- :host([selected]) { box-shadow: none; }
57
46
  }
58
47
 
59
48
  button {
@@ -184,17 +173,14 @@ export class SchmancyFilterChip extends SchmancyElement {
184
173
  'select-none': true,
185
174
  'text-sm': true,
186
175
  'font-medium': true,
187
- 'border': true,
188
176
  'relative': true,
189
177
  'min-h-[32px]': true,
190
178
 
191
179
  // Background and text colors based on selection state
192
180
  'bg-secondary-container': this._selected,
193
181
  'text-secondary-onContainer': this._selected,
194
- 'border-secondary-container': this._selected,
195
182
  'bg-surface-container': !this._selected,
196
183
  'text-surface-on': !this._selected,
197
- 'border-outline': !this._selected,
198
184
 
199
185
  // Hover states
200
186
  'hover:brightness-95': this._selected && !this.disabled,
@@ -34,8 +34,8 @@ export class SchmancyInputChip extends SchmancyElement {
34
34
  :host {
35
35
  display: inline-block;
36
36
  outline: none;
37
- min-width:fit-content
38
-
37
+ width: fit-content;
38
+ min-width: fit-content;
39
39
  }
40
40
 
41
41
  :host([disabled]) {
@@ -295,7 +295,6 @@ export class SchmancyInputChip extends SchmancyElement {
295
295
  'font-medium': true, // M3: 500 weight
296
296
  'relative': true,
297
297
  'overflow-hidden': true,
298
- 'border': true,
299
298
 
300
299
  // M3 Padding: 8px with icon, 16px without (leading), 8px with trailing icon
301
300
  'pl-2': hasLeadingIcon, // 8px with avatar/icon
@@ -306,8 +305,6 @@ export class SchmancyInputChip extends SchmancyElement {
306
305
  // M3 Colors for input chips
307
306
  'bg-surface-containerLow': true,
308
307
  'text-surface-onVariant': true,
309
- 'border-outline': true,
310
- 'border-solid':true,
311
308
  // Input chips are flat (no elevation) per M3
312
309
 
313
310
  // Focus-visible state
@@ -20,7 +20,8 @@ export class SchmancySuggestionChip extends SchmancyElement {
20
20
  :host {
21
21
  display: inline-block;
22
22
  outline: none;
23
- min-width:fit-content
23
+ width: fit-content;
24
+ min-width: fit-content;
24
25
  }
25
26
 
26
27
  :host([disabled]) {
@@ -193,7 +194,6 @@ export class SchmancySuggestionChip extends SchmancyElement {
193
194
  'duration-200': true,
194
195
  'select-none': true,
195
196
  'overflow-hidden': true,
196
- 'border': true,
197
197
 
198
198
  // M3 Padding: 8px with icon, 16px without (leading), 16px trailing
199
199
  'pl-2': hasIcon, // 8px with icon
@@ -203,7 +203,6 @@ export class SchmancySuggestionChip extends SchmancyElement {
203
203
  // M3 Colors for suggestion chips
204
204
  'bg-surface-containerLow': true,
205
205
  'text-surface-onVariant': true,
206
- 'border-outline': true,
207
206
 
208
207
  // Suggestion chips are flat by default (no elevation per M3)
209
208
 
@@ -14,7 +14,6 @@ export default class SchmancyDetails extends SurfaceMixin(SchmancyElement) {
14
14
  static styles = [css`
15
15
  :host {
16
16
  display: block;
17
- transition: box-shadow 400ms cubic-bezier(0.34, 1.2, 0.64, 1);
18
17
  }
19
18
 
20
19
  :host([overlay]) {
@@ -22,9 +21,6 @@ export default class SchmancyDetails extends SurfaceMixin(SchmancyElement) {
22
21
  }
23
22
 
24
23
  :host([open]) {
25
- box-shadow:
26
- 0 2px 12px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent),
27
- 0 8px 32px -8px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 8%, transparent);
28
24
  z-index: 10;
29
25
  }
30
26
 
@@ -228,8 +224,7 @@ export default class SchmancyDetails extends SurfaceMixin(SchmancyElement) {
228
224
  [this.summaryPadding]: true,
229
225
  'select-none relative flex items-center gap-2 rounded-xl': true,
230
226
  'transition-colors duration-150': true,
231
- 'ring-1 ring-inset ring-transparent': true,
232
- 'hover:bg-surface-on/5 active:bg-surface-on/8 hover:ring-outline-variant/40': !this.locked,
227
+ 'hover:bg-surface-on/5 active:bg-surface-on/8': !this.locked,
233
228
  'focus-visible:ring-2 focus-visible:ring-primary-default/50 focus-visible:ring-offset-1': !this.locked,
234
229
  'cursor-pointer group': !this.locked,
235
230
  'cursor-default': this.locked,
@@ -240,7 +235,7 @@ export default class SchmancyDetails extends SurfaceMixin(SchmancyElement) {
240
235
  const contentClasses = this.classMap({
241
236
  [this.contentPadding]: true,
242
237
  'text-sm': true,
243
- 'absolute inset-x-0 bg-surface-lowest/55 backdrop-blur-[16px] shadow-2xl rounded-b-xl z-20 border border-surface-on/10':
238
+ 'absolute inset-x-0 bg-surface-lowest/55 backdrop-blur-[16px] shadow-2xl rounded-b-xl z-20':
244
239
  this.overlay,
245
240
  })
246
241
 
@@ -0,0 +1,9 @@
1
+ export * from './autocomplete'
2
+ export * from './checkbox'
3
+ export * from './date-range'
4
+ export * from './input'
5
+ export * from './radio-group'
6
+ export * from './range'
7
+ export * from './select'
8
+ export * from './switch'
9
+ export * from './textarea'
package/src/form/index.ts CHANGED
@@ -2,3 +2,4 @@ export * from './form'
2
2
  export { default as SchmancyForm } from './form'
3
3
  export * from './form-state'
4
4
  export * from './form-summary'
5
+ export * from './fields'
@@ -329,7 +329,7 @@ export class SchmancyLightbox extends SchmancyElement {
329
329
  >
330
330
  <!-- Close Button -->
331
331
  <button
332
- class="absolute top-4 right-4 md:top-4 md:right-4 sm:top-2 sm:right-2 bg-white/15 backdrop-blur-md border border-white/20 text-white w-11 h-11 rounded-full flex items-center justify-center cursor-pointer z-10 transition-all duration-200 hover:bg-white/25 hover:scale-105 active:scale-95"
332
+ class="absolute top-4 right-4 md:top-4 md:right-4 sm:top-2 sm:right-2 bg-white/15 backdrop-blur-md text-white w-11 h-11 rounded-full flex items-center justify-center cursor-pointer z-10 transition-all duration-200 hover:bg-white/25 hover:scale-105 active:scale-95"
333
333
  @click=${this.handleClose}
334
334
  aria-label="Close lightbox"
335
335
  title="Close (Esc)"
@@ -383,7 +383,7 @@ export class SchmancyLightbox extends SchmancyElement {
383
383
  class="absolute bottom-[-3.5rem] md:bottom-[-3.5rem] sm:bottom-[-3rem] left-1/2 -translate-x-1/2 flex items-center gap-4 z-10"
384
384
  >
385
385
  <button
386
- class="bg-white/15 backdrop-blur-md border border-white/20 text-white w-10 h-10 rounded-full flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-white/25 hover:scale-105 active:scale-95"
386
+ class="bg-white/15 backdrop-blur-md text-white w-10 h-10 rounded-full flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-white/25 hover:scale-105 active:scale-95"
387
387
  @click=${this.handlePrevious}
388
388
  aria-label="Previous image"
389
389
  title="Previous (←)"
@@ -396,7 +396,7 @@ export class SchmancyLightbox extends SchmancyElement {
396
396
  </div>
397
397
 
398
398
  <button
399
- class="bg-white/15 backdrop-blur-md border border-white/20 text-white w-10 h-10 rounded-full flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-white/25 hover:scale-105 active:scale-95"
399
+ class="bg-white/15 backdrop-blur-md text-white w-10 h-10 rounded-full flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-white/25 hover:scale-105 active:scale-95"
400
400
  @click=${this.handleNext}
401
401
  aria-label="Next image"
402
402
  title="Next (→)"
@@ -18,7 +18,6 @@
18
18
  /* Type-colored luminous glow */
19
19
  --notification-glow-color: var(--schmancy-sys-color-primary-default);
20
20
  box-shadow: 0 4px 24px -6px color-mix(in srgb, var(--notification-glow-color) 18%, transparent);
21
- border-left: 2px solid color-mix(in srgb, var(--notification-glow-color) 50%, transparent);
22
21
 
23
22
  transition:
24
23
  box-shadow 300ms ease,
@@ -140,7 +140,7 @@ export class SchmancyOverlayPromptBody extends SchmancyElement {
140
140
  <button
141
141
  type="button"
142
142
  @click=${this.handleCancel}
143
- class="px-4 py-2 rounded-md border border-outline-variant bg-transparent cursor-pointer"
143
+ class="px-4 py-2 rounded-md bg-transparent cursor-pointer hover:bg-surface-on/5"
144
144
  >
145
145
  ${this.cancelText}
146
146
  </button>
@@ -23,7 +23,6 @@ export const surfaceTypeStyles = css`
23
23
  --glass-tint: var(--schmancy-sys-color-surface-on);
24
24
  background: color-mix(in srgb, var(--glass-base) 92%, transparent);
25
25
  color: var(--schmancy-sys-color-surface-on);
26
- border: 1px solid color-mix(in srgb, var(--glass-tint) 4%, transparent);
27
26
  }
28
27
 
29
28
  /* Subtle — frosted glass, clearly readable */
@@ -34,28 +33,17 @@ export const surfaceTypeStyles = css`
34
33
  backdrop-filter: blur(8px) saturate(130%);
35
34
  -webkit-backdrop-filter: blur(8px) saturate(130%);
36
35
  color: var(--schmancy-sys-color-surface-on);
37
- border: 1px solid color-mix(in srgb, var(--glass-tint) 7%, transparent);
38
- box-shadow: inset 0 1px 0 color-mix(in srgb, var(--glass-tint) 5%, transparent);
39
36
  }
40
37
 
41
38
  /* Glass — frosted glass, blur ensures readability */
42
39
  :host([type='glass']) {
43
40
  --glass-base: var(--schmancy-sys-color-surface-lowest);
44
41
  --glass-tint: var(--schmancy-sys-color-surface-on);
45
- --glass-border: color-mix(in srgb, var(--glass-tint) 10%, transparent);
46
- --glass-border-highlight: color-mix(in srgb, var(--glass-tint) 18%, transparent);
47
42
 
48
43
  background: color-mix(in srgb, var(--glass-base) 55%, transparent);
49
44
  backdrop-filter: blur(16px) saturate(180%) brightness(1.05);
50
45
  -webkit-backdrop-filter: blur(16px) saturate(180%) brightness(1.05);
51
46
  color: var(--schmancy-sys-color-surface-on);
52
- border: 1px solid var(--glass-border);
53
- border-top-color: var(--glass-border-highlight);
54
- border-left-color: var(--glass-border-highlight);
55
- box-shadow:
56
- 0 4px 24px color-mix(in srgb, black 10%, transparent),
57
- inset 0 1px 0 color-mix(in srgb, var(--glass-tint) 8%, transparent),
58
- inset 0 -1px 0 color-mix(in srgb, black 3%, transparent);
59
47
  contain: content;
60
48
  position: relative;
61
49
  overflow: hidden;
@@ -67,20 +55,11 @@ export const surfaceTypeStyles = css`
67
55
  --glass-base: var(--schmancy-sys-color-surface-lowest);
68
56
  --glass-tint: var(--schmancy-sys-color-surface-on);
69
57
  --glow-color: var(--schmancy-sys-color-primary-default);
70
- --glass-border: color-mix(in srgb, var(--glass-tint) 12%, transparent);
71
- --glass-border-highlight: color-mix(in srgb, var(--glass-tint) 22%, transparent);
72
58
 
73
59
  background: color-mix(in srgb, var(--glass-base) 42%, transparent);
74
60
  backdrop-filter: blur(20px) saturate(200%) brightness(1.08);
75
61
  -webkit-backdrop-filter: blur(20px) saturate(200%) brightness(1.08);
76
62
  color: var(--schmancy-sys-color-surface-on);
77
- border: 1px solid var(--glass-border);
78
- border-top-color: var(--glass-border-highlight);
79
- border-left-color: var(--glass-border-highlight);
80
- box-shadow:
81
- 0 8px 40px -4px color-mix(in srgb, var(--glow-color) 20%, transparent),
82
- 0 2px 16px color-mix(in srgb, black 8%, transparent),
83
- inset 0 1px 0 color-mix(in srgb, var(--glass-tint) 10%, transparent);
84
63
  contain: content;
85
64
  position: relative;
86
65
  overflow: hidden;
@@ -114,49 +93,42 @@ export const surfaceTypeStyles = css`
114
93
  backdrop-filter: blur(4px) saturate(140%);
115
94
  -webkit-backdrop-filter: blur(4px) saturate(140%);
116
95
  color: var(--schmancy-sys-color-primary-default);
117
- border: 1px solid color-mix(in srgb, var(--schmancy-sys-color-primary-default) 20%, transparent);
118
96
  }
119
97
  :host([type='secondary']) {
120
98
  background: color-mix(in srgb, var(--schmancy-sys-color-secondary-default) 12%, transparent);
121
99
  backdrop-filter: blur(4px) saturate(140%);
122
100
  -webkit-backdrop-filter: blur(4px) saturate(140%);
123
101
  color: var(--schmancy-sys-color-secondary-default);
124
- border: 1px solid color-mix(in srgb, var(--schmancy-sys-color-secondary-default) 20%, transparent);
125
102
  }
126
103
  :host([type='tertiary']) {
127
104
  background: color-mix(in srgb, var(--schmancy-sys-color-tertiary-default) 12%, transparent);
128
105
  backdrop-filter: blur(4px) saturate(140%);
129
106
  -webkit-backdrop-filter: blur(4px) saturate(140%);
130
107
  color: var(--schmancy-sys-color-tertiary-default);
131
- border: 1px solid color-mix(in srgb, var(--schmancy-sys-color-tertiary-default) 20%, transparent);
132
108
  }
133
109
  :host([type='error']) {
134
110
  background: color-mix(in srgb, var(--schmancy-sys-color-error-default) 12%, transparent);
135
111
  backdrop-filter: blur(4px) saturate(140%);
136
112
  -webkit-backdrop-filter: blur(4px) saturate(140%);
137
113
  color: var(--schmancy-sys-color-error-onContainer);
138
- border: 1px solid color-mix(in srgb, var(--schmancy-sys-color-error-default) 25%, transparent);
139
114
  }
140
115
  :host([type='success']) {
141
116
  background: color-mix(in srgb, var(--schmancy-sys-color-success-default) 12%, transparent);
142
117
  backdrop-filter: blur(4px) saturate(140%);
143
118
  -webkit-backdrop-filter: blur(4px) saturate(140%);
144
119
  color: var(--schmancy-sys-color-success-onContainer);
145
- border: 1px solid color-mix(in srgb, var(--schmancy-sys-color-success-default) 25%, transparent);
146
120
  }
147
121
  :host([type='warning']) {
148
122
  background: color-mix(in srgb, var(--schmancy-sys-color-warning-default) 12%, transparent);
149
123
  backdrop-filter: blur(4px) saturate(140%);
150
124
  -webkit-backdrop-filter: blur(4px) saturate(140%);
151
125
  color: var(--schmancy-sys-color-warning-onContainer);
152
- border: 1px solid color-mix(in srgb, var(--schmancy-sys-color-warning-default) 25%, transparent);
153
126
  }
154
127
  :host([type='info']) {
155
128
  background: color-mix(in srgb, var(--schmancy-sys-color-info-default) 12%, transparent);
156
129
  backdrop-filter: blur(4px) saturate(140%);
157
130
  -webkit-backdrop-filter: blur(4px) saturate(140%);
158
131
  color: var(--schmancy-sys-color-info-onContainer);
159
- border: 1px solid color-mix(in srgb, var(--schmancy-sys-color-info-default) 25%, transparent);
160
132
  }
161
133
 
162
134
  /* ================================================================
@@ -173,7 +145,6 @@ export const surfaceTypeStyles = css`
173
145
  --glass-tint: var(--schmancy-sys-color-surface-on);
174
146
  background: color-mix(in srgb, var(--glass-base) 92%, transparent);
175
147
  color: var(--schmancy-sys-color-surface-on);
176
- border: 1px solid color-mix(in srgb, var(--glass-tint) 4%, transparent);
177
148
  }
178
149
 
179
150
  /* subtle aliases — frosted glass */
@@ -185,8 +156,6 @@ export const surfaceTypeStyles = css`
185
156
  backdrop-filter: blur(8px) saturate(130%);
186
157
  -webkit-backdrop-filter: blur(8px) saturate(130%);
187
158
  color: var(--schmancy-sys-color-surface-on);
188
- border: 1px solid color-mix(in srgb, var(--glass-tint) 7%, transparent);
189
- box-shadow: inset 0 1px 0 color-mix(in srgb, var(--glass-tint) 5%, transparent);
190
159
  }
191
160
 
192
161
  /* glass aliases */
@@ -195,20 +164,11 @@ export const surfaceTypeStyles = css`
195
164
  :host([type='glassOforim']) {
196
165
  --glass-base: var(--schmancy-sys-color-surface-lowest);
197
166
  --glass-tint: var(--schmancy-sys-color-surface-on);
198
- --glass-border: color-mix(in srgb, var(--glass-tint) 10%, transparent);
199
- --glass-border-highlight: color-mix(in srgb, var(--glass-tint) 18%, transparent);
200
167
 
201
168
  background: color-mix(in srgb, var(--glass-base) 55%, transparent);
202
169
  backdrop-filter: blur(16px) saturate(180%) brightness(1.05);
203
170
  -webkit-backdrop-filter: blur(16px) saturate(180%) brightness(1.05);
204
171
  color: var(--schmancy-sys-color-surface-on);
205
- border: 1px solid var(--glass-border);
206
- border-top-color: var(--glass-border-highlight);
207
- border-left-color: var(--glass-border-highlight);
208
- box-shadow:
209
- 0 4px 24px color-mix(in srgb, black 10%, transparent),
210
- inset 0 1px 0 color-mix(in srgb, var(--glass-tint) 8%, transparent),
211
- inset 0 -1px 0 color-mix(in srgb, black 3%, transparent);
212
172
  position: relative;
213
173
  overflow: hidden;
214
174
  isolation: isolate;
@@ -301,19 +261,15 @@ export const surfaceClickableStyles = css`
301
261
  }
302
262
  :host([clickable]:hover) {
303
263
  filter: brightness(1.03);
304
- transform: translateY(-1px);
305
- box-shadow: 0 4px 20px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);
306
264
  }
307
265
  :host([clickable]:active) {
308
266
  filter: brightness(0.96);
309
- transform: scale(0.97);
310
- box-shadow: none;
267
+ transform: scale(0.98);
311
268
  transition-duration: 100ms;
312
269
  }
313
270
  :host([clickable]:focus-visible) {
314
271
  outline: 2px solid var(--schmancy-sys-color-primary-default);
315
272
  outline-offset: 2px;
316
- box-shadow: 0 0 12px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 20%, transparent);
317
273
  }
318
274
  @media (prefers-reduced-motion: reduce) {
319
275
  :host([clickable]) { transition: filter 150ms ease; }
@@ -77,8 +77,6 @@ export default class SchmancyWindow extends SchmancyElement {
77
77
 
78
78
  /** Lazy rendering: body content not in DOM until first expand. */
79
79
  @state() private _hasOpened = false
80
- /** Whether this window is the focused window in the manager — drives visual ring */
81
- @state() private _focused = false
82
80
 
83
81
  // Internal position -- plain fields, updated directly during drag
84
82
  private _position: Position = { x: 16, y: 16 }
@@ -398,11 +396,6 @@ export default class SchmancyWindow extends SchmancyElement {
398
396
  if (container) container.style.zIndex = String(record.zIndex)
399
397
  }),
400
398
  ),
401
- windowManager.selectFocused().pipe(
402
- tap(focusedId => {
403
- this._focused = focusedId === this.id
404
- }),
405
- ),
406
399
  )),
407
400
  takeUntil(this.disconnecting),
408
401
  ).subscribe()
@@ -636,12 +629,7 @@ export default class SchmancyWindow extends SchmancyElement {
636
629
  'flex-col': isBottom,
637
630
  'flex-col-reverse': !isBottom,
638
631
  'z-1000': true,
639
- 'ring-1': !this._focused,
640
- 'ring-2': this._focused,
641
- 'ring-primary-default/30': this._focused,
642
- 'ring-primary-default/15': this.open && !this._focused,
643
632
  'rounded-2xl': this.open,
644
- 'ring-outline-variant/40': !this.open && !this._focused,
645
633
  'rounded-[22px]': !this.open,
646
634
  'overflow-hidden': true,
647
635
  })
@@ -0,0 +1,9 @@
1
+ export * from './autocomplete';
2
+ export * from './checkbox';
3
+ export * from './date-range';
4
+ export * from './input';
5
+ export * from './radio-group';
6
+ export * from './range';
7
+ export * from './select';
8
+ export * from './switch';
9
+ export * from './textarea';
@@ -2,3 +2,4 @@ export * from './form';
2
2
  export { default as SchmancyForm } from './form';
3
3
  export * from './form-state';
4
4
  export * from './form-summary';
5
+ export * from './fields';