@adapttable/mantine 0.1.1 → 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 +34 -0
- package/dist/index.cjs +1902 -1932
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +197 -151
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +197 -150
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1848 -1900
- package/dist/index.js.map +1 -1
- package/package.json +17 -15
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/animation/useMountStagger.ts","../src/components/ActiveFilterChips.tsx","../src/components/AutoFilterForm.tsx","../src/components/BulkActionBar.tsx","../src/components/ColumnMenu.tsx","../src/density.ts","../src/icons.tsx","../src/components/ExpandToggle.tsx","../src/components/DesktopTable.tsx","../src/components/EmptyState.tsx","../src/components/ErrorState.tsx","../src/components/FilterDrawer.tsx","../src/components/MobileCards.tsx","../src/components/PaginationFooter.tsx","../src/components/SavedViewsMenu.tsx","../src/components/TableSkeleton.tsx","../src/components/FilterPopover.tsx","../src/components/Toolbar.tsx","../src/DataTable.tsx"],"names":["usePrefersReducedMotion","useEffect","jsxs","Group","jsx","Pill","Anchor","RANGE_OPS","filterLabel","RANGE_SUFFIXES","readRangeWidget","useState","writeRangeWidget","RANGE_OP_LABEL_KEYS","NumberInput","TextInput","Fragment","Stack","Input","Select","useFilterOptions","NativeSelect","Checkbox","Loader","useBulkActionRunner","Text","Button","resolveDisabledReason","Tooltip","ActionIcon","EyeIcon","PinIcon","ACTIONS_COLUMN_KEY","Box","useColumnDragState","Menu","columnMenuRows","columnReorderKeyProps","GripIcon","pinActionLabel","nextPinSide","Table","Badge","runRowAction","pinnedCellStyle","rowClickProps","tableRenderModel","headerGroupRow","useHorizontalOverflow","PIN_Z","pinnedColumnWidth","edgePinStyle","columnResizeHandleProps","tableMinWidth","useRef","useCallback","useMemo","memo","VisuallyHidden","Alert","Drawer","Card","pageSizeOptions","Pagination","Skeleton","Popover","useSavedViews","useTableData","resolveLabels","isDeclarativeFilters","useTableChrome","useChromeBodyData","useFilterTriggerToggle","useElementSize","useChromeScrollReset","Paper","Progress"],"mappings":";;;;;;;;;AAuBO,SAAS,eAAA,CACd,GAAA,EACA,IAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,UAAUA,4BAAA,EAAwB;AACxC,EAAA,MAAM,EAAE,OAAA,EAAS,IAAA,GAAO,EAAA,EAAI,QAAA,GAAW,KAAI,GAAI,OAAA;AAI/C,EAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAE,KAAK,GAAG,CAAA;AAEzC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACzB,IAAA,MAAM,OAAO,GAAA,CAAI,OAAA;AACjB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAA8B,gBAAgB,CAAA;AACjE,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,EAAA,EAAI,KAAA,KAAU;AAC3B,MAAA,IAAI,OAAO,EAAA,CAAG,OAAA,KAAY,UAAA,EAAY;AACtC,MAAA,EAAA,CAAG,OAAA;AAAA,QACD;AAAA,UACE,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,iBAAA,EAAkB;AAAA,UAC3C,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,eAAA;AAAgB,SAC3C;AAAA,QACA;AAAA,UACE,QAAA;AAAA,UACA,OAAO,KAAA,GAAQ,IAAA;AAAA,UACf,MAAA,EAAQ,+BAAA;AAAA,UACR,IAAA,EAAM;AAAA;AACR,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,OAAA,EAAS,OAAA,EAAS,MAAM,QAAA,EAAU,GAAA,EAAK,OAAO,CAAC,CAAA;AACrD;ACxCO,SAAS,iBAAA,CAAkB;AAAA,EAChC,KAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAqC;AACnC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,uBACEC,eAAA;AAAA,IAACC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,CAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAU,IAAA;AAAA,MACV,OAAO,EAAE,SAAA,EAAW,QAAQ,OAAA,EAAS,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,MAEjD,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVC,cAAA;AAAA,UAACC,WAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,IAAA;AAAA,YACV,gBAAA,EAAgB,IAAA;AAAA,YAChB,UAAU,IAAA,CAAK,QAAA;AAAA,YACf,iBAAA,EAAmB;AAAA,cACjB,YAAA,EAAc,CAAA,EAAG,aAAa,CAAA,EAAA,EAAK,KAAK,KAAK,CAAA;AAAA,aAC/C;AAAA,YAEC,QAAA,EAAA,IAAA,CAAK;AAAA,WAAA;AAAA,UARD,IAAA,CAAK;AAAA,SAUb,CAAA;AAAA,QACA,UAAA,oBACCD,cAAA;AAAA,UAACE,aAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,QAAA;AAAA,YACV,IAAA,EAAK,QAAA;AAAA,YACL,EAAA,EAAG,IAAA;AAAA,YACH,EAAA,EAAI,GAAA;AAAA,YACJ,OAAA,EAAS,UAAA;AAAA,YAER,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AClBA,IAAM,SAAS,CAAC,KAAA,KACd,SAAS,IAAA,GAAO,EAAA,GAAK,OAAO,KAAK,CAAA;AAGnC,IAAM,MAAA,GAAS,CAAC,KAAA,KAAiC;AAC/C,EAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,KAAA,KAAU,EAAA,SAAW,EAAC;AAC3C,EAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,QAAQ,CAAC,MAAA,CAAO,KAAK,CAAC,CAAA;AACtD,CAAA;AAGA,IAAM,IAAA,GAAO,CAAC,KAAA,KACZC,cAAA,CAAU,KAAK,CAAC,EAAA,KAAO,OAAO,KAAK,CAAA;AAGrC,IAAM,aAAA,GAAgB,EAAE,WAAA,EAAa,QAAA,EAAU,WAAW,MAAA,EAAO;AASjE,SAAS,UAAA,CAAiB;AAAA,EACxB,GAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAKI;AACF,EAAA,MAAM,KAAA,GAAQC,iBAAY,GAAG,CAAA;AAC7B,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,GAAMC,mBAAA,CAAe,IAAI,CAAA,CAAE,KAAA;AAC9C,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,GAAA,GAAMA,mBAAA,CAAe,IAAI,CAAA,CAAE,GAAA;AAK/C,EAAA,MAAM,OAAA,GAAUC,oBAAA,CAAgB,MAAA,CAAO,KAAA,EAAO,QAAQ,OAAO,CAAA;AAC7D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,eAAyB,IAAI,CAAA;AACzD,EAAA,MAAM,EAAA,GAAK,MAAA,IAAU,OAAA,CAAQ,EAAA,IAAM,IAAA;AAEnC,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,OAAO,CAAC,CAAA;AAEzC,EAAA,MAAM,MAAA,GAAS,EAAA,KAAO,KAAA,GAAQ,IAAA,GAAO,GAAA;AAErC,EAAA,MAAM,KAAA,GAAQ,CAAC,MAAA,EAA6B,CAAA,EAAW,CAAA,KACrD,MAAA,CAAO,SAAA,CAAUC,qBAAA,CAAiB,MAAA,EAAQ,CAAA,EAAG,CAAA,EAAG,MAAA,EAAQ,OAAO,CAAC,CAAA;AAElE,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAyB;AACzC,IAAA,MAAM,IAAA,GAAO,KAAK,KAAK,CAAA;AACvB,IAAA,SAAA,CAAU,QAAQ,IAAI,CAAA;AAEtB,IAAA,KAAA,CAAM,IAAA,EAAM,QAAQ,EAAE,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,cAAc,IAAI,CAAA;AAClC,EAAA,MAAM,WAAA,GAAcC,yBAAoB,OAAO,CAAA;AAC/C,EAAA,MAAM,IAAA,GAAON,cAAA,CAAU,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACrC,KAAA;AAAA,IACA,KAAA,EAAO,MAAA,CAAO,WAAA,CAAY,KAAK,CAAC;AAAA,GAClC,CAAE,CAAA;AAEF,EAAA,MAAM,aAAa,CACjB,IAAA,EACA,OACA,MAAA,KAEA,OAAA,KAAY,2BACVH,cAAAA;AAAA,IAACU,kBAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MACL,YAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO,EAAE,IAAA,EAAM,UAAA,EAAY,UAAU,MAAA,EAAO;AAAA,MAC5C,YAAA,EAAY,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,MAC5B,WAAA,EAAa,IAAA;AAAA,MACb,KAAA;AAAA,MACA,UAAU,CAAC,IAAA,KAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC;AAAA;AAAA,sBAGzCV,cAAAA;AAAA,IAACW,gBAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,MAAA;AAAA,MACL,IAAA,EAAK,IAAA;AAAA,MACL,KAAA,EAAO,EAAE,IAAA,EAAM,YAAA,EAAc,UAAU,QAAA,EAAS;AAAA,MAChD,YAAA,EAAY,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,MAC5B,WAAA,EAAa,IAAA;AAAA,MACb,KAAA;AAAA,MACA,UAAU,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,cAAc,KAAK;AAAA;AAAA,GAC/C;AAGJ,EAAA,IAAI,MAAA,GAAoB,IAAA;AACxB,EAAA,IAAI,OAAO,SAAA,EAAW;AACpB,IAAA,MAAA,mBACEb,gBAAAc,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,UAAA,CAAW,MAAA,CAAO,MAAM,GAAA,EAAK,CAAC,SAAS,KAAA,CAAM,SAAA,EAAW,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MACnE,UAAA,CAAW,MAAA,CAAO,EAAA,EAAI,IAAA,EAAM,CAAC,SAAS,KAAA,CAAM,SAAA,EAAW,GAAA,EAAK,IAAI,CAAC;AAAA,KAAA,EACpE,CAAA;AAAA,EAEJ,WAAW,EAAA,EAAI;AACb,IAAA,MAAA,GAAS,UAAA,CAAW,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,CAAC,SAAS,KAAA,CAAM,EAAA,EAAI,IAAA,EAAM,EAAE,CAAC,CAAA;AAAA,EACzE;AAEA,EAAA,uBACEd,eAAAA,CAACe,YAAA,EAAA,EAAM,GAAA,EAAK,CAAA,EACV,QAAA,EAAA;AAAA,oBAAAb,eAACc,YAAA,CAAM,KAAA,EAAN,EAAY,IAAA,EAAK,MAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAI9BhB,eAAAA,CAACC,YAAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EAAK,OAAM,YAAA,EACpB,QAAA,EAAA;AAAA,sBAAAC,cAAAA;AAAA,QAACe,aAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,IAAA;AAAA,UACL,SAAA,EAAS,IAAA;AAAA,UACT,KAAA,EAAO,EAAE,IAAA,EAAM,YAAA,EAAc,OAAO,QAAA,EAAS;AAAA,UAC7C,YAAA,EAAY,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,OAAO,QAAQ,CAAA,CAAA;AAAA,UACvC,aAAa,MAAA,CAAO,QAAA;AAAA,UACpB,IAAA;AAAA,UACA,KAAA,EAAO,EAAA;AAAA,UACP,QAAA,EAAU,QAAA;AAAA,UACV,aAAA,EAAe,EAAE,YAAA,EAAc,KAAA;AAAM;AAAA,OACvC;AAAA,MACC;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAOA,SAAS,aAAA,CAAoB;AAAA,EAC3B,GAAA;AAAA,EACA;AACF,CAAA,EAAkE;AAChE,EAAA,MAAM,KAAA,GAAQX,iBAAY,GAAG,CAAA;AAC7B,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAIY,sBAAiB,GAAG,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,UACT,CAAC,EAAE,OAAO,EAAA,EAAI,KAAA,EAAO,UAAK,QAAA,EAAU,IAAA,EAAM,CAAA,GAC1C,CAAC,EAAE,KAAA,EAAO,EAAA,EAAI,OAAO,KAAA,EAAM,EAAG,GAAG,OAAO,CAAA;AAC5C,EAAA,uBACEhB,cAAAA;AAAA,IAACiB,mBAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MACL,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MACnC,QAAA,EAAU,CAAC,CAAA,KAAM,MAAA,CAAO,SAAS,GAAA,CAAI,GAAA,EAAK,CAAA,CAAE,aAAA,CAAc,KAAK;AAAA;AAAA,GACjE;AAEJ;AAOA,SAAS,kBAAA,CAAyB;AAAA,EAChC,GAAA;AAAA,EACA;AACF,CAAA,EAAkE;AAChE,EAAA,MAAM,KAAA,GAAQb,iBAAY,GAAG,CAAA;AAC7B,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAIY,sBAAiB,GAAG,CAAA;AACjD,EAAA,uBACEhB,cAAAA;AAAA,IAACkB,eAAA,CAAS,KAAA;AAAA,IAAT;AAAA,MACC,KAAA;AAAA,MACA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MACnC,UAAU,CAAC,MAAA,KAAW,OAAO,QAAA,CAAS,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,MAErD,0BAAAlB,cAAAA,CAACD,YAAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EAAK,IAAI,CAAA,EACjB,QAAA,EAAA,OAAA,mBACCC,cAAAA,CAACmB,aAAA,EAAA,EAAO,MAAK,IAAA,EAAK,CAAA,GAElB,QAAQ,GAAA,CAAI,CAAC,2BACXnB,cAAAA;AAAA,QAACkB,eAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,IAAA;AAAA,UACL,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,OAAO,MAAA,CAAO;AAAA,SAAA;AAAA,QAHT,MAAA,CAAO;AAAA,OAKf,CAAA,EAEL;AAAA;AAAA,GACF;AAEJ;AAGA,SAAS,aAAA,CAAoB;AAAA,EAC3B,GAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAII;AACF,EAAA,QAAQ,IAAI,IAAA;AAAM,IAChB,KAAK,MAAA;AACH,MAAA,uBACElB,cAAAA;AAAA,QAACW,gBAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,IAAA;AAAA,UACL,KAAA,EAAOP,iBAAY,GAAG,CAAA;AAAA,UACtB,aAAa,GAAA,CAAI,WAAA;AAAA,UACjB,OAAO,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,UACnC,QAAA,EAAU,CAAC,CAAA,KAAM,MAAA,CAAO,SAAS,GAAA,CAAI,GAAA,EAAK,CAAA,CAAE,aAAA,CAAc,KAAK;AAAA;AAAA,OACjE;AAAA,IAEJ,KAAK,QAAA;AACH,MAAA,uBAAOJ,cAAAA,CAAC,aAAA,EAAA,EAAc,GAAA,EAAU,MAAA,EAAgB,CAAA;AAAA,IAClD,KAAK,aAAA;AACH,MAAA,uBAAOA,cAAAA,CAAC,kBAAA,EAAA,EAAmB,GAAA,EAAU,MAAA,EAAgB,CAAA;AAAA,IACvD,KAAK,WAAA;AAAA,IACL,KAAK,aAAA;AACH,MAAA,uBACEA,eAAC,UAAA,EAAA,EAAW,GAAA,EAAU,QAAgB,IAAA,EAAM,GAAA,CAAI,MAAM,MAAA,EAAgB,CAAA;AAAA;AAG9E;AAYO,SAAS,cAAA,CAAqB;AAAA,EACnC,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAwC;AACtC,EAAA,uBACEA,eAACa,YAAA,EAAA,EAAM,GAAA,EAAI,MACR,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACTb,cAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MAEC,GAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KAAA;AAAA,IAHK,GAAA,CAAI;AAAA,GAKZ,CAAA,EACH,CAAA;AAEJ;ACrRO,SAAS,aAAA,CAAc;AAAA,EAC5B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAiC;AAC/B,EAAA,MAAM,EAAE,WAAA,EAAa,aAAA,EAAe,KAAA,EAAO,aAAY,GAAI,SAAA;AAC3D,EAAA,MAAM,EAAE,OAAA,EAAS,GAAA,EAAI,GAAIoB,wBAAA,CAAoB;AAAA,IAC3C,OAAA;AAAA,IACA,aAAa,MAAA,CAAO,MAAA;AAAA,IACpB,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,IAAI,aAAA,KAAkB,GAAG,OAAO,IAAA;AAEhC,EAAA,MAAM,GAAA,GAAM,CAAC,GAAG,WAAW,CAAA;AAC3B,EAAA,uBACEtB,eAAAA,CAACe,YAAAA,EAAA,EAAM,KAAI,IAAA,EACT,QAAA,EAAA;AAAA,oBAAAf,eAAAA,CAACC,cAAA,EAAM,OAAA,EAAQ,iBAAgB,IAAA,EAAK,MAAA,EAAO,KAAI,IAAA,EAC7C,QAAA,EAAA;AAAA,sBAAAC,eAACqB,WAAA,EAAA,EAAK,EAAA,EAAG,MAAM,QAAA,EAAA,MAAA,CAAO,aAAA,CAAc,aAAa,CAAA,EAAE,CAAA;AAAA,sBACnDvB,eAAAA,CAACC,YAAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EAAK,MAAK,MAAA,EACnB,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAACsB,aAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAQ,QAAA;AAAA,YACR,OAAA,EAAS,KAAA;AAAA,YACT,UAAU,OAAA,KAAY,IAAA;AAAA,YAErB,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,SACV;AAAA,QACC,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,qBAChBtB,cAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YAEC,MAAA;AAAA,YACA,GAAA;AAAA,YACA,OAAA;AAAA,YACA,KAAA,EAAO,CAAC,CAAA,KAAM;AAGZ,cAAA,IAAI,WAAA,MAAiB,CAAA,EAAG,GAAA,EAAK,EAAE,WAAA,EAAa,IAAA,EAAM,OAAO,CAAA;AAAA,mBACpD,GAAA,CAAI,GAAG,GAAG,CAAA;AAAA,YACjB;AAAA,WAAA;AAAA,UATK,MAAA,CAAO;AAAA,SAWf;AAAA,OAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,oBACAA,cAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAsB,OAAc,MAAA,EAAgB;AAAA,GAAA,EACnE,CAAA;AAEJ;AAOA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAII;AACF,EAAA,IAAI,UAAU,WAAA,KAAgB,KAAA,IAAS,KAAA,IAAS,SAAA,CAAU,WAAW,MAAA,EAAQ;AAC3E,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,uBACEA,cAAAA,CAACD,YAAAA,EAAA,EAAM,MAAK,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,IAAA,EAAK,QAChC,QAAA,EAAA,SAAA,CAAU,WAAA,mBACTD,eAAAA,CAAAc,qBAAA,EACE,QAAA,EAAA;AAAA,oBAAAZ,eAACqB,WAAA,EAAA,EAAK,EAAA,EAAG,MAAM,QAAA,EAAA,MAAA,CAAO,mBAAA,CAAoB,KAAK,CAAA,EAAE,CAAA;AAAA,oBACjDrB,cAAAA,CAACsB,aAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,QAAA,EAAS,OAAA,EAAS,SAAA,CAAU,KAAA,EACnD,QAAA,EAAA,MAAA,CAAO,QAAA,EACV;AAAA,GAAA,EACF,CAAA,mBAEAxB,eAAAA,CAAAc,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAZ,cAAAA,CAACqB,eAAK,EAAA,EAAG,IAAA,EAAM,iBAAO,YAAA,CAAa,SAAA,CAAU,aAAa,CAAA,EAAE,CAAA;AAAA,oBAC5DrB,cAAAA;AAAA,MAACsB,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAQ,OAAA;AAAA,QACR,SAAS,SAAA,CAAU,iBAAA;AAAA,QAElB,QAAA,EAAA,MAAA,CAAO,kBAAkB,KAAK;AAAA;AAAA;AACjC,GAAA,EACF,CAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,MAAA;AAAA,EACA,GAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAKI;AACF,EAAA,MAAM,MAAA,GAASC,0BAAA,CAAsB,MAAA,CAAO,cAAA,GAAiB,GAAG,CAAC,CAAA;AACjE,EAAA,MAAM,aAAa,MAAA,KAAW,MAAA;AAC9B,EAAA,MAAM,yBACJvB,cAAAA;AAAA,IAACsB,aAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MACL,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,aAAa,MAAA,CAAO,IAAA;AAAA,MACpB,OAAA,EAAS,MAAM,KAAA,CAAM,MAAM,CAAA;AAAA,MAC3B,OAAA,EAAS,YAAY,MAAA,CAAO,GAAA;AAAA,MAC5B,QAAA,EAAU,UAAA,IAAe,OAAA,KAAY,IAAA,IAAQ,YAAY,MAAA,CAAO,GAAA;AAAA,MAE/D,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,GACV;AAEF,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,uBACEtB,cAAAA,CAACwB,cAAA,EAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAS,IAAA,EAAC,SAAA,EAAW,GAAA,EAC3C,QAAA,kBAAAxB,cAAAA,CAAC,KAAA,EAAA,EAAK,kBAAO,CAAA,EACf,CAAA;AAAA,EAEJ;AACA,EAAA,OAAO,MAAA;AACT;AC1GA,SAAS,aAAA,CAAc;AAAA,EACrB,MAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAKI;AACF,EAAA,uBACEF,eAAAA,CAAAc,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAZ,cAAAA;AAAA,MAACyB,iBAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,SAAS,QAAA,GAAW,OAAA;AAAA,QAC7B,KAAA,EAAO,SAAS,MAAA,GAAS,MAAA;AAAA,QACzB,IAAA,EAAK,IAAA;AAAA,QACL,YAAA,EAAY,GAAG,MAAA,GAAS,MAAA,CAAO,aAAa,MAAA,CAAO,UAAU,KAAK,IAAI,CAAA,CAAA;AAAA,QACtE,gBAAc,CAAC,MAAA;AAAA,QACf,OAAA,EAAS,QAAA;AAAA,QAET,QAAA,kBAAAzB,cAAAA,CAAC0B,YAAA,EAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ;AAAA;AAAA,KACxB;AAAA,oBACA1B,cAAAA;AAAA,MAACqB,WAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,QACjB,CAAA,EAAG,SAAS,QAAA,GAAW,MAAA;AAAA,QACvB,EAAA,EAAI,SAAS,cAAA,GAAiB,MAAA;AAAA,QAE7B,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AAGA,SAAS,SAAA,CAAU;AAAA,EACjB,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAsE;AACpE,EAAA,uBACErB,cAAAA;AAAA,IAACyB,iBAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,SAAS,QAAA,GAAW,QAAA;AAAA,MAC7B,KAAA,EAAO,SAAS,MAAA,GAAS,MAAA;AAAA,MACzB,IAAA,EAAK,IAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,OAAA;AAAA,MAEA,QAAA,kBAAAzB,eAAC2B,YAAA,EAAA,EAAQ;AAAA;AAAA,GACX;AAEJ;AAOA,SAAS,UAAA,CAAiB;AAAA,EACxB,MAAA;AAAA,EACA;AACF,CAAA,EAGI;AACF,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAASC,uBAAkB,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,MAAA,CAAOA,uBAAkB,CAAA,KAAM,OAAA;AAC3D,EAAA,uBACE9B,eAAAA,CAACC,YAAAA,EAAA,EAAM,OAAA,EAAQ,YAAA,EAAa,IAAA,EAAK,QAAA,EAAS,GAAA,EAAK,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAE3D,QAAA,EAAA;AAAA,oBAAAC,cAAAA,CAAC6B,UAAA,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA;AAAA,oBACZ7B,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,MAAM,MAAA,CAAO,OAAA;AAAA,QACb,MAAA;AAAA,QACA,QAAA,EAAU,MAAM,MAAA,CAAO,aAAA,CAAc4B,uBAAkB;AAAA;AAAA,KACzD;AAAA,oBACA5B,cAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,KAAA,EAAO,GAAG,MAAA,GAAS,MAAA,CAAO,QAAQ,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK,MAAA,CAAO,OAAO,CAAA,CAAA;AAAA,QACpE,SAAS,MACP,MAAA,CAAO,UAAU4B,uBAAA,EAAoB,MAAA,GAAS,SAAY,OAAO;AAAA;AAAA;AAErE,GAAA,EACF,CAAA;AAEJ;AAMO,SAAS,UAAA,CAAiB;AAAA,EAC/B,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA,GAAgB;AAClB,CAAA,EAAoC;AAClC,EAAA,MAAM,OAAOE,uBAAA,EAAmB;AAChC,EAAA,uBACEhC,gBAACiC,WAAA,EAAA,EAAK,gBAAA,EAAkB,OAAO,QAAA,EAAS,YAAA,EAAa,cAAY,IAAA,EAC/D,QAAA,EAAA;AAAA,oBAAA/B,cAAAA,CAAC+B,WAAA,CAAK,MAAA,EAAL,EACC,0BAAA/B,cAAAA,CAACsB,aAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAC5B,QAAA,EAAA,MAAA,CAAO,SACV,CAAA,EACF,CAAA;AAAA,oBACAtB,cAAAA,CAAC+B,WAAA,CAAK,QAAA,EAAL,EACC,QAAA,kBAAAjC,eAAAA,CAAC+B,UAAA,EAAA,EAAI,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,GAAA,EACd,QAAA,EAAA;AAAA,sBAAA7B,eAACqB,WAAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,GAAE,QAAA,EAAS,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG,aAAY,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAC3D,iBAAO,OAAA,EACV,CAAA;AAAA,MACCW,oBAAe,UAAA,EAAY,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAG7C,QAAA,MAAM,YAAY,IAAA,CAAK,QAAA,CAAS,CAAA,CAAE,GAAA,EAAK,EAAE,KAAK,CAAA;AAC9C,QAAA,MAAM,IAAA,GAAO,UAAU,WAAW,CAAA;AAClC,QAAA,MAAM,UAAA,GAAa,IAAA,KAAS,QAAA,GAAW,KAAA,GAAQ,MAAA;AAC/C,QAAA,uBACElC,eAAAA;AAAA,UAACC,YAAAA;AAAA,UAAA;AAAA,YAEC,OAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAK,QAAA;AAAA,YACL,GAAA,EAAK,CAAA;AAAA,YACL,EAAA,EAAI,CAAA;AAAA,YACJ,EAAA,EAAI,CAAA;AAAA,YACJ,KAAA,EAAO;AAAA,cACL,MAAA,EAAQ,MAAA;AAAA,cACR,OAAA,EAAS,eAAA,IAAmB,SAAA,GAAY,GAAA,GAAM,MAAA;AAAA,cAC9C,SAAA,EAAW,IAAA,GACP,CAAA,QAAA,EAAW,UAAU,CAAA,wCAAA,CAAA,GACrB;AAAA,aACN;AAAA,YACC,GAAG,IAAA,CAAK,YAAA,CAAa,CAAA,CAAE,GAAA,EAAK,EAAE,KAAK,CAAA;AAAA,YACnC,GAAG,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,KAAA,EAAO,OAAO,IAAI,CAAA;AAAA,YACtC,GAAG,SAAA;AAAA,YAEJ,QAAA,EAAA;AAAA,8BAAAC,cAAAA;AAAA,gBAACyB,iBAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,QAAA;AAAA,kBACR,KAAA,EAAM,MAAA;AAAA,kBACN,IAAA,EAAK,IAAA;AAAA,kBACL,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA,EAAO;AAAA,kBACvB,GAAGQ,0BAAA;AAAA,oBACF,CAAA,CAAE,GAAA;AAAA,oBACF,CAAA,CAAE,KAAA;AAAA,oBACF,MAAA,CAAO,IAAA;AAAA,oBACP,CAAA,EAAG,OAAO,QAAQ,CAAA,GAAA,EAAM,OAAO,SAAS,CAAA,EAAA,EAAK,EAAE,IAAI,CAAA;AAAA,mBACrD;AAAA,kBAEA,QAAA,kBAAAjC,eAACkC,aAAA,EAAA,EAAS;AAAA;AAAA,eACZ;AAAA,8BACAlC,cAAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACC,QAAQ,CAAA,CAAE,MAAA;AAAA,kBACV,MAAM,CAAA,CAAE,IAAA;AAAA,kBACR,MAAA;AAAA,kBACA,QAAA,EAAU,MAAM,MAAA,CAAO,aAAA,CAAc,EAAE,GAAG;AAAA;AAAA,eAC5C;AAAA,8BACAA,cAAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBACC,MAAA,EAAQ,EAAE,MAAA,KAAW,MAAA;AAAA,kBACrB,KAAA,EAAO,GAAGmC,mBAAA,CAAe,CAAA,CAAE,QAAQ,MAAM,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,CAAA;AAAA,kBACrD,OAAA,EAAS,MAAM,MAAA,CAAO,SAAA,CAAU,EAAE,GAAA,EAAKC,gBAAA,CAAY,CAAA,CAAE,MAAM,CAAC;AAAA;AAAA;AAC9D;AAAA,WAAA;AAAA,UAzCK,CAAA,CAAE;AAAA,SA0CT;AAAA,MAEJ,CAAC,CAAA;AAAA,MACA,aAAA,oBACCtC,eAAAA,CAAAc,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAZ,cAAAA,CAAC+B,WAAA,CAAK,OAAA,EAAL,EAAa,CAAA;AAAA,wBACd/B,cAAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB,MAAA,EAAgB;AAAA,OAAA,EAC9C,CAAA;AAAA,sBAEFA,cAAAA,CAAC+B,WAAA,CAAK,OAAA,EAAL,EAAa,CAAA;AAAA,sBACd/B,cAAAA;AAAA,QAACsB,aAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,SAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAQ,YAAA;AAAA,UACR,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM;AAAA,UAE3B,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACV,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;ACxMO,IAAM,eAAA,GAAmD;AAAA,EAC9D,WAAA,EAAa,EAAE,eAAA,EAAiB,IAAA,EAAM,mBAAmB,IAAA,EAAK;AAAA,EAC9D,OAAA,EAAS,EAAE,eAAA,EAAiB,CAAA,EAAG,mBAAmB,IAAA;AACpD,CAAA;ACXA,SAAS,GAAA,CAAI;AAAA,EACX,IAAA,GAAO,EAAA;AAAA,EACP,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAwC;AACtC,EAAA,uBACEtB,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAa,CAAA;AAAA,MACb,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAU,OAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ;AAGO,IAAM,aAAa,CAAC,CAAA,qBACzBF,eAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,CAAA,EACP,QAAA,EAAA;AAAA,kBAAAE,eAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,kBAC9BA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAA,EAAiB;AAAA,CAAA,EAC3B,CAAA;AAIK,IAAM,aAAA,GAAgB,CAAC,CAAA,qBAC5BA,cAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,CAAA,EACP,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAgB,CAAA,EAC1B,CAAA;AAIK,IAAM,eAAA,GAAkB,CAAC,CAAA,qBAC9BA,cAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,CAAA,EACP,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAe,CAAA,EACzB,CAAA;AAIK,IAAM,gBAAA,GAAmB,CAAC,CAAA,qBAC/BA,cAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,CAAA,EACP,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAe,CAAA,EACzB,CAAA;AAIK,IAAM,YAAA,GAAe,CAAC,CAAA,qBAC3BA,cAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,CAAA,EACP,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6BAA4B,CAAA,EACtC,CAAA;AAIK,IAAM,SAAA,GAAY,CAAC,CAAA,qBACxBA,cAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,CAAA,EACP,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wBAAuB,CAAA,EACjC,CAAA;AAIK,IAAM,WAAA,GAAc,CAAC,CAAA,qBAC1BA,cAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,CAAA,EACP,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2BAA0B,CAAA,EACpC,CAAA;AAIK,IAAM,YAAY,CAAC,CAAA,qBACxBF,eAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,CAAA,EACP,QAAA,EAAA;AAAA,kBAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+EAAA,EAAgF,CAAA;AAAA,kBACxFA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mBAAA,EAAoB;AAAA,CAAA,EAC9B,CAAA;AAIK,IAAM,cAAc,CAAC,CAAA,qBAC1BF,eAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,CAAA,EACP,QAAA,EAAA;AAAA,kBAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6BAAA,EAA8B,CAAA;AAAA,kBACtCA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAA,EAAa;AAAA,CAAA,EACvB,CAAA;AAIK,IAAM,YAAY,CAAC,CAAA,qBACxBF,eAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,CAAA,EACP,QAAA,EAAA;AAAA,kBAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0BAAA,EAA2B,CAAA;AAAA,kBACnCA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oGAAA,EAAqG;AAAA,CAAA,EAC/G,CAAA;ACnFK,SAAS,YAAA,CAAa;AAAA,EAC3B,QAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAgC;AAC9B,EAAA,uBACEA,cAAAA;AAAA,IAACyB,iBAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAK,IAAA;AAAA,MACL,eAAA,EAAe,QAAA;AAAA,MACf,YAAA,EAAY,WAAW,aAAA,GAAgB,WAAA;AAAA,MACvC,OAAA,EAAS,QAAA;AAAA,MAET,QAAA,kBAAAzB,cAAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,EAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL,SAAA,EAAW,WAAW,eAAA,GAAkB,cAAA;AAAA,YACxC,UAAA,EAAY;AAAA;AACd;AAAA;AACF;AAAA,GACF;AAEJ;ACTA,IAAM,mBAAA,GAAqC;AAAA,EACzC,QAAA,EAAU,UAAA;AAAA,EACV,cAAA,EAAgB,CAAA;AAAA,EAChB,GAAA,EAAK,CAAA;AAAA,EACL,MAAA,EAAQ,MAAA;AAAA,EACR,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,YAAA;AAAA,EACR,WAAA,EAAa,MAAA;AAAA,EACb,UAAA,EAAY;AACd,CAAA;AAsBA,SAAS,QAAA,CAAS;AAAA,EAChB,MAAA;AAAA,EACA;AACF,CAAA,EAGI;AACF,EAAA,IAAI,CAAC,MAAA,EAAQ,uBAAOA,cAAAA,CAAC,YAAA,EAAA,EAAa,MAAM,EAAA,EAAI,CAAA;AAC5C,EAAA,OAAO,GAAA,KAAQ,KAAA,mBACbA,cAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,EAAA,EAAI,CAAA,mBAEzBA,cAAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAM,EAAA,EAAI,CAAA;AAE/B;AAEA,SAAS,UAAA,CAAiB;AAAA,EACxB,KAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAKI;AACF,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,kBAAA,CAAmB,MAAM,CAAA;AACjD,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,GAAI,SAAA,CAAU,KAAA;AAAA,IACd,GAAG;AAAA,GACL;AACA,EAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,IAAA,uBACEF,gBAACuC,YAAA,CAAM,EAAA,EAAN,EAAU,GAAG,SAAA,EAAW,OAAO,WAAA,EAC7B,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,MAAA;AAAA,MACP;AAAA,KAAA,EACH,CAAA;AAAA,EAEJ;AAGA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,kBAAA,CAAmB,MAAM,CAAA;AAInD,EAAA,MAAM,SAAA,GAAY,YAAY,iBAAiB,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,KAAQ,MAAA,CAAO,GAAG,CAAA;AACtE,EAAA,MAAM,MAAA,GAAS,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,WAAW,MAAA,CAAO,GAAA;AAC9D,EAAA,uBACEvC,gBAACuC,YAAA,CAAM,EAAA,EAAN,EAAU,GAAG,SAAA,EAAW,OAAO,WAAA,EAC9B,QAAA,EAAA;AAAA,oBAAAvC,eAAAA;AAAA,MAACC,YAAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,QAAA;AAAA,QACV,GAAA,EAAK,CAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAQ,aAAA;AAAA,QACR,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,MAAA;AAAA,UACZ,MAAA,EAAQ,CAAA;AAAA,UACR,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,SAAA;AAAA,UACN,OAAA,EAAS,CAAA;AAAA,UACT,KAAA,EAAO,SAAS,qCAAA,GAAwC;AAAA,SAC1D;AAAA,QACC,GAAG,WAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAC,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,MAAA,EAAO,CAAA;AAAA,0BACrBA,eAAC,QAAA,EAAA,EAAS,MAAA,EAAgB,KAAK,KAAA,EAAO,GAAA,IAAO,MAAM,OAAA,EAAS,CAAA;AAAA,UAC3D,OAAO,SAAA,KAAc,QAAA,oBACpBA,cAAAA,CAACsC,YAAA,EAAA,EAAM,SAAA,EAAU,MAAA,EAAO,IAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAA,EACvC,QAAA,EAAA,SAAA,EACH;AAAA;AAAA;AAAA,KAEJ;AAAA,IACC;AAAA,GAAA,EACH,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAiB;AAAA,EACxB,GAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAKI;AACF,EAAA,uBACEtC,cAAAA,CAACD,YAAAA,EAAA,EAAM,GAAA,EAAK,CAAA,EAAG,OAAA,EAAQ,UAAA,EAAW,IAAA,EAAK,QAAA,EACpC,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACvB,IAAA,IAAI,MAAA,CAAO,QAAA,GAAW,GAAG,CAAA,EAAG,OAAO,IAAA;AACnC,IAAA,MAAM,MAAA,GAASwB,0BAAAA,CAAsB,MAAA,CAAO,cAAA,GAAiB,GAAG,CAAC,CAAA;AACjE,IAAA,MAAM,WACJ,MAAA,KAAW,MAAA,KAAc,MAAA,CAAO,UAAA,GAAa,GAAG,CAAA,IAAK,KAAA,CAAA;AAGvD,IAAA,MAAM,WAAA,GAAc,QAAA,GAChB,MAAA,GACA,CAAC,CAAA,KAAkB;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAAgB,iBAAA,CAAa,MAAA,EAAQ,GAAA,EAAK,OAAA,EAAS,WAAW,CAAA;AAAA,IAChD,CAAA;AAGJ,IAAA,OAAO,MAAA,CAAO,uBACZvC,cAAAA;AAAA,MAACwB,cAAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAO,UAAU,MAAA,CAAO,KAAA;AAAA,QACxB,SAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,GAAA;AAAA,QAEX,QAAA,kBAAAxB,cAAAA;AAAA,UAACyB,iBAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,QAAA;AAAA,YACR,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,IAAA,EAAK,IAAA;AAAA,YACL,QAAA;AAAA,YACA,cAAY,MAAA,CAAO,KAAA;AAAA,YACnB,OAAA,EAAS,WAAA;AAAA,YAER,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACV,OAAA;AAAA,MAdK,MAAA,CAAO;AAAA,wBAiBdzB,cAAAA;AAAA,MAACsB,aAAAA;AAAA,MAAA;AAAA,QAEC,OAAA,EAAQ,QAAA;AAAA,QACR,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,IAAA,EAAK,YAAA;AAAA,QACL,QAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QAER,QAAA,EAAA,MAAA,CAAO;AAAA,OAAA;AAAA,MAPH,MAAA,CAAO;AAAA,KAQd;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AA8DA,IAAM,kBAAA,GAGA;AAAA,EACJ,KAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA;AASA,SAAS,oBAAA,CACP,MACA,IAAA,EACS;AACT,EAAA,OAAO,kBAAA,CAAmB,KAAA,CAAM,CAAC,GAAA,KAAQ,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,GAAG,CAAA,EAAG,IAAA,CAAK,GAAG,CAAC,CAAC,CAAA;AAC1E;AAQA,SAAS,eAAA,CACP,MAAA,EACA,KAAA,EACA,MAAA,EACA,UAAA,EAC2B;AAC3B,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,MAAM,QAAQkB,oBAAA,CAAgB,EAAE,MAAM,MAAA,EAAQ,KAAA,IAAS,MAAM,CAAA;AAC7D,EAAA,OAAO,UAAA,GAAa,EAAE,GAAG,KAAA,EAAO,YAAW,GAAI,KAAA;AACjD;AAOA,SAAS,kBAAA,CACP,OAAA,EACA,SAAA,EACA,UAAA,EACA,iBAAA,EACQ;AACR,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACxC,IAAA,MAAM,GAAA,GAAM,SAAA,GAAY,MAAA,CAAO,GAAG,CAAA;AAClC,IAAA,OAAO,GAAA,GAAM,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,CAAA,GAAK,MAAA,CAAO,GAAA;AAAA,EAChE,CAAC,CAAA;AACD,EAAA,OAAO,CAAA,EAAG,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,iBAAiB,CAAC,CAAA,CAAA;AAClF;AAOA,SAAS,cAAA,CAAqB;AAAA,EAC5B,GAAA;AAAA,EACA,KAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,EAAoC;AAClC,EAAA,MAAM,WAAA,GAAA,CAAe,UAAA,EAAY,MAAA,IAAU,CAAA,IAAK,CAAA;AAChD,EAAA,uBACE1C,eAAAA,CAAAc,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAd,eAAAA;AAAA,MAACuC,YAAA,CAAM,EAAA;AAAA,MAAN;AAAA,QACC,IAAA,EAAK,KAAA;AAAA,QACL,YAAA,EAAY,KAAA;AAAA,QACZ,eAAA,EAAe,QAAA;AAAA,QACd,GAAGI,kBAAA,CAAc,GAAA,EAAK,UAAU,CAAA;AAAA,QACjC,SAAA;AAAA,QACA,GAAA,EAAK,cAAA;AAAA,QACL,cAAA,EAAa,EAAA;AAAA,QACb,YAAA,EAAc,QAAA,GAAW,MAAM,QAAA,CAAS,GAAG,CAAA,GAAI,MAAA;AAAA,QAE9C,QAAA,EAAA;AAAA,UAAA,QAAA,KAAa,MAAA,oBACZzC,cAAAA,CAACqC,YAAA,CAAM,EAAA,EAAN,EAAS,EAAA,EAAG,QAAA,EAAS,KAAA,EAAO,kBAAA,EAC3B,QAAA,kBAAArC,cAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,QAAA;AAAA,cACA,WAAA;AAAA,cACA,aAAA;AAAA,cACA,QAAA,EAAU,MAAM,cAAA,CAAgB,EAAE;AAAA;AAAA,WACpC,EACF,CAAA;AAAA,UAED,QAAA,KAAa,MAAA,oBACZA,cAAAA,CAACqC,YAAA,CAAM,EAAA,EAAN,EAAS,EAAA,EAAG,QAAA,EAAS,KAAA,EAAO,kBAAA,EAC3B,QAAA,kBAAArC,cAAAA;AAAA,YAACkB,eAAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAY,WAAA;AAAA,cACZ,OAAA,EAAS,QAAA;AAAA,cACT,QAAA,EAAU,MAAM,cAAA,CAAe,EAAE;AAAA;AAAA,WACnC,EACF,CAAA;AAAA,UAED,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZlB,cAAAA;AAAA,YAACqC,YAAA,CAAM,EAAA;AAAA,YAAN;AAAA,cAEE,GAAG,aAAa,MAAM,CAAA;AAAA,cACvB,KAAA,EAAO,WAAA,CAAY,MAAA,CAAO,GAAG,CAAA;AAAA,cAE5B,QAAA,EAAA,MAAA,CAAO,IAAA,mBACNrC,cAAAA,CAAC,MAAA,CAAO,IAAA,EAAP,EAAY,GAAA,EAAU,QAAA,EAAU,KAAA,EAAO,CAAA,GAExC,MAAA,CAAO,WAAW,GAAG;AAAA,aAAA;AAAA,YAPlB,MAAA,CAAO;AAAA,WAUf,CAAA;AAAA,UACA,WAAA,oBACCA,cAAAA,CAACqC,YAAA,CAAM,EAAA,EAAN,EAAS,EAAA,EAAG,KAAA,EAAM,KAAA,EAAO,gBAAA,EACxB,QAAA,kBAAArC,cAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,OAAA,EAAS,UAAA;AAAA,cACT,OAAA;AAAA,cACA;AAAA;AAAA,WACF,EACF;AAAA;AAAA;AAAA,KAEJ;AAAA,IACC,aAAa,IAAA,oBACZA,cAAAA,CAACqC,YAAA,CAAM,IAAN,EACC,QAAA,kBAAArC,cAAAA,CAACqC,YAAA,CAAM,IAAN,EAAS,OAAA,EAAS,YAAa,QAAA,EAAA,eAAA,CAAiB,GAAG,GAAE,CAAA,EACxD;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAGO,SAAS,YAAA,CAAmB;AAAA,EACjC,KAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB,CAAA;AAAA,EAChB,cAAA;AAAA,EACA,kBAAA,GAAqB,CAAA;AAAA,EACrB,YAAA,GAAe,KAAA;AAAA,EACf,SAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA,GAAc,eAAA;AAAA,EACd,aAAA,GAAgB,KAAA;AAAA,EAChB,OAAA,GAAU;AACZ,CAAA,EAAsC;AAIpC,EAAA,MAAM,EAAE,SAAS,SAAA,EAAW,MAAA,EAAQ,aAAa,OAAA,EAAS,UAAA,KACxDK,qBAAA,CAAiB;AAAA,IACf,KAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGH,EAAA,MAAM,aAAa,SAAA,KAAc,MAAA;AAGjC,EAAA,MAAM,UAAA,GAAaC,oBAAe,OAAO,CAAA;AACzC,EAAA,MAAM,YAAA,GAAe,aAAa,IAAI,CAAA;AACtC,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,IAAA;AAAA,IAChC,CAAC,CAAA,KAAM,SAAA,GAAY,CAAA,CAAE,GAAG,GAAG,IAAA,KAAS;AAAA,GACtC;AAIA,EAAA,MAAM,iBAAA,GAAoB,gBAAgB,WAAA,IAAe,aAAA,CAAA;AACzD,EAAA,MAAM,SAAA,GACJ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,SAAA,GAAY,CAAA,CAAE,GAAG,CAAA,IAAK,IAAI,CAAA,IAAK,iBAAA;AAa3D,EAAA,MAAM,EAAE,GAAA,EAAK,UAAA,EAAY,WAAA,KACvBC,0BAAA,EAAsC;AACxC,EAAA,MAAM,WAAA,GAAc,SAAA,IAAa,IAAA,IAAQ,SAAA,IAAa,WAAA;AAKtD,EAAA,MAAM,kBAAiC,YAAA,GACnC;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,GAAA,EAAK,cAAc,CAAA,GAAI,kBAAA;AAAA,IACvB,QAAQC,UAAA,CAAM,MAAA;AAAA,IACd,UAAA,EAAY,2BAAA;AAAA,IACZ,SAAA,EAAW;AAAA,GACb,GACA,EAAE,UAAA,EAAY,2BAAA,EAA4B;AAK9C,EAAA,MAAM,cAAA,GAAiB,EAAA;AACvB,EAAA,MAAM,cAAA,GAAiB,EAAA;AACvB,EAAA,MAAM,YAAA,GAAe,GAAA;AACrB,EAAA,MAAM,aAAA,GAAgB,aAAa,cAAA,GAAiB,CAAA;AACpD,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,IAAA,EAAM,aAAA,IAAiB,SAAA,GAAY,cAAA,GAAiB,CAAA,CAAA;AAAA,IACpD,KAAA,EAAO,cAAc,YAAA,GAAe;AAAA,GACtC;AACA,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,IAAA;AAAA,IAC/B,CAAC,CAAA,KAAM,SAAA,GAAY,CAAA,CAAE,GAAG,GAAG,IAAA,KAAS;AAAA,GACtC;AAIA,EAAA,MAAM,KAAA,GAAQ,2BAAA;AACd,EAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,KAA2C;AACjE,IAAA,MAAM,MAAM,MAAA,CAAO,GAAA;AACnB,IAAA,MAAM,MAAML,oBAAA,CAAgB,SAAA,GAAY,GAAG,CAAA,EAAGK,UAAA,CAAM,cAAc,KAAK,CAAA;AACvE,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC5B,GAAG,eAAA;AAAA,MACH,GAAG,GAAA;AAAA;AAAA;AAAA,MAGH,OAAO,GAAA,GACHC,sBAAA,CAAkB,QAAQ,YAAY,CAAA,GACtC,eAAe,GAAG;AAAA,KACxB;AACA,IAAA,IAAI,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,SAAiB,QAAA,GAAW,UAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAKA,EAAA,MAAM,oBAAA,GAAsC;AAAA,IAC1C,GAAG,eAAA;AAAA,IACH,GAAG,eAAA,CAAgB,UAAA,EAAY,CAAA,EAAGD,WAAM,YAAY;AAAA,GACtD;AACA,EAAA,MAAM,oBAAA,GAAsC;AAAA,IAC1C,GAAG,eAAA;AAAA,IACH,GAAG,eAAA,CAAgB,UAAA,EAAY,aAAA,EAAeA,WAAM,YAAY;AAAA,GAClE;AACA,EAAA,MAAM,kBAAA,GAAoC;AAAA,IACxC,GAAG,eAAA;AAAA,IACH,GAAGE,iBAAA,CAAa,OAAA,EAAS,iBAAA,EAAmBF,WAAM,YAAY;AAAA,GAChE;AACA,EAAA,MAAM,aAAA,GAAgB,CACpB,IAAA,EACA,MAAA,KAC8B;AAC9B,IAAA,MAAM,GAAA,GAAME,iBAAA,CAAa,IAAA,EAAM,MAAA,EAAQF,WAAM,IAAI,CAAA;AACjD,IAAA,OAAO,MAAM,EAAE,GAAG,GAAA,EAAK,UAAA,EAAY,OAAM,GAAI,MAAA;AAAA,EAC/C,CAAA;AACA,EAAA,MAAM,qBAAqB,eAAA,CAAgB,UAAA,EAAY,CAAA,EAAGA,UAAA,CAAM,MAAM,KAAK,CAAA;AAC3E,EAAA,MAAM,kBAAA,GAAqB,eAAA;AAAA,IACzB,UAAA;AAAA,IACA,aAAA;AAAA,IACAA,UAAA,CAAM,IAAA;AAAA,IACN;AAAA,GACF;AACA,EAAA,MAAM,gBAAA,GAAmB,aAAA,CAAc,OAAA,EAAS,iBAAiB,CAAA;AACjE,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,KAClB,OAAO,OAAO,MAAA,KAAW,QAAA,GAAW,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,GAAA;AAC7D,EAAA,MAAM,eAAA,GAAkB,CAAC,MAAA,KACvB,QAAA,mBACE7C,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAGgD,4BAAA;AAAA,QACF,MAAA,CAAO,GAAA;AAAA,QACP,QAAA;AAAA,QACA,CAAA,EAAG,WAAW,CAAA,EAAA,EAAK,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA,OACvC;AAAA,MACA,KAAA,EAAO;AAAA;AAAA,GACT,GACE,MAAA;AACN,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAA2C;AAC/D,IAAA,MAAM,MAAMR,oBAAA,CAAgB,SAAA,GAAY,GAAG,CAAA,EAAGK,UAAA,CAAM,MAAM,KAAK,CAAA;AAC/D,IAAA,OAAO,MAAM,EAAE,GAAG,GAAA,EAAK,UAAA,EAAY,OAAM,GAAI,MAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,MAAM,EAAE,eAAA,EAAiB,iBAAA,EAAkB,GAAI,gBAAgB,OAAO,CAAA;AAItE,EAAA,MAAM,QAAA,GAAWI,mBAAc,OAAA,EAAS;AAAA,IACtC,MAAA,EAAQ,YAAA;AAAA,IACR,OAAO,aAAA,IAAiB,SAAA,GAAY,EAAA,GAAK,CAAA,CAAA,IAAM,cAAc,GAAA,GAAM,CAAA;AAAA,GACpE,CAAA;AAKD,EAAA,MAAM,YAAA,GAAeC,aAAO,SAAS,CAAA;AACrC,EAAA,YAAA,CAAa,OAAA,GAAU,SAAA;AACvB,EAAA,MAAM,YAAA,GAAeC,iBAAA;AAAA,IACnB,CAAC,EAAA,KAAe,YAAA,CAAa,OAAA,CAAS,OAAO,EAAE,CAAA;AAAA,IAC/C;AAAC,GACH;AAIA,EAAA,MAAM,GAAA,GAAMC,aAAA;AAAA,IACV,MAAMC,UAAA,CAAK,cAAA,EAAsB,oBAAoB,CAAA;AAAA,IACrD;AAAC,GACH;AAEA,EAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,IACnB,OAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,YAAA,GACJ,aAAa,IAAA,GACT;AAAA,IACE,KAAA,EAAO,MAAA;AAAA,IACP,GAAI,SAAA,IAAa,WAAA,GAAc,EAAE,SAAA,EAAW,MAAA,KAAW;AAAC,MAE1D,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,UAAU,MAAA,EAAO;AAEnD,EAAA,uBACErD,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,gBAAA,GAAmB,IAAI,CAAA;AAAA,MACzB,CAAA;AAAA,MACA,KAAA,EAAO,YAAA;AAAA,MAEP,QAAA,kBAAAF,eAAAA;AAAA,QAACuC,YAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAM,aAAA,EAAc;AAAA,UACxB,SAAA;AAAA,UACA,gBAAA,EAAgB,IAAA;AAAA,UAChB,eAAA;AAAA,UACA,iBAAA;AAAA,UACA,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,QAAQ,CAAA;AAAA,UAI3B,OACE,YAAA,GACI,EAAE,gBAAgB,UAAA,EAAY,aAAA,EAAe,GAAE,GAC/C,MAAA;AAAA,UAGN,QAAA,EAAA;AAAA,4BAAAvC,eAAAA,CAACuC,aAAM,KAAA,EAAN,EAAY,OAAO,EAAE,UAAA,EAAY,6BAA4B,EAC3D,QAAA,EAAA;AAAA,cAAA,UAAA,oBACCvC,eAAAA,CAACuC,YAAA,CAAM,EAAA,EAAN,EACE,QAAA,EAAA;AAAA,gBAAA,UAAA,oBAAcrC,cAAAA,CAACqC,YAAA,CAAM,EAAA,EAAN,EAAS,CAAA;AAAA,gBACxB,SAAA,oBAAarC,cAAAA,CAACqC,YAAA,CAAM,IAAN,EAAS,CAAA;AAAA,gBACvB,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,qBACfrC,cAAAA;AAAA,kBAACqC,YAAA,CAAM,EAAA;AAAA,kBAAN;AAAA,oBAEC,SAAS,IAAA,CAAK,IAAA;AAAA,oBACd,EAAA,EAAG,QAAA;AAAA,oBACH,EAAA,EAAI,GAAA;AAAA,oBACJ,KAAA,EAAO;AAAA,sBACL,YAAA,EACE;AAAA,qBACJ;AAAA,oBAEC,QAAA,EAAA,IAAA,CAAK;AAAA,mBAAA;AAAA,kBATD,IAAA,CAAK;AAAA,iBAWb,CAAA;AAAA,gBACA,WAAA,oBAAerC,cAAAA,CAACqC,YAAA,CAAM,IAAN,EAAS;AAAA,eAAA,EAC5B,CAAA;AAAA,8BAEFvC,gBAACuC,YAAA,CAAM,EAAA,EAAN,EAAU,GAAG,KAAA,CAAM,mBAAkB,EACnC,QAAA,EAAA;AAAA,gBAAA,UAAA,oBACCrC,cAAAA;AAAA,kBAACqC,YAAA,CAAM,EAAA;AAAA,kBAAN;AAAA,oBACC,CAAA,EAAG,cAAA;AAAA,oBACH,EAAA,EAAG,QAAA;AAAA,oBACH,KAAA,EAAO,oBAAA;AAAA,oBAEP,QAAA,kBAAArC,cAAAA,CAACsD,qBAAA,EAAA,EAAgB,QAAA,EAAA,MAAA,CAAO,SAAA,EAAU;AAAA;AAAA,iBACpC;AAAA,gBAED,6BACCtD,cAAAA;AAAA,kBAACqC,YAAA,CAAM,EAAA;AAAA,kBAAN;AAAA,oBACC,CAAA,EAAG,cAAA;AAAA,oBACH,EAAA,EAAG,QAAA;AAAA,oBACH,KAAA,EAAO,oBAAA;AAAA,oBAEP,QAAA,kBAAArC,cAAAA;AAAA,sBAACkB,eAAAA;AAAA,sBAAA;AAAA,wBACC,cAAY,MAAA,CAAO,SAAA;AAAA,wBACnB,OAAA,EAAS,UAAU,WAAA,KAAgB,KAAA;AAAA,wBACnC,aAAA,EAAe,UAAU,WAAA,KAAgB,MAAA;AAAA,wBACzC,UAAU,SAAA,CAAU;AAAA;AAAA;AACtB;AAAA,iBACF;AAAA,gBAED,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZlB,cAAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBAEC,KAAA;AAAA,oBACA,MAAA;AAAA,oBACA,WAAA,EAAa,eAAe,MAAM,CAAA;AAAA,oBAClC,YAAA,EAAc,gBAAgB,MAAM;AAAA,mBAAA;AAAA,kBAJ/B,MAAA,CAAO;AAAA,iBAMf,CAAA;AAAA,gBACA,WAAA,oBACCA,cAAAA,CAACqC,YAAA,CAAM,EAAA,EAAN,EAAS,EAAA,EAAG,KAAA,EAAM,CAAA,EAAG,YAAA,EAAc,KAAA,EAAO,kBAAA,EACxC,iBAAO,OAAA,EACV;AAAA,eAAA,EAEJ;AAAA,aAAA,EACF,CAAA;AAAA,4BACAvC,eAAAA,CAACuC,YAAA,CAAM,KAAA,EAAN,EAAY,KAAK,OAAA,EACf,QAAA,EAAA;AAAA,cAAA,UAAA,GAAa,CAAA,oBACZrC,cAAAA,CAACqC,YAAA,CAAM,IAAN,EAAS,aAAA,EAAW,MACnB,QAAA,kBAAArC,cAAAA;AAAA,gBAACqC,YAAA,CAAM,EAAA;AAAA,gBAAN;AAAA,kBACC,OAAA,EAAS,UAAA;AAAA,kBACT,KAAA,EAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,SAAS,CAAA;AAAE;AAAA,eAC1C,EACF,CAAA;AAAA,cAED,QAAQ,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,KAAA,EAAO,KAAI,KAAM;AACpC,gBAAA,MAAM,EAAA,GAAK,SAAS,GAAG,CAAA;AACvB,gBAAA,uBACErC,cAAAA;AAAA,kBAAC,GAAA;AAAA,kBAAA;AAAA,oBAEC,GAAA;AAAA,oBACA,KAAA;AAAA,oBACA,EAAA;AAAA,oBACA,OAAA;AAAA,oBACA,cAAc,KAAA,CAAM,YAAA;AAAA,oBACpB,QAAA,EAAU,SAAA,EAAW,UAAA,CAAW,EAAE,CAAA;AAAA,oBAClC,aAAa,MAAA,CAAO,SAAA;AAAA,oBACpB,cAAA,EAAgB,YAAA;AAAA,oBAChB,QAAA,EAAU,SAAA,EAAW,UAAA,CAAW,EAAE,CAAA;AAAA,oBAClC,aAAa,MAAA,CAAO,SAAA;AAAA,oBACpB,eAAe,MAAA,CAAO,WAAA;AAAA,oBACtB,gBAAgB,SAAA,EAAW,MAAA;AAAA,oBAC3B,eAAA;AAAA,oBACA,UAAA;AAAA,oBACA,UAAA;AAAA,oBACA,OAAA;AAAA,oBACA,aAAa,MAAA,CAAO,MAAA;AAAA,oBACpB,UAAA;AAAA,oBACA,QAAA;AAAA,oBACA,SAAA,EAAW,YAAA,GAAe,GAAA,EAAK,KAAK,CAAA;AAAA,oBACpC,cAAA;AAAA,oBACA,WAAA,EAAa,YAAA;AAAA,oBACb,kBAAA;AAAA,oBACA,kBAAA;AAAA,oBACA,gBAAA;AAAA,oBACA;AAAA,mBAAA;AAAA,kBA1BK;AAAA,iBA2BP;AAAA,cAEJ,CAAC,CAAA;AAAA,cACA,aAAA,GAAgB,qBACfA,cAAAA,CAACqC,aAAM,EAAA,EAAN,EAAS,aAAA,EAAW,IAAA,EACnB,QAAA,kBAAArC,cAAAA;AAAA,gBAACqC,YAAA,CAAM,EAAA;AAAA,gBAAN;AAAA,kBACC,OAAA,EAAS,UAAA;AAAA,kBACT,KAAA,EAAO,EAAE,MAAA,EAAQ,aAAA,EAAe,SAAS,CAAA;AAAE;AAAA,eAC7C,EACF;AAAA,aAAA,EAEJ,CAAA;AAAA,YACC,YAAA,oBACCrC,cAAAA,CAACqC,YAAA,CAAM,KAAA,EAAN,EACC,QAAA,kBAAAvC,eAAAA,CAACuC,YAAA,CAAM,EAAA,EAAN,EACE,QAAA,EAAA;AAAA,cAAA,UAAA,oBAAcrC,cAAAA,CAACqC,YAAA,CAAM,EAAA,EAAN,EAAS,CAAA;AAAA,cACxB,SAAA,oBAAarC,cAAAA,CAACqC,YAAA,CAAM,IAAN,EAAS,CAAA;AAAA,cACvB,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZrC,cAAAA;AAAA,gBAACqC,YAAA,CAAM,EAAA;AAAA,gBAAN;AAAA,kBAEE,GAAG,KAAA,CAAM,YAAA,CAAa,MAAM,CAAA;AAAA,kBAC7B,EAAA,EAAI,GAAA;AAAA,kBACJ,CAAA,EAAE,QAAA;AAAA,kBAED,QAAA,EAAA,YAAA,CAAa,OAAO,GAAG;AAAA,iBAAA;AAAA,gBALnB,MAAA,CAAO;AAAA,eAOf,CAAA;AAAA,cACA,WAAA,oBAAerC,cAAAA,CAACqC,YAAA,CAAM,IAAN,EAAS;AAAA,aAAA,EAC5B,CAAA,EACF;AAAA;AAAA;AAAA;AAEJ;AAAA,GACF;AAEJ;AC3xBO,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,uBACEvC,eAAAA;AAAA,IAACe,YAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,KAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAQ,QAAA;AAAA,MACR,GAAA,EAAK,CAAA;AAAA,MACL,EAAA,EAAI,EAAA;AAAA,MACJ,EAAA,EAAI,EAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAb,cAAAA,CAACqB,WAAAA,EAAA,EAAK,CAAA,EAAE,QAAA,EAAS,aAAA,EAAW,IAAA,EACzB,QAAA,EAAA,IAAA,oBAAQrB,cAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,IAAI,CAAA,EAChC,CAAA;AAAA,wBACAA,eAACqB,WAAAA,EAAA,EAAK,IAAI,GAAA,EAAK,EAAA,EAAG,MACf,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC,WAAA,oBACCrB,cAAAA,CAACqB,WAAAA,EAAA,EAAK,CAAA,EAAE,QAAA,EAAS,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,QAAA,EAAS,GAAA,EAAK,KACvC,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,QAED;AAAA;AAAA;AAAA,GACH;AAEJ;AC1BO,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,uBACErB,cAAAA;AAAA,IAACuD,YAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAMvD,cAAAA,CAAC,SAAA,EAAA,EAAU,MAAM,EAAA,EAAI,CAAA;AAAA,MAC3B,KAAA,EAAM,KAAA;AAAA,MACN,OAAA,EAAQ,OAAA;AAAA,MACR,KAAA;AAAA,MAEA,QAAA,kBAAAF,eAAAA,CAACC,YAAAA,EAAA,EAAM,OAAA,EAAQ,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAS,IAAA,EAAK,QAAA,EAAS,GAAA,EAAI,IAAA,EAC9D,QAAA,EAAA;AAAA,wBAAAD,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAE,cAAAA,CAACqB,WAAAA,EAAA,EAAK,EAAA,EAAG,MAAM,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,0BACvBrB,cAAAA,CAACqB,WAAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,QAAA,EAAS,EAAA,EAAI,CAAA,EAC1B,QAAA,EAAA,KAAA,CAAM,OAAA,EACT;AAAA,SAAA,EACF,CAAA;AAAA,QACC,2BACCrB,cAAAA;AAAA,UAACsB,aAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAQ,OAAA;AAAA,YACR,KAAA,EAAM,KAAA;AAAA,YACN,WAAA,kBAAatB,cAAAA,CAAC,WAAA,EAAA,EAAY,MAAM,EAAA,EAAI,CAAA;AAAA,YACpC,OAAA,EAAS,OAAA;AAAA,YACT,OAAA,EAAS,UAAA;AAAA,YAER,QAAA,EAAA;AAAA;AAAA;AACH,OAAA,EAEJ;AAAA;AAAA,GACF;AAEJ;ACzCO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA,GAAM;AACR,CAAA,EAAgC;AAC9B,EAAA,uBACEA,cAAAA;AAAA,IAACwD,aAAA;AAAA,IAAA;AAAA,MACC,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAU,GAAA,KAAQ,KAAA,GAAQ,MAAA,GAAS,OAAA;AAAA,MACnC,IAAA,EAAM,GAAA;AAAA,MACN,OAAO,MAAA,CAAO,OAAA;AAAA,MACd,YAAA,EAAc,EAAE,OAAA,EAAS,GAAA,EAAK,MAAM,CAAA,EAAE;AAAA,MACtC,gBAAA,EAAkB,EAAE,YAAA,EAAc,MAAA,CAAO,MAAA,EAAO;AAAA,MAEhD,QAAA,kBAAA1D,gBAACe,YAAAA,EAAA,EAAM,KAAI,IAAA,EAAK,GAAA,EAAI,MAAA,EAAO,OAAA,EAAQ,eAAA,EACjC,QAAA,EAAA;AAAA,wBAAAb,cAAAA,CAACa,YAAAA,EAAA,EAAM,GAAA,EAAI,MAAM,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,wBACzBf,eAAAA,CAACC,YAAAA,EAAA,EAAM,OAAA,EAAQ,eAAA,EAAgB,IAAG,IAAA,EAChC,QAAA,EAAA;AAAA,0BAAAC,cAAAA;AAAA,YAACsB,aAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,QAAA;AAAA,cACR,OAAA,EAAS,cAAA;AAAA,cACT,UAAU,iBAAA,KAAsB,CAAA;AAAA,cAE/B,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,WACV;AAAA,0BACAtB,cAAAA,CAACsB,aAAAA,EAAA,EAAO,OAAA,EAAS,OAAA,EAAU,iBAAO,YAAA,EAAa;AAAA,SAAA,EACjD;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;ACFA,SAAS,YAAkB,MAAA,EAAiC;AAC1D,EAAA,OACE,MAAA,CAAO,gBACN,OAAO,MAAA,CAAO,WAAW,QAAA,GAAW,MAAA,CAAO,SAAS,MAAA,CAAO,GAAA,CAAA;AAEhE;AAGO,SAAS,WAAA,CAAkB;AAAA,EAChC,KAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB,CAAA;AAAA,EAChB,cAAA;AAAA,EACA,OAAA,GAAU,aAAA;AAAA,EACV,UAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAqC;AACnC,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,MAAA,EAAO,GAAI,KAAA;AACvC,EAAA,MAAM,UAAU,OAAA,KAAY,SAAA;AAC5B,EAAA,MAAM,WAAA,GAAc,UAAU,IAAA,GAAO,IAAA;AACrC,EAAA,MAAM,OAAA,GAAU,UAAU,CAAA,GAAI,IAAA;AAC9B,EAAA,MAAM,UACJ,UAAA,IACA,IAAA,CAAK,GAAA,CAAI,CAAC,KAAK,KAAA,MAAW;AAAA,IACxB,GAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA,EAAK,SAAS,GAAG;AAAA,GACnB,CAAE,CAAA;AAIJ,EAAA,MAAM,YAAA,GAAe,aAAa,IAAI,CAAA;AAEtC,EAAA,uBACExB,eAAAA;AAAA,IAACe,YAAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAU,IAAA,GAAO,IAAA;AAAA,MACtB,GAAA,EAAK,OAAA;AAAA,MACL,SAAA;AAAA,MACC,GAAG,KAAA,CAAM,aAAA,CAAc,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,MAEvC,QAAA,EAAA;AAAA,QAAA,UAAA,GAAa,CAAA,oBAAKb,cAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,MAAC,KAAA,EAAO,EAAE,MAAA,EAAQ,UAAA,EAAW,EAAG,CAAA;AAAA,QAClE,QAAQ,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,KAAA,EAAO,KAAI,KAAM;AACpC,UAAA,MAAM,EAAA,GAAK,SAAS,GAAG,CAAA;AACvB,UAAA,uBACEA,cAAAA;AAAA,YAACyD,WAAA;AAAA,YAAA;AAAA,cAEE,GAAGhB,kBAAAA,CAAc,GAAA,EAAK,UAAU,CAAA;AAAA,cACjC,SAAA,EAAW,YAAA,GAAe,GAAA,EAAK,KAAK,CAAA;AAAA,cACpC,GAAA,EAAK,cAAA;AAAA,cACL,YAAA,EAAY,KAAA;AAAA,cACZ,UAAA,EAAU,IAAA;AAAA,cACV,MAAA,EAAO,IAAA;AAAA,cACP,OAAA,EAAS,WAAA;AAAA,cACT,IAAA,EAAK,UAAA;AAAA,cACL,cAAA,EAAa,EAAA;AAAA,cAEb,QAAA,kBAAA3C,eAAAA,CAACe,YAAAA,EAAA,EAAM,KAAK,OAAA,EACT,QAAA,EAAA;AAAA,gBAAA,SAAA,oBACCb,cAAAA;AAAA,kBAACkB,eAAAA;AAAA,kBAAA;AAAA,oBACC,cAAY,MAAA,CAAO,SAAA;AAAA,oBACnB,OAAA,EAAS,SAAA,CAAU,UAAA,CAAW,EAAE,CAAA;AAAA,oBAChC,QAAA,EAAU,MAAM,SAAA,CAAU,MAAA,CAAO,EAAE;AAAA;AAAA,iBACrC;AAAA,gBAED,6BACClB,cAAAA,CAACD,cAAA,EAAM,OAAA,EAAQ,YACb,QAAA,kBAAAC,cAAAA;AAAA,kBAAC,YAAA;AAAA,kBAAA;AAAA,oBACC,QAAA,EAAU,SAAA,CAAU,UAAA,CAAW,EAAE,CAAA;AAAA,oBACjC,aAAa,MAAA,CAAO,SAAA;AAAA,oBACpB,eAAe,MAAA,CAAO,WAAA;AAAA,oBACtB,QAAA,EAAU,MAAM,SAAA,CAAU,MAAA,CAAO,EAAE;AAAA;AAAA,iBACrC,EACF,CAAA;AAAA,gBAED,QAAQ,GAAA,CAAI,CAAC,MAAA,qBACZF,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAAE,cAAAA,CAACqB,WAAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,QAAA,EAAS,EAAA,EAAG,WAAA,EAAY,EAAA,EAAI,GAAA,EACzC,QAAA,EAAA,WAAA,CAAY,MAAM,CAAA,EACrB,CAAA;AAAA,kCAGArB,eAACqB,WAAAA,EAAA,EAAK,WAAU,KAAA,EAAM,EAAA,EAAG,IAAA,EACtB,QAAA,EAAA,MAAA,CAAO,IAAA,mBACNrB,eAAC,MAAA,CAAO,IAAA,EAAP,EAAY,GAAA,EAAU,QAAA,EAAU,OAAO,CAAA,GAExC,MAAA,CAAO,QAAA,GAAW,GAAG,CAAA,EAEzB;AAAA,iBAAA,EAAA,EAZQ,MAAA,CAAO,GAajB,CACD,CAAA;AAAA,gBACA,SAAA,EAAW,UAAA,CAAW,EAAE,CAAA,KAAM,IAAA,oBAC7BA,cAAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,eAAA,CAAiB,GAAG,CAAA,EAAE,CAAA;AAAA,gBAE7B,cAAc,UAAA,CAAW,MAAA,GAAS,CAAA,oBACjCA,eAACD,YAAAA,EAAA,EAAM,GAAA,EAAK,CAAA,EAAG,SAAQ,UAAA,EAAW,EAAA,EAAI,GACnC,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAW;AAC1B,kBAAA,IAAI,MAAA,CAAO,QAAA,GAAW,GAAG,CAAA,EAAG,OAAO,IAAA;AACnC,kBAAA,MAAM,MAAA,GAASwB,0BAAAA;AAAA,oBACb,MAAA,CAAO,iBAAiB,GAAG;AAAA,mBAC7B;AACA,kBAAA,MAAM,WACJ,MAAA,KAAW,MAAA,KACV,MAAA,CAAO,UAAA,GAAa,GAAG,CAAA,IAAK,KAAA,CAAA;AAG/B,kBAAA,MAAM,GAAA,GAAM,WACR,MAAA,GACA,MAAMgB,kBAAa,MAAA,EAAQ,GAAA,EAAK,OAAA,EAAS,MAAA,CAAO,MAAM,CAAA;AAC1D,kBAAA,OAAO,MAAA,CAAO,uBACZvC,cAAAA;AAAA,oBAACwB,cAAAA;AAAA,oBAAA;AAAA,sBAEC,KAAA,EAAO,UAAU,MAAA,CAAO,KAAA;AAAA,sBACxB,SAAA,EAAS,IAAA;AAAA,sBACT,SAAA,EAAW,GAAA;AAAA,sBAEX,QAAA,kBAAAxB,cAAAA;AAAA,wBAACyB,iBAAAA;AAAA,wBAAA;AAAA,0BACC,OAAA,EAAQ,QAAA;AAAA,0BACR,OAAO,MAAA,CAAO,KAAA;AAAA,0BACd,IAAA,EAAK,IAAA;AAAA,0BACL,QAAA;AAAA,0BACA,cAAY,MAAA,CAAO,KAAA;AAAA,0BACnB,OAAA,EAAS,GAAA;AAAA,0BAER,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACV,qBAAA;AAAA,oBAdK,MAAA,CAAO;AAAA,sCAiBdzB,cAAAA;AAAA,oBAACsB,aAAAA;AAAA,oBAAA;AAAA,sBAEC,OAAA,EAAQ,QAAA;AAAA,sBACR,OAAO,MAAA,CAAO,KAAA;AAAA,sBACd,IAAA,EAAK,YAAA;AAAA,sBACL,QAAA;AAAA,sBACA,OAAA,EAAS,GAAA;AAAA,sBAER,QAAA,EAAA,MAAA,CAAO;AAAA,qBAAA;AAAA,oBAPH,MAAA,CAAO;AAAA,mBAQd;AAAA,gBAEJ,CAAC,CAAA,EACH;AAAA,eAAA,EAEJ;AAAA,aAAA;AAAA,YAhGK;AAAA,WAiGP;AAAA,QAEJ,CAAC,CAAA;AAAA,QACA,aAAA,GAAgB,CAAA,oBACftB,cAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,KAAA,EAAO,EAAE,MAAA,EAAQ,aAAA,EAAc,EAAG,CAAA;AAAA,QAEpD,YAAA,oBACCA,cAAAA,CAACyD,WAAA,EAAA,EAAK,YAAU,IAAA,EAAC,MAAA,EAAO,IAAA,EAAK,OAAA,EAAS,WAAA,EAAa,IAAA,EAAK,UAAA,EACtD,QAAA,kBAAAzD,eAACa,YAAAA,EAAA,EAAM,GAAA,EAAK,OAAA,EACT,QAAA,EAAA,OAAA,CACE,MAAA,CAAO,CAAC,MAAA,KAAW,aAAa,MAAA,CAAO,GAAG,CAAA,KAAM,MAAS,EACzD,GAAA,CAAI,CAAC,MAAA,qBACJf,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAE,cAAAA,CAACqB,WAAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,QAAA,EAAS,EAAA,EAAG,WAAA,EAAY,EAAA,EAAI,GAAA,EACzC,QAAA,EAAA,WAAA,CAAY,MAAM,CAAA,EACrB,CAAA;AAAA,0BACArB,cAAAA,CAACqB,WAAAA,EAAA,EAAK,SAAA,EAAU,KAAA,EAAM,EAAA,EAAG,IAAA,EAAK,EAAA,EAAI,GAAA,EAC/B,QAAA,EAAA,YAAA,CAAa,MAAA,CAAO,GAAG,CAAA,EAC1B;AAAA,SAAA,EAAA,EANQ,MAAA,CAAO,GAOjB,CACD,CAAA,EACL,CAAA,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ;AClNO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,IAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAoC;AAClC,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,CAAC,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,IAAA,EAAM,CAAC,GAAG,cAAc,CAAA;AAC3D,EAAA,MAAM,UAAUqC,oBAAA,CAAgB,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACjD,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,IACf,KAAA,EAAO,OAAO,CAAC;AAAA,GACjB,CAAE,CAAA;AAEF,EAAA,uBACE5D,eAAAA,CAACC,YAAAA,EAAA,EAAM,OAAA,EAAQ,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAS,IAAA,EAAK,MAAA,EAAO,GAAA,EAAI,IAAA,EAAK,IAAG,IAAA,EACpE,QAAA,EAAA;AAAA,oBAAAD,eAAAA,CAACC,cAAA,EAAM,GAAA,EAAI,MAAK,KAAA,EAAM,QAAA,EAAS,MAAK,QAAA,EAClC,QAAA,EAAA;AAAA,sBAAAC,cAAAA,CAACqB,aAAA,EAAK,EAAA,EAAG,MAAK,CAAA,EAAE,QAAA,EACb,iBAAO,WAAA,EACV,CAAA;AAAA,sBACArB,cAAAA;AAAA,QAACe,aAAAA;AAAA,QAAA;AAAA,UACC,cAAY,MAAA,CAAO,WAAA;AAAA,UACnB,IAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,UAEnB,UAAU,CAAC,CAAA,KAAM,aAAA,CAAc,MAAA,CAAO,CAAE,CAAC,CAAA;AAAA,UACzC,IAAA,EAAK,IAAA;AAAA,UACL,CAAA,EAAG,EAAA;AAAA,UACH,aAAA,EAAe,KAAA;AAAA,UACf,aAAA,EAAe,EAAE,YAAA,EAAc,KAAA;AAAM;AAAA,OACvC;AAAA,MACC,QAAQ,CAAA,oBACPf,eAACqB,WAAAA,EAAA,EAAK,IAAG,IAAA,EAAK,CAAA,EAAE,UACb,QAAA,EAAA,MAAA,CAAO,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,OAAA,EAAS,KAAA,EAAO,CAAA,EACzD;AAAA,KAAA,EAEJ,CAAA;AAAA,oBACAvB,gBAACC,YAAAA,EAAA,EAAM,KAAI,IAAA,EAAK,KAAA,EAAM,QAAA,EAAS,IAAA,EAAK,QAAA,EAClC,QAAA,EAAA;AAAA,sBAAAC,cAAAA,CAACqB,WAAAA,EAAA,EAAK,EAAA,EAAG,MAAK,CAAA,EAAE,QAAA,EACb,QAAA,EAAA,MAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,cAAA,EAAgB,CAAA,EAC1D,CAAA;AAAA,sBACArB,cAAAA;AAAA,QAAC2D,iBAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,cAAA;AAAA,UACP,KAAA,EAAO,QAAA;AAAA,UACP,QAAA,EAAU,YAAA;AAAA,UACV,IAAA,EAAK,IAAA;AAAA,UACL,QAAA,EAAU,CAAA;AAAA,UACV,UAAA,EAAY,CAAA;AAAA,UAGZ,eAAA,EAAiB,CAAC,OAAA,MAAa;AAAA,YAC7B,YAAA,EACE,OAAA,KAAY,UAAA,GAAa,MAAA,CAAO,eAAe,MAAA,CAAO;AAAA,WAC1D;AAAA;AAAA;AACF,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AClDO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA;AACF,CAAA,EAAkC;AAChC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIpD,eAAS,EAAE,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAG1B,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,IAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,EACZ,CAAA;AACA,EAAA,uBACET,gBAACiC,WAAAA,EAAA,EAAK,kBAAkB,KAAA,EAAO,QAAA,EAAS,YAAA,EAAa,YAAA,EAAY,IAAA,EAC/D,QAAA,EAAA;AAAA,oBAAA/B,cAAAA,CAAC+B,WAAAA,CAAK,MAAA,EAAL,EACC,0BAAA/B,cAAAA,CAACsB,aAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAC5B,QAAA,EAAA,MAAA,CAAO,YACV,CAAA,EACF,CAAA;AAAA,oBACAtB,cAAAA,CAAC+B,WAAAA,CAAK,QAAA,EAAL,EACC,QAAA,kBAAAjC,eAAAA,CAAC+B,UAAAA,EAAA,EAAI,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,GAAA,EACd,QAAA,EAAA;AAAA,sBAAA7B,eAACqB,WAAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,GAAE,QAAA,EAAS,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG,aAAY,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAC3D,iBAAO,UAAA,EACV,CAAA;AAAA,MACC,MAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBAChBvB,eAAAA,CAACC,YAAAA,EAAA,EAAsB,GAAA,EAAK,GAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,MAAK,QAAA,EAChD,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAACsB,aAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAK,YAAA;AAAA,YACL,OAAA,EAAQ,YAAA;AAAA,YACR,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,YACjB,OAAA,EAAS,MAAM,KAAA,CAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,YAEnC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,SACR;AAAA,wBACAtB,cAAAA;AAAA,UAACyB,iBAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,QAAA;AAAA,YACR,KAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAK,IAAA;AAAA,YACL,cAAY,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,EAAA,EAAK,KAAK,IAAI,CAAA,CAAA;AAAA,YAC9C,OAAA,EAAS,MAAM,KAAA,CAAM,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,YAErC,QAAA,kBAAAzB,cAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AACvB,OAAA,EAAA,EAlBU,IAAA,CAAK,IAmBjB,CACD,CAAA;AAAA,sBACDA,cAAAA,CAAC+B,WAAAA,CAAK,OAAA,EAAL,EAAa,CAAA;AAAA,sBACdjC,gBAACC,YAAAA,EAAA,EAAM,KAAK,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,IAAA,EAAK,QAAA,EACxB,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAACW,gBAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,YACjB,aAAa,MAAA,CAAO,QAAA;AAAA,YACpB,KAAA,EAAO,IAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAA,CAAE,cAAc,KAAK;AAAA;AAAA,SAChD;AAAA,wBACAX,cAAAA,CAACsB,aAAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,QAAA,EAAU,OAAA,KAAY,EAAA,EAAI,OAAA,EAAS,UAAA,EAClD,QAAA,EAAA,MAAA,CAAO,QAAA,EACV;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC/EO,SAAS,aAAA,CAAc;AAAA,EAC5B,OAAA;AAAA,EACA,IAAA,GAAO,CAAA;AAAA,EACP;AACF,CAAA,EAAiC;AAC/B,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAC,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,MAAM,CAAC,CAAA;AACxE,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAK,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AACxD,EAAA,uBACExB,gBAAC,KAAA,EAAA,EAAI,IAAA,EAAK,UAAS,WAAA,EAAU,MAAA,EAAO,aAAU,QAAA,EAC5C,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAACuC,cAAA,EACC,QAAA,EAAA;AAAA,sBAAArC,eAACqC,YAAAA,CAAM,KAAA,EAAN,EACC,QAAA,kBAAArC,cAAAA,CAACqC,aAAM,EAAA,EAAN,EACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZrC,eAACqC,YAAAA,CAAM,EAAA,EAAN,EACC,QAAA,kBAAArC,cAAAA;AAAA,QAAC4D,eAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,EAAA;AAAA,UACR,MAAA,EAAO,IAAA;AAAA,UACP,KAAA,EAAO,CAAA,KAAM,CAAA,GAAI,KAAA,GAAQ;AAAA;AAAA,OAC3B,EAAA,EALa,CAMf,CACD,CAAA,EACH,CAAA,EACF,CAAA;AAAA,sBACA5D,eAACqC,YAAAA,CAAM,KAAA,EAAN,EACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZrC,cAAAA,CAACqC,aAAM,EAAA,EAAN,EACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZrC,cAAAA,CAACqC,YAAAA,CAAM,EAAA,EAAN,EACC,QAAA,kBAAArC,cAAAA;AAAA,QAAC4D,eAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,EAAA;AAAA,UACR,MAAA,EAAO,IAAA;AAAA,UACP,KAAA,EAAO,CAAA,KAAM,CAAA,GAAI,KAAA,GAAQ;AAAA;AAAA,WAJd,CAMf,CACD,CAAA,EAAA,EATY,CAUf,CACD,CAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,IACC,+BAAe5D,cAAAA,CAACsD,qBAAAA,EAAA,EAAgB,wBAAa,CAAA,GAAoB;AAAA,GAAA,EACpE,CAAA;AAEJ;AC/BO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA,GAAM,KAAA;AAAA,EACN;AACF,CAAA,EAAiC;AAC/B,EAAA,uBACExD,eAAAA;AAAA,IAAC+D,cAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,OAAA;AAAA,MACX,QAAA,EAAU,GAAA,KAAQ,KAAA,GAAQ,cAAA,GAAiB,YAAA;AAAA,MAC3C,YAAA,EAAY,IAAA;AAAA,MACZ,MAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO,GAAA;AAAA,MAEP,QAAA,EAAA;AAAA,wBAAA7D,cAAAA,CAAC6D,cAAA,CAAQ,MAAA,EAAR,EAAgB,QAAA,EAAS,CAAA;AAAA,wBAC1B/D,eAAAA,CAAC+D,cAAA,CAAQ,QAAA,EAAR,EACC,QAAA,EAAA;AAAA,0BAAA/D,eAAAA,CAACC,cAAA,EAAM,OAAA,EAAQ,iBAAgB,KAAA,EAAM,QAAA,EAAS,IAAG,IAAA,EAC/C,QAAA,EAAA;AAAA,4BAAAC,cAAAA,CAACqB,aAAA,EAAK,EAAA,EAAI,KAAK,EAAA,EAAG,IAAA,EACf,iBAAO,OAAA,EACV,CAAA;AAAA,4BACArB,cAAAA;AAAA,cAACsB,aAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,QAAA;AAAA,gBACR,IAAA,EAAK,YAAA;AAAA,gBACL,OAAA,EAAS,cAAA;AAAA,gBACT,UAAU,iBAAA,KAAsB,CAAA;AAAA,gBAE/B,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACV,WAAA,EACF,CAAA;AAAA,0BACAtB,cAAAA,CAACa,YAAAA,EAAA,EAAM,GAAA,EAAI,MAAM,QAAA,EAAA,OAAA,EAAQ;AAAA,SAAA,EAC3B;AAAA;AAAA;AAAA,GACF;AAEJ;ACxCO,SAAS,OAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,2BAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAAiC;AAC/B,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,KAAA;AAC3B,EAAA,MAAM,cAAc,KAAA,CAAM,mBAAA;AAAA,IACxB,iBAAA,GAAoB,EAAE,WAAA,EAAa,iBAAA,EAAkB,GAAI;AAAA,GAC3D;AAGA,EAAA,MAAM,WAAA,GACJ,aAAA,KAAkB,KAAA,CAAM,QAAA,GAAW,MAAM,aAAA,GAAgB,MAAA,CAAA;AAE3D,EAAA,MAAM,gCACJb,cAAAA;AAAA,IAACsB,aAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,eAAA,EAAe,WAAA,KAAgB,SAAA,GAAY,WAAA,GAAc,MAAA;AAAA,MACzD,eAAa,WAAA,IAAe,MAAA;AAAA,MAC5B,WAAA,kBAAatB,cAAAA,CAAC,WAAA,EAAA,EAAY,MAAM,EAAA,EAAI,CAAA;AAAA,MACpC,YAAA,EACE,iBAAA,GAAoB,CAAA,mBAClBA,cAAAA,CAACsC,YAAAA,EAAA,EAAM,IAAA,EAAK,IAAA,EAAK,MAAA,EAAM,IAAA,EACpB,QAAA,EAAA,iBAAA,EACH,CAAA,GACE,MAAA;AAAA,MAEN,aAAA,EAAe,2BAAA;AAAA,MACf,OAAA,EAAS,eAAA;AAAA,MAER,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,GACV;AAGF,EAAA,uBACExC,eAAAA;AAAA,IAACC,YAAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAI,IAAA;AAAA,MACJ,OAAA,EAAQ,eAAA;AAAA,MACR,KAAA,EAAM,QAAA;AAAA,MACN,SAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,CAAC,8BACAC,cAAAA;AAAA,UAACW,gBAAAA;AAAA,UAAA;AAAA,YACE,GAAG,WAAA;AAAA,YACJ,WAAA,kBAAaX,cAAAA,CAAC,UAAA,EAAA,EAAW,MAAM,EAAA,EAAI,CAAA;AAAA,YACnC,IAAA,EAAK,IAAA;AAAA,YACL,OAAO,EAAE,IAAA,EAAM,GAAG,QAAA,EAAU,GAAA,EAAK,UAAU,GAAA;AAAI;AAAA,SACjD;AAAA,wBAEFF,eAAAA,CAACC,YAAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EAAK,OAAM,QAAA,EACnB,QAAA,EAAA;AAAA,UAAA,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,CAAA,oBACnCC,cAAAA;AAAA,YAACe,aAAAA;AAAA,YAAA;AAAA,cACC,cAAY,MAAA,CAAO,MAAA;AAAA,cACnB,aAAa,MAAA,CAAO,MAAA;AAAA,cACpB,IAAA,EAAM,WAAA;AAAA,cACN,KAAA,EAAO,OAAO,MAAA,IAAU,IAAA;AAAA,cACxB,QAAA,EAAU,CAAC,CAAA,KACT,MAAA,CAAO,QAAQ,CAAA,IAAK,MAAA,EAAW,MAAA,CAAO,OAAA,IAAW,KAAK,CAAA;AAAA,cAExD,SAAA,EAAS,IAAA;AAAA,cACT,IAAA,EAAK,IAAA;AAAA,cACL,CAAA,EAAG,GAAA;AAAA,cACH,aAAA,EAAe,EAAE,YAAA,EAAc,KAAA;AAAM;AAAA,WACvC;AAAA,UAED,aAAA;AAAA,UACA,UAAA,KACE,WAAA,KAAgB,SAAA,mBACff,cAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,WAAA;AAAA,cACN,OAAA,EAAS,cAAA;AAAA,cACT,OAAA;AAAA,cACA,iBAAA;AAAA,cACA,cAAA;AAAA,cACA,MAAA;AAAA,cACA,GAAA;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH,GAEA,aAAA,CAAA;AAAA,UAEH,UAAA;AAAA,UACA,eAAA,oBACCF,eAAAA,CAACC,YAAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EAAK,OAAM,QAAA,EACpB,QAAA,EAAA;AAAA,4BAAAC,cAAAA,CAACqB,aAAA,EAAK,EAAA,EAAG,MAAK,CAAA,EAAE,QAAA,EACb,iBAAO,WAAA,EACV,CAAA;AAAA,4BACArB,cAAAA;AAAA,cAACe,aAAAA;AAAA,cAAA;AAAA,gBACC,cAAY,MAAA,CAAO,WAAA;AAAA,gBACnB,MAAM2C,oBAAAA,CAAgB,MAAA,CAAO,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,kBAC9C,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,kBACf,KAAA,EAAO,OAAO,CAAC;AAAA,iBACjB,CAAE,CAAA;AAAA,gBACF,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAAA,gBAE1B,UAAU,CAAC,CAAA,KAAM,OAAO,QAAA,CAAS,MAAA,CAAO,CAAE,CAAC,CAAA;AAAA,gBAC3C,IAAA,EAAK,IAAA;AAAA,gBACL,CAAA,EAAG,EAAA;AAAA,gBACH,aAAA,EAAe,KAAA;AAAA,gBACf,aAAA,EAAe,EAAE,YAAA,EAAc,KAAA;AAAM;AAAA;AACvC,WAAA,EACF;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;ACjHA,IAAM,kBAAA,GAAqB,CAAC,GAAA,MAAiB;AAAA,EAC3C,QAAA,EAAU,QAAA;AAAA,EACV,GAAA;AAAA,EACA,MAAA,EAAQ,CAAA;AAAA,EACR,UAAA,EAAY,2BAAA;AAAA,EACZ,aAAA,EAAe;AACjB,CAAA,CAAA;AAGA,SAAS,cAAA,CAAqB;AAAA,EAC5B,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,uBAAO1D,cAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,KAAA,EAAO,CAAA;AAChC;AAMA,SAAS,cAAA,CAAe;AAAA,EACtB,OAAA;AAAA,EACA;AACF,CAAA,EAA+E;AAC7E,EAAA,MAAM,KAAA,GAAQ8D,mBAAc,OAAO,CAAA;AACnC,EAAA,uBAAO9D,cAAAA,CAAC,cAAA,EAAA,EAAe,KAAA,EAAc,MAAA,EAAgB,CAAA;AACvD;AASA,SAAS,sBAA4B,KAAA,EAAuC;AAC1E,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI+D,iBAAA,CAAmB;AAAA,IAC7C,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,OAAA,EAAS,KAAA,CAAM,OAAA,KAAY,KAAA,GAAQ,SAAY,KAAA,CAAM,UAAA;AAAA,IACrD,SAAS,KAAA,CAAM;AAAA,GAChB,CAAA;AAID,EAAA,MAAM,MAAA,GAASX,aAAAA,CAAQ,MAAMY,kBAAA,CAAc,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,KAAA,CAAM,MAAM,CAAC,CAAA;AAExE,EAAA,IAAI,OAAA;AAGJ,EAAA,IAAIC,0BAAqB,KAAA,CAAM,OAAO,CAAA,IAAK,KAAA,CAAM,YAAY,MAAA,EAAW;AACtE,IAAA,OAAA,GACE,OAAA,CAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,mBACpBjE,cAAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAgB,MAAA,EAAgB,CAAA,GAClE,MAAA;AAAA,EACR,CAAA,MAAO;AACL,IAAA,OAAA,GAAU,KAAA,CAAM,OAAA;AAAA,EAClB;AAEA,EAAA,MAAM,YAAA,GAAeoD,aAAAA;AAAA,IACnB,OAAO,EAAE,GAAG,QAAQ,YAAA,EAAc,GAAG,MAAM,YAAA,EAAa,CAAA;AAAA,IACxD,CAAC,OAAA,CAAQ,YAAA,EAAc,KAAA,CAAM,YAAY;AAAA,GAC3C;AAEA,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,SAAS,YAAA,EAAa;AACnD;AAWO,SAAS,UAAgB,KAAA,EAAuC;AACrE,EAAA,MAAM,WAAA,GAAc,sBAAsB,KAAK,CAAA;AAC/C,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA,GAAc,SAAA;AAAA,IACd,WAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA,EAAS,aAAA;AAAA,IACT,YAAA;AAAA,IACA,SAAA,GAAY,CAAA;AAAA,IACZ,OAAA,GAAU,KAAA;AAAA,IACV,YAAA,GAAe,KAAA;AAAA,IACf,gBAAA,GAAmB,KAAA;AAAA,IACnB;AAAA,GACF,GAAI,WAAA;AACJ,EAAA,MAAM,OAAA,GAAU,YAAY,OAAA,IAAW,aAAA;AAEvC,EAAA,MAAM,MAAA,GAASc,oBAAqB,WAAW,CAAA;AAC/C,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,UAAS,GAAI,MAAA;AAM/C,EAAA,MAAM,aAAA,GAAA,CAAiB,UAAA,EAAY,MAAA,IAAU,CAAA,IAAK,CAAA;AAClD,EAAA,MAAM,oBAAoB,MAAA,CAAO,YAAA,CAAa,QAAA,CAAStC,uBAAkB,IACrE,MAAA,GACA,UAAA;AACJ,EAAA,MAAM,gBACJ,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,MAAA,CAAOA,uBAAkB,CAAA,KAAM,OAAA;AAC3D,EAAA,MAAM,EAAE,gBAAgB,WAAA,EAAa,WAAA,EAAa,kBAAiB,GACjEuC,sBAAA,CAAkB,QAAQ,WAAW,CAAA;AACvC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI5D,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,cAAA,GAAiB6D,2BAAA,CAAuB,YAAA,EAAc,eAAe,CAAA;AAC3E,EAAA,MAAM,OAAA,GAAUlB,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,EAAE,GAAA,EAAK,UAAA,EAAY,MAAA,EAAQ,aAAA,KAAkBmB,oBAAA,EAAe;AAElE,EAAA,MAAM,cAAA,GAAiBnB,aAAgC,IAAI,CAAA;AAC3D,EAAA,MAAM,aAAA,GAAgBA,aAAuB,IAAI,CAAA;AACjD,EAAAoB,yBAAA,CAAqB,OAAA,EAAS,QAAQ,WAAW,CAAA;AAEjD,EAAA,eAAA;AAAA,IACE,WAAW,aAAA,GAAgB,cAAA;AAAA,IAC3B,CAAC,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAA;AAAA,IACrC,EAAE,SAAS,OAAA;AAAQ,GACrB;AAEA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,MAAA,CAAO,SAAS,UAAA,EAAY;AAC9B,IAAA,IAAA,GAAO,KAAA,EAAO,4BACZtE,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,IAAU,CAAA;AAAA,QACjC,IAAA,EAAM,gBAAgB,MAAA,CAAO,KAAA;AAAA,QAC7B,YAAA,EAAc,MAAM,MAAA,CAAO;AAAA;AAAA,KAC7B;AAAA,EAEJ,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,KAAS,OAAA,EAAS;AAGlC,IAAA,IAAA,GACE,KAAA,EAAO,KAAA,KACN,MAAA,CAAO,YAAA,KAAiB,8BACvBA,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,MAAM,MAAA,CAAO,SAAA;AAAA,QACpB,MAAA,kBACEA,cAAAA,CAACsB,aAAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,MAAA,CAAO,YAAA,EAC/C,QAAA,EAAA,KAAA,CAAM,OAAO,QAAA,EAChB;AAAA;AAAA,wBAIJtB,cAAAA,CAAC,cAAW,KAAA,EAAO,KAAA,CAAM,OAAO,MAAA,EAAQ,CAAA,CAAA;AAAA,EAE9C,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACnC,IAAA,IAAA,mBACEA,cAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,UAAA,EAAY,iBAAA;AAAA,QACZ,OAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,iBAAiB,KAAA,CAAM,eAAA;AAAA,QACvB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,SAAA,EAAW,OAAO,MAAA,EAAQ,SAAA;AAAA,QAC1B,OAAA,EAAS,aAAA;AAAA,QACT,WAAW,UAAA,EAAY,IAAA;AAAA,QACvB,UAAA,EAAY,cAAA,CAAe,OAAA,GAAU,cAAA,CAAe,IAAA,GAAO,MAAA;AAAA,QAC3D,YAAY,cAAA,CAAe,UAAA;AAAA,QAC3B,eAAe,cAAA,CAAe,aAAA;AAAA,QAC9B,gBAAgB,cAAA,CAAe,cAAA;AAAA,QAC/B;AAAA;AAAA,KACF;AAAA,EAEJ,CAAA,MAAO;AACL,IAAA,IAAA,mBACEA,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,UAAA,EAAY,iBAAA;AAAA,QACZ,OAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,iBAAiB,KAAA,CAAM,eAAA;AAAA,QACvB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,SAAA,EAAW,OAAO,MAAA,EAAQ,SAAA;AAAA,QAC1B,QAAA;AAAA,QACA,OAAA,EAAS,cAAA;AAAA,QACT,WAAW,UAAA,EAAY,KAAA;AAAA,QACvB,UAAA,EAAY,cAAA,CAAe,OAAA,GAAU,cAAA,CAAe,IAAA,GAAO,MAAA;AAAA,QAC3D,YAAY,cAAA,CAAe,UAAA;AAAA,QAC3B,eAAe,cAAA,CAAe,aAAA;AAAA,QAC9B,gBAAgB,cAAA,CAAe,cAAA;AAAA,QAC/B,oBAAoB,SAAA,GAAY,aAAA;AAAA,QAChC,YAAA;AAAA,QACA,SAAA,EAAW,OAAO,YAAA,CAAa,SAAA;AAAA,QAC/B,aAAA;AAAA,QACA,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,gBAAA;AAAA,QACA,QAAA,EACE,KAAA,CAAM,gBAAA,GAAmB,MAAA,CAAO,aAAa,QAAA,GAAW,MAAA;AAAA,QAE1D,YAAA,EAAc,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,MAAA;AAAA,QACxC,WAAA,EAAa,MAAM,MAAA,CAAO,YAAA;AAAA,QAC1B;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACEF,eAAAA;AAAA,IAACyE,YAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,CAAA,EAAE,IAAA;AAAA,MACF,MAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAU,IAAA;AAAA,MACV,GAAA;AAAA,MACA,WAAA,EAAW,OAAO,YAAA,IAAgB,MAAA;AAAA,MAClC,WAAW,UAAA,EAAY,IAAA;AAAA,MAEvB,QAAA,EAAA;AAAA,wBAAAzE,eAAAA,CAACe,YAAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EACT,QAAA,EAAA;AAAA,0BAAAb,cAAAA;AAAA,YAAC6B,UAAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,UAAA;AAAA,cACL,KAAA,EAAO,mBAAmB,SAAS,CAAA;AAAA,cACnC,WAAW,UAAA,EAAY,OAAA;AAAA,cAEvB,QAAA,kBAAA/B,eAAAA,CAACe,YAAAA,EAAA,EAAM,KAAI,IAAA,EACT,QAAA,EAAA;AAAA,gCAAAb,cAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,KAAA;AAAA,oBACA,UAAA;AAAA,oBACA,iBAAA;AAAA,oBACA,aAAA;AAAA,oBACA,aAAA;AAAA,oBACA,UAAA,EAAY,QAAQ,OAAO,CAAA;AAAA,oBAC3B,mBAAmB,MAAA,CAAO,iBAAA;AAAA,oBAC1B,WAAA;AAAA,oBACA,OAAA;AAAA,oBACA,WAAA,EAAa,YAAA;AAAA,oBACb,iBAAiB,cAAA,CAAe,OAAA;AAAA,oBAChC,6BAA6B,cAAA,CAAe,aAAA;AAAA,oBAC5C,cAAA,EAAgB,MAAM,eAAA,CAAgB,KAAK,CAAA;AAAA,oBAC3C,gBAAgB,MAAA,CAAO,YAAA;AAAA,oBACvB,GAAA;AAAA,oBACA,UAAA,kBACEF,eAAAA,CAAAc,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,sBAAA,UAAA,oBACCZ,cAAAA;AAAA,wBAAC,cAAA;AAAA,wBAAA;AAAA,0BAGC,OAAA,EAAS;AAAA,4BACP,SAAS,WAAA,CAAY,UAAA;AAAA,4BACrB,QAAQ,WAAA,CAAY,MAAA;AAAA,4BACpB,GAAG;AAAA,2BACL;AAAA,0BACA,QAAQ,KAAA,CAAM;AAAA;AAAA,uBAChB;AAAA,sCAEFA,cAAAA;AAAA,wBAAC,cAAA;AAAA,wBAAA;AAAA,0BACC,OAAA,EAAS,oBAAoB,CAAC,QAAA;AAAA,0BAC9B,YAAY,MAAA,CAAO,UAAA;AAAA,0BACnB,QAAQ,MAAA,CAAO,YAAA;AAAA,0BACf,QAAQ,KAAA,CAAM,MAAA;AAAA,0BACd;AAAA;AAAA;AACF,qBAAA,EACF,CAAA;AAAA,oBAEF,eAAA,EAAiB;AAAA;AAAA,iBACnB;AAAA,gCACAA,cAAAA;AAAA,kBAAC,iBAAA;AAAA,kBAAA;AAAA,oBACC,OAAO,MAAA,CAAO,WAAA;AAAA,oBACd,YAAY,MAAA,CAAO,YAAA;AAAA,oBACnB,KAAA,EAAO,MAAM,MAAA,CAAO,OAAA;AAAA,oBACpB,aAAA,EAAe,MAAM,MAAA,CAAO;AAAA;AAAA,iBAC9B;AAAA,gBACC,KAAA,CAAM,SAAA,IAAa,WAAA,oBAClBA,cAAAA;AAAA,kBAAC,aAAA;AAAA,kBAAA;AAAA,oBACC,WAAW,KAAA,CAAM,SAAA;AAAA,oBACjB,OAAO,MAAA,CAAO,KAAA;AAAA,oBACd,WAAA;AAAA,oBACA,OAAA;AAAA,oBACA,QAAQ,KAAA,CAAM;AAAA;AAAA;AAChB,eAAA,EAEJ;AAAA;AAAA,WACF;AAAA,UAEC,MAAA,CAAO,gCACNA,cAAAA;AAAA,YAACwE,eAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,QAAA,EAAQ,IAAA;AAAA,cACR,KAAA,EAAO,GAAA;AAAA,cACP,YAAA,EAAY,MAAM,MAAA,CAAO;AAAA;AAAA,WAC3B;AAAA,UAGD,MAAA,CAAO,yBACNxE,cAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,KAAA,EAAO,MAAM,MAAA,CAAO,UAAA;AAAA,cACpB,OAAA,EAAS,MAAM,MAAA,CAAO,YAAA;AAAA,cACtB,UAAA,EAAY,MAAM,MAAA,CAAO,KAAA;AAAA,cACzB,SAAS,MAAA,CAAO,OAAA,GAAU,MAAM,KAAK,MAAA,CAAO,WAAU,GAAI,MAAA;AAAA,cAC1D,YAAY,MAAA,CAAO;AAAA;AAAA,WACrB;AAAA,UAGD,CAAC,OAAO,KAAA,IAAS,IAAA;AAAA,UAEjB,WAAA,IAAe,MAAA,CAAO,WAAA,oBACrBA,cAAAA,CAACD,YAAAA,EAAA,EAAM,GAAA,EAAK,WAAA,EAAa,OAAA,EAAQ,QAAA,EAAS,EAAA,EAAG,MAC3C,QAAA,kBAAAC,cAAAA;AAAA,YAACsB,aAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,SAAS,MAAA,CAAO,kBAAA;AAAA,cAChB,OAAA,EAAS,MAAM,MAAA,CAAO,aAAA,EAAc;AAAA,cAEnC,gBAAM,MAAA,CAAO;AAAA;AAAA,WAChB,EACF,CAAA;AAAA,UAGD,MAAA,CAAO,8BACNtB,cAAAA,CAAC6B,YAAA,EAAI,SAAA,EAAW,UAAA,EAAY,MAAA,EAC1B,QAAA,kBAAA7B,cAAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,MAAM,UAAA,CAAW,QAAA;AAAA,cACvB,UAAA,EAAY,MAAM,UAAA,CAAW,UAAA;AAAA,cAC7B,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,SAAA,EAAW,MAAM,UAAA,CAAW,SAAA;AAAA,cAC5B,OAAA,EAAS,MAAM,UAAA,CAAW,OAAA;AAAA,cAC1B,cAAc,MAAA,CAAO,OAAA;AAAA,cACrB,eAAe,MAAA,CAAO,QAAA;AAAA,cACtB,QAAQ,KAAA,CAAM;AAAA;AAAA,WAChB,EACF;AAAA,SAAA,EAEJ,CAAA;AAAA,QAEC,OAAA,IAAW,WAAA,KAAgB,QAAA,oBAC1BA,cAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,YAAA;AAAA,YACR,OAAA,EAAS,MAAM,eAAA,CAAgB,KAAK,CAAA;AAAA,YACpC,OAAA;AAAA,YACA,mBAAmB,MAAA,CAAO,iBAAA;AAAA,YAC1B,gBAAgB,MAAA,CAAO,YAAA;AAAA,YACvB,QAAQ,KAAA,CAAM,MAAA;AAAA,YACd;AAAA;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ","file":"index.cjs","sourcesContent":["import { usePrefersReducedMotion } from \"@adapttable/core\";\nimport { type DependencyList, type RefObject, useEffect } from \"react\";\n\n/** Tuning for the mount stagger. */\nexport interface MountStaggerOptions {\n /** Master switch. When `false`, the hook is a no-op. */\n enabled: boolean;\n /** Per-item delay in ms. Defaults to 40. */\n step?: number;\n /** Tween duration in ms. Defaults to 320. */\n duration?: number;\n}\n\n/**\n * Dependency-free entrance stagger using the Web Animations API. Animates\n * descendants marked with `data-stagger` once on mount (and whenever\n * `deps` change), honoring `prefers-reduced-motion`. Works without GSAP;\n * GSAP fans can swap in their own hook of the same shape.\n *\n * @param ref - Ref to the container whose `[data-stagger]` items animate.\n * @param deps - Re-run the stagger when these change (e.g. the row set).\n * @param options - See {@link MountStaggerOptions}.\n */\nexport function useMountStagger(\n ref: RefObject<HTMLElement | null>,\n deps: DependencyList,\n options: MountStaggerOptions\n): void {\n const reduced = usePrefersReducedMotion();\n const { enabled, step = 40, duration = 320 } = options;\n // Collapse the caller's deps to a primitive key so the effect's dependency\n // array stays a literal (no spread) and `exhaustive-deps` can verify it.\n // Pass primitive deps (e.g. a row count), not large objects.\n const depsKey = deps.map(String).join(\"|\");\n\n useEffect(() => {\n if (!enabled || reduced) return;\n const root = ref.current;\n if (!root) return;\n const items = root.querySelectorAll<HTMLElement>(\"[data-stagger]\");\n items.forEach((el, index) => {\n if (typeof el.animate !== \"function\") return;\n el.animate(\n [\n { opacity: 0, transform: \"translateY(8px)\" },\n { opacity: 1, transform: \"translateY(0)\" },\n ],\n {\n duration,\n delay: index * step,\n easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n fill: \"both\",\n }\n );\n });\n }, [enabled, reduced, step, duration, ref, depsKey]);\n}\n","import type { ActiveFilterChip } from \"@adapttable/core\";\nimport { Anchor, Group, Pill } from \"@mantine/core\";\n\n/** Props for {@link ActiveFilterChips}. */\nexport interface ActiveFilterChipsProps {\n /** The chips to render. */\n chips: readonly ActiveFilterChip[];\n /** Optional clear-all handler; the link is hidden when omitted. */\n onClearAll?: () => void;\n /** Accessible label for the strip. */\n label: string;\n /** Clear-all link text. */\n clearAllLabel: string;\n}\n\n/** A wrapping strip of removable filter chips. Renders nothing when empty. */\nexport function ActiveFilterChips({\n chips,\n onClearAll,\n label,\n clearAllLabel,\n}: Readonly<ActiveFilterChipsProps>) {\n if (chips.length === 0) return null;\n return (\n <Group\n gap={6}\n aria-label={label}\n component=\"ul\"\n style={{ listStyle: \"none\", padding: 0, margin: 0 }}\n >\n {chips.map((chip) => (\n <Pill\n key={chip.key}\n component=\"li\"\n withRemoveButton\n onRemove={chip.onRemove}\n removeButtonProps={{\n \"aria-label\": `${clearAllLabel}: ${chip.label}`,\n }}\n >\n {chip.label}\n </Pill>\n ))}\n {onClearAll && (\n <Anchor\n component=\"button\"\n type=\"button\"\n fz=\"xs\"\n fw={600}\n onClick={onClearAll}\n >\n {clearAllLabel}\n </Anchor>\n )}\n </Group>\n );\n}\n","import {\n type FilterDef,\n filterLabel,\n type FilterValue,\n RANGE_OP_LABEL_KEYS,\n RANGE_OPS,\n RANGE_SUFFIXES,\n type RangeOp,\n readRangeWidget,\n type TableLabels,\n type TableSource,\n useFilterOptions,\n writeRangeWidget,\n} from \"@adapttable/core\";\nimport {\n Checkbox,\n Group,\n Input,\n Loader,\n NativeSelect,\n NumberInput,\n Select,\n Stack,\n TextInput,\n} from \"@mantine/core\";\nimport { type ReactNode, useState } from \"react\";\n\n/** Props for {@link AutoFilterForm}. */\nexport interface AutoFilterFormProps<TRow> {\n /** The resolved declarative definitions, in render order. */\n defs: readonly FilterDef<TRow>[];\n /** The resolved source whose `extra` bag the controls read and write. */\n source: TableSource<TRow>;\n /** Resolved labels — the range widgets read the operator/value strings. */\n labels: Required<TableLabels>;\n}\n\n/** A scalar filter value as input text (`\"\"` when unset). */\nconst asText = (value: FilterValue): string =>\n value == null ? \"\" : String(value);\n\n/** A multi-select value as an array, tolerating a scalar from the URL. */\nconst asList = (value: FilterValue): string[] => {\n if (value == null || value === \"\") return [];\n return Array.isArray(value) ? value : [String(value)];\n};\n\n/** The select's raw option value parsed back to a known operator. */\nconst asOp = (value: string | null): RangeOp | undefined =>\n RANGE_OPS.find((op) => op === value);\n\n/** Which operator label set each range type reads. */\nconst RANGE_FLAVOUR = { numberRange: \"number\", dateRange: \"date\" } as const;\n\n/**\n * The operator-first control shared by the `numberRange` / `dateRange`\n * types: pick a comparison (Equal / At least / …), then fill ONE value —\n * or From/To when \"Between\". The persisted state stays the inclusive\n * `Min`/`Max` (`From`/`To`) pair via {@link readRangeWidget} /\n * {@link writeRangeWidget}, so URLs, chips and predicates are unchanged.\n */\nfunction RangeField<TRow>({\n def,\n source,\n kind,\n labels,\n}: Readonly<{\n def: FilterDef<TRow>;\n source: TableSource<TRow>;\n kind: \"numberRange\" | \"dateRange\";\n labels: Required<TableLabels>;\n}>) {\n const label = filterLabel(def);\n const lowKey = def.key + RANGE_SUFFIXES[kind].start;\n const highKey = def.key + RANGE_SUFFIXES[kind].end;\n\n // The operator is UI state seeded from the persisted pair (URL state\n // mounts pre-selected); it wins over the derived value so a half-filled\n // \"Between\" keeps showing two inputs while only one bound is stored.\n const derived = readRangeWidget(source.extra, lowKey, highKey);\n const [chosen, setChosen] = useState<RangeOp | null>(null);\n const op = chosen ?? derived.op ?? null;\n\n const low = asText(source.extra[lowKey]);\n const high = asText(source.extra[highKey]);\n /** The one visible value outside \"Between\" (`lte` stores the upper bound). */\n const single = op === \"lte\" ? high : low;\n\n const write = (nextOp: RangeOp | undefined, a: string, b: string) =>\n source.setExtras(writeRangeWidget(nextOp, a, b, lowKey, highKey));\n\n const handleOp = (value: string | null) => {\n const next = asOp(value);\n setChosen(next ?? null);\n // Switching keeps the first value; clearing the select clears the pair.\n write(next, single, \"\");\n };\n\n const flavour = RANGE_FLAVOUR[kind];\n const opLabelKeys = RANGE_OP_LABEL_KEYS[flavour];\n const data = RANGE_OPS.map((value) => ({\n value,\n label: labels[opLabelKeys[value]],\n }));\n\n const valueInput = (\n text: string,\n value: string,\n commit: (next: string) => void\n ) =>\n flavour === \"number\" ? (\n <NumberInput\n size=\"sm\"\n hideControls\n style={{ flex: \"1 1 6rem\", minWidth: \"6rem\" }}\n aria-label={`${label} ${text}`}\n placeholder={text}\n value={value}\n onChange={(next) => commit(String(next))}\n />\n ) : (\n <TextInput\n type=\"date\"\n size=\"sm\"\n style={{ flex: \"1 1 8.5rem\", minWidth: \"8.5rem\" }}\n aria-label={`${label} ${text}`}\n placeholder={text}\n value={value}\n onChange={(e) => commit(e.currentTarget.value)}\n />\n );\n\n let values: ReactNode = null;\n if (op === \"between\") {\n values = (\n <>\n {valueInput(labels.from, low, (next) => write(\"between\", next, high))}\n {valueInput(labels.to, high, (next) => write(\"between\", low, next))}\n </>\n );\n } else if (op) {\n values = valueInput(labels.value, single, (next) => write(op, next, \"\"));\n }\n\n return (\n <Stack gap={4}>\n <Input.Label size=\"sm\">{label}</Input.Label>\n {/* Operator and value(s) share a row when they fit — \"At least [5]\" —\n and wrap when they don't (date inputs have a wide native minimum,\n so \"Between\" two dates takes a second row in narrow drawers). */}\n <Group gap=\"xs\" align=\"flex-start\">\n <Select\n size=\"sm\"\n clearable\n style={{ flex: \"0 0 8.5rem\", width: \"8.5rem\" }}\n aria-label={`${label} ${labels.operator}`}\n placeholder={labels.operator}\n data={data}\n value={op}\n onChange={handleOp}\n comboboxProps={{ withinPortal: false }}\n />\n {values}\n </Group>\n </Stack>\n );\n}\n\n/**\n * Single-choice control. Options resolve through {@link useFilterOptions}\n * (static array, async loader, or none); while a loader is in flight the\n * select shows one disabled placeholder option.\n */\nfunction SelectControl<TRow>({\n def,\n source,\n}: Readonly<{ def: FilterDef<TRow>; source: TableSource<TRow> }>) {\n const label = filterLabel(def);\n const { options, loading } = useFilterOptions(def);\n const data = loading\n ? [{ value: \"\", label: \"…\", disabled: true }]\n : [{ value: \"\", label: \"All\" }, ...options];\n return (\n <NativeSelect\n size=\"sm\"\n label={label}\n data={data}\n value={asText(source.extra[def.key])}\n onChange={(e) => source.setExtra(def.key, e.currentTarget.value)}\n />\n );\n}\n\n/**\n * Multi-choice control. Options resolve through {@link useFilterOptions};\n * while a loader is in flight the group shows a small spinner instead of\n * checkboxes.\n */\nfunction MultiSelectControl<TRow>({\n def,\n source,\n}: Readonly<{ def: FilterDef<TRow>; source: TableSource<TRow> }>) {\n const label = filterLabel(def);\n const { options, loading } = useFilterOptions(def);\n return (\n <Checkbox.Group\n label={label}\n value={asList(source.extra[def.key])}\n onChange={(values) => source.setExtra(def.key, values)}\n >\n <Group gap=\"sm\" mt={4}>\n {loading ? (\n <Loader size=\"xs\" />\n ) : (\n options.map((option) => (\n <Checkbox\n key={option.value}\n size=\"sm\"\n value={option.value}\n label={option.label}\n />\n ))\n )}\n </Group>\n </Checkbox.Group>\n );\n}\n\n/** One labeled, kit-native control for a single filter definition. */\nfunction FilterControl<TRow>({\n def,\n source,\n labels,\n}: Readonly<{\n def: FilterDef<TRow>;\n source: TableSource<TRow>;\n labels: Required<TableLabels>;\n}>) {\n switch (def.type) {\n case \"text\":\n return (\n <TextInput\n size=\"sm\"\n label={filterLabel(def)}\n placeholder={def.placeholder}\n value={asText(source.extra[def.key])}\n onChange={(e) => source.setExtra(def.key, e.currentTarget.value)}\n />\n );\n case \"select\":\n return <SelectControl def={def} source={source} />;\n case \"multiSelect\":\n return <MultiSelectControl def={def} source={source} />;\n case \"dateRange\":\n case \"numberRange\":\n return (\n <RangeField def={def} source={source} kind={def.type} labels={labels} />\n );\n }\n}\n\n/**\n * The auto-built filter form: one labeled, Mantine-native control per\n * declarative {@link FilterDef}. Values live in the source's `extra` bag\n * (so the URL, chips and — on frontend data — the predicate all follow);\n * clearing a control writes the empty value, which drops the URL param.\n * Range types render operator-first: an operator select plus one value\n * input (two for \"Between\"), persisted as the inclusive pair.\n *\n * @typeParam TRow - The row type.\n */\nexport function AutoFilterForm<TRow>({\n defs,\n source,\n labels,\n}: Readonly<AutoFilterFormProps<TRow>>) {\n return (\n <Stack gap=\"sm\">\n {defs.map((def) => (\n <FilterControl\n key={def.key}\n def={def}\n source={source}\n labels={labels}\n />\n ))}\n </Stack>\n );\n}\n","import {\n type BulkAction,\n type BulkBarChromeProps,\n resolveDisabledReason,\n type SelectionState,\n type TableLabels,\n useBulkActionRunner,\n} from \"@adapttable/core\";\nimport { Button, Group, Stack, Text, Tooltip } from \"@mantine/core\";\n\n/** Selection toolbar: count, clear, and the configured bulk-action buttons. */\nexport function BulkActionBar({\n selection,\n total,\n bulkActions,\n confirm,\n labels,\n}: Readonly<BulkBarChromeProps>) {\n const { selectedIds, selectedCount, clear, allMatching } = selection;\n const { pending, run } = useBulkActionRunner({\n confirm,\n cancelLabel: labels.cancel,\n onComplete: clear,\n });\n\n if (selectedCount === 0) return null;\n\n const ids = [...selectedIds];\n return (\n <Stack gap=\"xs\">\n <Group justify=\"space-between\" wrap=\"wrap\" gap=\"sm\">\n <Text fz=\"sm\">{labels.selectedCount(selectedCount)}</Text>\n <Group gap=\"xs\" wrap=\"wrap\">\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={clear}\n disabled={pending !== null}\n >\n {labels.clearAll}\n </Button>\n {bulkActions.map((action) => (\n <BulkButton\n key={action.key}\n action={action}\n ids={ids}\n pending={pending}\n onRun={(a) => {\n // Widened scope: the action receives the page ids plus the\n // all-matching context, so confirm counts size by `total`.\n if (allMatching) run(a, ids, { allMatching: true, total });\n else run(a, ids);\n }}\n />\n ))}\n </Group>\n </Group>\n <ScopeBanner selection={selection} total={total} labels={labels} />\n </Stack>\n );\n}\n\n/**\n * Gmail-style scope banner. When every row on the page is selected but more\n * rows match elsewhere, offer to widen the selection to all matching rows;\n * once widened, announce the scope and offer to clear it.\n */\nfunction ScopeBanner({\n selection,\n total,\n labels,\n}: Readonly<{\n selection: SelectionState;\n total: number;\n labels: Required<TableLabels>;\n}>) {\n if (selection.headerState !== \"all\" || total <= selection.visibleIds.length) {\n return null;\n }\n return (\n <Group role=\"status\" gap=\"xs\" wrap=\"wrap\">\n {selection.allMatching ? (\n <>\n <Text fz=\"sm\">{labels.allMatchingSelected(total)}</Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={selection.clear}>\n {labels.clearAll}\n </Button>\n </>\n ) : (\n <>\n <Text fz=\"sm\">{labels.pageSelected(selection.selectedCount)}</Text>\n <Button\n size=\"xs\"\n variant=\"light\"\n onClick={selection.selectAllMatching}\n >\n {labels.selectAllMatching(total)}\n </Button>\n </>\n )}\n </Group>\n );\n}\n\nfunction BulkButton({\n action,\n ids,\n pending,\n onRun,\n}: Readonly<{\n action: BulkAction;\n ids: string[];\n pending: string | null;\n onRun: (action: BulkAction) => void;\n}>) {\n const reason = resolveDisabledReason(action.disabledReason?.(ids));\n const ineligible = reason !== undefined;\n const button = (\n <Button\n size=\"xs\"\n color={action.color}\n leftSection={action.icon}\n onClick={() => onRun(action)}\n loading={pending === action.key}\n disabled={ineligible || (pending !== null && pending !== action.key)}\n >\n {action.label}\n </Button>\n );\n if (reason !== undefined) {\n return (\n <Tooltip label={reason} withArrow openDelay={150}>\n <div>{button}</div>\n </Tooltip>\n );\n }\n return button;\n}\n","import type {\n ColumnMenuChromeProps,\n ColumnMenuLabels,\n UseColumnLayoutResult,\n} from \"@adapttable/core\";\nimport {\n ACTIONS_COLUMN_KEY,\n columnMenuRows,\n columnReorderKeyProps,\n EyeIcon,\n GripIcon,\n nextPinSide,\n pinActionLabel,\n PinIcon,\n useColumnDragState,\n} from \"@adapttable/core\";\nimport { ActionIcon, Box, Button, Group, Menu, Text } from \"@mantine/core\";\n\n/**\n * Props for the column menu — the shared core contract, plus the injected\n * actions column: when the table has row actions, the menu lists it too\n * (named by `labels.actions`) with an eye toggle and a one-click end-pin.\n */\nexport interface ColumnMenuProps<TRow> extends ColumnMenuChromeProps<TRow> {\n /** Resolved labels — the shared menu set plus the actions-column name. */\n labels: ColumnMenuLabels & { actions: string };\n /** Whether the table has row actions (lists the injected actions column). */\n hasRowActions?: boolean;\n}\n\n/** The eye toggle + struck-through name shared by data and actions rows. */\nfunction RowVisibility({\n hidden,\n name,\n labels,\n onToggle,\n}: Readonly<{\n hidden: boolean;\n name: string;\n labels: Pick<ColumnMenuLabels, \"showColumn\" | \"hideColumn\">;\n onToggle: () => void;\n}>) {\n return (\n <>\n <ActionIcon\n variant={hidden ? \"subtle\" : \"light\"}\n color={hidden ? \"gray\" : \"blue\"}\n size=\"sm\"\n aria-label={`${hidden ? labels.showColumn : labels.hideColumn}: ${name}`}\n aria-pressed={!hidden}\n onClick={onToggle}\n >\n <EyeIcon off={hidden} />\n </ActionIcon>\n <Text\n size=\"sm\"\n style={{ flex: 1 }}\n c={hidden ? \"dimmed\" : undefined}\n td={hidden ? \"line-through\" : undefined}\n >\n {name}\n </Text>\n </>\n );\n}\n\n/** The pin control shared by data and actions rows. */\nfunction PinToggle({\n pinned,\n label,\n onClick,\n}: Readonly<{ pinned: boolean; label: string; onClick: () => void }>) {\n return (\n <ActionIcon\n variant={pinned ? \"filled\" : \"subtle\"}\n color={pinned ? \"blue\" : \"gray\"}\n size=\"sm\"\n aria-label={label}\n onClick={onClick}\n >\n <PinIcon />\n </ActionIcon>\n );\n}\n\n/**\n * The injected actions column's menu row: the same eye toggle as data\n * columns plus a pin toggle that flips right ↔ unpinned in one click. No\n * drag grip (the column always trails) and no left pin.\n */\nfunction ActionsRow<TRow>({\n layout,\n labels,\n}: Readonly<{\n layout: UseColumnLayoutResult<TRow>;\n labels: ColumnMenuProps<TRow>[\"labels\"];\n}>) {\n const hidden = layout.isHidden(ACTIONS_COLUMN_KEY);\n const pinned = layout.state.pinned[ACTIONS_COLUMN_KEY] === \"right\";\n return (\n <Group justify=\"flex-start\" wrap=\"nowrap\" gap={6} px={4} py={2}>\n {/* Spacer where data rows show the drag grip, keeping toggles aligned. */}\n <Box w={22} />\n <RowVisibility\n hidden={hidden}\n name={labels.actions}\n labels={labels}\n onToggle={() => layout.toggleVisible(ACTIONS_COLUMN_KEY)}\n />\n <PinToggle\n pinned={pinned}\n label={`${pinned ? labels.unpin : labels.pinRight}: ${labels.actions}`}\n onClick={() =>\n layout.setPinned(ACTIONS_COLUMN_KEY, pinned ? undefined : \"right\")\n }\n />\n </Group>\n );\n}\n\n/**\n * Column-management popover: per-column drag grip (reorder), eye (show/hide),\n * and pin toggle. Keyboard users focus a grip and use arrow keys.\n */\nexport function ColumnMenu<TRow>({\n allColumns,\n layout,\n labels,\n hasRowActions = false,\n}: Readonly<ColumnMenuProps<TRow>>) {\n const drag = useColumnDragState();\n return (\n <Menu closeOnItemClick={false} position=\"bottom-end\" withinPortal>\n <Menu.Target>\n <Button variant=\"default\" size=\"sm\">\n {labels.columns}\n </Button>\n </Menu.Target>\n <Menu.Dropdown>\n <Box p={4} miw={250}>\n <Text size=\"xs\" c=\"dimmed\" fw={600} tt=\"uppercase\" px={4} pb={6}>\n {labels.columns}\n </Text>\n {columnMenuRows(allColumns, layout).map((r) => {\n // Drop-position feedback: dim the dragged row, draw an\n // insertion line on the hovered target's landing edge.\n const indicator = drag.rowAttrs(r.key, r.index);\n const edge = indicator[\"data-drop\"];\n const edgeOffset = edge === \"before\" ? \"2px\" : \"-2px\";\n return (\n <Group\n key={r.key}\n justify=\"flex-start\"\n wrap=\"nowrap\"\n gap={6}\n px={4}\n py={2}\n style={{\n cursor: \"grab\",\n opacity: \"data-dragging\" in indicator ? 0.4 : undefined,\n boxShadow: edge\n ? `inset 0 ${edgeOffset} 0 0 var(--mantine-primary-color-filled)`\n : undefined,\n }}\n {...drag.rowDragProps(r.key, r.index)}\n {...drag.dropProps(r.index, layout.move)}\n {...indicator}\n >\n <ActionIcon\n variant=\"subtle\"\n color=\"gray\"\n size=\"sm\"\n style={{ cursor: \"grab\" }}\n {...columnReorderKeyProps(\n r.key,\n r.index,\n layout.move,\n `${labels.moveLeft} / ${labels.moveRight}: ${r.name}`\n )}\n >\n <GripIcon />\n </ActionIcon>\n <RowVisibility\n hidden={r.hidden}\n name={r.name}\n labels={labels}\n onToggle={() => layout.toggleVisible(r.key)}\n />\n <PinToggle\n pinned={r.pinned !== undefined}\n label={`${pinActionLabel(r.pinned, labels)}: ${r.name}`}\n onClick={() => layout.setPinned(r.key, nextPinSide(r.pinned))}\n />\n </Group>\n );\n })}\n {hasRowActions && (\n <>\n <Menu.Divider />\n <ActionsRow layout={layout} labels={labels} />\n </>\n )}\n <Menu.Divider />\n <Button\n variant=\"subtle\"\n size=\"xs\"\n fullWidth\n justify=\"flex-start\"\n onClick={() => layout.reset()}\n >\n {labels.resetColumns}\n </Button>\n </Box>\n </Menu.Dropdown>\n </Menu>\n );\n}\n","import type { MantineSpacing } from \"@mantine/core\";\n\n/** Row density — independent of column pinning. */\nexport type Density = \"comfortable\" | \"compact\";\n\n/** Mantine `<Table>` spacing props for a given density. */\nexport interface DensitySpacing {\n verticalSpacing: MantineSpacing;\n horizontalSpacing: MantineSpacing;\n}\n\n/**\n * Maps each {@link Density} to the Mantine `<Table>` spacing props.\n * `comfortable` keeps the original `sm`/`md` rhythm; `compact` tightens\n * rows with a 4px vertical gap and `sm` horizontal padding.\n */\nexport const DENSITY_SPACING: Record<Density, DensitySpacing> = {\n comfortable: { verticalSpacing: \"sm\", horizontalSpacing: \"md\" },\n compact: { verticalSpacing: 4, horizontalSpacing: \"sm\" },\n};\n","import type { CSSProperties, ReactNode } from \"react\";\n\ninterface IconProps {\n size?: number;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction Svg({\n size = 16,\n className,\n style,\n children,\n}: IconProps & { children: ReactNode }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n style={style}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {children}\n </svg>\n );\n}\n\n/** Magnifying-glass search icon. */\nexport const SearchIcon = (p: IconProps) => (\n <Svg {...p}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m21 21-4.3-4.3\" />\n </Svg>\n);\n\n/** Up chevron (active ascending sort). */\nexport const ChevronUpIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"m6 15 6-6 6 6\" />\n </Svg>\n);\n\n/** Down chevron (active descending sort). */\nexport const ChevronDownIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"m6 9 6 6 6-6\" />\n </Svg>\n);\n\n/** Right chevron (collapsed row-detail toggle; rotates 90° when expanded). */\nexport const ChevronRightIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"m9 6 6 6-6 6\" />\n </Svg>\n);\n\n/** Up/down selector (inactive sortable column). */\nexport const SelectorIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"m8 9 4-4 4 4M8 15l4 4 4-4\" />\n </Svg>\n);\n\n/** Small ✕ used on chips. */\nexport const CloseIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </Svg>\n);\n\n/** Sliders icon for the Filters button. */\nexport const FiltersIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M4 6h16M7 12h10M10 18h4\" />\n </Svg>\n);\n\n/** Triangle alert icon for the error state. */\nexport const AlertIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z\" />\n <path d=\"M12 9v4M12 17h.01\" />\n </Svg>\n);\n\n/** Refresh icon for retry. */\nexport const RefreshIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M21 12a9 9 0 1 1-3-6.7L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </Svg>\n);\n\n/** Inbox icon for the empty state. */\nexport const InboxIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M22 12h-6l-2 3h-4l-2-3H2\" />\n <path d=\"M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.5-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1Z\" />\n </Svg>\n);\n","import { ActionIcon } from \"@mantine/core\";\n\nimport { ChevronRightIcon } from \"../icons\";\n\n/** Props for {@link ExpandToggle}. */\nexport interface ExpandToggleProps {\n /** Whether the row's detail panel is currently open. */\n expanded: boolean;\n /** Accessible label while collapsed. */\n expandLabel: string;\n /** Accessible label while expanded. */\n collapseLabel: string;\n /** Toggle the detail panel. */\n onToggle: () => void;\n}\n\n/**\n * The chevron that toggles a row's detail panel — shared by the desktop\n * table's leading cell and the mobile card. It is a real button, so the\n * row-click interactive-child guard already keeps it from activating\n * `onRowClick`.\n */\nexport function ExpandToggle({\n expanded,\n expandLabel,\n collapseLabel,\n onToggle,\n}: Readonly<ExpandToggleProps>) {\n return (\n <ActionIcon\n variant=\"subtle\"\n color=\"gray\"\n size=\"sm\"\n aria-expanded={expanded}\n aria-label={expanded ? collapseLabel : expandLabel}\n onClick={onToggle}\n >\n <ChevronRightIcon\n size={14}\n style={{\n transform: expanded ? \"rotate(90deg)\" : \"rotate(0deg)\",\n transition: \"transform 150ms ease\",\n }}\n />\n </ActionIcon>\n );\n}\n","import {\n type ColumnDef,\n columnResizeHandleProps,\n type ConfirmHandler,\n edgePinStyle,\n headerGroupRow,\n PIN_Z,\n type PinLeads,\n pinnedCellStyle,\n pinnedColumnWidth,\n resolveDisabledReason,\n type RowAction,\n rowClickProps,\n runRowAction,\n type SharedTableRenderProps,\n tableMinWidth,\n tableRenderModel,\n type UseDataTableResult,\n useHorizontalOverflow,\n} from \"@adapttable/core\";\nimport {\n ActionIcon,\n Badge,\n Button,\n Checkbox,\n Group,\n Table,\n Tooltip,\n VisuallyHidden,\n} from \"@mantine/core\";\nimport type { CSSProperties, MouseEvent, ReactNode, RefObject } from \"react\";\nimport { memo, useCallback, useMemo, useRef } from \"react\";\n\nimport { type Density, DENSITY_SPACING } from \"../density\";\nimport { ExpandToggle } from \"./ExpandToggle\";\n\n/** Inline style for an absolutely-positioned column-resize handle. */\nconst RESIZE_HANDLE_STYLE: CSSProperties = {\n position: \"absolute\",\n insetInlineEnd: 0,\n top: 0,\n height: \"100%\",\n width: 8,\n cursor: \"col-resize\",\n touchAction: \"none\",\n userSelect: \"none\",\n};\n\nimport { ChevronDownIcon, ChevronUpIcon, SelectorIcon } from \"../icons\";\n\n/**\n * Props for {@link DesktopTable}: the shared render contract from core\n * (minus `stickyTop` — the resolved `stickyHeaderOffset` replaces it) plus\n * the Mantine-specific extras.\n */\nexport interface DesktopTableProps<TRow> extends Omit<\n SharedTableRenderProps<TRow>,\n \"stickyTop\"\n> {\n bodyRef: RefObject<HTMLTableSectionElement>;\n className?: string;\n /** Resolved sticky-header top inset (page `stickyTop` + toolbar height). */\n stickyHeaderOffset?: number;\n /** The injected actions column is pinned to the inline end on its own. */\n actionsPinned?: boolean;\n density?: Density;\n}\n\nfunction SortIcon({\n active,\n dir,\n}: Readonly<{\n active: boolean;\n dir: \"asc\" | \"desc\" | undefined;\n}>) {\n if (!active) return <SelectorIcon size={12} />;\n return dir === \"asc\" ? (\n <ChevronUpIcon size={12} />\n ) : (\n <ChevronDownIcon size={12} />\n );\n}\n\nfunction HeaderCell<TRow>({\n table,\n column,\n stickyStyle,\n resizeHandle,\n}: Readonly<{\n table: UseDataTableResult<TRow>;\n column: ColumnDef<TRow>;\n stickyStyle: CSSProperties;\n resizeHandle?: ReactNode;\n}>) {\n const cellProps = table.getHeaderCellProps(column);\n const headerStyle = {\n ...(cellProps.style as CSSProperties | undefined),\n ...stickyStyle,\n };\n if (!column.sortable) {\n return (\n <Table.Th {...cellProps} style={headerStyle}>\n {column.header}\n {resizeHandle}\n </Table.Th>\n );\n }\n // Core's onClick receives the click event as-is (no zero-arg wrapper), so\n // shift-clicks reach the multi-sort branch inside `getSortButtonProps`.\n const buttonProps = table.getSortButtonProps(column);\n // 1-based chain position from core (always > 0 when defined) — drives the\n // multi-sort badge; the chain level also wins the icon's active/dir state,\n // because chaining clears the single-sort `sortBy`.\n const sortIndex = buttonProps[\"data-sort-index\"];\n const level = table.source.sortLevels.find((l) => l.key === column.key);\n const active = level !== undefined || table.sortBy === column.key;\n return (\n <Table.Th {...cellProps} style={headerStyle}>\n <Group\n component=\"button\"\n gap={6}\n wrap=\"nowrap\"\n display=\"inline-flex\"\n style={{\n background: \"none\",\n border: 0,\n cursor: \"pointer\",\n font: \"inherit\",\n padding: 0,\n color: active ? \"var(--mantine-primary-color-filled)\" : \"inherit\",\n }}\n {...buttonProps}\n >\n <span>{column.header}</span>\n <SortIcon active={active} dir={level?.dir ?? table.sortDir} />\n {typeof sortIndex === \"number\" && (\n <Badge component=\"span\" size=\"xs\" variant=\"light\">\n {sortIndex}\n </Badge>\n )}\n </Group>\n {resizeHandle}\n </Table.Th>\n );\n}\n\nfunction RowActions<TRow>({\n row,\n actions,\n confirm,\n cancelLabel,\n}: Readonly<{\n row: TRow;\n actions: RowAction<TRow>[];\n confirm: ConfirmHandler;\n cancelLabel: string;\n}>) {\n return (\n <Group gap={4} justify=\"flex-end\" wrap=\"nowrap\">\n {actions.map((action) => {\n if (action.isHidden?.(row)) return null;\n const reason = resolveDisabledReason(action.disabledReason?.(row));\n const disabled =\n reason !== undefined || (action.isDisabled?.(row) ?? false);\n // The disabled attribute already blocks activation, so attach the\n // handler only when the action can run.\n const handleClick = disabled\n ? undefined\n : (e: MouseEvent) => {\n e.stopPropagation();\n runRowAction(action, row, confirm, cancelLabel);\n };\n // Icon-only actions render as an ActionIcon; without an icon, fall\n // back to a text button so the label is actually visible.\n return action.icon ? (\n <Tooltip\n key={action.key}\n label={reason ?? action.label}\n withArrow\n openDelay={200}\n >\n <ActionIcon\n variant=\"subtle\"\n color={action.color}\n size=\"sm\"\n disabled={disabled}\n aria-label={action.label}\n onClick={handleClick}\n >\n {action.icon}\n </ActionIcon>\n </Tooltip>\n ) : (\n <Button\n key={action.key}\n variant=\"subtle\"\n color={action.color}\n size=\"compact-sm\"\n disabled={disabled}\n onClick={handleClick}\n >\n {action.label}\n </Button>\n );\n })}\n </Group>\n );\n}\n\n/**\n * Props for the memoized {@link DesktopRowBase}. Everything the row's visual\n * output depends on is a primitive, a stable identity, or is fingerprinted\n * by `pinSignature` — so {@link desktopRowPropsEqual} can hold the row\n * across unrelated table re-renders (search keystrokes, other rows'\n * selection) without ever capturing a stale event handler.\n */\ninterface DesktopRowProps<TRow> {\n row: TRow;\n /** Absolute row index (virtual windows keep source indices). */\n index: number;\n /** Stable row id from `getRowId`. */\n id: string;\n columns: ColumnDef<TRow>[];\n /** Core's cell prop-getter — identity-stable for the table's lifetime. */\n getCellProps: UseDataTableResult<TRow>[\"getCellProps\"];\n /** Selected state; `undefined` when selection is off (no checkbox cell). */\n selected?: boolean;\n selectLabel: string;\n /** Identity-stable select toggle (latest-ref wrapped in the parent). */\n onToggleSelect: (id: string) => void;\n /** Expanded state; `undefined` when expansion is off (no chevron cell). */\n expanded?: boolean;\n expandLabel: string;\n collapseLabel: string;\n /** Core's expansion toggle — identity-stable. */\n onToggleExpand?: (id: string) => void;\n renderRowDetail?: (row: TRow) => ReactNode;\n /** Detail-cell span: expansion + selection + data + actions columns. */\n columnSpan: number;\n rowActions?: RowAction<TRow>[];\n confirm: ConfirmHandler;\n cancelLabel: string;\n onRowClick?: (row: TRow) => void;\n prefetch?: (row: TRow) => void;\n /** Resolved `rowClassName(row, index)` output. */\n className?: string;\n measureElement?: (element: Element | null) => void;\n /** Pinned-cell style for a data column (output covered by `pinSignature`). */\n pinStyleFor: (key: string) => CSSProperties | undefined;\n selectionCellStyle?: CSSProperties;\n expansionCellStyle?: CSSProperties;\n actionsCellStyle?: CSSProperties;\n /** Fingerprint of the pin layout, compared instead of the styles above. */\n pinSignature: string;\n}\n\n/**\n * The style-ish props the comparator deliberately skips: they are rebuilt\n * every parent render, and their visual output is exactly determined by\n * `pinSignature` (plus the compared inputs) — comparing their identities\n * would only defeat the memo.\n */\ntype UncomparedRowProp =\n | \"pinStyleFor\"\n | \"selectionCellStyle\"\n | \"expansionCellStyle\"\n | \"actionsCellStyle\";\n\n/** Every row prop the memo comparator checks with `Object.is`. */\nconst COMPARED_ROW_PROPS: readonly Exclude<\n keyof DesktopRowProps<unknown>,\n UncomparedRowProp\n>[] = [\n \"row\",\n \"index\",\n \"id\",\n \"columns\",\n \"getCellProps\",\n \"selected\",\n \"selectLabel\",\n \"onToggleSelect\",\n \"expanded\",\n \"expandLabel\",\n \"collapseLabel\",\n \"onToggleExpand\",\n \"renderRowDetail\",\n \"columnSpan\",\n \"rowActions\",\n \"confirm\",\n \"cancelLabel\",\n \"onRowClick\",\n \"prefetch\",\n \"className\",\n \"measureElement\",\n \"pinSignature\",\n];\n\n/**\n * Row memo comparator: `Object.is` over every prop except the per-render\n * style derivations excluded above. All event handlers passed to the row\n * are identity-stable (or compared here, so a changed handler re-renders\n * the row and is captured fresh) — a held row can never fire a stale\n * closure.\n */\nfunction desktopRowPropsEqual<TRow>(\n prev: Readonly<DesktopRowProps<TRow>>,\n next: Readonly<DesktopRowProps<TRow>>\n): boolean {\n return COMPARED_ROW_PROPS.every((key) => Object.is(prev[key], next[key]));\n}\n\n/**\n * Sticky style for a leading chrome cell (chevron / checkbox) pinned\n * `inset` px past the inline-start edge, active only while a data column is\n * pinned on that side. Body cells pass a `background` so scrolled data\n * never shows through.\n */\nfunction leadingPinStyle(\n active: boolean,\n inset: number,\n zIndex: number,\n background?: string\n): CSSProperties | undefined {\n if (!active) return undefined;\n const style = pinnedCellStyle({ side: \"left\", inset }, zIndex);\n return background ? { ...style, background } : style;\n}\n\n/**\n * Visual fingerprint of the pin layout (sides, insets, edge-pinned chrome\n * columns). Memoized rows compare this one string instead of the per-render\n * style objects derived from it.\n */\nfunction pinLayoutSignature<TRow>(\n columns: readonly ColumnDef<TRow>[],\n pinOffset: SharedTableRenderProps<TRow>[\"pinOffset\"],\n hasLeftPin: boolean,\n actionsEdgePinned: boolean\n): string {\n const perColumn = columns.map((column) => {\n const pin = pinOffset?.(column.key);\n return pin ? `${column.key}:${pin.side}${pin.inset}` : column.key;\n });\n return `${perColumn.join(\"|\")}|${String(hasLeftPin)}|${String(actionsEdgePinned)}`;\n}\n\n/**\n * One desktop row (plus its detail row when expanded), extracted so it can\n * be memoized: typing in the search box or toggling another row's checkbox\n * re-renders the table chrome but leaves untouched rows alone.\n */\nfunction DesktopRowBase<TRow>({\n row,\n index,\n id,\n columns,\n getCellProps,\n selected,\n selectLabel,\n onToggleSelect,\n expanded,\n expandLabel,\n collapseLabel,\n onToggleExpand,\n renderRowDetail,\n columnSpan,\n rowActions,\n confirm,\n cancelLabel,\n onRowClick,\n prefetch,\n className,\n measureElement,\n pinStyleFor,\n selectionCellStyle,\n expansionCellStyle,\n actionsCellStyle,\n}: Readonly<DesktopRowProps<TRow>>) {\n const showActions = (rowActions?.length ?? 0) > 0;\n return (\n <>\n <Table.Tr\n role=\"row\"\n data-index={index}\n aria-selected={selected}\n {...rowClickProps(row, onRowClick)}\n className={className}\n ref={measureElement}\n data-stagger=\"\"\n onMouseEnter={prefetch ? () => prefetch(row) : undefined}\n >\n {expanded !== undefined && (\n <Table.Td ta=\"center\" style={expansionCellStyle}>\n <ExpandToggle\n expanded={expanded}\n expandLabel={expandLabel}\n collapseLabel={collapseLabel}\n onToggle={() => onToggleExpand!(id)}\n />\n </Table.Td>\n )}\n {selected !== undefined && (\n <Table.Td ta=\"center\" style={selectionCellStyle}>\n <Checkbox\n aria-label={selectLabel}\n checked={selected}\n onChange={() => onToggleSelect(id)}\n />\n </Table.Td>\n )}\n {columns.map((column) => (\n <Table.Td\n key={column.key}\n {...getCellProps(column)}\n style={pinStyleFor(column.key)}\n >\n {column.Cell ? (\n <column.Cell row={row} rowIndex={index} />\n ) : (\n column.accessor?.(row)\n )}\n </Table.Td>\n ))}\n {showActions && (\n <Table.Td ta=\"end\" style={actionsCellStyle}>\n <RowActions\n row={row}\n actions={rowActions!}\n confirm={confirm}\n cancelLabel={cancelLabel}\n />\n </Table.Td>\n )}\n </Table.Tr>\n {expanded === true && (\n <Table.Tr>\n <Table.Td colSpan={columnSpan}>{renderRowDetail!(row)}</Table.Td>\n </Table.Tr>\n )}\n </>\n );\n}\n\n/** Desktop table rendering driven by core prop-getters. */\nexport function DesktopTable<TRow>({\n table,\n rows,\n rowActions,\n confirm,\n prefetch,\n onRowClick,\n rowClassName,\n renderRowDetail,\n summaryRow,\n expansion,\n getRowId,\n bodyRef,\n className,\n rowEntries,\n paddingTop = 0,\n paddingBottom = 0,\n measureElement,\n stickyHeaderOffset = 0,\n stickyHeader = false,\n pinOffset,\n maxHeight,\n virtualScrollRef,\n setWidth,\n columnWidths,\n resizeLabel = \"Resize column\",\n actionsPinned = false,\n density = \"comfortable\",\n}: Readonly<DesktopTableProps<TRow>>) {\n // The shared render prelude from core — including `columnSpan` for the\n // spacer/detail cells, which counts the expansion column itself when\n // `renderRowDetail` + `expansion` are wired.\n const { columns, selection, labels, showActions, entries, columnSpan } =\n tableRenderModel({\n table,\n rows,\n rowActions,\n getRowId,\n rowEntries,\n renderRowDetail,\n expansion,\n });\n // Expansion state only exists when `renderRowDetail` is set (the chrome\n // couples them), so its presence alone decides the leading chevron column.\n const expandable = expansion !== undefined;\n // Grouped header row over the VISIBLE columns (`null` → no extra row) and\n // the per-column footer summary cells (`undefined` → no footer).\n const groupCells = headerGroupRow(columns);\n const summaryCells = summaryRow?.(rows);\n const hasRightPin = table.columns.some(\n (c) => pinOffset?.(c.key)?.side === \"right\"\n );\n // The actions column sticks to the inline end either because a data column\n // is pinned right (it must stay outermost past it) or because the user\n // pinned the actions column itself — one click, no data column involved.\n const actionsEdgePinned = showActions && (hasRightPin || actionsPinned);\n const hasPinned =\n table.columns.some((c) => pinOffset?.(c.key) != null) || actionsEdgePinned;\n // Pinning needs horizontal scroll, and a `maxHeight` needs vertical scroll;\n // either makes the wrapper a scroll container (setting one overflow axis to\n // `auto` computes the other to `auto` too). Inside that container the page\n // toolbar is irrelevant, so the sticky header sticks to the box top (0).\n // Only against the document scroller must it clear the toolbar via\n // `stickyHeaderOffset`.\n // Without a `maxHeight`, the wrapper becomes a horizontal scroller only\n // when it must: pinned columns always need one, otherwise only while the\n // table is measurably wider than the wrapper (so wide tables scroll instead\n // of bleeding over the card border). When the table fits, the wrapper stays\n // a NON-scroll container — any `overflow` would trap the page-scroll sticky\n // header inside it.\n const { ref: wrapperRef, overflowing } =\n useHorizontalOverflow<HTMLDivElement>();\n const inScrollBox = maxHeight != null || hasPinned || overflowing;\n // `position: sticky` on `<thead>` does not engage against the document\n // scroller (only inside an overflow container) — so we stick the header\n // *cells* instead. Each th carries its own opaque background so scrolled\n // rows never show through.\n const headerCellStyle: CSSProperties = stickyHeader\n ? {\n position: \"sticky\",\n top: inScrollBox ? 0 : stickyHeaderOffset,\n zIndex: PIN_Z.header,\n background: \"var(--mantine-color-body)\",\n boxShadow: \"0 1px 0 var(--mantine-color-default-border)\",\n }\n : { background: \"var(--mantine-color-body)\" };\n\n // The leading chevron (36px) + checkbox (40px) and trailing actions\n // (120px) columns pin to the edge alongside the data columns, which\n // therefore start past them.\n const expansionWidth = 36;\n const selectionWidth = 40;\n const actionsWidth = 120;\n const expansionLead = expandable ? expansionWidth : 0;\n const leads: PinLeads = {\n left: expansionLead + (selection ? selectionWidth : 0),\n right: showActions ? actionsWidth : 0,\n };\n const hasLeftPin = table.columns.some(\n (c) => pinOffset?.(c.key)?.side === \"left\"\n );\n\n // Pinned cells stick to the left/right edge (corner-sticky in the header,\n // which also sticks to the top). They need an opaque background.\n const pinBg = \"var(--mantine-color-body)\";\n const headerStyleFor = (column: ColumnDef<TRow>): CSSProperties => {\n const key = column.key;\n const pin = pinnedCellStyle(pinOffset?.(key), PIN_Z.headerPinned, leads);\n const merged: CSSProperties = {\n ...headerCellStyle,\n ...pin,\n // A pinned column renders at the same width its sticky inset assumed,\n // so stacked pins stay flush even with no declared width.\n width: pin\n ? pinnedColumnWidth(column, columnWidths)\n : columnWidths?.[key],\n };\n if (setWidth && !merged.position) merged.position = \"relative\";\n return merged;\n };\n // The chevron / checkbox / actions cells become corner-sticky (top + edge\n // in the header, edge in the body) when a data column on their side is\n // pinned. The checkbox column sits AFTER the chevron column, so its edge\n // inset starts past the chevron's width.\n const expansionHeaderStyle: CSSProperties = {\n ...headerCellStyle,\n ...leadingPinStyle(hasLeftPin, 0, PIN_Z.headerPinned),\n };\n const selectionHeaderStyle: CSSProperties = {\n ...headerCellStyle,\n ...leadingPinStyle(hasLeftPin, expansionLead, PIN_Z.headerPinned),\n };\n const actionsHeaderStyle: CSSProperties = {\n ...headerCellStyle,\n ...edgePinStyle(\"right\", actionsEdgePinned, PIN_Z.headerPinned),\n };\n const edgeBodyStyle = (\n side: \"left\" | \"right\",\n active: boolean\n ): CSSProperties | undefined => {\n const pin = edgePinStyle(side, active, PIN_Z.body);\n return pin ? { ...pin, background: pinBg } : undefined;\n };\n const expansionCellStyle = leadingPinStyle(hasLeftPin, 0, PIN_Z.body, pinBg);\n const selectionCellStyle = leadingPinStyle(\n hasLeftPin,\n expansionLead,\n PIN_Z.body,\n pinBg\n );\n const actionsCellStyle = edgeBodyStyle(\"right\", actionsEdgePinned);\n const columnName = (column: ColumnDef<TRow>): string =>\n typeof column.header === \"string\" ? column.header : column.key;\n const resizeHandleFor = (column: ColumnDef<TRow>): ReactNode =>\n setWidth ? (\n <span\n {...columnResizeHandleProps(\n column.key,\n setWidth,\n `${resizeLabel}: ${columnName(column)}`\n )}\n style={RESIZE_HANDLE_STYLE}\n />\n ) : undefined;\n const bodyPinStyle = (key: string): CSSProperties | undefined => {\n const pin = pinnedCellStyle(pinOffset?.(key), PIN_Z.body, leads);\n return pin ? { ...pin, background: pinBg } : undefined;\n };\n\n const { verticalSpacing, horizontalSpacing } = DENSITY_SPACING[density];\n\n // Fixed-width columns get a real table min-width (their sum), so the table\n // overflows and scrolls horizontally instead of squishing columns to fit.\n const minWidth = tableMinWidth(columns, {\n widths: columnWidths,\n extra: expansionLead + (selection ? 40 : 0) + (showActions ? 120 : 0),\n });\n\n // Latest-ref select toggle: the controlled selection mode rebuilds\n // `selection.toggle` around the current ids on every change, so memoized\n // rows hold this FIXED identity that always dispatches to the live one.\n const selectionRef = useRef(selection);\n selectionRef.current = selection;\n const toggleSelect = useCallback(\n (id: string) => selectionRef.current!.toggle(id),\n []\n );\n\n // `memo` erases generics at module level, so the memoized row is\n // instantiated here (once — the identity is stable for the table's life).\n const Row = useMemo(\n () => memo(DesktopRowBase<TRow>, desktopRowPropsEqual),\n []\n );\n\n const pinSignature = pinLayoutSignature(\n columns,\n pinOffset,\n hasLeftPin,\n actionsEdgePinned\n );\n const wrapperStyle: CSSProperties =\n maxHeight == null\n ? {\n width: \"100%\",\n ...(hasPinned || overflowing ? { overflowX: \"auto\" } : {}),\n }\n : { width: \"100%\", maxHeight, overflow: \"auto\" };\n\n return (\n <div\n ref={(node) => {\n wrapperRef(node);\n virtualScrollRef?.(node);\n }}\n style={wrapperStyle}\n >\n <Table\n {...table.getTableProps()}\n className={className}\n highlightOnHover\n verticalSpacing={verticalSpacing}\n horizontalSpacing={horizontalSpacing}\n miw={Math.max(480, minWidth)}\n // Chromium cannot stick a <th> inside a border-collapsed table, so\n // the sticky header opts into separate borders — visually identical\n // here because row separators are cell border-bottoms either way.\n style={\n stickyHeader\n ? { borderCollapse: \"separate\", borderSpacing: 0 }\n : undefined\n }\n >\n <Table.Thead style={{ background: \"var(--mantine-color-body)\" }}>\n {groupCells && (\n <Table.Tr>\n {expandable && <Table.Th />}\n {selection && <Table.Th />}\n {groupCells.map((cell) => (\n <Table.Th\n key={cell.key}\n colSpan={cell.span}\n ta=\"center\"\n fw={600}\n style={{\n borderBottom:\n \"1px solid var(--mantine-color-default-border)\",\n }}\n >\n {cell.label}\n </Table.Th>\n ))}\n {showActions && <Table.Th />}\n </Table.Tr>\n )}\n <Table.Tr {...table.getHeaderRowProps()}>\n {expandable && (\n <Table.Th\n w={expansionWidth}\n ta=\"center\"\n style={expansionHeaderStyle}\n >\n <VisuallyHidden>{labels.expandRow}</VisuallyHidden>\n </Table.Th>\n )}\n {selection && (\n <Table.Th\n w={selectionWidth}\n ta=\"center\"\n style={selectionHeaderStyle}\n >\n <Checkbox\n aria-label={labels.selectAll}\n checked={selection.headerState === \"all\"}\n indeterminate={selection.headerState === \"some\"}\n onChange={selection.toggleAll}\n />\n </Table.Th>\n )}\n {columns.map((column) => (\n <HeaderCell\n key={column.key}\n table={table}\n column={column}\n stickyStyle={headerStyleFor(column)}\n resizeHandle={resizeHandleFor(column)}\n />\n ))}\n {showActions && (\n <Table.Th ta=\"end\" w={actionsWidth} style={actionsHeaderStyle}>\n {labels.actions}\n </Table.Th>\n )}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody ref={bodyRef}>\n {paddingTop > 0 && (\n <Table.Tr aria-hidden>\n <Table.Td\n colSpan={columnSpan}\n style={{ height: paddingTop, padding: 0 }}\n />\n </Table.Tr>\n )}\n {entries.map(({ row, index, key }) => {\n const id = getRowId(row);\n return (\n <Row\n key={key}\n row={row}\n index={index}\n id={id}\n columns={columns}\n getCellProps={table.getCellProps}\n selected={selection?.isSelected(id)}\n selectLabel={labels.selectRow}\n onToggleSelect={toggleSelect}\n expanded={expansion?.isExpanded(id)}\n expandLabel={labels.expandRow}\n collapseLabel={labels.collapseRow}\n onToggleExpand={expansion?.toggle}\n renderRowDetail={renderRowDetail}\n columnSpan={columnSpan}\n rowActions={rowActions}\n confirm={confirm}\n cancelLabel={labels.cancel}\n onRowClick={onRowClick}\n prefetch={prefetch}\n className={rowClassName?.(row, index)}\n measureElement={measureElement}\n pinStyleFor={bodyPinStyle}\n selectionCellStyle={selectionCellStyle}\n expansionCellStyle={expansionCellStyle}\n actionsCellStyle={actionsCellStyle}\n pinSignature={pinSignature}\n />\n );\n })}\n {paddingBottom > 0 && (\n <Table.Tr aria-hidden>\n <Table.Td\n colSpan={columnSpan}\n style={{ height: paddingBottom, padding: 0 }}\n />\n </Table.Tr>\n )}\n </Table.Tbody>\n {summaryCells && (\n <Table.Tfoot>\n <Table.Tr>\n {expandable && <Table.Td />}\n {selection && <Table.Td />}\n {columns.map((column) => (\n <Table.Td\n key={column.key}\n {...table.getCellProps(column)}\n fw={600}\n c=\"dimmed\"\n >\n {summaryCells[column.key]}\n </Table.Td>\n ))}\n {showActions && <Table.Td />}\n </Table.Tr>\n </Table.Tfoot>\n )}\n </Table>\n </div>\n );\n}\n","import { Stack, Text } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\n\nimport { InboxIcon } from \"../icons\";\n\n/** Props for {@link EmptyState}. */\nexport interface EmptyStateProps {\n /** Headline text. */\n title: string;\n /** Optional supporting description. */\n description?: string;\n /** Optional custom icon (defaults to an inbox glyph). */\n icon?: ReactNode;\n /** Optional call-to-action (e.g. a clear-filters button). */\n action?: ReactNode;\n}\n\n/** Centred \"nothing to show\" placeholder. */\nexport function EmptyState({\n title,\n description,\n icon,\n action,\n}: Readonly<EmptyStateProps>) {\n return (\n <Stack\n role=\"status\"\n align=\"center\"\n justify=\"center\"\n gap={6}\n py={48}\n px={16}\n >\n <Text c=\"dimmed\" aria-hidden>\n {icon ?? <InboxIcon size={40} />}\n </Text>\n <Text fw={600} fz=\"md\">\n {title}\n </Text>\n {description && (\n <Text c=\"dimmed\" fz=\"sm\" ta=\"center\" maw={360}>\n {description}\n </Text>\n )}\n {action}\n </Stack>\n );\n}\n","import { Alert, Button, Group, Text } from \"@mantine/core\";\n\nimport { AlertIcon, RefreshIcon } from \"../icons\";\n\n/** Props for {@link ErrorState}. */\nexport interface ErrorStateProps {\n /** The error to surface. */\n error: Error;\n /** Title line. */\n title: string;\n /** Supporting message. */\n message: string;\n /** Retry button label. */\n retryLabel: string;\n /** Optional retry handler; the button is hidden when omitted. */\n onRetry?: () => void;\n /** Whether a retry is in flight. */\n isRetrying?: boolean;\n}\n\n/** Inline error alert with an optional retry button. */\nexport function ErrorState({\n error,\n title,\n message,\n retryLabel,\n onRetry,\n isRetrying,\n}: Readonly<ErrorStateProps>) {\n return (\n <Alert\n icon={<AlertIcon size={16} />}\n color=\"red\"\n variant=\"light\"\n title={title}\n >\n <Group justify=\"space-between\" align=\"center\" wrap=\"nowrap\" gap=\"md\">\n <div>\n <Text fz=\"sm\">{message}</Text>\n <Text fz=\"xs\" c=\"dimmed\" mt={2}>\n {error.message}\n </Text>\n </div>\n {onRetry && (\n <Button\n size=\"xs\"\n variant=\"light\"\n color=\"red\"\n leftSection={<RefreshIcon size={14} />}\n onClick={onRetry}\n loading={isRetrying}\n >\n {retryLabel}\n </Button>\n )}\n </Group>\n </Alert>\n );\n}\n","import type { Direction, TableLabels } from \"@adapttable/core\";\nimport { Button, Drawer, Group, Stack } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\n\n/** Props for {@link FilterDrawer}. */\nexport interface FilterDrawerProps {\n opened: boolean;\n onClose: () => void;\n filters: ReactNode;\n activeFilterCount: number;\n /** Clear-filters handler (always supplied by the table chrome). */\n onClearFilters: () => void;\n labels: Required<TableLabels>;\n dir?: Direction;\n}\n\n/** Right-side drawer holding the caller's filter widgets + apply/clear. */\nexport function FilterDrawer({\n opened,\n onClose,\n filters,\n activeFilterCount,\n onClearFilters,\n labels,\n dir = \"ltr\",\n}: Readonly<FilterDrawerProps>) {\n return (\n <Drawer\n opened={opened}\n onClose={onClose}\n position={dir === \"rtl\" ? \"left\" : \"right\"}\n size={380}\n title={labels.filters}\n overlayProps={{ opacity: 0.4, blur: 2 }}\n closeButtonProps={{ \"aria-label\": labels.cancel }}\n >\n <Stack gap=\"md\" mih=\"60vh\" justify=\"space-between\">\n <Stack gap=\"md\">{filters}</Stack>\n <Group justify=\"space-between\" pt=\"md\">\n <Button\n variant=\"subtle\"\n onClick={onClearFilters}\n disabled={activeFilterCount === 0}\n >\n {labels.clearAll}\n </Button>\n <Button onClick={onClose}>{labels.applyFilters}</Button>\n </Group>\n </Stack>\n </Drawer>\n );\n}\n","import {\n type ColumnDef,\n resolveDisabledReason,\n rowClickProps,\n runRowAction,\n type SharedTableRenderProps,\n} from \"@adapttable/core\";\nimport {\n ActionIcon,\n Button,\n Card,\n Checkbox,\n Group,\n Stack,\n Text,\n Tooltip,\n} from \"@mantine/core\";\nimport type { RefObject } from \"react\";\n\nimport type { Density } from \"../density\";\nimport { ExpandToggle } from \"./ExpandToggle\";\n\n/**\n * Props for {@link MobileCards}: the card-relevant slice of core's shared\n * render contract (no header/pinning/resize concerns on mobile) plus the\n * Mantine-specific extras.\n */\nexport interface MobileCardsProps<TRow> extends Pick<\n SharedTableRenderProps<TRow>,\n | \"table\"\n | \"rows\"\n | \"rowActions\"\n | \"confirm\"\n | \"getRowId\"\n | \"onRowClick\"\n | \"rowClassName\"\n | \"renderRowDetail\"\n | \"summaryRow\"\n | \"expansion\"\n | \"rowEntries\"\n | \"paddingTop\"\n | \"paddingBottom\"\n | \"measureElement\"\n> {\n bodyRef: RefObject<HTMLDivElement>;\n className?: string;\n density?: Density;\n}\n\nfunction mobileLabel<TRow>(column: ColumnDef<TRow>): string {\n return (\n column.mobileLabel ??\n (typeof column.header === \"string\" ? column.header : column.key)\n );\n}\n\n/** Mobile rendering: one Mantine Card per row with labelled key/value rows. */\nexport function MobileCards<TRow>({\n table,\n rows,\n rowActions,\n confirm,\n getRowId,\n bodyRef,\n className,\n rowEntries,\n paddingTop = 0,\n paddingBottom = 0,\n measureElement,\n density = \"comfortable\",\n onRowClick,\n rowClassName,\n renderRowDetail,\n summaryRow,\n expansion,\n}: Readonly<MobileCardsProps<TRow>>) {\n const { columns, selection, labels } = table;\n const compact = density === \"compact\";\n const cardPadding = compact ? \"sm\" : \"md\";\n const cardGap = compact ? 4 : \"xs\";\n const entries =\n rowEntries ??\n rows.map((row, index) => ({\n row,\n index,\n key: getRowId(row),\n }));\n // Header groups and multi-sort are desktop-only: cards have no column axis\n // to span a group label across or to chain a sort on, so neither renders\n // here. The footer summary still applies — it closes the list as one card.\n const summaryCells = summaryRow?.(rows);\n\n return (\n <Stack\n gap={compact ? \"xs\" : \"sm\"}\n ref={bodyRef}\n className={className}\n {...table.getTableProps({ role: \"list\" })}\n >\n {paddingTop > 0 && <div aria-hidden style={{ height: paddingTop }} />}\n {entries.map(({ row, index, key }) => {\n const id = getRowId(row);\n return (\n <Card\n key={key}\n {...rowClickProps(row, onRowClick)}\n className={rowClassName?.(row, index)}\n ref={measureElement}\n data-index={index}\n withBorder\n radius=\"md\"\n padding={cardPadding}\n role=\"listitem\"\n data-stagger=\"\"\n >\n <Stack gap={cardGap}>\n {selection && (\n <Checkbox\n aria-label={labels.selectRow}\n checked={selection.isSelected(id)}\n onChange={() => selection.toggle(id)}\n />\n )}\n {expansion && (\n <Group justify=\"flex-end\">\n <ExpandToggle\n expanded={expansion.isExpanded(id)}\n expandLabel={labels.expandRow}\n collapseLabel={labels.collapseRow}\n onToggle={() => expansion.toggle(id)}\n />\n </Group>\n )}\n {columns.map((column) => (\n <div key={column.key}>\n <Text fz=\"xs\" c=\"dimmed\" tt=\"uppercase\" fw={500}>\n {mobileLabel(column)}\n </Text>\n {/* Cells are arbitrary ReactNode (often block elements) —\n a <p> wrapper would be invalid HTML. */}\n <Text component=\"div\" fz=\"sm\">\n {column.Cell ? (\n <column.Cell row={row} rowIndex={index} />\n ) : (\n column.accessor?.(row)\n )}\n </Text>\n </div>\n ))}\n {expansion?.isExpanded(id) === true && (\n <div>{renderRowDetail!(row)}</div>\n )}\n {rowActions && rowActions.length > 0 && (\n <Group gap={4} justify=\"flex-end\" pt={4}>\n {rowActions.map((action) => {\n if (action.isHidden?.(row)) return null;\n const reason = resolveDisabledReason(\n action.disabledReason?.(row)\n );\n const disabled =\n reason !== undefined ||\n (action.isDisabled?.(row) ?? false);\n // The disabled attribute already blocks activation, so\n // attach the handler only when the action can run.\n const run = disabled\n ? undefined\n : () => runRowAction(action, row, confirm, labels.cancel);\n return action.icon ? (\n <Tooltip\n key={action.key}\n label={reason ?? action.label}\n withArrow\n openDelay={200}\n >\n <ActionIcon\n variant=\"subtle\"\n color={action.color}\n size=\"sm\"\n disabled={disabled}\n aria-label={action.label}\n onClick={run}\n >\n {action.icon}\n </ActionIcon>\n </Tooltip>\n ) : (\n <Button\n key={action.key}\n variant=\"subtle\"\n color={action.color}\n size=\"compact-sm\"\n disabled={disabled}\n onClick={run}\n >\n {action.label}\n </Button>\n );\n })}\n </Group>\n )}\n </Stack>\n </Card>\n );\n })}\n {paddingBottom > 0 && (\n <div aria-hidden style={{ height: paddingBottom }} />\n )}\n {summaryCells && (\n <Card withBorder radius=\"md\" padding={cardPadding} role=\"listitem\">\n <Stack gap={cardGap}>\n {columns\n .filter((column) => summaryCells[column.key] !== undefined)\n .map((column) => (\n <div key={column.key}>\n <Text fz=\"xs\" c=\"dimmed\" tt=\"uppercase\" fw={500}>\n {mobileLabel(column)}\n </Text>\n <Text component=\"div\" fz=\"sm\" fw={600}>\n {summaryCells[column.key]}\n </Text>\n </div>\n ))}\n </Stack>\n </Card>\n )}\n </Stack>\n );\n}\n","import { pageSizeOptions, type TableLabels } from \"@adapttable/core\";\nimport { Group, Pagination, Select, Text } from \"@mantine/core\";\n\n/** Props for {@link PaginationFooter}. */\nexport interface PaginationFooterProps {\n page: number;\n totalPages: number;\n limit: number;\n total: number;\n fromIndex: number;\n toIndex: number;\n onPageChange: (page: number) => void;\n onLimitChange: (limit: number) => void;\n labels: Required<TableLabels>;\n}\n\n/** Desktop pagination bar: page-size + range on the left, pager on the right. */\nexport function PaginationFooter({\n page,\n totalPages,\n limit,\n total,\n fromIndex,\n toIndex,\n onPageChange,\n onLimitChange,\n labels,\n}: Readonly<PaginationFooterProps>) {\n const safeTotalPages = Math.max(totalPages, 1);\n const safePage = Math.min(Math.max(page, 1), safeTotalPages);\n const options = pageSizeOptions(limit).map((n) => ({\n value: String(n),\n label: String(n),\n }));\n\n return (\n <Group justify=\"space-between\" align=\"center\" wrap=\"wrap\" gap=\"md\" pt=\"xs\">\n <Group gap=\"xs\" align=\"center\" wrap=\"nowrap\">\n <Text fz=\"xs\" c=\"dimmed\">\n {labels.rowsPerPage}\n </Text>\n <Select\n aria-label={labels.rowsPerPage}\n data={options}\n value={String(limit)}\n // `allowDeselect={false}` keeps the value non-null.\n onChange={(v) => onLimitChange(Number(v!))}\n size=\"xs\"\n w={76}\n allowDeselect={false}\n comboboxProps={{ withinPortal: false }}\n />\n {total > 0 && (\n <Text fz=\"xs\" c=\"dimmed\">\n {labels.showing({ from: fromIndex, to: toIndex, total })}\n </Text>\n )}\n </Group>\n <Group gap=\"sm\" align=\"center\" wrap=\"nowrap\">\n <Text fz=\"xs\" c=\"dimmed\">\n {labels.pageOf({ page: safePage, total: safeTotalPages })}\n </Text>\n <Pagination\n total={safeTotalPages}\n value={safePage}\n onChange={onPageChange}\n size=\"sm\"\n siblings={1}\n boundaries={1}\n // Only previous/next control buttons render (boundaries keep\n // first/last away), so a total ternary labels them both.\n getControlProps={(control) => ({\n \"aria-label\":\n control === \"previous\" ? labels.previousPage : labels.nextPage,\n })}\n />\n </Group>\n </Group>\n );\n}\n","import type { TableLabels, UseSavedViewsResult } from \"@adapttable/core\";\nimport {\n ActionIcon,\n Box,\n Button,\n Group,\n Menu,\n Text,\n TextInput,\n} from \"@mantine/core\";\nimport { useState } from \"react\";\n\nimport { CloseIcon } from \"../icons\";\n\n/** Props for {@link SavedViewsMenu}. */\nexport interface SavedViewsMenuProps {\n /** The saved-views state from core's `useSavedViews`. */\n views: UseSavedViewsResult;\n /** Resolved table labels (e.g. `table.labels` from `useDataTable`). */\n labels: Required<TableLabels>;\n}\n\n/**\n * Saved-views menu: lists every captured view (click a name to apply it, the\n * trailing ✕ to delete it) above a save row that captures the table's\n * CURRENT URL state under the typed name. Pairs with core's `useSavedViews`\n * and composes into the `toolbar` slot — or let `<DataTable savedViews>`\n * mount it for you next to the Columns menu.\n */\nexport function SavedViewsMenu({\n views,\n labels,\n}: Readonly<SavedViewsMenuProps>) {\n const [name, setName] = useState(\"\");\n const trimmed = name.trim();\n // Saving clears the input but keeps the menu open, so several views can\n // be captured in one sitting.\n const handleSave = () => {\n views.save(trimmed);\n setName(\"\");\n };\n return (\n <Menu closeOnItemClick={false} position=\"bottom-end\" withinPortal>\n <Menu.Target>\n <Button variant=\"default\" size=\"sm\">\n {labels.savedViews}\n </Button>\n </Menu.Target>\n <Menu.Dropdown>\n <Box p={4} miw={220}>\n <Text size=\"xs\" c=\"dimmed\" fw={600} tt=\"uppercase\" px={4} pb={6}>\n {labels.savedViews}\n </Text>\n {views.views.map((view) => (\n <Group key={view.name} gap={6} px={4} py={2} wrap=\"nowrap\">\n <Button\n variant=\"subtle\"\n size=\"compact-sm\"\n justify=\"flex-start\"\n style={{ flex: 1 }}\n onClick={() => views.apply(view.name)}\n >\n {view.name}\n </Button>\n <ActionIcon\n variant=\"subtle\"\n color=\"gray\"\n size=\"sm\"\n aria-label={`${labels.deleteView}: ${view.name}`}\n onClick={() => views.remove(view.name)}\n >\n <CloseIcon size={12} />\n </ActionIcon>\n </Group>\n ))}\n <Menu.Divider />\n <Group gap={6} p={4} wrap=\"nowrap\">\n <TextInput\n size=\"xs\"\n style={{ flex: 1 }}\n placeholder={labels.viewName}\n value={name}\n onChange={(e) => setName(e.currentTarget.value)}\n />\n <Button size=\"xs\" disabled={trimmed === \"\"} onClick={handleSave}>\n {labels.saveView}\n </Button>\n </Group>\n </Box>\n </Menu.Dropdown>\n </Menu>\n );\n}\n","import { Skeleton, Table, VisuallyHidden } from \"@mantine/core\";\n\n/** Props for {@link TableSkeleton}. */\nexport interface TableSkeletonProps {\n /** Number of placeholder columns. */\n columns: number;\n /** Number of placeholder rows. Defaults to 5. */\n rows?: number;\n /** Screen-reader text announcing the loading state. */\n loadingLabel?: string;\n}\n\n/** Loading placeholder that mirrors the table shape to avoid layout shift. */\nexport function TableSkeleton({\n columns,\n rows = 5,\n loadingLabel,\n}: Readonly<TableSkeletonProps>) {\n const colKeys = Array.from({ length: Math.max(columns, 1) }, (_, i) => i);\n const rowKeys = Array.from({ length: rows }, (_, i) => i);\n return (\n <div role=\"status\" aria-busy=\"true\" aria-live=\"polite\">\n <Table>\n <Table.Thead>\n <Table.Tr>\n {colKeys.map((c) => (\n <Table.Th key={c}>\n <Skeleton\n height={12}\n radius=\"sm\"\n width={c === 0 ? \"55%\" : \"40%\"}\n />\n </Table.Th>\n ))}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody>\n {rowKeys.map((r) => (\n <Table.Tr key={r}>\n {colKeys.map((c) => (\n <Table.Td key={c}>\n <Skeleton\n height={14}\n radius=\"sm\"\n width={c === 0 ? \"70%\" : \"55%\"}\n />\n </Table.Td>\n ))}\n </Table.Tr>\n ))}\n </Table.Tbody>\n </Table>\n {loadingLabel ? <VisuallyHidden>{loadingLabel}</VisuallyHidden> : null}\n </div>\n );\n}\n","import type { Direction, TableLabels } from \"@adapttable/core\";\nimport { Button, Group, Popover, Stack, Text } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\n\n/** Props for {@link FilterPopover}. */\nexport interface FilterPopoverProps {\n open: boolean;\n onClose: () => void;\n filters: ReactNode;\n activeFilterCount: number;\n /** Clear-filters handler (always supplied by the table chrome). */\n onClearFilters: () => void;\n labels: Required<TableLabels>;\n dir?: Direction;\n /** The Filters trigger button — becomes the popover anchor. */\n children: ReactNode;\n}\n\n/**\n * Anchored filter card (the default filter container). Opens under the Filters\n * button and tracks it on scroll. No backdrop — the background stays visible\n * and interactive; clicking outside or pressing Escape closes it. Pair with\n * `filtersMode=\"drawer\"` for the slide-in panel instead.\n */\nexport function FilterPopover({\n open,\n onClose,\n filters,\n activeFilterCount,\n onClearFilters,\n labels,\n dir = \"ltr\",\n children,\n}: Readonly<FilterPopoverProps>) {\n return (\n <Popover\n opened={open}\n onDismiss={onClose}\n position={dir === \"rtl\" ? \"bottom-start\" : \"bottom-end\"}\n withinPortal\n shadow=\"md\"\n radius=\"md\"\n width={340}\n >\n <Popover.Target>{children}</Popover.Target>\n <Popover.Dropdown>\n <Group justify=\"space-between\" align=\"center\" mb=\"sm\">\n <Text fw={600} fz=\"sm\">\n {labels.filters}\n </Text>\n <Button\n variant=\"subtle\"\n size=\"compact-xs\"\n onClick={onClearFilters}\n disabled={activeFilterCount === 0}\n >\n {labels.clearAll}\n </Button>\n </Group>\n <Stack gap=\"md\">{filters}</Stack>\n </Popover.Dropdown>\n </Popover>\n );\n}\n","import { pageSizeOptions, type ToolbarChromeProps } from \"@adapttable/core\";\nimport { Badge, Button, Group, Select, Text, TextInput } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\n\nimport { FiltersIcon, SearchIcon } from \"../icons\";\nimport { FilterPopover } from \"./FilterPopover\";\n\n/**\n * Props for {@link Toolbar}: the shared chrome surface from core plus the\n * Mantine-specific filter-container wiring.\n */\nexport interface ToolbarProps<TRow> extends ToolbarChromeProps<TRow> {\n /** Close the filter container. */\n onCloseFilters: () => void;\n /** Filter content + how to render its container. */\n filtersMode: \"popover\" | \"drawer\";\n filters?: ReactNode;\n /** Clear-filters handler used by the popover's clear-all button. */\n onClearFilters: () => void;\n className?: string;\n}\n\n/** Sticky toolbar: search, optional sort select, custom slot, filters, size. */\nexport function Toolbar<TRow>({\n table,\n hideSearch,\n searchPlaceholder,\n sortByOptions,\n customToolbar,\n hasFilters,\n activeFilterCount,\n onToggleFilters,\n onFiltersTriggerPointerDown,\n onCloseFilters,\n filtersOpen,\n filtersMode,\n filters,\n onClearFilters,\n dir,\n columnMenu,\n showRowsPerPage,\n className,\n}: Readonly<ToolbarProps<TRow>>) {\n const { labels, source } = table;\n const searchProps = table.getSearchInputProps(\n searchPlaceholder ? { placeholder: searchPlaceholder } : undefined\n );\n // Explicit options win; otherwise auto-derive on mobile, where the card\n // layout has no clickable headers to sort by.\n const sortOptions =\n sortByOptions ?? (table.isMobile ? table.sortByOptions : undefined);\n\n const filtersButton = (\n <Button\n variant=\"default\"\n size=\"sm\"\n aria-expanded={filtersMode === \"popover\" ? filtersOpen : undefined}\n data-active={filtersOpen || undefined}\n leftSection={<FiltersIcon size={16} />}\n rightSection={\n activeFilterCount > 0 ? (\n <Badge size=\"sm\" circle>\n {activeFilterCount}\n </Badge>\n ) : undefined\n }\n onPointerDown={onFiltersTriggerPointerDown}\n onClick={onToggleFilters}\n >\n {labels.filters}\n </Button>\n );\n\n return (\n <Group\n gap=\"sm\"\n justify=\"space-between\"\n align=\"center\"\n className={className}\n >\n {!hideSearch && (\n <TextInput\n {...searchProps}\n leftSection={<SearchIcon size={14} />}\n size=\"sm\"\n style={{ flex: 1, minWidth: 160, maxWidth: 360 }}\n />\n )}\n <Group gap=\"xs\" align=\"center\">\n {sortOptions && sortOptions.length > 0 && (\n <Select\n aria-label={labels.sortBy}\n placeholder={labels.sortBy}\n data={sortOptions}\n value={source.sortBy ?? null}\n onChange={(v) =>\n source.setSort(v ?? undefined, source.sortDir ?? \"asc\")\n }\n clearable\n size=\"sm\"\n w={160}\n comboboxProps={{ withinPortal: false }}\n />\n )}\n {customToolbar}\n {hasFilters &&\n (filtersMode === \"popover\" ? (\n <FilterPopover\n open={filtersOpen}\n onClose={onCloseFilters}\n filters={filters}\n activeFilterCount={activeFilterCount}\n onClearFilters={onClearFilters}\n labels={labels}\n dir={dir}\n >\n {filtersButton}\n </FilterPopover>\n ) : (\n filtersButton\n ))}\n {columnMenu}\n {showRowsPerPage && (\n <Group gap=\"xs\" align=\"center\">\n <Text fz=\"xs\" c=\"dimmed\">\n {labels.rowsPerPage}\n </Text>\n <Select\n aria-label={labels.rowsPerPage}\n data={pageSizeOptions(source.limit).map((n) => ({\n value: String(n),\n label: String(n),\n }))}\n value={String(source.limit)}\n // `allowDeselect={false}` keeps the value non-null.\n onChange={(v) => source.setLimit(Number(v!))}\n size=\"sm\"\n w={80}\n allowDeselect={false}\n comboboxProps={{ withinPortal: false }}\n />\n </Group>\n )}\n </Group>\n </Group>\n );\n}\n","import {\n ACTIONS_COLUMN_KEY,\n isDeclarativeFilters,\n resolveLabels,\n type TableLabels,\n useChromeBodyData,\n useChromeScrollReset,\n useFilterTriggerToggle,\n useSavedViews,\n type UseSavedViewsOptions,\n useTableChrome,\n useTableData,\n} from \"@adapttable/core\";\nimport { Box, Button, Group, Paper, Progress, Stack } from \"@mantine/core\";\nimport { useElementSize } from \"@mantine/hooks\";\nimport { type ReactNode, useMemo, useRef, useState } from \"react\";\n\nimport { useMountStagger } from \"./animation/useMountStagger\";\nimport { ActiveFilterChips } from \"./components/ActiveFilterChips\";\nimport { AutoFilterForm } from \"./components/AutoFilterForm\";\nimport { BulkActionBar } from \"./components/BulkActionBar\";\nimport { ColumnMenu, type ColumnMenuProps } from \"./components/ColumnMenu\";\nimport { DesktopTable } from \"./components/DesktopTable\";\nimport { EmptyState } from \"./components/EmptyState\";\nimport { ErrorState } from \"./components/ErrorState\";\nimport { FilterDrawer } from \"./components/FilterDrawer\";\nimport { MobileCards } from \"./components/MobileCards\";\nimport { PaginationFooter } from \"./components/PaginationFooter\";\nimport { SavedViewsMenu } from \"./components/SavedViewsMenu\";\nimport { TableSkeleton } from \"./components/TableSkeleton\";\nimport { Toolbar } from \"./components/Toolbar\";\nimport type { DataTableProps } from \"./types\";\n\nconst stickyToolbarStyle = (top: number) => ({\n position: \"sticky\" as const,\n top,\n zIndex: 3,\n background: \"var(--mantine-color-body)\",\n paddingBottom: \"var(--mantine-spacing-xs)\",\n});\n\n/** The Columns menu, rendered inline in the toolbar — or nothing when off. */\nfunction ColumnMenuSlot<TRow>({\n enabled,\n ...props\n}: Readonly<{ enabled: boolean } & ColumnMenuProps<TRow>>) {\n if (!enabled) return null;\n return <ColumnMenu {...props} />;\n}\n\n/**\n * The Saved-views menu in the toolbar. A component (not inline JSX) so\n * `useSavedViews` only runs when the `savedViews` prop is set.\n */\nfunction SavedViewsSlot({\n options,\n labels,\n}: Readonly<{ options: UseSavedViewsOptions; labels: Required<TableLabels> }>) {\n const views = useSavedViews(options);\n return <SavedViewsMenu views={views} labels={labels} />;\n}\n\n/**\n * Resolve the data tier (source ▸ server ▸ frontend) and the declarative\n * filter runtime into the full chrome prop set: the RESOLVED source, the\n * filters node (auto-built form for the declarative array, JSX as-is) and\n * the chip-label resolvers (derived under the caller's — the user wins\n * per key). Everything downstream consumes these.\n */\nfunction useResolvedTableProps<TRow>(props: Readonly<DataTableProps<TRow>>) {\n const { source, runtime } = useTableData<TRow>({\n locale: props.locale,\n source: props.source,\n data: props.data,\n total: props.total,\n loading: props.loading,\n onQueryChange: props.onQueryChange,\n columns: props.columns,\n filters: props.filters,\n urlKey: props.urlKey,\n adapter: props.urlSync === false ? undefined : props.urlAdapter,\n enabled: props.urlSync,\n });\n\n // The same resolution `useTableChrome` applies — the auto form needs the\n // operator/value strings before the chrome exists.\n const labels = useMemo(() => resolveLabels(props.labels), [props.labels]);\n\n let filters: ReactNode;\n // Column-level `filter` shorthands alone must still render the auto form —\n // only explicit JSX takes over the drawing.\n if (isDeclarativeFilters(props.filters) || props.filters === undefined) {\n filters =\n runtime.defs.length > 0 ? (\n <AutoFilterForm defs={runtime.defs} source={source} labels={labels} />\n ) : undefined;\n } else {\n filters = props.filters;\n }\n\n const filterLabels = useMemo(\n () => ({ ...runtime.filterLabels, ...props.filterLabels }),\n [runtime.filterLabels, props.filterLabels]\n );\n\n return { ...props, source, filters, filterLabels };\n}\n\n/**\n * Batteries-included Mantine data table. Drop in `columns`, a `rowKey`,\n * and a data tier — raw `data` (frontend), `data` + `onQueryChange`\n * (server), or a prebuilt `source` — to get a fully styled, sortable,\n * filterable, paginated table with selection, bulk actions, RTL, dark\n * mode, and optional entrance animation.\n *\n * @typeParam TRow - The row type.\n */\nexport function DataTable<TRow>(props: Readonly<DataTableProps<TRow>>) {\n const chromeProps = useResolvedTableProps(props);\n const {\n source,\n rowActions,\n searchPlaceholder,\n sortByOptions,\n dir,\n prefetch,\n hideSearch,\n filters,\n filtersMode = \"popover\",\n bulkActions,\n slots,\n classNames,\n toolbar: customToolbar,\n skeletonRows,\n stickyTop = 0,\n animate = false,\n stickyHeader = false,\n enableColumnMenu = false,\n savedViews,\n } = chromeProps;\n const density = chromeProps.density ?? \"comfortable\";\n\n const chrome = useTableChrome<TRow>(chromeProps);\n const { table, isMobile, confirm, getRowId } = chrome;\n // The injected actions column is first-class in the column layout: the\n // menu lists it under `labels.actions`, hiding it strips the row actions\n // HERE — before any renderer sees them — so the column, its pin lead and\n // the spacer/detail spans all disappear together, and pinning it sticks\n // the column to the inline end without involving any data column.\n const hasRowActions = (rowActions?.length ?? 0) > 0;\n const visibleRowActions = chrome.columnLayout.isHidden(ACTIONS_COLUMN_KEY)\n ? undefined\n : rowActions;\n const actionsPinned =\n chrome.columnLayout.state.pinned[ACTIONS_COLUMN_KEY] === \"right\";\n const { virtualization, loadMoreRef, canLoadMore, virtualScrollRef } =\n useChromeBodyData(chrome, chromeProps);\n const [drawerOpened, setDrawerOpened] = useState(false);\n const filtersTrigger = useFilterTriggerToggle(drawerOpened, setDrawerOpened);\n const rootRef = useRef<HTMLDivElement>(null);\n const { ref: toolbarRef, height: toolbarHeight } = useElementSize();\n\n const desktopBodyRef = useRef<HTMLTableSectionElement>(null);\n const mobileBodyRef = useRef<HTMLDivElement>(null);\n useChromeScrollReset(rootRef, chrome, chromeProps);\n\n useMountStagger(\n isMobile ? mobileBodyRef : desktopBodyRef,\n [virtualization.rows.length, isMobile],\n { enabled: animate }\n );\n\n let body: React.ReactNode;\n if (chrome.body === \"skeleton\") {\n body = slots?.skeleton ?? (\n <TableSkeleton\n columns={table.columns.length || 1}\n rows={skeletonRows ?? source.limit}\n loadingLabel={table.labels.loading}\n />\n );\n } else if (chrome.body === \"empty\") {\n // \"noResults\" means an active search/filter matched nothing — say so and\n // offer a working clear, instead of the misleading \"no data\".\n body =\n slots?.empty ??\n (chrome.emptyVariant === \"noResults\" ? (\n <EmptyState\n title={table.labels.noResults}\n action={\n <Button variant=\"light\" size=\"sm\" onClick={chrome.clearFilters}>\n {table.labels.clearAll}\n </Button>\n }\n />\n ) : (\n <EmptyState title={table.labels.noData} />\n ));\n } else if (chrome.body === \"mobile\") {\n body = (\n <MobileCards\n table={table}\n rows={source.rows}\n rowActions={visibleRowActions}\n confirm={confirm}\n getRowId={getRowId}\n onRowClick={props.onRowClick}\n rowClassName={props.rowClassName}\n renderRowDetail={props.renderRowDetail}\n summaryRow={props.summaryRow}\n expansion={chrome.detail?.expansion}\n bodyRef={mobileBodyRef}\n className={classNames?.card}\n rowEntries={virtualization.enabled ? virtualization.rows : undefined}\n paddingTop={virtualization.paddingTop}\n paddingBottom={virtualization.paddingBottom}\n measureElement={virtualization.measureElement}\n density={density}\n />\n );\n } else {\n body = (\n <DesktopTable\n table={table}\n rows={source.rows}\n rowActions={visibleRowActions}\n confirm={confirm}\n prefetch={prefetch}\n onRowClick={props.onRowClick}\n rowClassName={props.rowClassName}\n renderRowDetail={props.renderRowDetail}\n summaryRow={props.summaryRow}\n expansion={chrome.detail?.expansion}\n getRowId={getRowId}\n bodyRef={desktopBodyRef}\n className={classNames?.table}\n rowEntries={virtualization.enabled ? virtualization.rows : undefined}\n paddingTop={virtualization.paddingTop}\n paddingBottom={virtualization.paddingBottom}\n measureElement={virtualization.measureElement}\n stickyHeaderOffset={stickyTop + toolbarHeight}\n stickyHeader={stickyHeader}\n pinOffset={chrome.columnLayout.pinOffset}\n actionsPinned={actionsPinned}\n maxHeight={props.maxHeight}\n virtualScrollRef={virtualScrollRef}\n setWidth={\n props.resizableColumns ? chrome.columnLayout.setWidth : undefined\n }\n columnWidths={chrome.columnLayout.state.widths}\n resizeLabel={table.labels.resizeColumn}\n density={density}\n />\n );\n }\n\n return (\n <Paper\n ref={rootRef}\n p=\"xs\"\n radius=\"md\"\n withBorder\n dir={dir}\n aria-busy={chrome.isRefreshing || undefined}\n className={classNames?.root}\n >\n <Stack gap=\"xs\">\n <Box\n ref={toolbarRef}\n style={stickyToolbarStyle(stickyTop)}\n className={classNames?.toolbar}\n >\n <Stack gap=\"xs\">\n <Toolbar\n table={table}\n hideSearch={hideSearch}\n searchPlaceholder={searchPlaceholder}\n sortByOptions={sortByOptions}\n customToolbar={customToolbar}\n hasFilters={Boolean(filters)}\n activeFilterCount={chrome.activeFilterCount}\n filtersMode={filtersMode}\n filters={filters}\n filtersOpen={drawerOpened}\n onToggleFilters={filtersTrigger.onClick}\n onFiltersTriggerPointerDown={filtersTrigger.onPointerDown}\n onCloseFilters={() => setDrawerOpened(false)}\n onClearFilters={chrome.clearFilters}\n dir={dir}\n columnMenu={\n <>\n {savedViews && (\n <SavedViewsSlot\n // The table's own URL backend/namespace are the\n // defaults — an explicit option still wins.\n options={{\n adapter: chromeProps.urlAdapter,\n urlKey: chromeProps.urlKey,\n ...savedViews,\n }}\n labels={table.labels}\n />\n )}\n <ColumnMenuSlot\n enabled={enableColumnMenu && !isMobile}\n allColumns={chrome.allColumns}\n layout={chrome.columnLayout}\n labels={table.labels}\n hasRowActions={hasRowActions}\n />\n </>\n }\n showRowsPerPage={canLoadMore}\n />\n <ActiveFilterChips\n chips={chrome.mergedChips}\n onClearAll={chrome.clearFilters}\n label={table.labels.filters}\n clearAllLabel={table.labels.clearAll}\n />\n {table.selection && bulkActions && (\n <BulkActionBar\n selection={table.selection}\n total={source.total}\n bulkActions={bulkActions}\n confirm={confirm}\n labels={table.labels}\n />\n )}\n </Stack>\n </Box>\n\n {chrome.isRefreshing && (\n <Progress\n size=\"xs\"\n animated\n value={100}\n aria-label={table.labels.loading}\n />\n )}\n\n {source.error && (\n <ErrorState\n error={source.error}\n title={table.labels.errorTitle}\n message={table.labels.errorMessage}\n retryLabel={table.labels.retry}\n onRetry={source.refetch ? () => void source.refetch?.() : undefined}\n isRetrying={source.isFetching}\n />\n )}\n\n {!source.error && body}\n\n {canLoadMore && source.hasNextPage && (\n <Group ref={loadMoreRef} justify=\"center\" py=\"xs\">\n <Button\n variant=\"default\"\n size=\"sm\"\n loading={source.isFetchingNextPage}\n onClick={() => source.fetchNextPage()}\n >\n {table.labels.loadMore}\n </Button>\n </Group>\n )}\n\n {chrome.showFooter && (\n <Box className={classNames?.footer}>\n <PaginationFooter\n page={table.pagination.safePage}\n totalPages={table.pagination.totalPages}\n limit={source.limit}\n total={source.total}\n fromIndex={table.pagination.fromIndex}\n toIndex={table.pagination.toIndex}\n onPageChange={source.setPage}\n onLimitChange={source.setLimit}\n labels={table.labels}\n />\n </Box>\n )}\n </Stack>\n\n {filters && filtersMode === \"drawer\" && (\n <FilterDrawer\n opened={drawerOpened}\n onClose={() => setDrawerOpened(false)}\n filters={filters}\n activeFilterCount={chrome.activeFilterCount}\n onClearFilters={chrome.clearFilters}\n labels={table.labels}\n dir={dir}\n />\n )}\n </Paper>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["Group","Pill","Anchor","RANGE_OPS","RANGE_SUFFIXES","RANGE_OP_LABEL_KEYS","NumberInput","TextInput","Stack","Input","Group","Select","NativeSelect","Checkbox","Loader","Stack","Group","Text","Button","Tooltip","ActionIcon","EyeIcon","Text","PinIcon","ACTIONS_COLUMN_KEY","Group","Box","Menu","Button","GripIcon","ActionIcon","Table","Group","Badge","Tooltip","ActionIcon","Button","Checkbox","PIN_Z","VisuallyHidden","Stack","Text","Alert","Group","Text","Button","Drawer","Stack","Group","Button","Stack","Card","Checkbox","Group","Text","Tooltip","ActionIcon","Button","Group","Text","Select","Pagination","Menu","Button","Box","Text","Group","ActionIcon","TextInput","Table","Skeleton","VisuallyHidden","Popover","Group","Text","Button","Stack","Button","Badge","Group","TextInput","Select","Text","ACTIONS_COLUMN_KEY","Button","Paper","Stack","Box","Progress","Group"],"sources":["../src/animation/useMountStagger.ts","../src/components/ActiveFilterChips.tsx","../src/components/AutoFilterForm.tsx","../src/components/BulkActionBar.tsx","../src/components/ColumnMenu.tsx","../src/density.ts","../src/icons.tsx","../src/components/ExpandToggle.tsx","../src/components/DesktopTable.tsx","../src/components/EmptyState.tsx","../src/components/ErrorState.tsx","../src/components/FilterDrawer.tsx","../src/components/MobileCards.tsx","../src/components/PaginationFooter.tsx","../src/components/SavedViewsMenu.tsx","../src/components/TableSkeleton.tsx","../src/components/FilterPopover.tsx","../src/components/Toolbar.tsx","../src/DataTable.tsx"],"sourcesContent":["import { usePrefersReducedMotion } from \"@adapttable/core\";\nimport { type DependencyList, type RefObject, useEffect } from \"react\";\n\n/** Tuning for the mount stagger. */\nexport interface MountStaggerOptions {\n /** Master switch. When `false`, the hook is a no-op. */\n enabled: boolean;\n /** Per-item delay in ms. Defaults to 40. */\n step?: number;\n /** Tween duration in ms. Defaults to 320. */\n duration?: number;\n}\n\n/**\n * Dependency-free entrance stagger using the Web Animations API. Animates\n * descendants marked with `data-stagger` once on mount (and whenever\n * `deps` change), honoring `prefers-reduced-motion`. Works without GSAP;\n * GSAP fans can swap in their own hook of the same shape.\n *\n * @param ref - Ref to the container whose `[data-stagger]` items animate.\n * @param deps - Re-run the stagger when these change (e.g. the row set).\n * @param options - See {@link MountStaggerOptions}.\n */\nexport function useMountStagger(\n ref: RefObject<HTMLElement | null>,\n deps: DependencyList,\n options: MountStaggerOptions\n): void {\n const reduced = usePrefersReducedMotion();\n const { enabled, step = 40, duration = 320 } = options;\n // Collapse the caller's deps to a primitive key so the effect's dependency\n // array stays a literal (no spread) and `exhaustive-deps` can verify it.\n // Pass primitive deps (e.g. a row count), not large objects.\n const depsKey = deps.map(String).join(\"|\");\n\n useEffect(() => {\n if (!enabled || reduced) return;\n const root = ref.current;\n if (!root) return;\n const items = root.querySelectorAll<HTMLElement>(\"[data-stagger]\");\n items.forEach((el, index) => {\n if (typeof el.animate !== \"function\") return;\n el.animate(\n [\n { opacity: 0, transform: \"translateY(8px)\" },\n { opacity: 1, transform: \"translateY(0)\" },\n ],\n {\n duration,\n delay: index * step,\n easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n fill: \"both\",\n }\n );\n });\n }, [enabled, reduced, step, duration, ref, depsKey]);\n}\n","import type { ActiveFilterChip } from \"@adapttable/core\";\nimport { Anchor, Group, Pill } from \"@mantine/core\";\n\n/** Props for {@link ActiveFilterChips}. */\nexport interface ActiveFilterChipsProps {\n /** The chips to render. */\n chips: readonly ActiveFilterChip[];\n /** Optional clear-all handler; the link is hidden when omitted. */\n onClearAll?: () => void;\n /** Accessible label for the strip. */\n label: string;\n /** Clear-all link text. */\n clearAllLabel: string;\n}\n\n/** A wrapping strip of removable filter chips. Renders nothing when empty. */\nexport function ActiveFilterChips({\n chips,\n onClearAll,\n label,\n clearAllLabel,\n}: Readonly<ActiveFilterChipsProps>) {\n if (chips.length === 0) return null;\n return (\n <Group\n gap={6}\n aria-label={label}\n component=\"ul\"\n style={{ listStyle: \"none\", padding: 0, margin: 0 }}\n >\n {chips.map((chip) => (\n <Pill\n key={chip.key}\n component=\"li\"\n withRemoveButton\n onRemove={chip.onRemove}\n removeButtonProps={{\n \"aria-label\": `${clearAllLabel}: ${chip.label}`,\n }}\n >\n {chip.label}\n </Pill>\n ))}\n {onClearAll && (\n <Anchor\n component=\"button\"\n type=\"button\"\n fz=\"xs\"\n fw={600}\n onClick={onClearAll}\n >\n {clearAllLabel}\n </Anchor>\n )}\n </Group>\n );\n}\n","import {\n type FilterDef,\n filterLabel,\n type FilterValue,\n RANGE_OP_LABEL_KEYS,\n RANGE_OPS,\n RANGE_SUFFIXES,\n type RangeOp,\n readRangeWidget,\n type TableLabels,\n type TableSource,\n useFilterOptions,\n writeRangeWidget,\n} from \"@adapttable/core\";\nimport {\n Checkbox,\n Group,\n Input,\n Loader,\n NativeSelect,\n NumberInput,\n Select,\n Stack,\n TextInput,\n} from \"@mantine/core\";\nimport { type ReactNode, useState } from \"react\";\n\n/** Props for {@link AutoFilterForm}. */\nexport interface AutoFilterFormProps<TRow> {\n /** The resolved declarative definitions, in render order. */\n defs: readonly FilterDef<TRow>[];\n /** The resolved source whose `extra` bag the controls read and write. */\n source: TableSource<TRow>;\n /** Resolved labels — the range widgets read the operator/value strings. */\n labels: Required<TableLabels>;\n}\n\n/** A scalar filter value as input text (`\"\"` when unset). */\nconst asText = (value: FilterValue): string =>\n value == null ? \"\" : String(value);\n\n/** A multi-select value as an array, tolerating a scalar from the URL. */\nconst asList = (value: FilterValue): string[] => {\n if (value == null || value === \"\") return [];\n return Array.isArray(value) ? value : [String(value)];\n};\n\n/** The select's raw option value parsed back to a known operator. */\nconst asOp = (value: string | null): RangeOp | undefined =>\n RANGE_OPS.find((op) => op === value);\n\n/** Which operator label set each range type reads. */\nconst RANGE_FLAVOUR = { numberRange: \"number\", dateRange: \"date\" } as const;\n\n/**\n * The operator-first control shared by the `numberRange` / `dateRange`\n * types: pick a comparison (Equal / At least / …), then fill ONE value —\n * or From/To when \"Between\". The persisted state stays the inclusive\n * `Min`/`Max` (`From`/`To`) pair via {@link readRangeWidget} /\n * {@link writeRangeWidget}, so URLs, chips and predicates are unchanged.\n */\nfunction RangeField<TRow>({\n def,\n source,\n kind,\n labels,\n}: Readonly<{\n def: FilterDef<TRow>;\n source: TableSource<TRow>;\n kind: \"numberRange\" | \"dateRange\";\n labels: Required<TableLabels>;\n}>) {\n const label = filterLabel(def);\n const lowKey = def.key + RANGE_SUFFIXES[kind].start;\n const highKey = def.key + RANGE_SUFFIXES[kind].end;\n\n // The operator is UI state seeded from the persisted pair (URL state\n // mounts pre-selected); it wins over the derived value so a half-filled\n // \"Between\" keeps showing two inputs while only one bound is stored.\n const derived = readRangeWidget(source.extra, lowKey, highKey);\n const [chosen, setChosen] = useState<RangeOp | null>(null);\n const op = chosen ?? derived.op ?? null;\n\n const low = asText(source.extra[lowKey]);\n const high = asText(source.extra[highKey]);\n /** The one visible value outside \"Between\" (`lte` stores the upper bound). */\n const single = op === \"lte\" ? high : low;\n\n const write = (nextOp: RangeOp | undefined, a: string, b: string) =>\n source.setExtras(writeRangeWidget(nextOp, a, b, lowKey, highKey));\n\n const handleOp = (value: string | null) => {\n const next = asOp(value);\n setChosen(next ?? null);\n // Switching keeps the first value; clearing the select clears the pair.\n write(next, single, \"\");\n };\n\n const flavour = RANGE_FLAVOUR[kind];\n const opLabelKeys = RANGE_OP_LABEL_KEYS[flavour];\n const data = RANGE_OPS.map((value) => ({\n value,\n label: labels[opLabelKeys[value]],\n }));\n\n const valueInput = (\n text: string,\n value: string,\n commit: (next: string) => void\n ) =>\n flavour === \"number\" ? (\n <NumberInput\n size=\"sm\"\n hideControls\n style={{ flex: \"1 1 6rem\", minWidth: \"6rem\" }}\n aria-label={`${label} ${text}`}\n placeholder={text}\n value={value}\n onChange={(next) => commit(String(next))}\n />\n ) : (\n <TextInput\n type=\"date\"\n size=\"sm\"\n style={{ flex: \"1 1 8.5rem\", minWidth: \"8.5rem\" }}\n aria-label={`${label} ${text}`}\n placeholder={text}\n value={value}\n onChange={(e) => commit(e.currentTarget.value)}\n />\n );\n\n let values: ReactNode = null;\n if (op === \"between\") {\n values = (\n <>\n {valueInput(labels.from, low, (next) => write(\"between\", next, high))}\n {valueInput(labels.to, high, (next) => write(\"between\", low, next))}\n </>\n );\n } else if (op) {\n values = valueInput(labels.value, single, (next) => write(op, next, \"\"));\n }\n\n return (\n <Stack gap={4}>\n <Input.Label size=\"sm\">{label}</Input.Label>\n {/* Operator and value(s) share a row when they fit — \"At least [5]\" —\n and wrap when they don't (date inputs have a wide native minimum,\n so \"Between\" two dates takes a second row in narrow drawers). */}\n <Group gap=\"xs\" align=\"flex-start\">\n <Select\n size=\"sm\"\n clearable\n style={{ flex: \"0 0 8.5rem\", width: \"8.5rem\" }}\n aria-label={`${label} ${labels.operator}`}\n placeholder={labels.operator}\n data={data}\n value={op}\n onChange={handleOp}\n comboboxProps={{ withinPortal: false }}\n />\n {values}\n </Group>\n </Stack>\n );\n}\n\n/**\n * Single-choice control. Options resolve through {@link useFilterOptions}\n * (static array, async loader, or none); while a loader is in flight the\n * select shows one disabled placeholder option.\n */\nfunction SelectControl<TRow>({\n def,\n source,\n}: Readonly<{ def: FilterDef<TRow>; source: TableSource<TRow> }>) {\n const label = filterLabel(def);\n const { options, loading } = useFilterOptions(def);\n const data = loading\n ? [{ value: \"\", label: \"…\", disabled: true }]\n : [{ value: \"\", label: \"All\" }, ...options];\n return (\n <NativeSelect\n size=\"sm\"\n label={label}\n data={data}\n value={asText(source.extra[def.key])}\n onChange={(e) => source.setExtra(def.key, e.currentTarget.value)}\n />\n );\n}\n\n/**\n * Multi-choice control. Options resolve through {@link useFilterOptions};\n * while a loader is in flight the group shows a small spinner instead of\n * checkboxes.\n */\nfunction MultiSelectControl<TRow>({\n def,\n source,\n}: Readonly<{ def: FilterDef<TRow>; source: TableSource<TRow> }>) {\n const label = filterLabel(def);\n const { options, loading } = useFilterOptions(def);\n return (\n <Checkbox.Group\n label={label}\n value={asList(source.extra[def.key])}\n onChange={(values) => source.setExtra(def.key, values)}\n >\n <Group gap=\"sm\" mt={4}>\n {loading ? (\n <Loader size=\"xs\" />\n ) : (\n options.map((option) => (\n <Checkbox\n key={option.value}\n size=\"sm\"\n value={option.value}\n label={option.label}\n />\n ))\n )}\n </Group>\n </Checkbox.Group>\n );\n}\n\n/** One labeled, kit-native control for a single filter definition. */\nfunction FilterControl<TRow>({\n def,\n source,\n labels,\n}: Readonly<{\n def: FilterDef<TRow>;\n source: TableSource<TRow>;\n labels: Required<TableLabels>;\n}>) {\n switch (def.type) {\n case \"text\":\n return (\n <TextInput\n size=\"sm\"\n label={filterLabel(def)}\n placeholder={def.placeholder}\n value={asText(source.extra[def.key])}\n onChange={(e) => source.setExtra(def.key, e.currentTarget.value)}\n />\n );\n case \"select\":\n return <SelectControl def={def} source={source} />;\n case \"multiSelect\":\n return <MultiSelectControl def={def} source={source} />;\n case \"dateRange\":\n case \"numberRange\":\n return (\n <RangeField def={def} source={source} kind={def.type} labels={labels} />\n );\n }\n}\n\n/**\n * The auto-built filter form: one labeled, Mantine-native control per\n * declarative {@link FilterDef}. Values live in the source's `extra` bag\n * (so the URL, chips and — on frontend data — the predicate all follow);\n * clearing a control writes the empty value, which drops the URL param.\n * Range types render operator-first: an operator select plus one value\n * input (two for \"Between\"), persisted as the inclusive pair.\n *\n * @typeParam TRow - The row type.\n */\nexport function AutoFilterForm<TRow>({\n defs,\n source,\n labels,\n}: Readonly<AutoFilterFormProps<TRow>>) {\n return (\n <Stack gap=\"sm\">\n {defs.map((def) => (\n <FilterControl\n key={def.key}\n def={def}\n source={source}\n labels={labels}\n />\n ))}\n </Stack>\n );\n}\n","import {\n type BulkAction,\n type BulkBarChromeProps,\n resolveDisabledReason,\n type SelectionState,\n type TableLabels,\n useBulkActionRunner,\n} from \"@adapttable/core\";\nimport { Button, Group, Stack, Text, Tooltip } from \"@mantine/core\";\n\n/** Selection toolbar: count, clear, and the configured bulk-action buttons. */\nexport function BulkActionBar({\n selection,\n total,\n bulkActions,\n confirm,\n labels,\n}: Readonly<BulkBarChromeProps>) {\n const { selectedIds, selectedCount, clear, allMatching } = selection;\n const { pending, run } = useBulkActionRunner({\n confirm,\n cancelLabel: labels.cancel,\n onComplete: clear,\n });\n\n if (selectedCount === 0) return null;\n\n const ids = [...selectedIds];\n return (\n <Stack gap=\"xs\">\n <Group justify=\"space-between\" wrap=\"wrap\" gap=\"sm\">\n <Text fz=\"sm\">{labels.selectedCount(selectedCount)}</Text>\n <Group gap=\"xs\" wrap=\"wrap\">\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={clear}\n disabled={pending !== null}\n >\n {labels.clearAll}\n </Button>\n {bulkActions.map((action) => (\n <BulkButton\n key={action.key}\n action={action}\n ids={ids}\n pending={pending}\n onRun={(a) => {\n // Widened scope: the action receives the page ids plus the\n // all-matching context, so confirm counts size by `total`.\n if (allMatching) run(a, ids, { allMatching: true, total });\n else run(a, ids);\n }}\n />\n ))}\n </Group>\n </Group>\n <ScopeBanner selection={selection} total={total} labels={labels} />\n </Stack>\n );\n}\n\n/**\n * Gmail-style scope banner. When every row on the page is selected but more\n * rows match elsewhere, offer to widen the selection to all matching rows;\n * once widened, announce the scope and offer to clear it.\n */\nfunction ScopeBanner({\n selection,\n total,\n labels,\n}: Readonly<{\n selection: SelectionState;\n total: number;\n labels: Required<TableLabels>;\n}>) {\n if (selection.headerState !== \"all\" || total <= selection.visibleIds.length) {\n return null;\n }\n return (\n <Group role=\"status\" gap=\"xs\" wrap=\"wrap\">\n {selection.allMatching ? (\n <>\n <Text fz=\"sm\">{labels.allMatchingSelected(total)}</Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={selection.clear}>\n {labels.clearAll}\n </Button>\n </>\n ) : (\n <>\n <Text fz=\"sm\">{labels.pageSelected(selection.selectedCount)}</Text>\n <Button\n size=\"xs\"\n variant=\"light\"\n onClick={selection.selectAllMatching}\n >\n {labels.selectAllMatching(total)}\n </Button>\n </>\n )}\n </Group>\n );\n}\n\nfunction BulkButton({\n action,\n ids,\n pending,\n onRun,\n}: Readonly<{\n action: BulkAction;\n ids: string[];\n pending: string | null;\n onRun: (action: BulkAction) => void;\n}>) {\n const reason = resolveDisabledReason(action.disabledReason?.(ids));\n const ineligible = reason !== undefined;\n const button = (\n <Button\n size=\"xs\"\n color={action.color}\n leftSection={action.icon}\n onClick={() => onRun(action)}\n loading={pending === action.key}\n disabled={ineligible || (pending !== null && pending !== action.key)}\n >\n {action.label}\n </Button>\n );\n if (reason !== undefined) {\n return (\n <Tooltip label={reason} withArrow openDelay={150}>\n <div>{button}</div>\n </Tooltip>\n );\n }\n return button;\n}\n","import type {\n ColumnMenuChromeProps,\n ColumnMenuLabels,\n UseColumnLayoutResult,\n} from \"@adapttable/core\";\nimport {\n ACTIONS_COLUMN_KEY,\n columnMenuRows,\n columnReorderKeyProps,\n EyeIcon,\n GripIcon,\n nextPinSide,\n pinActionLabel,\n PinIcon,\n useColumnDragState,\n} from \"@adapttable/core\";\nimport { ActionIcon, Box, Button, Group, Menu, Text } from \"@mantine/core\";\n\n/**\n * Props for the column menu — the shared core contract, plus the injected\n * actions column: when the table has row actions, the menu lists it too\n * (named by `labels.actions`) with an eye toggle and a one-click end-pin.\n */\nexport interface ColumnMenuProps<TRow> extends ColumnMenuChromeProps<TRow> {\n /** Resolved labels — the shared menu set plus the actions-column name. */\n labels: ColumnMenuLabels & { actions: string };\n /** Whether the table has row actions (lists the injected actions column). */\n hasRowActions?: boolean;\n}\n\n/** The eye toggle + struck-through name shared by data and actions rows. */\nfunction RowVisibility({\n hidden,\n name,\n labels,\n onToggle,\n}: Readonly<{\n hidden: boolean;\n name: string;\n labels: Pick<ColumnMenuLabels, \"showColumn\" | \"hideColumn\">;\n onToggle: () => void;\n}>) {\n return (\n <>\n <ActionIcon\n variant={hidden ? \"subtle\" : \"light\"}\n color={hidden ? \"gray\" : \"blue\"}\n size=\"sm\"\n aria-label={`${hidden ? labels.showColumn : labels.hideColumn}: ${name}`}\n aria-pressed={!hidden}\n onClick={onToggle}\n >\n <EyeIcon off={hidden} />\n </ActionIcon>\n <Text\n size=\"sm\"\n style={{ flex: 1 }}\n c={hidden ? \"dimmed\" : undefined}\n td={hidden ? \"line-through\" : undefined}\n >\n {name}\n </Text>\n </>\n );\n}\n\n/** The pin control shared by data and actions rows. */\nfunction PinToggle({\n pinned,\n label,\n onClick,\n}: Readonly<{ pinned: boolean; label: string; onClick: () => void }>) {\n return (\n <ActionIcon\n variant={pinned ? \"filled\" : \"subtle\"}\n color={pinned ? \"blue\" : \"gray\"}\n size=\"sm\"\n aria-label={label}\n onClick={onClick}\n >\n <PinIcon />\n </ActionIcon>\n );\n}\n\n/**\n * The injected actions column's menu row: the same eye toggle as data\n * columns plus a pin toggle that flips right ↔ unpinned in one click. No\n * drag grip (the column always trails) and no left pin.\n */\nfunction ActionsRow<TRow>({\n layout,\n labels,\n}: Readonly<{\n layout: UseColumnLayoutResult<TRow>;\n labels: ColumnMenuProps<TRow>[\"labels\"];\n}>) {\n const hidden = layout.isHidden(ACTIONS_COLUMN_KEY);\n const pinned = layout.state.pinned[ACTIONS_COLUMN_KEY] === \"right\";\n return (\n <Group justify=\"flex-start\" wrap=\"nowrap\" gap={6} px={4} py={2}>\n {/* Spacer where data rows show the drag grip, keeping toggles aligned. */}\n <Box w={22} />\n <RowVisibility\n hidden={hidden}\n name={labels.actions}\n labels={labels}\n onToggle={() => layout.toggleVisible(ACTIONS_COLUMN_KEY)}\n />\n <PinToggle\n pinned={pinned}\n label={`${pinned ? labels.unpin : labels.pinRight}: ${labels.actions}`}\n onClick={() =>\n layout.setPinned(ACTIONS_COLUMN_KEY, pinned ? undefined : \"right\")\n }\n />\n </Group>\n );\n}\n\n/**\n * Column-management popover: per-column drag grip (reorder), eye (show/hide),\n * and pin toggle. Keyboard users focus a grip and use arrow keys.\n */\nexport function ColumnMenu<TRow>({\n allColumns,\n layout,\n labels,\n hasRowActions = false,\n}: Readonly<ColumnMenuProps<TRow>>) {\n const drag = useColumnDragState();\n return (\n <Menu closeOnItemClick={false} position=\"bottom-end\" withinPortal>\n <Menu.Target>\n <Button variant=\"default\" size=\"sm\">\n {labels.columns}\n </Button>\n </Menu.Target>\n <Menu.Dropdown>\n <Box p={4} miw={250}>\n <Text size=\"xs\" c=\"dimmed\" fw={600} tt=\"uppercase\" px={4} pb={6}>\n {labels.columns}\n </Text>\n {columnMenuRows(allColumns, layout).map((r) => {\n // Drop-position feedback: dim the dragged row, draw an\n // insertion line on the hovered target's landing edge.\n const indicator = drag.rowAttrs(r.key, r.index);\n const edge = indicator[\"data-drop\"];\n const edgeOffset = edge === \"before\" ? \"2px\" : \"-2px\";\n return (\n <Group\n key={r.key}\n justify=\"flex-start\"\n wrap=\"nowrap\"\n gap={6}\n px={4}\n py={2}\n style={{\n cursor: \"grab\",\n opacity: \"data-dragging\" in indicator ? 0.4 : undefined,\n boxShadow: edge\n ? `inset 0 ${edgeOffset} 0 0 var(--mantine-primary-color-filled)`\n : undefined,\n }}\n {...drag.rowDragProps(r.key, r.index)}\n {...drag.dropProps(r.index, layout.move)}\n {...indicator}\n >\n <ActionIcon\n variant=\"subtle\"\n color=\"gray\"\n size=\"sm\"\n style={{ cursor: \"grab\" }}\n {...columnReorderKeyProps(\n r.key,\n r.index,\n layout.move,\n `${labels.moveLeft} / ${labels.moveRight}: ${r.name}`\n )}\n >\n <GripIcon />\n </ActionIcon>\n <RowVisibility\n hidden={r.hidden}\n name={r.name}\n labels={labels}\n onToggle={() => layout.toggleVisible(r.key)}\n />\n <PinToggle\n pinned={r.pinned !== undefined}\n label={`${pinActionLabel(r.pinned, labels)}: ${r.name}`}\n onClick={() => layout.setPinned(r.key, nextPinSide(r.pinned))}\n />\n </Group>\n );\n })}\n {hasRowActions && (\n <>\n <Menu.Divider />\n <ActionsRow layout={layout} labels={labels} />\n </>\n )}\n <Menu.Divider />\n <Button\n variant=\"subtle\"\n size=\"xs\"\n fullWidth\n justify=\"flex-start\"\n onClick={() => layout.reset()}\n >\n {labels.resetColumns}\n </Button>\n </Box>\n </Menu.Dropdown>\n </Menu>\n );\n}\n","import type { MantineSpacing } from \"@mantine/core\";\n\n/** Row density — independent of column pinning. */\nexport type Density = \"comfortable\" | \"compact\";\n\n/** Mantine `<Table>` spacing props for a given density. */\nexport interface DensitySpacing {\n verticalSpacing: MantineSpacing;\n horizontalSpacing: MantineSpacing;\n}\n\n/**\n * Maps each {@link Density} to the Mantine `<Table>` spacing props.\n * `comfortable` keeps the original `sm`/`md` rhythm; `compact` tightens\n * rows with a 4px vertical gap and `sm` horizontal padding.\n */\nexport const DENSITY_SPACING: Record<Density, DensitySpacing> = {\n comfortable: { verticalSpacing: \"sm\", horizontalSpacing: \"md\" },\n compact: { verticalSpacing: 4, horizontalSpacing: \"sm\" },\n};\n","import type { CSSProperties, ReactNode } from \"react\";\n\ninterface IconProps {\n size?: number;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction Svg({\n size = 16,\n className,\n style,\n children,\n}: IconProps & { children: ReactNode }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n style={style}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {children}\n </svg>\n );\n}\n\n/** Magnifying-glass search icon. */\nexport const SearchIcon = (p: IconProps) => (\n <Svg {...p}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m21 21-4.3-4.3\" />\n </Svg>\n);\n\n/** Up chevron (active ascending sort). */\nexport const ChevronUpIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"m6 15 6-6 6 6\" />\n </Svg>\n);\n\n/** Down chevron (active descending sort). */\nexport const ChevronDownIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"m6 9 6 6 6-6\" />\n </Svg>\n);\n\n/** Right chevron (collapsed row-detail toggle; rotates 90° when expanded). */\nexport const ChevronRightIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"m9 6 6 6-6 6\" />\n </Svg>\n);\n\n/** Up/down selector (inactive sortable column). */\nexport const SelectorIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"m8 9 4-4 4 4M8 15l4 4 4-4\" />\n </Svg>\n);\n\n/** Small ✕ used on chips. */\nexport const CloseIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </Svg>\n);\n\n/** Sliders icon for the Filters button. */\nexport const FiltersIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M4 6h16M7 12h10M10 18h4\" />\n </Svg>\n);\n\n/** Triangle alert icon for the error state. */\nexport const AlertIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z\" />\n <path d=\"M12 9v4M12 17h.01\" />\n </Svg>\n);\n\n/** Refresh icon for retry. */\nexport const RefreshIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M21 12a9 9 0 1 1-3-6.7L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </Svg>\n);\n\n/** Inbox icon for the empty state. */\nexport const InboxIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M22 12h-6l-2 3h-4l-2-3H2\" />\n <path d=\"M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.5-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1Z\" />\n </Svg>\n);\n","import { ActionIcon } from \"@mantine/core\";\n\nimport { ChevronRightIcon } from \"../icons\";\n\n/** Props for {@link ExpandToggle}. */\nexport interface ExpandToggleProps {\n /** Whether the row's detail panel is currently open. */\n expanded: boolean;\n /** Accessible label while collapsed. */\n expandLabel: string;\n /** Accessible label while expanded. */\n collapseLabel: string;\n /** Toggle the detail panel. */\n onToggle: () => void;\n}\n\n/**\n * The chevron that toggles a row's detail panel — shared by the desktop\n * table's leading cell and the mobile card. It is a real button, so the\n * row-click interactive-child guard already keeps it from activating\n * `onRowClick`.\n */\nexport function ExpandToggle({\n expanded,\n expandLabel,\n collapseLabel,\n onToggle,\n}: Readonly<ExpandToggleProps>) {\n return (\n <ActionIcon\n variant=\"subtle\"\n color=\"gray\"\n size=\"sm\"\n aria-expanded={expanded}\n aria-label={expanded ? collapseLabel : expandLabel}\n onClick={onToggle}\n >\n <ChevronRightIcon\n size={14}\n style={{\n transform: expanded ? \"rotate(90deg)\" : \"rotate(0deg)\",\n transition: \"transform 150ms ease\",\n }}\n />\n </ActionIcon>\n );\n}\n","import {\n type ColumnDef,\n columnResizeHandleProps,\n type ConfirmHandler,\n edgePinStyle,\n headerGroupRow,\n PIN_Z,\n type PinLeads,\n pinnedCellStyle,\n pinnedColumnWidth,\n resolveDisabledReason,\n type RowAction,\n rowClickProps,\n runRowAction,\n type SharedTableRenderProps,\n tableMinWidth,\n tableRenderModel,\n type UseDataTableResult,\n useHorizontalOverflow,\n} from \"@adapttable/core\";\nimport {\n ActionIcon,\n Badge,\n Button,\n Checkbox,\n Group,\n Table,\n Tooltip,\n VisuallyHidden,\n} from \"@mantine/core\";\nimport type { CSSProperties, MouseEvent, ReactNode, RefObject } from \"react\";\nimport { memo, useCallback, useMemo, useRef } from \"react\";\n\nimport { type Density, DENSITY_SPACING } from \"../density\";\nimport { ExpandToggle } from \"./ExpandToggle\";\n\n/** Inline style for an absolutely-positioned column-resize handle. */\nconst RESIZE_HANDLE_STYLE: CSSProperties = {\n position: \"absolute\",\n insetInlineEnd: 0,\n top: 0,\n height: \"100%\",\n width: 8,\n cursor: \"col-resize\",\n touchAction: \"none\",\n userSelect: \"none\",\n};\n\nimport { ChevronDownIcon, ChevronUpIcon, SelectorIcon } from \"../icons\";\n\n/**\n * Props for {@link DesktopTable}: the shared render contract from core\n * (minus `stickyTop` — the resolved `stickyHeaderOffset` replaces it) plus\n * the Mantine-specific extras.\n */\nexport interface DesktopTableProps<TRow> extends Omit<\n SharedTableRenderProps<TRow>,\n \"stickyTop\"\n> {\n bodyRef: RefObject<HTMLTableSectionElement | null>;\n className?: string;\n /** Resolved sticky-header top inset (page `stickyTop` + toolbar height). */\n stickyHeaderOffset?: number;\n /** The injected actions column is pinned to the inline end on its own. */\n actionsPinned?: boolean;\n density?: Density;\n}\n\nfunction SortIcon({\n active,\n dir,\n}: Readonly<{\n active: boolean;\n dir: \"asc\" | \"desc\" | undefined;\n}>) {\n if (!active) return <SelectorIcon size={12} />;\n return dir === \"asc\" ? (\n <ChevronUpIcon size={12} />\n ) : (\n <ChevronDownIcon size={12} />\n );\n}\n\nfunction HeaderCell<TRow>({\n table,\n column,\n stickyStyle,\n resizeHandle,\n}: Readonly<{\n table: UseDataTableResult<TRow>;\n column: ColumnDef<TRow>;\n stickyStyle: CSSProperties;\n resizeHandle?: ReactNode;\n}>) {\n const cellProps = table.getHeaderCellProps(column);\n const headerStyle = {\n ...cellProps.style,\n ...stickyStyle,\n };\n if (!column.sortable) {\n return (\n <Table.Th {...cellProps} style={headerStyle}>\n {column.header}\n {resizeHandle}\n </Table.Th>\n );\n }\n // Core's onClick receives the click event as-is (no zero-arg wrapper), so\n // shift-clicks reach the multi-sort branch inside `getSortButtonProps`.\n const buttonProps = table.getSortButtonProps(column);\n // 1-based chain position from core (always > 0 when defined) — drives the\n // multi-sort badge; the chain level also wins the icon's active/dir state,\n // because chaining clears the single-sort `sortBy`.\n const sortIndex = buttonProps[\"data-sort-index\"];\n const level = table.source.sortLevels.find((l) => l.key === column.key);\n const active = level !== undefined || table.sortBy === column.key;\n return (\n <Table.Th {...cellProps} style={headerStyle}>\n <Group\n component=\"button\"\n gap={6}\n wrap=\"nowrap\"\n display=\"inline-flex\"\n style={{\n background: \"none\",\n border: 0,\n cursor: \"pointer\",\n font: \"inherit\",\n padding: 0,\n color: active ? \"var(--mantine-primary-color-filled)\" : \"inherit\",\n }}\n {...buttonProps}\n >\n <span>{column.header}</span>\n <SortIcon active={active} dir={level?.dir ?? table.sortDir} />\n {typeof sortIndex === \"number\" && (\n <Badge component=\"span\" size=\"xs\" variant=\"light\">\n {sortIndex}\n </Badge>\n )}\n </Group>\n {resizeHandle}\n </Table.Th>\n );\n}\n\nfunction RowActions<TRow>({\n row,\n actions,\n confirm,\n cancelLabel,\n}: Readonly<{\n row: TRow;\n actions: RowAction<TRow>[];\n confirm: ConfirmHandler;\n cancelLabel: string;\n}>) {\n return (\n <Group gap={4} justify=\"flex-end\" wrap=\"nowrap\">\n {actions.map((action) => {\n if (action.isHidden?.(row)) return null;\n const reason = resolveDisabledReason(action.disabledReason?.(row));\n const disabled =\n reason !== undefined || (action.isDisabled?.(row) ?? false);\n // The disabled attribute already blocks activation, so attach the\n // handler only when the action can run.\n const handleClick = disabled\n ? undefined\n : (e: MouseEvent) => {\n e.stopPropagation();\n runRowAction(action, row, confirm, cancelLabel);\n };\n // Icon-only actions render as an ActionIcon; without an icon, fall\n // back to a text button so the label is actually visible.\n return action.icon ? (\n <Tooltip\n key={action.key}\n label={reason ?? action.label}\n withArrow\n openDelay={200}\n >\n <ActionIcon\n variant=\"subtle\"\n color={action.color}\n size=\"sm\"\n disabled={disabled}\n aria-label={action.label}\n onClick={handleClick}\n >\n {action.icon}\n </ActionIcon>\n </Tooltip>\n ) : (\n <Button\n key={action.key}\n variant=\"subtle\"\n color={action.color}\n size=\"compact-sm\"\n disabled={disabled}\n onClick={handleClick}\n >\n {action.label}\n </Button>\n );\n })}\n </Group>\n );\n}\n\n/**\n * Props for the memoized {@link DesktopRowBase}. Everything the row's visual\n * output depends on is a primitive, a stable identity, or is fingerprinted\n * by `pinSignature` — so {@link desktopRowPropsEqual} can hold the row\n * across unrelated table re-renders (search keystrokes, other rows'\n * selection) without ever capturing a stale event handler.\n */\ninterface DesktopRowProps<TRow> {\n row: TRow;\n /** Absolute row index (virtual windows keep source indices). */\n index: number;\n /** Stable row id from `getRowId`. */\n id: string;\n columns: ColumnDef<TRow>[];\n /** Core's cell prop-getter — identity-stable for the table's lifetime. */\n getCellProps: UseDataTableResult<TRow>[\"getCellProps\"];\n /** Selected state; `undefined` when selection is off (no checkbox cell). */\n selected?: boolean;\n selectLabel: string;\n /** Identity-stable select toggle (latest-ref wrapped in the parent). */\n onToggleSelect: (id: string) => void;\n /** Expanded state; `undefined` when expansion is off (no chevron cell). */\n expanded?: boolean;\n expandLabel: string;\n collapseLabel: string;\n /** Core's expansion toggle — identity-stable. */\n onToggleExpand?: (id: string) => void;\n renderRowDetail?: (row: TRow) => ReactNode;\n /** Detail-cell span: expansion + selection + data + actions columns. */\n columnSpan: number;\n rowActions?: RowAction<TRow>[];\n confirm: ConfirmHandler;\n cancelLabel: string;\n onRowClick?: (row: TRow) => void;\n prefetch?: (row: TRow) => void;\n /** Resolved `rowClassName(row, index)` output. */\n className?: string;\n measureElement?: (element: Element | null) => void;\n /** Pinned-cell style for a data column (output covered by `pinSignature`). */\n pinStyleFor: (key: string) => CSSProperties | undefined;\n selectionCellStyle?: CSSProperties;\n expansionCellStyle?: CSSProperties;\n actionsCellStyle?: CSSProperties;\n /** Fingerprint of the pin layout, compared instead of the styles above. */\n pinSignature: string;\n}\n\n/**\n * The style-ish props the comparator deliberately skips: they are rebuilt\n * every parent render, and their visual output is exactly determined by\n * `pinSignature` (plus the compared inputs) — comparing their identities\n * would only defeat the memo.\n */\ntype UncomparedRowProp =\n | \"pinStyleFor\"\n | \"selectionCellStyle\"\n | \"expansionCellStyle\"\n | \"actionsCellStyle\";\n\n/** Every row prop the memo comparator checks with `Object.is`. */\nconst COMPARED_ROW_PROPS: readonly Exclude<\n keyof DesktopRowProps<unknown>,\n UncomparedRowProp\n>[] = [\n \"row\",\n \"index\",\n \"id\",\n \"columns\",\n \"getCellProps\",\n \"selected\",\n \"selectLabel\",\n \"onToggleSelect\",\n \"expanded\",\n \"expandLabel\",\n \"collapseLabel\",\n \"onToggleExpand\",\n \"renderRowDetail\",\n \"columnSpan\",\n \"rowActions\",\n \"confirm\",\n \"cancelLabel\",\n \"onRowClick\",\n \"prefetch\",\n \"className\",\n \"measureElement\",\n \"pinSignature\",\n];\n\n/**\n * Row memo comparator: `Object.is` over every prop except the per-render\n * style derivations excluded above. All event handlers passed to the row\n * are identity-stable (or compared here, so a changed handler re-renders\n * the row and is captured fresh) — a held row can never fire a stale\n * closure.\n */\nfunction desktopRowPropsEqual<TRow>(\n prev: Readonly<DesktopRowProps<TRow>>,\n next: Readonly<DesktopRowProps<TRow>>\n): boolean {\n return COMPARED_ROW_PROPS.every((key) => Object.is(prev[key], next[key]));\n}\n\n/**\n * Sticky style for a leading chrome cell (chevron / checkbox) pinned\n * `inset` px past the inline-start edge, active only while a data column is\n * pinned on that side. Body cells pass a `background` so scrolled data\n * never shows through.\n */\nfunction leadingPinStyle(\n active: boolean,\n inset: number,\n zIndex: number,\n background?: string\n): CSSProperties | undefined {\n if (!active) return undefined;\n const style = pinnedCellStyle({ side: \"left\", inset }, zIndex);\n return background ? { ...style, background } : style;\n}\n\n/**\n * Visual fingerprint of the pin layout (sides, insets, edge-pinned chrome\n * columns). Memoized rows compare this one string instead of the per-render\n * style objects derived from it.\n */\nfunction pinLayoutSignature<TRow>(\n columns: readonly ColumnDef<TRow>[],\n pinOffset: SharedTableRenderProps<TRow>[\"pinOffset\"],\n hasLeftPin: boolean,\n actionsEdgePinned: boolean\n): string {\n const perColumn = columns.map((column) => {\n const pin = pinOffset?.(column.key);\n return pin ? `${column.key}:${pin.side}${pin.inset}` : column.key;\n });\n return `${perColumn.join(\"|\")}|${String(hasLeftPin)}|${String(actionsEdgePinned)}`;\n}\n\n/**\n * One desktop row (plus its detail row when expanded), extracted so it can\n * be memoized: typing in the search box or toggling another row's checkbox\n * re-renders the table chrome but leaves untouched rows alone.\n */\nfunction DesktopRowBase<TRow>({\n row,\n index,\n id,\n columns,\n getCellProps,\n selected,\n selectLabel,\n onToggleSelect,\n expanded,\n expandLabel,\n collapseLabel,\n onToggleExpand,\n renderRowDetail,\n columnSpan,\n rowActions,\n confirm,\n cancelLabel,\n onRowClick,\n prefetch,\n className,\n measureElement,\n pinStyleFor,\n selectionCellStyle,\n expansionCellStyle,\n actionsCellStyle,\n}: Readonly<DesktopRowProps<TRow>>) {\n const showActions = (rowActions?.length ?? 0) > 0;\n return (\n <>\n <Table.Tr\n role=\"row\"\n data-index={index}\n aria-selected={selected}\n {...rowClickProps(row, onRowClick)}\n className={className}\n ref={measureElement}\n data-stagger=\"\"\n onMouseEnter={prefetch ? () => prefetch(row) : undefined}\n >\n {expanded !== undefined && (\n <Table.Td ta=\"center\" style={expansionCellStyle}>\n <ExpandToggle\n expanded={expanded}\n expandLabel={expandLabel}\n collapseLabel={collapseLabel}\n onToggle={() => onToggleExpand!(id)}\n />\n </Table.Td>\n )}\n {selected !== undefined && (\n <Table.Td ta=\"center\" style={selectionCellStyle}>\n <Checkbox\n aria-label={selectLabel}\n checked={selected}\n onChange={() => onToggleSelect(id)}\n />\n </Table.Td>\n )}\n {columns.map((column) => (\n <Table.Td\n key={column.key}\n {...getCellProps(column)}\n style={pinStyleFor(column.key)}\n >\n {column.Cell ? (\n <column.Cell row={row} rowIndex={index} />\n ) : (\n column.accessor?.(row)\n )}\n </Table.Td>\n ))}\n {showActions && (\n <Table.Td ta=\"end\" style={actionsCellStyle}>\n <RowActions\n row={row}\n actions={rowActions!}\n confirm={confirm}\n cancelLabel={cancelLabel}\n />\n </Table.Td>\n )}\n </Table.Tr>\n {expanded === true && (\n <Table.Tr>\n <Table.Td colSpan={columnSpan}>{renderRowDetail!(row)}</Table.Td>\n </Table.Tr>\n )}\n </>\n );\n}\n\n/** Desktop table rendering driven by core prop-getters. */\nexport function DesktopTable<TRow>({\n table,\n rows,\n rowActions,\n confirm,\n prefetch,\n onRowClick,\n rowClassName,\n renderRowDetail,\n summaryRow,\n expansion,\n getRowId,\n bodyRef,\n className,\n rowEntries,\n paddingTop = 0,\n paddingBottom = 0,\n measureElement,\n stickyHeaderOffset = 0,\n stickyHeader = false,\n pinOffset,\n maxHeight,\n virtualScrollRef,\n setWidth,\n columnWidths,\n resizeLabel = \"Resize column\",\n actionsPinned = false,\n density = \"comfortable\",\n}: Readonly<DesktopTableProps<TRow>>) {\n // The shared render prelude from core — including `columnSpan` for the\n // spacer/detail cells, which counts the expansion column itself when\n // `renderRowDetail` + `expansion` are wired.\n const { columns, selection, labels, showActions, entries, columnSpan } =\n tableRenderModel({\n table,\n rows,\n rowActions,\n getRowId,\n rowEntries,\n renderRowDetail,\n expansion,\n });\n // Expansion state only exists when `renderRowDetail` is set (the chrome\n // couples them), so its presence alone decides the leading chevron column.\n const expandable = expansion !== undefined;\n // Grouped header row over the VISIBLE columns (`null` → no extra row) and\n // the per-column footer summary cells (`undefined` → no footer).\n const groupCells = headerGroupRow(columns);\n const summaryCells = summaryRow?.(rows);\n const hasRightPin = table.columns.some(\n (c) => pinOffset?.(c.key)?.side === \"right\"\n );\n // The actions column sticks to the inline end either because a data column\n // is pinned right (it must stay outermost past it) or because the user\n // pinned the actions column itself — one click, no data column involved.\n const actionsEdgePinned = showActions && (hasRightPin || actionsPinned);\n const hasPinned =\n table.columns.some((c) => pinOffset?.(c.key) != null) || actionsEdgePinned;\n // Pinning needs horizontal scroll, and a `maxHeight` needs vertical scroll;\n // either makes the wrapper a scroll container (setting one overflow axis to\n // `auto` computes the other to `auto` too). Inside that container the page\n // toolbar is irrelevant, so the sticky header sticks to the box top (0).\n // Only against the document scroller must it clear the toolbar via\n // `stickyHeaderOffset`.\n // Without a `maxHeight`, the wrapper becomes a horizontal scroller only\n // when it must: pinned columns always need one, otherwise only while the\n // table is measurably wider than the wrapper (so wide tables scroll instead\n // of bleeding over the card border). When the table fits, the wrapper stays\n // a NON-scroll container — any `overflow` would trap the page-scroll sticky\n // header inside it.\n const { ref: wrapperRef, overflowing } =\n useHorizontalOverflow<HTMLDivElement>();\n const inScrollBox = maxHeight != null || hasPinned || overflowing;\n // `position: sticky` on `<thead>` does not engage against the document\n // scroller (only inside an overflow container) — so we stick the header\n // *cells* instead. Each th carries its own opaque background so scrolled\n // rows never show through.\n const headerCellStyle: CSSProperties = stickyHeader\n ? {\n position: \"sticky\",\n top: inScrollBox ? 0 : stickyHeaderOffset,\n zIndex: PIN_Z.header,\n background: \"var(--mantine-color-body)\",\n boxShadow: \"0 1px 0 var(--mantine-color-default-border)\",\n }\n : { background: \"var(--mantine-color-body)\" };\n\n // The leading chevron (36px) + checkbox (40px) and trailing actions\n // (120px) columns pin to the edge alongside the data columns, which\n // therefore start past them.\n const expansionWidth = 36;\n const selectionWidth = 40;\n const actionsWidth = 120;\n const expansionLead = expandable ? expansionWidth : 0;\n const leads: PinLeads = {\n left: expansionLead + (selection ? selectionWidth : 0),\n right: showActions ? actionsWidth : 0,\n };\n const hasLeftPin = table.columns.some(\n (c) => pinOffset?.(c.key)?.side === \"left\"\n );\n\n // Pinned cells stick to the left/right edge (corner-sticky in the header,\n // which also sticks to the top). They need an opaque background.\n const pinBg = \"var(--mantine-color-body)\";\n const headerStyleFor = (column: ColumnDef<TRow>): CSSProperties => {\n const key = column.key;\n const pin = pinnedCellStyle(pinOffset?.(key), PIN_Z.headerPinned, leads);\n const merged: CSSProperties = {\n ...headerCellStyle,\n ...pin,\n // A pinned column renders at the same width its sticky inset assumed,\n // so stacked pins stay flush even with no declared width.\n width: pin\n ? pinnedColumnWidth(column, columnWidths)\n : columnWidths?.[key],\n };\n if (setWidth && !merged.position) merged.position = \"relative\";\n return merged;\n };\n // The chevron / checkbox / actions cells become corner-sticky (top + edge\n // in the header, edge in the body) when a data column on their side is\n // pinned. The checkbox column sits AFTER the chevron column, so its edge\n // inset starts past the chevron's width.\n const expansionHeaderStyle: CSSProperties = {\n ...headerCellStyle,\n ...leadingPinStyle(hasLeftPin, 0, PIN_Z.headerPinned),\n };\n const selectionHeaderStyle: CSSProperties = {\n ...headerCellStyle,\n ...leadingPinStyle(hasLeftPin, expansionLead, PIN_Z.headerPinned),\n };\n const actionsHeaderStyle: CSSProperties = {\n ...headerCellStyle,\n ...edgePinStyle(\"right\", actionsEdgePinned, PIN_Z.headerPinned),\n };\n const edgeBodyStyle = (\n side: \"left\" | \"right\",\n active: boolean\n ): CSSProperties | undefined => {\n const pin = edgePinStyle(side, active, PIN_Z.body);\n return pin ? { ...pin, background: pinBg } : undefined;\n };\n const expansionCellStyle = leadingPinStyle(hasLeftPin, 0, PIN_Z.body, pinBg);\n const selectionCellStyle = leadingPinStyle(\n hasLeftPin,\n expansionLead,\n PIN_Z.body,\n pinBg\n );\n const actionsCellStyle = edgeBodyStyle(\"right\", actionsEdgePinned);\n const columnName = (column: ColumnDef<TRow>): string =>\n typeof column.header === \"string\" ? column.header : column.key;\n const resizeHandleFor = (column: ColumnDef<TRow>): ReactNode =>\n setWidth ? (\n <span\n {...columnResizeHandleProps(\n column.key,\n setWidth,\n `${resizeLabel}: ${columnName(column)}`\n )}\n style={RESIZE_HANDLE_STYLE}\n />\n ) : undefined;\n const bodyPinStyle = (key: string): CSSProperties | undefined => {\n const pin = pinnedCellStyle(pinOffset?.(key), PIN_Z.body, leads);\n return pin ? { ...pin, background: pinBg } : undefined;\n };\n\n const { verticalSpacing, horizontalSpacing } = DENSITY_SPACING[density];\n\n // Fixed-width columns get a real table min-width (their sum), so the table\n // overflows and scrolls horizontally instead of squishing columns to fit.\n const minWidth = tableMinWidth(columns, {\n widths: columnWidths,\n extra: expansionLead + (selection ? 40 : 0) + (showActions ? 120 : 0),\n });\n\n // Latest-ref select toggle: the controlled selection mode rebuilds\n // `selection.toggle` around the current ids on every change, so memoized\n // rows hold this FIXED identity that always dispatches to the live one.\n const selectionRef = useRef(selection);\n selectionRef.current = selection;\n const toggleSelect = useCallback(\n (id: string) => selectionRef.current!.toggle(id),\n []\n );\n\n // `memo` erases generics at module level, so the memoized row is\n // instantiated here (once — the identity is stable for the table's life).\n const Row = useMemo(\n () => memo(DesktopRowBase<TRow>, desktopRowPropsEqual),\n []\n );\n\n const pinSignature = pinLayoutSignature(\n columns,\n pinOffset,\n hasLeftPin,\n actionsEdgePinned\n );\n const wrapperStyle: CSSProperties =\n maxHeight == null\n ? {\n width: \"100%\",\n ...(hasPinned || overflowing ? { overflowX: \"auto\" } : {}),\n }\n : { width: \"100%\", maxHeight, overflow: \"auto\" };\n\n return (\n <div\n ref={(node) => {\n wrapperRef(node);\n virtualScrollRef?.(node);\n }}\n style={wrapperStyle}\n >\n <Table\n {...table.getTableProps()}\n className={className}\n highlightOnHover\n verticalSpacing={verticalSpacing}\n horizontalSpacing={horizontalSpacing}\n miw={Math.max(480, minWidth)}\n // Chromium cannot stick a <th> inside a border-collapsed table, so\n // the sticky header opts into separate borders — visually identical\n // here because row separators are cell border-bottoms either way.\n style={\n stickyHeader\n ? { borderCollapse: \"separate\", borderSpacing: 0 }\n : undefined\n }\n >\n <Table.Thead style={{ background: \"var(--mantine-color-body)\" }}>\n {groupCells && (\n <Table.Tr>\n {expandable && <Table.Th />}\n {selection && <Table.Th />}\n {groupCells.map((cell) => (\n <Table.Th\n key={cell.key}\n colSpan={cell.span}\n ta=\"center\"\n fw={600}\n style={{\n borderBottom:\n \"1px solid var(--mantine-color-default-border)\",\n }}\n >\n {cell.label}\n </Table.Th>\n ))}\n {showActions && <Table.Th />}\n </Table.Tr>\n )}\n <Table.Tr {...table.getHeaderRowProps()}>\n {expandable && (\n <Table.Th\n w={expansionWidth}\n ta=\"center\"\n style={expansionHeaderStyle}\n >\n <VisuallyHidden>{labels.expandRow}</VisuallyHidden>\n </Table.Th>\n )}\n {selection && (\n <Table.Th\n w={selectionWidth}\n ta=\"center\"\n style={selectionHeaderStyle}\n >\n <Checkbox\n aria-label={labels.selectAll}\n checked={selection.headerState === \"all\"}\n indeterminate={selection.headerState === \"some\"}\n onChange={selection.toggleAll}\n />\n </Table.Th>\n )}\n {columns.map((column) => (\n <HeaderCell\n key={column.key}\n table={table}\n column={column}\n stickyStyle={headerStyleFor(column)}\n resizeHandle={resizeHandleFor(column)}\n />\n ))}\n {showActions && (\n <Table.Th ta=\"end\" w={actionsWidth} style={actionsHeaderStyle}>\n {labels.actions}\n </Table.Th>\n )}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody ref={bodyRef}>\n {paddingTop > 0 && (\n <Table.Tr aria-hidden>\n <Table.Td\n colSpan={columnSpan}\n style={{ height: paddingTop, padding: 0 }}\n />\n </Table.Tr>\n )}\n {entries.map(({ row, index, key }) => {\n const id = getRowId(row);\n return (\n <Row\n key={key}\n row={row}\n index={index}\n id={id}\n columns={columns}\n getCellProps={table.getCellProps}\n selected={selection?.isSelected(id)}\n selectLabel={labels.selectRow}\n onToggleSelect={toggleSelect}\n expanded={expansion?.isExpanded(id)}\n expandLabel={labels.expandRow}\n collapseLabel={labels.collapseRow}\n onToggleExpand={expansion?.toggle}\n renderRowDetail={renderRowDetail}\n columnSpan={columnSpan}\n rowActions={rowActions}\n confirm={confirm}\n cancelLabel={labels.cancel}\n onRowClick={onRowClick}\n prefetch={prefetch}\n className={rowClassName?.(row, index)}\n measureElement={measureElement}\n pinStyleFor={bodyPinStyle}\n selectionCellStyle={selectionCellStyle}\n expansionCellStyle={expansionCellStyle}\n actionsCellStyle={actionsCellStyle}\n pinSignature={pinSignature}\n />\n );\n })}\n {paddingBottom > 0 && (\n <Table.Tr aria-hidden>\n <Table.Td\n colSpan={columnSpan}\n style={{ height: paddingBottom, padding: 0 }}\n />\n </Table.Tr>\n )}\n </Table.Tbody>\n {summaryCells && (\n <Table.Tfoot>\n <Table.Tr>\n {expandable && <Table.Td />}\n {selection && <Table.Td />}\n {columns.map((column) => (\n <Table.Td\n key={column.key}\n {...table.getCellProps(column)}\n fw={600}\n c=\"dimmed\"\n >\n {summaryCells[column.key]}\n </Table.Td>\n ))}\n {showActions && <Table.Td />}\n </Table.Tr>\n </Table.Tfoot>\n )}\n </Table>\n </div>\n );\n}\n","import { Stack, Text } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\n\nimport { InboxIcon } from \"../icons\";\n\n/** Props for {@link EmptyState}. */\nexport interface EmptyStateProps {\n /** Headline text. */\n title: string;\n /** Optional supporting description. */\n description?: string;\n /** Optional custom icon (defaults to an inbox glyph). */\n icon?: ReactNode;\n /** Optional call-to-action (e.g. a clear-filters button). */\n action?: ReactNode;\n}\n\n/** Centred \"nothing to show\" placeholder. */\nexport function EmptyState({\n title,\n description,\n icon,\n action,\n}: Readonly<EmptyStateProps>) {\n return (\n <Stack\n role=\"status\"\n align=\"center\"\n justify=\"center\"\n gap={6}\n py={48}\n px={16}\n >\n <Text c=\"dimmed\" aria-hidden>\n {icon ?? <InboxIcon size={40} />}\n </Text>\n <Text fw={600} fz=\"md\">\n {title}\n </Text>\n {description && (\n <Text c=\"dimmed\" fz=\"sm\" ta=\"center\" maw={360}>\n {description}\n </Text>\n )}\n {action}\n </Stack>\n );\n}\n","import { Alert, Button, Group, Text } from \"@mantine/core\";\n\nimport { AlertIcon, RefreshIcon } from \"../icons\";\n\n/** Props for {@link ErrorState}. */\nexport interface ErrorStateProps {\n /** The error to surface. */\n error: Error;\n /** Title line. */\n title: string;\n /** Supporting message. */\n message: string;\n /** Retry button label. */\n retryLabel: string;\n /** Optional retry handler; the button is hidden when omitted. */\n onRetry?: () => void;\n /** Whether a retry is in flight. */\n isRetrying?: boolean;\n}\n\n/** Inline error alert with an optional retry button. */\nexport function ErrorState({\n error,\n title,\n message,\n retryLabel,\n onRetry,\n isRetrying,\n}: Readonly<ErrorStateProps>) {\n return (\n <Alert\n icon={<AlertIcon size={16} />}\n color=\"red\"\n variant=\"light\"\n title={title}\n >\n <Group justify=\"space-between\" align=\"center\" wrap=\"nowrap\" gap=\"md\">\n <div>\n <Text fz=\"sm\">{message}</Text>\n <Text fz=\"xs\" c=\"dimmed\" mt={2}>\n {error.message}\n </Text>\n </div>\n {onRetry && (\n <Button\n size=\"xs\"\n variant=\"light\"\n color=\"red\"\n leftSection={<RefreshIcon size={14} />}\n onClick={onRetry}\n loading={isRetrying}\n >\n {retryLabel}\n </Button>\n )}\n </Group>\n </Alert>\n );\n}\n","import type { Direction, TableLabels } from \"@adapttable/core\";\nimport { Button, Drawer, Group, Stack } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\n\n/** Props for {@link FilterDrawer}. */\nexport interface FilterDrawerProps {\n opened: boolean;\n onClose: () => void;\n filters: ReactNode;\n activeFilterCount: number;\n /** Clear-filters handler (always supplied by the table chrome). */\n onClearFilters: () => void;\n labels: Required<TableLabels>;\n dir?: Direction;\n}\n\n/** Right-side drawer holding the caller's filter widgets + apply/clear. */\nexport function FilterDrawer({\n opened,\n onClose,\n filters,\n activeFilterCount,\n onClearFilters,\n labels,\n dir = \"ltr\",\n}: Readonly<FilterDrawerProps>) {\n return (\n <Drawer\n opened={opened}\n onClose={onClose}\n position={dir === \"rtl\" ? \"left\" : \"right\"}\n size={380}\n title={labels.filters}\n overlayProps={{ opacity: 0.4, blur: 2 }}\n closeButtonProps={{ \"aria-label\": labels.cancel }}\n >\n <Stack gap=\"md\" mih=\"60vh\" justify=\"space-between\">\n <Stack gap=\"md\">{filters}</Stack>\n <Group justify=\"space-between\" pt=\"md\">\n <Button\n variant=\"subtle\"\n onClick={onClearFilters}\n disabled={activeFilterCount === 0}\n >\n {labels.clearAll}\n </Button>\n <Button onClick={onClose}>{labels.applyFilters}</Button>\n </Group>\n </Stack>\n </Drawer>\n );\n}\n","import {\n type ColumnDef,\n resolveDisabledReason,\n rowClickProps,\n runRowAction,\n type SharedTableRenderProps,\n} from \"@adapttable/core\";\nimport {\n ActionIcon,\n Button,\n Card,\n Checkbox,\n Group,\n Stack,\n Text,\n Tooltip,\n} from \"@mantine/core\";\nimport type { RefObject } from \"react\";\n\nimport type { Density } from \"../density\";\nimport { ExpandToggle } from \"./ExpandToggle\";\n\n/**\n * Props for {@link MobileCards}: the card-relevant slice of core's shared\n * render contract (no header/pinning/resize concerns on mobile) plus the\n * Mantine-specific extras.\n */\nexport interface MobileCardsProps<TRow> extends Pick<\n SharedTableRenderProps<TRow>,\n | \"table\"\n | \"rows\"\n | \"rowActions\"\n | \"confirm\"\n | \"getRowId\"\n | \"onRowClick\"\n | \"rowClassName\"\n | \"renderRowDetail\"\n | \"summaryRow\"\n | \"expansion\"\n | \"rowEntries\"\n | \"paddingTop\"\n | \"paddingBottom\"\n | \"measureElement\"\n> {\n bodyRef: RefObject<HTMLDivElement | null>;\n className?: string;\n density?: Density;\n}\n\nfunction mobileLabel<TRow>(column: ColumnDef<TRow>): string {\n return (\n column.mobileLabel ??\n (typeof column.header === \"string\" ? column.header : column.key)\n );\n}\n\n/** Mobile rendering: one Mantine Card per row with labelled key/value rows. */\nexport function MobileCards<TRow>({\n table,\n rows,\n rowActions,\n confirm,\n getRowId,\n bodyRef,\n className,\n rowEntries,\n paddingTop = 0,\n paddingBottom = 0,\n measureElement,\n density = \"comfortable\",\n onRowClick,\n rowClassName,\n renderRowDetail,\n summaryRow,\n expansion,\n}: Readonly<MobileCardsProps<TRow>>) {\n const { columns, selection, labels } = table;\n const compact = density === \"compact\";\n const cardPadding = compact ? \"sm\" : \"md\";\n const cardGap = compact ? 4 : \"xs\";\n const entries =\n rowEntries ??\n rows.map((row, index) => ({\n row,\n index,\n key: getRowId(row),\n }));\n // Header groups and multi-sort are desktop-only: cards have no column axis\n // to span a group label across or to chain a sort on, so neither renders\n // here. The footer summary still applies — it closes the list as one card.\n const summaryCells = summaryRow?.(rows);\n\n return (\n <Stack\n gap={compact ? \"xs\" : \"sm\"}\n ref={bodyRef}\n className={className}\n {...table.getTableProps({ role: \"list\" })}\n >\n {paddingTop > 0 && <div aria-hidden style={{ height: paddingTop }} />}\n {entries.map(({ row, index, key }) => {\n const id = getRowId(row);\n return (\n <Card\n key={key}\n {...rowClickProps(row, onRowClick)}\n className={rowClassName?.(row, index)}\n ref={measureElement}\n data-index={index}\n withBorder\n radius=\"md\"\n padding={cardPadding}\n role=\"listitem\"\n data-stagger=\"\"\n >\n <Stack gap={cardGap}>\n {selection && (\n <Checkbox\n aria-label={labels.selectRow}\n checked={selection.isSelected(id)}\n onChange={() => selection.toggle(id)}\n />\n )}\n {expansion && (\n <Group justify=\"flex-end\">\n <ExpandToggle\n expanded={expansion.isExpanded(id)}\n expandLabel={labels.expandRow}\n collapseLabel={labels.collapseRow}\n onToggle={() => expansion.toggle(id)}\n />\n </Group>\n )}\n {columns.map((column) => (\n <div key={column.key}>\n <Text fz=\"xs\" c=\"dimmed\" tt=\"uppercase\" fw={500}>\n {mobileLabel(column)}\n </Text>\n {/* Cells are arbitrary ReactNode (often block elements) —\n a <p> wrapper would be invalid HTML. */}\n <Text component=\"div\" fz=\"sm\">\n {column.Cell ? (\n <column.Cell row={row} rowIndex={index} />\n ) : (\n column.accessor?.(row)\n )}\n </Text>\n </div>\n ))}\n {expansion?.isExpanded(id) === true && (\n <div>{renderRowDetail!(row)}</div>\n )}\n {rowActions && rowActions.length > 0 && (\n <Group gap={4} justify=\"flex-end\" pt={4}>\n {rowActions.map((action) => {\n if (action.isHidden?.(row)) return null;\n const reason = resolveDisabledReason(\n action.disabledReason?.(row)\n );\n const disabled =\n reason !== undefined ||\n (action.isDisabled?.(row) ?? false);\n // The disabled attribute already blocks activation, so\n // attach the handler only when the action can run.\n const run = disabled\n ? undefined\n : () => runRowAction(action, row, confirm, labels.cancel);\n return action.icon ? (\n <Tooltip\n key={action.key}\n label={reason ?? action.label}\n withArrow\n openDelay={200}\n >\n <ActionIcon\n variant=\"subtle\"\n color={action.color}\n size=\"sm\"\n disabled={disabled}\n aria-label={action.label}\n onClick={run}\n >\n {action.icon}\n </ActionIcon>\n </Tooltip>\n ) : (\n <Button\n key={action.key}\n variant=\"subtle\"\n color={action.color}\n size=\"compact-sm\"\n disabled={disabled}\n onClick={run}\n >\n {action.label}\n </Button>\n );\n })}\n </Group>\n )}\n </Stack>\n </Card>\n );\n })}\n {paddingBottom > 0 && (\n <div aria-hidden style={{ height: paddingBottom }} />\n )}\n {summaryCells && (\n <Card withBorder radius=\"md\" padding={cardPadding} role=\"listitem\">\n <Stack gap={cardGap}>\n {columns\n .filter((column) => summaryCells[column.key] !== undefined)\n .map((column) => (\n <div key={column.key}>\n <Text fz=\"xs\" c=\"dimmed\" tt=\"uppercase\" fw={500}>\n {mobileLabel(column)}\n </Text>\n <Text component=\"div\" fz=\"sm\" fw={600}>\n {summaryCells[column.key]}\n </Text>\n </div>\n ))}\n </Stack>\n </Card>\n )}\n </Stack>\n );\n}\n","import { pageSizeOptions, type TableLabels } from \"@adapttable/core\";\nimport { Group, Pagination, Select, Text } from \"@mantine/core\";\n\n/** Props for {@link PaginationFooter}. */\nexport interface PaginationFooterProps {\n page: number;\n totalPages: number;\n limit: number;\n total: number;\n fromIndex: number;\n toIndex: number;\n onPageChange: (page: number) => void;\n onLimitChange: (limit: number) => void;\n labels: Required<TableLabels>;\n}\n\n/** Desktop pagination bar: page-size + range on the left, pager on the right. */\nexport function PaginationFooter({\n page,\n totalPages,\n limit,\n total,\n fromIndex,\n toIndex,\n onPageChange,\n onLimitChange,\n labels,\n}: Readonly<PaginationFooterProps>) {\n const safeTotalPages = Math.max(totalPages, 1);\n const safePage = Math.min(Math.max(page, 1), safeTotalPages);\n const options = pageSizeOptions(limit).map((n) => ({\n value: String(n),\n label: String(n),\n }));\n\n return (\n <Group justify=\"space-between\" align=\"center\" wrap=\"wrap\" gap=\"md\" pt=\"xs\">\n <Group gap=\"xs\" align=\"center\" wrap=\"nowrap\">\n <Text fz=\"xs\" c=\"dimmed\">\n {labels.rowsPerPage}\n </Text>\n <Select\n aria-label={labels.rowsPerPage}\n data={options}\n value={String(limit)}\n // `allowDeselect={false}` keeps the value non-null.\n onChange={(v) => onLimitChange(Number(v!))}\n size=\"xs\"\n w={76}\n allowDeselect={false}\n comboboxProps={{ withinPortal: false }}\n />\n {total > 0 && (\n <Text fz=\"xs\" c=\"dimmed\">\n {labels.showing({ from: fromIndex, to: toIndex, total })}\n </Text>\n )}\n </Group>\n <Group gap=\"sm\" align=\"center\" wrap=\"nowrap\">\n <Text fz=\"xs\" c=\"dimmed\">\n {labels.pageOf({ page: safePage, total: safeTotalPages })}\n </Text>\n <Pagination\n total={safeTotalPages}\n value={safePage}\n onChange={onPageChange}\n size=\"sm\"\n siblings={1}\n boundaries={1}\n // Only previous/next control buttons render (boundaries keep\n // first/last away), so a total ternary labels them both.\n getControlProps={(control) => ({\n \"aria-label\":\n control === \"previous\" ? labels.previousPage : labels.nextPage,\n })}\n />\n </Group>\n </Group>\n );\n}\n","import type { TableLabels, UseSavedViewsResult } from \"@adapttable/core\";\nimport {\n ActionIcon,\n Box,\n Button,\n Group,\n Menu,\n Text,\n TextInput,\n} from \"@mantine/core\";\nimport { useState } from \"react\";\n\nimport { CloseIcon } from \"../icons\";\n\n/** Props for {@link SavedViewsMenu}. */\nexport interface SavedViewsMenuProps {\n /** The saved-views state from core's `useSavedViews`. */\n views: UseSavedViewsResult;\n /** Resolved table labels (e.g. `table.labels` from `useDataTable`). */\n labels: Required<TableLabels>;\n}\n\n/**\n * Saved-views menu: lists every captured view (click a name to apply it, the\n * trailing ✕ to delete it) above a save row that captures the table's\n * CURRENT URL state under the typed name. Pairs with core's `useSavedViews`\n * and composes into the `toolbar` slot — or let `<DataTable savedViews>`\n * mount it for you next to the Columns menu.\n */\nexport function SavedViewsMenu({\n views,\n labels,\n}: Readonly<SavedViewsMenuProps>) {\n const [name, setName] = useState(\"\");\n const trimmed = name.trim();\n // Saving clears the input but keeps the menu open, so several views can\n // be captured in one sitting.\n const handleSave = () => {\n views.save(trimmed);\n setName(\"\");\n };\n return (\n <Menu closeOnItemClick={false} position=\"bottom-end\" withinPortal>\n <Menu.Target>\n <Button variant=\"default\" size=\"sm\">\n {labels.savedViews}\n </Button>\n </Menu.Target>\n <Menu.Dropdown>\n <Box p={4} miw={220}>\n <Text size=\"xs\" c=\"dimmed\" fw={600} tt=\"uppercase\" px={4} pb={6}>\n {labels.savedViews}\n </Text>\n {views.views.map((view) => (\n <Group key={view.name} gap={6} px={4} py={2} wrap=\"nowrap\">\n <Button\n variant=\"subtle\"\n size=\"compact-sm\"\n justify=\"flex-start\"\n style={{ flex: 1 }}\n onClick={() => views.apply(view.name)}\n >\n {view.name}\n </Button>\n <ActionIcon\n variant=\"subtle\"\n color=\"gray\"\n size=\"sm\"\n aria-label={`${labels.deleteView}: ${view.name}`}\n onClick={() => views.remove(view.name)}\n >\n <CloseIcon size={12} />\n </ActionIcon>\n </Group>\n ))}\n <Menu.Divider />\n <Group gap={6} p={4} wrap=\"nowrap\">\n <TextInput\n size=\"xs\"\n style={{ flex: 1 }}\n placeholder={labels.viewName}\n value={name}\n onChange={(e) => setName(e.currentTarget.value)}\n />\n <Button size=\"xs\" disabled={trimmed === \"\"} onClick={handleSave}>\n {labels.saveView}\n </Button>\n </Group>\n </Box>\n </Menu.Dropdown>\n </Menu>\n );\n}\n","import { Skeleton, Table, VisuallyHidden } from \"@mantine/core\";\n\n/** Props for {@link TableSkeleton}. */\nexport interface TableSkeletonProps {\n /** Number of placeholder columns. */\n columns: number;\n /** Number of placeholder rows. Defaults to 5. */\n rows?: number;\n /** Screen-reader text announcing the loading state. */\n loadingLabel?: string;\n}\n\n/** Loading placeholder that mirrors the table shape to avoid layout shift. */\nexport function TableSkeleton({\n columns,\n rows = 5,\n loadingLabel,\n}: Readonly<TableSkeletonProps>) {\n const colKeys = Array.from({ length: Math.max(columns, 1) }, (_, i) => i);\n const rowKeys = Array.from({ length: rows }, (_, i) => i);\n return (\n <div role=\"status\" aria-busy=\"true\" aria-live=\"polite\">\n <Table>\n <Table.Thead>\n <Table.Tr>\n {colKeys.map((c) => (\n <Table.Th key={c}>\n <Skeleton\n height={12}\n radius=\"sm\"\n width={c === 0 ? \"55%\" : \"40%\"}\n />\n </Table.Th>\n ))}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody>\n {rowKeys.map((r) => (\n <Table.Tr key={r}>\n {colKeys.map((c) => (\n <Table.Td key={c}>\n <Skeleton\n height={14}\n radius=\"sm\"\n width={c === 0 ? \"70%\" : \"55%\"}\n />\n </Table.Td>\n ))}\n </Table.Tr>\n ))}\n </Table.Tbody>\n </Table>\n {loadingLabel ? <VisuallyHidden>{loadingLabel}</VisuallyHidden> : null}\n </div>\n );\n}\n","import type { Direction, TableLabels } from \"@adapttable/core\";\nimport { Button, Group, Popover, Stack, Text } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\n\n/** Props for {@link FilterPopover}. */\nexport interface FilterPopoverProps {\n open: boolean;\n onClose: () => void;\n filters: ReactNode;\n activeFilterCount: number;\n /** Clear-filters handler (always supplied by the table chrome). */\n onClearFilters: () => void;\n labels: Required<TableLabels>;\n dir?: Direction;\n /** The Filters trigger button — becomes the popover anchor. */\n children: ReactNode;\n}\n\n/**\n * Anchored filter card (the default filter container). Opens under the Filters\n * button and tracks it on scroll. No backdrop — the background stays visible\n * and interactive; clicking outside or pressing Escape closes it. Pair with\n * `filtersMode=\"drawer\"` for the slide-in panel instead.\n */\nexport function FilterPopover({\n open,\n onClose,\n filters,\n activeFilterCount,\n onClearFilters,\n labels,\n dir = \"ltr\",\n children,\n}: Readonly<FilterPopoverProps>) {\n return (\n <Popover\n opened={open}\n onDismiss={onClose}\n position={dir === \"rtl\" ? \"bottom-start\" : \"bottom-end\"}\n withinPortal\n shadow=\"md\"\n radius=\"md\"\n width={340}\n >\n <Popover.Target>{children}</Popover.Target>\n <Popover.Dropdown>\n <Group justify=\"space-between\" align=\"center\" mb=\"sm\">\n <Text fw={600} fz=\"sm\">\n {labels.filters}\n </Text>\n <Button\n variant=\"subtle\"\n size=\"compact-xs\"\n onClick={onClearFilters}\n disabled={activeFilterCount === 0}\n >\n {labels.clearAll}\n </Button>\n </Group>\n <Stack gap=\"md\">{filters}</Stack>\n </Popover.Dropdown>\n </Popover>\n );\n}\n","import { pageSizeOptions, type ToolbarChromeProps } from \"@adapttable/core\";\nimport { Badge, Button, Group, Select, Text, TextInput } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\n\nimport { FiltersIcon, SearchIcon } from \"../icons\";\nimport { FilterPopover } from \"./FilterPopover\";\n\n/**\n * Props for {@link Toolbar}: the shared chrome surface from core plus the\n * Mantine-specific filter-container wiring.\n */\nexport interface ToolbarProps<TRow> extends ToolbarChromeProps<TRow> {\n /** Close the filter container. */\n onCloseFilters: () => void;\n /** Filter content + how to render its container. */\n filtersMode: \"popover\" | \"drawer\";\n filters?: ReactNode;\n /** Clear-filters handler used by the popover's clear-all button. */\n onClearFilters: () => void;\n className?: string;\n}\n\n/** Sticky toolbar: search, optional sort select, custom slot, filters, size. */\nexport function Toolbar<TRow>({\n table,\n hideSearch,\n searchPlaceholder,\n sortByOptions,\n customToolbar,\n hasFilters,\n activeFilterCount,\n onToggleFilters,\n onFiltersTriggerPointerDown,\n onCloseFilters,\n filtersOpen,\n filtersMode,\n filters,\n onClearFilters,\n dir,\n columnMenu,\n showRowsPerPage,\n className,\n}: Readonly<ToolbarProps<TRow>>) {\n const { labels, source } = table;\n const searchProps = table.getSearchInputProps(\n searchPlaceholder ? { placeholder: searchPlaceholder } : undefined\n );\n // Explicit options win; otherwise auto-derive on mobile, where the card\n // layout has no clickable headers to sort by.\n const sortOptions =\n sortByOptions ?? (table.isMobile ? table.sortByOptions : undefined);\n\n const filtersButton = (\n <Button\n variant=\"default\"\n size=\"sm\"\n aria-expanded={filtersMode === \"popover\" ? filtersOpen : undefined}\n data-active={filtersOpen || undefined}\n leftSection={<FiltersIcon size={16} />}\n rightSection={\n activeFilterCount > 0 ? (\n <Badge size=\"sm\" circle>\n {activeFilterCount}\n </Badge>\n ) : undefined\n }\n onPointerDown={onFiltersTriggerPointerDown}\n onClick={onToggleFilters}\n >\n {labels.filters}\n </Button>\n );\n\n return (\n <Group\n gap=\"sm\"\n justify=\"space-between\"\n align=\"center\"\n className={className}\n >\n {!hideSearch && (\n <TextInput\n {...searchProps}\n leftSection={<SearchIcon size={14} />}\n size=\"sm\"\n style={{ flex: 1, minWidth: 160, maxWidth: 360 }}\n />\n )}\n <Group gap=\"xs\" align=\"center\">\n {sortOptions && sortOptions.length > 0 && (\n <Select\n aria-label={labels.sortBy}\n placeholder={labels.sortBy}\n data={sortOptions}\n value={source.sortBy ?? null}\n onChange={(v) =>\n source.setSort(v ?? undefined, source.sortDir ?? \"asc\")\n }\n clearable\n size=\"sm\"\n w={160}\n comboboxProps={{ withinPortal: false }}\n />\n )}\n {customToolbar}\n {hasFilters &&\n (filtersMode === \"popover\" ? (\n <FilterPopover\n open={filtersOpen}\n onClose={onCloseFilters}\n filters={filters}\n activeFilterCount={activeFilterCount}\n onClearFilters={onClearFilters}\n labels={labels}\n dir={dir}\n >\n {filtersButton}\n </FilterPopover>\n ) : (\n filtersButton\n ))}\n {columnMenu}\n {showRowsPerPage && (\n <Group gap=\"xs\" align=\"center\">\n <Text fz=\"xs\" c=\"dimmed\">\n {labels.rowsPerPage}\n </Text>\n <Select\n aria-label={labels.rowsPerPage}\n data={pageSizeOptions(source.limit).map((n) => ({\n value: String(n),\n label: String(n),\n }))}\n value={String(source.limit)}\n // `allowDeselect={false}` keeps the value non-null.\n onChange={(v) => source.setLimit(Number(v!))}\n size=\"sm\"\n w={80}\n allowDeselect={false}\n comboboxProps={{ withinPortal: false }}\n />\n </Group>\n )}\n </Group>\n </Group>\n );\n}\n","import {\n ACTIONS_COLUMN_KEY,\n isDeclarativeFilters,\n resolveLabels,\n type TableLabels,\n useChromeBodyData,\n useChromeScrollReset,\n useFilterTriggerToggle,\n useSavedViews,\n type UseSavedViewsOptions,\n useTableChrome,\n useTableData,\n} from \"@adapttable/core\";\nimport { Box, Button, Group, Paper, Progress, Stack } from \"@mantine/core\";\nimport { useElementSize } from \"@mantine/hooks\";\nimport { type ReactNode, useMemo, useRef, useState } from \"react\";\n\nimport { useMountStagger } from \"./animation/useMountStagger\";\nimport { ActiveFilterChips } from \"./components/ActiveFilterChips\";\nimport { AutoFilterForm } from \"./components/AutoFilterForm\";\nimport { BulkActionBar } from \"./components/BulkActionBar\";\nimport { ColumnMenu, type ColumnMenuProps } from \"./components/ColumnMenu\";\nimport { DesktopTable } from \"./components/DesktopTable\";\nimport { EmptyState } from \"./components/EmptyState\";\nimport { ErrorState } from \"./components/ErrorState\";\nimport { FilterDrawer } from \"./components/FilterDrawer\";\nimport { MobileCards } from \"./components/MobileCards\";\nimport { PaginationFooter } from \"./components/PaginationFooter\";\nimport { SavedViewsMenu } from \"./components/SavedViewsMenu\";\nimport { TableSkeleton } from \"./components/TableSkeleton\";\nimport { Toolbar } from \"./components/Toolbar\";\nimport type { DataTableProps } from \"./types\";\n\nconst stickyToolbarStyle = (top: number) => ({\n position: \"sticky\" as const,\n top,\n zIndex: 3,\n background: \"var(--mantine-color-body)\",\n paddingBottom: \"var(--mantine-spacing-xs)\",\n});\n\n/** The Columns menu, rendered inline in the toolbar — or nothing when off. */\nfunction ColumnMenuSlot<TRow>({\n enabled,\n ...props\n}: Readonly<{ enabled: boolean } & ColumnMenuProps<TRow>>) {\n if (!enabled) return null;\n return <ColumnMenu {...props} />;\n}\n\n/**\n * The Saved-views menu in the toolbar. A component (not inline JSX) so\n * `useSavedViews` only runs when the `savedViews` prop is set.\n */\nfunction SavedViewsSlot({\n options,\n labels,\n}: Readonly<{ options: UseSavedViewsOptions; labels: Required<TableLabels> }>) {\n const views = useSavedViews(options);\n return <SavedViewsMenu views={views} labels={labels} />;\n}\n\n/**\n * Resolve the data tier (source ▸ server ▸ frontend) and the declarative\n * filter runtime into the full chrome prop set: the RESOLVED source, the\n * filters node (auto-built form for the declarative array, JSX as-is) and\n * the chip-label resolvers (derived under the caller's — the user wins\n * per key). Everything downstream consumes these.\n */\nfunction useResolvedTableProps<TRow>(props: Readonly<DataTableProps<TRow>>) {\n const { source, runtime } = useTableData<TRow>({\n locale: props.locale,\n source: props.source,\n data: props.data,\n total: props.total,\n loading: props.loading,\n onQueryChange: props.onQueryChange,\n columns: props.columns,\n filters: props.filters,\n urlKey: props.urlKey,\n adapter: props.urlSync === false ? undefined : props.urlAdapter,\n enabled: props.urlSync,\n });\n\n // The same resolution `useTableChrome` applies — the auto form needs the\n // operator/value strings before the chrome exists.\n const labels = useMemo(() => resolveLabels(props.labels), [props.labels]);\n\n let filters: ReactNode;\n // Column-level `filter` shorthands alone must still render the auto form —\n // only explicit JSX takes over the drawing.\n if (isDeclarativeFilters(props.filters) || props.filters === undefined) {\n filters =\n runtime.defs.length > 0 ? (\n <AutoFilterForm defs={runtime.defs} source={source} labels={labels} />\n ) : undefined;\n } else {\n filters = props.filters;\n }\n\n const filterLabels = useMemo(\n () => ({ ...runtime.filterLabels, ...props.filterLabels }),\n [runtime.filterLabels, props.filterLabels]\n );\n\n return { ...props, source, filters, filterLabels };\n}\n\n/**\n * Batteries-included Mantine data table. Drop in `columns`, a `rowKey`,\n * and a data tier — raw `data` (frontend), `data` + `onQueryChange`\n * (server), or a prebuilt `source` — to get a fully styled, sortable,\n * filterable, paginated table with selection, bulk actions, RTL, dark\n * mode, and optional entrance animation.\n *\n * @typeParam TRow - The row type.\n */\nexport function DataTable<TRow>(props: Readonly<DataTableProps<TRow>>) {\n const chromeProps = useResolvedTableProps(props);\n const {\n source,\n rowActions,\n searchPlaceholder,\n sortByOptions,\n dir,\n prefetch,\n hideSearch,\n filters,\n filtersMode = \"popover\",\n bulkActions,\n slots,\n classNames,\n toolbar: customToolbar,\n skeletonRows,\n stickyTop = 0,\n animate = false,\n stickyHeader = false,\n enableColumnMenu = false,\n savedViews,\n } = chromeProps;\n const density = chromeProps.density ?? \"comfortable\";\n\n const chrome = useTableChrome<TRow>(chromeProps);\n const { table, isMobile, confirm, getRowId } = chrome;\n // The injected actions column is first-class in the column layout: the\n // menu lists it under `labels.actions`, hiding it strips the row actions\n // HERE — before any renderer sees them — so the column, its pin lead and\n // the spacer/detail spans all disappear together, and pinning it sticks\n // the column to the inline end without involving any data column.\n const hasRowActions = (rowActions?.length ?? 0) > 0;\n const visibleRowActions = chrome.columnLayout.isHidden(ACTIONS_COLUMN_KEY)\n ? undefined\n : rowActions;\n const actionsPinned =\n chrome.columnLayout.state.pinned[ACTIONS_COLUMN_KEY] === \"right\";\n const { virtualization, loadMoreRef, canLoadMore, virtualScrollRef } =\n useChromeBodyData(chrome, chromeProps);\n const [drawerOpened, setDrawerOpened] = useState(false);\n const filtersTrigger = useFilterTriggerToggle(drawerOpened, setDrawerOpened);\n const rootRef = useRef<HTMLDivElement>(null);\n const { ref: toolbarRef, height: toolbarHeight } = useElementSize();\n\n const desktopBodyRef = useRef<HTMLTableSectionElement>(null);\n const mobileBodyRef = useRef<HTMLDivElement>(null);\n useChromeScrollReset(rootRef, chrome, chromeProps);\n\n useMountStagger(\n isMobile ? mobileBodyRef : desktopBodyRef,\n [virtualization.rows.length, isMobile],\n { enabled: animate }\n );\n\n let body: React.ReactNode;\n if (chrome.body === \"skeleton\") {\n body = slots?.skeleton ?? (\n <TableSkeleton\n columns={table.columns.length || 1}\n rows={skeletonRows ?? source.limit}\n loadingLabel={table.labels.loading}\n />\n );\n } else if (chrome.body === \"empty\") {\n // \"noResults\" means an active search/filter matched nothing — say so and\n // offer a working clear, instead of the misleading \"no data\".\n body =\n slots?.empty ??\n (chrome.emptyVariant === \"noResults\" ? (\n <EmptyState\n title={table.labels.noResults}\n action={\n <Button variant=\"light\" size=\"sm\" onClick={chrome.clearFilters}>\n {table.labels.clearAll}\n </Button>\n }\n />\n ) : (\n <EmptyState title={table.labels.noData} />\n ));\n } else if (chrome.body === \"mobile\") {\n body = (\n <MobileCards\n table={table}\n rows={source.rows}\n rowActions={visibleRowActions}\n confirm={confirm}\n getRowId={getRowId}\n onRowClick={props.onRowClick}\n rowClassName={props.rowClassName}\n renderRowDetail={props.renderRowDetail}\n summaryRow={props.summaryRow}\n expansion={chrome.detail?.expansion}\n bodyRef={mobileBodyRef}\n className={classNames?.card}\n rowEntries={virtualization.enabled ? virtualization.rows : undefined}\n paddingTop={virtualization.paddingTop}\n paddingBottom={virtualization.paddingBottom}\n measureElement={virtualization.measureElement}\n density={density}\n />\n );\n } else {\n body = (\n <DesktopTable\n table={table}\n rows={source.rows}\n rowActions={visibleRowActions}\n confirm={confirm}\n prefetch={prefetch}\n onRowClick={props.onRowClick}\n rowClassName={props.rowClassName}\n renderRowDetail={props.renderRowDetail}\n summaryRow={props.summaryRow}\n expansion={chrome.detail?.expansion}\n getRowId={getRowId}\n bodyRef={desktopBodyRef}\n className={classNames?.table}\n rowEntries={virtualization.enabled ? virtualization.rows : undefined}\n paddingTop={virtualization.paddingTop}\n paddingBottom={virtualization.paddingBottom}\n measureElement={virtualization.measureElement}\n stickyHeaderOffset={stickyTop + toolbarHeight}\n stickyHeader={stickyHeader}\n pinOffset={chrome.columnLayout.pinOffset}\n actionsPinned={actionsPinned}\n maxHeight={props.maxHeight}\n virtualScrollRef={virtualScrollRef}\n setWidth={\n props.resizableColumns ? chrome.columnLayout.setWidth : undefined\n }\n columnWidths={chrome.columnLayout.state.widths}\n resizeLabel={table.labels.resizeColumn}\n density={density}\n />\n );\n }\n\n return (\n <Paper\n ref={rootRef}\n p=\"xs\"\n radius=\"md\"\n withBorder\n dir={dir}\n aria-busy={chrome.isRefreshing || undefined}\n className={classNames?.root}\n >\n <Stack gap=\"xs\">\n <Box\n ref={toolbarRef}\n style={stickyToolbarStyle(stickyTop)}\n className={classNames?.toolbar}\n >\n <Stack gap=\"xs\">\n <Toolbar\n table={table}\n hideSearch={hideSearch}\n searchPlaceholder={searchPlaceholder}\n sortByOptions={sortByOptions}\n customToolbar={customToolbar}\n hasFilters={Boolean(filters)}\n activeFilterCount={chrome.activeFilterCount}\n filtersMode={filtersMode}\n filters={filters}\n filtersOpen={drawerOpened}\n onToggleFilters={filtersTrigger.onClick}\n onFiltersTriggerPointerDown={filtersTrigger.onPointerDown}\n onCloseFilters={() => setDrawerOpened(false)}\n onClearFilters={chrome.clearFilters}\n dir={dir}\n columnMenu={\n <>\n {savedViews && (\n <SavedViewsSlot\n // The table's own URL backend/namespace are the\n // defaults — an explicit option still wins.\n options={{\n adapter: chromeProps.urlAdapter,\n urlKey: chromeProps.urlKey,\n ...savedViews,\n }}\n labels={table.labels}\n />\n )}\n <ColumnMenuSlot\n enabled={enableColumnMenu && !isMobile}\n allColumns={chrome.allColumns}\n layout={chrome.columnLayout}\n labels={table.labels}\n hasRowActions={hasRowActions}\n />\n </>\n }\n showRowsPerPage={canLoadMore}\n />\n <ActiveFilterChips\n chips={chrome.mergedChips}\n onClearAll={chrome.clearFilters}\n label={table.labels.filters}\n clearAllLabel={table.labels.clearAll}\n />\n {table.selection && bulkActions && (\n <BulkActionBar\n selection={table.selection}\n total={source.total}\n bulkActions={bulkActions}\n confirm={confirm}\n labels={table.labels}\n />\n )}\n </Stack>\n </Box>\n\n {chrome.isRefreshing && (\n <Progress\n size=\"xs\"\n animated\n value={100}\n aria-label={table.labels.loading}\n />\n )}\n\n {source.error && (\n <ErrorState\n error={source.error}\n title={table.labels.errorTitle}\n message={table.labels.errorMessage}\n retryLabel={table.labels.retry}\n onRetry={source.refetch ? () => void source.refetch?.() : undefined}\n isRetrying={source.isFetching}\n />\n )}\n\n {!source.error && body}\n\n {canLoadMore && source.hasNextPage && (\n <Group ref={loadMoreRef} justify=\"center\" py=\"xs\">\n <Button\n variant=\"default\"\n size=\"sm\"\n loading={source.isFetchingNextPage}\n onClick={() => source.fetchNextPage()}\n >\n {table.labels.loadMore}\n </Button>\n </Group>\n )}\n\n {chrome.showFooter && (\n <Box className={classNames?.footer}>\n <PaginationFooter\n page={table.pagination.safePage}\n totalPages={table.pagination.totalPages}\n limit={source.limit}\n total={source.total}\n fromIndex={table.pagination.fromIndex}\n toIndex={table.pagination.toIndex}\n onPageChange={source.setPage}\n onLimitChange={source.setLimit}\n labels={table.labels}\n />\n </Box>\n )}\n </Stack>\n\n {filters && filtersMode === \"drawer\" && (\n <FilterDrawer\n opened={drawerOpened}\n onClose={() => setDrawerOpened(false)}\n filters={filters}\n activeFilterCount={chrome.activeFilterCount}\n onClearFilters={chrome.clearFilters}\n labels={table.labels}\n dir={dir}\n />\n )}\n </Paper>\n );\n}\n"],"mappings":"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"}
|