@arqel-dev/ui 0.11.0 → 0.14.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/SKILL.md +5 -2
- package/dist/AreaChart-NMQ2RQGA.js +33 -0
- package/dist/AreaChart-NMQ2RQGA.js.map +1 -0
- package/dist/ArqelCreatePage-O6KNXPAO.js +8 -0
- package/dist/ArqelCreatePage-O6KNXPAO.js.map +1 -0
- package/dist/ArqelDashboardPage-PX3Y75AA.js +6 -0
- package/dist/ArqelDashboardPage-PX3Y75AA.js.map +1 -0
- package/dist/ArqelEditPage-NAMWJ5MC.js +8 -0
- package/dist/ArqelEditPage-NAMWJ5MC.js.map +1 -0
- package/dist/ArqelIndexPage-GC33PNBL.js +12 -0
- package/dist/ArqelIndexPage-GC33PNBL.js.map +1 -0
- package/dist/ArqelShowPage-LGVTL6UZ.js +6 -0
- package/dist/ArqelShowPage-LGVTL6UZ.js.map +1 -0
- package/dist/BarChart-KLHKTLO2.js +19 -0
- package/dist/BarChart-KLHKTLO2.js.map +1 -0
- package/dist/DonutChart-L56R4QF2.js +11 -0
- package/dist/DonutChart-L56R4QF2.js.map +1 -0
- package/dist/LineChart-GHMPHFZZ.js +30 -0
- package/dist/LineChart-GHMPHFZZ.js.map +1 -0
- package/dist/PieChart-T2VQOFPP.js +4 -0
- package/dist/PieChart-T2VQOFPP.js.map +1 -0
- package/dist/RadarChart-CSWR5AO7.js +32 -0
- package/dist/RadarChart-CSWR5AO7.js.map +1 -0
- package/dist/Topbar-DffcNdcJ.d.ts +50 -0
- package/dist/action.d.ts +12 -2
- package/dist/action.js +6 -1090
- package/dist/action.js.map +1 -1
- package/dist/auth.js +1 -10
- package/dist/auth.js.map +1 -1
- package/dist/chunk-2LTZJ4R7.js +110 -0
- package/dist/chunk-2LTZJ4R7.js.map +1 -0
- package/dist/chunk-47HD7ALI.js +370 -0
- package/dist/chunk-47HD7ALI.js.map +1 -0
- package/dist/chunk-4JJS2SVS.js +628 -0
- package/dist/chunk-4JJS2SVS.js.map +1 -0
- package/dist/chunk-6UJQP7KU.js +737 -0
- package/dist/chunk-6UJQP7KU.js.map +1 -0
- package/dist/chunk-B7ULUJVO.js +11 -0
- package/dist/chunk-B7ULUJVO.js.map +1 -0
- package/dist/chunk-C5H44NSP.js +37 -0
- package/dist/chunk-C5H44NSP.js.map +1 -0
- package/dist/chunk-DSULVRB6.js +101 -0
- package/dist/chunk-DSULVRB6.js.map +1 -0
- package/dist/chunk-E2ORVQM5.js +50 -0
- package/dist/chunk-E2ORVQM5.js.map +1 -0
- package/dist/chunk-EYAUPJ6J.js +64 -0
- package/dist/chunk-EYAUPJ6J.js.map +1 -0
- package/dist/chunk-FHRQ7PWE.js +58 -0
- package/dist/chunk-FHRQ7PWE.js.map +1 -0
- package/dist/chunk-FV7RESKL.js +285 -0
- package/dist/chunk-FV7RESKL.js.map +1 -0
- package/dist/chunk-I6MWOIFR.js +204 -0
- package/dist/chunk-I6MWOIFR.js.map +1 -0
- package/dist/chunk-IKJYLSTK.js +440 -0
- package/dist/chunk-IKJYLSTK.js.map +1 -0
- package/dist/chunk-K7QY56XN.js +610 -0
- package/dist/chunk-K7QY56XN.js.map +1 -0
- package/dist/chunk-L3JBBN4H.js +27 -0
- package/dist/chunk-L3JBBN4H.js.map +1 -0
- package/dist/chunk-M6NI45DQ.js +49 -0
- package/dist/chunk-M6NI45DQ.js.map +1 -0
- package/dist/chunk-MTNFFSVA.js +92 -0
- package/dist/chunk-MTNFFSVA.js.map +1 -0
- package/dist/chunk-MTZJDFQ6.js +32 -0
- package/dist/chunk-MTZJDFQ6.js.map +1 -0
- package/dist/chunk-MXUXMHOK.js +16 -0
- package/dist/chunk-MXUXMHOK.js.map +1 -0
- package/dist/chunk-PXON56HL.js +35 -0
- package/dist/chunk-PXON56HL.js.map +1 -0
- package/dist/chunk-PZEVKMZX.js +598 -0
- package/dist/chunk-PZEVKMZX.js.map +1 -0
- package/dist/chunk-QTUBBZVT.js +57 -0
- package/dist/chunk-QTUBBZVT.js.map +1 -0
- package/dist/chunk-R4BOUU6Y.js +55 -0
- package/dist/chunk-R4BOUU6Y.js.map +1 -0
- package/dist/chunk-RMPOR2YZ.js +12 -0
- package/dist/chunk-RMPOR2YZ.js.map +1 -0
- package/dist/chunk-RNAMHQM6.js +12 -0
- package/dist/chunk-RNAMHQM6.js.map +1 -0
- package/dist/chunk-WKWV36PG.js +140 -0
- package/dist/chunk-WKWV36PG.js.map +1 -0
- package/dist/cn-By8XWiSA.d.ts +12 -0
- package/dist/flash.js +2 -104
- package/dist/flash.js.map +1 -1
- package/dist/form.d.ts +1 -1
- package/dist/form.js +4 -673
- package/dist/form.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +18 -3706
- package/dist/index.js.map +1 -1
- package/dist/pages.js +23 -3025
- package/dist/pages.js.map +1 -1
- package/dist/palette.js +1 -283
- package/dist/palette.js.map +1 -1
- package/dist/primitives.js +3 -658
- package/dist/primitives.js.map +1 -1
- package/dist/resource.js +5 -720
- package/dist/resource.js.map +1 -1
- package/dist/shell.d.ts +26 -46
- package/dist/shell.js +46 -1039
- package/dist/shell.js.map +1 -1
- package/dist/table.js +4 -618
- package/dist/table.js.map +1 -1
- package/dist/utility.js +3 -104
- package/dist/utility.js.map +1 -1
- package/dist/utils.d.ts +12 -6
- package/dist/utils.js +2 -9
- package/dist/utils.js.map +1 -1
- package/dist/widgets.d.ts +7 -2
- package/dist/widgets.js +3 -675
- package/dist/widgets.js.map +1 -1
- package/package.json +15 -14
package/dist/table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/table/cells.tsx","../src/table/DataTable.tsx","../src/shadcn/ui/button.tsx","../src/table/TableFilters.tsx","../src/table/TablePagination.tsx","../src/table/TableToolbar.tsx"],"names":["jsx","jsxs"],"mappings":";;;;;;;;;AAUO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACgBO,SAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAc;AACtD,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAS,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IACjD,KAAK,OAAA;AACH,MAAA,uBAAO,GAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IAClD,KAAK,SAAA;AACH,MAAA,uBAAO,GAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IACpD,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAS,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IACjD,KAAK,QAAA;AACH,MAAA,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IACnD,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,YAAS,MAAA,EAAgB,CAAA;AAAA,IACnC,KAAK,OAAA;AACH,MAAA,uBAAO,GAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IAClD,KAAK,cAAA;AACH,MAAA,uBAAO,GAAA,CAAC,gBAAA,EAAA,EAAiB,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IACzD,KAAK,UAAA;AACH,MAAA,uBAAO,GAAA,CAAC,YAAA,EAAA,EAAa,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA;AAEzD;AAEA,SAAS,SAAS,KAAA,EAAwB;AACxC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW,OAAO,OAAO,KAAK,CAAA;AAChF,EAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC7B;AAEA,SAAS,QAAA,CAAS,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAiD;AACjF,EAAA,MAAM,GAAA,GAAM,SAAS,KAAK,CAAA;AAC1B,EAAA,MAAM,YACJ,MAAA,CAAO,KAAA,CAAM,QAAA,IAAY,GAAA,CAAI,SAAS,MAAA,CAAO,KAAA,CAAM,QAAA,GAC/C,CAAA,EAAG,IAAI,KAAA,CAAM,CAAA,EAAG,OAAO,KAAA,CAAM,QAAQ,CAAC,CAAA,MAAA,CAAA,GACtC,GAAA;AACN,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,MAAA,CAAO,KAAA,CAAM,MAAA,KAAW,MAAA,IAAU,WAAA;AAAA,QAClC,MAAA,CAAO,KAAA,CAAM,MAAA,KAAW,QAAA,IAAY;AAAA,OACtC;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAkD;AACnF,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,OAAA,EAAS,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA;AAClE,EAAA,MAAM,KAAA,GAAQ,MAAA,EAAQ,KAAA,IAAS,QAAA,CAAS,KAAK,CAAA;AAC7C,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,8CAAA;AAAA,QACA,MAAA,CAAO,KAAA,CAAM,IAAA,GAAO,cAAA,GAAiB,YAAA;AAAA,QACrC;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAoD;AACvF,EAAA,MAAM,MAAA,GAAS,QAAQ,KAAK,CAAA;AAC5B,EAAA,2BACG,MAAA,EAAA,EAAK,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,SAAS,MAAA,GAAS,OAAA,EAC5C,QAAA,EAAA,MAAA,GAAU,MAAA,CAAO,MAAM,QAAA,IAAY,QAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,aAAa,QAAA,EACxE,CAAA;AAEJ;AAEA,SAAS,QAAA,CAAS,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAiD;AACjF,EAAA,IAAI,CAAC,KAAA,EAAO,2BAAQ,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,QAAA,EAAC,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,OAAO,KAAK,CAAA;AACxB,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,CAAA;AACzB,EAAA,IAAI,MAAA,CAAO,MAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,GAAA,EAAI,CAAA;AACpD,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AACjC,IAAA,uBAAO,GAAA,CAAC,UAAK,QAAA,EAAU,IAAA,CAAK,aAAY,EAAI,QAAA,EAAA,cAAA,CAAe,IAAI,CAAA,EAAE,CAAA;AAAA,EACnE;AACA,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAA,KAAS,UAAA,EAAY;AACpC,IAAA,uBAAO,GAAA,CAAC,UAAK,QAAA,EAAU,IAAA,CAAK,aAAY,EAAI,QAAA,EAAA,IAAA,CAAK,gBAAe,EAAE,CAAA;AAAA,EACpE;AACA,EAAA,uBAAO,GAAA,CAAC,UAAK,QAAA,EAAU,IAAA,CAAK,aAAY,EAAI,QAAA,EAAA,IAAA,CAAK,oBAAmB,EAAE,CAAA;AACxE;AAEA,SAAS,eAAe,IAAA,EAAoB;AAC1C,EAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAA,CAAO,IAAA,CAAK,KAAI,GAAI,IAAA,CAAK,OAAA,EAAQ,IAAK,GAAI,CAAA;AAC/D,EAAA,IAAI,OAAA,GAAU,EAAA,EAAI,OAAO,CAAA,EAAG,OAAO,CAAA,KAAA,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACvC,EAAA,IAAI,OAAA,GAAU,EAAA,EAAI,OAAO,CAAA,EAAG,OAAO,CAAA,KAAA,CAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACrC,EAAA,IAAI,KAAA,GAAQ,EAAA,EAAI,OAAO,CAAA,EAAG,KAAK,CAAA,KAAA,CAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,EAAE,CAAA;AAClC,EAAA,OAAO,GAAG,IAAI,CAAA,KAAA,CAAA;AAChB;AAEA,SAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAmD;AACrF,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,QAAW,uBAAO,GAAA,CAAC,UAAK,QAAA,EAAA,QAAA,EAAC,CAAA;AACzD,EAAA,MAAM,MAAM,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC5D,EAAA,IAAI,MAAA,CAAO,MAAM,GAAG,CAAA,yBAAU,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,KAAK,CAAA,EAAE,CAAA;AACrD,EAAA,MAAM,YAAY,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,YAAY,CAAC,CAAA;AACxD,EAAA,MAAM,CAAC,KAAA,EAAO,GAAG,CAAA,GAAI,SAAA,CAAU,MAAM,GAAG,CAAA;AACxC,EAAA,MAAM,YAAY,KAAA,IAAS,GAAA;AAC3B,EAAA,MAAM,EAAA,GAAK,OAAO,KAAA,CAAM,kBAAA;AACxB,EAAA,MAAM,aAAa,EAAA,GAAK,SAAA,CAAU,OAAA,CAAQ,uBAAA,EAAyB,EAAE,CAAA,GAAI,SAAA;AACzE,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,KAAA,CAAM,gBAAA,IAAoB,GAAA;AAC5C,EAAA,4BACG,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,MAAM,MAAA,IAAU,EAAA;AAAA,IACvB,UAAA;AAAA,IACA,GAAA,GAAM,CAAA,EAAG,EAAE,CAAA,EAAG,GAAG,CAAA,CAAA,GAAK,EAAA;AAAA,IACtB,MAAA,CAAO,MAAM,MAAA,IAAU;AAAA,GAAA,EAC1B,CAAA;AAEJ;AAEA,SAAS,QAAA,CAAS,EAAE,MAAA,EAAO,EAAiC;AAC1D,EAAA,uBACE,GAAA,CAAC,MAAA,EAAA,EAAK,IAAA,EAAK,KAAA,EAAM,cAAY,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,IAAA,EACjE,QAAA,EAAA,MAAA,CAAO,MAAM,IAAA,EAChB,CAAA;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAkD;AACnF,EAAA,MAAM,GAAA,GAAM,SAAS,KAAK,CAAA;AAC1B,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,IAAA,IAAQ,EAAA;AAClC,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,GAAA,EAAI,EAAA;AAAA,MACJ,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,MACnC,WAAW,EAAA,CAAG,MAAA,CAAO,MAAM,KAAA,KAAU,UAAA,GAAa,iBAAiB,SAAS;AAAA;AAAA,GAC9E;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAyD;AACjG,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,QAAW,uBAAO,GAAA,CAAC,UAAK,QAAA,EAAA,QAAA,EAAC,CAAA;AACzD,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAA,GAAQ,KAAA,CAAkC,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AACtE,IAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,IAAI,CAAA,EAAE,CAAA;AAAA,EAC/B;AACA,EAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,KAAK,CAAA,EAAE,CAAA;AAChC;AAEA,SAAS,YAAA,CAAa,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAqD;AACzF,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,2BAAQ,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,eAAe,QAAA,EAAI,CAAA;AAAA,EAClF;AACA,EAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,KAAK,CAAA,EAAE,CAAA;AAChC;ACvIO,SAAS,SAAA,CAA2C;AAAA,EACzD,OAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,cAAc,EAAC;AAAA,EACf,iBAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,YAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,UAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,mBAAA,GAAsB,OAAsB,IAAI,CAAA;AAEtD,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEpF,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACnB,MACE,cAAA,CAAe,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MAC3B,IAAI,GAAA,CAAI,IAAA;AAAA,MACR,UAAA,EAAY,CAAC,GAAA,KAAS,GAAA,CAAgC,IAAI,IAAI,CAAA;AAAA,MAC9D,MAAA,EAAQ,MAAM,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,IAAA;AAAA,MAC/B,IAAA,EAAM,CAAC,IAAA,qBAASA,GAAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,IAAA,CAAK,QAAA,EAAS,EAAG,CAAA;AAAA,MAChE,eAAe,GAAA,CAAI;AAAA,KACrB,CAAE,CAAA;AAAA,IACJ,CAAC,cAAc;AAAA,GACjB;AAEA,EAAA,MAAM,QAAQ,aAAA,CAAc;AAAA,IAC1B,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS,YAAA;AAAA,IACT,iBAAiB,eAAA;AAAgB,GAClC,CAAA;AAED,EAAA,MAAM,cACJ,eAAA,IAAmB,OAAA,CAAQ,SAAS,CAAA,IAAK,WAAA,CAAY,WAAW,OAAA,CAAQ,MAAA;AAC1E,EAAA,MAAM,eACJ,eAAA,IAAmB,WAAA,CAAY,SAAS,CAAA,IAAK,WAAA,CAAY,SAAS,OAAA,CAAQ,MAAA;AAE5E,EAAA,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACxB,IAAA,IAAI,WAAA,EAAa,iBAAA,CAAkB,EAAE,CAAA;AAAA,2BACd,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,EACjD,CAAA,EAAG,CAAC,WAAA,EAAa,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAE5C,EAAA,MAAM,SAAA,GAAY,WAAA;AAAA,IAChB,CAAC,EAAA,EAAW,KAAA,EAAe,QAAA,KAAsB;AAC/C,MAAA,IAAI,CAAC,iBAAA,EAAmB;AACxB,MAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAW,WAAW,CAAA;AACtC,MAAA,MAAM,YAAY,mBAAA,CAAoB,OAAA;AAEtC,MAAA,IAAI,QAAA,IAAY,cAAc,IAAA,EAAM;AAClC,QAAA,MAAM,CAAC,IAAA,EAAM,EAAE,CAAA,GAAI,SAAA,GAAY,KAAA,GAAQ,CAAC,SAAA,EAAW,KAAK,CAAA,GAAI,CAAC,KAAA,EAAO,SAAS,CAAA;AAC7E,QAAA,MAAM,YAAA,GAAe,CAAC,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA;AAChC,QAAA,KAAA,IAAS,CAAA,GAAI,IAAA,EAAM,CAAA,IAAK,EAAA,EAAI,CAAA,EAAA,EAAK;AAC/B,UAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAA;AAC1B,UAAA,IAAI,UAAU,MAAA,EAAW;AACzB,UAAA,IAAI,YAAA,EAAc,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA;AAAA,eAC1B,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,QACvB;AAAA,MACF,CAAA,MAAA,IAAW,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,EAAG;AACtB,QAAA,GAAA,CAAI,OAAO,EAAE,CAAA;AAAA,MACf,CAAA,MAAO;AACL,QAAA,GAAA,CAAI,IAAI,EAAE,CAAA;AAAA,MACZ;AAEA,MAAA,mBAAA,CAAoB,OAAA,GAAU,KAAA;AAC9B,MAAA,iBAAA,CAAkB,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IACnC,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,WAAA,EAAa,iBAAiB;AAAA,GAC1C;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,UAAA,KAA6C;AACxE,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,YAAY,OAAO,IAAA;AAChD,IAAA,OAAO,IAAA,CAAK,SAAA,KAAc,MAAA,GAAS,MAAA,GAAS,KAAA;AAAA,EAC9C,CAAA;AAEA,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA,EACpD,QAAA,kBAAAC,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,gCAAA,EACf,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,4BAAA,EACd,gBAAM,eAAA,EAAgB,CAAE,GAAA,CAAI,CAAC,KAAA,qBAC5BC,IAAAA,CAAC,IAAA,EAAA,EAAkB,WAAU,wBAAA,EAC1B,QAAA,EAAA;AAAA,MAAA,eAAA,oBACCD,GAAAA,CAAC,IAAA,EAAA,EAAG,OAAM,KAAA,EAAM,SAAA,EAAU,4BACxB,QAAA,kBAAAA,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,UAAA;AAAA,UACL,YAAA,EAAW,iBAAA;AAAA,UACX,OAAA,EAAS,WAAA;AAAA,UACT,GAAA,EAAK,CAAC,EAAA,KAAO;AACX,YAAA,IAAI,EAAA,KAAO,aAAA,GAAgB,YAAA;AAAA,UAC7B,CAAA;AAAA,UACA,QAAA,EAAU;AAAA;AAAA,OACZ,EACF,CAAA;AAAA,MAED,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AAC7B,QAAA,MAAM,GAAA,GAAM,eAAe,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAClE,QAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,YAAA;AAClC,QAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AACtD,QAAA,uBACEA,GAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,KAAA,EAAM,KAAA;AAAA,YACN,SAAA,EAAW,EAAA;AAAA,cACT,uDAAA;AAAA,cACA,GAAA,EAAK,UAAU,QAAA,IAAY,aAAA;AAAA,cAC3B,GAAA,EAAK,UAAU,KAAA,IAAS;AAAA,aAC1B;AAAA,YACA,aACE,SAAA,KAAc,KAAA,GACV,WAAA,GACA,SAAA,KAAc,SACZ,YAAA,GACA,MAAA;AAAA,YAGP,qCACCC,IAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,sDAAA;AAAA,gBACV,OAAA,EAAS,MACP,YAAA,CAAa,MAAA,CAAO,OAAO,EAAA,EAAI,SAAA,KAAc,KAAA,GAAQ,MAAA,GAAS,KAAK,CAAA;AAAA,gBAGpE,QAAA,EAAA;AAAA,kBAAA,UAAA,CAAW,OAAO,MAAA,CAAO,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,YAAY,CAAA;AAAA,kCAC/DD,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EACf,QAAA,EAAA,SAAA,KAAc,KAAA,GAAQ,QAAA,GAAM,SAAA,KAAc,MAAA,GAAS,QAAA,GAAM,QAAA,EAC5D;AAAA;AAAA;AAAA,aACF,GAEA,WAAW,MAAA,CAAO,MAAA,CAAO,UAAU,MAAA,EAAQ,MAAA,CAAO,YAAY;AAAA,WAAA;AAAA,UA7B3D,MAAA,CAAO;AAAA,SA+Bd;AAAA,MAEJ,CAAC,CAAA;AAAA,MACA,UAAA,oBACCA,GAAAA,CAAC,IAAA,EAAA,EAAG,OAAM,KAAA,EAAM,SAAA,EAAU,2BAAA,EAA4B,YAAA,EAAW,SAAA,EAAU;AAAA,KAAA,EAAA,EAvDtE,KAAA,CAAM,EAyDf,CACD,CAAA,EACH,CAAA;AAAA,oBACAC,KAAC,OAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,OAAA,oBACCD,GAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,SAAS,cAAA,CAAe,MAAA,IAAU,kBAAkB,CAAA,GAAI,CAAA,CAAA,IAAM,aAAa,CAAA,GAAI,CAAA,CAAA;AAAA,UAC/E,SAAA,EAAU,6CAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA,OAED,EACF,CAAA;AAAA,MAED,CAAC,WAAW,OAAA,CAAQ,MAAA,KAAW,qBAC9BA,GAAAA,CAAC,QACC,QAAA,kBAAAA,GAAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,SAAS,cAAA,CAAe,MAAA,IAAU,kBAAkB,CAAA,GAAI,CAAA,CAAA,IAAM,aAAa,CAAA,GAAI,CAAA,CAAA;AAAA,UAC/E,SAAA,EAAU,6CAAA;AAAA,UAET,QAAA,EAAA,UAAA,IAAc;AAAA;AAAA,OACjB,EACF,CAAA;AAAA,MAED,CAAC,WACA,KAAA,CAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,KAAU;AAC3C,QAAA,MAAM,SAAS,GAAA,CAAI,QAAA;AACnB,QAAA,MAAM,OAAA,GAAU,WAAA,CAAY,QAAA,CAAS,MAAA,CAAO,EAAE,CAAA;AAC9C,QAAA,uBACEC,IAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,iBAAe,OAAA,IAAW,MAAA;AAAA,YAC1B,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,OAAA,IAAW,UAAU,CAAA;AAAA,YAE5D,QAAA,EAAA;AAAA,cAAA,eAAA,oBACCD,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kBACZ,QAAA,kBAAAA,GAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,UAAA;AAAA,kBACL,YAAA,EAAY,CAAA,WAAA,EAAc,MAAA,CAAO,EAAE,CAAA,CAAA;AAAA,kBACnC,OAAA;AAAA,kBACA,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,oBAAA,MAAM,SAAS,KAAA,CAAM,WAAA;AACrB,oBAAA,SAAA,CAAU,MAAA,CAAO,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,kBACtD;AAAA;AAAA,eACF,EACF,CAAA;AAAA,cAED,GAAA,CAAI,eAAA,EAAgB,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AACnC,gBAAA,MAAM,GAAA,GAAM,eAAe,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA;AAChE,gBAAA,uBACEA,GAAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBAEC,SAAA,EAAW,EAAA;AAAA,sBACT,WAAA;AAAA,sBACA,GAAA,EAAK,UAAU,QAAA,IAAY,aAAA;AAAA,sBAC3B,GAAA,EAAK,UAAU,KAAA,IAAS,YAAA;AAAA,sBACxB,KAAK,cAAA,IAAkB;AAAA,qBACzB;AAAA,oBAEC,qBAAW,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAM,IAAA,CAAK,YAAY;AAAA,mBAAA;AAAA,kBARpD,IAAA,CAAK;AAAA,iBASZ;AAAA,cAEJ,CAAC,CAAA;AAAA,cACA,UAAA,oBACCA,GAAAA,CAAC,IAAA,EAAA,EAAG,WAAU,2BAAA,EAA6B,QAAA,EAAA,UAAA,CAAW,MAAM,CAAA,EAAE;AAAA;AAAA,WAAA;AAAA,UAlC3D,GAAA,CAAI;AAAA,SAoCX;AAAA,MAEJ,CAAC;AAAA,KAAA,EACL;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AC9PA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,6bAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,wDAAA;AAAA,QACT,WAAA,EACE,mJAAA;AAAA,QACF,OAAA,EACE,uIAAA;AAAA,QACF,SAAA,EACE,8DAAA;AAAA,QACF,KAAA,EACE,sEAAA;AAAA,QACF,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,+BAAA;AAAA,QACT,EAAA,EAAI,0FAAA;AAAA,QACJ,EAAA,EAAI,+CAAA;AAAA,QACJ,EAAA,EAAI,sCAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,wDAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAGK;AACH,EAAA,MAAM,IAAA,GAAO,OAAA,GAAU,IAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ;ACjCO,SAAS,YAAA,CAAa;AAAA,EAC3B,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEjC,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM;AAC7C,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA;AACvB,IAAA,OAAO,MAAM,MAAA,IAAa,CAAA,KAAM,QAAQ,CAAA,KAAM,EAAA,GAAK,MAAM,CAAA,GAAI,GAAA;AAAA,EAC/D,GAAG,CAAC,CAAA;AAEJ,EAAA,uBACEC,IAAAA,CAAC,UAAA,EAAA,EAAS,WAAW,EAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA,EAC9E,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,IAClC,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QAEC,MAAA;AAAA,QACA,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,QACzB,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,MAAA,CAAO,MAAM,CAAC;AAAA,OAAA;AAAA,MAHnC,MAAA,CAAO;AAAA,KAKf,CAAA;AAAA,IACA,WAAA,GAAc,CAAA,IAAK,UAAA,oBAClBC,IAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,UAAA,EAAY,QAAA,EAAA;AAAA,MAAA,iBAAA;AAAA,MACrC,WAAA;AAAA,MAAY;AAAA,KAAA,EAC9B;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,QAAA;AACH,MAAA,uBAAOD,GAAAA,CAAC,YAAA,EAAA,EAAa,MAAA,EAAgB,OAAc,QAAA,EAAoB,CAAA;AAAA,IACzE,KAAK,aAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,MAAA,EAAgB,OAAc,QAAA,EAAoB,CAAA;AAAA,IAC9E,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB,OAAc,QAAA,EAAoB,CAAA;AAAA,IACvE,KAAK,SAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,aAAA,EAAA,EAAc,MAAA,EAAgB,OAAc,QAAA,EAAoB,CAAA;AAAA,IAC1E,KAAK,WAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,IAAA;AAAA;AAEb;AAEA,SAAS,cAAA,GAAiB;AACxB,EAAA,OAAO,EAAA;AAAA,IACL,6CAAA;AAAA,IACA,4BAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACEC,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,mDAAA,EACd,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,SAAS,MAAA,CAAO,IAAA;AAAA,oBACxBA,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,WAAW,cAAA,EAAe;AAAA,QAC1B,OAAO,KAAA,KAAU,MAAA,IAAa,UAAU,IAAA,GAAO,EAAA,GAAK,OAAO,KAAK,CAAA;AAAA,QAChE,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,KAAU,EAAA,GAAK,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,QAEvE,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAG,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,UACnB,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,wBACzBA,GAAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,IAAI,KAAA,EAChC,QAAA,EAAA,GAAA,CAAI,KAAA,EAAA,EADM,GAAA,CAAI,KAEjB,CACD;AAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAK,QAAmC,EAAC;AACxE,EAAA,uBACEC,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,mDAAA,EACd,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,SAAS,MAAA,CAAO,IAAA;AAAA,oBACxBD,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAQ,IAAA;AAAA,QACR,SAAA,EAAW,EAAA,CAAG,cAAA,EAAe,EAAG,6BAA6B,CAAA;AAAA,QAC7D,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,MAAM,CAAA;AAAA,QACrB,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,UAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,CAAA,CAAE,OAAO,eAAA,EAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA;AAChE,UAAA,QAAA,CAAS,IAAA,CAAK,MAAA,KAAW,CAAA,GAAI,IAAA,GAAO,IAAI,CAAA;AAAA,QAC1C,CAAA;AAAA,QAEC,iBAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,wBACzBA,GAAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,IAAI,KAAA,EAChC,QAAA,EAAA,GAAA,CAAI,KAAA,EAAA,EADM,GAAA,CAAI,KAEjB,CACD;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACEC,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,mDAAA,EACd,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,SAAS,MAAA,CAAO,IAAA;AAAA,oBACxBD,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,MAAA;AAAA,QACL,WAAW,cAAA,EAAe;AAAA,QAC1B,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,QAC3C,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,KAAU,EAAA,GAAK,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,KAAK;AAAA;AAAA;AACzE,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,UAAU,KAAA,KAAU,MAAA,IAAa,UAAU,IAAA,GAAO,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC5E,EAAA,uBACEC,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,mDAAA,EACd,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,SAAS,MAAA,CAAO,IAAA;AAAA,oBACxBA,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,WAAW,cAAA,EAAe;AAAA,QAC1B,KAAA,EAAO,OAAA;AAAA,QACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,UAAA,MAAM,CAAA,GAAI,EAAE,MAAA,CAAO,KAAA;AACnB,UAAA,QAAA,CAAS,CAAA,KAAM,KAAA,GAAQ,IAAA,GAAO,CAAC,CAAA;AAAA,QACjC,CAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,IAAC,QAAA,EAAA,EAAO,KAAA,EAAM,OAAO,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,YAAY,KAAA,EAAM,CAAA;AAAA,0BACpDA,IAAC,QAAA,EAAA,EAAO,KAAA,EAAM,QAAQ,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,aAAa,KAAA,EAAM,CAAA;AAAA,0BACtDA,IAAC,QAAA,EAAA,EAAO,KAAA,EAAM,SAAS,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,cAAc,IAAA,EAAK;AAAA;AAAA;AAAA;AACzD,GAAA,EACF,CAAA;AAEJ;ACxLO,SAAS,eAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA,GAAiB,CAAC,EAAA,EAAI,EAAA,EAAI,IAAI,GAAG,CAAA;AAAA,EACjC;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,IAAA,GAAA,CAAQ,IAAA,CAAK,WAAA,GAAc,CAAA,IAAK,KAAK,OAAA,GAAU,CAAA;AACrD,EAAA,MAAM,EAAA,GAAK,KAAK,GAAA,CAAI,IAAA,CAAK,cAAc,IAAA,CAAK,OAAA,EAAS,KAAK,KAAK,CAAA;AAC/D,EAAA,MAAM,OAAA,GAAU,KAAK,WAAA,IAAe,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,QAAA;AAExC,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,4FAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAA,EAAW,YAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EACb,eAAK,KAAA,KAAU,CAAA,GAAI,YAAA,GAAe,CAAA,EAAG,IAAI,CAAA,MAAA,EAAI,EAAE,CAAA,IAAA,EAAO,IAAA,CAAK,KAAK,CAAA,CAAA,EACnE,CAAA;AAAA,wBACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,eAAA,oBACCA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,uDAAA,EAAwD,QAAA,EAAA;AAAA,YAAA,UAAA;AAAA,4BAEvED,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,gEAAA;AAAA,gBACV,OAAO,IAAA,CAAK,OAAA;AAAA,gBACZ,QAAA,EAAU,CAAC,CAAA,KAAM,eAAA,CAAgB,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,gBAEtD,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,qBACnBA,GAAAA,CAAC,QAAA,EAAA,EAAe,KAAA,EAAO,CAAA,EACpB,QAAA,EAAA,CAAA,EAAA,EADU,CAEb,CACD;AAAA;AAAA;AACH,WAAA,EACF,CAAA;AAAA,0BAEFA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,QAAA,EAAU,OAAA;AAAA,cACV,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,CAAK,cAAc,CAAC,CAAA;AAAA,cAChD,YAAA,EAAW,eAAA;AAAA,cACZ,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACAC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,WAAA;AAAA,YAAY,KAAA;AAAA,YAAI,IAAA,CAAK;AAAA,WAAA,EAC7B,CAAA;AAAA,0BACAD,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,QAAA,EAAU,MAAA;AAAA,cACV,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,CAAK,cAAc,CAAC,CAAA;AAAA,cAChD,YAAA,EAAW,WAAA;AAAA,cACZ,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AC/DO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA,GAAgB,CAAA;AAAA,EAChB,WAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA,EAC3D,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,MAAA;AAAA,MACA;AAAA,KAAA,EACH,CAAA;AAAA,IACC,aAAA,GAAgB,qBACfA,IAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,sFAAA;AAAA,QACV,YAAA,EAAW,cAAA;AAAA,QAEX,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA;AAAA,YAAA,aAAA;AAAA,YAAc;AAAA,WAAA,EAAS,CAAA;AAAA,0BAC9DA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACZ,QAAA,EAAA;AAAA,YAAA,WAAA;AAAA,YACA,oCACCD,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,+CAAA;AAAA,gBACV,OAAA,EAAS,gBAAA;AAAA,gBACV,QAAA,EAAA;AAAA;AAAA;AAED,WAAA,EAEJ;AAAA;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ","file":"table.js","sourcesContent":["/**\n * `cn` — clsx + tailwind-merge.\n *\n * Joins class names and de-duplicates conflicting Tailwind utilities so\n * later values override earlier ones (e.g. `cn('p-2', 'p-4')` → `'p-4'`).\n */\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * Column cell renderers — one per `ColumnType` discriminant.\n *\n * `<TableCell column={column} value={...} record={...} />` dispatches on\n * `column.type` so DataTable stays free of polymorphic rendering. Cells\n * never reach into the network themselves; everything they need comes\n * from props serialised server-side.\n */\n\nimport type {\n BadgeColumnSchema,\n BooleanColumnSchema,\n ColumnSchema,\n ComputedColumnSchema,\n DateColumnSchema,\n IconColumnSchema,\n ImageColumnSchema,\n NumberColumnSchema,\n RelationshipColumnSchema,\n TextColumnSchema,\n} from '@arqel-dev/types/tables';\nimport { cn } from '../utils/cn.js';\n\nexport interface CellProps {\n column: ColumnSchema;\n value: unknown;\n}\n\nexport function TableCell({ column, value }: CellProps) {\n switch (column.type) {\n case 'text':\n return <TextCell column={column} value={value} />;\n case 'badge':\n return <BadgeCell column={column} value={value} />;\n case 'boolean':\n return <BooleanCell column={column} value={value} />;\n case 'date':\n return <DateCell column={column} value={value} />;\n case 'number':\n return <NumberCell column={column} value={value} />;\n case 'icon':\n return <IconCell column={column} />;\n case 'image':\n return <ImageCell column={column} value={value} />;\n case 'relationship':\n return <RelationshipCell column={column} value={value} />;\n case 'computed':\n return <ComputedCell column={column} value={value} />;\n }\n}\n\nfunction asString(value: unknown): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return JSON.stringify(value);\n}\n\nfunction TextCell({ column, value }: { column: TextColumnSchema; value: unknown }) {\n const str = asString(value);\n const truncated =\n column.props.truncate && str.length > column.props.truncate\n ? `${str.slice(0, column.props.truncate)}…`\n : str;\n return (\n <span\n className={cn(\n column.props.weight === 'bold' && 'font-bold',\n column.props.weight === 'medium' && 'font-medium',\n )}\n >\n {truncated}\n </span>\n );\n}\n\nfunction BadgeCell({ column, value }: { column: BadgeColumnSchema; value: unknown }) {\n const option = column.props.options?.find((o) => o.value === value);\n const label = option?.label ?? asString(value);\n return (\n <span\n className={cn(\n 'inline-flex items-center px-2 py-0.5 text-xs',\n column.props.pill ? 'rounded-full' : 'rounded-sm',\n 'bg-muted text-foreground',\n )}\n >\n {label}\n </span>\n );\n}\n\nfunction BooleanCell({ column, value }: { column: BooleanColumnSchema; value: unknown }) {\n const truthy = Boolean(value);\n return (\n <span role=\"img\" aria-label={truthy ? 'true' : 'false'}>\n {truthy ? (column.props.trueIcon ?? '✓') : (column.props.falseIcon ?? '—')}\n </span>\n );\n}\n\nfunction DateCell({ column, value }: { column: DateColumnSchema; value: unknown }) {\n if (!value) return <span className=\"text-muted-foreground\">—</span>;\n const raw = String(value);\n const date = new Date(raw);\n if (Number.isNaN(date.getTime())) return <span>{raw}</span>;\n if (column.props.mode === 'since') {\n return <time dateTime={date.toISOString()}>{formatRelative(date)}</time>;\n }\n if (column.props.mode === 'datetime') {\n return <time dateTime={date.toISOString()}>{date.toLocaleString()}</time>;\n }\n return <time dateTime={date.toISOString()}>{date.toLocaleDateString()}</time>;\n}\n\nfunction formatRelative(date: Date): string {\n const seconds = Math.round((Date.now() - date.getTime()) / 1000);\n if (seconds < 60) return `${seconds}s ago`;\n const minutes = Math.round(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.round(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.round(hours / 24);\n return `${days}d ago`;\n}\n\nfunction NumberCell({ column, value }: { column: NumberColumnSchema; value: unknown }) {\n if (value === null || value === undefined) return <span>—</span>;\n const num = typeof value === 'number' ? value : Number(value);\n if (Number.isNaN(num)) return <span>{asString(value)}</span>;\n const formatted = num.toFixed(column.props.decimals ?? 0);\n const [whole, dec] = formatted.split('.');\n const safeWhole = whole ?? '0';\n const ts = column.props.thousandsSeparator;\n const finalWhole = ts ? safeWhole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ts) : safeWhole;\n const ds = column.props.decimalSeparator ?? '.';\n return (\n <span>\n {column.props.prefix ?? ''}\n {finalWhole}\n {dec ? `${ds}${dec}` : ''}\n {column.props.suffix ?? ''}\n </span>\n );\n}\n\nfunction IconCell({ column }: { column: IconColumnSchema }) {\n return (\n <span role=\"img\" aria-label={column.props.icon} title={column.props.icon}>\n {column.props.icon}\n </span>\n );\n}\n\nfunction ImageCell({ column, value }: { column: ImageColumnSchema; value: unknown }) {\n const src = asString(value);\n if (!src) return null;\n const size = column.props.size ?? 32;\n return (\n <img\n src={src}\n alt=\"\"\n style={{ width: size, height: size }}\n className={cn(column.props.shape === 'circular' ? 'rounded-full' : 'rounded')}\n />\n );\n}\n\nfunction RelationshipCell({ column, value }: { column: RelationshipColumnSchema; value: unknown }) {\n if (value === null || value === undefined) return <span>—</span>;\n if (typeof value === 'object') {\n const attr = (value as Record<string, unknown>)[column.props.attribute];\n return <span>{asString(attr)}</span>;\n }\n return <span>{asString(value)}</span>;\n}\n\nfunction ComputedCell({ column, value }: { column: ComputedColumnSchema; value: unknown }) {\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground\">{column.props.placeholder ?? '—'}</span>;\n }\n return <span>{asString(value)}</span>;\n}\n","/**\n * `<DataTable>` — generic table built on TanStack Table v8.\n *\n * Columns come from `ColumnSchema[]` (server-emitted). Two structural\n * extras live outside the schema list: a leading selection checkbox\n * (when `enableSelection`) and a trailing actions cell (when\n * `rowActions` resolver is provided).\n *\n * Selection model is controlled — pass `selectedIds` + `onSelectionChange`\n * — so callers (ResourceIndex, custom dashboards) keep ownership. Shift+\n * click on a row checkbox selects the range from the last clicked row,\n * matching the canonical Filament/Linear UX.\n */\n\nimport type { ColumnSchema, SortDirection, TableSort } from '@arqel-dev/types/tables';\nimport { type ColumnDef, flexRender, getCoreRowModel, useReactTable } from '@tanstack/react-table';\nimport type { ReactNode } from 'react';\nimport { useCallback, useMemo, useRef } from 'react';\nimport { cn } from '../utils/cn.js';\nimport { TableCell } from './cells.js';\n\ntype RowId = string | number;\n\nexport interface DataTableRecord {\n id: RowId;\n [key: string]: unknown;\n}\n\nexport interface DataTableProps<TRecord extends DataTableRecord> {\n columns: ColumnSchema[];\n records: TRecord[];\n\n enableSelection?: boolean;\n selectedIds?: ReadonlyArray<RowId>;\n onSelectionChange?: ((ids: RowId[]) => void) | undefined;\n\n sort?: TableSort | null;\n onSortChange?: ((column: string, direction: SortDirection) => void) | undefined;\n\n rowActions?: ((record: TRecord) => ReactNode) | undefined;\n\n loading?: boolean;\n emptyState?: ReactNode;\n\n className?: string;\n}\n\nexport function DataTable<TRecord extends DataTableRecord>({\n columns,\n records,\n enableSelection = false,\n selectedIds = [],\n onSelectionChange,\n sort = null,\n onSortChange,\n rowActions,\n loading = false,\n emptyState,\n className,\n}: DataTableProps<TRecord>) {\n const lastClickedIndexRef = useRef<number | null>(null);\n\n const visibleColumns = useMemo(() => columns.filter((col) => !col.hidden), [columns]);\n\n const tableColumns = useMemo<ColumnDef<TRecord>[]>(\n () =>\n visibleColumns.map((col) => ({\n id: col.name,\n accessorFn: (row) => (row as Record<string, unknown>)[col.name],\n header: () => col.label ?? col.name,\n cell: (info) => <TableCell column={col} value={info.getValue()} />,\n enableSorting: col.sortable,\n })),\n [visibleColumns],\n );\n\n const table = useReactTable({\n data: records,\n columns: tableColumns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n const allSelected =\n enableSelection && records.length > 0 && selectedIds.length === records.length;\n const someSelected =\n enableSelection && selectedIds.length > 0 && selectedIds.length < records.length;\n\n const toggleAll = useCallback(() => {\n if (!onSelectionChange) return;\n if (allSelected) onSelectionChange([]);\n else onSelectionChange(records.map((r) => r.id));\n }, [allSelected, records, onSelectionChange]);\n\n const toggleRow = useCallback(\n (id: RowId, index: number, shiftKey: boolean) => {\n if (!onSelectionChange) return;\n const set = new Set<RowId>(selectedIds);\n const lastIndex = lastClickedIndexRef.current;\n\n if (shiftKey && lastIndex !== null) {\n const [from, to] = lastIndex < index ? [lastIndex, index] : [index, lastIndex];\n const shouldSelect = !set.has(id);\n for (let i = from; i <= to; i++) {\n const rowId = records[i]?.id;\n if (rowId === undefined) continue;\n if (shouldSelect) set.add(rowId);\n else set.delete(rowId);\n }\n } else if (set.has(id)) {\n set.delete(id);\n } else {\n set.add(id);\n }\n\n lastClickedIndexRef.current = index;\n onSelectionChange(Array.from(set));\n },\n [records, selectedIds, onSelectionChange],\n );\n\n const headerSortDirection = (columnName: string): SortDirection | null => {\n if (!sort || sort.column !== columnName) return null;\n return sort.direction === 'desc' ? 'desc' : 'asc';\n };\n\n return (\n <div className={cn('w-full overflow-x-auto', className)}>\n <table className=\"w-full border-collapse text-sm\">\n <thead className=\"sticky top-0 bg-background\">\n {table.getHeaderGroups().map((group) => (\n <tr key={group.id} className=\"border-b border-border\">\n {enableSelection && (\n <th scope=\"col\" className=\"w-10 px-3 py-2 text-left\">\n <input\n type=\"checkbox\"\n aria-label=\"Select all rows\"\n checked={allSelected}\n ref={(el) => {\n if (el) el.indeterminate = someSelected;\n }}\n onChange={toggleAll}\n />\n </th>\n )}\n {group.headers.map((header) => {\n const col = visibleColumns.find((c) => c.name === header.column.id);\n const sortable = col?.sortable && onSortChange;\n const direction = headerSortDirection(header.column.id);\n return (\n <th\n key={header.id}\n scope=\"col\"\n className={cn(\n 'px-3 py-2 text-left font-medium text-muted-foreground',\n col?.align === 'center' && 'text-center',\n col?.align === 'end' && 'text-right',\n )}\n aria-sort={\n direction === 'asc'\n ? 'ascending'\n : direction === 'desc'\n ? 'descending'\n : 'none'\n }\n >\n {sortable ? (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 hover:text-foreground\"\n onClick={() =>\n onSortChange(header.column.id, direction === 'asc' ? 'desc' : 'asc')\n }\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n <span aria-hidden=\"true\">\n {direction === 'asc' ? '▲' : direction === 'desc' ? '▼' : '↕'}\n </span>\n </button>\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n </th>\n );\n })}\n {rowActions && (\n <th scope=\"col\" className=\"w-24 px-3 py-2 text-right\" aria-label=\"Actions\" />\n )}\n </tr>\n ))}\n </thead>\n <tbody>\n {loading && (\n <tr>\n <td\n colSpan={visibleColumns.length + (enableSelection ? 1 : 0) + (rowActions ? 1 : 0)}\n className=\"px-3 py-4 text-center text-muted-foreground\"\n >\n Loading…\n </td>\n </tr>\n )}\n {!loading && records.length === 0 && (\n <tr>\n <td\n colSpan={visibleColumns.length + (enableSelection ? 1 : 0) + (rowActions ? 1 : 0)}\n className=\"px-3 py-8 text-center text-muted-foreground\"\n >\n {emptyState ?? 'No records found.'}\n </td>\n </tr>\n )}\n {!loading &&\n table.getRowModel().rows.map((row, index) => {\n const record = row.original;\n const checked = selectedIds.includes(record.id);\n return (\n <tr\n key={row.id}\n data-selected={checked || undefined}\n className={cn('border-b border-border', checked && 'bg-muted')}\n >\n {enableSelection && (\n <td className=\"w-10 px-3 py-2\">\n <input\n type=\"checkbox\"\n aria-label={`Select row ${record.id}`}\n checked={checked}\n onChange={(event) => {\n const native = event.nativeEvent as MouseEvent;\n toggleRow(record.id, index, native.shiftKey === true);\n }}\n />\n </td>\n )}\n {row.getVisibleCells().map((cell) => {\n const col = visibleColumns.find((c) => c.name === cell.column.id);\n return (\n <td\n key={cell.id}\n className={cn(\n 'px-3 py-2',\n col?.align === 'center' && 'text-center',\n col?.align === 'end' && 'text-right',\n col?.hiddenOnMobile && 'hidden md:table-cell',\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n );\n })}\n {rowActions && (\n <td className=\"w-24 px-3 py-2 text-right\">{rowActions(record)}</td>\n )}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@/utils/cn\"\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","/**\n * `<TableFilters>` — renders one input per `FilterSchema` and emits\n * a single `onChange(name, value)` callback. Active values render as\n * dismissible chips so users can read state without re-opening menus.\n *\n * Phase 1 covers the four most-used filter types (select, multiSelect,\n * text, ternary). dateRange / scope land alongside FieldRenderer in\n * UI-004, where the date primitives ship.\n */\n\nimport type {\n FilterSchema,\n MultiSelectFilterSchema,\n SelectFilterSchema,\n TernaryFilterSchema,\n TextFilterSchema,\n} from '@arqel-dev/types/tables';\nimport { Button } from '../action/Button.js';\nimport { cn } from '../utils/cn.js';\n\nexport interface TableFiltersProps {\n filters: FilterSchema[];\n values: Record<string, unknown>;\n onChange: (name: string, value: unknown) => void;\n onClearAll?: (() => void) | undefined;\n className?: string | undefined;\n}\n\nexport function TableFilters({\n filters,\n values,\n onChange,\n onClearAll,\n className,\n}: TableFiltersProps) {\n if (filters.length === 0) return null;\n\n const activeCount = filters.reduce((acc, f) => {\n const v = values[f.name];\n return v !== undefined && v !== null && v !== '' ? acc + 1 : acc;\n }, 0);\n\n return (\n <fieldset className={cn('flex flex-wrap items-end gap-2 border-0 p-0', className)}>\n <legend className=\"sr-only\">Filters</legend>\n {filters.map((filter) => (\n <FilterControl\n key={filter.name}\n filter={filter}\n value={values[filter.name]}\n onChange={(v) => onChange(filter.name, v)}\n />\n ))}\n {activeCount > 0 && onClearAll && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onClearAll}>\n Clear filters ({activeCount})\n </Button>\n )}\n </fieldset>\n );\n}\n\nfunction FilterControl({\n filter,\n value,\n onChange,\n}: {\n filter: FilterSchema;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n switch (filter.type) {\n case 'select':\n return <SelectFilter filter={filter} value={value} onChange={onChange} />;\n case 'multiSelect':\n return <MultiSelectFilter filter={filter} value={value} onChange={onChange} />;\n case 'text':\n return <TextFilter filter={filter} value={value} onChange={onChange} />;\n case 'ternary':\n return <TernaryFilter filter={filter} value={value} onChange={onChange} />;\n case 'dateRange':\n case 'scope':\n return null;\n }\n}\n\nfunction controlClasses() {\n return cn(\n 'h-9 rounded-sm border border-[var(--input)]',\n 'bg-background px-3 text-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n );\n}\n\nfunction SelectFilter({\n filter,\n value,\n onChange,\n}: {\n filter: SelectFilterSchema;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n return (\n <label className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n {filter.label ?? filter.name}\n <select\n className={controlClasses()}\n value={value === undefined || value === null ? '' : String(value)}\n onChange={(e) => onChange(e.target.value === '' ? null : e.target.value)}\n >\n <option value=\"\">All</option>\n {filter.props.options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\nfunction MultiSelectFilter({\n filter,\n value,\n onChange,\n}: {\n filter: MultiSelectFilterSchema;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const arr = Array.isArray(value) ? (value as Array<string | number>) : [];\n return (\n <label className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n {filter.label ?? filter.name}\n <select\n multiple\n className={cn(controlClasses(), 'h-auto min-h-[2.25rem] py-1')}\n value={arr.map(String)}\n onChange={(e) => {\n const next = Array.from(e.target.selectedOptions, (o) => o.value);\n onChange(next.length === 0 ? null : next);\n }}\n >\n {filter.props.options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\nfunction TextFilter({\n filter,\n value,\n onChange,\n}: {\n filter: TextFilterSchema;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n return (\n <label className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n {filter.label ?? filter.name}\n <input\n type=\"text\"\n className={controlClasses()}\n value={typeof value === 'string' ? value : ''}\n onChange={(e) => onChange(e.target.value === '' ? null : e.target.value)}\n />\n </label>\n );\n}\n\nfunction TernaryFilter({\n filter,\n value,\n onChange,\n}: {\n filter: TernaryFilterSchema;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const current = value === undefined || value === null ? 'all' : String(value);\n return (\n <label className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n {filter.label ?? filter.name}\n <select\n className={controlClasses()}\n value={current}\n onChange={(e) => {\n const v = e.target.value;\n onChange(v === 'all' ? null : v);\n }}\n >\n <option value=\"all\">{filter.props.allLabel ?? 'All'}</option>\n <option value=\"true\">{filter.props.trueLabel ?? 'Yes'}</option>\n <option value=\"false\">{filter.props.falseLabel ?? 'No'}</option>\n </select>\n </label>\n );\n}\n","/**\n * `<TablePagination>` — prev/next + range + per-page picker.\n *\n * Stateless: parent owns `currentPage` / `perPage` and handles transitions\n * (typically via Inertia `router.get` with `preserveState: true`).\n */\n\nimport type { PaginationMeta } from '@arqel-dev/types/resources';\nimport { Button } from '../action/Button.js';\nimport { cn } from '../utils/cn.js';\n\nexport interface TablePaginationProps {\n meta: PaginationMeta;\n onPageChange: (page: number) => void;\n onPerPageChange?: ((perPage: number) => void) | undefined;\n perPageOptions?: number[];\n className?: string;\n}\n\nexport function TablePagination({\n meta,\n onPageChange,\n onPerPageChange,\n perPageOptions = [10, 25, 50, 100],\n className,\n}: TablePaginationProps) {\n const from = (meta.currentPage - 1) * meta.perPage + 1;\n const to = Math.min(meta.currentPage * meta.perPage, meta.total);\n const isFirst = meta.currentPage <= 1;\n const isLast = meta.currentPage >= meta.lastPage;\n\n return (\n <nav\n className={cn(\n 'flex flex-wrap items-center justify-between gap-2 border-t border-border px-3 py-2 text-sm',\n className,\n )}\n aria-label=\"Pagination\"\n >\n <span className=\"text-muted-foreground\">\n {meta.total === 0 ? 'No results' : `${from}–${to} of ${meta.total}`}\n </span>\n <div className=\"flex items-center gap-2\">\n {onPerPageChange && (\n <label className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n Per page\n <select\n className=\"h-8 rounded-sm border border-[var(--input)] bg-background px-2\"\n value={meta.perPage}\n onChange={(e) => onPerPageChange(Number(e.target.value))}\n >\n {perPageOptions.map((n) => (\n <option key={n} value={n}>\n {n}\n </option>\n ))}\n </select>\n </label>\n )}\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={isFirst}\n onClick={() => onPageChange(meta.currentPage - 1)}\n aria-label=\"Previous page\"\n >\n Prev\n </Button>\n <span className=\"text-xs text-muted-foreground\">\n {meta.currentPage} / {meta.lastPage}\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={isLast}\n onClick={() => onPageChange(meta.currentPage + 1)}\n aria-label=\"Next page\"\n >\n Next\n </Button>\n </div>\n </nav>\n );\n}\n","/**\n * `<TableToolbar>` — search input + filters + bulk-action bar slot.\n *\n * The bulk-action bar appears only when `selectedCount > 0`. ResourceIndex\n * passes `bulkActions` rendered as a row of buttons; the toolbar just\n * positions them.\n */\n\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface TableToolbarProps {\n search?: ReactNode;\n filters?: ReactNode;\n selectedCount?: number;\n bulkActions?: ReactNode;\n onClearSelection?: (() => void) | undefined;\n className?: string;\n}\n\nexport function TableToolbar({\n search,\n filters,\n selectedCount = 0,\n bulkActions,\n onClearSelection,\n className,\n}: TableToolbarProps) {\n return (\n <div className={cn('flex flex-col gap-3 px-3 py-3', className)}>\n <div className=\"flex flex-wrap items-end gap-2\">\n {search}\n {filters}\n </div>\n {selectedCount > 0 && (\n <section\n className=\"flex flex-wrap items-center gap-2 rounded-sm border border-border bg-muted px-3 py-2\"\n aria-label=\"Bulk actions\"\n >\n <span className=\"text-sm font-medium\">{selectedCount} selected</span>\n <div className=\"ml-auto flex flex-wrap items-center gap-2\">\n {bulkActions}\n {onClearSelection && (\n <button\n type=\"button\"\n className=\"text-sm text-muted-foreground hover:underline\"\n onClick={onClearSelection}\n >\n Clear\n </button>\n )}\n </div>\n </section>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"table.js"}
|
package/dist/utility.js
CHANGED
|
@@ -1,106 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
// src/utility/Breadcrumbs.tsx
|
|
7
|
-
function cn(...inputs) {
|
|
8
|
-
return twMerge(clsx(inputs));
|
|
9
|
-
}
|
|
10
|
-
function Breadcrumbs(props) {
|
|
11
|
-
if (props.items === void 0) {
|
|
12
|
-
return /* @__PURE__ */ jsx(SharedBreadcrumbs, { ...props });
|
|
13
|
-
}
|
|
14
|
-
return /* @__PURE__ */ jsx(BreadcrumbsList, { ...props, items: props.items });
|
|
15
|
-
}
|
|
16
|
-
function SharedBreadcrumbs(props) {
|
|
17
|
-
const page = usePage();
|
|
18
|
-
const items = page.props.panel?.breadcrumbs ?? [];
|
|
19
|
-
return /* @__PURE__ */ jsx(BreadcrumbsList, { ...props, items });
|
|
20
|
-
}
|
|
21
|
-
function BreadcrumbsList({
|
|
22
|
-
items,
|
|
23
|
-
separator = /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "/" }),
|
|
24
|
-
className
|
|
25
|
-
}) {
|
|
26
|
-
if (items.length === 0) return null;
|
|
27
|
-
return /* @__PURE__ */ jsx("nav", { "aria-label": "Breadcrumb", className: cn("text-sm", className), children: /* @__PURE__ */ jsx("ol", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: items.map((item, index) => {
|
|
28
|
-
const isLast = index === items.length - 1;
|
|
29
|
-
return /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2", children: [
|
|
30
|
-
isLast || !item.url ? /* @__PURE__ */ jsx("span", { "aria-current": isLast ? "page" : void 0, className: "text-foreground", children: item.label }) : /* @__PURE__ */ jsx("a", { href: item.url, className: "hover:underline", children: item.label }),
|
|
31
|
-
!isLast && separator
|
|
32
|
-
] }, `${item.label}-${item.url ?? "leaf"}`);
|
|
33
|
-
}) }) });
|
|
34
|
-
}
|
|
35
|
-
function EmptyState({ title, description, icon, action, className }) {
|
|
36
|
-
return /* @__PURE__ */ jsxs(
|
|
37
|
-
"div",
|
|
38
|
-
{
|
|
39
|
-
className: cn(
|
|
40
|
-
"flex flex-col items-center gap-3 px-4 py-12 text-center text-muted-foreground",
|
|
41
|
-
className
|
|
42
|
-
),
|
|
43
|
-
children: [
|
|
44
|
-
icon && /* @__PURE__ */ jsx("div", { className: "text-3xl", children: icon }),
|
|
45
|
-
/* @__PURE__ */ jsx("h2", { className: "text-base font-semibold text-foreground", children: title }),
|
|
46
|
-
description && /* @__PURE__ */ jsx("p", { className: "max-w-md text-sm", children: description }),
|
|
47
|
-
action && /* @__PURE__ */ jsx("div", { className: "mt-2", children: action })
|
|
48
|
-
]
|
|
49
|
-
}
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
function ErrorState({ status, title, description, action, className }) {
|
|
53
|
-
return /* @__PURE__ */ jsxs(
|
|
54
|
-
"div",
|
|
55
|
-
{
|
|
56
|
-
role: "alert",
|
|
57
|
-
className: cn("flex flex-col items-center gap-3 px-4 py-16 text-center", className),
|
|
58
|
-
children: [
|
|
59
|
-
status && /* @__PURE__ */ jsx("span", { className: "text-sm font-mono text-muted-foreground", children: status }),
|
|
60
|
-
/* @__PURE__ */ jsx("h1", { className: "text-2xl font-semibold tracking-tight", children: title }),
|
|
61
|
-
description && /* @__PURE__ */ jsx("p", { className: "max-w-md text-sm text-muted-foreground", children: description }),
|
|
62
|
-
action && /* @__PURE__ */ jsx("div", { className: "mt-2", children: action })
|
|
63
|
-
]
|
|
64
|
-
}
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
var VARIANT_CLASSES = {
|
|
68
|
-
line: "h-4 w-full",
|
|
69
|
-
block: "h-24 w-full",
|
|
70
|
-
circle: "h-10 w-10 rounded-full"
|
|
71
|
-
};
|
|
72
|
-
function LoadingSkeleton({
|
|
73
|
-
variant = "line",
|
|
74
|
-
width,
|
|
75
|
-
height,
|
|
76
|
-
count = 1,
|
|
77
|
-
className
|
|
78
|
-
}) {
|
|
79
|
-
const items = Array.from({ length: count }, (_, i) => i);
|
|
80
|
-
return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", "aria-hidden": "true", children: items.map((i) => /* @__PURE__ */ jsx(
|
|
81
|
-
"div",
|
|
82
|
-
{
|
|
83
|
-
style: { width, height },
|
|
84
|
-
className: cn(
|
|
85
|
-
"animate-pulse bg-muted",
|
|
86
|
-
variant !== "circle" && "rounded-sm",
|
|
87
|
-
VARIANT_CLASSES[variant],
|
|
88
|
-
className
|
|
89
|
-
)
|
|
90
|
-
},
|
|
91
|
-
i
|
|
92
|
-
)) });
|
|
93
|
-
}
|
|
94
|
-
function PageHeader({ title, description, actions, className }) {
|
|
95
|
-
return /* @__PURE__ */ jsxs("header", { className: cn("flex flex-wrap items-start gap-4", className), children: [
|
|
96
|
-
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
97
|
-
/* @__PURE__ */ jsx("h1", { className: "text-2xl font-semibold tracking-tight", children: title }),
|
|
98
|
-
description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: description })
|
|
99
|
-
] }),
|
|
100
|
-
actions && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-2", children: actions })
|
|
101
|
-
] });
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export { Breadcrumbs, EmptyState, ErrorState, LoadingSkeleton, PageHeader };
|
|
1
|
+
export { Breadcrumbs, EmptyState, ErrorState, LoadingSkeleton } from './chunk-MTNFFSVA.js';
|
|
2
|
+
export { PageHeader } from './chunk-MXUXMHOK.js';
|
|
3
|
+
import './chunk-B7ULUJVO.js';
|
|
105
4
|
//# sourceMappingURL=utility.js.map
|
|
106
5
|
//# sourceMappingURL=utility.js.map
|
package/dist/utility.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/utility/Breadcrumbs.tsx","../src/utility/EmptyState.tsx","../src/utility/ErrorState.tsx","../src/utility/LoadingSkeleton.tsx","../src/utility/PageHeader.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"utility.js","sourcesContent":["/**\n * `cn` — clsx + tailwind-merge.\n *\n * Joins class names and de-duplicates conflicting Tailwind utilities so\n * later values override earlier ones (e.g. `cn('p-2', 'p-4')` → `'p-4'`).\n */\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * `<Breadcrumbs>` — renders the panel's breadcrumb trail.\n *\n * Items can be passed explicitly, or auto-resolved from Inertia shared\n * props (`panel.breadcrumbs`, populated server-side by\n * `Arqel\\Nav\\BreadcrumbsBuilder`). Each item is a link unless it's the\n * last entry, which is rendered as plain text and marked\n * `aria-current=\"page\"`.\n *\n * `usePage()` is only invoked when `items` is omitted — explicit-items\n * usage works outside Inertia (e.g. dashboard widgets, tests).\n */\n\nimport { usePage } from '@inertiajs/react';\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface BreadcrumbItem {\n label: string;\n url?: string | null;\n}\n\nexport interface BreadcrumbsProps {\n items?: BreadcrumbItem[];\n separator?: ReactNode;\n className?: string;\n}\n\ninterface PanelWithCrumbs {\n panel?: { breadcrumbs?: BreadcrumbItem[] } | null;\n}\n\nexport function Breadcrumbs(props: BreadcrumbsProps) {\n if (props.items === undefined) {\n return <SharedBreadcrumbs {...props} />;\n }\n return <BreadcrumbsList {...props} items={props.items} />;\n}\n\nfunction SharedBreadcrumbs(props: BreadcrumbsProps) {\n const page = usePage();\n const items = (page.props as unknown as PanelWithCrumbs).panel?.breadcrumbs ?? [];\n return <BreadcrumbsList {...props} items={items} />;\n}\n\nfunction BreadcrumbsList({\n items,\n separator = <span aria-hidden=\"true\">/</span>,\n className,\n}: BreadcrumbsProps & { items: BreadcrumbItem[] }) {\n if (items.length === 0) return null;\n\n return (\n <nav aria-label=\"Breadcrumb\" className={cn('text-sm', className)}>\n <ol className=\"flex flex-wrap items-center gap-2 text-muted-foreground\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={`${item.label}-${item.url ?? 'leaf'}`} className=\"flex items-center gap-2\">\n {isLast || !item.url ? (\n <span aria-current={isLast ? 'page' : undefined} className=\"text-foreground\">\n {item.label}\n </span>\n ) : (\n <a href={item.url} className=\"hover:underline\">\n {item.label}\n </a>\n )}\n {!isLast && separator}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","/**\n * `<EmptyState>` — standardised empty-state block.\n *\n * Used by DataTable's empty slot and as a stand-alone fallback when\n * a resource collection has zero records.\n */\n\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface EmptyStateProps {\n title: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n action?: ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ title, description, icon, action, className }: EmptyStateProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center gap-3 px-4 py-12 text-center text-muted-foreground',\n className,\n )}\n >\n {icon && <div className=\"text-3xl\">{icon}</div>}\n <h2 className=\"text-base font-semibold text-foreground\">{title}</h2>\n {description && <p className=\"max-w-md text-sm\">{description}</p>}\n {action && <div className=\"mt-2\">{action}</div>}\n </div>\n );\n}\n","/**\n * `<ErrorState>` — generic error block (404 / 403 / 500).\n *\n * Phase 1 ships a plain layout; richer illustrations / Heroicons land\n * with `@arqel-dev/fields` icon registry.\n */\n\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface ErrorStateProps {\n status?: number;\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n className?: string;\n}\n\nexport function ErrorState({ status, title, description, action, className }: ErrorStateProps) {\n return (\n <div\n role=\"alert\"\n className={cn('flex flex-col items-center gap-3 px-4 py-16 text-center', className)}\n >\n {status && <span className=\"text-sm font-mono text-muted-foreground\">{status}</span>}\n <h1 className=\"text-2xl font-semibold tracking-tight\">{title}</h1>\n {description && <p className=\"max-w-md text-sm text-muted-foreground\">{description}</p>}\n {action && <div className=\"mt-2\">{action}</div>}\n </div>\n );\n}\n","/**\n * `<LoadingSkeleton>` — animated placeholder block.\n *\n * Variants:\n * - `line`: single text line (default)\n * - `block`: rectangular block (cards, hero areas)\n * - `circle`: circular (avatars)\n *\n * Heights / widths default to readable values; override via Tailwind\n * classes or explicit `height` / `width` props for bespoke layouts.\n */\n\nimport { cn } from '../utils/cn.js';\n\nexport type SkeletonVariant = 'line' | 'block' | 'circle';\n\nexport interface LoadingSkeletonProps {\n variant?: SkeletonVariant;\n width?: number | string;\n height?: number | string;\n count?: number;\n className?: string;\n}\n\nconst VARIANT_CLASSES: Record<SkeletonVariant, string> = {\n line: 'h-4 w-full',\n block: 'h-24 w-full',\n circle: 'h-10 w-10 rounded-full',\n};\n\nexport function LoadingSkeleton({\n variant = 'line',\n width,\n height,\n count = 1,\n className,\n}: LoadingSkeletonProps) {\n const items = Array.from({ length: count }, (_, i) => i);\n return (\n <div className=\"flex flex-col gap-2\" aria-hidden=\"true\">\n {items.map((i) => (\n <div\n key={i}\n style={{ width, height }}\n className={cn(\n 'animate-pulse bg-muted',\n variant !== 'circle' && 'rounded-sm',\n VARIANT_CLASSES[variant],\n className,\n )}\n />\n ))}\n </div>\n );\n}\n","/**\n * `<PageHeader>` — title + optional description + action slot.\n *\n * Used at the top of Resource pages right under `<Breadcrumbs>`. Pass\n * `actions` to render a row of buttons aligned right.\n */\n\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface PageHeaderProps {\n title: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n className?: string;\n}\n\nexport function PageHeader({ title, description, actions, className }: PageHeaderProps) {\n return (\n <header className={cn('flex flex-wrap items-start gap-4', className)}>\n <div className=\"min-w-0 flex-1\">\n <h1 className=\"text-2xl font-semibold tracking-tight\">{title}</h1>\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </div>\n {actions && <div className=\"flex flex-wrap items-center gap-2\">{actions}</div>}\n </header>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"utility.js"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
export { c as cn } from './cn-By8XWiSA.js';
|
|
2
|
+
import { icons } from 'lucide-react';
|
|
3
|
+
import 'clsx';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
|
-
*
|
|
6
|
+
* Resolve a lucide icon NAME to its React component.
|
|
5
7
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
+
* Producers (PHP `getNavigationIcon()`, `IconColumn`, badge icon maps) emit
|
|
9
|
+
* kebab-case lucide names like `'file-text'` or `'life-buoy'`. lucide-react
|
|
10
|
+
* exposes components in PascalCase under the `icons` map, so we normalise the
|
|
11
|
+
* name (`'file-text'` → `'FileText'`) before lookup. Returns `undefined` for an
|
|
12
|
+
* unknown or empty name so callers can render a graceful fallback.
|
|
8
13
|
*/
|
|
9
14
|
|
|
10
|
-
|
|
15
|
+
type LucideIconComponent = (typeof icons)[keyof typeof icons];
|
|
16
|
+
declare function resolveLucideIcon(name: string | null | undefined): LucideIconComponent | undefined;
|
|
11
17
|
|
|
12
|
-
export {
|
|
18
|
+
export { type LucideIconComponent, resolveLucideIcon };
|
package/dist/utils.js
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// src/utils/cn.ts
|
|
5
|
-
function cn(...inputs) {
|
|
6
|
-
return twMerge(clsx(inputs));
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export { cn };
|
|
1
|
+
export { resolveLucideIcon } from './chunk-RMPOR2YZ.js';
|
|
2
|
+
export { cn } from './chunk-B7ULUJVO.js';
|
|
10
3
|
//# sourceMappingURL=utils.js.map
|
|
11
4
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"utils.js"}
|
package/dist/widgets.d.ts
CHANGED
|
@@ -87,10 +87,15 @@ declare function DashboardFilters({ filters, values, onChange, className }: Dash
|
|
|
87
87
|
* `null`, fetch once on mount.
|
|
88
88
|
*
|
|
89
89
|
* Both call the canonical endpoint
|
|
90
|
-
* `/admin/dashboards/{dashboardId}/widgets/{widgetId}/data
|
|
91
|
-
*
|
|
90
|
+
* `/admin/dashboards/{dashboardId}/widgets/{widgetId}/data`. The
|
|
91
|
+
* controller wraps the payload under `{ data: ... }`, so `doFetch`
|
|
92
|
+
* unwraps that envelope before storing — the resulting shape matches
|
|
93
|
+
* the SSR / Inertia path, which already seeds from `widget.data`. The
|
|
94
|
+
* active `DashboardFilters` selection is forwarded as `filters[k]=v`
|
|
95
|
+
* query params so deferred / poll refetches stay segmented.
|
|
92
96
|
*/
|
|
93
97
|
interface WidgetPayload {
|
|
98
|
+
id?: string;
|
|
94
99
|
name: string;
|
|
95
100
|
type: string;
|
|
96
101
|
component?: string;
|