@spezutil/hijri-datepicker 0.1.0
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/LICENSE +201 -0
- package/dist/index.cjs +580 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +120 -0
- package/dist/index.d.ts +120 -0
- package/dist/index.js +577 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/render.ts","../src/selection.ts","../src/time.ts","../src/styles.ts","../src/hijri-datepicker.ts","../src/index.ts"],"names":[],"mappings":";;;;;AA8BO,SAAS,SAAA,CAAU,GAAc,CAAA,EAAuB;AAC7D,EAAA,OAAO,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,UAAU,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,GAAA,KAAQ,CAAA,CAAE,GAAA;AACjE;AAEA,SAAS,UAAA,CAAW,MAAY,IAAA,EAAoB;AAClD,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,OAAA,EAAQ,GAAI,OAAO,KAAQ,CAAA;AAClD;AAEO,SAAS,eAAA,CACd,GAAA,EACA,IAAA,EACA,IAAA,EACY;AACZ,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,gBAAA,CAAiB,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,GAAA,EAAK,CAAA,EAAG,CAAA;AACrF,EAAA,MAAM,WAAA,GAAc,UAAU,SAAA,EAAU;AACxC,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,SAAA,EAAW,CAAC,WAAW,CAAA;AACpD,EAAA,MAAM,aAAa,IAAA,CAAK,KAAA,GAAQ,IAAI,gBAAA,CAAiB,IAAA,CAAK,KAAK,CAAA,GAAI,IAAA;AAEnE,EAAA,MAAM,MAAA,GAAS,KAAK,UAAA,GAAa,GAAA,CAAI,iBAAiB,IAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAA;AACnF,EAAA,MAAM,IAAA,GAAO,KAAK,QAAA,GAAW,GAAA,CAAI,iBAAiB,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAA;AAC7E,EAAA,MAAM,EAAA,GAAK,WAAW,IAAA,IAAQ,IAAA,KAAS,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA,GAAI,IAAA;AACvE,EAAA,MAAM,EAAA,GAAK,WAAW,IAAA,IAAQ,IAAA,KAAS,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA,GAAI,IAAA;AAEvE,EAAA,MAAM,QAAqB,EAAC;AAC5B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,OAAkB,EAAC;AACzB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,MAAM,CAAA,GAAI,UAAA,CAAW,SAAA,EAAW,CAAA,GAAI,IAAI,CAAC,CAAA;AACzC,MAAA,MAAM,CAAA,GAAI,EAAE,OAAA,EAAQ;AACpB,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,gBAAA,CAAiB,CAAC,CAAA;AACpC,MAAA,MAAM,QAAA,GAAA,CACH,KAAK,QAAA,GAAW,SAAA,CAAU,OAAO,IAAA,CAAK,QAAQ,IAAI,KAAA,MAClD,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA,CAAa,KAAK,CAAC,CAAA,KAAM,UAAU,KAAA,EAAO,CAAC,CAAC,CAAA,GAAI,KAAA,CAAA;AAC5E,MAAA,IAAA,CAAK,IAAA,CAAK;AAAA,QACR,KAAA;AAAA,QACA,SAAA,EAAW,CAAA;AAAA,QACX,gBAAgB,KAAA,CAAM,IAAA,KAAS,KAAK,IAAA,IAAQ,KAAA,CAAM,UAAU,IAAA,CAAK,KAAA;AAAA,QACjE,QAAA;AAAA,QACA,UAAU,IAAA,CAAK,UAAA,GAAa,KAAK,UAAA,CAAW,KAAA,EAAO,CAAC,CAAA,GAAI,KAAA;AAAA,QACxD,OAAA,EAAS,UAAA,GAAa,SAAA,CAAU,KAAA,EAAO,UAAU,CAAA,GAAI,KAAA;AAAA,QACrD,UAAA,EAAY,MAAA,KAAW,IAAA,IAAQ,CAAA,KAAM,MAAA;AAAA,QACrC,QAAA,EAAU,IAAA,KAAS,IAAA,IAAQ,CAAA,KAAM,IAAA;AAAA,QACjC,SAAS,EAAA,KAAO,IAAA,IAAQ,OAAO,IAAA,IAAQ,CAAA,GAAI,MAAM,CAAA,GAAI;AAAA,OACtD,CAAA;AAAA,IACH;AACA,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,MAAM,KAAA,EAAO,IAAA,CAAK,OAAO,KAAA,EAAM;AACrD;;;AC5EA,IAAM,QAAA,GAAW,qBAAA;AAEV,SAAS,OAAO,CAAA,EAAwB;AAC7C,EAAA,OAAO,CAAA,KAAM,OAAA,IAAW,CAAA,KAAM,UAAA,GAAa,CAAA,GAAI,QAAA;AACjD;AAEO,SAAS,aAAa,CAAA,EAA4B;AACvD,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAC;AAChB,EAAA,OAAO,EACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,EACnB,MAAA,CAAO,CAAC,MAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAC,CAAA;AACnC;;;ACPA,SAAS,KAAK,CAAA,EAAmB;AAC/B,EAAA,OAAO,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClC;AAEO,SAAS,UAAU,CAAA,EAA+B;AACvD,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,MAAM,CAAA,GAAI,qBAAA,CAAsB,IAAA,CAAK,CAAA,CAAE,MAAM,CAAA;AAC7C,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACxB,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AAC1B,EAAA,IAAI,IAAA,GAAO,KAAK,IAAA,GAAO,EAAA,IAAM,SAAS,CAAA,IAAK,MAAA,GAAS,IAAI,OAAO,IAAA;AAC/D,EAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AACxB;AAEO,SAAS,aAAa,CAAA,EAAiB;AAC5C,EAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA;AAC1C;AAEO,SAAS,KAAK,IAAA,EAAsD;AACzE,EAAA,MAAM,QAAA,GAAqB,IAAA,GAAO,EAAA,GAAK,IAAA,GAAO,IAAA;AAC9C,EAAA,IAAI,IAAI,IAAA,GAAO,EAAA;AACf,EAAA,IAAI,CAAA,KAAM,GAAG,CAAA,GAAI,EAAA;AACjB,EAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,QAAA,EAAS;AAC/B;AAEO,SAAS,MAAA,CAAO,QAAgB,QAAA,EAA4B;AACjE,EAAA,IAAI,IAAI,MAAA,GAAS,EAAA;AACjB,EAAA,IAAI,QAAA,KAAa,MAAM,CAAA,IAAK,EAAA;AAC5B,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,eAAA,CAAgB,SAAiB,CAAA,EAAiB;AAChE,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,YAAA,CAAa,CAAC,CAAC,CAAA,CAAA;AACtC;AAEO,SAAS,cAAc,KAAA,EAG5B;AACA,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAK;AAC5C,EAAA,MAAM,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,KAAA,CAAM,MAAM,GAAG,CAAA;AAC/B,EAAA,OAAO,EAAE,MAAM,CAAA,IAAK,IAAA,EAAM,MAAM,EAAA,GAAK,SAAA,CAAU,EAAE,CAAA,GAAI,IAAA,EAAK;AAC5D;;;ACjDO,IAAM,MAAA,GAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;;;AC4CtB,IAAM,GAAA,GAAM,qBAAA;AAEZ,SAAS,YAAY,CAAA,EAA+B;AAClD,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,IAAI,IAAA,CAAK,CAAC,GAAG,OAAO,IAAA;AAC/B,EAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AACzC,EAAA,OAAO,IAAI,KAAK,IAAA,CAAK,GAAA,CAAI,GAAI,CAAA,GAAK,CAAA,EAAG,CAAE,CAAC,CAAA;AAC1C;AAEA,SAAS,MAAM,IAAA,EAAoB;AACjC,EAAA,OAAO,IAAA,CAAK,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AACvC;AAEO,IAAM,eAAA,GAAN,cAA8B,WAAA,CAAY;AAAA,EA4D/C,WAAA,GAAc;AACZ,IAAA,KAAA,EAAM;AA7CR,IAAA,IAAA,CAAQ,MAAqB,cAAA,EAAe;AAI5C,IAAA,IAAA,CAAQ,KAAA,GAAc,QAAA;AACtB,IAAA,IAAA,CAAQ,QAAA,GAA6B,IAAA;AACrC;AAAA,IAAA,IAAA,CAAQ,eAA4B,EAAC;AACrC;AAAA,IAAA,IAAA,CAAQ,UAAA,GAA+B,IAAA;AACvC,IAAA,IAAA,CAAQ,QAAA,GAA6B,IAAA;AACrC,IAAA,IAAA,CAAQ,SAAA,GAA8B,IAAA;AACtC,IAAA,IAAA,CAAQ,IAAA,GAAoB,IAAA;AAE5B;AAAA,IAAA,IAAA,CAAQ,YAAuB,EAAC;AAChC,IAAA,IAAA,CAAQ,QAAA,GAAW,KAAA;AAiCjB,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,YAAA,CAAa,EAAE,IAAA,EAAM,QAAQ,CAAA;AAC9C,IAAA,MAAM,aAAa,IAAA,CAAK,GAAA,CAAI,gBAAA,iBAAiB,IAAI,MAAM,CAAA;AACvD,IAAA,IAAA,CAAK,OAAO,EAAE,IAAA,EAAM,WAAW,IAAA,EAAM,KAAA,EAAO,WAAW,KAAA,EAAM;AAAA,EAC/D;AAAA,EAhEA,WAAW,kBAAA,GAA+B;AACxC,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,mBAAA;AAAA,MACA,MAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAmBQ,OAAA,CAAQ,MAAc,CAAA,EAAwB;AACpD,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA;AAAA,SACpC,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,CAAC,CAAA;AAAA,EAChC;AAAA,EAEA,IAAI,KAAA,GAAuB;AAAE,IAAA,OAAO,IAAA,CAAK,aAAa,OAAO,CAAA;AAAA,EAAG;AAAA,EAChE,IAAI,MAAM,CAAA,EAAkB;AAAE,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,EAAG;AAAA,EACxD,IAAI,KAAA,GAAuB;AAAE,IAAA,OAAO,IAAA,CAAK,aAAa,OAAO,CAAA;AAAA,EAAG;AAAA,EAChE,IAAI,MAAM,CAAA,EAAkB;AAAE,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,EAAG;AAAA,EACxD,IAAI,GAAA,GAAqB;AAAE,IAAA,OAAO,IAAA,CAAK,aAAa,KAAK,CAAA;AAAA,EAAG;AAAA,EAC5D,IAAI,IAAI,CAAA,EAAkB;AAAE,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,EAAG;AAAA,EACpD,IAAI,IAAA,GAAsB;AAAE,IAAA,OAAO,IAAA,CAAK,aAAa,MAAM,CAAA;AAAA,EAAG;AAAA,EAC9D,IAAI,KAAK,CAAA,EAAkB;AAAE,IAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,EAAG;AAAA,EACtD,IAAI,GAAA,GAAqB;AAAE,IAAA,OAAO,IAAA,CAAK,aAAa,KAAK,CAAA;AAAA,EAAG;AAAA,EAC5D,IAAI,IAAI,CAAA,EAAkB;AAAE,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,EAAG;AAAA,EACpD,IAAI,GAAA,GAAqB;AAAE,IAAA,OAAO,IAAA,CAAK,aAAa,KAAK,CAAA;AAAA,EAAG;AAAA,EAC5D,IAAI,IAAI,CAAA,EAAkB;AAAE,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,EAAG;AAAA,EACpD,IAAI,UAAA,GAA4B;AAAE,IAAA,OAAO,IAAA,CAAK,aAAa,aAAa,CAAA;AAAA,EAAG;AAAA,EAC3E,IAAI,WAAW,CAAA,EAAkB;AAAE,IAAA,IAAA,CAAK,OAAA,CAAQ,eAAe,CAAC,CAAA;AAAA,EAAG;AAAA,EACnE,IAAI,gBAAA,GAAkC;AAAE,IAAA,OAAO,IAAA,CAAK,aAAa,mBAAmB,CAAA;AAAA,EAAG;AAAA,EACvF,IAAI,iBAAiB,CAAA,EAAkB;AAAE,IAAA,IAAA,CAAK,OAAA,CAAQ,qBAAqB,CAAC,CAAA;AAAA,EAAG;AAAA,EAC/E,IAAI,UAAA,GAAsB;AAAE,IAAA,OAAO,IAAA,CAAK,aAAa,aAAa,CAAA;AAAA,EAAG;AAAA,EACrE,IAAI,WAAW,CAAA,EAAY;AACzB,IAAA,IAAI,CAAA,EAAG,IAAA,CAAK,YAAA,CAAa,aAAA,EAAe,EAAE,CAAA;AAAA,SACrC,IAAA,CAAK,gBAAgB,aAAa,CAAA;AAAA,EACzC;AAAA,EASA,iBAAA,GAA0B;AACxB,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEA,wBAAA,GAAiC;AAC/B,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,QAAA,EAAU;AACjC,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEQ,IAAI,CAAA,EAAoB;AAC9B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,CAAC,CAAA;AAAA,EACpC;AAAA,EAEQ,MAAM,CAAA,EAAsB;AAClC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,CAAC,CAAC,CAAA;AAAA,EAC3C;AAAA,EAEQ,WAAW,EAAA,EAAsB;AACvC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAI;AACF,MAAA,EAAA,EAAG;AAAA,IACL,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAAA,IAClB;AAAA,EACF;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,IAAA,CAAK,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,MAAM,CAAC,CAAA;AAC7C,IAAA,IAAI,IAAA,CAAK,UAAU,OAAA,EAAS;AAC1B,MAAA,MAAM,CAAA,GAAI,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,OAAO,CAAC,CAAA;AAChD,MAAA,MAAM,CAAA,GAAI,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,KAAK,CAAC,CAAA;AAC9C,MAAA,IAAA,CAAK,UAAA,GAAa,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA;AACpC,MAAA,IAAA,CAAK,QAAA,GAAW,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA;AAClC,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,MAAA,IAAI,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,UAAA,CAAW,KAAA,EAAM;AAAA,IAC9F,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,KAAU,UAAA,EAAY;AACpC,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,IAAA,CAAK,YAAA,CAAa,OAAO,CAAC,CAAA;AACpD,MAAA,IAAA,CAAK,YAAA,GAAe,KACjB,GAAA,CAAI,CAAC,QAAQ,WAAA,CAAY,GAAG,CAAC,CAAA,CAC7B,MAAA,CAAO,CAAC,CAAA,KAAiB,CAAA,KAAM,IAAI,CAAA,CACnC,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AACzB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA;AACjC,MAAA,IAAI,KAAA,OAAY,IAAA,GAAO,EAAE,MAAM,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,KAAA,CAAM,KAAA,EAAM;AAAA,IAChE,CAAA,MAAO;AACL,MAAA,MAAM,EAAE,MAAM,IAAA,EAAK,GAAI,cAAc,IAAA,CAAK,YAAA,CAAa,OAAO,CAAC,CAAA;AAC/D,MAAA,MAAM,CAAA,GAAI,YAAY,IAAI,CAAA;AAC1B,MAAA,IAAA,CAAK,QAAA,GAAW,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA;AAClC,MAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,IAAA,CAAK,IAAA;AACzB,MAAA,IAAI,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,KAAA,EAAM;AAAA,IACxF;AAAA,EACF;AAAA,EAEQ,eAAA,GAAsD;AAC5D,IAAA,MAAM,GAAA,GAAM,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,KAAK,CAAC,CAAA;AAChD,IAAA,MAAM,GAAA,GAAM,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,KAAK,CAAC,CAAA;AAChD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,mBAAmB,CAAA;AACrD,IAAA,MAAM,YAAA,GAAe,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,OAAO,CAAA,CAAE,IAAA,EAAM,CAAC,IAAI,EAAC;AAClF,IAAA,OAAO,CAAC,GAAG,CAAA,KAAM;AACf,MAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,GAAA,CAAI,OAAA,IAAW,OAAO,IAAA;AAC/C,MAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,GAAA,CAAI,OAAA,IAAW,OAAO,IAAA;AAE/C,MAAA,IAAI,aAAa,QAAA,CAAS,CAAA,CAAE,SAAA,EAAW,GAAG,OAAO,IAAA;AACjD,MAAA,IAAI,KAAK,cAAA,IAAkB,IAAA,CAAK,eAAe,CAAA,EAAG,CAAC,GAAG,OAAO,IAAA;AAC7D,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,EACF;AAAA,EAEQ,SAAS,KAAA,EAAqB;AACpC,IAAA,IAAI,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,IAAA,CAAK,IAAA;AAC3B,IAAA,KAAA,IAAS,KAAA;AACT,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,KAAA,GAAQ,EAAA;AACR,MAAA,IAAA,IAAQ,CAAA;AAAA,IACV,CAAA,MAAA,IAAW,QAAQ,EAAA,EAAI;AACrB,MAAA,KAAA,GAAQ,CAAA;AACR,MAAA,IAAA,IAAQ,CAAA;AAAA,IACV;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEQ,KAAK,MAAA,EAA4B;AACvC,IAAA,IAAA,CAAK,aAAA;AAAA,MACH,IAAI,YAAY,QAAA,EAAU,EAAE,SAAS,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ;AAAA,KACrE;AAAA,EACF;AAAA,EAEQ,OAAO,IAAA,EAAqB;AAClC,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAI,KAAK,KAAA,KAAU,OAAA,EAAS,OAAO,IAAA,CAAK,YAAY,IAAI,CAAA;AACxD,IAAA,IAAI,KAAK,KAAA,KAAU,UAAA,EAAY,OAAO,IAAA,CAAK,eAAe,IAAI,CAAA;AAC9D,IAAA,OAAO,IAAA,CAAK,aAAa,IAAI,CAAA;AAAA,EAC/B;AAAA,EAEQ,aAAa,IAAA,EAAqB;AACxC,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,KAAA;AACrB,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA;AAChC,IAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,GAAO,gBAAgB,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA,GAAI,GAAA;AAC5D,IAAA,IAAA,CAAK,WAAW,MAAM,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,KAAK,CAAC,CAAA;AACvD,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,IAAA,EAAM,QAAA;AAAA,MACN,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,SAAA,EAAW,KAAA;AAAA,MACX,GAAI,KAAK,IAAA,GAAO,EAAE,MAAM,IAAA,CAAK,IAAA,KAAS;AAAC,KACxC,CAAA;AAAA,EACH;AAAA,EAEQ,eAAe,IAAA,EAAqB;AAC1C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,CAAC,MAAM,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,KAAK,CAAC,CAAA;AACvE,IAAA,IAAI,OAAO,CAAA,EAAG,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,SACxC,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,YAAA,CAAa,IAAA;AAAA,MAChB,CAAC,CAAA,EAAG,CAAA,KAAM,IAAA,CAAK,IAAI,gBAAA,CAAiB,CAAC,CAAA,CAAE,OAAA,KAAY,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,CAAC,EAAE,OAAA;AAAQ,KAC1F;AACA,IAAA,MAAM,IAAA,GAAO,KAAK,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AACvD,IAAA,IAAA,CAAK,WAAW,MAAM;AACpB,MAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,CAAK,YAAA,CAAa,SAAS,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,WACrD,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAAA,IACnC,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,EAAG,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,EACnF;AAAA,EAEQ,YAAY,IAAA,EAAqB;AACvC,IAAA,MAAM,cAAc,CAAC,IAAA,CAAK,UAAA,IAAe,IAAA,CAAK,cAAc,IAAA,CAAK,QAAA;AACjE,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,IAAA,CAAK,aAAa,IAAA,CAAK,KAAA;AACvB,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,MAAA,IAAA,CAAK,WAAW,MAAM;AACpB,QAAA,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,SAAS,CAAC,CAAA;AAChD,QAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAAA,MAC5B,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,MAAA,EAAO;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,iBAAiB,IAAA,CAAK,UAAW,EAAE,OAAA,EAAQ;AACnE,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,OAAA,EAAQ,GAAI,MAAA,EAAQ;AACrC,MAAA,IAAA,CAAK,WAAW,IAAA,CAAK,UAAA;AACrB,MAAA,IAAA,CAAK,aAAa,IAAA,CAAK,KAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,WAAW,IAAA,CAAK,KAAA;AAAA,IACvB;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,UAAW,CAAA;AAC5C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAS,CAAA;AACxC,IAAA,IAAA,CAAK,WAAW,MAAM;AACpB,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,QAAQ,CAAA;AACnC,MAAA,IAAA,CAAK,YAAA,CAAa,OAAO,MAAM,CAAA;AAAA,IACjC,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,IAAA,EAAM,OAAA;AAAA,MACN,OAAO,EAAE,KAAA,EAAO,IAAA,CAAK,UAAA,EAAa,WAAW,QAAA,EAAS;AAAA,MACtD,KAAK,EAAE,KAAA,EAAO,IAAA,CAAK,QAAA,EAAW,WAAW,MAAA;AAAO,KACjD,CAAA;AAAA,EACH;AAAA,EAEQ,QAAQ,CAAA,EAAe;AAC7B,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AACZ,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACpC,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,GAAA,EAAK,CAAC,CAAA;AACpC,MAAA,IAAA,CAAK,WAAW,MAAM,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,KAAK,CAAC,CAAA;AACvD,MAAA,IAAA,CAAK,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,IAAA,CAAK,QAAA,EAAW,SAAA,EAAW,KAAA,EAAO,IAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAChF;AAAA,EACF;AAAA,EAEQ,WAAW,UAAA,EAAoC;AACrD,IAAA,IAAI,KAAK,KAAA,KAAU,OAAA,IAAW,CAAC,IAAA,CAAK,UAAA,IAAc,KAAK,QAAA,EAAU;AACjE,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,iBAAiB,IAAA,CAAK,UAAU,EAAE,OAAA,EAAQ;AAClE,IAAA,MAAM,IAAA,GAAO,aAAa,IAAA,CAAK,GAAA,CAAI,iBAAiB,UAAU,CAAA,CAAE,SAAQ,GAAI,MAAA;AAC5E,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAChC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAChC,IAAA,IAAA,CAAK,KAAK,gBAAA,CAAoC,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACzE,MAAA,MAAM,OAAO,IAAA,CAAK,SAAA,CAAU,OAAO,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAC,CAAA;AACjD,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,OAAA,EAAQ;AACjC,MAAA,GAAA,CAAI,UAAU,MAAA,CAAO,UAAA,EAAY,CAAA,GAAI,EAAA,IAAM,IAAI,EAAE,CAAA;AACjD,MAAA,GAAA,CAAI,SAAA,CAAU,OAAO,WAAA,EAAa,UAAA,GAAa,MAAM,EAAA,IAAM,CAAA,KAAM,SAAS,KAAK,CAAA;AAAA,IACjF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,aAAA,GAAwB;AAC9B,IAAA,IAAI,IAAA,CAAK,UAAU,QAAA,IAAY,CAAC,KAAK,YAAA,CAAa,aAAa,GAAG,OAAO,EAAA;AACzE,IAAA,MAAM,IAAU,IAAA,CAAK,IAAA,IAAQ,EAAE,IAAA,EAAM,CAAA,EAAG,QAAQ,CAAA,EAAE;AAClD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA,KAAM,IAAA;AAClD,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAS,GAAI,IAAA,CAAK,EAAE,IAAI,CAAA;AACxC,MAAA,OAAO,CAAA;AAAA,sEAAA,EAC2D,MAAM,CAAA;AAAA;AAAA,wEAAA,EAEJ,OAAO,CAAA,CAAE,MAAM,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,iEAAA,EACxC,QAAA,KAAa,IAAI,CAAA,4BAAA,EAA+B,QAAQ,CAAA;AAAA,YAAA,CAAA;AAAA,IAEvH;AACA,IAAA,OAAO,CAAA;AAAA,oEAAA,EAC2D,OAAO,CAAA,CAAE,IAAI,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA;AAAA,sEAAA,EAE7B,OAAO,CAAA,CAAE,MAAM,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,UAAA,CAAA;AAAA,EAEvG;AAAA,EAEQ,WAAA,GAAoB;AAC1B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA,KAAM,IAAA;AAClD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,aAAA,CAAgC,oBAAoB,CAAA;AAC7E,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,aAAA,CAAgC,sBAAsB,CAAA;AAC9E,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,aAAA,CAAiC,wBAAwB,CAAA;AAClF,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,KAAA,EAAO;AAEvB,IAAA,MAAM,SAAS,MAAY;AACzB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,IAAK,CAAC,CAAC,CAAA;AACjE,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,IAAK,EAAE,CAAC,CAAA;AAChE,QAAA,MAAM,WAAW,MAAA,EAAQ,YAAA,CAAa,cAAc,CAAA,KAAM,SAAS,IAAA,GAAO,IAAA;AAC1E,QAAA,IAAA,GAAO,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,CAAC,CAAA;AAAA,MAC5D;AACA,MAAA,IAAA,CAAK,OAAA,CAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,IAC/B,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACxC,IAAA,KAAA,CAAM,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACvC,IAAA,MAAA,EAAQ,gBAAA,CAAiB,SAAS,MAAM;AACtC,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,YAAA,CAAa,cAAc,CAAA,KAAM,MAAA;AACrD,MAAA,MAAA,CAAO,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,CAAC,IAAI,CAAC,CAAA;AACjD,MAAA,MAAA,CAAO,WAAA,GAAc,CAAC,IAAA,GAAO,IAAA,GAAO,IAAA;AACpC,MAAA,MAAA,EAAO;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,MAAA,GAAe;AACrB,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,IAAA,CAAK,GAAA,EAAK,KAAK,IAAA,EAAM;AAAA,MACjD,QAAA,EAAU,IAAA,CAAK,KAAA,KAAU,QAAA,GAAW,KAAK,QAAA,GAAW,IAAA;AAAA,MACpD,YAAA,EAAc,IAAA,CAAK,KAAA,KAAU,UAAA,GAAa,KAAK,YAAA,GAAe,MAAA;AAAA,MAC9D,UAAA,EAAY,IAAA,CAAK,KAAA,KAAU,OAAA,GAAU,KAAK,UAAA,GAAa,IAAA;AAAA,MACvD,UAAU,IAAA,CAAK,KAAA,KAAU,UAAU,IAAA,CAAK,QAAA,IAAY,KAAK,SAAA,GAAY,IAAA;AAAA,MACrE,UAAA,EAAY,KAAK,eAAA,EAAgB;AAAA,MACjC,KAAA,sBAAW,IAAA;AAAK,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,IAAA,EAAK;AAElC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB;AAAA,MAC3C,IAAA,EAAM,KAAK,IAAA,CAAK,IAAA;AAAA,MAChB,KAAA,EAAO,KAAK,IAAA,CAAK,KAAA;AAAA,MACjB,GAAA,EAAK;AAAA,KACN,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA,IAAK,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAAA;AAChF,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,kBAAA,CAAmB,OAAA,EAAS;AAAA,MACtD,KAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,IAAA,CAAK,IAAA,CAAK,SAAA,GAAY,CAAA,OAAA,EAAU,MAAM,CAAA;AAAA;AAAA;AAAA;AAAA,6BAAA,EAIX,KAAK,UAAU,QAAQ,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAA,EAKxC,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,wCAAwC,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,MAAA,CAAQ,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC;AAAA;AAAA,UAAA,EAEjG,KAAA,CAAM,KAAA,CACL,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AAChB,MAAA,MAAM,KAAA,GAAQ,IAAA,CACX,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AAChB,QAAA,MAAM,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AAClB,QAAA,MAAM,GAAA,GAAM;AAAA,UACV,MAAA;AAAA,UACA,IAAA,CAAK,iBAAiB,EAAA,GAAK,KAAA;AAAA,UAC3B,IAAA,CAAK,UAAU,OAAA,GAAU,EAAA;AAAA,UACzB,IAAA,CAAK,aAAa,aAAA,GAAgB,EAAA;AAAA,UAClC,IAAA,CAAK,WAAW,WAAA,GAAc,EAAA;AAAA,UAC9B,IAAA,CAAK,UAAU,UAAA,GAAa;AAAA,SAC9B,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,cAAc,IAAA,CAAK,QAAA;AAC9D,QAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,WAAA,CAAY,IAAA,CAAK,KAAA,EAAO,aAAa,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA,CAAA;AACjF,QAAA,OAAO,2CAA2C,GAAG,CAAA;AAAA,4BAAA,EACzC,CAAC,CAAA,iBAAA,EAAoB,YAAY,CAAA,cAAA,EAAiB,KAAK,CAAA;AAAA,kCAAA,EACjD,IAAA,CAAK,QAAA,GAAW,UAAA,GAAa,EAAE,CAAA;AAAA,wCAAA,EACzB,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,uCAAA,EACf,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,CAAA;AAAA,2BAAA,CAAA;AAAA,MAEpD,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,MAAA,OAAO,gCAAgC,KAAK,CAAA,MAAA,CAAA;AAAA,IAC9C,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAC;AAAA;AAAA,QAAA,EAEX,IAAA,CAAK,eAAe;AAAA,YAAA,CAAA;AAG1B,IAAA,MAAM,OAAO,IAAA,CAAK,SAAA;AAClB,IAAA,IAAA,CAAK,KAAK,gBAAA,CAAoC,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC3E,MAAA,GAAA,CAAI,gBAAA,CAAiB,OAAA,EAAS,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAC,CAAC,CAAA;AAAA,IAC5E,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,KAAK,gBAAA,CAAoC,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACzE,MAAA,MAAM,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAC,CAAA;AACvC,MAAA,GAAA,CAAI,iBAAiB,OAAA,EAAS,MAAM,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AACrD,MAAA,IAAI,KAAK,KAAA,KAAU,OAAA,IAAW,KAAK,UAAA,IAAc,CAAC,KAAK,QAAA,EAAU;AAC/D,QAAA,GAAA,CAAI,gBAAA,CAAiB,cAAc,MAAM;AACvC,UAAA,IAAA,CAAK,YAAY,IAAA,CAAK,KAAA;AACtB,UAAA,IAAA,CAAK,UAAA,CAAW,KAAK,KAAK,CAAA;AAAA,QAC5B,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,WAAA,EAAY;AAEjB,IAAA,MAAM,aAAa,KAAA,CAAM,IAAA;AAAA,MACvB,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAoC,UAAU;AAAA,KAC1D;AACA,IAAA,MAAM,cAAc,UAAA,CAAW,SAAA;AAAA,MAC7B,CAAC,CAAA,KAAM,CAAA,CAAE,YAAA,CAAa,eAAe,CAAA,KAAM;AAAA,KAC7C;AACA,IAAA,MAAM,UAAA,GACJ,WAAA,KAAgB,EAAA,GAAK,WAAA,GAAc,UAAA,CAAW,UAAU,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,QAAQ,CAAA;AAC5E,IAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAO,EAAE,QAAA,GAAW,CAAA,KAAM,UAAA,GAAa,CAAA,GAAI,EAAG,CAAA;AAErE,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,EAAc,KAAA,KAAwB;AACvD,MAAA,IAAI,IAAI,IAAA,GAAO,KAAA;AACf,MAAA,OAAO,CAAA,IAAK,KAAK,CAAA,GAAI,UAAA,CAAW,UAAU,UAAA,CAAW,CAAC,CAAA,EAAG,QAAA,EAAU,CAAA,IAAK,KAAA;AACxE,MAAA,MAAM,MAAA,GAAS,WAAW,CAAC,CAAA;AAC3B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA,KAAO,CAAA,CAAE,WAAW,EAAG,CAAA;AAC3C,QAAA,MAAA,CAAO,QAAA,GAAW,CAAA;AAClB,QAAA,MAAA,CAAO,KAAA,EAAM;AAAA,MACf;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC5C,IAAA,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,CAAC,CAAA,KAAqB;AACrD,MAAA,MAAM,MAAA,GAAS,KAAK,IAAA,CAAK,aAAA;AACzB,MAAA,MAAM,MAAA,GACJ,MAAA,IAAU,MAAA,CAAO,OAAA,GAAU,UAAU,CAAA,GACjC,MAAA,GACC,CAAA,CAAE,MAAA,EAA+B,OAAA,GAAU,UAAU,CAAA,IAAK,IAAA;AAEjE,MAAA,MAAM,GAAA,GAAM,MAAA,GAAS,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,GAAI,EAAA;AAClD,MAAA,MAAM,MAAA,GAAiC;AAAA,QACrC,UAAA,EAAY,CAAA;AAAA,QACZ,SAAA,EAAW,EAAA;AAAA,QACX,SAAA,EAAW,CAAA;AAAA,QACX,OAAA,EAAS;AAAA,OACX;AACA,MAAA,IAAI,CAAA,CAAE,OAAO,MAAA,EAAQ;AACnB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,SAAA,CAAU,GAAA,KAAQ,KAAK,UAAA,GAAa,GAAA,EAAK,OAAO,CAAA,CAAE,GAAG,KAAK,CAAC,CAAA;AAAA,MAC7D,WAAW,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AAC7C,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAM,MAAA,GAAS,GAAA,KAAQ,EAAA,GAAK,UAAA,GAAa,GAAA;AACzC,QAAA,IAAI,UAAU,CAAA,EAAG;AACf,UAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA;AACvD,UAAA,IAAI,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,gBAAA,CAAiB,cAAc,MAAM;AACxC,MAAA,IAAI,KAAK,KAAA,KAAU,OAAA,IAAW,KAAK,UAAA,IAAc,CAAC,KAAK,QAAA,EAAU;AAC/D,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,QAAA,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF;;;ACreA,IAAI,OAAO,cAAA,KAAmB,WAAA,IAAe,CAAC,cAAA,CAAe,GAAA,CAAI,kBAAkB,CAAA,EAAG;AACpF,EAAA,cAAA,CAAe,MAAA,CAAO,oBAAoB,eAAe,CAAA;AAC3D","file":"index.js","sourcesContent":["import type { HijriCalendar, HijriDate } from \"@spezutil/hijri-core\";\n\nexport interface DayCell {\n hijri: HijriDate;\n gregorian: Date;\n inCurrentMonth: boolean;\n selected: boolean;\n disabled: boolean;\n isToday: boolean;\n rangeStart: boolean;\n rangeEnd: boolean;\n inRange: boolean;\n}\n\nexport interface MonthModel {\n year: number;\n month: number;\n weeks: DayCell[][];\n}\n\nexport interface BuildOptions {\n selected?: HijriDate | null;\n selectedList?: HijriDate[];\n rangeStart?: HijriDate | null;\n /** Effective end (committed end or hover preview); range band is drawn start..end inclusive of endpoints. */\n rangeEnd?: HijriDate | null;\n isDisabled?: (h: HijriDate, g: Date) => boolean;\n today?: Date;\n}\n\nexport function sameHijri(a: HijriDate, b: HijriDate): boolean {\n return a.year === b.year && a.month === b.month && a.day === b.day;\n}\n\nfunction addDaysUtc(date: Date, days: number): Date {\n return new Date(date.getTime() + days * 86400000);\n}\n\nexport function buildMonthModel(\n cal: HijriCalendar,\n view: { year: number; month: number },\n opts: BuildOptions\n): MonthModel {\n const firstGreg = cal.hijriToGregorian({ year: view.year, month: view.month, day: 1 });\n const startOffset = firstGreg.getUTCDay();\n const gridStart = addDaysUtc(firstGreg, -startOffset);\n const todayHijri = opts.today ? cal.gregorianToHijri(opts.today) : null;\n\n const startT = opts.rangeStart ? cal.hijriToGregorian(opts.rangeStart).getTime() : null;\n const endT = opts.rangeEnd ? cal.hijriToGregorian(opts.rangeEnd).getTime() : null;\n const lo = startT !== null && endT !== null ? Math.min(startT, endT) : null;\n const hi = startT !== null && endT !== null ? Math.max(startT, endT) : null;\n\n const weeks: DayCell[][] = [];\n for (let w = 0; w < 6; w++) {\n const week: DayCell[] = [];\n for (let d = 0; d < 7; d++) {\n const g = addDaysUtc(gridStart, w * 7 + d);\n const t = g.getTime();\n const hijri = cal.gregorianToHijri(g);\n const selected =\n (opts.selected ? sameHijri(hijri, opts.selected) : false) ||\n (opts.selectedList ? opts.selectedList.some((s) => sameHijri(hijri, s)) : false);\n week.push({\n hijri,\n gregorian: g,\n inCurrentMonth: hijri.year === view.year && hijri.month === view.month,\n selected,\n disabled: opts.isDisabled ? opts.isDisabled(hijri, g) : false,\n isToday: todayHijri ? sameHijri(hijri, todayHijri) : false,\n rangeStart: startT !== null && t === startT,\n rangeEnd: endT !== null && t === endT,\n inRange: lo !== null && hi !== null && t > lo && t < hi,\n });\n }\n weeks.push(week);\n }\n return { year: view.year, month: view.month, weeks };\n}\n","export type Mode = \"single\" | \"range\" | \"multiple\";\n\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport function isMode(v: string | null): Mode {\n return v === \"range\" || v === \"multiple\" ? v : \"single\";\n}\n\nexport function parseIsoList(v: string | null): string[] {\n if (!v) return [];\n return v\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => ISO_DATE.test(s));\n}\n\n","export interface Time {\n hour: number; // 0-23\n minute: number; // 0-59\n}\n\nexport type Meridiem = \"AM\" | \"PM\";\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, \"0\");\n}\n\nexport function parseTime(s: string | null): Time | null {\n if (!s) return null;\n const m = /^(\\d{1,2}):(\\d{2})$/.exec(s.trim());\n if (!m) return null;\n const hour = Number(m[1]);\n const minute = Number(m[2]);\n if (hour < 0 || hour > 23 || minute < 0 || minute > 59) return null;\n return { hour, minute };\n}\n\nexport function formatTime24(t: Time): string {\n return `${pad2(t.hour)}:${pad2(t.minute)}`;\n}\n\nexport function to12(hour: number): { hour12: number; meridiem: Meridiem } {\n const meridiem: Meridiem = hour < 12 ? \"AM\" : \"PM\";\n let h = hour % 12;\n if (h === 0) h = 12;\n return { hour12: h, meridiem };\n}\n\nexport function from12(hour12: number, meridiem: Meridiem): number {\n let h = hour12 % 12;\n if (meridiem === \"PM\") h += 12;\n return h;\n}\n\nexport function combineDateTime(dateIso: string, t: Time): string {\n return `${dateIso}T${formatTime24(t)}`;\n}\n\nexport function splitDateTime(value: string | null): {\n date: string | null;\n time: Time | null;\n} {\n if (!value) return { date: null, time: null };\n const [d, tt] = value.split(\"T\");\n return { date: d ?? null, time: tt ? parseTime(tt) : null };\n}\n","export const styles = `\n:host {\n --dtp-bg: #fff;\n --dtp-fg: #1a1a1a;\n --dtp-muted: #9aa0a6;\n --dtp-accent: #0b7d3e;\n --dtp-accent-fg: #fff;\n --dtp-radius: 8px;\n display: inline-block;\n font-family: system-ui, sans-serif;\n color: var(--dtp-fg);\n}\n.cal { background: var(--dtp-bg); border: 1px solid #e0e0e0; border-radius: var(--dtp-radius); padding: 8px; width: 280px; }\n.header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }\n.header button { background: none; border: none; cursor: pointer; font-size: 18px; padding: 4px 8px; border-radius: 6px; color: var(--dtp-fg); }\n.header button:hover { background: #f0f0f0; }\n.title { font-weight: 600; text-align: center; }\n.title small { display: block; font-weight: 400; color: var(--dtp-muted); font-size: 11px; }\n.grid { display: flex; flex-direction: column; gap: 2px; }\n.dow-row, .week { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }\n.dow { text-align: center; font-size: 11px; color: var(--dtp-muted); padding: 4px 0; }\n.cell { aspect-ratio: 1; border: none; background: none; cursor: pointer; border-radius: 6px; display: flex; flex-direction: column; align-items: center; justify-content: center; line-height: 1.1; color: var(--dtp-fg); }\n.cell:hover:not([disabled]) { background: #f0f0f0; }\n.cell .greg { font-size: 9px; color: var(--dtp-muted); }\n.cell.out { color: var(--dtp-muted); opacity: 0.5; }\n.cell.today { outline: 1px solid var(--dtp-accent); }\n.cell[aria-selected=\"true\"] { background: var(--dtp-accent); color: var(--dtp-accent-fg); }\n.cell[aria-selected=\"true\"] .greg { color: var(--dtp-accent-fg); }\n.cell[disabled] { cursor: not-allowed; opacity: 0.3; }\n.cell.in-range { background: color-mix(in srgb, var(--dtp-accent) 16%, transparent); border-radius: 0; }\n.cell.range-start { background: var(--dtp-accent); color: var(--dtp-accent-fg); border-top-right-radius: 0; border-bottom-right-radius: 0; }\n.cell.range-end { background: var(--dtp-accent); color: var(--dtp-accent-fg); border-top-left-radius: 0; border-bottom-left-radius: 0; }\n.cell.range-start .greg, .cell.range-end .greg { color: var(--dtp-accent-fg); }\n.time-row { display: flex; align-items: center; gap: 4px; margin-top: 8px; justify-content: center; }\n.time-row input { width: 44px; text-align: center; padding: 4px; border: 1px solid #e0e0e0; border-radius: 6px; font: inherit; }\n.time-row button { border: 1px solid var(--dtp-accent); background: none; color: var(--dtp-accent); border-radius: 6px; padding: 4px 8px; cursor: pointer; font: inherit; }\n.time-row button[aria-pressed=\"true\"] { background: var(--dtp-accent); color: var(--dtp-accent-fg); }\n:host([dir=\"rtl\"]) .cal { direction: rtl; }\n`;\n","import {\n createCalendar,\n formatHijri,\n translitMonthNames,\n weekdayNames,\n type HijriCalendar,\n type HijriDate,\n} from \"@spezutil/hijri-core\";\nimport { buildMonthModel, sameHijri, type DayCell } from \"./render\";\nimport { isMode, parseIsoList, type Mode } from \"./selection\";\nimport {\n combineDateTime,\n from12,\n splitDateTime,\n to12,\n type Time,\n} from \"./time\";\nimport { styles } from \"./styles\";\n\nexport interface SingleChangeDetail {\n mode: \"single\";\n hijri: HijriDate;\n gregorian: string;\n time?: Time;\n}\nexport interface RangeEndpoint {\n hijri: HijriDate;\n gregorian: string;\n}\nexport interface RangeChangeDetail {\n mode: \"range\";\n start: RangeEndpoint | null;\n end: RangeEndpoint | null;\n}\nexport interface MultipleChangeDetail {\n mode: \"multiple\";\n hijri: HijriDate[];\n gregorian: string[];\n}\nexport type ChangeDetail =\n | SingleChangeDetail\n | RangeChangeDetail\n | MultipleChangeDetail;\n\nconst ISO = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nfunction parseIsoUtc(s: string | null): Date | null {\n if (!s || !ISO.test(s)) return null;\n const [y, m, d] = s.split(\"-\").map(Number);\n return new Date(Date.UTC(y!, m! - 1, d!));\n}\n\nfunction toIso(date: Date): string {\n return date.toISOString().slice(0, 10);\n}\n\nexport class HijriDatepicker extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\n \"value\",\n \"start\",\n \"end\",\n \"min\",\n \"max\",\n \"dir\",\n \"disabled-weekdays\",\n \"mode\",\n \"enable-time\",\n \"time-format\",\n ];\n }\n\n private cal: HijriCalendar = createCalendar();\n private root: ShadowRoot;\n private view: { year: number; month: number };\n\n private _mode: Mode = \"single\";\n private selected: HijriDate | null = null; // single\n private selectedList: HijriDate[] = []; // multiple\n private rangeStart: HijriDate | null = null;\n private rangeEnd: HijriDate | null = null;\n private hoverDate: HijriDate | null = null;\n private time: Time | null = null; // single + enable-time\n\n private lastCells: DayCell[] = [];\n private suppress = false;\n\n public isDateDisabled?: (hijri: HijriDate, gregorian: Date) => boolean;\n\n private reflect(name: string, v: string | null): void {\n if (v === null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n }\n\n get value(): string | null { return this.getAttribute(\"value\"); }\n set value(v: string | null) { this.reflect(\"value\", v); }\n get start(): string | null { return this.getAttribute(\"start\"); }\n set start(v: string | null) { this.reflect(\"start\", v); }\n get end(): string | null { return this.getAttribute(\"end\"); }\n set end(v: string | null) { this.reflect(\"end\", v); }\n get mode(): string | null { return this.getAttribute(\"mode\"); }\n set mode(v: string | null) { this.reflect(\"mode\", v); }\n get min(): string | null { return this.getAttribute(\"min\"); }\n set min(v: string | null) { this.reflect(\"min\", v); }\n get max(): string | null { return this.getAttribute(\"max\"); }\n set max(v: string | null) { this.reflect(\"max\", v); }\n get timeFormat(): string | null { return this.getAttribute(\"time-format\"); }\n set timeFormat(v: string | null) { this.reflect(\"time-format\", v); }\n get disabledWeekdays(): string | null { return this.getAttribute(\"disabled-weekdays\"); }\n set disabledWeekdays(v: string | null) { this.reflect(\"disabled-weekdays\", v); }\n get enableTime(): boolean { return this.hasAttribute(\"enable-time\"); }\n set enableTime(v: boolean) {\n if (v) this.setAttribute(\"enable-time\", \"\");\n else this.removeAttribute(\"enable-time\");\n }\n\n constructor() {\n super();\n this.root = this.attachShadow({ mode: \"open\" });\n const todayHijri = this.cal.gregorianToHijri(new Date());\n this.view = { year: todayHijri.year, month: todayHijri.month };\n }\n\n connectedCallback(): void {\n this.syncFromAttrs();\n this.render();\n }\n\n attributeChangedCallback(): void {\n if (!this.root || this.suppress) return;\n this.syncFromAttrs();\n this.render();\n }\n\n private g2h(d: Date): HijriDate {\n return this.cal.gregorianToHijri(d);\n }\n\n private h2iso(h: HijriDate): string {\n return toIso(this.cal.hijriToGregorian(h));\n }\n\n private applyAttrs(fn: () => void): void {\n this.suppress = true;\n try {\n fn();\n } finally {\n this.suppress = false;\n }\n }\n\n private syncFromAttrs(): void {\n this._mode = isMode(this.getAttribute(\"mode\"));\n if (this._mode === \"range\") {\n const s = parseIsoUtc(this.getAttribute(\"start\"));\n const e = parseIsoUtc(this.getAttribute(\"end\"));\n this.rangeStart = s ? this.g2h(s) : null;\n this.rangeEnd = e ? this.g2h(e) : null;\n this.hoverDate = null;\n if (this.rangeStart) this.view = { year: this.rangeStart.year, month: this.rangeStart.month };\n } else if (this._mode === \"multiple\") {\n const isos = parseIsoList(this.getAttribute(\"value\"));\n this.selectedList = isos\n .map((iso) => parseIsoUtc(iso))\n .filter((d): d is Date => d !== null)\n .map((d) => this.g2h(d));\n const first = this.selectedList[0];\n if (first) this.view = { year: first.year, month: first.month };\n } else {\n const { date, time } = splitDateTime(this.getAttribute(\"value\"));\n const d = parseIsoUtc(date);\n this.selected = d ? this.g2h(d) : null;\n this.time = time ?? this.time;\n if (this.selected) this.view = { year: this.selected.year, month: this.selected.month };\n }\n }\n\n private buildDisabledFn(): (h: HijriDate, g: Date) => boolean {\n const min = parseIsoUtc(this.getAttribute(\"min\"));\n const max = parseIsoUtc(this.getAttribute(\"max\"));\n const dowAttr = this.getAttribute(\"disabled-weekdays\");\n const disabledDows = dowAttr ? dowAttr.split(\",\").map((n) => Number(n.trim())) : [];\n return (h, g) => {\n if (min && g.getTime() < min.getTime()) return true;\n if (max && g.getTime() > max.getTime()) return true;\n // weekday numbers are UTC-based (0=Sunday..6=Saturday)\n if (disabledDows.includes(g.getUTCDay())) return true;\n if (this.isDateDisabled && this.isDateDisabled(h, g)) return true;\n return false;\n };\n }\n\n private navigate(delta: number): void {\n let { year, month } = this.view;\n month += delta;\n if (month < 1) {\n month = 12;\n year -= 1;\n } else if (month > 12) {\n month = 1;\n year += 1;\n }\n this.view = { year, month };\n this.render();\n }\n\n private emit(detail: ChangeDetail): void {\n this.dispatchEvent(\n new CustomEvent(\"change\", { bubbles: true, composed: true, detail })\n );\n }\n\n private select(cell: DayCell): void {\n if (cell.disabled) return;\n if (this._mode === \"range\") return this.selectRange(cell);\n if (this._mode === \"multiple\") return this.selectMultiple(cell);\n return this.selectSingle(cell);\n }\n\n private selectSingle(cell: DayCell): void {\n this.selected = cell.hijri;\n const iso = toIso(cell.gregorian);\n const value = this.time ? combineDateTime(iso, this.time) : iso;\n this.applyAttrs(() => this.setAttribute(\"value\", value));\n this.render();\n this.emit({\n mode: \"single\",\n hijri: cell.hijri,\n gregorian: value,\n ...(this.time ? { time: this.time } : {}),\n });\n }\n\n private selectMultiple(cell: DayCell): void {\n const idx = this.selectedList.findIndex((h) => sameHijri(h, cell.hijri));\n if (idx >= 0) this.selectedList.splice(idx, 1);\n else this.selectedList.push(cell.hijri);\n this.selectedList.sort(\n (a, b) => this.cal.hijriToGregorian(a).getTime() - this.cal.hijriToGregorian(b).getTime()\n );\n const isos = this.selectedList.map((h) => this.h2iso(h));\n this.applyAttrs(() => {\n if (isos.length) this.setAttribute(\"value\", isos.join(\",\"));\n else this.removeAttribute(\"value\");\n });\n this.render();\n this.emit({ mode: \"multiple\", hijri: this.selectedList.slice(), gregorian: isos });\n }\n\n private selectRange(cell: DayCell): void {\n const startingNew = !this.rangeStart || (this.rangeStart && this.rangeEnd);\n if (startingNew) {\n this.rangeStart = cell.hijri;\n this.rangeEnd = null;\n this.hoverDate = null;\n this.applyAttrs(() => {\n this.setAttribute(\"start\", toIso(cell.gregorian));\n this.removeAttribute(\"end\");\n });\n this.render();\n return; // no change event until the range is complete\n }\n // complete the range, normalizing order\n const startG = this.cal.hijriToGregorian(this.rangeStart!).getTime();\n if (cell.gregorian.getTime() < startG) {\n this.rangeEnd = this.rangeStart;\n this.rangeStart = cell.hijri;\n } else {\n this.rangeEnd = cell.hijri;\n }\n const startIso = this.h2iso(this.rangeStart!);\n const endIso = this.h2iso(this.rangeEnd!);\n this.applyAttrs(() => {\n this.setAttribute(\"start\", startIso);\n this.setAttribute(\"end\", endIso);\n });\n this.render();\n this.emit({\n mode: \"range\",\n start: { hijri: this.rangeStart!, gregorian: startIso },\n end: { hijri: this.rangeEnd!, gregorian: endIso },\n });\n }\n\n private setTime(t: Time): void {\n this.time = t;\n if (this.selected) {\n const iso = this.h2iso(this.selected);\n const value = combineDateTime(iso, t);\n this.applyAttrs(() => this.setAttribute(\"value\", value));\n this.emit({ mode: \"single\", hijri: this.selected!, gregorian: value, time: t });\n }\n }\n\n private paintRange(hoverHijri: HijriDate | null): void {\n if (this._mode !== \"range\" || !this.rangeStart || this.rangeEnd) return;\n const startT = this.cal.hijriToGregorian(this.rangeStart).getTime();\n const endT = hoverHijri ? this.cal.hijriToGregorian(hoverHijri).getTime() : startT;\n const lo = Math.min(startT, endT);\n const hi = Math.max(startT, endT);\n this.root.querySelectorAll<HTMLButtonElement>(\"[data-i]\").forEach((btn) => {\n const cell = this.lastCells[Number(btn.dataset.i)];\n if (!cell) return;\n const t = cell.gregorian.getTime();\n btn.classList.toggle(\"in-range\", t > lo && t < hi);\n btn.classList.toggle(\"range-end\", hoverHijri ? t === hi && t !== startT : false);\n });\n }\n\n private renderTimeRow(): string {\n if (this._mode !== \"single\" || !this.hasAttribute(\"enable-time\")) return \"\";\n const t: Time = this.time ?? { hour: 0, minute: 0 };\n const is12 = this.getAttribute(\"time-format\") === \"12\";\n if (is12) {\n const { hour12, meridiem } = to12(t.hour);\n return `<div class=\"time-row\" part=\"time\">\n <input data-time=\"hour\" type=\"number\" min=\"1\" max=\"12\" value=\"${hour12}\" aria-label=\"Hour\" />\n <span>:</span>\n <input data-time=\"minute\" type=\"number\" min=\"0\" max=\"59\" value=\"${String(t.minute).padStart(2, \"0\")}\" aria-label=\"Minute\" />\n <button type=\"button\" data-time=\"meridiem\" aria-pressed=\"${meridiem === \"PM\"}\" aria-label=\"Toggle AM/PM\">${meridiem}</button>\n </div>`;\n }\n return `<div class=\"time-row\" part=\"time\">\n <input data-time=\"hour\" type=\"number\" min=\"0\" max=\"23\" value=\"${String(t.hour).padStart(2, \"0\")}\" aria-label=\"Hour\" />\n <span>:</span>\n <input data-time=\"minute\" type=\"number\" min=\"0\" max=\"59\" value=\"${String(t.minute).padStart(2, \"0\")}\" aria-label=\"Minute\" />\n </div>`;\n }\n\n private wireTimeRow(): void {\n const is12 = this.getAttribute(\"time-format\") === \"12\";\n const hourEl = this.root.querySelector<HTMLInputElement>('[data-time=\"hour\"]');\n const minEl = this.root.querySelector<HTMLInputElement>('[data-time=\"minute\"]');\n const ampmEl = this.root.querySelector<HTMLButtonElement>('[data-time=\"meridiem\"]');\n if (!hourEl || !minEl) return;\n\n const commit = (): void => {\n const minute = Math.max(0, Math.min(59, Number(minEl.value) || 0));\n let hour: number;\n if (is12) {\n const h12 = Math.max(1, Math.min(12, Number(hourEl.value) || 12));\n const meridiem = ampmEl?.getAttribute(\"aria-pressed\") === \"true\" ? \"PM\" : \"AM\";\n hour = from12(h12, meridiem);\n } else {\n hour = Math.max(0, Math.min(23, Number(hourEl.value) || 0));\n }\n this.setTime({ hour, minute });\n };\n\n hourEl.addEventListener(\"change\", commit);\n minEl.addEventListener(\"change\", commit);\n ampmEl?.addEventListener(\"click\", () => {\n const isPm = ampmEl.getAttribute(\"aria-pressed\") === \"true\";\n ampmEl.setAttribute(\"aria-pressed\", String(!isPm));\n ampmEl.textContent = !isPm ? \"PM\" : \"AM\";\n commit();\n });\n }\n\n private render(): void {\n const model = buildMonthModel(this.cal, this.view, {\n selected: this._mode === \"single\" ? this.selected : null,\n selectedList: this._mode === \"multiple\" ? this.selectedList : undefined,\n rangeStart: this._mode === \"range\" ? this.rangeStart : null,\n rangeEnd: this._mode === \"range\" ? this.rangeEnd ?? this.hoverDate : null,\n isDisabled: this.buildDisabledFn(),\n today: new Date(),\n });\n this.lastCells = model.weeks.flat();\n\n const headerGreg = this.cal.hijriToGregorian({\n year: this.view.year,\n month: this.view.month,\n day: 1,\n });\n const title = `${translitMonthNames[this.view.month - 1] ?? \"\"} ${this.view.year}`;\n const subtitle = headerGreg.toLocaleDateString(\"en-US\", {\n month: \"long\",\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n\n this.root.innerHTML = `<style>${styles}</style>\n <div class=\"cal\" role=\"application\" aria-label=\"Hijri date picker\">\n <div class=\"header\">\n <button type=\"button\" part=\"nav-prev\" aria-label=\"Previous month\" data-nav=\"-1\">‹</button>\n <div class=\"title\">${title}<small>${subtitle}</small></div>\n <button type=\"button\" part=\"nav-next\" aria-label=\"Next month\" data-nav=\"1\">›</button>\n </div>\n <div class=\"grid\" role=\"grid\">\n <div class=\"dow-row\" role=\"row\">\n ${weekdayNames.map((d) => `<div class=\"dow\" role=\"columnheader\">${d.slice(0, 2)}</div>`).join(\"\")}\n </div>\n ${model.weeks\n .map((week, w) => {\n const cells = week\n .map((cell, d) => {\n const i = w * 7 + d;\n const cls = [\n \"cell\",\n cell.inCurrentMonth ? \"\" : \"out\",\n cell.isToday ? \"today\" : \"\",\n cell.rangeStart ? \"range-start\" : \"\",\n cell.rangeEnd ? \"range-end\" : \"\",\n cell.inRange ? \"in-range\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n const ariaSelected = cell.selected || cell.rangeStart || cell.rangeEnd;\n const label = `${formatHijri(cell.hijri, \"D MMMM YYYY\")} (${toIso(cell.gregorian)})`;\n return `<button type=\"button\" part=\"day\" class=\"${cls}\" role=\"gridcell\"\n data-i=\"${i}\" aria-selected=\"${ariaSelected}\" aria-label=\"${label}\"\n tabindex=\"-1\" ${cell.disabled ? \"disabled\" : \"\"}>\n <span class=\"hijri\">${cell.hijri.day}</span>\n <span class=\"greg\">${cell.gregorian.getUTCDate()}</span>\n </button>`;\n })\n .join(\"\");\n return `<div class=\"week\" role=\"row\">${cells}</div>`;\n })\n .join(\"\")}\n </div>\n ${this.renderTimeRow()}\n </div>`;\n\n const flat = this.lastCells;\n this.root.querySelectorAll<HTMLButtonElement>(\"[data-nav]\").forEach((btn) => {\n btn.addEventListener(\"click\", () => this.navigate(Number(btn.dataset.nav)));\n });\n this.root.querySelectorAll<HTMLButtonElement>(\"[data-i]\").forEach((btn) => {\n const cell = flat[Number(btn.dataset.i)]!;\n btn.addEventListener(\"click\", () => this.select(cell));\n if (this._mode === \"range\" && this.rangeStart && !this.rangeEnd) {\n btn.addEventListener(\"mouseenter\", () => {\n this.hoverDate = cell.hijri;\n this.paintRange(cell.hijri);\n });\n }\n });\n\n this.wireTimeRow();\n\n const dayButtons = Array.from(\n this.root.querySelectorAll<HTMLButtonElement>(\"[data-i]\")\n );\n const selectedIdx = dayButtons.findIndex(\n (b) => b.getAttribute(\"aria-selected\") === \"true\"\n );\n const initialIdx =\n selectedIdx !== -1 ? selectedIdx : dayButtons.findIndex((b) => !b.disabled);\n dayButtons.forEach((b, i) => (b.tabIndex = i === initialIdx ? 0 : -1));\n\n const moveFocus = (from: number, delta: number): void => {\n let i = from + delta;\n while (i >= 0 && i < dayButtons.length && dayButtons[i]?.disabled) i += delta;\n const target = dayButtons[i];\n if (target) {\n dayButtons.forEach((b) => (b.tabIndex = -1));\n target.tabIndex = 0;\n target.focus();\n }\n };\n\n const grid = this.root.querySelector(\".grid\") as HTMLElement;\n grid.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n const active = this.root.activeElement as HTMLElement | null;\n const fromEl = (\n active && active.matches?.(\"[data-i]\")\n ? active\n : (e.target as HTMLElement | null)?.closest?.(\"[data-i]\") ?? null\n ) as HTMLButtonElement | null;\n const idx = fromEl ? dayButtons.indexOf(fromEl) : -1;\n const deltas: Record<string, number> = {\n ArrowRight: 1,\n ArrowLeft: -1,\n ArrowDown: 7,\n ArrowUp: -7,\n };\n if (e.key in deltas) {\n e.preventDefault();\n moveFocus(idx === -1 ? initialIdx : idx, deltas[e.key] ?? 0);\n } else if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n const useIdx = idx === -1 ? initialIdx : idx;\n if (useIdx >= 0) {\n const cell = flat[Number(dayButtons[useIdx]?.dataset.i)];\n if (cell) this.select(cell);\n }\n }\n });\n\n grid.addEventListener(\"mouseleave\", () => {\n if (this._mode === \"range\" && this.rangeStart && !this.rangeEnd) {\n this.hoverDate = null;\n this.paintRange(null);\n }\n });\n }\n}\n","import { HijriDatepicker } from \"./hijri-datepicker\";\n\nexport { HijriDatepicker } from \"./hijri-datepicker\";\nexport type {\n ChangeDetail,\n SingleChangeDetail,\n RangeChangeDetail,\n MultipleChangeDetail,\n RangeEndpoint,\n} from \"./hijri-datepicker\";\nexport { buildMonthModel } from \"./render\";\nexport type { DayCell, MonthModel } from \"./render\";\n\nif (typeof customElements !== \"undefined\" && !customElements.get(\"hijri-datepicker\")) {\n customElements.define(\"hijri-datepicker\", HijriDatepicker);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hijri-datepicker\": HijriDatepicker;\n }\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@spezutil/hijri-datepicker",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Zero-dependency Hijri date picker Web Component.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/hatimmnomani/SpezUtil.git",
|
|
12
|
+
"directory": "packages/hijri-datepicker"
|
|
13
|
+
},
|
|
14
|
+
"type": "module",
|
|
15
|
+
"sideEffects": [
|
|
16
|
+
"**/*.css",
|
|
17
|
+
"./dist/index.js",
|
|
18
|
+
"./dist/index.cjs"
|
|
19
|
+
],
|
|
20
|
+
"main": "./dist/index.cjs",
|
|
21
|
+
"module": "./dist/index.js",
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"import": "./dist/index.js",
|
|
27
|
+
"require": "./dist/index.cjs"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist"
|
|
32
|
+
],
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@spezutil/hijri-core": "0.1.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"jsdom": "^25.0.0",
|
|
38
|
+
"tsup": "^8.3.0",
|
|
39
|
+
"typescript": "^5.6.0",
|
|
40
|
+
"vitest": "^2.1.0"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsup",
|
|
44
|
+
"test": "vitest run",
|
|
45
|
+
"lint": "tsc --noEmit"
|
|
46
|
+
}
|
|
47
|
+
}
|