@mshuja288/aksuicore 0.2.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 +46 -0
- package/PLAN.md +139 -0
- package/README.md +192 -0
- package/VERSIONING.md +33 -0
- package/dist/aksui.css +1633 -0
- package/dist/index.cjs +1145 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +182 -0
- package/dist/index.d.ts +182 -0
- package/dist/index.js +1127 -0
- package/dist/index.js.map +1 -0
- package/package.json +72 -0
- package/src/index.ts +5 -0
- package/src/patterns/AppShell.tsx +69 -0
- package/src/patterns/RecordWorkspace.tsx +567 -0
- package/src/patterns/index.ts +2 -0
- package/src/primitives/Button.tsx +29 -0
- package/src/primitives/DateField.tsx +255 -0
- package/src/primitives/Dialog.tsx +45 -0
- package/src/primitives/FormActions.tsx +36 -0
- package/src/primitives/Pagination.tsx +75 -0
- package/src/primitives/Select.tsx +195 -0
- package/src/primitives/SideNav.tsx +35 -0
- package/src/primitives/Snackbar.tsx +87 -0
- package/src/primitives/Topbar.tsx +89 -0
- package/src/primitives/index.ts +9 -0
- package/src/theme/aksui.css +70 -0
- package/src/theme/index.ts +3 -0
- package/src/theme/patterns.css +733 -0
- package/src/theme/primitives.css +732 -0
- package/src/theme/shell.css +92 -0
- package/src/theme/styles.css +4 -0
- package/src/theme/tokens.ts +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme/tokens.ts","../src/theme/index.ts","../src/primitives/Button.tsx","../src/primitives/Select.tsx","../src/primitives/DateField.tsx","../src/primitives/Dialog.tsx","../src/primitives/Snackbar.tsx","../src/primitives/Topbar.tsx","../src/primitives/SideNav.tsx","../src/primitives/Pagination.tsx","../src/primitives/FormActions.tsx","../src/patterns/AppShell.tsx","../src/patterns/RecordWorkspace.tsx"],"names":["jsx","useId","useRef","useState","useLayoutEffect","useEffect","jsxs","Fragment","createPortal","useMemo","useSyncExternalStore","useIsClient"],"mappings":";;;;;;;AACO,IAAM,WAAA,GAAc;AAAA,EACzB,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,GAAA,EAAK,SAAA;AAAA,EACL,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,QAAA,EAAU,SAAA;AAAA,EACV,EAAA,EAAI,SAAA;AAAA,EACJ,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,KAAA;AAAA,EACR,SAAA,EAAW,MAAA;AAAA,EACX,iBAAA,EAAmB,MAAA;AAAA,EACnB,iBAAA,EAAmB,MAAA;AAAA,EACnB,gBAAA,EAAkB,OAAA;AAAA,EAClB,iBAAA,EAAmB;AACrB;;;AClBO,IAAM,iBAAA,GAAoB;ACKjC,IAAM,YAAA,GAA8C;AAAA,EAClD,OAAA,EAAS,EAAA;AAAA,EACT,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;AAEO,SAAS,MAAA,CAAO;AAAA,EACrB,OAAA,GAAU,SAAA;AAAA,EACV,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAGG;AACD,EAAA,MAAM,OAAA,GAAU,CAAC,YAAA,EAAc,YAAA,CAAa,OAAO,CAAA,EAAG,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACzF,EAAA,uBACEA,cAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAW,OAAA,EAAU,GAAG,OAC3C,QAAA,EACH,CAAA;AAEJ;ACTO,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY;AACd,CAAA,EAQG;AACD,EAAA,MAAM,SAASC,WAAA,EAAM;AACrB,EAAA,MAAM,OAAA,GAAUC,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAUA,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAA8B,IAAI,CAAA;AAChE,EAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,CAAK,CAAC,WAAW,MAAA,CAAO,KAAA,KAAU,KAAK,CAAA,IAAK,IAAA;AAErE,EAAA,SAAS,cAAA,GAAiB;AACxB,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,KAAK,qBAAA,EAAsB;AACxC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,GAAc,IAAA,CAAK,MAAA,GAAS,EAAA;AACtD,IAAA,MAAM,UAAA,GAAa,KAAK,GAAA,GAAM,EAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,UAAA,GAAa,GAAA,IAAO,UAAA,GAAa,UAAA;AAChD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,IAAI,GAAA,EAAK,MAAA,GAAS,UAAA,GAAa,UAAU,CAAC,CAAA;AAC/E,IAAA,UAAA,CAAW;AAAA,MACT,KAAK,MAAA,GAAS,IAAA,CAAK,GAAA,GAAM,CAAA,GAAI,KAAK,MAAA,GAAS,CAAA;AAAA,MAC3C,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAAC,qBAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,cAAA,EAAe;AACf,IAAA,SAAS,YAAA,GAAe;AACtB,MAAA,cAAA,EAAe;AAAA,IACjB;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAC9C,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,YAAA,EAAc,IAAI,CAAA;AACpD,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,YAAY,CAAA;AACjD,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,YAAA,EAAc,IAAI,CAAA;AAAA,IACzD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,SAAS,cAAc,KAAA,EAAmB;AACxC,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,CAAS,MAAM,KAAK,OAAA,CAAQ,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1E,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AACA,IAAA,SAAS,UAAU,KAAA,EAAsB;AACvC,MAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC1B,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,aAAa,CAAA;AACpD,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC9C,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,aAAa,CAAA;AACvD,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAAA,IACnD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,SAAS,OAAO,IAAA,EAAc;AAC5B,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf;AAEA,EAAA,uBACEC,eAAA,CAAC,SAAI,SAAA,EAAW,CAAA,WAAA,EAAc,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAAG,GAAA,EAAK,OAAA,EACrD,QAAA,EAAA;AAAA,oBAAAN,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,mBAAA;AAAA,QACV,QAAA,EAAU,EAAA;AAAA,QACV,KAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAU,MAAM,MAAA;AAAA,QAChB,aAAA,EAAY;AAAA;AAAA,KACd;AAAA,oBACAM,eAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,OAAO,yBAAA,GAA4B,oBAAA;AAAA,QAC9C,QAAA;AAAA,QACA,eAAA,EAAc,SAAA;AAAA,QACd,eAAA,EAAe,IAAA;AAAA,QACf,eAAA,EAAe,MAAA;AAAA,QACf,SAAS,MAAM;AACb,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,OAAA,CAAQ,CAAC,OAAA,KAAY,CAAC,OAAO,CAAA;AAAA,UAC/B;AAAA,QACF,CAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAN,eAAC,MAAA,EAAA,EAAK,SAAA,EAAW,WAAW,kBAAA,GAAqB,wBAAA,EAC9C,qCACCM,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,QAAA,CAAS,IAAA,mBAAOP,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,eAAA,EAAkB,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,aAAA,EAAY,MAAA,EAAO,CAAA,GAAK,IAAA;AAAA,YAC5F,QAAA,CAAS;AAAA,WAAA,EACZ,IAEA,WAAA,EAEJ,CAAA;AAAA,0BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAqB,SAAQ,WAAA,EAAY,aAAA,EAAY,MAAA,EAClE,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAE,uBAAA,EAAwB,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,OAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EACnI;AAAA;AAAA;AAAA,KACF;AAAA,IACC,QAAQ,OAAA,GACLQ,qBAAA;AAAA,sBACER,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,OAAA;AAAA,UACL,EAAA,EAAI,MAAA;AAAA,UACJ,SAAA,EAAW,OAAA,CAAQ,MAAA,GAAS,yBAAA,GAA4B,iBAAA;AAAA,UACxD,IAAA,EAAK,SAAA;AAAA,UACL,KAAA,EAAO;AAAA,YACL,GAAA,EAAK,OAAA,CAAQ,MAAA,GAAS,MAAA,GAAY,OAAA,CAAQ,GAAA;AAAA,YAC1C,QAAQ,OAAA,CAAQ,MAAA,GAAS,MAAA,CAAO,WAAA,GAAc,QAAQ,GAAA,GAAM,MAAA;AAAA,YAC5D,MAAM,OAAA,CAAQ,IAAA;AAAA,YACd,OAAO,OAAA,CAAQ,KAAA;AAAA,YACf,WAAW,OAAA,CAAQ;AAAA,WACrB;AAAA,UAEC,QAAA,EAAA,OAAA,CAAQ,MAAA,KAAW,CAAA,mBAClBA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAmB,QAAA,EAAA,YAAA,EAAU,CAAA,GAE5C,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACtB,YAAA,MAAM,MAAA,GAAS,OAAO,KAAA,KAAU,KAAA;AAChC,YAAA,uBACEM,eAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBAEC,IAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAK,QAAA;AAAA,gBACL,eAAA,EAAe,MAAA;AAAA,gBACf,SAAA,EAAW,SAAS,0BAAA,GAA6B,mBAAA;AAAA,gBACjD,OAAA,EAAS,MAAM,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAAA,gBAEjC,QAAA,EAAA;AAAA,kBAAA,MAAA,CAAO,IAAA,mBAAON,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,eAAA,EAAkB,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,aAAA,EAAY,MAAA,EAAO,CAAA,GAAK,IAAA;AAAA,kCACzFA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,kBACnB,MAAA,mBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAmB,OAAA,EAAQ,WAAA,EAAY,aAAA,EAAY,MAAA,EAChE,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAE,2BAAA,EAA4B,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EACvI,CAAA,GACE;AAAA;AAAA,eAAA;AAAA,cAbC,OAAO,KAAA,IAAS;AAAA,aAcvB;AAAA,UAEJ,CAAC;AAAA;AAAA,OAEL;AAAA,MACA,QAAA,CAAS;AAAA,KACX,GACA;AAAA,GAAA,EACN,CAAA;AAEJ;AAGO,IAAM,SAAA,GAAY;AC5LzB,IAAM,aAAA,GAAgB,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAE/D,SAAS,IAAI,KAAA,EAAe;AAC1B,EAAA,OAAO,MAAA,CAAO,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACtC;AAEA,SAAS,MAAM,IAAA,EAAY;AACzB,EAAA,OAAO,GAAG,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA,EAAI,IAAI,IAAA,CAAK,QAAA,EAAS,GAAI,CAAC,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS,CAAC,CAAA,CAAA;AACjF;AAEA,SAAS,SAAS,KAAA,EAAe;AAC/B,EAAA,IAAI,CAAC,qBAAA,CAAsB,IAAA,CAAK,KAAK,CAAA,EAAG;AACtC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,CAAC,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA,GAAI,MAAM,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AACtD,EAAA,MAAM,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,KAAA,GAAQ,GAAG,GAAG,CAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,IAAA,IAAQ,IAAA,CAAK,QAAA,EAAS,KAAM,KAAA,GAAQ,CAAA,IAAK,IAAA,CAAK,OAAA,EAAQ,KAAM,GAAA,EAAK;AAC1F,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAAe;AACpC,EAAA,MAAM,IAAA,GAAO,SAAS,KAAK,CAAA;AAC3B,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAG,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,IAAA,CAAK,QAAA,KAAa,CAAC,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,aAAa,CAAA,CAAA;AACjF;AAEA,SAAS,aAAa,IAAA,EAAY;AAChC,EAAA,OAAO,IAAI,KAAK,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,QAAA,IAAY,CAAC,CAAA;AACxD;AAEA,SAAS,WAAW,KAAA,EAAa;AAC/B,EAAA,MAAM,KAAA,GAAQ,aAAa,KAAK,CAAA;AAChC,EAAA,MAAM,WAAA,GAAA,CAAe,KAAA,CAAM,MAAA,EAAO,GAAI,CAAA,IAAK,CAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,KAAK,CAAA;AAC5B,EAAA,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAQ,GAAI,WAAW,CAAA;AAC3C,EAAA,OAAO,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,IAAG,EAAG,CAAC,GAAG,KAAA,KAAU;AAC9C,IAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,KAAK,CAAA;AAC1B,IAAA,GAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAQ,GAAI,KAAK,CAAA;AACnC,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH;AASO,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW;AACb,CAAA,EAMG;AACD,EAAA,MAAM,OAAA,GAAUE,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAUA,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,SAAS,KAAK,CAAA;AAC/B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAA8B,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,cAAAA,CAAS,MAAM,YAAA,CAAa,QAAA,oBAAY,IAAI,IAAA,EAAM,CAAC,CAAA;AACrF,EAAA,MAAM,KAAA,GAAQM,cAAQ,MAAM,UAAA,CAAW,SAAS,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAC9D,EAAA,MAAM,KAAA,GAAQ,KAAA,iBAAM,IAAI,IAAA,EAAM,CAAA;AAC9B,EAAA,MAAM,SAAS,QAAA,IAAY,QAAA;AAE3B,EAAA,SAAS,cAAA,GAAiB;AACxB,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,KAAK,qBAAA,EAAsB;AACxC,IAAA,MAAM,SAAS,MAAA,CAAO,WAAA,GAAc,KAAK,MAAA,GAAS,GAAA,IAAO,KAAK,GAAA,GAAM,GAAA;AACpE,IAAA,UAAA,CAAW;AAAA,MACT,KAAK,MAAA,GAAS,IAAA,CAAK,GAAA,GAAM,CAAA,GAAI,KAAK,MAAA,GAAS,CAAA;AAAA,MAC3C,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,MAC/B;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAAL,sBAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,cAAA,EAAe;AACf,IAAA,SAAS,YAAA,GAAe;AACtB,MAAA,cAAA,EAAe;AAAA,IACjB;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAC9C,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,YAAA,EAAc,IAAI,CAAA;AACpD,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,YAAY,CAAA;AACjD,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,YAAA,EAAc,IAAI,CAAA;AAAA,IACzD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAAC,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,SAAS,cAAc,KAAA,EAAmB;AACxC,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,CAAS,MAAM,KAAK,OAAA,CAAQ,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1E,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AACA,IAAA,SAAS,UAAU,KAAA,EAAsB;AACvC,MAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC1B,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,aAAa,CAAA;AACpD,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC9C,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,aAAa,CAAA;AACvD,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAAA,IACnD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,SAAS,UAAA,GAAa;AACpB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA;AAAA,IACF;AACA,IAAA,YAAA,CAAa,YAAA,CAAa,QAAA,oBAAY,IAAI,IAAA,EAAM,CAAC,CAAA;AACjD,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd;AAEA,EAAA,SAAS,OAAO,IAAA,EAAY;AAC1B,IAAA,QAAA,GAAW,KAAA,CAAM,IAAI,CAAC,CAAA;AACtB,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf;AAEA,EAAA,MAAM,UAAA,GAAa,UAAU,cAAA,CAAe,MAAA,EAAW,EAAE,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW,CAAA;AAEzF,EAAA,uBACEC,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAW,WAAW,sBAAA,GAAyB,YAAA,EAAc,KAAK,OAAA,EACrE,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,OAAO,yBAAA,GAA4B,oBAAA;AAAA,QAC9C,QAAA;AAAA,QACA,SAAS,MAAM;AACb,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA;AAAA,UACF;AACA,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,UACf,CAAA,MAAO;AACL,YAAA,UAAA,EAAW;AAAA,UACb;AAAA,QACF,CAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,KAAA,GAAQ,kBAAA,GAAqB,0BAC3C,QAAA,EAAA,KAAA,GAAQ,aAAA,CAAc,KAAK,CAAA,GAAI,WAAA,EAClC,CAAA;AAAA,0BACAM,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAkB,OAAA,EAAQ,WAAA,EAAY,eAAY,MAAA,EAC/D,QAAA,EAAA;AAAA,4BAAAN,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,KAAA,EAAM,CAAA,EAAE,KAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,IAAG,GAAA,EAAI,IAAA,EAAK,QAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM,CAAA;AAAA,4BACxGA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8BAAA,EAA+B,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ;AAAA,WAAA,EACnH;AAAA;AAAA;AAAA,KACF;AAAA,IACC,QAAQ,OAAA,GACLQ,qBAAAA;AAAA,sBACEF,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,OAAA;AAAA,UACL,SAAA,EAAU,aAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,GAAA,EAAK,OAAA,CAAQ,MAAA,GAAS,MAAA,GAAY,OAAA,CAAQ,GAAA;AAAA,YAC1C,QAAQ,OAAA,CAAQ,MAAA,GAAS,MAAA,CAAO,WAAA,GAAc,QAAQ,GAAA,GAAM,MAAA;AAAA,YAC5D,MAAM,OAAA,CAAQ,IAAA;AAAA,YACd,OAAO,OAAA,CAAQ;AAAA,WACjB;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,8BAAAN,cAAAA,CAAC,YAAQ,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,8BACpBM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,gCAAAN,cAAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,OAAA,EAAQ,YAAA,EAAW,gBAAA,EAAiB,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,IAAA,CAAK,SAAA,CAAU,WAAA,EAAY,EAAG,SAAA,CAAU,QAAA,KAAa,CAAA,EAAG,CAAC,CAAC,CAAA,EAAG,QAAA,EAAA,QAAA,EAEjK,CAAA;AAAA,gCACAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,WAAU,OAAA,EAAQ,YAAA,EAAW,YAAA,EAAa,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,IAAA,CAAK,SAAA,CAAU,WAAA,EAAY,EAAG,SAAA,CAAU,QAAA,KAAa,CAAA,EAAG,CAAC,CAAC,CAAA,EAAG,QAAA,EAAA,QAAA,EAE7J;AAAA,eAAA,EACF;AAAA,aAAA,EACF,CAAA;AAAA,4BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,KAAA,qBAClBA,cAAAA,CAAC,MAAA,EAAA,EAAkB,QAAA,EAAA,KAAA,EAAA,EAAR,KAAc,CAC1B,CAAA,EACH,CAAA;AAAA,4BACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAAQ;AAClB,cAAA,MAAM,GAAA,GAAM,MAAM,GAAG,CAAA;AACrB,cAAA,MAAM,OAAA,GAAU,GAAA,CAAI,QAAA,EAAS,KAAM,UAAU,QAAA,EAAS;AACtD,cAAA,MAAM,aAAa,KAAA,KAAU,GAAA;AAC7B,cAAA,MAAM,UAAU,KAAA,KAAU,GAAA;AAC1B,cAAA,MAAM,SAAA,GAAY;AAAA,gBAChB,iBAAA;AAAA,gBACA,UAAU,SAAA,GAAY,EAAA;AAAA,gBACtB,aAAa,UAAA,GAAa,EAAA;AAAA,gBAC1B,UAAU,OAAA,GAAU;AAAA,eACtB,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,cAAA,uBACEA,cAAAA,CAAC,QAAA,EAAA,EAAmC,IAAA,EAAK,QAAA,EAAS,WAAsB,OAAA,EAAS,MAAM,MAAA,CAAO,GAAG,GAC9F,QAAA,EAAA,GAAA,CAAI,OAAA,MADM,GAAA,GAAM,MAAA,CAAO,OAAO,CAEjC,CAAA;AAAA,YAEJ,CAAC,CAAA,EACH,CAAA;AAAA,4BACAM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,8BAAAN,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAA,EAAU,OAAA;AAAA,kBACV,SAAS,MAAM;AACb,oBAAA,QAAA,GAAW,EAAE,CAAA;AACb,oBAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,kBACf,CAAA;AAAA,kBACD,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BACAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAA,EAAU,OAAA;AAAA,kBACV,SAAS,MAAM;AACb,oBAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,oBAAA,YAAA,CAAa,YAAA,CAAa,GAAG,CAAC,CAAA;AAC9B,oBAAA,MAAA,CAAO,GAAG,CAAA;AAAA,kBACZ,CAAA;AAAA,kBACD,QAAA,EAAA;AAAA;AAAA;AAED,aAAA,EACF;AAAA;AAAA;AAAA,OACF;AAAA,MACA,QAAA,CAAS;AAAA,KACX,GACA;AAAA,GAAA,EACN,CAAA;AAEJ;ACzPO,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO;AACT,CAAA,EAMG;AACD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EAAkB,OAAA,EAAS,SACxC,QAAA,kBAAAM,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAO,oBAAA,GAAuB,QAAA;AAAA,MACzC,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,MAAA;AAAA,MACX,YAAA,EAAY,KAAA;AAAA,MACZ,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,MAE1C,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC,QAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACXA,cAAAA,CAAC,MAAA,EAAA,EAAO,SAAQ,OAAA,EAAQ,OAAA,EAAS,SAAS,QAAA,EAAA,OAAA,EAE1C;AAAA,SAAA,EACF,CAAA;AAAA,QACC;AAAA;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAGO,IAAM,UAAA,GAAa;ACvC1B,SAAS,WAAA,GAAc;AACrB,EAAA,OAAOU,0BAAA;AAAA,IACL,MAAM,MAAM;AAAA,IAAC,CAAA;AAAA,IACb,MAAM,IAAA;AAAA,IACN,MAAM;AAAA,GACR;AACF;AAEA,SAAS,WAAA,GAAc;AACrB,EAAA,uBACEJ,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,OAAA,EAAQ,WAAA,EAAY,eAAY,MAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAN,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM,CAAA;AAAA,oBAClFA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,8BAAA;AAAA,QACF,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAO,cAAA;AAAA,QACP,WAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAc,OAAA;AAAA,QACd,cAAA,EAAe;AAAA;AAAA;AACjB,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,SAAA,GAAY;AACnB,EAAA,uBACEM,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,OAAA,EAAQ,WAAA,EAAY,eAAY,MAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAN,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,+BAAA;AAAA,QACF,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAO,cAAA;AAAA,QACP,WAAA,EAAY,KAAA;AAAA,QACZ,cAAA,EAAe;AAAA;AAAA,KACjB;AAAA,oBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAA,EAAa,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,CAAA;AAAA,oBAC/FA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,IAAG,MAAA,EAAO,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe;AAAA,GAAA,EACtD,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,EAAAK,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,SAAA,EAAW;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,MAAA,CAAO,UAAA,CAAW,SAAA,EAAW,OAAA,GAAU,OAAO,IAAI,CAAA;AAClE,IAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,OAAO,CAAA;AAAA,EAC1C,CAAA,EAAG,CAAC,OAAA,EAAS,OAAA,EAAS,SAAS,CAAC,CAAA;AAEhC,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAA,EAAS;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAOG,qBAAAA;AAAA,oBACLR,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,WAAA,EAAU,QAAA,EACvC,QAAA,kBAAAM,eAAAA,CAAC,SAAI,SAAA,EAAW,OAAA,GAAU,kBAAA,GAAqB,UAAA,EAAY,MAAK,QAAA,EAC7D,QAAA,EAAA;AAAA,MAAA,OAAA,mBAAUN,cAAAA,CAAC,WAAA,EAAA,EAAY,CAAA,mBAAKA,eAAC,SAAA,EAAA,EAAU,CAAA;AAAA,sBACxCA,cAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,MACX,SAAA,mBACCA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,gBAAA,EAAiB,YAAA,EAAW,SAAA,EAAU,OAAA,EAAS,SAAA,EAAW,kBAE1F,CAAA,GACE;AAAA,KAAA,EACN,CAAA,EACF,CAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AAGO,IAAM,aAAA,GAAgB;ACjFtB,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,QAAA,GAAW,EAAA;AAAA,EACX,QAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIG,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,OAAA,GAAUD,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,WAAW,QAAA,IAAY,GAAA,EAAK,MAAM,CAAA,EAAG,CAAC,EAAE,WAAA,EAAY;AAE1D,EAAAG,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA;AAAA,IACF;AAEA,IAAA,SAAS,cAAc,KAAA,EAAmB;AACxC,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAC,OAAA,CAAQ,QAAQ,QAAA,CAAS,KAAA,CAAM,MAAc,CAAA,EAAG;AACtE,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,aAAa,CAAA;AACpD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,aAAa,CAAA;AAAA,EACtE,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,uBACEC,eAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,QAAA,EAChB,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACZ,QAAA,EAAA;AAAA,MAAA,OAAA,mBACCN,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,aAAA;AAAA,UACV,GAAA,EAAK,OAAA;AAAA,UACL,GAAA,EAAK,OAAA;AAAA,UACL,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,YAAA,KAAA,CAAM,cAAc,MAAA,GAAS,IAAA;AAAA,UAC/B;AAAA;AAAA,OACF,GACE,IAAA;AAAA,sBACJA,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACb,CAAA;AAAA,oBACAM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAiB,KAAK,OAAA,EAClC,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,MACA,QAAA,mBACCA,eAAAA,CAAAC,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAP,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,eAAA;AAAA,YACV,eAAA,EAAc,MAAA;AAAA,YACd,eAAA,EAAe,QAAA;AAAA,YACf,SAAS,MAAM,WAAA,CAAY,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,YAC1C,OAAO,QAAA,IAAY,SAAA;AAAA,YAEnB,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAU,QAAA,EAAA,OAAA,EAAQ;AAAA;AAAA,SACpC;AAAA,QACC,2BACCM,eAAAA,CAAC,SAAI,SAAA,EAAU,aAAA,EAAc,MAAK,MAAA,EAC/B,QAAA,EAAA;AAAA,UAAA,QAAA,mBAAWN,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,aAAA,EAAe,oBAAS,CAAA,GAAO,IAAA;AAAA,0BACxDA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,UAAA;AAAA,cACL,SAAS,MAAM;AACb,gBAAA,WAAA,CAAY,KAAK,CAAA;AACjB,gBAAA,QAAA,EAAS;AAAA,cACX,CAAA;AAAA,cACD,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF,CAAA,GACE;AAAA,OAAA,EACN,CAAA,GACE;AAAA,KAAA,EACN;AAAA,GAAA,EACF,CAAA;AAEJ;AC/EO,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ;AACV,CAAA,EAKG;AACD,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAW,YAAA,EAAY,KAAA,EACnC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,IAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAW,QAAA,KAAa,IAAA,CAAK,EAAA,GAAK,QAAA,GAAW,EAAA;AAAA,MAC7C,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA;AAAA,MAE9B,QAAA,EAAA,IAAA,CAAK;AAAA,KAAA;AAAA,IALD,IAAA,CAAK;AAAA,GAOb,CAAA,EACH,CAAA;AAEJ;ACzBA,IAAM,gBAAA,GAAqC;AAAA,EACzC,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,EAC3B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,EAC3B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,EAC3B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA;AACzB,CAAA;AAEO,SAAS,UAAA,CAAW;AAAA,EACzB,IAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA,GAAkB,gBAAA;AAAA,EAClB,QAAA,GAAW;AACb,CAAA,EASG;AACD,EAAA,MAAM,UAAU,QAAA,KAAa,KAAA;AAE7B,EAAA,uBACEM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,WAAA,EAAY,QAAA,EAAA;AAAA,MAAA,MAAA;AAAA,sBAE3BN,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,kBAAA;AAAA,UACV,KAAA,EAAO,QAAA;AAAA,UACP,OAAA,EAAS,eAAA;AAAA,UACT,QAAA,EAAU,gBAAA;AAAA,UACV;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,oBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gBAAgB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBACrCM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACb,QAAA,EAAA;AAAA,sBAAAN,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,OAAA;AAAA,UACV,QAAA,EAAU,QAAA,IAAY,OAAA,IAAW,IAAA,IAAQ,CAAA;AAAA,UACzC,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,GAAO,CAAC,CAAA;AAAA,UACrC,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACAM,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAiB,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACzB,UAAU,CAAA,GAAI,IAAA;AAAA,QAAK,MAAA;AAAA,QAAK;AAAA,OAAA,EAChC,CAAA;AAAA,sBACAN,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,OAAA;AAAA,UACV,QAAA,EAAU,QAAA,IAAY,OAAA,IAAW,IAAA,IAAQ,SAAA;AAAA,UACzC,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,GAAO,CAAC,CAAA;AAAA,UACrC,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACxEO,SAAS,WAAA,CAAY;AAAA,EAC1B,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA,GAAe,KAAA;AAAA,EACf,sBAAA,GAAyB;AAC3B,CAAA,EASG;AACD,EAAA,IAAI,WAAW,sBAAA,EAAwB;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,oBAAAN,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EAAU,WAAW,YAAA,EACxC,QAAA,EAAA,OAAA,IAAW,WAAA,GAAc,WAAA,GAAc,SAAA,EAC1C,CAAA;AAAA,oBACAA,eAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAU,OAAA,EAAQ,OAAA,EAAS,KAAA,EAC9C,QAAA,EAAA,QAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;ACPO,SAAS,QAAA,CAAS;AAAA,EACvB,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA,GAAW,UAAA;AAAA,EACX,aAAA,GAAgB,IAAA;AAAA,EAChB,aAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA,GAAkB;AACpB,CAAA,EAAkB;AAChB,EAAA,uBACEM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,oBAAAN,eAAC,MAAA,EAAA,EAAO,KAAA,EAAc,SAAkB,OAAA,EAAkB,QAAA,EAAoB,UAC3E,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,oBACAM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,sBAAAN,cAAAA,CAAC,WAAQ,KAAA,EAAO,QAAA,EAAU,UAAU,WAAA,EAAa,QAAA,EAAU,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,CAAA;AAAA,sBACzFA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAC,QAAA,EAAU,eAAe,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,GAAI,QAAA,EAAS;AAAA,KAAA,EACnF,CAAA;AAAA,IACC,aAAA,mBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAa,YAAA,EAAY,QAAA,EACrC,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,qBACbA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,WAAA,KAAgB,IAAA,CAAK,EAAA,GAAK,QAAA,GAAW,EAAA;AAAA,QAChD,OAAA,EAAS,MAAM,WAAA,CAAY,IAAA,CAAK,EAAE,CAAA;AAAA,QAEjC,QAAA,EAAA,IAAA,CAAK,SAAS,IAAA,CAAK;AAAA,OAAA;AAAA,MALf,IAAA,CAAK;AAAA,KAOb,GACH,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AC7DA,SAASW,YAAAA,GAAc;AACrB,EAAA,OAAOD,0BAAAA;AAAA,IACL,MAAM,MAAM;AAAA,IAAC,CAAA;AAAA,IACb,MAAM,IAAA;AAAA,IACN,MAAM;AAAA,GACR;AACF;AAmBA,SAAS,mBAAA,CAAuB,MAAA,EAAwB,IAAA,EAAS,KAAA,EAAU;AACzE,EAAA,MAAM,OAAA,GAAU,OAAO,OAAA,GAAU,MAAA,CAAO,QAAQ,IAAI,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AACzE,EAAA,MAAM,QAAA,GAAW,OAAO,OAAA,GAAU,MAAA,CAAO,QAAQ,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAE5E,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,IAAa,YAAY,EAAA,EAAI;AAC/D,IAAA,OAAO,aAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,KAAK,CAAA,GAAI,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,IAAa,aAAa,EAAA,EAAI;AAClE,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAO,aAAa,QAAA,EAAU;AAC/D,IAAA,OAAO,OAAA,GAAU,QAAA;AAAA,EACnB;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,OAAO,CAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,OAAO,QAAQ,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa,OAAO,QAAQ,CAAA;AAClC,EAAA,MAAM,WAAA,GAAc,OAAO,SAAS,CAAA;AACpC,EAAA,IACE,QAAA,CAAS,IAAA,EAAK,KAAM,EAAA,IACpB,SAAA,CAAU,IAAA,EAAK,KAAM,EAAA,IACrB,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,IAC1B,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,IAC3B,iBAAA,CAAkB,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,CAAA,IACtC,iBAAA,CAAkB,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,CAAA,EACvC;AACA,IAAA,OAAO,UAAA,GAAa,WAAA;AAAA,EACtB;AAEA,EAAA,OAAO,QAAA,CAAS,cAAc,SAAA,EAAW,MAAA,EAAW,EAAE,WAAA,EAAa,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,CAAA;AAC5F;AAEA,SAAS,QAAA,GAAW;AAClB,EAAA,uBACEV,eAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,aAAA,EAAY,MAAA,EACnC,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAE,kBAAA,EAAmB,IAAA,EAAK,QAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM,aAAA,EAAc,SAAQ,CAAA,EACvG,CAAA;AAEJ;AAEA,SAAS,UAAA,GAAa;AACpB,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,aAAA,EAAY,MAAA,EACnC,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAE,yBAAA,EAA0B,IAAA,EAAK,QAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM,aAAA,EAAc,SAAQ,CAAA,EAC9G,CAAA;AAEJ;AAEA,SAAS,SAAA,GAAY;AACnB,EAAA,uBACEM,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,eAAY,MAAA,EACnC,QAAA,EAAA;AAAA,oBAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2BAAA,EAA4B,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,CAAA;AAAA,oBAC9GA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAe,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EAAQ;AAAA,GAAA,EAC1H,CAAA;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,IAAA,EAAK,EAAsB;AAChD,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,IAAA,GAAO,wBAAA,GAA2B,mBAAA,EAAqB,OAAA,EAAQ,WAAA,EAAY,aAAA,EAAY,MAAA,EACrG,QAAA,kBAAAA,cAAAA,CAAC,UAAK,CAAA,EAAE,uBAAA,EAAwB,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EACnI,CAAA;AAEJ;AAEA,SAAS,WAAA,GAAc;AACrB,EAAA,uBACEM,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,eAAY,MAAA,EACnC,QAAA,EAAA;AAAA,oBAAAN,cAAAA,CAAC,UAAK,CAAA,EAAE,yEAAA,EAA0E,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,CAAA;AAAA,oBACtIA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM;AAAA,GAAA,EACtF,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAA4B;AACtD,EAAA,uBACEA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oBAAA,EACX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVM,eAAAA,CAAC,KAAA,EAAA,EAAqB,WAAU,mBAAA,EAC9B,QAAA,EAAA;AAAA,oBAAAN,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,oBAChBA,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA,GAAA,EAAA,EAFR,IAAA,CAAK,KAGf,CACD,CAAA,EACH,CAAA;AAEJ;AAEO,SAAS,eAAA,CAAmB;AAAA,EACjC,KAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,MAAA,GAAS,IAAA;AAAA,EACT,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAiBG;AACD,EAAA,MAAM,oBAAoB,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,eAAe,KAAK,CAAA;AAChF,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIG,cAAAA,CAAiC,EAAE,CAAA;AACjE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAA2B,IAAI,CAAA;AACvD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAiC,IAAI,CAAA;AACzE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAA8B,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC7C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,CAAC,CAAA;AAClC,EAAA,MAAM,WAAWQ,YAAAA,EAAY;AAE7B,EAAA,MAAM,QAAA,GAAWF,cAAQ,MAAM;AAC7B,IAAA,MAAM,gBAAgB,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,eAAe,KAAK,CAAA;AAC5E,IAAA,OAAO,KAAA,CAAM,MAAA;AAAA,MAAO,CAAC,IAAA,KACnB,aAAA,CAAc,KAAA,CAAM,CAAC,MAAA,KAAW;AAC9B,QAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,IAAK,IAAI,IAAA,EAAK;AAC/C,QAAA,IAAI,CAAC,KAAA,EAAO;AACV,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC7B,QAAA,MAAM,OAAO,GAAA,KAAQ,IAAA,IAAQ,QAAQ,MAAA,GAAY,EAAA,GAAK,OAAO,GAAG,CAAA;AAChE,QAAA,IAAI,OAAO,aAAA,EAAe;AACxB,UAAA,OAAO,IAAA,KAAS,KAAA;AAAA,QAClB;AACA,QAAA,OAAO,KAAK,WAAA,EAAY,CAAE,QAAA,CAAS,KAAA,CAAM,aAAa,CAAA;AAAA,MACxD,CAAC;AAAA,KACH;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,OAAA,EAAS,OAAO,CAAC,CAAA;AAE5B,EAAA,MAAM,MAAA,GAASA,cAAQ,MAAM;AAC3B,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,QAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,GAAA,KAAQ,KAAK,GAAG,CAAA;AAC7D,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,KAAA,EAAO;AACxC,MAAA,OAAO,QAAA;AAAA,IACT;AACA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,KAAc,KAAA,GAAQ,CAAA,GAAI,EAAA;AACjD,IAAA,OAAO,CAAC,GAAG,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,EAAM,KAAA,KAAU,mBAAA,CAAoB,MAAA,EAAQ,IAAA,EAAM,KAAK,IAAI,SAAS,CAAA;AAAA,EACjG,CAAA,EAAG,CAAC,QAAA,EAAU,IAAA,EAAM,OAAO,CAAC,CAAA;AAE5B,EAAA,MAAM,iBAAA,GAAoBA,aAAAA;AAAA,IACxB,MAAM,iBAAA,CAAkB,MAAA,CAAO,CAAC,KAAA,EAAO,WAAW,KAAA,IAAA,CAAU,OAAA,CAAQ,MAAA,CAAO,GAAG,KAAK,EAAA,EAAI,IAAA,EAAK,GAAI,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,IACzG,CAAC,mBAAmB,OAAO;AAAA,GAC7B;AAEA,EAAA,MAAM,UAAU,QAAA,KAAa,KAAA;AAC7B,EAAA,MAAM,eAAA,GAAkB,UAAU,IAAA,CAAK,GAAA,CAAI,OAAO,MAAA,EAAQ,CAAC,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA;AAC9E,EAAA,MAAM,SAAA,GAAY,OAAA,GAAU,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,eAAe,CAAC,CAAA;AACtF,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,SAAS,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,OAAA,GAAU,CAAA,GAAA,CAAK,WAAA,GAAc,CAAA,IAAK,eAAA;AAChD,EAAA,MAAM,YAAY,OAAA,GAAU,MAAA,GAAS,OAAO,KAAA,CAAM,KAAA,EAAO,QAAQ,eAAe,CAAA;AAChF,EAAA,MAAM,OAAA,GAAU,MAAA,IAAU,OAAA,CAAQ,KAAK,CAAA;AACvC,EAAA,MAAM,WAAA,GAAc,kBAAkB,MAAA,GAAS,CAAA;AAC/C,EAAA,MAAM,WAAA,GAAc,UAAA,KAAe,IAAA,GAAO,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,MAAA,CAAO,IAAI,CAAA,KAAM,UAAU,CAAA,IAAK,IAAA;AAEvG,EAAA,SAAS,QAAA,CAAS,QAAwB,IAAA,EAAS;AACjD,IAAA,MAAM,GAAA,GAAM,OAAO,OAAA,GAAU,MAAA,CAAO,QAAQ,IAAI,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AACrE,IAAA,OAAO,GAAA,KAAQ,QAAQ,GAAA,KAAQ,MAAA,IAAa,QAAQ,EAAA,GAAK,QAAA,GAAM,OAAO,GAAG,CAAA;AAAA,EAC3E;AAEA,EAAA,SAAS,YAAY,IAAA,EAAuB;AAC1C,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MAC9B,OAAO,MAAA,CAAO,MAAA;AAAA,MACd,KAAA,EAAO,QAAA,CAAS,MAAA,EAAQ,IAAI;AAAA,KAC9B,CAAE,CAAA;AAAA,EACJ;AAEA,EAAA,MAAM,YAAA,GAAe,WAAA,IAAe,OAAA,CAAQ,CAAC,CAAA,GAAI,SAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,WAAW,CAAA,GAAI,IAAA;AAErF,EAAA,SAAS,YAAA,CAAa,KAAa,KAAA,EAAe;AAChD,IAAA,UAAA,CAAW,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,KAAA,EAAM,CAAE,CAAA;AACtD,IAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,EACX;AAEA,EAAA,SAAS,YAAA,GAAe;AACtB,IAAA,UAAA,CAAW,EAAE,CAAA;AACb,IAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,EACX;AAEA,EAAA,SAAS,WAAW,MAAA,EAAwB;AAC1C,IAAA,IAAI,MAAA,CAAO,aAAa,KAAA,EAAO;AAC7B,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,CAAC,OAAA,KAAY;AACnB,MAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,GAAA,KAAQ,OAAO,GAAA,EAAK;AAC1C,QAAA,OAAO,EAAE,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,WAAW,KAAA,EAAM;AAAA,MAC7C;AACA,MAAA,IAAI,OAAA,CAAQ,cAAc,KAAA,EAAO;AAC/B,QAAA,OAAO,EAAE,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,WAAW,MAAA,EAAO;AAAA,MAC9C;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,EACX;AAEA,EAAA,SAAS,uBAAuB,OAAA,EAAkB;AAChD,IAAA,iBAAA,CAAkB,OAAO,CAAA;AACzB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,SAAS,YAAY,IAAA,EAAS;AAC5B,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,aAAA,CAAc,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,SAAS,WAAA,CAAY,MAAS,KAAA,EAAmB;AAC/C,IAAA,MAAM,OAAA,GAAU,EAAA;AAChB,IAAA,MAAM,KAAA,GAAQ,GAAA;AACd,IAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,KAAA,CAAM,UAAU,EAAA,EAAI,MAAA,CAAO,UAAA,GAAa,KAAA,GAAQ,OAAO,CAAA;AAC1E,IAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,KAAA,CAAM,UAAU,EAAA,EAAI,MAAA,CAAO,WAAA,GAAc,OAAA,GAAU,EAAE,CAAA;AACxE,IAAA,UAAA,CAAW,EAAE,CAAA,EAAG,CAAA,EAAG,OAAO,WAAA,CAAY,IAAI,GAAG,CAAA;AAAA,EAC/C;AAEA,EAAA,MAAM,OAAA,GACJ,MAAA,CAAO,MAAA,KAAW,CAAA,GACd,WAAA,GACA,OAAA,GACE,CAAA,OAAA,EAAK,MAAA,CAAO,MAAM,CAAA,IAAA,EAAO,MAAA,CAAO,MAAM,CAAA,CAAA,GACtC,GAAG,KAAA,GAAQ,CAAC,CAAA,MAAA,EAAI,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,eAAA,EAAiB,MAAA,CAAO,MAAM,CAAC,CAAA,IAAA,EAAO,MAAA,CAAO,MAAM,CAAA,CAAA;AAE5F,EAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAiB,cAAY,KAAA,EAC1C,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAC,WAAA,EAAa,QAAA,GAAW,cAAc,EAAA,EAAI,cAAA,GAAiB,cAAA,GAAiB,EAAE,CAAA,CACvF,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAAA,QAEX,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EACb,0BAAAM,eAAAA,CAAC,SAAA,EAAA,EAAQ,WAAU,YAAA,EAChB,QAAA,EAAA;AAAA,YAAA,OAAA,mBACCN,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,OAAA,EAAQ,CAAA,EAC/C,CAAA,GACE,IAAA;AAAA,4BAEJA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cACb,QAAA,kBAAAM,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,YAAA,EACf,QAAA,EAAA;AAAA,8BAAAN,cAAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAAM,eAAAA,CAAC,IAAA,EAAA,EACE,QAAA,EAAA;AAAA,gBAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACvB,kBAAA,MAAM,QAAA,GAAW,OAAO,QAAA,KAAa,KAAA;AACrC,kBAAA,MAAM,SAAS,IAAA,EAAM,GAAA,KAAQ,MAAA,CAAO,GAAA,GAAM,KAAK,SAAA,GAAY,IAAA;AAC3D,kBAAA,uBACEN,cAAAA;AAAA,oBAAC,IAAA;AAAA,oBAAA;AAAA,sBAEC,aAAW,MAAA,KAAW,KAAA,GAAQ,WAAA,GAAc,MAAA,KAAW,SAAS,YAAA,GAAe,MAAA;AAAA,sBAE9E,qCACCM,eAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAK,QAAA;AAAA,0BACL,SAAA,EAAW,MAAA,GAAS,CAAA,mBAAA,EAAsB,MAAM,CAAA,CAAA,GAAK,aAAA;AAAA,0BACrD,OAAA,EAAS,MAAM,UAAA,CAAW,MAAM,CAAA;AAAA,0BAEhC,QAAA,EAAA;AAAA,4CAAAN,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,MAAA,EAAO,CAAA;AAAA,4CACrBA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAiB,aAAA,EAAY,MAAA,EAC1C,QAAA,EAAA,MAAA,KAAW,KAAA,GAAQ,QAAA,GAAM,MAAA,KAAW,MAAA,GAAS,WAAM,QAAA,EACtD;AAAA;AAAA;AAAA,0BAGF,MAAA,CAAO;AAAA,qBAAA;AAAA,oBAfJ,MAAA,CAAO;AAAA,mBAiBd;AAAA,gBAEJ,CAAC,CAAA;AAAA,gCACDA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,eAAc,QAAA,EAAA,SAAA,EAAO;AAAA,eAAA,EACrC,CAAA,EACF,CAAA;AAAA,8BACAA,cAAAA,CAAC,OAAA,EAAA,EACE,QAAA,EAAA,SAAA,CAAU,WAAW,CAAA,mBACpBA,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAG,OAAA,EAAS,QAAQ,MAAA,GAAS,CAAA,EAC5B,QAAA,kBAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kBAAA,EACV,QAAA,EAAA,KAAA,CAAM,WAAW,CAAA,GAAI,KAAA,GAAQ,uCAAA,EAChC,CAAA,EACF,CAAA,EACF,CAAA,GAEA,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,KAAS;AACtB,gBAAA,MAAM,GAAA,GAAM,OAAO,IAAI,CAAA;AACvB,gBAAA,MAAM,gBAAgB,SAAA,GAAY,SAAA,CAAU,IAAI,CAAA,GAAI,QAAQ,QAAQ,CAAA;AACpE,gBAAA,MAAM,gBAAgB,SAAA,GAAY,SAAA,CAAU,IAAI,CAAA,GAAI,QAAQ,QAAQ,CAAA;AACpE,gBAAA,MAAM,QAAA,GAAW,kBAAkB,UAAA,KAAe,GAAA;AAClD,gBAAA,uBACEM,eAAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBAEC,SAAA,EAAW,WAAW,mBAAA,GAAsB,UAAA;AAAA,oBAC5C,YAAA,EAAc,CAAC,KAAA,KAAU;AACvB,sBAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,wBAAA,WAAA,CAAY,MAAM,KAAK,CAAA;AAAA,sBACzB;AACA,sBAAA,WAAA,CAAY,IAAI,CAAA;AAAA,oBAClB,CAAA;AAAA,oBACA,WAAA,EAAa,CAAC,KAAA,KAAU;AACtB,sBAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,wBAAA,WAAA,CAAY,MAAM,KAAK,CAAA;AAAA,sBACzB;AAAA,oBACF,CAAA;AAAA,oBACA,YAAA,EAAc,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,oBACnC,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,oBAE9B,QAAA,EAAA;AAAA,sBAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZN,cAAAA,CAAC,IAAA,EAAA,EAAqB,QAAA,EAAA,QAAA,CAAS,MAAA,EAAQ,IAAI,CAAA,EAAA,EAAlC,MAAA,CAAO,GAA6B,CAC9C,CAAA;AAAA,sCACDA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,eAAc,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,iBAAgB,EACpE,QAAA,kBAAAM,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACZ,QAAA,EAAA;AAAA,wBAAA,MAAA,mBACCN,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,kBAAA,EAAmB,OAAA,EAAS,MAAM,MAAA,CAAO,IAAI,CAAA,EAAG,kBAEhF,CAAA,GACE,IAAA;AAAA,wBACH,2BACCA,cAAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BACC,IAAA,EAAK,QAAA;AAAA,4BACL,SAAA,EAAU,kBAAA;AAAA,4BACV,UAAU,CAAC,aAAA;AAAA,4BACX,KAAA,EAAO,gBAAgB,QAAA,GAAW,yBAAA;AAAA,4BAClC,OAAA,EAAS,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,4BAC7B,QAAA,EAAA;AAAA;AAAA,yBAED,GACE,IAAA;AAAA,wBACH,2BACCA,cAAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BACC,IAAA,EAAK,QAAA;AAAA,4BACL,SAAA,EAAU,yBAAA;AAAA,4BACV,UAAU,CAAC,aAAA;AAAA,4BACX,KAAA,EAAO,gBAAgB,QAAA,GAAW,yBAAA;AAAA,4BAClC,OAAA,EAAS,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,4BAC7B,QAAA,EAAA;AAAA;AAAA,yBAED,GACE;AAAA,uBAAA,EACN,CAAA,EACF;AAAA;AAAA,mBAAA;AAAA,kBAjDK;AAAA,iBAkDP;AAAA,cAEJ,CAAC,CAAA,EAEL;AAAA,aAAA,EACF,CAAA,EACF,CAAA;AAAA,4BAEAA,cAAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAM,WAAA;AAAA,gBACN,SAAA;AAAA,gBACA,QAAA;AAAA,gBACA,YAAA,EAAc,OAAA;AAAA,gBACd,gBAAA,EAAkB,CAAC,KAAA,KAAU;AAC3B,kBAAA,WAAA,CAAY,KAAK,CAAA;AACjB,kBAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,gBACX,CAAA;AAAA,gBACA;AAAA;AAAA;AACF,WAAA,EACF,CAAA,EACF,CAAA;AAAA,UAEC,iCACCM,eAAAA,CAAC,WAAM,SAAA,EAAU,eAAA,EAAgB,cAAW,gBAAA,EAC1C,QAAA,EAAA;AAAA,4BAAAN,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,kBAAAM,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAN,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gBAAA,EAAiB,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,8BACrCA,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,YAAA,IAAgB,oBAAA,EAAqB;AAAA,aAAA,EAC5C,CAAA,EACF,CAAA;AAAA,4BACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBACZ,QAAA,EAAA,WAAA,mBACCA,eAAC,UAAA,EAAA,EAAW,KAAA,EAAO,YAAY,WAAW,CAAA,EAAG,oBAE7CA,cAAAA,CAAC,OAAE,SAAA,EAAU,eAAA,EAAgB,+DAAiD,CAAA,EAElF;AAAA,WAAA,EACF,CAAA,GACE,IAAA;AAAA,0BAEJM,gBAAC,OAAA,EAAA,EAAM,SAAA,EAAW,WAAW,gBAAA,GAAmB,WAAA,EAAa,cAAW,qBAAA,EACtE,QAAA,EAAA;AAAA,4BAAAA,eAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,wBAAA;AAAA,gBACV,eAAA,EAAe,QAAA;AAAA,gBACf,KAAA,EAAO,WAAW,UAAA,GAAa,QAAA;AAAA,gBAC/B,SAAS,MAAM,WAAA,CAAY,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,gBAE1C,QAAA,EAAA;AAAA,kCAAAN,cAAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,QAAA,EAAU,CAAA;AAAA,kBAC5B,QAAA,mBAAWA,cAAAA,CAAC,MAAA,EAAA,EAAK,sBAAQ,CAAA,GAAU;AAAA;AAAA;AAAA,aACtC;AAAA,YAEC,QAAA,mBACCM,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,gCAAAN,cAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,UAAA;AAAA,oBACL,OAAA,EAAS,cAAA;AAAA,oBACT,UAAU,CAAC,KAAA,KAAU,sBAAA,CAAuB,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,oBAChE,YAAA,EAAW;AAAA;AAAA,iBACb;AAAA,gCACAA,eAAC,WAAA,EAAA,EAAY,CAAA;AAAA,gCACbA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,QAAO,QAAA,EAAA,SAAA,EAAO;AAAA,eAAA,EAClC,CAAA;AAAA,cAEC,OAAA,mBACCM,eAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,eAAA,EAAgB,OAAA,EAAS,KAAA,EACvD,QAAA,EAAA;AAAA,gCAAAN,eAAC,QAAA,EAAA,EAAS,CAAA;AAAA,gCACVA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,EAAS;AAAA,eAAA,EAClB,CAAA,GACE,IAAA;AAAA,cAEH,WAAA,mBACCM,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,gCAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,kCAAAN,cAAAA,CAAC,QAAG,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,kCACXM,eAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,SAAA,EAAU,oBAAA;AAAA,sBACV,KAAA,EAAM,eAAA;AAAA,sBACN,YAAA,EAAW,eAAA;AAAA,sBACX,UAAU,iBAAA,KAAsB,CAAA;AAAA,sBAChC,OAAA,EAAS,YAAA;AAAA,sBAET,QAAA,EAAA;AAAA,wCAAAN,eAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wCACXA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AAAA;AACb,iBAAA,EACF,CAAA;AAAA,gCACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACZ,QAAA,EAAA,iBAAA,CAAkB,GAAA,CAAI,CAAC,MAAA,qBACtBM,eAAAA,CAAC,OAAA,EAAA,EACE,QAAA,EAAA;AAAA,kBAAA,MAAA,CAAO,MAAA;AAAA,kBACP,MAAA,CAAO,gCACNN,cAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAO,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,IAAK,EAAA;AAAA,sBAC9B,OAAA,EAAS,CAAC,EAAE,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,iBAAA,IAAqB,KAAA,EAAM,EAAG,GAAG,MAAA,CAAO,aAAa,CAAA;AAAA,sBAC1F,UAAU,CAAC,KAAA,KAAU,YAAA,CAAa,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,sBACnD,WAAA,EAAa,OAAO,iBAAA,IAAqB;AAAA;AAAA,sCAG3CA,cAAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAO,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,IAAK,EAAA;AAAA,sBAC9B,QAAA,EAAU,CAAC,KAAA,KAAU,YAAA,CAAa,OAAO,GAAA,EAAK,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,sBAChE,WAAA,EAAa,CAAA,OAAA,EAAU,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA;AAAA;AACpD,iBAAA,EAAA,EAdQ,MAAA,CAAO,GAgBnB,CACD,CAAA,EACH;AAAA,eAAA,EACF,CAAA,GACE;AAAA,aAAA,EACN,CAAA,mBAEAM,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,mCAAA,EAAoC,OAAM,SAAA,EACzD,QAAA,EAAA;AAAA,gCAAAN,cAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,UAAA;AAAA,oBACL,OAAA,EAAS,cAAA;AAAA,oBACT,UAAU,CAAC,KAAA,KAAU,sBAAA,CAAuB,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,oBAChE,YAAA,EAAW;AAAA;AAAA,iBACb;AAAA,gCACAA,eAAC,WAAA,EAAA,EAAY;AAAA,eAAA,EACf,CAAA;AAAA,cACC,0BACCA,cAAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,sBAAA,EAAuB,KAAA,EAAO,QAAA,EAAU,YAAA,EAAY,UAAU,OAAA,EAAS,KAAA,EACrG,0BAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,GACZ,CAAA,GACE,IAAA;AAAA,cACH,8BACCM,eAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAA,EAAU,sBAAA;AAAA,kBACV,KAAA,EAAM,cAAA;AAAA,kBACN,YAAA,EAAW,cAAA;AAAA,kBACX,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,kBAE/B,QAAA,EAAA;AAAA,oCAAAN,eAAC,UAAA,EAAA,EAAW,CAAA;AAAA,oBACX,iBAAA,GAAoB,oBAAIA,cAAAA,CAAC,UAAK,SAAA,EAAU,cAAA,EAAgB,6BAAkB,CAAA,GAAU;AAAA;AAAA;AAAA,eACvF,GACE,IAAA;AAAA,cACH,8BACCA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAA,EAAU,sBAAA;AAAA,kBACV,KAAA,EAAM,eAAA;AAAA,kBACN,YAAA,EAAW,eAAA;AAAA,kBACX,UAAU,iBAAA,KAAsB,CAAA;AAAA,kBAChC,OAAA,EAAS,YAAA;AAAA,kBAET,QAAA,kBAAAA,eAAC,SAAA,EAAA,EAAU;AAAA;AAAA,eACb,GACE;AAAA,aAAA,EACN;AAAA,WAAA,EAEJ;AAAA;AAAA;AAAA,KACF;AAAA,IAEC,IAAA;AAAA,IAEA,QAAA,IAAY,OAAA,IAAW,CAAC,cAAA,GACrBQ,qBAAAA;AAAA,sBACEF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAiB,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,CAAQ,GAAG,GAAA,EAAK,OAAA,CAAQ,CAAA,EAAE,EAAG,MAAK,SAAA,EAC/E,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sBAAA,EAAwB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAC3CA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAO,QAAQ,KAAA,EAAO;AAAA,OAAA,EACpC,CAAA;AAAA,MACA,QAAA,CAAS;AAAA,KACX,GACA;AAAA,GAAA,EACN,CAAA;AAEJ;AAGO,IAAM,WAAA,GAAc","file":"index.cjs","sourcesContent":["/** Canonical theme token names mirrored from aksui.css */\r\nexport const aksuiTokens = {\r\n brand: \"#1E2735\",\r\n accent: \"#E67E22\",\r\n ink: \"#1E2735\",\r\n muted: \"#667085\",\r\n line: \"#e6e4df\",\r\n field: \"#f6f5f3\",\r\n card: \"#ffffff\",\r\n danger: \"#b42318\",\r\n dangerBg: \"#fff1f0\",\r\n ok: \"#067647\",\r\n okBg: \"#ecfdf3\",\r\n radius: \"8px\",\r\n rowHeight: \"34px\",\r\n tableHeaderHeight: \"36px\",\r\n sideRailCollapsed: \"52px\",\r\n sideRailExpanded: \"280px\",\r\n previewPanelWidth: \"300px\",\r\n} as const;\r\n\r\nexport type AksuiTokenName = keyof typeof aksuiTokens;\r\n","/** Theme tokens live in aksui.css. Import `@mshuja288/aksuicore/styles.css` in the host app. */\r\nexport const aksuiThemeVersion = \"0.2.0\";\r\nexport { aksuiTokens, type AksuiTokenName } from \"./tokens\";\r\n","\"use client\";\r\n\r\nimport type { ButtonHTMLAttributes, ReactNode } from \"react\";\r\n\r\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\r\n\r\nconst variantClass: Record<ButtonVariant, string> = {\r\n primary: \"\",\r\n secondary: \"secondary\",\r\n ghost: \"ghost\",\r\n danger: \"danger\",\r\n};\r\n\r\nexport function Button({\r\n variant = \"primary\",\r\n className = \"\",\r\n children,\r\n ...props\r\n}: ButtonHTMLAttributes<HTMLButtonElement> & {\r\n variant?: ButtonVariant;\r\n children: ReactNode;\r\n}) {\r\n const classes = [\"aks-button\", variantClass[variant], className].filter(Boolean).join(\" \");\r\n return (\r\n <button type=\"button\" className={classes} {...props}>\r\n {children}\r\n </button>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useId, useLayoutEffect, useRef, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nexport type SelectOption = {\r\n value: string;\r\n label: string;\r\n tone?: \"neutral\" | \"ok\" | \"warn\" | \"danger\" | \"accent\";\r\n};\r\n\r\ntype MenuPosition = {\r\n top: number;\r\n left: number;\r\n width: number;\r\n maxHeight: number;\r\n openUp: boolean;\r\n};\r\n\r\nexport function Select({\r\n value,\r\n options,\r\n onChange,\r\n placeholder = \"Select\",\r\n disabled = false,\r\n required = false,\r\n className = \"\",\r\n}: {\r\n value: string;\r\n options: SelectOption[];\r\n onChange: (value: string) => void;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n required?: boolean;\r\n className?: string;\r\n}) {\r\n const listId = useId();\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n const [open, setOpen] = useState(false);\r\n const [menuPos, setMenuPos] = useState<MenuPosition | null>(null);\r\n const selected = options.find((option) => option.value === value) ?? null;\r\n\r\n function updatePosition() {\r\n const root = rootRef.current;\r\n if (!root) {\r\n return;\r\n }\r\n const rect = root.getBoundingClientRect();\r\n const spaceBelow = window.innerHeight - rect.bottom - 12;\r\n const spaceAbove = rect.top - 12;\r\n const openUp = spaceBelow < 220 && spaceAbove > spaceBelow;\r\n const maxHeight = Math.max(160, Math.min(280, openUp ? spaceAbove : spaceBelow));\r\n setMenuPos({\r\n top: openUp ? rect.top - 8 : rect.bottom + 6,\r\n left: rect.left,\r\n width: rect.width,\r\n maxHeight,\r\n openUp,\r\n });\r\n }\r\n\r\n useLayoutEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n updatePosition();\r\n function onReposition() {\r\n updatePosition();\r\n }\r\n window.addEventListener(\"resize\", onReposition);\r\n window.addEventListener(\"scroll\", onReposition, true);\r\n return () => {\r\n window.removeEventListener(\"resize\", onReposition);\r\n window.removeEventListener(\"scroll\", onReposition, true);\r\n };\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n function onPointerDown(event: MouseEvent) {\r\n const target = event.target as Node;\r\n if (rootRef.current?.contains(target) || menuRef.current?.contains(target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n }\r\n function onKeyDown(event: KeyboardEvent) {\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }\r\n document.addEventListener(\"mousedown\", onPointerDown);\r\n document.addEventListener(\"keydown\", onKeyDown);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", onPointerDown);\r\n document.removeEventListener(\"keydown\", onKeyDown);\r\n };\r\n }, [open]);\r\n\r\n function choose(next: string) {\r\n onChange(next);\r\n setOpen(false);\r\n }\r\n\r\n return (\r\n <div className={`app-select ${className}`.trim()} ref={rootRef}>\r\n <input\r\n className=\"app-select-mirror\"\r\n tabIndex={-1}\r\n value={value}\r\n required={required}\r\n onChange={() => undefined}\r\n aria-hidden=\"true\"\r\n />\r\n <button\r\n type=\"button\"\r\n className={open ? \"app-select-trigger open\" : \"app-select-trigger\"}\r\n disabled={disabled}\r\n aria-haspopup=\"listbox\"\r\n aria-expanded={open}\r\n aria-controls={listId}\r\n onClick={() => {\r\n if (!disabled) {\r\n setOpen((current) => !current);\r\n }\r\n }}\r\n >\r\n <span className={selected ? \"app-select-value\" : \"app-select-placeholder\"}>\r\n {selected ? (\r\n <>\r\n {selected.tone ? <span className={`app-select-dot ${selected.tone}`} aria-hidden=\"true\" /> : null}\r\n {selected.label}\r\n </>\r\n ) : (\r\n placeholder\r\n )}\r\n </span>\r\n <svg className=\"app-select-chevron\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\r\n <path d=\"M5 7.5 10 12.5 15 7.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n </button>\r\n {open && menuPos\r\n ? createPortal(\r\n <div\r\n ref={menuRef}\r\n id={listId}\r\n className={menuPos.openUp ? \"app-select-menu open-up\" : \"app-select-menu\"}\r\n role=\"listbox\"\r\n style={{\r\n top: menuPos.openUp ? undefined : menuPos.top,\r\n bottom: menuPos.openUp ? window.innerHeight - menuPos.top : undefined,\r\n left: menuPos.left,\r\n width: menuPos.width,\r\n maxHeight: menuPos.maxHeight,\r\n }}\r\n >\r\n {options.length === 0 ? (\r\n <div className=\"app-select-empty\">No options</div>\r\n ) : (\r\n options.map((option) => {\r\n const active = option.value === value;\r\n return (\r\n <button\r\n key={option.value || \"__empty\"}\r\n type=\"button\"\r\n role=\"option\"\r\n aria-selected={active}\r\n className={active ? \"app-select-option active\" : \"app-select-option\"}\r\n onClick={() => choose(option.value)}\r\n >\r\n {option.tone ? <span className={`app-select-dot ${option.tone}`} aria-hidden=\"true\" /> : null}\r\n <span>{option.label}</span>\r\n {active ? (\r\n <svg className=\"app-select-check\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\r\n <path d=\"M4.5 10.5 8.2 14.2 15.5 6\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n ) : null}\r\n </button>\r\n );\r\n })\r\n )}\r\n </div>,\r\n document.body,\r\n )\r\n : null}\r\n </div>\r\n );\r\n}\r\n\r\n/** @deprecated Prefer Select — alias kept for configurator migration */\r\nexport const AppSelect = Select;\r\nexport type AppSelectOption = SelectOption;\r\n","\"use client\";\r\n\r\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nconst weekdayLabels = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"];\r\n\r\nfunction pad(value: number) {\r\n return String(value).padStart(2, \"0\");\r\n}\r\n\r\nfunction toIso(date: Date) {\r\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\r\n}\r\n\r\nfunction parseIso(value: string) {\r\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\r\n return null;\r\n }\r\n const [year, month, day] = value.split(\"-\").map(Number);\r\n const date = new Date(year, month - 1, day);\r\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\r\n return null;\r\n }\r\n return date;\r\n}\r\n\r\nfunction formatDisplay(value: string) {\r\n const date = parseIso(value);\r\n if (!date) {\r\n return \"\";\r\n }\r\n return `${pad(date.getDate())}/${pad(date.getMonth() + 1)}/${date.getFullYear()}`;\r\n}\r\n\r\nfunction startOfMonth(date: Date) {\r\n return new Date(date.getFullYear(), date.getMonth(), 1);\r\n}\r\n\r\nfunction buildCells(month: Date) {\r\n const first = startOfMonth(month);\r\n const mondayBased = (first.getDay() + 6) % 7;\r\n const start = new Date(first);\r\n start.setDate(first.getDate() - mondayBased);\r\n return Array.from({ length: 42 }, (_, index) => {\r\n const day = new Date(start);\r\n day.setDate(start.getDate() + index);\r\n return day;\r\n });\r\n}\r\n\r\ntype MenuPosition = {\r\n top: number;\r\n left: number;\r\n width: number;\r\n openUp: boolean;\r\n};\r\n\r\nexport function DateField({\r\n value,\r\n onChange,\r\n placeholder = \"dd/mm/yyyy\",\r\n disabled = false,\r\n readOnly = false,\r\n}: {\r\n value: string;\r\n onChange?: (value: string) => void;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n readOnly?: boolean;\r\n}) {\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n const selected = parseIso(value);\r\n const [open, setOpen] = useState(false);\r\n const [menuPos, setMenuPos] = useState<MenuPosition | null>(null);\r\n const [viewMonth, setViewMonth] = useState(() => startOfMonth(selected ?? new Date()));\r\n const cells = useMemo(() => buildCells(viewMonth), [viewMonth]);\r\n const today = toIso(new Date());\r\n const locked = disabled || readOnly;\r\n\r\n function updatePosition() {\r\n const root = rootRef.current;\r\n if (!root) {\r\n return;\r\n }\r\n const rect = root.getBoundingClientRect();\r\n const openUp = window.innerHeight - rect.bottom < 340 && rect.top > 340;\r\n setMenuPos({\r\n top: openUp ? rect.top - 8 : rect.bottom + 6,\r\n left: rect.left,\r\n width: Math.max(rect.width, 280),\r\n openUp,\r\n });\r\n }\r\n\r\n useLayoutEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n updatePosition();\r\n function onReposition() {\r\n updatePosition();\r\n }\r\n window.addEventListener(\"resize\", onReposition);\r\n window.addEventListener(\"scroll\", onReposition, true);\r\n return () => {\r\n window.removeEventListener(\"resize\", onReposition);\r\n window.removeEventListener(\"scroll\", onReposition, true);\r\n };\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n function onPointerDown(event: MouseEvent) {\r\n const target = event.target as Node;\r\n if (rootRef.current?.contains(target) || menuRef.current?.contains(target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n }\r\n function onKeyDown(event: KeyboardEvent) {\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }\r\n document.addEventListener(\"mousedown\", onPointerDown);\r\n document.addEventListener(\"keydown\", onKeyDown);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", onPointerDown);\r\n document.removeEventListener(\"keydown\", onKeyDown);\r\n };\r\n }, [open]);\r\n\r\n function openPicker() {\r\n if (locked) {\r\n return;\r\n }\r\n setViewMonth(startOfMonth(selected ?? new Date()));\r\n setOpen(true);\r\n }\r\n\r\n function choose(date: Date) {\r\n onChange?.(toIso(date));\r\n setOpen(false);\r\n }\r\n\r\n const monthLabel = viewMonth.toLocaleString(undefined, { month: \"long\", year: \"numeric\" });\r\n\r\n return (\r\n <div className={readOnly ? \"date-field read-only\" : \"date-field\"} ref={rootRef}>\r\n <button\r\n type=\"button\"\r\n className={open ? \"date-field-trigger open\" : \"date-field-trigger\"}\r\n disabled={disabled}\r\n onClick={() => {\r\n if (locked) {\r\n return;\r\n }\r\n if (open) {\r\n setOpen(false);\r\n } else {\r\n openPicker();\r\n }\r\n }}\r\n >\r\n <span className={value ? \"date-field-value\" : \"date-field-placeholder\"}>\r\n {value ? formatDisplay(value) : placeholder}\r\n </span>\r\n <svg className=\"date-field-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n <rect x=\"3.5\" y=\"5\" width=\"17\" height=\"15.5\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\r\n <path d=\"M3.5 9.5h17M8 3.5v3M16 3.5v3\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\r\n </svg>\r\n </button>\r\n {open && menuPos\r\n ? createPortal(\r\n <div\r\n ref={menuRef}\r\n className=\"date-picker\"\r\n style={{\r\n top: menuPos.openUp ? undefined : menuPos.top,\r\n bottom: menuPos.openUp ? window.innerHeight - menuPos.top : undefined,\r\n left: menuPos.left,\r\n width: menuPos.width,\r\n }}\r\n >\r\n <div className=\"date-picker-head\">\r\n <strong>{monthLabel}</strong>\r\n <div className=\"date-picker-nav\">\r\n <button type=\"button\" className=\"ghost\" aria-label=\"Previous month\" onClick={() => setViewMonth(new Date(viewMonth.getFullYear(), viewMonth.getMonth() - 1, 1))}>\r\n ‹\r\n </button>\r\n <button type=\"button\" className=\"ghost\" aria-label=\"Next month\" onClick={() => setViewMonth(new Date(viewMonth.getFullYear(), viewMonth.getMonth() + 1, 1))}>\r\n ›\r\n </button>\r\n </div>\r\n </div>\r\n <div className=\"date-picker-weekdays\">\r\n {weekdayLabels.map((label) => (\r\n <span key={label}>{label}</span>\r\n ))}\r\n </div>\r\n <div className=\"date-picker-grid\">\r\n {cells.map((day) => {\r\n const iso = toIso(day);\r\n const outside = day.getMonth() !== viewMonth.getMonth();\r\n const isSelected = value === iso;\r\n const isToday = today === iso;\r\n const className = [\r\n \"date-picker-day\",\r\n outside ? \"outside\" : \"\",\r\n isSelected ? \"selected\" : \"\",\r\n isToday ? \"today\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n return (\r\n <button key={iso + String(outside)} type=\"button\" className={className} onClick={() => choose(day)}>\r\n {day.getDate()}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n <div className=\"date-picker-footer\">\r\n <button\r\n type=\"button\"\r\n className=\"ghost\"\r\n onClick={() => {\r\n onChange?.(\"\");\r\n setOpen(false);\r\n }}\r\n >\r\n Clear\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"ghost\"\r\n onClick={() => {\r\n const now = new Date();\r\n setViewMonth(startOfMonth(now));\r\n choose(now);\r\n }}\r\n >\r\n Today\r\n </button>\r\n </div>\r\n </div>,\r\n document.body,\r\n )\r\n : null}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport type { ReactNode } from \"react\";\r\nimport { Button } from \"./Button\";\r\n\r\nexport function Dialog({\r\n title,\r\n open,\r\n onClose,\r\n children,\r\n wide = true,\r\n}: {\r\n title: string;\r\n open: boolean;\r\n onClose: () => void;\r\n children: ReactNode;\r\n wide?: boolean;\r\n}) {\r\n if (!open) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"dialog-backdrop\" onClick={onClose}>\r\n <div\r\n className={wide ? \"dialog form-dialog\" : \"dialog\"}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label={title}\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <div className=\"dialog-head\">\r\n <h2>{title}</h2>\r\n <Button variant=\"ghost\" onClick={onClose}>\r\n Close\r\n </Button>\r\n </div>\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n/** @deprecated Prefer Dialog — alias kept for configurator migration */\r\nexport const FormDialog = Dialog;\r\n","\"use client\";\r\n\r\nimport { useEffect, useSyncExternalStore } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nfunction useIsClient() {\r\n return useSyncExternalStore(\r\n () => () => {},\r\n () => true,\r\n () => false,\r\n );\r\n}\r\n\r\nfunction SuccessIcon() {\r\n return (\r\n <svg className=\"snackbar-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n <circle cx=\"12\" cy=\"12\" r=\"9\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\r\n <path\r\n d=\"M8.2 12.2 10.8 14.8 15.8 9.6\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction AlertIcon() {\r\n return (\r\n <svg className=\"snackbar-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n <path\r\n d=\"M12 3.8 3.8 19.2h16.4L12 3.8Z\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path d=\"M12 10v4.2\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\r\n <circle cx=\"12\" cy=\"16.8\" r=\"1\" fill=\"currentColor\" />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Snackbar({\r\n message,\r\n success,\r\n onDismiss,\r\n}: {\r\n message: string;\r\n success: boolean;\r\n onDismiss?: () => void;\r\n}) {\r\n const isClient = useIsClient();\r\n\r\n useEffect(() => {\r\n if (!message || !onDismiss) {\r\n return;\r\n }\r\n\r\n const timeout = window.setTimeout(onDismiss, success ? 3200 : 4800);\r\n return () => window.clearTimeout(timeout);\r\n }, [message, success, onDismiss]);\r\n\r\n if (!isClient || !message) {\r\n return null;\r\n }\r\n\r\n return createPortal(\r\n <div className=\"snackbar-host\" aria-live=\"polite\">\r\n <div className={success ? \"snackbar success\" : \"snackbar\"} role=\"status\">\r\n {success ? <SuccessIcon /> : <AlertIcon />}\r\n <p>{message}</p>\r\n {onDismiss ? (\r\n <button type=\"button\" className=\"snackbar-close\" aria-label=\"Dismiss\" onClick={onDismiss}>\r\n ×\r\n </button>\r\n ) : null}\r\n </div>\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n\r\n/** @deprecated Prefer Snackbar — alias kept for configurator migration */\r\nexport const StatusMessage = Snackbar;\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\r\nimport { Button } from \"./Button\";\r\n\r\nexport function Topbar({\r\n title,\r\n logoSrc,\r\n logoAlt = \"Logo\",\r\n username = \"\",\r\n onLogout,\r\n children,\r\n}: {\r\n title: string;\r\n logoSrc?: string;\r\n logoAlt?: string;\r\n username?: string;\r\n onLogout?: () => void;\r\n children?: ReactNode;\r\n}) {\r\n const [menuOpen, setMenuOpen] = useState(false);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n const initial = (username || \"U\").slice(0, 1).toUpperCase();\r\n\r\n useEffect(() => {\r\n if (!menuOpen) {\r\n return;\r\n }\r\n\r\n function onPointerDown(event: MouseEvent) {\r\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\r\n setMenuOpen(false);\r\n }\r\n }\r\n\r\n document.addEventListener(\"mousedown\", onPointerDown);\r\n return () => document.removeEventListener(\"mousedown\", onPointerDown);\r\n }, [menuOpen]);\r\n\r\n return (\r\n <header className=\"topbar\">\r\n <div className=\"topbar-brand\">\r\n {logoSrc ? (\r\n <img\r\n className=\"topbar-logo\"\r\n src={logoSrc}\r\n alt={logoAlt}\r\n onError={(event) => {\r\n event.currentTarget.hidden = true;\r\n }}\r\n />\r\n ) : null}\r\n <h1>{title}</h1>\r\n </div>\r\n <div className=\"topbar-actions\" ref={menuRef}>\r\n {children}\r\n {onLogout ? (\r\n <>\r\n <button\r\n type=\"button\"\r\n className=\"avatar-button\"\r\n aria-haspopup=\"menu\"\r\n aria-expanded={menuOpen}\r\n onClick={() => setMenuOpen((open) => !open)}\r\n title={username || \"Account\"}\r\n >\r\n <span className=\"avatar\">{initial}</span>\r\n </button>\r\n {menuOpen ? (\r\n <div className=\"avatar-menu\" role=\"menu\">\r\n {username ? <p className=\"avatar-name\">{username}</p> : null}\r\n <Button\r\n variant=\"ghost\"\r\n role=\"menuitem\"\r\n onClick={() => {\r\n setMenuOpen(false);\r\n onLogout();\r\n }}\r\n >\r\n Logout\r\n </Button>\r\n </div>\r\n ) : null}\r\n </>\r\n ) : null}\r\n </div>\r\n </header>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nexport type SideNavItem = {\r\n id: string;\r\n label: string;\r\n /** Compact label for the mobile bottom nav (falls back to `label`). */\r\n short?: string;\r\n};\r\n\r\nexport function SideNav({\r\n items,\r\n activeId,\r\n onSelect,\r\n label = \"Sections\",\r\n}: {\r\n items: SideNavItem[];\r\n activeId: string;\r\n onSelect: (id: string) => void;\r\n label?: string;\r\n}) {\r\n return (\r\n <nav className=\"side-nav\" aria-label={label}>\r\n {items.map((item) => (\r\n <button\r\n key={item.id}\r\n type=\"button\"\r\n className={activeId === item.id ? \"active\" : \"\"}\r\n onClick={() => onSelect(item.id)}\r\n >\r\n {item.label}\r\n </button>\r\n ))}\r\n </nav>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { Select } from \"./Select\";\r\n\r\nexport type PageSizeOption = {\r\n value: string;\r\n label: string;\r\n};\r\n\r\nconst defaultPageSizes: PageSizeOption[] = [\r\n { value: \"15\", label: \"15\" },\r\n { value: \"20\", label: \"20\" },\r\n { value: \"50\", label: \"50\" },\r\n { value: \"100\", label: \"100\" },\r\n { value: \"all\", label: \"All\" },\r\n];\r\n\r\nexport function Pagination({\r\n page,\r\n pageCount,\r\n pageSize,\r\n onPageChange,\r\n onPageSizeChange,\r\n summary,\r\n pageSizeOptions = defaultPageSizes,\r\n disabled = false,\r\n}: {\r\n page: number;\r\n pageCount: number;\r\n pageSize: string;\r\n onPageChange: (page: number) => void;\r\n onPageSizeChange: (pageSize: string) => void;\r\n summary: string;\r\n pageSizeOptions?: PageSizeOption[];\r\n disabled?: boolean;\r\n}) {\r\n const showAll = pageSize === \"all\";\r\n\r\n return (\r\n <div className=\"table-pagination\">\r\n <label className=\"page-size\">\r\n Rows\r\n <Select\r\n className=\"page-size-select\"\r\n value={pageSize}\r\n options={pageSizeOptions}\r\n onChange={onPageSizeChange}\r\n disabled={disabled}\r\n />\r\n </label>\r\n <p className=\"page-summary\">{summary}</p>\r\n <div className=\"page-buttons\">\r\n <button\r\n type=\"button\"\r\n className=\"ghost\"\r\n disabled={disabled || showAll || page <= 1}\r\n onClick={() => onPageChange(page - 1)}\r\n >\r\n Previous\r\n </button>\r\n <span className=\"page-indicator\">\r\n Page {showAll ? 1 : page} of {pageCount}\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"ghost\"\r\n disabled={disabled || showAll || page >= pageCount}\r\n onClick={() => onPageChange(page + 1)}\r\n >\r\n Next\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nexport function FormActions({\r\n pending,\r\n editing,\r\n saveLabel,\r\n updateLabel,\r\n newLabel,\r\n onNew,\r\n saveDisabled = false,\r\n replaceSaveWhenEditing = false,\r\n}: {\r\n pending: boolean;\r\n editing: boolean;\r\n saveLabel: string;\r\n updateLabel?: string;\r\n newLabel: string;\r\n onNew: () => void;\r\n saveDisabled?: boolean;\r\n replaceSaveWhenEditing?: boolean;\r\n}) {\r\n if (editing && replaceSaveWhenEditing) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"actions\">\r\n <button type=\"submit\" disabled={pending || saveDisabled}>\r\n {editing && updateLabel ? updateLabel : saveLabel}\r\n </button>\r\n <button type=\"button\" className=\"ghost\" onClick={onNew}>\r\n {newLabel}\r\n </button>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport type { ReactNode } from \"react\";\r\nimport { SideNav, type SideNavItem } from \"../primitives/SideNav\";\r\nimport { Topbar } from \"../primitives/Topbar\";\r\n\r\nexport type AppShellProps = {\r\n title: string;\r\n logoSrc?: string;\r\n logoAlt?: string;\r\n username?: string;\r\n onLogout?: () => void;\r\n navItems: SideNavItem[];\r\n activeNavId: string;\r\n onNavSelect: (id: string) => void;\r\n navLabel?: string;\r\n /** When true (default), renders a mobile bottom nav from `navItems`. */\r\n showBottomNav?: boolean;\r\n topbarActions?: ReactNode;\r\n children: ReactNode;\r\n /** Extra class on the content/screen region */\r\n screenClassName?: string;\r\n};\r\n\r\n/**\r\n * Application chrome: topbar + left side nav + content screen.\r\n * Matches aksconfigurator_ui shell layout.\r\n */\r\nexport function AppShell({\r\n title,\r\n logoSrc,\r\n logoAlt,\r\n username,\r\n onLogout,\r\n navItems,\r\n activeNavId,\r\n onNavSelect,\r\n navLabel = \"Sections\",\r\n showBottomNav = true,\r\n topbarActions,\r\n children,\r\n screenClassName = \"\",\r\n}: AppShellProps) {\r\n return (\r\n <div className=\"aksui-root app-shell\">\r\n <Topbar title={title} logoSrc={logoSrc} logoAlt={logoAlt} username={username} onLogout={onLogout}>\r\n {topbarActions}\r\n </Topbar>\r\n <div className=\"app-body\">\r\n <SideNav items={navItems} activeId={activeNavId} onSelect={onNavSelect} label={navLabel} />\r\n <div className={[\"screen\", screenClassName].filter(Boolean).join(\" \")}>{children}</div>\r\n </div>\r\n {showBottomNav ? (\r\n <nav className=\"bottom-nav\" aria-label={navLabel}>\r\n {navItems.map((item) => (\r\n <button\r\n key={item.id}\r\n type=\"button\"\r\n className={activeNavId === item.id ? \"active\" : \"\"}\r\n onClick={() => onNavSelect(item.id)}\r\n >\r\n {item.short ?? item.label}\r\n </button>\r\n ))}\r\n </nav>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useMemo, useState, useSyncExternalStore, type MouseEvent, type ReactNode } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { Pagination } from \"../primitives/Pagination\";\r\nimport { Select, type SelectOption } from \"../primitives/Select\";\r\n\r\nfunction useIsClient() {\r\n return useSyncExternalStore(\r\n () => () => {},\r\n () => true,\r\n () => false,\r\n );\r\n}\r\n\r\nexport type TableColumn<T> = {\r\n key: string;\r\n header: string;\r\n value: (item: T) => string | number | null | undefined;\r\n display?: (item: T) => string | number | null | undefined;\r\n filterable?: boolean;\r\n sortable?: boolean;\r\n /** When set, filter uses an exact-match Select instead of text contains. */\r\n filterOptions?: SelectOption[];\r\n filterPlaceholder?: string;\r\n};\r\n\r\ntype SortDirection = \"asc\" | \"desc\";\r\ntype SortState = { key: string; direction: SortDirection };\r\ntype DetailLine = { label: string; value: string };\r\ntype TooltipState = { x: number; y: number; lines: DetailLine[] };\r\n\r\nfunction compareColumnValues<T>(column: TableColumn<T>, left: T, right: T) {\r\n const leftRaw = column.display ? column.display(left) : column.value(left);\r\n const rightRaw = column.display ? column.display(right) : column.value(right);\r\n\r\n if (leftRaw === null || leftRaw === undefined || leftRaw === \"\") {\r\n return rightRaw === null || rightRaw === undefined || rightRaw === \"\" ? 0 : 1;\r\n }\r\n if (rightRaw === null || rightRaw === undefined || rightRaw === \"\") {\r\n return -1;\r\n }\r\n\r\n if (typeof leftRaw === \"number\" && typeof rightRaw === \"number\") {\r\n return leftRaw - rightRaw;\r\n }\r\n\r\n const leftText = String(leftRaw);\r\n const rightText = String(rightRaw);\r\n const leftNumber = Number(leftText);\r\n const rightNumber = Number(rightText);\r\n if (\r\n leftText.trim() !== \"\" &&\r\n rightText.trim() !== \"\" &&\r\n Number.isFinite(leftNumber) &&\r\n Number.isFinite(rightNumber) &&\r\n /^-?\\d+(\\.\\d+)?$/.test(leftText.trim()) &&\r\n /^-?\\d+(\\.\\d+)?$/.test(rightText.trim())\r\n ) {\r\n return leftNumber - rightNumber;\r\n }\r\n\r\n return leftText.localeCompare(rightText, undefined, { sensitivity: \"base\", numeric: true });\r\n}\r\n\r\nfunction PlusIcon() {\r\n return (\r\n <svg viewBox=\"0 0 20 20\" aria-hidden=\"true\">\r\n <path d=\"M10 4v12M4 10h12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction FilterIcon() {\r\n return (\r\n <svg viewBox=\"0 0 20 20\" aria-hidden=\"true\">\r\n <path d=\"M3 5h14M5.5 10h9M8 15h4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ResetIcon() {\r\n return (\r\n <svg viewBox=\"0 0 20 20\" aria-hidden=\"true\">\r\n <path d=\"M4.5 8.2A6 6 0 1 1 4.8 13\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\r\n <path d=\"M4.5 4.2v4h4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronIcon({ open }: { open: boolean }) {\r\n return (\r\n <svg className={open ? \"side-rail-chevron open\" : \"side-rail-chevron\"} viewBox=\"0 0 20 20\" aria-hidden=\"true\">\r\n <path d=\"M8 4.5 13.5 10 8 15.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction PreviewIcon() {\r\n return (\r\n <svg viewBox=\"0 0 20 20\" aria-hidden=\"true\">\r\n <path d=\"M2.8 10S5.5 4.8 10 4.8 17.2 10 17.2 10 14.5 15.2 10 15.2 2.8 10 2.8 10Z\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\r\n <circle cx=\"10\" cy=\"10\" r=\"2.4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction DetailList({ lines }: { lines: DetailLine[] }) {\r\n return (\r\n <dl className=\"record-detail-list\">\r\n {lines.map((line) => (\r\n <div key={line.label} className=\"record-detail-row\">\r\n <dt>{line.label}</dt>\r\n <dd>{line.value}</dd>\r\n </div>\r\n ))}\r\n </dl>\r\n );\r\n}\r\n\r\nexport function RecordWorkspace<T>({\r\n title,\r\n columns,\r\n items,\r\n rowKey,\r\n empty,\r\n onAdd,\r\n addLabel = \"Add\",\r\n canAdd = true,\r\n onView,\r\n onUpdate,\r\n onDelete,\r\n canUpdate,\r\n canDelete,\r\n toolbar,\r\n form,\r\n}: {\r\n title: string;\r\n columns: TableColumn<T>[];\r\n items: T[];\r\n rowKey: (item: T) => string | number;\r\n empty: string;\r\n onAdd?: () => void;\r\n addLabel?: string;\r\n canAdd?: boolean;\r\n onView?: (item: T) => void;\r\n onUpdate?: (item: T) => void;\r\n onDelete?: (item: T) => void;\r\n canUpdate?: (item: T) => boolean;\r\n canDelete?: (item: T) => boolean;\r\n toolbar?: ReactNode;\r\n /** Slot for Add/Update/View dialogs owned by the host app. */\r\n form?: ReactNode;\r\n}) {\r\n const filterableColumns = columns.filter((column) => column.filterable !== false);\r\n const [filters, setFilters] = useState<Record<string, string>>({});\r\n const [sort, setSort] = useState<SortState | null>(null);\r\n const [sideOpen, setSideOpen] = useState(false);\r\n const [previewEnabled, setPreviewEnabled] = useState(false);\r\n const [previewKey, setPreviewKey] = useState<string | number | null>(null);\r\n const [tooltip, setTooltip] = useState<TooltipState | null>(null);\r\n const [pageSize, setPageSize] = useState(\"15\");\r\n const [page, setPage] = useState(1);\r\n const isClient = useIsClient();\r\n\r\n const filtered = useMemo(() => {\r\n const activeFilters = columns.filter((column) => column.filterable !== false);\r\n return items.filter((item) =>\r\n activeFilters.every((column) => {\r\n const query = (filters[column.key] ?? \"\").trim();\r\n if (!query) {\r\n return true;\r\n }\r\n const raw = column.value(item);\r\n const text = raw === null || raw === undefined ? \"\" : String(raw);\r\n if (column.filterOptions) {\r\n return text === query;\r\n }\r\n return text.toLowerCase().includes(query.toLowerCase());\r\n }),\r\n );\r\n }, [items, filters, columns]);\r\n\r\n const sorted = useMemo(() => {\r\n if (!sort) {\r\n return filtered;\r\n }\r\n const column = columns.find((entry) => entry.key === sort.key);\r\n if (!column || column.sortable === false) {\r\n return filtered;\r\n }\r\n const direction = sort.direction === \"asc\" ? 1 : -1;\r\n return [...filtered].sort((left, right) => compareColumnValues(column, left, right) * direction);\r\n }, [filtered, sort, columns]);\r\n\r\n const activeFilterCount = useMemo(\r\n () => filterableColumns.reduce((count, column) => count + ((filters[column.key] ?? \"\").trim() ? 1 : 0), 0),\r\n [filterableColumns, filters],\r\n );\r\n\r\n const showAll = pageSize === \"all\";\r\n const numericPageSize = showAll ? Math.max(sorted.length, 1) : Number(pageSize);\r\n const pageCount = showAll ? 1 : Math.max(1, Math.ceil(sorted.length / numericPageSize));\r\n const currentPage = Math.min(page, pageCount);\r\n const start = showAll ? 0 : (currentPage - 1) * numericPageSize;\r\n const pageItems = showAll ? sorted : sorted.slice(start, start + numericPageSize);\r\n const showAdd = canAdd && Boolean(onAdd);\r\n const showFilters = filterableColumns.length > 0;\r\n const previewItem = previewKey === null ? null : sorted.find((item) => rowKey(item) === previewKey) ?? null;\r\n\r\n function cellText(column: TableColumn<T>, item: T) {\r\n const raw = column.display ? column.display(item) : column.value(item);\r\n return raw === null || raw === undefined || raw === \"\" ? \"—\" : String(raw);\r\n }\r\n\r\n function detailLines(item: T): DetailLine[] {\r\n return columns.map((column) => ({\r\n label: column.header,\r\n value: cellText(column, item),\r\n }));\r\n }\r\n\r\n const previewTitle = previewItem && columns[0] ? cellText(columns[0], previewItem) : null;\r\n\r\n function changeFilter(key: string, value: string) {\r\n setFilters((current) => ({ ...current, [key]: value }));\r\n setPage(1);\r\n }\r\n\r\n function clearFilters() {\r\n setFilters({});\r\n setPage(1);\r\n }\r\n\r\n function toggleSort(column: TableColumn<T>) {\r\n if (column.sortable === false) {\r\n return;\r\n }\r\n setSort((current) => {\r\n if (!current || current.key !== column.key) {\r\n return { key: column.key, direction: \"asc\" };\r\n }\r\n if (current.direction === \"asc\") {\r\n return { key: column.key, direction: \"desc\" };\r\n }\r\n return null;\r\n });\r\n setPage(1);\r\n }\r\n\r\n function setPreviewEnabledValue(enabled: boolean) {\r\n setPreviewEnabled(enabled);\r\n setTooltip(null);\r\n if (!enabled) {\r\n setPreviewKey(null);\r\n }\r\n }\r\n\r\n function focusRecord(item: T) {\r\n if (previewEnabled) {\r\n setPreviewKey(rowKey(item));\r\n }\r\n }\r\n\r\n function showTooltip(item: T, event: MouseEvent) {\r\n const padding = 16;\r\n const width = 280;\r\n const x = Math.min(event.clientX + 14, window.innerWidth - width - padding);\r\n const y = Math.min(event.clientY + 14, window.innerHeight - padding - 24);\r\n setTooltip({ x, y, lines: detailLines(item) });\r\n }\r\n\r\n const summary =\r\n sorted.length === 0\r\n ? \"0 records\"\r\n : showAll\r\n ? `1–${sorted.length} of ${sorted.length}`\r\n : `${start + 1}–${Math.min(start + numericPageSize, sorted.length)} of ${sorted.length}`;\r\n\r\n return (\r\n <div className=\"list-workspace\" aria-label={title}>\r\n <div\r\n className={[\"list-body\", sideOpen ? \"side-open\" : \"\", previewEnabled ? \"preview-open\" : \"\"]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n >\r\n <div className=\"list-main\">\r\n <section className=\"table-card\">\r\n {toolbar ? (\r\n <div className=\"table-card-bar\">\r\n <div className=\"table-card-context\">{toolbar}</div>\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"table-wrap\">\r\n <table className=\"data-table\">\r\n <thead>\r\n <tr>\r\n {columns.map((column) => {\r\n const sortable = column.sortable !== false;\r\n const active = sort?.key === column.key ? sort.direction : null;\r\n return (\r\n <th\r\n key={column.key}\r\n aria-sort={active === \"asc\" ? \"ascending\" : active === \"desc\" ? \"descending\" : \"none\"}\r\n >\r\n {sortable ? (\r\n <button\r\n type=\"button\"\r\n className={active ? `sort-header active ${active}` : \"sort-header\"}\r\n onClick={() => toggleSort(column)}\r\n >\r\n <span>{column.header}</span>\r\n <span className=\"sort-indicator\" aria-hidden=\"true\">\r\n {active === \"asc\" ? \"▲\" : active === \"desc\" ? \"▼\" : \"↕\"}\r\n </span>\r\n </button>\r\n ) : (\r\n column.header\r\n )}\r\n </th>\r\n );\r\n })}\r\n <th className=\"actions-col\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {pageItems.length === 0 ? (\r\n <tr>\r\n <td colSpan={columns.length + 1}>\r\n <p className=\"hint table-empty\">\r\n {items.length === 0 ? empty : \"No records match the current filters.\"}\r\n </p>\r\n </td>\r\n </tr>\r\n ) : (\r\n pageItems.map((item) => {\r\n const key = rowKey(item);\r\n const updateAllowed = canUpdate ? canUpdate(item) : Boolean(onUpdate);\r\n const deleteAllowed = canDelete ? canDelete(item) : Boolean(onDelete);\r\n const selected = previewEnabled && previewKey === key;\r\n return (\r\n <tr\r\n key={key}\r\n className={selected ? \"data-row selected\" : \"data-row\"}\r\n onMouseEnter={(event) => {\r\n if (!previewEnabled) {\r\n showTooltip(item, event);\r\n }\r\n focusRecord(item);\r\n }}\r\n onMouseMove={(event) => {\r\n if (!previewEnabled) {\r\n showTooltip(item, event);\r\n }\r\n }}\r\n onMouseLeave={() => setTooltip(null)}\r\n onClick={() => focusRecord(item)}\r\n >\r\n {columns.map((column) => (\r\n <td key={column.key}>{cellText(column, item)}</td>\r\n ))}\r\n <td className=\"actions-col\" onClick={(event) => event.stopPropagation()}>\r\n <div className=\"row-actions\">\r\n {onView ? (\r\n <button type=\"button\" className=\"ghost row-action\" onClick={() => onView(item)}>\r\n View\r\n </button>\r\n ) : null}\r\n {onUpdate ? (\r\n <button\r\n type=\"button\"\r\n className=\"ghost row-action\"\r\n disabled={!updateAllowed}\r\n title={updateAllowed ? \"Update\" : \"Update is not available\"}\r\n onClick={() => onUpdate(item)}\r\n >\r\n Update\r\n </button>\r\n ) : null}\r\n {onDelete ? (\r\n <button\r\n type=\"button\"\r\n className=\"ghost row-action danger\"\r\n disabled={!deleteAllowed}\r\n title={deleteAllowed ? \"Delete\" : \"Delete is not available\"}\r\n onClick={() => onDelete(item)}\r\n >\r\n Delete\r\n </button>\r\n ) : null}\r\n </div>\r\n </td>\r\n </tr>\r\n );\r\n })\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <Pagination\r\n page={currentPage}\r\n pageCount={pageCount}\r\n pageSize={pageSize}\r\n onPageChange={setPage}\r\n onPageSizeChange={(value) => {\r\n setPageSize(value);\r\n setPage(1);\r\n }}\r\n summary={summary}\r\n />\r\n </section>\r\n </div>\r\n\r\n {previewEnabled ? (\r\n <aside className=\"preview-panel\" aria-label=\"Record preview\">\r\n <div className=\"preview-panel-head\">\r\n <div>\r\n <p className=\"preview-kicker\">Preview</p>\r\n <h3>{previewTitle ?? \"No record selected\"}</h3>\r\n </div>\r\n </div>\r\n <div className=\"preview-panel-body\">\r\n {previewItem ? (\r\n <DetailList lines={detailLines(previewItem)} />\r\n ) : (\r\n <p className=\"preview-empty\">Hover or click a row to preview its details here.</p>\r\n )}\r\n </div>\r\n </aside>\r\n ) : null}\r\n\r\n <aside className={sideOpen ? \"side-rail open\" : \"side-rail\"} aria-label=\"Actions and filters\">\r\n <button\r\n type=\"button\"\r\n className=\"ghost side-rail-toggle\"\r\n aria-expanded={sideOpen}\r\n title={sideOpen ? \"Collapse\" : \"Expand\"}\r\n onClick={() => setSideOpen((open) => !open)}\r\n >\r\n <ChevronIcon open={sideOpen} />\r\n {sideOpen ? <span>Collapse</span> : null}\r\n </button>\r\n\r\n {sideOpen ? (\r\n <div className=\"side-rail-body\">\r\n <div className=\"preview-check\">\r\n <input\r\n type=\"checkbox\"\r\n checked={previewEnabled}\r\n onChange={(event) => setPreviewEnabledValue(event.target.checked)}\r\n aria-label=\"Preview\"\r\n />\r\n <PreviewIcon />\r\n <span aria-hidden=\"true\">Preview</span>\r\n </div>\r\n\r\n {showAdd ? (\r\n <button type=\"button\" className=\"side-rail-add\" onClick={onAdd}>\r\n <PlusIcon />\r\n <span>{addLabel}</span>\r\n </button>\r\n ) : null}\r\n\r\n {showFilters ? (\r\n <div className=\"side-rail-filters\">\r\n <div className=\"filter-panel-head\">\r\n <h3>Filters</h3>\r\n <button\r\n type=\"button\"\r\n className=\"ghost filter-clear\"\r\n title=\"Reset filters\"\r\n aria-label=\"Reset filters\"\r\n disabled={activeFilterCount === 0}\r\n onClick={clearFilters}\r\n >\r\n <ResetIcon />\r\n <span>Reset</span>\r\n </button>\r\n </div>\r\n <div className=\"filter-panel-stack\">\r\n {filterableColumns.map((column) => (\r\n <label key={column.key}>\r\n {column.header}\r\n {column.filterOptions ? (\r\n <Select\r\n value={filters[column.key] ?? \"\"}\r\n options={[{ value: \"\", label: column.filterPlaceholder ?? \"All\" }, ...column.filterOptions]}\r\n onChange={(value) => changeFilter(column.key, value)}\r\n placeholder={column.filterPlaceholder ?? \"All\"}\r\n />\r\n ) : (\r\n <input\r\n value={filters[column.key] ?? \"\"}\r\n onChange={(event) => changeFilter(column.key, event.target.value)}\r\n placeholder={`Filter ${column.header.toLowerCase()}`}\r\n />\r\n )}\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : (\r\n <div className=\"side-rail-icons\">\r\n <label className=\"side-rail-icon preview-check-icon\" title=\"Preview\">\r\n <input\r\n type=\"checkbox\"\r\n checked={previewEnabled}\r\n onChange={(event) => setPreviewEnabledValue(event.target.checked)}\r\n aria-label=\"Preview\"\r\n />\r\n <PreviewIcon />\r\n </label>\r\n {showAdd ? (\r\n <button type=\"button\" className=\"ghost side-rail-icon\" title={addLabel} aria-label={addLabel} onClick={onAdd}>\r\n <PlusIcon />\r\n </button>\r\n ) : null}\r\n {showFilters ? (\r\n <button\r\n type=\"button\"\r\n className=\"ghost side-rail-icon\"\r\n title=\"Show filters\"\r\n aria-label=\"Show filters\"\r\n onClick={() => setSideOpen(true)}\r\n >\r\n <FilterIcon />\r\n {activeFilterCount > 0 ? <span className=\"filter-badge\">{activeFilterCount}</span> : null}\r\n </button>\r\n ) : null}\r\n {showFilters ? (\r\n <button\r\n type=\"button\"\r\n className=\"ghost side-rail-icon\"\r\n title=\"Reset filters\"\r\n aria-label=\"Reset filters\"\r\n disabled={activeFilterCount === 0}\r\n onClick={clearFilters}\r\n >\r\n <ResetIcon />\r\n </button>\r\n ) : null}\r\n </div>\r\n )}\r\n </aside>\r\n </div>\r\n\r\n {form}\r\n\r\n {isClient && tooltip && !previewEnabled\r\n ? createPortal(\r\n <div className=\"record-tooltip\" style={{ left: tooltip.x, top: tooltip.y }} role=\"tooltip\">\r\n <p className=\"record-tooltip-title\">{title}</p>\r\n <DetailList lines={tooltip.lines} />\r\n </div>,\r\n document.body,\r\n )\r\n : null}\r\n </div>\r\n );\r\n}\r\n\r\n/** @deprecated Prefer RecordWorkspace — alias kept for configurator migration */\r\nexport const RecordTable = RecordWorkspace;\r\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ButtonHTMLAttributes, ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
/** Canonical theme token names mirrored from aksui.css */
|
|
5
|
+
declare const aksuiTokens: {
|
|
6
|
+
readonly brand: "#1E2735";
|
|
7
|
+
readonly accent: "#E67E22";
|
|
8
|
+
readonly ink: "#1E2735";
|
|
9
|
+
readonly muted: "#667085";
|
|
10
|
+
readonly line: "#e6e4df";
|
|
11
|
+
readonly field: "#f6f5f3";
|
|
12
|
+
readonly card: "#ffffff";
|
|
13
|
+
readonly danger: "#b42318";
|
|
14
|
+
readonly dangerBg: "#fff1f0";
|
|
15
|
+
readonly ok: "#067647";
|
|
16
|
+
readonly okBg: "#ecfdf3";
|
|
17
|
+
readonly radius: "8px";
|
|
18
|
+
readonly rowHeight: "34px";
|
|
19
|
+
readonly tableHeaderHeight: "36px";
|
|
20
|
+
readonly sideRailCollapsed: "52px";
|
|
21
|
+
readonly sideRailExpanded: "280px";
|
|
22
|
+
readonly previewPanelWidth: "300px";
|
|
23
|
+
};
|
|
24
|
+
type AksuiTokenName = keyof typeof aksuiTokens;
|
|
25
|
+
|
|
26
|
+
/** Theme tokens live in aksui.css. Import `@mshuja288/aksuicore/styles.css` in the host app. */
|
|
27
|
+
declare const aksuiThemeVersion = "0.2.0";
|
|
28
|
+
|
|
29
|
+
type ButtonVariant = "primary" | "secondary" | "ghost" | "danger";
|
|
30
|
+
declare function Button({ variant, className, children, ...props }: ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
31
|
+
variant?: ButtonVariant;
|
|
32
|
+
children: ReactNode;
|
|
33
|
+
}): react.JSX.Element;
|
|
34
|
+
|
|
35
|
+
type SelectOption = {
|
|
36
|
+
value: string;
|
|
37
|
+
label: string;
|
|
38
|
+
tone?: "neutral" | "ok" | "warn" | "danger" | "accent";
|
|
39
|
+
};
|
|
40
|
+
declare function Select({ value, options, onChange, placeholder, disabled, required, className, }: {
|
|
41
|
+
value: string;
|
|
42
|
+
options: SelectOption[];
|
|
43
|
+
onChange: (value: string) => void;
|
|
44
|
+
placeholder?: string;
|
|
45
|
+
disabled?: boolean;
|
|
46
|
+
required?: boolean;
|
|
47
|
+
className?: string;
|
|
48
|
+
}): react.JSX.Element;
|
|
49
|
+
/** @deprecated Prefer Select — alias kept for configurator migration */
|
|
50
|
+
declare const AppSelect: typeof Select;
|
|
51
|
+
type AppSelectOption = SelectOption;
|
|
52
|
+
|
|
53
|
+
declare function DateField({ value, onChange, placeholder, disabled, readOnly, }: {
|
|
54
|
+
value: string;
|
|
55
|
+
onChange?: (value: string) => void;
|
|
56
|
+
placeholder?: string;
|
|
57
|
+
disabled?: boolean;
|
|
58
|
+
readOnly?: boolean;
|
|
59
|
+
}): react.JSX.Element;
|
|
60
|
+
|
|
61
|
+
declare function Dialog({ title, open, onClose, children, wide, }: {
|
|
62
|
+
title: string;
|
|
63
|
+
open: boolean;
|
|
64
|
+
onClose: () => void;
|
|
65
|
+
children: ReactNode;
|
|
66
|
+
wide?: boolean;
|
|
67
|
+
}): react.JSX.Element | null;
|
|
68
|
+
/** @deprecated Prefer Dialog — alias kept for configurator migration */
|
|
69
|
+
declare const FormDialog: typeof Dialog;
|
|
70
|
+
|
|
71
|
+
declare function Snackbar({ message, success, onDismiss, }: {
|
|
72
|
+
message: string;
|
|
73
|
+
success: boolean;
|
|
74
|
+
onDismiss?: () => void;
|
|
75
|
+
}): react.ReactPortal | null;
|
|
76
|
+
/** @deprecated Prefer Snackbar — alias kept for configurator migration */
|
|
77
|
+
declare const StatusMessage: typeof Snackbar;
|
|
78
|
+
|
|
79
|
+
declare function Topbar({ title, logoSrc, logoAlt, username, onLogout, children, }: {
|
|
80
|
+
title: string;
|
|
81
|
+
logoSrc?: string;
|
|
82
|
+
logoAlt?: string;
|
|
83
|
+
username?: string;
|
|
84
|
+
onLogout?: () => void;
|
|
85
|
+
children?: ReactNode;
|
|
86
|
+
}): react.JSX.Element;
|
|
87
|
+
|
|
88
|
+
type SideNavItem = {
|
|
89
|
+
id: string;
|
|
90
|
+
label: string;
|
|
91
|
+
/** Compact label for the mobile bottom nav (falls back to `label`). */
|
|
92
|
+
short?: string;
|
|
93
|
+
};
|
|
94
|
+
declare function SideNav({ items, activeId, onSelect, label, }: {
|
|
95
|
+
items: SideNavItem[];
|
|
96
|
+
activeId: string;
|
|
97
|
+
onSelect: (id: string) => void;
|
|
98
|
+
label?: string;
|
|
99
|
+
}): react.JSX.Element;
|
|
100
|
+
|
|
101
|
+
type PageSizeOption = {
|
|
102
|
+
value: string;
|
|
103
|
+
label: string;
|
|
104
|
+
};
|
|
105
|
+
declare function Pagination({ page, pageCount, pageSize, onPageChange, onPageSizeChange, summary, pageSizeOptions, disabled, }: {
|
|
106
|
+
page: number;
|
|
107
|
+
pageCount: number;
|
|
108
|
+
pageSize: string;
|
|
109
|
+
onPageChange: (page: number) => void;
|
|
110
|
+
onPageSizeChange: (pageSize: string) => void;
|
|
111
|
+
summary: string;
|
|
112
|
+
pageSizeOptions?: PageSizeOption[];
|
|
113
|
+
disabled?: boolean;
|
|
114
|
+
}): react.JSX.Element;
|
|
115
|
+
|
|
116
|
+
declare function FormActions({ pending, editing, saveLabel, updateLabel, newLabel, onNew, saveDisabled, replaceSaveWhenEditing, }: {
|
|
117
|
+
pending: boolean;
|
|
118
|
+
editing: boolean;
|
|
119
|
+
saveLabel: string;
|
|
120
|
+
updateLabel?: string;
|
|
121
|
+
newLabel: string;
|
|
122
|
+
onNew: () => void;
|
|
123
|
+
saveDisabled?: boolean;
|
|
124
|
+
replaceSaveWhenEditing?: boolean;
|
|
125
|
+
}): react.JSX.Element | null;
|
|
126
|
+
|
|
127
|
+
type AppShellProps = {
|
|
128
|
+
title: string;
|
|
129
|
+
logoSrc?: string;
|
|
130
|
+
logoAlt?: string;
|
|
131
|
+
username?: string;
|
|
132
|
+
onLogout?: () => void;
|
|
133
|
+
navItems: SideNavItem[];
|
|
134
|
+
activeNavId: string;
|
|
135
|
+
onNavSelect: (id: string) => void;
|
|
136
|
+
navLabel?: string;
|
|
137
|
+
/** When true (default), renders a mobile bottom nav from `navItems`. */
|
|
138
|
+
showBottomNav?: boolean;
|
|
139
|
+
topbarActions?: ReactNode;
|
|
140
|
+
children: ReactNode;
|
|
141
|
+
/** Extra class on the content/screen region */
|
|
142
|
+
screenClassName?: string;
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Application chrome: topbar + left side nav + content screen.
|
|
146
|
+
* Matches aksconfigurator_ui shell layout.
|
|
147
|
+
*/
|
|
148
|
+
declare function AppShell({ title, logoSrc, logoAlt, username, onLogout, navItems, activeNavId, onNavSelect, navLabel, showBottomNav, topbarActions, children, screenClassName, }: AppShellProps): react.JSX.Element;
|
|
149
|
+
|
|
150
|
+
type TableColumn<T> = {
|
|
151
|
+
key: string;
|
|
152
|
+
header: string;
|
|
153
|
+
value: (item: T) => string | number | null | undefined;
|
|
154
|
+
display?: (item: T) => string | number | null | undefined;
|
|
155
|
+
filterable?: boolean;
|
|
156
|
+
sortable?: boolean;
|
|
157
|
+
/** When set, filter uses an exact-match Select instead of text contains. */
|
|
158
|
+
filterOptions?: SelectOption[];
|
|
159
|
+
filterPlaceholder?: string;
|
|
160
|
+
};
|
|
161
|
+
declare function RecordWorkspace<T>({ title, columns, items, rowKey, empty, onAdd, addLabel, canAdd, onView, onUpdate, onDelete, canUpdate, canDelete, toolbar, form, }: {
|
|
162
|
+
title: string;
|
|
163
|
+
columns: TableColumn<T>[];
|
|
164
|
+
items: T[];
|
|
165
|
+
rowKey: (item: T) => string | number;
|
|
166
|
+
empty: string;
|
|
167
|
+
onAdd?: () => void;
|
|
168
|
+
addLabel?: string;
|
|
169
|
+
canAdd?: boolean;
|
|
170
|
+
onView?: (item: T) => void;
|
|
171
|
+
onUpdate?: (item: T) => void;
|
|
172
|
+
onDelete?: (item: T) => void;
|
|
173
|
+
canUpdate?: (item: T) => boolean;
|
|
174
|
+
canDelete?: (item: T) => boolean;
|
|
175
|
+
toolbar?: ReactNode;
|
|
176
|
+
/** Slot for Add/Update/View dialogs owned by the host app. */
|
|
177
|
+
form?: ReactNode;
|
|
178
|
+
}): react.JSX.Element;
|
|
179
|
+
/** @deprecated Prefer RecordWorkspace — alias kept for configurator migration */
|
|
180
|
+
declare const RecordTable: typeof RecordWorkspace;
|
|
181
|
+
|
|
182
|
+
export { type AksuiTokenName, AppSelect, type AppSelectOption, AppShell, type AppShellProps, Button, type ButtonVariant, DateField, Dialog, FormActions, FormDialog, type PageSizeOption, Pagination, RecordTable, RecordWorkspace, Select, type SelectOption, SideNav, type SideNavItem, Snackbar, StatusMessage, type TableColumn, Topbar, aksuiThemeVersion, aksuiTokens };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ButtonHTMLAttributes, ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
/** Canonical theme token names mirrored from aksui.css */
|
|
5
|
+
declare const aksuiTokens: {
|
|
6
|
+
readonly brand: "#1E2735";
|
|
7
|
+
readonly accent: "#E67E22";
|
|
8
|
+
readonly ink: "#1E2735";
|
|
9
|
+
readonly muted: "#667085";
|
|
10
|
+
readonly line: "#e6e4df";
|
|
11
|
+
readonly field: "#f6f5f3";
|
|
12
|
+
readonly card: "#ffffff";
|
|
13
|
+
readonly danger: "#b42318";
|
|
14
|
+
readonly dangerBg: "#fff1f0";
|
|
15
|
+
readonly ok: "#067647";
|
|
16
|
+
readonly okBg: "#ecfdf3";
|
|
17
|
+
readonly radius: "8px";
|
|
18
|
+
readonly rowHeight: "34px";
|
|
19
|
+
readonly tableHeaderHeight: "36px";
|
|
20
|
+
readonly sideRailCollapsed: "52px";
|
|
21
|
+
readonly sideRailExpanded: "280px";
|
|
22
|
+
readonly previewPanelWidth: "300px";
|
|
23
|
+
};
|
|
24
|
+
type AksuiTokenName = keyof typeof aksuiTokens;
|
|
25
|
+
|
|
26
|
+
/** Theme tokens live in aksui.css. Import `@mshuja288/aksuicore/styles.css` in the host app. */
|
|
27
|
+
declare const aksuiThemeVersion = "0.2.0";
|
|
28
|
+
|
|
29
|
+
type ButtonVariant = "primary" | "secondary" | "ghost" | "danger";
|
|
30
|
+
declare function Button({ variant, className, children, ...props }: ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
31
|
+
variant?: ButtonVariant;
|
|
32
|
+
children: ReactNode;
|
|
33
|
+
}): react.JSX.Element;
|
|
34
|
+
|
|
35
|
+
type SelectOption = {
|
|
36
|
+
value: string;
|
|
37
|
+
label: string;
|
|
38
|
+
tone?: "neutral" | "ok" | "warn" | "danger" | "accent";
|
|
39
|
+
};
|
|
40
|
+
declare function Select({ value, options, onChange, placeholder, disabled, required, className, }: {
|
|
41
|
+
value: string;
|
|
42
|
+
options: SelectOption[];
|
|
43
|
+
onChange: (value: string) => void;
|
|
44
|
+
placeholder?: string;
|
|
45
|
+
disabled?: boolean;
|
|
46
|
+
required?: boolean;
|
|
47
|
+
className?: string;
|
|
48
|
+
}): react.JSX.Element;
|
|
49
|
+
/** @deprecated Prefer Select — alias kept for configurator migration */
|
|
50
|
+
declare const AppSelect: typeof Select;
|
|
51
|
+
type AppSelectOption = SelectOption;
|
|
52
|
+
|
|
53
|
+
declare function DateField({ value, onChange, placeholder, disabled, readOnly, }: {
|
|
54
|
+
value: string;
|
|
55
|
+
onChange?: (value: string) => void;
|
|
56
|
+
placeholder?: string;
|
|
57
|
+
disabled?: boolean;
|
|
58
|
+
readOnly?: boolean;
|
|
59
|
+
}): react.JSX.Element;
|
|
60
|
+
|
|
61
|
+
declare function Dialog({ title, open, onClose, children, wide, }: {
|
|
62
|
+
title: string;
|
|
63
|
+
open: boolean;
|
|
64
|
+
onClose: () => void;
|
|
65
|
+
children: ReactNode;
|
|
66
|
+
wide?: boolean;
|
|
67
|
+
}): react.JSX.Element | null;
|
|
68
|
+
/** @deprecated Prefer Dialog — alias kept for configurator migration */
|
|
69
|
+
declare const FormDialog: typeof Dialog;
|
|
70
|
+
|
|
71
|
+
declare function Snackbar({ message, success, onDismiss, }: {
|
|
72
|
+
message: string;
|
|
73
|
+
success: boolean;
|
|
74
|
+
onDismiss?: () => void;
|
|
75
|
+
}): react.ReactPortal | null;
|
|
76
|
+
/** @deprecated Prefer Snackbar — alias kept for configurator migration */
|
|
77
|
+
declare const StatusMessage: typeof Snackbar;
|
|
78
|
+
|
|
79
|
+
declare function Topbar({ title, logoSrc, logoAlt, username, onLogout, children, }: {
|
|
80
|
+
title: string;
|
|
81
|
+
logoSrc?: string;
|
|
82
|
+
logoAlt?: string;
|
|
83
|
+
username?: string;
|
|
84
|
+
onLogout?: () => void;
|
|
85
|
+
children?: ReactNode;
|
|
86
|
+
}): react.JSX.Element;
|
|
87
|
+
|
|
88
|
+
type SideNavItem = {
|
|
89
|
+
id: string;
|
|
90
|
+
label: string;
|
|
91
|
+
/** Compact label for the mobile bottom nav (falls back to `label`). */
|
|
92
|
+
short?: string;
|
|
93
|
+
};
|
|
94
|
+
declare function SideNav({ items, activeId, onSelect, label, }: {
|
|
95
|
+
items: SideNavItem[];
|
|
96
|
+
activeId: string;
|
|
97
|
+
onSelect: (id: string) => void;
|
|
98
|
+
label?: string;
|
|
99
|
+
}): react.JSX.Element;
|
|
100
|
+
|
|
101
|
+
type PageSizeOption = {
|
|
102
|
+
value: string;
|
|
103
|
+
label: string;
|
|
104
|
+
};
|
|
105
|
+
declare function Pagination({ page, pageCount, pageSize, onPageChange, onPageSizeChange, summary, pageSizeOptions, disabled, }: {
|
|
106
|
+
page: number;
|
|
107
|
+
pageCount: number;
|
|
108
|
+
pageSize: string;
|
|
109
|
+
onPageChange: (page: number) => void;
|
|
110
|
+
onPageSizeChange: (pageSize: string) => void;
|
|
111
|
+
summary: string;
|
|
112
|
+
pageSizeOptions?: PageSizeOption[];
|
|
113
|
+
disabled?: boolean;
|
|
114
|
+
}): react.JSX.Element;
|
|
115
|
+
|
|
116
|
+
declare function FormActions({ pending, editing, saveLabel, updateLabel, newLabel, onNew, saveDisabled, replaceSaveWhenEditing, }: {
|
|
117
|
+
pending: boolean;
|
|
118
|
+
editing: boolean;
|
|
119
|
+
saveLabel: string;
|
|
120
|
+
updateLabel?: string;
|
|
121
|
+
newLabel: string;
|
|
122
|
+
onNew: () => void;
|
|
123
|
+
saveDisabled?: boolean;
|
|
124
|
+
replaceSaveWhenEditing?: boolean;
|
|
125
|
+
}): react.JSX.Element | null;
|
|
126
|
+
|
|
127
|
+
type AppShellProps = {
|
|
128
|
+
title: string;
|
|
129
|
+
logoSrc?: string;
|
|
130
|
+
logoAlt?: string;
|
|
131
|
+
username?: string;
|
|
132
|
+
onLogout?: () => void;
|
|
133
|
+
navItems: SideNavItem[];
|
|
134
|
+
activeNavId: string;
|
|
135
|
+
onNavSelect: (id: string) => void;
|
|
136
|
+
navLabel?: string;
|
|
137
|
+
/** When true (default), renders a mobile bottom nav from `navItems`. */
|
|
138
|
+
showBottomNav?: boolean;
|
|
139
|
+
topbarActions?: ReactNode;
|
|
140
|
+
children: ReactNode;
|
|
141
|
+
/** Extra class on the content/screen region */
|
|
142
|
+
screenClassName?: string;
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Application chrome: topbar + left side nav + content screen.
|
|
146
|
+
* Matches aksconfigurator_ui shell layout.
|
|
147
|
+
*/
|
|
148
|
+
declare function AppShell({ title, logoSrc, logoAlt, username, onLogout, navItems, activeNavId, onNavSelect, navLabel, showBottomNav, topbarActions, children, screenClassName, }: AppShellProps): react.JSX.Element;
|
|
149
|
+
|
|
150
|
+
type TableColumn<T> = {
|
|
151
|
+
key: string;
|
|
152
|
+
header: string;
|
|
153
|
+
value: (item: T) => string | number | null | undefined;
|
|
154
|
+
display?: (item: T) => string | number | null | undefined;
|
|
155
|
+
filterable?: boolean;
|
|
156
|
+
sortable?: boolean;
|
|
157
|
+
/** When set, filter uses an exact-match Select instead of text contains. */
|
|
158
|
+
filterOptions?: SelectOption[];
|
|
159
|
+
filterPlaceholder?: string;
|
|
160
|
+
};
|
|
161
|
+
declare function RecordWorkspace<T>({ title, columns, items, rowKey, empty, onAdd, addLabel, canAdd, onView, onUpdate, onDelete, canUpdate, canDelete, toolbar, form, }: {
|
|
162
|
+
title: string;
|
|
163
|
+
columns: TableColumn<T>[];
|
|
164
|
+
items: T[];
|
|
165
|
+
rowKey: (item: T) => string | number;
|
|
166
|
+
empty: string;
|
|
167
|
+
onAdd?: () => void;
|
|
168
|
+
addLabel?: string;
|
|
169
|
+
canAdd?: boolean;
|
|
170
|
+
onView?: (item: T) => void;
|
|
171
|
+
onUpdate?: (item: T) => void;
|
|
172
|
+
onDelete?: (item: T) => void;
|
|
173
|
+
canUpdate?: (item: T) => boolean;
|
|
174
|
+
canDelete?: (item: T) => boolean;
|
|
175
|
+
toolbar?: ReactNode;
|
|
176
|
+
/** Slot for Add/Update/View dialogs owned by the host app. */
|
|
177
|
+
form?: ReactNode;
|
|
178
|
+
}): react.JSX.Element;
|
|
179
|
+
/** @deprecated Prefer RecordWorkspace — alias kept for configurator migration */
|
|
180
|
+
declare const RecordTable: typeof RecordWorkspace;
|
|
181
|
+
|
|
182
|
+
export { type AksuiTokenName, AppSelect, type AppSelectOption, AppShell, type AppShellProps, Button, type ButtonVariant, DateField, Dialog, FormActions, FormDialog, type PageSizeOption, Pagination, RecordTable, RecordWorkspace, Select, type SelectOption, SideNav, type SideNavItem, Snackbar, StatusMessage, type TableColumn, Topbar, aksuiThemeVersion, aksuiTokens };
|