@ansh-ui/vue 0.2.0 → 0.3.1
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/{chunk-B6OXKW5Q.js → chunk-AL4PPK25.js} +5 -2
- package/dist/chunk-AL4PPK25.js.map +1 -0
- package/dist/{chunk-2VSROZ2N.js → chunk-D3HH726R.js} +152 -144
- package/dist/chunk-D3HH726R.js.map +1 -0
- package/dist/{chunk-5BQEZYG6.cjs → chunk-EDAF7RAN.cjs} +163 -155
- package/dist/chunk-EDAF7RAN.cjs.map +1 -0
- package/dist/{chunk-TMG3M6TK.js → chunk-G2OX2NH2.js} +3 -3
- package/dist/chunk-G2OX2NH2.js.map +1 -0
- package/dist/{chunk-SOYRICHU.js → chunk-G3EIU6VM.js} +14 -8
- package/dist/chunk-G3EIU6VM.js.map +1 -0
- package/dist/{chunk-KCA7RNJ4.cjs → chunk-IHH6KMBY.cjs} +239 -5
- package/dist/chunk-IHH6KMBY.cjs.map +1 -0
- package/dist/{chunk-J2LA4GRP.cjs → chunk-IO6WJEJI.cjs} +122 -120
- package/dist/chunk-IO6WJEJI.cjs.map +1 -0
- package/dist/{chunk-IOXGBPOV.cjs → chunk-JJBYF7AH.cjs} +14 -8
- package/dist/chunk-JJBYF7AH.cjs.map +1 -0
- package/dist/{chunk-Z7XOFKM4.cjs → chunk-KKCZ5RUE.cjs} +4 -2
- package/dist/chunk-KKCZ5RUE.cjs.map +1 -0
- package/dist/{chunk-6ABPGOJP.js → chunk-LFGAOD32.js} +4 -2
- package/dist/chunk-LFGAOD32.js.map +1 -0
- package/dist/{chunk-EISHOEB6.cjs → chunk-MWGVDY6K.cjs} +3 -3
- package/dist/chunk-MWGVDY6K.cjs.map +1 -0
- package/dist/{chunk-FVKLCGA4.js → chunk-NJMTWLT2.js} +123 -121
- package/dist/chunk-NJMTWLT2.js.map +1 -0
- package/dist/{chunk-T425FIC7.js → chunk-NKRPZTQA.js} +238 -5
- package/dist/chunk-NKRPZTQA.js.map +1 -0
- package/dist/{chunk-JQ4YLXXM.cjs → chunk-PNR4RQ4T.cjs} +5 -2
- package/dist/chunk-PNR4RQ4T.cjs.map +1 -0
- package/dist/data.cjs +16 -16
- package/dist/data.d.cts +54 -52
- package/dist/data.d.ts +54 -52
- package/dist/data.js +1 -1
- package/dist/form.cjs +36 -36
- package/dist/form.d.cts +53 -45
- package/dist/form.d.ts +53 -45
- package/dist/form.js +1 -1
- package/dist/index.cjs +208 -180
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +33 -8
- package/dist/index.d.ts +33 -8
- package/dist/index.js +31 -15
- package/dist/index.js.map +1 -1
- package/dist/layout.cjs +13 -13
- package/dist/layout.d.cts +23 -14
- package/dist/layout.d.ts +23 -14
- package/dist/layout.js +1 -1
- package/dist/motion.cjs +11 -11
- package/dist/motion.d.cts +41 -37
- package/dist/motion.d.ts +41 -37
- package/dist/motion.js +1 -1
- package/dist/navigation.cjs +13 -9
- package/dist/navigation.d.cts +125 -4
- package/dist/navigation.d.ts +125 -4
- package/dist/navigation.js +2 -2
- package/dist/overlay.cjs +14 -14
- package/dist/overlay.d.cts +36 -33
- package/dist/overlay.d.ts +36 -33
- package/dist/overlay.js +2 -2
- package/dist/{position-Cn7qP1pn.d.cts → position-CiY171HP.d.cts} +2 -1
- package/dist/{position-Cn7qP1pn.d.ts → position-CiY171HP.d.ts} +2 -1
- package/dist/primitives.cjs +6 -6
- package/dist/primitives.d.cts +6 -5
- package/dist/primitives.d.ts +6 -5
- package/dist/primitives.js +1 -1
- package/dist/{sidebar-CTZ-Ckko.d.ts → sidebar-B9zDHMbn.d.cts} +5 -4
- package/dist/{sidebar-CQqEmpid.d.cts → sidebar-DMrKHqZ5.d.ts} +5 -4
- package/dist/styles.css +464 -0
- package/dist/{utils-IKPG3zcC.d.cts → utils-D4XwXDeX.d.cts} +2 -1
- package/dist/{utils-IKPG3zcC.d.ts → utils-D4XwXDeX.d.ts} +2 -1
- package/package.json +3 -3
- package/dist/chunk-2VSROZ2N.js.map +0 -1
- package/dist/chunk-5BQEZYG6.cjs.map +0 -1
- package/dist/chunk-6ABPGOJP.js.map +0 -1
- package/dist/chunk-B6OXKW5Q.js.map +0 -1
- package/dist/chunk-EISHOEB6.cjs.map +0 -1
- package/dist/chunk-FVKLCGA4.js.map +0 -1
- package/dist/chunk-IOXGBPOV.cjs.map +0 -1
- package/dist/chunk-J2LA4GRP.cjs.map +0 -1
- package/dist/chunk-JQ4YLXXM.cjs.map +0 -1
- package/dist/chunk-KCA7RNJ4.cjs.map +0 -1
- package/dist/chunk-SOYRICHU.js.map +0 -1
- package/dist/chunk-T425FIC7.js.map +0 -1
- package/dist/chunk-TMG3M6TK.js.map +0 -1
- package/dist/chunk-Z7XOFKM4.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/overlay/popover.ts","../src/components/overlay/tooltip.ts","../src/components/overlay/dialog.ts","../src/components/overlay/drawer.ts","../src/components/overlay/menu/types.ts","../src/components/overlay/menu/surface.ts","../src/components/overlay/menu/dropdown.ts","../src/components/overlay/menu/context.ts"],"names":["inject","defineComponent","useControllableState","ref","useId","provide","h","usePresence","useAnchoredPosition","useDismiss","computed","useFocusTrap","useAutoFocus","useFocusRestore","Teleport","cx","onBeforeUnmount","resolveSlotContent","useScrollLock","onMounted","index","isVNode","cloneVNode"],"mappings":";;;;;;;;;AAsDA,IAAM,UAAA,0BAAuD,cAAc,CAAA;AAE3E,SAAS,kBAAkB,SAAA,EAAwC;AACjE,EAAA,MAAM,OAAA,GAAUA,UAAA,CAAO,UAAA,EAAY,IAAI,CAAA;AACvC,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,KAAA,CAAM,CAAA,CAAA,EAAI,SAAS,CAAA,oCAAA,CAAsC,CAAA;AACjF,EAAA,OAAO,OAAA;AACT;AAEO,IAAM,UAAUC,mBAAA,CAAgB;AAAA,EACrC,IAAA,EAAM,aAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,MAAA,EAAU;AAAA,IAC1C,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA,IAC7C,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAA+B,SAAS,QAAA,EAAS;AAAA;AAAA,IAEpE,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA;AAAA,IAEnC,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA;AAAM,GACzC;AAAA,EACA,KAAA,EAAO,CAAC,aAAa,CAAA;AAAA,EACrB,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,MAAK,EAAG;AAC5B,IAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAIC,sCAAA;AAAA,MACxB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,CAAM,WAAA;AAAA,MACN,CAAC,IAAA,KAAS,IAAA,CAAK,aAAA,EAAe,IAAI;AAAA,KACpC;AACA,IAAA,MAAM,UAAA,GAAaC,QAAwB,IAAI,CAAA;AAC/C,IAAA,MAAM,SAAA,GAAYC,wBAAM,SAAS,CAAA;AAEjC,IAAAC,WAAA,CAAQ,UAAA,EAAY;AAAA,MAClB,IAAA,EAAM,MAAA;AAAA,MACN,OAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAI,SAAA,GAAY;AACd,QAAA,OAAO,KAAA,CAAM,SAAA;AAAA,MACf,CAAA;AAAA,MACA,IAAI,MAAA,GAAS;AACX,QAAA,OAAO,KAAA,CAAM,MAAA;AAAA,MACf,CAAA;AAAA,MACA,IAAI,KAAA,GAAQ;AACV,QAAA,OAAO,KAAA,CAAM,KAAA;AAAA,MACf;AAAA,KACD,CAAA;AAED,IAAA,OAAO,MAAM,MAAM,OAAA,IAAU;AAAA,EAC/B;AACF,CAAC;AAEM,IAAM,iBAAiBJ,mBAAA,CAAgB;AAAA,EAC5C,IAAA,EAAM,oBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,EAAA,EAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,QAAA;AAAS,GACxC;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,MAAM,GAAA,GAAM,kBAAkB,gBAAgB,CAAA;AAE9C,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,EAAE,OAAA,EAAS,GAAG,SAAA,EAAU,GAAI,KAAA;AAClC,MAAA,OAAOK,KAAA;AAAA,QACL,KAAA,CAAM,EAAA;AAAA,QACN;AAAA,UACE,KAAK,GAAA,CAAI,UAAA;AAAA,UACT,GAAI,KAAA,CAAM,EAAA,KAAO,WAAW,EAAE,IAAA,EAAM,UAAS,GAAI,IAAA;AAAA,UACjD,eAAA,EAAiB,QAAA;AAAA,UACjB,eAAA,EAAiB,IAAI,IAAA,CAAK,KAAA;AAAA,UAC1B,eAAA,EAAiB,GAAA,CAAI,IAAA,CAAK,KAAA,GAAQ,IAAI,SAAA,GAAY,MAAA;AAAA,UAClD,GAAG,SAAA;AAAA,UACH,OAAA,EAAS,CAAC,KAAA,KAAsB;AAC7B,YAAC,UAAwD,KAAK,CAAA;AAC/D,YAAA,IAAI,MAAM,gBAAA,EAAkB;AAC5B,YAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAAA,UAC7B;AAAA,SACF;AAAA,QACA,MAAM,OAAA;AAAU,OAClB;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC;AAEM,IAAM,iBAAiBL,mBAAA,CAAgB;AAAA,EAC5C,IAAA,EAAM,oBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA;AAAA,IAEvC,UAAA,EAAY,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA;AAAA,IAE5C,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA;AAAU,GAC5C;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,MAAM,GAAA,GAAM,kBAAkB,gBAAgB,CAAA;AAC9C,IAAA,MAAM,UAAA,GAAaE,QAA2B,IAAI,CAAA;AAElD,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,KAAUI,6BAAA,CAAY,GAAA,CAAI,MAAM,UAAU,CAAA;AAE3D,IAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,sCAAoB,GAAA,CAAI,UAAA,EAAY,YAAY,OAAA,EAAS;AAAA,MAC5E,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,SAAA,EAAW,KAAA,CAAM,KAAA,GAAQ,EAAA,GAAK;AAAA,KAC/B,CAAA;AAED,IAAAC,4BAAA,CAAW,UAAA,EAAY,GAAA,CAAI,IAAA,EAAM,MAAM,IAAI,OAAA,CAAQ,KAAK,CAAA,EAAG,EAAE,MAAA,EAAQ,CAAC,GAAA,CAAI,UAAU,GAAG,CAAA;AACvF,IAAA,MAAM,aAAaC,YAAA,CAAS,MAAM,IAAI,IAAA,CAAK,KAAA,IAAS,IAAI,KAAK,CAAA;AAC7D,IAAAC,8BAAA,CAAa,YAAY,UAAU,CAAA;AACnC,IAAAC,8BAAA,CAAa,UAAA,EAAY,IAAI,IAAI,CAAA;AACjC,IAAAC,iCAAA,CAAgB,IAAI,IAAI,CAAA;AAExB,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,EAAO,OAAO,IAAA;AAE3B,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,OAAO,SAAA,EAAW,GAAG,WAAU,GAAI,KAAA;AAE7D,MAAA,OAAOP,KAAA,CAAEQ,YAAA,EAAU,EAAE,EAAA,EAAI,QAAO,EAAG;AAAA,QACjCR,KAAA;AAAA,UACE,KAAA;AAAA,UACA;AAAA,YACE,GAAA,EAAK,UAAA;AAAA,YACL,IAAI,GAAA,CAAI,SAAA;AAAA,YACR,IAAA,EAAM,QAAA;AAAA,YACN,YAAA,EAAc,IAAI,KAAA,IAAS,MAAA;AAAA,YAC3B,GAAI,KAAA,CAAM,KAAA,GAAQ,EAAE,YAAA,EAAc,KAAA,CAAM,OAAM,GAAI,IAAA;AAAA,YAClD,QAAA,EAAU,IAAA;AAAA,YACV,cAAc,KAAA,CAAM,KAAA;AAAA,YACpB,WAAA,EAAa,SAAS,KAAA,CAAM,IAAA;AAAA,YAC5B,KAAA,EAAOS,oBAAA,CAAG,cAAA,EAAgB,SAAmB,CAAA;AAAA,YAC7C,KAAA,EAAO,CAAC,QAAA,CAAS,KAAA,CAAM,OAAO,SAAmC,CAAA;AAAA,YACjE,GAAG;AAAA,WACL;AAAA,UACA;AAAA,YACE,MAAM,OAAA,IAAU;AAAA,YAChB,MAAM,KAAA,IAAS,QAAA,CAAS,KAAA,CAAM,UAAA,GAC1BT,MAAE,MAAA,EAAQ;AAAA,cACR,KAAA,EAAO,qBAAA;AAAA,cACP,KAAA,EAAO,SAAS,KAAA,CAAM,UAAA;AAAA,cACtB,aAAA,EAAe;AAAA,aAChB,CAAA,GACD;AAAA;AACN;AACF,OACD,CAAA;AAAA,IACH,CAAA;AAAA,EACF;AACF,CAAC;AAwBM,IAAM,YAAYL,mBAAA,CAAgB;AAAA,EACvC,IAAA,EAAM,eAAA;AAAA,EACN,KAAA,EAAO;AAAA;AAAA,IAEL,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,GAAA,EAAI;AAAA;AAAA,IAExC,UAAA,EAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,GAAA,EAAI;AAAA,IACzC,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAA+B,SAAS,QAAA;AAAS,GACtE;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,MAAM,IAAA,GAAOE,QAAI,KAAK,CAAA;AACtB,IAAA,MAAM,UAAA,GAAaA,QAAwB,IAAI,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAUA,QAA2B,IAAI,CAAA;AAC/C,IAAA,MAAM,EAAA,GAAKC,wBAAM,WAAW,CAAA;AAC5B,IAAA,IAAI,KAAA;AAEJ,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAIG,6BAAA,CAAY,MAAM,OAAO,CAAA;AACpD,IAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,qCAAA,CAAoB,UAAA,EAAY,SAAS,OAAA,EAAS;AAAA,MACrE,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAAwB;AACxC,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,KAAA,GAAQ,UAAA;AAAA,QACN,MAAM;AACJ,UAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,QACf,CAAA;AAAA,QACA,IAAA,GAAO,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM;AAAA,OACjC;AAAA,IACF,CAAA;AAEA,IAAAQ,mBAAA,CAAgB,MAAM,YAAA,CAAa,KAAK,CAAC,CAAA;AAEzC,IAAA,OAAO,MACLV,MAAE,MAAA,EAAQ,EAAE,OAAO,EAAE,OAAA,EAAS,UAAA,EAAW,EAAE,EAAG;AAAA,MAC5CA,KAAA;AAAA,QACE,MAAA;AAAA,QACA;AAAA,UACE,GAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAO,yBAAA;AAAA;AAAA;AAAA,UAGP,kBAAA,EAAoB,IAAA,CAAK,KAAA,GAAQ,EAAA,GAAK,MAAA;AAAA,UACtC,YAAA,EAAc,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,UACjC,YAAA,EAAc,MAAM,QAAA,CAAS,KAAK,CAAA;AAAA,UAClC,SAAS,MAAM;AACb,YAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,UACf,CAAA;AAAA,UACA,QAAQ,MAAM;AACZ,YAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,UACf;AAAA,SACF;AAAA,QACA,MAAM,OAAA;AAAU,OAClB;AAAA,MAEA,QAAQ,KAAA,GACJA,KAAA,CAAEQ,cAAU,EAAE,EAAA,EAAI,QAAO,EAAG;AAAA,QAC1BR,KAAA;AAAA,UACE,KAAA;AAAA,UACA;AAAA,YACE,GAAA,EAAK,OAAA;AAAA,YACL,EAAA;AAAA,YACA,IAAA,EAAM,SAAA;AAAA,YACN,cAAc,KAAA,CAAM,KAAA;AAAA,YACpB,KAAA,EAAOS,oBAAA,CAAG,gBAAA,EAAkB,KAAA,CAAM,KAAe,CAAA;AAAA,YACjD,KAAA,EAAO,SAAS,KAAA,CAAM,KAAA;AAAA;AAAA;AAAA,YAGtB,YAAA,EAAc,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,YACjC,YAAA,EAAc,MAAM,QAAA,CAAS,KAAK;AAAA,WACpC;AAAA,UACA,MAAM,OAAA;AAAU;AAClB,OACD,CAAA,GACD;AAAA,KACL,CAAA;AAAA,EACL;AACF,CAAC;AC9PD,IAAM,eAAA,0BAA0D,oBAAoB,CAAA;AAe7E,IAAM,kBAAkBd,mBAAAA,CAAgB;AAAA,EAC7C,IAAA,EAAM,qBAAA;AAAA,EACN,KAAA,EAAO;AAAA;AAAA,IAEL,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,GAAA;AAAI,GACtC;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAM,EAAG;AACtB,IAAA,MAAM,MAAA,GAASE,QAAI,KAAK,CAAA;AAExB,IAAAE,YAAQ,eAAA,EAAiB;AAAA,MACvB,MAAA;AAAA,MACA,SAAA,EAAW,CAAC,IAAA,KAAkB;AAC5B,QAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAAA,MACjB,CAAA;AAAA,MACA,IAAI,KAAA,GAAQ;AACV,QAAA,OAAO,KAAA,CAAM,KAAA;AAAA,MACf;AAAA,KACD,CAAA;AAED,IAAA,OAAO,MAAM,MAAM,OAAA,IAAU;AAAA,EAC/B;AACF,CAAC;AAEM,IAAM,UAAUJ,mBAAAA,CAAgB;AAAA,EACrC,IAAA,EAAM,aAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,OAAA,EAAS,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,QAAA,EAAU,IAAA,EAAK;AAAA,IACrF,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAA+B,SAAS,KAAA,EAAM;AAAA;AAAA,IAEjE,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA,EAAU;AAAA;AAAA,IAE1C,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,IACtC,QAAA,EAAU,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA;AAAM,GAC5C;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,MAAM,KAAA,GAAQD,UAAAA,CAAO,eAAA,EAAiB,IAAI,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOG,QAAI,KAAK,CAAA;AAEtB,IAAA,MAAM,UAAA,GAAaA,QAAwB,IAAI,CAAA;AAC/C,IAAA,MAAM,MAAA,GAASA,QAA2B,IAAI,CAAA;AAC9C,IAAA,IAAI,KAAA;AACJ,IAAA,MAAM,EAAA,GAAKC,wBAAM,SAAS,CAAA;AAE1B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAIG,6BAAA,CAAY,MAAM,MAAM,CAAA;AACnD,IAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,qCAAA,CAAoB,UAAA,EAAY,QAAQ,OAAA,EAAS;AAAA,MACpE,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,MAAA,EAAQ,CAAA;AAAA,MACR,SAAA,EAAW,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI;AAAA,KAC9B,CAAA;AAED,IAAA,MAAM,cAAA,GAAiB,MAAc,KAAA,CAAM,KAAA,IAAS,OAAO,KAAA,IAAS,GAAA;AAEpE,IAAA,MAAM,IAAA,GAAO,CAAC,SAAA,GAAY,KAAA,KAAgB;AACxC,MAAA,IAAI,MAAM,QAAA,EAAU;AACpB,MAAA,YAAA,CAAa,KAAK,CAAA;AAGlB,MAAA,IAAI,SAAA,IAAa,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO;AACpC,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,QAAA,KAAA,EAAO,UAAU,IAAI,CAAA;AACrB,QAAA;AAAA,MACF;AACA,MAAA,KAAA,GAAQ,WAAW,MAAM;AACvB,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,QAAA,KAAA,EAAO,UAAU,IAAI,CAAA;AAAA,MACvB,CAAA,EAAG,gBAAgB,CAAA;AAAA,IACrB,CAAA;AAEA,IAAA,MAAM,OAAO,MAAY;AACvB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAEb,MAAA,KAAA,GAAQ,WAAW,MAAM,KAAA,EAAO,SAAA,CAAU,KAAK,GAAG,GAAG,CAAA;AAAA,IACvD,CAAA;AAEA,IAAAQ,mBAAAA,CAAgB,MAAM,YAAA,CAAa,KAAK,CAAC,CAAA;AAKzC,IAAAP,4BAAA;AAAA,MACE,MAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAM;AACJ,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,QAAA,KAAA,EAAO,UAAU,KAAK,CAAA;AAAA,MACxB,CAAA;AAAA,MACA,EAAE,YAAA,EAAc,KAAA,EAAO,SAAA,EAAW,IAAA;AAAK,KACzC;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,WAAU,GAAI,KAAA;AAE3C,MAAA,OAAOH,KAAAA;AAAA,QACL,MAAA;AAAA,QACA;AAAA;AAAA,UAEE,KAAA,EAAO,EAAE,OAAA,EAAS,UAAA;AAAW,SAC/B;AAAA,QACA;AAAA,UACEA,KAAAA;AAAA,YACE,MAAA;AAAA,YACA;AAAA,cACE,GAAG,SAAA;AAAA,cACH,GAAA,EAAK,UAAA;AAAA,cACL,KAAA,EAAOS,oBAAA,CAAG,sBAAA,EAAwB,SAAmB,CAAA;AAAA,cACrD,kBAAA,EAAoB,IAAA,CAAK,KAAA,GAAQ,EAAA,GAAK,MAAA;AAAA,cACtC,YAAA,EAAc,MAAM,IAAA,EAAK;AAAA,cACzB,YAAA,EAAc,IAAA;AAAA,cACd,SAAA,EAAW,MAAM,IAAA,CAAK,IAAI,CAAA;AAAA,cAC1B,UAAA,EAAY;AAAA,aACd;AAAA,YACA,MAAM,OAAA;AAAU,WAClB;AAAA,UAEA,OAAA,CAAQ,KAAA,IAAS,CAAC,KAAA,CAAM,QAAA,GACpBT,MAAEQ,YAAAA,EAAU,EAAE,EAAA,EAAI,MAAA,EAAO,EAAG;AAAA,YAC1BR,KAAAA;AAAA,cACE,KAAA;AAAA,cACA;AAAA,gBACE,GAAA,EAAK,MAAA;AAAA,gBACL,EAAA;AAAA,gBACA,IAAA,EAAM,SAAA;AAAA,gBACN,cAAc,KAAA,CAAM,KAAA;AAAA,gBACpB,WAAA,EAAa,SAAS,KAAA,CAAM,IAAA;AAAA,gBAC5B,KAAA,EAAO,cAAA;AAAA,gBACP,KAAA,EAAO,SAAS,KAAA,CAAM;AAAA,eACxB;AAAA,cACA;AAAA,gBACEW,oCAAA,CAAmB,MAAM,OAAO,CAAA;AAAA,gBAChC,MAAM,KAAA,IAAS,QAAA,CAAS,KAAA,CAAM,UAAA,GAC1BX,MAAE,MAAA,EAAQ;AAAA,kBACR,KAAA,EAAO,qBAAA;AAAA,kBACP,KAAA,EAAO,SAAS,KAAA,CAAM,UAAA;AAAA,kBACtB,aAAA,EAAe;AAAA,iBAChB,CAAA,GACD;AAAA;AACN;AACF,WACD,CAAA,GACD;AAAA;AACN,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC;ACjLM,IAAM,SAASL,mBAAAA,CAAgB;AAAA,EACpC,IAAA,EAAM,YAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,MAAA,EAAU;AAAA,IAC1C,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA;AAAA,IAE7C,KAAA,EAAO,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,QAAA,EAAU,IAAA,EAAK;AAAA;AAAA,IAEnF,WAAA,EAAa,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,OAAA,EAAS,MAAA,EAAU;AAAA,IAC7F,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAgC,SAAS,IAAA,EAAK;AAAA;AAAA,IAE5D,SAAA,EAAW,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA;AAAA,IAE1C,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA;AAAA,IAE5C,YAAA,EAAc,EAAE,IAAA,EAAM,MAAA,EAA6C,SAAS,MAAA;AAAU,GACxF;AAAA,EACA,KAAA,EAAO,CAAC,aAAa,CAAA;AAAA,EACrB,MAAM,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAK,EAAG;AACnC,IAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAIC,sCAAA;AAAA,MACxB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,CAAM,WAAA;AAAA,MACN,CAAC,IAAA,KAAS,IAAA,CAAK,aAAA,EAAe,IAAI;AAAA,KACpC;AAEA,IAAA,MAAM,QAAA,GAAWC,QAA2B,IAAI,CAAA;AAChD,IAAA,MAAM,EAAA,GAAKC,wBAAM,QAAQ,CAAA;AACzB,IAAA,MAAM,OAAA,GAAU,GAAG,EAAE,CAAA,MAAA,CAAA;AACrB,IAAA,MAAM,aAAA,GAAgB,GAAG,EAAE,CAAA,YAAA,CAAA;AAE3B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAIG,6BAAA,CAAY,QAAQ,QAAQ,CAAA;AAEvD,IAAA,MAAM,QAAQ,MAAY;AACxB,MAAA,IAAI,KAAA,CAAM,WAAA,EAAa,OAAA,CAAQ,KAAK,CAAA;AAAA,IACtC,CAAA;AAEA,IAAAE,4BAAA,CAAW,QAAA,EAAU,QAAQ,KAAA,EAAO;AAAA,MAClC,cAAc,KAAA,CAAM,WAAA;AAAA,MACpB,WAAW,KAAA,CAAM;AAAA,KAClB,CAAA;AACD,IAAAE,8BAAA,CAAa,UAAU,MAAM,CAAA;AAC7B,IAAAC,8BAAA,CAAa,QAAA,EAAU,MAAA,EAAQ,KAAA,CAAM,YAAY,CAAA;AACjD,IAAAC,iCAAA,CAAgB,MAAM,CAAA;AACtB,IAAAK,+BAAA,CAAc,MAAM,CAAA;AAEpB,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,EAAO,OAAO,IAAA;AAE3B,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,WAAU,GAAI,KAAA;AAE3C,MAAA,OAAOZ,KAAAA,CAAEQ,YAAAA,EAAU,EAAE,EAAA,EAAI,QAAO,EAAG;AAAA,QACjCR,KAAAA,CAAE,OAAO,EAAE,KAAA,EAAO,sBAAsB,YAAA,EAAc,KAAA,CAAM,OAAM,EAAG;AAAA;AAAA;AAAA;AAAA,UAInEA,MAAE,KAAA,EAAO;AAAA,YACP,KAAA,EAAO,oBAAA;AAAA,YACP,cAAc,KAAA,CAAM,KAAA;AAAA,YACpB,aAAA,EAAe;AAAA,WAChB,CAAA;AAAA,UAEDA,KAAAA;AAAA,YACE,KAAA;AAAA,YACA;AAAA,cACE,GAAA,EAAK,QAAA;AAAA,cACL,IAAA,EAAM,QAAA;AAAA,cACN,YAAA,EAAc,MAAA;AAAA,cACd,iBAAA,EAAmB,OAAA;AAAA,cACnB,GAAI,KAAA,CAAM,WAAA,GAAc,EAAE,kBAAA,EAAoB,eAAc,GAAI,IAAA;AAAA,cAChE,QAAA,EAAU,IAAA;AAAA,cACV,cAAc,KAAA,CAAM,KAAA;AAAA,cACpB,OAAOS,oBAAA,CAAG,aAAA,EAAe,gBAAgB,KAAA,CAAM,IAAI,IAAI,SAAmB,CAAA;AAAA,cAC1E,GAAG;AAAA,aACL;AAAA,YACA;AAAA,cACET,KAAAA,CAAE,QAAA,EAAU,EAAE,KAAA,EAAO,uBAAsB,EAAG;AAAA,gBAC5CA,KAAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,wBAAuB,EAAG;AAAA,kBAC1CA,MAAE,IAAA,EAAM,EAAE,OAAO,oBAAA,EAAsB,EAAA,EAAI,SAAQ,EAAG;AAAA,oBACpDW,oCAAA,CAAmB,MAAM,KAAK;AAAA,mBAC/B,CAAA;AAAA,kBACD,KAAA,CAAM,cACFX,KAAAA,CAAE,GAAA,EAAK,EAAE,KAAA,EAAO,0BAAA,EAA4B,EAAA,EAAI,aAAA,EAAc,EAAG;AAAA,oBAC/DW,oCAAA,CAAmB,MAAM,WAAW;AAAA,mBACrC,CAAA,GACD;AAAA,iBACL,CAAA;AAAA,gBAED,MAAM,SAAA,GACFX,KAAAA;AAAA,kBACE,QAAA;AAAA,kBACA;AAAA,oBACE,IAAA,EAAM,QAAA;AAAA,oBACN,KAAA,EAAO,mCAAA;AAAA,oBACP,YAAA,EAAc,cAAA;AAAA,oBACd,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK;AAAA,mBAC9B;AAAA,kBACA;AAAA,oBACEA,KAAAA;AAAA,sBACE,KAAA;AAAA,sBACA;AAAA,wBACE,OAAA,EAAS,WAAA;AAAA,wBACT,KAAA,EAAO,IAAA;AAAA,wBACP,MAAA,EAAQ,IAAA;AAAA,wBACR,aAAA,EAAe;AAAA,uBACjB;AAAA,sBACA;AAAA,wBACEA,MAAE,MAAA,EAAQ;AAAA,0BACR,CAAA,EAAG,oBAAA;AAAA,0BACH,MAAA,EAAQ,cAAA;AAAA,0BACR,cAAA,EAAgB,MAAA;AAAA,0BAChB,gBAAA,EAAkB,OAAA;AAAA,0BAClB,IAAA,EAAM;AAAA,yBACP;AAAA;AACH;AACF;AACF,iBACF,GACA;AAAA,eACL,CAAA;AAAA,cAED,KAAA,CAAM,OAAA,GAAUA,KAAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,mBAAA,EAAoB,EAAG,KAAA,CAAM,OAAA,EAAS,CAAA,GAAI,IAAA;AAAA,cAC5E,KAAA,CAAM,MAAA,GAASA,KAAAA,CAAE,QAAA,EAAU,EAAE,KAAA,EAAO,qBAAA,EAAsB,EAAG,KAAA,CAAM,MAAA,EAAQ,CAAA,GAAI;AAAA;AACjF;AACF,SACD;AAAA,OACF,CAAA;AAAA,IACH,CAAA;AAAA,EACF;AACF,CAAC;AAwBM,IAAM,cAAcL,mBAAAA,CAAgB;AAAA,EACzC,IAAA,EAAM,iBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,MAAA,EAAU;AAAA,IAC1C,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA,IAC7C,KAAA,EAAO,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,QAAA,EAAU,IAAA,EAAK;AAAA,IACnF,WAAA,EAAa,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,QAAA,EAAU,IAAA,EAAK;AAAA;AAAA,IAEzF,YAAA,EAAc,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,SAAA,EAAU;AAAA,IACjD,WAAA,EAAa,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,QAAA,EAAS;AAAA;AAAA,IAE/C,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA;AAAA,IAE7C,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA;AAAM,GACxC;AAAA,EACA,KAAA,EAAO,CAAC,aAAA,EAAe,SAAA,EAAW,QAAQ,CAAA;AAAA,EAC1C,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,MAAK,EAAG;AAC5B,IAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAIC,sCAAA;AAAA,MACxB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,CAAM,WAAA;AAAA,MACN,CAAC,IAAA,KAAS,IAAA,CAAK,aAAA,EAAe,IAAI;AAAA,KACpC;AAEA,IAAA,MAAM,QAAA,GAAWC,QAA2B,IAAI,CAAA;AAChD,IAAA,MAAM,SAAA,GAAYA,QAA8B,IAAI,CAAA;AACpD,IAAA,MAAM,EAAA,GAAKC,wBAAM,aAAa,CAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,GAAG,EAAE,CAAA,MAAA,CAAA;AACrB,IAAA,MAAM,aAAA,GAAgB,GAAG,EAAE,CAAA,YAAA,CAAA;AAE3B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAIG,6BAAA,CAAY,QAAQ,QAAQ,CAAA;AAEvD,IAAA,MAAM,SAAS,MAAY;AACzB,MAAA,IAAA,CAAK,QAAQ,CAAA;AACb,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AAEA,IAAAE,4BAAA,CAAW,QAAA,EAAU,QAAQ,MAAA,EAAQ,EAAE,cAAc,KAAA,EAAO,SAAA,EAAW,MAAM,CAAA;AAC7E,IAAAE,8BAAA,CAAa,UAAU,MAAM,CAAA;AAC7B,IAAAC,8BAAA,CAAa,QAAA,EAAU,QAAQ,SAAS,CAAA;AACxC,IAAAC,iCAAA,CAAgB,MAAM,CAAA;AACtB,IAAAK,+BAAA,CAAc,MAAM,CAAA;AAEpB,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,EAAO,OAAO,IAAA;AAE3B,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,WAAU,GAAI,KAAA;AAE3C,MAAA,OAAOZ,KAAAA,CAAEQ,YAAAA,EAAU,EAAE,EAAA,EAAI,QAAO,EAAG;AAAA,QACjCR,KAAAA,CAAE,OAAO,EAAE,KAAA,EAAO,sBAAsB,YAAA,EAAc,KAAA,CAAM,OAAM,EAAG;AAAA,UACnEA,MAAE,KAAA,EAAO;AAAA,YACP,KAAA,EAAO,oBAAA;AAAA,YACP,cAAc,KAAA,CAAM,KAAA;AAAA,YACpB,aAAA,EAAe;AAAA,WAChB,CAAA;AAAA,UAEDA,KAAAA;AAAA,YACE,KAAA;AAAA,YACA;AAAA,cACE,GAAA,EAAK,QAAA;AAAA,cACL,IAAA,EAAM,aAAA;AAAA,cACN,YAAA,EAAc,MAAA;AAAA,cACd,iBAAA,EAAmB,OAAA;AAAA,cACnB,kBAAA,EAAoB,aAAA;AAAA,cACpB,QAAA,EAAU,IAAA;AAAA,cACV,cAAc,KAAA,CAAM,KAAA;AAAA,cACpB,KAAA,EAAOS,oBAAA;AAAA,gBACL,aAAA;AAAA,gBACA,iBAAA;AAAA,gBACA,oBAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,GAAG;AAAA,aACL;AAAA,YACA;AAAA,cACET,KAAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,qBAAoB,EAAG;AAAA,gBACvC,MAAM,WAAA,GACFA,KAAAA;AAAA,kBACE,MAAA;AAAA,kBACA;AAAA,oBACE,KAAA,EAAO,yDAAA;AAAA,oBACP,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACA;AAAA,oBACEA,KAAAA;AAAA,sBACE,KAAA;AAAA,sBACA;AAAA,wBACE,OAAA,EAAS,WAAA;AAAA,wBACT,KAAA,EAAO,IAAA;AAAA,wBACP,MAAA,EAAQ,IAAA;AAAA,wBACR,IAAA,EAAM,MAAA;AAAA,wBACN,MAAA,EAAQ,cAAA;AAAA,wBACR,cAAA,EAAgB;AAAA,uBAClB;AAAA,sBACA;AAAA,wBACEA,MAAE,MAAA,EAAQ,EAAE,GAAG,SAAA,EAAW,gBAAA,EAAkB,SAAS,CAAA;AAAA,wBACrDA,MAAE,QAAA,EAAU;AAAA,0BACV,EAAA,EAAI,IAAA;AAAA,0BACJ,EAAA,EAAI,MAAA;AAAA,0BACJ,CAAA,EAAG,GAAA;AAAA,0BACH,IAAA,EAAM,cAAA;AAAA,0BACN,MAAA,EAAQ;AAAA,yBACT,CAAA;AAAA,wBACDA,MAAE,MAAA,EAAQ;AAAA,0BACR,CAAA,EAAG,iFAAA;AAAA,0BACH,iBAAA,EAAmB;AAAA,yBACpB;AAAA;AACH;AACF;AACF,iBACF,GACA,IAAA;AAAA,gBAEJA,MAAE,IAAA,EAAM,EAAE,OAAO,oBAAA,EAAsB,EAAA,EAAI,SAAQ,EAAG;AAAA,kBACpDW,oCAAA,CAAmB,MAAM,KAAK;AAAA,iBAC/B,CAAA;AAAA,gBACDX,MAAE,GAAA,EAAK,EAAE,OAAO,0BAAA,EAA4B,EAAA,EAAI,eAAc,EAAG;AAAA,kBAC/DW,oCAAA,CAAmB,MAAM,WAAW;AAAA,iBACrC;AAAA,eACF,CAAA;AAAA,cAEDX,KAAAA,CAAE,QAAA,EAAU,EAAE,KAAA,EAAO,uBAAsB,EAAG;AAAA,gBAC5CA,KAAAA;AAAA,kBACE,QAAA;AAAA,kBACA;AAAA,oBACE,GAAA,EAAK,SAAA;AAAA,oBACL,IAAA,EAAM,QAAA;AAAA,oBACN,KAAA,EAAO,sDAAA;AAAA,oBACP,UAAU,KAAA,CAAM,IAAA;AAAA,oBAChB,OAAA,EAAS;AAAA,mBACX;AAAA,kBACA,CAAC,MAAM,WAAW;AAAA,iBACpB;AAAA,gBACAA,KAAAA;AAAA,kBACE,QAAA;AAAA,kBACA;AAAA,oBACE,IAAA,EAAM,QAAA;AAAA,oBACN,KAAA,EAAOS,oBAAA;AAAA,sBACL,UAAA;AAAA,sBACA,cAAA;AAAA,sBACA,KAAA,CAAM,cAAc,kBAAA,GAAqB,iBAAA;AAAA,sBACzC;AAAA,qBACF;AAAA,oBACA,UAAU,KAAA,CAAM,IAAA;AAAA,oBAChB,OAAA,EAAS,MAAM,IAAA,CAAK,SAAS;AAAA,mBAC/B;AAAA,kBACA;AAAA,oBACE,KAAA,CAAM,IAAA,GACFT,KAAAA,CAAE,MAAA,EAAQ,EAAE,OAAO,+BAAA,EAAiC,aAAA,EAAe,MAAA,EAAQ,CAAA,GAC3E,IAAA;AAAA,oBACJ,KAAA,CAAM;AAAA;AACR;AACF,eACD;AAAA;AACH;AACF,SACD;AAAA,OACF,CAAA;AAAA,IACH,CAAA;AAAA,EACF;AACF,CAAC;AAGM,IAAM,eAAeL,mBAAAA,CAAgB;AAAA,EAC1C,IAAA,EAAM,kBAAA;AAAA,EACN,KAAA,CAAM,MAAA,EAAQ,EAAE,KAAA,EAAO,OAAM,EAAG;AAC9B,IAAA,OAAO,MACLK,KAAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAOS,oBAAA,CAAG,sBAAA,EAAwB,KAAA,CAAM,KAAe,CAAA,EAAE,EAAG,KAAA,CAAM,WAAW,CAAA;AAAA,EAC5F;AACF,CAAC;ACzUM,IAAM,SAASd,mBAAAA,CAAgB;AAAA,EACpC,IAAA,EAAM,YAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,MAAA,EAAU;AAAA,IAC1C,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA;AAAA,IAE7C,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAgC,SAAS,OAAA,EAAQ;AAAA,IAC/D,KAAA,EAAO,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,QAAA,EAAU,IAAA,EAAK;AAAA,IACnF,WAAA,EAAa,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAA,EAA4B,OAAA,EAAS,MAAA,EAAU;AAAA;AAAA,IAE7F,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,OAAA,EAAQ;AAAA,IACvC,SAAA,EAAW,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA;AAAA,IAE1C,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,IACtC,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA;AAAK,GAC9C;AAAA,EACA,KAAA,EAAO,CAAC,aAAa,CAAA;AAAA,EACrB,MAAM,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAK,EAAG;AACnC,IAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAIC,sCAAA;AAAA,MACxB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,CAAM,WAAA;AAAA,MACN,CAAC,IAAA,KAAS,IAAA,CAAK,aAAA,EAAe,IAAI;AAAA,KACpC;AAEA,IAAA,MAAM,QAAA,GAAWC,QAA2B,IAAI,CAAA;AAChD,IAAA,MAAM,EAAA,GAAKC,wBAAM,QAAQ,CAAA;AACzB,IAAA,MAAM,OAAA,GAAU,GAAG,EAAE,CAAA,MAAA,CAAA;AACrB,IAAA,MAAM,aAAA,GAAgB,GAAG,EAAE,CAAA,YAAA,CAAA;AAE3B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAIG,6BAAA,CAAY,QAAQ,QAAQ,CAAA;AAEvD,IAAA,MAAM,QAAQ,MAAY;AACxB,MAAA,IAAI,KAAA,CAAM,WAAA,EAAa,OAAA,CAAQ,KAAK,CAAA;AAAA,IACtC,CAAA;AAEA,IAAAE,4BAAA,CAAW,QAAA,EAAU,QAAQ,KAAA,EAAO;AAAA,MAClC,YAAA,EAAc,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,KAAA;AAAA,MACzC,WAAW,KAAA,CAAM;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,aAAaC,YAAAA,CAAS,MAAM,MAAA,CAAO,KAAA,IAAS,MAAM,KAAK,CAAA;AAC7D,IAAAC,8BAAA,CAAa,UAAU,UAAU,CAAA;AACjC,IAAAC,8BAAA,CAAa,UAAU,MAAM,CAAA;AAC7B,IAAAC,iCAAA,CAAgB,MAAM,CAAA;AACtB,IAAA,MAAM,mBAAmBH,YAAAA,CAAS,MAAM,MAAA,CAAO,KAAA,IAAS,MAAM,KAAK,CAAA;AACnE,IAAAQ,+BAAA,CAAc,gBAAgB,CAAA;AAE9B,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,EAAO,OAAO,IAAA;AAE3B,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,WAAU,GAAI,KAAA;AAC3C,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,MAAM,IAAA,KAAS,OAAA;AAE3D,MAAA,OAAOZ,KAAAA,CAAEQ,YAAAA,EAAU,EAAE,EAAA,EAAI,QAAO,EAAG;AAAA,QACjCR,KAAAA;AAAA,UACE,KAAA;AAAA,UACA;AAAA,YACE,OAAOS,oBAAA,CAAG,oBAAA,EAAsB,CAAC,KAAA,CAAM,SAAS,4BAA4B,CAAA;AAAA,YAC5E,cAAc,KAAA,CAAM;AAAA,WACtB;AAAA,UACA;AAAA,YACE,KAAA,CAAM,KAAA,GACFT,KAAAA,CAAE,KAAA,EAAO;AAAA,cACP,KAAA,EAAO,oBAAA;AAAA,cACP,cAAc,KAAA,CAAM,KAAA;AAAA,cACpB,aAAA,EAAe;AAAA,aAChB,CAAA,GACD,IAAA;AAAA,YAEJA,KAAAA;AAAA,cACE,KAAA;AAAA,cACA;AAAA,gBACE,GAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAM,QAAA;AAAA,gBACN,YAAA,EAAc,MAAM,KAAA,IAAS,MAAA;AAAA,gBAC7B,iBAAA,EAAmB,OAAA;AAAA,gBACnB,GAAI,KAAA,CAAM,WAAA,GAAc,EAAE,kBAAA,EAAoB,eAAc,GAAI,IAAA;AAAA,gBAChE,QAAA,EAAU,IAAA;AAAA,gBACV,cAAc,KAAA,CAAM,KAAA;AAAA,gBACpB,aAAa,KAAA,CAAM,IAAA;AAAA,gBACnB,OAAOS,oBAAA,CAAG,aAAA,EAAe,gBAAgB,KAAA,CAAM,IAAI,IAAI,SAAmB,CAAA;AAAA;AAAA;AAAA;AAAA,gBAI1E,KAAA,EAAO;AAAA,kBACL,CAAC,UAAA,GAAa,OAAA,GAAU,QAAQ,GAAG,KAAA,CAAM,IAAA;AAAA,kBACzC,sBAAsB,KAAA,CAAM;AAAA,iBAC9B;AAAA,gBACA,GAAG;AAAA,eACL;AAAA,cACA;AAAA,gBACET,KAAAA,CAAE,QAAA,EAAU,EAAE,KAAA,EAAO,uBAAsB,EAAG;AAAA,kBAC5CA,KAAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,wBAAuB,EAAG;AAAA,oBAC1CA,MAAE,IAAA,EAAM,EAAE,OAAO,oBAAA,EAAsB,EAAA,EAAI,SAAQ,EAAG;AAAA,sBACpDW,oCAAA,CAAmB,MAAM,KAAK;AAAA,qBAC/B,CAAA;AAAA,oBACD,KAAA,CAAM,cACFX,KAAAA,CAAE,GAAA,EAAK,EAAE,KAAA,EAAO,0BAAA,EAA4B,EAAA,EAAI,aAAA,EAAc,EAAG;AAAA,sBAC/DW,oCAAA,CAAmB,MAAM,WAAW;AAAA,qBACrC,CAAA,GACD;AAAA,mBACL,CAAA;AAAA,kBAED,MAAM,SAAA,GACFX,KAAAA;AAAA,oBACE,QAAA;AAAA,oBACA;AAAA,sBACE,IAAA,EAAM,QAAA;AAAA,sBACN,KAAA,EAAO,mCAAA;AAAA,sBACP,YAAA,EAAc,aAAA;AAAA,sBACd,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK;AAAA,qBAC9B;AAAA,oBACA;AAAA,sBACEA,KAAAA;AAAA,wBACE,KAAA;AAAA,wBACA;AAAA,0BACE,OAAA,EAAS,WAAA;AAAA,0BACT,KAAA,EAAO,IAAA;AAAA,0BACP,MAAA,EAAQ,IAAA;AAAA,0BACR,aAAA,EAAe;AAAA,yBACjB;AAAA,wBACA;AAAA,0BACEA,MAAE,MAAA,EAAQ;AAAA,4BACR,CAAA,EAAG,oBAAA;AAAA,4BACH,MAAA,EAAQ,cAAA;AAAA,4BACR,cAAA,EAAgB,MAAA;AAAA,4BAChB,gBAAA,EAAkB,OAAA;AAAA,4BAClB,IAAA,EAAM;AAAA,2BACP;AAAA;AACH;AACF;AACF,mBACF,GACA;AAAA,iBACL,CAAA;AAAA,gBAEDA,KAAAA,CAAE,OAAO,EAAE,KAAA,EAAO,qBAAoB,EAAG,KAAA,CAAM,WAAW,CAAA;AAAA,gBAC1D,KAAA,CAAM,MAAA,GAASA,KAAAA,CAAE,QAAA,EAAU,EAAE,KAAA,EAAO,qBAAA,EAAsB,EAAG,KAAA,CAAM,MAAA,EAAQ,CAAA,GAAI;AAAA;AACjF;AACF;AACF;AACF,OACD,CAAA;AAAA,IACH,CAAA;AAAA,EACF;AACF,CAAC;;;ACpHM,SAAS,QAAQ,KAAA,EAA0C;AAChE,EAAA,MAAM,OAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,IAAA,IAAI,UAAU,KAAA,KAAU,KAAA,CAAM,SAAS,WAAA,IAAe,KAAA,CAAM,SAAS,OAAA,CAAA,EAAU;AAC/E,IAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AAC7C,MAAA,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,EAAQ,WAAA,KAAgB;AAC7C,QAAA,IAAA,CAAK,IAAA,CAAK,EAAE,KAAA,EAAO,WAAA,EAAa,UAAU,MAAA,CAAO,QAAA,IAAY,OAAO,CAAA;AAAA,MACtE,CAAC,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,KAAK,EAAE,KAAA,EAAO,UAAW,KAAA,CAAuB,QAAA,IAAY,OAAO,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,IAAA;AACT;;;AC/CO,IAAM,cAAcL,mBAAAA,CAAgB;AAAA,EACzC,IAAA,EAAM,iBAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,EAAE,IAAA,EAAM,MAAA,EAAgD,UAAU,IAAA,EAAK;AAAA,IACjF,EAAA,EAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAU,IAAA,EAAK;AAAA,IACnC,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAAyC,UAAU,IAAA,EAAK;AAAA,IACvE,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAU,IAAA,EAAK;AAAA,IACtC,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAuC,UAAU,IAAA,EAAK;AAAA;AAAA;AAAA;AAAA,IAIrE,aAAA,EAAe,EAAE,IAAA,EAAM,MAAA,EAA4C,UAAU,IAAA,EAAK;AAAA,IAClF,UAAA,EAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA,EAAU;AAAA,IAC/C,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAkC,UAAU,IAAA;AAAK,GACpE;AAAA,EACA,MAAM,KAAA,EAAO;AACX,IAAA,MAAM,OAAOS,YAAAA,CAAS,MAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA;AAChD,IAAA,MAAM,QAAA,GAAWP,OAAAA,CAA+B,EAAE,CAAA;AAClD,IAAA,MAAM,MAAA,GAASA,OAAAA,CAAI,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,CAAC,GAAA,KAAQ,CAAC,GAAA,CAAI,QAAQ,CAAC,CAAA;AAC/D,IAAA,MAAM,WAAA,GAAcA,QAAmB,IAAI,CAAA;AAC3C,IAAA,IAAI,eAAA,GAAkB,EAAA;AACtB,IAAA,IAAI,cAAA;AAIJ,IAAAgB,aAAA,CAAU,MAAM;AACd,MAAA,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA,EAAG,KAAA,EAAM;AAAA,IACtC,CAAC,CAAA;AAED,IAAAH,mBAAAA,CAAgB,MAAM,YAAA,CAAa,cAAc,CAAC,CAAA;AAElD,IAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAAwB;AACpC,MAAA,MAAM,OAAO,IAAA,CAAK,KAAA;AAClB,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACvB,MAAA,IAAI,OAAO,MAAA,CAAO,KAAA;AAClB,MAAA,KAAA,IAAS,QAAA,GAAW,CAAA,EAAG,QAAA,GAAW,IAAA,CAAK,QAAQ,QAAA,EAAA,EAAY;AACzD,QAAA,IAAA,GAAA,CAAQ,IAAA,GAAO,KAAA,GAAQ,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA;AAC3C,QAAA,IAAI,CAAC,IAAA,CAAK,IAAI,CAAA,EAAG,QAAA,EAAU;AAAA,MAC7B;AACA,MAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AACf,MAAA,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAG,KAAA,EAAM;AAAA,IAC9B,CAAA;AAEA,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAwB;AACxC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC5B,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,QAAA,EAAU;AAC1B,MAAA,MAAM,EAAE,OAAM,GAAI,GAAA;AAElB,MAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,SAAA,EAAW;AAC/C,QAAA,WAAA,CAAY,KAAA,GAAQ,KAAA;AACpB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,UAAA,EAAY;AAChD,QAAA,KAAA,CAAM,QAAA,CAAS,CAAC,KAAA,CAAM,OAAO,CAAA;AAG7B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AAC7C,QAAA,KAAA,CAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,WAAY,EAAG,KAAK,CAAA;AACrD,QAAA,KAAA,CAAM,OAAA,EAAQ;AACd,QAAA;AAAA,MACF;AACC,MAAC,MAAqB,QAAA,IAAW;AAClC,MAAA,KAAA,CAAM,OAAA,EAAQ;AAAA,IAChB,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAA+B;AAChD,MAAA,QAAQ,MAAM,GAAA;AAAK,QACjB,KAAK,WAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,IAAA,CAAK,CAAC,CAAA;AACN,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,IAAA,CAAK,EAAE,CAAA;AACP,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,MAAA,CAAO,KAAA,GAAQ,CAAA;AACf,UAAA,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,EAAM;AACzB,UAAA;AAAA,QACF,KAAK,KAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAA;AACnC,UAAA,QAAA,CAAS,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAC,GAAG,KAAA,EAAM;AAC7C,UAAA;AAAA,QACF,KAAK,OAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,QAAA,CAAS,OAAO,KAAK,CAAA;AACrB,UAAA;AAAA,QACF,KAAK,YAAA,EAAc;AACjB,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AACnC,UAAA,IAAI,OAAO,MAAA,IAAU,GAAA,CAAI,SAAS,GAAA,CAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC9D,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,WAAA,CAAY,QAAQ,MAAA,CAAO,KAAA;AAAA,UAC7B;AACA,UAAA;AAAA,QACF;AAAA,QACA,KAAK,QAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,KAAA,CAAM,OAAA,EAAQ;AACd,UAAA;AAAA,QACF,KAAK,KAAA;AAEH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,KAAA,CAAM,OAAA,EAAQ;AACd,UAAA;AAAA,QACF,SAAS;AACP,UAAA,IAAI,KAAA,CAAM,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG;AAC5B,UAAA,YAAA,CAAa,cAAc,CAAA;AAC3B,UAAA,eAAA,IAAmB,KAAA,CAAM,IAAI,WAAA,EAAY;AACzC,UAAA,cAAA,GAAiB,WAAW,MAAM;AAChC,YAAA,eAAA,GAAkB,EAAA;AAAA,UACpB,GAAG,GAAG,CAAA;AAEN,UAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,CAAC,KAAK,KAAA,KAAU;AACjD,YAAA,IAAI,GAAA,CAAI,QAAA,IAAY,KAAA,KAAU,MAAA,CAAO,OAAO,OAAO,KAAA;AACnD,YAAA,MAAM,IAAA,GACJ,OAAQ,GAAA,CAAI,KAAA,CAAqB,UAAU,QAAA,GACrC,GAAA,CAAI,MAAqB,KAAA,GAC3B,EAAA;AACN,YAAA,OAAO,IAAA,CAAK,WAAA,EAAY,CAAE,UAAA,CAAW,eAAe,CAAA;AAAA,UACtD,CAAC,CAAA;AACD,UAAA,IAAI,SAAS,CAAA,EAAG;AACd,YAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AACf,YAAA,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,EAAG,KAAA,EAAM;AAAA,UAC/B;AAAA,QACF;AAAA;AACF,IACF,CAAA;AAEA,IAAA,OAAO,MAAa;AAClB,MAAA,IAAI,QAAA,GAAW,EAAA;AAEf,MAAA,OAAOV,KAAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,KAAK,KAAA,CAAM,QAAA;AAAA,UACX,IAAI,KAAA,CAAM,EAAA;AAAA,UACV,IAAA,EAAM,MAAA;AAAA,UACN,cAAc,KAAA,CAAM,KAAA;AAAA,UACpB,cAAc,KAAA,CAAM,KAAA;AAAA,UACpB,KAAA,EAAOS,oBAAA,CAAG,WAAA,EAAa,KAAA,CAAM,UAAU,CAAA;AAAA,UACvC,OAAO,KAAA,CAAM,aAAA;AAAA,UACb;AAAA,SACF;AAAA,QACA,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,OAAO,UAAA,KAAe;AACrC,UAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,WAAA,EAAa;AACjD,YAAA,OAAOT,MAAE,KAAA,EAAO;AAAA,cACd,GAAA,EAAK,OAAO,UAAU,CAAA,CAAA;AAAA,cACtB,IAAA,EAAM,WAAA;AAAA,cACN,KAAA,EAAO;AAAA,aACR,CAAA;AAAA,UACH;AAEA,UAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AAC7C,YAAA,OAAOA,KAAAA;AAAA,cACL,KAAA;AAAA,cACA,EAAE,KAAK,CAAA,MAAA,EAAS,UAAU,IAAI,IAAA,EAAM,cAAA,EAAgB,OAAO,kBAAA,EAAmB;AAAA,cAC9E,CAACW,oCAAA,CAAmB,KAAA,CAAM,KAAK,CAAC;AAAA,aAClC;AAAA,UACF;AAEA,UAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AAC7C,YAAA,OAAOX,KAAAA;AAAA,cACL,KAAA;AAAA,cACA,EAAE,KAAK,CAAA,MAAA,EAAS,UAAU,IAAI,IAAA,EAAM,OAAA,EAAS,OAAO,kBAAA,EAAmB;AAAA,cACvE,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AAC5B,gBAAA,QAAA,EAAA;AACA,gBAAA,MAAMc,MAAAA,GAAQ,QAAA;AACd,gBAAA,OAAOd,KAAAA;AAAA,kBACL,KAAA;AAAA,kBACA;AAAA,oBACE,KAAK,MAAA,CAAO,KAAA;AAAA,oBACZ,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,sBAAA,QAAA,CAAS,KAAA,CAAMc,MAAK,CAAA,GAAI,IAAA;AAAA,oBAC1B,CAAA;AAAA,oBACA,IAAA,EAAM,eAAA;AAAA,oBACN,cAAA,EAAgB,KAAA,CAAM,KAAA,KAAU,MAAA,CAAO,KAAA;AAAA,oBACvC,eAAA,EAAiB,OAAO,QAAA,IAAY,MAAA;AAAA,oBACpC,QAAA,EAAUA,MAAAA,KAAU,MAAA,CAAO,KAAA,GAAQ,GAAA,GAAM,IAAA;AAAA,oBACzC,KAAA,EAAOL,oBAAA,CAAG,iBAAA,EAAmB,MAAA,CAAO,YAAY,2BAA2B,CAAA;AAAA,oBAC3E,OAAA,EAAS,MAAM,QAAA,CAASK,MAAK,CAAA;AAAA,oBAC7B,cAAc,MAAM;AAClB,sBAAA,IAAI,CAAC,MAAA,CAAO,QAAA,EAAU,MAAA,CAAO,KAAA,GAAQA,MAAAA;AAAA,oBACvC;AAAA,mBACF;AAAA,kBACA;AAAA,oBACEd,MAAE,MAAA,EAAQ;AAAA,sBACR,KAAA,EAAOS,oBAAA;AAAA,wBACL,sBAAA;AAAA,wBACA,KAAA,CAAM,KAAA,KAAU,MAAA,CAAO,KAAA,IAAS;AAAA,uBAClC;AAAA,sBACA,aAAA,EAAe;AAAA,qBAChB,CAAA;AAAA,oBACDT,KAAAA,CAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,iBAAA,EAAkB,EAAG,CAACW,oCAAA,CAAmB,MAAA,CAAO,KAAK,CAAC,CAAC;AAAA;AAC5E,iBACF;AAAA,cACF,CAAC;AAAA,aACH;AAAA,UACF;AAEA,UAAA,QAAA,EAAA;AACA,UAAA,MAAM,KAAA,GAAQ,QAAA;AAEd,UAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,UAAA,EAAY;AAChD,YAAA,OAAOX,KAAAA;AAAA,cACL,KAAA;AAAA,cACA;AAAA,gBACE,GAAA,EAAK,KAAA,CAAM,EAAA,IAAM,CAAA,MAAA,EAAS,UAAU,CAAA,CAAA;AAAA,gBACpC,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,kBAAA,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA;AAAA,gBAC1B,CAAA;AAAA,gBACA,IAAA,EAAM,kBAAA;AAAA,gBACN,gBAAgB,KAAA,CAAM,OAAA;AAAA,gBACtB,eAAA,EAAiB,MAAM,QAAA,IAAY,MAAA;AAAA,gBACnC,QAAA,EAAU,KAAA,KAAU,MAAA,CAAO,KAAA,GAAQ,GAAA,GAAM,IAAA;AAAA,gBACzC,KAAA,EAAOS,oBAAA,CAAG,iBAAA,EAAmB,KAAA,CAAM,YAAY,2BAA2B,CAAA;AAAA,gBAC1E,OAAA,EAAS,MAAM,QAAA,CAAS,KAAK,CAAA;AAAA,gBAC7B,cAAc,MAAM;AAClB,kBAAA,IAAI,CAAC,KAAA,CAAM,QAAA,EAAU,MAAA,CAAO,KAAA,GAAQ,KAAA;AAAA,gBACtC;AAAA,eACF;AAAA,cACA;AAAA,gBACET,KAAAA;AAAA,kBACE,MAAA;AAAA,kBACA;AAAA,oBACE,KAAA,EAAOS,oBAAA;AAAA,sBACL,sBAAA;AAAA,sBACA,6BAAA;AAAA,sBACA,MAAM,OAAA,IAAW;AAAA,qBACnB;AAAA,oBACA,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACA;AAAA,oBACET,KAAAA,CAAE,OAAO,EAAE,OAAA,EAAS,aAAa,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK,EAAG;AAAA,sBAC5DA,MAAE,MAAA,EAAQ;AAAA,wBACR,CAAA,EAAG,oBAAA;AAAA,wBACH,MAAA,EAAQ,cAAA;AAAA,wBACR,cAAA,EAAgB,GAAA;AAAA,wBAChB,gBAAA,EAAkB,OAAA;AAAA,wBAClB,iBAAA,EAAmB,OAAA;AAAA,wBACnB,IAAA,EAAM;AAAA,uBACP;AAAA,qBACF;AAAA;AACH,iBACF;AAAA,gBACAA,KAAAA,CAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,iBAAA,EAAkB,EAAG,CAACW,oCAAA,CAAmB,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAAA,gBACzE,KAAA,CAAM,QAAA,GAAWX,KAAAA,CAAE,KAAA,EAAO,EAAE,OAAO,qBAAA,EAAsB,EAAG,KAAA,CAAM,QAAQ,CAAA,GAAI;AAAA;AAChF,aACF;AAAA,UACF;AAEA,UAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,SAAA,EAAW;AAC/C,YAAA,OAAOA,MAAE,OAAA,EAAS;AAAA,cAChB,GAAA,EAAK,KAAA,CAAM,EAAA,IAAM,CAAA,IAAA,EAAO,UAAU,CAAA,CAAA;AAAA,cAClC,KAAA;AAAA,cACA,MAAA,EAAQ,UAAU,MAAA,CAAO,KAAA;AAAA,cACzB,IAAA,EAAM,YAAY,KAAA,KAAU,KAAA;AAAA,cAC5B,YAAA,EAAc,CAAC,IAAA,KAAkB;AAC/B,gBAAA,WAAA,CAAY,KAAA,GAAQ,OAAO,KAAA,GAAQ,IAAA;AAAA,cACrC,CAAA;AAAA,cACA,SAAS,MAAM;AACb,gBAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AAAA,cACjB,CAAA;AAAA,cACA,UAAA,EAAY,MAAM,KAAA,CAAM,OAAA,EAAQ;AAAA,cAChC,SAAA,EAAW,CAAC,IAAA,KAA6B;AACvC,gBAAA,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA;AAAA,cAC1B;AAAA,aACD,CAAA;AAAA,UACH;AAEA,UAAA,MAAM,MAAA,GAAS,KAAA;AACf,UAAA,OAAOA,KAAAA;AAAA,YACL,KAAA;AAAA,YACA;AAAA,cACE,GAAA,EAAK,MAAA,CAAO,EAAA,IAAM,CAAA,KAAA,EAAQ,UAAU,CAAA,CAAA;AAAA,cACpC,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,gBAAA,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA;AAAA,cAC1B,CAAA;AAAA,cACA,IAAA,EAAM,UAAA;AAAA,cACN,eAAA,EAAiB,OAAO,QAAA,IAAY,MAAA;AAAA,cACpC,QAAA,EAAU,KAAA,KAAU,MAAA,CAAO,KAAA,GAAQ,GAAA,GAAM,IAAA;AAAA,cACzC,KAAA,EAAOS,oBAAA;AAAA,gBACL,iBAAA;AAAA,gBACA,OAAO,MAAA,IAAU,yBAAA;AAAA,gBACjB,OAAO,QAAA,IAAY;AAAA,eACrB;AAAA,cACA,OAAA,EAAS,MAAM,QAAA,CAAS,KAAK,CAAA;AAAA,cAC7B,cAAc,MAAM;AAClB,gBAAA,IAAI,CAAC,MAAA,CAAO,QAAA,EAAU,MAAA,CAAO,KAAA,GAAQ,KAAA;AAAA,cACvC;AAAA,aACF;AAAA,YACA;AAAA,cACE,MAAA,CAAO,IAAA,GACHT,KAAAA,CAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,iBAAA,EAAkB,EAAG,CAACW,oCAAA,CAAmB,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA,GACzE,IAAA;AAAA,cACJX,KAAAA,CAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,iBAAA,EAAkB,EAAG,CAACW,oCAAA,CAAmB,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAAA,cAC1E,MAAA,CAAO,QAAA,GAAWX,KAAAA,CAAE,KAAA,EAAO,EAAE,OAAO,qBAAA,EAAsB,EAAG,MAAA,CAAO,QAAQ,CAAA,GAAI;AAAA;AAClF,WACF;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC,CAAA;AAED,IAAM,UAAUL,mBAAAA,CAAgB;AAAA,EAC9B,IAAA,EAAM,iBAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAiC,UAAU,IAAA,EAAK;AAAA,IAC/D,MAAA,EAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,UAAU,IAAA,EAAK;AAAA,IACxC,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,UAAU,IAAA,EAAK;AAAA,IACtC,YAAA,EAAc,EAAE,IAAA,EAAM,QAAA,EAA+C,UAAU,IAAA,EAAK;AAAA,IACpF,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAkC,UAAU,IAAA,EAAK;AAAA,IAClE,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAkC,UAAU,IAAA,EAAK;AAAA;AAAA,IAErE,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAwD,UAAU,IAAA;AAAK,GAC5F;AAAA,EACA,MAAM,KAAA,EAAO;AACX,IAAA,MAAM,UAAA,GAAaE,QAAwB,IAAI,CAAA;AAC/C,IAAA,MAAM,QAAA,GAAWA,QAA2B,IAAI,CAAA;AAChD,IAAA,IAAI,KAAA;AACJ,IAAA,MAAM,EAAA,GAAKC,wBAAM,SAAS,CAAA;AAE1B,IAAA,MAAM,OAAA,GAAUM,YAAAA,CAAS,MAAM,KAAA,CAAM,IAAI,CAAA;AACzC,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAIH,6BAAA,CAAY,SAAS,QAAQ,CAAA;AACxD,IAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,qCAAA,CAAoB,UAAA,EAAY,UAAU,OAAA,EAAS;AAAA,MACtE,SAAA,EAAW,aAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAAQ,mBAAAA,CAAgB,MAAM,YAAA,CAAa,KAAK,CAAC,CAAA;AAEzC,IAAA,OAAO,MACLV,MAAE,MAAA,EAAQ,EAAE,OAAO,EAAE,OAAA,EAAS,UAAA,EAAW,EAAE,EAAG;AAAA,MAC5CA,KAAAA;AAAA,QACE,KAAA;AAAA,QACA;AAAA,UACE,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,YAAA,UAAA,CAAW,KAAA,GAAQ,IAAA;AACnB,YAAA,KAAA,CAAM,UAAU,IAA0B,CAAA;AAAA,UAC5C,CAAA;AAAA,UACA,IAAA,EAAM,UAAA;AAAA,UACN,eAAA,EAAiB,MAAA;AAAA,UACjB,iBAAiB,KAAA,CAAM,IAAA;AAAA,UACvB,eAAA,EAAiB,KAAA,CAAM,IAAA,GAAO,EAAA,GAAK,MAAA;AAAA,UACnC,eAAA,EAAiB,KAAA,CAAM,KAAA,CAAM,QAAA,IAAY,MAAA;AAAA,UACzC,QAAA,EAAU,KAAA,CAAM,MAAA,GAAS,GAAA,GAAM,IAAA;AAAA,UAC/B,KAAA,EAAOS,oBAAA;AAAA,YACL,iBAAA;AAAA,YACA,0BAAA;AAAA,YACA,KAAA,CAAM,MAAM,QAAA,IAAY;AAAA,WAC1B;AAAA,UACA,cAAc,MAAM;AAClB,YAAA,KAAA,CAAM,OAAA,EAAQ;AAGd,YAAA,YAAA,CAAa,KAAK,CAAA;AAClB,YAAA,KAAA,GAAQ,WAAW,MAAM,KAAA,CAAM,YAAA,CAAa,IAAI,GAAG,GAAG,CAAA;AAAA,UACxD,CAAA;AAAA,UACA,cAAc,MAAM;AAClB,YAAA,YAAA,CAAa,KAAK,CAAA;AAClB,YAAA,KAAA,GAAQ,WAAW,MAAM,KAAA,CAAM,YAAA,CAAa,KAAK,GAAG,GAAG,CAAA;AAAA,UACzD,CAAA;AAAA,UACA,SAAS,MAAM,KAAA,CAAM,YAAA,CAAa,CAAC,MAAM,IAAI;AAAA,SAC/C;AAAA,QACA;AAAA,UACE,MAAM,KAAA,CAAM,IAAA,GACRT,KAAAA,CAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,iBAAA,EAAkB,EAAG,CAACW,qCAAmB,KAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAC,CAAA,GAC9E,IAAA;AAAA,UACJX,KAAAA,CAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,iBAAA,EAAkB,EAAG,CAACW,oCAAA,CAAmB,KAAA,CAAM,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAAA,UAC/EX,MAAE,MAAA,EAAQ,EAAE,OAAO,oBAAA,EAAsB,aAAA,EAAe,QAAO,EAAG;AAAA,YAChEA,KAAAA,CAAE,OAAO,EAAE,OAAA,EAAS,aAAa,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK,EAAG;AAAA,cAC5DA,MAAE,MAAA,EAAQ;AAAA,gBACR,CAAA,EAAG,uBAAA;AAAA,gBACH,MAAA,EAAQ,cAAA;AAAA,gBACR,cAAA,EAAgB,KAAA;AAAA,gBAChB,IAAA,EAAM,MAAA;AAAA,gBACN,gBAAA,EAAkB,OAAA;AAAA,gBAClB,iBAAA,EAAmB;AAAA,eACpB;AAAA,aACF;AAAA,WACF;AAAA;AACH,OACF;AAAA,MAEA,QAAQ,KAAA,GACJA,KAAAA,CAAEQ,cAAU,EAAE,EAAA,EAAI,QAAO,EAAG;AAAA,QAC1BR,KAAAA;AAAA,UACE,KAAA;AAAA,UACA;AAAA,YACE,YAAA,EAAc,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,YACtC,cAAc,MAAM;AAClB,cAAA,KAAA,GAAQ,WAAW,MAAM,KAAA,CAAM,YAAA,CAAa,KAAK,GAAG,GAAG,CAAA;AAAA,YACzD,CAAA;AAAA,YACA,SAAA,EAAW,CAAC,KAAA,KAAyB;AAGnC,cAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,EAAa;AAC7B,gBAAA,KAAA,CAAM,cAAA,EAAe;AACrB,gBAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,gBAAA,KAAA,CAAM,aAAa,KAAK,CAAA;AACxB,gBAAA,UAAA,CAAW,OAAO,KAAA,EAAM;AAAA,cAC1B;AAAA,YACF;AAAA,WACF;AAAA,UACA;AAAA,YACEA,MAAE,WAAA,EAAa;AAAA,cACb,QAAA;AAAA,cACA,EAAA;AAAA,cACA,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,cACnB,KAAA,EAAO,OAAO,KAAA,CAAM,KAAA,CAAM,UAAU,QAAA,GAAW,KAAA,CAAM,MAAM,KAAA,GAAQ,SAAA;AAAA,cACnE,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,aAAA,EAAe,SAAS,KAAA,CAAM,KAAA;AAAA,cAC9B,SAAS,KAAA,CAAM;AAAA,aAChB;AAAA;AACH;AACF,OACD,CAAA,GACD;AAAA,KACL,CAAA;AAAA,EACL;AACF,CAAC,CAAA;;;ACjZM,IAAM,eAAeL,mBAAAA,CAAgB;AAAA,EAC1C,IAAA,EAAM,kBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAAyC,UAAU,IAAA,EAAK;AAAA,IACvE,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAA+B,SAAS,cAAA,EAAe;AAAA;AAAA,IAE1E,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA,EAAO;AAAA,IACvC,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,MAAA,EAAU;AAAA,IAC1C,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA;AAAM,GAC/C;AAAA,EACA,KAAA,EAAO,CAAC,aAAa,CAAA;AAAA,EACrB,MAAM,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAK,EAAG;AACnC,IAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAIC,sCAAA;AAAA,MACxB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,CAAM,WAAA;AAAA,MACN,CAAC,IAAA,KAAS,IAAA,CAAK,aAAA,EAAe,IAAI;AAAA,KACpC;AAEA,IAAA,MAAM,UAAA,GAAaC,QAAwB,IAAI,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAUA,QAA2B,IAAI,CAAA;AAC/C,IAAA,MAAM,MAAA,GAASC,wBAAM,MAAM,CAAA;AAE3B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAIG,6BAAA,CAAY,QAAQ,OAAO,CAAA;AACtD,IAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,qCAAA,CAAoB,UAAA,EAAY,SAAS,OAAA,EAAS;AAAA,MACrE,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAAC,4BAAA,CAAW,OAAA,EAAS,MAAA,EAAQ,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,EAAE,MAAA,EAAQ,CAAC,UAAU,CAAA,EAAG,CAAA;AAK1E,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,GAAA,EAAK,UAAA;AAAA,QACL,KAAA,EAAO,mBAAA;AAAA,QACP,eAAA,EAAiB,MAAA;AAAA,QACjB,iBAAiB,MAAA,CAAO,KAAA;AAAA,QACxB,eAAA,EAAiB,MAAA,CAAO,KAAA,GAAQ,MAAA,GAAS,MAAA;AAAA,QACzC,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAC,OAAO,KAAK,CAAA;AAAA,QACpC,SAAA,EAAW,CAAC,KAAA,KAAyB;AAGnC,UAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,WAAA,IAAe,KAAA,CAAM,QAAQ,SAAA,EAAW;AACxD,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,UACd;AAAA,QACF;AAAA,OACF;AACA,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,IAAU,IAAK,EAAC;AACvC,MAAA,MAAM,CAAC,KAAK,CAAA,GAAI,QAAA;AAChB,MAAA,OAAO,SAAS,MAAA,KAAW,CAAA,IAAK,SAASY,WAAA,CAAQ,KAAK,KAAK,OAAO,KAAA,CAAM,SAAS,QAAA,GAC7EC,cAAA,CAAW,OAAO,YAAA,EAAc,IAAI,IACpChB,KAAAA,CAAE,MAAA,EAAQ,cAAc,QAAQ,CAAA;AAAA,IACtC,CAAA;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,aAAa,KAAA,CAAM,KAAA;AAEzB,MAAA,OAAOA,KAAAA,CAAE,QAAQ,EAAE,KAAA,EAAO,EAAE,OAAA,EAAS,UAAA,IAAa,EAAG;AAAA,QACnD,OAAA,EAAQ;AAAA,QAER,QAAQ,KAAA,GACJA,KAAAA,CAAEQ,cAAU,EAAE,EAAA,EAAI,QAAO,EAAG;AAAA,UAC1BR,MAAE,WAAA,EAAa;AAAA,YACb,QAAA,EAAU,OAAA;AAAA,YACV,EAAA,EAAI,MAAA;AAAA,YACJ,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,aAAA,EAAe,SAAS,KAAA,CAAM,KAAA;AAAA,YAC9B,UAAA;AAAA,YACA,SAAS,MAAM;AACb,cAAA,OAAA,CAAQ,KAAK,CAAA;AACb,cAAA,UAAA,CAAW,OAAO,KAAA,IAAQ;AAAA,YAC5B;AAAA,WACD;AAAA,SACF,CAAA,GACD;AAAA,OACL,CAAA;AAAA,IACH,CAAA;AAAA,EACF;AACF,CAAC;AC/GM,IAAM,cAAcL,mBAAAA,CAAgB;AAAA,EACzC,IAAA,EAAM,iBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAAyC,UAAU,IAAA,EAAK;AAAA,IACvE,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,cAAA;AAAe,GACjD;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,MAAM,KAAA,GAAQE,QAAqC,IAAI,CAAA;AACvD,IAAA,MAAM,OAAA,GAAUA,QAA2B,IAAI,CAAA;AAC/C,IAAA,MAAM,SAAA,GAAYA,QAA4B,IAAI,CAAA;AAClD,IAAA,MAAM,MAAA,GAASC,wBAAM,aAAa,CAAA;AAElC,IAAA,MAAM,IAAA,GAAOM,YAAAA,CAAS,MAAM,KAAA,CAAM,UAAU,IAAI,CAAA;AAChD,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAIH,6BAAA,CAAY,MAAM,OAAO,CAAA;AACpD,IAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,qCAAA,CAAoB,SAAA,EAAW,SAAS,OAAA,EAAS;AAAA,MACpE,SAAA,EAAW,cAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAAC,4BAAA,CAAW,OAAA,EAAS,MAAM,MAAM;AAC9B,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,IAChB,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,aAAa,KAAA,CAAM,KAAA;AAEzB,MAAA,OAAOH,KAAAA,CAAE,QAAQ,EAAE,KAAA,EAAO,EAAE,OAAA,EAAS,UAAA,IAAa,EAAG;AAAA,QACnDA,KAAAA;AAAA,UACE,MAAA;AAAA,UACA;AAAA,YACE,KAAA,EAAO,wBAAA;AAAA,YACP,aAAA,EAAe,CAAC,KAAA,KAAsB;AACpC,cAAA,KAAA,CAAM,cAAA,EAAe;AACrB,cAAA,KAAA,CAAM,QAAQ,EAAE,CAAA,EAAG,MAAM,OAAA,EAAS,CAAA,EAAG,MAAM,OAAA,EAAQ;AAAA,YACrD,CAAA;AAAA,YACA,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,cAAA,IAAI,MAAM,GAAA,KAAQ,aAAA,IAAkB,MAAM,QAAA,IAAY,KAAA,CAAM,QAAQ,KAAA,EAAQ;AAC1E,gBAAA,KAAA,CAAM,cAAA,EAAe;AACrB,gBAAA,MAAM,IAAA,GAAQ,KAAA,CAAM,aAAA,CAA8B,qBAAA,EAAsB;AACxE,gBAAA,KAAA,CAAM,KAAA,GAAQ,EAAE,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,GAAA,GAAM,CAAA,EAAE;AAAA,cACpD;AAAA,YACF;AAAA,WACF;AAAA,UACA,MAAM,OAAA;AAAU,SAClB;AAAA;AAAA;AAAA,QAIA,KAAA,CAAM,KAAA,GACFA,KAAAA,CAAE,MAAA,EAAQ;AAAA,UACR,GAAA,EAAK,SAAA;AAAA,UACL,aAAA,EAAe,MAAA;AAAA,UACf,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,OAAA;AAAA,YACV,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAA,CAAA;AAAA,YACtB,GAAA,EAAK,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAA,CAAA;AAAA,YACrB,KAAA,EAAO,KAAA;AAAA,YACP,MAAA,EAAQ;AAAA;AACV,SACD,CAAA,GACD,IAAA;AAAA,QAEJ,QAAQ,KAAA,GACJA,KAAAA,CAAEQ,cAAU,EAAE,EAAA,EAAI,QAAO,EAAG;AAAA,UAC1BR,MAAE,WAAA,EAAa;AAAA,YACb,QAAA,EAAU,OAAA;AAAA,YACV,EAAA,EAAI,MAAA;AAAA,YACJ,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,aAAA,EAAe,SAAS,KAAA,CAAM,KAAA;AAAA,YAC9B,UAAA;AAAA,YACA,SAAS,MAAM;AACb,cAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,YAChB;AAAA,WACD;AAAA,SACF,CAAA,GACD;AAAA,OACL,CAAA;AAAA,IACH,CAAA;AAAA,EACF;AACF,CAAC","file":"chunk-EDAF7RAN.cjs","sourcesContent":["import {\n type ComputedRef,\n type InjectionKey,\n type PropType,\n type Ref,\n Teleport,\n computed,\n defineComponent,\n h,\n inject,\n onBeforeUnmount,\n provide,\n ref,\n} from 'vue'\nimport { type Placement } from '../../primitives/position'\nimport { cx, useId } from '../../primitives/utils'\nimport { useAnchoredPosition } from '../../primitives/use-anchored-position'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useDismiss } from '../../primitives/use-dismiss'\nimport { useAutoFocus, useFocusRestore, useFocusTrap } from '../../primitives/focus'\nimport { usePresence } from '../../primitives/presence'\n\n/**\n * A popover — the Vue counterpart of `@ansh-ui/react`'s `Popover`, and the pattern every other\n * overlay in this package (`Tooltip`, `Dialog`, `Drawer`, `DropdownMenu`, `ContextMenu`) follows.\n *\n * The compound API (`Popover` / `PopoverTrigger` / `PopoverContent`) rather than a single component\n * with a `content` prop, because the trigger needs attributes that only the popover can supply —\n * `aria-expanded`, `aria-controls` — and a `content` prop can't put them anywhere. Context is\n * distributed with `provide`/`inject` in place of React context; `open` is a `ComputedRef` for the\n * same controlled/uncontrolled reason `useFieldControl` is (see `form/field.ts`).\n *\n * Focus moves into the content on open and returns to the trigger on close, and Tab is trapped\n * inside when `modal`. A popover containing a form that lets Tab wander onto the page behind it is a\n * popover keyboard users cannot fill in.\n *\n * ```vue\n * <Popover v-model:open=\"open\">\n * <PopoverTrigger>Open</PopoverTrigger>\n * <PopoverContent label=\"Settings\">…</PopoverContent>\n * </Popover>\n * ```\n */\n\ninterface PopoverContextValue {\n open: ComputedRef<boolean>\n setOpen: (open: boolean) => void\n triggerRef: Ref<HTMLElement | null>\n contentId: string\n placement: Placement\n offset: number\n modal: boolean\n}\n\nconst PopoverKey: InjectionKey<PopoverContextValue> = Symbol('ansh-popover')\n\nfunction usePopoverContext(component: string): PopoverContextValue {\n const context = inject(PopoverKey, null)\n if (!context) throw new Error(`<${component}> must be rendered inside <Popover>.`)\n return context\n}\n\nexport const Popover = defineComponent({\n name: 'AnshPopover',\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: { type: Boolean, default: false },\n placement: { type: String as PropType<Placement>, default: 'bottom' },\n /** Gap from the trigger, in px. Default `8`. */\n offset: { type: Number, default: 8 },\n /** Trap focus and block interaction behind. Default `false` — most popovers are non-modal. */\n modal: { type: Boolean, default: false },\n },\n emits: ['update:open'],\n setup(props, { slots, emit }) {\n const [isOpen, setOpen] = useControllableState(\n () => props.open,\n props.defaultOpen,\n (next) => emit('update:open', next),\n )\n const triggerRef = ref<HTMLElement | null>(null)\n const contentId = useId('popover')\n\n provide(PopoverKey, {\n open: isOpen,\n setOpen,\n triggerRef,\n contentId,\n get placement() {\n return props.placement\n },\n get offset() {\n return props.offset\n },\n get modal() {\n return props.modal\n },\n })\n\n return () => slots.default?.()\n },\n})\n\nexport const PopoverTrigger = defineComponent({\n name: 'AnshPopoverTrigger',\n inheritAttrs: false,\n props: {\n /** Tag to render. Default `'button'`. */\n as: { type: String, default: 'button' },\n },\n setup(props, { slots, attrs }) {\n const ctx = usePopoverContext('PopoverTrigger')\n\n return () => {\n const { onClick, ...restAttrs } = attrs as Record<string, unknown>\n return h(\n props.as,\n {\n ref: ctx.triggerRef,\n ...(props.as === 'button' ? { type: 'button' } : null),\n 'aria-haspopup': 'dialog',\n 'aria-expanded': ctx.open.value,\n 'aria-controls': ctx.open.value ? ctx.contentId : undefined,\n ...restAttrs,\n onClick: (event: MouseEvent) => {\n ;(onClick as ((event: MouseEvent) => void) | undefined)?.(event)\n if (event.defaultPrevented) return\n ctx.setOpen(!ctx.open.value)\n },\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport const PopoverContent = defineComponent({\n name: 'AnshPopoverContent',\n inheritAttrs: false,\n props: {\n /** Draw an arrow pointing at the trigger. Default `false`. */\n arrow: { type: Boolean, default: false },\n /** Match the trigger's width — for a popover acting as a dropdown panel. */\n matchWidth: { type: Boolean, default: false },\n /** Accessible name. Required unless the content contains its own heading. */\n label: { type: String, default: undefined },\n },\n setup(props, { slots, attrs }) {\n const ctx = usePopoverContext('PopoverContent')\n const contentRef = ref<HTMLDivElement | null>(null)\n\n const { mounted, state } = usePresence(ctx.open, contentRef)\n\n const { position } = useAnchoredPosition(ctx.triggerRef, contentRef, mounted, {\n placement: ctx.placement,\n offset: ctx.offset,\n matchWidth: props.matchWidth,\n arrowSize: props.arrow ? 10 : 0,\n })\n\n useDismiss(contentRef, ctx.open, () => ctx.setOpen(false), { ignore: [ctx.triggerRef] })\n const trapActive = computed(() => ctx.open.value && ctx.modal)\n useFocusTrap(contentRef, trapActive)\n useAutoFocus(contentRef, ctx.open)\n useFocusRestore(ctx.open)\n\n return () => {\n if (!mounted.value) return null\n\n const { class: attrClass, style: attrStyle, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(Teleport, { to: 'body' }, [\n h(\n 'div',\n {\n ref: contentRef,\n id: ctx.contentId,\n role: 'dialog',\n 'aria-modal': ctx.modal || undefined,\n ...(props.label ? { 'aria-label': props.label } : null),\n tabindex: '-1',\n 'data-state': state.value,\n 'data-side': position.value.side,\n class: cx('ansh-popover', attrClass as string),\n style: [position.value.style, attrStyle as Record<string, string>],\n ...restAttrs,\n },\n [\n slots.default?.(),\n props.arrow && position.value.arrowStyle\n ? h('span', {\n class: 'ansh-popover__arrow',\n style: position.value.arrowStyle,\n 'aria-hidden': 'true',\n })\n : null,\n ],\n ),\n ])\n }\n },\n})\n\n// --- HoverCard --------------------------------------------------------------\n\n/**\n * A rich preview shown on hover — a user card on an @mention, a link preview.\n *\n * Two delays, not one. The open delay stops cards firing as the pointer sweeps across a paragraph of\n * links. The close delay is what lets the pointer travel from the trigger to the card without it\n * vanishing en route, which is the failure that makes hover cards feel broken.\n *\n * Hover-only content is invisible to keyboard and touch users, so this also opens on focus. It is\n * strictly for *supplementary* information — anything essential belongs in a click-opened popover.\n *\n * The React version takes the card's body as a `content` prop; here it's the `#content` slot and\n * the trigger is the default slot — passing a render tree through a prop is idiomatic React and\n * awkward Vue, so this is one of the few places the two APIs deliberately differ:\n * ```vue\n * <HoverCard>\n * @user\n * <template #content>…</template>\n * </HoverCard>\n * ```\n */\nexport const HoverCard = defineComponent({\n name: 'AnshHoverCard',\n props: {\n /** Delay before opening, in ms. Default `500`. */\n openDelay: { type: Number, default: 500 },\n /** Delay before closing, in ms. Default `200`. */\n closeDelay: { type: Number, default: 200 },\n placement: { type: String as PropType<Placement>, default: 'bottom' },\n },\n setup(props, { slots, attrs }) {\n const open = ref(false)\n const triggerRef = ref<HTMLElement | null>(null)\n const cardRef = ref<HTMLDivElement | null>(null)\n const id = useId('hovercard')\n let timer: ReturnType<typeof setTimeout> | undefined\n\n const { mounted, state } = usePresence(open, cardRef)\n const { position } = useAnchoredPosition(triggerRef, cardRef, mounted, {\n placement: props.placement,\n offset: 8,\n })\n\n const schedule = (next: boolean): void => {\n clearTimeout(timer)\n timer = setTimeout(\n () => {\n open.value = next\n },\n next ? props.openDelay : props.closeDelay,\n )\n }\n\n onBeforeUnmount(() => clearTimeout(timer))\n\n return () =>\n h('span', { style: { display: 'contents' } }, [\n h(\n 'span',\n {\n ref: triggerRef,\n class: 'ansh-hovercard__trigger',\n // `aria-describedby` rather than `aria-details`: support for details is still patchy,\n // and a description is the honest relationship for supplementary content.\n 'aria-describedby': open.value ? id : undefined,\n onMouseenter: () => schedule(true),\n onMouseleave: () => schedule(false),\n onFocus: () => {\n open.value = true\n },\n onBlur: () => {\n open.value = false\n },\n },\n slots.default?.(),\n ),\n\n mounted.value\n ? h(Teleport, { to: 'body' }, [\n h(\n 'div',\n {\n ref: cardRef,\n id,\n role: 'tooltip',\n 'data-state': state.value,\n class: cx('ansh-hovercard', attrs.class as string),\n style: position.value.style,\n // Keeping the card open while the pointer is over it is what makes its contents\n // clickable at all.\n onMouseenter: () => schedule(true),\n onMouseleave: () => schedule(false),\n },\n slots.content?.(),\n ),\n ])\n : null,\n ])\n },\n})\n","import {\n type InjectionKey,\n type PropType,\n type Ref,\n Teleport,\n defineComponent,\n h,\n inject,\n onBeforeUnmount,\n provide,\n ref,\n} from 'vue'\nimport { type Placement } from '../../primitives/position'\nimport { type SlotContent, cx, resolveSlotContent, useId } from '../../primitives/utils'\nimport { useAnchoredPosition } from '../../primitives/use-anchored-position'\nimport { useDismiss } from '../../primitives/use-dismiss'\nimport { usePresence } from '../../primitives/presence'\n\n/**\n * Tooltips — the Vue counterpart of `@ansh-ui/react`'s `Tooltip`.\n *\n * The rules this follows, all from WCAG 1.4.13 (Content on Hover or Focus) and the ARIA practices:\n *\n * - **Focus shows it too.** A tooltip only on hover doesn't exist for keyboard users.\n * - **Escape dismisses it** without moving focus, for anyone whose magnifier it is covering.\n * - **It is a description, not a name.** Wired with `aria-describedby`, so the trigger keeps its\n * own label. Using it as the label means an icon button announces nothing until the tooltip\n * opens, which on touch is never.\n * - **It never contains interactive content.** There is no way to reach a button inside a tooltip\n * with a keyboard. That's what `HoverCard` and `Popover` are for.\n *\n * Never put essential information here: tooltips do not appear on touch devices at all.\n *\n * React merges the tooltip's handlers onto the trigger element itself via `Slot` (no wrapper node\n * reaches the DOM). There's no `asChild` equivalent here, so — matching `HoverCard`, the established\n * pattern for exactly this shape in this package — the trigger content is wrapped in a\n * `<span style=\"display:contents\">` that carries the ARIA and event wiring instead; the wrapper adds\n * no box of its own. Listeners bind to `focusin`/`focusout` rather than `focus`/`blur` (which do not\n * bubble) so a focusable element *nested inside* the wrapper — the common case, an icon button — still\n * opens the tooltip on Tab, not only a direct hit on the wrapper itself.\n */\n\ninterface TooltipGroupValue {\n /** Whether some tooltip in the group is already open — the next skips its delay. */\n active: Ref<boolean>\n setActive: (active: boolean) => void\n delay: number\n}\n\nconst TooltipGroupKey: InjectionKey<TooltipGroupValue> = Symbol('ansh-tooltip-group')\n\n/**\n * Share a delay across a set of tooltips.\n *\n * Once one is open, moving to a neighbour shows its tooltip immediately. Without this, scanning a\n * toolbar means waiting out the delay on every single button — the behaviour every desktop OS gets\n * right and most web implementations miss.\n *\n * ```vue\n * <TooltipProvider :delay=\"600\">\n * <Toolbar />\n * </TooltipProvider>\n * ```\n */\nexport const TooltipProvider = defineComponent({\n name: 'AnshTooltipProvider',\n props: {\n /** Delay before the first tooltip in a group opens, in ms. Default `600`. */\n delay: { type: Number, default: 600 },\n },\n setup(props, { slots }) {\n const active = ref(false)\n\n provide(TooltipGroupKey, {\n active,\n setActive: (next: boolean) => {\n active.value = next\n },\n get delay() {\n return props.delay\n },\n })\n\n return () => slots.default?.()\n },\n})\n\nexport const Tooltip = defineComponent({\n name: 'AnshTooltip',\n inheritAttrs: false,\n props: {\n /** The tooltip text. Keep it short — it is read as one description. */\n content: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n placement: { type: String as PropType<Placement>, default: 'top' },\n /** Override the group delay, in ms. */\n delay: { type: Number, default: undefined },\n /** Draw an arrow. Default `true`. */\n arrow: { type: Boolean, default: true },\n disabled: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n const group = inject(TooltipGroupKey, null)\n const open = ref(false)\n\n const triggerRef = ref<HTMLElement | null>(null)\n const tipRef = ref<HTMLDivElement | null>(null)\n let timer: ReturnType<typeof setTimeout> | undefined\n const id = useId('tooltip')\n\n const { mounted, state } = usePresence(open, tipRef)\n const { position } = useAnchoredPosition(triggerRef, tipRef, mounted, {\n placement: props.placement,\n offset: 6,\n arrowSize: props.arrow ? 8 : 0,\n })\n\n const effectiveDelay = (): number => props.delay ?? group?.delay ?? 600\n\n const show = (immediate = false): void => {\n if (props.disabled) return\n clearTimeout(timer)\n // Skip the delay when a sibling tooltip is already open, or on focus — a keyboard user has\n // already made a deliberate move and shouldn't be made to wait.\n if (immediate || group?.active.value) {\n open.value = true\n group?.setActive(true)\n return\n }\n timer = setTimeout(() => {\n open.value = true\n group?.setActive(true)\n }, effectiveDelay())\n }\n\n const hide = (): void => {\n clearTimeout(timer)\n open.value = false\n // Grace period before the group goes cold, so moving between adjacent triggers stays instant.\n timer = setTimeout(() => group?.setActive(false), 200)\n }\n\n onBeforeUnmount(() => clearTimeout(timer))\n\n // WCAG 1.4.13: dismissable without moving the pointer or focus. Routed through `useDismiss`\n // rather than a bare document listener so it composes with the layer stack — a tooltip nested\n // inside a dialog doesn't steal Escape from the dialog beneath it.\n useDismiss(\n tipRef,\n open,\n () => {\n open.value = false\n group?.setActive(false)\n },\n { outsidePress: false, escapeKey: true },\n )\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'span',\n {\n // No box of its own — see the module comment on why this wrapper exists at all.\n style: { display: 'contents' },\n },\n [\n h(\n 'span',\n {\n ...restAttrs,\n ref: triggerRef,\n class: cx('ansh-tooltip-trigger', attrClass as string),\n 'aria-describedby': open.value ? id : undefined,\n onMouseenter: () => show(),\n onMouseleave: hide,\n onFocusin: () => show(true),\n onFocusout: hide,\n },\n slots.default?.(),\n ),\n\n mounted.value && !props.disabled\n ? h(Teleport, { to: 'body' }, [\n h(\n 'div',\n {\n ref: tipRef,\n id,\n role: 'tooltip',\n 'data-state': state.value,\n 'data-side': position.value.side,\n class: 'ansh-tooltip',\n style: position.value.style,\n },\n [\n resolveSlotContent(props.content),\n props.arrow && position.value.arrowStyle\n ? h('span', {\n class: 'ansh-tooltip__arrow',\n style: position.value.arrowStyle,\n 'aria-hidden': 'true',\n })\n : null,\n ],\n ),\n ])\n : null,\n ],\n )\n }\n },\n})\n","import { type PropType, type Ref, Teleport, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent, useId } from '../../primitives/utils'\nimport { useAutoFocus, useFocusRestore, useFocusTrap } from '../../primitives/focus'\nimport { usePresence } from '../../primitives/presence'\nimport { useDismiss, useScrollLock } from '../../primitives/use-dismiss'\nimport { useControllableState } from '../../primitives/use-controllable-state'\n\nexport type DialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\n/**\n * A modal dialog — the Vue counterpart of `@ansh-ui/react`'s `Dialog`.\n *\n * Not `<dialog showModal>`: the native element's top-layer behaviour is genuinely better, but its\n * backdrop cannot be animated consistently, `::backdrop` inherits nothing, and closing behaviour\n * differs enough across browsers to need working around anyway. The pieces the native element gives\n * for free — focus trap, scroll lock, inert background, focus restore — are all here explicitly, via\n * the same primitives `Popover` uses.\n *\n * `title` is a required prop rather than an optional slot. Every accessibility audit of a component\n * library turns up unnamed dialogs, and the reliable fix is to make the name impossible to omit.\n *\n * React takes the body as `children` and the actions row as a `footer` prop; here they're the\n * default slot and the `#footer` slot respectively — passing a render tree through a prop is\n * idiomatic React and awkward Vue.\n *\n * ```vue\n * <Dialog v-model:open=\"open\" title=\"Delete project\" description=\"This cannot be undone.\">\n * <p>Body</p>\n * <template #footer>\n * <button @click=\"open = false\">Cancel</button>\n * </template>\n * </Dialog>\n * ```\n */\nexport const Dialog = defineComponent({\n name: 'AnshDialog',\n inheritAttrs: false,\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: { type: Boolean, default: false },\n /** The dialog's accessible name. Required — a dialog announced as just \"dialog\" is useless. */\n title: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n /** Supporting text, wired to `aria-describedby`. */\n description: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n size: { type: String as PropType<DialogSize>, default: 'md' },\n /** Show the close button. Default `true`. */\n showClose: { type: Boolean, default: true },\n /** Allow closing via scrim click and Escape. Default `true`. */\n dismissable: { type: Boolean, default: true },\n /** Element to focus on open. Defaults to the first tabbable one. */\n initialFocus: { type: Object as PropType<Ref<HTMLElement | null>>, default: undefined },\n },\n emits: ['update:open'],\n setup(props, { slots, attrs, emit }) {\n const [isOpen, setOpen] = useControllableState(\n () => props.open,\n props.defaultOpen,\n (next) => emit('update:open', next),\n )\n\n const panelRef = ref<HTMLDivElement | null>(null)\n const id = useId('dialog')\n const titleId = `${id}-title`\n const descriptionId = `${id}-description`\n\n const { mounted, state } = usePresence(isOpen, panelRef)\n\n const close = (): void => {\n if (props.dismissable) setOpen(false)\n }\n\n useDismiss(panelRef, isOpen, close, {\n outsidePress: props.dismissable,\n escapeKey: props.dismissable,\n })\n useFocusTrap(panelRef, isOpen)\n useAutoFocus(panelRef, isOpen, props.initialFocus)\n useFocusRestore(isOpen)\n useScrollLock(isOpen)\n\n return () => {\n if (!mounted.value) return null\n\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(Teleport, { to: 'body' }, [\n h('div', { class: 'ansh-dialog__layer', 'data-state': state.value }, [\n // The scrim is not a button and takes no focus — it's decorative. Dismissal is handled\n // by `useDismiss` on a pointerdown outside the panel, which also covers the gap around\n // the panel that isn't the scrim element itself.\n h('div', {\n class: 'ansh-dialog__scrim',\n 'data-state': state.value,\n 'aria-hidden': 'true',\n }),\n\n h(\n 'div',\n {\n ref: panelRef,\n role: 'dialog',\n 'aria-modal': 'true',\n 'aria-labelledby': titleId,\n ...(props.description ? { 'aria-describedby': descriptionId } : null),\n tabindex: '-1',\n 'data-state': state.value,\n class: cx('ansh-dialog', `ansh-dialog--${props.size}`, attrClass as string),\n ...restAttrs,\n },\n [\n h('header', { class: 'ansh-dialog__header' }, [\n h('div', { class: 'ansh-dialog__heading' }, [\n h('h2', { class: 'ansh-dialog__title', id: titleId }, [\n resolveSlotContent(props.title),\n ]),\n props.description\n ? h('p', { class: 'ansh-dialog__description', id: descriptionId }, [\n resolveSlotContent(props.description),\n ])\n : null,\n ]),\n\n props.showClose\n ? h(\n 'button',\n {\n type: 'button',\n class: 'ansh-dialog__close ansh-focusable',\n 'aria-label': 'Close dialog',\n onClick: () => setOpen(false),\n },\n [\n h(\n 'svg',\n {\n viewBox: '0 0 16 16',\n width: '14',\n height: '14',\n 'aria-hidden': 'true',\n },\n [\n h('path', {\n d: 'M4 4l8 8M12 4l-8 8',\n stroke: 'currentColor',\n 'stroke-width': '1.75',\n 'stroke-linecap': 'round',\n fill: 'none',\n }),\n ],\n ),\n ],\n )\n : null,\n ]),\n\n slots.default ? h('div', { class: 'ansh-dialog__body' }, slots.default()) : null,\n slots.footer ? h('footer', { class: 'ansh-dialog__footer' }, slots.footer()) : null,\n ],\n ),\n ]),\n ])\n }\n },\n})\n\n/**\n * A confirmation dialog — the Vue counterpart of `@ansh-ui/react`'s `AlertDialog`.\n *\n * `role=\"alertdialog\"` and `aria-describedby` on the message, which makes a screen reader read the\n * consequence immediately on open rather than waiting for the user to navigate to it. That is the\n * entire difference from a regular dialog, and it matters precisely because these appear before\n * irreversible actions.\n *\n * It is deliberately **not** dismissable by clicking the scrim: an accidental click outside should\n * not silently cancel a decision the user was asked to make. Escape still works, because trapping\n * someone in a dialog is worse. Neither is configurable — unlike `Dialog`, there is no\n * `dismissable` prop, matching the React version exactly.\n *\n * Focus starts on **Cancel**, not Confirm. A keyboard user who hits Enter reflexively should not\n * delete their account.\n *\n * React takes `onConfirm`/`onCancel` as function props (`onConfirm` can return a `Promise`, awaited\n * by the caller before flipping `busy` back off). Function props aren't the Vue idiom for actions —\n * every other component in this package emits an event for them instead (see `emits:\n * ['update:modelValue', ...]` throughout `components/form`) — so this emits `confirm`/`cancel`\n * rather than accepting callback props. The caller drives `busy` themselves either way.\n */\nexport const AlertDialog = defineComponent({\n name: 'AnshAlertDialog',\n inheritAttrs: false,\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: { type: Boolean, default: false },\n title: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n description: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n /** Confirm button text. Default `'Confirm'`. */\n confirmLabel: { type: String, default: 'Confirm' },\n cancelLabel: { type: String, default: 'Cancel' },\n /** Style the confirm action as destructive. */\n destructive: { type: Boolean, default: false },\n /** Disable the buttons while an async confirm runs. */\n busy: { type: Boolean, default: false },\n },\n emits: ['update:open', 'confirm', 'cancel'],\n setup(props, { attrs, emit }) {\n const [isOpen, setOpen] = useControllableState(\n () => props.open,\n props.defaultOpen,\n (next) => emit('update:open', next),\n )\n\n const panelRef = ref<HTMLDivElement | null>(null)\n const cancelRef = ref<HTMLButtonElement | null>(null)\n const id = useId('alertdialog')\n const titleId = `${id}-title`\n const descriptionId = `${id}-description`\n\n const { mounted, state } = usePresence(isOpen, panelRef)\n\n const cancel = (): void => {\n emit('cancel')\n setOpen(false)\n }\n\n useDismiss(panelRef, isOpen, cancel, { outsidePress: false, escapeKey: true })\n useFocusTrap(panelRef, isOpen)\n useAutoFocus(panelRef, isOpen, cancelRef)\n useFocusRestore(isOpen)\n useScrollLock(isOpen)\n\n return () => {\n if (!mounted.value) return null\n\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(Teleport, { to: 'body' }, [\n h('div', { class: 'ansh-dialog__layer', 'data-state': state.value }, [\n h('div', {\n class: 'ansh-dialog__scrim',\n 'data-state': state.value,\n 'aria-hidden': 'true',\n }),\n\n h(\n 'div',\n {\n ref: panelRef,\n role: 'alertdialog',\n 'aria-modal': 'true',\n 'aria-labelledby': titleId,\n 'aria-describedby': descriptionId,\n tabindex: '-1',\n 'data-state': state.value,\n class: cx(\n 'ansh-dialog',\n 'ansh-dialog--sm',\n 'ansh-dialog--alert',\n attrClass as string,\n ),\n ...restAttrs,\n },\n [\n h('div', { class: 'ansh-dialog__body' }, [\n props.destructive\n ? h(\n 'span',\n {\n class: 'ansh-dialog__alert-icon ansh-dialog__alert-icon--danger',\n 'aria-hidden': 'true',\n },\n [\n h(\n 'svg',\n {\n viewBox: '0 0 24 24',\n width: '20',\n height: '20',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.75',\n },\n [\n h('path', { d: 'M12 8v5', 'stroke-linecap': 'round' }),\n h('circle', {\n cx: '12',\n cy: '16.5',\n r: '1',\n fill: 'currentColor',\n stroke: 'none',\n }),\n h('path', {\n d: 'M10.3 3.9L2.6 17.4A2 2 0 004.3 20.4h15.4a2 2 0 001.7-3L13.7 3.9a2 2 0 00-3.4 0z',\n 'stroke-linejoin': 'round',\n }),\n ],\n ),\n ],\n )\n : null,\n\n h('h2', { class: 'ansh-dialog__title', id: titleId }, [\n resolveSlotContent(props.title),\n ]),\n h('p', { class: 'ansh-dialog__description', id: descriptionId }, [\n resolveSlotContent(props.description),\n ]),\n ]),\n\n h('footer', { class: 'ansh-dialog__footer' }, [\n h(\n 'button',\n {\n ref: cancelRef,\n type: 'button',\n class: 'ansh-btn ansh-btn--ghost ansh-btn--sm ansh-focusable',\n disabled: props.busy,\n onClick: cancel,\n },\n [props.cancelLabel],\n ),\n h(\n 'button',\n {\n type: 'button',\n class: cx(\n 'ansh-btn',\n 'ansh-btn--sm',\n props.destructive ? 'ansh-btn--danger' : 'ansh-btn--solid',\n 'ansh-focusable',\n ),\n disabled: props.busy,\n onClick: () => emit('confirm'),\n },\n [\n props.busy\n ? h('span', { class: 'ansh-spinner ansh-spinner--sm', 'aria-hidden': 'true' })\n : null,\n props.confirmLabel,\n ],\n ),\n ]),\n ],\n ),\n ]),\n ])\n }\n },\n})\n\n/** Layout helper for a dialog's action row. Right-aligned, reversed on narrow screens. */\nexport const DialogFooter = defineComponent({\n name: 'AnshDialogFooter',\n setup(_props, { slots, attrs }) {\n return () =>\n h('div', { class: cx('ansh-dialog__actions', attrs.class as string) }, slots.default?.())\n },\n})\n","import { type PropType, Teleport, computed, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent, useId } from '../../primitives/utils'\nimport { useAutoFocus, useFocusRestore, useFocusTrap } from '../../primitives/focus'\nimport { usePresence } from '../../primitives/presence'\nimport { useDismiss, useScrollLock } from '../../primitives/use-dismiss'\nimport { useControllableState } from '../../primitives/use-controllable-state'\n\nexport type DrawerSide = 'left' | 'right' | 'top' | 'bottom'\n\n/**\n * A panel that slides in from an edge — the Vue counterpart of `@ansh-ui/react`'s `Drawer`.\n *\n * Same accessibility contract as `Dialog` — it is a dialog, just positioned differently. The reason\n * it exists separately is that the *content* pattern differs: drawers hold navigation, filters and\n * detail views that stay open while the user works, so they support a non-modal mode where the page\n * behind stays usable.\n *\n * On a phone a bottom drawer is the right shape for what would be a dialog on a desktop; that's a\n * layout decision for the consumer, which is why `side` is a plain prop rather than a breakpoint\n * rule baked in here.\n *\n * ```vue\n * <Drawer v-model:open=\"open\" side=\"left\" title=\"Filters\">\n * …\n * </Drawer>\n * ```\n */\nexport const Drawer = defineComponent({\n name: 'AnshDrawer',\n inheritAttrs: false,\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: { type: Boolean, default: false },\n /** Which edge it slides from. Default `'right'`. */\n side: { type: String as PropType<DrawerSide>, default: 'right' },\n title: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n description: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n /** Width for left/right, height for top/bottom. Default `'22rem'`. */\n size: { type: String, default: '22rem' },\n showClose: { type: Boolean, default: true },\n /** Block interaction behind and lock scroll. Default `true`. */\n modal: { type: Boolean, default: true },\n dismissable: { type: Boolean, default: true },\n },\n emits: ['update:open'],\n setup(props, { slots, attrs, emit }) {\n const [isOpen, setOpen] = useControllableState(\n () => props.open,\n props.defaultOpen,\n (next) => emit('update:open', next),\n )\n\n const panelRef = ref<HTMLDivElement | null>(null)\n const id = useId('drawer')\n const titleId = `${id}-title`\n const descriptionId = `${id}-description`\n\n const { mounted, state } = usePresence(isOpen, panelRef)\n\n const close = (): void => {\n if (props.dismissable) setOpen(false)\n }\n\n useDismiss(panelRef, isOpen, close, {\n outsidePress: props.dismissable && props.modal,\n escapeKey: props.dismissable,\n })\n const trapActive = computed(() => isOpen.value && props.modal)\n useFocusTrap(panelRef, trapActive)\n useAutoFocus(panelRef, isOpen)\n useFocusRestore(isOpen)\n const scrollLockActive = computed(() => isOpen.value && props.modal)\n useScrollLock(scrollLockActive)\n\n return () => {\n if (!mounted.value) return null\n\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const horizontal = props.side === 'left' || props.side === 'right'\n\n return h(Teleport, { to: 'body' }, [\n h(\n 'div',\n {\n class: cx('ansh-drawer__layer', !props.modal && 'ansh-drawer__layer--inline'),\n 'data-state': state.value,\n },\n [\n props.modal\n ? h('div', {\n class: 'ansh-dialog__scrim',\n 'data-state': state.value,\n 'aria-hidden': 'true',\n })\n : null,\n\n h(\n 'div',\n {\n ref: panelRef,\n role: 'dialog',\n 'aria-modal': props.modal || undefined,\n 'aria-labelledby': titleId,\n ...(props.description ? { 'aria-describedby': descriptionId } : null),\n tabindex: '-1',\n 'data-state': state.value,\n 'data-side': props.side,\n class: cx('ansh-drawer', `ansh-drawer--${props.side}`, attrClass as string),\n // The size travels as a custom property so the closed-state transform can be\n // written in terms of it — `translateX(100%)` alone breaks when the panel has a\n // max-width.\n style: {\n [horizontal ? 'width' : 'height']: props.size,\n '--ansh-drawer-size': props.size,\n } as Record<string, string>,\n ...restAttrs,\n },\n [\n h('header', { class: 'ansh-drawer__header' }, [\n h('div', { class: 'ansh-dialog__heading' }, [\n h('h2', { class: 'ansh-dialog__title', id: titleId }, [\n resolveSlotContent(props.title),\n ]),\n props.description\n ? h('p', { class: 'ansh-dialog__description', id: descriptionId }, [\n resolveSlotContent(props.description),\n ])\n : null,\n ]),\n\n props.showClose\n ? h(\n 'button',\n {\n type: 'button',\n class: 'ansh-dialog__close ansh-focusable',\n 'aria-label': 'Close panel',\n onClick: () => setOpen(false),\n },\n [\n h(\n 'svg',\n {\n viewBox: '0 0 16 16',\n width: '14',\n height: '14',\n 'aria-hidden': 'true',\n },\n [\n h('path', {\n d: 'M4 4l8 8M12 4l-8 8',\n stroke: 'currentColor',\n 'stroke-width': '1.75',\n 'stroke-linecap': 'round',\n fill: 'none',\n }),\n ],\n ),\n ],\n )\n : null,\n ]),\n\n h('div', { class: 'ansh-drawer__body' }, slots.default?.()),\n slots.footer ? h('footer', { class: 'ansh-drawer__footer' }, slots.footer()) : null,\n ],\n ),\n ],\n ),\n ])\n }\n },\n})\n","import { type SlotContent } from '../../../primitives/utils'\n\ninterface MenuItemBase {\n id?: string\n disabled?: boolean\n}\n\nexport interface MenuAction extends MenuItemBase {\n type?: 'item'\n label: SlotContent\n icon?: SlotContent\n /** Display-only shortcut hint, e.g. `'⌘S'`. */\n shortcut?: string\n /** Style as destructive, and mark it in the accessible name. */\n danger?: boolean\n onSelect?: () => void\n}\n\nexport interface MenuCheckbox extends MenuItemBase {\n type: 'checkbox'\n label: SlotContent\n checked: boolean\n onChange: (checked: boolean) => void\n shortcut?: string\n}\n\nexport interface MenuRadioGroup {\n type: 'radio'\n value: string\n onChange: (value: string) => void\n options: ReadonlyArray<{ value: string; label: SlotContent; disabled?: boolean }>\n}\n\nexport interface MenuSubmenu extends MenuItemBase {\n type: 'submenu'\n label: SlotContent\n icon?: SlotContent\n items: readonly MenuEntry[]\n}\n\nexport type MenuEntry =\n | MenuAction\n | MenuCheckbox\n | MenuRadioGroup\n | MenuSubmenu\n | { type: 'separator' }\n | { type: 'label'; label: SlotContent }\n\n/** Flatten to the rows that can actually receive focus, for keyboard navigation. */\ninterface Focusable {\n entry: MenuEntry\n /** For radio groups, which option this row is. */\n optionIndex?: number\n disabled: boolean\n}\n\nexport function flatten(items: readonly MenuEntry[]): Focusable[] {\n const rows: Focusable[] = []\n for (const entry of items) {\n if ('type' in entry && (entry.type === 'separator' || entry.type === 'label')) continue\n if ('type' in entry && entry.type === 'radio') {\n entry.options.forEach((option, optionIndex) => {\n rows.push({ entry, optionIndex, disabled: option.disabled ?? false })\n })\n continue\n }\n rows.push({ entry, disabled: (entry as MenuItemBase).disabled ?? false })\n }\n return rows\n}\n","import {\n type PropType,\n type Ref,\n type VNode,\n Teleport,\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n onMounted,\n ref,\n} from 'vue'\nimport { cx, resolveSlotContent, useId } from '../../../primitives/utils'\nimport { useAnchoredPosition } from '../../../primitives/use-anchored-position'\nimport { usePresence } from '../../../primitives/presence'\nimport { type MenuAction, type MenuEntry, type MenuSubmenu, flatten } from './types'\n\n// --- The menu surface itself ---------------------------------------------\n//\n// Internal: exported for `DropdownMenu` and `ContextMenu` but not from the package (the menu barrel\n// leaves it out), exactly like `@ansh-ui/react`'s own `MenuSurface`.\n\nexport const MenuSurface = defineComponent({\n name: 'AnshMenuSurface',\n props: {\n panelRef: { type: Object as PropType<Ref<HTMLDivElement | null>>, required: true },\n id: { type: String, required: true },\n items: { type: Array as PropType<readonly MenuEntry[]>, required: true },\n label: { type: String, required: true },\n state: { type: String as PropType<'open' | 'closed'>, required: true },\n // Named `positionStyle`/`panelClass` rather than `style`/`class` — Vue merges those two\n // particular prop names onto a component's root element automatically regardless of whether\n // they're declared, which would double up the class list.\n positionStyle: { type: Object as PropType<Record<string, string>>, required: true },\n panelClass: { type: String, default: undefined },\n onClose: { type: Function as PropType<() => void>, required: true },\n },\n setup(props) {\n const rows = computed(() => flatten(props.items))\n const itemRefs = ref<Array<HTMLElement | null>>([])\n const active = ref(rows.value.findIndex((row) => !row.disabled))\n const openSubmenu = ref<number | null>(null)\n let typeaheadBuffer = ''\n let typeaheadTimer: ReturnType<typeof setTimeout> | undefined\n\n // Focus the first enabled item on open. The ARIA menu pattern puts DOM focus on the item, which\n // is what allows Right-arrow to hand focus to a submenu and Left-arrow to take it back.\n onMounted(() => {\n itemRefs.value[active.value]?.focus()\n })\n\n onBeforeUnmount(() => clearTimeout(typeaheadTimer))\n\n const move = (delta: number): void => {\n const list = rows.value\n if (list.length === 0) return\n let next = active.value\n for (let attempts = 0; attempts < list.length; attempts++) {\n next = (next + delta + list.length) % list.length\n if (!list[next]?.disabled) break\n }\n active.value = next\n itemRefs.value[next]?.focus()\n }\n\n const activate = (index: number): void => {\n const row = rows.value[index]\n if (!row || row.disabled) return\n const { entry } = row\n\n if ('type' in entry && entry.type === 'submenu') {\n openSubmenu.value = index\n return\n }\n if ('type' in entry && entry.type === 'checkbox') {\n entry.onChange(!entry.checked)\n // Checkbox items keep the menu open: toggling three view options should not require\n // reopening the menu twice.\n return\n }\n if ('type' in entry && entry.type === 'radio') {\n entry.onChange(entry.options[row.optionIndex!]!.value)\n props.onClose()\n return\n }\n ;(entry as MenuAction).onSelect?.()\n props.onClose()\n }\n\n const onKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n move(1)\n break\n case 'ArrowUp':\n event.preventDefault()\n move(-1)\n break\n case 'Home':\n event.preventDefault()\n active.value = 0\n itemRefs.value[0]?.focus()\n break\n case 'End':\n event.preventDefault()\n active.value = rows.value.length - 1\n itemRefs.value[rows.value.length - 1]?.focus()\n break\n case 'Enter':\n case ' ':\n event.preventDefault()\n activate(active.value)\n break\n case 'ArrowRight': {\n const row = rows.value[active.value]\n if (row && 'type' in row.entry && row.entry.type === 'submenu') {\n event.preventDefault()\n openSubmenu.value = active.value\n }\n break\n }\n case 'Escape':\n event.preventDefault()\n props.onClose()\n break\n case 'Tab':\n // A menu is a single stop in the tab order; Tab closes it rather than walking the items.\n event.preventDefault()\n props.onClose()\n break\n default: {\n if (event.key.length !== 1) return\n clearTimeout(typeaheadTimer)\n typeaheadBuffer += event.key.toLowerCase()\n typeaheadTimer = setTimeout(() => {\n typeaheadBuffer = ''\n }, 600)\n\n const match = rows.value.findIndex((row, index) => {\n if (row.disabled || index === active.value) return false\n const text =\n typeof (row.entry as MenuAction).label === 'string'\n ? ((row.entry as MenuAction).label as string)\n : ''\n return text.toLowerCase().startsWith(typeaheadBuffer)\n })\n if (match >= 0) {\n active.value = match\n itemRefs.value[match]?.focus()\n }\n }\n }\n }\n\n return (): VNode => {\n let rowIndex = -1\n\n return h(\n 'div',\n {\n ref: props.panelRef,\n id: props.id,\n role: 'menu',\n 'aria-label': props.label,\n 'data-state': props.state,\n class: cx('ansh-menu', props.panelClass),\n style: props.positionStyle,\n onKeydown,\n },\n props.items.map((entry, entryIndex) => {\n if ('type' in entry && entry.type === 'separator') {\n return h('div', {\n key: `sep-${entryIndex}`,\n role: 'separator',\n class: 'ansh-menu__separator',\n })\n }\n\n if ('type' in entry && entry.type === 'label') {\n return h(\n 'div',\n { key: `label-${entryIndex}`, role: 'presentation', class: 'ansh-menu__label' },\n [resolveSlotContent(entry.label)],\n )\n }\n\n if ('type' in entry && entry.type === 'radio') {\n return h(\n 'div',\n { key: `radio-${entryIndex}`, role: 'group', class: 'ansh-menu__group' },\n entry.options.map((option) => {\n rowIndex++\n const index = rowIndex\n return h(\n 'div',\n {\n key: option.value,\n ref: (node) => {\n itemRefs.value[index] = node as HTMLElement | null\n },\n role: 'menuitemradio',\n 'aria-checked': entry.value === option.value,\n 'aria-disabled': option.disabled || undefined,\n tabindex: index === active.value ? '0' : '-1',\n class: cx('ansh-menu__item', option.disabled && 'ansh-menu__item--disabled'),\n onClick: () => activate(index),\n onMouseenter: () => {\n if (!option.disabled) active.value = index\n },\n },\n [\n h('span', {\n class: cx(\n 'ansh-menu__indicator',\n entry.value === option.value && 'ansh-menu__indicator--on',\n ),\n 'aria-hidden': 'true',\n }),\n h('span', { class: 'ansh-menu__text' }, [resolveSlotContent(option.label)]),\n ],\n )\n }),\n )\n }\n\n rowIndex++\n const index = rowIndex\n\n if ('type' in entry && entry.type === 'checkbox') {\n return h(\n 'div',\n {\n key: entry.id ?? `check-${entryIndex}`,\n ref: (node) => {\n itemRefs.value[index] = node as HTMLElement | null\n },\n role: 'menuitemcheckbox',\n 'aria-checked': entry.checked,\n 'aria-disabled': entry.disabled || undefined,\n tabindex: index === active.value ? '0' : '-1',\n class: cx('ansh-menu__item', entry.disabled && 'ansh-menu__item--disabled'),\n onClick: () => activate(index),\n onMouseenter: () => {\n if (!entry.disabled) active.value = index\n },\n },\n [\n h(\n 'span',\n {\n class: cx(\n 'ansh-menu__indicator',\n 'ansh-menu__indicator--check',\n entry.checked && 'ansh-menu__indicator--on',\n ),\n 'aria-hidden': 'true',\n },\n [\n h('svg', { viewBox: '0 0 14 14', width: '10', height: '10' }, [\n h('path', {\n d: 'M2.5 7.5l3 3 6-6.5',\n stroke: 'currentColor',\n 'stroke-width': '2',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n fill: 'none',\n }),\n ]),\n ],\n ),\n h('span', { class: 'ansh-menu__text' }, [resolveSlotContent(entry.label)]),\n entry.shortcut ? h('kbd', { class: 'ansh-menu__shortcut' }, entry.shortcut) : null,\n ],\n )\n }\n\n if ('type' in entry && entry.type === 'submenu') {\n return h(Submenu, {\n key: entry.id ?? `sub-${entryIndex}`,\n entry,\n active: index === active.value,\n open: openSubmenu.value === index,\n onOpenChange: (next: boolean) => {\n openSubmenu.value = next ? index : null\n },\n onHover: () => {\n active.value = index\n },\n onCloseAll: () => props.onClose(),\n onItemRef: (node: HTMLElement | null) => {\n itemRefs.value[index] = node\n },\n })\n }\n\n const action = entry as MenuAction\n return h(\n 'div',\n {\n key: action.id ?? `item-${entryIndex}`,\n ref: (node) => {\n itemRefs.value[index] = node as HTMLElement | null\n },\n role: 'menuitem',\n 'aria-disabled': action.disabled || undefined,\n tabindex: index === active.value ? '0' : '-1',\n class: cx(\n 'ansh-menu__item',\n action.danger && 'ansh-menu__item--danger',\n action.disabled && 'ansh-menu__item--disabled',\n ),\n onClick: () => activate(index),\n onMouseenter: () => {\n if (!action.disabled) active.value = index\n },\n },\n [\n action.icon\n ? h('span', { class: 'ansh-menu__icon' }, [resolveSlotContent(action.icon)])\n : null,\n h('span', { class: 'ansh-menu__text' }, [resolveSlotContent(action.label)]),\n action.shortcut ? h('kbd', { class: 'ansh-menu__shortcut' }, action.shortcut) : null,\n ],\n )\n }),\n )\n }\n },\n})\n\nconst Submenu = defineComponent({\n name: 'AnshMenuSubmenu',\n props: {\n entry: { type: Object as PropType<MenuSubmenu>, required: true },\n active: { type: Boolean, required: true },\n open: { type: Boolean, required: true },\n onOpenChange: { type: Function as PropType<(open: boolean) => void>, required: true },\n onHover: { type: Function as PropType<() => void>, required: true },\n onCloseAll: { type: Function as PropType<() => void>, required: true },\n /** Reports this submenu's trigger element up so the parent's roving-focus array includes it. */\n onItemRef: { type: Function as PropType<(el: HTMLElement | null) => void>, required: true },\n },\n setup(props) {\n const triggerRef = ref<HTMLElement | null>(null)\n const panelRef = ref<HTMLDivElement | null>(null)\n let timer: ReturnType<typeof setTimeout> | undefined\n const id = useId('submenu')\n\n const openRef = computed(() => props.open)\n const { mounted, state } = usePresence(openRef, panelRef)\n const { position } = useAnchoredPosition(triggerRef, panelRef, mounted, {\n placement: 'right-start',\n offset: 2,\n })\n\n onBeforeUnmount(() => clearTimeout(timer))\n\n return (): VNode =>\n h('span', { style: { display: 'contents' } }, [\n h(\n 'div',\n {\n ref: (node) => {\n triggerRef.value = node as HTMLElement | null\n props.onItemRef(node as HTMLElement | null)\n },\n role: 'menuitem',\n 'aria-haspopup': 'menu',\n 'aria-expanded': props.open,\n 'aria-controls': props.open ? id : undefined,\n 'aria-disabled': props.entry.disabled || undefined,\n tabindex: props.active ? '0' : '-1',\n class: cx(\n 'ansh-menu__item',\n 'ansh-menu__item--submenu',\n props.entry.disabled && 'ansh-menu__item--disabled',\n ),\n onMouseenter: () => {\n props.onHover()\n // A short delay before opening on hover, so dragging the pointer diagonally across a\n // submenu trigger toward another item doesn't flash a panel open.\n clearTimeout(timer)\n timer = setTimeout(() => props.onOpenChange(true), 120)\n },\n onMouseleave: () => {\n clearTimeout(timer)\n timer = setTimeout(() => props.onOpenChange(false), 200)\n },\n onClick: () => props.onOpenChange(!props.open),\n },\n [\n props.entry.icon\n ? h('span', { class: 'ansh-menu__icon' }, [resolveSlotContent(props.entry.icon)])\n : null,\n h('span', { class: 'ansh-menu__text' }, [resolveSlotContent(props.entry.label)]),\n h('span', { class: 'ansh-menu__chevron', 'aria-hidden': 'true' }, [\n h('svg', { viewBox: '0 0 12 12', width: '12', height: '12' }, [\n h('path', {\n d: 'M4.5 2.5L8 6l-3.5 3.5',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ]),\n ]),\n ],\n ),\n\n mounted.value\n ? h(Teleport, { to: 'body' }, [\n h(\n 'div',\n {\n onMouseenter: () => clearTimeout(timer),\n onMouseleave: () => {\n timer = setTimeout(() => props.onOpenChange(false), 200)\n },\n onKeydown: (event: KeyboardEvent) => {\n // Left arrow closes the submenu and returns focus to its trigger — the inverse\n // of the Right arrow that opened it.\n if (event.key === 'ArrowLeft') {\n event.preventDefault()\n event.stopPropagation()\n props.onOpenChange(false)\n triggerRef.value?.focus()\n }\n },\n },\n [\n h(MenuSurface, {\n panelRef,\n id,\n items: props.entry.items,\n label: typeof props.entry.label === 'string' ? props.entry.label : 'Submenu',\n state: state.value,\n positionStyle: position.value.style,\n onClose: props.onCloseAll,\n }),\n ],\n ),\n ])\n : null,\n ])\n },\n})\n","import { type PropType, Teleport, cloneVNode, defineComponent, h, isVNode, ref } from 'vue'\nimport { type Placement } from '../../../primitives/position'\nimport { useId } from '../../../primitives/utils'\nimport { useAnchoredPosition } from '../../../primitives/use-anchored-position'\nimport { useControllableState } from '../../../primitives/use-controllable-state'\nimport { useDismiss } from '../../../primitives/use-dismiss'\nimport { usePresence } from '../../../primitives/presence'\nimport { MenuSurface } from './surface'\nimport { type MenuEntry } from './types'\n\n/**\n * Menus — dropdown and context. The Vue counterpart of `@ansh-ui/react`'s `DropdownMenu` /\n * `ContextMenu`.\n *\n * Data-driven (`:items=\"[…]\"`) rather than compound. Menus are almost always built from a\n * configuration array anyway — permissions filter entries, a selection decides what's enabled — and\n * expressing that as template children means `v-if` scattered through the tree, which breaks keyboard\n * navigation indices in ways that are painful to debug.\n *\n * Follows the ARIA menu pattern, where **DOM focus moves to the item** (unlike a listbox, which\n * keeps focus on the container). That's what makes Right/Left arrow submenu traversal work the way\n * it does in every desktop application.\n *\n * Keyboard navigation (`Home`/`End`/arrows/typeahead) is implemented directly rather than through\n * `useRovingFocus`: that primitive's arrow-key stepping doesn't skip disabled rows, while this menu's\n * navigation must — landing the roving tab stop on a disabled item is the one behaviour the ARIA menu\n * pattern explicitly forbids. The tabindex-per-row wiring below (`0` on the active row, `-1`\n * elsewhere) is the same roving-tabindex shape `useRovingFocus` implements, just with the\n * skip-disabled search this menu needs and the extra keys (`Enter`, `Escape`, `Tab`, typeahead,\n * `ArrowRight`/`ArrowLeft` for submenus) a generic composite widget hook doesn't know about — ported\n * directly from `@ansh-ui/react`'s own hand-rolled `move()`/`activate()`.\n */\n\n/**\n * A dropdown menu.\n *\n * ```vue\n * <DropdownMenu :items=\"[\n * { label: 'Edit', shortcut: '⌘E', onSelect: edit },\n * { type: 'separator' },\n * { label: 'Delete', danger: true, onSelect: remove },\n * ]\">\n * <IconButton label=\"Actions\" />\n * </DropdownMenu>\n * ```\n */\nexport const DropdownMenu = defineComponent({\n name: 'AnshDropdownMenu',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly MenuEntry[]>, required: true },\n placement: { type: String as PropType<Placement>, default: 'bottom-start' },\n /** Accessible name for the menu itself. */\n label: { type: String, default: 'Menu' },\n open: { type: Boolean, default: undefined },\n defaultOpen: { type: Boolean, default: false },\n },\n emits: ['update:open'],\n setup(props, { slots, attrs, emit }) {\n const [isOpen, setOpen] = useControllableState(\n () => props.open,\n props.defaultOpen,\n (next) => emit('update:open', next),\n )\n\n const triggerRef = ref<HTMLElement | null>(null)\n const menuRef = ref<HTMLDivElement | null>(null)\n const menuId = useId('menu')\n\n const { mounted, state } = usePresence(isOpen, menuRef)\n const { position } = useAnchoredPosition(triggerRef, menuRef, mounted, {\n placement: props.placement,\n offset: 6,\n })\n useDismiss(menuRef, isOpen, () => setOpen(false), { ignore: [triggerRef] })\n\n // The menu state belongs on the element the user actually focuses. Like React's `Slot`, the\n // trigger props are merged onto the slotted element itself; a wrapper span carrying\n // `aria-expanded` is invalid ARIA, and screen readers would never announce it on the button.\n const trigger = () => {\n const triggerProps = {\n ref: triggerRef,\n class: 'ansh-menu-trigger',\n 'aria-haspopup': 'menu',\n 'aria-expanded': isOpen.value,\n 'aria-controls': isOpen.value ? menuId : undefined,\n onClick: () => setOpen(!isOpen.value),\n onKeydown: (event: KeyboardEvent) => {\n // ArrowDown opens *and* lands on the first item, which is the single most-used path\n // into a menu for keyboard users.\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault()\n setOpen(true)\n }\n },\n }\n const children = slots.default?.() ?? []\n const [first] = children\n return children.length === 1 && first && isVNode(first) && typeof first.type !== 'symbol'\n ? cloneVNode(first, triggerProps, true)\n : h('span', triggerProps, children)\n }\n\n return () => {\n const panelClass = attrs.class as string | undefined\n\n return h('span', { style: { display: 'contents' } }, [\n trigger(),\n\n mounted.value\n ? h(Teleport, { to: 'body' }, [\n h(MenuSurface, {\n panelRef: menuRef,\n id: menuId,\n items: props.items,\n label: props.label,\n state: state.value,\n positionStyle: position.value.style,\n panelClass,\n onClose: () => {\n setOpen(false)\n triggerRef.value?.focus?.()\n },\n }),\n ])\n : null,\n ])\n }\n },\n})\n","import { type PropType, Teleport, computed, defineComponent, h, ref } from 'vue'\nimport { useId } from '../../../primitives/utils'\nimport { useAnchoredPosition } from '../../../primitives/use-anchored-position'\nimport { useDismiss } from '../../../primitives/use-dismiss'\nimport { usePresence } from '../../../primitives/presence'\nimport { MenuSurface } from './surface'\nimport { type MenuEntry } from './types'\n\n/**\n * A right-click menu.\n *\n * Also opens on the **context-menu key** and on Shift+F10, which is how keyboard users reach one —\n * a right-click-only implementation is inaccessible, and it is the most commonly missed keyboard\n * binding in the whole component set.\n *\n * Anchored to the pointer via a zero-size virtual rect, so the existing positioning code flips and\n * shifts it near the viewport edges without needing a separate path.\n */\nexport const ContextMenu = defineComponent({\n name: 'AnshContextMenu',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly MenuEntry[]>, required: true },\n label: { type: String, default: 'Context menu' },\n },\n setup(props, { slots, attrs }) {\n const point = ref<{ x: number; y: number } | null>(null)\n const menuRef = ref<HTMLDivElement | null>(null)\n const anchorRef = ref<HTMLSpanElement | null>(null)\n const menuId = useId('contextmenu')\n\n const open = computed(() => point.value !== null)\n const { mounted, state } = usePresence(open, menuRef)\n const { position } = useAnchoredPosition(anchorRef, menuRef, mounted, {\n placement: 'bottom-start',\n offset: 2,\n })\n\n useDismiss(menuRef, open, () => {\n point.value = null\n })\n\n return () => {\n const panelClass = attrs.class as string | undefined\n\n return h('span', { style: { display: 'contents' } }, [\n h(\n 'span',\n {\n class: 'ansh-contextmenu__area',\n onContextmenu: (event: MouseEvent) => {\n event.preventDefault()\n point.value = { x: event.clientX, y: event.clientY }\n },\n onKeydown: (event: KeyboardEvent) => {\n if (event.key === 'ContextMenu' || (event.shiftKey && event.key === 'F10')) {\n event.preventDefault()\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect()\n point.value = { x: rect.left + 8, y: rect.top + 8 }\n }\n },\n },\n slots.default?.(),\n ),\n\n // A zero-size anchor placed at the pointer. Cheaper than teaching the positioner about\n // virtual elements, and it inherits flip/shift behaviour for free.\n point.value\n ? h('span', {\n ref: anchorRef,\n 'aria-hidden': 'true',\n style: {\n position: 'fixed',\n left: `${point.value.x}px`,\n top: `${point.value.y}px`,\n width: '0px',\n height: '0px',\n },\n })\n : null,\n\n mounted.value\n ? h(Teleport, { to: 'body' }, [\n h(MenuSurface, {\n panelRef: menuRef,\n id: menuId,\n items: props.items,\n label: props.label,\n state: state.value,\n positionStyle: position.value.style,\n panelClass,\n onClose: () => {\n point.value = null\n },\n }),\n ])\n : null,\n ])\n }\n },\n})\n"]}
|
|
@@ -112,7 +112,7 @@ function useRovingFocus(options) {
|
|
|
112
112
|
if (nodes.length === 0) return;
|
|
113
113
|
const horizontal = orientation === "horizontal" || orientation === "both";
|
|
114
114
|
const vertical = orientation === "vertical" || orientation === "both";
|
|
115
|
-
let next
|
|
115
|
+
let next;
|
|
116
116
|
switch (event.key) {
|
|
117
117
|
case "ArrowRight":
|
|
118
118
|
if (!horizontal) return;
|
|
@@ -148,5 +148,5 @@ function useRovingFocus(options) {
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
export { getTabbable, useAutoFocus, useFocusRestore, useFocusTrap, useRovingFocus };
|
|
151
|
-
//# sourceMappingURL=chunk-
|
|
152
|
-
//# sourceMappingURL=chunk-
|
|
151
|
+
//# sourceMappingURL=chunk-G2OX2NH2.js.map
|
|
152
|
+
//# sourceMappingURL=chunk-G2OX2NH2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/focus.ts"],"names":[],"mappings":"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","file":"chunk-G2OX2NH2.js","sourcesContent":["import { type Ref, getCurrentScope, onScopeDispose, watch } from 'vue'\nimport { type ReadonlyRef } from './utils'\n\n/**\n * Focus management for overlay surfaces — the Vue counterpart of `@ansh-ui/react`'s `focus.ts`.\n *\n * Three separate concerns that are usually conflated:\n *\n * 1. **Finding what can be focused.** Harder than it looks — `disabled`, `hidden`, `inert`,\n * zero-size elements and negative tabindex all disqualify a node, and CSS-hidden ancestors\n * disqualify their whole subtree.\n * 2. **Trapping.** Tab must cycle within the surface. Required by WCAG 2.4.3 for modals.\n * 3. **Restoring.** Focus must return to the trigger on close, or a keyboard user is dumped at the\n * top of the document and has to navigate all the way back.\n */\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',')\n\nfunction isVisible(element: HTMLElement): boolean {\n if (element.hasAttribute('inert')) return false\n if (element.offsetParent !== null) return true\n const rect = element.getBoundingClientRect()\n return rect.width > 0 || rect.height > 0\n}\n\n/** Every tabbable descendant, in tab order. */\nexport function getTabbable(container: HTMLElement | null | undefined): HTMLElement[] {\n if (!container) return []\n const nodes = Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR))\n return nodes.filter((node) => {\n if (node.getAttribute('aria-hidden') === 'true') return false\n if (node.closest('[inert]')) return false\n return isVisible(node)\n })\n}\n\n/**\n * Trap Tab within a container while `active`.\n *\n * Implemented on `keydown` at the container rather than with sentinel elements at either end. The\n * sentinel approach adds two focusable nodes to the accessibility tree that screen readers can land\n * on and announce as blank; intercepting the key does not.\n */\nexport function useFocusTrap(\n target: Ref<HTMLElement | null | undefined>,\n active: ReadonlyRef<boolean>,\n): void {\n let detach: (() => void) | null = null\n\n const attach = (): void => {\n const container = target.value\n if (!container || detach) return\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Tab') return\n\n const tabbable = getTabbable(container)\n if (tabbable.length === 0) {\n event.preventDefault()\n return\n }\n\n const first = tabbable[0]!\n const last = tabbable[tabbable.length - 1]!\n const activeElement = document.activeElement as HTMLElement | null\n\n if (event.shiftKey && (activeElement === first || activeElement === container)) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n container.addEventListener('keydown', onKeyDown)\n detach = () => {\n container.removeEventListener('keydown', onKeyDown)\n detach = null\n }\n }\n\n watch([active, target], () => (active.value ? attach() : detach?.()), {\n immediate: true,\n flush: 'post',\n })\n\n if (getCurrentScope()) onScopeDispose(() => detach?.())\n}\n\n/**\n * Restore focus to whatever was focused before `active` became true.\n *\n * The element is captured on activation, not on mount, because a component can be mounted long\n * before it opens.\n */\nexport function useFocusRestore(active: ReadonlyRef<boolean>): void {\n let previous: HTMLElement | null = null\n\n watch(\n active,\n (isActive) => {\n if (isActive) {\n previous = document.activeElement as HTMLElement | null\n return\n }\n // Guard against restoring to a node that has since been removed from the document —\n // focusing a detached element silently moves focus to `<body>`, losing the user's place.\n if (previous && previous.isConnected) previous.focus?.({ preventScroll: true })\n previous = null\n },\n { flush: 'post' },\n )\n}\n\n/**\n * Move focus into a surface when it opens.\n *\n * Prefers an explicitly marked element, then the first tabbable one, then the container itself. The\n * container fallback matters for a dialog whose only content is text: focus must land inside it so a\n * screen reader announces the dialog rather than continuing from the page behind.\n */\nexport function useAutoFocus(\n target: Ref<HTMLElement | null | undefined>,\n active: ReadonlyRef<boolean>,\n initialFocus?: Ref<HTMLElement | null | undefined>,\n): void {\n let frame: number | null = null\n\n watch(\n [active, target],\n () => {\n if (frame !== null) cancelAnimationFrame(frame)\n if (!active.value) return\n const container = target.value\n if (!container) return\n\n // After paint: the surface may still be animating in, and focusing a node with\n // `visibility: hidden` is a no-op that silently leaves focus on the body.\n frame = requestAnimationFrame(() => {\n frame = null\n const explicit = initialFocus?.value\n if (explicit?.isConnected) {\n explicit.focus({ preventScroll: true })\n return\n }\n const target2 = getTabbable(container)[0] ?? container\n target2.focus({ preventScroll: true })\n })\n },\n { immediate: true, flush: 'post' },\n )\n\n if (getCurrentScope()) {\n onScopeDispose(() => {\n if (frame !== null) cancelAnimationFrame(frame)\n })\n }\n}\n\n/**\n * Roving tabindex for a composite widget (toolbar, tab list, menu).\n *\n * The ARIA authoring practice: a composite has exactly **one** tab stop, and arrow keys move within\n * it. Returns a keydown handler to bind on the composite's container.\n */\nexport function useRovingFocus(options: {\n /** Items in DOM order. */\n items: Ref<Array<HTMLElement | null>>\n /** Index that currently owns the tab stop. */\n active: () => number\n onActiveChange: (index: number) => void\n orientation?: 'horizontal' | 'vertical' | 'both'\n loop?: boolean\n}): (event: KeyboardEvent) => void {\n const { items, active, onActiveChange, orientation = 'horizontal', loop = true } = options\n\n return (event: KeyboardEvent) => {\n const nodes = items.value.filter((item): item is HTMLElement => item !== null)\n if (nodes.length === 0) return\n\n const horizontal = orientation === 'horizontal' || orientation === 'both'\n const vertical = orientation === 'vertical' || orientation === 'both'\n\n let next: number\n switch (event.key) {\n case 'ArrowRight':\n if (!horizontal) return\n next = active() + 1\n break\n case 'ArrowLeft':\n if (!horizontal) return\n next = active() - 1\n break\n case 'ArrowDown':\n if (!vertical) return\n next = active() + 1\n break\n case 'ArrowUp':\n if (!vertical) return\n next = active() - 1\n break\n case 'Home':\n next = 0\n break\n case 'End':\n next = nodes.length - 1\n break\n default:\n return\n }\n\n event.preventDefault()\n\n if (next < 0) next = loop ? nodes.length - 1 : 0\n if (next >= nodes.length) next = loop ? 0 : nodes.length - 1\n\n onActiveChange(next)\n nodes[next]?.focus()\n }\n}\n"]}
|
|
@@ -896,8 +896,8 @@ function scoreOption(query, option) {
|
|
|
896
896
|
const q = query.toLowerCase();
|
|
897
897
|
const haystacks = [option.label, option.keywords ?? "", option.description ?? ""];
|
|
898
898
|
let best = -1;
|
|
899
|
-
for (let
|
|
900
|
-
const text = haystacks[
|
|
899
|
+
for (let h22 = 0; h22 < haystacks.length; h22++) {
|
|
900
|
+
const text = haystacks[h22].toLowerCase();
|
|
901
901
|
let queryIndex = 0;
|
|
902
902
|
let total = 0;
|
|
903
903
|
let run = 0;
|
|
@@ -910,7 +910,7 @@ function scoreOption(query, option) {
|
|
|
910
910
|
run = 0;
|
|
911
911
|
}
|
|
912
912
|
}
|
|
913
|
-
if (queryIndex === q.length) best = Math.max(best, total -
|
|
913
|
+
if (queryIndex === q.length) best = Math.max(best, total - h22 * 4);
|
|
914
914
|
}
|
|
915
915
|
return best;
|
|
916
916
|
}
|
|
@@ -3026,7 +3026,7 @@ var Calendar = defineComponent({
|
|
|
3026
3026
|
}
|
|
3027
3027
|
};
|
|
3028
3028
|
const onKeyDown = (event) => {
|
|
3029
|
-
let next
|
|
3029
|
+
let next;
|
|
3030
3030
|
switch (event.key) {
|
|
3031
3031
|
case "ArrowLeft":
|
|
3032
3032
|
next = addDays(cursor.value, -1);
|
|
@@ -3133,7 +3133,14 @@ var Calendar = defineComponent({
|
|
|
3133
3133
|
const isCursor = isSameDay(date, cursor.value);
|
|
3134
3134
|
return h(
|
|
3135
3135
|
"td",
|
|
3136
|
-
{
|
|
3136
|
+
{
|
|
3137
|
+
key: date.toISOString(),
|
|
3138
|
+
class: "ansh-calendar__cell",
|
|
3139
|
+
role: "gridcell",
|
|
3140
|
+
// Selection belongs on the gridcell: `aria-selected` is not a valid
|
|
3141
|
+
// attribute on a button, and screen readers ignore it there.
|
|
3142
|
+
"aria-selected": isSelected
|
|
3143
|
+
},
|
|
3137
3144
|
[
|
|
3138
3145
|
h(
|
|
3139
3146
|
"button",
|
|
@@ -3151,7 +3158,6 @@ var Calendar = defineComponent({
|
|
|
3151
3158
|
// leaves the calendar rather than walking 42 buttons.
|
|
3152
3159
|
tabindex: isCursor ? "0" : "-1",
|
|
3153
3160
|
disabled: dateDisabled,
|
|
3154
|
-
"aria-selected": isSelected,
|
|
3155
3161
|
"aria-current": isSameDay(date, today) ? "date" : void 0,
|
|
3156
3162
|
// The full date is the accessible name; the visible number alone would
|
|
3157
3163
|
// be announced as a bare "14".
|
|
@@ -3641,5 +3647,5 @@ var DateRangePicker = defineComponent({
|
|
|
3641
3647
|
});
|
|
3642
3648
|
|
|
3643
3649
|
export { Calendar, Checkbox, ChoiceCard, ColorPicker, Combobox, DatePicker, DateRangePicker, Dropzone, Field, Fieldset, Input, NumberInput, OptionList, PinInput, Radio, RadioGroup, RangeSlider, Rating, Select, Slider, Switch, TagsInput, Textarea, VisuallyHidden, addDays, addMonths, filterOptions, firstEnabled, isSameDay, scoreOption, startOfDay, stepActive, useFieldContext, useFieldControl, useTypeahead };
|
|
3644
|
-
//# sourceMappingURL=chunk-
|
|
3645
|
-
//# sourceMappingURL=chunk-
|
|
3650
|
+
//# sourceMappingURL=chunk-G3EIU6VM.js.map
|
|
3651
|
+
//# sourceMappingURL=chunk-G3EIU6VM.js.map
|