@particle-academy/react-fancy 5.56.0 → 5.58.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/CHANGELOG.md +54 -0
- package/dist/{chunk-XO4UWQCU.cjs → chunk-4DL2U23D.cjs} +233 -77
- package/dist/chunk-4DL2U23D.cjs.map +1 -0
- package/dist/{chunk-WUG646R4.cjs → chunk-IB673TEG.cjs} +39 -5
- package/dist/chunk-IB673TEG.cjs.map +1 -0
- package/dist/{chunk-SFJ5WOX5.js → chunk-MLZGGAXQ.js} +233 -77
- package/dist/chunk-MLZGGAXQ.js.map +1 -0
- package/dist/{chunk-KUJ5XRBD.js → chunk-YUNOVQQJ.js} +39 -5
- package/dist/chunk-YUNOVQQJ.js.map +1 -0
- package/dist/index.cjs +4 -4
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/inputs.cjs +2 -2
- package/dist/inputs.d.cts +1 -1
- package/dist/inputs.d.ts +1 -1
- package/dist/inputs.js +1 -1
- package/dist/multi-switch.cjs +2 -2
- package/dist/multi-switch.d.cts +15 -3
- package/dist/multi-switch.d.ts +15 -3
- package/dist/multi-switch.js +1 -1
- package/dist/time-grid.cjs +2 -2
- package/dist/time-grid.d.cts +8 -0
- package/dist/time-grid.d.ts +8 -0
- package/dist/time-grid.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-KUJ5XRBD.js.map +0 -1
- package/dist/chunk-SFJ5WOX5.js.map +0 -1
- package/dist/chunk-WUG646R4.cjs.map +0 -1
- package/dist/chunk-XO4UWQCU.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/TimeGrid/TimeGrid.selection.ts","../src/components/TimeGrid/TypedTimeGrid.tsx","../src/components/TimeGrid/TimeGrid.tsx"],"names":["rEnd","memo","TypedRow","jsx","CellChunk","forwardRef","TypedTimeGrid","useId","useRef","useMemo","composeRefs","useState","useCallback","useLayoutEffect","flushSync","useEffect","jsxs","cn"],"mappings":";;;;;;;;;AAiBO,SAAS,gBAAA,CACd,KAAA,EACA,CAAA,EACA,CAAA,EACA,KAAA,EACmB;AACnB,EAAA,IAAI,UAAU,QAAA,EAAU;AACtB,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,KAAA,GAAQ,CAAA,CAAE,CAAA;AAC3B,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,KAAA,GAAQ,CAAA,CAAE,CAAA;AAC3B,IAAA,OAAO,EAAA,IAAM,KACT,EAAE,KAAA,EAAO,UAAU,IAAA,EAAM,EAAE,GAAG,CAAA,CAAE,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA,IAAK,EAAA,EAAI,EAAE,GAAG,CAAA,CAAE,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA,IAAI,GACpE,EAAE,OAAO,QAAA,EAAU,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,CAAE,GAAE,EAAG,EAAA,EAAI,EAAE,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,CAAE,GAAE,EAAE;AAAA,EAC1E;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IACrB,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IACrB,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IACrB,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,CAAA,EAAG,EAAE,CAAC;AAAA,GACvB;AACF;AAGO,SAAS,UAAA,CACd,GAAA,EACA,CAAA,EACA,KAAA,EACyB;AACzB,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,IAAI,GAAA,CAAI,UAAU,WAAA,EAAa;AAC7B,IAAA,OAAO,CAAA,IAAK,GAAA,CAAI,EAAA,IAAM,CAAA,IAAK,GAAA,CAAI,EAAA,GAAK,CAAC,GAAA,CAAI,EAAA,EAAI,GAAA,CAAI,EAAE,CAAA,GAAI,IAAA;AAAA,EACzD;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,GAAA;AACrB,EAAA,IAAI,IAAI,IAAA,CAAK,CAAA,IAAK,CAAA,GAAI,EAAA,CAAG,GAAG,OAAO,IAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,CAAA,KAAM,IAAA,CAAK,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA;AACtC,EAAA,MAAM,MAAM,CAAA,KAAM,EAAA,CAAG,CAAA,GAAI,EAAA,CAAG,IAAI,KAAA,GAAQ,CAAA;AACxC,EAAA,OAAO,KAAA,IAAS,GAAA,GAAM,CAAC,KAAA,EAAO,GAAG,CAAA,GAAI,IAAA;AACvC;AAGO,SAAS,eAAA,CACd,GAAA,EACA,KAAA,EACA,KAAA,EACiB;AACjB,EAAA,MAAM,MAAuB,EAAC;AAC9B,EAAA,IAAI,CAAC,KAAK,OAAO,GAAA;AACjB,EAAA,MAAM,QAAQ,GAAA,CAAI,KAAA,KAAU,cAAc,GAAA,CAAI,EAAA,GAAK,IAAI,IAAA,CAAK,CAAA;AAC5D,EAAA,MAAM,MAAM,GAAA,CAAI,KAAA,KAAU,cAAc,GAAA,CAAI,EAAA,GAAK,IAAI,EAAA,CAAG,CAAA;AACxD,EAAA,KAAA,IAAS,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAG,GAAG,GAAG,CAAA,EAAA,EAAK;AACnE,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA;AACpC,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,KAAA,IAAS,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAC,CAAA,EAAG,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,EAAG,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAA,EAAA,MAAS,IAAA,CAAK,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA;AAAA,EAC5F;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,aAAA,CACd,GACA,CAAA,EACS;AACT,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAC5B,EAAA,IAAI,CAAA,CAAE,KAAA,KAAU,WAAA,IAAe,CAAA,CAAE,UAAU,WAAA,EAAa;AACtD,IAAA,OAAO,CAAA,CAAE,EAAA,KAAO,CAAA,CAAE,EAAA,IAAM,EAAE,EAAA,KAAO,CAAA,CAAE,EAAA,IAAM,CAAA,CAAE,EAAA,KAAO,CAAA,CAAE,EAAA,IAAM,CAAA,CAAE,OAAO,CAAA,CAAE,EAAA;AAAA,EACvE;AACA,EAAA,IAAI,CAAA,CAAE,KAAA,KAAU,QAAA,IAAY,CAAA,CAAE,UAAU,QAAA,EAAU;AAChD,IAAA,OAAO,CAAA,CAAE,KAAK,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA,IAAK,CAAA,CAAE,IAAA,CAAK,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,CAAE,EAAA,CAAG,MAAM,CAAA,CAAE,EAAA,CAAG,KAAK,CAAA,CAAE,EAAA,CAAG,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,CAAA;AAAA,EAChG;AACA,EAAA,OAAO,KAAA;AACT;AAuBO,SAAS,aACd,KAAA,EACA,MAAA,EACA,QACA,KAAA,EACA,KAAA,EACA,YACA,MAAA,EACe;AACf,EAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,KAAA,EAAO,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAC/D,EAAA,IAAI,MAAA,KAAW,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,SAAA,EAAW,OAAA,EAAS,EAAC,EAAE;AAElF,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,SAAA,EAAW,KAAA,EAAO,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,EAAE,GAAG,CAAA,EAAE,KAAM,UAAA,CAAW,CAAA,EAAG,CAAC,CAAC,CAAA;AAC9F,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,SAAA,EAAW,OAAA,EAAQ;AACjF,EAAA,IAAI,MAAA,KAAW,QAAA,IAAY,UAAA,CAAW,MAAA,CAAO,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAQ;AAE5F,EAAA,IAAI,UAAU,QAAA,EAAU;AACtB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,CAAA,GAAI,KAAA,GAAQ,MAAA,CAAO,CAAA;AACrC,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,CAAA,GAAI,KAAA,GAAQ,MAAA,CAAO,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,EAAA,IAAM,EAAA,GAAK,CAAA,GAAI,EAAA;AAC5B,IAAA,IAAI,IAAA,GAAO,EAAA;AACX,IAAA,KAAA,IAAS,CAAA,GAAI,EAAA,GAAK,IAAA,EAAM,IAAA,GAAO,CAAA,GAAI,KAAK,EAAA,GAAK,CAAA,IAAK,EAAA,EAAI,CAAA,IAAK,IAAA,EAAM;AAC/D,MAAA,IAAI,UAAA,CAAW,KAAK,KAAA,CAAM,CAAA,GAAI,KAAK,CAAA,EAAG,CAAA,GAAI,KAAK,CAAA,EAAG;AAClD,MAAA,IAAA,GAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA,GAAM,EAAE,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,OAAO,KAAK,CAAA,EAAG,CAAA,EAAG,IAAA,GAAO,KAAA,EAAM;AAC3D,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,gBAAA,CAAiB,UAAU,MAAA,EAAQ,GAAA,EAAK,KAAK,CAAA,EAAG,OAAA,EAAQ;AAAA,EAC9F;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,IAAK,MAAA,CAAO,IAAI,CAAA,GAAI,EAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,IAAK,MAAA,CAAO,IAAI,CAAA,GAAI,EAAA;AACzC,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,EAAWA,KAAAA,KAAiB;AAC9C,IAAA,KAAA,IAAS,CAAA,GAAI,MAAA,CAAO,CAAA,EAAG,KAAA,GAAQ,CAAA,GAAI,KAAKA,KAAAA,GAAO,CAAA,IAAKA,KAAAA,EAAM,CAAA,IAAK,KAAA,EAAO;AACpE,MAAA,IAAI,UAAA,CAAW,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO,IAAA;AAAA,IAC/B;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,IAAI,OAAO,MAAA,CAAO,CAAA;AAClB,EAAA,IAAI,UAAA,CAAW,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA,EAAG;AAC9B,IAAA,IAAA,GAAO,MAAA,CAAO,CAAA;AACd,IAAA,KAAA,IAAS,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,KAAA,EAAO,KAAA,GAAQ,CAAA,GAAI,CAAA,IAAK,MAAA,CAAO,CAAA,GAAI,CAAA,IAAK,MAAA,CAAO,CAAA,EAAG,KAAK,KAAA,EAAO;AACpF,MAAA,IAAI,UAAA,CAAW,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG;AAC7B,MAAA,IAAA,GAAO,CAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,IAAI,OAAO,MAAA,CAAO,CAAA;AAClB,EAAA,KAAA,IAAS,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,KAAA,EAAO,KAAA,GAAQ,CAAA,GAAI,CAAA,IAAK,MAAA,CAAO,CAAA,GAAI,CAAA,IAAK,MAAA,CAAO,CAAA,EAAG,KAAK,KAAA,EAAO;AACpF,IAAA,IAAI,UAAA,CAAW,CAAA,EAAG,IAAI,CAAA,EAAG;AACzB,IAAA,IAAA,GAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,SAAA,EAAW,gBAAA,CAAiB,WAAA,EAAa,MAAA,EAAQ,EAAE,GAAG,IAAA,EAAM,CAAA,EAAG,IAAA,EAAK,EAAG,KAAK,CAAA;AAAA,IAC5E;AAAA,GACF;AACF;AChIA,IAAM,SAAA,GAA0C;AAAA,EAC9C,MAAA,EAAQ,eAAA;AAAA,EACR,OAAA,EAAS,gBAAA;AAAA,EACT,GAAA,EAAK,YAAA;AAAA,EACL,IAAA,EAAM,aAAA;AAAA,EACN,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,eAAA;AAAA,EACR,IAAA,EAAM,aAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAGA,IAAM,YAAA,GACJ,mIAAA;AAEF,IAAM,SAAA,GAAY,oEAAA;AAClB,IAAM,YAAA,GAAe,8DAAA;AACrB,IAAM,aAAA,GAAgB,+BAAA;AAEtB,IAAM,aAAA,GACJ,6MAAA;AAEF,IAAM,WAAA,GACJ,2JAAA;AAEF,IAAM,QAAA,GACJ,wJAAA;AAEF,IAAM,UAAA,GACJ,0LAAA;AACF,IAAM,UAAA,GACJ,2LAAA;AACF,IAAM,YAAA,GACJ,gJAAA;AAEF,IAAM,OAAA,GACJ,gUAAA;AAMF,SAAS,KAAA,GAAiB;AACxB,EAAA,IAAI;AACF,IAAA,OAAO,OAAA,CAAQ,IAAI,QAAA,KAAa,YAAA;AAAA,EAClC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,IAAM,QAAQ,EAAC;AAEf,IAAM,oBAAA,GAAuB,GAAA;AAC7B,IAAM,mBAAA,GAAsB,EAAA;AAE5B,IAAM,KAAA,GAAQ,EAAA;AACd,IAAM,YAAA,GAAe,KAAA;AACrB,IAAM,SAAA,GAAY,EAAE,eAAA,EAAiB,CAAA,EAAE;AACvC,IAAM,YAAA,uBAAmB,GAAA,EAAY;AACrC,IAAI,cAAA,GAAiB,KAAA;AAiBrB,IAAM,SAAA,GAAY,CAAC,MAAA,EAAgB,CAAA,EAAW,CAAA,KAAc,GAAG,MAAM,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAE/E,SAAS,UAAA,CAAW,IAAoB,MAAA,EAAsC;AAC5E,EAAA,MAAM,KAAK,EAAA,EAAI,EAAA;AACf,EAAA,IAAI,CAAC,MAAM,CAAC,EAAA,CAAG,WAAW,MAAA,GAAS,GAAG,GAAG,OAAO,IAAA;AAChD,EAAA,MAAM,CAAA,GAAI,eAAA,CAAgB,IAAA,CAAK,EAAE,CAAA;AACjC,EAAA,OAAO,CAAA,GAAI,EAAE,CAAA,EAAG,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAG,CAAA,EAAG,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,GAAE,GAAI,IAAA;AACpD;AAuBA,IAAM,QAAA,GAAWC,UAAA,CAAK,SAASC,SAAAA,CAAS;AAAA,EACtC,GAAA;AAAA,EACA,CAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAa;AACX,EAAA,MAAM,MAAmB,EAAC;AAC1B,EAAA,GAAA,CAAI,IAAA;AAAA,oBACFC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,WAAA;AAAA,QACL,+BAAA,EAA+B,CAAA;AAAA,QAC/B,KAAA,EAAO,WAAW,SAAA,GAAY,MAAA;AAAA,QAC9B,OAAA,EAAS,WAAA,GAAc,MAAM,WAAA,CAAY,CAAC,CAAA,GAAI,MAAA;AAAA,QAC9C,WAAW,WAAA,GAAc,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,GAAK,UAAA;AAAA,QAE1D,QAAA,EAAA,GAAA,CAAI,KAAK,CAAC;AAAA,OAAA;AAAA,MAPP;AAAA;AAQN,GACF;AACA,EAAA,IAAI,UAAU,QAAA,EAAU;AACtB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,KAAK,CAAA;AACtC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,KAAK,CAAA;AACpC,IAAA,KAAA,IAAS,CAAA,GAAI,EAAA,EAAI,CAAA,IAAK,EAAA,EAAI,CAAA,EAAA,EAAK;AAC7B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,OAAO,QAAQ,CAAA;AACzC,MAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAI,KAAA,GAAQ,KAAA,GAAQ,GAAG,MAAM,CAAA;AACjD,MAAA,MAAM,QAAA,GAAW,MAAA,IAAU,IAAA,IAAQ,QAAA,IAAY,EAAA;AAC/C,MAAA,GAAA,CAAI,IAAA;AAAA,wBACFA,cAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YAEC,GAAA;AAAA,YACA,CAAA;AAAA,YACA,QAAA;AAAA,YACA,IAAA;AAAA,YACA,EAAA;AAAA,YACA,UAAU,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,IAAI,CAAA,GAAI,EAAA;AAAA,YAChD,QAAQ,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,EAAE,CAAA,GAAI,EAAA;AAAA,YAC1C,SAAA,EAAW,SAAA,IAAa,IAAA,IAAQ,SAAA,IAAa,KAAK,SAAA,GAAY,EAAA;AAAA,YAC9D,KAAA,EAAO,YAAY,IAAA,KAAS,QAAA;AAAA,YAC5B;AAAA,WAAA;AAAA,UAVK;AAAA;AAWP,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,sCACG,KAAA,EAAA,EAAI,IAAA,EAAK,KAAA,EAAM,SAAA,EAAU,YACvB,QAAA,EAAA,GAAA,EACH,CAAA;AAEJ,CAAC,CAAA;AAgBD,IAAM,SAAA,GAAYF,UAAA,CAAK,SAASG,UAAAA,CAAU;AAAA,EACxC,GAAA;AAAA,EACA,CAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,EAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAe;AACb,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAM,MAAA,EAAQ,KAAA,EAAO,YAAW,GAAI,GAAA;AAC1D,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAS,GAAI,IAAI,GAAA,CAAI,OAAA;AACrC,EAAA,MAAM,MAAmB,EAAC;AAC1B,EAAA,KAAA,IAAS,CAAA,GAAI,IAAA,EAAM,CAAA,IAAK,EAAA,EAAI,CAAA,EAAA,EAAK;AAC/B,IAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,EAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,CAAA,IAAK,QAAA,IAAY,CAAA,IAAK,MAAA;AACvC,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,EAAS,MAAA,GAAS,KAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAClE,IAAA,MAAM,UAAU,IAAA,EAAM,KAAA;AACtB,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,KAAA,GAAQ,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,QAAQ,CAAA;AAAA,IACjC,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAA,EAAG,SAAS,KAAK,CAAA,CAAA;AAC9D,MAAA,IAAI,OAAA,EAAS,MAAA,EAAQ,KAAA,IAAS,IAAA,GAAO,QAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,IAAS,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,IACzF;AACA,IAAA,IAAI,MAAM,UAAA,CAAW,KAAK,IAAI,GAAA,IAAO,IAAA,EAAM,WAAW,aAAA,GAAgB,YAAA,CAAA;AACtE,IAAA,IAAI,QAAA,SAAiB,GAAA,GAAM,aAAA;AAC3B,IAAA,IAAI,CAAA,KAAM,SAAA,EAAW,GAAA,IAAO,GAAA,GAAM,WAAA;AAClC,IAAA,GAAA,CAAI,IAAA;AAAA,sBACFD,cAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,EAAA,EAAI,SAAA,CAAU,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,UAC1B,IAAA,EAAK,UAAA;AAAA,UACL,eAAA,EAAe,QAAA,GAAW,CAAA,GAAI,CAAA,GAAI,MAAA;AAAA,UAGlC,KAAA,EAAO,SAAS,CAAA,KAAM,IAAA,GAAO,EAAE,eAAA,EAAiB,CAAA,GAAI,GAAE,GAAI,MAAA;AAAA,UAC1D,gCAAA,EAAgC,SAAS,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAAA,UACjE,YAAA,EAAY,KAAA;AAAA,UACZ,cAAY,OAAA,EAAS,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA;AAAA,UAClD,eAAA,EAAe,QAAA;AAAA,UACf,eAAA,EAAe,IAAA,EAAM,QAAA,GAAW,IAAA,GAAO,MAAA;AAAA,UACvC,YAAA,EAAY,KAAA;AAAA,UACZ,kBAAA,EAAkB,OAAA;AAAA,UAClB,KAAA,EAAO,OAAA;AAAA,UACP,SAAA,EAAW,GAAA;AAAA,UAEV,QAAA,EAAA,OAAA,EAAS,MAAA,mBACRA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,wDAAA,EACzB,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAClB,YAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,YAAA,OAAO,GAAA,EAAK,IAAA,mBACVA,cAAA,CAAC,MAAA,EAAA,EAAa,gCAAA,EAAgC,CAAA,EAAG,SAAA,EAAU,4EAAA,EACxD,QAAA,EAAA,GAAA,CAAI,IAAA,EAAA,EADI,CAEX,CAAA,mBAEAA,cAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,gCAAA,EAAgC,CAAA;AAAA,gBAChC,SAAA,EAAW,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,GAAA,EAAK,OAAO,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,GAAI,YAAY,CAAA;AAAA,eAAA;AAAA,cAFnE;AAAA,aAGP;AAAA,UAEJ,CAAC,GACH,CAAA,GACE;AAAA,SAAA;AAAA,QAlCC;AAAA;AAmCP,KACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT,CAAC,CAAA;AASM,IAAM,aAAA,GAAgBE,gBAAA,CAA0C,SAASC,cAAAA,CAC9E;AAAA,EACE,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ,UAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,SAAA,GAAY,EAAA;AAAA,EACZ,UAAA,GAAa,EAAA;AAAA,EACb,eAAA,GAAkB,IAAA;AAAA,EAClB,yBAAA,GAA4B,IAAA;AAAA,EAC5B,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA,GAAiB,WAAA;AAAA,EACjB,SAAA,EAAW,aAAA;AAAA,EACX,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA,GAAgB,OAAA;AAAA,EAChB,eAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA,EAAc;AAChB,CAAA,EACA,GAAA,EACA;AACA,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,GAAA,GACJ,yMAAA;AAEF,IAAA,IAAI,KAAA,EAAM,EAAG,MAAM,IAAI,MAAM,GAAG,CAAA;AAChC,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,cAAA,GAAiB,IAAA;AACjB,MAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,IACnB;AAAA,EACF;AACA,EAAA,MAAM,SAAS,UAAA,IAAc,KAAA;AAC7B,EAAA,MAAM,QAAQ,SAAA,IAAa,KAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,SAAA;AACd,EAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,EAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AAEnB,EAAA,MAAM,SAASC,WAAA,EAAM;AACrB,EAAA,MAAM,QAAA,GAAWC,aAAuB,IAAI,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAUA,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,WAAA,GAAcC,cAAQ,MAAMC,6BAAA,CAAY,KAAK,QAAQ,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAEnE,EAAA,MAAM,aAAa,aAAA,KAAkB,MAAA;AACrC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,eAAmC,IAAI,CAAA;AACjE,EAAA,MAAM,SAAA,GAAY,aAAa,aAAA,GAAgB,KAAA;AAE/C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAA,CAAwB,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA;AAClE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAYH,aAA6B,IAAI,CAAA;AACnD,EAAA,MAAM,UAAA,GAAaA,aAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,QAAA,GAAWA,aAAe,EAAE,CAAA;AAIlC,EAAA,MAAM,SAAS,SAAA,GAAY,CAAA;AAC3B,EAAA,MAAM,QAAA,GAAW,iBAAiB,KAAA,GAAQ,oBAAA;AAQ1C,EAAA,MAAM,OAAA,GAAUA,aAAO,EAAE,IAAA,EAAM,GAAG,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,CAAA,EAAG,CAAA;AACxD,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIG,eAAgD,IAAI,CAAA;AAG1E,EAAA,MAAM,YAAA,GAAeC,kBAAY,MAAwB;AACvD,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,KAAY,OAAA,CAAQ,OAAA;AACzC,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAA,CAAO,IAAA,GAAO,OAAA,IAAW,MAAM,CAAC,CAAA;AAC/D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,GAAG,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,MAAM,IAAA,GAAO,KAAA,GAAQ,OAAA,IAAW,MAAM,CAAC,CAAC,CAAA;AAC9F,IAAA,OAAO,CAAC,OAAO,IAAI,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAElB,EAAA,MAAM,OAAA,GAAUA,kBAAY,MAAM;AAChC,IAAA,MAAM,KAAK,QAAA,CAAS,OAAA;AACpB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,aAAA,CAA2B,oBAAoB,CAAA;AAC7D,IAAA,OAAA,CAAQ,OAAA,GAAU;AAAA,MAChB,MAAM,EAAA,CAAG,UAAA;AAAA,MACT,OAAO,EAAA,CAAG,WAAA,KAAgB,OAAO,MAAA,KAAW,WAAA,GAAc,OAAO,UAAA,GAAa,IAAA,CAAA;AAAA,MAC9E,OAAA,EAAS,EAAA,GAAK,EAAA,CAAG,WAAA,GAAc,CAAA,GAAI;AAAA,KACrC;AAEA,IAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,YAAA,EAAa;AACnC,IAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,mBAAA,EAAqB,KAAK,IAAA,CAAA,CAAM,IAAA,GAAO,KAAA,IAAS,CAAC,CAAC,CAAA;AACxE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,OAAO,KAAA,GAAQ,IAAA,IAAQ,YAAY,CAAA,GAAI,YAAY,CAAA;AAClF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,IAAA,CAAA,CAAM,IAAA,GAAO,IAAA,GAAO,CAAA,IAAK,YAAY,CAAA,GAAI,eAAe,CAAC,CAAA;AAC9F,IAAA,MAAA,CAAO,CAAC,CAAA,KAAO,CAAA,IAAK,CAAA,CAAE,KAAA,KAAU,KAAA,IAAS,CAAA,CAAE,GAAA,KAAQ,GAAA,GAAM,CAAA,GAAI,EAAE,KAAA,EAAO,KAAM,CAAA;AAAA,EAC9E,CAAA,EAAG,CAAC,YAAA,EAAc,KAAK,CAAC,CAAA;AAExB,EAAAC,qBAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,OAAA,EAAQ;AACR,IAAA,MAAM,KAAK,QAAA,CAAS,OAAA;AACpB,IAAA,IAAI,CAAC,EAAA,IAAM,OAAO,cAAA,KAAmB,WAAA,EAAa;AAClD,IAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,MAAM,SAAS,CAAA;AAC7C,IAAA,EAAA,CAAG,QAAQ,EAAE,CAAA;AACb,IAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,EAC7B,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAItB,EAAA,MAAM,QAAA,GAAWD,kBAAY,MAAME,kBAAA,CAAU,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEhE,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,SAAS,KAAA,GAAQ,CAAA;AACrB,EAAA,IAAI,QAAA,EAAU;AAEZ,IAAA,QAAA,GAAW,GAAA,GAAM,IAAI,KAAA,GAAQ,CAAA;AAC7B,IAAA,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,CAAI,IAAI,GAAA,EAAK,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,EAChD;AAGA,EAAA,MAAM,SAAA,GAAYF,iBAAA;AAAA,IAChB,CAAC,CAAA,KAAc;AACb,MAAA,MAAM,KAAK,QAAA,CAAS,OAAA;AACpB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,OAAA,CAAQ,OAAA;AAC5B,MAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,WAAA,IAAe,OAAA,CAAQ,OAAA,CAAQ,KAAA;AAChD,MAAA,MAAM,CAAA,GAAI,UAAU,CAAA,GAAI,MAAA;AACxB,MAAA,IAAI,OAAO,EAAA,CAAG,UAAA;AACd,MAAA,IAAI,CAAA,GAAI,OAAO,OAAA,EAAS,IAAA,GAAO,KAAK,GAAA,CAAI,CAAA,EAAG,IAAI,OAAO,CAAA;AAAA,WAAA,IAC7C,IAAI,MAAA,GAAS,IAAA,GAAO,KAAA,EAAO,IAAA,GAAO,IAAI,MAAA,GAAS,KAAA;AACxD,MAAA,IAAI,IAAA,KAAS,GAAG,UAAA,EAAY;AAC1B,QAAA,EAAA,CAAG,UAAA,GAAa,IAAA;AAChB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAGA,EAAA,MAAM,IAAA,GAAOJ,YAAA,CAAO,EAAE,KAAA,EAAO,SAAA,EAAW,cAAA,EAAgB,aAAA,EAAe,iBAAA,EAAmB,iBAAA,EAAmB,eAAA,EAAiB,WAAA,EAAa,CAAA;AAC3I,EAAA,IAAA,CAAK,OAAA,GAAU,EAAE,KAAA,EAAO,SAAA,EAAW,gBAAgB,aAAA,EAAe,iBAAA,EAAmB,iBAAA,EAAmB,eAAA,EAAiB,WAAA,EAAY;AAErI,EAAA,MAAM,GAAA,GAAMA,YAAA,CAA8B,EAAE,CAAA;AAC5C,EAAA,GAAA,CAAI,OAAA,GAAU,EAAE,MAAA,EAAQ,QAAA,EAAS;AAEjC,EAAA,MAAM,UAAA,GAAaC,cAAQ,MAAM;AAC/B,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,IAAA,OAAO,CAAC,KAAA,KAAkB;AACxB,MAAA,IAAI,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AACzB,MAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,GAAA;AAC9B,MAAA,MAAM,GAAA,GAAM,OAAO,KAAK,CAAA;AACxB,MAAA,IAAI,CAAC,GAAA,IAAO,UAAA,IAAc,CAAC,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA,EAAG;AAClD,QAAA,YAAA,CAAa,IAAI,KAAK,CAAA;AACtB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4BAAA,EAA+B,KAAK,CAAA,uDAAA,CAAoD,CAAA;AAAA,MACvG;AACA,MAAA,GAAA,GAAM,GAAG,SAAS,CAAA,CAAA,EAAI,GAAA,EAAK,IAAA,GAAO,UAAU,GAAA,CAAI,IAAI,CAAA,GAAI,YAAY,GAAG,GAAA,EAAK,SAAA,GAAY,GAAA,GAAM,GAAA,CAAI,YAAY,EAAE,CAAA,CAAA;AAChH,MAAA,KAAA,CAAM,GAAA,CAAI,OAAO,GAAG,CAAA;AACpB,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,UAAU,CAAC,CAAA;AAEvB,EAAA,MAAM,GAAA,GAAMA,aAAA;AAAA,IACV,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,QAAQ,KAAA,EAAO,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,GAAA,EAAI,CAAA;AAAA,IACnF,CAAC,QAAQ,IAAA,EAAM,IAAA,EAAM,QAAQ,KAAA,EAAO,UAAA,EAAY,WAAW,UAAU;AAAA,GACvE;AAIA,EAAA,MAAM,UAAA,GAAaG,iBAAA;AAAA,IACjB,CAAC,CAAA,EAAW,CAAA,KAAc,CAAC,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,CAAC,CAAA,EAAG,QAAA;AAAA,IACxD;AAAC,GACH;AAEA,EAAA,MAAM,OAAA,GAAUA,iBAAA;AAAA,IACd,CAAC,GAAA,KACC,eAAA,CAAgB,KAAK,KAAA,EAAO,KAAK,EAAE,GAAA,CAAI,CAAC,EAAE,CAAA,EAAG,CAAA,OAAQ,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAC,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,IACjF,CAAC,OAAO,KAAK;AAAA,GACf;AAEA,EAAA,MAAM,IAAA,GAAOA,iBAAA;AAAA,IACX,CAAC,IAAA,KAAmC;AAClC,MAAA,IAAI,CAAC,UAAA,EAAY,QAAA,CAAS,IAAI,CAAA;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,iBAAA,GAAoB,IAAA,EAAM,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,CAAC,YAAY,OAAO;AAAA,GACtB;AAEA,EAAA,MAAM,aAAA,GAAgBA,iBAAA,CAAY,CAAC,OAAA,EAA0B,CAAA,KAAsB;AACjF,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACrB,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,GAAG,CAAA;AACxD,IAAA,IAAI,CAAA,EAAG;AACL,MAAA,IAAI,CAAA,CAAE,eAAe,GAAA,EAAK;AAC1B,MAAA,CAAA,CAAE,UAAA,GAAa,GAAA;AAAA,IACjB;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,eAAA;AAAA,MACX,QAAQ,GAAA,CAAI,CAAC,EAAE,CAAA,EAAG,GAAE,KAAM;AACxB,QAAA,MAAM,UAAU,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAC,CAAA,GAAI,CAAC,CAAA,EAAG,OAAA;AAC5C,QAAA,OAAO,OAAA,GAAU,EAAE,CAAA,EAAG,CAAA,EAAG,SAAQ,GAAI,EAAE,GAAG,CAAA,EAAE;AAAA,MAC9C,CAAC;AAAA,KACH;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,MAAA,GAASA,iBAAA;AAAA,IACb,CACE,MAAA,EACA,MAAA,EACA,GACA,KAAA,GAAQ,IAAA,CAAK,QAAQ,cAAA,KACoB;AACzC,MAAA,MAAM,GAAA,GAAM,YAAA,CAAa,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,OAAO,KAAA,EAAO,UAAA,EAAY,IAAA,CAAK,OAAA,CAAQ,aAAa,CAAA;AACpG,MAAA,aAAA,CAAc,GAAA,CAAI,SAAS,CAAC,CAAA;AAC5B,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,QAAA,EAAU,OAAO,MAAA;AAClC,MAAA,MAAM,OAAA,GAAU,CAAA,GAAI,CAAA,CAAE,SAAA,GAAY,KAAK,OAAA,CAAQ,SAAA;AAC/C,MAAA,IAAI,CAAC,aAAA,CAAc,OAAA,EAAS,GAAA,CAAI,SAAS,CAAA,IAAM,CAAA,IAAK,CAAA,CAAE,SAAA,KAAc,IAAA,EAAO,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAC7F,MAAA,OAAO,GAAA,CAAI,SAAA;AAAA,IACb,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,eAAe,IAAI;AAAA,GAChD;AAEA,EAAA,MAAM,MAAA,GAASA,iBAAA;AAAA,IACb,CAAC,GAAA,KAAkC;AACjC,MAAA,IAAI,KAAK,IAAA,CAAK,OAAA,CAAQ,oBAAoB,GAAA,EAAK,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IAC7D,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AASA,EAAA,MAAM,WAAA,GAAcA,iBAAA;AAAA,IAClB,CAAC,GAAW,CAAA,KAAoC;AAC9C,MAAA,MAAM,QAAQ,QAAA,CAAS,cAAA,CAAe,UAAU,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAC,CAAA;AACpE,MAAA,MAAM,IAAA,GAAO,SAAS,cAAA,CAAe,SAAA,CAAU,QAAQ,KAAA,GAAQ,CAAA,EAAG,MAAM,CAAC,CAAA;AACzE,MAAA,IAAI,CAAC,KAAA,IAAS,CAAC,IAAA,EAAM,OAAO,IAAA;AAC5B,MAAA,MAAM,CAAA,GAAI,MAAM,qBAAA,EAAsB;AACtC,MAAA,MAAM,CAAA,GAAI,KAAK,qBAAA,EAAsB;AACrC,MAAA,MAAM,KAAK,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,IAAA,KAAS,SAAS,QAAA,GAAW,CAAA,CAAA;AACpD,MAAA,MAAM,CAAA,GAAA,CAAK,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,GAAA,IAAO,KAAA;AAC/B,MAAA,IAAI,EAAE,CAAA,GAAI,CAAA,CAAA,IAAM,EAAE,CAAA,GAAI,IAAI,OAAO,IAAA;AACjC,MAAA,OAAO;AAAA,QACL,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,GAAI,CAAA,CAAE,GAAA,IAAO,CAAC,CAAC,CAAC,CAAA;AAAA,QAC/D,GAAG,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,QAAA,GAAW,IAAA,CAAK,OAAO,CAAA,GAAI,CAAA,CAAE,IAAA,IAAQ,CAAC,CAAC,CAAC;AAAA,OAC7E;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,UAAU,MAAM;AAAA,GACzC;AAEA,EAAA,MAAM,cAAA,GAAiBA,iBAAA;AAAA,IACrB,CAAC,CAAA,KAA+C;AAC9C,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,MAAM,UAAA,CAAW,CAAA,EAAG,UAAU,mBAAmB,CAAA,IAAK,MAAM,MAAM,CAAA;AACtE,MAAA,IAAI,CAAC,GAAA,IAAO,OAAO,QAAA,CAAS,qBAAqB,UAAA,EAAY;AAC3D,QAAA,MAAM,QAAQ,QAAA,CAAS,gBAAA,CAAiB,CAAA,CAAE,OAAA,EAAS,EAAE,OAAO,CAAA;AAC5D,QAAA,GAAA,GAAM,WAAW,KAAA,EAAO,OAAA,GAAU,mBAAmB,CAAA,IAAK,MAAM,MAAM,CAAA;AAAA,MACxE;AACA,MAAA,IAAI,CAAC,GAAA,EAAK,GAAA,GAAM,YAAY,CAAA,CAAE,OAAA,EAAS,EAAE,OAAO,CAAA;AAChD,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,QAAQ,WAAW;AAAA,GACtB;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAyC;AAC9D,IAAA,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AACpB,IAAA,MAAM,EAAA,GAAK,eAAe,CAAC,CAAA;AAC3B,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,OAAA,CAAQ,OAAA,EAAS,KAAA,CAAM,EAAE,aAAA,EAAe,MAAM,CAAA;AAC9C,IAAA,IAAI;AACF,MAAA,CAAA,CAAE,aAAA,CAAc,iBAAA,GAAoB,CAAA,CAAE,SAAS,CAAA;AAAA,IACjD,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,MAAM,CAAA,GAAa,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAM,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,UAAA,EAAY,EAAA,EAAG;AAC3E,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,EAAA,EAAI,EAAA,EAAI,CAAC,CAAA;AAC5B,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,MAAA;AAAA,IACF;AACA,IAAA,CAAA,CAAE,SAAA,GAAY,GAAA;AACd,IAAA,SAAA,CAAU,OAAA,GAAU,EAAA;AACpB,IAAA,UAAA,CAAW,OAAA,GAAU,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAyC;AAC9D,IAAA,MAAM,IAAI,UAAA,CAAW,OAAA;AACrB,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,MAAM,EAAA,GAAK,eAAe,CAAC,CAAA;AAC3B,IAAA,IAAI,CAAC,EAAA,IAAO,EAAA,CAAG,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,CAAA,IAAK,EAAA,CAAG,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,CAAA,EAAI;AACrD,IAAA,CAAA,CAAE,IAAA,GAAO,EAAA;AACT,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,CAAA,CAAE,MAAA,EAAQ,IAAI,CAAC,CAAA;AAClC,IAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,CAAA,CAAE,SAAA,GAAY,GAAA;AAAA,EACvC,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAM,IAAI,UAAA,CAAW,OAAA;AACrB,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,IAAA,IAAI,CAAA,EAAG,MAAA,CAAO,CAAA,CAAE,SAAS,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAyC;AAC9D,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa;AAC/B,IAAA,MAAM,EAAA,GAAK,WAAY,CAAA,CAAE,MAAA,EAAoB,UAAU,mBAAmB,CAAA,IAAK,MAAM,MAAM,CAAA;AAC3F,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,MAAM,CAAA,EAAG,EAAA,CAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,CAAA,CAAA;AAC3B,IAAA,IAAI,QAAA,CAAS,YAAY,GAAA,EAAK;AAC9B,IAAA,QAAA,CAAS,OAAA,GAAU,GAAA;AACnB,IAAA,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAC,CAAA,IAAK,IAAA,EAAM,EAAE,CAAA;AAAA,EACvE,CAAA;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,IAAA,QAAA,CAAS,OAAA,GAAU,EAAA;AACnB,IAAA,IAAA,CAAK,OAAA,CAAQ,WAAA,GAAc,IAAA,EAAM,IAAI,CAAA;AAAA,EACvC,CAAA;AAIA,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAA0C;AAC3D,IAAA,MAAM,IAAA,GAAyC;AAAA,MAC7C,OAAA,EAAS,CAAC,EAAA,EAAI,CAAC,CAAA;AAAA,MACf,SAAA,EAAW,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,MAChB,SAAA,EAAW,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,MACjB,UAAA,EAAY,CAAC,CAAA,EAAG,CAAC;AAAA,KACnB;AACA,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,CAAA,CAAE,GAAG,CAAA;AACpB,IAAA,IAAI,CAAA,EAAG;AACL,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAAA,QACnD,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAC;AAAA,OACrD;AACA,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,MAAM,MAAA,GAAS,UAAU,OAAA,IAAW,MAAA;AACpC,QAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,QAAA,MAAA,CAAO,MAAA,EAAQ,MAAM,IAAI,CAAA;AAAA,MAC3B;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,GAAA,IAAO,CAAA,CAAE,QAAQ,UAAA,EAAY;AACzC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,GAAA,GAAM,KAAK,OAAA,CAAQ,SAAA;AACzB,MAAA,MAAM,SAAS,gBAAA,CAAiB,IAAA,CAAK,QAAQ,cAAA,EAAgB,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAClF,MAAA,IAAI,GAAA,IAAO,aAAA,CAAc,GAAA,EAAK,MAAM,CAAA,EAAG;AACrC,QAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,QAAA,IAAA,CAAK,IAAI,CAAA;AAAA,MACX,CAAA,MAAO;AACL,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA;AACvC,QAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,SAAA,CAAU,OAAA,GAAU,MAAA;AAAA,MAC7C;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,SAAA,IAAa,IAAA;AACpC,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA;AACvC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACvB,QAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,QAAA,GAAA,GAAM,GAAA;AAAA,MACR;AACA,MAAA,MAAA,CAAO,GAAG,CAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,MAAA,IAAI,IAAA,CAAK,QAAQ,SAAA,EAAW;AAC1B,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,QAAA,IAAA,CAAK,IAAI,CAAA;AAAA,MACX;AAAA,IACF;AAAA,EACF,CAAA;AAIA,EAAA,MAAM,SAAA,GAAYA,iBAAA;AAAA,IAChB,CAAC,GAAkB,CAAA,KAAqB;AACtC,MAAA,SAAA,CAAU,OAAA,GAAU,CAAA;AACpB,MAAA,SAAA,CAAU,CAAC,CAAA;AACX,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,CAAA,EAAG,CAAA,EAAG,MAAM,WAAW,CAAA;AAC1C,MAAA,IAAI,GAAA,SAAY,GAAG,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,QAAQ,MAAM;AAAA,GACjB;AACA,EAAA,MAAM,WAAA,GAAcH,aAAA;AAAA,IAClB,MAAO,yBAAA,GAA4B,CAAC,CAAA,KAAc,SAAA,CAAU,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,EAAE,CAAA,EAAG,CAAA,EAAG,KAAA,GAAQ,CAAA,EAAG,CAAA,GAAI,MAAA;AAAA,IAChG,CAAC,yBAAA,EAA2B,SAAA,EAAW,KAAK;AAAA,GAC9C;AAIA,EAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,GAAI,OAAO,CAAC,CAAA;AAC7C,EAAA,MAAM,aAAA,GAAgB,WAAW,UAAA,EAAY,OAAA,EAAS,SAAS,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAC/F,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIE,eAA+C,IAAI,CAAA;AAC/E,EAAAE,qBAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,aAAA,EAAe;AACpB,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,IAAA,MAAM,EAAA,GAAK,SAAS,cAAA,CAAe,SAAA,CAAU,QAAQ,MAAA,CAAO,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AACxE,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,EAAA,EAAI;AACnB,IAAA,MAAM,CAAA,GAAI,MAAM,qBAAA,EAAsB;AACtC,IAAA,MAAM,CAAA,GAAI,GAAG,qBAAA,EAAsB;AACnC,IAAA,SAAA,CAAU,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,OAAO,KAAA,CAAM,UAAA,EAAY,GAAA,EAAK,CAAA,CAAE,SAAS,CAAA,CAAE,GAAA,GAAM,KAAA,CAAM,SAAA,GAAY,GAAG,CAAA;AAAA,EACrG,CAAA,EAAG,CAAC,aAAA,EAAe,MAAA,CAAO,GAAG,MAAA,CAAO,CAAA,EAAG,MAAM,CAAC,CAAA;AAE9C,EAAA,MAAM,MAAA,GAASL,YAAA,CAAO,EAAE,SAAA,EAAW,QAAA,EAAU,YAAY,CAAC,CAAC,GAAA,EAAK,YAAA,EAAc,CAAA;AAC9E,EAAA,MAAA,CAAO,OAAA,GAAU,EAAE,SAAA,EAAW,QAAA,EAAU,YAAY,CAAC,CAAC,KAAK,YAAA,EAAa;AAIxE,EAAAO,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI,MAAA,CAAO,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA;AACjC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,SAAS,cAAA,CAAe,SAAA,CAAU,QAAQ,MAAA,CAAO,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AACxE,IAAA,EAAA,EAAI,iBAAiB,EAAE,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,WAAW,CAAA;AAAA,EAC9D,CAAA,EAAG,CAAC,OAAA,EAAS,MAAA,CAAO,GAAG,MAAA,CAAO,CAAA,EAAG,MAAM,CAAC,CAAA;AAIxC,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,EAAE,UAAU,CAAA,EAAG,YAAA,EAAc,IAAI,SAAA,EAAW,EAAA,KAAO,MAAA,CAAO,OAAA;AAChE,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,SAAA,IAAa,WAAW,OAAA,EAAS;AAC5C,IAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,EAAA,EAAG;AAClB,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,SAAA,CAAU,UAAU,WAAA,EAAa;AACnC,MAAA,EAAA,GAAK,SAAA,CAAU,EAAA;AACf,MAAA,EAAA,GAAK,SAAA,CAAU,EAAA;AAAA,IACjB,WAAW,SAAA,CAAU,IAAA,CAAK,CAAA,KAAM,SAAA,CAAU,GAAG,CAAA,EAAG;AAC9C,MAAA,EAAA,GAAK,UAAU,IAAA,CAAK,CAAA;AACpB,MAAA,EAAA,GAAK,UAAU,EAAA,CAAG,CAAA;AAAA,IACpB,CAAA,MAAO;AACP,IAAA,IAAI,EAAA,GAAK,CAAA,IAAK,EAAA,GAAK,CAAA,KAAM,EAAE,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AACjD,EAAA,MAAM,KAAA,GAAQ,GAAG,MAAM,CAAA,IAAA,CAAA;AAEvB,EAAA,MAAM,QAAA,GAAW,IAAI,KAAA,CAAM,KAAK,CAAA;AAChC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,SAAA,EAAW,CAAA,EAAG,KAAK,CAAA;AAC1C,IAAA,QAAA,CAAS,CAAC,CAAA,mBACRZ,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,GAAA;AAAA,QACA,CAAA;AAAA,QACA,QAAA,EAAU,MAAM,CAAC,CAAA;AAAA,QACjB,QAAA,EAAU,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,GAAI,EAAA;AAAA,QACzB,MAAA,EAAQ,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,GAAI,EAAA;AAAA,QACvB,WAAW,OAAA,IAAW,MAAA,CAAO,CAAA,KAAM,CAAA,GAAI,OAAO,CAAA,GAAI,EAAA;AAAA,QAClD,WAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OAAA;AAAA,MAVK;AAAA,KAWP;AAAA,EAEJ;AAIA,EAAA,MAAM,mBAAA,GAAsB,CAAA,mBAAA,EAAsB,KAAK,CAAA,EAAA,EAAK,MAAM,CAAA,GAAA,CAAA;AAClE,EAAA,MAAM,aAA0B,EAAC;AACjC,EAAA,KAAA,IAAS,CAAA,GAAI,QAAA,EAAU,CAAA,IAAK,MAAA,EAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,UAAA,CAAW,IAAA;AAAA,sBACTA,cAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,cAAA;AAAA,UACL,eAAA,EAAe,QAAA,GAAW,CAAA,GAAI,CAAA,GAAI,MAAA;AAAA,UAClC,KAAA,EAAO,YAAY,CAAA,KAAM,QAAA,GAAW,EAAE,eAAA,EAAiB,CAAA,GAAI,GAAE,GAAI,MAAA;AAAA,UACjE,+BAAA,EAA+B,CAAA;AAAA,UAC/B,OAAA,EAAS,yBAAA,GAA4B,MAAM,SAAA,CAAU,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,EAAE,CAAA,EAAG,KAAA,GAAQ,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,MAAA;AAAA,UACzF,WAAW,yBAAA,GAA4B,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,GAAK,UAAA;AAAA,UAExE,QAAA,EAAA,eAAA,GAAmB,IAAI,OAAA,KAAY,CAAA,GAAI,KAAK,CAAC,CAAA,GAAI,EAAA,GAAM,IAAA,CAAK,CAAC;AAAA,SAAA;AAAA,QARzD;AAAA;AASP,KACF;AAAA,EACF;AAEA,EAAA,uBACEa,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,WAAA;AAAA,MACL,2BAAA,EAA0B,EAAA;AAAA,MAC1B,YAAA,EAAW,EAAA;AAAA,MACX,eAAA,EAAe,WAAW,EAAA,GAAK,MAAA;AAAA,MAC/B,QAAA,EAAU,WAAW,QAAA,GAAW,MAAA;AAAA,MAChC,SAAA,EAAWC,oBAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA;AAAA,MAE/D,QAAA,EAAA;AAAA,wBAAAD,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,OAAA;AAAA,YACL,IAAA,EAAK,MAAA;AAAA,YACL,QAAA,EAAU,CAAA;AAAA,YACV,YAAA,EAAY,SAAA;AAAA,YACZ,sBAAA,EAAqB,MAAA;AAAA,YACrB,iBAAe,KAAA,GAAQ,CAAA;AAAA,YACvB,iBAAe,KAAA,GAAQ,CAAA;AAAA,YACvB,yBAAuB,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,YAC3D,kBAAA,EAAkB,gBAAgB,KAAA,GAAQ,MAAA;AAAA,YAC1C,aAAA;AAAA,YACA,aAAA;AAAA,YACA,WAAA,EAAa,UAAA;AAAA,YACb,eAAA,EAAiB,UAAA;AAAA,YACjB,aAAA;AAAA,YACA,cAAA;AAAA,YACA,SAAA;AAAA,YACA,OAAA,EAAS,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,YAC9B,MAAA,EAAQ,MAAM,UAAA,CAAW,KAAK,CAAA;AAAA,YAC9B,SAAA,EAAU,+NAAA;AAAA,YACV,KAAA,EACE;AAAA,cACE,mBAAA;AAAA,cACA,aAAA,EAAe,GAAG,SAAS,CAAA,EAAA,CAAA;AAAA,cAC3B,aAAA,EAAe,GAAG,UAAU,CAAA,EAAA;AAAA,aAC9B;AAAA,YAGF,QAAA,EAAA;AAAA,8BAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,KAAA,EAAM,SAAA,EAAU,UAAA,EACxB,QAAA,EAAA;AAAA,gCAAAb,cAAA,CAAC,KAAA,EAAA,EAAI,MAAK,cAAA,EAAe,CAAA;AAAA,gBACxB;AAAA,eAAA,EACH,CAAA;AAAA,cACC;AAAA;AAAA;AAAA,SACH;AAAA,QACC,aAAA,mBACCA,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,KAAA;AAAA,YACJ,IAAA,EAAK,SAAA;AAAA,YACL,mCAAA,EAAkC,EAAA;AAAA,YAClC,SAAA,EAAW,OAAA;AAAA,YACX,KAAA,EAAO,SAAS,EAAE,IAAA,EAAM,OAAO,IAAA,EAAM,GAAA,EAAK,MAAA,CAAO,GAAA,EAAI,GAAI,MAAA;AAAA,YAExD,QAAA,EAAA;AAAA;AAAA,SACH,GACE;AAAA;AAAA;AAAA,GACN;AAEJ,CAAC,CAAA;AC/zBD,IAAM,YAAA,GAA6C;AAAA,EACjD,MAAA,EAAQ,mCAAA;AAAA,EACR,OAAA,EAAS,qCAAA;AAAA,EACT,GAAA,EAAK,6BAAA;AAAA,EACL,IAAA,EAAM,+BAAA;AAAA,EACN,KAAA,EAAO,iCAAA;AAAA,EACP,MAAA,EAAQ,mCAAA;AAAA,EACR,IAAA,EAAM,+BAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,WAAA,GACJ,4KAAA;AAEF,IAAM,WAAwB,EAAC;AAC/B,IAAM,OAAO,MAAM;AAAC,CAAA;AAOb,IAAM,QAAA,GAAWE,gBAAAA;AAAA,EAA0C,CAAC,KAAA,EAAO,GAAA,KACxE,KAAA,CAAM,KAAA,mBAAQF,cAAAA,CAAC,aAAA,EAAA,EAAc,GAAA,EAAW,GAAG,OAAO,CAAA,mBAAKA,eAAC,eAAA,EAAA,EAAgB,GAAA,EAAW,GAAG,KAAA,EAAO;AAC/F;AAEA,IAAM,eAAA,GAAkBE,gBAAAA;AAAA,EACtB,CACE;AAAA,IACE,IAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,GAAQ,QAAA;AAAA,IACR,QAAA,GAAW,IAAA;AAAA,IACX,MAAA,GAAS,QAAA;AAAA,IACT,SAAA,GAAY,EAAA;AAAA,IACZ,UAAA,GAAa,EAAA;AAAA,IACb,eAAA,GAAkB,IAAA;AAAA,IAClB,yBAAA,GAA4B,IAAA;AAAA,IAC5B,QAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIM,eAAyB,IAAI,CAAA;AAErD,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,EAAW,CAAA,EAAW,CAAA,KAAe;AACpD,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,GAAI,CAAC,MAAM,CAAA,EAAG;AACzB,MAAA,MAAM,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAO,CAAA;AAC3C,MAAA,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA;AACb,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAc;AAC/B,MAAA,IAAI,CAAC,yBAAA,EAA2B;AAChC,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,OAAO,CAAA;AAClC,MAAA,MAAM,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAO,CAAA;AAC3C,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,CAAC,GAAA;AACpD,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAc;AAC/B,MAAA,IAAI,CAAC,yBAAA,EAA2B;AAChC,MAAA,MAAM,MAAM,KAAA,CAAM,KAAA,CAAM,CAAC,GAAA,KAAQ,GAAA,CAAI,CAAC,CAAC,CAAA;AACvC,MAAA,MAAM,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAO,CAAA;AAC3C,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,CAAC,GAAA;AACpD,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,CAAA;AAEA,IAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AACvD,IAAA,MAAM,MAAA,GAAS,aAAa,MAAM,CAAA;AAElC,IAAA,uBACER,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,2BAAA,EAA0B,EAAA;AAAA,QAC1B,SAAA,EAAWc,oBAAA;AAAA,UACT,6BAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,YAAA,EAAc,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,QAChC,SAAA,EAAW,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,QAE7B,QAAA,kBAAAD,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EACf,QAAA,EAAA;AAAA,0BAAAb,cAAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAAa,eAAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAb,eAAC,IAAA,EAAA,EAAG,CAAA;AAAA,YACH,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,EAAO,sBAChBA,cAAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBAEC,OAAA,EAAS,MAAM,SAAA,CAAU,CAAC,CAAA;AAAA,gBAC1B,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA,gBAC1B,+BAAA,EAA+B,CAAA;AAAA,gBAC/B,SAAA,EAAWc,oBAAA;AAAA,kBACT,eAAA;AAAA,kBACA,yBAAA,IACE;AAAA,iBACJ;AAAA,gBAEC,QAAA,EAAA,eAAA,GAAmB,CAAA,GAAI,OAAA,KAAY,CAAA,GAAI,QAAQ,EAAA,GAAM;AAAA,eAAA;AAAA,cAVjD;AAAA,aAYR;AAAA,WAAA,EACH,CAAA,EACF,CAAA;AAAA,0BACAd,cAAAA,CAAC,OAAA,EAAA,EACE,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,qBAChBa,eAAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAb,cAAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,MAAM,SAAA,CAAU,CAAC,CAAA;AAAA,gBAC1B,+BAAA,EAA+B,CAAA;AAAA,gBAC/B,SAAA,EAAWc,oBAAA;AAAA,kBACT,2CAAA;AAAA,kBACA,yBAAA,IACE;AAAA,iBACJ;AAAA,gBAEC,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,YACC,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AAClB,cAAA,MAAM,EAAA,GAAK,KAAA,CAAM,CAAC,CAAA,GAAI,CAAC,CAAA,IAAK,KAAA;AAC5B,cAAA,uBACEd,cAAAA,CAAC,IAAA,EAAA,EAAW,SAAA,EAAU,QACpB,QAAA,kBAAAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,aAAa,MAAM;AACjB,oBAAA,MAAM,IAAI,CAAC,EAAA;AACX,oBAAA,OAAA,CAAQ,CAAC,CAAA;AACT,oBAAA,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,kBACjB,CAAA;AAAA,kBACA,cAAc,MAAM,IAAA,KAAS,QAAQ,OAAA,CAAQ,CAAA,EAAG,GAAG,IAAI,CAAA;AAAA,kBACvD,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAW,QAAQ,UAAA,EAAW;AAAA,kBAC9C,gCAAA,EACE,SAAS,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAAA,kBAEnC,cAAA,EAAc,EAAA;AAAA,kBACd,cACE,QAAA,GACI,QAAA,CAAS,GAAG,CAAA,EAAG,EAAE,IACjB,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,IAAI,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,EAAA,GAAK,OAAO,KAAK,CAAA,CAAA;AAAA,kBAEhD,SAAA,EAAWc,oBAAA;AAAA,oBACT,6BAAA;AAAA,oBACA,KAAK,MAAA,GAAS;AAAA;AAChB;AAAA,mBAtBK,CAwBT,CAAA;AAAA,YAEJ,CAAC;AAAA,WAAA,EAAA,EAzCM,CA0CT,CACD,CAAA,EACH;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AACvB,eAAA,CAAgB,WAAA,GAAc,iBAAA","file":"chunk-4DL2U23D.cjs","sourcesContent":["import type {\n TimeGridCoord,\n TimeGridDisabledRange,\n TimeGridSelection,\n TimeGridSelectionShape,\n} from \"./TimeGrid.types\";\n\n/**\n * Pure selection arithmetic for the typed TimeGrid. No React, no DOM: every\n * selection is DERIVED from an anchor and a target cell, never accumulated\n * from the cells a pointer happened to visit (which is how a fast drag used to\n * leave gaps).\n */\n\nexport type IsDisabled = (r: number, c: number) => boolean;\n\n/** Rectangle from two corners, normalised; linear run from two ends, normalised. */\nexport function selectionBetween(\n shape: TimeGridSelectionShape,\n a: TimeGridCoord,\n b: TimeGridCoord,\n nCols: number,\n): TimeGridSelection {\n if (shape === \"linear\") {\n const ia = a.r * nCols + a.c;\n const ib = b.r * nCols + b.c;\n return ia <= ib\n ? { shape: \"linear\", from: { r: a.r, c: a.c }, to: { r: b.r, c: b.c } }\n : { shape: \"linear\", from: { r: b.r, c: b.c }, to: { r: a.r, c: a.c } };\n }\n return {\n shape: \"rectangle\",\n r1: Math.min(a.r, b.r),\n c1: Math.min(a.c, b.c),\n r2: Math.max(a.r, b.r),\n c2: Math.max(a.c, b.c),\n };\n}\n\n/** The columns `[start, end]` of row `r` inside `sel`, or null. */\nexport function rowSegment(\n sel: TimeGridSelection | null | undefined,\n r: number,\n nCols: number,\n): [number, number] | null {\n if (!sel) return null;\n if (sel.shape === \"rectangle\") {\n return r >= sel.r1 && r <= sel.r2 ? [sel.c1, sel.c2] : null;\n }\n const { from, to } = sel;\n if (r < from.r || r > to.r) return null;\n const start = r === from.r ? from.c : 0;\n const end = r === to.r ? to.c : nCols - 1;\n return start <= end ? [start, end] : null;\n}\n\n/** Every coordinate in `sel`, in selection order (row-major). */\nexport function selectionCoords(\n sel: TimeGridSelection | null | undefined,\n nRows: number,\n nCols: number,\n): TimeGridCoord[] {\n const out: TimeGridCoord[] = [];\n if (!sel) return out;\n const rFrom = sel.shape === \"rectangle\" ? sel.r1 : sel.from.r;\n const rTo = sel.shape === \"rectangle\" ? sel.r2 : sel.to.r;\n for (let r = Math.max(0, rFrom); r <= Math.min(nRows - 1, rTo); r++) {\n const seg = rowSegment(sel, r, nCols);\n if (!seg) continue;\n for (let c = Math.max(0, seg[0]); c <= Math.min(nCols - 1, seg[1]); c++) out.push({ r, c });\n }\n return out;\n}\n\nexport function sameSelection(\n a: TimeGridSelection | null | undefined,\n b: TimeGridSelection | null | undefined,\n): boolean {\n if (!a || !b) return !a && !b;\n if (a.shape === \"rectangle\" && b.shape === \"rectangle\") {\n return a.r1 === b.r1 && a.c1 === b.c1 && a.r2 === b.r2 && a.c2 === b.c2;\n }\n if (a.shape === \"linear\" && b.shape === \"linear\") {\n return a.from.r === b.from.r && a.from.c === b.from.c && a.to.r === b.to.r && a.to.c === b.to.c;\n }\n return false;\n}\n\nexport type ResolvedRange =\n /** Apply this selection. `blocked` lists disabled cells it was clipped by. */\n | { kind: \"select\"; selection: TimeGridSelection; blocked: TimeGridCoord[] }\n /** Leave the selection as it was; report `blocked`. */\n | { kind: \"refuse\"; blocked: TimeGridCoord[] };\n\n/**\n * Resolve anchor -> target under the `disabledRange` policy.\n *\n * - `span`: the requested range, disabled cells included. Nothing is reported.\n * - `refuse`: the requested range if it holds no disabled cell, else nothing.\n * - `clamp`: cut on the ANCHOR's side of the nearest block.\n * linear — the run stops before the first disabled cell walking from\n * the anchor toward the target, in time order.\n * rectangle — the time window (columns) ends before the nearest column,\n * from the anchor, that holds a disabled cell in any selected\n * row. If the anchor's own column is blocked, the row span is\n * cut first, before the nearest row blocked in that column.\n *\n * A disabled anchor is refused under `clamp` and `refuse` alike.\n */\nexport function resolveRange(\n shape: TimeGridSelectionShape,\n anchor: TimeGridCoord,\n target: TimeGridCoord,\n nRows: number,\n nCols: number,\n isDisabled: IsDisabled,\n policy: TimeGridDisabledRange,\n): ResolvedRange {\n const requested = selectionBetween(shape, anchor, target, nCols);\n if (policy === \"span\") return { kind: \"select\", selection: requested, blocked: [] };\n\n const blocked = selectionCoords(requested, nRows, nCols).filter(({ r, c }) => isDisabled(r, c));\n if (blocked.length === 0) return { kind: \"select\", selection: requested, blocked };\n if (policy === \"refuse\" || isDisabled(anchor.r, anchor.c)) return { kind: \"refuse\", blocked };\n\n if (shape === \"linear\") {\n const ia = anchor.r * nCols + anchor.c;\n const it = target.r * nCols + target.c;\n const step = it >= ia ? 1 : -1;\n let last = ia;\n for (let i = ia + step; step > 0 ? i <= it : i >= it; i += step) {\n if (isDisabled(Math.floor(i / nCols), i % nCols)) break;\n last = i;\n }\n const end = { r: Math.floor(last / nCols), c: last % nCols };\n return { kind: \"select\", selection: selectionBetween(\"linear\", anchor, end, nCols), blocked };\n }\n\n const rStep = target.r >= anchor.r ? 1 : -1;\n const cStep = target.c >= anchor.c ? 1 : -1;\n const colBlocked = (c: number, rEnd: number) => {\n for (let r = anchor.r; rStep > 0 ? r <= rEnd : r >= rEnd; r += rStep) {\n if (isDisabled(r, c)) return true;\n }\n return false;\n };\n\n let rEnd = target.r;\n if (colBlocked(anchor.c, rEnd)) {\n rEnd = anchor.r;\n for (let r = anchor.r + rStep; rStep > 0 ? r <= target.r : r >= target.r; r += rStep) {\n if (isDisabled(r, anchor.c)) break;\n rEnd = r;\n }\n }\n let cEnd = anchor.c;\n for (let c = anchor.c + cStep; cStep > 0 ? c <= target.c : c >= target.c; c += cStep) {\n if (colBlocked(c, rEnd)) break;\n cEnd = c;\n }\n return {\n kind: \"select\",\n selection: selectionBetween(\"rectangle\", anchor, { r: rEnd, c: cEnd }, nCols),\n blocked,\n };\n}\n","import {\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { cn } from \"../../utils/cn\";\nimport { composeRefs } from \"../../utils/compose-refs\";\nimport {\n resolveRange,\n rowSegment,\n sameSelection,\n selectionBetween,\n selectionCoords,\n} from \"./TimeGrid.selection\";\nimport type {\n TimeGridCell,\n TimeGridCoord,\n TimeGridMarkDef,\n TimeGridProps,\n TimeGridSelection,\n TimeGridStateDef,\n TimeGridTone,\n} from \"./TimeGrid.types\";\n\n/* Literal class strings so Tailwind's scanner finds them in dist. */\nconst TONE_FILL: Record<TimeGridTone, string> = {\n violet: \"bg-violet-500\",\n emerald: \"bg-emerald-500\",\n sky: \"bg-sky-500\",\n rose: \"bg-rose-500\",\n amber: \"bg-amber-500\",\n indigo: \"bg-indigo-500\",\n blue: \"bg-blue-500\",\n zinc: \"bg-zinc-500\",\n};\n\n/** A state with no tone: the neutral well, from the theme tokens. */\nconst NEUTRAL_FILL =\n \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\";\n\nconst CELL_BASE = \"relative m-px h-[var(--tg-cell-h)] w-[var(--tg-cell-w)] rounded-sm\";\nconst CELL_ENABLED = \"cursor-pointer hover:brightness-90 dark:hover:brightness-125\";\nconst CELL_DISABLED = \"cursor-not-allowed opacity-40\";\n/** Selected: a translucent focus-colour wash over the state's own tone, so both stay readable. */\nconst CELL_SELECTED =\n \"after:pointer-events-none after:absolute after:inset-0 after:rounded-sm after:bg-[color:var(--fancy-focus,var(--color-blue-500))]/50 dark:after:bg-[color:var(--fancy-focus-dark,var(--color-blue-400))]/50\";\n/** The keyboard-focused cell, while the grid has focus. */\nconst CELL_ACTIVE =\n \"z-10 outline-2 outline-offset-1 outline-[color:var(--fancy-text,var(--color-zinc-900))] dark:outline-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\nconst MARK_DOT =\n \"h-1.5 w-1.5 rounded-full ring-1 ring-[color:var(--fancy-surface,var(--color-white))] dark:ring-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\";\n\nconst HEADER_COL =\n \"overflow-visible whitespace-nowrap text-[10px] leading-4 text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\";\nconst HEADER_ROW =\n \"whitespace-nowrap pr-1 text-right text-[10px] font-medium text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\";\nconst HEADER_HOVER =\n \"cursor-pointer hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\nconst TOOLTIP =\n \"pointer-events-none absolute z-20 max-w-xs rounded-md px-2 py-1 text-xs shadow-lg bg-[color:var(--fancy-text,var(--color-zinc-900))] text-[color:var(--fancy-surface,var(--color-white))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\n// Bundlers replace `process.env.NODE_ENV` textually; without one, the\n// reference throws and we read that as production.\ndeclare const process: { env: Record<string, string | undefined> };\n\nfunction isDev(): boolean {\n try {\n return process.env.NODE_ENV !== \"production\";\n } catch {\n return false;\n }\n}\n\nconst EMPTY = {} as Record<string, never>;\n/** Windowing turns itself on above this many columns unless `windowColumns` says otherwise. */\nconst WINDOW_DEFAULT_ABOVE = 500;\nconst WINDOW_MIN_OVERSCAN = 16;\n/** Columns per memoised cell chunk. The window moves in whole chunks. */\nconst CHUNK = 16;\nconst WINDOW_CHUNK = CHUNK;\nconst ROW_START = { gridColumnStart: 1 } as const;\nconst warnedStates = new Set<string>();\nlet warnedNoStates = false;\n\ntype Ctx = {\n baseId: string;\n rows: string[];\n cols: string[];\n states: Record<string, TimeGridStateDef>;\n marks: Record<string, TimeGridMarkDef>;\n stateClass: (state: string) => string;\n cellWidth: number;\n cellHeight: number;\n fns: RefObject<{\n cellId?: (r: number, c: number) => string;\n ariaCell?: (r: number, c: number, on: boolean) => string;\n }>;\n};\n\nconst cellDomId = (baseId: string, r: number, c: number) => `${baseId}-${r}-${c}`;\n\nfunction parseCoord(el: Element | null, baseId: string): TimeGridCoord | null {\n const id = el?.id;\n if (!id || !id.startsWith(baseId + \"-\")) return null;\n const m = /-(\\d+)-(\\d+)$/.exec(id);\n return m ? { r: Number(m[1]), c: Number(m[2]) } : null;\n}\n\ntype RowProps = {\n ctx: Ctx;\n r: number;\n rowCells: TimeGridCell[];\n selStart: number;\n selEnd: number;\n /** Column of the keyboard-focused cell when it is in this row AND the grid has focus, else -1. */\n activeCol: number;\n onRowHeader?: (r: number) => void;\n /** Rendered column window, inclusive. The whole row when not windowed. */\n colStart: number;\n colEnd: number;\n windowed: boolean;\n};\n\n/**\n * A row renders as fixed 16-column chunks, each memoised on primitives. A\n * window shift mounts the chunks entering view and skips the rest; a selection\n * change re-renders only the chunks it touches. Before this, every shift\n * rebuilt every cell of every row (31d: p95 157 ms/frame scrolling at 4x CPU).\n */\nconst TypedRow = memo(function TypedRow({\n ctx,\n r,\n rowCells,\n selStart,\n selEnd,\n activeCol,\n onRowHeader,\n colStart,\n colEnd,\n windowed,\n}: RowProps) {\n const out: ReactNode[] = [];\n out.push(\n <div\n key=\"h\"\n role=\"rowheader\"\n data-react-fancy-timegrid-row={r}\n style={windowed ? ROW_START : undefined}\n onClick={onRowHeader ? () => onRowHeader(r) : undefined}\n className={onRowHeader ? `${HEADER_ROW} ${HEADER_HOVER}` : HEADER_ROW}\n >\n {ctx.rows[r]}\n </div>,\n );\n if (colEnd >= colStart) {\n const k0 = Math.floor(colStart / CHUNK);\n const k1 = Math.floor(colEnd / CHUNK);\n for (let k = k0; k <= k1; k++) {\n const from = Math.max(k * CHUNK, colStart);\n const to = Math.min(k * CHUNK + CHUNK - 1, colEnd);\n const overlaps = selEnd >= from && selStart <= to;\n out.push(\n <CellChunk\n key={k}\n ctx={ctx}\n r={r}\n rowCells={rowCells}\n from={from}\n to={to}\n selStart={overlaps ? Math.max(selStart, from) : -1}\n selEnd={overlaps ? Math.min(selEnd, to) : -2}\n activeCol={activeCol >= from && activeCol <= to ? activeCol : -1}\n place={windowed && from === colStart}\n windowed={windowed}\n />,\n );\n }\n }\n return (\n <div role=\"row\" className=\"contents\">\n {out}\n </div>\n );\n});\n\ntype ChunkProps = {\n ctx: Ctx;\n r: number;\n rowCells: TimeGridCell[];\n from: number;\n to: number;\n selStart: number;\n selEnd: number;\n activeCol: number;\n /** Place the first cell explicitly (the first rendered chunk of a windowed row). */\n place: boolean;\n windowed: boolean;\n};\n\nconst CellChunk = memo(function CellChunk({\n ctx,\n r,\n rowCells,\n from,\n to,\n selStart,\n selEnd,\n activeCol,\n place,\n windowed,\n}: ChunkProps) {\n const { baseId, rows, cols, states, marks, stateClass } = ctx;\n const { cellId, ariaCell } = ctx.fns.current;\n const out: ReactNode[] = [];\n for (let c = from; c <= to; c++) {\n const cell = rowCells?.[c];\n const state = cell?.state ?? \"\";\n const selected = c >= selStart && c <= selEnd;\n const reasons = cell?.reasons?.length ? cell.reasons.join(\". \") : undefined;\n const markIds = cell?.marks;\n let label: string;\n if (ariaCell) {\n label = ariaCell(r, c, selected);\n } else {\n label = `${rows[r]} ${cols[c]} ${states[state]?.label ?? state}`;\n if (markIds?.length) label += \", \" + markIds.map((m) => marks[m]?.label ?? m).join(\", \");\n }\n let cls = stateClass(state) + \" \" + (cell?.disabled ? CELL_DISABLED : CELL_ENABLED);\n if (selected) cls += \" \" + CELL_SELECTED;\n if (c === activeCol) cls += \" \" + CELL_ACTIVE;\n out.push(\n <div\n key={c}\n id={cellDomId(baseId, r, c)}\n role=\"gridcell\"\n aria-colindex={windowed ? c + 2 : undefined}\n // Windowed, the tracks stay the full grid; the row's first rendered\n // cell is placed and the rest flow after it.\n style={place && c === from ? { gridColumnStart: c + 2 } : undefined}\n data-react-fancy-timegrid-cell={cellId ? cellId(r, c) : `${r}:${c}`}\n data-state={state}\n data-marks={markIds?.length ? markIds.join(\" \") : undefined}\n aria-selected={selected}\n aria-disabled={cell?.disabled ? true : undefined}\n aria-label={label}\n aria-description={reasons}\n title={reasons}\n className={cls}\n >\n {markIds?.length ? (\n <span aria-hidden className=\"pointer-events-none absolute right-0 top-0 flex gap-px\">\n {markIds.map((m) => {\n const def = marks[m];\n return def?.icon ? (\n <span key={m} data-react-fancy-timegrid-mark={m} className=\"flex h-2.5 w-2.5 items-center justify-center [&>svg]:h-full [&>svg]:w-full\">\n {def.icon}\n </span>\n ) : (\n <span\n key={m}\n data-react-fancy-timegrid-mark={m}\n className={`${MARK_DOT} ${def?.tone ? TONE_FILL[def.tone] : NEUTRAL_FILL}`}\n />\n );\n })}\n </span>\n ) : null}\n </div>,\n );\n }\n return out;\n});\n\ntype Gesture = {\n anchor: TimeGridCoord;\n last: TimeGridCoord;\n selection: TimeGridSelection | null;\n blockedKey: string;\n};\n\nexport const TypedTimeGrid = forwardRef<HTMLDivElement, TimeGridProps>(function TypedTimeGrid(\n {\n rows,\n cols,\n cells: cellsProp,\n states: statesProp,\n marks: marksProp,\n cellWidth = 20,\n cellHeight = 16,\n sparseColLabels = true,\n toggleStripsOnHeaderClick = true,\n ariaCell,\n cellId,\n className,\n selectionShape = \"rectangle\",\n selection: selectionProp,\n onSelectionChange,\n onSelectionCommit,\n disabledRange = \"clamp\",\n onBlockedSelect,\n onCellHover,\n windowColumns,\n \"aria-label\": ariaLabel,\n },\n ref,\n) {\n if (!statesProp) {\n const msg =\n \"TimeGrid: `cells` was given without `states`. Every cell names a state id, and with no \" +\n \"vocabulary there is no tone to draw it in. Pass `states={{ open: { tone: \\\"emerald\\\", label: \\\"Open\\\" }, … }}`.\";\n if (isDev()) throw new Error(msg);\n if (!warnedNoStates) {\n warnedNoStates = true;\n console.error(msg);\n }\n }\n const states = statesProp ?? EMPTY;\n const marks = marksProp ?? EMPTY;\n const cells = cellsProp!;\n const nRows = rows.length;\n const nCols = cols.length;\n\n const baseId = useId();\n const outerRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n const setOuterRef = useMemo(() => composeRefs(ref, outerRef), [ref]);\n\n const controlled = selectionProp !== undefined;\n const [inner, setInner] = useState<TimeGridSelection | null>(null);\n const selection = controlled ? selectionProp : inner;\n\n const [active, setActive] = useState<TimeGridCoord>({ r: 0, c: 0 });\n const [focused, setFocused] = useState(false);\n const anchorRef = useRef<TimeGridCoord | null>(null);\n const gestureRef = useRef<Gesture | null>(null);\n const hoverRef = useRef<string>(\"\");\n\n /* ── column windowing ───────────────────────────────────────────────── */\n\n const pitchX = cellWidth + 2;\n const windowed = windowColumns ?? nCols > WINDOW_DEFAULT_ABOVE;\n // `null` until measured. Windowed, the first pass renders the frame with NO\n // cells (cheap to lay out, and identical on the server), measures, then\n // renders the real window once. Guessing a width instead cost a full extra\n // render + layout: 31d x 240 mounted slower windowed than not.\n //\n // The raw scroll metrics live in a ref; STATE holds only the chunk-snapped\n // window, so a scroll that stays inside it renders nothing at all.\n const metrics = useRef({ left: 0, width: 0, headerW: 0 });\n const [win, setWin] = useState<{ start: number; end: number } | null>(null);\n\n /** First / last column strictly in view, from the current metrics. */\n const visibleRange = useCallback((): [number, number] => {\n const { left, width, headerW } = metrics.current;\n const first = Math.max(0, Math.floor((left - headerW) / pitchX));\n const last = Math.min(nCols - 1, Math.max(first, Math.ceil((left + width - headerW) / pitchX)));\n return [first, last];\n }, [pitchX, nCols]);\n\n const measure = useCallback(() => {\n const el = outerRef.current;\n if (!el) return;\n const rh = el.querySelector<HTMLElement>('[role=\"rowheader\"]');\n metrics.current = {\n left: el.scrollLeft,\n width: el.clientWidth || (typeof window !== \"undefined\" ? window.innerWidth : 1024),\n headerW: rh ? rh.offsetWidth + 2 : 0,\n };\n // Overscan a quarter viewport each side, snapped to chunks.\n const [first, last] = visibleRange();\n const over = Math.max(WINDOW_MIN_OVERSCAN, Math.ceil((last - first) / 4));\n const start = Math.max(0, Math.floor((first - over) / WINDOW_CHUNK) * WINDOW_CHUNK);\n const end = Math.min(nCols - 1, Math.ceil((last + over + 1) / WINDOW_CHUNK) * WINDOW_CHUNK - 1);\n setWin((w) => (w && w.start === start && w.end === end ? w : { start, end }));\n }, [visibleRange, nCols]);\n\n useLayoutEffect(() => {\n if (!windowed) return;\n measure();\n const el = outerRef.current;\n if (!el || typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(() => measure());\n ro.observe(el);\n return () => ro.disconnect();\n }, [windowed, measure]);\n\n // Applied synchronously: a jump (scrollbar click, a scrolled-to cell) must be\n // in the DOM before the browser paints, or the viewport flashes blank.\n const onScroll = useCallback(() => flushSync(measure), [measure]);\n\n let colStart = 0;\n let colEnd = nCols - 1;\n if (windowed) {\n // Unmeasured: the frame only, no cells.\n colStart = win ? win.start : 0;\n colEnd = win ? Math.min(win.end, nCols - 1) : -1;\n }\n\n /** Scroll so column `c` is in view (arithmetic: it may not be rendered yet). */\n const revealCol = useCallback(\n (c: number) => {\n const el = outerRef.current;\n if (!el) return;\n const { headerW } = metrics.current;\n const width = el.clientWidth || metrics.current.width;\n const x = headerW + c * pitchX;\n let left = el.scrollLeft;\n if (x < left + headerW) left = Math.max(0, x - headerW);\n else if (x + pitchX > left + width) left = x + pitchX - width;\n if (left !== el.scrollLeft) {\n el.scrollLeft = left;\n measure();\n }\n },\n [pitchX, measure],\n );\n\n // Latest values for handlers, so they stay stable across renders.\n const live = useRef({ cells, selection, selectionShape, disabledRange, onSelectionChange, onSelectionCommit, onBlockedSelect, onCellHover });\n live.current = { cells, selection, selectionShape, disabledRange, onSelectionChange, onSelectionCommit, onBlockedSelect, onCellHover };\n\n const fns = useRef<Ctx[\"fns\"][\"current\"]>({});\n fns.current = { cellId, ariaCell };\n\n const stateClass = useMemo(() => {\n const cache = new Map<string, string>();\n return (state: string) => {\n let cls = cache.get(state);\n if (cls !== undefined) return cls;\n const def = states[state];\n if (!def && statesProp && !warnedStates.has(state)) {\n warnedStates.add(state);\n console.warn(`TimeGrid: unknown state id \"${state}\" — not a key of \\`states\\`. Rendering it neutral.`);\n }\n cls = `${CELL_BASE} ${def?.tone ? TONE_FILL[def.tone] : NEUTRAL_FILL}${def?.className ? \" \" + def.className : \"\"}`;\n cache.set(state, cls);\n return cls;\n };\n }, [states, statesProp]);\n\n const ctx = useMemo<Ctx>(\n () => ({ baseId, rows, cols, states, marks, stateClass, cellWidth, cellHeight, fns }),\n [baseId, rows, cols, states, marks, stateClass, cellWidth, cellHeight],\n );\n\n /* ── selection plumbing ─────────────────────────────────────────────── */\n\n const isDisabled = useCallback(\n (r: number, c: number) => !!live.current.cells[r]?.[c]?.disabled,\n [],\n );\n\n const cellsOf = useCallback(\n (sel: TimeGridSelection | null) =>\n selectionCoords(sel, nRows, nCols).map(({ r, c }) => live.current.cells[r]?.[c]),\n [nRows, nCols],\n );\n\n const emit = useCallback(\n (next: TimeGridSelection | null) => {\n if (!controlled) setInner(next);\n live.current.onSelectionChange?.(next, cellsOf(next));\n },\n [controlled, cellsOf],\n );\n\n const reportBlocked = useCallback((blocked: TimeGridCoord[], g: Gesture | null) => {\n if (!blocked.length) return;\n const key = blocked.map((b) => `${b.r}:${b.c}`).join(\",\");\n if (g) {\n if (g.blockedKey === key) return;\n g.blockedKey = key;\n }\n live.current.onBlockedSelect?.(\n blocked.map(({ r, c }) => {\n const reasons = live.current.cells[r]?.[c]?.reasons;\n return reasons ? { r, c, reasons } : { r, c };\n }),\n );\n }, []);\n\n /** Apply anchor -> target under the policy. Returns the selection now in force for this gesture. */\n const extend = useCallback(\n (\n anchor: TimeGridCoord,\n target: TimeGridCoord,\n g: Gesture | null,\n shape = live.current.selectionShape,\n ): TimeGridSelection | null | undefined => {\n const res = resolveRange(shape, anchor, target, nRows, nCols, isDisabled, live.current.disabledRange);\n reportBlocked(res.blocked, g);\n if (res.kind === \"refuse\") return undefined;\n const current = g ? g.selection : live.current.selection;\n if (!sameSelection(current, res.selection) || (g && g.selection === null)) emit(res.selection);\n return res.selection;\n },\n [nRows, nCols, isDisabled, reportBlocked, emit],\n );\n\n const commit = useCallback(\n (sel: TimeGridSelection | null) => {\n if (sel) live.current.onSelectionCommit?.(sel, cellsOf(sel));\n },\n [cellsOf],\n );\n\n /* ── pointer ────────────────────────────────────────────────────────── */\n\n /**\n * Outside every cell (a captured drag past the grid's edge): the nearest cell\n * by geometry, measured from the first and last RENDERED cell's boxes, so it\n * holds when the grid is windowed.\n */\n const clampToGrid = useCallback(\n (x: number, y: number): TimeGridCoord | null => {\n const first = document.getElementById(cellDomId(baseId, 0, colStart));\n const last = document.getElementById(cellDomId(baseId, nRows - 1, colEnd));\n if (!first || !last) return null;\n const a = first.getBoundingClientRect();\n const b = last.getBoundingClientRect();\n const w = (b.right - a.left) / (colEnd - colStart + 1);\n const h = (b.bottom - a.top) / nRows;\n if (!(w > 0) || !(h > 0)) return null;\n return {\n r: Math.min(nRows - 1, Math.max(0, Math.floor((y - a.top) / h))),\n c: Math.min(nCols - 1, Math.max(0, colStart + Math.floor((x - a.left) / w))),\n };\n },\n [baseId, nRows, nCols, colStart, colEnd],\n );\n\n const coordFromEvent = useCallback(\n (e: ReactPointerEvent): TimeGridCoord | null => {\n const t = e.target as Element;\n let hit = parseCoord(t?.closest?.('[role=\"gridcell\"]') ?? null, baseId);\n if (!hit && typeof document.elementFromPoint === \"function\") {\n const under = document.elementFromPoint(e.clientX, e.clientY);\n hit = parseCoord(under?.closest?.('[role=\"gridcell\"]') ?? null, baseId);\n }\n if (!hit) hit = clampToGrid(e.clientX, e.clientY);\n return hit;\n },\n [baseId, clampToGrid],\n );\n\n const onPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (e.button !== 0) return;\n const at = coordFromEvent(e);\n if (!at) return;\n e.preventDefault();\n gridRef.current?.focus({ preventScroll: true });\n try {\n e.currentTarget.setPointerCapture?.(e.pointerId);\n } catch {\n /* jsdom / synthetic pointers */\n }\n setActive(at);\n const g: Gesture = { anchor: at, last: at, selection: null, blockedKey: \"\" };\n const sel = extend(at, at, g);\n if (sel === undefined) {\n gestureRef.current = null;\n return;\n }\n g.selection = sel;\n anchorRef.current = at;\n gestureRef.current = g;\n };\n\n const onPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const g = gestureRef.current;\n if (!g) return;\n const at = coordFromEvent(e);\n if (!at || (at.r === g.last.r && at.c === g.last.c)) return;\n g.last = at;\n setActive(at);\n const sel = extend(g.anchor, at, g);\n if (sel !== undefined) g.selection = sel;\n };\n\n const endGesture = () => {\n const g = gestureRef.current;\n gestureRef.current = null;\n if (g) commit(g.selection);\n };\n\n const onPointerOver = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!live.current.onCellHover) return;\n const at = parseCoord((e.target as Element)?.closest?.('[role=\"gridcell\"]') ?? null, baseId);\n if (!at) return;\n const key = `${at.r}:${at.c}`;\n if (hoverRef.current === key) return;\n hoverRef.current = key;\n live.current.onCellHover(live.current.cells[at.r]?.[at.c] ?? null, at);\n };\n\n const onPointerLeave = () => {\n if (!hoverRef.current) return;\n hoverRef.current = \"\";\n live.current.onCellHover?.(null, null);\n };\n\n /* ── keyboard: the grid holds focus; aria-activedescendant names the cell ── */\n\n const onKeyDown = (e: ReactKeyboardEvent<HTMLDivElement>) => {\n const move: Record<string, [number, number]> = {\n ArrowUp: [-1, 0],\n ArrowDown: [1, 0],\n ArrowLeft: [0, -1],\n ArrowRight: [0, 1],\n };\n const d = move[e.key];\n if (d) {\n e.preventDefault();\n const next = {\n r: Math.min(nRows - 1, Math.max(0, active.r + d[0])),\n c: Math.min(nCols - 1, Math.max(0, active.c + d[1])),\n };\n setActive(next);\n if (e.shiftKey) {\n const anchor = anchorRef.current ?? active;\n anchorRef.current = anchor;\n extend(anchor, next, null);\n }\n return;\n }\n if (e.key === \" \" || e.key === \"Spacebar\") {\n e.preventDefault();\n const sel = live.current.selection;\n const single = selectionBetween(live.current.selectionShape, active, active, nCols);\n if (sel && sameSelection(sel, single)) {\n anchorRef.current = null;\n emit(null);\n } else {\n const res = extend(active, active, null);\n if (res !== undefined) anchorRef.current = active;\n }\n return;\n }\n if (e.key === \"Enter\") {\n e.preventDefault();\n let sel = live.current.selection ?? null;\n if (!sel) {\n const res = extend(active, active, null);\n if (res === undefined) return;\n anchorRef.current = active;\n sel = res;\n }\n commit(sel);\n return;\n }\n if (e.key === \"Escape\") {\n if (live.current.selection) {\n e.preventDefault();\n anchorRef.current = null;\n emit(null);\n }\n }\n };\n\n /* ── header strips: select a whole row / column ─────────────────────── */\n\n const pickStrip = useCallback(\n (a: TimeGridCoord, b: TimeGridCoord) => {\n anchorRef.current = a;\n setActive(a);\n const sel = extend(a, b, null, \"rectangle\");\n if (sel) commit(sel);\n },\n [extend, commit],\n );\n const onRowHeader = useMemo(\n () => (toggleStripsOnHeaderClick ? (r: number) => pickStrip({ r, c: 0 }, { r, c: nCols - 1 }) : undefined),\n [toggleStripsOnHeaderClick, pickStrip, nCols],\n );\n\n /* ── focus tooltip for reasons ──────────────────────────────────────── */\n\n const activeCell = cells[active.r]?.[active.c];\n const activeReasons = focused && activeCell?.reasons?.length ? activeCell.reasons.join(\". \") : null;\n const [tipPos, setTipPos] = useState<{ left: number; top: number } | null>(null);\n useLayoutEffect(() => {\n if (!activeReasons) return;\n const outer = outerRef.current;\n const el = document.getElementById(cellDomId(baseId, active.r, active.c));\n if (!outer || !el) return;\n const o = outer.getBoundingClientRect();\n const b = el.getBoundingClientRect();\n setTipPos({ left: b.left - o.left + outer.scrollLeft, top: b.bottom - o.top + outer.scrollTop + 4 });\n }, [activeReasons, active.r, active.c, baseId]);\n\n const reveal = useRef({ revealCol, windowed: windowed && !!win, visibleRange });\n reveal.current = { revealCol, windowed: windowed && !!win, visibleRange };\n\n // Keep the active cell in view when the keyboard moves it. Windowed, the\n // cell may not exist yet, so scroll by arithmetic and let the window follow.\n useEffect(() => {\n if (!focused) return;\n if (reveal.current.windowed) {\n reveal.current.revealCol(active.c);\n return;\n }\n const el = document.getElementById(cellDomId(baseId, active.r, active.c));\n el?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n }, [focused, active.r, active.c, baseId]);\n\n // A selection set from outside (a host, an agent through a bridge) that is\n // entirely out of view is scrolled to, so what was selected can be seen.\n useEffect(() => {\n const { windowed: w, visibleRange: vr, revealCol: rc } = reveal.current;\n if (!w || !selection || gestureRef.current) return;\n const [f, l] = vr();\n let s0: number;\n let s1: number;\n if (selection.shape === \"rectangle\") {\n s0 = selection.c1;\n s1 = selection.c2;\n } else if (selection.from.r === selection.to.r) {\n s0 = selection.from.c;\n s1 = selection.to.c;\n } else return;\n if (s1 < f || s0 > l) rc(s0);\n }, [selection]);\n\n const colStep = Math.max(1, Math.floor(nCols / 6));\n const tipId = `${baseId}-tip`;\n\n const bodyRows = new Array(nRows);\n for (let r = 0; r < nRows; r++) {\n const seg = rowSegment(selection, r, nCols);\n bodyRows[r] = (\n <TypedRow\n key={r}\n ctx={ctx}\n r={r}\n rowCells={cells[r]}\n selStart={seg ? seg[0] : -1}\n selEnd={seg ? seg[1] : -2}\n activeCol={focused && active.r === r ? active.c : -1}\n onRowHeader={onRowHeader}\n colStart={colStart}\n colEnd={colEnd}\n windowed={windowed}\n />\n );\n }\n\n // Fixed for the life of the grid, windowed or not: changing the tracks on a\n // window shift re-lays out every item, every frame of a scroll.\n const gridTemplateColumns = `max-content repeat(${nCols}, ${pitchX}px)`;\n const headerCols: ReactNode[] = [];\n for (let c = colStart; c <= colEnd; c++) {\n headerCols.push(\n <div\n key={c}\n role=\"columnheader\"\n aria-colindex={windowed ? c + 2 : undefined}\n style={windowed && c === colStart ? { gridColumnStart: c + 2 } : undefined}\n data-react-fancy-timegrid-col={c}\n onClick={toggleStripsOnHeaderClick ? () => pickStrip({ r: 0, c }, { r: nRows - 1, c }) : undefined}\n className={toggleStripsOnHeaderClick ? `${HEADER_COL} ${HEADER_HOVER}` : HEADER_COL}\n >\n {sparseColLabels ? (c % colStep === 0 ? cols[c] : \"\") : cols[c]}\n </div>,\n );\n }\n\n return (\n <div\n ref={setOuterRef}\n data-react-fancy-timegrid=\"\"\n data-typed=\"\"\n data-windowed={windowed ? \"\" : undefined}\n onScroll={windowed ? onScroll : undefined}\n className={cn(\"relative select-none overflow-x-auto\", className)}\n >\n <div\n ref={gridRef}\n role=\"grid\"\n tabIndex={0}\n aria-label={ariaLabel}\n aria-multiselectable=\"true\"\n aria-rowcount={nRows + 1}\n aria-colcount={nCols + 1}\n aria-activedescendant={cellDomId(baseId, active.r, active.c)}\n aria-describedby={activeReasons ? tipId : undefined}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endGesture}\n onPointerCancel={endGesture}\n onPointerOver={onPointerOver}\n onPointerLeave={onPointerLeave}\n onKeyDown={onKeyDown}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n className=\"inline-grid touch-none items-center outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--fancy-focus,var(--color-blue-500))]/40 dark:focus-visible:ring-[color:var(--fancy-focus-dark,var(--color-blue-400))]/20\"\n style={\n {\n gridTemplateColumns,\n \"--tg-cell-w\": `${cellWidth}px`,\n \"--tg-cell-h\": `${cellHeight}px`,\n } as CSSProperties\n }\n >\n <div role=\"row\" className=\"contents\">\n <div role=\"columnheader\" />\n {headerCols}\n </div>\n {bodyRows}\n </div>\n {activeReasons ? (\n <div\n id={tipId}\n role=\"tooltip\"\n data-react-fancy-timegrid-tooltip=\"\"\n className={TOOLTIP}\n style={tipPos ? { left: tipPos.left, top: tipPos.top } : undefined}\n >\n {activeReasons}\n </div>\n ) : null}\n </div>\n );\n});\n","import { forwardRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { TimeGridProps, TimeGridTone } from \"./TimeGrid.types\";\nimport { TypedTimeGrid } from \"./TypedTimeGrid\";\n\nconst TONE_CLASSES: Record<TimeGridTone, string> = {\n violet: \"bg-violet-500 hover:bg-violet-600\",\n emerald: \"bg-emerald-500 hover:bg-emerald-600\",\n sky: \"bg-sky-500 hover:bg-sky-600\",\n rose: \"bg-rose-500 hover:bg-rose-600\",\n amber: \"bg-amber-500 hover:bg-amber-600\",\n indigo: \"bg-indigo-500 hover:bg-indigo-600\",\n blue: \"bg-blue-500 hover:bg-blue-600\",\n zinc: \"bg-zinc-500 hover:bg-zinc-600\",\n};\n\nconst OFF_CLASSES =\n \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:bg-zinc-200 dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:bg-zinc-700\";\n\nconst NO_VALUE: boolean[][] = [];\nconst noop = () => {};\n\n/**\n * Two grids behind one name. `cells` (5.55.0) selects the typed grid: the\n * host's state vocabulary, range selection, keyboard. Without it this is the\n * boolean grid, unchanged since before 5.55.0.\n */\nexport const TimeGrid = forwardRef<HTMLDivElement, TimeGridProps>((props, ref) =>\n props.cells ? <TypedTimeGrid ref={ref} {...props} /> : <BooleanTimeGrid ref={ref} {...props} />,\n);\n\nconst BooleanTimeGrid = forwardRef<HTMLDivElement, TimeGridProps>(\n (\n {\n rows,\n cols,\n value = NO_VALUE,\n onChange = noop,\n toneOn = \"violet\",\n cellWidth = 20,\n cellHeight = 16,\n sparseColLabels = true,\n toggleStripsOnHeaderClick = true,\n ariaCell,\n cellId,\n className,\n },\n ref,\n ) => {\n const [drag, setDrag] = useState<boolean | null>(null);\n\n const setCell = (r: number, c: number, v: boolean) => {\n if (value[r]?.[c] === v) return;\n const next = value.map((row) => row.slice());\n next[r][c] = v;\n onChange(next);\n };\n\n const toggleRow = (r: number) => {\n if (!toggleStripsOnHeaderClick) return;\n const all = value[r].every(Boolean);\n const next = value.map((row) => row.slice());\n for (let c = 0; c < cols.length; c++) next[r][c] = !all;\n onChange(next);\n };\n\n const toggleCol = (c: number) => {\n if (!toggleStripsOnHeaderClick) return;\n const all = value.every((row) => row[c]);\n const next = value.map((row) => row.slice());\n for (let r = 0; r < rows.length; r++) next[r][c] = !all;\n onChange(next);\n };\n\n const colStep = Math.max(1, Math.floor(cols.length / 6));\n const onTone = TONE_CLASSES[toneOn];\n\n return (\n <div\n ref={ref}\n data-react-fancy-timegrid=\"\"\n className={cn(\n \"select-none overflow-x-auto\",\n className,\n )}\n onMouseLeave={() => setDrag(null)}\n onMouseUp={() => setDrag(null)}\n >\n <table className=\"text-[10px]\">\n <thead>\n <tr>\n <th />\n {cols.map((label, c) => (\n <th\n key={c}\n onClick={() => toggleCol(c)}\n style={{ width: cellWidth }}\n data-react-fancy-timegrid-col={c}\n className={cn(\n \"text-zinc-400\",\n toggleStripsOnHeaderClick &&\n \"cursor-pointer hover:text-zinc-700 dark:hover:text-zinc-200\",\n )}\n >\n {sparseColLabels ? (c % colStep === 0 ? label : \"\") : label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((label, r) => (\n <tr key={r}>\n <th\n onClick={() => toggleRow(r)}\n data-react-fancy-timegrid-row={r}\n className={cn(\n \"pr-1 text-right font-medium text-zinc-500\",\n toggleStripsOnHeaderClick &&\n \"cursor-pointer hover:text-zinc-800 dark:hover:text-zinc-200\",\n )}\n >\n {label}\n </th>\n {cols.map((_, c) => {\n const on = value[r]?.[c] ?? false;\n return (\n <td key={c} className=\"p-px\">\n <button\n type=\"button\"\n onMouseDown={() => {\n const v = !on;\n setDrag(v);\n setCell(r, c, v);\n }}\n onMouseEnter={() => drag !== null && setCell(r, c, drag)}\n style={{ width: cellWidth, height: cellHeight }}\n data-react-fancy-timegrid-cell={\n cellId ? cellId(r, c) : `${r}:${c}`\n }\n aria-pressed={on}\n aria-label={\n ariaCell\n ? ariaCell(r, c, on)\n : `${rows[r]} ${cols[c]} ${on ? \"on\" : \"off\"}`\n }\n className={cn(\n \"block rounded-sm transition\",\n on ? onTone : OFF_CLASSES,\n )}\n />\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n },\n);\n\nTimeGrid.displayName = \"TimeGrid\";\nBooleanTimeGrid.displayName = \"BooleanTimeGrid\";\n"]}
|
|
@@ -11,6 +11,35 @@ var chunkZU5Q77OT_cjs = require('./chunk-ZU5Q77OT.cjs');
|
|
|
11
11
|
var react = require('react');
|
|
12
12
|
var jsxRuntime = require('react/jsx-runtime');
|
|
13
13
|
|
|
14
|
+
// src/components/inputs/MultiSwitch/MultiSwitch.colors.ts
|
|
15
|
+
var multiSwitchColorClasses = {
|
|
16
|
+
// The host's colour, from CSS variables -- no dark: variant, because a
|
|
17
|
+
// host that themes per mode scopes the variables themselves.
|
|
18
|
+
brand: { thumb: "bg-brand", text: "text-brand-contrast", border: "border-brand" },
|
|
19
|
+
slate: { thumb: "bg-slate-600 dark:bg-slate-500", text: "text-white", border: "border-slate-500 dark:border-slate-400" },
|
|
20
|
+
gray: { thumb: "bg-gray-600 dark:bg-gray-500", text: "text-white", border: "border-gray-500 dark:border-gray-400" },
|
|
21
|
+
zinc: { thumb: "bg-zinc-600 dark:bg-zinc-500", text: "text-white", border: "border-zinc-500 dark:border-zinc-400" },
|
|
22
|
+
neutral: { thumb: "bg-neutral-600 dark:bg-neutral-500", text: "text-white", border: "border-neutral-500 dark:border-neutral-400" },
|
|
23
|
+
stone: { thumb: "bg-stone-600 dark:bg-stone-500", text: "text-white", border: "border-stone-500 dark:border-stone-400" },
|
|
24
|
+
red: { thumb: "bg-red-600 dark:bg-red-500", text: "text-white", border: "border-red-500 dark:border-red-400" },
|
|
25
|
+
orange: { thumb: "bg-orange-600 dark:bg-orange-500", text: "text-white", border: "border-orange-500 dark:border-orange-400" },
|
|
26
|
+
amber: { thumb: "bg-amber-400 dark:bg-amber-300", text: "text-amber-950", border: "border-amber-500 dark:border-amber-400" },
|
|
27
|
+
yellow: { thumb: "bg-yellow-400 dark:bg-yellow-300", text: "text-yellow-950", border: "border-yellow-500 dark:border-yellow-400" },
|
|
28
|
+
lime: { thumb: "bg-lime-400 dark:bg-lime-300", text: "text-lime-950", border: "border-lime-500 dark:border-lime-400" },
|
|
29
|
+
green: { thumb: "bg-green-600 dark:bg-green-500", text: "text-white", border: "border-green-500 dark:border-green-400" },
|
|
30
|
+
emerald: { thumb: "bg-emerald-600 dark:bg-emerald-500", text: "text-white", border: "border-emerald-500 dark:border-emerald-400" },
|
|
31
|
+
teal: { thumb: "bg-teal-600 dark:bg-teal-500", text: "text-white", border: "border-teal-500 dark:border-teal-400" },
|
|
32
|
+
cyan: { thumb: "bg-cyan-600 dark:bg-cyan-500", text: "text-white", border: "border-cyan-500 dark:border-cyan-400" },
|
|
33
|
+
sky: { thumb: "bg-sky-600 dark:bg-sky-500", text: "text-white", border: "border-sky-500 dark:border-sky-400" },
|
|
34
|
+
blue: { thumb: "bg-blue-600 dark:bg-blue-500", text: "text-white", border: "border-blue-500 dark:border-blue-400" },
|
|
35
|
+
indigo: { thumb: "bg-indigo-600 dark:bg-indigo-500", text: "text-white", border: "border-indigo-500 dark:border-indigo-400" },
|
|
36
|
+
violet: { thumb: "bg-violet-600 dark:bg-violet-500", text: "text-white", border: "border-violet-500 dark:border-violet-400" },
|
|
37
|
+
purple: { thumb: "bg-purple-600 dark:bg-purple-500", text: "text-white", border: "border-purple-500 dark:border-purple-400" },
|
|
38
|
+
fuchsia: { thumb: "bg-fuchsia-600 dark:bg-fuchsia-500", text: "text-white", border: "border-fuchsia-500 dark:border-fuchsia-400" },
|
|
39
|
+
pink: { thumb: "bg-pink-600 dark:bg-pink-500", text: "text-white", border: "border-pink-500 dark:border-pink-400" },
|
|
40
|
+
rose: { thumb: "bg-rose-600 dark:bg-rose-500", text: "text-white", border: "border-rose-500 dark:border-rose-400" }
|
|
41
|
+
};
|
|
42
|
+
var BORDER_DEFAULT = "border-[color:var(--fancy-border-strong,var(--color-zinc-300))] dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))]";
|
|
14
43
|
var sizeClasses = {
|
|
15
44
|
xs: "px-2 py-1 text-xs",
|
|
16
45
|
sm: "px-2.5 py-1.5 text-sm",
|
|
@@ -53,6 +82,8 @@ function MultiSwitch({
|
|
|
53
82
|
const selectedIndex = resolvedOptions.findIndex(
|
|
54
83
|
(o) => o.value === value
|
|
55
84
|
);
|
|
85
|
+
const selectedColor = resolvedOptions[selectedIndex]?.color;
|
|
86
|
+
const colorClasses = selectedColor ? multiSwitchColorClasses[selectedColor] : void 0;
|
|
56
87
|
const updateIndicator = react.useCallback(() => {
|
|
57
88
|
const container = containerRef.current;
|
|
58
89
|
const activeItem = itemRefs.current[selectedIndex];
|
|
@@ -83,7 +114,8 @@ function MultiSwitch({
|
|
|
83
114
|
if (interactive && !e.currentTarget.contains(e.relatedTarget)) exitEdit();
|
|
84
115
|
},
|
|
85
116
|
className: chunkZU5Q77OT_cjs.cn(
|
|
86
|
-
"relative inline-flex rounded-lg border
|
|
117
|
+
"relative inline-flex rounded-lg border bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]",
|
|
118
|
+
colorClasses ? colorClasses.border : BORDER_DEFAULT,
|
|
87
119
|
dirty && "ring-2 ring-amber-400/50",
|
|
88
120
|
error && "ring-2 ring-red-500/50",
|
|
89
121
|
disabled && "opacity-50 cursor-not-allowed",
|
|
@@ -93,7 +125,9 @@ function MultiSwitch({
|
|
|
93
125
|
indicator && /* @__PURE__ */ jsxRuntime.jsx(
|
|
94
126
|
"span",
|
|
95
127
|
{
|
|
96
|
-
|
|
128
|
+
"data-react-fancy-multi-switch-thumb": "",
|
|
129
|
+
"data-color": selectedColor,
|
|
130
|
+
className: colorClasses ? `absolute top-0 bottom-0 rounded-lg ${colorClasses.thumb} transition-all duration-200 ease-out` : "absolute top-0 bottom-0 rounded-lg bg-blue-600 transition-all duration-200 ease-out",
|
|
97
131
|
style: { left: indicator.left, width: indicator.width }
|
|
98
132
|
}
|
|
99
133
|
),
|
|
@@ -121,7 +155,7 @@ function MultiSwitch({
|
|
|
121
155
|
className: chunkZU5Q77OT_cjs.cn(
|
|
122
156
|
"relative z-10 font-medium transition-colors duration-200",
|
|
123
157
|
sizeClasses[size],
|
|
124
|
-
isSelected ? "text-white" : "text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]",
|
|
158
|
+
isSelected ? colorClasses?.text ?? "text-white" : "text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]",
|
|
125
159
|
(disabled || option.disabled) && "cursor-not-allowed"
|
|
126
160
|
),
|
|
127
161
|
children: option.label
|
|
@@ -154,5 +188,5 @@ function MultiSwitch({
|
|
|
154
188
|
MultiSwitch.displayName = "MultiSwitch";
|
|
155
189
|
|
|
156
190
|
exports.MultiSwitch = MultiSwitch;
|
|
157
|
-
//# sourceMappingURL=chunk-
|
|
158
|
-
//# sourceMappingURL=chunk-
|
|
191
|
+
//# sourceMappingURL=chunk-IB673TEG.cjs.map
|
|
192
|
+
//# sourceMappingURL=chunk-IB673TEG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/inputs/MultiSwitch/MultiSwitch.colors.ts","../src/components/inputs/MultiSwitch/MultiSwitch.tsx"],"names":["useId","resolveOption","useFieldMode","useInlineEdit","useControllableState","useRef","useMemo","composeRefs","useState","useCallback","useEffect","DisplayValue","jsxs","cn","jsx","Field"],"mappings":"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","file":"chunk-IB673TEG.cjs","sourcesContent":["// Literal Tailwind class strings for every color in the v4 palette so the\n// scanner can detect them in the published dist (template-built names are\n// invisible to Tailwind's JIT). Shades follow badgeSolid: 600 / dark 500 for\n// the thumb, with dark label text on the light hues (amber, yellow, lime).\nimport type { Color } from \"../../../utils/types\";\n\nexport type MultiSwitchColorClasses = {\n /** The selected thumb's fill. */\n thumb: string;\n /** The selected option's label, readable on the thumb. */\n text: string;\n /** The container border while this option is selected. */\n border: string;\n};\n\nexport const multiSwitchColorClasses: Record<Color, MultiSwitchColorClasses> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: { thumb: \"bg-brand\", text: \"text-brand-contrast\", border: \"border-brand\" },\n slate: { thumb: \"bg-slate-600 dark:bg-slate-500\", text: \"text-white\", border: \"border-slate-500 dark:border-slate-400\" },\n gray: { thumb: \"bg-gray-600 dark:bg-gray-500\", text: \"text-white\", border: \"border-gray-500 dark:border-gray-400\" },\n zinc: { thumb: \"bg-zinc-600 dark:bg-zinc-500\", text: \"text-white\", border: \"border-zinc-500 dark:border-zinc-400\" },\n neutral: { thumb: \"bg-neutral-600 dark:bg-neutral-500\", text: \"text-white\", border: \"border-neutral-500 dark:border-neutral-400\" },\n stone: { thumb: \"bg-stone-600 dark:bg-stone-500\", text: \"text-white\", border: \"border-stone-500 dark:border-stone-400\" },\n red: { thumb: \"bg-red-600 dark:bg-red-500\", text: \"text-white\", border: \"border-red-500 dark:border-red-400\" },\n orange: { thumb: \"bg-orange-600 dark:bg-orange-500\", text: \"text-white\", border: \"border-orange-500 dark:border-orange-400\" },\n amber: { thumb: \"bg-amber-400 dark:bg-amber-300\", text: \"text-amber-950\", border: \"border-amber-500 dark:border-amber-400\" },\n yellow: { thumb: \"bg-yellow-400 dark:bg-yellow-300\", text: \"text-yellow-950\", border: \"border-yellow-500 dark:border-yellow-400\" },\n lime: { thumb: \"bg-lime-400 dark:bg-lime-300\", text: \"text-lime-950\", border: \"border-lime-500 dark:border-lime-400\" },\n green: { thumb: \"bg-green-600 dark:bg-green-500\", text: \"text-white\", border: \"border-green-500 dark:border-green-400\" },\n emerald: { thumb: \"bg-emerald-600 dark:bg-emerald-500\", text: \"text-white\", border: \"border-emerald-500 dark:border-emerald-400\" },\n teal: { thumb: \"bg-teal-600 dark:bg-teal-500\", text: \"text-white\", border: \"border-teal-500 dark:border-teal-400\" },\n cyan: { thumb: \"bg-cyan-600 dark:bg-cyan-500\", text: \"text-white\", border: \"border-cyan-500 dark:border-cyan-400\" },\n sky: { thumb: \"bg-sky-600 dark:bg-sky-500\", text: \"text-white\", border: \"border-sky-500 dark:border-sky-400\" },\n blue: { thumb: \"bg-blue-600 dark:bg-blue-500\", text: \"text-white\", border: \"border-blue-500 dark:border-blue-400\" },\n indigo: { thumb: \"bg-indigo-600 dark:bg-indigo-500\", text: \"text-white\", border: \"border-indigo-500 dark:border-indigo-400\" },\n violet: { thumb: \"bg-violet-600 dark:bg-violet-500\", text: \"text-white\", border: \"border-violet-500 dark:border-violet-400\" },\n purple: { thumb: \"bg-purple-600 dark:bg-purple-500\", text: \"text-white\", border: \"border-purple-500 dark:border-purple-400\" },\n fuchsia: { thumb: \"bg-fuchsia-600 dark:bg-fuchsia-500\", text: \"text-white\", border: \"border-fuchsia-500 dark:border-fuchsia-400\" },\n pink: { thumb: \"bg-pink-600 dark:bg-pink-500\", text: \"text-white\", border: \"border-pink-500 dark:border-pink-400\" },\n rose: { thumb: \"bg-rose-600 dark:bg-rose-500\", text: \"text-white\", border: \"border-rose-500 dark:border-rose-400\" },\n};\n","import { useRef, useState, useEffect, useCallback, useId, useMemo, type Ref } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { composeRefs } from \"../../../utils/compose-refs\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport { resolveOption } from \"../inputs.utils\";\nimport type { Color, Size } from \"../../../utils/types\";\nimport type { MultiSwitchProps } from \"./MultiSwitch.types\";\nimport { multiSwitchColorClasses } from \"./MultiSwitch.colors\";\n\nconst BORDER_DEFAULT =\n \"border-[color:var(--fancy-border-strong,var(--color-zinc-300))] dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))]\";\n\nconst sizeClasses: Record<Size, string> = {\n xs: \"px-2 py-1 text-xs\",\n sm: \"px-2.5 py-1.5 text-sm\",\n md: \"px-3 py-2 text-sm\",\n lg: \"px-4 py-2.5 text-base\",\n xl: \"px-5 py-3 text-lg\",\n};\n\nexport function MultiSwitch<V = string>({\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n name,\n list,\n value: controlledValue,\n defaultValue,\n onValueChange,\n linear,\n mode,\n ...rest\n}: MultiSwitchProps<V>) {\n const reactId = useId();\n // A `<label for>` cannot name a div[role=\"radiogroup\"], so the group points at\n // the label instead. Needs an id the label and the group both agree on.\n const labelId = label ? `${id ?? reactId}-label` : undefined;\n\n // resolveOption hands an object option back as-is, so `color` survives it.\n const resolvedOptions = list.map(resolveOption) as Array<\n ReturnType<typeof resolveOption<V>> & { color?: Color }\n >;\n const fallback = defaultValue ?? resolvedOptions[0]?.value;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(controlledValue, fallback as V, onValueChange);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const externalRef = (rest as { ref?: Ref<HTMLDivElement> }).ref;\n const containerSetRef = useMemo(() => composeRefs(externalRef, containerRef), [externalRef]);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const [indicator, setIndicator] = useState<{ left: number; width: number } | null>(null);\n\n const selectedIndex = resolvedOptions.findIndex(\n (o) => o.value === value,\n );\n const selectedColor = resolvedOptions[selectedIndex]?.color;\n const colorClasses = selectedColor ? multiSwitchColorClasses[selectedColor] : undefined;\n\n const updateIndicator = useCallback(() => {\n const container = containerRef.current;\n const activeItem = itemRefs.current[selectedIndex];\n if (!container || !activeItem) {\n setIndicator(null);\n return;\n }\n const containerRect = container.getBoundingClientRect();\n const itemRect = activeItem.getBoundingClientRect();\n setIndicator({\n left: itemRect.left - containerRect.left,\n width: itemRect.width,\n });\n }, [selectedIndex]);\n\n useEffect(() => {\n updateIndicator();\n }, [updateIndicator]);\n\n const control = !showControl ? (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {resolvedOptions.find((o) => o.value === value)?.label}\n </DisplayValue>\n ) : (\n <div\n {...rest}\n // React 19 passes `ref` to a function component as a plain prop, so a\n // caller's ref (Tooltip's anchor, or anyone's) arrives in `rest`. Spread\n // after `ref={containerRef}` it REPLACED the ref the thumb is measured\n // from, and the selected thumb never rendered. Feed both instead.\n ref={containerSetRef}\n data-react-fancy-multi-switch=\"\"\n role=\"radiogroup\"\n id={id}\n aria-labelledby={labelId}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n className={cn(\n \"relative inline-flex rounded-lg border bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n colorClasses ? colorClasses.border : BORDER_DEFAULT,\n dirty && \"ring-2 ring-amber-400/50\",\n error && \"ring-2 ring-red-500/50\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n )}\n >\n {indicator && (\n <span\n data-react-fancy-multi-switch-thumb=\"\"\n data-color={selectedColor}\n className={\n colorClasses\n ? `absolute top-0 bottom-0 rounded-lg ${colorClasses.thumb} transition-all duration-200 ease-out`\n : \"absolute top-0 bottom-0 rounded-lg bg-blue-600 transition-all duration-200 ease-out\"\n }\n style={{ left: indicator.left, width: indicator.width }}\n />\n )}\n {resolvedOptions.map((option, index) => {\n const isSelected = option.value === value;\n return (\n <button\n key={String(option.value)}\n ref={(el) => { itemRefs.current[index] = el; }}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n disabled={disabled || option.disabled}\n autoFocus={interactive && (selectedIndex === -1 ? index === 0 : isSelected)}\n onClick={() => {\n if (linear) {\n const nextIndex = (selectedIndex + 1) % resolvedOptions.length;\n setValue(resolvedOptions[nextIndex].value as V);\n } else {\n setValue(option.value as V);\n }\n }}\n className={cn(\n \"relative z-10 font-medium transition-colors duration-200\",\n sizeClasses[size],\n isSelected\n ? (colorClasses?.text ?? \"text-white\")\n : \"text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n (disabled || option.disabled) && \"cursor-not-allowed\",\n )}\n >\n {option.label}\n </button>\n );\n })}\n {name && <input type=\"hidden\" name={name} value={String(value)} />}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n labelId={labelId}\n description={description}\n error={error}\n required={required}\n htmlFor={id}\n size={size}\n >\n {control}\n </Field>\n );\n }\n\n return control;\n}\n\nMultiSwitch.displayName = \"MultiSwitch\";\n"]}
|