@arqel-dev/ui 0.9.4 → 0.10.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/dist/pages.js +4 -2
- package/dist/pages.js.map +1 -1
- package/package.json +6 -6
package/dist/pages.js
CHANGED
|
@@ -771,7 +771,8 @@ function ArqelCreatePage() {
|
|
|
771
771
|
const submit = (e) => {
|
|
772
772
|
e.preventDefault();
|
|
773
773
|
const slug = props.resource?.slug ?? "";
|
|
774
|
-
|
|
774
|
+
const basePath = props.resource?.panelPath ?? "/admin";
|
|
775
|
+
router.post(`${basePath}/${slug}`, form.data, {
|
|
775
776
|
preserveScroll: true
|
|
776
777
|
});
|
|
777
778
|
};
|
|
@@ -824,7 +825,8 @@ function ArqelEditPage() {
|
|
|
824
825
|
e.preventDefault();
|
|
825
826
|
const id = String(record?.id ?? "");
|
|
826
827
|
const slug = props.resource?.slug ?? "";
|
|
827
|
-
|
|
828
|
+
const basePath = props.resource?.panelPath ?? "/admin";
|
|
829
|
+
router.put(`${basePath}/${slug}/${id}`, form.data, {
|
|
828
830
|
preserveScroll: true
|
|
829
831
|
});
|
|
830
832
|
};
|
package/dist/pages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/shadcn/ui/button.tsx","../src/action/Button.tsx","../src/form/FormActions.tsx","../src/form/FieldRegistry.tsx","../src/form/nativeFields.tsx","../src/form/FieldRenderer.tsx","../src/form/FormFieldset.tsx","../src/form/FormGrid.tsx","../src/form/FormSection.tsx","../src/form/FormTabs.tsx","../src/form/FormRenderer.tsx","../src/utility/PageHeader.tsx","../src/pages/ArqelCreatePage.tsx","../src/pages/ArqelEditPage.tsx","../src/shadcn/ui/dropdown-menu.tsx","../src/shadcn/ui/dialog.tsx","../src/action/ActionFormModal.tsx","../src/action/ConfirmDialog.tsx","../src/action/ActionButton.tsx","../src/action/ActionMenu.tsx","../src/table/cells.tsx","../src/table/DataTable.tsx","../src/table/TableFilters.tsx","../src/table/TablePagination.tsx","../src/table/TableToolbar.tsx","../src/resource/ResourceIndex.tsx","../src/pages/ArqelIndexPage.tsx","../src/pages/ArqelShowPage.tsx","../src/pages/index.ts"],"names":["jsx","jsxs","useState","useId","usePage","FALLBACK_SCHEMA","useArqelForm","router","DropdownMenuPrimitive","DialogPrimitive","Fragment","useRef","useMemo","useEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAUO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;AAZA,IAAA,OAAA,GAAA,KAAA,CAAA;AAAA,EAAA,iBAAA,GAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACwCA,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,uBACE,GAAA;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;AA7DA,IAMM,cAAA;AANN,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0BAAA,GAAA;AAIA,IAAA,OAAA,EAAA;AAEA,IAAM,cAAA,GAAiB,GAAA;AAAA,MACrB,6bAAA;AAAA,MACA;AAAA,QACE,QAAA,EAAU;AAAA,UACR,OAAA,EAAS;AAAA,YACP,OAAA,EAAS,wDAAA;AAAA,YACT,WAAA,EACE,mJAAA;AAAA,YACF,OAAA,EACE,uIAAA;AAAA,YACF,SAAA,EACE,8DAAA;AAAA,YACF,KAAA,EACE,sEAAA;AAAA,YACF,IAAA,EAAM;AAAA,WACR;AAAA,UACA,IAAA,EAAM;AAAA,YACJ,OAAA,EAAS,+BAAA;AAAA,YACT,EAAA,EAAI,0FAAA;AAAA,YACJ,EAAA,EAAI,+CAAA;AAAA,YACJ,EAAA,EAAI,sCAAA;AAAA,YACJ,IAAA,EAAM,QAAA;AAAA,YACN,SAAA,EAAW,wDAAA;AAAA,YACX,SAAA,EAAW,QAAA;AAAA,YACX,SAAA,EAAW;AAAA;AACb,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,OAAA,EAAS,SAAA;AAAA,UACT,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtCA,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uBAAA,GAAA;AAaA,IAAA,WAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACSO,SAAS,WAAA,CAAY;AAAA,EAC1B,WAAA,GAAc,MAAA;AAAA,EACd,WAAA,GAAc,QAAA;AAAA,EACd,QAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX,KAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,2EAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,KAAA,oBAASA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QACzC,QAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAQ,OAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,UAAA,EAChE,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,wBAEFA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,UAAU,UAAA,IAAc,QAAA,EAC3C,QAAA,EAAA,UAAA,GAAa,cAAA,GAAY,WAAA,EAC5B;AAAA;AAAA;AAAA,GACF;AAEJ;AAjDA,IAAA,gBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0BAAA,GAAA;AASA,IAAA,WAAA,EAAA;AACA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACWO,SAAS,kBAAkB,IAAA,EAA0C;AAC1E,EAAA,OAAO,QAAA,CAAS,IAAI,IAAI,CAAA;AAC1B;AAvBA,IAeM,QAAA;AAfN,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4BAAA,GAAA;AAeA,IAAM,QAAA,uBAAe,GAAA,EAA4B;AAAA,EAAA;AAAA,CAAA,CAAA;AC8B1C,SAAS,iBAAiB,KAAA,EAAoB;AACnD,EAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAElB,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAU,GAAG,OAAO,KAAA,EAAc,CAAA;AAAA,IAC5C,KAAK,UAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAU,GAAG,OAAO,KAAA,EAAc,CAAA;AAAA,IAC5C,KAAK,QAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAG,OAAO,KAAA,EAAc,CAAA;AAAA,IAChD,KAAK,SAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAU,GAAG,OAAO,KAAA,EAAc,CAAA;AAAA,IAC5C,KAAK,QAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,WAAA,EAAA,EAAa,GAAG,OAAO,KAAA,EAAc,CAAA;AAAA,IAC/C,KAAK,aAAA;AAAA,IACL,KAAK,SAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,OAAO,KAAA,EAAc,CAAA;AAAA,IACpD,KAAK,OAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,OAAO,KAAA,EAAc,CAAA;AAAA,IAC9C,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,cAAA,EAAA,EAAgB,GAAG,OAAO,KAAA,EAAc,CAAA;AAAA,IAClD,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAW,GAAG,OAAO,KAAA,EAAc,CAAA;AAAA,IAC7C,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAAA,IAC/B;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAWA,SAAS,QAAA,CAAS;AAAA,EAChB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAA2C;AACzC,EAAA,MAAM,QAAA,GACJ,KAAA,CAAM,IAAA,KAAS,OAAA,GACX,OAAA,GACA,KAAA,CAAM,IAAA,KAAS,UAAA,GACb,UAAA,GACA,KAAA,CAAM,IAAA,KAAS,KAAA,GACb,KAAA,GACA,MAAA;AACV,EAAA,MAAM,UAAA,GAAa,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA;AACvD,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,SAAA,EAAW,YAAA;AAAA,MACX,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,SAAU,KAAA,IAAS,EAAA,GAAK,UAAS,IAAK,EAAA;AAAA,MACzE,WAAA,EAAa,MAAM,WAAA,IAAe,MAAA;AAAA,MAClC,QAAA,EAAU,UAAA;AAAA,MACV,QAAA,EAAU,MAAM,QAAA,KAAa,IAAA;AAAA,MAC7B,QAAA,EAAU,MAAM,QAAA,KAAa,IAAA;AAAA,MAC7B,kBAAA,EAAkB,WAAA;AAAA,MAClB,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,GAC1C;AAEJ;AAEA,SAAS,QAAA,CAAS;AAAA,EAChB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAiD;AAC/C,EAAA,uBACEA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,0BAA0B,CAAA;AAAA,MACtD,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,MAC3C,WAAA,EAAa,MAAM,WAAA,IAAe,MAAA;AAAA,MAClC,QAAA,EAAU,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,MAC9C,QAAA,EAAU,MAAM,QAAA,KAAa,IAAA;AAAA,MAC7B,QAAA,EAAU,MAAM,QAAA,KAAa,IAAA;AAAA,MAC7B,IAAA,EAAM,CAAA;AAAA,MACN,kBAAA,EAAkB,WAAA;AAAA,MAClB,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,GAC1C;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAqE;AACnE,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAW,YAAA;AAAA,MACX,OAAO,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,GAAY,EAAA,GAAK,OAAO,KAAK,CAAA;AAAA,MAChE,WAAA,EAAa,MAAM,WAAA,IAAe,MAAA;AAAA,MAClC,QAAA,EAAU,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,MAC9C,QAAA,EAAU,MAAM,QAAA,KAAa,IAAA;AAAA,MAC7B,QAAA,EAAU,MAAM,QAAA,KAAa,IAAA;AAAA,MAC7B,kBAAA,EAAkB,WAAA;AAAA,MAClB,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,MAAM,GAAA,GAAM,EAAE,MAAA,CAAO,KAAA;AACrB,QAAA,IAAI,QAAQ,EAAA,EAAI;AACd,UAAA,QAAA,CAAS,IAAI,CAAA;AACb,UAAA;AAAA,QACF;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,OAAO,GAAG,CAAA;AAAA,MACzC;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,QAAA,CAAS;AAAA,EAChB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAoE;AAClE,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAU,uCAAA;AAAA,MACV,SAAS,KAAA,KAAU,IAAA;AAAA,MACnB,QAAA,EAAU,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,MAC9C,kBAAA,EAAkB,WAAA;AAAA,MAClB,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,OAAO;AAAA;AAAA,GAC5C;AAEJ;AAEA,SAAS,iBACP,OAAA,EACkD;AAClD,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAC;AACtB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,OAAA;AACnC,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,KAAK,CAAA,MAAO,EAAE,KAAA,EAAO,OAAM,CAAE,CAAA;AAC3E;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAA+C;AAC7C,EAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA;AACpD,EAAA,uBACEC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,SAAA,EAAW,YAAA;AAAA,MACX,OAAO,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,GAAY,EAAA,GAAK,OAAO,KAAK,CAAA;AAAA,MAChE,QAAA,EAAU,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,MAC9C,QAAA,EAAU,MAAM,QAAA,KAAa,IAAA;AAAA,MAC7B,kBAAA,EAAkB,WAAA;AAAA,MAClB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,KAAU,EAAA,GAAK,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,MAEtE,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,+BAAeD,GAAAA,CAAC,YAAO,KAAA,EAAM,EAAA,EAAI,gBAAM,WAAA,EAAY,CAAA;AAAA,QACzD,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,GAAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,GAAA,CAAI,KAAA,EAChC,QAAA,EAAA,GAAA,CAAI,KAAA,EAAA,EADM,GAAA,CAAI,KAEjB,CACD;AAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAyE;AACvE,EAAA,MAAM,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAK,QAAmC,EAAC;AACxE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,KAAS,aAAA,GAAgB,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA,GAAI,EAAC;AACxF,EAAA,uBACEA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,QAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,0BAA0B,CAAA;AAAA,MACtD,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,MAAM,CAAA;AAAA,MACrB,QAAA,EAAU,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,MAC9C,kBAAA,EAAkB,WAAA;AAAA,MAClB,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,CAAA,CAAE,OAAO,eAAA,EAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA;AAChE,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACf,CAAA;AAAA,MAEC,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,GAAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,GAAA,CAAI,KAAA,EAChC,QAAA,EAAA,GAAA,CAAI,KAAA,EAAA,EADM,GAAA,CAAI,KAEjB,CACD;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,SAAA,EAAU,qBAAA;AAAA,MACV,kBAAA,EAAkB,WAAA;AAAA,MAClB,IAAA,EAAK,YAAA;AAAA,MAEH,QAAA,EAAA,CAAA,KAAA,CAAM,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,GAAA,qBAChCC,IAAAA,CAAC,OAAA,EAAA,EAAsB,SAAA,EAAU,wCAAA,EAC/B,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAAA,YACvB,SAAS,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,KAAM,MAAA,CAAO,IAAI,KAAK,CAAA;AAAA,YACjD,QAAA,EAAU,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,YAC9C,QAAA,EAAU,MAAM,QAAA,CAAS,GAAA,CAAI,KAAK;AAAA;AAAA,SACpC;AAAA,QACC,GAAA,CAAI;AAAA,OAAA,EAAA,EATK,GAAA,CAAI,KAUhB,CACD;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAkD;AAGhD,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAW,YAAA;AAAA,MACX,OAAO,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,GAAY,EAAA,GAAK,OAAO,KAAK,CAAA;AAAA,MAChE,aAAa,KAAA,CAAM,WAAA,IAAe,CAAA,OAAA,EAAU,KAAA,CAAM,MAAM,eAAe,CAAA,MAAA,CAAA;AAAA,MACvE,QAAA,EAAU,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,MAC9C,QAAA,EAAU,MAAM,QAAA,KAAa,IAAA;AAAA,MAC7B,kBAAA,EAAkB,WAAA;AAAA,MAClB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,KAAU,EAAA,GAAK,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,KAAK;AAAA;AAAA,GACzE;AAEJ;AAEA,SAAS,SAAA,CAAU;AAAA,EACjB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAmE;AACjE,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAM,KAAA,CAAM,IAAA,KAAS,UAAA,GAAa,gBAAA,GAAmB,MAAA;AAAA,MACrD,SAAA,EAAW,YAAA;AAAA,MACX,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,MAC3C,QAAA,EAAU,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,MAC9C,QAAA,EAAU,MAAM,QAAA,KAAa,IAAA;AAAA,MAC7B,QAAA,EAAU,MAAM,QAAA,KAAa,IAAA;AAAA,MAC7B,kBAAA,EAAkB,WAAA;AAAA,MAClB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,KAAU,EAAA,GAAK,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,KAAK;AAAA;AAAA,GACzE;AAEJ;AAEA,SAAS,SAAA,CAAU;AAAA,EACjB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAyC;AACvC,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,SAAA;AAAA,MACV,QAAA,EAAU,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,MAC9C,kBAAA,EAAkB,WAAA;AAAA,MAClB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,IAAK,IAAI;AAAA;AAAA,GACvD;AAEJ;AAhXA,IAsCM,YAAA;AAtCN,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2BAAA,GAAA;AAyBA,IAAA,OAAA,EAAA;AAaA,IAAM,YAAA,GAAe,EAAA;AAAA,MACnB,6CAAA;AAAA,MACA,4BAAA;AAAA,MACA,yEAAA;AAAA,MACA;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;ACdO,SAAS,cAAc,KAAA,EAAsC;AAClE,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAU,GAAI,KAAA;AACrC,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,OAAA,GAAU,GAAG,EAAE,CAAA,MAAA,CAAA;AACrB,EAAA,MAAM,QAAA,GAAW,GAAG,EAAE,CAAA,OAAA,CAAA;AACtB,EAAA,MAAM,QAAA,GAAW,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAA;AAE3C,EAAA,MAAM,SAAS,KAAA,CAAM,SAAA,GAAY,iBAAA,CAAkB,KAAA,CAAM,SAAS,CAAA,GAAI,MAAA;AACtE,EAAA,MAAM,QAAQ,MAAA,IAAW,gBAAA;AAEzB,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,CAAM,UAAA,GAAa,WAAW,IAAA,EAAM,QAAA,GAAW,OAAA,GAAU,IAAI,CAAA,CAC/E,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,oBAAkB,KAAA,CAAM,IAAA;AAAA,MACxB,mBAAiB,KAAA,CAAM,IAAA;AAAA,MACvB,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAE7C,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,KAAA,KAAU,EAAA,oBACvCA,IAAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAS,EAAA,EAAI,SAAA,EAAU,qBAAA,EAC3B,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,KAAA;AAAA,UACN,KAAA,CAAM,4BACLD,GAAAA,CAAC,UAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,yBAAA,EAA0B,QAAA,EAAA,GAAA,EAE7D;AAAA,SAAA,EAEJ,CAAA;AAAA,wBAEFA,IAAC,KAAA,EAAA,EAAO,GAAG,OAAO,OAAA,EAAS,EAAA,EAAI,WAAA,EAAa,WAAA,IAAe,MAAA,EAAW,CAAA;AAAA,QACrE,KAAA,CAAM,UAAA,IAAc,CAAC,QAAA,oBACpBA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,QAAA,EAAU,SAAA,EAAU,+BAAA,EACxB,QAAA,EAAA,KAAA,CAAM,UAAA,EACT,CAAA;AAAA,QAED,QAAA,oBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,0BAAA,EACpC,QAAA,EAAA,MAAA,CAAO,CAAC,CAAA,EACX;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAxEA,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4BAAA,GAAA;AAcA,IAAA,OAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACFO,SAAS,YAAA,CAAa,EAAE,MAAA,EAAQ,QAAA,EAAU,WAAU,EAAsB;AAC/E,EAAA,uBACEC,IAAAA,CAAC,UAAA,EAAA,EAAS,WAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA,EACtE,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,0BAAA,EAA4B,iBAAO,MAAA,EAAO,CAAA;AAAA,oBAC5DA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,YAAA;AAAA,QACV,OAAO,EAAE,mBAAA,EAAqB,UAAU,MAAA,CAAO,OAAA,IAAW,CAAC,CAAA,iBAAA,CAAA,EAAoB;AAAA,QAE9E;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AA1BA,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2BAAA,GAAA;AAMA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACQO,SAAS,QAAA,CAAS,EAAE,MAAA,EAAQ,QAAA,EAAU,WAAU,EAAkB;AAEvE,EAAA,MAAM,OAAA,GAAU,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,GAAW,OAAO,OAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,IAAK,CAAA;AAC/F,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC/B,KAAA,EAAO;AAAA,QACL,mBAAA,EAAqB,UAAU,OAAO,CAAA,iBAAA,CAAA;AAAA,QACtC,GAAA,EAAK,OAAO,GAAA,IAAO;AAAA,OACrB;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AA5BA,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uBAAA,GAAA;AAMA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACWO,SAAS,WAAA,CAAY,EAAE,MAAA,EAAQ,QAAA,EAAU,WAAU,EAAqB;AAC7E,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,IAAI,QAAA,CAAS,CAAC,OAAO,SAAS,CAAA;AAClD,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,KAAgB,IAAA;AAE3C,EAAA,MAAM,OAAA,mBACJC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAA,EAAyB,iBAAO,OAAA,EAAQ,CAAA;AAAA,MACrD,MAAA,CAAO,+BACNA,GAAAA,CAAC,OAAE,SAAA,EAAU,+BAAA,EAAiC,iBAAO,WAAA,EAAY;AAAA,KAAA,EAErE,CAAA;AAAA,IACC,+BACCA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,eAAA,EAAe,IAAA;AAAA,QACf,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,QAChC,SAAA,EAAU,+CAAA;AAAA,QAET,iBAAO,MAAA,GAAS;AAAA;AAAA;AACnB,GAAA,EAEJ,CAAA;AAGF,EAAA,MAAM,IAAA,GAAO,wBACXA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,YAAA;AAAA,MACV,OAAO,EAAE,mBAAA,EAAqB,UAAU,MAAA,CAAO,OAAA,IAAW,CAAC,CAAA,iBAAA,CAAA,EAAoB;AAAA,MAE9E;AAAA;AAAA,GACH;AAGF,EAAA,uBACEA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,oBAAA,EAAmB,EAAA;AAAA,MACnB,SAAA,EAAW,EAAA;AAAA,QACT,+CAAA;AAAA,QACA,MAAA,CAAO,UAAU,KAAA,GAAQ,KAAA;AAAA,QACzB;AAAA,OACF;AAAA,MAEC,iBAAO,KAAA,mBACNC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qCAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,SAAK,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,wBACdA,GAAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,IAAA,EAAK;AAAA,OAAA,EACb,CAAA,mBAEAC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAQ,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,QAC9B;AAAA,OAAA,EACH;AAAA;AAAA,GAEJ;AAEJ;AAzEA,IAAA,gBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0BAAA,GAAA;AASA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACgBO,SAAS,QAAA,CAAS,EAAE,MAAA,EAAQ,IAAA,EAAM,WAAU,EAAuC;AACxF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIE,QAAAA,CAAS,MAAA,CAAO,UAAA,IAAc,IAAA,CAAK,CAAC,CAAA,EAAG,EAAA,IAAM,IAAI,CAAA;AAC7E,EAAA,MAAM,SAASC,KAAAA,EAAM;AACrB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAqC,EAAE,CAAA;AAEpD,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,MAAA,KAAW,MAAM,OAAO,IAAA;AACjD,EAAA,MAAM,cAAc,IAAA,CAAK,GAAA;AAAA,IACvB,CAAA;AAAA,IACA,KAAK,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAM;AAAA,GACvC;AACA,EAAA,MAAM,SAAA,GAAY,KAAK,WAAW,CAAA;AAClC,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAEvB,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAc;AAC3B,IAAA,MAAM,MAAA,GAAS,KAAK,CAAC,CAAA;AACrB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,SAAA,CAAU,OAAO,EAAE,CAAA;AACnB,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAA8C;AAC/D,IAAA,IAAI,CAAA,CAAE,QAAQ,YAAA,EAAc;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,KAAA,CAAA,CAAO,WAAA,GAAc,CAAA,IAAK,IAAA,CAAK,MAAM,CAAA;AAAA,IACvC,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,WAAA,EAAa;AAChC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,KAAA,CAAA,CAAO,WAAA,GAAc,CAAA,GAAI,IAAA,CAAK,MAAA,IAAU,KAAK,MAAM,CAAA;AAAA,IACrD,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,MAAA,EAAQ;AAC3B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,KAAA,CAAM,CAAC,CAAA;AAAA,IACT,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,KAAA,EAAO;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,KAAA,CAAM,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IACvB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEF,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EACH,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,SAAA;AAAA,QACL,oBAAkB,MAAA,CAAO,WAAA;AAAA,QACzB,SAAA,EAAU,mCAAA;AAAA,QAET,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM;AACpB,UAAA,MAAM,QAAA,GAAW,IAAI,EAAA,KAAO,MAAA;AAC5B,UAAA,uBACEC,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,GAAA,EAAK,CAAC,EAAA,KAAO;AACX,gBAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,cACpB,CAAA;AAAA,cACA,IAAA,EAAK,QAAA;AAAA,cACL,IAAA,EAAK,KAAA;AAAA,cACL,EAAA,EAAI,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,IAAI,EAAE,CAAA,CAAA;AAAA,cAC3B,eAAA,EAAe,CAAA,EAAG,MAAM,CAAA,OAAA,EAAU,IAAI,EAAE,CAAA,CAAA;AAAA,cACxC,eAAA,EAAe,QAAA;AAAA,cACf,QAAA,EAAU,WAAW,CAAA,GAAI,EAAA;AAAA,cACzB,OAAA,EAAS,MAAM,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA;AAAA,cAC/B,SAAA;AAAA,cACA,SAAA,EAAW,EAAA;AAAA,gBACT,uDAAA;AAAA,gBACA,WACI,4CAAA,GACA;AAAA,eACN;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,GAAA,CAAI,KAAA;AAAA,gBACJ,GAAA,CAAI,KAAA,KAAU,MAAA,IAAa,GAAA,CAAI,KAAA,KAAU,IAAA,oBACxCD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAAA,EAA6C,QAAA,EAAA,GAAA,CAAI,KAAA,EAAM;AAAA;AAAA,aAAA;AAAA,YArBpE,GAAA,CAAI;AAAA,WAuBX;AAAA,QAEJ,CAAC;AAAA;AAAA,KACH;AAAA,oBACAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,UAAA;AAAA,QACL,EAAA,EAAI,CAAA,EAAG,MAAM,CAAA,OAAA,EAAU,UAAU,EAAE,CAAA,CAAA;AAAA,QACnC,iBAAA,EAAiB,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,UAAU,EAAE,CAAA,CAAA;AAAA,QAC9C,SAAA,EAAU,MAAA;AAAA,QAET,QAAA,EAAA,SAAA,CAAU;AAAA;AAAA;AACb,GAAA,EACF,CAAA;AAEJ;AA7GA,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uBAAA,GAAA;AAUA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACgCO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAS,EAAC;AAAA,EACV,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AAE3D,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,EAAoB,GAAA,KAA2B;AAClE,IAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG;AACvB,MAAA,OAAO,gBAAA,CAAiB,OAAO,GAAG,CAAA;AAAA,IACpC;AACA,IAAA,IAAI,aAAA,CAAc,KAAK,CAAA,EAAG;AACxB,MAAA,OAAO,iBAAA,CAAkB,OAAO,GAAG,CAAA;AAAA,IACrC;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,EAAmB,GAAA,KAA2B;AACtE,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AACzC,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,IAAA,uBACEA,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QAEC,KAAA;AAAA,QACA,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAAA,QACxB,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAAA,QACzB,QAAA,EAAU,QAAA,IAAY,MAAA,CAAO,QAAA,KAAa,IAAA;AAAA,QAC1C,UAAU,CAAC,KAAA,KAAU,QAAA,CAAS,KAAA,CAAM,MAAM,KAAK;AAAA,OAAA;AAAA,MAL1C;AAAA,KAMP;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,OAAA,KAAkD;AACxE,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM,YAAY,KAAA,EAAO,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC,CAAA;AAAA,EAC7D,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,EAAoB,GAAA,KAA2B;AACxE,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,SAAA;AACH,QAAA,uBACEA,GAAAA,CAAC,WAAA,EAAA,EAAsB,MAAA,EAAQ,KAAA,CAAM,OAClC,QAAA,EAAA,cAAA,CAAe,KAAA,CAAM,MAAM,CAAA,EAAA,EADZ,GAElB,CAAA;AAAA,MAEJ,KAAK,UAAA;AACH,QAAA,uBACEA,GAAAA,CAAC,YAAA,EAAA,EAAuB,MAAA,EAAQ,KAAA,CAAM,OACnC,QAAA,EAAA,cAAA,CAAe,KAAA,CAAM,MAAM,CAAA,EAAA,EADX,GAEnB,CAAA;AAAA,MAEJ,KAAK,MAAA;AAAA,MACL,KAAK,SAAA;AACH,QAAA,uBACEA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,MAAA,EAAQ,KAAA,CAAM,IAAA,KAAS,SAAA,GAAY,EAAE,SAAS,KAAA,CAAM,KAAA,CAAM,OAAA,EAAQ,GAAI,KAAA,CAAM,KAAA;AAAA,YAE3E,QAAA,EAAA,cAAA,CAAe,MAAM,MAAM;AAAA,WAAA;AAAA,UAHvB;AAAA,SAIP;AAAA,MAEJ,KAAK,OAAA;AACH,QAAA,uBACEA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAW,EAAA;AAAA,cACT,YAAA;AAAA,cACA,KAAA,CAAM,KAAA,CAAM,WAAA,KAAgB,UAAA,GAAa,UAAA,GAAa;AAAA,aACxD;AAAA,YAEC,QAAA,EAAA,cAAA,CAAe,MAAM,MAAM;AAAA,WAAA;AAAA,UANvB;AAAA,SAOP;AAAA,MAEJ,KAAK,MAAA,EAAQ;AACX,QAAA,MAAM,QAAyB,KAAA,CAAM,MAAA,IAAU,EAAC,EAC7C,OAAO,CAAC,CAAA,KAAqB,aAAA,CAAc,CAAC,KAAK,CAAA,CAAE,IAAA,KAAS,KAAK,CAAA,CACjE,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,UACb,EAAA,EAAI,IAAI,KAAA,CAAM,EAAA;AAAA,UACd,KAAA,EAAO,IAAI,KAAA,CAAM,KAAA;AAAA,UACjB,KAAA,EAAO,IAAI,KAAA,CAAM,KAAA;AAAA,UACjB,OAAA,EAAS,cAAA,CAAe,GAAA,CAAI,MAAM,CAAA,oBAAKA,GAAAA,CAAC,MAAA,EAAA,EAAA,EAAU,CAAA,IAAA,EAAO,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,MAAA,CAAU;AAAA,SACjF,CAAE,CAAA;AACJ,QAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAmB,QAAQ,KAAA,CAAM,KAAA,EAAO,QAA1B,GAAsC,CAAA;AAAA,MAC9D;AAAA,MACA,KAAK,KAAA;AAGH,QAAA,OAAO,IAAA;AAAA;AACX,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,OAAA,IAAW,CAAA;AAElC,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,iBAAA,EAAgB,EAAA;AAAA,MAChB,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,MACrC,KAAA,EACE,UAAU,CAAA,GAAI,EAAE,qBAAqB,CAAA,OAAA,EAAU,OAAO,qBAAoB,GAAI,MAAA;AAAA,MAG/E,QAAA,EAAA,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM,WAAA,CAAY,KAAA,EAAO,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC;AAAA;AAAA,GAC7D;AAEJ;AAtJA,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2BAAA,GAAA;AAyBA,IAAA,OAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,aAAA,EAAA;AACA,IAAA,gBAAA,EAAA;AACA,IAAA,aAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACbO,SAAS,WAAW,EAAE,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,WAAU,EAAoB;AACtF,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,WAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA,EACjE,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC5D,+BAAeA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAsC,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EACjF,CAAA;AAAA,IACC,2BAAWA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAqC,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EAC1E,CAAA;AAEJ;AA3BA,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4BAAA,GAAA;AAQA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACRA,IAAA,uBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAkCe,SAAR,eAAA,GAAgD;AACrD,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,MAAM,MAAA,GAAU,KAAA,CAAM,MAAA,IAAU,EAAC;AACjC,EAAA,MAAM,MAAA,GAAU,MAA2C,IAAA,IAAQ,eAAA;AAEnE,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,EAAE,MAAA,EAAQ,CAAA;AAEpC,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAuB;AACrC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,EAAU,IAAA,IAAQ,EAAA;AACrC,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,KAAK,IAAA,EAA+B;AAAA,MAC1D,cAAA,EAAgB;AAAA,KACjB,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAO,CAAA,OAAA,EAAU,KAAA,CAAM,UAAU,KAAA,IAAS,QAAQ,CAAA,CAAA,EAAI,WAAA,EAAa,IAAA,EAAM,CAAA;AAAA,oBACrFC,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,WAAU,WAAA,EAChC,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAQ,IAAA,CAAK,IAAA;AAAA,UACb,UAAU,CAAC,IAAA,EAAM,UAAU,IAAA,CAAK,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,UACnD,QAAQ,IAAA,CAAK;AAAA;AAAA,OACf;AAAA,sBACAA,GAAAA,CAAC,WAAA,EAAA,EAAY,UAAA,EAAY,IAAA,CAAK,UAAA,EAAY,QAAA,EAAU,MAAM,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAK,EAAG;AAAA,KAAA,EACnF;AAAA,GAAA,EACF,CAAA;AAEJ;AAjEA,IAmBM,eAAA;AAnBN,IAAA,oBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+BAAA,GAAA;AAeA,IAAA,gBAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,eAAA,EAAA;AAEA,IAAM,eAAA,GAA8B;AAAA,MAClC,QAAQ,EAAC;AAAA,MACT,OAAA,EAAS,CAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,KAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACZ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACzBA,IAAA,qBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,qBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAgCe,SAAR,aAAA,GAAuF;AAC5F,EAAA,MAAM,OAAOI,OAAAA,EAAQ;AACrB,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,MAAM,MAAA,GAAU,KAAA,CAAM,MAAA,IAAU,EAAC;AACjC,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,MAAM,MAAA,GAAU,MAA2C,IAAA,IAAQC,gBAAAA;AAEnE,EAAA,MAAM,IAAA,GAAOC,YAAAA,CAAa,EAAE,MAAA,EAAQ,QAAQ,CAAA;AAE5C,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAuB;AACrC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAQ,MAAA,EAAiD,EAAA,IAAM,EAAE,CAAA;AAC5E,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,EAAU,IAAA,IAAQ,EAAA;AACrC,IAAAC,MAAAA,CAAO,IAAI,CAAA,CAAA,EAAI,IAAI,IAAI,EAAE,CAAA,CAAA,EAAI,KAAK,IAAA,EAA+B;AAAA,MAC/D,cAAA,EAAgB;AAAA,KACjB,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACEN,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAO,KAAA,CAAM,WAAA,IAAe,QAAQ,KAAA,CAAM,QAAA,EAAU,SAAS,QAAQ,CAAA,CAAA;AAAA,QACrE,WAAA,EAAa,MAAM,cAAA,IAAkB;AAAA;AAAA,KACvC;AAAA,oBACAC,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,WAAU,WAAA,EAChC,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAQ,IAAA,CAAK,IAAA;AAAA,UACb,UAAU,CAAC,IAAA,EAAM,UAAU,IAAA,CAAK,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,UACnD,QAAQ,IAAA,CAAK;AAAA;AAAA,OACf;AAAA,sBACAA,GAAAA,CAAC,WAAA,EAAA,EAAY,UAAA,EAAY,IAAA,CAAK,UAAA,EAAY,QAAA,EAAU,MAAM,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAK,EAAG;AAAA,KAAA,EACnF;AAAA,GAAA,EACF,CAAA;AAEJ;AApEA,IAiBMK,gBAAAA;AAjBN,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,6BAAA,GAAA;AAaA,IAAA,gBAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,eAAA,EAAA;AAEA,IAAMA,gBAAAA,GAA8B;AAAA,MAClC,QAAQ,EAAC;AAAA,MACT,OAAA,EAAS,CAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,KAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACZ;AAAA,EAAA;AAAA,CAAA,CAAA;ACfA,SAAS,YAAA,CAAa;AAAA,EACpB,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBAAOL,IAACQ,cAAA,CAAsB,IAAA,EAAtB,EAA2B,WAAA,EAAU,eAAA,EAAiB,GAAG,KAAA,EAAO,CAAA;AAC1E;AAUA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,GAAG;AACL,CAAA,EAA+D;AAC7D,EAAA,uBACER,GAAAA;AAAA,IAACQ,cAAA,CAAsB,OAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA+D;AAC7D,EAAA,uBACER,GAAAA,CAACQ,cAAA,CAAsB,MAAA,EAAtB,EACC,QAAA,kBAAAR,GAAAA;AAAA,IAACQ,cAAA,CAAsB,OAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,wjBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ;AAUA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACL,CAAA,EAGG;AACD,EAAA,uBACER,GAAAA;AAAA,IAACQ,cAAA,CAAsB,IAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,EAAA;AAAA,QACT,6mBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAlFA,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,iCAAA,GAAA;AAAA,IAAA,YAAA;AAMA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACCA,SAAS,MAAA,CAAO;AAAA,EACd,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,uBAAOR,IAACS,QAAA,CAAgB,IAAA,EAAhB,EAAqB,WAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC7D;AAQA,SAAS,YAAA,CAAa;AAAA,EACpB,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBAAOT,IAACS,QAAA,CAAgB,MAAA,EAAhB,EAAuB,WAAA,EAAU,eAAA,EAAiB,GAAG,KAAA,EAAO,CAAA;AACtE;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBAAOT,IAACS,QAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACpE;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBACET,GAAAA;AAAA,IAACS,QAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACER,IAAAA,CAAC,YAAA,EAAA,EAAa,WAAA,EAAU,eAAA,EACtB,QAAA,EAAA;AAAA,oBAAAD,IAAC,aAAA,EAAA,EAAc,CAAA;AAAA,oBACfC,IAAAA;AAAA,MAACQ,QAAA,CAAgB,OAAA;AAAA,MAAhB;AAAA,QACC,WAAA,EAAU,gBAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,0XAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,mCACCR,IAAAA;AAAA,YAACQ,QAAA,CAAgB,KAAA;AAAA,YAAhB;AAAA,cACC,WAAA,EAAU,cAAA;AAAA,cACV,SAAA,EAAU,mWAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAT,IAAC,KAAA,EAAA,EAAM,CAAA;AAAA,gCACPA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AAAA;AACjC;AAAA;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,8CAAA,EAAgD,SAAS,CAAA;AAAA,MACtE,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,eAAA,oBACCD,GAAAA,CAACS,QAAA,CAAgB,OAAhB,EAAsB,OAAA,EAAO,IAAA,EAC5B,QAAA,kBAAAT,GAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,mBAAK,CAAA,EACjC;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACEA,GAAAA;AAAA,IAACS,QAAA,CAAgB,KAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,uBACET,GAAAA;AAAA,IAACS,QAAA,CAAgB,WAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AA9IA,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0BAAA,GAAA;AAIA,IAAA,OAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACwCO,SAAS,eAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,SAAS,EAAC;AAAA,EACV,gBAAgB;AAClB,CAAA,EAAyB;AACvB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIP,SAAkC,aAAa,CAAA;AAC3E,EAAA,MAAM,IAAA,GAAO,OAAO,SAAA,IAAa,IAAA;AAEjC,EAAA,MAAM,MAAA,GAAqB,OAAA;AAAA,IACzB,OAAO;AAAA,MACL,SAAS,MAAA,CAAO,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QAC1C,IAAA,EAAM,OAAA;AAAA,QACN,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,MAAM,KAAA,CAAM;AAAA,OACd,CAAE,CAAA;AAAA,MACF,OAAA,EAAS,CAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,KAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACZ,CAAA;AAAA,IACA,CAAC,OAAO,IAAI;AAAA,GACd;AAEA,EAAA,uBACEF,GAAAA,CAAC,MAAA,EAAA,EAAO,MAAY,YAAA,EAAc,CAAC,SAAS,YAAA,CAAa,IAAI,GAC3D,QAAA,kBAAAC,IAAAA,CAAC,iBAAc,SAAA,EAAW,EAAA,CAAG,iBAAiB,YAAA,CAAa,IAAI,CAAC,CAAA,EAC9D,QAAA,EAAA;AAAA,oBAAAD,IAAC,YAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,WAAA,EAAA,EAAa,QAAA,EAAA,MAAA,CAAO,OAAM,CAAA,EAC7B,CAAA;AAAA,oBACAC,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,qBAAA;AAAA,QACV,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,QAAA,CAAS,MAAM,CAAA;AAAA,QACjB,CAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,MAAA;AAAA,cACA,MAAA;AAAA,cACA,MAAA;AAAA,cACA,MAAA;AAAA,cACA,QAAA,EAAU,CAAC,IAAA,EAAM,KAAA,KAAU,UAAU,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,CAAC,IAAI,GAAG,OAAM,CAAE,CAAA;AAAA,cAC3E,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,GAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,UAAA;AAAA,cACA,aAAa,MAAA,CAAO,KAAA;AAAA,cACpB,uBACEA,GAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAO,MAClB,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,UAAS,OAAA,EAAQ,OAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,oBAE5D,CAAA,EACF;AAAA;AAAA;AAEJ;AAAA;AAAA;AACF,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AA7GA,IAqCM,YAAA;AArCN,IAAA,oBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gCAAA,GAAA;AAcA,IAAA,gBAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAOA,IAAA,OAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAaA,IAAM,YAAA,GAA0C;AAAA,MAC9C,EAAA,EAAI,kBAAA;AAAA,MACJ,EAAA,EAAI,kBAAA;AAAA,MACJ,EAAA,EAAI,kBAAA;AAAA,MACJ,EAAA,EAAI,kBAAA;AAAA,MACJ,IAAA,EAAM;AAAA,KACR;AAAA,EAAA;AAAA,CAAA,CAAA;ACFO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIE,SAAS,EAAE,CAAA;AAErC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM,QAAA,CAAS,EAAE,CAAA;AAAA,EACxB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,eAAe,MAAA,EAAQ,YAAA;AAC7B,EAAA,MAAM,cAAA,GAAiB,UAAA,IAAe,YAAA,KAAiB,MAAA,IAAa,KAAA,KAAU,YAAA;AAC9E,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,MAAA,EAAQ,KAAA,IAAS,aAAa,CAAA;AAC5D,EAAA,MAAM,cAAc,MAAA,EAAQ,WAAA,KAAgB,MAAA,EAAQ,KAAA,KAAU,SAAS,SAAA,GAAY,QAAA,CAAA;AACnF,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,QAAA;AAE3C,EAAA,uBACEF,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAY,YAAA,EAAc,CAAC,IAAA,KAAS,YAAA,CAAa,IAAI,CAAA,EAC3D,0BAAAC,IAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,kBAAA,EAAmB,iBAAiB,KAAA,EAC3D,QAAA,EAAA;AAAA,oBAAAA,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,MAAA,EAAQ,OAAA,IAAW,eAAA,EAAgB,CAAA;AAAA,MAChD,QAAQ,WAAA,oBAAeA,GAAAA,CAAC,iBAAA,EAAA,EAAmB,iBAAO,WAAA,EAAY;AAAA,KAAA,EACjE,CAAA;AAAA,IACC,iBAAiB,MAAA,oBAChBC,IAAAA,CAAC,OAAA,EAAA,EAAM,WAAU,mDAAA,EACf,QAAA,EAAA;AAAA,sBAAAA,KAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,wBACCD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAA6B,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,QAAO;AAAA,OAAA,EACxE,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,GAAA,EAAK,CAAC,EAAA,KAAO,EAAA,EAAI,KAAA,EAAM;AAAA,UACvB,KAAA,EAAO,KAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACxC,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,YAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,cAAA,EAAgB;AACxC,cAAA,CAAA,CAAE,cAAA,EAAe;AACjB,cAAA,SAAA,EAAU;AAAA,YACZ;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAU;AAAA;AAAA;AACZ,KAAA,EACF,CAAA;AAAA,oBAEFC,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAO,IAAA,EAClB,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAQ,OAAA,EAAQ,QAAA,EAAU,UAAA,EAC7C,uBACH,CAAA,EACF,CAAA;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAkB,QAAA,EAAU,cAAA,EAAgB,OAAA,EAAS,SAAA,EACxE,QAAA,EAAA,UAAA,GAAa,eAAA,GAAa,WAAA,EAC7B;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AApGA,IAmCM,aAAA;AAnCN,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,8BAAA,GAAA;AAgBA,IAAA,WAAA,EAAA;AASA,IAAA,WAAA,EAAA;AAUA,IAAM,aAAA,GAA0F;AAAA,MAC9F,WAAA,EAAa,aAAA;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACR;AAAA,EAAA;AAAA,CAAA,CAAA;ACQO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EACA,aAAa,EAAC;AAAA,EACd,QAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,MAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIE,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE9C,EAAA,MAAM,UACJ,gBAAA,CAAiB,MAAA,CAAO,OAAO,CAAA,IAAK,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAEnE,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,OAAO,QAAA,EAAU;AACrB,IAAA,IAAI,OAAO,oBAAA,EAAsB;AAC/B,MAAA,cAAA,CAAe,IAAI,CAAA;AAAA,IACrB,WAAW,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AAChD,MAAA,WAAA,CAAY,IAAI,CAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AACzC,MAAA,WAAA,CAAY,IAAI,CAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,KAAoC;AAC5D,IAAA,QAAA,CAAS,MAAM,CAAA;AACf,IAAA,WAAA,CAAY,KAAK,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,uBACED,IAAAA,CAAAS,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAV,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA,EAAU,MAAA,CAAO,QAAA,KAAa,IAAA,IAAQ,UAAA;AAAA,QACtC,OAAO,MAAA,CAAO,OAAA;AAAA,QACd,OAAA,EAAS,WAAA;AAAA,QACT,SAAA;AAAA,QAEC,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,KACV;AAAA,IACC,MAAA,CAAO,wCACNA,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,WAAA;AAAA,QACN,YAAA,EAAc,cAAA;AAAA,QACd,QAAQ,MAAA,CAAO,YAAA;AAAA,QACf,SAAA,EAAW,aAAA;AAAA,QACX;AAAA;AAAA,KACF;AAAA,IAED,OAAO,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,GAAS,qBACnCA,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,QAAA;AAAA,QACN,YAAA,EAAc,WAAA;AAAA,QACd,MAAA;AAAA,QACA,MAAA,EAAQ,UAAA;AAAA,QACR,QAAA,EAAU,gBAAA;AAAA,QACV,UAAA;AAAA,QACA;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AAzHA,IA+BM,gBAAA,EASA,gBAAA;AAxCN,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,6BAAA,GAAA;AAgBA,IAAA,oBAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAaA,IAAM,gBAAA,GAAgE;AAAA,MACpE,OAAA,EAAS,SAAA;AAAA,MACT,SAAA,EAAW,SAAA;AAAA,MACX,WAAA,EAAa,aAAA;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACR;AAEA,IAAM,gBAAA,GAA2E;AAAA,MAC/E,OAAA,EAAS,SAAA;AAAA,MACT,OAAA,EAAS,SAAA;AAAA,MACT,KAAA,EAAO,OAAA;AAAA,MACP,WAAA,EAAa;AAAA,KACf;AAAA,EAAA;AAAA,CAAA,CAAA;ACZO,SAAS,UAAA,CAAW;AAAA,EACzB,OAAA;AAAA,EACA,qBAAqB,EAAC;AAAA,EACtB,QAAA;AAAA,EACA,eAAA,GAAkB,CAAA;AAAA,EAClB,UAAA,GAAa,KAAA;AAAA,EACb,OAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEjC,EAAA,IAAI,OAAA,CAAQ,UAAU,eAAA,EAAiB;AACrC,IAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,mCAAA,EAAqC,SAAS,CAAA,EAC9D,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QAEC,MAAA;AAAA,QACA,UAAA,EAAY,kBAAA,CAAmB,MAAA,CAAO,IAAI,KAAK,EAAC;AAAA,QAChD,QAAA,EAAU,CAAC,MAAA,KAAW,QAAA,CAAS,QAAQ,MAAM,CAAA;AAAA,QAC7C,UAAA;AAAA,QACA,IAAA,EAAK;AAAA,OAAA;AAAA,MALA,MAAA,CAAO;AAAA,KAOf,CAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEC,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EACzB,qCACCA,GAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAQ,IAAA,EAAK,MAAA,EAAO,YAAA,EAAW,SAAA,EAAU,oBAEzD,CAAA,EAEJ,CAAA;AAAA,oBACAA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,KAAA,EAAM,KAAA,EAAM,YAAY,CAAA,EAAG,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA,EACrF,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,2BACZA,GAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAEC,QAAA,EAAU,OAAO,QAAA,KAAa,IAAA;AAAA,QAC9B,OAAA,EAAS,MAAA,CAAO,KAAA,KAAU,aAAA,GAAgB,aAAA,GAAgB,SAAA;AAAA,QAC1D,UAAU,MAAM;AAKd,UAAA,IAAI,OAAO,QAAA,EAAU;AACrB,UAAA,QAAA,CAAS,MAAM,CAAA;AAAA,QACjB,CAAA;AAAA,QAEC,QAAA,EAAA,MAAA,CAAO;AAAA,OAAA;AAAA,MAZH,MAAA,CAAO;AAAA,KAcf,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AA3FA,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2BAAA,GAAA;AAaA,IAAA,kBAAA,EAAA;AAMA,IAAA,OAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACOO,SAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAc;AACtD,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IACjD,KAAK,OAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IAClD,KAAK,SAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IACpD,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IACjD,KAAK,QAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IACnD,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,MAAA,EAAgB,CAAA;AAAA,IACnC,KAAK,OAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IAClD,KAAK,cAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,MAAA,EAAgB,KAAA,EAAc,CAAA;AAAA,IACzD,KAAK,UAAA;AACH,MAAA,uBAAOA,GAAAA,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,uBACEA,GAAAA;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,uBACEA,GAAAA;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,uBACEA,GAAAA,CAAC,MAAA,EAAA,EAAK,IAAA,EAAK,KAAA,EAAM,cAAY,MAAA,GAAS,MAAA,GAAS,OAAA,EAC5C,QAAA,EAAA,MAAA,GAAU,OAAO,KAAA,CAAM,QAAA,IAAY,WAAQ,MAAA,CAAO,KAAA,CAAM,aAAa,QAAA,EACxE,CAAA;AAEJ;AAEA,SAAS,QAAA,CAAS,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAiD;AACjF,EAAA,IAAI,CAAC,OAAO,uBAAOA,IAAC,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,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,GAAG,uBAAOA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,GAAA,EAAI,CAAA;AACpD,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AACjC,IAAA,uBAAOA,IAAC,MAAA,EAAA,EAAK,QAAA,EAAU,KAAK,WAAA,EAAY,EAAI,QAAA,EAAA,cAAA,CAAe,IAAI,CAAA,EAAE,CAAA;AAAA,EACnE;AACA,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAA,KAAS,UAAA,EAAY;AACpC,IAAA,uBAAOA,IAAC,MAAA,EAAA,EAAK,QAAA,EAAU,KAAK,WAAA,EAAY,EAAI,QAAA,EAAA,IAAA,CAAK,cAAA,EAAe,EAAE,CAAA;AAAA,EACpE;AACA,EAAA,uBAAOA,IAAC,MAAA,EAAA,EAAK,QAAA,EAAU,KAAK,WAAA,EAAY,EAAI,QAAA,EAAA,IAAA,CAAK,kBAAA,EAAmB,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,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA,yBAAkBA,GAAAA,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,KAAA,CAAM,GAAG,CAAA,EAAG,uBAAOA,GAAAA,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,uBACEC,KAAC,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,uBACED,GAAAA,CAAC,MAAA,EAAA,EAAK,IAAA,EAAK,OAAM,YAAA,EAAY,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,OAAO,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,uBACEA,GAAAA;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,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA,yBAAkBA,GAAAA,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,uBAAOA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,IAAI,CAAA,EAAE,CAAA;AAAA,EAC/B;AACA,EAAA,uBAAOA,GAAAA,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,uBAAOA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,eAAe,QAAA,EAAI,CAAA;AAAA,EAClF;AACA,EAAA,uBAAOA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,KAAK,CAAA,EAAE,CAAA;AAChC;AAtLA,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAqBA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;AC0BO,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,GAAsBW,OAAsB,IAAI,CAAA;AAEtD,EAAA,MAAM,cAAA,GAAiBC,OAAAA,CAAQ,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEpF,EAAA,MAAM,YAAA,GAAeA,OAAAA;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,qBAASZ,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;AApQA,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yBAAA,GAAA;AAkBA,IAAA,OAAA,EAAA;AACA,IAAA,UAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACSO,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;AA3MA,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4BAAA,GAAA;AAiBA,IAAA,WAAA,EAAA;AACA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACCO,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;AAnFA,IAAA,oBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+BAAA,GAAA;AAQA,IAAA,WAAA,EAAA;AACA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACWO,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;AAxDA,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4BAAA,GAAA;AASA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACuCO,SAAS,aAAA,CAAuD;AAAA,EACrE,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,cAAc,EAAC;AAAA,EACf,eAAe,EAAC;AAAA,EAChB,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV;AACF,CAAA,EAAkC;AAChC,EAAA,MAAM,eAAA,GAAkB,QAAQ,iBAAiB,CAAA;AAEjD,EAAA,MAAM,eAAe,MAAiB;AACpC,IAAA,IAAI,YAAY,OAAO,UAAA;AACvB,IAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAC5B,IAAA,uBACEC,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,mDAAA,EAAoD,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBAEnED,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,WAAA,EAAa,CAAA,OAAA,EAAU,QAAA,CAAS,WAAA,CAAY,aAAa,CAAA,MAAA,CAAA;AAAA,UACzD,SAAA,EAAU,qJAAA;AAAA,UACV,OAAO,MAAA,IAAU,EAAA;AAAA,UACjB,UAAU,CAAC,CAAA,KAAM,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA;AAChD,KAAA,EACF,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,cAAA,GAAmC,MAAM,MAAA,GAC3C;AAAA,IACE,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAA,EAAW,IAAA,CAAK,SAAA,KAAc,MAAA,GAAS,MAAA,GAAS;AAAA,GAClD,GACA,IAAA;AAEJ,EAAA,uBACEC,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,6DAAA,EAA+D,SAAS,CAAA;AAAA,MACtF,cAAY,QAAA,CAAS,WAAA;AAAA,MAErB,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,oEAAA,EAChB,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAA,EAAyB,mBAAS,WAAA,EAAY,CAAA;AAAA,0BAC5DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAA6C,QAAA,EAAA,cAAA,EAAe;AAAA,SAAA,EAC7E,CAAA;AAAA,wBAEAA,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,QAAQ,YAAA,EAAa;AAAA,YACrB,OAAA,EACE,OAAA,CAAQ,MAAA,GAAS,CAAA,mBACfA,GAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,OAAA;AAAA,gBACA,MAAA,EAAQ,YAAA;AAAA,gBACR,UAAU,CAAC,IAAA,EAAM,KAAA,KAAU,cAAA,GAAiB,MAAM,KAAK,CAAA;AAAA,gBACvD,UAAA,EAAY;AAAA;AAAA,aACd,GACE,IAAA;AAAA,YAEN,eAAe,WAAA,CAAY,MAAA;AAAA,YAC3B,WAAA;AAAA,YACA,kBAAkB,iBAAA,GAAoB,MAAM,iBAAA,CAAkB,EAAE,CAAA,GAAI;AAAA;AAAA,SACtE;AAAA,wBAEAA,GAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,OAAA;AAAA,YACA,eAAA;AAAA,YACA,WAAA;AAAA,YACA,iBAAA;AAAA,YACA,IAAA,EAAM,cAAA;AAAA,YACN,YAAA;AAAA,YACA,YAAY,UAAA,GAAa,CAAC,MAAA,KAAW,UAAA,CAAW,MAAiB,CAAA,GAAI,MAAA;AAAA,YACrE,OAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,QAEC,8BACCA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,UAAA;AAAA,YACN,YAAA,EAAc,CAAC,IAAA,KAAS,YAAA,GAAe,IAAI,CAAA;AAAA,YAC3C;AAAA;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;AApJA,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gCAAA,GAAA;AAiBA,IAAA,cAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,oBAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,OAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACrBA,IAAA,sBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAiCA,SAAS,kBAAkB,MAAA,EAAkE;AAC3F,EAAA,MAAM,MAAmC,EAAC;AAC1C,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC3C,IAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAA,IAAQ,MAAM,EAAA,EAAI;AAC/C,IAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA,CAAE,WAAW,CAAA,EAAG;AACxC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA;AACT;AAUA,SAAS,YAAA,CACP,MAAA,EACA,MAAA,EACA,UAAA,EACM;AACN,EAAA,MAAM,WAAW,MAAA,EAAQ,EAAA;AACzB,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,GACf,MAAA,CAAO,IAAI,OAAA,CAAQ,MAAA,EAAQ,MAAA,CAAO,QAAA,IAAY,EAAE,CAAC,CAAA,GACjD,CAAA,mBAAA,EAAsB,OAAO,IAAI,CAAA,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,WAAA,EAAY;AACzC,EAAA,MAAM,IAAA,GAAgC,EAAE,GAAI,UAAA,IAAc,EAAC,EAAG;AAC9D,EAAA,IAAI,QAAA,KAAa,MAAA,EAAW,IAAA,CAAK,WAAW,CAAA,GAAI,QAAA;AAEhD,EAAAO,MAAAA,CAAO,MAAM,GAAA,EAAK;AAAA,IAChB,MAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA,EAAgB;AAAA,GACjB,CAAA;AACH;AAEA,SAAS,WAAW,MAAA,EAA8C;AAChE,EAAA,MAAM,OAAgC,EAAC;AACvC,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,MAAA,CAAO,OAAO,CAAA;AAChD,EAAA,IAAI,MAAA,CAAO,KAAK,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,GAAI,OAAA;AACtD,EAAA,IAAI,OAAO,MAAA,KAAW,MAAA,EAAW,IAAA,CAAK,QAAQ,IAAI,MAAA,CAAO,MAAA;AACzD,EAAA,IAAI,MAAA,CAAO,MAAM,MAAA,EAAQ;AACvB,IAAA,IAAA,CAAK,MAAM,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,MAAA;AAC3B,IAAA,IAAI,OAAO,IAAA,CAAK,SAAA,OAAgB,WAAW,CAAA,GAAI,OAAO,IAAA,CAAK,SAAA;AAAA,EAC7D;AACA,EAAA,IAAI,MAAA,CAAO,QAAQ,MAAA,CAAO,IAAA,GAAO,GAAG,IAAA,CAAK,MAAM,IAAI,MAAA,CAAO,IAAA;AAC1D,EAAA,IAAI,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,UAAU,IAAI,MAAA,CAAO,OAAA;AAC9C,EAAA,OAAO,IAAA;AACT;AAEe,SAAR,cAAA,GAAwF;AAC7F,EAAA,MAAM,OAAOH,OAAAA,EAAQ;AACrB,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AAEnB,EAAA,MAAM,cAAA,GAAiBQ,QAAQ,MAAM;AACnC,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,EAAC;AAC3C,IAAA,MAAM,EAAA,GAAK,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CAAA;AACrD,IAAA,MAAM,UAAuC,EAAC;AAC9C,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,EAAA,CAAG,SAAQ,EAAG;AACvC,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,sBAAsB,CAAA;AAC1C,MAAA,IAAI,IAAI,CAAC,CAAA,UAAW,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,KAAA;AAAA,IAC9B;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIV,SAAsC,cAAc,CAAA;AAC5F,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAIA,QAAAA,CAAiB,KAAA,CAAM,UAAU,EAAE,CAAA;AACzE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,QAAAA,CAA6B,KAAA,CAAM,YAAY,OAAO,CAAA;AACpF,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,QAAAA,CAAyC,EAAE,CAAA;AACjF,EAAA,MAAM,iBAAA,GAAoBS,OAA6C,IAAI,CAAA;AAE3E,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAwC;AACrD,IAAA,MAAM,GAAA,GAAM,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,CAAO,QAAA,CAAS,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AAC5F,IAAAJ,MAAAA,CAAO,GAAA,CAAI,GAAA,IAAO,GAAA,EAAK,IAAA,EAA+D;AAAA,MACpF,aAAA,EAAe,IAAA;AAAA,MACf,cAAA,EAAgB,IAAA;AAAA,MAChB,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,MAAM,IAAA,IAAQ,IAAA;AAElC,EAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,EAAc,KAAA,KAA6B;AACrE,IAAA,MAAM,WAAA,GAAc,EAAE,GAAG,YAAA,EAAa;AACtC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,UAAU,EAAA,EAAI;AACzD,MAAA,OAAO,YAAY,IAAI,CAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,WAAA,CAAY,IAAI,CAAA,GAAI,KAAA;AAAA,IACtB;AACA,IAAA,eAAA,CAAgB,WAAW,CAAA;AAC3B,IAAA,KAAA,CAAM,UAAA,CAAW,EAAE,OAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,aAAa,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,CAAC,CAAA;AAAA,EAC7F,CAAA;AAEA,EAAA,MAAM,qBAAqB,MAAY;AACrC,IAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,IAAA,KAAA,CAAM,UAAA,CAAW,EAAE,OAAA,EAAS,EAAC,EAAG,MAAA,EAAQ,WAAA,EAAa,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,CAAC,CAAA;AAAA,EACpF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAwB;AAClD,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,IAAI,iBAAA,CAAkB,OAAA,EAAS,YAAA,CAAa,iBAAA,CAAkB,OAAO,CAAA;AACrE,IAAA,iBAAA,CAAkB,OAAA,GAAU,WAAW,MAAM;AAC3C,MAAA,KAAA,CAAM,UAAA,CAAW,EAAE,OAAA,EAAS,YAAA,EAAc,MAAA,EAAQ,OAAO,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,CAAC,CAAA;AAAA,IACxF,GAAG,GAAG,CAAA;AAAA,EACR,CAAA;AAEA,EAAAM,SAAAA;AAAA,IACE,MAAM,MAAM;AACV,MAAA,IAAI,iBAAA,CAAkB,OAAA,EAAS,YAAA,CAAa,iBAAA,CAAkB,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,EAAgB,SAAA,KAAmC;AAC3E,IAAA,KAAA;AAAA,MACE,UAAA,CAAW;AAAA,QACT,OAAA,EAAS,YAAA;AAAA,QACT,MAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAM,EAAE,MAAA,EAAQ,SAAA,EAAU;AAAA,QAC1B;AAAA,OACD;AAAA,KACH;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAA0B;AAClD,IAAA,KAAA;AAAA,MACE,UAAA,CAAW;AAAA,QACT,OAAA,EAAS,YAAA;AAAA,QACT,MAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAM,WAAA;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN;AAAA,OACD;AAAA,KACH;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,UAAA,KAA6B;AACxD,IAAA,UAAA,CAAW,UAAU,CAAA;AACrB,IAAA,KAAA;AAAA,MACE,UAAA,CAAW;AAAA,QACT,OAAA,EAAS,YAAA;AAAA,QACT,MAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV;AAAA,KACH;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,OAAA,EAAS,IAAA,IAAQ,EAAC;AAChD,EAAA,MAAM,cACJ,eAAA,CAAgB,MAAA,GAAS,CAAA,IAAK,WAAA,CAAY,SAAS,CAAA,mBACjDb,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,2BACpBA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,IAAA,EAAK,QAAA;AAAA,MACL,SAAS,MAAM;AACb,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,IAAO,CAAA,mBAAA,EAAsB,OAAO,IAAI,CAAA,CAAA;AAC3D,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,WAAA,EAAY;AAMzC,QAAAO,MAAAA,CAAO,MAAM,GAAA,EAAK;AAAA,UAChB,MAAA;AAAA,UACA,IAAA,EAAM,EAAE,UAAA,EAAY,WAAA,EAA4C;AAAA,UAChE,cAAA,EAAgB,IAAA;AAAA,UAChB,SAAA,EAAW,MAAM,cAAA,CAAe,EAAE;AAAA,SACnC,CAAA;AAAA,MACH,CAAA;AAAA,MACA,SAAA,EAAU,gKAAA;AAAA,MAET,QAAA,EAAA,MAAA,CAAO;AAAA,KAAA;AAAA,IAnBH,MAAA,CAAO;AAAA,GAqBf,GACH,CAAA,GACE,MAAA;AAEN,EAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,OAAA,EAAS,GAAA,IAAO,EAAC;AAC9C,EAAA,MAAM,aACJ,cAAA,CAAe,MAAA,GAAS,CAAA,GACpB,CAAC,2BACCP,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,cAAA;AAAA,MACT,UAAU,CAAC,MAAA,EAAQ,eACjB,YAAA,CAAa,MAAA,EAAQ,QAAmC,UAAU;AAAA;AAAA,GAEtE,GAEF,MAAA;AAEN,EAAA,uBACEA,GAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,YAAA;AAAA,MACA,cAAA,EAAgB,kBAAA;AAAA,MAChB,cAAA,EAAgB,kBAAA;AAAA,MAChB,cAAA,EAAgB,kBAAA;AAAA,MAChB,YAAA,EAAc,gBAAA;AAAA,MACd,YAAA,EAAc,gBAAA;AAAA,MACd,eAAA,EAAiB,mBAAA;AAAA,MACjB,MAAA,EAAQ,WAAA;AAAA,MACR,WAAA;AAAA,MACA,iBAAA,EAAmB,CAAC,GAAA,KAAQ,cAAA,CAAe,GAAG,CAAA;AAAA,MAC7C,GAAI,UAAA,GAAa,EAAE,UAAA,KAAe,EAAC;AAAA,MACnC,GAAI,WAAA,GAAc,EAAE,WAAA,KAAgB;AAAC;AAAA,GACxC;AAEJ;AApPA,IAAA,mBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,8BAAA,GAAA;AA4BA,IAAA,eAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7BA,IAAA,qBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,qBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAwBe,SAAR,aAAA,GAAuF;AAC5F,EAAA,MAAM,OAAOI,OAAAA,EAAQ;AACrB,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,MAAM,MAAA,GAAU,KAAA,CAAM,MAAA,IAAU,EAAC;AAIjC,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AACnB,IAAA,IAAI,OAAO,SAAS,QAAA,IAAY,KAAA,CAAM,WAAW,IAAA,IAAQ,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,EAAU;AACzF,MAAA,MAAA,CAAO,IAAI,CAAA,GAAK,KAAA,CAAM,MAAA,CAAmC,IAAI,CAAA;AAAA,IAC/D;AAAA,EACF;AAEA,EAAA,MAAM,eAAgB,KAAA,CAA2C,IAAA;AACjE,EAAA,MAAM,SAAqB,YAAA,GAAe,EAAE,GAAG,YAAA,EAAc,QAAA,EAAU,MAAK,GAAIC,gBAAAA;AAEhF,EAAA,uBACEJ,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,UAAU,KAAA,IAAS,QAAA;AAAA,QACrD,WAAA,EAAa,MAAM,cAAA,IAAkB;AAAA;AAAA,KACvC;AAAA,oBACAA,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAU,MAAM;AAAA,QAEhB,CAAA;AAAA,QACA,QAAQ;AAAC;AAAA;AACX,GAAA,EACF,CAAA;AAEJ;AA3DA,IAgBMK,gBAAAA;AAhBN,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,6BAAA,GAAA;AAaA,IAAA,iBAAA,EAAA;AACA,IAAA,eAAA,EAAA;AAEA,IAAMA,gBAAAA,GAA8B;AAAA,MAClC,QAAQ,EAAC;AAAA,MACT,OAAA,EAAS,CAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,KAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACZ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACaA,oBAAA,EAAA;AACA,kBAAA,EAAA;AACA,mBAAA,EAAA;AACA,kBAAA,EAAA;AAZO,IAAM,UAAA,GAAuC;AAAA,EAClD,gBAAgB,MACd,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,mBAAA,EAAA,EAAA,sBAAA,CAAA,CAAA;AAAA,EACF,iBAAiB,MACf,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,oBAAA,EAAA,EAAA,uBAAA,CAAA,CAAA;AAAA,EACF,eAAe,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,kBAAA,EAAA,EAAA,qBAAA,CAAA,CAAA;AAAA,EACrB,eAAe,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,kBAAA,EAAA,EAAA,qBAAA,CAAA;AACvB","file":"pages.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","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 * Re-export shadcn (new-york) Button so existing consumers continue to\n * import `Button` and `buttonVariants` from `@arqel-dev/ui/action`\n * while the actual implementation lives in `src/shadcn/ui/button.tsx`.\n *\n * Variants exposed (shadcn): `default | destructive | outline |\n * secondary | ghost | link`. Sizes: `default | xs | sm | lg | icon |\n * icon-xs | icon-sm | icon-lg`.\n */\n\nimport type { ComponentProps } from 'react';\nimport type { Button } from '../shadcn/ui/button.js';\n\nexport { Button, buttonVariants } from '../shadcn/ui/button.js';\n\nexport type ButtonProps = ComponentProps<typeof Button>;\n","/**\n * `<FormActions>` — submit + cancel + extra slots.\n *\n * Sits at the bottom of a form. The submit button is `type=\"submit\"`\n * so wrapping a `<form>` around `<FormRenderer>` + `<FormActions>`\n * triggers the form's onSubmit naturally.\n */\n\nimport type { ReactNode } from 'react';\nimport { Button } from '../action/Button.js';\nimport { cn } from '../utils/cn.js';\n\nexport interface FormActionsProps {\n submitLabel?: string;\n cancelLabel?: string;\n onCancel?: () => void;\n processing?: boolean;\n disabled?: boolean;\n extra?: ReactNode;\n className?: string;\n}\n\nexport function FormActions({\n submitLabel = 'Save',\n cancelLabel = 'Cancel',\n onCancel,\n processing = false,\n disabled = false,\n extra,\n className,\n}: FormActionsProps) {\n return (\n <div\n className={cn(\n 'flex flex-wrap items-center justify-end gap-2 border-t border-border pt-4',\n className,\n )}\n >\n {extra && <div className=\"mr-auto\">{extra}</div>}\n {onCancel && (\n <Button type=\"button\" variant=\"ghost\" onClick={onCancel} disabled={processing}>\n {cancelLabel}\n </Button>\n )}\n <Button type=\"submit\" disabled={processing || disabled}>\n {processing ? 'Saving…' : submitLabel}\n </Button>\n </div>\n );\n}\n","/**\n * `FieldRegistry` — name → React component mapping for FieldRenderer.\n *\n * `@arqel-dev/fields` (FIELDS-JS-*) calls `registerField` at module init to\n * plug rich inputs in; until then FieldRenderer falls back to the\n * native HTML primitives in `nativeFields.tsx`. Registration is global\n * by design — apps can override Arqel defaults by re-registering with\n * the same name.\n */\n\nimport type { ComponentType } from 'react';\nimport type { FieldRendererProps } from './FieldRenderer.js';\n\nexport type FieldComponent = ComponentType<FieldRendererProps>;\n\nconst registry = new Map<string, FieldComponent>();\n\nexport function registerField(name: string, component: FieldComponent): void {\n registry.set(name, component);\n}\n\nexport function getFieldComponent(name: string): FieldComponent | undefined {\n return registry.get(name);\n}\n\nexport function unregisterField(name: string): void {\n registry.delete(name);\n}\n\nexport function getRegisteredFields(): string[] {\n return Array.from(registry.keys()).sort();\n}\n\n/** Test-only helper. */\nexport function clearFieldRegistry(): void {\n registry.clear();\n}\n","/**\n * Native HTML fallback inputs — used until `@arqel-dev/fields` registers\n * richer impls. One renderer per FieldSchema discriminant.\n */\n\nimport type {\n BelongsToFieldSchema,\n BooleanFieldSchema,\n CurrencyFieldSchema,\n DateFieldSchema,\n DateTimeFieldSchema,\n EmailFieldSchema,\n FieldSchema,\n HasManyFieldSchema,\n MultiSelectFieldSchema,\n NumberFieldSchema,\n PasswordFieldSchema,\n RadioFieldSchema,\n SelectFieldSchema,\n SlugFieldSchema,\n TextareaFieldSchema,\n TextFieldSchema,\n ToggleFieldSchema,\n UrlFieldSchema,\n} from '@arqel-dev/types/fields';\nimport { cn } from '../utils/cn.js';\n\nexport interface NativeProps {\n field: FieldSchema;\n value: unknown;\n onChange: (value: unknown) => void;\n disabled?: boolean | undefined;\n errors?: string[] | undefined;\n className?: string | undefined;\n inputId?: string | undefined;\n describedBy?: string | undefined;\n}\n\nconst inputClasses = 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 'disabled:cursor-not-allowed disabled:opacity-50',\n);\n\nexport function NativeFieldInput(props: NativeProps) {\n const { field } = props;\n\n switch (field.type) {\n case 'text':\n case 'email':\n case 'url':\n case 'password':\n case 'slug':\n return <TextLike {...props} field={field} />;\n case 'textarea':\n return <Textarea {...props} field={field} />;\n case 'number':\n case 'currency':\n return <NumericInput {...props} field={field} />;\n case 'boolean':\n case 'toggle':\n return <Checkbox {...props} field={field} />;\n case 'select':\n return <SelectInput {...props} field={field} />;\n case 'multiSelect':\n case 'hasMany':\n return <MultiSelectInput {...props} field={field} />;\n case 'radio':\n return <RadioGroup {...props} field={field} />;\n case 'belongsTo':\n return <BelongsToInput {...props} field={field} />;\n case 'date':\n case 'dateTime':\n return <DateInput {...props} field={field} />;\n case 'file':\n case 'image':\n return <FileInput {...props} />;\n default:\n return null;\n }\n}\n\n/* ─── primitives ─────────────────────────────────────────────────── */\n\ntype TextLikeField =\n | TextFieldSchema\n | EmailFieldSchema\n | UrlFieldSchema\n | PasswordFieldSchema\n | SlugFieldSchema;\n\nfunction TextLike({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: TextLikeField }) {\n const htmlType =\n field.type === 'email'\n ? 'email'\n : field.type === 'password'\n ? 'password'\n : field.type === 'url'\n ? 'url'\n : 'text';\n const isDisabled = disabled || field.disabled || field.readonly;\n return (\n <input\n id={inputId}\n type={htmlType}\n className={inputClasses}\n value={typeof value === 'string' ? value : ((value ?? '')?.toString() ?? '')}\n placeholder={field.placeholder ?? undefined}\n disabled={isDisabled}\n readOnly={field.readonly === true}\n required={field.required === true}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n />\n );\n}\n\nfunction Textarea({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: TextareaFieldSchema }) {\n return (\n <textarea\n id={inputId}\n className={cn(inputClasses, 'h-auto min-h-[5rem] py-2')}\n value={typeof value === 'string' ? value : ''}\n placeholder={field.placeholder ?? undefined}\n disabled={disabled || field.disabled || field.readonly}\n readOnly={field.readonly === true}\n required={field.required === true}\n rows={4}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n />\n );\n}\n\nfunction NumericInput({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: NumberFieldSchema | CurrencyFieldSchema }) {\n return (\n <input\n id={inputId}\n type=\"number\"\n className={inputClasses}\n value={value === null || value === undefined ? '' : String(value)}\n placeholder={field.placeholder ?? undefined}\n disabled={disabled || field.disabled || field.readonly}\n readOnly={field.readonly === true}\n required={field.required === true}\n aria-describedby={describedBy}\n onChange={(e) => {\n const raw = e.target.value;\n if (raw === '') {\n onChange(null);\n return;\n }\n const num = Number(raw);\n onChange(Number.isNaN(num) ? null : num);\n }}\n />\n );\n}\n\nfunction Checkbox({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: BooleanFieldSchema | ToggleFieldSchema }) {\n return (\n <input\n id={inputId}\n type=\"checkbox\"\n className=\"h-4 w-4 rounded border-[var(--input)]\"\n checked={value === true}\n disabled={disabled || field.disabled || field.readonly}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.checked)}\n />\n );\n}\n\nfunction normaliseOptions(\n options: SelectFieldSchema['props']['options'] | undefined,\n): Array<{ value: string | number; label: string }> {\n if (!options) return [];\n if (Array.isArray(options)) return options;\n return Object.entries(options).map(([value, label]) => ({ value, label }));\n}\n\nfunction SelectInput({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: SelectFieldSchema }) {\n const options = normaliseOptions(field.props.options);\n return (\n <select\n id={inputId}\n className={inputClasses}\n value={value === null || value === undefined ? '' : String(value)}\n disabled={disabled || field.disabled || field.readonly}\n required={field.required === true}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value === '' ? null : e.target.value)}\n >\n {field.placeholder && <option value=\"\">{field.placeholder}</option>}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n}\n\nfunction MultiSelectInput({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: MultiSelectFieldSchema | HasManyFieldSchema }) {\n const arr = Array.isArray(value) ? (value as Array<string | number>) : [];\n const options = field.type === 'multiSelect' ? normaliseOptions(field.props.options) : [];\n return (\n <select\n id={inputId}\n multiple\n className={cn(inputClasses, 'h-auto min-h-[6rem] py-1')}\n value={arr.map(String)}\n disabled={disabled || field.disabled || field.readonly}\n aria-describedby={describedBy}\n onChange={(e) => {\n const next = Array.from(e.target.selectedOptions, (o) => o.value);\n onChange(next);\n }}\n >\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n}\n\nfunction RadioGroup({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: RadioFieldSchema }) {\n return (\n <div\n id={inputId}\n className=\"flex flex-col gap-1\"\n aria-describedby={describedBy}\n role=\"radiogroup\"\n >\n {(field.props.options ?? []).map((opt) => (\n <label key={opt.value} className=\"inline-flex items-center gap-2 text-sm\">\n <input\n type=\"radio\"\n name={field.name}\n value={String(opt.value)}\n checked={String(value ?? '') === String(opt.value)}\n disabled={disabled || field.disabled || field.readonly}\n onChange={() => onChange(opt.value)}\n />\n {opt.label}\n </label>\n ))}\n </div>\n );\n}\n\nfunction BelongsToInput({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: BelongsToFieldSchema }) {\n // Phase 1 fallback: native text input. The full async-search picker\n // ships in `@arqel-dev/fields/BelongsToField` and registers via FieldRegistry.\n return (\n <input\n id={inputId}\n type=\"text\"\n className={inputClasses}\n value={value === null || value === undefined ? '' : String(value)}\n placeholder={field.placeholder ?? `Search ${field.props.relatedResource}…`}\n disabled={disabled || field.disabled || field.readonly}\n readOnly={field.readonly === true}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value === '' ? null : e.target.value)}\n />\n );\n}\n\nfunction DateInput({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: DateFieldSchema | DateTimeFieldSchema }) {\n return (\n <input\n id={inputId}\n type={field.type === 'dateTime' ? 'datetime-local' : 'date'}\n className={inputClasses}\n value={typeof value === 'string' ? value : ''}\n disabled={disabled || field.disabled || field.readonly}\n readOnly={field.readonly === true}\n required={field.required === true}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value === '' ? null : e.target.value)}\n />\n );\n}\n\nfunction FileInput({\n field,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: FieldSchema }) {\n return (\n <input\n id={inputId}\n type=\"file\"\n className=\"text-sm\"\n disabled={disabled || field.disabled || field.readonly}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.files?.[0] ?? null)}\n />\n );\n}\n","/**\n * `<FieldRenderer>` — renders a single field.\n *\n * Resolution order:\n * 1. Component registered via `registerField(field.component)` (rich\n * inputs from `@arqel-dev/fields`)\n * 2. Native fallback dispatched by `field.type` (text/number/boolean/...)\n *\n * Errors come from `errors[name]` (Inertia or client). The component\n * also honours `disabled` / `readonly` / `required` from the schema.\n */\n\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport { type ChangeEvent, type ReactNode, useId } from 'react';\nimport { cn } from '../utils/cn.js';\nimport { getFieldComponent } from './FieldRegistry.js';\nimport { NativeFieldInput } from './nativeFields.js';\n\nexport interface FieldRendererProps {\n field: FieldSchema;\n value: unknown;\n onChange: (value: unknown) => void;\n errors?: string[] | undefined;\n disabled?: boolean | undefined;\n className?: string | undefined;\n inputId?: string | undefined;\n describedBy?: string | undefined;\n}\n\nexport function FieldRenderer(props: FieldRendererProps): ReactNode {\n const { field, errors, className } = props;\n const id = useId();\n const errorId = `${id}-error`;\n const helperId = `${id}-helper`;\n const hasError = errors && errors.length > 0;\n\n const Custom = field.component ? getFieldComponent(field.component) : undefined;\n const Input = Custom ?? (NativeFieldInput as typeof NativeFieldInput);\n\n const describedBy = [field.helperText ? helperId : null, hasError ? errorId : null]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n data-arqel-field={field.name}\n data-field-type={field.type}\n className={cn('flex flex-col gap-1', className)}\n >\n {field.label !== null && field.label !== '' && (\n <label htmlFor={id} className=\"text-sm font-medium\">\n {field.label}\n {field.required && (\n <span aria-hidden=\"true\" className=\"ml-0.5 text-destructive\">\n *\n </span>\n )}\n </label>\n )}\n <Input {...props} inputId={id} describedBy={describedBy || undefined} />\n {field.helperText && !hasError && (\n <p id={helperId} className=\"text-xs text-muted-foreground\">\n {field.helperText}\n </p>\n )}\n {hasError && (\n <p id={errorId} role=\"alert\" className=\"text-xs text-destructive\">\n {errors[0]}\n </p>\n )}\n </div>\n );\n}\n\n/* ─── helpers ────────────────────────────────────────────────────── */\n\nexport function asInputChange<T>(\n cast: (raw: string) => T,\n): (event: ChangeEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>) => T {\n return (event) => cast(event.target.value);\n}\n","/**\n * `<FormFieldset>` — semantic `<fieldset>` with grid body.\n */\n\nimport type { FieldsetProps } from '@arqel-dev/types/forms';\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface FormFieldsetProps {\n config: FieldsetProps;\n children: ReactNode;\n className?: string;\n}\n\nexport function FormFieldset({ config, children, className }: FormFieldsetProps) {\n return (\n <fieldset className={cn('rounded-md border border-border p-4', className)}>\n <legend className=\"px-1 text-sm font-medium\">{config.legend}</legend>\n <div\n className=\"grid gap-4\"\n style={{ gridTemplateColumns: `repeat(${config.columns ?? 1}, minmax(0, 1fr))` }}\n >\n {children}\n </div>\n </fieldset>\n );\n}\n","/**\n * `<FormGrid>` — responsive CSS-grid container.\n */\n\nimport type { GridProps } from '@arqel-dev/types/forms';\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface FormGridProps {\n config: GridProps;\n children: ReactNode;\n className?: string;\n}\n\nexport function FormGrid({ config, children, className }: FormGridProps) {\n // biome-ignore lint/complexity/useLiteralKeys: tsc `noPropertyAccessFromIndexSignature` exige bracket access\n const columns = typeof config.columns === 'number' ? config.columns : (config.columns['md'] ?? 1);\n return (\n <div\n className={cn('grid', className)}\n style={{\n gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,\n gap: config.gap ?? '1rem',\n }}\n >\n {children}\n </div>\n );\n}\n","/**\n * `<FormSection>` — heading + optional description + collapsible body.\n *\n * Renders a SectionEntry. Aside layout (heading on the left, body on the\n * right) ships behind the `aside` prop so wide forms can read like docs.\n */\n\nimport type { SectionProps } from '@arqel-dev/types/forms';\nimport { type ReactNode, useState } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface FormSectionProps {\n config: SectionProps;\n children: ReactNode;\n className?: string;\n}\n\nexport function FormSection({ config, children, className }: FormSectionProps) {\n const [open, setOpen] = useState(!config.collapsed);\n const collapsible = config.collapsible === true;\n\n const heading = (\n <div className=\"flex items-start gap-2\">\n <div className=\"flex-1\">\n <h3 className=\"text-sm font-semibold\">{config.heading}</h3>\n {config.description && (\n <p className=\"text-xs text-muted-foreground\">{config.description}</p>\n )}\n </div>\n {collapsible && (\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n className=\"text-sm text-muted-foreground hover:underline\"\n >\n {open ? 'Hide' : 'Show'}\n </button>\n )}\n </div>\n );\n\n const body = open && (\n <div\n className=\"grid gap-4\"\n style={{ gridTemplateColumns: `repeat(${config.columns ?? 1}, minmax(0, 1fr))` }}\n >\n {children}\n </div>\n );\n\n return (\n <section\n data-arqel-section=\"\"\n className={cn(\n 'rounded-md border border-border bg-background',\n config.compact ? 'p-3' : 'p-4',\n className,\n )}\n >\n {config.aside ? (\n <div className=\"grid gap-4 md:grid-cols-[16rem_1fr]\">\n <div>{heading}</div>\n <div>{body}</div>\n </div>\n ) : (\n <>\n <div className=\"mb-3\">{heading}</div>\n {body}\n </>\n )}\n </section>\n );\n}\n","/**\n * `<FormTabs>` — minimal tabs implementation (Phase 1).\n *\n * UI-002+ wires Base UI Tabs primitive properly; this Phase 1 version\n * is keyboard-accessible (Arrow keys + Home/End) but doesn't yet support\n * lazy mounting or controlled mode.\n */\n\nimport type { TabsProps } from '@arqel-dev/types/forms';\nimport { type ReactElement, type ReactNode, useId, useRef, useState } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface FormTabConfig {\n id: string;\n label: string;\n badge?: number | undefined;\n content: ReactNode;\n}\n\nexport interface FormTabsProps {\n config: TabsProps;\n tabs: FormTabConfig[];\n className?: string;\n}\n\nexport function FormTabs({ config, tabs, className }: FormTabsProps): ReactElement | null {\n const [active, setActive] = useState(config.defaultTab ?? tabs[0]?.id ?? null);\n const baseId = useId();\n const refs = useRef<(HTMLButtonElement | null)[]>([]);\n\n if (tabs.length === 0 || active === null) return null;\n const activeIndex = Math.max(\n 0,\n tabs.findIndex((t) => t.id === active),\n );\n const activeTab = tabs[activeIndex];\n if (!activeTab) return null;\n\n const focus = (i: number) => {\n const target = tabs[i];\n if (!target) return;\n setActive(target.id);\n refs.current[i]?.focus();\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n focus((activeIndex + 1) % tabs.length);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n focus((activeIndex - 1 + tabs.length) % tabs.length);\n } else if (e.key === 'Home') {\n e.preventDefault();\n focus(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n focus(tabs.length - 1);\n }\n };\n\n return (\n <div className={className}>\n <div\n role=\"tablist\"\n aria-orientation={config.orientation}\n className=\"flex gap-1 border-b border-border\"\n >\n {tabs.map((tab, i) => {\n const selected = tab.id === active;\n return (\n <button\n key={tab.id}\n ref={(el) => {\n refs.current[i] = el;\n }}\n type=\"button\"\n role=\"tab\"\n id={`${baseId}-tab-${tab.id}`}\n aria-controls={`${baseId}-panel-${tab.id}`}\n aria-selected={selected}\n tabIndex={selected ? 0 : -1}\n onClick={() => setActive(tab.id)}\n onKeyDown={onKeyDown}\n className={cn(\n '-mb-px border-b-2 px-3 py-2 text-sm transition-colors',\n selected\n ? 'border-primary font-medium text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground',\n )}\n >\n {tab.label}\n {tab.badge !== undefined && tab.badge !== null && (\n <span className=\"ml-1 rounded-full bg-muted px-1.5 text-xs\">{tab.badge}</span>\n )}\n </button>\n );\n })}\n </div>\n <div\n role=\"tabpanel\"\n id={`${baseId}-panel-${activeTab.id}`}\n aria-labelledby={`${baseId}-tab-${activeTab.id}`}\n className=\"pt-4\"\n >\n {activeTab.content}\n </div>\n </div>\n );\n}\n","/**\n * `<FormRenderer>` — recursive walker over `FormSchema`.\n *\n * Each `SchemaEntry` dispatches to the matching layout component\n * (`Section`, `Fieldset`, `Grid`, `Tabs`, …) or to `<FieldRenderer>`\n * when it's a leaf. `Tabs` collects child `Tab` entries so the\n * keyboard-accessible `<FormTabs>` can render them as panels.\n *\n * The renderer is *presentational*: state lives in the caller (typically\n * `useArqelForm`). `value(name)` and `setValue(name, value)` resolve\n * field state, while `errors[name]` carries server/client validation\n * messages.\n */\n\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport {\n type FieldEntry,\n type FormSchema,\n isFieldEntry,\n isLayoutEntry,\n type LayoutEntry,\n type SchemaEntry,\n type TabEntry,\n} from '@arqel-dev/types/forms';\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\nimport { FieldRenderer } from './FieldRenderer.js';\nimport { FormFieldset } from './FormFieldset.js';\nimport { FormGrid } from './FormGrid.js';\nimport { FormSection } from './FormSection.js';\nimport { type FormTabConfig, FormTabs } from './FormTabs.js';\n\nexport interface FormRendererProps {\n schema: FormSchema;\n fields: FieldSchema[];\n values: Record<string, unknown>;\n errors?: Record<string, string[]>;\n onChange: (name: string, value: unknown) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport function FormRenderer({\n schema,\n fields,\n values,\n errors = {},\n onChange,\n disabled = false,\n className,\n}: FormRendererProps) {\n const fieldsByName = new Map(fields.map((f) => [f.name, f]));\n\n const renderEntry = (entry: SchemaEntry, key: string): ReactNode => {\n if (isFieldEntry(entry)) {\n return renderFieldEntry(entry, key);\n }\n if (isLayoutEntry(entry)) {\n return renderLayoutEntry(entry, key);\n }\n return null;\n };\n\n const renderFieldEntry = (entry: FieldEntry, key: string): ReactNode => {\n const field = fieldsByName.get(entry.name);\n if (!field) return null;\n return (\n <FieldRenderer\n key={key}\n field={field}\n value={values[entry.name]}\n errors={errors[entry.name]}\n disabled={disabled || schema.disabled === true}\n onChange={(value) => onChange(entry.name, value)}\n />\n );\n };\n\n const renderChildren = (entries: SchemaEntry[] | undefined): ReactNode => {\n if (!entries) return null;\n return entries.map((child, i) => renderEntry(child, `${i}`));\n };\n\n const renderLayoutEntry = (entry: LayoutEntry, key: string): ReactNode => {\n switch (entry.type) {\n case 'section':\n return (\n <FormSection key={key} config={entry.props}>\n {renderChildren(entry.schema)}\n </FormSection>\n );\n case 'fieldset':\n return (\n <FormFieldset key={key} config={entry.props}>\n {renderChildren(entry.schema)}\n </FormFieldset>\n );\n case 'grid':\n case 'columns':\n return (\n <FormGrid\n key={key}\n config={entry.type === 'columns' ? { columns: entry.props.columns } : entry.props}\n >\n {renderChildren(entry.schema)}\n </FormGrid>\n );\n case 'group':\n return (\n <div\n key={key}\n className={cn(\n 'flex gap-4',\n entry.props.orientation === 'vertical' ? 'flex-col' : 'flex-row',\n )}\n >\n {renderChildren(entry.schema)}\n </div>\n );\n case 'tabs': {\n const tabs: FormTabConfig[] = (entry.schema ?? [])\n .filter((c): c is TabEntry => isLayoutEntry(c) && c.type === 'tab')\n .map((tab) => ({\n id: tab.props.id,\n label: tab.props.label,\n badge: tab.props.badge,\n content: renderChildren(tab.schema) ?? <span key={`tab-${tab.props.id}-empty`} />,\n }));\n return <FormTabs key={key} config={entry.props} tabs={tabs} />;\n }\n case 'tab':\n // Tabs collect their children directly; lone Tab entries are\n // a no-op to avoid rendering the same content twice.\n return null;\n }\n };\n\n const columns = schema.columns ?? 1;\n\n return (\n <div\n data-arqel-form=\"\"\n className={cn('grid gap-4', className)}\n style={\n columns > 1 ? { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` } : undefined\n }\n >\n {schema.schema.map((entry, i) => renderEntry(entry, `${i}`))}\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","/**\n * Default Inertia page for `arqel::create`.\n *\n * Renders a `<FormRenderer>` over the schema/fields the server\n * emits (with `record: null`). Submission goes through Inertia's\n * `useForm` via `useArqelForm` from `@arqel-dev/hooks` — this page is\n * just the layout shell.\n */\n\nimport { useArqelForm } from '@arqel-dev/hooks';\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport type { FormSchema } from '@arqel-dev/types/forms';\nimport type { ResourceCreateProps } from '@arqel-dev/types/resources';\nimport { router, usePage } from '@inertiajs/react';\nimport type { FormEvent, JSX } from 'react';\nimport { FormActions } from '../form/FormActions.js';\nimport { FormRenderer } from '../form/FormRenderer.js';\nimport { PageHeader } from '../utility/PageHeader.js';\n\nconst FALLBACK_SCHEMA: FormSchema = {\n schema: [],\n columns: 1,\n model: null,\n inline: false,\n disabled: false,\n};\n\ninterface ArqelFormShape {\n data: Record<string, unknown>;\n setData: (name: string, value: unknown) => void;\n errors: Record<string, string[]>;\n processing: boolean;\n}\n\nexport default function ArqelCreatePage(): JSX.Element {\n const page = usePage();\n const props = page.props as unknown as ResourceCreateProps;\n const fields = (props.fields ?? []) as FieldSchema[];\n const schema = (props as unknown as { form?: FormSchema }).form ?? FALLBACK_SCHEMA;\n\n const form = useArqelForm({ fields }) as unknown as ArqelFormShape;\n\n const submit = (e: FormEvent): void => {\n e.preventDefault();\n const slug = props.resource?.slug ?? '';\n router.post(`/${slug}`, form.data as Record<string, never>, {\n preserveScroll: true,\n });\n };\n\n return (\n <div className=\"space-y-6\">\n <PageHeader title={`Create ${props.resource?.label ?? 'record'}`} description={null} />\n <form onSubmit={submit} className=\"space-y-6\">\n <FormRenderer\n schema={schema}\n fields={fields}\n values={form.data}\n onChange={(name, value) => form.setData(name, value)}\n errors={form.errors}\n />\n <FormActions processing={form.processing} onCancel={() => window.history.back()} />\n </form>\n </div>\n );\n}\n","/**\n * Default Inertia page for `arqel::edit`.\n *\n * Same shape as `ArqelCreatePage` but seeds the form with the\n * server-emitted `record`. Submission posts to PUT `/{slug}/{id}`.\n */\n\nimport { useArqelForm } from '@arqel-dev/hooks';\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport type { FormSchema } from '@arqel-dev/types/forms';\nimport type { RecordType, ResourceEditProps } from '@arqel-dev/types/resources';\nimport { router, usePage } from '@inertiajs/react';\nimport type { FormEvent, JSX } from 'react';\nimport { FormActions } from '../form/FormActions.js';\nimport { FormRenderer } from '../form/FormRenderer.js';\nimport { PageHeader } from '../utility/PageHeader.js';\n\nconst FALLBACK_SCHEMA: FormSchema = {\n schema: [],\n columns: 1,\n model: null,\n inline: false,\n disabled: false,\n};\n\ninterface ArqelFormShape {\n data: Record<string, unknown>;\n setData: (name: string, value: unknown) => void;\n errors: Record<string, string[]>;\n processing: boolean;\n}\n\nexport default function ArqelEditPage<TRecord extends RecordType = RecordType>(): JSX.Element {\n const page = usePage();\n const props = page.props as unknown as ResourceEditProps<TRecord>;\n const fields = (props.fields ?? []) as FieldSchema[];\n const record = props.record;\n const schema = (props as unknown as { form?: FormSchema }).form ?? FALLBACK_SCHEMA;\n\n const form = useArqelForm({ fields, record }) as unknown as ArqelFormShape;\n\n const submit = (e: FormEvent): void => {\n e.preventDefault();\n const id = String((record as { id?: string | number } | undefined)?.id ?? '');\n const slug = props.resource?.slug ?? '';\n router.put(`/${slug}/${id}`, form.data as Record<string, never>, {\n preserveScroll: true,\n });\n };\n\n return (\n <div className=\"space-y-6\">\n <PageHeader\n title={props.recordTitle ?? `Edit ${props.resource?.label ?? 'record'}`}\n description={props.recordSubtitle ?? null}\n />\n <form onSubmit={submit} className=\"space-y-6\">\n <FormRenderer\n schema={schema}\n fields={fields}\n values={form.data}\n onChange={(name, value) => form.setData(name, value)}\n errors={form.errors}\n />\n <FormActions processing={form.processing} onCancel={() => window.history.back()} />\n </form>\n </div>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/utils/cn\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked ?? false}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/utils/cn\"\nimport { Button } from \"@/shadcn/ui/button\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","/**\n * `<ActionFormModal>` — modal hosting a `<FormRenderer>` for an Action's\n * companion form (see `arqel-dev/actions` `HasForm`).\n *\n * Action form fields are a flat list — Action FormSchema is built\n * inline from the `ActionFormField[]` since layout components don't\n * apply at this scale. Submit fires `onSubmit(values)`; the parent\n * (typically `useAction`) handles invocation + loading.\n */\n\nimport type { ActionSchema, ModalSize } from '@arqel-dev/types/actions';\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport type { FormSchema } from '@arqel-dev/types/forms';\nimport { useMemo, useState } from 'react';\nimport { FormActions } from '../form/FormActions.js';\nimport { FormRenderer } from '../form/FormRenderer.js';\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from '../shadcn/ui/dialog.js';\nimport { cn } from '../utils/cn.js';\nimport { Button } from './Button.js';\n\nexport interface ActionFormModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n action: ActionSchema;\n fields: FieldSchema[];\n onSubmit: (values: Record<string, unknown>) => void;\n processing?: boolean;\n errors?: Record<string, string[]> | undefined;\n initialValues?: Record<string, unknown>;\n}\n\nconst SIZE_CLASSES: Record<ModalSize, string> = {\n sm: 'sm:max-w-[24rem]',\n md: 'sm:max-w-[32rem]',\n lg: 'sm:max-w-[44rem]',\n xl: 'sm:max-w-[56rem]',\n full: 'sm:max-w-[90vw] h-[90vh]',\n};\n\nexport function ActionFormModal({\n open,\n onOpenChange,\n action,\n fields,\n onSubmit,\n processing = false,\n errors = {},\n initialValues = {},\n}: ActionFormModalProps) {\n const [values, setValues] = useState<Record<string, unknown>>(initialValues);\n const size = action.modalSize ?? 'md';\n\n const schema: FormSchema = useMemo(\n () => ({\n schema: (action.form ?? []).map((entry) => ({\n kind: 'field' as const,\n name: entry.name,\n type: entry.type,\n })),\n columns: 1,\n model: null,\n inline: false,\n disabled: false,\n }),\n [action.form],\n );\n\n return (\n <Dialog open={open} onOpenChange={(next) => onOpenChange(next)}>\n <DialogContent className={cn('overflow-auto', SIZE_CLASSES[size])}>\n <DialogHeader>\n <DialogTitle>{action.label}</DialogTitle>\n </DialogHeader>\n <form\n className=\"flex flex-col gap-4\"\n onSubmit={(e) => {\n e.preventDefault();\n onSubmit(values);\n }}\n >\n <FormRenderer\n schema={schema}\n fields={fields}\n values={values}\n errors={errors}\n onChange={(name, value) => setValues((prev) => ({ ...prev, [name]: value }))}\n disabled={processing}\n />\n <FormActions\n processing={processing}\n submitLabel={action.label}\n extra={\n <DialogClose asChild>\n <Button type=\"button\" variant=\"ghost\" disabled={processing}>\n Cancel\n </Button>\n </DialogClose>\n }\n />\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","/**\n * `<ConfirmDialog>` — confirmation modal driven by the shadcn (Radix) Dialog.\n *\n * Phase 1 supports the canonical `ConfirmationConfig`:\n * - heading / description\n * - color (destructive | warning | info) — drives submit button variant\n * - submit / cancel labels\n * - \"type to confirm\" via `requiresText` (submit stays disabled until\n * the typed value matches exactly)\n *\n * Keyboard: Escape cancels (Radix built-in dismiss); Enter inside the\n * type-to-confirm input fires confirm when the value matches.\n */\n\nimport type { ConfirmationConfig } from '@arqel-dev/types/actions';\nimport { useEffect, useState } from 'react';\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '../shadcn/ui/dialog.js';\nimport { Button, type ButtonProps } from './Button.js';\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n config?: ConfirmationConfig | undefined;\n onConfirm: () => void;\n processing?: boolean;\n}\n\nconst COLOR_VARIANT: Record<NonNullable<ConfirmationConfig['color']>, ButtonProps['variant']> = {\n destructive: 'destructive',\n warning: 'default',\n info: 'default',\n};\n\nexport function ConfirmDialog({\n open,\n onOpenChange,\n config,\n onConfirm,\n processing = false,\n}: ConfirmDialogProps) {\n const [typed, setTyped] = useState('');\n\n useEffect(() => {\n if (!open) setTyped('');\n }, [open]);\n\n const requiresText = config?.requiresText;\n const submitDisabled = processing || (requiresText !== undefined && typed !== requiresText);\n const variant = COLOR_VARIANT[config?.color ?? 'destructive'];\n const submitLabel = config?.submitLabel ?? (config?.color === 'info' ? 'Confirm' : 'Delete');\n const cancelLabel = config?.cancelLabel ?? 'Cancel';\n\n return (\n <Dialog open={open} onOpenChange={(next) => onOpenChange(next)}>\n <DialogContent className=\"sm:max-w-[28rem]\" showCloseButton={false}>\n <DialogHeader>\n <DialogTitle>{config?.heading ?? 'Are you sure?'}</DialogTitle>\n {config?.description && <DialogDescription>{config.description}</DialogDescription>}\n </DialogHeader>\n {requiresText !== undefined && (\n <label className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n <span>\n Type <code className=\"font-mono text-foreground\">{requiresText}</code> to confirm\n </span>\n <input\n type=\"text\"\n ref={(el) => el?.focus()}\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !submitDisabled) {\n e.preventDefault();\n onConfirm();\n }\n }}\n className=\"h-9 rounded-md border border-input bg-background px-3 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n </label>\n )}\n <DialogFooter>\n <DialogClose asChild>\n <Button type=\"button\" variant=\"ghost\" disabled={processing}>\n {cancelLabel}\n </Button>\n </DialogClose>\n <Button type=\"button\" variant={variant} disabled={submitDisabled} onClick={onConfirm}>\n {processing ? 'Working…' : submitLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","/**\n * `<ActionButton>` — renders an `ActionSchema` as a button.\n *\n * Behaviour matrix:\n * - `requiresConfirmation` only → opens ConfirmDialog\n * - `form` only → opens ActionFormModal\n * - both → ConfirmDialog first, then form\n * - neither → fires `onInvoke` immediately\n *\n * `onInvoke` receives optional form data so parents (typically using\n * `useAction()` from @arqel-dev/hooks) can dispatch the underlying request.\n */\n\nimport type { ActionColor, ActionSchema, ActionVariant } from '@arqel-dev/types/actions';\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport { useState } from 'react';\nimport { ActionFormModal } from './ActionFormModal.js';\nimport { Button, type ButtonProps } from './Button.js';\nimport { ConfirmDialog } from './ConfirmDialog.js';\n\nexport interface ActionButtonProps {\n action: ActionSchema;\n /** Field schemas for any form modal (resolved server-side from Action::form). */\n formFields?: FieldSchema[];\n onInvoke: (formValues?: Record<string, unknown>) => void;\n processing?: boolean;\n errors?: Record<string, string[]>;\n size?: ButtonProps['size'];\n className?: string;\n}\n\nconst COLOR_TO_VARIANT: Record<ActionColor, ButtonProps['variant']> = {\n primary: 'default',\n secondary: 'outline',\n destructive: 'destructive',\n success: 'default',\n warning: 'default',\n info: 'default',\n};\n\nconst VARIANT_OVERRIDE: Partial<Record<ActionVariant, ButtonProps['variant']>> = {\n default: 'default',\n outline: 'outline',\n ghost: 'ghost',\n destructive: 'destructive',\n};\n\nexport function ActionButton({\n action,\n formFields = [],\n onInvoke,\n processing = false,\n errors,\n size = 'default',\n className,\n}: ActionButtonProps) {\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [formOpen, setFormOpen] = useState(false);\n\n const variant: ButtonProps['variant'] =\n VARIANT_OVERRIDE[action.variant] ?? COLOR_TO_VARIANT[action.color];\n\n const handleClick = () => {\n if (action.disabled) return;\n if (action.requiresConfirmation) {\n setConfirmOpen(true);\n } else if (action.form && action.form.length > 0) {\n setFormOpen(true);\n } else {\n onInvoke();\n }\n };\n\n const handleConfirm = () => {\n setConfirmOpen(false);\n if (action.form && action.form.length > 0) {\n setFormOpen(true);\n } else {\n onInvoke();\n }\n };\n\n const handleFormSubmit = (values: Record<string, unknown>) => {\n onInvoke(values);\n setFormOpen(false);\n };\n\n return (\n <>\n <Button\n variant={variant}\n size={size}\n disabled={action.disabled === true || processing}\n title={action.tooltip}\n onClick={handleClick}\n className={className}\n >\n {action.label}\n </Button>\n {action.requiresConfirmation && (\n <ConfirmDialog\n open={confirmOpen}\n onOpenChange={setConfirmOpen}\n config={action.confirmation}\n onConfirm={handleConfirm}\n processing={processing}\n />\n )}\n {action.form && action.form.length > 0 && (\n <ActionFormModal\n open={formOpen}\n onOpenChange={setFormOpen}\n action={action}\n fields={formFields}\n onSubmit={handleFormSubmit}\n processing={processing}\n errors={errors}\n />\n )}\n </>\n );\n}\n","/**\n * `<ActionMenu>` — renders a list of actions inline (≤ `inlineThreshold`)\n * or collapses them into a shadcn (Radix) dropdown menu when the list grows.\n *\n * Each menu item delegates to `<ActionButton>` so confirmation /\n * form-modal behaviour is consistent across surfaces. The dropdown\n * trigger is rendered as a ghost icon button by default; callers can\n * supply a custom `trigger` slot.\n */\n\nimport type { ActionSchema } from '@arqel-dev/types/actions';\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport type { ReactNode } from 'react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '../shadcn/ui/dropdown-menu.js';\nimport { cn } from '../utils/cn.js';\nimport { ActionButton } from './ActionButton.js';\nimport { Button } from './Button.js';\n\nexport interface ActionMenuProps {\n actions: ActionSchema[];\n formFieldsByAction?: Record<string, FieldSchema[]>;\n onInvoke: (action: ActionSchema, formValues?: Record<string, unknown>) => void;\n inlineThreshold?: number;\n processing?: boolean;\n trigger?: ReactNode;\n className?: string;\n}\n\nexport function ActionMenu({\n actions,\n formFieldsByAction = {},\n onInvoke,\n inlineThreshold = 3,\n processing = false,\n trigger,\n className,\n}: ActionMenuProps) {\n if (actions.length === 0) return null;\n\n if (actions.length <= inlineThreshold) {\n return (\n <div className={cn('flex flex-wrap items-center gap-1', className)}>\n {actions.map((action) => (\n <ActionButton\n key={action.name}\n action={action}\n formFields={formFieldsByAction[action.name] ?? []}\n onInvoke={(values) => onInvoke(action, values)}\n processing={processing}\n size=\"sm\"\n />\n ))}\n </div>\n );\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n {trigger ?? (\n <Button variant=\"ghost\" size=\"icon\" aria-label=\"Actions\">\n ⋯\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" sideOffset={6} className={cn('min-w-[12rem]', className)}>\n {actions.map((action) => (\n <DropdownMenuItem\n key={action.name}\n disabled={action.disabled === true}\n variant={action.color === 'destructive' ? 'destructive' : 'default'}\n onSelect={() => {\n // Delegate to ActionButton-style handling by routing\n // through onInvoke. Confirmation/form modals are still\n // available via direct ActionButton usage; the menu\n // is intended for plain links / direct invocations.\n if (action.disabled) return;\n onInvoke(action);\n }}\n >\n {action.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\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","/**\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","/**\n * `<ResourceIndex>` — page-level wrapper for index/listing routes.\n *\n * Wires `ResourceIndexProps` (server payload) into the table stack:\n * header (title + toolbar actions + create button)\n * → TableToolbar (search + filters + bulk bar)\n * → DataTable (with selection, sorting, row actions)\n * → TablePagination\n *\n * The component is presentational — selection / sort / page transitions\n * are lifted to props so the same shell can be reused by ResourceIndex\n * (Inertia-driven) and dashboard widgets (memory-driven).\n */\n\nimport type { RecordType, ResourceIndexProps as ServerProps } from '@arqel-dev/types/resources';\nimport type { SortDirection, TableSort } from '@arqel-dev/types/tables';\nimport type { ReactNode } from 'react';\nimport { DataTable } from '../table/DataTable.js';\nimport { TableFilters } from '../table/TableFilters.js';\nimport { TablePagination } from '../table/TablePagination.js';\nimport { TableToolbar } from '../table/TableToolbar.js';\nimport { cn } from '../utils/cn.js';\n\ntype RowId = string | number;\n\nexport interface ResourceIndexUIProps<TRecord extends RecordType = RecordType>\n extends ServerProps<TRecord> {\n selectedIds?: ReadonlyArray<RowId>;\n onSelectionChange?: (ids: RowId[]) => void;\n onSortChange?: (column: string, direction: SortDirection) => void;\n onPageChange?: (page: number) => void;\n onPerPageChange?: (perPage: number) => void;\n onSearchChange?: (search: string) => void;\n onFilterChange?: (name: string, value: unknown) => void;\n onClearFilters?: () => void;\n\n filterValues?: Record<string, unknown>;\n\n searchSlot?: ReactNode;\n toolbarActions?: ReactNode;\n rowActions?: (record: TRecord) => ReactNode;\n bulkActions?: ReactNode;\n emptyState?: ReactNode;\n\n loading?: boolean;\n className?: string;\n}\n\nexport function ResourceIndex<TRecord extends RecordType = RecordType>({\n resource,\n records,\n pagination,\n columns,\n filters,\n search,\n sort,\n selectedIds = [],\n filterValues = {},\n onSelectionChange,\n onSortChange,\n onPageChange,\n onPerPageChange,\n onSearchChange,\n onFilterChange,\n onClearFilters,\n searchSlot,\n toolbarActions,\n rowActions,\n bulkActions,\n emptyState,\n loading = false,\n className,\n}: ResourceIndexUIProps<TRecord>) {\n const enableSelection = Boolean(onSelectionChange);\n\n const renderSearch = (): ReactNode => {\n if (searchSlot) return searchSlot;\n if (!onSearchChange) return null;\n return (\n <label className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n Search\n <input\n type=\"search\"\n placeholder={`Search ${resource.pluralLabel.toLowerCase()}…`}\n className=\"h-9 w-64 rounded-sm border border-[var(--input)] bg-background px-3 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n value={search ?? ''}\n onChange={(e) => onSearchChange(e.target.value)}\n />\n </label>\n );\n };\n\n const normalisedSort: TableSort | null = sort?.column\n ? {\n column: sort.column,\n direction: sort.direction === 'desc' ? 'desc' : 'asc',\n }\n : null;\n\n return (\n <section\n className={cn('flex flex-col rounded-md border border-border bg-background', className)}\n aria-label={resource.pluralLabel}\n >\n <header className=\"flex flex-wrap items-center gap-3 border-b border-border px-4 py-3\">\n <h1 className=\"text-lg font-semibold\">{resource.pluralLabel}</h1>\n <div className=\"ml-auto flex flex-wrap items-center gap-2\">{toolbarActions}</div>\n </header>\n\n <TableToolbar\n search={renderSearch()}\n filters={\n filters.length > 0 ? (\n <TableFilters\n filters={filters}\n values={filterValues}\n onChange={(name, value) => onFilterChange?.(name, value)}\n onClearAll={onClearFilters}\n />\n ) : null\n }\n selectedCount={selectedIds.length}\n bulkActions={bulkActions}\n onClearSelection={onSelectionChange ? () => onSelectionChange([]) : undefined}\n />\n\n <DataTable\n columns={columns}\n records={records as unknown as Array<{ id: RowId } & TRecord>}\n enableSelection={enableSelection}\n selectedIds={selectedIds}\n onSelectionChange={onSelectionChange}\n sort={normalisedSort}\n onSortChange={onSortChange}\n rowActions={rowActions ? (record) => rowActions(record as TRecord) : undefined}\n loading={loading}\n emptyState={emptyState}\n />\n\n {pagination && (\n <TablePagination\n meta={pagination}\n onPageChange={(page) => onPageChange?.(page)}\n onPerPageChange={onPerPageChange}\n />\n )}\n </section>\n );\n}\n","/**\n * Default Inertia page for `arqel::index`.\n *\n * Pulls every prop the server emits via `InertiaDataBuilder::\n * buildIndexData` / `buildTableIndexData` and forwards them to\n * `<ResourceIndex>`. Apps can override per-resource by registering\n * their own page component at `Pages/Arqel/{Slug}/Index.tsx` (the\n * lookup falls through to user pages first inside `createArqelApp`).\n *\n * Wires the standard table interactions — search / filter / sort /\n * pagination — into Inertia partial `router.get` visits so the\n * server can re-run TableQueryBuilder with the new query string.\n *\n * Query-string contract (matches `Arqel\\Table\\TableQueryBuilder`):\n * - `?search=foo` global search\n * - `?sort=column&direction=asc|desc`\n * - `?page=N&per_page=M`\n * - `?filter[name]=value` one entry per filter\n *\n * `search` is debounced (300ms) so typing doesn't hammer the\n * backend; the rest fire immediately.\n */\n\nimport type { ActionSchema } from '@arqel-dev/types/actions';\nimport type { RecordType, ResourceIndexProps } from '@arqel-dev/types/resources';\nimport type { SortDirection } from '@arqel-dev/types/tables';\nimport { router, usePage } from '@inertiajs/react';\nimport { type JSX, useEffect, useMemo, useRef, useState } from 'react';\nimport { ActionMenu } from '../action/ActionMenu.js';\nimport { ResourceIndex } from '../resource/ResourceIndex.js';\n\ntype FilterValue = unknown;\n\nfunction pruneEmptyFilters(values: Record<string, FilterValue>): Record<string, FilterValue> {\n const out: Record<string, FilterValue> = {};\n for (const [k, v] of Object.entries(values)) {\n if (v === undefined || v === null || v === '') continue;\n if (Array.isArray(v) && v.length === 0) continue;\n out[k] = v;\n }\n return out;\n}\n\ninterface VisitParams {\n filters: Record<string, FilterValue>;\n search: string;\n sort?: { column: string | null; direction: string | null } | null;\n page?: number | undefined;\n perPage?: number | undefined;\n}\n\nfunction invokeAction(\n action: ActionSchema,\n record: { id: string | number } | null,\n formValues?: Record<string, unknown>,\n): void {\n const recordId = record?.id;\n const url = action.url\n ? action.url.replace('{id}', String(recordId ?? ''))\n : `/arqel-dev/actions/${action.name}`;\n const method = action.method.toLowerCase() as 'get' | 'post' | 'put' | 'patch' | 'delete';\n const data: Record<string, unknown> = { ...(formValues ?? {}) };\n if (recordId !== undefined) data['record_id'] = recordId;\n\n router.visit(url, {\n method: method as never,\n data: data as never,\n preserveScroll: true,\n });\n}\n\nfunction buildQuery(params: VisitParams): Record<string, unknown> {\n const data: Record<string, unknown> = {};\n const filters = pruneEmptyFilters(params.filters);\n if (Object.keys(filters).length > 0) data['filter'] = filters;\n if (params.search !== undefined) data['search'] = params.search;\n if (params.sort?.column) {\n data['sort'] = params.sort.column;\n if (params.sort.direction) data['direction'] = params.sort.direction;\n }\n if (params.page && params.page > 1) data['page'] = params.page;\n if (params.perPage) data['per_page'] = params.perPage;\n return data;\n}\n\nexport default function ArqelIndexPage<TRecord extends RecordType = RecordType>(): JSX.Element {\n const page = usePage();\n const props = page.props as unknown as ResourceIndexProps<TRecord>;\n\n const initialFilters = useMemo(() => {\n if (typeof window === 'undefined') return {};\n const sp = new URLSearchParams(window.location.search);\n const fromUrl: Record<string, FilterValue> = {};\n for (const [key, value] of sp.entries()) {\n const m = key.match(/^filter\\[([^\\]]+)\\]$/);\n if (m?.[1]) fromUrl[m[1]] = value;\n }\n return fromUrl;\n }, []);\n\n const [filterValues, setFilterValues] = useState<Record<string, FilterValue>>(initialFilters);\n const [searchValue, setSearchValue] = useState<string>(props.search ?? '');\n const [perPage, setPerPage] = useState<number | undefined>(props.pagination?.perPage);\n const [selectedIds, setSelectedIds] = useState<ReadonlyArray<string | number>>([]);\n const searchDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const visit = (data: Record<string, unknown>): void => {\n const url = typeof window !== 'undefined' ? window.location.pathname : page.url.split('?')[0];\n router.get(url ?? '/', data as Record<string, string | number | boolean | undefined>, {\n preserveState: true,\n preserveScroll: true,\n replace: true,\n });\n };\n\n const currentSort = props.sort ?? null;\n\n const handleFilterChange = (name: string, value: FilterValue): void => {\n const nextFilters = { ...filterValues };\n if (value === undefined || value === null || value === '') {\n delete nextFilters[name];\n } else {\n nextFilters[name] = value;\n }\n setFilterValues(nextFilters);\n visit(buildQuery({ filters: nextFilters, search: searchValue, sort: currentSort, perPage }));\n };\n\n const handleClearFilters = (): void => {\n setFilterValues({});\n visit(buildQuery({ filters: {}, search: searchValue, sort: currentSort, perPage }));\n };\n\n const handleSearchChange = (value: string): void => {\n setSearchValue(value);\n if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);\n searchDebounceRef.current = setTimeout(() => {\n visit(buildQuery({ filters: filterValues, search: value, sort: currentSort, perPage }));\n }, 300);\n };\n\n useEffect(\n () => () => {\n if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);\n },\n [],\n );\n\n const handleSortChange = (column: string, direction: SortDirection): void => {\n visit(\n buildQuery({\n filters: filterValues,\n search: searchValue,\n sort: { column, direction },\n perPage,\n }),\n );\n };\n\n const handlePageChange = (pageNum: number): void => {\n visit(\n buildQuery({\n filters: filterValues,\n search: searchValue,\n sort: currentSort,\n page: pageNum,\n perPage,\n }),\n );\n };\n\n const handlePerPageChange = (newPerPage: number): void => {\n setPerPage(newPerPage);\n visit(\n buildQuery({\n filters: filterValues,\n search: searchValue,\n sort: currentSort,\n perPage: newPerPage,\n }),\n );\n };\n\n const bulkActionsList = props.actions?.bulk ?? [];\n const bulkActions =\n bulkActionsList.length > 0 && selectedIds.length > 0 ? (\n <div className=\"flex items-center gap-2\">\n {bulkActionsList.map((action) => (\n <button\n key={action.name}\n type=\"button\"\n onClick={() => {\n const url = action.url ?? `/arqel-dev/actions/${action.name}`;\n const method = action.method.toLowerCase() as\n | 'get'\n | 'post'\n | 'put'\n | 'patch'\n | 'delete';\n router.visit(url, {\n method: method as never,\n data: { record_ids: selectedIds as readonly (string | number)[] } as never,\n preserveScroll: true,\n onSuccess: () => setSelectedIds([]),\n });\n }}\n className=\"inline-flex h-8 items-center gap-1 rounded-sm border border-destructive/40 bg-destructive/10 px-3 text-xs font-medium text-destructive hover:bg-destructive/20\"\n >\n {action.label}\n </button>\n ))}\n </div>\n ) : undefined;\n\n const rowActionsList = props.actions?.row ?? [];\n const rowActions =\n rowActionsList.length > 0\n ? (record: TRecord) => (\n <ActionMenu\n actions={rowActionsList}\n onInvoke={(action, formValues) =>\n invokeAction(action, record as { id: string | number }, formValues)\n }\n />\n )\n : undefined;\n\n return (\n <ResourceIndex<TRecord>\n {...props}\n filterValues={filterValues}\n onFilterChange={handleFilterChange}\n onClearFilters={handleClearFilters}\n onSearchChange={handleSearchChange}\n onSortChange={handleSortChange}\n onPageChange={handlePageChange}\n onPerPageChange={handlePerPageChange}\n search={searchValue}\n selectedIds={selectedIds}\n onSelectionChange={(ids) => setSelectedIds(ids)}\n {...(rowActions ? { rowActions } : {})}\n {...(bulkActions ? { bulkActions } : {})}\n />\n );\n}\n","/**\n * Default Inertia page for `arqel::show`.\n *\n * Read-only render of the record. Re-uses `<FormRenderer>` with\n * every field forced to disabled — keeps a single rendering path\n * for create/edit/show without a parallel \"DetailRenderer\" stack.\n */\n\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport type { FormSchema } from '@arqel-dev/types/forms';\nimport type { RecordType, ResourceDetailProps } from '@arqel-dev/types/resources';\nimport { usePage } from '@inertiajs/react';\nimport type { JSX } from 'react';\nimport { FormRenderer } from '../form/FormRenderer.js';\nimport { PageHeader } from '../utility/PageHeader.js';\n\nconst FALLBACK_SCHEMA: FormSchema = {\n schema: [],\n columns: 1,\n model: null,\n inline: false,\n disabled: true,\n};\n\nexport default function ArqelShowPage<TRecord extends RecordType = RecordType>(): JSX.Element {\n const page = usePage();\n const props = page.props as unknown as ResourceDetailProps<TRecord>;\n const fields = (props.fields ?? []) as FieldSchema[];\n\n // Seed values from the record so FormRenderer has something to\n // display. Detail mode disables every field.\n const values: Record<string, unknown> = {};\n for (const field of fields) {\n const name = field.name;\n if (typeof name === 'string' && props.record !== null && typeof props.record === 'object') {\n values[name] = (props.record as Record<string, unknown>)[name];\n }\n }\n\n const declaredForm = (props as unknown as { form?: FormSchema }).form;\n const schema: FormSchema = declaredForm ? { ...declaredForm, disabled: true } : FALLBACK_SCHEMA;\n\n return (\n <div className=\"space-y-6\">\n <PageHeader\n title={props.recordTitle ?? props.resource?.label ?? 'Record'}\n description={props.recordSubtitle ?? null}\n />\n <FormRenderer\n schema={schema}\n fields={fields}\n values={values}\n onChange={() => {\n // No-op — show pages are read-only.\n }}\n errors={{}}\n />\n </div>\n );\n}\n","/**\n * Built-in Inertia page registry for `arqel::*`.\n *\n * `createArqelApp({ pages })` from `@arqel-dev/react/inertia` accepts\n * one or more `PageRegistry` records — merge `arqelPages` first so\n * user-defined pages can override per-resource:\n *\n * ```ts\n * import { arqelPages } from '@arqel-dev/ui/pages';\n * import { createArqelApp } from '@arqel-dev/react/inertia';\n *\n * const userPages = import.meta.glob('./Pages/**\\/*.tsx');\n *\n * createArqelApp({\n * pages: { ...arqelPages, ...userPages },\n * });\n * ```\n *\n * Names match what `ResourceController` emits via\n * `Inertia::render('arqel::index', ...)`.\n */\n\nimport type { ComponentType } from 'react';\n\ntype LazyPage = () => Promise<{ default: ComponentType<unknown> }>;\n\nexport const arqelPages: Record<string, LazyPage> = {\n 'arqel::index': () =>\n import('./ArqelIndexPage.js') as Promise<{ default: ComponentType<unknown> }>,\n 'arqel::create': () =>\n import('./ArqelCreatePage.js') as Promise<{ default: ComponentType<unknown> }>,\n 'arqel::edit': () => import('./ArqelEditPage.js') as Promise<{ default: ComponentType<unknown> }>,\n 'arqel::show': () => import('./ArqelShowPage.js') as Promise<{ default: ComponentType<unknown> }>,\n};\n\nexport { default as ArqelCreatePage } from './ArqelCreatePage.js';\nexport { default as ArqelEditPage } from './ArqelEditPage.js';\nexport { default as ArqelIndexPage } from './ArqelIndexPage.js';\nexport { default as ArqelShowPage } from './ArqelShowPage.js';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts","../src/shadcn/ui/button.tsx","../src/action/Button.tsx","../src/form/FormActions.tsx","../src/form/FieldRegistry.tsx","../src/form/nativeFields.tsx","../src/form/FieldRenderer.tsx","../src/form/FormFieldset.tsx","../src/form/FormGrid.tsx","../src/form/FormSection.tsx","../src/form/FormTabs.tsx","../src/form/FormRenderer.tsx","../src/utility/PageHeader.tsx","../src/pages/ArqelCreatePage.tsx","../src/pages/ArqelEditPage.tsx","../src/shadcn/ui/dropdown-menu.tsx","../src/shadcn/ui/dialog.tsx","../src/action/ActionFormModal.tsx","../src/action/ConfirmDialog.tsx","../src/action/ActionButton.tsx","../src/action/ActionMenu.tsx","../src/table/cells.tsx","../src/table/DataTable.tsx","../src/table/TableFilters.tsx","../src/table/TablePagination.tsx","../src/table/TableToolbar.tsx","../src/resource/ResourceIndex.tsx","../src/pages/ArqelIndexPage.tsx","../src/pages/ArqelShowPage.tsx","../src/pages/index.ts"],"names":["jsx","jsxs","useState","useId","usePage","FALLBACK_SCHEMA","useArqelForm","router","DropdownMenuPrimitive","DialogPrimitive","Fragment","useRef","useMemo","useEffect"],"mappings":"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","file":"pages.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","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 * Re-export shadcn (new-york) Button so existing consumers continue to\n * import `Button` and `buttonVariants` from `@arqel-dev/ui/action`\n * while the actual implementation lives in `src/shadcn/ui/button.tsx`.\n *\n * Variants exposed (shadcn): `default | destructive | outline |\n * secondary | ghost | link`. Sizes: `default | xs | sm | lg | icon |\n * icon-xs | icon-sm | icon-lg`.\n */\n\nimport type { ComponentProps } from 'react';\nimport type { Button } from '../shadcn/ui/button.js';\n\nexport { Button, buttonVariants } from '../shadcn/ui/button.js';\n\nexport type ButtonProps = ComponentProps<typeof Button>;\n","/**\n * `<FormActions>` — submit + cancel + extra slots.\n *\n * Sits at the bottom of a form. The submit button is `type=\"submit\"`\n * so wrapping a `<form>` around `<FormRenderer>` + `<FormActions>`\n * triggers the form's onSubmit naturally.\n */\n\nimport type { ReactNode } from 'react';\nimport { Button } from '../action/Button.js';\nimport { cn } from '../utils/cn.js';\n\nexport interface FormActionsProps {\n submitLabel?: string;\n cancelLabel?: string;\n onCancel?: () => void;\n processing?: boolean;\n disabled?: boolean;\n extra?: ReactNode;\n className?: string;\n}\n\nexport function FormActions({\n submitLabel = 'Save',\n cancelLabel = 'Cancel',\n onCancel,\n processing = false,\n disabled = false,\n extra,\n className,\n}: FormActionsProps) {\n return (\n <div\n className={cn(\n 'flex flex-wrap items-center justify-end gap-2 border-t border-border pt-4',\n className,\n )}\n >\n {extra && <div className=\"mr-auto\">{extra}</div>}\n {onCancel && (\n <Button type=\"button\" variant=\"ghost\" onClick={onCancel} disabled={processing}>\n {cancelLabel}\n </Button>\n )}\n <Button type=\"submit\" disabled={processing || disabled}>\n {processing ? 'Saving…' : submitLabel}\n </Button>\n </div>\n );\n}\n","/**\n * `FieldRegistry` — name → React component mapping for FieldRenderer.\n *\n * `@arqel-dev/fields` (FIELDS-JS-*) calls `registerField` at module init to\n * plug rich inputs in; until then FieldRenderer falls back to the\n * native HTML primitives in `nativeFields.tsx`. Registration is global\n * by design — apps can override Arqel defaults by re-registering with\n * the same name.\n */\n\nimport type { ComponentType } from 'react';\nimport type { FieldRendererProps } from './FieldRenderer.js';\n\nexport type FieldComponent = ComponentType<FieldRendererProps>;\n\nconst registry = new Map<string, FieldComponent>();\n\nexport function registerField(name: string, component: FieldComponent): void {\n registry.set(name, component);\n}\n\nexport function getFieldComponent(name: string): FieldComponent | undefined {\n return registry.get(name);\n}\n\nexport function unregisterField(name: string): void {\n registry.delete(name);\n}\n\nexport function getRegisteredFields(): string[] {\n return Array.from(registry.keys()).sort();\n}\n\n/** Test-only helper. */\nexport function clearFieldRegistry(): void {\n registry.clear();\n}\n","/**\n * Native HTML fallback inputs — used until `@arqel-dev/fields` registers\n * richer impls. One renderer per FieldSchema discriminant.\n */\n\nimport type {\n BelongsToFieldSchema,\n BooleanFieldSchema,\n CurrencyFieldSchema,\n DateFieldSchema,\n DateTimeFieldSchema,\n EmailFieldSchema,\n FieldSchema,\n HasManyFieldSchema,\n MultiSelectFieldSchema,\n NumberFieldSchema,\n PasswordFieldSchema,\n RadioFieldSchema,\n SelectFieldSchema,\n SlugFieldSchema,\n TextareaFieldSchema,\n TextFieldSchema,\n ToggleFieldSchema,\n UrlFieldSchema,\n} from '@arqel-dev/types/fields';\nimport { cn } from '../utils/cn.js';\n\nexport interface NativeProps {\n field: FieldSchema;\n value: unknown;\n onChange: (value: unknown) => void;\n disabled?: boolean | undefined;\n errors?: string[] | undefined;\n className?: string | undefined;\n inputId?: string | undefined;\n describedBy?: string | undefined;\n}\n\nconst inputClasses = 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 'disabled:cursor-not-allowed disabled:opacity-50',\n);\n\nexport function NativeFieldInput(props: NativeProps) {\n const { field } = props;\n\n switch (field.type) {\n case 'text':\n case 'email':\n case 'url':\n case 'password':\n case 'slug':\n return <TextLike {...props} field={field} />;\n case 'textarea':\n return <Textarea {...props} field={field} />;\n case 'number':\n case 'currency':\n return <NumericInput {...props} field={field} />;\n case 'boolean':\n case 'toggle':\n return <Checkbox {...props} field={field} />;\n case 'select':\n return <SelectInput {...props} field={field} />;\n case 'multiSelect':\n case 'hasMany':\n return <MultiSelectInput {...props} field={field} />;\n case 'radio':\n return <RadioGroup {...props} field={field} />;\n case 'belongsTo':\n return <BelongsToInput {...props} field={field} />;\n case 'date':\n case 'dateTime':\n return <DateInput {...props} field={field} />;\n case 'file':\n case 'image':\n return <FileInput {...props} />;\n default:\n return null;\n }\n}\n\n/* ─── primitives ─────────────────────────────────────────────────── */\n\ntype TextLikeField =\n | TextFieldSchema\n | EmailFieldSchema\n | UrlFieldSchema\n | PasswordFieldSchema\n | SlugFieldSchema;\n\nfunction TextLike({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: TextLikeField }) {\n const htmlType =\n field.type === 'email'\n ? 'email'\n : field.type === 'password'\n ? 'password'\n : field.type === 'url'\n ? 'url'\n : 'text';\n const isDisabled = disabled || field.disabled || field.readonly;\n return (\n <input\n id={inputId}\n type={htmlType}\n className={inputClasses}\n value={typeof value === 'string' ? value : ((value ?? '')?.toString() ?? '')}\n placeholder={field.placeholder ?? undefined}\n disabled={isDisabled}\n readOnly={field.readonly === true}\n required={field.required === true}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n />\n );\n}\n\nfunction Textarea({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: TextareaFieldSchema }) {\n return (\n <textarea\n id={inputId}\n className={cn(inputClasses, 'h-auto min-h-[5rem] py-2')}\n value={typeof value === 'string' ? value : ''}\n placeholder={field.placeholder ?? undefined}\n disabled={disabled || field.disabled || field.readonly}\n readOnly={field.readonly === true}\n required={field.required === true}\n rows={4}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value)}\n />\n );\n}\n\nfunction NumericInput({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: NumberFieldSchema | CurrencyFieldSchema }) {\n return (\n <input\n id={inputId}\n type=\"number\"\n className={inputClasses}\n value={value === null || value === undefined ? '' : String(value)}\n placeholder={field.placeholder ?? undefined}\n disabled={disabled || field.disabled || field.readonly}\n readOnly={field.readonly === true}\n required={field.required === true}\n aria-describedby={describedBy}\n onChange={(e) => {\n const raw = e.target.value;\n if (raw === '') {\n onChange(null);\n return;\n }\n const num = Number(raw);\n onChange(Number.isNaN(num) ? null : num);\n }}\n />\n );\n}\n\nfunction Checkbox({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: BooleanFieldSchema | ToggleFieldSchema }) {\n return (\n <input\n id={inputId}\n type=\"checkbox\"\n className=\"h-4 w-4 rounded border-[var(--input)]\"\n checked={value === true}\n disabled={disabled || field.disabled || field.readonly}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.checked)}\n />\n );\n}\n\nfunction normaliseOptions(\n options: SelectFieldSchema['props']['options'] | undefined,\n): Array<{ value: string | number; label: string }> {\n if (!options) return [];\n if (Array.isArray(options)) return options;\n return Object.entries(options).map(([value, label]) => ({ value, label }));\n}\n\nfunction SelectInput({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: SelectFieldSchema }) {\n const options = normaliseOptions(field.props.options);\n return (\n <select\n id={inputId}\n className={inputClasses}\n value={value === null || value === undefined ? '' : String(value)}\n disabled={disabled || field.disabled || field.readonly}\n required={field.required === true}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value === '' ? null : e.target.value)}\n >\n {field.placeholder && <option value=\"\">{field.placeholder}</option>}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n}\n\nfunction MultiSelectInput({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: MultiSelectFieldSchema | HasManyFieldSchema }) {\n const arr = Array.isArray(value) ? (value as Array<string | number>) : [];\n const options = field.type === 'multiSelect' ? normaliseOptions(field.props.options) : [];\n return (\n <select\n id={inputId}\n multiple\n className={cn(inputClasses, 'h-auto min-h-[6rem] py-1')}\n value={arr.map(String)}\n disabled={disabled || field.disabled || field.readonly}\n aria-describedby={describedBy}\n onChange={(e) => {\n const next = Array.from(e.target.selectedOptions, (o) => o.value);\n onChange(next);\n }}\n >\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n}\n\nfunction RadioGroup({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: RadioFieldSchema }) {\n return (\n <div\n id={inputId}\n className=\"flex flex-col gap-1\"\n aria-describedby={describedBy}\n role=\"radiogroup\"\n >\n {(field.props.options ?? []).map((opt) => (\n <label key={opt.value} className=\"inline-flex items-center gap-2 text-sm\">\n <input\n type=\"radio\"\n name={field.name}\n value={String(opt.value)}\n checked={String(value ?? '') === String(opt.value)}\n disabled={disabled || field.disabled || field.readonly}\n onChange={() => onChange(opt.value)}\n />\n {opt.label}\n </label>\n ))}\n </div>\n );\n}\n\nfunction BelongsToInput({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: BelongsToFieldSchema }) {\n // Phase 1 fallback: native text input. The full async-search picker\n // ships in `@arqel-dev/fields/BelongsToField` and registers via FieldRegistry.\n return (\n <input\n id={inputId}\n type=\"text\"\n className={inputClasses}\n value={value === null || value === undefined ? '' : String(value)}\n placeholder={field.placeholder ?? `Search ${field.props.relatedResource}…`}\n disabled={disabled || field.disabled || field.readonly}\n readOnly={field.readonly === true}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value === '' ? null : e.target.value)}\n />\n );\n}\n\nfunction DateInput({\n field,\n value,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: DateFieldSchema | DateTimeFieldSchema }) {\n return (\n <input\n id={inputId}\n type={field.type === 'dateTime' ? 'datetime-local' : 'date'}\n className={inputClasses}\n value={typeof value === 'string' ? value : ''}\n disabled={disabled || field.disabled || field.readonly}\n readOnly={field.readonly === true}\n required={field.required === true}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.value === '' ? null : e.target.value)}\n />\n );\n}\n\nfunction FileInput({\n field,\n onChange,\n disabled,\n inputId,\n describedBy,\n}: NativeProps & { field: FieldSchema }) {\n return (\n <input\n id={inputId}\n type=\"file\"\n className=\"text-sm\"\n disabled={disabled || field.disabled || field.readonly}\n aria-describedby={describedBy}\n onChange={(e) => onChange(e.target.files?.[0] ?? null)}\n />\n );\n}\n","/**\n * `<FieldRenderer>` — renders a single field.\n *\n * Resolution order:\n * 1. Component registered via `registerField(field.component)` (rich\n * inputs from `@arqel-dev/fields`)\n * 2. Native fallback dispatched by `field.type` (text/number/boolean/...)\n *\n * Errors come from `errors[name]` (Inertia or client). The component\n * also honours `disabled` / `readonly` / `required` from the schema.\n */\n\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport { type ChangeEvent, type ReactNode, useId } from 'react';\nimport { cn } from '../utils/cn.js';\nimport { getFieldComponent } from './FieldRegistry.js';\nimport { NativeFieldInput } from './nativeFields.js';\n\nexport interface FieldRendererProps {\n field: FieldSchema;\n value: unknown;\n onChange: (value: unknown) => void;\n errors?: string[] | undefined;\n disabled?: boolean | undefined;\n className?: string | undefined;\n inputId?: string | undefined;\n describedBy?: string | undefined;\n}\n\nexport function FieldRenderer(props: FieldRendererProps): ReactNode {\n const { field, errors, className } = props;\n const id = useId();\n const errorId = `${id}-error`;\n const helperId = `${id}-helper`;\n const hasError = errors && errors.length > 0;\n\n const Custom = field.component ? getFieldComponent(field.component) : undefined;\n const Input = Custom ?? (NativeFieldInput as typeof NativeFieldInput);\n\n const describedBy = [field.helperText ? helperId : null, hasError ? errorId : null]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n data-arqel-field={field.name}\n data-field-type={field.type}\n className={cn('flex flex-col gap-1', className)}\n >\n {field.label !== null && field.label !== '' && (\n <label htmlFor={id} className=\"text-sm font-medium\">\n {field.label}\n {field.required && (\n <span aria-hidden=\"true\" className=\"ml-0.5 text-destructive\">\n *\n </span>\n )}\n </label>\n )}\n <Input {...props} inputId={id} describedBy={describedBy || undefined} />\n {field.helperText && !hasError && (\n <p id={helperId} className=\"text-xs text-muted-foreground\">\n {field.helperText}\n </p>\n )}\n {hasError && (\n <p id={errorId} role=\"alert\" className=\"text-xs text-destructive\">\n {errors[0]}\n </p>\n )}\n </div>\n );\n}\n\n/* ─── helpers ────────────────────────────────────────────────────── */\n\nexport function asInputChange<T>(\n cast: (raw: string) => T,\n): (event: ChangeEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>) => T {\n return (event) => cast(event.target.value);\n}\n","/**\n * `<FormFieldset>` — semantic `<fieldset>` with grid body.\n */\n\nimport type { FieldsetProps } from '@arqel-dev/types/forms';\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface FormFieldsetProps {\n config: FieldsetProps;\n children: ReactNode;\n className?: string;\n}\n\nexport function FormFieldset({ config, children, className }: FormFieldsetProps) {\n return (\n <fieldset className={cn('rounded-md border border-border p-4', className)}>\n <legend className=\"px-1 text-sm font-medium\">{config.legend}</legend>\n <div\n className=\"grid gap-4\"\n style={{ gridTemplateColumns: `repeat(${config.columns ?? 1}, minmax(0, 1fr))` }}\n >\n {children}\n </div>\n </fieldset>\n );\n}\n","/**\n * `<FormGrid>` — responsive CSS-grid container.\n */\n\nimport type { GridProps } from '@arqel-dev/types/forms';\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface FormGridProps {\n config: GridProps;\n children: ReactNode;\n className?: string;\n}\n\nexport function FormGrid({ config, children, className }: FormGridProps) {\n // biome-ignore lint/complexity/useLiteralKeys: tsc `noPropertyAccessFromIndexSignature` exige bracket access\n const columns = typeof config.columns === 'number' ? config.columns : (config.columns['md'] ?? 1);\n return (\n <div\n className={cn('grid', className)}\n style={{\n gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,\n gap: config.gap ?? '1rem',\n }}\n >\n {children}\n </div>\n );\n}\n","/**\n * `<FormSection>` — heading + optional description + collapsible body.\n *\n * Renders a SectionEntry. Aside layout (heading on the left, body on the\n * right) ships behind the `aside` prop so wide forms can read like docs.\n */\n\nimport type { SectionProps } from '@arqel-dev/types/forms';\nimport { type ReactNode, useState } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface FormSectionProps {\n config: SectionProps;\n children: ReactNode;\n className?: string;\n}\n\nexport function FormSection({ config, children, className }: FormSectionProps) {\n const [open, setOpen] = useState(!config.collapsed);\n const collapsible = config.collapsible === true;\n\n const heading = (\n <div className=\"flex items-start gap-2\">\n <div className=\"flex-1\">\n <h3 className=\"text-sm font-semibold\">{config.heading}</h3>\n {config.description && (\n <p className=\"text-xs text-muted-foreground\">{config.description}</p>\n )}\n </div>\n {collapsible && (\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n className=\"text-sm text-muted-foreground hover:underline\"\n >\n {open ? 'Hide' : 'Show'}\n </button>\n )}\n </div>\n );\n\n const body = open && (\n <div\n className=\"grid gap-4\"\n style={{ gridTemplateColumns: `repeat(${config.columns ?? 1}, minmax(0, 1fr))` }}\n >\n {children}\n </div>\n );\n\n return (\n <section\n data-arqel-section=\"\"\n className={cn(\n 'rounded-md border border-border bg-background',\n config.compact ? 'p-3' : 'p-4',\n className,\n )}\n >\n {config.aside ? (\n <div className=\"grid gap-4 md:grid-cols-[16rem_1fr]\">\n <div>{heading}</div>\n <div>{body}</div>\n </div>\n ) : (\n <>\n <div className=\"mb-3\">{heading}</div>\n {body}\n </>\n )}\n </section>\n );\n}\n","/**\n * `<FormTabs>` — minimal tabs implementation (Phase 1).\n *\n * UI-002+ wires Base UI Tabs primitive properly; this Phase 1 version\n * is keyboard-accessible (Arrow keys + Home/End) but doesn't yet support\n * lazy mounting or controlled mode.\n */\n\nimport type { TabsProps } from '@arqel-dev/types/forms';\nimport { type ReactElement, type ReactNode, useId, useRef, useState } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface FormTabConfig {\n id: string;\n label: string;\n badge?: number | undefined;\n content: ReactNode;\n}\n\nexport interface FormTabsProps {\n config: TabsProps;\n tabs: FormTabConfig[];\n className?: string;\n}\n\nexport function FormTabs({ config, tabs, className }: FormTabsProps): ReactElement | null {\n const [active, setActive] = useState(config.defaultTab ?? tabs[0]?.id ?? null);\n const baseId = useId();\n const refs = useRef<(HTMLButtonElement | null)[]>([]);\n\n if (tabs.length === 0 || active === null) return null;\n const activeIndex = Math.max(\n 0,\n tabs.findIndex((t) => t.id === active),\n );\n const activeTab = tabs[activeIndex];\n if (!activeTab) return null;\n\n const focus = (i: number) => {\n const target = tabs[i];\n if (!target) return;\n setActive(target.id);\n refs.current[i]?.focus();\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n focus((activeIndex + 1) % tabs.length);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n focus((activeIndex - 1 + tabs.length) % tabs.length);\n } else if (e.key === 'Home') {\n e.preventDefault();\n focus(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n focus(tabs.length - 1);\n }\n };\n\n return (\n <div className={className}>\n <div\n role=\"tablist\"\n aria-orientation={config.orientation}\n className=\"flex gap-1 border-b border-border\"\n >\n {tabs.map((tab, i) => {\n const selected = tab.id === active;\n return (\n <button\n key={tab.id}\n ref={(el) => {\n refs.current[i] = el;\n }}\n type=\"button\"\n role=\"tab\"\n id={`${baseId}-tab-${tab.id}`}\n aria-controls={`${baseId}-panel-${tab.id}`}\n aria-selected={selected}\n tabIndex={selected ? 0 : -1}\n onClick={() => setActive(tab.id)}\n onKeyDown={onKeyDown}\n className={cn(\n '-mb-px border-b-2 px-3 py-2 text-sm transition-colors',\n selected\n ? 'border-primary font-medium text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground',\n )}\n >\n {tab.label}\n {tab.badge !== undefined && tab.badge !== null && (\n <span className=\"ml-1 rounded-full bg-muted px-1.5 text-xs\">{tab.badge}</span>\n )}\n </button>\n );\n })}\n </div>\n <div\n role=\"tabpanel\"\n id={`${baseId}-panel-${activeTab.id}`}\n aria-labelledby={`${baseId}-tab-${activeTab.id}`}\n className=\"pt-4\"\n >\n {activeTab.content}\n </div>\n </div>\n );\n}\n","/**\n * `<FormRenderer>` — recursive walker over `FormSchema`.\n *\n * Each `SchemaEntry` dispatches to the matching layout component\n * (`Section`, `Fieldset`, `Grid`, `Tabs`, …) or to `<FieldRenderer>`\n * when it's a leaf. `Tabs` collects child `Tab` entries so the\n * keyboard-accessible `<FormTabs>` can render them as panels.\n *\n * The renderer is *presentational*: state lives in the caller (typically\n * `useArqelForm`). `value(name)` and `setValue(name, value)` resolve\n * field state, while `errors[name]` carries server/client validation\n * messages.\n */\n\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport {\n type FieldEntry,\n type FormSchema,\n isFieldEntry,\n isLayoutEntry,\n type LayoutEntry,\n type SchemaEntry,\n type TabEntry,\n} from '@arqel-dev/types/forms';\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\nimport { FieldRenderer } from './FieldRenderer.js';\nimport { FormFieldset } from './FormFieldset.js';\nimport { FormGrid } from './FormGrid.js';\nimport { FormSection } from './FormSection.js';\nimport { type FormTabConfig, FormTabs } from './FormTabs.js';\n\nexport interface FormRendererProps {\n schema: FormSchema;\n fields: FieldSchema[];\n values: Record<string, unknown>;\n errors?: Record<string, string[]>;\n onChange: (name: string, value: unknown) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport function FormRenderer({\n schema,\n fields,\n values,\n errors = {},\n onChange,\n disabled = false,\n className,\n}: FormRendererProps) {\n const fieldsByName = new Map(fields.map((f) => [f.name, f]));\n\n const renderEntry = (entry: SchemaEntry, key: string): ReactNode => {\n if (isFieldEntry(entry)) {\n return renderFieldEntry(entry, key);\n }\n if (isLayoutEntry(entry)) {\n return renderLayoutEntry(entry, key);\n }\n return null;\n };\n\n const renderFieldEntry = (entry: FieldEntry, key: string): ReactNode => {\n const field = fieldsByName.get(entry.name);\n if (!field) return null;\n return (\n <FieldRenderer\n key={key}\n field={field}\n value={values[entry.name]}\n errors={errors[entry.name]}\n disabled={disabled || schema.disabled === true}\n onChange={(value) => onChange(entry.name, value)}\n />\n );\n };\n\n const renderChildren = (entries: SchemaEntry[] | undefined): ReactNode => {\n if (!entries) return null;\n return entries.map((child, i) => renderEntry(child, `${i}`));\n };\n\n const renderLayoutEntry = (entry: LayoutEntry, key: string): ReactNode => {\n switch (entry.type) {\n case 'section':\n return (\n <FormSection key={key} config={entry.props}>\n {renderChildren(entry.schema)}\n </FormSection>\n );\n case 'fieldset':\n return (\n <FormFieldset key={key} config={entry.props}>\n {renderChildren(entry.schema)}\n </FormFieldset>\n );\n case 'grid':\n case 'columns':\n return (\n <FormGrid\n key={key}\n config={entry.type === 'columns' ? { columns: entry.props.columns } : entry.props}\n >\n {renderChildren(entry.schema)}\n </FormGrid>\n );\n case 'group':\n return (\n <div\n key={key}\n className={cn(\n 'flex gap-4',\n entry.props.orientation === 'vertical' ? 'flex-col' : 'flex-row',\n )}\n >\n {renderChildren(entry.schema)}\n </div>\n );\n case 'tabs': {\n const tabs: FormTabConfig[] = (entry.schema ?? [])\n .filter((c): c is TabEntry => isLayoutEntry(c) && c.type === 'tab')\n .map((tab) => ({\n id: tab.props.id,\n label: tab.props.label,\n badge: tab.props.badge,\n content: renderChildren(tab.schema) ?? <span key={`tab-${tab.props.id}-empty`} />,\n }));\n return <FormTabs key={key} config={entry.props} tabs={tabs} />;\n }\n case 'tab':\n // Tabs collect their children directly; lone Tab entries are\n // a no-op to avoid rendering the same content twice.\n return null;\n }\n };\n\n const columns = schema.columns ?? 1;\n\n return (\n <div\n data-arqel-form=\"\"\n className={cn('grid gap-4', className)}\n style={\n columns > 1 ? { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` } : undefined\n }\n >\n {schema.schema.map((entry, i) => renderEntry(entry, `${i}`))}\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","/**\n * Default Inertia page for `arqel::create`.\n *\n * Renders a `<FormRenderer>` over the schema/fields the server\n * emits (with `record: null`). Submission goes through Inertia's\n * `useForm` via `useArqelForm` from `@arqel-dev/hooks` — this page is\n * just the layout shell.\n */\n\nimport { useArqelForm } from '@arqel-dev/hooks';\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport type { FormSchema } from '@arqel-dev/types/forms';\nimport type { ResourceCreateProps } from '@arqel-dev/types/resources';\nimport { router, usePage } from '@inertiajs/react';\nimport type { FormEvent, JSX } from 'react';\nimport { FormActions } from '../form/FormActions.js';\nimport { FormRenderer } from '../form/FormRenderer.js';\nimport { PageHeader } from '../utility/PageHeader.js';\n\nconst FALLBACK_SCHEMA: FormSchema = {\n schema: [],\n columns: 1,\n model: null,\n inline: false,\n disabled: false,\n};\n\ninterface ArqelFormShape {\n data: Record<string, unknown>;\n setData: (name: string, value: unknown) => void;\n errors: Record<string, string[]>;\n processing: boolean;\n}\n\nexport default function ArqelCreatePage(): JSX.Element {\n const page = usePage();\n const props = page.props as unknown as ResourceCreateProps;\n const fields = (props.fields ?? []) as FieldSchema[];\n const schema = (props as unknown as { form?: FormSchema }).form ?? FALLBACK_SCHEMA;\n\n const form = useArqelForm({ fields }) as unknown as ArqelFormShape;\n\n const submit = (e: FormEvent): void => {\n e.preventDefault();\n const slug = props.resource?.slug ?? '';\n const basePath = props.resource?.panelPath ?? '/admin';\n router.post(`${basePath}/${slug}`, form.data as Record<string, never>, {\n preserveScroll: true,\n });\n };\n\n return (\n <div className=\"space-y-6\">\n <PageHeader title={`Create ${props.resource?.label ?? 'record'}`} description={null} />\n <form onSubmit={submit} className=\"space-y-6\">\n <FormRenderer\n schema={schema}\n fields={fields}\n values={form.data}\n onChange={(name, value) => form.setData(name, value)}\n errors={form.errors}\n />\n <FormActions processing={form.processing} onCancel={() => window.history.back()} />\n </form>\n </div>\n );\n}\n","/**\n * Default Inertia page for `arqel::edit`.\n *\n * Same shape as `ArqelCreatePage` but seeds the form with the\n * server-emitted `record`. Submission posts to PUT `/{slug}/{id}`.\n */\n\nimport { useArqelForm } from '@arqel-dev/hooks';\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport type { FormSchema } from '@arqel-dev/types/forms';\nimport type { RecordType, ResourceEditProps } from '@arqel-dev/types/resources';\nimport { router, usePage } from '@inertiajs/react';\nimport type { FormEvent, JSX } from 'react';\nimport { FormActions } from '../form/FormActions.js';\nimport { FormRenderer } from '../form/FormRenderer.js';\nimport { PageHeader } from '../utility/PageHeader.js';\n\nconst FALLBACK_SCHEMA: FormSchema = {\n schema: [],\n columns: 1,\n model: null,\n inline: false,\n disabled: false,\n};\n\ninterface ArqelFormShape {\n data: Record<string, unknown>;\n setData: (name: string, value: unknown) => void;\n errors: Record<string, string[]>;\n processing: boolean;\n}\n\nexport default function ArqelEditPage<TRecord extends RecordType = RecordType>(): JSX.Element {\n const page = usePage();\n const props = page.props as unknown as ResourceEditProps<TRecord>;\n const fields = (props.fields ?? []) as FieldSchema[];\n const record = props.record;\n const schema = (props as unknown as { form?: FormSchema }).form ?? FALLBACK_SCHEMA;\n\n const form = useArqelForm({ fields, record }) as unknown as ArqelFormShape;\n\n const submit = (e: FormEvent): void => {\n e.preventDefault();\n const id = String((record as { id?: string | number } | undefined)?.id ?? '');\n const slug = props.resource?.slug ?? '';\n const basePath = props.resource?.panelPath ?? '/admin';\n router.put(`${basePath}/${slug}/${id}`, form.data as Record<string, never>, {\n preserveScroll: true,\n });\n };\n\n return (\n <div className=\"space-y-6\">\n <PageHeader\n title={props.recordTitle ?? `Edit ${props.resource?.label ?? 'record'}`}\n description={props.recordSubtitle ?? null}\n />\n <form onSubmit={submit} className=\"space-y-6\">\n <FormRenderer\n schema={schema}\n fields={fields}\n values={form.data}\n onChange={(name, value) => form.setData(name, value)}\n errors={form.errors}\n />\n <FormActions processing={form.processing} onCancel={() => window.history.back()} />\n </form>\n </div>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/utils/cn\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked ?? false}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/utils/cn\"\nimport { Button } from \"@/shadcn/ui/button\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","/**\n * `<ActionFormModal>` — modal hosting a `<FormRenderer>` for an Action's\n * companion form (see `arqel-dev/actions` `HasForm`).\n *\n * Action form fields are a flat list — Action FormSchema is built\n * inline from the `ActionFormField[]` since layout components don't\n * apply at this scale. Submit fires `onSubmit(values)`; the parent\n * (typically `useAction`) handles invocation + loading.\n */\n\nimport type { ActionSchema, ModalSize } from '@arqel-dev/types/actions';\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport type { FormSchema } from '@arqel-dev/types/forms';\nimport { useMemo, useState } from 'react';\nimport { FormActions } from '../form/FormActions.js';\nimport { FormRenderer } from '../form/FormRenderer.js';\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from '../shadcn/ui/dialog.js';\nimport { cn } from '../utils/cn.js';\nimport { Button } from './Button.js';\n\nexport interface ActionFormModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n action: ActionSchema;\n fields: FieldSchema[];\n onSubmit: (values: Record<string, unknown>) => void;\n processing?: boolean;\n errors?: Record<string, string[]> | undefined;\n initialValues?: Record<string, unknown>;\n}\n\nconst SIZE_CLASSES: Record<ModalSize, string> = {\n sm: 'sm:max-w-[24rem]',\n md: 'sm:max-w-[32rem]',\n lg: 'sm:max-w-[44rem]',\n xl: 'sm:max-w-[56rem]',\n full: 'sm:max-w-[90vw] h-[90vh]',\n};\n\nexport function ActionFormModal({\n open,\n onOpenChange,\n action,\n fields,\n onSubmit,\n processing = false,\n errors = {},\n initialValues = {},\n}: ActionFormModalProps) {\n const [values, setValues] = useState<Record<string, unknown>>(initialValues);\n const size = action.modalSize ?? 'md';\n\n const schema: FormSchema = useMemo(\n () => ({\n schema: (action.form ?? []).map((entry) => ({\n kind: 'field' as const,\n name: entry.name,\n type: entry.type,\n })),\n columns: 1,\n model: null,\n inline: false,\n disabled: false,\n }),\n [action.form],\n );\n\n return (\n <Dialog open={open} onOpenChange={(next) => onOpenChange(next)}>\n <DialogContent className={cn('overflow-auto', SIZE_CLASSES[size])}>\n <DialogHeader>\n <DialogTitle>{action.label}</DialogTitle>\n </DialogHeader>\n <form\n className=\"flex flex-col gap-4\"\n onSubmit={(e) => {\n e.preventDefault();\n onSubmit(values);\n }}\n >\n <FormRenderer\n schema={schema}\n fields={fields}\n values={values}\n errors={errors}\n onChange={(name, value) => setValues((prev) => ({ ...prev, [name]: value }))}\n disabled={processing}\n />\n <FormActions\n processing={processing}\n submitLabel={action.label}\n extra={\n <DialogClose asChild>\n <Button type=\"button\" variant=\"ghost\" disabled={processing}>\n Cancel\n </Button>\n </DialogClose>\n }\n />\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","/**\n * `<ConfirmDialog>` — confirmation modal driven by the shadcn (Radix) Dialog.\n *\n * Phase 1 supports the canonical `ConfirmationConfig`:\n * - heading / description\n * - color (destructive | warning | info) — drives submit button variant\n * - submit / cancel labels\n * - \"type to confirm\" via `requiresText` (submit stays disabled until\n * the typed value matches exactly)\n *\n * Keyboard: Escape cancels (Radix built-in dismiss); Enter inside the\n * type-to-confirm input fires confirm when the value matches.\n */\n\nimport type { ConfirmationConfig } from '@arqel-dev/types/actions';\nimport { useEffect, useState } from 'react';\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '../shadcn/ui/dialog.js';\nimport { Button, type ButtonProps } from './Button.js';\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n config?: ConfirmationConfig | undefined;\n onConfirm: () => void;\n processing?: boolean;\n}\n\nconst COLOR_VARIANT: Record<NonNullable<ConfirmationConfig['color']>, ButtonProps['variant']> = {\n destructive: 'destructive',\n warning: 'default',\n info: 'default',\n};\n\nexport function ConfirmDialog({\n open,\n onOpenChange,\n config,\n onConfirm,\n processing = false,\n}: ConfirmDialogProps) {\n const [typed, setTyped] = useState('');\n\n useEffect(() => {\n if (!open) setTyped('');\n }, [open]);\n\n const requiresText = config?.requiresText;\n const submitDisabled = processing || (requiresText !== undefined && typed !== requiresText);\n const variant = COLOR_VARIANT[config?.color ?? 'destructive'];\n const submitLabel = config?.submitLabel ?? (config?.color === 'info' ? 'Confirm' : 'Delete');\n const cancelLabel = config?.cancelLabel ?? 'Cancel';\n\n return (\n <Dialog open={open} onOpenChange={(next) => onOpenChange(next)}>\n <DialogContent className=\"sm:max-w-[28rem]\" showCloseButton={false}>\n <DialogHeader>\n <DialogTitle>{config?.heading ?? 'Are you sure?'}</DialogTitle>\n {config?.description && <DialogDescription>{config.description}</DialogDescription>}\n </DialogHeader>\n {requiresText !== undefined && (\n <label className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n <span>\n Type <code className=\"font-mono text-foreground\">{requiresText}</code> to confirm\n </span>\n <input\n type=\"text\"\n ref={(el) => el?.focus()}\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !submitDisabled) {\n e.preventDefault();\n onConfirm();\n }\n }}\n className=\"h-9 rounded-md border border-input bg-background px-3 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n </label>\n )}\n <DialogFooter>\n <DialogClose asChild>\n <Button type=\"button\" variant=\"ghost\" disabled={processing}>\n {cancelLabel}\n </Button>\n </DialogClose>\n <Button type=\"button\" variant={variant} disabled={submitDisabled} onClick={onConfirm}>\n {processing ? 'Working…' : submitLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","/**\n * `<ActionButton>` — renders an `ActionSchema` as a button.\n *\n * Behaviour matrix:\n * - `requiresConfirmation` only → opens ConfirmDialog\n * - `form` only → opens ActionFormModal\n * - both → ConfirmDialog first, then form\n * - neither → fires `onInvoke` immediately\n *\n * `onInvoke` receives optional form data so parents (typically using\n * `useAction()` from @arqel-dev/hooks) can dispatch the underlying request.\n */\n\nimport type { ActionColor, ActionSchema, ActionVariant } from '@arqel-dev/types/actions';\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport { useState } from 'react';\nimport { ActionFormModal } from './ActionFormModal.js';\nimport { Button, type ButtonProps } from './Button.js';\nimport { ConfirmDialog } from './ConfirmDialog.js';\n\nexport interface ActionButtonProps {\n action: ActionSchema;\n /** Field schemas for any form modal (resolved server-side from Action::form). */\n formFields?: FieldSchema[];\n onInvoke: (formValues?: Record<string, unknown>) => void;\n processing?: boolean;\n errors?: Record<string, string[]>;\n size?: ButtonProps['size'];\n className?: string;\n}\n\nconst COLOR_TO_VARIANT: Record<ActionColor, ButtonProps['variant']> = {\n primary: 'default',\n secondary: 'outline',\n destructive: 'destructive',\n success: 'default',\n warning: 'default',\n info: 'default',\n};\n\nconst VARIANT_OVERRIDE: Partial<Record<ActionVariant, ButtonProps['variant']>> = {\n default: 'default',\n outline: 'outline',\n ghost: 'ghost',\n destructive: 'destructive',\n};\n\nexport function ActionButton({\n action,\n formFields = [],\n onInvoke,\n processing = false,\n errors,\n size = 'default',\n className,\n}: ActionButtonProps) {\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [formOpen, setFormOpen] = useState(false);\n\n const variant: ButtonProps['variant'] =\n VARIANT_OVERRIDE[action.variant] ?? COLOR_TO_VARIANT[action.color];\n\n const handleClick = () => {\n if (action.disabled) return;\n if (action.requiresConfirmation) {\n setConfirmOpen(true);\n } else if (action.form && action.form.length > 0) {\n setFormOpen(true);\n } else {\n onInvoke();\n }\n };\n\n const handleConfirm = () => {\n setConfirmOpen(false);\n if (action.form && action.form.length > 0) {\n setFormOpen(true);\n } else {\n onInvoke();\n }\n };\n\n const handleFormSubmit = (values: Record<string, unknown>) => {\n onInvoke(values);\n setFormOpen(false);\n };\n\n return (\n <>\n <Button\n variant={variant}\n size={size}\n disabled={action.disabled === true || processing}\n title={action.tooltip}\n onClick={handleClick}\n className={className}\n >\n {action.label}\n </Button>\n {action.requiresConfirmation && (\n <ConfirmDialog\n open={confirmOpen}\n onOpenChange={setConfirmOpen}\n config={action.confirmation}\n onConfirm={handleConfirm}\n processing={processing}\n />\n )}\n {action.form && action.form.length > 0 && (\n <ActionFormModal\n open={formOpen}\n onOpenChange={setFormOpen}\n action={action}\n fields={formFields}\n onSubmit={handleFormSubmit}\n processing={processing}\n errors={errors}\n />\n )}\n </>\n );\n}\n","/**\n * `<ActionMenu>` — renders a list of actions inline (≤ `inlineThreshold`)\n * or collapses them into a shadcn (Radix) dropdown menu when the list grows.\n *\n * Each menu item delegates to `<ActionButton>` so confirmation /\n * form-modal behaviour is consistent across surfaces. The dropdown\n * trigger is rendered as a ghost icon button by default; callers can\n * supply a custom `trigger` slot.\n */\n\nimport type { ActionSchema } from '@arqel-dev/types/actions';\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport type { ReactNode } from 'react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '../shadcn/ui/dropdown-menu.js';\nimport { cn } from '../utils/cn.js';\nimport { ActionButton } from './ActionButton.js';\nimport { Button } from './Button.js';\n\nexport interface ActionMenuProps {\n actions: ActionSchema[];\n formFieldsByAction?: Record<string, FieldSchema[]>;\n onInvoke: (action: ActionSchema, formValues?: Record<string, unknown>) => void;\n inlineThreshold?: number;\n processing?: boolean;\n trigger?: ReactNode;\n className?: string;\n}\n\nexport function ActionMenu({\n actions,\n formFieldsByAction = {},\n onInvoke,\n inlineThreshold = 3,\n processing = false,\n trigger,\n className,\n}: ActionMenuProps) {\n if (actions.length === 0) return null;\n\n if (actions.length <= inlineThreshold) {\n return (\n <div className={cn('flex flex-wrap items-center gap-1', className)}>\n {actions.map((action) => (\n <ActionButton\n key={action.name}\n action={action}\n formFields={formFieldsByAction[action.name] ?? []}\n onInvoke={(values) => onInvoke(action, values)}\n processing={processing}\n size=\"sm\"\n />\n ))}\n </div>\n );\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n {trigger ?? (\n <Button variant=\"ghost\" size=\"icon\" aria-label=\"Actions\">\n ⋯\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" sideOffset={6} className={cn('min-w-[12rem]', className)}>\n {actions.map((action) => (\n <DropdownMenuItem\n key={action.name}\n disabled={action.disabled === true}\n variant={action.color === 'destructive' ? 'destructive' : 'default'}\n onSelect={() => {\n // Delegate to ActionButton-style handling by routing\n // through onInvoke. Confirmation/form modals are still\n // available via direct ActionButton usage; the menu\n // is intended for plain links / direct invocations.\n if (action.disabled) return;\n onInvoke(action);\n }}\n >\n {action.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\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","/**\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","/**\n * `<ResourceIndex>` — page-level wrapper for index/listing routes.\n *\n * Wires `ResourceIndexProps` (server payload) into the table stack:\n * header (title + toolbar actions + create button)\n * → TableToolbar (search + filters + bulk bar)\n * → DataTable (with selection, sorting, row actions)\n * → TablePagination\n *\n * The component is presentational — selection / sort / page transitions\n * are lifted to props so the same shell can be reused by ResourceIndex\n * (Inertia-driven) and dashboard widgets (memory-driven).\n */\n\nimport type { RecordType, ResourceIndexProps as ServerProps } from '@arqel-dev/types/resources';\nimport type { SortDirection, TableSort } from '@arqel-dev/types/tables';\nimport type { ReactNode } from 'react';\nimport { DataTable } from '../table/DataTable.js';\nimport { TableFilters } from '../table/TableFilters.js';\nimport { TablePagination } from '../table/TablePagination.js';\nimport { TableToolbar } from '../table/TableToolbar.js';\nimport { cn } from '../utils/cn.js';\n\ntype RowId = string | number;\n\nexport interface ResourceIndexUIProps<TRecord extends RecordType = RecordType>\n extends ServerProps<TRecord> {\n selectedIds?: ReadonlyArray<RowId>;\n onSelectionChange?: (ids: RowId[]) => void;\n onSortChange?: (column: string, direction: SortDirection) => void;\n onPageChange?: (page: number) => void;\n onPerPageChange?: (perPage: number) => void;\n onSearchChange?: (search: string) => void;\n onFilterChange?: (name: string, value: unknown) => void;\n onClearFilters?: () => void;\n\n filterValues?: Record<string, unknown>;\n\n searchSlot?: ReactNode;\n toolbarActions?: ReactNode;\n rowActions?: (record: TRecord) => ReactNode;\n bulkActions?: ReactNode;\n emptyState?: ReactNode;\n\n loading?: boolean;\n className?: string;\n}\n\nexport function ResourceIndex<TRecord extends RecordType = RecordType>({\n resource,\n records,\n pagination,\n columns,\n filters,\n search,\n sort,\n selectedIds = [],\n filterValues = {},\n onSelectionChange,\n onSortChange,\n onPageChange,\n onPerPageChange,\n onSearchChange,\n onFilterChange,\n onClearFilters,\n searchSlot,\n toolbarActions,\n rowActions,\n bulkActions,\n emptyState,\n loading = false,\n className,\n}: ResourceIndexUIProps<TRecord>) {\n const enableSelection = Boolean(onSelectionChange);\n\n const renderSearch = (): ReactNode => {\n if (searchSlot) return searchSlot;\n if (!onSearchChange) return null;\n return (\n <label className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n Search\n <input\n type=\"search\"\n placeholder={`Search ${resource.pluralLabel.toLowerCase()}…`}\n className=\"h-9 w-64 rounded-sm border border-[var(--input)] bg-background px-3 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n value={search ?? ''}\n onChange={(e) => onSearchChange(e.target.value)}\n />\n </label>\n );\n };\n\n const normalisedSort: TableSort | null = sort?.column\n ? {\n column: sort.column,\n direction: sort.direction === 'desc' ? 'desc' : 'asc',\n }\n : null;\n\n return (\n <section\n className={cn('flex flex-col rounded-md border border-border bg-background', className)}\n aria-label={resource.pluralLabel}\n >\n <header className=\"flex flex-wrap items-center gap-3 border-b border-border px-4 py-3\">\n <h1 className=\"text-lg font-semibold\">{resource.pluralLabel}</h1>\n <div className=\"ml-auto flex flex-wrap items-center gap-2\">{toolbarActions}</div>\n </header>\n\n <TableToolbar\n search={renderSearch()}\n filters={\n filters.length > 0 ? (\n <TableFilters\n filters={filters}\n values={filterValues}\n onChange={(name, value) => onFilterChange?.(name, value)}\n onClearAll={onClearFilters}\n />\n ) : null\n }\n selectedCount={selectedIds.length}\n bulkActions={bulkActions}\n onClearSelection={onSelectionChange ? () => onSelectionChange([]) : undefined}\n />\n\n <DataTable\n columns={columns}\n records={records as unknown as Array<{ id: RowId } & TRecord>}\n enableSelection={enableSelection}\n selectedIds={selectedIds}\n onSelectionChange={onSelectionChange}\n sort={normalisedSort}\n onSortChange={onSortChange}\n rowActions={rowActions ? (record) => rowActions(record as TRecord) : undefined}\n loading={loading}\n emptyState={emptyState}\n />\n\n {pagination && (\n <TablePagination\n meta={pagination}\n onPageChange={(page) => onPageChange?.(page)}\n onPerPageChange={onPerPageChange}\n />\n )}\n </section>\n );\n}\n","/**\n * Default Inertia page for `arqel::index`.\n *\n * Pulls every prop the server emits via `InertiaDataBuilder::\n * buildIndexData` / `buildTableIndexData` and forwards them to\n * `<ResourceIndex>`. Apps can override per-resource by registering\n * their own page component at `Pages/Arqel/{Slug}/Index.tsx` (the\n * lookup falls through to user pages first inside `createArqelApp`).\n *\n * Wires the standard table interactions — search / filter / sort /\n * pagination — into Inertia partial `router.get` visits so the\n * server can re-run TableQueryBuilder with the new query string.\n *\n * Query-string contract (matches `Arqel\\Table\\TableQueryBuilder`):\n * - `?search=foo` global search\n * - `?sort=column&direction=asc|desc`\n * - `?page=N&per_page=M`\n * - `?filter[name]=value` one entry per filter\n *\n * `search` is debounced (300ms) so typing doesn't hammer the\n * backend; the rest fire immediately.\n */\n\nimport type { ActionSchema } from '@arqel-dev/types/actions';\nimport type { RecordType, ResourceIndexProps } from '@arqel-dev/types/resources';\nimport type { SortDirection } from '@arqel-dev/types/tables';\nimport { router, usePage } from '@inertiajs/react';\nimport { type JSX, useEffect, useMemo, useRef, useState } from 'react';\nimport { ActionMenu } from '../action/ActionMenu.js';\nimport { ResourceIndex } from '../resource/ResourceIndex.js';\n\ntype FilterValue = unknown;\n\nfunction pruneEmptyFilters(values: Record<string, FilterValue>): Record<string, FilterValue> {\n const out: Record<string, FilterValue> = {};\n for (const [k, v] of Object.entries(values)) {\n if (v === undefined || v === null || v === '') continue;\n if (Array.isArray(v) && v.length === 0) continue;\n out[k] = v;\n }\n return out;\n}\n\ninterface VisitParams {\n filters: Record<string, FilterValue>;\n search: string;\n sort?: { column: string | null; direction: string | null } | null;\n page?: number | undefined;\n perPage?: number | undefined;\n}\n\nfunction invokeAction(\n action: ActionSchema,\n record: { id: string | number } | null,\n formValues?: Record<string, unknown>,\n): void {\n const recordId = record?.id;\n const url = action.url\n ? action.url.replace('{id}', String(recordId ?? ''))\n : `/arqel-dev/actions/${action.name}`;\n const method = action.method.toLowerCase() as 'get' | 'post' | 'put' | 'patch' | 'delete';\n const data: Record<string, unknown> = { ...(formValues ?? {}) };\n if (recordId !== undefined) data['record_id'] = recordId;\n\n router.visit(url, {\n method: method as never,\n data: data as never,\n preserveScroll: true,\n });\n}\n\nfunction buildQuery(params: VisitParams): Record<string, unknown> {\n const data: Record<string, unknown> = {};\n const filters = pruneEmptyFilters(params.filters);\n if (Object.keys(filters).length > 0) data['filter'] = filters;\n if (params.search !== undefined) data['search'] = params.search;\n if (params.sort?.column) {\n data['sort'] = params.sort.column;\n if (params.sort.direction) data['direction'] = params.sort.direction;\n }\n if (params.page && params.page > 1) data['page'] = params.page;\n if (params.perPage) data['per_page'] = params.perPage;\n return data;\n}\n\nexport default function ArqelIndexPage<TRecord extends RecordType = RecordType>(): JSX.Element {\n const page = usePage();\n const props = page.props as unknown as ResourceIndexProps<TRecord>;\n\n const initialFilters = useMemo(() => {\n if (typeof window === 'undefined') return {};\n const sp = new URLSearchParams(window.location.search);\n const fromUrl: Record<string, FilterValue> = {};\n for (const [key, value] of sp.entries()) {\n const m = key.match(/^filter\\[([^\\]]+)\\]$/);\n if (m?.[1]) fromUrl[m[1]] = value;\n }\n return fromUrl;\n }, []);\n\n const [filterValues, setFilterValues] = useState<Record<string, FilterValue>>(initialFilters);\n const [searchValue, setSearchValue] = useState<string>(props.search ?? '');\n const [perPage, setPerPage] = useState<number | undefined>(props.pagination?.perPage);\n const [selectedIds, setSelectedIds] = useState<ReadonlyArray<string | number>>([]);\n const searchDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const visit = (data: Record<string, unknown>): void => {\n const url = typeof window !== 'undefined' ? window.location.pathname : page.url.split('?')[0];\n router.get(url ?? '/', data as Record<string, string | number | boolean | undefined>, {\n preserveState: true,\n preserveScroll: true,\n replace: true,\n });\n };\n\n const currentSort = props.sort ?? null;\n\n const handleFilterChange = (name: string, value: FilterValue): void => {\n const nextFilters = { ...filterValues };\n if (value === undefined || value === null || value === '') {\n delete nextFilters[name];\n } else {\n nextFilters[name] = value;\n }\n setFilterValues(nextFilters);\n visit(buildQuery({ filters: nextFilters, search: searchValue, sort: currentSort, perPage }));\n };\n\n const handleClearFilters = (): void => {\n setFilterValues({});\n visit(buildQuery({ filters: {}, search: searchValue, sort: currentSort, perPage }));\n };\n\n const handleSearchChange = (value: string): void => {\n setSearchValue(value);\n if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);\n searchDebounceRef.current = setTimeout(() => {\n visit(buildQuery({ filters: filterValues, search: value, sort: currentSort, perPage }));\n }, 300);\n };\n\n useEffect(\n () => () => {\n if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);\n },\n [],\n );\n\n const handleSortChange = (column: string, direction: SortDirection): void => {\n visit(\n buildQuery({\n filters: filterValues,\n search: searchValue,\n sort: { column, direction },\n perPage,\n }),\n );\n };\n\n const handlePageChange = (pageNum: number): void => {\n visit(\n buildQuery({\n filters: filterValues,\n search: searchValue,\n sort: currentSort,\n page: pageNum,\n perPage,\n }),\n );\n };\n\n const handlePerPageChange = (newPerPage: number): void => {\n setPerPage(newPerPage);\n visit(\n buildQuery({\n filters: filterValues,\n search: searchValue,\n sort: currentSort,\n perPage: newPerPage,\n }),\n );\n };\n\n const bulkActionsList = props.actions?.bulk ?? [];\n const bulkActions =\n bulkActionsList.length > 0 && selectedIds.length > 0 ? (\n <div className=\"flex items-center gap-2\">\n {bulkActionsList.map((action) => (\n <button\n key={action.name}\n type=\"button\"\n onClick={() => {\n const url = action.url ?? `/arqel-dev/actions/${action.name}`;\n const method = action.method.toLowerCase() as\n | 'get'\n | 'post'\n | 'put'\n | 'patch'\n | 'delete';\n router.visit(url, {\n method: method as never,\n data: { record_ids: selectedIds as readonly (string | number)[] } as never,\n preserveScroll: true,\n onSuccess: () => setSelectedIds([]),\n });\n }}\n className=\"inline-flex h-8 items-center gap-1 rounded-sm border border-destructive/40 bg-destructive/10 px-3 text-xs font-medium text-destructive hover:bg-destructive/20\"\n >\n {action.label}\n </button>\n ))}\n </div>\n ) : undefined;\n\n const rowActionsList = props.actions?.row ?? [];\n const rowActions =\n rowActionsList.length > 0\n ? (record: TRecord) => (\n <ActionMenu\n actions={rowActionsList}\n onInvoke={(action, formValues) =>\n invokeAction(action, record as { id: string | number }, formValues)\n }\n />\n )\n : undefined;\n\n return (\n <ResourceIndex<TRecord>\n {...props}\n filterValues={filterValues}\n onFilterChange={handleFilterChange}\n onClearFilters={handleClearFilters}\n onSearchChange={handleSearchChange}\n onSortChange={handleSortChange}\n onPageChange={handlePageChange}\n onPerPageChange={handlePerPageChange}\n search={searchValue}\n selectedIds={selectedIds}\n onSelectionChange={(ids) => setSelectedIds(ids)}\n {...(rowActions ? { rowActions } : {})}\n {...(bulkActions ? { bulkActions } : {})}\n />\n );\n}\n","/**\n * Default Inertia page for `arqel::show`.\n *\n * Read-only render of the record. Re-uses `<FormRenderer>` with\n * every field forced to disabled — keeps a single rendering path\n * for create/edit/show without a parallel \"DetailRenderer\" stack.\n */\n\nimport type { FieldSchema } from '@arqel-dev/types/fields';\nimport type { FormSchema } from '@arqel-dev/types/forms';\nimport type { RecordType, ResourceDetailProps } from '@arqel-dev/types/resources';\nimport { usePage } from '@inertiajs/react';\nimport type { JSX } from 'react';\nimport { FormRenderer } from '../form/FormRenderer.js';\nimport { PageHeader } from '../utility/PageHeader.js';\n\nconst FALLBACK_SCHEMA: FormSchema = {\n schema: [],\n columns: 1,\n model: null,\n inline: false,\n disabled: true,\n};\n\nexport default function ArqelShowPage<TRecord extends RecordType = RecordType>(): JSX.Element {\n const page = usePage();\n const props = page.props as unknown as ResourceDetailProps<TRecord>;\n const fields = (props.fields ?? []) as FieldSchema[];\n\n // Seed values from the record so FormRenderer has something to\n // display. Detail mode disables every field.\n const values: Record<string, unknown> = {};\n for (const field of fields) {\n const name = field.name;\n if (typeof name === 'string' && props.record !== null && typeof props.record === 'object') {\n values[name] = (props.record as Record<string, unknown>)[name];\n }\n }\n\n const declaredForm = (props as unknown as { form?: FormSchema }).form;\n const schema: FormSchema = declaredForm ? { ...declaredForm, disabled: true } : FALLBACK_SCHEMA;\n\n return (\n <div className=\"space-y-6\">\n <PageHeader\n title={props.recordTitle ?? props.resource?.label ?? 'Record'}\n description={props.recordSubtitle ?? null}\n />\n <FormRenderer\n schema={schema}\n fields={fields}\n values={values}\n onChange={() => {\n // No-op — show pages are read-only.\n }}\n errors={{}}\n />\n </div>\n );\n}\n","/**\n * Built-in Inertia page registry for `arqel::*`.\n *\n * `createArqelApp({ pages })` from `@arqel-dev/react/inertia` accepts\n * one or more `PageRegistry` records — merge `arqelPages` first so\n * user-defined pages can override per-resource:\n *\n * ```ts\n * import { arqelPages } from '@arqel-dev/ui/pages';\n * import { createArqelApp } from '@arqel-dev/react/inertia';\n *\n * const userPages = import.meta.glob('./Pages/**\\/*.tsx');\n *\n * createArqelApp({\n * pages: { ...arqelPages, ...userPages },\n * });\n * ```\n *\n * Names match what `ResourceController` emits via\n * `Inertia::render('arqel::index', ...)`.\n */\n\nimport type { ComponentType } from 'react';\n\ntype LazyPage = () => Promise<{ default: ComponentType<unknown> }>;\n\nexport const arqelPages: Record<string, LazyPage> = {\n 'arqel::index': () =>\n import('./ArqelIndexPage.js') as Promise<{ default: ComponentType<unknown> }>,\n 'arqel::create': () =>\n import('./ArqelCreatePage.js') as Promise<{ default: ComponentType<unknown> }>,\n 'arqel::edit': () => import('./ArqelEditPage.js') as Promise<{ default: ComponentType<unknown> }>,\n 'arqel::show': () => import('./ArqelShowPage.js') as Promise<{ default: ComponentType<unknown> }>,\n};\n\nexport { default as ArqelCreatePage } from './ArqelCreatePage.js';\nexport { default as ArqelEditPage } from './ArqelEditPage.js';\nexport { default as ArqelIndexPage } from './ArqelIndexPage.js';\nexport { default as ArqelShowPage } from './ArqelShowPage.js';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arqel-dev/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Structural React components (AppShell, DataTable, FormRenderer, etc.) for Arqel admin panels.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://arqel.dev",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"clsx": "^2.1.1",
|
|
93
93
|
"radix-ui": "^1.4.3",
|
|
94
94
|
"tailwind-merge": "^2.5.5",
|
|
95
|
-
"@arqel-dev/types": "0.
|
|
95
|
+
"@arqel-dev/types": "0.10.0"
|
|
96
96
|
},
|
|
97
97
|
"peerDependencies": {
|
|
98
98
|
"@inertiajs/react": "^2.0.0",
|
|
@@ -102,8 +102,8 @@
|
|
|
102
102
|
"react-dom": "^19.0.0",
|
|
103
103
|
"recharts": "^2.15.0",
|
|
104
104
|
"tailwindcss": "^4.0.0",
|
|
105
|
-
"@arqel-dev/hooks": "0.
|
|
106
|
-
"@arqel-dev/react": "0.
|
|
105
|
+
"@arqel-dev/hooks": "0.10.0",
|
|
106
|
+
"@arqel-dev/react": "0.10.0"
|
|
107
107
|
},
|
|
108
108
|
"devDependencies": {
|
|
109
109
|
"@base-ui-components/react": "^1.0.0-alpha.0",
|
|
@@ -124,8 +124,8 @@
|
|
|
124
124
|
"tsup": "^8.5.0",
|
|
125
125
|
"typescript": "^5.6.3",
|
|
126
126
|
"vitest": "^3.0.0",
|
|
127
|
-
"@arqel-dev/hooks": "0.
|
|
128
|
-
"@arqel-dev/react": "0.
|
|
127
|
+
"@arqel-dev/hooks": "0.10.0",
|
|
128
|
+
"@arqel-dev/react": "0.10.0"
|
|
129
129
|
},
|
|
130
130
|
"publishConfig": {
|
|
131
131
|
"access": "public"
|