@mhmo91/schmancy 0.9.11 → 0.9.13
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.
- package/README.md +34 -0
- package/custom-elements.json +42 -0
- package/dist/agent/flow-CaPi2G8y.js +386 -0
- package/dist/agent/flow-CaPi2G8y.js.map +1 -0
- package/dist/agent/rolldown-runtime-DsMetpgY.js +11 -0
- package/dist/agent/schmancy.agent.js +36368 -0
- package/dist/agent/schmancy.agent.js.map +1 -0
- package/dist/agent/schmancy.manifest.json +6879 -0
- package/dist/agent/vendor-highlight-CHJZQQB7.js +2178 -0
- package/dist/agent/vendor-highlight-CHJZQQB7.js.map +1 -0
- package/dist/agent/vendor-jsqr-r7GNh4P3.js +10212 -0
- package/dist/agent/vendor-jsqr-r7GNh4P3.js.map +1 -0
- package/dist/agent/vendor-material-color-Be96dpGE.js +3309 -0
- package/dist/agent/vendor-material-color-Be96dpGE.js.map +1 -0
- package/dist/{area-BafkBc1f.cjs → area-CApZWjqs.cjs} +1 -1
- package/dist/area-CApZWjqs.cjs.map +1 -0
- package/dist/{area-D03HRn1L.js → area-D_p1YBgP.js} +1 -1
- package/dist/area-D_p1YBgP.js.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/audio-C7TzWI8M.js.map +1 -1
- package/dist/audio-DUVz7Ars.cjs.map +1 -1
- package/dist/{autocomplete-BotVnTfP.js → autocomplete-DAK35swc.js} +2 -2
- package/dist/{autocomplete-BotVnTfP.js.map → autocomplete-DAK35swc.js.map} +1 -1
- package/dist/{autocomplete-BeLg4A3T.cjs → autocomplete-DlCqS1gW.cjs} +1 -1
- package/dist/{autocomplete-BeLg4A3T.cjs.map → autocomplete-DlCqS1gW.cjs.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-4hSLFsGy.cjs → boat-C57YTPbb.cjs} +1 -1
- package/dist/{boat-4hSLFsGy.cjs.map → boat-C57YTPbb.cjs.map} +1 -1
- package/dist/{boat-C1wGdoaF.js → boat-Dms45k4o.js} +1 -1
- package/dist/{boat-C1wGdoaF.js.map → boat-Dms45k4o.js.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +1 -1
- package/dist/breadcrumb.js +1 -1
- package/dist/{busy-C0qP0TiL.cjs → busy-BfN1p1n8.cjs} +1 -1
- package/dist/{busy-C0qP0TiL.cjs.map → busy-BfN1p1n8.cjs.map} +1 -1
- package/dist/{busy-D74-XaFn.js → busy-IKS9obYj.js} +1 -1
- package/dist/{busy-D74-XaFn.js.map → busy-IKS9obYj.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +3 -3
- package/dist/button.js.map +1 -1
- package/dist/{card-DiNYPJ9b.js → card-DQNBal9V.js} +1 -1
- package/dist/{card-DiNYPJ9b.js.map → card-DQNBal9V.js.map} +1 -1
- package/dist/{card-Bht1QcYl.cjs → card-ZObyqkFF.cjs} +1 -1
- package/dist/{card-Bht1QcYl.cjs.map → card-ZObyqkFF.cjs.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/charts.cjs +1 -1
- package/dist/charts.js +1 -1
- package/dist/{checkbox-dRBf89qt.js → checkbox-COhTJ1x5.js} +1 -1
- package/dist/{checkbox-dRBf89qt.js.map → checkbox-COhTJ1x5.js.map} +1 -1
- package/dist/{checkbox-CRzu7URt.cjs → checkbox-CiAtIrqB.cjs} +1 -1
- package/dist/{checkbox-CRzu7URt.cjs.map → checkbox-CiAtIrqB.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-Bma_B3J-.js → chips-B5o3vNQF.js} +3 -3
- package/dist/{chips-Bma_B3J-.js.map → chips-B5o3vNQF.js.map} +1 -1
- package/dist/{chips-CXknD-vY.cjs → chips-D2xmsC36.cjs} +1 -1
- package/dist/{chips-CXknD-vY.cjs.map → chips-D2xmsC36.cjs.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-BROOsNA_.cjs → code-highlight-BToHh8T6.cjs} +1 -1
- package/dist/{code-highlight-BROOsNA_.cjs.map → code-highlight-BToHh8T6.cjs.map} +1 -1
- package/dist/{code-highlight-DjiyaDcX.js → code-highlight-SkMMTkIJ.js} +1 -1
- package/dist/{code-highlight-DjiyaDcX.js.map → code-highlight-SkMMTkIJ.js.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{components-ubXwQbGs.cjs → components-B-XYvUWn.cjs} +1 -1
- package/dist/{components-ubXwQbGs.cjs.map → components-B-XYvUWn.cjs.map} +1 -1
- package/dist/{components-DKgu88mm.js → components-Ca7OTgbQ.js} +1 -1
- package/dist/{components-DKgu88mm.js.map → components-Ca7OTgbQ.js.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/connectivity.cjs +1 -1
- package/dist/connectivity.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/context-C6GwmNJJ.cjs +1 -0
- package/dist/{context-B81Q3U_1.cjs.map → context-C6GwmNJJ.cjs.map} +1 -1
- package/dist/context-oBTPHrbc.js +3 -0
- package/dist/{context-Dnj4ofbV.js.map → context-oBTPHrbc.js.map} +1 -1
- package/dist/cursor-glow-82y5h3E4.cjs.map +1 -1
- package/dist/{date-range-n_xPONd5.cjs → date-range-BTA9nKbw.cjs} +1 -1
- package/dist/{date-range-n_xPONd5.cjs.map → date-range-BTA9nKbw.cjs.map} +1 -1
- package/dist/{date-range-CwqFuGGK.js → date-range-DUWpF0Qw.js} +2 -2
- package/dist/{date-range-CwqFuGGK.js.map → date-range-DUWpF0Qw.js.map} +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-BFpu_Yz9.cjs → delay-Co89XWry.cjs} +1 -1
- package/dist/{delay-BFpu_Yz9.cjs.map → delay-Co89XWry.cjs.map} +1 -1
- package/dist/{delay-Bkd3SOTy.js → delay-CtDrlf1Q.js} +3 -3
- package/dist/{delay-Bkd3SOTy.js.map → delay-CtDrlf1Q.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-DZq61CD5.js → details-B1Ax7WiP.js} +1 -1
- package/dist/{details-DZq61CD5.js.map → details-B1Ax7WiP.js.map} +1 -1
- package/dist/{details-Bal2g3J4.cjs → details-CyXyVdb2.cjs} +1 -1
- package/dist/{details-Bal2g3J4.cjs.map → details-CyXyVdb2.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/dialog-service-CCFGpU7a.js.map +1 -1
- package/dist/dialog-service-DXLGSshF.cjs.map +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.js +1 -1
- package/dist/directives.cjs.map +1 -1
- package/dist/directives.js.map +1 -1
- package/dist/{divider-ChK7lCQF.js → divider-DuwCrKQu.js} +1 -1
- package/dist/{divider-ChK7lCQF.js.map → divider-DuwCrKQu.js.map} +1 -1
- package/dist/{divider-RjZbewe8.cjs → divider-xcvHqVBc.cjs} +1 -1
- package/dist/{divider-RjZbewe8.cjs.map → divider-xcvHqVBc.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +2 -2
- package/dist/{expand-DwZKr9hD.cjs → expand-DUgOh1af.cjs} +1 -1
- package/dist/{expand-DwZKr9hD.cjs.map → expand-DUgOh1af.cjs.map} +1 -1
- package/dist/{expand-CUrWPZu-.js → expand-X0C1W279.js} +2 -2
- package/dist/{expand-CUrWPZu-.js.map → expand-X0C1W279.js.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-C7xp1GQG.js → extra-BTyq-5Z6.js} +1 -1
- package/dist/{extra-C7xp1GQG.js.map → extra-BTyq-5Z6.js.map} +1 -1
- package/dist/{extra-BE9p8l3U.cjs → extra-BqfYIC_q.cjs} +1 -1
- package/dist/{extra-BE9p8l3U.cjs.map → extra-BqfYIC_q.cjs.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{float-kRCgEf_1.js → float-BgGeLER6.js} +1 -1
- package/dist/{float-kRCgEf_1.js.map → float-BgGeLER6.js.map} +1 -1
- package/dist/{float-DoHSvH7R.cjs → float-yZoLnUg0.cjs} +1 -1
- package/dist/{float-DoHSvH7R.cjs.map → float-yZoLnUg0.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{icons-D93IZn6-.js → icons-BDcb8dNb.js} +2 -2
- package/dist/{icons-D93IZn6-.js.map → icons-BDcb8dNb.js.map} +1 -1
- package/dist/{icons-Bz84Dr-q.cjs → icons-BLFEJFDG.cjs} +1 -1
- package/dist/{icons-Bz84Dr-q.cjs.map → icons-BLFEJFDG.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-Cmanzy9x.cjs → iframe-CrDpQkhj.cjs} +1 -1
- package/dist/{iframe-Cmanzy9x.cjs.map → iframe-CrDpQkhj.cjs.map} +1 -1
- package/dist/{iframe-DyOg96rn.js → iframe-qCW0HzwB.js} +1 -1
- package/dist/{iframe-DyOg96rn.js.map → iframe-qCW0HzwB.js.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +32 -32
- package/dist/{input-DIuyi3Gm.cjs → input-C1MIZaKq.cjs} +1 -1
- package/dist/{input-DIuyi3Gm.cjs.map → input-C1MIZaKq.cjs.map} +1 -1
- package/dist/{input-HzweUBSn.js → input-Dv-HtkM9.js} +1 -1
- package/dist/{input-HzweUBSn.js.map → input-Dv-HtkM9.js.map} +1 -1
- package/dist/{input-chip-B4uw64rQ.js → input-chip-CyvjhQSw.js} +1 -1
- package/dist/{input-chip-B4uw64rQ.js.map → input-chip-CyvjhQSw.js.map} +1 -1
- package/dist/{input-chip-DY9IEbQj.cjs → input-chip-DnfthOSY.cjs} +1 -1
- package/dist/{input-chip-DY9IEbQj.cjs.map → input-chip-DnfthOSY.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +2 -2
- package/dist/kbd.cjs +1 -1
- package/dist/kbd.js +1 -1
- package/dist/{layout-DIuACbuC.cjs → layout-D0cR3hT1.cjs} +1 -1
- package/dist/{layout-DIuACbuC.cjs.map → layout-D0cR3hT1.cjs.map} +1 -1
- package/dist/layout-PZCF3kwl.cjs.map +1 -1
- package/dist/{layout-D7OCZ8rE.js → layout-Y5qo3er8.js} +2 -2
- package/dist/{layout-D7OCZ8rE.js.map → layout-Y5qo3er8.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-DL-v1tk9.js → lightbox-C_pqYF6q.js} +2 -2
- package/dist/{lightbox-DL-v1tk9.js.map → lightbox-C_pqYF6q.js.map} +1 -1
- package/dist/{lightbox-DFbqNGoX.cjs → lightbox-Ce8nMldr.cjs} +1 -1
- package/dist/{lightbox-DFbqNGoX.cjs.map → lightbox-Ce8nMldr.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-D99W7WvC.cjs → list-CLc_OQ5k.cjs} +1 -1
- package/dist/{list-D99W7WvC.cjs.map → list-CLc_OQ5k.cjs.map} +1 -1
- package/dist/{list-DZTLJ-2e.js → list-DcnTGee0.js} +2 -2
- package/dist/{list-DZTLJ-2e.js.map → list-DcnTGee0.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-De5SG5z7.cjs → litElement.mixin-DeT3kAOS.cjs} +1 -1
- package/dist/{litElement.mixin-De5SG5z7.cjs.map → litElement.mixin-DeT3kAOS.cjs.map} +1 -1
- package/dist/{litElement.mixin-D6ZHgGZv.js → litElement.mixin-Mi8bar6B.js} +1 -1
- package/dist/{litElement.mixin-D6ZHgGZv.js.map → litElement.mixin-Mi8bar6B.js.map} +1 -1
- package/dist/magnetic-aBBnj_vk.cjs.map +1 -1
- package/dist/{mailbox-BBV6hDAa.js → mailbox-BrLZPj2o.js} +4 -4
- package/dist/{mailbox-BBV6hDAa.js.map → mailbox-BrLZPj2o.js.map} +1 -1
- package/dist/{mailbox-CW7zc0v-.cjs → mailbox-CE5sTDsQ.cjs} +1 -1
- package/dist/{mailbox-CW7zc0v-.cjs.map → mailbox-CE5sTDsQ.cjs.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-CSQMA89X.cjs → map-CKzhM6uY.cjs} +1 -1
- package/dist/{map-CSQMA89X.cjs.map → map-CKzhM6uY.cjs.map} +1 -1
- package/dist/{map-PvojF8B3.js → map-SNb-3q5h.js} +1 -1
- package/dist/{map-PvojF8B3.js.map → map-SNb-3q5h.js.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-3XXOfmrj.cjs → menu-BnGjBrdD.cjs} +1 -1
- package/dist/{menu-3XXOfmrj.cjs.map → menu-BnGjBrdD.cjs.map} +1 -1
- package/dist/{menu-B_o1fOPW.js → menu-VErqs9NG.js} +1 -1
- package/dist/{menu-B_o1fOPW.js.map → menu-VErqs9NG.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +2 -2
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +1 -1
- package/dist/{notification-BMtrJG-Y.js → notification-B_Fkxv7d.js} +2 -2
- package/dist/notification-B_Fkxv7d.js.map +1 -0
- package/dist/{notification-NnsatHAh.cjs → notification-DE5dFf8G.cjs} +1 -1
- package/dist/notification-DE5dFf8G.cjs.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-DxIFpYpC.cjs → option-BmbP5ulK.cjs} +1 -1
- package/dist/{option-DxIFpYpC.cjs.map → option-BmbP5ulK.cjs.map} +1 -1
- package/dist/{option-CNzW-sdU.js → option-DuAlGv27.js} +1 -1
- package/dist/{option-CNzW-sdU.js.map → option-DuAlGv27.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/page.cjs +1 -1
- package/dist/page.cjs.map +1 -1
- package/dist/page.js +2 -2
- package/dist/{progress-DHmYCHmy.js → progress-BnXr7aAs.js} +1 -1
- package/dist/{progress-DHmYCHmy.js.map → progress-BnXr7aAs.js.map} +1 -1
- package/dist/{progress-Cw6Qn3Kb.cjs → progress-Bt9gUiGP.cjs} +1 -1
- package/dist/{progress-Cw6Qn3Kb.cjs.map → progress-Bt9gUiGP.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-Dsoh3FdP.cjs → provide-CnXCF-UP.cjs} +1 -1
- package/dist/{provide-Dsoh3FdP.cjs.map → provide-CnXCF-UP.cjs.map} +1 -1
- package/dist/{provide-C4L6R1lo.js → provide-Disc6_zz.js} +1 -1
- package/dist/{provide-C4L6R1lo.js.map → provide-Disc6_zz.js.map} +1 -1
- package/dist/qr-scanner.cjs +1 -1
- package/dist/qr-scanner.js +1 -1
- package/dist/{radio-group-DneItRXU.js → radio-group-BgZgHMoA.js} +1 -1
- package/dist/{radio-group-DneItRXU.js.map → radio-group-BgZgHMoA.js.map} +1 -1
- package/dist/{radio-group-xgKQTd6h.cjs → radio-group-DkBFgq_3.cjs} +1 -1
- package/dist/{radio-group-xgKQTd6h.cjs.map → radio-group-DkBFgq_3.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +1 -1
- package/dist/{scroll-D7QJYev7.js → scroll-57rkTHm8.js} +1 -1
- package/dist/{scroll-D7QJYev7.js.map → scroll-57rkTHm8.js.map} +1 -1
- package/dist/{scroll-DZAB4JFv.cjs → scroll-hWt0b1gK.cjs} +1 -1
- package/dist/{scroll-DZAB4JFv.cjs.map → scroll-hWt0b1gK.cjs.map} +1 -1
- package/dist/{select-D2eLEDUT.cjs → select-BDonPD5a.cjs} +1 -1
- package/dist/{select-D2eLEDUT.cjs.map → select-BDonPD5a.cjs.map} +1 -1
- package/dist/{select-B2T3RZng.js → select-CkOAwmxC.js} +1 -1
- package/dist/{select-B2T3RZng.js.map → select-CkOAwmxC.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-NaecDxuR.cjs → sheet-Bv2mPHWk.cjs} +1 -1
- package/dist/{sheet-NaecDxuR.cjs.map → sheet-Bv2mPHWk.cjs.map} +1 -1
- package/dist/{sheet-BiGXZPdu.js → sheet-NUgEmozP.js} +3 -3
- package/dist/{sheet-BiGXZPdu.js.map → sheet-NUgEmozP.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-CQq5hUNb.cjs → sheet.service-BKmnlkpZ.cjs} +1 -1
- package/dist/{sheet.service-CQq5hUNb.cjs.map → sheet.service-BKmnlkpZ.cjs.map} +1 -1
- package/dist/{sheet.service-gek7Spb6.js → sheet.service-CanLo8ko.js} +1 -1
- package/dist/{sheet.service-gek7Spb6.js.map → sheet.service-CanLo8ko.js.map} +1 -1
- package/dist/skeleton.cjs +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/skills/SKILL.md +5 -3
- package/dist/skills/schmancy/SKILL.md +5 -3
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{splash-screen-Dc6LDIbK.js → splash-screen-B0ppA3f1.js} +1 -1
- package/dist/{splash-screen-Dc6LDIbK.js.map → splash-screen-B0ppA3f1.js.map} +1 -1
- package/dist/{splash-screen-CxPHf-SC.cjs → splash-screen-BemqNFNj.cjs} +1 -1
- package/dist/{splash-screen-CxPHf-SC.cjs.map → splash-screen-BemqNFNj.cjs.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-BP8bYUHc.cjs → src-ByGCYD-E.cjs} +1 -1
- package/dist/src-ByGCYD-E.cjs.map +1 -0
- package/dist/{src-BYrvfmFF.js → src-Cjy9zCiU.js} +41 -41
- package/dist/src-Cjy9zCiU.js.map +1 -0
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +3 -3
- package/dist/store-Bmj6rvZY.js.map +1 -1
- package/dist/store-CO4nJyGj.cjs.map +1 -1
- package/dist/{surface-C9plkl5F.cjs → surface-CoLYICO1.cjs} +1 -1
- package/dist/{surface-C9plkl5F.cjs.map → surface-CoLYICO1.cjs.map} +1 -1
- package/dist/{surface-B2cmGNZ2.js → surface-CtpWeSGn.js} +2 -2
- package/dist/{surface-B2cmGNZ2.js.map → surface-CtpWeSGn.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +1 -1
- package/dist/switch.js +1 -1
- package/dist/{table-6xNLZh3K.cjs → table-COQKtlJB.cjs} +1 -1
- package/dist/{table-6xNLZh3K.cjs.map → table-COQKtlJB.cjs.map} +1 -1
- package/dist/{table-BCJgjSvq.js → table-bgFb1KYU.js} +1 -1
- package/dist/{table-BCJgjSvq.js.map → table-bgFb1KYU.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-BDqvhB54.js → tabs-BicCpU1B.js} +2 -2
- package/dist/{tabs-BDqvhB54.js.map → tabs-BicCpU1B.js.map} +1 -1
- package/dist/{tabs-pvevSaFB.cjs → tabs-CoMJAXDy.cjs} +1 -1
- package/dist/{tabs-pvevSaFB.cjs.map → tabs-CoMJAXDy.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-BfdVIGgD.cjs +2 -0
- package/dist/{tailwind.mixin-Bug3G6K6.cjs.map → tailwind.mixin-BfdVIGgD.cjs.map} +1 -1
- package/dist/tailwind.mixin-CNdR3zFD.js +219 -0
- package/dist/{tailwind.mixin-ywtUNG2c.js.map → tailwind.mixin-CNdR3zFD.js.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-D2v000gK.cjs → textarea-CxTSwn3x.cjs} +1 -1
- package/dist/{textarea-D2v000gK.cjs.map → textarea-CxTSwn3x.cjs.map} +1 -1
- package/dist/{textarea-BvZn41aa.js → textarea-D7O9Uo15.js} +1 -1
- package/dist/{textarea-BvZn41aa.js.map → textarea-D7O9Uo15.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-Dw9Ag_VS.cjs → theme-CCez6SRm.cjs} +1 -1
- package/dist/{theme-Dw9Ag_VS.cjs.map → theme-CCez6SRm.cjs.map} +1 -1
- package/dist/{theme-JvXazXJr.js → theme-DGiyJMTT.js} +3 -3
- package/dist/{theme-JvXazXJr.js.map → theme-DGiyJMTT.js.map} +1 -1
- package/dist/{theme-button-qHd4AFsE.cjs → theme-button-BV0CxpGn.cjs} +1 -1
- package/dist/{theme-button-qHd4AFsE.cjs.map → theme-button-BV0CxpGn.cjs.map} +1 -1
- package/dist/{theme-button-Bh8wKXtV.js → theme-button-s9GfSQL5.js} +1 -1
- package/dist/{theme-button-Bh8wKXtV.js.map → theme-button-s9GfSQL5.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +2 -2
- package/dist/theme.service-ETiKUwVy.cjs.map +1 -1
- package/dist/theme.service-_qP5WvB9.js.map +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-PpYJFsVi.js → typewriter-BTqEQXsX.js} +3 -3
- package/dist/{typewriter-PpYJFsVi.js.map → typewriter-BTqEQXsX.js.map} +1 -1
- package/dist/{typewriter-C5uDB2Lu.cjs → typewriter-DeaL3NfZ.cjs} +1 -1
- package/dist/{typewriter-C5uDB2Lu.cjs.map → typewriter-DeaL3NfZ.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/utils-C8PD8So2.cjs.map +1 -1
- package/dist/utils-DVuCPDfw.js.map +1 -1
- package/dist/visually-hidden.cjs +1 -1
- package/dist/visually-hidden.js +1 -1
- package/dist/{window-ChDgkb97.js → window-CDHDVOwO.js} +1 -1
- package/dist/{window-ChDgkb97.js.map → window-CDHDVOwO.js.map} +1 -1
- package/dist/{window-Czfu-i4Y.cjs → window-IGZgxuUC.cjs} +1 -1
- package/dist/{window-Czfu-i4Y.cjs.map → window-IGZgxuUC.cjs.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +15 -3
- package/skills/schmancy/SKILL.md +5 -3
- package/src/agent/agent-bundle.test.ts +92 -0
- package/src/agent/agent-entry.ts +17 -0
- package/src/agent/helpers.ts +161 -0
- package/src/agent/index.ts +1 -0
- package/src/agent/schmancy-skill.ts +71 -0
- package/src/agent/virtual-manifest.d.ts +10 -0
- package/src/area/area.service.ts +11 -0
- package/src/content-drawer/drawer.service.ts +9 -0
- package/src/dialog/dialog-service.ts +11 -1
- package/src/notification/notification-service.ts +11 -1
- package/src/sheet/sheet.service.ts +10 -0
- package/src/theme/theme.service.ts +11 -1
- package/types/src/agent/agent-bundle.test.d.ts +1 -0
- package/types/src/agent/agent-entry.d.ts +4 -0
- package/types/src/agent/helpers.d.ts +87 -0
- package/types/src/agent/index.d.ts +1 -0
- package/types/src/agent/schmancy-skill.d.ts +33 -0
- package/types/src/area/area.service.d.ts +11 -0
- package/types/src/content-drawer/drawer.service.d.ts +9 -0
- package/types/src/dialog/dialog-service.d.ts +11 -1
- package/types/src/notification/notification-service.d.ts +11 -1
- package/types/src/sheet/sheet.service.d.ts +9 -0
- package/types/src/theme/theme.service.d.ts +11 -0
- package/dist/area-BafkBc1f.cjs.map +0 -1
- package/dist/area-D03HRn1L.js.map +0 -1
- package/dist/context-B81Q3U_1.cjs +0 -1
- package/dist/context-Dnj4ofbV.js +0 -3
- package/dist/notification-BMtrJG-Y.js.map +0 -1
- package/dist/notification-NnsatHAh.cjs.map +0 -1
- package/dist/src-BP8bYUHc.cjs.map +0 -1
- package/dist/src-BYrvfmFF.js.map +0 -1
- package/dist/tailwind.mixin-Bug3G6K6.cjs +0 -2
- package/dist/tailwind.mixin-ywtUNG2c.js +0 -219
package/skills/schmancy/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: schmancy
|
|
3
|
-
description: UI patterns, component APIs, and conventions for the @mhmo91/schmancy web-component library (Lit + RxJS + Tailwind) — the UI stack
|
|
3
|
+
description: UI patterns, component APIs, and conventions for the @mhmo91/schmancy web-component library (Lit + RxJS + Tailwind) — the exclusive UI stack in this repo's `web/` workspace. Fire this skill on ANY web-UI work, even when the user doesn't name schmancy explicitly — including adding or editing a component, building a form, showing a dialog / toast / side drawer / bottom sheet, wiring routing, reading or writing a context, styling with theme tokens, adding a drop zone / file input / date picker / autocomplete, working with `$LitElement`, or touching any `<schmancy-*>` tag. Also fire on prompts like "build a page", "add a modal", "wire a route", "save user prefs in storage", "animate this", "style with our theme", "make a notification", "how do I do X in Lit", "my drag-and-drop", "dark mode toggle".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Schmancy
|
|
@@ -67,12 +67,14 @@ Use component tags (`<schmancy-menu>`, `<schmancy-dropdown>`, `<schmancy-tooltip
|
|
|
67
67
|
- Lists: `repeat(items, i => i.id, tpl)`. Never `.map()`.
|
|
68
68
|
- View switching: `cache(...)`.
|
|
69
69
|
- Expensive work: `guard([deps], () => expensive())`.
|
|
70
|
-
- Conditionals: `when(
|
|
70
|
+
- Conditionals: every `${...}` placeholder whose value is a `TemplateResult` or `nothing` uses a directive imported from `lit/directives/` — `when(condition, () => html\`...\`, () => html\`...\`?)` for a two-way branch, `choose(value, [['case', () => html\`...\`], …])` for a three-or-more-way dispatch, `ifDefined(maybeUndef)` for nullable attribute values. A chain of `?:` or `&&` expressions whose else-arm is `nothing` evaluates every branch on every render and defeats lit's directive-aware diffing; the pre-edit hook flags this as `NO_TERNARY_NOTHING_DISPATCH`.
|
|
71
71
|
- DOM access: `ref(createRef())`.
|
|
72
72
|
- `classMap(this.classMap({...}))` must be the sole expression in `class=` — never mix with string interpolation.
|
|
73
73
|
|
|
74
74
|
**Styling**
|
|
75
|
-
-
|
|
75
|
+
- Styling uses Tailwind and schmancy tokens. The `css` template passed to `$LitElement` contains only `:host` rules, `@keyframes`, and selectors targeting vendor pseudo-elements (`::-webkit-*`, `::-moz-*`). Other styling is set through Tailwind utility classes and schmancy theme tokens on the `class=` attribute. The `style=` attribute holds per-instance dynamic values only (e.g. `style="--tide: ${value}"`).
|
|
76
|
+
Remediation: move declarations to Tailwind on the `class=` attribute (`backdrop-filter: blur(20px)` → `backdrop-blur-xl`; `color-mix(in oklch, Canvas 72%, transparent)` → `bg-surface/70`; `border-radius: 14px` → `rounded-2xl`; `transition: opacity 80ms linear` → `transition-opacity duration-75 ease-linear`). When a visual pattern seems to want its own class (like `.glass`), check `INDEX.md` — schmancy likely ships the component.
|
|
77
|
+
- Colors: `--schmancy-sys-color-*` CSS vars or Tailwind theme classes. Never hardcoded hex.
|
|
76
78
|
- No `setTimeout` / `setInterval` / `addEventListener` — use RxJS (`timer`, `interval`, `fromEvent`).
|
|
77
79
|
|
|
78
80
|
**Accessibility (combobox forms)**
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import './agent-entry'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Acceptance test per the Claude Design handover §4.4:
|
|
6
|
+
*
|
|
7
|
+
* > "CI check: load the bundle in a headless browser, assert
|
|
8
|
+
* > `customElements.get('schmancy-button')` resolves, assert
|
|
9
|
+
* > `window.schmancy.help()` returns non-empty."
|
|
10
|
+
*
|
|
11
|
+
* This test is the runtime smoke test. It imports the agent bundle entry
|
|
12
|
+
* (which side-effect registers every <schmancy-*> tag plus <schmancy-skill>)
|
|
13
|
+
* and then verifies the self-describing surface is installed.
|
|
14
|
+
*/
|
|
15
|
+
describe('agent bundle — handover §4.4 acceptance', () => {
|
|
16
|
+
it('registers `schmancy-button` on import', () => {
|
|
17
|
+
expect(customElements.get('schmancy-button')).toBeDefined()
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('registers `schmancy-skill` on import', () => {
|
|
21
|
+
expect(customElements.get('schmancy-skill')).toBeDefined()
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('installs `window.schmancy` when a <schmancy-skill> connects', async () => {
|
|
25
|
+
const host = document.createElement('div')
|
|
26
|
+
const skill = document.createElement('schmancy-skill')
|
|
27
|
+
host.appendChild(skill)
|
|
28
|
+
document.body.appendChild(host)
|
|
29
|
+
|
|
30
|
+
await customElements.whenDefined('schmancy-skill')
|
|
31
|
+
// One microtask for connectedCallback to finish installing globals.
|
|
32
|
+
await new Promise(requestAnimationFrame)
|
|
33
|
+
|
|
34
|
+
expect(typeof window.schmancy).toBe('object')
|
|
35
|
+
expect(typeof window.schmancy?.help).toBe('function')
|
|
36
|
+
expect(typeof window.schmancy?.tokens).toBe('function')
|
|
37
|
+
expect(typeof window.schmancy?.capabilities).toBe('function')
|
|
38
|
+
|
|
39
|
+
host.remove()
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('`window.schmancy.help()` returns a non-empty manifest summary', async () => {
|
|
43
|
+
const skill = document.createElement('schmancy-skill')
|
|
44
|
+
document.body.appendChild(skill)
|
|
45
|
+
await customElements.whenDefined('schmancy-skill')
|
|
46
|
+
await new Promise(requestAnimationFrame)
|
|
47
|
+
|
|
48
|
+
const help = window.schmancy!.help() as { elements: unknown[]; services: unknown[] }
|
|
49
|
+
expect(Array.isArray(help.elements)).toBe(true)
|
|
50
|
+
expect(help.elements.length).toBeGreaterThan(50)
|
|
51
|
+
|
|
52
|
+
skill.remove()
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
it('`window.schmancy.help("schmancy-button")` returns attribute enum values', async () => {
|
|
56
|
+
const skill = document.createElement('schmancy-skill')
|
|
57
|
+
document.body.appendChild(skill)
|
|
58
|
+
await customElements.whenDefined('schmancy-skill')
|
|
59
|
+
await new Promise(requestAnimationFrame)
|
|
60
|
+
|
|
61
|
+
const btn = window.schmancy!.help('schmancy-button') as {
|
|
62
|
+
attributes?: Array<{ name: string; values?: string[] }>
|
|
63
|
+
}
|
|
64
|
+
expect(btn).toBeTruthy()
|
|
65
|
+
expect(btn.attributes?.length ?? 0).toBeGreaterThan(0)
|
|
66
|
+
const variant = btn.attributes?.find(a => a.name === 'variant')
|
|
67
|
+
expect(variant?.values).toContain('filled')
|
|
68
|
+
|
|
69
|
+
skill.remove()
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it('`window.schmancy.capabilities()` reports every probed feature', async () => {
|
|
73
|
+
const skill = document.createElement('schmancy-skill')
|
|
74
|
+
document.body.appendChild(skill)
|
|
75
|
+
await customElements.whenDefined('schmancy-skill')
|
|
76
|
+
await new Promise(requestAnimationFrame)
|
|
77
|
+
|
|
78
|
+
const caps = window.schmancy!.capabilities()
|
|
79
|
+
expect(caps).toMatchObject({
|
|
80
|
+
popover: expect.any(Boolean),
|
|
81
|
+
declarativeShadowDom: expect.any(Boolean),
|
|
82
|
+
scopedRegistries: expect.any(Boolean),
|
|
83
|
+
trustedTypes: expect.any(Boolean),
|
|
84
|
+
cssRegisteredProperties: expect.any(Boolean),
|
|
85
|
+
elementInternalsAria: expect.any(Boolean),
|
|
86
|
+
formAssociated: expect.any(Boolean),
|
|
87
|
+
adoptedStyleSheets: expect.any(Boolean),
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
skill.remove()
|
|
91
|
+
})
|
|
92
|
+
})
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import '../index'
|
|
2
|
+
import './schmancy-skill'
|
|
3
|
+
|
|
4
|
+
export {
|
|
5
|
+
$dialog,
|
|
6
|
+
$notify,
|
|
7
|
+
sheet,
|
|
8
|
+
SchmancySheetPosition,
|
|
9
|
+
schmancyContentDrawer,
|
|
10
|
+
theme,
|
|
11
|
+
area,
|
|
12
|
+
lazy,
|
|
13
|
+
createContext,
|
|
14
|
+
select,
|
|
15
|
+
selectItem,
|
|
16
|
+
} from '../index'
|
|
17
|
+
export { $LitElement } from '../../mixins/index'
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import manifest from 'virtual:schmancy-manifest'
|
|
2
|
+
|
|
3
|
+
export type Manifest = typeof manifest
|
|
4
|
+
|
|
5
|
+
export type ElementEntry = {
|
|
6
|
+
kind: 'class'
|
|
7
|
+
name: string
|
|
8
|
+
tagName?: string
|
|
9
|
+
description?: string
|
|
10
|
+
summary?: string
|
|
11
|
+
attributes?: Array<{
|
|
12
|
+
name: string
|
|
13
|
+
description?: string
|
|
14
|
+
type?: { text?: string }
|
|
15
|
+
default?: string
|
|
16
|
+
values?: string[]
|
|
17
|
+
}>
|
|
18
|
+
events?: Array<{ name: string; description?: string; type?: { text?: string } }>
|
|
19
|
+
slots?: Array<{ name: string; description?: string }>
|
|
20
|
+
cssProperties?: Array<{ name: string; description?: string }>
|
|
21
|
+
cssParts?: Array<{ name: string; description?: string }>
|
|
22
|
+
whenToUse?: string
|
|
23
|
+
platformPrimitive?: { tag: string; mode?: string; note?: string }
|
|
24
|
+
contexts?: { provides?: string[]; consumes?: string[] }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type ServiceEntry = {
|
|
28
|
+
kind: 'variable'
|
|
29
|
+
name: string
|
|
30
|
+
description?: string
|
|
31
|
+
summary?: string
|
|
32
|
+
service: true
|
|
33
|
+
methods?: Array<{ signature: string; summary?: string }>
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
type Declaration = ElementEntry | ServiceEntry | { kind: string; name: string; [key: string]: unknown }
|
|
37
|
+
|
|
38
|
+
function allDeclarations(): Declaration[] {
|
|
39
|
+
const out: Declaration[] = []
|
|
40
|
+
for (const mod of manifest.modules ?? []) {
|
|
41
|
+
const decls = (mod as unknown as { declarations?: Declaration[] }).declarations ?? []
|
|
42
|
+
for (const decl of decls) out.push(decl)
|
|
43
|
+
}
|
|
44
|
+
return out
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function elements(): ElementEntry[] {
|
|
48
|
+
return allDeclarations().filter(
|
|
49
|
+
(d): d is ElementEntry => d.kind === 'class' && typeof (d as ElementEntry).tagName === 'string',
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function services(): ServiceEntry[] {
|
|
54
|
+
return allDeclarations().filter((d): d is ServiceEntry => d.kind === 'variable' && (d as ServiceEntry).service === true)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function help(tag?: string): unknown {
|
|
58
|
+
if (!tag) {
|
|
59
|
+
return {
|
|
60
|
+
elements: elements().map(e => ({ tag: e.tagName, summary: e.summary ?? e.description })),
|
|
61
|
+
services: services().map(s => ({ name: s.name, summary: s.summary ?? s.description })),
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const el = elements().find(e => e.tagName === tag)
|
|
65
|
+
if (el) return el
|
|
66
|
+
const svc = services().find(s => s.name === tag)
|
|
67
|
+
if (svc) return svc
|
|
68
|
+
return null
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function tokens(): string[] {
|
|
72
|
+
return (manifest as { tokens?: string[] }).tokens ?? []
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function platformPrimitive(tag: string): ElementEntry['platformPrimitive'] | null {
|
|
76
|
+
return elements().find(e => e.tagName === tag)?.platformPrimitive ?? null
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function registeredTags(): string[] {
|
|
80
|
+
return elements()
|
|
81
|
+
.map(e => e.tagName!)
|
|
82
|
+
.filter(tag => typeof customElements.get(tag) !== 'undefined')
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function a11yAudit(): Array<{
|
|
86
|
+
tag: string
|
|
87
|
+
role: string | null
|
|
88
|
+
ariaLabel: string | null
|
|
89
|
+
hasShadowRoot: boolean
|
|
90
|
+
formAssociated: boolean
|
|
91
|
+
}> {
|
|
92
|
+
const tags = new Set(elements().map(e => e.tagName!))
|
|
93
|
+
const report: Array<{
|
|
94
|
+
tag: string
|
|
95
|
+
role: string | null
|
|
96
|
+
ariaLabel: string | null
|
|
97
|
+
hasShadowRoot: boolean
|
|
98
|
+
formAssociated: boolean
|
|
99
|
+
}> = []
|
|
100
|
+
const all = document.querySelectorAll('*')
|
|
101
|
+
for (const node of Array.from(all)) {
|
|
102
|
+
const tag = node.tagName.toLowerCase()
|
|
103
|
+
if (!tags.has(tag)) continue
|
|
104
|
+
const ctor = customElements.get(tag) as (CustomElementConstructor & { formAssociated?: boolean }) | undefined
|
|
105
|
+
report.push({
|
|
106
|
+
tag,
|
|
107
|
+
role: node.getAttribute('role'),
|
|
108
|
+
ariaLabel: node.getAttribute('aria-label'),
|
|
109
|
+
hasShadowRoot: Boolean((node as Element & { shadowRoot?: ShadowRoot | null }).shadowRoot),
|
|
110
|
+
formAssociated: Boolean(ctor?.formAssociated),
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
return report
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export type Capabilities = {
|
|
117
|
+
popover: boolean
|
|
118
|
+
declarativeShadowDom: boolean
|
|
119
|
+
scopedRegistries: boolean
|
|
120
|
+
trustedTypes: boolean
|
|
121
|
+
cssRegisteredProperties: boolean
|
|
122
|
+
elementInternalsAria: boolean
|
|
123
|
+
formAssociated: boolean
|
|
124
|
+
adoptedStyleSheets: boolean
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Runtime feature probe. Tells an agent which platform capabilities the
|
|
129
|
+
* current sandbox exposes, so it can adapt without assuming the sandbox CSP
|
|
130
|
+
* or browser version. Every check is feature-detect, not UA-sniff.
|
|
131
|
+
*/
|
|
132
|
+
export function capabilities(): Capabilities {
|
|
133
|
+
const anyTemplate = typeof HTMLTemplateElement !== 'undefined' ? HTMLTemplateElement.prototype : null
|
|
134
|
+
const anyElInternals = typeof ElementInternals !== 'undefined' ? ElementInternals.prototype : null
|
|
135
|
+
return {
|
|
136
|
+
popover: typeof HTMLElement !== 'undefined' && 'popover' in HTMLElement.prototype,
|
|
137
|
+
declarativeShadowDom: Boolean(anyTemplate && 'shadowRootMode' in anyTemplate),
|
|
138
|
+
scopedRegistries: (() => {
|
|
139
|
+
try {
|
|
140
|
+
// Native scoped registries require a constructible CustomElementRegistry.
|
|
141
|
+
// Pre-Safari-26/Chrome-146, the constructor throws Illegal constructor.
|
|
142
|
+
new (window as { CustomElementRegistry?: new () => unknown }).CustomElementRegistry!()
|
|
143
|
+
return true
|
|
144
|
+
} catch {
|
|
145
|
+
return false
|
|
146
|
+
}
|
|
147
|
+
})(),
|
|
148
|
+
trustedTypes: typeof (globalThis as { trustedTypes?: unknown }).trustedTypes !== 'undefined',
|
|
149
|
+
cssRegisteredProperties: typeof (window as { CSS?: { registerProperty?: unknown } }).CSS?.registerProperty === 'function',
|
|
150
|
+
elementInternalsAria: Boolean(anyElInternals && 'role' in anyElInternals),
|
|
151
|
+
formAssociated: typeof ElementInternals !== 'undefined',
|
|
152
|
+
adoptedStyleSheets: typeof Document !== 'undefined' && 'adoptedStyleSheets' in Document.prototype,
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export function manifestUrl(): string {
|
|
157
|
+
const blob = new Blob([JSON.stringify(manifest)], { type: 'application/json' })
|
|
158
|
+
return URL.createObjectURL(blob)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export { manifest }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './schmancy-skill'
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { $LitElement } from '../../mixins/index'
|
|
2
|
+
import { html } from 'lit'
|
|
3
|
+
import { customElement } from 'lit/decorators.js'
|
|
4
|
+
import {
|
|
5
|
+
a11yAudit,
|
|
6
|
+
capabilities,
|
|
7
|
+
help,
|
|
8
|
+
manifest,
|
|
9
|
+
manifestUrl,
|
|
10
|
+
platformPrimitive,
|
|
11
|
+
registeredTags,
|
|
12
|
+
tokens,
|
|
13
|
+
} from './helpers'
|
|
14
|
+
|
|
15
|
+
declare global {
|
|
16
|
+
interface Window {
|
|
17
|
+
schmancy?: {
|
|
18
|
+
manifest: typeof manifest
|
|
19
|
+
manifestUrl: string
|
|
20
|
+
help: typeof help
|
|
21
|
+
tokens: typeof tokens
|
|
22
|
+
platformPrimitive: typeof platformPrimitive
|
|
23
|
+
registeredTags: typeof registeredTags
|
|
24
|
+
a11yAudit: typeof a11yAudit
|
|
25
|
+
capabilities: typeof capabilities
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let installedUrl: string | null = null
|
|
31
|
+
|
|
32
|
+
function install() {
|
|
33
|
+
if (typeof window === 'undefined') return
|
|
34
|
+
if (installedUrl) return
|
|
35
|
+
installedUrl = manifestUrl()
|
|
36
|
+
window.schmancy = {
|
|
37
|
+
manifest,
|
|
38
|
+
manifestUrl: installedUrl,
|
|
39
|
+
help,
|
|
40
|
+
tokens,
|
|
41
|
+
platformPrimitive,
|
|
42
|
+
registeredTags,
|
|
43
|
+
a11yAudit,
|
|
44
|
+
capabilities,
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Self-describing runtime helper. Drop `<schmancy-skill></schmancy-skill>`
|
|
50
|
+
* once on a page and `window.schmancy.help('schmancy-button')` returns the
|
|
51
|
+
* machine-readable entry for any tag. Renders nothing.
|
|
52
|
+
*
|
|
53
|
+
* @element schmancy-skill
|
|
54
|
+
*/
|
|
55
|
+
@customElement('schmancy-skill')
|
|
56
|
+
export class SchmancySkill extends $LitElement() {
|
|
57
|
+
connectedCallback() {
|
|
58
|
+
super.connectedCallback()
|
|
59
|
+
install()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
render() {
|
|
63
|
+
return html``
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
declare global {
|
|
68
|
+
interface HTMLElementTagNameMap {
|
|
69
|
+
'schmancy-skill': SchmancySkill
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
declare module 'virtual:schmancy-manifest' {
|
|
2
|
+
type ManifestModule = { kind: 'javascript-module'; path: string; declarations: Array<Record<string, unknown>> }
|
|
3
|
+
const manifest: {
|
|
4
|
+
schemaVersion: '1.0.0'
|
|
5
|
+
readme?: string
|
|
6
|
+
modules: ManifestModule[]
|
|
7
|
+
tokens: string[]
|
|
8
|
+
}
|
|
9
|
+
export default manifest
|
|
10
|
+
}
|
package/src/area/area.service.ts
CHANGED
|
@@ -744,5 +744,16 @@ class AreaService implements AreaSubscription {
|
|
|
744
744
|
}
|
|
745
745
|
}
|
|
746
746
|
|
|
747
|
+
/**
|
|
748
|
+
* Area router singleton. Drives named `<schmancy-area>` outlets in the DOM
|
|
749
|
+
* — imperative push / pop, URL-synced, state-restoring. Pair with
|
|
750
|
+
* `lazy(() => import('./view'))` for code-split routes.
|
|
751
|
+
*
|
|
752
|
+
* @service
|
|
753
|
+
* @summary Imperative outlet-based router for `<schmancy-area>` elements.
|
|
754
|
+
* @method push({ area, component, params?, state? }) - Navigate an area to a component.
|
|
755
|
+
* @method pop(areaName) - Pop the top entry off an area's stack.
|
|
756
|
+
* @method current$(areaName) - Observable of the active route state for an area.
|
|
757
|
+
*/
|
|
747
758
|
export const area = AreaService.getInstance()
|
|
748
759
|
export default area
|
|
@@ -145,4 +145,13 @@ class DrawerService {
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
/**
|
|
149
|
+
* Content-drawer service. Mounts any element inside the right-hand content
|
|
150
|
+
* drawer of a `<schmancy-content-drawer>` layout.
|
|
151
|
+
*
|
|
152
|
+
* @service
|
|
153
|
+
* @summary Imperative content-drawer (right-side navigation panel).
|
|
154
|
+
* @method render({ component, ...options }) - Mount an element in the drawer.
|
|
155
|
+
* @method close() - Close the drawer.
|
|
156
|
+
*/
|
|
148
157
|
export const schmancyContentDrawer = new DrawerService()
|
|
@@ -444,7 +444,17 @@ export class DialogService {
|
|
|
444
444
|
const service = DialogService.getInstance()
|
|
445
445
|
|
|
446
446
|
/**
|
|
447
|
-
* Global dialog utility
|
|
447
|
+
* Global dialog utility. Imperative modal API — open any element as a dialog,
|
|
448
|
+
* or use the built-in `confirm` / `ask` / `danger` prompts. Returns Promises
|
|
449
|
+
* that resolve when the user picks an action.
|
|
450
|
+
*
|
|
451
|
+
* @service
|
|
452
|
+
* @summary Imperative modal dialogs and built-in confirm/ask/danger prompts.
|
|
453
|
+
* @method confirm(options: DialogOptions) - Built-in confirm prompt. Returns Promise<boolean>.
|
|
454
|
+
* @method ask(message, event?) - One-line yes/no prompt anchored to the triggering event.
|
|
455
|
+
* @method danger(options) - Destructive-action confirm styled with the error palette.
|
|
456
|
+
* @method component(element, options?) - Open any element as a modal.
|
|
457
|
+
* @method dismiss(id?) - Dismiss a dialog by id, or the topmost dialog.
|
|
448
458
|
*/
|
|
449
459
|
export const $dialog = {
|
|
450
460
|
confirm: (options: DialogOptions): Promise<boolean> => {
|
|
@@ -246,7 +246,17 @@ export class NotificationService {
|
|
|
246
246
|
}
|
|
247
247
|
|
|
248
248
|
/**
|
|
249
|
-
* Global notification utility -
|
|
249
|
+
* Global notification (toast) utility. Fire-and-forget API for success,
|
|
250
|
+
* error, info, and warning toasts, plus a low-level `show` for custom
|
|
251
|
+
* notifications.
|
|
252
|
+
*
|
|
253
|
+
* @service
|
|
254
|
+
* @summary Toast notifications — success, error, info, warning.
|
|
255
|
+
* @method show(options: NotificationOptions) - Low-level; show any NotificationOptions.
|
|
256
|
+
* @method success(message, options?) - Green success toast.
|
|
257
|
+
* @method error(message, options?) - Red error toast.
|
|
258
|
+
* @method info(message, options?) - Blue informational toast.
|
|
259
|
+
* @method warning(message, options?) - Amber warning toast.
|
|
250
260
|
*/
|
|
251
261
|
export const $notify = {
|
|
252
262
|
/**
|
|
@@ -232,4 +232,14 @@ class BottomSheetService {
|
|
|
232
232
|
}
|
|
233
233
|
|
|
234
234
|
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Bottom / side sheet service. Mounts any element as a sheet with a chosen
|
|
238
|
+
* position (see `SchmancySheetPosition` enum).
|
|
239
|
+
*
|
|
240
|
+
* @service
|
|
241
|
+
* @summary Imperative bottom / side sheet surface.
|
|
242
|
+
* @method open({ component, position? }) - Mount an element as a sheet.
|
|
243
|
+
* @method dismiss(id?) - Dismiss a sheet by id, or the topmost.
|
|
244
|
+
*/
|
|
235
245
|
export const sheet = new BottomSheetService()
|
|
@@ -514,7 +514,17 @@ class ThemeService {
|
|
|
514
514
|
}
|
|
515
515
|
}
|
|
516
516
|
|
|
517
|
-
|
|
517
|
+
/**
|
|
518
|
+
* Theme singleton. Reads and mutates the active theme (scheme, source color,
|
|
519
|
+
* locale); persists the user's scheme choice. Components subscribe via
|
|
520
|
+
* `theme.theme$` for changes.
|
|
521
|
+
*
|
|
522
|
+
* @service
|
|
523
|
+
* @summary Theme service — active scheme, source color, locale.
|
|
524
|
+
* @method next({ scheme?, source?, locale? }) - Update theme state.
|
|
525
|
+
* @method theme$ - Observable<TSchmancyTheme>; emits on every theme change.
|
|
526
|
+
* @method toggle() - Toggle between light and dark schemes.
|
|
527
|
+
*/
|
|
518
528
|
export const theme = ThemeService.getInstance()
|
|
519
529
|
export const schmancyTheme = theme // Alias for convenience
|
|
520
530
|
export default theme
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './agent-entry';
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import manifest from 'virtual:schmancy-manifest';
|
|
2
|
+
export type Manifest = typeof manifest;
|
|
3
|
+
export type ElementEntry = {
|
|
4
|
+
kind: 'class';
|
|
5
|
+
name: string;
|
|
6
|
+
tagName?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
summary?: string;
|
|
9
|
+
attributes?: Array<{
|
|
10
|
+
name: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
type?: {
|
|
13
|
+
text?: string;
|
|
14
|
+
};
|
|
15
|
+
default?: string;
|
|
16
|
+
values?: string[];
|
|
17
|
+
}>;
|
|
18
|
+
events?: Array<{
|
|
19
|
+
name: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
type?: {
|
|
22
|
+
text?: string;
|
|
23
|
+
};
|
|
24
|
+
}>;
|
|
25
|
+
slots?: Array<{
|
|
26
|
+
name: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
}>;
|
|
29
|
+
cssProperties?: Array<{
|
|
30
|
+
name: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
}>;
|
|
33
|
+
cssParts?: Array<{
|
|
34
|
+
name: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
}>;
|
|
37
|
+
whenToUse?: string;
|
|
38
|
+
platformPrimitive?: {
|
|
39
|
+
tag: string;
|
|
40
|
+
mode?: string;
|
|
41
|
+
note?: string;
|
|
42
|
+
};
|
|
43
|
+
contexts?: {
|
|
44
|
+
provides?: string[];
|
|
45
|
+
consumes?: string[];
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
export type ServiceEntry = {
|
|
49
|
+
kind: 'variable';
|
|
50
|
+
name: string;
|
|
51
|
+
description?: string;
|
|
52
|
+
summary?: string;
|
|
53
|
+
service: true;
|
|
54
|
+
methods?: Array<{
|
|
55
|
+
signature: string;
|
|
56
|
+
summary?: string;
|
|
57
|
+
}>;
|
|
58
|
+
};
|
|
59
|
+
export declare function help(tag?: string): unknown;
|
|
60
|
+
export declare function tokens(): string[];
|
|
61
|
+
export declare function platformPrimitive(tag: string): ElementEntry['platformPrimitive'] | null;
|
|
62
|
+
export declare function registeredTags(): string[];
|
|
63
|
+
export declare function a11yAudit(): Array<{
|
|
64
|
+
tag: string;
|
|
65
|
+
role: string | null;
|
|
66
|
+
ariaLabel: string | null;
|
|
67
|
+
hasShadowRoot: boolean;
|
|
68
|
+
formAssociated: boolean;
|
|
69
|
+
}>;
|
|
70
|
+
export type Capabilities = {
|
|
71
|
+
popover: boolean;
|
|
72
|
+
declarativeShadowDom: boolean;
|
|
73
|
+
scopedRegistries: boolean;
|
|
74
|
+
trustedTypes: boolean;
|
|
75
|
+
cssRegisteredProperties: boolean;
|
|
76
|
+
elementInternalsAria: boolean;
|
|
77
|
+
formAssociated: boolean;
|
|
78
|
+
adoptedStyleSheets: boolean;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Runtime feature probe. Tells an agent which platform capabilities the
|
|
82
|
+
* current sandbox exposes, so it can adapt without assuming the sandbox CSP
|
|
83
|
+
* or browser version. Every check is feature-detect, not UA-sniff.
|
|
84
|
+
*/
|
|
85
|
+
export declare function capabilities(): Capabilities;
|
|
86
|
+
export declare function manifestUrl(): string;
|
|
87
|
+
export { manifest };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './schmancy-skill';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { a11yAudit, capabilities, help, manifest, platformPrimitive, registeredTags, tokens } from './helpers';
|
|
2
|
+
declare global {
|
|
3
|
+
interface Window {
|
|
4
|
+
schmancy?: {
|
|
5
|
+
manifest: typeof manifest;
|
|
6
|
+
manifestUrl: string;
|
|
7
|
+
help: typeof help;
|
|
8
|
+
tokens: typeof tokens;
|
|
9
|
+
platformPrimitive: typeof platformPrimitive;
|
|
10
|
+
registeredTags: typeof registeredTags;
|
|
11
|
+
a11yAudit: typeof a11yAudit;
|
|
12
|
+
capabilities: typeof capabilities;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
declare const SchmancySkill_base: CustomElementConstructor & import("../../mixins/constructor").Constructor<import("lit").LitElement> & import("../../mixins/constructor").Constructor<import("../../mixins/baseElement").IBaseMixin>;
|
|
17
|
+
/**
|
|
18
|
+
* Self-describing runtime helper. Drop `<schmancy-skill></schmancy-skill>`
|
|
19
|
+
* once on a page and `window.schmancy.help('schmancy-button')` returns the
|
|
20
|
+
* machine-readable entry for any tag. Renders nothing.
|
|
21
|
+
*
|
|
22
|
+
* @element schmancy-skill
|
|
23
|
+
*/
|
|
24
|
+
export declare class SchmancySkill extends SchmancySkill_base {
|
|
25
|
+
connectedCallback(): void;
|
|
26
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
27
|
+
}
|
|
28
|
+
declare global {
|
|
29
|
+
interface HTMLElementTagNameMap {
|
|
30
|
+
'schmancy-skill': SchmancySkill;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
@@ -130,5 +130,16 @@ declare class AreaService implements AreaSubscription {
|
|
|
130
130
|
*/
|
|
131
131
|
getRoute(areaName: string): ActiveRoute | undefined;
|
|
132
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Area router singleton. Drives named `<schmancy-area>` outlets in the DOM
|
|
135
|
+
* — imperative push / pop, URL-synced, state-restoring. Pair with
|
|
136
|
+
* `lazy(() => import('./view'))` for code-split routes.
|
|
137
|
+
*
|
|
138
|
+
* @service
|
|
139
|
+
* @summary Imperative outlet-based router for `<schmancy-area>` elements.
|
|
140
|
+
* @method push({ area, component, params?, state? }) - Navigate an area to a component.
|
|
141
|
+
* @method pop(areaName) - Pop the top entry off an area's stack.
|
|
142
|
+
* @method current$(areaName) - Observable of the active route state for an area.
|
|
143
|
+
*/
|
|
133
144
|
export declare const area: AreaService;
|
|
134
145
|
export default area;
|
|
@@ -36,5 +36,14 @@ declare class DrawerService {
|
|
|
36
36
|
*/
|
|
37
37
|
push(options: DrawerPushOptions): void;
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Content-drawer service. Mounts any element inside the right-hand content
|
|
41
|
+
* drawer of a `<schmancy-content-drawer>` layout.
|
|
42
|
+
*
|
|
43
|
+
* @service
|
|
44
|
+
* @summary Imperative content-drawer (right-side navigation panel).
|
|
45
|
+
* @method render({ component, ...options }) - Mount an element in the drawer.
|
|
46
|
+
* @method close() - Close the drawer.
|
|
47
|
+
*/
|
|
39
48
|
export declare const schmancyContentDrawer: DrawerService;
|
|
40
49
|
export {};
|