@mhmo91/schmancy 0.10.6 → 0.10.8

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 (394) hide show
  1. package/README.md +11 -0
  2. package/custom-elements.json +11 -880
  3. package/dist/agent/{flow-3RrZM-e7.js.map → flow-CvG1fLW5.js.map} +1 -1
  4. package/dist/agent/schmancy.agent.js +5223 -10404
  5. package/dist/agent/schmancy.agent.js.map +1 -1
  6. package/dist/agent/schmancy.manifest.json +4 -537
  7. package/dist/agent/{vendor-material-color-33Mj762T.js.map → vendor-material-color-DcL7ZPxx.js.map} +1 -1
  8. package/dist/{area-oZjYJlUy.cjs → area-8IBAXzbC.cjs} +1 -1
  9. package/dist/{area-oZjYJlUy.cjs.map → area-8IBAXzbC.cjs.map} +1 -1
  10. package/dist/{area-CIZZ5tbB.js → area-DSW_LYXQ.js} +1 -1
  11. package/dist/{area-CIZZ5tbB.js.map → area-DSW_LYXQ.js.map} +1 -1
  12. package/dist/area.cjs +1 -1
  13. package/dist/area.js +1 -1
  14. package/dist/{autocomplete-X20i6D62.cjs → autocomplete-9PLjlFYt.cjs} +1 -1
  15. package/dist/{autocomplete-X20i6D62.cjs.map → autocomplete-9PLjlFYt.cjs.map} +1 -1
  16. package/dist/{autocomplete-C1oDLuol.js → autocomplete-CXwwmUbC.js} +2 -2
  17. package/dist/{autocomplete-C1oDLuol.js.map → autocomplete-CXwwmUbC.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/badge.cjs +1 -1
  23. package/dist/badge.js +1 -1
  24. package/dist/{boat-CUx58Gwe.cjs → boat-CpGNeWav.cjs} +1 -1
  25. package/dist/{boat-CUx58Gwe.cjs.map → boat-CpGNeWav.cjs.map} +1 -1
  26. package/dist/{boat-CpE0yAlK.js → boat-Dwn5oXd8.js} +1 -1
  27. package/dist/{boat-CpE0yAlK.js.map → boat-Dwn5oXd8.js.map} +1 -1
  28. package/dist/boat.cjs +1 -1
  29. package/dist/boat.js +1 -1
  30. package/dist/breadcrumb.cjs +1 -1
  31. package/dist/breadcrumb.js +1 -1
  32. package/dist/{busy-D1DKZhgV.cjs → busy-CUUgvimY.cjs} +1 -1
  33. package/dist/{busy-D1DKZhgV.cjs.map → busy-CUUgvimY.cjs.map} +1 -1
  34. package/dist/{busy-C9n-DUY4.js → busy-Cjm1BYVC.js} +1 -1
  35. package/dist/{busy-C9n-DUY4.js.map → busy-Cjm1BYVC.js.map} +1 -1
  36. package/dist/busy.cjs +1 -1
  37. package/dist/busy.js +1 -1
  38. package/dist/button.cjs +1 -1
  39. package/dist/button.js +1 -1
  40. package/dist/{card-B3hN-qzk.js → card-BR22oYCL.js} +1 -1
  41. package/dist/{card-B3hN-qzk.js.map → card-BR22oYCL.js.map} +1 -1
  42. package/dist/{card-DZJ7qjf2.cjs → card-BjZ_WRr3.cjs} +1 -1
  43. package/dist/{card-DZJ7qjf2.cjs.map → card-BjZ_WRr3.cjs.map} +1 -1
  44. package/dist/card.cjs +1 -1
  45. package/dist/card.js +1 -1
  46. package/dist/{checkbox-DapdzDow.cjs → checkbox-2e8v7CNg.cjs} +1 -1
  47. package/dist/{checkbox-DapdzDow.cjs.map → checkbox-2e8v7CNg.cjs.map} +1 -1
  48. package/dist/{checkbox-CvmB1ev9.js → checkbox-CsADwyfu.js} +1 -1
  49. package/dist/{checkbox-CvmB1ev9.js.map → checkbox-CsADwyfu.js.map} +1 -1
  50. package/dist/checkbox.cjs +1 -1
  51. package/dist/checkbox.js +1 -1
  52. package/dist/{chips-C8Y3_3ke.js → chips-C9HwVbGT.js} +2 -2
  53. package/dist/{chips-C8Y3_3ke.js.map → chips-C9HwVbGT.js.map} +1 -1
  54. package/dist/{chips-7g6mWRuh.cjs → chips-DPCcO55o.cjs} +1 -1
  55. package/dist/{chips-7g6mWRuh.cjs.map → chips-DPCcO55o.cjs.map} +1 -1
  56. package/dist/chips.cjs +1 -1
  57. package/dist/chips.js +2 -2
  58. package/dist/connectivity.cjs +1 -1
  59. package/dist/connectivity.js +1 -1
  60. package/dist/content-drawer.cjs +1 -1
  61. package/dist/content-drawer.js +1 -1
  62. package/dist/{date-range-ZfUl4duV.cjs → date-range-63-FC7gD.cjs} +1 -1
  63. package/dist/{date-range-ZfUl4duV.cjs.map → date-range-63-FC7gD.cjs.map} +1 -1
  64. package/dist/{date-range-DdcaPX7C.js → date-range-CFaP-8Os.js} +2 -2
  65. package/dist/{date-range-DdcaPX7C.js.map → date-range-CFaP-8Os.js.map} +1 -1
  66. package/dist/{date-range-inline-QQmIWhZ4.js → date-range-inline-BCuK_XCv.js} +1 -1
  67. package/dist/{date-range-inline-QQmIWhZ4.js.map → date-range-inline-BCuK_XCv.js.map} +1 -1
  68. package/dist/{date-range-inline-D-d7N6bh.cjs → date-range-inline-Cpdqd-8B.cjs} +1 -1
  69. package/dist/{date-range-inline-D-d7N6bh.cjs.map → date-range-inline-Cpdqd-8B.cjs.map} +1 -1
  70. package/dist/date-range-inline.cjs +1 -1
  71. package/dist/date-range-inline.js +1 -1
  72. package/dist/date-range.cjs +1 -1
  73. package/dist/date-range.js +1 -1
  74. package/dist/delay.cjs +1 -1
  75. package/dist/delay.js +1 -1
  76. package/dist/{details-Dpjh-XnJ.js → details-0dOlqHHL.js} +1 -1
  77. package/dist/{details-Dpjh-XnJ.js.map → details-0dOlqHHL.js.map} +1 -1
  78. package/dist/{details-3rL6UQU8.cjs → details-qKikJIyH.cjs} +1 -1
  79. package/dist/{details-3rL6UQU8.cjs.map → details-qKikJIyH.cjs.map} +1 -1
  80. package/dist/details.cjs +1 -1
  81. package/dist/details.js +1 -1
  82. package/dist/{divider-BdfEKQsH.js → divider-BxkIl0H1.js} +1 -1
  83. package/dist/{divider-BdfEKQsH.js.map → divider-BxkIl0H1.js.map} +1 -1
  84. package/dist/{divider-CutXDz3F.cjs → divider-CX9mmWZ8.cjs} +1 -1
  85. package/dist/{divider-CutXDz3F.cjs.map → divider-CX9mmWZ8.cjs.map} +1 -1
  86. package/dist/divider.cjs +1 -1
  87. package/dist/divider.js +1 -1
  88. package/dist/dropdown.cjs +1 -1
  89. package/dist/dropdown.js +1 -1
  90. package/dist/{expand-DM6zfZf7.cjs → expand-891JuQuN.cjs} +1 -1
  91. package/dist/{expand-DM6zfZf7.cjs.map → expand-891JuQuN.cjs.map} +1 -1
  92. package/dist/{expand-DrgMPJbu.js → expand-BeAx94MP.js} +2 -2
  93. package/dist/{expand-DrgMPJbu.js.map → expand-BeAx94MP.js.map} +1 -1
  94. package/dist/expand.cjs +1 -1
  95. package/dist/expand.js +1 -1
  96. package/dist/{float-1iihPek5.js → float-BPF2WO4L.js} +1 -1
  97. package/dist/{float-1iihPek5.js.map → float-BPF2WO4L.js.map} +1 -1
  98. package/dist/{float-Ckyk85XG.cjs → float-D7vvODxx.cjs} +1 -1
  99. package/dist/{float-Ckyk85XG.cjs.map → float-D7vvODxx.cjs.map} +1 -1
  100. package/dist/float.cjs +1 -1
  101. package/dist/float.js +1 -1
  102. package/dist/{form-BF1c3Dk1.js.map → form-CFvwnfuJ.js.map} +1 -1
  103. package/dist/{form-DeO5XX3b.cjs.map → form-Ceijw1aA.cjs.map} +1 -1
  104. package/dist/form.cjs +1 -1
  105. package/dist/form.js +1 -1
  106. package/dist/handover/agent-runtime-followups.md +1 -1
  107. package/dist/handover/agent-runtime-v1.md +3 -3
  108. package/dist/{icons-DUkcTZAY.js → icons-BKxW_7QR.js} +1 -1
  109. package/dist/{icons-DUkcTZAY.js.map → icons-BKxW_7QR.js.map} +1 -1
  110. package/dist/{icons-CV-fiGcW.cjs → icons-QSdo-8h9.cjs} +1 -1
  111. package/dist/{icons-CV-fiGcW.cjs.map → icons-QSdo-8h9.cjs.map} +1 -1
  112. package/dist/icons.cjs +1 -1
  113. package/dist/icons.js +1 -1
  114. package/dist/{iframe-C9tj7F6Y.js → iframe-BxvbhyTS.js} +1 -1
  115. package/dist/{iframe-C9tj7F6Y.js.map → iframe-BxvbhyTS.js.map} +1 -1
  116. package/dist/{iframe-DF97oGtZ.cjs → iframe-CMKV-bm8.cjs} +1 -1
  117. package/dist/{iframe-DF97oGtZ.cjs.map → iframe-CMKV-bm8.cjs.map} +1 -1
  118. package/dist/iframe.cjs +1 -1
  119. package/dist/iframe.js +1 -1
  120. package/dist/index.cjs +1 -1
  121. package/dist/index.js +52 -58
  122. package/dist/{input-TW9G3n7X.cjs → input-BFhJU74_.cjs} +1 -1
  123. package/dist/{input-TW9G3n7X.cjs.map → input-BFhJU74_.cjs.map} +1 -1
  124. package/dist/{input-DE7x223Y.js → input-DIqaR8Mr.js} +1 -1
  125. package/dist/{input-DE7x223Y.js.map → input-DIqaR8Mr.js.map} +1 -1
  126. package/dist/{input-chip-BdoaVw_D.js → input-chip-D9tlSk_2.js} +1 -1
  127. package/dist/{input-chip-BdoaVw_D.js.map → input-chip-D9tlSk_2.js.map} +1 -1
  128. package/dist/{input-chip-Do48eI5r.cjs → input-chip-w09qTt7J.cjs} +1 -1
  129. package/dist/{input-chip-Do48eI5r.cjs.map → input-chip-w09qTt7J.cjs.map} +1 -1
  130. package/dist/input.cjs +1 -1
  131. package/dist/input.js +1 -1
  132. package/dist/json.cjs +1 -1
  133. package/dist/json.js +2 -2
  134. package/dist/kbd.cjs +1 -1
  135. package/dist/kbd.js +1 -1
  136. package/dist/layout.cjs +1 -1
  137. package/dist/layout.js +1 -1
  138. package/dist/{lightbox-sPfnYzjJ.cjs → lightbox-CK035jsx.cjs} +1 -1
  139. package/dist/{lightbox-sPfnYzjJ.cjs.map → lightbox-CK035jsx.cjs.map} +1 -1
  140. package/dist/{lightbox-DcutIyjx.js → lightbox-GChmL3Ff.js} +1 -1
  141. package/dist/{lightbox-DcutIyjx.js.map → lightbox-GChmL3Ff.js.map} +1 -1
  142. package/dist/lightbox.cjs +1 -1
  143. package/dist/lightbox.js +1 -1
  144. package/dist/{list-C4vasUly.cjs → list-B3P37zlH.cjs} +1 -1
  145. package/dist/{list-C4vasUly.cjs.map → list-B3P37zlH.cjs.map} +1 -1
  146. package/dist/{list-BWrtrdgs.js → list-J-Fz24Z1.js} +1 -1
  147. package/dist/{list-BWrtrdgs.js.map → list-J-Fz24Z1.js.map} +1 -1
  148. package/dist/list.cjs +1 -1
  149. package/dist/list.js +1 -1
  150. package/dist/{menu-3yXDZusj.cjs → menu-BnFd8CwU.cjs} +1 -1
  151. package/dist/{menu-3yXDZusj.cjs.map → menu-BnFd8CwU.cjs.map} +1 -1
  152. package/dist/{menu-CxChOxWT.js → menu-DHTlUwXS.js} +2 -2
  153. package/dist/{menu-CxChOxWT.js.map → menu-DHTlUwXS.js.map} +1 -1
  154. package/dist/menu.cjs +1 -1
  155. package/dist/menu.js +1 -1
  156. package/dist/mixins-47_CZk7q.cjs +298 -0
  157. package/dist/{mixins-Db7gjDah.cjs.map → mixins-47_CZk7q.cjs.map} +1 -1
  158. package/dist/mixins-PBJJGiiP.js +627 -0
  159. package/dist/{mixins-Dw6hVfy-.js.map → mixins-PBJJGiiP.js.map} +1 -1
  160. package/dist/mixins.cjs +1 -1
  161. package/dist/mixins.js +1 -1
  162. package/dist/nav-drawer.cjs +1 -1
  163. package/dist/nav-drawer.js +1 -1
  164. package/dist/navigation-bar.cjs +1 -1
  165. package/dist/navigation-bar.js +1 -1
  166. package/dist/navigation-rail.cjs +1 -1
  167. package/dist/navigation-rail.js +1 -1
  168. package/dist/{notification-DKYy9qVe.cjs → notification-B6YBL0hx.cjs} +1 -1
  169. package/dist/{notification-DKYy9qVe.cjs.map → notification-B6YBL0hx.cjs.map} +1 -1
  170. package/dist/{notification-ycbUBbOu.js → notification-C-5Bv3vj.js} +2 -2
  171. package/dist/{notification-ycbUBbOu.js.map → notification-C-5Bv3vj.js.map} +1 -1
  172. package/dist/notification.cjs +1 -1
  173. package/dist/notification.js +1 -1
  174. package/dist/{option-DtOhMd3k.js → option-B7q6VXCu.js} +1 -1
  175. package/dist/{option-DtOhMd3k.js.map → option-B7q6VXCu.js.map} +1 -1
  176. package/dist/{option-zgVge3BH.cjs → option-DVQRa3nr.cjs} +1 -1
  177. package/dist/{option-zgVge3BH.cjs.map → option-DVQRa3nr.cjs.map} +1 -1
  178. package/dist/option.cjs +1 -1
  179. package/dist/option.js +1 -1
  180. package/dist/overlay.cjs +1 -1
  181. package/dist/{overlay.confirm-body-AFqYBqrI.js → overlay.confirm-body-CAY5xK1n.js} +1 -1
  182. package/dist/{overlay.confirm-body-AFqYBqrI.js.map → overlay.confirm-body-CAY5xK1n.js.map} +1 -1
  183. package/dist/{overlay.confirm-body-DctQLDao.cjs → overlay.confirm-body-XZtErofy.cjs} +1 -1
  184. package/dist/{overlay.confirm-body-DctQLDao.cjs.map → overlay.confirm-body-XZtErofy.cjs.map} +1 -1
  185. package/dist/overlay.js +3 -3
  186. package/dist/{overlay.service-B9On2-Aa.js → overlay.service-BZE_lwKO.js} +2 -2
  187. package/dist/{overlay.service-B9On2-Aa.js.map → overlay.service-BZE_lwKO.js.map} +1 -1
  188. package/dist/{overlay.service-k2nCE4pi.cjs → overlay.service-Oyjrw831.cjs} +1 -1
  189. package/dist/{overlay.service-k2nCE4pi.cjs.map → overlay.service-Oyjrw831.cjs.map} +1 -1
  190. package/dist/page.cjs +1 -1
  191. package/dist/page.js +2 -2
  192. package/dist/{progress-BFWzmTlz.js → progress-BHXLYs9i.js} +1 -1
  193. package/dist/{progress-BFWzmTlz.js.map → progress-BHXLYs9i.js.map} +1 -1
  194. package/dist/{progress-C4TGG2eN.cjs → progress-D99bumkC.cjs} +1 -1
  195. package/dist/{progress-C4TGG2eN.cjs.map → progress-D99bumkC.cjs.map} +1 -1
  196. package/dist/progress.cjs +1 -1
  197. package/dist/progress.js +1 -1
  198. package/dist/{radio-group-DTNAW5dd.js → radio-group-BYra5_q1.js} +1 -1
  199. package/dist/{radio-group-DTNAW5dd.js.map → radio-group-BYra5_q1.js.map} +1 -1
  200. package/dist/{radio-group-xLRp1g57.cjs → radio-group-DYsycLmD.cjs} +1 -1
  201. package/dist/{radio-group-xLRp1g57.cjs.map → radio-group-DYsycLmD.cjs.map} +1 -1
  202. package/dist/radio-group.cjs +1 -1
  203. package/dist/radio-group.js +1 -1
  204. package/dist/range.cjs +1 -1
  205. package/dist/range.js +1 -1
  206. package/dist/{rxjs-utils-BK8VMe3K.js.map → rxjs-utils-CVeJQ9KG.js.map} +1 -1
  207. package/dist/{rxjs-utils-DhOKenkS.cjs.map → rxjs-utils-DCUHg_Ml.cjs.map} +1 -1
  208. package/dist/rxjs-utils.cjs +1 -1
  209. package/dist/rxjs-utils.js +1 -1
  210. package/dist/{scroll-BCmdqSQU.js → scroll-TqNWZ0lo.js} +1 -1
  211. package/dist/{scroll-BCmdqSQU.js.map → scroll-TqNWZ0lo.js.map} +1 -1
  212. package/dist/{scroll-Bdgb-vRy.cjs → scroll-cayCBOrq.cjs} +1 -1
  213. package/dist/{scroll-Bdgb-vRy.cjs.map → scroll-cayCBOrq.cjs.map} +1 -1
  214. package/dist/{select-Cv5t_PT3.cjs → select-CRdSmlLq.cjs} +1 -1
  215. package/dist/{select-Cv5t_PT3.cjs.map → select-CRdSmlLq.cjs.map} +1 -1
  216. package/dist/{select-COGARE0b.js → select-nzq0qFlF.js} +2 -2
  217. package/dist/{select-COGARE0b.js.map → select-nzq0qFlF.js.map} +1 -1
  218. package/dist/select.cjs +1 -1
  219. package/dist/select.js +1 -1
  220. package/dist/skeleton.cjs +1 -1
  221. package/dist/skeleton.js +1 -1
  222. package/dist/skills/INDEX.md +9 -3
  223. package/dist/skills/schmancy/INDEX.md +9 -3
  224. package/dist/slider.cjs +1 -1
  225. package/dist/slider.js +1 -1
  226. package/dist/{splash-screen-DbGbGttg.js → splash-screen-BJeIiJ_e.js} +1 -1
  227. package/dist/{splash-screen-DbGbGttg.js.map → splash-screen-BJeIiJ_e.js.map} +1 -1
  228. package/dist/{splash-screen-B8rFbjqT.cjs → splash-screen-BMLQXzDq.cjs} +1 -1
  229. package/dist/{splash-screen-B8rFbjqT.cjs.map → splash-screen-BMLQXzDq.cjs.map} +1 -1
  230. package/dist/splash-screen.cjs +1 -1
  231. package/dist/splash-screen.js +1 -1
  232. package/dist/{src-b8D-Ec-Q.cjs → src-DE11tq2Q.cjs} +1 -1
  233. package/dist/{src-b8D-Ec-Q.cjs.map → src-DE11tq2Q.cjs.map} +1 -1
  234. package/dist/{src-YRir9pOP.js → src-qvWlNoMO.js} +34 -40
  235. package/dist/{src-YRir9pOP.js.map → src-qvWlNoMO.js.map} +1 -1
  236. package/dist/steps.cjs +1 -1
  237. package/dist/steps.js +1 -1
  238. package/dist/{surface-BvudRtf5.cjs → surface-D426MFLR.cjs} +1 -1
  239. package/dist/{surface-BvudRtf5.cjs.map → surface-D426MFLR.cjs.map} +1 -1
  240. package/dist/{surface-BE7sGTBt.js → surface-DG7Cmm9V.js} +1 -1
  241. package/dist/{surface-BE7sGTBt.js.map → surface-DG7Cmm9V.js.map} +1 -1
  242. package/dist/surface.cjs +1 -1
  243. package/dist/surface.js +1 -1
  244. package/dist/switch.cjs +1 -1
  245. package/dist/switch.js +1 -1
  246. package/dist/table.cjs +1 -1
  247. package/dist/table.js +1 -1
  248. package/dist/{tabs-DIzCRsA3.js → tabs-B7siJkM5.js} +1 -1
  249. package/dist/{tabs-DIzCRsA3.js.map → tabs-B7siJkM5.js.map} +1 -1
  250. package/dist/{tabs-C0XKld1Z.cjs → tabs-t3nMfg1F.cjs} +1 -1
  251. package/dist/{tabs-C0XKld1Z.cjs.map → tabs-t3nMfg1F.cjs.map} +1 -1
  252. package/dist/tabs.cjs +1 -1
  253. package/dist/tabs.js +1 -1
  254. package/dist/teleport.cjs +1 -1
  255. package/dist/teleport.js +1 -1
  256. package/dist/{textarea-UbZzBwqm.js → textarea-DSxHCCle.js} +1 -1
  257. package/dist/{textarea-UbZzBwqm.js.map → textarea-DSxHCCle.js.map} +1 -1
  258. package/dist/{textarea-BCDCGCJd.cjs → textarea-o9vysorM.cjs} +1 -1
  259. package/dist/{textarea-BCDCGCJd.cjs.map → textarea-o9vysorM.cjs.map} +1 -1
  260. package/dist/textarea.cjs +1 -1
  261. package/dist/textarea.js +1 -1
  262. package/dist/{theme-CIsI-sFj.cjs → theme-Ce9eIP05.cjs} +1 -1
  263. package/dist/{theme-CIsI-sFj.cjs.map → theme-Ce9eIP05.cjs.map} +1 -1
  264. package/dist/{theme-Qh-yPEPL.js → theme-XO3nHDbW.js} +2 -2
  265. package/dist/{theme-Qh-yPEPL.js.map → theme-XO3nHDbW.js.map} +1 -1
  266. package/dist/{theme-button-CjTnfs9x.js → theme-button-DNutDO1j.js} +1 -1
  267. package/dist/{theme-button-CjTnfs9x.js.map → theme-button-DNutDO1j.js.map} +1 -1
  268. package/dist/{theme-button-Dv1D_Vil.cjs → theme-button-H7PRz_bg.cjs} +1 -1
  269. package/dist/{theme-button-Dv1D_Vil.cjs.map → theme-button-H7PRz_bg.cjs.map} +1 -1
  270. package/dist/theme-button.cjs +1 -1
  271. package/dist/theme-button.js +1 -1
  272. package/dist/theme.cjs +1 -1
  273. package/dist/{theme.interface-v7SkAnDH.js.map → theme.interface-B9TjbSBF.js.map} +1 -1
  274. package/dist/{theme.interface-BeW-sz_g.cjs.map → theme.interface-BujperTo.cjs.map} +1 -1
  275. package/dist/theme.js +3 -3
  276. package/dist/tree.cjs +1 -1
  277. package/dist/tree.js +1 -1
  278. package/dist/typography.cjs +1 -1
  279. package/dist/typography.js +1 -1
  280. package/dist/{utils-CJ9y2Jz9.cjs.map → utils-Dt5PpmaQ.cjs.map} +1 -1
  281. package/dist/{utils-BfOze6Tk.js.map → utils-kND2Z9Xg.js.map} +1 -1
  282. package/dist/utils.cjs +1 -1
  283. package/dist/utils.js +1 -1
  284. package/dist/visually-hidden.cjs +1 -1
  285. package/dist/visually-hidden.js +1 -1
  286. package/dist/{window-9HOUXrTU.cjs → window-BaoSwgGE.cjs} +1 -1
  287. package/dist/{window-9HOUXrTU.cjs.map → window-BaoSwgGE.cjs.map} +1 -1
  288. package/dist/{window-B_55dzk0.js → window-KnLWhQ3S.js} +1 -1
  289. package/dist/{window-B_55dzk0.js.map → window-KnLWhQ3S.js.map} +1 -1
  290. package/dist/window.cjs +1 -1
  291. package/dist/window.js +1 -1
  292. package/package.json +4 -4
  293. package/skills/schmancy/INDEX.md +9 -3
  294. package/src/index.ts +0 -6
  295. package/types/src/index.d.ts +0 -6
  296. package/dist/agent/vendor-jsqr-BUVwyoGC.js +0 -10212
  297. package/dist/agent/vendor-jsqr-BUVwyoGC.js.map +0 -1
  298. package/dist/charts.cjs +0 -112
  299. package/dist/charts.cjs.map +0 -1
  300. package/dist/charts.js +0 -374
  301. package/dist/charts.js.map +0 -1
  302. package/dist/extra-B6gFu4_1.js +0 -3440
  303. package/dist/extra-B6gFu4_1.js.map +0 -1
  304. package/dist/extra-DJRYaOXe.cjs +0 -31
  305. package/dist/extra-DJRYaOXe.cjs.map +0 -1
  306. package/dist/extra.cjs +0 -1
  307. package/dist/extra.js +0 -2
  308. package/dist/map-BAQ9FEB6.cjs +0 -80
  309. package/dist/map-BAQ9FEB6.cjs.map +0 -1
  310. package/dist/map-CEreveeI.js +0 -208
  311. package/dist/map-CEreveeI.js.map +0 -1
  312. package/dist/map.cjs +0 -1
  313. package/dist/map.js +0 -2
  314. package/dist/mixins-Db7gjDah.cjs +0 -298
  315. package/dist/mixins-Dw6hVfy-.js +0 -627
  316. package/dist/payment-card-form-Be1-OVlL.js +0 -729
  317. package/dist/payment-card-form-Be1-OVlL.js.map +0 -1
  318. package/dist/payment-card-form-CNnGePG4.cjs +0 -73
  319. package/dist/payment-card-form-CNnGePG4.cjs.map +0 -1
  320. package/dist/payment-card-form.cjs +0 -1
  321. package/dist/payment-card-form.js +0 -2
  322. package/dist/qr-scanner.cjs +0 -35
  323. package/dist/qr-scanner.cjs.map +0 -1
  324. package/dist/qr-scanner.js +0 -123
  325. package/dist/qr-scanner.js.map +0 -1
  326. package/dist/skills/charts.md +0 -93
  327. package/dist/skills/extra.md +0 -59
  328. package/dist/skills/map.md +0 -55
  329. package/dist/skills/qr-scanner.md +0 -51
  330. package/dist/skills/schmancy/charts.md +0 -93
  331. package/dist/skills/schmancy/extra.md +0 -59
  332. package/dist/skills/schmancy/map.md +0 -55
  333. package/dist/skills/schmancy/qr-scanner.md +0 -51
  334. package/dist/skills/schmancy/timeline-tile.md +0 -95
  335. package/dist/skills/timeline-tile.md +0 -95
  336. package/dist/timeline.cjs +0 -277
  337. package/dist/timeline.cjs.map +0 -1
  338. package/dist/timeline.js +0 -326
  339. package/dist/timeline.js.map +0 -1
  340. package/skills/schmancy/charts.md +0 -93
  341. package/skills/schmancy/extra.md +0 -59
  342. package/skills/schmancy/map.md +0 -55
  343. package/skills/schmancy/qr-scanner.md +0 -51
  344. package/skills/schmancy/timeline-tile.md +0 -95
  345. package/src/charts/area-chart.ts +0 -498
  346. package/src/charts/index.ts +0 -4
  347. package/src/charts/pills.ts +0 -352
  348. package/src/charts/types.ts +0 -66
  349. package/src/charts/utils.ts +0 -65
  350. package/src/extra/countries/countries.data.ts +0 -196
  351. package/src/extra/countries/countries.ts +0 -109
  352. package/src/extra/countries/index.ts +0 -2
  353. package/src/extra/index.ts +0 -2
  354. package/src/extra/timezone/index.ts +0 -2
  355. package/src/extra/timezone/timezone.ts +0 -118
  356. package/src/extra/timezone/timezones.data.ts +0 -2546
  357. package/src/map/index.ts +0 -1
  358. package/src/map/map.ts +0 -485
  359. package/src/payment-card-form/index.ts +0 -1
  360. package/src/payment-card-form/payment-card-form.ts +0 -331
  361. package/src/qr-scanner/index.ts +0 -1
  362. package/src/qr-scanner/qr-scanner.ts +0 -242
  363. package/src/timeline/index.ts +0 -1
  364. package/src/timeline/timeline-tile.ts +0 -431
  365. package/types/src/charts/area-chart.d.ts +0 -58
  366. package/types/src/charts/index.d.ts +0 -4
  367. package/types/src/charts/pills.d.ts +0 -51
  368. package/types/src/charts/types.d.ts +0 -62
  369. package/types/src/charts/utils.d.ts +0 -28
  370. package/types/src/extra/countries/countries.d.ts +0 -26
  371. package/types/src/extra/countries/countries.data.d.ts +0 -5
  372. package/types/src/extra/countries/index.d.ts +0 -2
  373. package/types/src/extra/index.d.ts +0 -2
  374. package/types/src/extra/timezone/index.d.ts +0 -2
  375. package/types/src/extra/timezone/timezone.d.ts +0 -34
  376. package/types/src/extra/timezone/timezones.data.d.ts +0 -7
  377. package/types/src/map/index.d.ts +0 -1
  378. package/types/src/map/map.d.ts +0 -130
  379. package/types/src/payment-card-form/index.d.ts +0 -1
  380. package/types/src/payment-card-form/payment-card-form.d.ts +0 -85
  381. package/types/src/qr-scanner/index.d.ts +0 -1
  382. package/types/src/qr-scanner/qr-scanner.d.ts +0 -26
  383. package/types/src/timeline/index.d.ts +0 -1
  384. package/types/src/timeline/timeline-tile.d.ts +0 -44
  385. /package/dist/agent/{flow-3RrZM-e7.js → flow-CvG1fLW5.js} +0 -0
  386. /package/dist/agent/{vendor-material-color-33Mj762T.js → vendor-material-color-DcL7ZPxx.js} +0 -0
  387. /package/dist/{form-BF1c3Dk1.js → form-CFvwnfuJ.js} +0 -0
  388. /package/dist/{form-DeO5XX3b.cjs → form-Ceijw1aA.cjs} +0 -0
  389. /package/dist/{rxjs-utils-BK8VMe3K.js → rxjs-utils-CVeJQ9KG.js} +0 -0
  390. /package/dist/{rxjs-utils-DhOKenkS.cjs → rxjs-utils-DCUHg_Ml.cjs} +0 -0
  391. /package/dist/{theme.interface-v7SkAnDH.js → theme.interface-B9TjbSBF.js} +0 -0
  392. /package/dist/{theme.interface-BeW-sz_g.cjs → theme.interface-BujperTo.cjs} +0 -0
  393. /package/dist/{utils-CJ9y2Jz9.cjs → utils-Dt5PpmaQ.cjs} +0 -0
  394. /package/dist/{utils-BfOze6Tk.js → utils-kND2Z9Xg.js} +0 -0
package/dist/timeline.js DELETED
@@ -1,326 +0,0 @@
1
- import { s as e } from "./mixins-Dw6hVfy-.js";
2
- import { t } from "./decorate-23nYs4Le.js";
3
- import { EMPTY as n, Observable as r, distinctUntilChanged as i, fromEvent as a, map as o, of as s, switchMap as c, takeUntil as l, timer as u } from "rxjs";
4
- import { customElement as d, property as f } from "lit/decorators.js";
5
- import { css as p, html as m } from "lit";
6
- import { when as h } from "lit/directives/when.js";
7
- var g = class extends e {
8
- constructor(...e) {
9
- super(...e), this.state = "empty", this.glyph = "", this._onClick = () => {
10
- this.state !== "empty" && this.dispatchEvent(new CustomEvent("tile-click", {
11
- detail: {
12
- glyph: this.glyph,
13
- state: this.state
14
- },
15
- bubbles: !0,
16
- composed: !0
17
- }));
18
- };
19
- }
20
- static {
21
- this.styles = [p`
22
- :host {
23
- --schmancy-tile-w: 32px;
24
- --schmancy-tile-h: 40px;
25
- display: inline-block;
26
- position: relative;
27
- width: var(--schmancy-tile-w);
28
- height: var(--schmancy-tile-h);
29
- font-size: 14px;
30
- line-height: 1.45;
31
- }
32
-
33
- /* Inner box that paints the cell. The host is a layout container only;
34
- the box owns the border / background / hover transform so the host
35
- stays a clean focus target. */
36
- .tile {
37
- position: absolute;
38
- inset: 0;
39
- border-radius: 2px;
40
- overflow: visible;
41
- appearance: none;
42
- padding: 0;
43
- font: inherit;
44
- color: inherit;
45
- background: transparent;
46
- z-index: 1;
47
- transition:
48
- transform 120ms ease-in-out,
49
- box-shadow 120ms ease-in-out,
50
- border-color 120ms ease-in-out;
51
- }
52
-
53
- /* Empty state */
54
- :host([state='empty']) .tile {
55
- border: 1px dashed var(--schmancy-sys-color-outline);
56
- background: transparent;
57
- cursor: default;
58
- }
59
-
60
- :host([state='empty']) .glyph {
61
- color: var(--schmancy-sys-color-surface-onVariant);
62
- opacity: 0.7;
63
- }
64
-
65
- /* Shared filled-state card styling (filled / stack-top / stack-sibling) */
66
- :host([state='filled']) .tile,
67
- :host([state='stack-top']) .tile,
68
- :host([state='stack-sibling']) .tile {
69
- border: 1px solid var(--schmancy-sys-color-outline);
70
- background: var(--schmancy-sys-color-surface-containerLowest);
71
- cursor: pointer;
72
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.02);
73
- }
74
-
75
- /* Paper-card line texture: five thin lines emulating ruled paper */
76
- :host([state='filled']) .tile::before,
77
- :host([state='stack-top']) .tile::before,
78
- :host([state='stack-sibling']) .tile::before {
79
- content: '';
80
- position: absolute;
81
- left: 4px;
82
- right: 4px;
83
- top: 16px;
84
- bottom: 5px;
85
- background-image:
86
- linear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),
87
- linear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),
88
- linear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),
89
- linear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),
90
- linear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px);
91
- background-repeat: no-repeat;
92
- background-size:
93
- 100% 1px,
94
- 80% 1px,
95
- 92% 1px,
96
- 65% 1px,
97
- 78% 1px;
98
- background-position:
99
- 0 0,
100
- 0 4px,
101
- 0 8px,
102
- 0 12px,
103
- 0 16px;
104
- opacity: 0.3;
105
- pointer-events: none;
106
- z-index: 0;
107
- }
108
-
109
- /* Tinted accent strip across the top edge */
110
- :host([state='filled']) .tile::after,
111
- :host([state='stack-top']) .tile::after,
112
- :host([state='stack-sibling']) .tile::after {
113
- content: '';
114
- position: absolute;
115
- left: 0;
116
- right: 0;
117
- top: 0;
118
- height: 11px;
119
- background: color-mix(
120
- in oklch,
121
- var(--schmancy-sys-color-primary-default) 10%,
122
- transparent
123
- );
124
- border-bottom: 1px solid
125
- color-mix(
126
- in oklch,
127
- var(--schmancy-sys-color-primary-default) 25%,
128
- var(--schmancy-sys-color-outline)
129
- );
130
- pointer-events: none;
131
- }
132
-
133
- :host([state='filled']) .glyph,
134
- :host([state='stack-top']) .glyph,
135
- :host([state='stack-sibling']) .glyph {
136
- color: var(--schmancy-sys-color-primary-onContainer);
137
- }
138
-
139
- /* Single-card hover: lift 1px + soft shadow */
140
- :host([state='filled']) .tile:hover {
141
- border-color: var(--schmancy-sys-color-primary-default);
142
- transform: translateY(-1px);
143
- box-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);
144
- }
145
-
146
- /* Focus ring in primary color */
147
- :host([state='filled']) .tile:focus-visible,
148
- :host([state='stack-top']) .tile:focus-visible,
149
- :host([state='stack-sibling']) .tile:focus-visible {
150
- outline: 2px solid var(--schmancy-sys-color-primary-default);
151
- outline-offset: 3px;
152
- }
153
-
154
- /* Stacked tiles position absolutely on the host's grid cell so the
155
- wrapper's --fan-count / --i custom properties drive the offset. */
156
- :host([state='stack-top']),
157
- :host([state='stack-sibling']) {
158
- position: absolute;
159
- top: 0;
160
- left: 0;
161
- transition:
162
- transform 200ms cubic-bezier(0.2, 0.8, 0.2, 1),
163
- box-shadow 200ms cubic-bezier(0.2, 0.8, 0.2, 1);
164
- transform: translate(
165
- calc((var(--fan-count, 1) - 1 - var(--i, 0)) * -3px),
166
- calc((var(--fan-count, 1) - 1 - var(--i, 0)) * 3px)
167
- );
168
- }
169
-
170
- /* Sibling tiles only become interactive once the wrapper is fanned —
171
- otherwise they're stacked underneath and would steal pointer events
172
- from the top card. */
173
- :host([state='stack-sibling']) {
174
- pointer-events: none;
175
- }
176
-
177
- /* Fanned: every tile slides edge-to-edge along the wrapper's row */
178
- :host([state='stack-top']:host-context([data-fanned])),
179
- :host-context([data-fanned]):host([state='stack-top']) {
180
- transform: translate(
181
- calc((var(--fan-count, 1) - 1 - var(--i, 0)) * var(--schmancy-tile-w) * -1),
182
- 0
183
- );
184
- box-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);
185
- }
186
-
187
- :host([state='stack-sibling']:host-context([data-fanned])),
188
- :host-context([data-fanned]):host([state='stack-sibling']) {
189
- pointer-events: auto;
190
- transform: translate(
191
- calc((var(--fan-count, 1) - 1 - var(--i, 0)) * var(--schmancy-tile-w) * -1),
192
- 0
193
- );
194
- box-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);
195
- }
196
-
197
- :host-context([data-fanned]):host([state='stack-top']) .tile:hover,
198
- :host-context([data-fanned]):host([state='stack-sibling']) .tile:hover {
199
- border-color: var(--schmancy-sys-color-primary-default);
200
- box-shadow: 0 6px 14px rgba(0, 0, 0, 0.1);
201
- }
202
-
203
- .glyph {
204
- position: absolute;
205
- top: 0;
206
- left: 0;
207
- right: 0;
208
- height: 11px;
209
- display: flex;
210
- align-items: center;
211
- justify-content: center;
212
- font-size: 7.5px;
213
- font-weight: 500;
214
- letter-spacing: 0.12em;
215
- line-height: 1;
216
- z-index: 1;
217
- font-variant-caps: all-petite-caps;
218
- }
219
-
220
- .tooltip {
221
- position: absolute;
222
- bottom: calc(100% + 6px);
223
- left: 50%;
224
- transform: translate(-50%, 2px);
225
- font-size: 10px;
226
- line-height: 1.2;
227
- color: var(--schmancy-sys-color-surface-on);
228
- background: var(--schmancy-sys-color-surface-containerLowest);
229
- border: 1px solid var(--schmancy-sys-color-outline);
230
- padding: 2px 6px;
231
- border-radius: 3px;
232
- white-space: nowrap;
233
- opacity: 0;
234
- pointer-events: none;
235
- transition:
236
- opacity 150ms ease-in-out,
237
- transform 150ms ease-in-out;
238
- z-index: 2;
239
- }
240
-
241
- .tile:hover .tooltip,
242
- .tile:focus-visible .tooltip {
243
- opacity: 1;
244
- transform: translate(-50%, 0);
245
- }
246
-
247
- .caption {
248
- position: absolute;
249
- top: calc(100% + 6px);
250
- left: 50%;
251
- transform: translateX(-50%);
252
- font-size: 11px;
253
- line-height: 1.2;
254
- font-weight: 500;
255
- white-space: nowrap;
256
- color: var(--schmancy-sys-color-surface-on);
257
- font-variant-numeric: tabular-nums;
258
- }
259
-
260
- .stack-count {
261
- position: absolute;
262
- top: -5px;
263
- right: -7px;
264
- min-width: 14px;
265
- height: 14px;
266
- padding: 0 4px;
267
- border-radius: 7px;
268
- background: var(--schmancy-sys-color-primary-default);
269
- color: var(--schmancy-sys-color-primary-on);
270
- font-size: 9px;
271
- font-weight: 500;
272
- line-height: 14px;
273
- text-align: center;
274
- z-index: 10;
275
- pointer-events: none;
276
- transition: opacity 150ms ease-in-out;
277
- }
278
-
279
- :host-context([data-fanned]) .stack-count {
280
- opacity: 0;
281
- }
282
- `];
283
- }
284
- connectedCallback() {
285
- if (super.connectedCallback(), this.index !== void 0 && this.style.setProperty("--i", String(this.index)), this.state !== "stack-top") return;
286
- let e = this.parentElement;
287
- e && a(e, "pointerover").pipe(o((e) => e.target?.closest("[data-stack-id]") ?? null), i(), c((t) => t === e ? s(e) : u(800).pipe(o(() => null))), i(), c((e) => e ? new r(() => (e.setAttribute("data-fanned", ""), () => e.removeAttribute("data-fanned"))) : n), l(this.disconnecting)).subscribe();
288
- }
289
- updated(e) {
290
- super.updated(e), e.has("index") && this.index !== void 0 && this.style.setProperty("--i", String(this.index));
291
- }
292
- _ariaLabel() {
293
- let e = [this.glyph];
294
- return this.caption && e.push(this.caption), this.tooltip && e.push(this.tooltip), this.state === "empty" && e.push("empty"), e.join(" · ");
295
- }
296
- render() {
297
- let e = this.state !== "empty", t = this._ariaLabel();
298
- return m`
299
- <button
300
- type="button"
301
- class="tile"
302
- role=${e ? "button" : "presentation"}
303
- tabindex=${e ? 0 : -1}
304
- aria-label=${t}
305
- ?disabled=${!e}
306
- @click=${this._onClick}
307
- >
308
- <span class="glyph">${this.glyph}</span>
309
- ${h(this.tooltip && e, () => m`<span class="tooltip">${this.tooltip}</span>`)}
310
- ${h(this.caption && this.state !== "stack-sibling", () => m`<span class="caption">${this.caption}</span>`)}
311
- ${h(this.state === "stack-top" && this.stackCount !== void 0 && this.stackCount > 1, () => m`<span class="stack-count">×${this.stackCount}</span>`)}
312
- </button>
313
- `;
314
- }
315
- };
316
- t([f({
317
- type: String,
318
- reflect: !0
319
- })], g.prototype, "state", void 0), t([f({ type: String })], g.prototype, "glyph", void 0), t([f({
320
- type: Number,
321
- attribute: "stack-count"
322
- })], g.prototype, "stackCount", void 0), t([f({
323
- type: Number,
324
- reflect: !0
325
- })], g.prototype, "index", void 0), t([f({ type: String })], g.prototype, "tooltip", void 0), t([f({ type: String })], g.prototype, "caption", void 0), g = t([d("schmancy-timeline-tile")], g);
326
- export { g as SchmancyTimelineTile };
@@ -1 +0,0 @@
1
- {"version":3,"file":"timeline.js","names":[],"sources":["../src/timeline/timeline-tile.ts"],"sourcesContent":["/**\n * Timeline tile — one cell in a procurement-stage rail.\n *\n * Three render states (one component, four `state` values):\n * - `empty` dashed-border outline + glyph\n * - `filled` paper-card with glyph; hoverable / focusable / clickable\n * - `stack-top` paper-card on top of N siblings; carries the ×N badge\n * - `stack-sibling` paper-card behind the top; revealed when the wrapper\n * is fanned\n *\n * Stack fan is coordinated by a `data-fanned` attribute on the parent\n * wrapper element. The `stack-top` tile owns the orchestration: a\n * `pointerover` pipe on the wrapper element with hover-intent (immediate\n * enter, 800ms leave debounce) toggles the attribute. Sibling tiles read\n * the attribute via the `:host-context([data-fanned])` selector. Native\n * `:hover` would drop the moment the cursor crosses the gap between\n * fanned siblings; the attribute survives that crossing because the\n * pointerover stream stays on the wrapper subtree.\n */\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n\tEMPTY,\n\tObservable,\n\tdistinctUntilChanged,\n\tfromEvent,\n\tmap,\n\tof,\n\tswitchMap,\n\ttakeUntil,\n\ttimer,\n} from 'rxjs'\n\nexport type TimelineTileState = 'empty' | 'filled' | 'stack-top' | 'stack-sibling'\n\nexport type TimelineTileClickEvent = CustomEvent<{\n\tglyph: string\n\tstate: TimelineTileState\n}>\n\n@customElement('schmancy-timeline-tile')\nexport class SchmancyTimelineTile extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\t--schmancy-tile-w: 32px;\n\t\t--schmancy-tile-h: 40px;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\twidth: var(--schmancy-tile-w);\n\t\theight: var(--schmancy-tile-h);\n\t\tfont-size: 14px;\n\t\tline-height: 1.45;\n\t}\n\n\t/* Inner box that paints the cell. The host is a layout container only;\n\t the box owns the border / background / hover transform so the host\n\t stays a clean focus target. */\n\t.tile {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tborder-radius: 2px;\n\t\toverflow: visible;\n\t\tappearance: none;\n\t\tpadding: 0;\n\t\tfont: inherit;\n\t\tcolor: inherit;\n\t\tbackground: transparent;\n\t\tz-index: 1;\n\t\ttransition:\n\t\t\ttransform 120ms ease-in-out,\n\t\t\tbox-shadow 120ms ease-in-out,\n\t\t\tborder-color 120ms ease-in-out;\n\t}\n\n\t/* Empty state */\n\t:host([state='empty']) .tile {\n\t\tborder: 1px dashed var(--schmancy-sys-color-outline);\n\t\tbackground: transparent;\n\t\tcursor: default;\n\t}\n\n\t:host([state='empty']) .glyph {\n\t\tcolor: var(--schmancy-sys-color-surface-onVariant);\n\t\topacity: 0.7;\n\t}\n\n\t/* Shared filled-state card styling (filled / stack-top / stack-sibling) */\n\t:host([state='filled']) .tile,\n\t:host([state='stack-top']) .tile,\n\t:host([state='stack-sibling']) .tile {\n\t\tborder: 1px solid var(--schmancy-sys-color-outline);\n\t\tbackground: var(--schmancy-sys-color-surface-containerLowest);\n\t\tcursor: pointer;\n\t\tbox-shadow: 0 1px 0 rgba(0, 0, 0, 0.02);\n\t}\n\n\t/* Paper-card line texture: five thin lines emulating ruled paper */\n\t:host([state='filled']) .tile::before,\n\t:host([state='stack-top']) .tile::before,\n\t:host([state='stack-sibling']) .tile::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 4px;\n\t\tright: 4px;\n\t\ttop: 16px;\n\t\tbottom: 5px;\n\t\tbackground-image:\n\t\t\tlinear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),\n\t\t\tlinear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),\n\t\t\tlinear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),\n\t\t\tlinear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),\n\t\t\tlinear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size:\n\t\t\t100% 1px,\n\t\t\t80% 1px,\n\t\t\t92% 1px,\n\t\t\t65% 1px,\n\t\t\t78% 1px;\n\t\tbackground-position:\n\t\t\t0 0,\n\t\t\t0 4px,\n\t\t\t0 8px,\n\t\t\t0 12px,\n\t\t\t0 16px;\n\t\topacity: 0.3;\n\t\tpointer-events: none;\n\t\tz-index: 0;\n\t}\n\n\t/* Tinted accent strip across the top edge */\n\t:host([state='filled']) .tile::after,\n\t:host([state='stack-top']) .tile::after,\n\t:host([state='stack-sibling']) .tile::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 0;\n\t\theight: 11px;\n\t\tbackground: color-mix(\n\t\t\tin oklch,\n\t\t\tvar(--schmancy-sys-color-primary-default) 10%,\n\t\t\ttransparent\n\t\t);\n\t\tborder-bottom: 1px solid\n\t\t\tcolor-mix(\n\t\t\t\tin oklch,\n\t\t\t\tvar(--schmancy-sys-color-primary-default) 25%,\n\t\t\t\tvar(--schmancy-sys-color-outline)\n\t\t\t);\n\t\tpointer-events: none;\n\t}\n\n\t:host([state='filled']) .glyph,\n\t:host([state='stack-top']) .glyph,\n\t:host([state='stack-sibling']) .glyph {\n\t\tcolor: var(--schmancy-sys-color-primary-onContainer);\n\t}\n\n\t/* Single-card hover: lift 1px + soft shadow */\n\t:host([state='filled']) .tile:hover {\n\t\tborder-color: var(--schmancy-sys-color-primary-default);\n\t\ttransform: translateY(-1px);\n\t\tbox-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);\n\t}\n\n\t/* Focus ring in primary color */\n\t:host([state='filled']) .tile:focus-visible,\n\t:host([state='stack-top']) .tile:focus-visible,\n\t:host([state='stack-sibling']) .tile:focus-visible {\n\t\toutline: 2px solid var(--schmancy-sys-color-primary-default);\n\t\toutline-offset: 3px;\n\t}\n\n\t/* Stacked tiles position absolutely on the host's grid cell so the\n\t wrapper's --fan-count / --i custom properties drive the offset. */\n\t:host([state='stack-top']),\n\t:host([state='stack-sibling']) {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\ttransition:\n\t\t\ttransform 200ms cubic-bezier(0.2, 0.8, 0.2, 1),\n\t\t\tbox-shadow 200ms cubic-bezier(0.2, 0.8, 0.2, 1);\n\t\ttransform: translate(\n\t\t\tcalc((var(--fan-count, 1) - 1 - var(--i, 0)) * -3px),\n\t\t\tcalc((var(--fan-count, 1) - 1 - var(--i, 0)) * 3px)\n\t\t);\n\t}\n\n\t/* Sibling tiles only become interactive once the wrapper is fanned —\n\t otherwise they're stacked underneath and would steal pointer events\n\t from the top card. */\n\t:host([state='stack-sibling']) {\n\t\tpointer-events: none;\n\t}\n\n\t/* Fanned: every tile slides edge-to-edge along the wrapper's row */\n\t:host([state='stack-top']:host-context([data-fanned])),\n\t:host-context([data-fanned]):host([state='stack-top']) {\n\t\ttransform: translate(\n\t\t\tcalc((var(--fan-count, 1) - 1 - var(--i, 0)) * var(--schmancy-tile-w) * -1),\n\t\t\t0\n\t\t);\n\t\tbox-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);\n\t}\n\n\t:host([state='stack-sibling']:host-context([data-fanned])),\n\t:host-context([data-fanned]):host([state='stack-sibling']) {\n\t\tpointer-events: auto;\n\t\ttransform: translate(\n\t\t\tcalc((var(--fan-count, 1) - 1 - var(--i, 0)) * var(--schmancy-tile-w) * -1),\n\t\t\t0\n\t\t);\n\t\tbox-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);\n\t}\n\n\t:host-context([data-fanned]):host([state='stack-top']) .tile:hover,\n\t:host-context([data-fanned]):host([state='stack-sibling']) .tile:hover {\n\t\tborder-color: var(--schmancy-sys-color-primary-default);\n\t\tbox-shadow: 0 6px 14px rgba(0, 0, 0, 0.1);\n\t}\n\n\t.glyph {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 11px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tfont-size: 7.5px;\n\t\tfont-weight: 500;\n\t\tletter-spacing: 0.12em;\n\t\tline-height: 1;\n\t\tz-index: 1;\n\t\tfont-variant-caps: all-petite-caps;\n\t}\n\n\t.tooltip {\n\t\tposition: absolute;\n\t\tbottom: calc(100% + 6px);\n\t\tleft: 50%;\n\t\ttransform: translate(-50%, 2px);\n\t\tfont-size: 10px;\n\t\tline-height: 1.2;\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t\tbackground: var(--schmancy-sys-color-surface-containerLowest);\n\t\tborder: 1px solid var(--schmancy-sys-color-outline);\n\t\tpadding: 2px 6px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t\topacity: 0;\n\t\tpointer-events: none;\n\t\ttransition:\n\t\t\topacity 150ms ease-in-out,\n\t\t\ttransform 150ms ease-in-out;\n\t\tz-index: 2;\n\t}\n\n\t.tile:hover .tooltip,\n\t.tile:focus-visible .tooltip {\n\t\topacity: 1;\n\t\ttransform: translate(-50%, 0);\n\t}\n\n\t.caption {\n\t\tposition: absolute;\n\t\ttop: calc(100% + 6px);\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\tfont-size: 11px;\n\t\tline-height: 1.2;\n\t\tfont-weight: 500;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t\tfont-variant-numeric: tabular-nums;\n\t}\n\n\t.stack-count {\n\t\tposition: absolute;\n\t\ttop: -5px;\n\t\tright: -7px;\n\t\tmin-width: 14px;\n\t\theight: 14px;\n\t\tpadding: 0 4px;\n\t\tborder-radius: 7px;\n\t\tbackground: var(--schmancy-sys-color-primary-default);\n\t\tcolor: var(--schmancy-sys-color-primary-on);\n\t\tfont-size: 9px;\n\t\tfont-weight: 500;\n\t\tline-height: 14px;\n\t\ttext-align: center;\n\t\tz-index: 10;\n\t\tpointer-events: none;\n\t\ttransition: opacity 150ms ease-in-out;\n\t}\n\n\t:host-context([data-fanned]) .stack-count {\n\t\topacity: 0;\n\t}\n`]\n\n\t@property({ type: String, reflect: true }) state: TimelineTileState = 'empty'\n\n\t@property({ type: String }) glyph = ''\n\n\t@property({ type: Number, attribute: 'stack-count' }) stackCount?: number\n\n\t@property({ type: Number, reflect: true }) index?: number\n\n\t@property({ type: String }) tooltip?: string\n\n\t@property({ type: String }) caption?: string\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Mirror `index` onto the host's `--i` custom property so the\n\t\t// fan-offset transforms don't depend on the consumer setting both\n\t\t// the prop and an inline style.\n\t\tif (this.index !== undefined) {\n\t\t\tthis.style.setProperty('--i', String(this.index))\n\t\t}\n\n\t\t// Stack-top owns the fan orchestration. The pointerover stream lives\n\t\t// on the parent wrapper (the element holding all sibling tiles); a\n\t\t// hover-intent pipe drives the `data-fanned` attribute on that\n\t\t// wrapper. Enter is immediate (`of(wrapper)`); leave waits 800ms\n\t\t// (`timer(800)`) so the cursor can cross the gap between fanned\n\t\t// cards without collapsing the stack. The inner Observable's\n\t\t// subscription lifetime IS the fanned state — subscribe sets the\n\t\t// attribute, teardown removes it.\n\t\tif (this.state !== 'stack-top') return\n\t\tconst wrapper = this.parentElement\n\t\tif (!wrapper) return\n\n\t\tfromEvent<PointerEvent>(wrapper, 'pointerover')\n\t\t\t.pipe(\n\t\t\t\tmap(\n\t\t\t\t\t(e) =>\n\t\t\t\t\t\t(e.target as HTMLElement | null)?.closest<HTMLElement>(\n\t\t\t\t\t\t\t'[data-stack-id]',\n\t\t\t\t\t\t) ?? null,\n\t\t\t\t),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\tswitchMap((target) =>\n\t\t\t\t\ttarget === wrapper ? of(wrapper) : timer(800).pipe(map(() => null)),\n\t\t\t\t),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\tswitchMap((target) =>\n\t\t\t\t\ttarget\n\t\t\t\t\t\t? new Observable<never>(() => {\n\t\t\t\t\t\t\t\ttarget.setAttribute('data-fanned', '')\n\t\t\t\t\t\t\t\treturn () => target.removeAttribute('data-fanned')\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: EMPTY,\n\t\t\t\t),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tprotected override updated(changed: Map<string, unknown>): void {\n\t\tsuper.updated(changed)\n\t\tif (changed.has('index') && this.index !== undefined) {\n\t\t\tthis.style.setProperty('--i', String(this.index))\n\t\t}\n\t}\n\n\tprivate _onClick = (): void => {\n\t\tif (this.state === 'empty') return\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<TimelineTileClickEvent['detail']>('tile-click', {\n\t\t\t\tdetail: { glyph: this.glyph, state: this.state },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate _ariaLabel(): string {\n\t\tconst parts = [this.glyph]\n\t\tif (this.caption) parts.push(this.caption)\n\t\tif (this.tooltip) parts.push(this.tooltip)\n\t\tif (this.state === 'empty') parts.push('empty')\n\t\treturn parts.join(' · ')\n\t}\n\n\tprotected override render(): unknown {\n\t\tconst isInteractive = this.state !== 'empty'\n\t\tconst ariaLabel = this._ariaLabel()\n\t\treturn html`\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"tile\"\n\t\t\t\trole=${isInteractive ? 'button' : 'presentation'}\n\t\t\t\ttabindex=${isInteractive ? 0 : -1}\n\t\t\t\taria-label=${ariaLabel}\n\t\t\t\t?disabled=${!isInteractive}\n\t\t\t\t@click=${this._onClick}\n\t\t\t>\n\t\t\t\t<span class=\"glyph\">${this.glyph}</span>\n\t\t\t\t${when(\n\t\t\t\t\tthis.tooltip && isInteractive,\n\t\t\t\t\t() => html`<span class=\"tooltip\">${this.tooltip}</span>`,\n\t\t\t\t)}\n\t\t\t\t${when(\n\t\t\t\t\tthis.caption && this.state !== 'stack-sibling',\n\t\t\t\t\t() => html`<span class=\"caption\">${this.caption}</span>`,\n\t\t\t\t)}\n\t\t\t\t${when(\n\t\t\t\t\tthis.state === 'stack-top' &&\n\t\t\t\t\t\tthis.stackCount !== undefined &&\n\t\t\t\t\t\tthis.stackCount > 1,\n\t\t\t\t\t() => html`<span class=\"stack-count\">×${this.stackCount}</span>`,\n\t\t\t\t)}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-timeline-tile': SchmancyTimelineTile\n\t}\n}\n"],"mappings":";;;;;;AA2CO,IAAA,IAAA,cAAmC,EAAA;CAAA,YAAA,GAAA,GAAA;AAAA,QAAA,GAAA,EAAA,EAAA,KAAA,QAwQ6B,SAAA,KAAA,QAElC,IAAA,KAAA,iBAAA;AAkEhB,GAAf,KAAK,UAAU,WACnB,KAAK,cACJ,IAAI,YAA8C,cAAc;IAC/D,QAAQ;KAAE,OAAO,KAAK;KAAO,OAAO,KAAK;KAAA;IACzC,SAAA,CAAS;IACT,UAAA,CAAU;IAAA,CAAA,CAAA;;;CAAA;AAAA,OAAA,SAhVG,CAAC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmRpB,oBAAA;AAkBC,MAjBA,MAAM,mBAAA,EAKF,KAAK,UALH,KAKa,KAClB,KAAK,MAAM,YAAY,OAAO,OAAO,KAAK,MAAA,CAAA,EAWvC,KAAK,UAAU,YAAa;EAChC,IAAM,IAAU,KAAK;AAChB,OAEL,EAAwB,GAAS,cAAA,CAC/B,KACA,GACE,MACC,EAAE,QAA+B,QACjC,kBAAA,IACI,KAAA,EAEP,GAAA,EACA,GAAW,MACV,MAAW,IAAU,EAAG,EAAA,GAAW,EAAM,IAAA,CAAK,KAAK,QAAU,KAAA,CAAA,CAAA,EAE9D,GAAA,EACA,GAAW,MACV,IACG,IAAI,SACJ,EAAO,aAAa,eAAe,GAAA,QACtB,EAAO,gBAAgB,cAAA,EAAA,GAEpC,EAAA,EAEJ,EAAU,KAAK,cAAA,CAAA,CAEf,WAAA;;CAGH,QAA2B,GAAA;AAC1B,QAAM,QAAQ,EAAA,EACV,EAAQ,IAAI,QAAA,IAAY,KAAK,UAAjB,KAA2B,KAC1C,KAAK,MAAM,YAAY,OAAO,OAAO,KAAK,MAAA,CAAA;;CAe5C,aAAA;EACC,IAAM,IAAQ,CAAC,KAAK,MAAA;AAIpB,SAHI,KAAK,WAAS,EAAM,KAAK,KAAK,QAAA,EAC9B,KAAK,WAAS,EAAM,KAAK,KAAK,QAAA,EAC9B,KAAK,UAAU,WAAS,EAAM,KAAK,QAAA,EAChC,EAAM,KAAK,MAAA;;CAGnB,SAAA;EACC,IAAM,IAAgB,KAAK,UAAU,SAC/B,IAAY,KAAK,YAAA;AACvB,SAAO,CAAI;;;;WAIF,IAAgB,WAAW,eAAA;eACvB,IAAgB,IAAA,GAAI;iBAClB,EAAA;iBACA,EAAA;aACJ,KAAK,SAAA;;0BAEQ,KAAK,MAAA;MACzB,EACD,KAAK,WAAW,SACV,CAAI,yBAAyB,KAAK,QAAA,SAAA,CAAA;MAEvC,EACD,KAAK,WAAW,KAAK,UAAU,uBACzB,CAAI,yBAAyB,KAAK,QAAA,SAAA,CAAA;MAEvC,EACD,KAAK,UAAU,eACd,KAAK,eADD,KACgB,KACpB,KAAK,aAAa,SACb,CAAI,8BAA8B,KAAK,WAAA,SAAA,CAAA;;;;;GAhHhD,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAEzC,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAE1B,EAAS;CAAE,MAAM;CAAQ,WAAW;CAAA,CAAA,CAAA,EAAgB,EAAA,WAAA,cAAA,KAAA,EAAA,EAAA,EAAA,CAEpD,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAEzC,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CAE1B,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CAnR3B,EAAc,yBAAA,CAAA,EAAyB,EAAA;AAAA,SAAA,KAAA"}
@@ -1,93 +0,0 @@
1
- # Schmancy Charts
2
-
3
- > Canvas-rendered area chart and horizontal pill chart. Theme-aware, lazy-animated, with auto peak highlighting.
4
-
5
- ## schmancy-area-chart
6
-
7
- > Smooth Catmull-Rom spline area chart with peak markers and hover tooltips.
8
-
9
- ```html
10
- <schmancy-area-chart
11
- .data=${[
12
- { label: '9 AM', value: 12.4 },
13
- { label: '10 AM', value: 18.9 },
14
- { label: '11 AM', value: 42.1, metadata: { users: 320 } },
15
- { label: '12 PM', value: 56.7 },
16
- ]}
17
- value-prefix="EUR "
18
- value-decimals="2"
19
- peak-count="2"
20
- height="240"
21
- ></schmancy-area-chart>
22
- ```
23
-
24
- ### Properties
25
- | Property | Type | Default | Description |
26
- |----------|------|---------|-------------|
27
- | `data` | `ChartDataPoint[]` | `[]` | `{ label, value, metadata? }[]` |
28
- | `height` | number | `200` | Chart height in px |
29
- | `showGrid` | boolean | `true` | Background grid lines |
30
- | `showLabels` | boolean | `true` | X-axis labels |
31
- | `showTooltip` | boolean | `true` | Hover tooltip |
32
- | `peakCount` | number | `3` | Top-N points highlighted larger |
33
- | `animationDuration` | number | `800` | Entrance animation ms |
34
- | `animated` | boolean | `true` | Animate on first visible |
35
- | `valuePrefix` | string | `''` | Display prefix (e.g. `"EUR "`) |
36
- | `valueSuffix` | string | `''` | Display suffix (e.g. `"%"`) |
37
- | `valueDecimals` | number | `2` | Decimal places |
38
- | `theme` | `Partial<ChartTheme>` | `{}` | Override colors, stroke, radii |
39
-
40
- ### ChartTheme
41
- | Key | Default | Description |
42
- |-----|---------|-------------|
43
- | `primaryColor` | `--schmancy-sys-color-primary` | Line + fill gradient color |
44
- | `gradientOpacity` | `[0.4, 0.05]` | Top/bottom fill opacity |
45
- | `strokeWidth` | `2` | Line thickness |
46
- | `pointRadius` | `4` | Normal point radius |
47
- | `peakRadius` | `6` | Peak point radius |
48
-
49
- ## schmancy-pills
50
-
51
- > Horizontal bar chart with optional stacked segments, medal ranks, and peak/low styling.
52
-
53
- ```html
54
- <schmancy-pills
55
- .data=${[
56
- { label: 'Mon', value: 1240, rank: 1 },
57
- { label: 'Tue', value: 980 },
58
- { label: 'Wed', value: 1830, rank: 2, segments: [
59
- { label: 'Pizza', value: 1200 },
60
- { label: 'Drinks', value: 630 }
61
- ]},
62
- ]}
63
- ></schmancy-pills>
64
- ```
65
-
66
- ### Properties
67
- | Property | Type | Default | Description |
68
- |----------|------|---------|-------------|
69
- | `data` | `PillDataPoint[]` | `[]` | Rows with optional stacked `segments` |
70
- | `valuePrefix` / `valueSuffix` / `valueDecimals` | — | — | Value formatting (same as area chart) |
71
- | `showMedals` | boolean | `true` | Show 🥇🥈🥉 for rank 1/2/3 |
72
-
73
- ### PillDataPoint
74
- ```typescript
75
- {
76
- label: string
77
- value: number
78
- segments?: { label, value, color }[] // stacked
79
- isPeak?: boolean // highlighted
80
- isLow?: boolean // muted
81
- rank?: 1 | 2 | 3 // medal
82
- metadata?: Record<string, unknown>
83
- }
84
- ```
85
-
86
- ## Behavior
87
- - Both charts use an IntersectionObserver to defer animation until visible.
88
- - Responsive — resize triggers a re-render.
89
- - Dark/light aware via theme CSS variables.
90
-
91
- ## When to Use
92
- - Area chart: time-series or comparative trends.
93
- - Pills: ranked categorical data (leaderboards, top days, distribution).
@@ -1,59 +0,0 @@
1
- # Schmancy Extra
2
-
3
- > Data-driven dropdowns for common localization fields. Country and timezone pickers, form-associated and autocomplete-backed.
4
-
5
- ## schmancy-select-countries
6
- Fully autocomplete-searchable country dropdown. Form-associated (participates in `<form>` submission and validation via `ElementInternals`).
7
-
8
- ```html
9
- <schmancy-select-countries
10
- name="country"
11
- label="Country"
12
- placeholder="Select a country"
13
- required
14
- value="DE"
15
- @change=${e => this.country = e.target.value}
16
- ></schmancy-select-countries>
17
- ```
18
-
19
- | Property | Type | Default | Description |
20
- |----------|------|---------|-------------|
21
- | `value` | string | — | ISO country code (reflected) |
22
- | `name` | string | `''` | Form field name |
23
- | `label` | string | `'Country'` | Visible label |
24
- | `hint` | string | `'Please select a country'` | Helper text |
25
- | `placeholder` | string | `'Select a country'` | Placeholder in the input |
26
- | `required` | boolean | `false` | Validation constraint |
27
-
28
- ## schmancy-select-timezones
29
- Same pattern as countries, backed by timezone data.
30
-
31
- ```html
32
- <schmancy-select-timezones
33
- name="timezone"
34
- label="Timezone"
35
- value="Europe/Berlin"
36
- ></schmancy-select-timezones>
37
- ```
38
-
39
- Accepts the same set of properties (`value`, `name`, `label`, `hint`, `placeholder`, `required`).
40
-
41
- ## Raw Data Exports
42
- If you want the underlying data without the component:
43
- ```typescript
44
- import countries from '@mhmo91/schmancy' // default export from countries.data
45
- import timezones from '@mhmo91/schmancy' // default export from timezones.data
46
- ```
47
-
48
- Each countries row: `{ code, name, dialCode?, flag?, ... }`. Timezones: `{ name, offset, label, ... }`.
49
-
50
- ## Form Integration
51
- Both use `formAssociated = true` and register with the parent `<form>`. Works with native `form.checkValidity()` and with [`schmancy-form`](./form.md).
52
-
53
- ```html
54
- <schmancy-form @submit=${this.onSubmit}>
55
- <schmancy-select-countries name="country" required></schmancy-select-countries>
56
- <schmancy-select-timezones name="timezone" required></schmancy-select-timezones>
57
- <schmancy-button type="submit" variant="filled">Save</schmancy-button>
58
- </schmancy-form>
59
- ```
@@ -1,55 +0,0 @@
1
- # schmancy-map
2
-
3
- > Google Maps component. Accepts address string (auto-geocoded) or exact lat/lng. Singleton-loaded Maps SDK.
4
-
5
- ## Usage
6
- ```html
7
- <!-- By address -->
8
- <schmancy-map
9
- address="Times Square, New York"
10
- api-key="YOUR_GOOGLE_MAPS_KEY"
11
- ></schmancy-map>
12
-
13
- <!-- By coordinates -->
14
- <schmancy-map
15
- .latitude=${40.758}
16
- .longitude=${-73.985}
17
- .zoom=${15}
18
- type="satellite"
19
- api-key="YOUR_GOOGLE_MAPS_KEY"
20
- ></schmancy-map>
21
- ```
22
-
23
- ## Properties
24
- | Property | Type | Default | Description |
25
- |----------|------|---------|-------------|
26
- | `address` | string | — | Location for geocoding (e.g. `"Eiffel Tower, Paris"`) |
27
- | `latitude` | number | — | Precise latitude (takes precedence over address) |
28
- | `longitude` | number | — | Precise longitude |
29
- | `zoom` | number | default Maps default | Map zoom level |
30
- | `type` | `'roadmap' \| 'satellite' \| 'hybrid' \| 'terrain'` | `'roadmap'` | Map style |
31
- | `height` | string | — | Custom height (e.g. `'400px'`, `'60vh'`) |
32
- | `apiKey` | string | **required** | Google Maps API key |
33
-
34
- ## Behavior
35
- - The first `schmancy-map` instance triggers a singleton script load of `maps.googleapis.com/maps/api/js` with the `places` library.
36
- - Subsequent instances reuse the same loader — no duplicate network requests.
37
- - If `address` is provided without coordinates, the built-in `Geocoder` resolves it before rendering.
38
- - Errors (invalid key, unauthorized domain, geocode failure) render a fallback message inside the host.
39
-
40
- ## Setup
41
- 1. Acquire a Google Maps JavaScript API key from Google Cloud Console.
42
- 2. Enable the **Maps JavaScript API** and **Geocoding API**.
43
- 3. Add your domain to the authorized list.
44
-
45
- ## Example
46
- ```html
47
- <schmancy-surface type="subtle" rounded="all">
48
- <schmancy-map
49
- address="1600 Amphitheatre Parkway, Mountain View, CA"
50
- height="320px"
51
- type="hybrid"
52
- .apiKey=${import.meta.env.VITE_GOOGLE_MAPS_KEY}
53
- ></schmancy-map>
54
- </schmancy-surface>
55
- ```
@@ -1,51 +0,0 @@
1
- # schmancy-qr-scanner
2
-
3
- > Camera-based QR code scanner using `jsQR`. Requests rear-camera access, decodes frames in real time, deduplicates reads.
4
-
5
- ## Usage
6
- ```html
7
- <schmancy-qr-scanner
8
- continuous
9
- @scan-result=${e => this.handleScan(e.detail.data)}
10
- ></schmancy-qr-scanner>
11
- ```
12
-
13
- ```typescript
14
- handleScan(data: string) {
15
- console.log('QR decoded:', data)
16
- }
17
- ```
18
-
19
- ## Properties
20
- | Property | Type | Default | Description |
21
- |----------|------|---------|-------------|
22
- | `continuous` | boolean | `true` | Keep scanning after a successful read (dedupe repeated reads) |
23
-
24
- ## Events
25
- | Event | Detail | When |
26
- |-------|--------|------|
27
- | `scan-result` | `{ data: string, timestamp: number }` | QR code successfully decoded |
28
-
29
- ## Behavior
30
- - Requests `getUserMedia` with `facingMode: 'environment'` (rear camera) at 1280×720.
31
- - Decodes via `jsQR` on `animationFrames` stream with `throttleTime` to avoid CPU thrashing.
32
- - `distinctUntilChanged` prevents duplicate emissions for the same code.
33
- - Brief success flash on each valid read.
34
- - Stops camera + tears down subscriptions on disconnect.
35
- - Displays an error state if camera permission is denied.
36
-
37
- ## Requires
38
- - HTTPS (or `localhost`) for camera access.
39
- - User permission to the camera.
40
-
41
- ## Example
42
- ```html
43
- <schmancy-surface type="glass" rounded="all">
44
- <schmancy-qr-scanner
45
- @scan-result=${(e: CustomEvent<{ data: string }>) => {
46
- $notify.success(`Scanned: ${e.detail.data}`)
47
- this.scannedCode = e.detail.data
48
- }}
49
- ></schmancy-qr-scanner>
50
- </schmancy-surface>
51
- ```