@mhmo91/schmancy 0.9.20 → 0.9.22
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/dist/agent/{flow-3RrZM-e7.js.map → flow-CvG1fLW5.js.map} +1 -1
- package/dist/agent/schmancy.agent.js +2172 -2168
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/{vendor-highlight-BmnMldIa.js.map → vendor-highlight-Dow87ZL_.js.map} +1 -1
- package/dist/agent/{vendor-jsqr-1wQ5xc49.js.map → vendor-jsqr-Bl4iAtKC.js.map} +1 -1
- package/dist/agent/{vendor-material-color-33Mj762T.js.map → vendor-material-color-DcL7ZPxx.js.map} +1 -1
- package/dist/{area-DBjAhgjP.cjs → area-CFLFXu0Z.cjs} +1 -1
- package/dist/{area-DBjAhgjP.cjs.map → area-CFLFXu0Z.cjs.map} +1 -1
- package/dist/{area-Dr4I9R2p.js → area-CfozaCAZ.js} +1 -1
- package/dist/{area-Dr4I9R2p.js.map → area-CfozaCAZ.js.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-CgWUCUU-.js → autocomplete-BNjcQ743.js} +2 -2
- package/dist/{autocomplete-CgWUCUU-.js.map → autocomplete-BNjcQ743.js.map} +1 -1
- package/dist/{autocomplete-EM0jE7X2.cjs → autocomplete-NDvRW_Xs.cjs} +1 -1
- package/dist/{autocomplete-EM0jE7X2.cjs.map → autocomplete-NDvRW_Xs.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-Dw8TmOzN.js → boat-DxplbTDW.js} +1 -1
- package/dist/{boat-Dw8TmOzN.js.map → boat-DxplbTDW.js.map} +1 -1
- package/dist/{boat-BjYJI1HS.cjs → boat-ZA47HbKj.cjs} +1 -1
- package/dist/{boat-BjYJI1HS.cjs.map → boat-ZA47HbKj.cjs.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-BmiumJpB.cjs → busy-BuHEz1uo.cjs} +1 -1
- package/dist/{busy-BmiumJpB.cjs.map → busy-BuHEz1uo.cjs.map} +1 -1
- package/dist/{busy-D2hP3fOy.js → busy-QZxs4u8B.js} +1 -1
- package/dist/{busy-D2hP3fOy.js.map → busy-QZxs4u8B.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.js +3 -3
- package/dist/{card-CEdgK9nb.js → card-CTUaARLm.js} +1 -1
- package/dist/{card-CEdgK9nb.js.map → card-CTUaARLm.js.map} +1 -1
- package/dist/{card-BslSqOsf.cjs → card-DtN6p1Jq.cjs} +1 -1
- package/dist/{card-BslSqOsf.cjs.map → card-DtN6p1Jq.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-Br84TiCs.js → checkbox-D4cUb1T3.js} +1 -1
- package/dist/{checkbox-Br84TiCs.js.map → checkbox-D4cUb1T3.js.map} +1 -1
- package/dist/{checkbox-DtcFMgZL.cjs → checkbox-DEKQLJYR.cjs} +1 -1
- package/dist/{checkbox-DtcFMgZL.cjs.map → checkbox-DEKQLJYR.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-DoCu5YQb.cjs → chips-B-27tj7O.cjs} +1 -1
- package/dist/{chips-DoCu5YQb.cjs.map → chips-B-27tj7O.cjs.map} +1 -1
- package/dist/{chips-BNYOweGm.js → chips-DhAWrSgi.js} +3 -3
- package/dist/{chips-BNYOweGm.js.map → chips-DhAWrSgi.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-CI_gqXYX.js → code-highlight-DgZKqo4P.js} +1 -1
- package/dist/{code-highlight-CI_gqXYX.js.map → code-highlight-DgZKqo4P.js.map} +1 -1
- package/dist/{code-highlight-B_l8vDzn.cjs → code-highlight-_ZK6FEjF.cjs} +1 -1
- package/dist/{code-highlight-B_l8vDzn.cjs.map → code-highlight-_ZK6FEjF.cjs.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{components-TJT8-tva.cjs → components-DUiF-_Ul.cjs} +1 -1
- package/dist/{components-TJT8-tva.cjs.map → components-DUiF-_Ul.cjs.map} +1 -1
- package/dist/{components-DjKNS9R_.js → components-JHIoVqFd.js} +1 -1
- package/dist/{components-DjKNS9R_.js.map → components-JHIoVqFd.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-6t-yayy3.cjs +1 -0
- package/dist/{context-CAYQh-mx.cjs.map → context-6t-yayy3.cjs.map} +1 -1
- package/dist/context-BCFNNkes.js +3 -0
- package/dist/{context-D8Q66KPe.js.map → context-BCFNNkes.js.map} +1 -1
- package/dist/{date-range-sGkC0KF3.js → date-range-B1FDRGRB.js} +2 -2
- package/dist/{date-range-sGkC0KF3.js.map → date-range-B1FDRGRB.js.map} +1 -1
- package/dist/{date-range-CIWYm3eS.cjs → date-range-CrAIk8dg.cjs} +1 -1
- package/dist/{date-range-CIWYm3eS.cjs.map → date-range-CrAIk8dg.cjs.map} +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-DwX65fSc.js → delay-Cs0i_CpQ.js} +3 -3
- package/dist/{delay-DwX65fSc.js.map → delay-Cs0i_CpQ.js.map} +1 -1
- package/dist/{delay-Bu4WMQlV.cjs → delay-DCp_QEct.cjs} +1 -1
- package/dist/{delay-Bu4WMQlV.cjs.map → delay-DCp_QEct.cjs.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-B8p62xmR.cjs → details-BJTR16AV.cjs} +1 -1
- package/dist/{details-B8p62xmR.cjs.map → details-BJTR16AV.cjs.map} +1 -1
- package/dist/{details-CCW52lzz.js → details-CBoXUDlQ.js} +1 -1
- package/dist/{details-CCW52lzz.js.map → details-CBoXUDlQ.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-JyyFw_3J.cjs → divider-D6MRonTS.cjs} +1 -1
- package/dist/{divider-JyyFw_3J.cjs.map → divider-D6MRonTS.cjs.map} +1 -1
- package/dist/{divider-CbEWg3G_.js → divider-DivkYKa_.js} +1 -1
- package/dist/{divider-CbEWg3G_.js.map → divider-DivkYKa_.js.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-bFa_qVDT.js → expand-BvAVo29n.js} +2 -2
- package/dist/{expand-bFa_qVDT.js.map → expand-BvAVo29n.js.map} +1 -1
- package/dist/{expand-BmwIPNjq.cjs → expand-Dd0H6y8Z.cjs} +1 -1
- package/dist/{expand-BmwIPNjq.cjs.map → expand-Dd0H6y8Z.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-HwbaUnCD.js → extra-0MZSXbOH.js} +1 -1
- package/dist/{extra-HwbaUnCD.js.map → extra-0MZSXbOH.js.map} +1 -1
- package/dist/{extra-BUgyMgjl.cjs → extra-CdOUiB0K.cjs} +1 -1
- package/dist/{extra-BUgyMgjl.cjs.map → extra-CdOUiB0K.cjs.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{float-BQwhfibw.cjs → float-ByW-Gth3.cjs} +1 -1
- package/dist/{float-BQwhfibw.cjs.map → float-ByW-Gth3.cjs.map} +1 -1
- package/dist/{float-D5ezUurt.js → float-D_u8mDNa.js} +1 -1
- package/dist/{float-D5ezUurt.js.map → float-D_u8mDNa.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/handover/agent-runtime-v2-loopback.md +71 -0
- package/dist/handover/claude-design-brief.md +131 -0
- package/dist/handover/claude-design-v2-paste.md +42 -0
- package/dist/{icons-C5-DIjet.js → icons-24zlLf1q.js} +2 -2
- package/dist/{icons-C5-DIjet.js.map → icons-24zlLf1q.js.map} +1 -1
- package/dist/{icons-B6V3nZ4-.cjs → icons-BpHN4Z8q.cjs} +1 -1
- package/dist/{icons-B6V3nZ4-.cjs.map → icons-BpHN4Z8q.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-C7sHg7RC.cjs → iframe-BXzYZu9_.cjs} +1 -1
- package/dist/{iframe-C7sHg7RC.cjs.map → iframe-BXzYZu9_.cjs.map} +1 -1
- package/dist/{iframe-BXBsuLwt.js → iframe-B_QrvTmj.js} +1 -1
- package/dist/{iframe-BXBsuLwt.js.map → iframe-B_QrvTmj.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 +30 -30
- package/dist/{input-chip-CiG61y-N.js → input-chip-C09B0L1y.js} +1 -1
- package/dist/{input-chip-CiG61y-N.js.map → input-chip-C09B0L1y.js.map} +1 -1
- package/dist/{input-chip-p24lkYtY.cjs → input-chip-FZEpuSaX.cjs} +1 -1
- package/dist/{input-chip-p24lkYtY.cjs.map → input-chip-FZEpuSaX.cjs.map} +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-B0_IXfov.cjs → layout-Bst19YG8.cjs} +1 -1
- package/dist/{layout-B0_IXfov.cjs.map → layout-Bst19YG8.cjs.map} +1 -1
- package/dist/{layout-Cqghi_rx.js → layout-aTtUdGAi.js} +2 -2
- package/dist/{layout-Cqghi_rx.js.map → layout-aTtUdGAi.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-CnCTvqSu.js → lightbox-Cb5-XPWV.js} +2 -2
- package/dist/{lightbox-CnCTvqSu.js.map → lightbox-Cb5-XPWV.js.map} +1 -1
- package/dist/{lightbox-BWKTzA03.cjs → lightbox-Dk2ICCBB.cjs} +1 -1
- package/dist/{lightbox-BWKTzA03.cjs.map → lightbox-Dk2ICCBB.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-CMWHu6cV.cjs → list-DBiecR1i.cjs} +1 -1
- package/dist/{list-CMWHu6cV.cjs.map → list-DBiecR1i.cjs.map} +1 -1
- package/dist/{list-BpjKUOzM.js → list-DZWoCb3V.js} +2 -2
- package/dist/{list-BpjKUOzM.js.map → list-DZWoCb3V.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-BnNYZ24e.js → litElement.mixin-BuZ28ZzP.js} +1 -1
- package/dist/{litElement.mixin-BnNYZ24e.js.map → litElement.mixin-BuZ28ZzP.js.map} +1 -1
- package/dist/{litElement.mixin-CtQOmwq6.cjs → litElement.mixin-lYlKxxjR.cjs} +1 -1
- package/dist/{litElement.mixin-CtQOmwq6.cjs.map → litElement.mixin-lYlKxxjR.cjs.map} +1 -1
- package/dist/{mailbox-Tg1CROVz.cjs → mailbox-BYNmcNIM.cjs} +1 -1
- package/dist/{mailbox-Tg1CROVz.cjs.map → mailbox-BYNmcNIM.cjs.map} +1 -1
- package/dist/{mailbox-CHIpxS3W.js → mailbox-laG7nvXl.js} +4 -4
- package/dist/{mailbox-CHIpxS3W.js.map → mailbox-laG7nvXl.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-Z_dsu-dv.cjs → map-7_cexh1e.cjs} +1 -1
- package/dist/{map-Z_dsu-dv.cjs.map → map-7_cexh1e.cjs.map} +1 -1
- package/dist/{map-YY1Q4FWO.js → map-YSAPFrH9.js} +1 -1
- package/dist/{map-YY1Q4FWO.js.map → map-YSAPFrH9.js.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-BIBUgS1T.js → menu-DeNdlsSV.js} +1 -1
- package/dist/{menu-BIBUgS1T.js.map → menu-DeNdlsSV.js.map} +1 -1
- package/dist/{menu-DS8Iz4fJ.cjs → menu-RaeiF4Ja.cjs} +1 -1
- package/dist/{menu-DS8Iz4fJ.cjs.map → menu-RaeiF4Ja.cjs.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-ChAvNXf3.js → notification-DRPjMDli.js} +2 -2
- package/dist/{notification-ChAvNXf3.js.map → notification-DRPjMDli.js.map} +1 -1
- package/dist/{notification-DPUkuifB.cjs → notification-DqWW2oh9.cjs} +1 -1
- package/dist/{notification-DPUkuifB.cjs.map → notification-DqWW2oh9.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-OIp0joyN.cjs → option-1lYctKVI.cjs} +1 -1
- package/dist/{option-OIp0joyN.cjs.map → option-1lYctKVI.cjs.map} +1 -1
- package/dist/{option-Ci7C8xxh.js → option-N3wlHTc9.js} +1 -1
- package/dist/{option-Ci7C8xxh.js.map → option-N3wlHTc9.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/overlay.cjs +1 -1
- package/dist/overlay.js +1 -1
- package/dist/page.cjs +1 -1
- package/dist/page.js +2 -2
- package/dist/{progress-DGkwPgDX.js → progress-DhcXo8r-.js} +1 -1
- package/dist/{progress-DGkwPgDX.js.map → progress-DhcXo8r-.js.map} +1 -1
- package/dist/{progress-32Cad1NX.cjs → progress-YOuASkdz.cjs} +1 -1
- package/dist/{progress-32Cad1NX.cjs.map → progress-YOuASkdz.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-MvHcXKzT.cjs → provide-B7b5TOCD.cjs} +1 -1
- package/dist/{provide-MvHcXKzT.cjs.map → provide-B7b5TOCD.cjs.map} +1 -1
- package/dist/{provide-BuzyBLGj.js → provide-uCFRzgWs.js} +1 -1
- package/dist/{provide-BuzyBLGj.js.map → provide-uCFRzgWs.js.map} +1 -1
- package/dist/qr-scanner.cjs +5 -5
- package/dist/qr-scanner.cjs.map +1 -1
- package/dist/qr-scanner.js +11 -7
- package/dist/qr-scanner.js.map +1 -1
- package/dist/{radio-group-B7DuNxUq.cjs → radio-group-DYvIgv3P.cjs} +1 -1
- package/dist/{radio-group-B7DuNxUq.cjs.map → radio-group-DYvIgv3P.cjs.map} +1 -1
- package/dist/{radio-group-B72sYGnS.js → radio-group-DchZApJl.js} +1 -1
- package/dist/{radio-group-B72sYGnS.js.map → radio-group-DchZApJl.js.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-V1rAZ9fK.cjs → scroll-BKn4essm.cjs} +1 -1
- package/dist/{scroll-V1rAZ9fK.cjs.map → scroll-BKn4essm.cjs.map} +1 -1
- package/dist/{scroll-CdmXRXh2.js → scroll-G2YnteF9.js} +1 -1
- package/dist/{scroll-CdmXRXh2.js.map → scroll-G2YnteF9.js.map} +1 -1
- package/dist/{select-wFDKDLQI.js → select-Bydjuia9.js} +1 -1
- package/dist/{select-wFDKDLQI.js.map → select-Bydjuia9.js.map} +1 -1
- package/dist/{select-DFxoBgEf.cjs → select-CQGKkEZc.cjs} +1 -1
- package/dist/{select-DFxoBgEf.cjs.map → select-CQGKkEZc.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-DdlZhnDG.cjs → sheet-BCxpHT62.cjs} +1 -1
- package/dist/{sheet-DdlZhnDG.cjs.map → sheet-BCxpHT62.cjs.map} +1 -1
- package/dist/{sheet-LFVo5iN4.js → sheet-DGfh9VSs.js} +3 -3
- package/dist/{sheet-LFVo5iN4.js.map → sheet-DGfh9VSs.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-BfNDB0K0.cjs → sheet.service-B-RxqhpO.cjs} +1 -1
- package/dist/{sheet.service-BfNDB0K0.cjs.map → sheet.service-B-RxqhpO.cjs.map} +1 -1
- package/dist/{sheet.service-DQE7-_wq.js → sheet.service-Dy_fwQqQ.js} +1 -1
- package/dist/{sheet.service-DQE7-_wq.js.map → sheet.service-Dy_fwQqQ.js.map} +1 -1
- package/dist/skeleton.cjs +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/skills/SKILL.md +1 -1
- package/dist/skills/schmancy/SKILL.md +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{splash-screen-DteUfSV3.cjs → splash-screen-C2xsOEdx.cjs} +1 -1
- package/dist/{splash-screen-DteUfSV3.cjs.map → splash-screen-C2xsOEdx.cjs.map} +1 -1
- package/dist/{splash-screen-BHgb3c3Q.js → splash-screen-Clv-5vsb.js} +1 -1
- package/dist/{splash-screen-BHgb3c3Q.js.map → splash-screen-Clv-5vsb.js.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-Dw-PjtMH.js → src-B0jLOpqn.js} +39 -39
- package/dist/{src-Dw-PjtMH.js.map → src-B0jLOpqn.js.map} +1 -1
- package/dist/{src-sG7Ihf0e.cjs → src-C9DpHCWF.cjs} +1 -1
- package/dist/{src-sG7Ihf0e.cjs.map → src-C9DpHCWF.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +3 -3
- package/dist/{surface-0XM4DBaT.js → surface-BWcq30OL.js} +2 -2
- package/dist/{surface-0XM4DBaT.js.map → surface-BWcq30OL.js.map} +1 -1
- package/dist/{surface-B6DA01kL.cjs → surface-fEmoN08Y.cjs} +1 -1
- package/dist/{surface-B6DA01kL.cjs.map → surface-fEmoN08Y.cjs.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-Dwt66SR6.js → table-B8H-zioX.js} +1 -1
- package/dist/{table-Dwt66SR6.js.map → table-B8H-zioX.js.map} +1 -1
- package/dist/{table-DFlJhG5E.cjs → table-ChHS4xby.cjs} +1 -1
- package/dist/{table-DFlJhG5E.cjs.map → table-ChHS4xby.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-C7r4TqcX.js → tabs-DB5kSuGL.js} +2 -2
- package/dist/{tabs-C7r4TqcX.js.map → tabs-DB5kSuGL.js.map} +1 -1
- package/dist/{tabs-DZaLZUBy.cjs → tabs-DGmbqqBD.cjs} +1 -1
- package/dist/{tabs-DZaLZUBy.cjs.map → tabs-DGmbqqBD.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-BHX99hgX.cjs +2 -0
- package/dist/{tailwind.mixin-Bh58QnlW.cjs.map → tailwind.mixin-BHX99hgX.cjs.map} +1 -1
- package/dist/tailwind.mixin-DIEGVcl3.js +219 -0
- package/dist/{tailwind.mixin-H5Pn7vSJ.js.map → tailwind.mixin-DIEGVcl3.js.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-B2544vx9.cjs → textarea-CfQnghhD.cjs} +1 -1
- package/dist/{textarea-B2544vx9.cjs.map → textarea-CfQnghhD.cjs.map} +1 -1
- package/dist/{textarea-CS-KdSLz.js → textarea-O9A58OZA.js} +1 -1
- package/dist/{textarea-CS-KdSLz.js.map → textarea-O9A58OZA.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-DU5yXaV-.cjs → theme-BjnQjhR0.cjs} +1 -1
- package/dist/{theme-DU5yXaV-.cjs.map → theme-BjnQjhR0.cjs.map} +1 -1
- package/dist/{theme-Cq_c9IO3.js → theme-DvCKLRkt.js} +3 -3
- package/dist/{theme-Cq_c9IO3.js.map → theme-DvCKLRkt.js.map} +1 -1
- package/dist/{theme-button-OJl2ma0u.js → theme-button-ByImreDw.js} +1 -1
- package/dist/{theme-button-OJl2ma0u.js.map → theme-button-ByImreDw.js.map} +1 -1
- package/dist/{theme-button-CPujUbgV.cjs → theme-button-CaxDEneM.cjs} +1 -1
- package/dist/{theme-button-CPujUbgV.cjs.map → theme-button-CaxDEneM.cjs.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/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +3 -3
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/visually-hidden.cjs +1 -1
- package/dist/visually-hidden.js +1 -1
- package/dist/{window-Cjv2GqSN.cjs → window-BhrSdbk2.cjs} +1 -1
- package/dist/{window-Cjv2GqSN.cjs.map → window-BhrSdbk2.cjs.map} +1 -1
- package/dist/{window-BWecg8Ih.js → window-C8kImMiI.js} +1 -1
- package/dist/{window-BWecg8Ih.js.map → window-C8kImMiI.js.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/SKILL.md +1 -1
- package/src/qr-scanner/qr-scanner.ts +27 -2
- package/dist/context-CAYQh-mx.cjs +0 -1
- package/dist/context-D8Q66KPe.js +0 -3
- package/dist/tailwind.mixin-Bh58QnlW.cjs +0 -2
- package/dist/tailwind.mixin-H5Pn7vSJ.js +0 -219
- /package/dist/agent/{flow-3RrZM-e7.js → flow-CvG1fLW5.js} +0 -0
- /package/dist/agent/{vendor-highlight-BmnMldIa.js → vendor-highlight-Dow87ZL_.js} +0 -0
- /package/dist/agent/{vendor-jsqr-1wQ5xc49.js → vendor-jsqr-Bl4iAtKC.js} +0 -0
- /package/dist/agent/{vendor-material-color-33Mj762T.js → vendor-material-color-DcL7ZPxx.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailwind.mixin-H5Pn7vSJ.js","names":["s","t","t"],"sources":["../mixins/discovery.service.ts","../node_modules/@lit/context/lib/context-request-event.js","../node_modules/@lit/context/lib/create-context.js","../node_modules/@lit/context/lib/controllers/context-consumer.js","../node_modules/@lit/context/lib/decorators/consume.js","../src/theme/context.ts","../mixins/baseElement.ts","../mixins/tailwind.css?inline","../mixins/tailwind.mixin.ts"],"sourcesContent":["import { fromEvent, timer, race, Observable } from 'rxjs'\nimport { takeUntil, map, defaultIfEmpty, take } from 'rxjs/operators'\n\n/**\n * Global discovery event names\n */\nconst DISCOVER_EVENT = 'schmancy-discover'\nconst DISCOVER_RESPONSE_EVENT = 'schmancy-discover-response'\n\n/**\n * Discovery request detail\n */\ninterface DiscoverRequest {\n\tselector: string\n\trequestId: string\n}\n\n/**\n * Discovery response detail\n */\ninterface DiscoverResponse {\n\trequestId: string\n\telement: HTMLElement\n}\n\n/**\n * Discover a component in the DOM using the WhereAreYou/HereIAm pattern.\n *\n * @param componentTag - The tag name of the component to discover (e.g., 'schmancy-navigation-rail')\n * @param timeout - How long to wait for a response in milliseconds (default: 100)\n * @returns Observable that emits the discovered component or null if not found\n */\nexport function discoverComponent<T extends HTMLElement>(\n\tcomponentTag: string,\n\ttimeout = 100,\n): Observable<T | null> {\n\tconst whereAreYouEvent = `${componentTag}-where-are-you`\n\tconst hereIAmEvent = `${componentTag}-here-i-am`\n\n\treturn new Observable(subscriber => {\n\t\t// Listen for response first (you were right!)\n\t\tconst subscription = fromEvent<CustomEvent>(window, hereIAmEvent)\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(timer(timeout)),\n\t\t\t\tmap(e => e.detail.component as T),\n\t\t\t\tdefaultIfEmpty(null),\n\t\t\t)\n\t\t\t.subscribe(component => {\n\t\t\t\tsubscriber.next(component)\n\t\t\t\tsubscriber.complete()\n\t\t\t})\n\n\t\t// Then dispatch discovery request\n\t\twindow.dispatchEvent(\n\t\t\tnew CustomEvent(whereAreYouEvent, {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\n\t\t// Return cleanup function\n\t\treturn () => subscription.unsubscribe()\n\t})\n}\n\n/**\n * Discover any of multiple components using race.\n * Returns the first component that responds.\n *\n * @param componentTags - Array of component tag names to discover\n * @returns Observable that emits the first discovered component or null if none found\n */\nexport function discoverAnyComponent<T extends HTMLElement>(...componentTags: string[]): Observable<T | null> {\n\tif (componentTags.length === 0) {\n\t\treturn new Observable(subscriber => {\n\t\t\tsubscriber.next(null)\n\t\t\tsubscriber.complete()\n\t\t})\n\t}\n\n\treturn race(...componentTags.map(tag => discoverComponent<T>(tag)))\n}\n\n/**\n * Universal element discovery - finds ANY element by CSS selector across shadow DOM boundaries.\n * Uses event-based discovery pattern - no DOM traversal needed.\n *\n * How it works:\n * 1. Broadcasts a discovery request event on window\n * 2. All $LitElement components receive this event and check their shadow DOM\n * 3. If a match is found, they respond with the element\n *\n * @param selector - CSS selector (e.g., '#my-id', '.my-class', '[data-attr]')\n * @param timeout - How long to wait for a response in milliseconds (default: 150)\n * @returns Observable that emits the discovered element or null if not found\n *\n * @example\n * ```typescript\n * // Find element by ID across shadow boundaries\n * discoverElement('#app-card').subscribe(el => {\n * if (el) console.log('Found:', el)\n * })\n *\n * // Find element by class\n * discoverElement('.special-button').subscribe(el => {...})\n * ```\n */\nexport function discoverElement<T extends HTMLElement>(\n\tselector: string,\n\ttimeout = 150,\n): Observable<T | null> {\n\tconst requestId = `discover-${Date.now()}-${Math.random().toString(36).slice(2)}`\n\n\treturn new Observable(subscriber => {\n\t\t// Listen for response first\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(timer(timeout)),\n\t\t\t\tmap(e => e.detail),\n\t\t\t\t// Filter for our specific request\n\t\t\t\tmap(detail => (detail.requestId === requestId ? (detail.element as T) : null)),\n\t\t\t\t// Only take the first non-null response\n\t\t\t\ttake(1),\n\t\t\t\tdefaultIfEmpty(null),\n\t\t\t)\n\t\t\t.subscribe(element => {\n\t\t\t\tsubscriber.next(element)\n\t\t\t\tsubscriber.complete()\n\t\t\t})\n\n\t\t// Broadcast discovery request\n\t\twindow.dispatchEvent(\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\n\t\t\t\tdetail: { selector, requestId },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\n\t\treturn () => subscription.unsubscribe()\n\t})\n}\n\n/**\n * Discover multiple elements matching a selector.\n * Collects all responses within the timeout period.\n *\n * @param selector - CSS selector\n * @param timeout - How long to collect responses (default: 150ms)\n * @returns Observable that emits array of discovered elements\n */\nexport function discoverAllElements<T extends HTMLElement>(\n\tselector: string,\n\ttimeout = 150,\n): Observable<T[]> {\n\tconst requestId = `discover-all-${Date.now()}-${Math.random().toString(36).slice(2)}`\n\tconst elements: T[] = []\n\n\treturn new Observable(subscriber => {\n\t\t// Collect all responses\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\n\t\t\t.pipe(takeUntil(timer(timeout)))\n\t\t\t.subscribe({\n\t\t\t\tnext: e => {\n\t\t\t\t\tif (e.detail.requestId === requestId) {\n\t\t\t\t\t\telements.push(e.detail.element as T)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tsubscriber.next(elements)\n\t\t\t\t\tsubscriber.complete()\n\t\t\t\t},\n\t\t\t})\n\n\t\t// Broadcast discovery request\n\t\twindow.dispatchEvent(\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\n\t\t\t\tdetail: { selector, requestId },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\n\t\treturn () => subscription.unsubscribe()\n\t})\n}\n\n/**\n * Smart discovery - automatically detects if input is a CSS selector or component tag.\n *\n * @param query - CSS selector (starts with #, ., [) OR component tag name\n * @param timeout - How long to wait (default: 150ms)\n * @returns Observable that emits the discovered element or null\n *\n * @example\n * ```typescript\n * // CSS selector - uses discoverElement\n * discover('#my-element').subscribe(...)\n *\n * // Component tag - uses discoverComponent\n * discover('schmancy-fancy').subscribe(...)\n * ```\n */\nexport function discover<T extends HTMLElement>(\n\tquery: string,\n\ttimeout = 150,\n): Observable<T | null> {\n\t// Check if it's a CSS selector (starts with #, ., or [)\n\tconst isCssSelector = /^[#.\\[]/.test(query)\n\n\tif (isCssSelector) {\n\t\treturn discoverElement<T>(query, timeout)\n\t}\n\n\t// Otherwise treat as component tag name\n\treturn discoverComponent<T>(query, timeout)\n}\n\n// Export event names for use in baseElement\nexport { DISCOVER_EVENT, DISCOVER_RESPONSE_EVENT }\nexport type { DiscoverRequest, DiscoverResponse }\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nclass s extends Event{constructor(s,t,e,o){super(\"context-request\",{bubbles:!0,composed:!0}),this.context=s,this.contextTarget=t,this.callback=e,this.subscribe=o??!1}}export{s as ContextRequestEvent};\n//# sourceMappingURL=context-request-event.js.map\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction n(n){return n}export{n as createContext};\n//# sourceMappingURL=create-context.js.map\n","import{ContextRequestEvent as t}from\"../context-request-event.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class s{constructor(t,s,i,h){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(t,s)=>{this.unsubscribe&&(this.unsubscribe!==s&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=t,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(t,s)),this.unsubscribe=s},this.host=t,void 0!==s.context){const t=s;this.context=t.context,this.callback=t.callback,this.subscribe=t.subscribe??!1}else this.context=s,this.callback=i,this.subscribe=h??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new t(this.context,this.host,this.t,this.subscribe))}}export{s as ContextConsumer};\n//# sourceMappingURL=context-consumer.js.map\n","import{ContextConsumer as t}from\"../controllers/context-consumer.js\";\n/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function c({context:c,subscribe:e}){return(o,n)=>{\"object\"==typeof n?n.addInitializer((function(){new t(this,{context:c,callback:t=>{o.set.call(this,t)},subscribe:e})})):o.constructor.addInitializer((o=>{new t(o,{context:c,callback:t=>{o[n]=t},subscribe:e})}))}}export{c as consume};\n//# sourceMappingURL=consume.js.map\n","import { createContext } from '@lit/context'\nimport { TSchmancyTheme } from './theme.interface'\n\n/**\n * Lit Context for sharing theme configuration across components.\\n *\n * This context is provided by SchmancyThemeComponent and can be consumed\n * by any child component to access the current theme configuration.\n *\n * @type {Context<Partial<TSchmancyTheme>>}\n *\n * @example\n * ```typescript\n * import { consume } from '@lit/context'\n * import { themeContext } from '@schmancy/theme'\n *\n * class MyComponent extends LitElement {\n * @consume({ context: themeContext })\n * theme?: Partial<TSchmancyTheme>\n *\n * render() {\n * // Access theme variables\n * const primaryColor = this.theme?.sys?.color?.primary?.default\n * // ...\n * }\n * }\n * ```\n */\nexport const themeContext = createContext<Partial<TSchmancyTheme>>('theme-context')\n","import type { Constructor } from './constructor'\nimport { LitElement } from 'lit'\nimport { Subject, fromEvent, Observable } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { discoverComponent, DISCOVER_EVENT, DISCOVER_RESPONSE_EVENT, type DiscoverRequest } from './discovery.service'\nimport { consume } from '@lit/context'\nimport { themeContext } from '../src/theme/context'\nimport type { TSchmancyTheme } from '../src/theme/theme.interface'\n\nexport declare class IBaseMixin {\n\tdisconnecting: Subject<boolean>\n\tclassMap: typeof classMap\n\tstyleMap: typeof styleMap\n\tdiscover<T extends HTMLElement>(tag: string): Observable<T | null>\n\treadonly stableId: string\n\tuid: string\n\t/**\n\t * Current locale from theme context. Use with Intl.NumberFormat/DateTimeFormat.\n\t * Defaults to navigator.language if no theme provider is found.\n\t * @example new Intl.NumberFormat(this.locale).format(1234.56)\n\t */\n\treadonly locale: string\n\tdispatchScopedEvent<T>(eventName: string, detail?: T, options?: { bubbles?: boolean; composed?: boolean }): void\n}\n\nexport const BaseElement = <T extends Constructor<LitElement>>(superClass: T) => {\n\tclass BaseElement extends superClass {\n\t\tdisconnecting = new Subject<boolean>()\n\t\tprivate _stableId?: string\n\t\tprivate _uid?: string\n\n\t\t@consume({ context: themeContext, subscribe: true })\n\t\tprivate _theme?: Partial<TSchmancyTheme>\n\n\t\t/** Current locale from theme context. Falls back to navigator.language. */\n\t\tget locale(): string {\n\t\t\treturn this._theme?.locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'de-DE')\n\t\t}\n\n\t\t/** Stable ID from DOM path - lazy, only computed on first access */\n\t\tget stableId(): string {\n\t\t\tif (this._stableId) return this._stableId\n\t\t\tconst path: string[] = []\n\t\t\tfor (let el: Element | null = this; el?.parentElement && path.length < 5; el = el.parentElement) {\n\t\t\t\tconst tag = el.tagName.toLowerCase()\n\t\t\t\tconst siblings = Array.from(el.parentElement.children).filter(c => c.tagName === el!.tagName)\n\t\t\t\tpath.unshift(siblings.length > 1 ? `${tag}:nth-of-type(${siblings.indexOf(el) + 1})` : tag)\n\t\t\t}\n\t\t\tconst hash = Array.from(path.join('>')).reduce((h, c) => Math.imul(31, h) + c.charCodeAt(0) | 0, 0)\n\t\t\treturn this._stableId = `el-${Math.abs(hash).toString(36)}`\n\t\t}\n\n\t\t/**\n\t\t * Unique instance ID - can be overridden via attribute, otherwise auto-generated.\n\t\t * Usage: <my-component uid=\"custom-id\"> or let it auto-generate\n\t\t */\n\t\tget uid(): string {\n\t\t\t// Check if uid was set via attribute\n\t\t\tconst attrUid = this.getAttribute('uid')\n\t\t\tif (attrUid) return attrUid\n\n\t\t\t// Auto-generate if not set\n\t\t\tif (!this._uid) {\n\t\t\t\tthis._uid = `el-${crypto.randomUUID()}`\n\t\t\t}\n\t\t\treturn this._uid\n\t\t}\n\n\t\tset uid(value: string) {\n\t\t\tif (value) {\n\t\t\t\tthis.setAttribute('uid', value)\n\t\t\t} else {\n\t\t\t\tthis.removeAttribute('uid')\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Dispatch an event scoped to this component instance.\n\t\t * Emits BOTH scoped event (eventName::uid) and generic event for backward compatibility.\n\t\t * This prevents event collision between multiple instances of the same component.\n\t\t */\n\t\tdispatchScopedEvent<T>(eventName: string, detail?: T, options: { bubbles?: boolean; composed?: boolean } = {}): void {\n\t\t\tconst { bubbles = false, composed = true } = options\n\n\t\t\t// Emit scoped event for new code\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent(`${eventName}::${this.uid}`, {\n\t\t\t\t\tdetail,\n\t\t\t\t\tbubbles,\n\t\t\t\t\tcomposed,\n\t\t\t\t})\n\t\t\t)\n\n\t\t\t// Emit generic event for backward compatibility\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent(eventName, {\n\t\t\t\t\tdetail,\n\t\t\t\t\tbubbles,\n\t\t\t\t\tcomposed,\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\n\t\tclassMap(classes: Record<string, boolean>) {\n\t\t\tconst newClasses: Record<string, boolean> = {}\n\t\t\tObject.keys(classes).forEach(key => {\n\t\t\t\tkey\n\t\t\t\t\t.trim()\n\t\t\t\t\t.split(' ')\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.forEach(k => {\n\t\t\t\t\t\tnewClasses[k] = classes[key]\n\t\t\t\t\t})\n\t\t\t})\n\t\t\treturn classMap(newClasses)\n\t\t}\n\n\t\tstyleMap(styles: Record<string, string | number>) {\n\t\t\treturn styleMap(styles)\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tsuper.connectedCallback()\n\t\t\tthis.setupDiscoveryResponse()\n\t\t}\n\n\t\tprivate setupDiscoveryResponse() {\n\t\t\tconst tagName = this.tagName.toLowerCase()\n\t\t\tconst whereAreYouEvent = `${tagName}-where-are-you`\n\t\t\tconst hereIAmEvent = `${tagName}-here-i-am`\n\n\t\t\t// 1. Component tag discovery (e.g., 'schmancy-fancy-where-are-you')\n\t\t\tfromEvent(window, whereAreYouEvent)\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent(hereIAmEvent, {\n\t\t\t\t\t\t\tdetail: { component: this },\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t})\n\n\t\t\t// 2. CSS selector discovery (e.g., '#app-card', '.my-class', '[uid=\"xyz\"]')\n\t\t\tfromEvent<CustomEvent<DiscoverRequest>>(window, DISCOVER_EVENT)\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(({ detail: { selector, requestId } }) => {\n\t\t\t\t\tlet found: Element | null = null\n\n\t\t\t\t\t// Check if selector matches this component's id or uid\n\t\t\t\t\tif (selector.startsWith('#')) {\n\t\t\t\t\t\tconst id = selector.slice(1)\n\t\t\t\t\t\tif (this.id === id || this.uid === id) {\n\t\t\t\t\t\t\tfound = this\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check our shadow DOM for matching element\n\t\t\t\t\tif (!found && this.shadowRoot) {\n\t\t\t\t\t\tfound = this.shadowRoot.querySelector(selector)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (found) {\n\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\tnew CustomEvent(DISCOVER_RESPONSE_EVENT, {\n\t\t\t\t\t\t\t\tdetail: { requestId, element: found },\n\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\t// Make discover public to match the interface\n\t\tdiscover<T extends HTMLElement>(tag: string): Observable<T | null> {\n\t\t\treturn discoverComponent<T>(tag)\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.disconnecting.next(true)\n\t\t\tthis.disconnecting.complete()\n\t\t\tsuper.disconnectedCallback()\n\t\t}\n\t}\n\treturn BaseElement as Constructor<IBaseMixin> & T\n}\n","@import 'tailwindcss';\n\n/* Tell Tailwind's content scanner to also look at the library source,\n which lives one level up from this file. Without this, consumers whose\n Vite root sits outside the library (e.g. the demo at `/demo/`) only get\n utilities for classes typed in their own source — library classes like\n `bg-primary-default`, `border-outline`, `text-primary-on` silently no-op. */\n@source \"../src/**/*.{ts,tsx,js,jsx,html}\";\n\n/* Cascade-layer order contract. Consumer (unlayered) CSS always overrides\n library styles regardless of specificity. Library-internal tokens and\n components live in named layers so consumers can target them precisely. */\n@layer schmancy.tokens, schmancy.base, schmancy.components;\n\n@layer schmancy.base {\n:host,\n:root {\n\tfont-family: var(--schmancy-font-family);\n\t/* Advertise both schemes so UA form controls, scrollbars, and\n\t `light-dark()` all render correctly until a theme resolves it. */\n\tcolor-scheme: light dark;\n}\n:host,\n:host *,\n* {\n\t/* pan-x pan-y allows scrolling but disables pinch-zoom */\n\ttouch-action: pan-x pan-y;\n}\n\n/* Interactive: luminous lift on hover, spring compress on active */\n.interactive {\n\ttransition:\n\t\ttransform 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\tbox-shadow 400ms ease,\n\t\tfilter 200ms ease;\n}\n.interactive:hover {\n\ttransform: translateY(-1px);\n\tfilter: brightness(1.03);\n\tbox-shadow: 0 4px 20px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);\n}\n.interactive:active {\n\ttransform: scale(0.97);\n\tfilter: brightness(0.96);\n\tbox-shadow: none;\n\ttransition-duration: 100ms;\n}\n@media (prefers-reduced-motion: reduce) {\n\t.interactive { transition: filter 150ms ease; }\n\t.interactive:hover { transform: none; box-shadow: none; }\n\t.interactive:active { transform: none; }\n}\n@theme inline {\n\t--md-ref-typeface-brand: var(--schmancy-font-family);\n\t--md-ref-typeface-plain: var(--schmancy-font-family);\n\t--md-sys-color-primary: var(--schmancy-sys-color-primary-default);\n\t--md-sys-color-secondary: var(--schmancy-sys-color-secondary-default);\n\n\t--*: initial;\n\t--border-style: solid;\n\t--spacing: 4px;\n\t--color-scrim: var(--schmancy-sys-color-scrim);\n\t--color-outline-default: var(--schmancy-sys-color-outline);\n\t--color-outline-variant: var(--schmancy-sys-color-outlineVariant);\n\t/* Shorthand alias */\n\t--color-outline: var(--schmancy-sys-color-outline);\n\t--color-surface-default: var(--schmancy-sys-color-surface-default);\n\t--color-surface-dim: var(--schmancy-sys-color-surface-dim);\n\t--color-surface-bright: var(--schmancy-sys-color-surface-bright);\n\t--color-surface-container: var(--schmancy-sys-color-surface-container);\n\t--color-surface-low: var(--schmancy-sys-color-surface-low);\n\t--color-surface-high: var(--schmancy-sys-color-surface-high);\n\t--color-surface-highest: var(--schmancy-sys-color-surface-highest);\n\t--color-surface-lowest: var(--schmancy-sys-color-surface-lowest);\n\t/* CamelCase variants for Tailwind compatibility */\n\t--color-surface-containerLow: var(--schmancy-sys-color-surface-containerLow);\n\t--color-surface-containerHigh: var(--schmancy-sys-color-surface-containerHigh);\n\t--color-surface-containerLowest: var(--schmancy-sys-color-surface-containerLowest);\n\t--color-surface-containerHighest: var(--schmancy-sys-color-surface-containerHighest);\n\t--color-surface-on: var(--schmancy-sys-color-surface-on);\n\t--color-surface-on-variant: var(--schmancy-sys-color-surface-onVariant);\n\t--color-primary-default: var(--schmancy-sys-color-primary-default);\n\t--color-primary-on: var(--schmancy-sys-color-primary-on);\n\t--color-primary-container: var(--schmancy-sys-color-primary-container);\n\t--color-primary-on-container: var(--schmancy-sys-color-primary-onContainer);\n\t--color-secondary-default: var(--schmancy-sys-color-secondary-default);\n\t--color-secondary-on: var(--schmancy-sys-color-secondary-on);\n\t--color-secondary-container: var(--schmancy-sys-color-secondary-container);\n\t--color-secondary-on-container: var(--schmancy-sys-color-secondary-onContainer);\n\t--color-tertiary-default: var(--schmancy-sys-color-tertiary-default);\n\t--color-tertiary-on: var(--schmancy-sys-color-tertiary-on);\n\t--color-tertiary-container: var(--schmancy-sys-color-tertiary-container);\n\t--color-tertiary-on-container: var(--schmancy-sys-color-tertiary-onContainer);\n\t--color-error-default: var(--schmancy-sys-color-error-default);\n\t--color-error-on: var(--schmancy-sys-color-error-on);\n\t--color-error-container: var(--schmancy-sys-color-error-container);\n\t--color-error-on-container: var(--schmancy-sys-color-error-onContainer);\n\t--color-success-default: var(--schmancy-sys-color-success-default);\n\t--color-success-on: var(--schmancy-sys-color-success-on);\n\t--color-success-container: var(--schmancy-sys-color-success-container);\n\t--color-success-on-container: var(--schmancy-sys-color-success-onContainer);\n\t--color-warning-default: var(--schmancy-sys-color-warning-default);\n\t--color-warning-on: var(--schmancy-sys-color-warning-on);\n\t--color-warning-container: var(--schmancy-sys-color-warning-container);\n\t--color-warning-on-container: var(--schmancy-sys-color-warning-onContainer);\n\t--color-info-default: var(--schmancy-sys-color-info-default);\n\t--color-info-on: var(--schmancy-sys-color-info-on);\n\t--color-info-container: var(--schmancy-sys-color-info-container);\n\t--color-info-on-container: var(--schmancy-sys-color-info-onContainer);\n\n\t/* DEPRECATED: camelCase aliases for backward compatibility - use hyphenated format instead */\n\t--color-outlineVariant: var(--schmancy-sys-color-outlineVariant);\n\t--color-surface-onVariant: var(--schmancy-sys-color-surface-onVariant);\n\t--color-primary-onContainer: var(--schmancy-sys-color-primary-onContainer);\n\t--color-secondary-onContainer: var(--schmancy-sys-color-secondary-onContainer);\n\t--color-tertiary-onContainer: var(--schmancy-sys-color-tertiary-onContainer);\n\t--color-error-onContainer: var(--schmancy-sys-color-error-onContainer);\n\t--color-success-onContainer: var(--schmancy-sys-color-success-onContainer);\n\t--color-warning-onContainer: var(--schmancy-sys-color-warning-onContainer);\n\t--color-info-onContainer: var(--schmancy-sys-color-info-onContainer);\n\n\t/* Shorthand aliases (maps to -default variant) */\n\t--color-primary: var(--schmancy-sys-color-primary-default);\n\t--color-secondary: var(--schmancy-sys-color-secondary-default);\n\t--color-tertiary: var(--schmancy-sys-color-tertiary-default);\n\t--color-error: var(--schmancy-sys-color-error-default);\n\t--color-success: var(--schmancy-sys-color-success-default);\n\t--color-warning: var(--schmancy-sys-color-warning-default);\n\t--color-info: var(--schmancy-sys-color-info-default);\n\t--color-surface: var(--schmancy-sys-color-surface-default);\n\n\t--shadow-0: var(--schmancy-sys-elevation-0);\n\t--shadow-1: var(--schmancy-sys-elevation-1);\n\t--shadow-2: var(--schmancy-sys-elevation-2);\n\t--shadow-3: var(--schmancy-sys-elevation-3);\n\t--shadow-4: var(--schmancy-sys-elevation-4);\n\t--shadow-5: var(--schmancy-sys-elevation-5);\n\t--outline-1: var(--schmancy-sys-outline-1);\n\n\t/* Luminous glow elevation — light-based depth for futuristic UI\n\t Use shadow-glow-{1-5} classes. Glow intensifies with level. */\n\t--shadow-glow-1: 0 2px 12px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t--shadow-glow-2: 0 4px 20px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 22%, transparent);\n\t--shadow-glow-3: 0 8px 32px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 28%, transparent);\n\t--shadow-glow-4: 0 12px 44px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 35%, transparent);\n\t--shadow-glow-5: 0 20px 60px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 42%, transparent);\n\t--font-sans:\n\t\tvar(--schmancy-font-family), ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',\n\t\t'Segoe UI Symbol', 'Noto Color Emoji';\n\t--font-serif: var(--schmancy-font-family), ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;\n\t--font-mono:\n\t\tvar(--schmancy-font-family), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono',\n\t\t'Courier New', monospace;\n\t--color-black: #000;\n\t--color-white: #fff;\n\t--spacing: 0.25rem;\n\t--breakpoint-sm: 40rem;\n\t--breakpoint-md: 48rem;\n\t--breakpoint-lg: 64rem;\n\t--breakpoint-xl: 80rem;\n\t--breakpoint-2xl: 96rem;\n\t--container-3xs: 16rem;\n\t--container-2xs: 18rem;\n\t--container-xs: 20rem;\n\t--container-sm: 24rem;\n\t--container-md: 28rem;\n\t--container-lg: 32rem;\n\t--container-xl: 36rem;\n\t--container-2xl: 42rem;\n\t--container-3xl: 48rem;\n\t--container-4xl: 56rem;\n\t--container-5xl: 64rem;\n\t--container-6xl: 72rem;\n\t--container-7xl: 80rem;\n\t--text-xs: 0.75rem;\n\t--text-xs--line-height: calc(1 / 0.75);\n\t--text-sm: 0.875rem;\n\t--text-sm--line-height: calc(1.25 / 0.875);\n\t--text-base: 1rem;\n\t--text-base--line-height: calc(1.5 / 1);\n\t--text-lg: 1.125rem;\n\t--text-lg--line-height: calc(1.75 / 1.125);\n\t--text-xl: 1.25rem;\n\t--text-xl--line-height: calc(1.75 / 1.25);\n\t--text-2xl: 1.5rem;\n\t--text-2xl--line-height: calc(2 / 1.5);\n\t--text-3xl: 1.875rem;\n\t--text-3xl--line-height: calc(2.25 / 1.875);\n\t--text-4xl: 2.25rem;\n\t--text-4xl--line-height: calc(2.5 / 2.25);\n\t--text-5xl: 3rem;\n\t--text-5xl--line-height: 1;\n\t--text-6xl: 3.75rem;\n\t--text-6xl--line-height: 1;\n\t--text-7xl: 4.5rem;\n\t--text-7xl--line-height: 1;\n\t--text-8xl: 6rem;\n\t--text-8xl--line-height: 1;\n\t--text-9xl: 8rem;\n\t--text-9xl--line-height: 1;\n\t--font-weight-thin: 100;\n\t--font-weight-extralight: 200;\n\t--font-weight-light: 300;\n\t--font-weight-normal: 400;\n\t--font-weight-medium: 500;\n\t--font-weight-semibold: 600;\n\t--font-weight-bold: 700;\n\t--font-weight-extrabold: 800;\n\t--font-weight-black: 900;\n\t--tracking-tighter: -0.05em;\n\t--tracking-tight: -0.025em;\n\t--tracking-normal: 0em;\n\t--tracking-wide: 0.025em;\n\t--tracking-wider: 0.05em;\n\t--tracking-widest: 0.1em;\n\t--leading-tight: 1.25;\n\t--leading-snug: 1.375;\n\t--leading-normal: 1.5;\n\t--leading-relaxed: 1.625;\n\t--leading-loose: 2;\n\t--radius-xs: 0.125rem;\n\t--radius-sm: 0.25rem;\n\t--radius-md: 0.375rem;\n\t--radius-lg: 0.5rem;\n\t--radius-xl: 0.75rem;\n\t--radius-2xl: 1rem;\n\t--radius-3xl: 1.5rem;\n\t--radius-4xl: 2rem;\n\t--shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\n\t--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n\t--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n\t--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n\t--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n\t--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n\t--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\t--inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\n\t--inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\n\t--inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\n\t--drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\n\t--drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\n\t--drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\n\t--drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\n\t--drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\n\t--drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n\t--blur-xs: 4px;\n\t--blur-sm: 8px;\n\t--blur-md: 12px;\n\t--blur-lg: 16px;\n\t--blur-xl: 24px;\n\t--blur-2xl: 40px;\n\t--blur-3xl: 64px;\n\t--perspective-dramatic: 100px;\n\t--perspective-near: 300px;\n\t--perspective-normal: 500px;\n\t--perspective-midrange: 800px;\n\t--perspective-distant: 1200px;\n\t--aspect-video: 16 / 9;\n\t--ease-in: cubic-bezier(0.4, 0, 1, 1);\n\t--ease-out: cubic-bezier(0, 0, 0.2, 1);\n\t--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\t--animate-spin: spin 1s linear infinite;\n\t--animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n\t--animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n\t--animate-bounce: bounce 1s infinite;\n\t/* ========================================================================\n\t ANIMATION SYSTEM\n\n\t A comprehensive, reusable animation library organized by category.\n\t All animations use CSS custom properties for easy customization.\n\n\t NAMING CONVENTION:\n\t - Entrance animations: *-in (fade-in, slide-in, pop-in)\n\t - Exit animations: *-out (fade-out, slide-out)\n\t - Looping animations: descriptive name (float, pulse, shimmer)\n\n\t USAGE:\n\t - Use `animate-{name}` class in Tailwind\n\t - Combine with `opacity-0` for entrance animations\n\t - Use `animation-delay` via style attribute for staggered effects\n\t ======================================================================== */\n\n\t/* ------------------------------------------------------------------------\n\t TAILWIND DEFAULT ANIMATIONS\n\t Standard animations from Tailwind CSS\n\t ------------------------------------------------------------------------ */\n\t@keyframes spin {\n\t\tto { transform: rotate(360deg); }\n\t}\n\t@keyframes ping {\n\t\t75%, 100% { transform: scale(2); opacity: 0; }\n\t}\n\t@keyframes pulse {\n\t\t50% { opacity: 0.5; }\n\t}\n\t@keyframes bounce {\n\t\t0%, 100% {\n\t\t\ttransform: translateY(-25%);\n\t\t\tanimation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n\t\t}\n\t\t50% {\n\t\t\ttransform: none;\n\t\t\tanimation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n\t\t}\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t ENTRANCE ANIMATIONS\n\t One-shot animations for elements entering the viewport.\n\t All use `forwards` fill-mode to maintain end state.\n\t ------------------------------------------------------------------------ */\n\n\t/* Fade In - Simple opacity transition */\n\t--animate-fade-in: fade-in 0.5s ease forwards;\n\t@keyframes fade-in {\n\t\tfrom { opacity: 0; }\n\t\tto { opacity: 1; }\n\t}\n\n\t/* Fade In Up - Fade with upward movement (subtle) */\n\t--animate-fade-in-up: fade-in-up 0.5s ease forwards;\n\t@keyframes fade-in-up {\n\t\tfrom { opacity: 0; transform: translateY(20px); }\n\t\tto { opacity: 1; transform: translateY(0); }\n\t}\n\n\t/* Fade In Up Large - Fade with larger upward movement + scale */\n\t--animate-fade-in-up-lg: fade-in-up-lg 0.6s cubic-bezier(0.34, 1.2, 0.64, 1) forwards;\n\t@keyframes fade-in-up-lg {\n\t\tfrom { opacity: 0; transform: translateY(30px) scale(0.95); }\n\t\tto { opacity: 1; transform: translateY(0) scale(1); }\n\t}\n\n\t/* Slide In Left - Enter from left side */\n\t--animate-slide-in-left: slide-in-left 0.5s ease forwards;\n\t@keyframes slide-in-left {\n\t\tfrom { opacity: 0; transform: translateX(-30px); }\n\t\tto { opacity: 1; transform: translateX(0); }\n\t}\n\n\t/* Slide In Right - Enter from right side */\n\t--animate-slide-in-right: slide-in-right 0.5s ease forwards;\n\t@keyframes slide-in-right {\n\t\tfrom { opacity: 0; transform: translateX(30px); }\n\t\tto { opacity: 1; transform: translateX(0); }\n\t}\n\n\t/* Pop In - Scale up with bounce easing */\n\t--animate-pop-in: pop-in 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n\t@keyframes pop-in {\n\t\tfrom { opacity: 0; transform: scale(0.8); }\n\t\tto { opacity: 1; transform: scale(1); }\n\t}\n\n\t/* Expand In - Subtle scale + translate entrance */\n\t--animate-expand-in: expand-in 0.5s ease forwards;\n\t@keyframes expand-in {\n\t\tfrom { opacity: 0; transform: scale(0.95) translateY(10px); }\n\t\tto { opacity: 1; transform: scale(1) translateY(0); }\n\t}\n\n\t/* Converge In - Dramatic entrance with overshoot */\n\t--animate-converge-in: converge-in 0.8s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n\t@keyframes converge-in {\n\t\t0% { opacity: 0; transform: scale(0) translateY(50px); }\n\t\t60% { opacity: 1; transform: scale(1.1) translateY(-10px); }\n\t\t100% { opacity: 1; transform: scale(1) translateY(0); }\n\t}\n\n\t/* Spin In - Rotate + scale entrance */\n\t--animate-spin-in: spin-in 0.6s cubic-bezier(0.34, 1.2, 0.64, 1) forwards;\n\t@keyframes spin-in {\n\t\tfrom { opacity: 0; transform: scale(0) rotate(-180deg); }\n\t\tto { opacity: 1; transform: scale(1) rotate(0deg); }\n\t}\n\n\t/* Scatter In - Scale from 0 to partial opacity (for decorative elements) */\n\t--animate-scatter-in: scatter-in 1s ease forwards;\n\t@keyframes scatter-in {\n\t\tfrom { opacity: 0; transform: scale(0); }\n\t\tto { opacity: 0.2; transform: scale(1); }\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t LOOPING ANIMATIONS - PULSE VARIANTS\n\t Continuous pulsing effects for attention/status indicators.\n\t ------------------------------------------------------------------------ */\n\n\t/* Pulse Opacity - Simple opacity pulse */\n\t--animate-pulse-opacity: pulse-opacity 2s ease-in-out infinite;\n\t@keyframes pulse-opacity {\n\t\t0%, 100% { opacity: 1; }\n\t\t50% { opacity: 0.5; }\n\t}\n\n\t/* Pulse Scale - Scale + opacity pulse (for status dots) */\n\t--animate-pulse-scale: pulse-scale 1.5s ease infinite;\n\t@keyframes pulse-scale {\n\t\t0%, 100% { transform: scale(1); opacity: 1; }\n\t\t50% { transform: scale(1.3); opacity: 0.6; }\n\t}\n\n\t/* Pulse Glow - Scale + dynamic box-shadow (for highlighted elements) */\n\t--animate-pulse-glow: pulse-glow 2s ease infinite;\n\t@keyframes pulse-glow {\n\t\t0%, 100% {\n\t\t\ttransform: scale(1);\n\t\t\tbox-shadow: 0 0 20px var(--schmancy-sys-color-primary-default);\n\t\t}\n\t\t50% {\n\t\t\ttransform: scale(1.05);\n\t\t\tbox-shadow: 0 0 40px var(--schmancy-sys-color-primary-default);\n\t\t}\n\t}\n\n\t/* Pulse Ring - Expanding ring effect (for ripples) */\n\t--animate-pulse-ring: pulse-ring 2s ease-out infinite;\n\t@keyframes pulse-ring {\n\t\t0% { transform: scale(0.8); opacity: 0.6; }\n\t\t100% { transform: scale(2); opacity: 0; }\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t LOOPING ANIMATIONS - FLOAT VARIANTS\n\t Gentle floating/hovering effects for ambient motion.\n\t ------------------------------------------------------------------------ */\n\n\t/* Float - Simple vertical float */\n\t--animate-float: float 3s ease-in-out infinite;\n\t@keyframes float {\n\t\t0%, 100% { transform: translateY(0); }\n\t\t50% { transform: translateY(-8px); }\n\t}\n\n\t/* Float Particle - Vertical float with scale + opacity (for particles) */\n\t--animate-float-particle: float-particle 4s ease-in-out infinite;\n\t@keyframes float-particle {\n\t\t0%, 100% { transform: translateY(0) scale(1); opacity: 0.6; }\n\t\t50% { transform: translateY(-30px) scale(1.2); opacity: 0.3; }\n\t}\n\n\t/* Float Chaos - Multi-axis chaotic movement (for scattered elements) */\n\t--animate-float-chaos: float-chaos 8s ease-in-out infinite;\n\t@keyframes float-chaos {\n\t\t0% { transform: translateY(0) rotate(0deg) scale(1); }\n\t\t25% { transform: translateY(-30px) rotate(15deg) scale(1.1); }\n\t\t50% { transform: translateY(-10px) rotate(-10deg) scale(0.95); }\n\t\t75% { transform: translateY(-40px) rotate(8deg) scale(1.05); }\n\t\t100% { transform: translateY(0) rotate(0deg) scale(1); }\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t LOOPING ANIMATIONS - ROTATION\n\t Continuous rotation effects.\n\t ------------------------------------------------------------------------ */\n\n\t/* Rotate Orbit - Slow continuous rotation (for orbital elements) */\n\t--animate-rotate-orbit: rotate-orbit 20s linear infinite;\n\t@keyframes rotate-orbit {\n\t\tfrom { transform: rotate(0deg); }\n\t\tto { transform: rotate(360deg); }\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t LOOPING ANIMATIONS - MOVEMENT EFFECTS\n\t Horizontal/directional movement for progress/flow indicators.\n\t ------------------------------------------------------------------------ */\n\n\t/* Shimmer - Left-to-right shine effect (use with overflow:hidden) */\n\t--animate-shimmer: shimmer 2s ease-in-out infinite;\n\t@keyframes shimmer {\n\t\t0% { left: -100%; }\n\t\t50%, 100% { left: 100%; }\n\t}\n\n\t/* Scan Vertical - Top-to-bottom scanning line */\n\t--animate-scan-vertical: scan-vertical 2s ease-in-out infinite;\n\t@keyframes scan-vertical {\n\t\t0% { top: 0; opacity: 0; }\n\t\t10% { opacity: 1; }\n\t\t90% { opacity: 1; }\n\t\t100% { top: 100%; opacity: 0; }\n\t}\n\n\t/* Scan Horizontal - Left-to-right scanning */\n\t--animate-scan-horizontal: scan-horizontal 2s ease-in-out infinite;\n\t@keyframes scan-horizontal {\n\t\t0% { left: -100%; }\n\t\t100% { left: 100%; }\n\t}\n\n\t/* Flow - Continuous left-to-right flow (for progress connectors) */\n\t--animate-flow: flow 2s ease-in-out infinite;\n\t@keyframes flow {\n\t\t0% { left: -50%; }\n\t\t100% { left: 150%; }\n\t}\n\n\t/* Line Float - Horizontal line traversal with opacity (for decorative lines) */\n\t--animate-line-float: line-float 4s ease-in-out infinite;\n\t@keyframes line-float {\n\t\t0%, 100% { transform: translateX(-100%) scaleX(0.5); opacity: 0; }\n\t\t50% { transform: translateX(100%) scaleX(1); opacity: 0.3; }\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t KINETIC STATE — Physics-based feedback animations.\n\t UI communicates through motion, not icons.\n\t ------------------------------------------------------------------------ */\n\n\t/* Breathe — gentle living pulse for loading/active states */\n\t--animate-breathe: breathe 2.5s ease-in-out infinite;\n\t@keyframes breathe {\n\t\t0%, 100% { transform: scale(1); opacity: 1; }\n\t\t50% { transform: scale(1.015); opacity: 0.88; }\n\t}\n\n\t/* Glow Pulse — luminous throb for highlighted elements */\n\t--animate-glow-pulse: glow-pulse 2s ease-in-out infinite;\n\t@keyframes glow-pulse {\n\t\t0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--schmancy-sys-color-primary-default) 30%, transparent); }\n\t\t50% { box-shadow: 0 0 24px 4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent); }\n\t}\n\n\t/* Kinetic Shake — physics-damped error feedback */\n\t--animate-kinetic-shake: kinetic-shake 0.5s cubic-bezier(0.36, 0.07, 0.19, 0.97);\n\t@keyframes kinetic-shake {\n\t\t0%, 100% { transform: translateX(0); }\n\t\t10% { transform: translateX(-6px); }\n\t\t20% { transform: translateX(5px); }\n\t\t30% { transform: translateX(-4px); }\n\t\t40% { transform: translateX(3px); }\n\t\t50% { transform: translateX(-2px); }\n\t\t60% { transform: translateX(1px); }\n\t}\n\n\t/* Scale Tap — spring-physics tap response */\n\t--animate-scale-tap: scale-tap 250ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t@keyframes scale-tap {\n\t\t0% { transform: scale(1); }\n\t\t40% { transform: scale(0.94); }\n\t\t100% { transform: scale(1); }\n\t}\n\n\t/* Glow In — luminous entrance with depth */\n\t--animate-glow-in: glow-in 0.6s cubic-bezier(0.34, 1.2, 0.64, 1) forwards;\n\t@keyframes glow-in {\n\t\tfrom {\n\t\t\tbox-shadow: 0 0 0 0 transparent;\n\t\t\topacity: 0;\n\t\t\ttransform: scale(0.96);\n\t\t}\n\t\tto {\n\t\t\tbox-shadow: 0 8px 32px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 20%, transparent);\n\t\t\topacity: 1;\n\t\t\ttransform: scale(1);\n\t\t}\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t CUSTOM EASING CURVES\n\t Reusable timing functions for consistent animation feel.\n\t ------------------------------------------------------------------------ */\n\t--ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);\n\t--ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);\n\t--ease-snap: cubic-bezier(0.34, 1.2, 0.64, 1);\n}\n} /* end @layer schmancy.base */\n","import { CSSResult, LitElement, unsafeCSS } from 'lit'\n\nimport style from './tailwind.css?inline'\nimport { BaseElement, IBaseMixin } from './baseElement'\nimport { Constructor } from './constructor'\n\nexport declare class ITailwindElementMixin {\n\tstyles: (typeof CSSResult)[]\n}\n\nexport const tailwindStyles = unsafeCSS(style)\n\nconst TailwindElementBase = <T extends CSSResult>(componentStyle?: T) => {\n\tclass TailwindMixinClass extends LitElement {\n\t\tstatic styles = [unsafeCSS(componentStyle), tailwindStyles]\n\t}\n\treturn TailwindMixinClass as Constructor<LitElement> /* see \"typing the subclass\" below */\n}\n\nexport const TailwindElement = <T extends CSSResult>(componentStyle?: T) => {\n\tclass TailwindMixinClass extends BaseElement(TailwindElementBase(componentStyle)) {\n\t\tdisconnectedCallback = () => {\n\t\t\tsuper.disconnectedCallback()\n\t\t}\n\t}\n\treturn TailwindMixinClass as Constructor<CustomElementConstructor> &\n\t\tConstructor<ITailwindElementMixin> &\n\t\tConstructor<LitElement> &\n\t\tConstructor<IBaseMixin>\n}\n"],"x_google_ignoreList":[1,2,3,4],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tailwind.mixin-DIEGVcl3.js","names":["s","t","t"],"sources":["../mixins/discovery.service.ts","../node_modules/@lit/context/lib/context-request-event.js","../node_modules/@lit/context/lib/create-context.js","../node_modules/@lit/context/lib/controllers/context-consumer.js","../node_modules/@lit/context/lib/decorators/consume.js","../src/theme/context.ts","../mixins/baseElement.ts","../mixins/tailwind.css?inline","../mixins/tailwind.mixin.ts"],"sourcesContent":["import { fromEvent, timer, race, Observable } from 'rxjs'\nimport { takeUntil, map, defaultIfEmpty, take } from 'rxjs/operators'\n\n/**\n * Global discovery event names\n */\nconst DISCOVER_EVENT = 'schmancy-discover'\nconst DISCOVER_RESPONSE_EVENT = 'schmancy-discover-response'\n\n/**\n * Discovery request detail\n */\ninterface DiscoverRequest {\n\tselector: string\n\trequestId: string\n}\n\n/**\n * Discovery response detail\n */\ninterface DiscoverResponse {\n\trequestId: string\n\telement: HTMLElement\n}\n\n/**\n * Discover a component in the DOM using the WhereAreYou/HereIAm pattern.\n *\n * @param componentTag - The tag name of the component to discover (e.g., 'schmancy-navigation-rail')\n * @param timeout - How long to wait for a response in milliseconds (default: 100)\n * @returns Observable that emits the discovered component or null if not found\n */\nexport function discoverComponent<T extends HTMLElement>(\n\tcomponentTag: string,\n\ttimeout = 100,\n): Observable<T | null> {\n\tconst whereAreYouEvent = `${componentTag}-where-are-you`\n\tconst hereIAmEvent = `${componentTag}-here-i-am`\n\n\treturn new Observable(subscriber => {\n\t\t// Listen for response first (you were right!)\n\t\tconst subscription = fromEvent<CustomEvent>(window, hereIAmEvent)\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(timer(timeout)),\n\t\t\t\tmap(e => e.detail.component as T),\n\t\t\t\tdefaultIfEmpty(null),\n\t\t\t)\n\t\t\t.subscribe(component => {\n\t\t\t\tsubscriber.next(component)\n\t\t\t\tsubscriber.complete()\n\t\t\t})\n\n\t\t// Then dispatch discovery request\n\t\twindow.dispatchEvent(\n\t\t\tnew CustomEvent(whereAreYouEvent, {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\n\t\t// Return cleanup function\n\t\treturn () => subscription.unsubscribe()\n\t})\n}\n\n/**\n * Discover any of multiple components using race.\n * Returns the first component that responds.\n *\n * @param componentTags - Array of component tag names to discover\n * @returns Observable that emits the first discovered component or null if none found\n */\nexport function discoverAnyComponent<T extends HTMLElement>(...componentTags: string[]): Observable<T | null> {\n\tif (componentTags.length === 0) {\n\t\treturn new Observable(subscriber => {\n\t\t\tsubscriber.next(null)\n\t\t\tsubscriber.complete()\n\t\t})\n\t}\n\n\treturn race(...componentTags.map(tag => discoverComponent<T>(tag)))\n}\n\n/**\n * Universal element discovery - finds ANY element by CSS selector across shadow DOM boundaries.\n * Uses event-based discovery pattern - no DOM traversal needed.\n *\n * How it works:\n * 1. Broadcasts a discovery request event on window\n * 2. All $LitElement components receive this event and check their shadow DOM\n * 3. If a match is found, they respond with the element\n *\n * @param selector - CSS selector (e.g., '#my-id', '.my-class', '[data-attr]')\n * @param timeout - How long to wait for a response in milliseconds (default: 150)\n * @returns Observable that emits the discovered element or null if not found\n *\n * @example\n * ```typescript\n * // Find element by ID across shadow boundaries\n * discoverElement('#app-card').subscribe(el => {\n * if (el) console.log('Found:', el)\n * })\n *\n * // Find element by class\n * discoverElement('.special-button').subscribe(el => {...})\n * ```\n */\nexport function discoverElement<T extends HTMLElement>(\n\tselector: string,\n\ttimeout = 150,\n): Observable<T | null> {\n\tconst requestId = `discover-${Date.now()}-${Math.random().toString(36).slice(2)}`\n\n\treturn new Observable(subscriber => {\n\t\t// Listen for response first\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(timer(timeout)),\n\t\t\t\tmap(e => e.detail),\n\t\t\t\t// Filter for our specific request\n\t\t\t\tmap(detail => (detail.requestId === requestId ? (detail.element as T) : null)),\n\t\t\t\t// Only take the first non-null response\n\t\t\t\ttake(1),\n\t\t\t\tdefaultIfEmpty(null),\n\t\t\t)\n\t\t\t.subscribe(element => {\n\t\t\t\tsubscriber.next(element)\n\t\t\t\tsubscriber.complete()\n\t\t\t})\n\n\t\t// Broadcast discovery request\n\t\twindow.dispatchEvent(\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\n\t\t\t\tdetail: { selector, requestId },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\n\t\treturn () => subscription.unsubscribe()\n\t})\n}\n\n/**\n * Discover multiple elements matching a selector.\n * Collects all responses within the timeout period.\n *\n * @param selector - CSS selector\n * @param timeout - How long to collect responses (default: 150ms)\n * @returns Observable that emits array of discovered elements\n */\nexport function discoverAllElements<T extends HTMLElement>(\n\tselector: string,\n\ttimeout = 150,\n): Observable<T[]> {\n\tconst requestId = `discover-all-${Date.now()}-${Math.random().toString(36).slice(2)}`\n\tconst elements: T[] = []\n\n\treturn new Observable(subscriber => {\n\t\t// Collect all responses\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\n\t\t\t.pipe(takeUntil(timer(timeout)))\n\t\t\t.subscribe({\n\t\t\t\tnext: e => {\n\t\t\t\t\tif (e.detail.requestId === requestId) {\n\t\t\t\t\t\telements.push(e.detail.element as T)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tsubscriber.next(elements)\n\t\t\t\t\tsubscriber.complete()\n\t\t\t\t},\n\t\t\t})\n\n\t\t// Broadcast discovery request\n\t\twindow.dispatchEvent(\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\n\t\t\t\tdetail: { selector, requestId },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\n\t\treturn () => subscription.unsubscribe()\n\t})\n}\n\n/**\n * Smart discovery - automatically detects if input is a CSS selector or component tag.\n *\n * @param query - CSS selector (starts with #, ., [) OR component tag name\n * @param timeout - How long to wait (default: 150ms)\n * @returns Observable that emits the discovered element or null\n *\n * @example\n * ```typescript\n * // CSS selector - uses discoverElement\n * discover('#my-element').subscribe(...)\n *\n * // Component tag - uses discoverComponent\n * discover('schmancy-fancy').subscribe(...)\n * ```\n */\nexport function discover<T extends HTMLElement>(\n\tquery: string,\n\ttimeout = 150,\n): Observable<T | null> {\n\t// Check if it's a CSS selector (starts with #, ., or [)\n\tconst isCssSelector = /^[#.\\[]/.test(query)\n\n\tif (isCssSelector) {\n\t\treturn discoverElement<T>(query, timeout)\n\t}\n\n\t// Otherwise treat as component tag name\n\treturn discoverComponent<T>(query, timeout)\n}\n\n// Export event names for use in baseElement\nexport { DISCOVER_EVENT, DISCOVER_RESPONSE_EVENT }\nexport type { DiscoverRequest, DiscoverResponse }\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nclass s extends Event{constructor(s,t,e,o){super(\"context-request\",{bubbles:!0,composed:!0}),this.context=s,this.contextTarget=t,this.callback=e,this.subscribe=o??!1}}export{s as ContextRequestEvent};\n//# sourceMappingURL=context-request-event.js.map\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction n(n){return n}export{n as createContext};\n//# sourceMappingURL=create-context.js.map\n","import{ContextRequestEvent as t}from\"../context-request-event.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class s{constructor(t,s,i,h){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(t,s)=>{this.unsubscribe&&(this.unsubscribe!==s&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=t,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(t,s)),this.unsubscribe=s},this.host=t,void 0!==s.context){const t=s;this.context=t.context,this.callback=t.callback,this.subscribe=t.subscribe??!1}else this.context=s,this.callback=i,this.subscribe=h??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new t(this.context,this.host,this.t,this.subscribe))}}export{s as ContextConsumer};\n//# sourceMappingURL=context-consumer.js.map\n","import{ContextConsumer as t}from\"../controllers/context-consumer.js\";\n/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function c({context:c,subscribe:e}){return(o,n)=>{\"object\"==typeof n?n.addInitializer((function(){new t(this,{context:c,callback:t=>{o.set.call(this,t)},subscribe:e})})):o.constructor.addInitializer((o=>{new t(o,{context:c,callback:t=>{o[n]=t},subscribe:e})}))}}export{c as consume};\n//# sourceMappingURL=consume.js.map\n","import { createContext } from '@lit/context'\nimport { TSchmancyTheme } from './theme.interface'\n\n/**\n * Lit Context for sharing theme configuration across components.\\n *\n * This context is provided by SchmancyThemeComponent and can be consumed\n * by any child component to access the current theme configuration.\n *\n * @type {Context<Partial<TSchmancyTheme>>}\n *\n * @example\n * ```typescript\n * import { consume } from '@lit/context'\n * import { themeContext } from '@schmancy/theme'\n *\n * class MyComponent extends LitElement {\n * @consume({ context: themeContext })\n * theme?: Partial<TSchmancyTheme>\n *\n * render() {\n * // Access theme variables\n * const primaryColor = this.theme?.sys?.color?.primary?.default\n * // ...\n * }\n * }\n * ```\n */\nexport const themeContext = createContext<Partial<TSchmancyTheme>>('theme-context')\n","import type { Constructor } from './constructor'\nimport { LitElement } from 'lit'\nimport { Subject, fromEvent, Observable } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { discoverComponent, DISCOVER_EVENT, DISCOVER_RESPONSE_EVENT, type DiscoverRequest } from './discovery.service'\nimport { consume } from '@lit/context'\nimport { themeContext } from '../src/theme/context'\nimport type { TSchmancyTheme } from '../src/theme/theme.interface'\n\nexport declare class IBaseMixin {\n\tdisconnecting: Subject<boolean>\n\tclassMap: typeof classMap\n\tstyleMap: typeof styleMap\n\tdiscover<T extends HTMLElement>(tag: string): Observable<T | null>\n\treadonly stableId: string\n\tuid: string\n\t/**\n\t * Current locale from theme context. Use with Intl.NumberFormat/DateTimeFormat.\n\t * Defaults to navigator.language if no theme provider is found.\n\t * @example new Intl.NumberFormat(this.locale).format(1234.56)\n\t */\n\treadonly locale: string\n\tdispatchScopedEvent<T>(eventName: string, detail?: T, options?: { bubbles?: boolean; composed?: boolean }): void\n}\n\nexport const BaseElement = <T extends Constructor<LitElement>>(superClass: T) => {\n\tclass BaseElement extends superClass {\n\t\tdisconnecting = new Subject<boolean>()\n\t\tprivate _stableId?: string\n\t\tprivate _uid?: string\n\n\t\t@consume({ context: themeContext, subscribe: true })\n\t\tprivate _theme?: Partial<TSchmancyTheme>\n\n\t\t/** Current locale from theme context. Falls back to navigator.language. */\n\t\tget locale(): string {\n\t\t\treturn this._theme?.locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'de-DE')\n\t\t}\n\n\t\t/** Stable ID from DOM path - lazy, only computed on first access */\n\t\tget stableId(): string {\n\t\t\tif (this._stableId) return this._stableId\n\t\t\tconst path: string[] = []\n\t\t\tfor (let el: Element | null = this; el?.parentElement && path.length < 5; el = el.parentElement) {\n\t\t\t\tconst tag = el.tagName.toLowerCase()\n\t\t\t\tconst siblings = Array.from(el.parentElement.children).filter(c => c.tagName === el!.tagName)\n\t\t\t\tpath.unshift(siblings.length > 1 ? `${tag}:nth-of-type(${siblings.indexOf(el) + 1})` : tag)\n\t\t\t}\n\t\t\tconst hash = Array.from(path.join('>')).reduce((h, c) => Math.imul(31, h) + c.charCodeAt(0) | 0, 0)\n\t\t\treturn this._stableId = `el-${Math.abs(hash).toString(36)}`\n\t\t}\n\n\t\t/**\n\t\t * Unique instance ID - can be overridden via attribute, otherwise auto-generated.\n\t\t * Usage: <my-component uid=\"custom-id\"> or let it auto-generate\n\t\t */\n\t\tget uid(): string {\n\t\t\t// Check if uid was set via attribute\n\t\t\tconst attrUid = this.getAttribute('uid')\n\t\t\tif (attrUid) return attrUid\n\n\t\t\t// Auto-generate if not set\n\t\t\tif (!this._uid) {\n\t\t\t\tthis._uid = `el-${crypto.randomUUID()}`\n\t\t\t}\n\t\t\treturn this._uid\n\t\t}\n\n\t\tset uid(value: string) {\n\t\t\tif (value) {\n\t\t\t\tthis.setAttribute('uid', value)\n\t\t\t} else {\n\t\t\t\tthis.removeAttribute('uid')\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Dispatch an event scoped to this component instance.\n\t\t * Emits BOTH scoped event (eventName::uid) and generic event for backward compatibility.\n\t\t * This prevents event collision between multiple instances of the same component.\n\t\t */\n\t\tdispatchScopedEvent<T>(eventName: string, detail?: T, options: { bubbles?: boolean; composed?: boolean } = {}): void {\n\t\t\tconst { bubbles = false, composed = true } = options\n\n\t\t\t// Emit scoped event for new code\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent(`${eventName}::${this.uid}`, {\n\t\t\t\t\tdetail,\n\t\t\t\t\tbubbles,\n\t\t\t\t\tcomposed,\n\t\t\t\t})\n\t\t\t)\n\n\t\t\t// Emit generic event for backward compatibility\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent(eventName, {\n\t\t\t\t\tdetail,\n\t\t\t\t\tbubbles,\n\t\t\t\t\tcomposed,\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\n\t\tclassMap(classes: Record<string, boolean>) {\n\t\t\tconst newClasses: Record<string, boolean> = {}\n\t\t\tObject.keys(classes).forEach(key => {\n\t\t\t\tkey\n\t\t\t\t\t.trim()\n\t\t\t\t\t.split(' ')\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.forEach(k => {\n\t\t\t\t\t\tnewClasses[k] = classes[key]\n\t\t\t\t\t})\n\t\t\t})\n\t\t\treturn classMap(newClasses)\n\t\t}\n\n\t\tstyleMap(styles: Record<string, string | number>) {\n\t\t\treturn styleMap(styles)\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tsuper.connectedCallback()\n\t\t\tthis.setupDiscoveryResponse()\n\t\t}\n\n\t\tprivate setupDiscoveryResponse() {\n\t\t\tconst tagName = this.tagName.toLowerCase()\n\t\t\tconst whereAreYouEvent = `${tagName}-where-are-you`\n\t\t\tconst hereIAmEvent = `${tagName}-here-i-am`\n\n\t\t\t// 1. Component tag discovery (e.g., 'schmancy-fancy-where-are-you')\n\t\t\tfromEvent(window, whereAreYouEvent)\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent(hereIAmEvent, {\n\t\t\t\t\t\t\tdetail: { component: this },\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t})\n\n\t\t\t// 2. CSS selector discovery (e.g., '#app-card', '.my-class', '[uid=\"xyz\"]')\n\t\t\tfromEvent<CustomEvent<DiscoverRequest>>(window, DISCOVER_EVENT)\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(({ detail: { selector, requestId } }) => {\n\t\t\t\t\tlet found: Element | null = null\n\n\t\t\t\t\t// Check if selector matches this component's id or uid\n\t\t\t\t\tif (selector.startsWith('#')) {\n\t\t\t\t\t\tconst id = selector.slice(1)\n\t\t\t\t\t\tif (this.id === id || this.uid === id) {\n\t\t\t\t\t\t\tfound = this\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check our shadow DOM for matching element\n\t\t\t\t\tif (!found && this.shadowRoot) {\n\t\t\t\t\t\tfound = this.shadowRoot.querySelector(selector)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (found) {\n\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\tnew CustomEvent(DISCOVER_RESPONSE_EVENT, {\n\t\t\t\t\t\t\t\tdetail: { requestId, element: found },\n\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\t// Make discover public to match the interface\n\t\tdiscover<T extends HTMLElement>(tag: string): Observable<T | null> {\n\t\t\treturn discoverComponent<T>(tag)\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.disconnecting.next(true)\n\t\t\tthis.disconnecting.complete()\n\t\t\tsuper.disconnectedCallback()\n\t\t}\n\t}\n\treturn BaseElement as Constructor<IBaseMixin> & T\n}\n","@import 'tailwindcss';\n\n/* Tell Tailwind's content scanner to also look at the library source,\n which lives one level up from this file. Without this, consumers whose\n Vite root sits outside the library (e.g. the demo at `/demo/`) only get\n utilities for classes typed in their own source — library classes like\n `bg-primary-default`, `border-outline`, `text-primary-on` silently no-op. */\n@source \"../src/**/*.{ts,tsx,js,jsx,html}\";\n\n/* Cascade-layer order contract. Consumer (unlayered) CSS always overrides\n library styles regardless of specificity. Library-internal tokens and\n components live in named layers so consumers can target them precisely. */\n@layer schmancy.tokens, schmancy.base, schmancy.components;\n\n@layer schmancy.base {\n:host,\n:root {\n\tfont-family: var(--schmancy-font-family);\n\t/* Advertise both schemes so UA form controls, scrollbars, and\n\t `light-dark()` all render correctly until a theme resolves it. */\n\tcolor-scheme: light dark;\n}\n:host,\n:host *,\n* {\n\t/* pan-x pan-y allows scrolling but disables pinch-zoom */\n\ttouch-action: pan-x pan-y;\n}\n\n/* Interactive: luminous lift on hover, spring compress on active */\n.interactive {\n\ttransition:\n\t\ttransform 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\tbox-shadow 400ms ease,\n\t\tfilter 200ms ease;\n}\n.interactive:hover {\n\ttransform: translateY(-1px);\n\tfilter: brightness(1.03);\n\tbox-shadow: 0 4px 20px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);\n}\n.interactive:active {\n\ttransform: scale(0.97);\n\tfilter: brightness(0.96);\n\tbox-shadow: none;\n\ttransition-duration: 100ms;\n}\n@media (prefers-reduced-motion: reduce) {\n\t.interactive { transition: filter 150ms ease; }\n\t.interactive:hover { transform: none; box-shadow: none; }\n\t.interactive:active { transform: none; }\n}\n@theme inline {\n\t--md-ref-typeface-brand: var(--schmancy-font-family);\n\t--md-ref-typeface-plain: var(--schmancy-font-family);\n\t--md-sys-color-primary: var(--schmancy-sys-color-primary-default);\n\t--md-sys-color-secondary: var(--schmancy-sys-color-secondary-default);\n\n\t--*: initial;\n\t--border-style: solid;\n\t--spacing: 4px;\n\t--color-scrim: var(--schmancy-sys-color-scrim);\n\t--color-outline-default: var(--schmancy-sys-color-outline);\n\t--color-outline-variant: var(--schmancy-sys-color-outlineVariant);\n\t/* Shorthand alias */\n\t--color-outline: var(--schmancy-sys-color-outline);\n\t--color-surface-default: var(--schmancy-sys-color-surface-default);\n\t--color-surface-dim: var(--schmancy-sys-color-surface-dim);\n\t--color-surface-bright: var(--schmancy-sys-color-surface-bright);\n\t--color-surface-container: var(--schmancy-sys-color-surface-container);\n\t--color-surface-low: var(--schmancy-sys-color-surface-low);\n\t--color-surface-high: var(--schmancy-sys-color-surface-high);\n\t--color-surface-highest: var(--schmancy-sys-color-surface-highest);\n\t--color-surface-lowest: var(--schmancy-sys-color-surface-lowest);\n\t/* CamelCase variants for Tailwind compatibility */\n\t--color-surface-containerLow: var(--schmancy-sys-color-surface-containerLow);\n\t--color-surface-containerHigh: var(--schmancy-sys-color-surface-containerHigh);\n\t--color-surface-containerLowest: var(--schmancy-sys-color-surface-containerLowest);\n\t--color-surface-containerHighest: var(--schmancy-sys-color-surface-containerHighest);\n\t--color-surface-on: var(--schmancy-sys-color-surface-on);\n\t--color-surface-on-variant: var(--schmancy-sys-color-surface-onVariant);\n\t--color-primary-default: var(--schmancy-sys-color-primary-default);\n\t--color-primary-on: var(--schmancy-sys-color-primary-on);\n\t--color-primary-container: var(--schmancy-sys-color-primary-container);\n\t--color-primary-on-container: var(--schmancy-sys-color-primary-onContainer);\n\t--color-secondary-default: var(--schmancy-sys-color-secondary-default);\n\t--color-secondary-on: var(--schmancy-sys-color-secondary-on);\n\t--color-secondary-container: var(--schmancy-sys-color-secondary-container);\n\t--color-secondary-on-container: var(--schmancy-sys-color-secondary-onContainer);\n\t--color-tertiary-default: var(--schmancy-sys-color-tertiary-default);\n\t--color-tertiary-on: var(--schmancy-sys-color-tertiary-on);\n\t--color-tertiary-container: var(--schmancy-sys-color-tertiary-container);\n\t--color-tertiary-on-container: var(--schmancy-sys-color-tertiary-onContainer);\n\t--color-error-default: var(--schmancy-sys-color-error-default);\n\t--color-error-on: var(--schmancy-sys-color-error-on);\n\t--color-error-container: var(--schmancy-sys-color-error-container);\n\t--color-error-on-container: var(--schmancy-sys-color-error-onContainer);\n\t--color-success-default: var(--schmancy-sys-color-success-default);\n\t--color-success-on: var(--schmancy-sys-color-success-on);\n\t--color-success-container: var(--schmancy-sys-color-success-container);\n\t--color-success-on-container: var(--schmancy-sys-color-success-onContainer);\n\t--color-warning-default: var(--schmancy-sys-color-warning-default);\n\t--color-warning-on: var(--schmancy-sys-color-warning-on);\n\t--color-warning-container: var(--schmancy-sys-color-warning-container);\n\t--color-warning-on-container: var(--schmancy-sys-color-warning-onContainer);\n\t--color-info-default: var(--schmancy-sys-color-info-default);\n\t--color-info-on: var(--schmancy-sys-color-info-on);\n\t--color-info-container: var(--schmancy-sys-color-info-container);\n\t--color-info-on-container: var(--schmancy-sys-color-info-onContainer);\n\n\t/* DEPRECATED: camelCase aliases for backward compatibility - use hyphenated format instead */\n\t--color-outlineVariant: var(--schmancy-sys-color-outlineVariant);\n\t--color-surface-onVariant: var(--schmancy-sys-color-surface-onVariant);\n\t--color-primary-onContainer: var(--schmancy-sys-color-primary-onContainer);\n\t--color-secondary-onContainer: var(--schmancy-sys-color-secondary-onContainer);\n\t--color-tertiary-onContainer: var(--schmancy-sys-color-tertiary-onContainer);\n\t--color-error-onContainer: var(--schmancy-sys-color-error-onContainer);\n\t--color-success-onContainer: var(--schmancy-sys-color-success-onContainer);\n\t--color-warning-onContainer: var(--schmancy-sys-color-warning-onContainer);\n\t--color-info-onContainer: var(--schmancy-sys-color-info-onContainer);\n\n\t/* Shorthand aliases (maps to -default variant) */\n\t--color-primary: var(--schmancy-sys-color-primary-default);\n\t--color-secondary: var(--schmancy-sys-color-secondary-default);\n\t--color-tertiary: var(--schmancy-sys-color-tertiary-default);\n\t--color-error: var(--schmancy-sys-color-error-default);\n\t--color-success: var(--schmancy-sys-color-success-default);\n\t--color-warning: var(--schmancy-sys-color-warning-default);\n\t--color-info: var(--schmancy-sys-color-info-default);\n\t--color-surface: var(--schmancy-sys-color-surface-default);\n\n\t--shadow-0: var(--schmancy-sys-elevation-0);\n\t--shadow-1: var(--schmancy-sys-elevation-1);\n\t--shadow-2: var(--schmancy-sys-elevation-2);\n\t--shadow-3: var(--schmancy-sys-elevation-3);\n\t--shadow-4: var(--schmancy-sys-elevation-4);\n\t--shadow-5: var(--schmancy-sys-elevation-5);\n\t--outline-1: var(--schmancy-sys-outline-1);\n\n\t/* Luminous glow elevation — light-based depth for futuristic UI\n\t Use shadow-glow-{1-5} classes. Glow intensifies with level. */\n\t--shadow-glow-1: 0 2px 12px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t--shadow-glow-2: 0 4px 20px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 22%, transparent);\n\t--shadow-glow-3: 0 8px 32px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 28%, transparent);\n\t--shadow-glow-4: 0 12px 44px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 35%, transparent);\n\t--shadow-glow-5: 0 20px 60px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 42%, transparent);\n\t--font-sans:\n\t\tvar(--schmancy-font-family), ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',\n\t\t'Segoe UI Symbol', 'Noto Color Emoji';\n\t--font-serif: var(--schmancy-font-family), ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;\n\t--font-mono:\n\t\tvar(--schmancy-font-family), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono',\n\t\t'Courier New', monospace;\n\t--color-black: #000;\n\t--color-white: #fff;\n\t--spacing: 0.25rem;\n\t--breakpoint-sm: 40rem;\n\t--breakpoint-md: 48rem;\n\t--breakpoint-lg: 64rem;\n\t--breakpoint-xl: 80rem;\n\t--breakpoint-2xl: 96rem;\n\t--container-3xs: 16rem;\n\t--container-2xs: 18rem;\n\t--container-xs: 20rem;\n\t--container-sm: 24rem;\n\t--container-md: 28rem;\n\t--container-lg: 32rem;\n\t--container-xl: 36rem;\n\t--container-2xl: 42rem;\n\t--container-3xl: 48rem;\n\t--container-4xl: 56rem;\n\t--container-5xl: 64rem;\n\t--container-6xl: 72rem;\n\t--container-7xl: 80rem;\n\t--text-xs: 0.75rem;\n\t--text-xs--line-height: calc(1 / 0.75);\n\t--text-sm: 0.875rem;\n\t--text-sm--line-height: calc(1.25 / 0.875);\n\t--text-base: 1rem;\n\t--text-base--line-height: calc(1.5 / 1);\n\t--text-lg: 1.125rem;\n\t--text-lg--line-height: calc(1.75 / 1.125);\n\t--text-xl: 1.25rem;\n\t--text-xl--line-height: calc(1.75 / 1.25);\n\t--text-2xl: 1.5rem;\n\t--text-2xl--line-height: calc(2 / 1.5);\n\t--text-3xl: 1.875rem;\n\t--text-3xl--line-height: calc(2.25 / 1.875);\n\t--text-4xl: 2.25rem;\n\t--text-4xl--line-height: calc(2.5 / 2.25);\n\t--text-5xl: 3rem;\n\t--text-5xl--line-height: 1;\n\t--text-6xl: 3.75rem;\n\t--text-6xl--line-height: 1;\n\t--text-7xl: 4.5rem;\n\t--text-7xl--line-height: 1;\n\t--text-8xl: 6rem;\n\t--text-8xl--line-height: 1;\n\t--text-9xl: 8rem;\n\t--text-9xl--line-height: 1;\n\t--font-weight-thin: 100;\n\t--font-weight-extralight: 200;\n\t--font-weight-light: 300;\n\t--font-weight-normal: 400;\n\t--font-weight-medium: 500;\n\t--font-weight-semibold: 600;\n\t--font-weight-bold: 700;\n\t--font-weight-extrabold: 800;\n\t--font-weight-black: 900;\n\t--tracking-tighter: -0.05em;\n\t--tracking-tight: -0.025em;\n\t--tracking-normal: 0em;\n\t--tracking-wide: 0.025em;\n\t--tracking-wider: 0.05em;\n\t--tracking-widest: 0.1em;\n\t--leading-tight: 1.25;\n\t--leading-snug: 1.375;\n\t--leading-normal: 1.5;\n\t--leading-relaxed: 1.625;\n\t--leading-loose: 2;\n\t--radius-xs: 0.125rem;\n\t--radius-sm: 0.25rem;\n\t--radius-md: 0.375rem;\n\t--radius-lg: 0.5rem;\n\t--radius-xl: 0.75rem;\n\t--radius-2xl: 1rem;\n\t--radius-3xl: 1.5rem;\n\t--radius-4xl: 2rem;\n\t--shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\n\t--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n\t--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n\t--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n\t--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n\t--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n\t--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\t--inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\n\t--inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\n\t--inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\n\t--drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\n\t--drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\n\t--drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\n\t--drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\n\t--drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\n\t--drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n\t--blur-xs: 4px;\n\t--blur-sm: 8px;\n\t--blur-md: 12px;\n\t--blur-lg: 16px;\n\t--blur-xl: 24px;\n\t--blur-2xl: 40px;\n\t--blur-3xl: 64px;\n\t--perspective-dramatic: 100px;\n\t--perspective-near: 300px;\n\t--perspective-normal: 500px;\n\t--perspective-midrange: 800px;\n\t--perspective-distant: 1200px;\n\t--aspect-video: 16 / 9;\n\t--ease-in: cubic-bezier(0.4, 0, 1, 1);\n\t--ease-out: cubic-bezier(0, 0, 0.2, 1);\n\t--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\t--animate-spin: spin 1s linear infinite;\n\t--animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n\t--animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n\t--animate-bounce: bounce 1s infinite;\n\t/* ========================================================================\n\t ANIMATION SYSTEM\n\n\t A comprehensive, reusable animation library organized by category.\n\t All animations use CSS custom properties for easy customization.\n\n\t NAMING CONVENTION:\n\t - Entrance animations: *-in (fade-in, slide-in, pop-in)\n\t - Exit animations: *-out (fade-out, slide-out)\n\t - Looping animations: descriptive name (float, pulse, shimmer)\n\n\t USAGE:\n\t - Use `animate-{name}` class in Tailwind\n\t - Combine with `opacity-0` for entrance animations\n\t - Use `animation-delay` via style attribute for staggered effects\n\t ======================================================================== */\n\n\t/* ------------------------------------------------------------------------\n\t TAILWIND DEFAULT ANIMATIONS\n\t Standard animations from Tailwind CSS\n\t ------------------------------------------------------------------------ */\n\t@keyframes spin {\n\t\tto { transform: rotate(360deg); }\n\t}\n\t@keyframes ping {\n\t\t75%, 100% { transform: scale(2); opacity: 0; }\n\t}\n\t@keyframes pulse {\n\t\t50% { opacity: 0.5; }\n\t}\n\t@keyframes bounce {\n\t\t0%, 100% {\n\t\t\ttransform: translateY(-25%);\n\t\t\tanimation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n\t\t}\n\t\t50% {\n\t\t\ttransform: none;\n\t\t\tanimation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n\t\t}\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t ENTRANCE ANIMATIONS\n\t One-shot animations for elements entering the viewport.\n\t All use `forwards` fill-mode to maintain end state.\n\t ------------------------------------------------------------------------ */\n\n\t/* Fade In - Simple opacity transition */\n\t--animate-fade-in: fade-in 0.5s ease forwards;\n\t@keyframes fade-in {\n\t\tfrom { opacity: 0; }\n\t\tto { opacity: 1; }\n\t}\n\n\t/* Fade In Up - Fade with upward movement (subtle) */\n\t--animate-fade-in-up: fade-in-up 0.5s ease forwards;\n\t@keyframes fade-in-up {\n\t\tfrom { opacity: 0; transform: translateY(20px); }\n\t\tto { opacity: 1; transform: translateY(0); }\n\t}\n\n\t/* Fade In Up Large - Fade with larger upward movement + scale */\n\t--animate-fade-in-up-lg: fade-in-up-lg 0.6s cubic-bezier(0.34, 1.2, 0.64, 1) forwards;\n\t@keyframes fade-in-up-lg {\n\t\tfrom { opacity: 0; transform: translateY(30px) scale(0.95); }\n\t\tto { opacity: 1; transform: translateY(0) scale(1); }\n\t}\n\n\t/* Slide In Left - Enter from left side */\n\t--animate-slide-in-left: slide-in-left 0.5s ease forwards;\n\t@keyframes slide-in-left {\n\t\tfrom { opacity: 0; transform: translateX(-30px); }\n\t\tto { opacity: 1; transform: translateX(0); }\n\t}\n\n\t/* Slide In Right - Enter from right side */\n\t--animate-slide-in-right: slide-in-right 0.5s ease forwards;\n\t@keyframes slide-in-right {\n\t\tfrom { opacity: 0; transform: translateX(30px); }\n\t\tto { opacity: 1; transform: translateX(0); }\n\t}\n\n\t/* Pop In - Scale up with bounce easing */\n\t--animate-pop-in: pop-in 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n\t@keyframes pop-in {\n\t\tfrom { opacity: 0; transform: scale(0.8); }\n\t\tto { opacity: 1; transform: scale(1); }\n\t}\n\n\t/* Expand In - Subtle scale + translate entrance */\n\t--animate-expand-in: expand-in 0.5s ease forwards;\n\t@keyframes expand-in {\n\t\tfrom { opacity: 0; transform: scale(0.95) translateY(10px); }\n\t\tto { opacity: 1; transform: scale(1) translateY(0); }\n\t}\n\n\t/* Converge In - Dramatic entrance with overshoot */\n\t--animate-converge-in: converge-in 0.8s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n\t@keyframes converge-in {\n\t\t0% { opacity: 0; transform: scale(0) translateY(50px); }\n\t\t60% { opacity: 1; transform: scale(1.1) translateY(-10px); }\n\t\t100% { opacity: 1; transform: scale(1) translateY(0); }\n\t}\n\n\t/* Spin In - Rotate + scale entrance */\n\t--animate-spin-in: spin-in 0.6s cubic-bezier(0.34, 1.2, 0.64, 1) forwards;\n\t@keyframes spin-in {\n\t\tfrom { opacity: 0; transform: scale(0) rotate(-180deg); }\n\t\tto { opacity: 1; transform: scale(1) rotate(0deg); }\n\t}\n\n\t/* Scatter In - Scale from 0 to partial opacity (for decorative elements) */\n\t--animate-scatter-in: scatter-in 1s ease forwards;\n\t@keyframes scatter-in {\n\t\tfrom { opacity: 0; transform: scale(0); }\n\t\tto { opacity: 0.2; transform: scale(1); }\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t LOOPING ANIMATIONS - PULSE VARIANTS\n\t Continuous pulsing effects for attention/status indicators.\n\t ------------------------------------------------------------------------ */\n\n\t/* Pulse Opacity - Simple opacity pulse */\n\t--animate-pulse-opacity: pulse-opacity 2s ease-in-out infinite;\n\t@keyframes pulse-opacity {\n\t\t0%, 100% { opacity: 1; }\n\t\t50% { opacity: 0.5; }\n\t}\n\n\t/* Pulse Scale - Scale + opacity pulse (for status dots) */\n\t--animate-pulse-scale: pulse-scale 1.5s ease infinite;\n\t@keyframes pulse-scale {\n\t\t0%, 100% { transform: scale(1); opacity: 1; }\n\t\t50% { transform: scale(1.3); opacity: 0.6; }\n\t}\n\n\t/* Pulse Glow - Scale + dynamic box-shadow (for highlighted elements) */\n\t--animate-pulse-glow: pulse-glow 2s ease infinite;\n\t@keyframes pulse-glow {\n\t\t0%, 100% {\n\t\t\ttransform: scale(1);\n\t\t\tbox-shadow: 0 0 20px var(--schmancy-sys-color-primary-default);\n\t\t}\n\t\t50% {\n\t\t\ttransform: scale(1.05);\n\t\t\tbox-shadow: 0 0 40px var(--schmancy-sys-color-primary-default);\n\t\t}\n\t}\n\n\t/* Pulse Ring - Expanding ring effect (for ripples) */\n\t--animate-pulse-ring: pulse-ring 2s ease-out infinite;\n\t@keyframes pulse-ring {\n\t\t0% { transform: scale(0.8); opacity: 0.6; }\n\t\t100% { transform: scale(2); opacity: 0; }\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t LOOPING ANIMATIONS - FLOAT VARIANTS\n\t Gentle floating/hovering effects for ambient motion.\n\t ------------------------------------------------------------------------ */\n\n\t/* Float - Simple vertical float */\n\t--animate-float: float 3s ease-in-out infinite;\n\t@keyframes float {\n\t\t0%, 100% { transform: translateY(0); }\n\t\t50% { transform: translateY(-8px); }\n\t}\n\n\t/* Float Particle - Vertical float with scale + opacity (for particles) */\n\t--animate-float-particle: float-particle 4s ease-in-out infinite;\n\t@keyframes float-particle {\n\t\t0%, 100% { transform: translateY(0) scale(1); opacity: 0.6; }\n\t\t50% { transform: translateY(-30px) scale(1.2); opacity: 0.3; }\n\t}\n\n\t/* Float Chaos - Multi-axis chaotic movement (for scattered elements) */\n\t--animate-float-chaos: float-chaos 8s ease-in-out infinite;\n\t@keyframes float-chaos {\n\t\t0% { transform: translateY(0) rotate(0deg) scale(1); }\n\t\t25% { transform: translateY(-30px) rotate(15deg) scale(1.1); }\n\t\t50% { transform: translateY(-10px) rotate(-10deg) scale(0.95); }\n\t\t75% { transform: translateY(-40px) rotate(8deg) scale(1.05); }\n\t\t100% { transform: translateY(0) rotate(0deg) scale(1); }\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t LOOPING ANIMATIONS - ROTATION\n\t Continuous rotation effects.\n\t ------------------------------------------------------------------------ */\n\n\t/* Rotate Orbit - Slow continuous rotation (for orbital elements) */\n\t--animate-rotate-orbit: rotate-orbit 20s linear infinite;\n\t@keyframes rotate-orbit {\n\t\tfrom { transform: rotate(0deg); }\n\t\tto { transform: rotate(360deg); }\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t LOOPING ANIMATIONS - MOVEMENT EFFECTS\n\t Horizontal/directional movement for progress/flow indicators.\n\t ------------------------------------------------------------------------ */\n\n\t/* Shimmer - Left-to-right shine effect (use with overflow:hidden) */\n\t--animate-shimmer: shimmer 2s ease-in-out infinite;\n\t@keyframes shimmer {\n\t\t0% { left: -100%; }\n\t\t50%, 100% { left: 100%; }\n\t}\n\n\t/* Scan Vertical - Top-to-bottom scanning line */\n\t--animate-scan-vertical: scan-vertical 2s ease-in-out infinite;\n\t@keyframes scan-vertical {\n\t\t0% { top: 0; opacity: 0; }\n\t\t10% { opacity: 1; }\n\t\t90% { opacity: 1; }\n\t\t100% { top: 100%; opacity: 0; }\n\t}\n\n\t/* Scan Horizontal - Left-to-right scanning */\n\t--animate-scan-horizontal: scan-horizontal 2s ease-in-out infinite;\n\t@keyframes scan-horizontal {\n\t\t0% { left: -100%; }\n\t\t100% { left: 100%; }\n\t}\n\n\t/* Flow - Continuous left-to-right flow (for progress connectors) */\n\t--animate-flow: flow 2s ease-in-out infinite;\n\t@keyframes flow {\n\t\t0% { left: -50%; }\n\t\t100% { left: 150%; }\n\t}\n\n\t/* Line Float - Horizontal line traversal with opacity (for decorative lines) */\n\t--animate-line-float: line-float 4s ease-in-out infinite;\n\t@keyframes line-float {\n\t\t0%, 100% { transform: translateX(-100%) scaleX(0.5); opacity: 0; }\n\t\t50% { transform: translateX(100%) scaleX(1); opacity: 0.3; }\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t KINETIC STATE — Physics-based feedback animations.\n\t UI communicates through motion, not icons.\n\t ------------------------------------------------------------------------ */\n\n\t/* Breathe — gentle living pulse for loading/active states */\n\t--animate-breathe: breathe 2.5s ease-in-out infinite;\n\t@keyframes breathe {\n\t\t0%, 100% { transform: scale(1); opacity: 1; }\n\t\t50% { transform: scale(1.015); opacity: 0.88; }\n\t}\n\n\t/* Glow Pulse — luminous throb for highlighted elements */\n\t--animate-glow-pulse: glow-pulse 2s ease-in-out infinite;\n\t@keyframes glow-pulse {\n\t\t0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--schmancy-sys-color-primary-default) 30%, transparent); }\n\t\t50% { box-shadow: 0 0 24px 4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent); }\n\t}\n\n\t/* Kinetic Shake — physics-damped error feedback */\n\t--animate-kinetic-shake: kinetic-shake 0.5s cubic-bezier(0.36, 0.07, 0.19, 0.97);\n\t@keyframes kinetic-shake {\n\t\t0%, 100% { transform: translateX(0); }\n\t\t10% { transform: translateX(-6px); }\n\t\t20% { transform: translateX(5px); }\n\t\t30% { transform: translateX(-4px); }\n\t\t40% { transform: translateX(3px); }\n\t\t50% { transform: translateX(-2px); }\n\t\t60% { transform: translateX(1px); }\n\t}\n\n\t/* Scale Tap — spring-physics tap response */\n\t--animate-scale-tap: scale-tap 250ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t@keyframes scale-tap {\n\t\t0% { transform: scale(1); }\n\t\t40% { transform: scale(0.94); }\n\t\t100% { transform: scale(1); }\n\t}\n\n\t/* Glow In — luminous entrance with depth */\n\t--animate-glow-in: glow-in 0.6s cubic-bezier(0.34, 1.2, 0.64, 1) forwards;\n\t@keyframes glow-in {\n\t\tfrom {\n\t\t\tbox-shadow: 0 0 0 0 transparent;\n\t\t\topacity: 0;\n\t\t\ttransform: scale(0.96);\n\t\t}\n\t\tto {\n\t\t\tbox-shadow: 0 8px 32px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 20%, transparent);\n\t\t\topacity: 1;\n\t\t\ttransform: scale(1);\n\t\t}\n\t}\n\n\t/* ------------------------------------------------------------------------\n\t CUSTOM EASING CURVES\n\t Reusable timing functions for consistent animation feel.\n\t ------------------------------------------------------------------------ */\n\t--ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);\n\t--ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);\n\t--ease-snap: cubic-bezier(0.34, 1.2, 0.64, 1);\n}\n} /* end @layer schmancy.base */\n","import { CSSResult, LitElement, unsafeCSS } from 'lit'\n\nimport style from './tailwind.css?inline'\nimport { BaseElement, IBaseMixin } from './baseElement'\nimport { Constructor } from './constructor'\n\nexport declare class ITailwindElementMixin {\n\tstyles: (typeof CSSResult)[]\n}\n\nexport const tailwindStyles = unsafeCSS(style)\n\nconst TailwindElementBase = <T extends CSSResult>(componentStyle?: T) => {\n\tclass TailwindMixinClass extends LitElement {\n\t\tstatic styles = [unsafeCSS(componentStyle), tailwindStyles]\n\t}\n\treturn TailwindMixinClass as Constructor<LitElement> /* see \"typing the subclass\" below */\n}\n\nexport const TailwindElement = <T extends CSSResult>(componentStyle?: T) => {\n\tclass TailwindMixinClass extends BaseElement(TailwindElementBase(componentStyle)) {\n\t\tdisconnectedCallback = () => {\n\t\t\tsuper.disconnectedCallback()\n\t\t}\n\t}\n\treturn TailwindMixinClass as Constructor<CustomElementConstructor> &\n\t\tConstructor<ITailwindElementMixin> &\n\t\tConstructor<LitElement> &\n\t\tConstructor<IBaseMixin>\n}\n"],"x_google_ignoreList":[1,2,3,4],"mappings":"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"}
|
package/dist/teleport.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-C9DpHCWF.cjs`);exports.HereMorty=e.r,Object.defineProperty(exports,`SchmancyTeleportation`,{enumerable:!0,get:function(){return e.n}}),exports.WhereAreYouRicky=e.i,exports.teleport=e.a;
|
package/dist/teleport.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, i as t, n, r } from "./src-
|
|
1
|
+
import { a as e, i as t, n, r } from "./src-B0jLOpqn.js";
|
|
2
2
|
export { r as HereMorty, n as SchmancyTeleportation, t as WhereAreYouRicky, e as teleport };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(`./chunk-CncqDLb2.cjs`);const e=require(`./tailwind.mixin-
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./tailwind.mixin-BHX99hgX.cjs`),t=require(`./decorate-F9CuyeHg.cjs`);require(`./mixins.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/ref.js`),o=require(`lit/directives/when.js`),s=require(`lit/directives/if-defined.js`);var c=class extends e.t(`:host{width:-webkit-fill-available;display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host([fillHeight]){flex-direction:column;height:100%;display:flex}:host:focus{box-shadow:unset!important}textarea:focus-visible{outline:none!important}textarea{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;text-indent:inherit;text-shadow:inherit;text-overflow:inherit;text-rendering:inherit;text-size-adjust:inherit;text-align-last:inherit;overflow-y:auto}@keyframes onAutoFillStart{}textarea:-webkit-autofill{animation-name:onAutoFillStart}`){static{this.shadowRootOptions={...i.LitElement.shadowRootOptions,delegatesFocus:!0}}static{this.formAssociated=!0}constructor(){super(),this.textareaRef=(0,a.createRef)(),this._a11yId=`schmancy-textarea-${Math.random().toString(36).slice(2,10)}`,this.label=``,this.name=`name_`+Date.now(),this.placeholder=``,this.value=``,this.cols=20,this.fillHeight=!1,this.autoHeight=!0,this.resize=`vertical`,this.wrap=`soft`,this.required=!1,this.disabled=!1,this.readonly=!1,this.spellcheck=!1,this.align=`left`,this.tabIndex=0,this.error=!1;try{this.internals=this.attachInternals()}catch{this.internals=void 0}}willUpdate(e){super.willUpdate?.(e),(e.has(`value`)||e.has(`name`))&&this.internals?.setFormValue(this.value??``),(e.has(`required`)||e.has(`value`))&&(this.required&&!this.value?this.internals?.setValidity({valueMissing:!0},`Please fill out this field.`):this.internals?.setValidity({}))}formResetCallback(){this.value=this.getAttribute(`value`)??``,this.error=!1}formDisabledCallback(e){this.disabled=e}firstUpdated(){this.autofocus&&this.focus(),this.autoHeight&&setTimeout(()=>this.adjustHeight(),0),(0,n.fromEvent)(this.textareaElement,`input`).pipe((0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)()).subscribe(e=>{this.value=e,this.autoHeight&&this.adjustHeight(),this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0}))}),(0,n.fromEvent)(this.textareaElement,`change`).pipe((0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)()).subscribe(e=>{this.value=e,this.autoHeight&&this.adjustHeight(),this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0}))}),(0,n.fromEvent)(this.textareaElement,`keyup`).pipe((0,n.filter)(e=>e.key===`Enter`),(0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)()).subscribe(e=>{this.value=e,this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent(`enter`,{detail:{value:e},bubbles:!0,composed:!0}))})}get form(){return this.internals?.form}reportValidity(){return this.textareaRef.value?.reportValidity()}checkValidity(){return this.textareaRef.value?.checkValidity()}setCustomValidity(e){return this.textareaRef.value?.setCustomValidity(e)}select(){return this.textareaRef.value?.select()}setSelectionRange(e,t,n){this.textareaRef.value?.setSelectionRange(e,t,n)}get selectionStart(){return this.textareaRef.value?.selectionStart??null}get selectionEnd(){return this.textareaRef.value?.selectionEnd??null}get selectionDirection(){return this.textareaRef.value?.selectionDirection??null}setRangeText(e){this.textareaRef.value?.setRangeText(e)}adjustHeight(){let e=this.textareaRef.value;if(e){let t=e.offsetHeight,n=e.scrollHeight;n>t&&(e.style.height=n+`px`)}}validity(){return this.textareaRef.value?.validity}focus(e={preventScroll:!0}){this.textareaRef.value?.focus(e),this.dispatchEvent(new Event(`focus`))}click(){this.textareaRef.value?.click(),this.dispatchEvent(new Event(`click`))}blur(){this.textareaRef.value?.blur(),this.dispatchEvent(new Event(`blur`))}render(){let e={"block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on":!0,"border-outline":!this.error,"border-error-default":this.error,"outline-secondary-default focus:outline-1 focus:border-secondary-default":!0,"disabled:opacity-40 disabled:cursor-not-allowed":!0,"placeholder:text-muted":!0,"ring-0 focus:ring-1 focus:ring-inset":!0,"focus:ring-secondary-default":!this.error,"focus:ring-error-default":this.error,"caret-transparent focus:outline-hidden cursor-pointer select-none":this.readonly,"text-left":this.align===`left`,"text-center":this.align===`center`,"text-right":this.align===`right`,"h-full":this.fillHeight,"resize-none":this.resize===`none`,"resize-y":this.resize===`vertical`,"resize-x":this.resize===`horizontal`,resize:this.resize===`both`,"px-4 py-3":!0},t=this.rows==null?`field-sizing: content;`:``,n={"block mb-1 font-medium text-sm":!0,"opacity-40":this.disabled,"text-primary-default":!this.error,"text-error-default":this.error},r={"w-full min-w-0":!0,"flex flex-col h-full":this.fillHeight},c=`${this._a11yId}-hint`;return i.html`
|
|
2
2
|
<div class="${this.classMap(r)}">
|
|
3
3
|
${(0,o.when)(this.label,()=>i.html`
|
|
4
4
|
<label class="${this.classMap(n)}" for=${this.id}>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea-B2544vx9.cjs","names":[],"sources":["../src/textarea/textarea.scss?inline","../src/textarea/textarea.ts"],"sourcesContent":[":host {\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n\twidth: -webkit-fill-available;\n\tdisplay: block;\n}\n\n:host([fillHeight]) {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\ntextarea:focus-visible {\n\toutline: none !important;\n}\n\ntextarea {\n\t/* Inherit typographic styles */\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tfont-weight: inherit;\n\tline-height: inherit;\n\tcolor: inherit;\n\tletter-spacing: inherit;\n\ttext-transform: inherit;\n\ttext-decoration: inherit;\n\ttext-indent: inherit;\n\ttext-shadow: inherit;\n\ttext-overflow: inherit;\n\ttext-rendering: inherit;\n\ttext-size-adjust: inherit;\n\ttext-align-last: inherit;\n\toverflow-y: auto; /* Ensure content is scrollable if it exceeds the visible area */\n}\n\n@keyframes onAutoFillStart {\n\tfrom {\n\t}\n\tto {\n\t}\n}\n\ntextarea:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n}\n","import { LitElement, html, nothing, type PropertyValues } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { distinctUntilChanged, filter, fromEvent, map } from 'rxjs'\nimport style from './textarea.scss?inline'\nimport { TailwindElement } from '@mixins/index'\n\n/**\n * Multi-line text input with auto-resize and form integration. Form-associated.\n *\n * @element schmancy-textarea\n * @summary Textarea for freeform text — notes, descriptions, messages. Auto-grows with content up to a maxlength.\n * @example\n * <schmancy-textarea name=\"description\" label=\"Description\" rows=\"4\" maxlength=\"500\"></schmancy-textarea>\n * @platform textarea change - Schmancy-skinned native `<textarea>`. Degrades to styled native `<textarea>` if the tag never registers.\n * @fires input - On every keystroke.\n * @fires change - On blur.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} value - Current value of the textarea\n * @prop {string} placeholder - Placeholder text\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} disabled - Whether the field is disabled\n * @prop {boolean} readonly - Whether the field is read-only\n * @prop {number} rows - Number of visible text rows\n * @prop {number} maxlength - Maximum character length\n */\n@customElement('schmancy-textarea')\nexport default class SchmancyTextarea extends TailwindElement(style) {\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\tstatic formAssociated = true\n\t// private internals\n\tinternals: ElementInternals | undefined\n\ttextareaRef = createRef<HTMLTextAreaElement>()\n\n\tprivate readonly _a11yId = `schmancy-textarea-${Math.random().toString(36).slice(2, 10)}`\n\n\t/**\n\t * The label of the control.\n\t * @attr\n\t * @type {string} label\n\t * @default ''\n\t * @public\n\t */\n\t@property() label = ''\n\n\t/**\n\t * The name of the control.\n\t * @attr name\n\t * @type {string} name\n\t * @default 'name_' + Date.now()\n\t * @public\n\t */\n\t@property() name = 'name_' + Date.now()\n\n\t/**\n\t * The placeholder of the control.\n\t * @attr placeholder\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property() placeholder = ''\n\n\t/**\n\t * The value of the control.\n\t * @attr {string} value - The value of the control.\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) public value = ''\n\n\t/**\n\t * The minlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic minlength: number | undefined\n\n\t/**\n\t * The maxlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic maxlength!: number\n\n\t/**\n\t * The number of columns (width) of the control.\n\t * @attr cols\n\t * @type {number}\n\t * @default 20\n\t * @public\n\t */\n\t@property({ type: Number }) cols = 20\n\n\t/**\n\t * The number of rows (height) of the control.\n\t * When not set, the textarea auto-sizes to fit its content via field-sizing: content.\n\t * @attr rows\n\t * @type {number}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: Number }) rows: number | undefined\n\n\t/**\n\t * Makes the textarea fill the height of its container.\n\t * @attr fillHeight\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) fillHeight = false\n\n\t/**\n\t * Automatically adjusts height based on content.\n\t * @attr autoHeight\n\t * @type {boolean}\n\t * @default true\n\t * @public\n\t */\n\t@property({ type: Boolean }) autoHeight = true\n\n\t/**\n\t * Controls whether the textarea can be resized by the user.\n\t * @attr resize\n\t * @type {'none' | 'vertical' | 'horizontal' | 'both'}\n\t * @default 'vertical'\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) resize: 'none' | 'vertical' | 'horizontal' | 'both' = 'vertical'\n\n\t/**\n\t * Specifies how the text in a text area is to be wrapped when submitted in a form.\n\t * @attr wrap\n\t * @type {'hard' | 'soft'}\n\t * @default 'soft'\n\t * @public\n\t */\n\t@property({ type: String }) wrap: 'hard' | 'soft' = 'soft'\n\n\t/**\n\t * The dirname attribute of the control.\n\t * @attr dirname\n\t * @type {string}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: String }) dirname: string | undefined\n\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\t@property({ type: Boolean, reflect: true }) readonly = false\n\t@property({ type: Boolean, reflect: true }) spellcheck = false\n\n\t@property({ type: String, reflect: true }) align: 'left' | 'center' | 'right' = 'left'\n\n\t/**\n\t * The autofocus attribute of the control.\n\t * @attr\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean })\n\tpublic override autofocus!: boolean\n\n\t@property({ type: Number })\n\tpublic override tabIndex = 0\n\n\t@query('textarea') textareaElement!: HTMLTextAreaElement\n\n\t@property() hint: string | undefined\n\n\t@property({ type: Boolean, reflect: true }) public error = false\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t}\n\n\tprotected willUpdate(changed: PropertyValues): void {\n\t\tsuper.willUpdate?.(changed)\n\t\tif (changed.has('value') || changed.has('name')) {\n\t\t\tthis.internals?.setFormValue(this.value ?? '')\n\t\t}\n\t\tif (changed.has('required') || changed.has('value')) {\n\t\t\tif (this.required && !this.value) {\n\t\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please fill out this field.')\n\t\t\t} else {\n\t\t\t\tthis.internals?.setValidity({})\n\t\t\t}\n\t\t}\n\t}\n\n\tformResetCallback(): void {\n\t\tthis.value = this.getAttribute('value') ?? ''\n\t\tthis.error = false\n\t}\n\n\tformDisabledCallback(disabled: boolean): void {\n\t\tthis.disabled = disabled\n\t}\n\n\tfirstUpdated() {\n\t\tif (this.autofocus) {\n\t\t\tthis.focus()\n\t\t}\n\t\tif (this.autoHeight) {\n\t\t\t// Initial adjustment for pre-filled content\n\t\t\tsetTimeout(() => this.adjustHeight(), 0)\n\t\t}\n\t\tfromEvent(this.textareaElement, 'input')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\tfromEvent(this.textareaElement, 'change')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\t// emit on enter\n\t\tfromEvent<KeyboardEvent>(this.textareaElement, 'keyup')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => event.key === 'Enter'),\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('enter', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\t/** Checks for validity of the control and shows the browser message if it's invalid. */\n\tpublic reportValidity() {\n\t\treturn this.textareaRef.value?.reportValidity()\n\t}\n\n\t/** Checks for validity of the control and emits the invalid event if it invalid. */\n\tpublic checkValidity() {\n\t\treturn this.textareaRef.value?.checkValidity()\n\t}\n\n\t/** Sets a custom validity message. */\n\tpublic setCustomValidity(message: string) {\n\t\treturn this.textareaRef.value?.setCustomValidity(message)\n\t}\n\n\t/** Selects all text within the textarea. */\n\tpublic select() {\n\t\treturn this.textareaRef.value?.select()\n\t}\n\n\t/** Sets the selection range. */\n\tpublic setSelectionRange(start: number, end: number, direction?: 'forward' | 'backward' | 'none') {\n\t\tthis.textareaRef.value?.setSelectionRange(start, end, direction)\n\t}\n\n\t/** Returns the selected text within the textarea. */\n\tpublic get selectionStart(): number | null {\n\t\treturn this.textareaRef.value?.selectionStart ?? null\n\t}\n\n\tpublic get selectionEnd(): number | null {\n\t\treturn this.textareaRef.value?.selectionEnd ?? null\n\t}\n\n\tpublic get selectionDirection(): 'forward' | 'backward' | 'none' | null {\n\t\treturn this.textareaRef.value?.selectionDirection ?? null\n\t}\n\n\t/** Sets the range of text to be selected. */\n\tpublic setRangeText(replacement: string) {\n\t\tthis.textareaRef.value?.setRangeText(replacement)\n\t}\n\n\t/** Adjusts the height of the textarea based on its content. */\n\tpublic adjustHeight() {\n\t\tconst textarea = this.textareaRef.value\n\t\tif (textarea) {\n\t\t\t// Only grow, never shrink\n\t\t\tconst currentHeight = textarea.offsetHeight\n\t\t\tconst scrollHeight = textarea.scrollHeight\n\t\t\tif (scrollHeight > currentHeight) {\n\t\t\t\ttextarea.style.height = scrollHeight + 'px'\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic validity(): ValidityState | undefined {\n\t\treturn this.textareaRef.value?.validity\n\t}\n\n\tpublic override focus(\n\t\toptions: FocusOptions = {\n\t\t\tpreventScroll: true,\n\t\t},\n\t) {\n\t\tthis.textareaRef.value?.focus(options)\n\t\tthis.dispatchEvent(new Event('focus'))\n\t}\n\n\tpublic override click() {\n\t\tthis.textareaRef.value?.click()\n\t\tthis.dispatchEvent(new Event('click'))\n\t}\n\n\tpublic override blur() {\n\t\tthis.textareaRef.value?.blur()\n\t\tthis.dispatchEvent(new Event('blur'))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst textareaClasses = {\n\t\t\t// Base styles - matching input component\n\t\t\t'block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on': true,\n\t\t\t// Border color\n\t\t\t'border-outline': !this.error,\n\t\t\t'border-error-default': this.error,\n\t\t\t// Focus styles\n\t\t\t'outline-secondary-default focus:outline-1 focus:border-secondary-default': true,\n\t\t\t// Disabled styles\n\t\t\t'disabled:opacity-40 disabled:cursor-not-allowed': true,\n\t\t\t// Placeholder\n\t\t\t'placeholder:text-muted': true,\n\t\t\t// Ring styles (subtle focus ring)\n\t\t\t'ring-0 focus:ring-1 focus:ring-inset': true,\n\t\t\t'focus:ring-secondary-default': !this.error,\n\t\t\t'focus:ring-error-default': this.error,\n\t\t\t// Readonly styles\n\t\t\t'caret-transparent focus:outline-hidden cursor-pointer select-none': this.readonly,\n\t\t\t// Text alignment\n\t\t\t'text-left': this.align === 'left',\n\t\t\t'text-center': this.align === 'center',\n\t\t\t'text-right': this.align === 'right',\n\t\t\t// Textarea specific\n\t\t\t'h-full': this.fillHeight,\n\t\t\t'resize-none': this.resize === 'none',\n\t\t\t'resize-y': this.resize === 'vertical',\n\t\t\t'resize-x': this.resize === 'horizontal',\n\t\t\t'resize': this.resize === 'both',\n\t\t\t// Padding matching input\n\t\t\t'px-4 py-3': true,\n\t\t}\n\t\tconst fieldSizing = this.rows == null ? 'field-sizing: content;' : ''\n\t\tconst labelClasses = {\n\t\t\t'block mb-1 font-medium text-sm': true,\n\t\t\t'opacity-40': this.disabled,\n\t\t\t'text-primary-default': !this.error,\n\t\t\t'text-error-default': this.error,\n\t\t}\n\t\tconst containerClasses = {\n\t\t\t'w-full min-w-0': true,\n\t\t\t'flex flex-col h-full': this.fillHeight,\n\t\t}\n\t\tconst hintId = `${this._a11yId}-hint`\n\t\treturn html`\n\t\t<div class=\"${this.classMap(containerClasses)}\">\n\t\t\t${when(\n\t\t\t\tthis.label,\n\t\t\t\t() => html`\n\t\t\t\t\t<label class=\"${this.classMap(labelClasses)}\" for=${this.id}>\n\t\t\t\t\t\t${this.label}\n\t\t\t\t\t</label>\n\t\t\t\t`,\n\t\t\t)}\n\n\t\t\t<textarea\n\t\t\t\t${ref(this.textareaRef)}\n\t\t\t\t.value=${this.value}\n\t\t\t\t.id=${this.id}\n\t\t\t\t.name=${this.name}\n\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t.required=${this.required}\n\t\t\t\tclass=${this.classMap(textareaClasses)}\n\t\t\t\tstyle=${fieldSizing}\n\t\t\t\t.disabled=${this.disabled}\n\t\t\t\tminlength=${ifDefined(this.minlength)}\n\t\t\t\tmaxlength=${ifDefined(this.maxlength)}\n\t\t\t\t.readonly=${this.readonly}\n\t\t\t\t.spellcheck=${this.spellcheck}\n\t\t\t\tcols=${ifDefined(this.cols)}\n\t\t\t\trows=${ifDefined(this.rows)}\n\t\t\t\twrap=${ifDefined(this.wrap)}\n\t\t\t\tdirname=${ifDefined(this.dirname)}\n\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\taria-describedby=${this.hint ? hintId : nothing}\n\t\t\t\taria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n\t\t\t></textarea>\n\n\t\t\t${when(\n\t\t\t\tthis.hint,\n\t\t\t\t() => html`\n\t\t\t\t\t<div id=${hintId} class=\"mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}\">\n\t\t\t\t\t\t${this.hint}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t)}\n\t\t</div>\n\t\t`\n\t}\n}\n\ntype EventDetails = {\n\tvalue: string\n}\n\nexport type SchmancyTextareaChangeEvent = CustomEvent<EventDetails>\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-textarea': SchmancyTextarea\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"textarea-CfQnghhD.cjs","names":[],"sources":["../src/textarea/textarea.scss?inline","../src/textarea/textarea.ts"],"sourcesContent":[":host {\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n\twidth: -webkit-fill-available;\n\tdisplay: block;\n}\n\n:host([fillHeight]) {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\ntextarea:focus-visible {\n\toutline: none !important;\n}\n\ntextarea {\n\t/* Inherit typographic styles */\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tfont-weight: inherit;\n\tline-height: inherit;\n\tcolor: inherit;\n\tletter-spacing: inherit;\n\ttext-transform: inherit;\n\ttext-decoration: inherit;\n\ttext-indent: inherit;\n\ttext-shadow: inherit;\n\ttext-overflow: inherit;\n\ttext-rendering: inherit;\n\ttext-size-adjust: inherit;\n\ttext-align-last: inherit;\n\toverflow-y: auto; /* Ensure content is scrollable if it exceeds the visible area */\n}\n\n@keyframes onAutoFillStart {\n\tfrom {\n\t}\n\tto {\n\t}\n}\n\ntextarea:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n}\n","import { LitElement, html, nothing, type PropertyValues } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { distinctUntilChanged, filter, fromEvent, map } from 'rxjs'\nimport style from './textarea.scss?inline'\nimport { TailwindElement } from '@mixins/index'\n\n/**\n * Multi-line text input with auto-resize and form integration. Form-associated.\n *\n * @element schmancy-textarea\n * @summary Textarea for freeform text — notes, descriptions, messages. Auto-grows with content up to a maxlength.\n * @example\n * <schmancy-textarea name=\"description\" label=\"Description\" rows=\"4\" maxlength=\"500\"></schmancy-textarea>\n * @platform textarea change - Schmancy-skinned native `<textarea>`. Degrades to styled native `<textarea>` if the tag never registers.\n * @fires input - On every keystroke.\n * @fires change - On blur.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} value - Current value of the textarea\n * @prop {string} placeholder - Placeholder text\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} disabled - Whether the field is disabled\n * @prop {boolean} readonly - Whether the field is read-only\n * @prop {number} rows - Number of visible text rows\n * @prop {number} maxlength - Maximum character length\n */\n@customElement('schmancy-textarea')\nexport default class SchmancyTextarea extends TailwindElement(style) {\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\tstatic formAssociated = true\n\t// private internals\n\tinternals: ElementInternals | undefined\n\ttextareaRef = createRef<HTMLTextAreaElement>()\n\n\tprivate readonly _a11yId = `schmancy-textarea-${Math.random().toString(36).slice(2, 10)}`\n\n\t/**\n\t * The label of the control.\n\t * @attr\n\t * @type {string} label\n\t * @default ''\n\t * @public\n\t */\n\t@property() label = ''\n\n\t/**\n\t * The name of the control.\n\t * @attr name\n\t * @type {string} name\n\t * @default 'name_' + Date.now()\n\t * @public\n\t */\n\t@property() name = 'name_' + Date.now()\n\n\t/**\n\t * The placeholder of the control.\n\t * @attr placeholder\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property() placeholder = ''\n\n\t/**\n\t * The value of the control.\n\t * @attr {string} value - The value of the control.\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) public value = ''\n\n\t/**\n\t * The minlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic minlength: number | undefined\n\n\t/**\n\t * The maxlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic maxlength!: number\n\n\t/**\n\t * The number of columns (width) of the control.\n\t * @attr cols\n\t * @type {number}\n\t * @default 20\n\t * @public\n\t */\n\t@property({ type: Number }) cols = 20\n\n\t/**\n\t * The number of rows (height) of the control.\n\t * When not set, the textarea auto-sizes to fit its content via field-sizing: content.\n\t * @attr rows\n\t * @type {number}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: Number }) rows: number | undefined\n\n\t/**\n\t * Makes the textarea fill the height of its container.\n\t * @attr fillHeight\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) fillHeight = false\n\n\t/**\n\t * Automatically adjusts height based on content.\n\t * @attr autoHeight\n\t * @type {boolean}\n\t * @default true\n\t * @public\n\t */\n\t@property({ type: Boolean }) autoHeight = true\n\n\t/**\n\t * Controls whether the textarea can be resized by the user.\n\t * @attr resize\n\t * @type {'none' | 'vertical' | 'horizontal' | 'both'}\n\t * @default 'vertical'\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) resize: 'none' | 'vertical' | 'horizontal' | 'both' = 'vertical'\n\n\t/**\n\t * Specifies how the text in a text area is to be wrapped when submitted in a form.\n\t * @attr wrap\n\t * @type {'hard' | 'soft'}\n\t * @default 'soft'\n\t * @public\n\t */\n\t@property({ type: String }) wrap: 'hard' | 'soft' = 'soft'\n\n\t/**\n\t * The dirname attribute of the control.\n\t * @attr dirname\n\t * @type {string}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: String }) dirname: string | undefined\n\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\t@property({ type: Boolean, reflect: true }) readonly = false\n\t@property({ type: Boolean, reflect: true }) spellcheck = false\n\n\t@property({ type: String, reflect: true }) align: 'left' | 'center' | 'right' = 'left'\n\n\t/**\n\t * The autofocus attribute of the control.\n\t * @attr\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean })\n\tpublic override autofocus!: boolean\n\n\t@property({ type: Number })\n\tpublic override tabIndex = 0\n\n\t@query('textarea') textareaElement!: HTMLTextAreaElement\n\n\t@property() hint: string | undefined\n\n\t@property({ type: Boolean, reflect: true }) public error = false\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t}\n\n\tprotected willUpdate(changed: PropertyValues): void {\n\t\tsuper.willUpdate?.(changed)\n\t\tif (changed.has('value') || changed.has('name')) {\n\t\t\tthis.internals?.setFormValue(this.value ?? '')\n\t\t}\n\t\tif (changed.has('required') || changed.has('value')) {\n\t\t\tif (this.required && !this.value) {\n\t\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please fill out this field.')\n\t\t\t} else {\n\t\t\t\tthis.internals?.setValidity({})\n\t\t\t}\n\t\t}\n\t}\n\n\tformResetCallback(): void {\n\t\tthis.value = this.getAttribute('value') ?? ''\n\t\tthis.error = false\n\t}\n\n\tformDisabledCallback(disabled: boolean): void {\n\t\tthis.disabled = disabled\n\t}\n\n\tfirstUpdated() {\n\t\tif (this.autofocus) {\n\t\t\tthis.focus()\n\t\t}\n\t\tif (this.autoHeight) {\n\t\t\t// Initial adjustment for pre-filled content\n\t\t\tsetTimeout(() => this.adjustHeight(), 0)\n\t\t}\n\t\tfromEvent(this.textareaElement, 'input')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\tfromEvent(this.textareaElement, 'change')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\t// emit on enter\n\t\tfromEvent<KeyboardEvent>(this.textareaElement, 'keyup')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => event.key === 'Enter'),\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('enter', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\t/** Checks for validity of the control and shows the browser message if it's invalid. */\n\tpublic reportValidity() {\n\t\treturn this.textareaRef.value?.reportValidity()\n\t}\n\n\t/** Checks for validity of the control and emits the invalid event if it invalid. */\n\tpublic checkValidity() {\n\t\treturn this.textareaRef.value?.checkValidity()\n\t}\n\n\t/** Sets a custom validity message. */\n\tpublic setCustomValidity(message: string) {\n\t\treturn this.textareaRef.value?.setCustomValidity(message)\n\t}\n\n\t/** Selects all text within the textarea. */\n\tpublic select() {\n\t\treturn this.textareaRef.value?.select()\n\t}\n\n\t/** Sets the selection range. */\n\tpublic setSelectionRange(start: number, end: number, direction?: 'forward' | 'backward' | 'none') {\n\t\tthis.textareaRef.value?.setSelectionRange(start, end, direction)\n\t}\n\n\t/** Returns the selected text within the textarea. */\n\tpublic get selectionStart(): number | null {\n\t\treturn this.textareaRef.value?.selectionStart ?? null\n\t}\n\n\tpublic get selectionEnd(): number | null {\n\t\treturn this.textareaRef.value?.selectionEnd ?? null\n\t}\n\n\tpublic get selectionDirection(): 'forward' | 'backward' | 'none' | null {\n\t\treturn this.textareaRef.value?.selectionDirection ?? null\n\t}\n\n\t/** Sets the range of text to be selected. */\n\tpublic setRangeText(replacement: string) {\n\t\tthis.textareaRef.value?.setRangeText(replacement)\n\t}\n\n\t/** Adjusts the height of the textarea based on its content. */\n\tpublic adjustHeight() {\n\t\tconst textarea = this.textareaRef.value\n\t\tif (textarea) {\n\t\t\t// Only grow, never shrink\n\t\t\tconst currentHeight = textarea.offsetHeight\n\t\t\tconst scrollHeight = textarea.scrollHeight\n\t\t\tif (scrollHeight > currentHeight) {\n\t\t\t\ttextarea.style.height = scrollHeight + 'px'\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic validity(): ValidityState | undefined {\n\t\treturn this.textareaRef.value?.validity\n\t}\n\n\tpublic override focus(\n\t\toptions: FocusOptions = {\n\t\t\tpreventScroll: true,\n\t\t},\n\t) {\n\t\tthis.textareaRef.value?.focus(options)\n\t\tthis.dispatchEvent(new Event('focus'))\n\t}\n\n\tpublic override click() {\n\t\tthis.textareaRef.value?.click()\n\t\tthis.dispatchEvent(new Event('click'))\n\t}\n\n\tpublic override blur() {\n\t\tthis.textareaRef.value?.blur()\n\t\tthis.dispatchEvent(new Event('blur'))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst textareaClasses = {\n\t\t\t// Base styles - matching input component\n\t\t\t'block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on': true,\n\t\t\t// Border color\n\t\t\t'border-outline': !this.error,\n\t\t\t'border-error-default': this.error,\n\t\t\t// Focus styles\n\t\t\t'outline-secondary-default focus:outline-1 focus:border-secondary-default': true,\n\t\t\t// Disabled styles\n\t\t\t'disabled:opacity-40 disabled:cursor-not-allowed': true,\n\t\t\t// Placeholder\n\t\t\t'placeholder:text-muted': true,\n\t\t\t// Ring styles (subtle focus ring)\n\t\t\t'ring-0 focus:ring-1 focus:ring-inset': true,\n\t\t\t'focus:ring-secondary-default': !this.error,\n\t\t\t'focus:ring-error-default': this.error,\n\t\t\t// Readonly styles\n\t\t\t'caret-transparent focus:outline-hidden cursor-pointer select-none': this.readonly,\n\t\t\t// Text alignment\n\t\t\t'text-left': this.align === 'left',\n\t\t\t'text-center': this.align === 'center',\n\t\t\t'text-right': this.align === 'right',\n\t\t\t// Textarea specific\n\t\t\t'h-full': this.fillHeight,\n\t\t\t'resize-none': this.resize === 'none',\n\t\t\t'resize-y': this.resize === 'vertical',\n\t\t\t'resize-x': this.resize === 'horizontal',\n\t\t\t'resize': this.resize === 'both',\n\t\t\t// Padding matching input\n\t\t\t'px-4 py-3': true,\n\t\t}\n\t\tconst fieldSizing = this.rows == null ? 'field-sizing: content;' : ''\n\t\tconst labelClasses = {\n\t\t\t'block mb-1 font-medium text-sm': true,\n\t\t\t'opacity-40': this.disabled,\n\t\t\t'text-primary-default': !this.error,\n\t\t\t'text-error-default': this.error,\n\t\t}\n\t\tconst containerClasses = {\n\t\t\t'w-full min-w-0': true,\n\t\t\t'flex flex-col h-full': this.fillHeight,\n\t\t}\n\t\tconst hintId = `${this._a11yId}-hint`\n\t\treturn html`\n\t\t<div class=\"${this.classMap(containerClasses)}\">\n\t\t\t${when(\n\t\t\t\tthis.label,\n\t\t\t\t() => html`\n\t\t\t\t\t<label class=\"${this.classMap(labelClasses)}\" for=${this.id}>\n\t\t\t\t\t\t${this.label}\n\t\t\t\t\t</label>\n\t\t\t\t`,\n\t\t\t)}\n\n\t\t\t<textarea\n\t\t\t\t${ref(this.textareaRef)}\n\t\t\t\t.value=${this.value}\n\t\t\t\t.id=${this.id}\n\t\t\t\t.name=${this.name}\n\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t.required=${this.required}\n\t\t\t\tclass=${this.classMap(textareaClasses)}\n\t\t\t\tstyle=${fieldSizing}\n\t\t\t\t.disabled=${this.disabled}\n\t\t\t\tminlength=${ifDefined(this.minlength)}\n\t\t\t\tmaxlength=${ifDefined(this.maxlength)}\n\t\t\t\t.readonly=${this.readonly}\n\t\t\t\t.spellcheck=${this.spellcheck}\n\t\t\t\tcols=${ifDefined(this.cols)}\n\t\t\t\trows=${ifDefined(this.rows)}\n\t\t\t\twrap=${ifDefined(this.wrap)}\n\t\t\t\tdirname=${ifDefined(this.dirname)}\n\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\taria-describedby=${this.hint ? hintId : nothing}\n\t\t\t\taria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n\t\t\t></textarea>\n\n\t\t\t${when(\n\t\t\t\tthis.hint,\n\t\t\t\t() => html`\n\t\t\t\t\t<div id=${hintId} class=\"mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}\">\n\t\t\t\t\t\t${this.hint}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t)}\n\t\t</div>\n\t\t`\n\t}\n}\n\ntype EventDetails = {\n\tvalue: string\n}\n\nexport type SchmancyTextareaChangeEvent = CustomEvent<EventDetails>\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-textarea': SchmancyTextarea\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "./tailwind.mixin-
|
|
1
|
+
import { t as e } from "./tailwind.mixin-DIEGVcl3.js";
|
|
2
2
|
import { t } from "./decorate-D_utPUsC.js";
|
|
3
3
|
import "./mixins.js";
|
|
4
4
|
import { distinctUntilChanged as n, filter as r, fromEvent as i, map as a } from "rxjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea-CS-KdSLz.js","names":[],"sources":["../src/textarea/textarea.scss?inline","../src/textarea/textarea.ts"],"sourcesContent":[":host {\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n\twidth: -webkit-fill-available;\n\tdisplay: block;\n}\n\n:host([fillHeight]) {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\ntextarea:focus-visible {\n\toutline: none !important;\n}\n\ntextarea {\n\t/* Inherit typographic styles */\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tfont-weight: inherit;\n\tline-height: inherit;\n\tcolor: inherit;\n\tletter-spacing: inherit;\n\ttext-transform: inherit;\n\ttext-decoration: inherit;\n\ttext-indent: inherit;\n\ttext-shadow: inherit;\n\ttext-overflow: inherit;\n\ttext-rendering: inherit;\n\ttext-size-adjust: inherit;\n\ttext-align-last: inherit;\n\toverflow-y: auto; /* Ensure content is scrollable if it exceeds the visible area */\n}\n\n@keyframes onAutoFillStart {\n\tfrom {\n\t}\n\tto {\n\t}\n}\n\ntextarea:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n}\n","import { LitElement, html, nothing, type PropertyValues } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { distinctUntilChanged, filter, fromEvent, map } from 'rxjs'\nimport style from './textarea.scss?inline'\nimport { TailwindElement } from '@mixins/index'\n\n/**\n * Multi-line text input with auto-resize and form integration. Form-associated.\n *\n * @element schmancy-textarea\n * @summary Textarea for freeform text — notes, descriptions, messages. Auto-grows with content up to a maxlength.\n * @example\n * <schmancy-textarea name=\"description\" label=\"Description\" rows=\"4\" maxlength=\"500\"></schmancy-textarea>\n * @platform textarea change - Schmancy-skinned native `<textarea>`. Degrades to styled native `<textarea>` if the tag never registers.\n * @fires input - On every keystroke.\n * @fires change - On blur.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} value - Current value of the textarea\n * @prop {string} placeholder - Placeholder text\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} disabled - Whether the field is disabled\n * @prop {boolean} readonly - Whether the field is read-only\n * @prop {number} rows - Number of visible text rows\n * @prop {number} maxlength - Maximum character length\n */\n@customElement('schmancy-textarea')\nexport default class SchmancyTextarea extends TailwindElement(style) {\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\tstatic formAssociated = true\n\t// private internals\n\tinternals: ElementInternals | undefined\n\ttextareaRef = createRef<HTMLTextAreaElement>()\n\n\tprivate readonly _a11yId = `schmancy-textarea-${Math.random().toString(36).slice(2, 10)}`\n\n\t/**\n\t * The label of the control.\n\t * @attr\n\t * @type {string} label\n\t * @default ''\n\t * @public\n\t */\n\t@property() label = ''\n\n\t/**\n\t * The name of the control.\n\t * @attr name\n\t * @type {string} name\n\t * @default 'name_' + Date.now()\n\t * @public\n\t */\n\t@property() name = 'name_' + Date.now()\n\n\t/**\n\t * The placeholder of the control.\n\t * @attr placeholder\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property() placeholder = ''\n\n\t/**\n\t * The value of the control.\n\t * @attr {string} value - The value of the control.\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) public value = ''\n\n\t/**\n\t * The minlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic minlength: number | undefined\n\n\t/**\n\t * The maxlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic maxlength!: number\n\n\t/**\n\t * The number of columns (width) of the control.\n\t * @attr cols\n\t * @type {number}\n\t * @default 20\n\t * @public\n\t */\n\t@property({ type: Number }) cols = 20\n\n\t/**\n\t * The number of rows (height) of the control.\n\t * When not set, the textarea auto-sizes to fit its content via field-sizing: content.\n\t * @attr rows\n\t * @type {number}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: Number }) rows: number | undefined\n\n\t/**\n\t * Makes the textarea fill the height of its container.\n\t * @attr fillHeight\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) fillHeight = false\n\n\t/**\n\t * Automatically adjusts height based on content.\n\t * @attr autoHeight\n\t * @type {boolean}\n\t * @default true\n\t * @public\n\t */\n\t@property({ type: Boolean }) autoHeight = true\n\n\t/**\n\t * Controls whether the textarea can be resized by the user.\n\t * @attr resize\n\t * @type {'none' | 'vertical' | 'horizontal' | 'both'}\n\t * @default 'vertical'\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) resize: 'none' | 'vertical' | 'horizontal' | 'both' = 'vertical'\n\n\t/**\n\t * Specifies how the text in a text area is to be wrapped when submitted in a form.\n\t * @attr wrap\n\t * @type {'hard' | 'soft'}\n\t * @default 'soft'\n\t * @public\n\t */\n\t@property({ type: String }) wrap: 'hard' | 'soft' = 'soft'\n\n\t/**\n\t * The dirname attribute of the control.\n\t * @attr dirname\n\t * @type {string}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: String }) dirname: string | undefined\n\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\t@property({ type: Boolean, reflect: true }) readonly = false\n\t@property({ type: Boolean, reflect: true }) spellcheck = false\n\n\t@property({ type: String, reflect: true }) align: 'left' | 'center' | 'right' = 'left'\n\n\t/**\n\t * The autofocus attribute of the control.\n\t * @attr\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean })\n\tpublic override autofocus!: boolean\n\n\t@property({ type: Number })\n\tpublic override tabIndex = 0\n\n\t@query('textarea') textareaElement!: HTMLTextAreaElement\n\n\t@property() hint: string | undefined\n\n\t@property({ type: Boolean, reflect: true }) public error = false\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t}\n\n\tprotected willUpdate(changed: PropertyValues): void {\n\t\tsuper.willUpdate?.(changed)\n\t\tif (changed.has('value') || changed.has('name')) {\n\t\t\tthis.internals?.setFormValue(this.value ?? '')\n\t\t}\n\t\tif (changed.has('required') || changed.has('value')) {\n\t\t\tif (this.required && !this.value) {\n\t\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please fill out this field.')\n\t\t\t} else {\n\t\t\t\tthis.internals?.setValidity({})\n\t\t\t}\n\t\t}\n\t}\n\n\tformResetCallback(): void {\n\t\tthis.value = this.getAttribute('value') ?? ''\n\t\tthis.error = false\n\t}\n\n\tformDisabledCallback(disabled: boolean): void {\n\t\tthis.disabled = disabled\n\t}\n\n\tfirstUpdated() {\n\t\tif (this.autofocus) {\n\t\t\tthis.focus()\n\t\t}\n\t\tif (this.autoHeight) {\n\t\t\t// Initial adjustment for pre-filled content\n\t\t\tsetTimeout(() => this.adjustHeight(), 0)\n\t\t}\n\t\tfromEvent(this.textareaElement, 'input')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\tfromEvent(this.textareaElement, 'change')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\t// emit on enter\n\t\tfromEvent<KeyboardEvent>(this.textareaElement, 'keyup')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => event.key === 'Enter'),\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('enter', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\t/** Checks for validity of the control and shows the browser message if it's invalid. */\n\tpublic reportValidity() {\n\t\treturn this.textareaRef.value?.reportValidity()\n\t}\n\n\t/** Checks for validity of the control and emits the invalid event if it invalid. */\n\tpublic checkValidity() {\n\t\treturn this.textareaRef.value?.checkValidity()\n\t}\n\n\t/** Sets a custom validity message. */\n\tpublic setCustomValidity(message: string) {\n\t\treturn this.textareaRef.value?.setCustomValidity(message)\n\t}\n\n\t/** Selects all text within the textarea. */\n\tpublic select() {\n\t\treturn this.textareaRef.value?.select()\n\t}\n\n\t/** Sets the selection range. */\n\tpublic setSelectionRange(start: number, end: number, direction?: 'forward' | 'backward' | 'none') {\n\t\tthis.textareaRef.value?.setSelectionRange(start, end, direction)\n\t}\n\n\t/** Returns the selected text within the textarea. */\n\tpublic get selectionStart(): number | null {\n\t\treturn this.textareaRef.value?.selectionStart ?? null\n\t}\n\n\tpublic get selectionEnd(): number | null {\n\t\treturn this.textareaRef.value?.selectionEnd ?? null\n\t}\n\n\tpublic get selectionDirection(): 'forward' | 'backward' | 'none' | null {\n\t\treturn this.textareaRef.value?.selectionDirection ?? null\n\t}\n\n\t/** Sets the range of text to be selected. */\n\tpublic setRangeText(replacement: string) {\n\t\tthis.textareaRef.value?.setRangeText(replacement)\n\t}\n\n\t/** Adjusts the height of the textarea based on its content. */\n\tpublic adjustHeight() {\n\t\tconst textarea = this.textareaRef.value\n\t\tif (textarea) {\n\t\t\t// Only grow, never shrink\n\t\t\tconst currentHeight = textarea.offsetHeight\n\t\t\tconst scrollHeight = textarea.scrollHeight\n\t\t\tif (scrollHeight > currentHeight) {\n\t\t\t\ttextarea.style.height = scrollHeight + 'px'\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic validity(): ValidityState | undefined {\n\t\treturn this.textareaRef.value?.validity\n\t}\n\n\tpublic override focus(\n\t\toptions: FocusOptions = {\n\t\t\tpreventScroll: true,\n\t\t},\n\t) {\n\t\tthis.textareaRef.value?.focus(options)\n\t\tthis.dispatchEvent(new Event('focus'))\n\t}\n\n\tpublic override click() {\n\t\tthis.textareaRef.value?.click()\n\t\tthis.dispatchEvent(new Event('click'))\n\t}\n\n\tpublic override blur() {\n\t\tthis.textareaRef.value?.blur()\n\t\tthis.dispatchEvent(new Event('blur'))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst textareaClasses = {\n\t\t\t// Base styles - matching input component\n\t\t\t'block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on': true,\n\t\t\t// Border color\n\t\t\t'border-outline': !this.error,\n\t\t\t'border-error-default': this.error,\n\t\t\t// Focus styles\n\t\t\t'outline-secondary-default focus:outline-1 focus:border-secondary-default': true,\n\t\t\t// Disabled styles\n\t\t\t'disabled:opacity-40 disabled:cursor-not-allowed': true,\n\t\t\t// Placeholder\n\t\t\t'placeholder:text-muted': true,\n\t\t\t// Ring styles (subtle focus ring)\n\t\t\t'ring-0 focus:ring-1 focus:ring-inset': true,\n\t\t\t'focus:ring-secondary-default': !this.error,\n\t\t\t'focus:ring-error-default': this.error,\n\t\t\t// Readonly styles\n\t\t\t'caret-transparent focus:outline-hidden cursor-pointer select-none': this.readonly,\n\t\t\t// Text alignment\n\t\t\t'text-left': this.align === 'left',\n\t\t\t'text-center': this.align === 'center',\n\t\t\t'text-right': this.align === 'right',\n\t\t\t// Textarea specific\n\t\t\t'h-full': this.fillHeight,\n\t\t\t'resize-none': this.resize === 'none',\n\t\t\t'resize-y': this.resize === 'vertical',\n\t\t\t'resize-x': this.resize === 'horizontal',\n\t\t\t'resize': this.resize === 'both',\n\t\t\t// Padding matching input\n\t\t\t'px-4 py-3': true,\n\t\t}\n\t\tconst fieldSizing = this.rows == null ? 'field-sizing: content;' : ''\n\t\tconst labelClasses = {\n\t\t\t'block mb-1 font-medium text-sm': true,\n\t\t\t'opacity-40': this.disabled,\n\t\t\t'text-primary-default': !this.error,\n\t\t\t'text-error-default': this.error,\n\t\t}\n\t\tconst containerClasses = {\n\t\t\t'w-full min-w-0': true,\n\t\t\t'flex flex-col h-full': this.fillHeight,\n\t\t}\n\t\tconst hintId = `${this._a11yId}-hint`\n\t\treturn html`\n\t\t<div class=\"${this.classMap(containerClasses)}\">\n\t\t\t${when(\n\t\t\t\tthis.label,\n\t\t\t\t() => html`\n\t\t\t\t\t<label class=\"${this.classMap(labelClasses)}\" for=${this.id}>\n\t\t\t\t\t\t${this.label}\n\t\t\t\t\t</label>\n\t\t\t\t`,\n\t\t\t)}\n\n\t\t\t<textarea\n\t\t\t\t${ref(this.textareaRef)}\n\t\t\t\t.value=${this.value}\n\t\t\t\t.id=${this.id}\n\t\t\t\t.name=${this.name}\n\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t.required=${this.required}\n\t\t\t\tclass=${this.classMap(textareaClasses)}\n\t\t\t\tstyle=${fieldSizing}\n\t\t\t\t.disabled=${this.disabled}\n\t\t\t\tminlength=${ifDefined(this.minlength)}\n\t\t\t\tmaxlength=${ifDefined(this.maxlength)}\n\t\t\t\t.readonly=${this.readonly}\n\t\t\t\t.spellcheck=${this.spellcheck}\n\t\t\t\tcols=${ifDefined(this.cols)}\n\t\t\t\trows=${ifDefined(this.rows)}\n\t\t\t\twrap=${ifDefined(this.wrap)}\n\t\t\t\tdirname=${ifDefined(this.dirname)}\n\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\taria-describedby=${this.hint ? hintId : nothing}\n\t\t\t\taria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n\t\t\t></textarea>\n\n\t\t\t${when(\n\t\t\t\tthis.hint,\n\t\t\t\t() => html`\n\t\t\t\t\t<div id=${hintId} class=\"mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}\">\n\t\t\t\t\t\t${this.hint}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t)}\n\t\t</div>\n\t\t`\n\t}\n}\n\ntype EventDetails = {\n\tvalue: string\n}\n\nexport type SchmancyTextareaChangeEvent = CustomEvent<EventDetails>\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-textarea': SchmancyTextarea\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"textarea-O9A58OZA.js","names":[],"sources":["../src/textarea/textarea.scss?inline","../src/textarea/textarea.ts"],"sourcesContent":[":host {\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n\twidth: -webkit-fill-available;\n\tdisplay: block;\n}\n\n:host([fillHeight]) {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\ntextarea:focus-visible {\n\toutline: none !important;\n}\n\ntextarea {\n\t/* Inherit typographic styles */\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tfont-weight: inherit;\n\tline-height: inherit;\n\tcolor: inherit;\n\tletter-spacing: inherit;\n\ttext-transform: inherit;\n\ttext-decoration: inherit;\n\ttext-indent: inherit;\n\ttext-shadow: inherit;\n\ttext-overflow: inherit;\n\ttext-rendering: inherit;\n\ttext-size-adjust: inherit;\n\ttext-align-last: inherit;\n\toverflow-y: auto; /* Ensure content is scrollable if it exceeds the visible area */\n}\n\n@keyframes onAutoFillStart {\n\tfrom {\n\t}\n\tto {\n\t}\n}\n\ntextarea:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n}\n","import { LitElement, html, nothing, type PropertyValues } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { distinctUntilChanged, filter, fromEvent, map } from 'rxjs'\nimport style from './textarea.scss?inline'\nimport { TailwindElement } from '@mixins/index'\n\n/**\n * Multi-line text input with auto-resize and form integration. Form-associated.\n *\n * @element schmancy-textarea\n * @summary Textarea for freeform text — notes, descriptions, messages. Auto-grows with content up to a maxlength.\n * @example\n * <schmancy-textarea name=\"description\" label=\"Description\" rows=\"4\" maxlength=\"500\"></schmancy-textarea>\n * @platform textarea change - Schmancy-skinned native `<textarea>`. Degrades to styled native `<textarea>` if the tag never registers.\n * @fires input - On every keystroke.\n * @fires change - On blur.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} value - Current value of the textarea\n * @prop {string} placeholder - Placeholder text\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} disabled - Whether the field is disabled\n * @prop {boolean} readonly - Whether the field is read-only\n * @prop {number} rows - Number of visible text rows\n * @prop {number} maxlength - Maximum character length\n */\n@customElement('schmancy-textarea')\nexport default class SchmancyTextarea extends TailwindElement(style) {\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\tstatic formAssociated = true\n\t// private internals\n\tinternals: ElementInternals | undefined\n\ttextareaRef = createRef<HTMLTextAreaElement>()\n\n\tprivate readonly _a11yId = `schmancy-textarea-${Math.random().toString(36).slice(2, 10)}`\n\n\t/**\n\t * The label of the control.\n\t * @attr\n\t * @type {string} label\n\t * @default ''\n\t * @public\n\t */\n\t@property() label = ''\n\n\t/**\n\t * The name of the control.\n\t * @attr name\n\t * @type {string} name\n\t * @default 'name_' + Date.now()\n\t * @public\n\t */\n\t@property() name = 'name_' + Date.now()\n\n\t/**\n\t * The placeholder of the control.\n\t * @attr placeholder\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property() placeholder = ''\n\n\t/**\n\t * The value of the control.\n\t * @attr {string} value - The value of the control.\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) public value = ''\n\n\t/**\n\t * The minlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic minlength: number | undefined\n\n\t/**\n\t * The maxlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic maxlength!: number\n\n\t/**\n\t * The number of columns (width) of the control.\n\t * @attr cols\n\t * @type {number}\n\t * @default 20\n\t * @public\n\t */\n\t@property({ type: Number }) cols = 20\n\n\t/**\n\t * The number of rows (height) of the control.\n\t * When not set, the textarea auto-sizes to fit its content via field-sizing: content.\n\t * @attr rows\n\t * @type {number}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: Number }) rows: number | undefined\n\n\t/**\n\t * Makes the textarea fill the height of its container.\n\t * @attr fillHeight\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) fillHeight = false\n\n\t/**\n\t * Automatically adjusts height based on content.\n\t * @attr autoHeight\n\t * @type {boolean}\n\t * @default true\n\t * @public\n\t */\n\t@property({ type: Boolean }) autoHeight = true\n\n\t/**\n\t * Controls whether the textarea can be resized by the user.\n\t * @attr resize\n\t * @type {'none' | 'vertical' | 'horizontal' | 'both'}\n\t * @default 'vertical'\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) resize: 'none' | 'vertical' | 'horizontal' | 'both' = 'vertical'\n\n\t/**\n\t * Specifies how the text in a text area is to be wrapped when submitted in a form.\n\t * @attr wrap\n\t * @type {'hard' | 'soft'}\n\t * @default 'soft'\n\t * @public\n\t */\n\t@property({ type: String }) wrap: 'hard' | 'soft' = 'soft'\n\n\t/**\n\t * The dirname attribute of the control.\n\t * @attr dirname\n\t * @type {string}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: String }) dirname: string | undefined\n\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\t@property({ type: Boolean, reflect: true }) readonly = false\n\t@property({ type: Boolean, reflect: true }) spellcheck = false\n\n\t@property({ type: String, reflect: true }) align: 'left' | 'center' | 'right' = 'left'\n\n\t/**\n\t * The autofocus attribute of the control.\n\t * @attr\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean })\n\tpublic override autofocus!: boolean\n\n\t@property({ type: Number })\n\tpublic override tabIndex = 0\n\n\t@query('textarea') textareaElement!: HTMLTextAreaElement\n\n\t@property() hint: string | undefined\n\n\t@property({ type: Boolean, reflect: true }) public error = false\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t}\n\n\tprotected willUpdate(changed: PropertyValues): void {\n\t\tsuper.willUpdate?.(changed)\n\t\tif (changed.has('value') || changed.has('name')) {\n\t\t\tthis.internals?.setFormValue(this.value ?? '')\n\t\t}\n\t\tif (changed.has('required') || changed.has('value')) {\n\t\t\tif (this.required && !this.value) {\n\t\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please fill out this field.')\n\t\t\t} else {\n\t\t\t\tthis.internals?.setValidity({})\n\t\t\t}\n\t\t}\n\t}\n\n\tformResetCallback(): void {\n\t\tthis.value = this.getAttribute('value') ?? ''\n\t\tthis.error = false\n\t}\n\n\tformDisabledCallback(disabled: boolean): void {\n\t\tthis.disabled = disabled\n\t}\n\n\tfirstUpdated() {\n\t\tif (this.autofocus) {\n\t\t\tthis.focus()\n\t\t}\n\t\tif (this.autoHeight) {\n\t\t\t// Initial adjustment for pre-filled content\n\t\t\tsetTimeout(() => this.adjustHeight(), 0)\n\t\t}\n\t\tfromEvent(this.textareaElement, 'input')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\tfromEvent(this.textareaElement, 'change')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\t// emit on enter\n\t\tfromEvent<KeyboardEvent>(this.textareaElement, 'keyup')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => event.key === 'Enter'),\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('enter', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\t/** Checks for validity of the control and shows the browser message if it's invalid. */\n\tpublic reportValidity() {\n\t\treturn this.textareaRef.value?.reportValidity()\n\t}\n\n\t/** Checks for validity of the control and emits the invalid event if it invalid. */\n\tpublic checkValidity() {\n\t\treturn this.textareaRef.value?.checkValidity()\n\t}\n\n\t/** Sets a custom validity message. */\n\tpublic setCustomValidity(message: string) {\n\t\treturn this.textareaRef.value?.setCustomValidity(message)\n\t}\n\n\t/** Selects all text within the textarea. */\n\tpublic select() {\n\t\treturn this.textareaRef.value?.select()\n\t}\n\n\t/** Sets the selection range. */\n\tpublic setSelectionRange(start: number, end: number, direction?: 'forward' | 'backward' | 'none') {\n\t\tthis.textareaRef.value?.setSelectionRange(start, end, direction)\n\t}\n\n\t/** Returns the selected text within the textarea. */\n\tpublic get selectionStart(): number | null {\n\t\treturn this.textareaRef.value?.selectionStart ?? null\n\t}\n\n\tpublic get selectionEnd(): number | null {\n\t\treturn this.textareaRef.value?.selectionEnd ?? null\n\t}\n\n\tpublic get selectionDirection(): 'forward' | 'backward' | 'none' | null {\n\t\treturn this.textareaRef.value?.selectionDirection ?? null\n\t}\n\n\t/** Sets the range of text to be selected. */\n\tpublic setRangeText(replacement: string) {\n\t\tthis.textareaRef.value?.setRangeText(replacement)\n\t}\n\n\t/** Adjusts the height of the textarea based on its content. */\n\tpublic adjustHeight() {\n\t\tconst textarea = this.textareaRef.value\n\t\tif (textarea) {\n\t\t\t// Only grow, never shrink\n\t\t\tconst currentHeight = textarea.offsetHeight\n\t\t\tconst scrollHeight = textarea.scrollHeight\n\t\t\tif (scrollHeight > currentHeight) {\n\t\t\t\ttextarea.style.height = scrollHeight + 'px'\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic validity(): ValidityState | undefined {\n\t\treturn this.textareaRef.value?.validity\n\t}\n\n\tpublic override focus(\n\t\toptions: FocusOptions = {\n\t\t\tpreventScroll: true,\n\t\t},\n\t) {\n\t\tthis.textareaRef.value?.focus(options)\n\t\tthis.dispatchEvent(new Event('focus'))\n\t}\n\n\tpublic override click() {\n\t\tthis.textareaRef.value?.click()\n\t\tthis.dispatchEvent(new Event('click'))\n\t}\n\n\tpublic override blur() {\n\t\tthis.textareaRef.value?.blur()\n\t\tthis.dispatchEvent(new Event('blur'))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst textareaClasses = {\n\t\t\t// Base styles - matching input component\n\t\t\t'block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on': true,\n\t\t\t// Border color\n\t\t\t'border-outline': !this.error,\n\t\t\t'border-error-default': this.error,\n\t\t\t// Focus styles\n\t\t\t'outline-secondary-default focus:outline-1 focus:border-secondary-default': true,\n\t\t\t// Disabled styles\n\t\t\t'disabled:opacity-40 disabled:cursor-not-allowed': true,\n\t\t\t// Placeholder\n\t\t\t'placeholder:text-muted': true,\n\t\t\t// Ring styles (subtle focus ring)\n\t\t\t'ring-0 focus:ring-1 focus:ring-inset': true,\n\t\t\t'focus:ring-secondary-default': !this.error,\n\t\t\t'focus:ring-error-default': this.error,\n\t\t\t// Readonly styles\n\t\t\t'caret-transparent focus:outline-hidden cursor-pointer select-none': this.readonly,\n\t\t\t// Text alignment\n\t\t\t'text-left': this.align === 'left',\n\t\t\t'text-center': this.align === 'center',\n\t\t\t'text-right': this.align === 'right',\n\t\t\t// Textarea specific\n\t\t\t'h-full': this.fillHeight,\n\t\t\t'resize-none': this.resize === 'none',\n\t\t\t'resize-y': this.resize === 'vertical',\n\t\t\t'resize-x': this.resize === 'horizontal',\n\t\t\t'resize': this.resize === 'both',\n\t\t\t// Padding matching input\n\t\t\t'px-4 py-3': true,\n\t\t}\n\t\tconst fieldSizing = this.rows == null ? 'field-sizing: content;' : ''\n\t\tconst labelClasses = {\n\t\t\t'block mb-1 font-medium text-sm': true,\n\t\t\t'opacity-40': this.disabled,\n\t\t\t'text-primary-default': !this.error,\n\t\t\t'text-error-default': this.error,\n\t\t}\n\t\tconst containerClasses = {\n\t\t\t'w-full min-w-0': true,\n\t\t\t'flex flex-col h-full': this.fillHeight,\n\t\t}\n\t\tconst hintId = `${this._a11yId}-hint`\n\t\treturn html`\n\t\t<div class=\"${this.classMap(containerClasses)}\">\n\t\t\t${when(\n\t\t\t\tthis.label,\n\t\t\t\t() => html`\n\t\t\t\t\t<label class=\"${this.classMap(labelClasses)}\" for=${this.id}>\n\t\t\t\t\t\t${this.label}\n\t\t\t\t\t</label>\n\t\t\t\t`,\n\t\t\t)}\n\n\t\t\t<textarea\n\t\t\t\t${ref(this.textareaRef)}\n\t\t\t\t.value=${this.value}\n\t\t\t\t.id=${this.id}\n\t\t\t\t.name=${this.name}\n\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t.required=${this.required}\n\t\t\t\tclass=${this.classMap(textareaClasses)}\n\t\t\t\tstyle=${fieldSizing}\n\t\t\t\t.disabled=${this.disabled}\n\t\t\t\tminlength=${ifDefined(this.minlength)}\n\t\t\t\tmaxlength=${ifDefined(this.maxlength)}\n\t\t\t\t.readonly=${this.readonly}\n\t\t\t\t.spellcheck=${this.spellcheck}\n\t\t\t\tcols=${ifDefined(this.cols)}\n\t\t\t\trows=${ifDefined(this.rows)}\n\t\t\t\twrap=${ifDefined(this.wrap)}\n\t\t\t\tdirname=${ifDefined(this.dirname)}\n\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\taria-describedby=${this.hint ? hintId : nothing}\n\t\t\t\taria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n\t\t\t></textarea>\n\n\t\t\t${when(\n\t\t\t\tthis.hint,\n\t\t\t\t() => html`\n\t\t\t\t\t<div id=${hintId} class=\"mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}\">\n\t\t\t\t\t\t${this.hint}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t)}\n\t\t</div>\n\t\t`\n\t}\n}\n\ntype EventDetails = {\n\tvalue: string\n}\n\nexport type SchmancyTextareaChangeEvent = CustomEvent<EventDetails>\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-textarea': SchmancyTextarea\n\t}\n}\n"],"mappings":"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"}
|
package/dist/textarea.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./textarea-
|
|
1
|
+
require(`./textarea-CfQnghhD.cjs`);
|
package/dist/textarea.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./textarea-
|
|
1
|
+
import "./textarea-O9A58OZA.js";
|