@mhmo91/schmancy 0.10.36 → 0.10.38
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/custom-elements.json +54 -31
- package/dist/SchmancyElement-BNnyBOwk.js +286 -0
- package/dist/{SchmancyElement-C3CpdNsi.js.map → SchmancyElement-BNnyBOwk.js.map} +1 -1
- package/dist/SchmancyElement-C41uPa6l.cjs +2 -0
- package/dist/{SchmancyElement-BBzRWB1w.cjs.map → SchmancyElement-C41uPa6l.cjs.map} +1 -1
- package/dist/agent/schmancy.agent.js +2432 -2361
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +4 -22
- package/dist/area-2FrTZI_T.cjs +21 -0
- package/dist/area-2FrTZI_T.cjs.map +1 -0
- package/dist/{area-BA96mwFY.js → area-KVDzhT4s.js} +4 -4
- package/dist/area-KVDzhT4s.js.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +2 -2
- package/dist/{audio-D52h1jAT.js → audio-D3gnp15Y.js} +1 -1
- package/dist/{audio-D52h1jAT.js.map → audio-D3gnp15Y.js.map} +1 -1
- package/dist/{audio-B_jT9Xr7.cjs → audio-EaD0Ggfh.cjs} +1 -1
- package/dist/{audio-B_jT9Xr7.cjs.map → audio-EaD0Ggfh.cjs.map} +1 -1
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/autocomplete-DMmxsvUe.cjs +115 -0
- package/dist/autocomplete-DMmxsvUe.cjs.map +1 -0
- package/dist/{autocomplete-CI4QJXAN.js → autocomplete-DWiEqlQf.js} +96 -96
- package/dist/autocomplete-DWiEqlQf.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +1 -1
- package/dist/avatar.js +3 -3
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-_N1x5U_3.js → boat-DmyG7y1V.js} +4 -4
- package/dist/{boat-_N1x5U_3.js.map → boat-DmyG7y1V.js.map} +1 -1
- package/dist/{boat-I4B1UNMc.cjs → boat-dB1_qLm0.cjs} +1 -1
- package/dist/{boat-I4B1UNMc.cjs.map → boat-dB1_qLm0.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +3 -3
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +4 -4
- package/dist/breadcrumb.js.map +1 -1
- package/dist/{busy-BIUonyPk.cjs → busy-Cj_PV7oC.cjs} +1 -1
- package/dist/{busy-BIUonyPk.cjs.map → busy-Cj_PV7oC.cjs.map} +1 -1
- package/dist/{busy-CCB3qKnh.js → busy-enYCTssB.js} +2 -2
- package/dist/{busy-CCB3qKnh.js.map → busy-enYCTssB.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-C89bPnHt.js → button-BQSOVnHn.js} +10 -9
- package/dist/button-BQSOVnHn.js.map +1 -0
- package/dist/button-WRmXlNyw.cjs +62 -0
- package/dist/button-WRmXlNyw.cjs.map +1 -0
- package/dist/button.cjs +6 -6
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +17 -16
- package/dist/button.js.map +1 -1
- package/dist/{card-CFsCgJKZ.js → card-BHTz1GwB.js} +16 -16
- package/dist/card-BHTz1GwB.js.map +1 -0
- package/dist/{card-BO93_oxQ.cjs → card-ThG_ZaQE.cjs} +3 -3
- package/dist/card-ThG_ZaQE.cjs.map +1 -0
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-CFUBUFtW.cjs → checkbox-C4zeib84.cjs} +2 -2
- package/dist/{checkbox-CFUBUFtW.cjs.map → checkbox-C4zeib84.cjs.map} +1 -1
- package/dist/{checkbox-Bh7q0djq.js → checkbox-Ce0DlAdW.js} +6 -6
- package/dist/{checkbox-Bh7q0djq.js.map → checkbox-Ce0DlAdW.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-BfzpsyV1.cjs → chips-B1jui8Pe.cjs} +3 -3
- package/dist/chips-B1jui8Pe.cjs.map +1 -0
- package/dist/{chips-6YaoRmeG.js → chips-DAy6v93f.js} +20 -19
- package/dist/chips-DAy6v93f.js.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/connectivity.cjs +1 -1
- package/dist/connectivity.js +3 -3
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/cursor-glow-Ah7VXSj7.js.map +1 -1
- package/dist/cursor-glow-Bulq-38P.cjs.map +1 -1
- package/dist/{date-range-N-A249O9.cjs → date-range-BUaPgbTZ.cjs} +2 -2
- package/dist/date-range-BUaPgbTZ.cjs.map +1 -0
- package/dist/{date-range-CEo_Kjqw.js → date-range-NTpoA1in.js} +4 -4
- package/dist/date-range-NTpoA1in.js.map +1 -0
- package/dist/{date-range-inline-DFopysWF.cjs → date-range-inline-D0I6k84h.cjs} +1 -1
- package/dist/{date-range-inline-DFopysWF.cjs.map → date-range-inline-D0I6k84h.cjs.map} +1 -1
- package/dist/{date-range-inline-BwialV9j.js → date-range-inline-DjRdMZ1z.js} +2 -2
- package/dist/{date-range-inline-BwialV9j.js.map → date-range-inline-DjRdMZ1z.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +2 -2
- package/dist/{details-GtpfI2hA.js → details-CY49XVfp.js} +43 -35
- package/dist/details-CY49XVfp.js.map +1 -0
- package/dist/details-DQNj2oaU.cjs +164 -0
- package/dist/details-DQNj2oaU.cjs.map +1 -0
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{directives-CvYGSW_a.cjs → directives-Bb0S1DKZ.cjs} +4 -4
- package/dist/directives-Bb0S1DKZ.cjs.map +1 -0
- package/dist/{directives-C2dXgpCY.js → directives-Bfm1lkoy.js} +30 -23
- package/dist/directives-Bfm1lkoy.js.map +1 -0
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +2 -2
- package/dist/{divider-D0pGX2VB.js → divider-BeyX_C0A.js} +2 -2
- package/dist/{divider-D0pGX2VB.js.map → divider-BeyX_C0A.js.map} +1 -1
- package/dist/{divider-rNsWCvMi.cjs → divider-Ck2C1sKl.cjs} +1 -1
- package/dist/{divider-rNsWCvMi.cjs.map → divider-Ck2C1sKl.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +2 -2
- package/dist/{expand-FcKAzJta.js → expand-BYsSEtp6.js} +53 -53
- package/dist/expand-BYsSEtp6.js.map +1 -0
- package/dist/expand-CUF163mg.cjs +141 -0
- package/dist/expand-CUF163mg.cjs.map +1 -0
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/fab.cjs +1 -1
- package/dist/fab.js +2 -2
- package/dist/{float-CQ1WEp3M.js → float-Cgllk_H9.js} +2 -2
- package/dist/{float-CQ1WEp3M.js.map → float-Cgllk_H9.js.map} +1 -1
- package/dist/{float-CDjgxWyy.cjs → float-OvqX0nqG.cjs} +1 -1
- package/dist/{float-CDjgxWyy.cjs.map → float-OvqX0nqG.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/form-4GKROq2P.cjs +27 -0
- package/dist/form-4GKROq2P.cjs.map +1 -0
- package/dist/{form-H24puioV.js → form-DxaV_Ose.js} +39 -39
- package/dist/form-DxaV_Ose.js.map +1 -0
- package/dist/form.cjs +3 -3
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +34 -34
- package/dist/form.js.map +1 -1
- package/dist/gravity-6pL6CfIr.cjs.map +1 -1
- package/dist/gravity-sVK3zGBF.js.map +1 -1
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{icons-DBxfN91B.js → icons-CJ2mXcBi.js} +9 -9
- package/dist/icons-CJ2mXcBi.js.map +1 -0
- package/dist/icons-sZ-LybA9.cjs +24 -0
- package/dist/icons-sZ-LybA9.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-BDVElN8z.js → iframe-DWvN5nGB.js} +11 -11
- package/dist/iframe-DWvN5nGB.js.map +1 -0
- package/dist/{iframe-CG-z9qev.cjs → iframe-DpCv-QH2.cjs} +7 -7
- package/dist/iframe-DpCv-QH2.cjs.map +1 -0
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +37 -37
- package/dist/{input-Bt_o4sYo.js → input-BCCHz6tB.js} +7 -7
- package/dist/input-BCCHz6tB.js.map +1 -0
- package/dist/{input-B14Nn6xD.cjs → input-Z-3N5JMv.cjs} +2 -2
- package/dist/input-Z-3N5JMv.cjs.map +1 -0
- package/dist/{input-chip-DEqO0DXc.js → input-chip-BOrcKH-H.js} +2 -2
- package/dist/{input-chip-DEqO0DXc.js.map → input-chip-BOrcKH-H.js.map} +1 -1
- package/dist/{input-chip-ugYu9Fn9.cjs → input-chip-ChAgRCXZ.cjs} +1 -1
- package/dist/{input-chip-ugYu9Fn9.cjs.map → input-chip-ChAgRCXZ.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +3 -3
- package/dist/kbd.cjs +1 -1
- package/dist/kbd.js +2 -2
- package/dist/{layout-BJ_43VrH.js → layout-CFiG3lNT.js} +1 -1
- package/dist/{layout-BJ_43VrH.js.map → layout-CFiG3lNT.js.map} +1 -1
- package/dist/{layout-DF9ZaQ-b.cjs → layout-DZ4dpLh9.cjs} +1 -1
- package/dist/{layout-DF9ZaQ-b.cjs.map → layout-DZ4dpLh9.cjs.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/lazy-BaAiIUru.js +19 -0
- package/dist/lazy-BaAiIUru.js.map +1 -0
- package/dist/lazy-C-7a4FAe.cjs +1 -0
- package/dist/lazy-C-7a4FAe.cjs.map +1 -0
- package/dist/{lightbox-ZmuoBBFT.js → lightbox-B7Y4Nij_.js} +2 -2
- package/dist/lightbox-B7Y4Nij_.js.map +1 -0
- package/dist/{lightbox-B47Zoqv-.cjs → lightbox-Dpwsn8Qr.cjs} +1 -1
- package/dist/lightbox-Dpwsn8Qr.cjs.map +1 -0
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-CaSWrlG2.cjs → list-BhM-6dAi.cjs} +1 -1
- package/dist/{list-CaSWrlG2.cjs.map → list-BhM-6dAi.cjs.map} +1 -1
- package/dist/{list-C47xzld_.js → list-C5WVoIfJ.js} +2 -2
- package/dist/{list-C47xzld_.js.map → list-C5WVoIfJ.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/magnetic-DKtc4umC.cjs.map +1 -1
- package/dist/magnetic-DaOOv5Dz.js.map +1 -1
- package/dist/{menu-8RObM6Ie.js → menu-CBAAJoHu.js} +3 -3
- package/dist/{menu-8RObM6Ie.js.map → menu-CBAAJoHu.js.map} +1 -1
- package/dist/{menu-Jpsy85SX.cjs → menu-DFQjJk3H.cjs} +1 -1
- package/dist/{menu-Jpsy85SX.cjs.map → menu-DFQjJk3H.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/{mixins-DTzfFVyv.js → mixins-DGBI7YPO.js} +11 -11
- package/dist/mixins-DGBI7YPO.js.map +1 -0
- package/dist/{mixins-DPdzC9ZH.cjs → mixins-fIpzhVMd.cjs} +1 -1
- package/dist/mixins-fIpzhVMd.cjs.map +1 -0
- 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 +3 -3
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +11 -10
- package/dist/navigation-rail.js.map +1 -1
- package/dist/notification-B6yDL91t.cjs +24 -0
- package/dist/notification-B6yDL91t.cjs.map +1 -0
- package/dist/{notification-Ccktcj9H.js → notification-BB9OBRCr.js} +22 -22
- package/dist/notification-BB9OBRCr.js.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-CkMxwBqU.js → option-B21ImL0k.js} +2 -2
- package/dist/{option-CkMxwBqU.js.map → option-B21ImL0k.js.map} +1 -1
- package/dist/{option-0aNiVB3Q.cjs → option-CJQM5I9q.cjs} +1 -1
- package/dist/{option-0aNiVB3Q.cjs.map → option-CJQM5I9q.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-H3Wt_dgQ.js → overlay-CWsihJ-E.js} +75 -67
- package/dist/overlay-CWsihJ-E.js.map +1 -0
- package/dist/overlay-DkIX9Ig3.cjs +58 -0
- package/dist/overlay-DkIX9Ig3.cjs.map +1 -0
- package/dist/overlay.cjs +1 -1
- package/dist/{overlay.confirm-body-Dxn_wNm3.js → overlay.confirm-body-CPqqPNks.js} +10 -10
- package/dist/overlay.confirm-body-CPqqPNks.js.map +1 -0
- package/dist/{overlay.confirm-body-CR9xaqOE.cjs → overlay.confirm-body-DwTfiNlV.cjs} +3 -3
- package/dist/overlay.confirm-body-DwTfiNlV.cjs.map +1 -0
- package/dist/overlay.js +4 -4
- package/dist/overlay.service-DU1nqh6A.cjs +1 -0
- package/dist/{overlay.service-DEj3rfRr.cjs.map → overlay.service-DU1nqh6A.cjs.map} +1 -1
- package/dist/{overlay.service-C46kOtUi.js → overlay.service-KTgBxjFb.js} +4 -4
- package/dist/{overlay.service-C46kOtUi.js.map → overlay.service-KTgBxjFb.js.map} +1 -1
- package/dist/{progress-zs18GR6C.cjs → progress-B-Qg44XY.cjs} +1 -1
- package/dist/{progress-zs18GR6C.cjs.map → progress-B-Qg44XY.cjs.map} +1 -1
- package/dist/{progress-BK7gSq8j.js → progress-CUSS1sNz.js} +2 -2
- package/dist/{progress-BK7gSq8j.js.map → progress-CUSS1sNz.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-1HCpzRUB.js → radio-group-AHLvrN8O.js} +7 -7
- package/dist/radio-group-AHLvrN8O.js.map +1 -0
- package/dist/{radio-group-DbYlyPc-.cjs → radio-group-BEtvCSS1.cjs} +2 -2
- package/dist/radio-group-BEtvCSS1.cjs.map +1 -0
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +2 -2
- package/dist/select-BWpV2iv-.cjs +56 -0
- package/dist/select-BWpV2iv-.cjs.map +1 -0
- package/dist/{select-CEyhNtZ2.js → select-Cawz88lG.js} +46 -46
- package/dist/select-Cawz88lG.js.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.cjs +1 -1
- package/dist/skeleton.js +2 -2
- package/dist/skills/SKILL.md +17 -11
- package/dist/skills/overlay.md +14 -7
- package/dist/skills/schmancy/SKILL.md +17 -11
- package/dist/skills/schmancy/overlay.md +14 -7
- package/dist/skills/schmancy/steps.md +68 -34
- package/dist/skills/steps.md +68 -34
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +2 -2
- package/dist/{sound.service-DO4SmUUT.js → sound.service-CK-5zob-.js} +4 -3
- package/dist/sound.service-CK-5zob-.js.map +1 -0
- package/dist/{sound.service-G_8GV_6L.cjs → sound.service-D2GGaBXc.cjs} +1 -1
- package/dist/sound.service-D2GGaBXc.cjs.map +1 -0
- package/dist/{splash-screen-B1mM4_xz.js → splash-screen-BUEtjHXC.js} +13 -13
- package/dist/splash-screen-BUEtjHXC.js.map +1 -0
- package/dist/{splash-screen-cbz4bxjB.cjs → splash-screen-DqPuipox.cjs} +6 -6
- package/dist/splash-screen-DqPuipox.cjs.map +1 -0
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-tncsWsTY.js → src-CIqAj3Eh.js} +45 -45
- package/dist/src-CIqAj3Eh.js.map +1 -0
- package/dist/{src-czeiuT1m.cjs → src-CYqBQTyt.cjs} +6 -6
- package/dist/src-CYqBQTyt.cjs.map +1 -0
- package/dist/{state-Cx0aoL5e.cjs → state-BxDNox-2.cjs} +1 -1
- package/dist/{state-Cx0aoL5e.cjs.map → state-BxDNox-2.cjs.map} +1 -1
- package/dist/{state-DJDp3N7J.js → state-CnZCDMT0.js} +9 -9
- package/dist/{state-DJDp3N7J.js.map → state-CnZCDMT0.js.map} +1 -1
- package/dist/state.cjs +1 -1
- package/dist/state.js +2 -2
- package/dist/steps.cjs +35 -19
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +96 -73
- package/dist/steps.js.map +1 -1
- package/dist/{surface-CYBl8_a3.js → surface-BMdG3dKQ.js} +2 -2
- package/dist/{surface-CYBl8_a3.js.map → surface-BMdG3dKQ.js.map} +1 -1
- package/dist/{surface-C3cxTcJD.cjs → surface-CWwYD_z2.cjs} +1 -1
- package/dist/{surface-C3cxTcJD.cjs.map → surface-CWwYD_z2.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +4 -4
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +11 -11
- package/dist/switch.js.map +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +2 -2
- package/dist/{tabs-DHy93Q3N.js → tabs-CDQYDc6v.js} +2 -2
- package/dist/{tabs-DHy93Q3N.js.map → tabs-CDQYDc6v.js.map} +1 -1
- package/dist/{tabs-ORQ_Zd43.cjs → tabs-CbD9E1gd.cjs} +1 -1
- package/dist/{tabs-ORQ_Zd43.cjs.map → tabs-CbD9E1gd.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/textarea-Brgi-vD2.cjs +43 -0
- package/dist/textarea-Brgi-vD2.cjs.map +1 -0
- package/dist/{textarea-DHIMt-ly.js → textarea-MPyrMi-S.js} +4 -4
- package/dist/textarea-MPyrMi-S.js.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-CJpjkqHr.cjs → theme-BMbXoqi0.cjs} +1 -1
- package/dist/{theme-CJpjkqHr.cjs.map → theme-BMbXoqi0.cjs.map} +1 -1
- package/dist/{theme-CgI9PRco.js → theme-DZu-xmVp.js} +5 -5
- package/dist/{theme-CgI9PRco.js.map → theme-DZu-xmVp.js.map} +1 -1
- package/dist/{theme-button--FuBkuVr.cjs → theme-button-B0OLb-43.cjs} +1 -1
- package/dist/{theme-button--FuBkuVr.cjs.map → theme-button-B0OLb-43.cjs.map} +1 -1
- package/dist/{theme-button-D-FXb3oO.js → theme-button-D_qGvEYs.js} +2 -2
- package/dist/{theme-button-D-FXb3oO.js.map → theme-button-D_qGvEYs.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +3 -3
- package/dist/{theme.service-BfTK1Wtl.js → theme.service-7VkM-hVf.js} +15 -11
- package/dist/theme.service-7VkM-hVf.js.map +1 -0
- package/dist/theme.service-B15FdjOS.cjs +1 -0
- package/dist/theme.service-B15FdjOS.cjs.map +1 -0
- package/dist/tree.cjs +4 -4
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +8 -8
- package/dist/tree.js.map +1 -1
- package/dist/{typography-CxA3sx9B.cjs → typography-D4Fo1UGh.cjs} +3 -3
- package/dist/{typography-CxA3sx9B.cjs.map → typography-D4Fo1UGh.cjs.map} +1 -1
- package/dist/{typography-BEGLfHwz.js → typography-SZhjb_4R.js} +9 -9
- package/dist/{typography-BEGLfHwz.js.map → typography-SZhjb_4R.js.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/visually-hidden.cjs +1 -1
- package/dist/visually-hidden.js +2 -2
- package/dist/{window-B_n4P9az.js → window-BDVyrBnk.js} +101 -100
- package/dist/window-BDVyrBnk.js.map +1 -0
- package/dist/window-BbBYjm7R.cjs +59 -0
- package/dist/window-BbBYjm7R.cjs.map +1 -0
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/SKILL.md +17 -11
- package/skills/schmancy/overlay.md +14 -7
- package/skills/schmancy/steps.md +68 -34
- package/src/area/area.component.ts +1 -1
- package/src/area/area.service.test.ts +2 -2
- package/src/area/area.service.ts +1 -1
- package/src/area/lazy.ts +87 -83
- package/src/audio/sound.service.ts +3 -3
- package/src/breadcrumb/breadcrumb.ts +2 -2
- package/src/button/button.ts +11 -11
- package/src/button/icon-button.ts +18 -18
- package/src/card/card.ts +16 -16
- package/src/content-drawer/drawer.ts +6 -6
- package/src/details/details.ts +55 -55
- package/src/directives/ai-badge.ts +2 -1
- package/src/directives/animate-text.ts +2 -1
- package/src/directives/art/art.directive.ts +2 -1
- package/src/directives/battery.ts +2 -1
- package/src/directives/confirm-click.ts +5 -3
- package/src/directives/cursor-glow.ts +2 -1
- package/src/directives/cycle-text.ts +2 -1
- package/src/directives/depth-of-field.ts +2 -1
- package/src/directives/drag.ts +4 -2
- package/src/directives/fyi.ts +2 -1
- package/src/directives/gravity.ts +2 -1
- package/src/directives/hummingbird.ts +2 -1
- package/src/directives/intersect.ts +3 -2
- package/src/directives/liquid.ts +2 -1
- package/src/directives/living-border.ts +2 -1
- package/src/directives/long-press.ts +2 -1
- package/src/directives/magnetic.ts +2 -1
- package/src/directives/missed-punch.ts +2 -1
- package/src/directives/nebula.ts +6 -5
- package/src/directives/overflow-within.ts +2 -1
- package/src/directives/reveal.ts +193 -118
- package/src/directives/urgent.ts +2 -1
- package/src/directives/working-snake.ts +2 -1
- package/src/expand/expand-root.component.ts +27 -27
- package/src/expand/expand.component.ts +48 -48
- package/src/form/fields/autocomplete/autocomplete.ts +154 -154
- package/src/form/fields/checkbox/checkbox.ts +4 -4
- package/src/form/fields/chips/chips.ts +2 -2
- package/src/form/fields/chips/filter-chip.ts +15 -15
- package/src/form/fields/date-range/date-range.ts +2 -2
- package/src/form/fields/input/input.ts +12 -12
- package/src/form/fields/radio-group/radio-button.ts +2 -2
- package/src/form/fields/radio-group/radio-group.ts +3 -3
- package/src/form/fields/select/select.ts +56 -56
- package/src/form/fields/switch/switch.ts +10 -10
- package/src/form/fields/textarea/textarea.ts +2 -2
- package/src/form/form-summary.ts +33 -33
- package/src/form/form.ts +45 -45
- package/src/icons/icon.ts +10 -8
- package/src/iframe/iframe.ts +11 -11
- package/src/lightbox/flip-directive.ts +2 -1
- package/src/lightbox/lightbox.directive.ts +2 -1
- package/src/nav-drawer/navbar.ts +3 -3
- package/src/navigation-rail/navigation-rail.ts +10 -10
- package/src/notification/notification.ts +22 -22
- package/src/overlay/overlay.component.ts +106 -83
- package/src/overlay/overlay.confirm-body.ts +4 -4
- package/src/overlay/overlay.service.ts +3 -3
- package/src/overlay/overlay.types.ts +4 -2
- package/src/splash-screen/splash-screen.ts +11 -11
- package/src/state/index.ts +12 -12
- package/src/state/schmancy-context.ts +9 -9
- package/src/steps/index.ts +1 -1
- package/src/steps/schmancy-step.ts +91 -65
- package/src/steps/{schmancy-steps-container.ts → schmancy-steps.ts} +18 -38
- package/src/steps/steps.context.ts +5 -4
- package/src/steps/steps.test.ts +120 -0
- package/src/teleport/teleport.component.ts +2 -2
- package/src/theme/theme.service.ts +17 -17
- package/src/tree/tree.ts +7 -7
- package/src/typography/typography.ts +7 -7
- package/src/window/window-manager.ts +20 -20
- package/src/window/window.ts +100 -100
- package/types/mixins/SchmancyElement.d.ts +3 -2
- package/types/mixins/formField.mixin.d.ts +1 -1
- package/types/src/area/area.service.d.ts +1 -1
- package/types/src/area/lazy.d.ts +0 -6
- package/types/src/audio/sound.service.d.ts +1 -2
- package/types/src/breadcrumb/breadcrumb.d.ts +1 -1
- package/types/src/button/button.d.ts +3 -3
- package/types/src/button/icon-button.d.ts +6 -7
- package/types/src/card/card.d.ts +5 -5
- package/types/src/content-drawer/drawer.d.ts +1 -1
- package/types/src/details/details.d.ts +2 -21
- package/types/src/directives/ai-badge.d.ts +2 -2
- package/types/src/directives/animate-text.d.ts +2 -2
- package/types/src/directives/art/art.directive.d.ts +2 -2
- package/types/src/directives/battery.d.ts +2 -2
- package/types/src/directives/confirm-click.d.ts +2 -2
- package/types/src/directives/cursor-glow.d.ts +2 -2
- package/types/src/directives/cycle-text.d.ts +2 -2
- package/types/src/directives/depth-of-field.d.ts +2 -2
- package/types/src/directives/drag.d.ts +4 -4
- package/types/src/directives/fyi.d.ts +2 -2
- package/types/src/directives/gravity.d.ts +2 -2
- package/types/src/directives/hummingbird.d.ts +2 -2
- package/types/src/directives/intersect.d.ts +2 -2
- package/types/src/directives/liquid.d.ts +2 -2
- package/types/src/directives/living-border.d.ts +2 -2
- package/types/src/directives/long-press.d.ts +2 -2
- package/types/src/directives/magnetic.d.ts +2 -2
- package/types/src/directives/missed-punch.d.ts +2 -2
- package/types/src/directives/nebula.d.ts +2 -2
- package/types/src/directives/overflow-within.d.ts +2 -2
- package/types/src/directives/reveal.d.ts +17 -7
- package/types/src/directives/urgent.d.ts +2 -2
- package/types/src/directives/working-snake.d.ts +2 -2
- package/types/src/expand/expand-root.component.d.ts +8 -8
- package/types/src/expand/expand.component.d.ts +11 -11
- package/types/src/form/fields/autocomplete/autocomplete.d.ts +29 -29
- package/types/src/form/fields/checkbox/checkbox.d.ts +1 -1
- package/types/src/form/fields/chips/chips.d.ts +1 -1
- package/types/src/form/fields/chips/filter-chip.d.ts +1 -2
- package/types/src/form/fields/input/input.d.ts +3 -3
- package/types/src/form/fields/radio-group/radio-button.d.ts +1 -1
- package/types/src/form/fields/radio-group/radio-group.d.ts +1 -1
- package/types/src/form/fields/select/select.d.ts +8 -8
- package/types/src/form/fields/switch/switch.d.ts +3 -3
- package/types/src/form/fields/textarea/textarea.d.ts +1 -1
- package/types/src/form/form-summary.d.ts +7 -7
- package/types/src/form/form.d.ts +11 -11
- package/types/src/icons/icon.d.ts +2 -2
- package/types/src/iframe/iframe.d.ts +3 -3
- package/types/src/lightbox/flip-directive.d.ts +2 -2
- package/types/src/lightbox/lightbox.directive.d.ts +2 -2
- package/types/src/nav-drawer/navbar.d.ts +1 -1
- package/types/src/navigation-rail/navigation-rail.d.ts +2 -2
- package/types/src/notification/notification.d.ts +8 -8
- package/types/src/overlay/overlay.component.d.ts +16 -16
- package/types/src/overlay/overlay.confirm-body.d.ts +1 -1
- package/types/src/overlay/overlay.types.d.ts +4 -2
- package/types/src/splash-screen/splash-screen.d.ts +2 -2
- package/types/src/state/index.d.ts +1 -1
- package/types/src/state/schmancy-context.d.ts +3 -3
- package/types/src/steps/index.d.ts +1 -1
- package/types/src/steps/schmancy-step.d.ts +8 -23
- package/types/src/steps/{schmancy-steps-container.d.ts → schmancy-steps.d.ts} +8 -9
- package/types/src/steps/steps.context.d.ts +2 -1
- package/types/src/steps/steps.test.d.ts +2 -0
- package/types/src/teleport/teleport.component.d.ts +1 -1
- package/types/src/theme/theme.service.d.ts +1 -4
- package/types/src/tree/tree.d.ts +3 -3
- package/types/src/typography/typography.d.ts +1 -1
- package/types/src/window/window-manager.d.ts +2 -2
- package/types/src/window/window.d.ts +20 -20
- package/dist/SchmancyElement-BBzRWB1w.cjs +0 -2
- package/dist/SchmancyElement-C3CpdNsi.js +0 -284
- package/dist/area-BA96mwFY.js.map +0 -1
- package/dist/area-DtyQDdOF.cjs +0 -21
- package/dist/area-DtyQDdOF.cjs.map +0 -1
- package/dist/autocomplete-Bts5Jwwr.cjs +0 -115
- package/dist/autocomplete-Bts5Jwwr.cjs.map +0 -1
- package/dist/autocomplete-CI4QJXAN.js.map +0 -1
- package/dist/button-C89bPnHt.js.map +0 -1
- package/dist/button-CkwQH-g3.cjs +0 -62
- package/dist/button-CkwQH-g3.cjs.map +0 -1
- package/dist/card-BO93_oxQ.cjs.map +0 -1
- package/dist/card-CFsCgJKZ.js.map +0 -1
- package/dist/chips-6YaoRmeG.js.map +0 -1
- package/dist/chips-BfzpsyV1.cjs.map +0 -1
- package/dist/date-range-CEo_Kjqw.js.map +0 -1
- package/dist/date-range-N-A249O9.cjs.map +0 -1
- package/dist/details-BLRPV8sY.cjs +0 -164
- package/dist/details-BLRPV8sY.cjs.map +0 -1
- package/dist/details-GtpfI2hA.js.map +0 -1
- package/dist/directives-C2dXgpCY.js.map +0 -1
- package/dist/directives-CvYGSW_a.cjs.map +0 -1
- package/dist/expand-FcKAzJta.js.map +0 -1
- package/dist/expand-tffQHGbZ.cjs +0 -141
- package/dist/expand-tffQHGbZ.cjs.map +0 -1
- package/dist/form-H24puioV.js.map +0 -1
- package/dist/form-VYhbbir3.cjs +0 -27
- package/dist/form-VYhbbir3.cjs.map +0 -1
- package/dist/icons-B_a1HStW.cjs +0 -24
- package/dist/icons-B_a1HStW.cjs.map +0 -1
- package/dist/icons-DBxfN91B.js.map +0 -1
- package/dist/iframe-BDVElN8z.js.map +0 -1
- package/dist/iframe-CG-z9qev.cjs.map +0 -1
- package/dist/input-B14Nn6xD.cjs.map +0 -1
- package/dist/input-Bt_o4sYo.js.map +0 -1
- package/dist/lazy-CayEFyC3.cjs +0 -1
- package/dist/lazy-CayEFyC3.cjs.map +0 -1
- package/dist/lazy-D-bO2r4m.js +0 -13
- package/dist/lazy-D-bO2r4m.js.map +0 -1
- package/dist/lightbox-B47Zoqv-.cjs.map +0 -1
- package/dist/lightbox-ZmuoBBFT.js.map +0 -1
- package/dist/mixins-DPdzC9ZH.cjs.map +0 -1
- package/dist/mixins-DTzfFVyv.js.map +0 -1
- package/dist/notification-Ccktcj9H.js.map +0 -1
- package/dist/notification-DSkB-sn0.cjs +0 -24
- package/dist/notification-DSkB-sn0.cjs.map +0 -1
- package/dist/overlay-BS-ta-zq.cjs +0 -58
- package/dist/overlay-BS-ta-zq.cjs.map +0 -1
- package/dist/overlay-H3Wt_dgQ.js.map +0 -1
- package/dist/overlay.confirm-body-CR9xaqOE.cjs.map +0 -1
- package/dist/overlay.confirm-body-Dxn_wNm3.js.map +0 -1
- package/dist/overlay.service-DEj3rfRr.cjs +0 -1
- package/dist/radio-group-1HCpzRUB.js.map +0 -1
- package/dist/radio-group-DbYlyPc-.cjs.map +0 -1
- package/dist/select-B-SSmUDe.cjs +0 -56
- package/dist/select-B-SSmUDe.cjs.map +0 -1
- package/dist/select-CEyhNtZ2.js.map +0 -1
- package/dist/sound.service-DO4SmUUT.js.map +0 -1
- package/dist/sound.service-G_8GV_6L.cjs.map +0 -1
- package/dist/splash-screen-B1mM4_xz.js.map +0 -1
- package/dist/splash-screen-cbz4bxjB.cjs.map +0 -1
- package/dist/src-czeiuT1m.cjs.map +0 -1
- package/dist/src-tncsWsTY.js.map +0 -1
- package/dist/textarea-CEUaDURR.cjs +0 -43
- package/dist/textarea-CEUaDURR.cjs.map +0 -1
- package/dist/textarea-DHIMt-ly.js.map +0 -1
- package/dist/theme.service-BfTK1Wtl.js.map +0 -1
- package/dist/theme.service-Dg7LO0Qz.cjs +0 -1
- package/dist/theme.service-Dg7LO0Qz.cjs.map +0 -1
- package/dist/window-B_n4P9az.js.map +0 -1
- package/dist/window-Vl1u1-EG.cjs +0 -59
- package/dist/window-Vl1u1-EG.cjs.map +0 -1
|
@@ -49,14 +49,14 @@ class SchmancyCheckboxElement extends SchmancyFormField() {
|
|
|
49
49
|
@property({ type: String })
|
|
50
50
|
size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' = 'md'
|
|
51
51
|
|
|
52
|
-
private get
|
|
52
|
+
private get trueValue(): string {
|
|
53
53
|
return this.getAttribute('true-value') ?? 'on'
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
override willUpdate(changed: PropertyValues): void {
|
|
57
57
|
super.willUpdate(changed)
|
|
58
58
|
if (changed.has('value') || changed.has('name')) {
|
|
59
|
-
this.internals?.setFormValue(this.value ? this.
|
|
59
|
+
this.internals?.setFormValue(this.value ? this.trueValue : null)
|
|
60
60
|
if (this.value) this.internals?.states.add('checked')
|
|
61
61
|
else this.internals?.states.delete('checked')
|
|
62
62
|
this.checkValidity()
|
|
@@ -80,7 +80,7 @@ class SchmancyCheckboxElement extends SchmancyFormField() {
|
|
|
80
80
|
isValid ? undefined : message,
|
|
81
81
|
)
|
|
82
82
|
|
|
83
|
-
if (this.
|
|
83
|
+
if (this.shouldShowError()) {
|
|
84
84
|
this.error = !isValid
|
|
85
85
|
this.validationMessage = message
|
|
86
86
|
}
|
|
@@ -90,7 +90,7 @@ class SchmancyCheckboxElement extends SchmancyFormField() {
|
|
|
90
90
|
/** Emit only when checked. */
|
|
91
91
|
override toFormEntries(): Array<[string, FormDataEntryValue]> {
|
|
92
92
|
if (!this.name || this.disabled || !this.value) return []
|
|
93
|
-
return [[this.name, this.
|
|
93
|
+
return [[this.name, this.trueValue]]
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
render() {
|
|
@@ -178,8 +178,8 @@ export default class SchmancyChips extends SchmancyFormField(css`
|
|
|
178
178
|
this.values$.next([])
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
protected firstUpdated(
|
|
182
|
-
super.firstUpdated(
|
|
181
|
+
protected firstUpdated(changedProperties: PropertyValues): void {
|
|
182
|
+
super.firstUpdated(changedProperties)
|
|
183
183
|
this.updateChipStates(this.value$.value, this.values$.value)
|
|
184
184
|
}
|
|
185
185
|
|
|
@@ -52,15 +52,15 @@ export class SchmancyFilterChip extends SchmancyElement {
|
|
|
52
52
|
value: string = ''
|
|
53
53
|
|
|
54
54
|
/** Whether the filter chip is selected (active filter) */
|
|
55
|
-
|
|
55
|
+
#selected: boolean = false
|
|
56
56
|
|
|
57
57
|
@property({ type: Boolean, reflect: true })
|
|
58
58
|
get selected(): boolean {
|
|
59
|
-
return this
|
|
59
|
+
return this.#selected
|
|
60
60
|
}
|
|
61
61
|
set selected(value: boolean) {
|
|
62
|
-
const oldValue = this
|
|
63
|
-
this
|
|
62
|
+
const oldValue = this.#selected
|
|
63
|
+
this.#selected = value
|
|
64
64
|
this.requestUpdate('selected', oldValue)
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -104,12 +104,12 @@ export class SchmancyFilterChip extends SchmancyElement {
|
|
|
104
104
|
protected updated(changed: Map<string, unknown>) {
|
|
105
105
|
super.updated?.(changed)
|
|
106
106
|
if (changed.has('value') || changed.has('selected')) {
|
|
107
|
-
this.internals?.setFormValue(this
|
|
107
|
+
this.internals?.setFormValue(this.#selected ? (this.value || 'on') : null)
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
formResetCallback(): void {
|
|
112
|
-
this
|
|
112
|
+
this.#selected = this.hasAttribute('selected')
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
formDisabledCallback(disabled: boolean): void {
|
|
@@ -121,7 +121,7 @@ export class SchmancyFilterChip extends SchmancyElement {
|
|
|
121
121
|
|
|
122
122
|
this.dispatchEvent(
|
|
123
123
|
new CustomEvent('change', {
|
|
124
|
-
detail: { value: this.value, selected: !this
|
|
124
|
+
detail: { value: this.value, selected: !this.#selected },
|
|
125
125
|
bubbles: true,
|
|
126
126
|
composed: true,
|
|
127
127
|
}),
|
|
@@ -149,7 +149,7 @@ export class SchmancyFilterChip extends SchmancyElement {
|
|
|
149
149
|
e.preventDefault()
|
|
150
150
|
this.dispatchEvent(
|
|
151
151
|
new CustomEvent('change', {
|
|
152
|
-
detail: { value: this.value, selected: !this
|
|
152
|
+
detail: { value: this.value, selected: !this.#selected },
|
|
153
153
|
bubbles: true,
|
|
154
154
|
composed: true,
|
|
155
155
|
}),
|
|
@@ -175,14 +175,14 @@ export class SchmancyFilterChip extends SchmancyElement {
|
|
|
175
175
|
'min-h-[32px]': true,
|
|
176
176
|
|
|
177
177
|
// Background and text colors based on selection state
|
|
178
|
-
'bg-secondary-container': this
|
|
179
|
-
'text-secondary-onContainer': this
|
|
180
|
-
'bg-surface-container': !this
|
|
181
|
-
'text-surface-on': !this
|
|
178
|
+
'bg-secondary-container': this.#selected,
|
|
179
|
+
'text-secondary-onContainer': this.#selected,
|
|
180
|
+
'bg-surface-container': !this.#selected,
|
|
181
|
+
'text-surface-on': !this.#selected,
|
|
182
182
|
|
|
183
183
|
// Hover states
|
|
184
|
-
'hover:brightness-95': this
|
|
185
|
-
'hover:bg-surface-containerHigh': !this
|
|
184
|
+
'hover:brightness-95': this.#selected && !this.disabled,
|
|
185
|
+
'hover:bg-surface-containerHigh': !this.#selected && !this.disabled,
|
|
186
186
|
|
|
187
187
|
// Pressed state
|
|
188
188
|
'active:brightness-90': !this.disabled,
|
|
@@ -209,7 +209,7 @@ export class SchmancyFilterChip extends SchmancyElement {
|
|
|
209
209
|
@click=${this.handleClick}
|
|
210
210
|
@keydown=${this.handleKeyDown}
|
|
211
211
|
?disabled=${this.disabled}
|
|
212
|
-
aria-pressed=${this
|
|
212
|
+
aria-pressed=${this.#selected ? 'true' : 'false'}
|
|
213
213
|
role="checkbox"
|
|
214
214
|
tabindex="0"
|
|
215
215
|
>
|
|
@@ -221,7 +221,7 @@ export class SchmancyDateRange extends SchmancyFormField() {
|
|
|
221
221
|
isValid ? undefined : message,
|
|
222
222
|
)
|
|
223
223
|
|
|
224
|
-
if (this.
|
|
224
|
+
if (this.shouldShowError()) {
|
|
225
225
|
this.error = !isValid
|
|
226
226
|
this.validationMessage = message
|
|
227
227
|
}
|
|
@@ -528,7 +528,7 @@ export class SchmancyDateRange extends SchmancyFormField() {
|
|
|
528
528
|
|
|
529
529
|
render() {
|
|
530
530
|
// Step 6 — validity is two surfaces: when checkValidity() has flipped
|
|
531
|
-
// `error` (gated by `
|
|
531
|
+
// `error` (gated by `shouldShowError`), the control must visibly carry
|
|
532
532
|
// the invalid treatment AND render the message. Platform validity is
|
|
533
533
|
// set in checkValidity(); this paints the user-facing half.
|
|
534
534
|
const showError = this.error && !!this.validationMessage
|
|
@@ -65,7 +65,7 @@ export default class SchmancyInput extends SchmancyFormField(unsafeCSS(style)) {
|
|
|
65
65
|
// ----------------------------
|
|
66
66
|
|
|
67
67
|
/** Auto-incrementing counter for generating unique IDs */
|
|
68
|
-
static
|
|
68
|
+
static idCounter = 0
|
|
69
69
|
|
|
70
70
|
/** Override value to be string only for input element */
|
|
71
71
|
@property({ type: String, reflect: true })
|
|
@@ -171,7 +171,7 @@ export default class SchmancyInput extends SchmancyFormField(unsafeCSS(style)) {
|
|
|
171
171
|
private isAutofilled = false
|
|
172
172
|
|
|
173
173
|
// `touched`, `dirty`, `submitted`, and `validateOn` come from FormFieldMixin.
|
|
174
|
-
// `
|
|
174
|
+
// `defaultValue` (mixin) replaces the old `defaultValue` field.
|
|
175
175
|
|
|
176
176
|
// ----------------------------
|
|
177
177
|
// D) Form-associated logic
|
|
@@ -187,18 +187,18 @@ export default class SchmancyInput extends SchmancyFormField(unsafeCSS(style)) {
|
|
|
187
187
|
*/
|
|
188
188
|
protected override willUpdate(changedProps: Map<PropertyKey, unknown>) {
|
|
189
189
|
if (!this.id) {
|
|
190
|
-
this.id = `sch-input-${SchmancyInput.
|
|
190
|
+
this.id = `sch-input-${SchmancyInput.idCounter++}`
|
|
191
191
|
}
|
|
192
192
|
super.willUpdate(changedProps as never)
|
|
193
193
|
}
|
|
194
194
|
|
|
195
195
|
|
|
196
196
|
// `updated()` removed — FormFieldMixin's `willUpdate` recomputes `dirty`,
|
|
197
|
-
// triggers `checkValidity()` when `
|
|
197
|
+
// triggers `checkValidity()` when `shouldShowError()` is true, and updates
|
|
198
198
|
// `:state(dirty)` automatically.
|
|
199
199
|
//
|
|
200
200
|
// Default value capture is also handled by the mixin (`firstUpdated` sets
|
|
201
|
-
// `
|
|
201
|
+
// `defaultValue` from `value`).
|
|
202
202
|
|
|
203
203
|
connectedCallback() {
|
|
204
204
|
super.connectedCallback()
|
|
@@ -250,7 +250,7 @@ export default class SchmancyInput extends SchmancyFormField(unsafeCSS(style)) {
|
|
|
250
250
|
* via `internals.setValidity` so consumers can target specific flags via
|
|
251
251
|
* `field.validity.<flag>` and `:state(value-missing|type-mismatch|…)`.
|
|
252
252
|
*
|
|
253
|
-
* The visual `error` flag is still gated by the mixin's `
|
|
253
|
+
* The visual `error` flag is still gated by the mixin's `shouldShowError()`.
|
|
254
254
|
*/
|
|
255
255
|
/**
|
|
256
256
|
* Re-run checkValidity AFTER render so the native inner input's `.value`
|
|
@@ -278,7 +278,7 @@ export default class SchmancyInput extends SchmancyFormField(unsafeCSS(style)) {
|
|
|
278
278
|
* Order matches the natural priority of validity flags (valueMissing
|
|
279
279
|
* before more specific ones — empty trumps malformed).
|
|
280
280
|
*/
|
|
281
|
-
private
|
|
281
|
+
private firstMatchingErrorMessage(v: ValidityState): string | undefined {
|
|
282
282
|
const m = this.errorMessages
|
|
283
283
|
if (!m) return undefined
|
|
284
284
|
if (v.valueMissing && m.valueMissing) return m.valueMissing
|
|
@@ -314,12 +314,12 @@ export default class SchmancyInput extends SchmancyFormField(unsafeCSS(style)) {
|
|
|
314
314
|
}
|
|
315
315
|
// errorMessages override: pick the first matching flag and use the
|
|
316
316
|
// consumer-provided copy. Falls back to the native browser message.
|
|
317
|
-
const overrideMessage = this.
|
|
317
|
+
const overrideMessage = this.firstMatchingErrorMessage(v)
|
|
318
318
|
this.internals?.setValidity(
|
|
319
319
|
flags,
|
|
320
320
|
overrideMessage || native.validationMessage || this.validationMessage || 'Invalid value',
|
|
321
321
|
)
|
|
322
|
-
if (this.
|
|
322
|
+
if (this.shouldShowError()) {
|
|
323
323
|
this.error = true
|
|
324
324
|
// Always reflect the current flag's message — previous
|
|
325
325
|
// validationMessage may be stale (different flag).
|
|
@@ -440,7 +440,7 @@ export default class SchmancyInput extends SchmancyFormField(unsafeCSS(style)) {
|
|
|
440
440
|
// Update component value
|
|
441
441
|
this.value = eventData.value
|
|
442
442
|
|
|
443
|
-
// `dirty` is a getter on the mixin (value vs
|
|
443
|
+
// `dirty` is a getter on the mixin (value vs defaultValue) — no manual set.
|
|
444
444
|
|
|
445
445
|
// Fire custom 'input' event with extended details
|
|
446
446
|
const customEvent = new CustomEvent<EventDetails>('input', {
|
|
@@ -459,7 +459,7 @@ export default class SchmancyInput extends SchmancyFormField(unsafeCSS(style)) {
|
|
|
459
459
|
this.dispatchEvent(customEvent)
|
|
460
460
|
|
|
461
461
|
// Mixin's willUpdate runs checkValidity() on value-change when
|
|
462
|
-
//
|
|
462
|
+
// shouldShowError() is true — no manual validateInput() call.
|
|
463
463
|
})
|
|
464
464
|
|
|
465
465
|
// Subscribe to native change events (usually on blur)
|
|
@@ -539,7 +539,7 @@ export default class SchmancyInput extends SchmancyFormField(unsafeCSS(style)) {
|
|
|
539
539
|
const { value } = ev.target as HTMLInputElement
|
|
540
540
|
this.value = value
|
|
541
541
|
this.isAutofilled = true
|
|
542
|
-
// `dirty` is a getter on the mixin — recomputes from value vs
|
|
542
|
+
// `dirty` is a getter on the mixin — recomputes from value vs defaultValue.
|
|
543
543
|
|
|
544
544
|
// Dispatch autofill event for integration with autofill systems
|
|
545
545
|
this.dispatchEvent(
|
|
@@ -22,10 +22,10 @@ export class RadioButton extends SchmancyElement {
|
|
|
22
22
|
super.connectedCallback()
|
|
23
23
|
fromEvent<MouseEvent>(this, 'click')
|
|
24
24
|
.pipe(takeUntil(this.disconnecting))
|
|
25
|
-
.subscribe(this.
|
|
25
|
+
.subscribe(this.handleClick)
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
private
|
|
28
|
+
private handleClick = () => {
|
|
29
29
|
if (this.disabled) return
|
|
30
30
|
this.dispatchEvent(new CustomEvent('radio-button-click', {
|
|
31
31
|
detail: { value: this.value },
|
|
@@ -24,16 +24,16 @@ export class RadioGroup extends FormFieldMixin(SchmancyElement) {
|
|
|
24
24
|
.subscribe((e: CustomEvent<{ value: string }>) => {
|
|
25
25
|
this.value = e.detail.value
|
|
26
26
|
this.emitChange({ value: e.detail.value })
|
|
27
|
-
this.
|
|
27
|
+
this.syncChildren()
|
|
28
28
|
})
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
updated(changed: Map<string, unknown>) {
|
|
32
32
|
super.updated(changed)
|
|
33
|
-
if (changed.has('value')) this.
|
|
33
|
+
if (changed.has('value')) this.syncChildren()
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
private
|
|
36
|
+
private syncChildren() {
|
|
37
37
|
this.querySelectorAll<RadioButton>('schmancy-radio-button').forEach(btn => {
|
|
38
38
|
btn.checked = btn.value === this.value
|
|
39
39
|
})
|
|
@@ -52,28 +52,28 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
52
52
|
@property({ type: String, reflect: true })
|
|
53
53
|
override get value(): string | string[] {
|
|
54
54
|
return this.multi
|
|
55
|
-
? (this.
|
|
56
|
-
: (this.
|
|
55
|
+
? (this.selectedValues$?.value ?? [])
|
|
56
|
+
: (this.selectedValue$?.value ?? '')
|
|
57
57
|
}
|
|
58
58
|
override set value(val: string | string[]) {
|
|
59
|
-
if (!this.
|
|
59
|
+
if (!this.selectedValue$ || !this.selectedValues$) return
|
|
60
60
|
if (this.multi) {
|
|
61
61
|
const values = Array.isArray(val)
|
|
62
62
|
? val
|
|
63
63
|
: val ? String(val).split(',').map(v => v.trim()).filter(Boolean) : []
|
|
64
|
-
this.
|
|
64
|
+
this.selectedValues$.next(values)
|
|
65
65
|
} else {
|
|
66
|
-
this.
|
|
66
|
+
this.selectedValue$.next(val == null ? '' : String(val))
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// Values property for multi-select mode
|
|
71
71
|
@property({ type: Array })
|
|
72
72
|
get values() {
|
|
73
|
-
return [...this.
|
|
73
|
+
return [...this.selectedValues$.value]
|
|
74
74
|
}
|
|
75
75
|
set values(vals: string[]) {
|
|
76
|
-
this.
|
|
76
|
+
this.selectedValues$.next(Array.isArray(vals) ? [...vals] : [])
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
@property({ type: Boolean }) multi = false
|
|
@@ -87,7 +87,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
87
87
|
@state() private isValid = true
|
|
88
88
|
|
|
89
89
|
// Store the initial/default value for reset behavior. Distinct from the
|
|
90
|
-
// mixin's `
|
|
90
|
+
// mixin's `defaultValue` (which is `string` only); select needs the wider
|
|
91
91
|
// shape so resetForm can restore arrays for multi-select.
|
|
92
92
|
@state() private selectDefaultValue: string | string[] = ''
|
|
93
93
|
|
|
@@ -97,10 +97,10 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
97
97
|
private cleanupPositioner?: () => void
|
|
98
98
|
|
|
99
99
|
// Reactive state management
|
|
100
|
-
private
|
|
101
|
-
private
|
|
102
|
-
private
|
|
103
|
-
private
|
|
100
|
+
private options$ = new BehaviorSubject<SchmancyOption[]>([])
|
|
101
|
+
private selectedValue$ = new BehaviorSubject<string>('')
|
|
102
|
+
private selectedValues$ = new BehaviorSubject<string[]>([])
|
|
103
|
+
private optionSelect$ = new Subject<SchmancyOption>()
|
|
104
104
|
|
|
105
105
|
/**
|
|
106
106
|
* Tracks whether the user has actively interacted (clicked/typed/keyed
|
|
@@ -108,10 +108,10 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
108
108
|
* blur). Used to gate dropdown-positioning side-effects on user-driven
|
|
109
109
|
* actions versus programmatic state changes.
|
|
110
110
|
*/
|
|
111
|
-
@state()
|
|
111
|
+
@state() userInteracted = false
|
|
112
112
|
|
|
113
113
|
// Reference to current focused option (for keyboard navigation)
|
|
114
|
-
@state() private
|
|
114
|
+
@state() private focusedOptionId = ''
|
|
115
115
|
|
|
116
116
|
override connectedCallback() {
|
|
117
117
|
super.connectedCallback()
|
|
@@ -126,7 +126,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
126
126
|
fromEvent<KeyboardEvent>(this, 'keydown').pipe(takeUntil(this.disconnecting)).subscribe(this.handleKeyDown)
|
|
127
127
|
|
|
128
128
|
// Setup reactive pipelines
|
|
129
|
-
this.
|
|
129
|
+
this.setupReactivePipelines()
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
override disconnectedCallback() {
|
|
@@ -153,12 +153,12 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
153
153
|
// mixin's willUpdate already called setFormValue with the raw
|
|
154
154
|
// value, override here for the joined-string shape.
|
|
155
155
|
const formValue = this.multi
|
|
156
|
-
? this.
|
|
157
|
-
: this.
|
|
156
|
+
? this.selectedValues$.value.join(',')
|
|
157
|
+
: this.selectedValue$.value
|
|
158
158
|
this.internals?.setFormValue(formValue)
|
|
159
159
|
|
|
160
|
-
// `dirty` is a mixin getter (value !==
|
|
161
|
-
// Mixin's willUpdate already calls checkValidity when
|
|
160
|
+
// `dirty` is a mixin getter (value !== defaultValue); no manual flag.
|
|
161
|
+
// Mixin's willUpdate already calls checkValidity when shouldShowError().
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
// When open state changes, setup or cleanup the dropdown positioner
|
|
@@ -171,12 +171,12 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
// `shouldShowValidation` removed — replaced by mixin's `
|
|
174
|
+
// `shouldShowValidation` removed — replaced by mixin's `shouldShowError()`.
|
|
175
175
|
|
|
176
176
|
private syncSelection() {
|
|
177
177
|
if (this.multi) {
|
|
178
178
|
// Read directly from the BehaviorSubject to avoid string conversion issues
|
|
179
|
-
const selectedValues = this.
|
|
179
|
+
const selectedValues = this.selectedValues$.value
|
|
180
180
|
this.options?.forEach(o => (o.selected = selectedValues.includes(o.value))) // Update option selected state
|
|
181
181
|
this.valueLabel =
|
|
182
182
|
selectedValues.length > 0
|
|
@@ -187,7 +187,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
187
187
|
: this.placeholder
|
|
188
188
|
} else {
|
|
189
189
|
// Single select - read from BehaviorSubject
|
|
190
|
-
const currentValue = this.
|
|
190
|
+
const currentValue = this.selectedValue$.value
|
|
191
191
|
this.options?.forEach(o => {
|
|
192
192
|
// Set selected property on each option based on matching value
|
|
193
193
|
o.selected = o.value === currentValue
|
|
@@ -209,7 +209,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
209
209
|
|
|
210
210
|
option.setAttribute(
|
|
211
211
|
'aria-selected',
|
|
212
|
-
String(this.multi ? this.
|
|
212
|
+
String(this.multi ? this.selectedValues$.value.includes(option.value) : option.value === this.selectedValue$.value),
|
|
213
213
|
)
|
|
214
214
|
})
|
|
215
215
|
}
|
|
@@ -266,7 +266,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
266
266
|
|
|
267
267
|
// Find current focused option
|
|
268
268
|
const options = Array.from(this.options || [])
|
|
269
|
-
const current = options.findIndex(o => o.id === this.
|
|
269
|
+
const current = options.findIndex(o => o.id === this.focusedOptionId) ?? -1
|
|
270
270
|
|
|
271
271
|
switch (e.key) {
|
|
272
272
|
case 'Escape':
|
|
@@ -292,8 +292,8 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
292
292
|
case 'Enter':
|
|
293
293
|
case ' ':
|
|
294
294
|
e.preventDefault()
|
|
295
|
-
if (this.
|
|
296
|
-
const focusedOption = options.find(opt => opt.id === this.
|
|
295
|
+
if (this.focusedOptionId) {
|
|
296
|
+
const focusedOption = options.find(opt => opt.id === this.focusedOptionId)
|
|
297
297
|
if (focusedOption) {
|
|
298
298
|
this.handleOptionSelect(focusedOption.value)
|
|
299
299
|
}
|
|
@@ -309,7 +309,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
309
309
|
const option = options[index]
|
|
310
310
|
if (option) {
|
|
311
311
|
option.focus()
|
|
312
|
-
this.
|
|
312
|
+
this.focusedOptionId = option.id
|
|
313
313
|
|
|
314
314
|
// Update aria-activedescendant on the combobox
|
|
315
315
|
const combobox = this.renderRoot.querySelector('.trigger')
|
|
@@ -349,7 +349,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
349
349
|
|
|
350
350
|
// Focus first or selected option
|
|
351
351
|
const options = Array.from(this.options || [])
|
|
352
|
-
const selectedIndex = this.multi ? 0 : options.findIndex(o => o.value === this.
|
|
352
|
+
const selectedIndex = this.multi ? 0 : options.findIndex(o => o.value === this.selectedValue$.value)
|
|
353
353
|
|
|
354
354
|
this.focusOption(options, Math.max(selectedIndex, 0))
|
|
355
355
|
|
|
@@ -361,12 +361,12 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
361
361
|
private closeDropdown() {
|
|
362
362
|
// Only mark as touched if the user actually interacted with the component
|
|
363
363
|
// and made a selection or explicitly closed it without selecting
|
|
364
|
-
if (this.
|
|
364
|
+
if (this.userInteracted) {
|
|
365
365
|
this.touched = true
|
|
366
366
|
}
|
|
367
367
|
|
|
368
368
|
this.isOpen = false
|
|
369
|
-
this.
|
|
369
|
+
this.focusedOptionId = ''
|
|
370
370
|
|
|
371
371
|
// Update combobox to remove aria-activedescendant
|
|
372
372
|
const combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')
|
|
@@ -377,12 +377,12 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
377
377
|
|
|
378
378
|
// Only check validity when closing if the user has actually interacted
|
|
379
379
|
// with the component and validation should be shown
|
|
380
|
-
if (this.
|
|
380
|
+
if (this.userInteracted && this.shouldShowError()) {
|
|
381
381
|
this.checkValidity()
|
|
382
382
|
}
|
|
383
383
|
}
|
|
384
384
|
|
|
385
|
-
private
|
|
385
|
+
private setupReactivePipelines() {
|
|
386
386
|
// Listen for option-select events from child options
|
|
387
387
|
fromEvent<CustomEvent>(this, 'option-select')
|
|
388
388
|
.pipe(
|
|
@@ -390,7 +390,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
390
390
|
e.stopPropagation() // Prevent event from bubbling further
|
|
391
391
|
const option = this.options.find(o => o.value === e.detail.value)
|
|
392
392
|
if (option) {
|
|
393
|
-
this.
|
|
393
|
+
this.optionSelect$.next(option)
|
|
394
394
|
}
|
|
395
395
|
}),
|
|
396
396
|
takeUntil(this.disconnecting)
|
|
@@ -398,11 +398,11 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
398
398
|
.subscribe()
|
|
399
399
|
|
|
400
400
|
// Handle option selection through reactive pipeline
|
|
401
|
-
this.
|
|
401
|
+
this.optionSelect$
|
|
402
402
|
.pipe(
|
|
403
|
-
withLatestFrom(this.
|
|
403
|
+
withLatestFrom(this.selectedValue$, this.selectedValues$),
|
|
404
404
|
tap(([option, _, currentValues]) => {
|
|
405
|
-
this.
|
|
405
|
+
this.userInteracted = true
|
|
406
406
|
this.markTouched()
|
|
407
407
|
// `dirty` is a mixin getter; setting `value` below triggers it
|
|
408
408
|
|
|
@@ -411,7 +411,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
411
411
|
const newValues = index > -1
|
|
412
412
|
? [...currentValues.slice(0, index), ...currentValues.slice(index + 1)]
|
|
413
413
|
: [...currentValues, option.value]
|
|
414
|
-
this.
|
|
414
|
+
this.selectedValues$.next(newValues)
|
|
415
415
|
|
|
416
416
|
// Update form value
|
|
417
417
|
this.internals?.setFormValue(newValues.join(','))
|
|
@@ -425,7 +425,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
425
425
|
: this.placeholder
|
|
426
426
|
} else {
|
|
427
427
|
// Single select
|
|
428
|
-
this.
|
|
428
|
+
this.selectedValue$.next(option.value)
|
|
429
429
|
|
|
430
430
|
// Update form value
|
|
431
431
|
this.internals?.setFormValue(option.value)
|
|
@@ -438,14 +438,14 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
438
438
|
this.setupOptionsAccessibility()
|
|
439
439
|
|
|
440
440
|
// Dispatch change event
|
|
441
|
-
this.
|
|
441
|
+
this.fireChangeEvent()
|
|
442
442
|
}),
|
|
443
443
|
takeUntil(this.disconnecting)
|
|
444
444
|
)
|
|
445
445
|
.subscribe()
|
|
446
446
|
|
|
447
447
|
// Options management pipeline - bind pointerdown events exactly like autocomplete
|
|
448
|
-
this.
|
|
448
|
+
this.options$
|
|
449
449
|
.pipe(
|
|
450
450
|
tap((options) => {
|
|
451
451
|
options.forEach((option, index) => {
|
|
@@ -463,7 +463,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
463
463
|
e.stopPropagation()
|
|
464
464
|
}),
|
|
465
465
|
takeUntil(this.disconnecting)
|
|
466
|
-
).subscribe(() => this.
|
|
466
|
+
).subscribe(() => this.optionSelect$.next(option))
|
|
467
467
|
option.setAttribute('data-event-bound', 'true')
|
|
468
468
|
}
|
|
469
469
|
})
|
|
@@ -473,7 +473,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
473
473
|
.subscribe()
|
|
474
474
|
|
|
475
475
|
// Selection sync pipeline - sync selected states with value changes
|
|
476
|
-
combineLatest([this.
|
|
476
|
+
combineLatest([this.selectedValue$, this.selectedValues$, this.options$])
|
|
477
477
|
.pipe(
|
|
478
478
|
tap(([singleValue, multiValues, options]) => {
|
|
479
479
|
if (options.length === 0) return
|
|
@@ -497,13 +497,13 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
497
497
|
// This method is now called from keyboard navigation only
|
|
498
498
|
const option = this.options.find(o => o.value === value)
|
|
499
499
|
if (option) {
|
|
500
|
-
this.
|
|
500
|
+
this.optionSelect$.next(option)
|
|
501
501
|
}
|
|
502
502
|
}
|
|
503
503
|
|
|
504
|
-
private
|
|
504
|
+
private fireChangeEvent() {
|
|
505
505
|
// Get the current value based on multi/single mode
|
|
506
|
-
const value = this.multi ? this.
|
|
506
|
+
const value = this.multi ? this.selectedValues$.value : this.selectedValue$.value
|
|
507
507
|
|
|
508
508
|
// Dispatch only one change event with the value in detail
|
|
509
509
|
this.dispatchEvent(
|
|
@@ -526,8 +526,8 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
526
526
|
|
|
527
527
|
// Determine if the select is empty based on whether it's multi-select or single-select
|
|
528
528
|
const isEmpty = this.multi
|
|
529
|
-
? this.
|
|
530
|
-
: !this.
|
|
529
|
+
? this.selectedValues$.value.length === 0
|
|
530
|
+
: !this.selectedValue$.value
|
|
531
531
|
|
|
532
532
|
// Check if the value is valid (not empty when required)
|
|
533
533
|
const isValid = !(this.required && isEmpty)
|
|
@@ -546,7 +546,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
546
546
|
|
|
547
547
|
// Update the input component to reflect our validation state
|
|
548
548
|
if (this.inputRef && this.hasUpdated) {
|
|
549
|
-
const showError = !this.isValid && this.
|
|
549
|
+
const showError = !this.isValid && this.shouldShowError()
|
|
550
550
|
this.inputRef.error = showError
|
|
551
551
|
this.inputRef.hint = showError ? this.validationMessage : this.hint
|
|
552
552
|
}
|
|
@@ -582,7 +582,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
582
582
|
|
|
583
583
|
// `markTouched`, `markSubmitted`, `touched`, `dirty`, `pristine`, `submitted`,
|
|
584
584
|
// `error` (storage) — all from the mixin. Select's `error` semantics
|
|
585
|
-
// (errors-while-open suppression) live in render() via
|
|
585
|
+
// (errors-while-open suppression) live in render() via shouldShowError() +
|
|
586
586
|
// !isOpen, not as a separate getter.
|
|
587
587
|
|
|
588
588
|
/**
|
|
@@ -610,7 +610,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
610
610
|
}
|
|
611
611
|
|
|
612
612
|
// Update input if needed
|
|
613
|
-
if (this.inputRef && this.
|
|
613
|
+
if (this.inputRef && this.shouldShowError()) {
|
|
614
614
|
this.inputRef.error = !this.isValid
|
|
615
615
|
this.inputRef.hint = !this.isValid ? this.validationMessage : this.hint
|
|
616
616
|
}
|
|
@@ -622,12 +622,12 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
622
622
|
* select-specific cleanup (value subjects, label, validity).
|
|
623
623
|
*/
|
|
624
624
|
override resetForm(): void {
|
|
625
|
-
// Restore value (multi-aware) before super so the mixin's
|
|
625
|
+
// Restore value (multi-aware) before super so the mixin's defaultValue
|
|
626
626
|
// reset doesn't clobber the array-shape we need.
|
|
627
627
|
this.value = this.selectDefaultValue
|
|
628
628
|
this.valueLabel = this.placeholder
|
|
629
629
|
this.isValid = true
|
|
630
|
-
this.
|
|
630
|
+
this.userInteracted = false
|
|
631
631
|
this.internals?.setValidity({})
|
|
632
632
|
super.resetForm()
|
|
633
633
|
if (this.inputRef) {
|
|
@@ -644,7 +644,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
644
644
|
render(): TemplateResult {
|
|
645
645
|
// Determine if we should show errors based on the validation strategy and interaction
|
|
646
646
|
// Never show errors on initial render or if the dropdown is open
|
|
647
|
-
const showErrors = !this.isValid && this.
|
|
647
|
+
const showErrors = !this.isValid && this.shouldShowError() && !this.isOpen
|
|
648
648
|
|
|
649
649
|
// Add caret icon based on open state
|
|
650
650
|
const caretIcon = this.isOpen
|
|
@@ -663,7 +663,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
663
663
|
aria-controls="options"
|
|
664
664
|
aria-autocomplete="none"
|
|
665
665
|
aria-required=${this.required}
|
|
666
|
-
aria-activedescendant=${ifDefined(this.
|
|
666
|
+
aria-activedescendant=${ifDefined(this.focusedOptionId || undefined)}
|
|
667
667
|
aria-disabled=${this.disabled}
|
|
668
668
|
.label=${this.label}
|
|
669
669
|
.placeholder=${this.placeholder}
|
|
@@ -690,7 +690,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
690
690
|
this.openDropdown(false)
|
|
691
691
|
} else {
|
|
692
692
|
// Mark as interacted when they close the dropdown
|
|
693
|
-
this.
|
|
693
|
+
this.userInteracted = true
|
|
694
694
|
this.closeDropdown()
|
|
695
695
|
}
|
|
696
696
|
}}
|
|
@@ -718,7 +718,7 @@ export class SchmancySelect extends SchmancyFormField() {
|
|
|
718
718
|
>
|
|
719
719
|
<slot
|
|
720
720
|
@slotchange=${() => {
|
|
721
|
-
this.
|
|
721
|
+
this.options$.next(this.options)
|
|
722
722
|
// Sync selection state when options re-render
|
|
723
723
|
this.syncSelection()
|
|
724
724
|
}}
|