@arqel-dev/ui 0.11.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +5 -2
- package/dist/AreaChart-NMQ2RQGA.js +33 -0
- package/dist/AreaChart-NMQ2RQGA.js.map +1 -0
- package/dist/ArqelCreatePage-O6KNXPAO.js +8 -0
- package/dist/ArqelCreatePage-O6KNXPAO.js.map +1 -0
- package/dist/ArqelDashboardPage-PX3Y75AA.js +6 -0
- package/dist/ArqelDashboardPage-PX3Y75AA.js.map +1 -0
- package/dist/ArqelEditPage-NAMWJ5MC.js +8 -0
- package/dist/ArqelEditPage-NAMWJ5MC.js.map +1 -0
- package/dist/ArqelIndexPage-GC33PNBL.js +12 -0
- package/dist/ArqelIndexPage-GC33PNBL.js.map +1 -0
- package/dist/ArqelShowPage-LGVTL6UZ.js +6 -0
- package/dist/ArqelShowPage-LGVTL6UZ.js.map +1 -0
- package/dist/BarChart-KLHKTLO2.js +19 -0
- package/dist/BarChart-KLHKTLO2.js.map +1 -0
- package/dist/DonutChart-L56R4QF2.js +11 -0
- package/dist/DonutChart-L56R4QF2.js.map +1 -0
- package/dist/LineChart-GHMPHFZZ.js +30 -0
- package/dist/LineChart-GHMPHFZZ.js.map +1 -0
- package/dist/PieChart-T2VQOFPP.js +4 -0
- package/dist/PieChart-T2VQOFPP.js.map +1 -0
- package/dist/RadarChart-CSWR5AO7.js +32 -0
- package/dist/RadarChart-CSWR5AO7.js.map +1 -0
- package/dist/Topbar-DffcNdcJ.d.ts +50 -0
- package/dist/action.d.ts +12 -2
- package/dist/action.js +6 -1090
- package/dist/action.js.map +1 -1
- package/dist/auth.js +1 -10
- package/dist/auth.js.map +1 -1
- package/dist/chunk-2LTZJ4R7.js +110 -0
- package/dist/chunk-2LTZJ4R7.js.map +1 -0
- package/dist/chunk-47HD7ALI.js +370 -0
- package/dist/chunk-47HD7ALI.js.map +1 -0
- package/dist/chunk-4JJS2SVS.js +628 -0
- package/dist/chunk-4JJS2SVS.js.map +1 -0
- package/dist/chunk-6UJQP7KU.js +737 -0
- package/dist/chunk-6UJQP7KU.js.map +1 -0
- package/dist/chunk-B7ULUJVO.js +11 -0
- package/dist/chunk-B7ULUJVO.js.map +1 -0
- package/dist/chunk-C5H44NSP.js +37 -0
- package/dist/chunk-C5H44NSP.js.map +1 -0
- package/dist/chunk-DSULVRB6.js +101 -0
- package/dist/chunk-DSULVRB6.js.map +1 -0
- package/dist/chunk-E2ORVQM5.js +50 -0
- package/dist/chunk-E2ORVQM5.js.map +1 -0
- package/dist/chunk-EYAUPJ6J.js +64 -0
- package/dist/chunk-EYAUPJ6J.js.map +1 -0
- package/dist/chunk-FHRQ7PWE.js +58 -0
- package/dist/chunk-FHRQ7PWE.js.map +1 -0
- package/dist/chunk-FV7RESKL.js +285 -0
- package/dist/chunk-FV7RESKL.js.map +1 -0
- package/dist/chunk-I6MWOIFR.js +204 -0
- package/dist/chunk-I6MWOIFR.js.map +1 -0
- package/dist/chunk-IKJYLSTK.js +440 -0
- package/dist/chunk-IKJYLSTK.js.map +1 -0
- package/dist/chunk-K7QY56XN.js +610 -0
- package/dist/chunk-K7QY56XN.js.map +1 -0
- package/dist/chunk-L3JBBN4H.js +27 -0
- package/dist/chunk-L3JBBN4H.js.map +1 -0
- package/dist/chunk-M6NI45DQ.js +49 -0
- package/dist/chunk-M6NI45DQ.js.map +1 -0
- package/dist/chunk-MTNFFSVA.js +92 -0
- package/dist/chunk-MTNFFSVA.js.map +1 -0
- package/dist/chunk-MTZJDFQ6.js +32 -0
- package/dist/chunk-MTZJDFQ6.js.map +1 -0
- package/dist/chunk-MXUXMHOK.js +16 -0
- package/dist/chunk-MXUXMHOK.js.map +1 -0
- package/dist/chunk-PXON56HL.js +35 -0
- package/dist/chunk-PXON56HL.js.map +1 -0
- package/dist/chunk-PZEVKMZX.js +598 -0
- package/dist/chunk-PZEVKMZX.js.map +1 -0
- package/dist/chunk-QTUBBZVT.js +57 -0
- package/dist/chunk-QTUBBZVT.js.map +1 -0
- package/dist/chunk-R4BOUU6Y.js +55 -0
- package/dist/chunk-R4BOUU6Y.js.map +1 -0
- package/dist/chunk-RMPOR2YZ.js +12 -0
- package/dist/chunk-RMPOR2YZ.js.map +1 -0
- package/dist/chunk-RNAMHQM6.js +12 -0
- package/dist/chunk-RNAMHQM6.js.map +1 -0
- package/dist/chunk-WKWV36PG.js +140 -0
- package/dist/chunk-WKWV36PG.js.map +1 -0
- package/dist/cn-By8XWiSA.d.ts +12 -0
- package/dist/flash.js +2 -104
- package/dist/flash.js.map +1 -1
- package/dist/form.d.ts +1 -1
- package/dist/form.js +4 -673
- package/dist/form.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +18 -3706
- package/dist/index.js.map +1 -1
- package/dist/pages.js +23 -3025
- package/dist/pages.js.map +1 -1
- package/dist/palette.js +1 -283
- package/dist/palette.js.map +1 -1
- package/dist/primitives.js +3 -658
- package/dist/primitives.js.map +1 -1
- package/dist/resource.js +5 -720
- package/dist/resource.js.map +1 -1
- package/dist/shell.d.ts +26 -46
- package/dist/shell.js +46 -1039
- package/dist/shell.js.map +1 -1
- package/dist/table.js +4 -618
- package/dist/table.js.map +1 -1
- package/dist/utility.js +3 -104
- package/dist/utility.js.map +1 -1
- package/dist/utils.d.ts +12 -6
- package/dist/utils.js +2 -9
- package/dist/utils.js.map +1 -1
- package/dist/widgets.d.ts +7 -2
- package/dist/widgets.js +3 -675
- package/dist/widgets.js.map +1 -1
- package/package.json +15 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../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"],"names":["jsxs","jsx","useState","useId"],"mappings":";;;;;;AAeA,IAAM,QAAA,uBAAe,GAAA,EAA4B;AAE1C,SAAS,aAAA,CAAc,MAAc,SAAA,EAAiC;AAC3E,EAAA,QAAA,CAAS,GAAA,CAAI,MAAM,SAAS,CAAA;AAC9B;AAEO,SAAS,kBAAkB,IAAA,EAA0C;AAC1E,EAAA,OAAO,QAAA,CAAS,IAAI,IAAI,CAAA;AAC1B;AAEO,SAAS,gBAAgB,IAAA,EAAoB;AAClD,EAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AACtB;AAEO,SAAS,mBAAA,GAAgC;AAC9C,EAAA,OAAO,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,EAAE,IAAA,EAAK;AAC1C;AAGO,SAAS,kBAAA,GAA2B;AACzC,EAAA,QAAA,CAAS,KAAA,EAAM;AACjB;ACEA,IAAM,YAAA,GAAe,EAAA;AAAA,EACnB,6CAAA;AAAA,EACA,4BAAA;AAAA,EACA,yEAAA;AAAA,EACA;AACF,CAAA;AAEO,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,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAU,GAAG,KAAA,EAAO,KAAA,EAAc,CAAA;AAAA,IAC5C,KAAK,UAAA;AACH,MAAA,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAU,GAAG,KAAA,EAAO,KAAA,EAAc,CAAA;AAAA,IAC5C,KAAK,QAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,uBAAO,GAAA,CAAC,YAAA,EAAA,EAAc,GAAG,KAAA,EAAO,KAAA,EAAc,CAAA;AAAA,IAChD,KAAK,SAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAU,GAAG,KAAA,EAAO,KAAA,EAAc,CAAA;AAAA,IAC5C,KAAK,QAAA;AACH,MAAA,uBAAO,GAAA,CAAC,WAAA,EAAA,EAAa,GAAG,KAAA,EAAO,KAAA,EAAc,CAAA;AAAA,IAC/C,KAAK,aAAA;AAAA,IACL,KAAK,SAAA;AACH,MAAA,uBAAO,GAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO,KAAA,EAAc,CAAA;AAAA,IACpD,KAAK,OAAA;AACH,MAAA,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAY,GAAG,KAAA,EAAO,KAAA,EAAc,CAAA;AAAA,IAC9C,KAAK,WAAA;AACH,MAAA,uBAAO,GAAA,CAAC,cAAA,EAAA,EAAgB,GAAG,KAAA,EAAO,KAAA,EAAc,CAAA;AAAA,IAClD,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,uBAAO,GAAA,CAAC,SAAA,EAAA,EAAW,GAAG,KAAA,EAAO,KAAA,EAAc,CAAA;AAAA,IAC7C,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,uBAAO,GAAA,CAAC,SAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAAA,IAC/B;AACE,MAAA,uBAAO,GAAA,CAAC,qBAAkB,KAAA,EAAc,CAAA;AAAA;AAE9C;AASA,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAM,EAA2B;AAC5D,EAAA,IAAI,MAAM,SAAA,EAAW;AACnB,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,CAAA,eAAA,EAAkB,KAAA,CAAM,IAAI,CAAA,+BAAA,EAAkC,MAAM,SAAS,CAAA,6CAAA;AAAA,KAE/E;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAK,CAAA,eAAA,EAAkB,KAAA,CAAM,IAAI,CAAA,gCAAA,EAAmC,KAAA,CAAM,IAAI,CAAA,EAAA,CAAI,CAAA;AAAA,EAC5F;AACA,EAAA,MAAM,MAAA,GAAS,MAAM,SAAA,GACjB,CAAA,wBAAA,EAA2B,MAAM,SAAS,CAAA,CAAA,CAAA,GAC1C,CAAA,kBAAA,EAAqB,KAAA,CAAM,IAAI,CAAA,CAAA,CAAA;AACnC,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,0BAAA;AAAA,MACZ,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAU,8FAAA;AAAA,MACX,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,QACS,KAAA,CAAM,IAAA;AAAA,QAAK,sBAAA;AAAA,QAAqB,MAAA;AAAA,QAAO;AAAA;AAAA;AAAA,GACjD;AAEJ;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,uBACE,GAAA;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,uBACE,GAAA;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,uBACE,GAAA;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,uBACE,GAAA;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,uBACE,IAAA;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,+BAAe,GAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAI,gBAAM,WAAA,EAAY,CAAA;AAAA,QACzD,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZ,GAAA,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,uBACE,GAAA;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,qBACZ,GAAA,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,uBACE,GAAA;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,qBAChC,IAAA,CAAC,OAAA,EAAA,EAAsB,SAAA,EAAU,wCAAA,EAC/B,QAAA,EAAA;AAAA,wBAAA,GAAA;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,uBACE,GAAA;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,uBACE,GAAA;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,uBACE,GAAA;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;ACjXO,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,uBACEA,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,4BACLC,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;AC1DO,SAAS,YAAA,CAAa,EAAE,MAAA,EAAQ,QAAA,EAAU,WAAU,EAAsB;AAC/E,EAAA,uBACED,IAAAA,CAAC,UAAA,EAAA,EAAS,WAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA,EACtE,QAAA,EAAA;AAAA,oBAAAC,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;ACZO,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;ACXO,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,mBACJD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,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,mBACND,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qCAAA,EACb,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,SAAK,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,wBACdA,GAAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,IAAA,EAAK;AAAA,OAAA,EACb,CAAA,mBAEAD,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAQ,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,QAC9B;AAAA,OAAA,EACH;AAAA;AAAA,GAEJ;AAEJ;AChDO,SAAS,QAAA,CAAS,EAAE,MAAA,EAAQ,IAAA,EAAM,WAAU,EAAuC;AACxF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,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,uBACEH,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EACH,QAAA,EAAA;AAAA,oBAAAC,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,uBACED,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,oBACxCC,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;ACnEO,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;AAOpB,EAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAE5B,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAA+C;AACjE,IAAA,IAAI,GAAA,GAAM,SAAA,CAAU,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,KAAA,CAAM,IAAA,IAAQ,CAAA,CAAE,IAAA,KAAS,KAAA,CAAM,IAAI,CAAA;AACnF,IAAA,IAAI,GAAA,KAAQ,EAAA,EAAI,GAAA,GAAM,SAAA,CAAU,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,KAAA,CAAM,IAAI,CAAA;AACtE,IAAA,IAAI,GAAA,KAAQ,IAAI,OAAO,MAAA;AACvB,IAAA,OAAO,SAAA,CAAU,MAAA,CAAO,GAAA,EAAK,CAAC,EAAE,CAAC,CAAA;AAAA,EACnC,CAAA;AAEA,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,WAAW,KAAK,CAAA;AAC9B,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","file":"chunk-4JJS2SVS.js","sourcesContent":["/**\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 <UnregisteredField field={field} />;\n }\n}\n\n/**\n * Visible fallback when a field's `type` has no native input. This usually\n * means the field declared a custom `component` whose `/register` module was\n * never imported, so `getFieldComponent` returned undefined and we fell\n * through here. Instead of rendering nothing (a bare label, no control, no\n * diagnostic — #233), surface an inline notice and warn in the console.\n */\nfunction UnregisteredField({ field }: { field: FieldSchema }) {\n if (field.component) {\n console.warn(\n `[arqel] field \"${field.name}\" uses unregistered component \"${field.component}\" — ` +\n 'did you import its /register module?',\n );\n } else {\n console.warn(`[arqel] field \"${field.name}\" has no native input for type \"${field.type}\".`);\n }\n const detail = field.component\n ? `unregistered component \"${field.component}\"`\n : `unsupported type \"${field.type}\"`;\n return (\n <p\n data-testid=\"arqel-unregistered-field\"\n role=\"alert\"\n className=\"rounded-sm border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive\"\n >\n Field \"{field.name}\" could not render: {detail}.\n </p>\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 // Resolve each schema entry to its OWN field object. A name-keyed Map\n // would silently collapse two fields sharing a `name` (e.g. a `status`\n // text + a `status` select) onto the last one, dropping a control. We\n // instead consume matching fields positionally — preferring an exact\n // (name, type) match and never reusing an already-claimed field — so\n // duplicate-named entries each render their distinct schema (#233).\n const remaining = [...fields];\n\n const claimField = (entry: FieldEntry): FieldSchema | undefined => {\n let idx = remaining.findIndex((f) => f.name === entry.name && f.type === entry.type);\n if (idx === -1) idx = remaining.findIndex((f) => f.name === entry.name);\n if (idx === -1) return undefined;\n return remaining.splice(idx, 1)[0];\n };\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 = claimField(entry);\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"]}
|