@aatulwork/customform-renderer 1.1.0 → 1.3.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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/formHelpers.ts","../src/utils/useFormColors.ts","../src/components/fields/TextField.tsx","../src/utils/fieldHelpers.ts","../src/components/common/SimpleSelect.tsx","../src/components/fields/SelectField.tsx","../src/components/fields/CheckboxField.tsx","../src/components/fields/RadioField.tsx","../src/components/fields/ToggleField.tsx","../src/components/fields/ColorField.tsx","../src/services/defaultServices.ts","../src/utils/ckeditorLoader.ts","../src/hooks/useCKEditor.ts","../src/components/fields/CKEditorField.tsx","../src/components/fields/FileField.tsx","../src/components/fields/ReferenceFields.tsx","../src/components/fields/DatePickerField.tsx","../src/components/FieldRenderer.tsx","../src/components/view/FieldView.tsx","../src/components/view/FormViewMode.tsx","../src/components/FormRenderer.tsx"],"names":["useTheme","jsx","Controller","jsxs","FormControl","FormLabel","MuiTextField","InputLabel","MuiSelect","OutlinedInput","CircularProgress","Box","option","Chip","MenuItem","FormHelperText","useMemo","FormControlLabel","Checkbox","RadioGroup","Radio","Switch","Typography","Input","dayjs","useState","error","useEffect","useRef","useCallback","alpha","CKEditor","useMediaQuery","isUploading","Fragment","CloudUploadIcon","InsertDriveFileIcon","Tooltip","IconButton","CloseIcon","LocalizationProvider","AdapterDayjs","DatePicker","DateTimePicker","TimePicker","Accordion","AccordionSummary","ExpandMoreIcon","DoubleArrowOutlinedIcon","AccordionDetails","useForm","Alert","Stepper","Step","StepLabel","Button","ArrowBackIcon","ArrowForwardIcon","Stack"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,IAAM,YAAA,GAAe,CAAC,UAAA,KAAwC;AACnE,EAAA,OAAO,UAAA,CAAW,QAAA,GACd,UAAA,CAAW,QAAA,CAAS,OAAA,CAAQ,CAAA,OAAA,KAAW,OAAA,CAAQ,MAAM,CAAA,GACpD,UAAA,CAAW,MAAA,IAAU,EAAC;AAC7B;AAOO,IAAM,sBAAA,GAAyB,CACpC,MAAA,EACA,UAAA,KACwB;AACxB,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AAEpB,EAAA,MAAM,UAAA,GAAkC,EAAE,GAAG,MAAA,EAAO;AACpD,EAAA,MAAM,SAAA,GAAY,aAAa,UAAU,CAAA;AAEzC,EAAA,SAAA,CAAU,QAAQ,CAAA,KAAA,KAAS;AACzB,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAGxC,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,IAAY,KAAA,CAAM,SAAS,eAAA,IAAmB,KAAA,CAAM,SAAS,cAAA,EAAgB;AAC9F,MAAA,IAAI,MAAM,aAAA,EAAe;AAEvB,QAAA,IAAI,UAAA,KAAe,IAAA,IAAQ,UAAA,KAAe,MAAA,IAAa,eAAe,EAAA,EAAI;AACxE,UAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC9B,YAAA,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,GAAI,CAAC,UAAU,CAAA;AAAA,UACtC;AAAA,QACF,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,GAAI,EAAC;AAAA,QAC5B;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,IAAI,MAAM,OAAA,CAAQ,UAAU,CAAA,IAAK,UAAA,CAAW,SAAS,CAAA,EAAG;AACtD,UAAA,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,GAAI,UAAA,CAAW,CAAC,CAAA;AAAA,QACvC,WAAW,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,IAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AAC/D,UAAA,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,GAAI,EAAA;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,MAAA,IAAI,MAAM,aAAA,EAAe;AACvB,QAAA,IAAI,UAAA,KAAe,IAAA,IAAQ,UAAA,KAAe,MAAA,EAAW;AACnD,UAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC9B,YAAA,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,GAAI,CAAC,UAAU,CAAA;AAAA,UACtC;AAAA,QACF,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,GAAI,EAAC;AAAA,QAC5B;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,IAAI,MAAM,OAAA,CAAQ,UAAU,CAAA,IAAK,UAAA,CAAW,SAAS,CAAA,EAAG;AACtD,UAAA,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,GAAI,UAAA,CAAW,CAAC,CAAA;AAAA,QACvC,WAAW,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,IAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AAC/D,UAAA,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,UAAA;AACT;AAKO,IAAM,eAAA,GAAkB,CAAC,KAAA,KAA0B;AACxD,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,UAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,KAAA,CAAM,aAAA,GAAgB,EAAC,GAAI,IAAA;AAAA,IACpC,KAAK,QAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,cAAA;AACH,MAAA,OAAO,KAAA,CAAM,aAAA,GAAgB,EAAC,GAAI,EAAA;AAAA,IACpC,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL;AACE,MAAA,OAAO,EAAA;AAAA;AAEb;AAKO,IAAM,mBAAA,GAAsB,CACjC,IAAA,EACA,UAAA,KACwB;AACxB,EAAA,MAAM,SAAA,GAAY,aAAa,UAAU,CAAA;AACzC,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAoB;AAC7C,EAAA,SAAA,CAAU,QAAQ,CAAA,KAAA,KAAS;AACzB,IAAA,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA;AAAA,EACzC,CAAC,CAAA;AAED,EAAA,MAAM,kBAAuC,EAAC;AAE9C,EAAA,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC/B,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAG,CAAA;AAEtB,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,MAAA,eAAA,CAAgB,GAAG,CAAA,GAAI,KAAA;AACvB,MAAA;AAAA,IACF;AAEA,IAAA,QAAQ,SAAA;AAAW,MACjB,KAAK,QAAA;AACH,QAAA,IAAI,KAAA,KAAU,EAAA,IAAM,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AACzD,UAAA,eAAA,CAAgB,GAAG,CAAA,GAAI,IAAA;AAAA,QACzB,CAAA,MAAO;AACL,UAAA,MAAM,QAAA,GAAW,OAAO,KAAK,CAAA;AAC7B,UAAA,eAAA,CAAgB,GAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,IAAI,KAAA,GAAQ,QAAA;AAAA,QACnD;AACA,QAAA;AAAA,MACF,KAAK,UAAA;AAAA,MACL,KAAK,QAAA;AACH,QAAA,eAAA,CAAgB,GAAG,CAAA,GAAI,OAAA,CAAQ,KAAK,CAAA;AACpC,QAAA;AAAA,MACF,KAAK,YAAA;AAAA,MACL,KAAK,MAAA;AAAA,MACL;AACE,QAAA,eAAA,CAAgB,GAAG,CAAA,GAAI,KAAA;AAAA;AAC3B,EACF,CAAC,CAAA;AAED,EAAA,OAAO,eAAA;AACT;AC1IO,IAAM,aAAA,GAAgB,CAAC,YAAA,KAA8B;AAC1D,EAAA,MAAM,QAAQA,iBAAA,EAAS;AAEvB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,YAAA,EAAc,OAAA,IAAW,KAAA,CAAM,QAAQ,OAAA,CAAQ,IAAA;AAAA,IACxD,SAAA,EAAW,YAAA,EAAc,SAAA,IAAa,KAAA,CAAM,QAAQ,SAAA,CAAU,IAAA;AAAA,IAC9D,KAAA,EAAO,YAAA,EAAc,KAAA,IAAS,KAAA,CAAM,QAAQ,KAAA,CAAM,IAAA;AAAA,IAClD,OAAA,EAAS,YAAA,EAAc,OAAA,IAAW,KAAA,CAAM,QAAQ,OAAA,CAAQ,IAAA;AAAA,IACxD,OAAA,EAAS,YAAA,EAAc,OAAA,IAAW,KAAA,CAAM,QAAQ,OAAA,CAAQ,IAAA;AAAA,IACxD,IAAA,EAAM,YAAA,EAAc,IAAA,IAAQ,KAAA,CAAM,QAAQ,IAAA,CAAK,IAAA;AAAA,IAC/C,WAAA,EAAa,YAAA,EAAc,WAAA,IAAe,KAAA,CAAM,QAAQ,IAAA,CAAK,OAAA;AAAA,IAC7D,aAAA,EAAe,YAAA,EAAc,aAAA,IAAiB,KAAA,CAAM,QAAQ,IAAA,CAAK,SAAA;AAAA,IACjE,OAAA,EAAS,YAAA,EAAc,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,OAAA;AAAA,IAChD,UAAA,EAAY,YAAA,EAAc,UAAA,IAAc,KAAA,CAAM,QAAQ,UAAA,CAAW,OAAA;AAAA,IACjE,eAAA,EAAiB,YAAA,EAAc,eAAA,IAAmB,KAAA,CAAM,QAAQ,UAAA,CAAW;AAAA,GAC7E;AACF,CAAA;ACjBO,IAAM,SAAA,GAAY,CAAC,EAAE,KAAA,EAAO,SAAS,YAAA,EAAc,KAAA,EAAO,QAAO,KAA0B;AAChG,EAAA,uBACEC,cAAA;AAAA,IAACC,wBAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,WAAU,qBAC1BC,eAAA;AAAA,QAACC,oBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAS,IAAA;AAAA,UACT,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,UAE1B,QAAA,EAAA;AAAA,4BAAAD,eAAA,CAACE,kBAAA,EAAA,EAAU,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,cAAE,KAAA,CAAM;AAAA,aAAA,EAAM,CAAA;AAAA,4BACzBJ,cAAA;AAAA,cAACK,kBAAA;AAAA,cAAA;AAAA,gBACE,GAAG,SAAA;AAAA,gBACJ,IAAA,EAAM,KAAA,CAAM,IAAA,KAAS,QAAA,GAAW,WAAW,KAAA,CAAM,IAAA;AAAA,gBACjD,WAAA,EAAa,MAAM,WAAA,IAAe,aAAA;AAAA,gBAClC,SAAA,EAAS,IAAA;AAAA,gBACT,IAAA,EAAK,OAAA;AAAA,gBACL,UAAU,KAAA,CAAM,QAAA;AAAA,gBAChB,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,gBAC1B,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAA;AAAA,gBAChC,UAAA,EACE,KAAA,CAAM,IAAA,KAAS,QAAA,GACX;AAAA,kBACE,GAAA,EAAK,MAAM,UAAA,EAAY,GAAA;AAAA,kBACvB,GAAA,EAAK,MAAM,UAAA,EAAY;AAAA,iBACzB,GACA;AAAA;AAAA;AAER;AAAA;AAAA;AACF,KAAA;AAAA,IA9BG,KAAA,CAAM;AAAA,GAgCb;AAEJ;;;ACrCO,IAAM,cAAA,GAAiB,CAAC,KAAA,KAA0B;AACvD,EAAA,IAAI,KAAA,KAAU,GAAG,OAAO,SAAA;AACxB,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,KAAA,GAAQ,CAAC,OAAA,EAAS,IAAA,EAAM,MAAM,IAAI,CAAA;AACxC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAClD,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,GAAI,GAAG,CAAA,GAAI,GAAA,GAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACvE;AAKO,IAAM,YAAA,GAAe,CAAC,IAAA,EAAY,KAAA,KAAoC;AAE3E,EAAA,IAAI,MAAM,UAAA,EAAY,gBAAA,IAAoB,MAAM,UAAA,CAAW,gBAAA,CAAiB,SAAS,CAAA,EAAG;AACtF,IAAA,MAAM,aAAA,GAAgB,KAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,IAAO,WAAA,EAAY;AAC9D,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,UAAA,CAAW,gBAAA,CAAiB,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAC,CAAA;AAChG,IAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,YAAA,CAAa,QAAA,CAAS,aAAa,CAAA,EAAG;AAC3D,MAAA,OAAO,yCAAyC,KAAA,CAAM,UAAA,CAAW,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,IAC9F;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,YAAY,WAAA,EAAa;AACjC,IAAA,IAAI,IAAA,CAAK,IAAA,GAAO,KAAA,CAAM,UAAA,CAAW,WAAA,EAAa;AAC5C,MAAA,MAAM,gBAAA,GAAmB,cAAA,CAAe,KAAA,CAAM,UAAA,CAAW,WAAW,CAAA;AACpE,MAAA,OAAO,6CAA6C,gBAAgB,CAAA,CAAA;AAAA,IACtE;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,IAAM,eAAA,GAAkB,CAAC,KAAA,KAA0B;AACxD,EAAA,MAAM,QAAa,EAAC;AAEpB,EAAA,IAAI,MAAM,QAAA,EAAU;AAClB,IAAA,KAAA,CAAM,QAAA,GAAW,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,YAAA,CAAA;AAAA,EACjC;AAGA,EAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,IAAA,KAAA,CAAM,QAAA,GAAW,CAAC,KAAA,KAAe;AAC/B,MAAA,IAAI,MAAM,QAAA,EAAU;AAClB,QAAA,IAAI,MAAM,aAAA,EAAe;AACvB,UAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,EAAC;AAC9C,UAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,YAAA,OAAO,CAAA,EAAG,MAAM,KAAK,CAAA,YAAA,CAAA;AAAA,UACvB;AACA,UAAA,MAAM,gBAAgB,KAAA,CAAM,IAAA;AAAA,YAAK,CAAC,SAChC,IAAA,IAAQ,OAAO,SAAS,QAAA,KAAa,UAAA,IAAc,QAAQ,SAAA,IAAa,IAAA;AAAA,WAC1E;AACA,UAAA,IAAI,CAAC,aAAA,EAAe;AAClB,YAAA,OAAO,CAAA,EAAG,MAAM,KAAK,CAAA,YAAA,CAAA;AAAA,UACvB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAI,CAAC,SAAU,OAAO,KAAA,KAAU,YAAY,EAAE,UAAA,IAAc,KAAA,IAAS,SAAA,IAAa,KAAA,CAAA,EAAS;AACzF,YAAA,OAAO,CAAA,EAAG,MAAM,KAAK,CAAA,YAAA,CAAA;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,EACF;AAGA,EAAA,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,KAAA,CAAM,IAAA,KAAS,mBAAmB,KAAA,CAAM,IAAA,KAAS,cAAA,KAAmB,KAAA,CAAM,aAAA,EAAe;AACvH,IAAA,KAAA,CAAM,QAAA,GAAW,CAAC,KAAA,KAAoC;AACpD,MAAA,MAAM,MAAA,GAAS,KAAA;AACf,MAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAClC,QAAA,IAAI,MAAM,QAAA,EAAU;AAClB,UAAA,OAAO,CAAA,EAAG,MAAM,KAAK,CAAA,YAAA,CAAA;AAAA,QACvB;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAKO,IAAM,gBAAA,GAAmB,CAAC,OAAA,KAAqF;AACpH,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAC;AAEtB,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,GAAA,KAAO;AACxB,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,MAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,KAAA,EAAO,GAAA,EAAI;AAAA,IAClC;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH;ACnEO,IAAM,eAA4C,CAAC;AAAA,EACxD,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,IAAA,GAAO,OAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,KAAA,GAAQ,KAAA;AAAA,EACR,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAe;AACnC,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,KAAA;AACzB,IAAA,QAAA,CAAS,GAAG,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,uBACEH,gBAACC,oBAAAA,EAAA,EAAY,WAAsB,IAAA,EAAY,QAAA,EAAoB,OAAc,QAAA,EAC/E,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAACM,uBAAY,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACnBN,cAAAA;AAAA,MAACO,eAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,KAAA,KAAU,QAAA,GAAW,EAAC,GAAI,EAAA,CAAA;AAAA,QACjC,QAAA,EAAU,YAAA;AAAA,QACV,KAAA,kBAAOP,cAAAA,CAACQ,sBAAA,EAAA,EAAc,KAAA,EAAc,CAAA;AAAA,QACpC,QAAA;AAAA,QACA,UAAU,QAAA,IAAY,SAAA;AAAA,QACtB,cAAc,SAAA,mBAAYR,eAACS,yBAAA,EAAA,EAAiB,IAAA,EAAM,IAAI,CAAA,GAAK,MAAA;AAAA,QAC3D,WAAA,EAAa,CAAC,QAAA,KAAa;AACzB,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,MAAM,cAAA,GAAiB,QAAA;AACvB,YAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,cAAA,uBAAOT,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,WAAA,IAAe,WAAA,EAAY,CAAA;AAAA,YACzC;AACA,YAAA,uBACEA,cAAAA,CAACU,YAAA,EAAA,EAAI,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,KAAK,GAAA,EAAI,EACpD,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC3B,cAAA,MAAMC,UAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,GAAG,CAAA;AACtD,cAAA,uBACEX,cAAAA;AAAA,gBAACY,aAAA;AAAA,gBAAA;AAAA,kBAEC,KAAA,EAAOD,SAAQ,KAAA,IAAS,GAAA;AAAA,kBACxB,IAAA,EAAK;AAAA,iBAAA;AAAA,gBAFA;AAAA,eAGP;AAAA,YAEJ,CAAC,CAAA,EACH,CAAA;AAAA,UAEJ;AACA,UAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,QAAQ,CAAA;AAC3D,UAAA,OAAO,QAAQ,KAAA,IAAS,QAAA,oBAAYX,cAAAA,CAAC,IAAA,EAAA,EAAI,yBAAe,WAAA,EAAY,CAAA;AAAA,QACtE,CAAA;AAAA,QAEC,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,cAAAA,CAACa,iBAAA,EAAA,EAA4B,KAAA,EAAO,MAAA,CAAO,KAAA,EACxC,QAAA,EAAA,MAAA,CAAO,KAAA,EAAA,EADK,MAAA,CAAO,KAEtB,CACD;AAAA;AAAA,KACH;AAAA,IACC,UAAA,oBAAcb,cAAAA,CAACc,uBAAA,EAAA,EAAgB,QAAA,EAAA,UAAA,EAAW;AAAA,GAAA,EAC7C,CAAA;AAEJ;AC5FO,IAAM,WAAA,GAAc,CAAC,EAAE,KAAA,EAAO,SAAS,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS,KAA0B;AAC5G,EAAA,MAAM,UAAA,GAAa,MAAM,aAAA,IAAiB,KAAA;AAC1C,EAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,KAAA,CAAM,OAAO,CAAA;AAGxD,EAAA,MAAM,aAAA,GAAsCC,cAAQ,MAAM;AACxD,IAAA,OAAO,iBAAA,CAAkB,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MACrC,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAAA,MACvB,OAAO,GAAA,CAAI;AAAA,KACb,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAGtB,EAAA,MAAM,eAAA,GAAkB,UAAU,eAAA,IAAmB,YAAA;AAErD,EAAA,uBACEf,cAAAA;AAAA,IAACC,wBAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,WAAU,KAAM;AAChC,QAAA,uBACED,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,OAAO,SAAA,CAAU,KAAA;AAAA,YACjB,QAAA,EAAU,CAAC,KAAA,KAAoC;AAC7C,cAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAAA,YAC1B,CAAA;AAAA,YACA,OAAA,EAAS,aAAA;AAAA,YACT,WAAA,EAAa,MAAM,WAAA,IAAe,WAAA;AAAA,YAClC,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAA;AAAA,YAChC,SAAA,EAAW,IAAA;AAAA,YACX,IAAA,EAAK,OAAA;AAAA,YACL,UAAU,KAAA,CAAM,QAAA;AAAA,YAChB,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,YAC1B,QAAA,EAAU,KAAA;AAAA,YACV,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,MAEJ;AAAA,KAAA;AAAA,IAxBK,KAAA,CAAM;AAAA,GAyBb;AAEJ;AC7CO,IAAM,gBAAgB,CAAC,EAAE,OAAO,OAAA,EAAS,YAAA,EAAc,OAAM,KAA0B;AAC5F,EAAA,uBACEA,cAAAA;AAAA,IAACC,wBAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAQ,CAAC,EAAE,KAAA,EAAO,SAAA,uBAChBD,cAAAA;AAAA,QAACgB,yBAAA;AAAA,QAAA;AAAA,UACC,yBACEhB,cAAAA;AAAA,YAACiB,iBAAA;AAAA,YAAA;AAAA,cACE,GAAG,SAAA;AAAA,cACJ,OAAA,EAAS,UAAU,KAAA,IAAS,KAAA;AAAA,cAC5B,IAAA,EAAK;AAAA;AAAA,WACP;AAAA,UAEF,OAAO,KAAA,CAAM;AAAA;AAAA;AACf,KAAA;AAAA,IAfG,KAAA,CAAM;AAAA,GAiBb;AAEJ;ACrBO,IAAM,UAAA,GAAa,CAAC,EAAE,KAAA,EAAO,SAAS,YAAA,EAAc,KAAA,EAAO,QAAO,KAA0B;AACjG,EAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,KAAA,CAAM,OAAO,CAAA;AAExD,EAAA,uBACEjB,cAAAA;AAAA,IAACC,wBAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,WAAU,qBAC1BC,gBAACC,oBAAAA,EAAA,EAAY,WAAU,UAAA,EAAW,QAAA,EAAU,MAAM,QAAA,EAAU,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EACpF,QAAA,EAAA;AAAA,wBAAAH,cAAAA,CAACI,kBAAAA,EAAA,EAAU,QAAA,EAAU,MAAM,QAAA,EAAU,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAC5D,gBAAM,KAAA,EACT,CAAA;AAAA,wBAEAJ,cAAAA,CAACkB,mBAAA,EAAA,EAAY,GAAG,SAAA,EAAW,GAAA,EAAG,IAAA,EAC3B,QAAA,EAAA,iBAAA,CAAkB,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBAC9BlB,cAAAA;AAAA,UAACgB,yBAAAA;AAAA,UAAA;AAAA,YAEC,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,OAAA,kBAAShB,cAAAA,CAACmB,cAAA,EAAA,EAAM,MAAK,OAAA,EAAQ,CAAA;AAAA,YAC7B,OAAO,MAAA,CAAO;AAAA,WAAA;AAAA,UAHT;AAAA,SAKR,CAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA;AAAA,IArBG,KAAA,CAAM;AAAA,GAuBb;AAEJ;AC/BO,IAAM,WAAA,GAAc,CAAC,EAAE,KAAA,EAAO,SAAS,YAAA,EAAc,KAAA,EAAO,QAAO,KAA0B;AAClG,EAAA,uBACEnB,cAAAA;AAAA,IAACC,wBAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAQ,CAAC,EAAE,KAAA,EAAO,SAAA,uBAChBD,cAAAA;AAAA,QAACgB,yBAAAA;AAAA,QAAA;AAAA,UACC,yBACEhB,cAAAA;AAAA,YAACoB,eAAA;AAAA,YAAA;AAAA,cACE,GAAG,SAAA;AAAA,cACJ,OAAA,EAAS,UAAU,KAAA,IAAS,KAAA;AAAA,cAC5B,IAAA,EAAK;AAAA;AAAA,WACP;AAAA,UAEF,KAAA,kBACElB,eAAAA,CAACQ,YAAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAR,eAAAA,CAACmB,mBAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EACjB,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,KAAA;AAAA,cAAM,GAAA;AAAA,cAAE,MAAM,QAAA,IAAY;AAAA,aAAA,EACnC,CAAA;AAAA,YACC,MAAA,CAAO,MAAM,IAAI,CAAA,oBAChBrB,cAAAA,CAACqB,mBAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,OAAA,EAAQ,IAAI,EAAE,OAAA,EAAS,SAAS,EAAA,EAAI,GAAA,IACrE,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAA,EACvB;AAAA,WAAA,EAEJ;AAAA;AAAA;AAEJ,KAAA;AAAA,IA1BG,KAAA,CAAM;AAAA,GA4Bb;AAEJ;ACjCO,IAAM,UAAA,GAAa,CAAC,EAAE,KAAA,EAAO,SAAS,YAAA,EAAc,KAAA,EAAO,QAAO,KAA0B;AACjG,EAAA,uBACErB,cAAAA;AAAA,IAACC,wBAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,WAAU,qBAC1BC,gBAACQ,YAAAA,EAAA,EAAI,IAAI,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,CAAA,EAAG,KAAA,EAAO,QAAO,EACtE,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAACI,kBAAAA;AAAA,UAAA;AAAA,YACC,UAAU,KAAA,CAAM,QAAA;AAAA,YAChB,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,YAEzB,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,SACT;AAAA,wBACAF,eAAAA,CAACQ,YAAAA,EAAA,EAAI,IAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,KAAI,EAC1E,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAACsB,cAAA;AAAA,YAAA;AAAA,cACE,GAAG,SAAA;AAAA,cACJ,IAAA,EAAK,OAAA;AAAA,cACL,EAAA,EAAI;AAAA,gBACF,KAAA,EAAO,KAAA;AAAA,gBACP,MAAA,EAAQ,MAAA;AAAA,gBACR,MAAA,EAAQ,SAAA;AAAA,gBACR,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,IAAI,eAAA,GAAkB,+BAAA;AAAA,gBAC/C,YAAA,EAAc,KAAA;AAAA,gBACd,OAAA,EAAS;AAAA,eACX;AAAA,cACA,UAAA,EAAY;AAAA,gBACV,KAAA,EAAO;AAAA,kBACL,MAAA,EAAQ,MAAA;AAAA,kBACR,MAAA,EAAQ;AAAA;AACV;AACF;AAAA,WACF;AAAA,UACC,MAAA,CAAO,MAAM,IAAI,CAAA,oBAChBtB,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,OAAM,OAAA,EAAQ,EAAA,EAAI,EAAE,EAAA,EAAI,GAAA,IACnD,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAA,EACvB;AAAA,SAAA,EAEJ;AAAA,OAAA,EACF;AAAA,KAAA;AAAA,IAtCG,KAAA,CAAM;AAAA,GAwCb;AAEJ;AChCO,IAAM,wBAAA,GAA8C;AAAA,EACzD,aAAa,YAAY;AACvB,IAAA,MAAM,IAAI,MAAM,wFAAwF,CAAA;AAAA,EAC1G;AACF;AAKO,IAAM,2BAAA,GAAoD;AAAA,EAC/D,cAAc,YAAY;AACxB,IAAA,MAAM,IAAI,MAAM,8FAA8F,CAAA;AAAA,EAChH;AACF;AAKO,IAAM,0BAAA,GAAkD;AAAA,EAC7D,cAAc,YAAY;AACxB,IAAA,MAAM,IAAI,MAAM,6FAA6F,CAAA;AAAA,EAC/G;AACF;AAKO,IAAM,2BAAA,GAAoD;AAAA,EAC/D,MAAA,EAAQ,CAAC,KAAA,EAAY,OAAA,KAAgE;AACnF,IAAA,IAAI,CAAC,OAAO,OAAO,QAAA;AAEnB,IAAA,MAAM,IAAA,GAAO,SAAS,cAAA,IAAkB,MAAA;AACxC,IAAA,MAAM,IAAA,GAAOE,wBAAM,KAAK,CAAA;AAExB,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAQ,EAAG,OAAO,OAAO,KAAK,CAAA;AAExC,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,OAAO,YAAY,CAAA;AAAA,MACjC,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,OAAO,SAAS,CAAA;AAAA,MAC9B,KAAK,UAAA;AACH,QAAA,OAAO,IAAA,CAAK,OAAO,oBAAoB,CAAA;AAAA,MACzC;AACE,QAAA,OAAO,IAAA,CAAK,OAAO,YAAY,CAAA;AAAA;AACnC,EACF;AACF;;;ACrDO,IAAM,YAAA,GAAe,CAAC,UAAA,GAAqB,2BAAA,KAA+C;AAC/F,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAEtC,IAAA,IAAI,OAAO,aAAA,EAAe;AACxB,MAAA,OAAA,EAAQ;AACR,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,UAAU,CAAA,EAAA,CAAI,CAAA;AAC3E,IAAA,IAAI,cAAA,EAAgB;AAElB,MAAA,cAAA,CAAe,gBAAA,CAAiB,QAAQ,MAAM;AAC5C,QAAA,IAAI,OAAO,aAAA,EAAe;AACxB,UAAA,OAAA,EAAQ;AAAA,QACV,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,8DAA8D,CAAC,CAAA;AAAA,QAClF;AAAA,MACF,CAAC,CAAA;AACD,MAAA,cAAA,CAAe,gBAAA,CAAiB,SAAS,MAAM;AAC7C,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,gCAAgC,CAAC,CAAA;AAAA,MACpD,CAAC,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,UAAA;AACb,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAEf,IAAA,MAAA,CAAO,SAAS,MAAM;AAEpB,MAAA,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,QAAA,IAAI,OAAO,aAAA,EAAe;AACxB,UAAA,aAAA,CAAc,aAAa,CAAA;AAC3B,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,GAAG,GAAG,CAAA;AAGN,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,aAAA,CAAc,aAAa,CAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,aAAA,EAAe;AACzB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,+EAA+E,CAAC,CAAA;AAAA,QACnG;AAAA,MACF,GAAG,GAAK,CAAA;AAAA,IACV,CAAA;AAEA,IAAA,MAAA,CAAO,UAAU,MAAM;AACrB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,UAAU,EAAE,CAAC,CAAA;AAAA,IAChE,CAAA;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;AAMO,IAAM,sBAAsB,MAAe;AAChD,EAAA,OAAO,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,OAAO,aAAA,KAAkB,WAAA;AAC1E;AAOO,IAAM,eAAA,GAAkB,CAAC,OAAA,GAAkB,GAAA,KAAyB;AACzE,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,IAAI,qBAAoB,EAAG;AACzB,MAAA,OAAA,EAAQ;AACR,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,MAAA,IAAI,qBAAoB,EAAG;AACzB,QAAA,aAAA,CAAc,aAAa,CAAA;AAC3B,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA,MAAA,IAAW,IAAA,CAAK,GAAA,EAAI,GAAI,YAAY,OAAA,EAAS;AAC3C,QAAA,aAAA,CAAc,aAAa,CAAA;AAC3B,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,sCAAsC,CAAC,CAAA;AAAA,MAC1D;AAAA,IACF,GAAG,GAAG,CAAA;AAAA,EACR,CAAC,CAAA;AACH;;;AClDO,IAAM,WAAA,GAAc,CAAC,OAAA,GAA8B,EAAC,KAAyB;AAClF,EAAA,MAAM;AAAA,IACJ,UAAA,GAAa,2BAAA;AAAA,IACb,QAAA,GAAW,IAAA;AAAA,IACX,OAAA,GAAU;AAAA,GACZ,GAAI,OAAA;AAEJ,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,IAAI,qBAAoB,EAAG;AACzB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AAEb,IAAA,IAAI;AACF,MAAA,MAAM,aAAa,UAAU,CAAA;AAC7B,MAAA,UAAA,CAAW,IAAI,CAAA;AAAA,IACjB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAMC,SAAQ,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,MAAM,yBAAyB,CAAA;AAC9E,MAAA,QAAA,CAASA,MAAK,CAAA;AACd,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAAC,eAAA,CAAU,MAAM;AAEd,IAAA,IAAI,qBAAoB,EAAG;AACzB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAA,EAAK;AAAA,IACP,CAAA,MAAO;AAEL,MAAA,eAAA,CAAgB,OAAO,CAAA,CACpB,IAAA,CAAK,MAAM,UAAA,CAAW,IAAI,CAAC,CAAA,CAC3B,KAAA,CAAM,CAAC,GAAA,KAAQ,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,wBAAwB,CAAC,CAAC,CAAA;AAAA,IAC9F;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,QAAA,EAAU,OAAO,CAAC,CAAA;AAElC,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;ACxFO,IAAM,aAAA,GAAgB,CAAC,EAAE,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,MAAA,EAAO,KAA0B;AAC5I,EAAA,MAAM,QAAQ3B,iBAAAA,EAAS;AACvB,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM,kBAAA,GAAqB4B,aAAuB,IAAI,CAAA;AAEtD,EAAA,MAAM,iBAAA,GAAoB,UAAU,UAAA,IAAc,wBAAA;AAClD,EAAA,MAAM,WAAA,GAAc,UAAU,WAAA,IAAe,EAAA;AAC7C,EAAA,MAAM,UAAA,GAAa,UAAU,kBAAA,IAAsB,EAAA;AACnD,EAAA,MAAM,kBAAA,GAAqB,UAAU,kBAAA,IAAsB,2BAAA;AAG3D,EAAA,MAAM,EAAE,SAAS,eAAA,EAAiB,SAAA,EAAW,mBAAmB,KAAA,EAAO,aAAA,KAAkB,WAAA,CAAY;AAAA,IACnG,UAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAU;AAAA,GACX,CAAA;AAGD,EAAA,MAAM,yBAAA,GAA4BC,iBAAA,CAAY,CAAC,MAAA,KAAgB;AAC7D,IAAA,OAAO;AAAA,MACL,QAAQ,YAAY;AAClB,QAAA,IAAI,CAAC,YAAY,IAAA,EAAM;AACrB,UAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,QAClE;AAEA,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA;AAE1B,UAAA,IAAI,CAAC,IAAA,EAAM;AACT,YAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,UACpC;AAGA,UAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AACnC,YAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,UAChD;AAEA,UAAA,MAAM,aAAA,GAAgB,MAAM,iBAAA,CAAkB,WAAA;AAAA,YAC5C,UAAA,CAAW,IAAA;AAAA,YACX,KAAA,CAAM,IAAA;AAAA,YACN,CAAC,IAAI;AAAA,WACP;AAEA,UAAA,IAAI,iBAAiB,aAAA,CAAc,MAAA,GAAS,KAAK,aAAA,CAAc,CAAC,EAAE,OAAA,EAAS;AACzE,YAAA,MAAM,OAAA,GAAU,aAAA,CAAc,CAAC,CAAA,CAAE,OAAA;AACjC,YAAA,MAAM,YAAY,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA,IAAK,OAAA,CAAQ,WAAW,UAAU,CAAA;AAChF,YAAA,MAAM,GAAA,GAAM,SAAA,GAAY,OAAA,GAAU,WAAA,GAAc,OAAA;AAChD,YAAA,OAAO;AAAA,cACL,OAAA,EAAS;AAAA,aACX;AAAA,UACF;AAEA,UAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,QACvD,SAAS,KAAA,EAAY;AACnB,UAAA,OAAA,CAAQ,KAAA,CAAM,iBAAiB,KAAK,CAAA;AACpC,UAAA,MAAM,eAAe,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,OAAA,IAAW,MAAM,OAAA,IAAW,eAAA;AACvE,UAAA,MAAM,IAAI,MAAM,YAAY,CAAA;AAAA,QAC9B;AAAA,MACF,CAAA;AAAA,MACA,OAAO,MAAM;AACX,QAAA,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAAA,MAC9B;AAAA,KACF;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,IAAA,EAAM,MAAM,IAAA,EAAM,iBAAA,EAAmB,WAAW,CAAC,CAAA;AAGjE,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,uBACE1B,eAAAA,CAACQ,YAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAACI,kBAAAA,EAAA,EAAU,QAAA,EAAU,MAAM,QAAA,EAAU,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAC5D,gBAAM,KAAA,EACT,CAAA;AAAA,sBACAJ,cAAAA,CAACU,YAAAA,EAAA,EAAI,IAAI,EAAE,CAAA,EAAG,CAAA,EAAG,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,UAAA,CAAW,aAAA,IAAiB,QAAA,EAAA,mBAAA,EAEzE;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,aAAA,IAAiB,CAAC,eAAA,EAAiB;AACrC,IAAA,uBACER,eAAAA,CAACQ,YAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAACI,kBAAAA,EAAA,EAAU,QAAA,EAAU,MAAM,QAAA,EAAU,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAC5D,gBAAM,KAAA,EACT,CAAA;AAAA,sBACAJ,cAAAA,CAACU,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA,EAAG,CAAA,EAAG,MAAA,EAAQ,WAAA,EAAa,WAAA,EAAa,UAAA,CAAW,OAAO,YAAA,EAAc,CAAA,EAAE,EACnF,QAAA,kBAAAV,cAAAA,CAACc,uBAAAA,EAAA,EAAe,KAAA,EAAK,IAAA,EAClB,QAAA,EAAA,aAAA,EAAe,OAAA,IAAW,uEAAA,EAC7B,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEd,cAAAA;AAAA,IAACC,wBAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,cAAc,YAAA,IAAgB,EAAA;AAAA,MAC9B,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,WAAU,qBAC1BC,eAAAA,CAACQ,YAAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAACI,kBAAAA;AAAA,UAAA;AAAA,YACC,UAAU,KAAA,CAAM,QAAA;AAAA,YAChB,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,YAEzB,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,SACT;AAAA,wBACAJ,cAAAA;AAAA,UAACU,YAAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,kBAAA;AAAA,YACL,EAAA,EAAI;AAAA,cACF,cAAA,EAAgB;AAAA,gBACd,YAAA,EAAc,KAAA;AAAA,gBACd,eAAA,EAAiB;AAAA,kBACf,KAAA,EAAO,MAAA;AAAA,kBACP,QAAA,EAAU,MAAA;AAAA,kBACV,QAAA,EAAU,SAAA;AAAA,kBACV,OAAA,EAAS,MAAA;AAAA,kBACT,QAAA,EAAU,MAAA;AAAA,kBACV,sBAAA,EAAwB;AAAA,oBACtB,OAAA,EAAS,MAAA;AAAA,oBACT,QAAA,EAAU,iBAAA;AAAA,oBACV,KAAA,EAAO,MAAA;AAAA,oBACP,QAAA,EAAU,MAAA;AAAA,oBACV,OAAA,EAAS;AAAA,sBACP,UAAA,EAAY;AAAA;AACd;AACF,iBACF;AAAA,gBACA,wBAAA,EAA0B;AAAA,kBACxB,SAAA,EAAW;AAAA,iBACb;AAAA,gBACA,SAAA,EAAW;AAAA,kBACT,WAAA,EAAa,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAC1B,UAAA,CAAW,KAAA,GACX,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,MAAA,GAAS,2BAAA,GAA8B,UAAA,CAAW;AAAA,iBAC/E;AAAA,gBACA,eAAA,EAAiB;AAAA,kBACf,QAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GACrB,aAAa,UAAA,CAAW,KAAK,CAAA,WAAA,CAAA,GAC7B,CAAA,UAAA,EAAa,MAAM,OAAA,CAAQ,IAAA,KAAS,MAAA,GAAS,2BAAA,GAA8B,WAAW,OAAO,CAAA,WAAA,CAAA;AAAA,kBACjG,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,IAAI,IACxB,CAAA,UAAA,EAAa,UAAA,CAAW,KAAK,CAAA,CAAA,GAC7B,CAAA,UAAA,EAAamB,cAAA,CAAM,UAAA,CAAW,OAAA,EAAS,GAAG,CAAC,CAAA,WAAA;AAAA;AACjD;AACF,aACF;AAAA,YAEC,QAAA,EAAA,MAAA,CAAO,aAAA,IAAiB,eAAA,oBACvB7B,cAAAA;AAAA,cAAC8B,uBAAA;AAAA,cAAA;AAAA,gBACC,QAAQ,MAAA,CAAO,aAAA;AAAA,gBACf,MAAA,EAAQ;AAAA,kBACN,UAAA;AAAA,kBACA,WAAA,EAAa,UAAU,KAAA,IAAS;AAAA,iBAClC;AAAA,gBACA,IAAA,EAAM,UAAU,KAAA,IAAS,EAAA;AAAA,gBACzB,OAAA,EAAS,CAAC,MAAA,KAAW;AAEnB,kBAAA,IAAI,YAAY,IAAA,EAAM;AACpB,oBAAA,IAAI;AACF,sBAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AAC1D,sBAAA,IAAI,cAAA,EAAgB;AAClB,wBAAA,cAAA,CAAe,mBAAA,GAAsB,CAAC,MAAA,KAAgB;AACpD,0BAAA,OAAO,0BAA0B,MAAM,CAAA;AAAA,wBACzC,CAAA;AAAA,sBACF,CAAA,MAAO;AACL,wBAAA,OAAA,CAAQ,KAAK,iCAAiC,CAAA;AAAA,sBAChD;AAAA,oBACF,SAAS,KAAA,EAAO;AACd,sBAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,oBACzD;AAAA,kBACF,CAAA,MAAO;AACL,oBAAA,OAAA,CAAQ,KAAK,wDAAwD,CAAA;AAAA,kBACvE;AAGA,kBAAA,IAAI,YAAA,IAAgB,CAAC,SAAA,CAAU,KAAA,EAAO;AACpC,oBAAA,MAAA,CAAO,QAAQ,YAAY,CAAA;AAC3B,oBAAA,QAAA,GAAW,KAAA,CAAM,MAAM,YAAY,CAAA;AAAA,kBACrC;AAAA,gBACF,CAAA;AAAA,gBACA,QAAA,EAAU,CAAC,MAAA,EAAQ,MAAA,KAAW;AAC5B,kBAAA,MAAM,IAAA,GAAO,OAAO,OAAA,EAAQ;AAC5B,kBAAA,SAAA,CAAU,SAAS,IAAI,CAAA;AAAA,gBACzB,CAAA;AAAA,gBACA,QAAQ,MAAM;AACZ,kBAAA,SAAA,CAAU,MAAA,EAAO;AAAA,gBACnB;AAAA;AAAA;AACF;AAAA,SAEJ;AAAA,QACC,MAAA,CAAO,MAAM,IAAI,CAAA,oBAChB9B,cAAAA,CAACc,uBAAAA,EAAA,EAAe,KAAA,EAAK,IAAA,EAAC,IAAI,EAAE,EAAA,EAAI,KAAK,EAAA,EAAI,CAAA,IACtC,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAA,EACvB;AAAA,OAAA,EAEJ;AAAA,KAAA;AAAA,IArGG,KAAA,CAAM;AAAA,GAuGb;AAEJ;AC7LO,IAAM,YAAY,CAAC;AAAA,EACxB,KAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAiB,EAAC;AAAA,EAClB,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAsB;AACpB,EAAA,MAAM,QAAQf,iBAAAA,EAAS;AACvB,EAAA,MAAM,WAAWgC,sBAAA,CAAc,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM,WAAA,GAAc,MAAM,UAAA,EAAY,gBAAA,GAClC,MAAM,UAAA,CAAW,gBAAA,CAAiB,IAAI,CAAC,IAAA,KAAiB,IAAI,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,CAAC,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAC7F,MAAA;AACJ,EAAA,MAAM,UAAA,GAAa,MAAM,aAAA,IAAiB,KAAA;AAE1C,EAAA,MAAM,iBAAA,GAAoB,UAAU,UAAA,IAAc,wBAAA;AAElD,EAAA,uBACE/B,cAAAA;AAAA,IAACC,wBAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,WAAU,KAAM;AAChC,QAAA,MAAM,WAAA,GAAc,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA,IAAK,KAAA;AAClD,QAAA,IAAI,QAAiC,EAAC;AAEtC,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,KAAA,GAAQ,MAAM,OAAA,CAAQ,SAAA,CAAU,KAAK,CAAA,GAAI,SAAA,CAAU,QAAQ,EAAC;AAAA,QAC9D,CAAA,MAAO;AACL,UAAA,KAAA,GAAQ,UAAU,KAAA,GAAQ,CAAC,SAAA,CAAU,KAAK,IAAI,EAAC;AAAA,QACjD;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,GAAS,CAAA;AAEhC,QAAA,uBACEC,eAAAA,CAACQ,YAAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAACI,kBAAAA;AAAA,YAAA;AAAA,cACC,UAAU,KAAA,CAAM,QAAA;AAAA,cAChB,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,cAEzB,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,WACT;AAAA,0BACAF,eAAAA;AAAA,YAACQ,YAAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,OAAA;AAAA,cACV,OAAA,EAAS,CAAA,WAAA,EAAc,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,cACjC,EAAA,EAAI;AAAA,gBACF,OAAA,EAAS,MAAA;AAAA,gBACT,aAAA,EAAe,QAAA;AAAA,gBACf,UAAA,EAAY,QAAA;AAAA,gBACZ,cAAA,EAAgB,QAAA;AAAA,gBAChB,MAAA,EAAQ,YAAA;AAAA,gBACR,WAAA,EAAa,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,UAAA,CAAW,KAAA,GAAS,WAAA,GAAc,UAAA,CAAW,OAAA,GAAU,QAAA,GAAW,UAAA,CAAW,UAAU,UAAA,CAAW,OAAA;AAAA,gBACpI,CAAA,EAAG,CAAA;AAAA,gBACH,MAAA,EAAQ,cAAc,MAAA,GAAS,SAAA;AAAA,gBAC/B,UAAA,EAAY,sBAAA;AAAA,gBACZ,eAAA,EAAkB,WAAA,IAAe,QAAA,GAAY,cAAA,GAAiB,UAAA,CAAW,eAAA;AAAA,gBACzE,OAAA,EAAS,cAAc,GAAA,GAAM,CAAA;AAAA,gBAC7B,aAAA,EAAe,cAAc,MAAA,GAAS,MAAA;AAAA,gBACtC,SAAA,EAAW;AAAA,kBACT,WAAA,EAAa,WAAA,GAAc,UAAA,CAAW,OAAA,GAAU,UAAA,CAAW,OAAA;AAAA,kBAC3D,eAAA,EAAiB;AAAA;AACnB,eACF;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAV,cAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAI,CAAA,WAAA,EAAc,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,oBAC5B,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAM,IAAA;AAAA,oBACN,QAAA,EAAU,UAAA;AAAA,oBACV,MAAA,EAAQ,WAAA;AAAA,oBACR,QAAA,EAAU,OAAO,CAAA,KAAM;AACrB,sBAAA,MAAM,QAAA,GAAW,EAAE,MAAA,CAAO,KAAA;AAC1B,sBAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAExC,sBAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACpC,sBAAA,MAAMgC,YAAAA,GAAc,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA,IAAK,KAAA;AAElD,sBAAA,IAAIA,YAAAA,EAAa;AACf,wBAAA,CAAA,CAAE,OAAO,KAAA,GAAQ,EAAA;AACjB,wBAAA;AAAA,sBACF;AAEA,sBAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,wBAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,IAAA,EAAM,KAAK,CAAA;AACjD,wBAAA,IAAI,qBAAqB,IAAA,EAAM;AAC7B,0BAAA,QAAA,GAAW,MAAM,IAAA,EAAM;AAAA,4BACrB,IAAA,EAAM,QAAA;AAAA,4BACN,OAAA,EAAS;AAAA,2BACV,CAAA;AACD,0BAAA,CAAA,CAAE,OAAO,KAAA,GAAQ,EAAA;AACjB,0BAAA;AAAA,wBACF;AAAA,sBACF;AAEA,sBAAA,IAAI;AACF,wBAAA,iBAAA,GAAoB,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,CAAC,KAAA,CAAM,IAAI,GAAG,IAAA,EAAK,CAAE,CAAA;AAC/D,wBAAA,WAAA,GAAc,MAAM,IAAI,CAAA;AAExB,wBAAA,IAAI,CAAC,YAAY,IAAA,EAAM;AACrB,0BAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,wBACjE;AAEA,wBAAA,MAAM,aAAA,GAAgB,MAAM,iBAAA,CAAkB,WAAA;AAAA,0BAC5C,UAAA,CAAW,IAAA;AAAA,0BACX,KAAA,CAAM,IAAA;AAAA,0BACN;AAAA,yBACF;AAEA,wBAAA,IAAI,UAAA,EAAY;AACd,0BAAA,MAAM,eAAe,SAAA,CAAU,KAAA;AAC/B,0BAAA,MAAM,gBAAgB,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GAC5C,aAAa,MAAA,CAAO,CAAC,IAAA,KAAc,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,UAAA,IAAc,IAAI,IACzF,EAAC;AACL,0BAAA,MAAM,gBAAA,GAAmB,CAAC,GAAG,aAAA,EAAe,GAAG,aAAa,CAAA;AAC5D,0BAAA,SAAA,CAAU,SAAS,gBAAgB,CAAA;AAAA,wBACrC,CAAA,MAAO;AACL,0BAAA,SAAA,CAAU,QAAA,CAAS,aAAA,CAAc,CAAC,CAAA,IAAK,IAAI,CAAA;AAAA,wBAC7C;AAAA,sBACF,SAAS,KAAA,EAAY;AACnB,wBAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,iCAAA,EAAoC,KAAA,CAAM,IAAI,KAAK,KAAK,CAAA;AACtE,wBAAA,MAAM,eAAe,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,OAAA,IAAW,MAAM,OAAA,IAAW,wBAAA;AACvE,wBAAA,QAAA,GAAW,MAAM,IAAA,EAAM;AAAA,0BACrB,IAAA,EAAM,QAAA;AAAA,0BACN,OAAA,EAAS,2BAA2B,YAAY,CAAA;AAAA,yBACjD,CAAA;AAAA,sBACH,CAAA,SAAE;AACA,wBAAA,iBAAA,GAAoB,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,CAAC,KAAA,CAAM,IAAI,GAAG,KAAA,EAAM,CAAE,CAAA;AAChE,wBAAA,CAAA,CAAE,OAAO,KAAA,GAAQ,EAAA;AAAA,sBACnB;AAAA,oBACF,CAAA;AAAA,oBACA,QAAA,EAAU,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA,IAAK;AAAA;AAAA,iBAC1C;AAAA,gBACC,8BACC9B,eAAAA,CAACQ,cAAA,EAAI,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,eAAe,QAAA,EAAU,UAAA,EAAY,UAAU,GAAA,EAAK,CAAA,EAAG,IAAI,CAAA,EAAG,KAAA,EAAO,QAAO,EACtG,QAAA,EAAA;AAAA,kCAAAV,cAAAA,CAACS,yBAAAA,EAAA,EAAiB,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,kCAC5BT,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,SAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,UAAA,CAAW,OAAA,IAAW,QAAA,EAAA,oBAAA,EAEhF,CAAA;AAAA,kCACArB,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,KAAA,EAAO,UAAA,CAAW,aAAA,EAAc,EAAG,QAAA,EAAA,4CAAA,EAEvE;AAAA,iBAAA,EACF,CAAA,GACE,CAAC,QAAA,mBACHnB,gBAAA+B,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAAjC,cAAAA,CAACkC,gCAAA,EAAA,EAAgB,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,UAAA,CAAW,aAAA,EAAe,EAAA,EAAI,CAAA,EAAE,EAAG,CAAA;AAAA,kCAC/EhC,eAAAA,CAACmB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,KAAA,EAAO,UAAA,CAAW,aAAA,EAAc,EAAG,QAAA,EAAA;AAAA,oBAAA,kCAAA;AAAA,oBAEpE,UAAA,IAAc;AAAA,mBAAA,EACjB,CAAA;AAAA,kBACC,KAAA,CAAM,YAAY,gBAAA,IAAoB,KAAA,CAAM,WAAW,gBAAA,CAAiB,MAAA,GAAS,qBAChFnB,eAAAA,CAACmB,qBAAA,EAAW,OAAA,EAAQ,WAAU,EAAA,EAAI,EAAE,IAAI,GAAA,EAAK,KAAA,EAAO,UAAA,CAAW,aAAA,EAAc,EAAG,QAAA,EAAA;AAAA,oBAAA,WAAA;AAAA,oBACpE,KAAA,CAAM,UAAA,CAAW,gBAAA,CAAiB,IAAA,CAAK,IAAI;AAAA,mBAAA,EACvD,CAAA;AAAA,kBAED,MAAM,UAAA,EAAY,WAAA,oBACjBnB,eAAAA,CAACmB,qBAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,EAAA,EAAI,GAAA,EAAK,KAAA,EAAO,UAAA,CAAW,eAAc,EAAG,QAAA,EAAA;AAAA,oBAAA,YAAA;AAAA,oBACnE,cAAA,CAAe,KAAA,CAAM,UAAA,CAAW,WAAW,CAAA;AAAA,oBAAE;AAAA,mBAAA,EAC1D;AAAA,iBAAA,EAEJ,CAAA,mBAEAnB,eAAAA,CAACQ,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,KAAA,EAAO,MAAA,EAAO,EACtB,QAAA,EAAA;AAAA,kBAAA,UAAA,oBACCR,eAAAA,CAACmB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,UAAA,EAAY,GAAA,EAAK,EAAA,EAAI,GAAA,EAAI,EACxD,QAAA,EAAA;AAAA,oBAAA,KAAA,CAAM,MAAA;AAAA,oBAAO,OAAA;AAAA,oBAAM,KAAA,CAAM,MAAA,KAAW,CAAA,GAAI,GAAA,GAAM,EAAA;AAAA,oBAAG;AAAA,mBAAA,EACpD,CAAA;AAAA,kBAED,MAAM,MAAA,KAAW,CAAA,IAAK,CAAC,UAAA,mBACtBnB,gBAACQ,YAAAA,EAAA,EAAI,IAAI,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,CAAA,EAAG,KAAA,EAAO,QAAO,EACtE,QAAA,EAAA;AAAA,oCAAAV,cAAAA,CAACmC,wCAAoB,EAAA,EAAI,EAAE,UAAU,EAAA,EAAI,KAAA,EAAO,UAAA,CAAW,OAAA,EAAQ,EAAG,CAAA;AAAA,oCACtEjC,eAAAA,CAACQ,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE,EAClC,QAAA,EAAA;AAAA,sCAAAV,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,SAAQ,EAAA,EAAI,EAAE,UAAA,EAAY,GAAA,EAAK,QAAA,EAAU,QAAA,EAAU,YAAA,EAAc,UAAA,EAAY,UAAU,QAAA,GAAW,OAAA,GAAU,OAAA,EAAQ,EACrI,QAAA,EAAA,KAAA,CAAM,CAAC,CAAA,YAAa,IAAA,GACjB,MAAM,CAAC,CAAA,CAAE,IAAA,GACP,KAAA,CAAM,CAAC,CAAA,CAAmB,YAAA,IAAiB,KAAA,CAAM,CAAC,EAAmB,QAAA,EAC7E,CAAA;AAAA,sCACArB,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,IAAI,EAAE,KAAA,EAAO,UAAA,CAAW,aAAA,IACnD,QAAA,EAAA,cAAA,CAAgB,KAAA,CAAM,CAAC,CAAA,CAAU,IAAA,IAAQ,CAAC,CAAA,EAC7C;AAAA,qBAAA,EACF,CAAA;AAAA,oCACArB,eAACoC,gBAAA,EAAA,EAAQ,KAAA,EAAM,eAAc,SAAA,EAAU,QAAA,EAAS,KAAA,EAAK,IAAA,EACnD,QAAA,kBAAApC,cAAAA;AAAA,sBAACqC,mBAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAK,OAAA;AAAA,wBACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,0BAAA,CAAA,CAAE,cAAA,EAAe;AACjB,0BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,0BAAA,SAAA,CAAU,SAAS,IAAI,CAAA;AACvB,0BAAA,MAAM,YAAY,QAAA,CAAS,cAAA,CAAe,CAAA,WAAA,EAAc,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA;AACpE,0BAAA,IAAI,SAAA,EAAW;AACb,4BAAA,SAAA,CAAU,KAAA,GAAQ,EAAA;AAAA,0BACpB;AAAA,wBACF,CAAA;AAAA,wBACA,EAAA,EAAI,EAAE,KAAA,EAAO,UAAA,CAAW,KAAA,EAAM;AAAA,wBAE9B,QAAA,kBAAArC,cAAAA,CAACsC,0BAAA,EAAA,EAAU,QAAA,EAAS,OAAA,EAAQ;AAAA;AAAA,qBAC9B,EACF;AAAA,mBAAA,EACF,CAAA,mBAEAtC,cAAAA,CAACU,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,SAAS,MAAA,EAAQ,aAAA,EAAe,UAAU,GAAA,EAAK,CAAA,EAAG,OAAO,MAAA,EAAO,EACxE,gBAAM,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAC1B,oBAAA,MAAM,WAAW,IAAA,YAAgB,IAAA,GAC7B,KAAK,IAAA,GACH,IAAA,CAAsB,gBAAiB,IAAA,CAAsB,QAAA;AACnE,oBAAA,uBACER,eAAAA;AAAA,sBAACQ,YAAAA;AAAA,sBAAA;AAAA,wBAEC,EAAA,EAAI;AAAA,0BACF,OAAA,EAAS,MAAA;AAAA,0BACT,UAAA,EAAY,QAAA;AAAA,0BACZ,GAAA,EAAK,GAAA;AAAA,0BACL,CAAA,EAAG,CAAA;AAAA,0BACH,YAAA,EAAc,CAAA;AAAA,0BACd,iBAAiB,UAAA,CAAW,UAAA;AAAA,0BAC5B,MAAA,EAAQ,WAAA;AAAA,0BACR,aAAa,UAAA,CAAW;AAAA,yBAC1B;AAAA,wBAEA,QAAA,EAAA;AAAA,0CAAAV,cAAAA,CAACmC,wCAAoB,EAAA,EAAI,EAAE,UAAU,EAAA,EAAI,KAAA,EAAO,UAAA,CAAW,OAAA,EAAQ,EAAG,CAAA;AAAA,0CACtEjC,eAAAA,CAACQ,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE,EAClC,QAAA,EAAA;AAAA,4CAAAV,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,SAAQ,EAAA,EAAI,EAAE,UAAA,EAAY,GAAA,EAAK,QAAA,EAAU,QAAA,EAAU,YAAA,EAAc,UAAA,IAClF,QAAA,EAAA,QAAA,EACH,CAAA;AAAA,4CACArB,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,WAAU,EAAA,EAAI,EAAE,KAAA,EAAO,UAAA,CAAW,eAAc,EACjE,QAAA,EAAA,cAAA,CAAgB,IAAA,CAAa,IAAA,IAAQ,CAAC,CAAA,EACzC;AAAA,2BAAA,EACF,CAAA;AAAA,0CACArB,eAACoC,gBAAA,EAAA,EAAQ,KAAA,EAAM,eAAc,SAAA,EAAU,QAAA,EAAS,KAAA,EAAK,IAAA,EACnD,QAAA,kBAAApC,cAAAA;AAAA,4BAACqC,mBAAA;AAAA,4BAAA;AAAA,8BACC,IAAA,EAAK,OAAA;AAAA,8BACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,gCAAA,CAAA,CAAE,cAAA,EAAe;AACjB,gCAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,gCAAA,IAAI,UAAA,EAAY;AACd,kCAAA,MAAM,eAAe,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,MAAM,KAAK,CAAA;AACvD,kCAAA,SAAA,CAAU,SAAS,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,YAAA,GAAe,EAAE,CAAA;AAAA,gCAChE,CAAA,MAAO;AACL,kCAAA,SAAA,CAAU,SAAS,IAAI,CAAA;AAAA,gCACzB;AAAA,8BACF,CAAA;AAAA,8BACA,EAAA,EAAI,EAAE,KAAA,EAAO,UAAA,CAAW,KAAA,EAAM;AAAA,8BAE9B,QAAA,kBAAArC,cAAAA,CAACsC,0BAAA,EAAA,EAAU,QAAA,EAAS,OAAA,EAAQ;AAAA;AAAA,2BAC9B,EACF;AAAA;AAAA,uBAAA;AAAA,sBAtCK,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,qBAuC3B;AAAA,kBAEJ,CAAC,CAAA,EACH;AAAA,iBAAA,EAEJ;AAAA;AAAA;AAAA,WAEJ;AAAA,UACC,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,oBAChBtC,eAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,IAAI,CAAA,EAAG,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,UAAA,CAAW,KAAA,IAC5E,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAA,EACvB;AAAA,SAAA,EAEJ,CAAA;AAAA,MAEJ;AAAA,KAAA;AAAA,IAnPK,KAAA,CAAM;AAAA,GAoPb;AAEJ;AClSO,IAAM,kBAAA,GAAqB,CAAC,EAAE,KAAA,EAAO,SAAS,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS,KAA0B;AACnH,EAAA,MAAM,UAAA,GAAa,MAAM,aAAA,IAAiB,KAAA;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIG,cAAAA,CAAuB,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,oBAAA,GAAuB,UAAU,aAAA,IAAiB,2BAAA;AAExD,EAAAE,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,CAAM,iBAAA,IAAqB,CAAC,MAAM,kBAAA,EAAoB;AAE3D,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,oBAAA,CACG,YAAA,CAAa,MAAM,iBAAA,EAAmB,KAAA,CAAM,kBAAkB,CAAA,CAC9D,IAAA,CAAK,CAAC,IAAA,KAAuB;AAC5B,MAAA,UAAA,CAAW,IAAI,CAAA;AAAA,IACjB,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAe;AACrB,MAAA,OAAA,CAAQ,KAAA,CAAM,2CAA2C,KAAK,CAAA;AAC9D,MAAA,UAAA,CAAW,EAAE,CAAA;AAAA,IACf,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,CAAC,CAAA;AAAA,EACL,GAAG,CAAC,KAAA,CAAM,mBAAmB,KAAA,CAAM,kBAAA,EAAoB,oBAAoB,CAAC,CAAA;AAG5E,EAAA,MAAM,aAAA,GAAsCX,cAAQ,MAAM;AACxD,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,MAAqB;AAAA,MACvC,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAAA,MACvB,OAAO,GAAA,CAAI;AAAA,KACb,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,iBAAA,GAAoB,YAAA,IAAgB,eAAA,CAAgB,KAAK,CAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,KAAA,IAAS,eAAA,CAAgB,KAAK,CAAA;AACjD,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,CAAM,iBAAA,IAAqB,CAAC,KAAA,CAAM,kBAAA;AAGtD,EAAA,MAAM,eAAA,GAAkB,UAAU,eAAA,IAAmB,YAAA;AAErD,EAAA,uBACEf,cAAAA;AAAA,IAACC,wBAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,YAAA,EAAc,iBAAA;AAAA,MACd,KAAA,EAAO,UAAA;AAAA,MACP,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,WAAU,KAAM;AAChC,QAAA,uBACED,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,OAAO,SAAA,CAAU,KAAA;AAAA,YACjB,QAAA,EAAU,CAAC,KAAA,KAAoC;AAC7C,cAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAAA,YAC1B,CAAA;AAAA,YACA,OAAA,EAAS,aAAA;AAAA,YACT,WAAA,EAAa,MAAM,WAAA,IAAe,sBAAA;AAAA,YAClC,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAA;AAAA,YAChC,SAAA,EAAW,IAAA;AAAA,YACX,IAAA,EAAK,OAAA;AAAA,YACL,UAAU,KAAA,CAAM,QAAA;AAAA,YAChB,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,YAC1B,UAAU,UAAA,IAAc,SAAA;AAAA,YACxB,QAAA,EAAU,UAAA;AAAA,YACV;AAAA;AAAA,SACF;AAAA,MAEJ;AAAA,KAAA;AAAA,IAzBK,KAAA,CAAM;AAAA,GA0Bb;AAEJ;AAEO,IAAM,iBAAA,GAAoB,CAAC,EAAE,KAAA,EAAO,SAAS,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS,KAA0B;AAClH,EAAA,MAAM,UAAA,GAAa,MAAM,aAAA,IAAiB,KAAA;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIwB,cAAAA,CAAuB,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,mBAAA,GAAsB,UAAU,YAAA,IAAgB,0BAAA;AAEtD,EAAAE,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,CAAM,WAAA,IAAe,CAAC,MAAM,aAAA,EAAe;AAEhD,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,mBAAA,CACG,YAAA,CAAa,KAAA,CAAM,WAAA,EAAa,KAAA,CAAM,aAAA,EAAe,KAAA,CAAM,aAAA,IAAiB,KAAK,CAAA,CACjF,IAAA,CAAK,CAAC,IAAA,KAAuB;AAC5B,MAAA,UAAA,CAAW,IAAI,CAAA;AAAA,IACjB,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAe;AACrB,MAAA,OAAA,CAAQ,KAAA,CAAM,0CAA0C,KAAK,CAAA;AAC7D,MAAA,UAAA,CAAW,EAAE,CAAA;AAAA,IACf,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,CAAC,CAAA;AAAA,EACL,CAAA,EAAG,CAAC,KAAA,CAAM,WAAA,EAAa,MAAM,aAAA,EAAe,KAAA,CAAM,aAAA,EAAe,mBAAmB,CAAC,CAAA;AAGrF,EAAA,MAAM,aAAA,GAAsCX,cAAQ,MAAM;AACxD,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,MAAqB;AAAA,MACvC,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAAA,MACvB,OAAO,GAAA,CAAI;AAAA,KACb,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,iBAAA,GAAoB,YAAA,IAAgB,eAAA,CAAgB,KAAK,CAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,KAAA,IAAS,eAAA,CAAgB,KAAK,CAAA;AACjD,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,CAAM,WAAA,IAAe,CAAC,KAAA,CAAM,aAAA;AAGhD,EAAA,MAAM,eAAA,GAAkB,UAAU,eAAA,IAAmB,YAAA;AAErD,EAAA,uBACEf,cAAAA;AAAA,IAACC,wBAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,YAAA,EAAc,iBAAA;AAAA,MACd,KAAA,EAAO,UAAA;AAAA,MACP,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,WAAU,KAAM;AAChC,QAAA,uBACED,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,OAAO,SAAA,CAAU,KAAA;AAAA,YACjB,QAAA,EAAU,CAAC,KAAA,KAAoC;AAC7C,cAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAAA,YAC1B,CAAA;AAAA,YACA,OAAA,EAAS,aAAA;AAAA,YACT,WAAA,EAAa,MAAM,WAAA,IAAe,sBAAA;AAAA,YAClC,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAA;AAAA,YAChC,SAAA,EAAW,IAAA;AAAA,YACX,IAAA,EAAK,OAAA;AAAA,YACL,UAAU,KAAA,CAAM,QAAA;AAAA,YAChB,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,YAC1B,UAAU,UAAA,IAAc,SAAA;AAAA,YACxB,QAAA,EAAU,UAAA;AAAA,YACV;AAAA;AAAA,SACF;AAAA,MAEJ;AAAA,KAAA;AAAA,IAzBK,KAAA,CAAM;AAAA,GA0Bb;AAEJ;AC9IA,IAAM,kBAAA,GAAqB,CAAC,KAAA,EAAoC,MAAA,MAA0C;AAAA,EACxG,SAAA,EAAW,IAAA;AAAA,EACX,IAAA,EAAM,OAAA;AAAA,EACN,UAAU,KAAA,CAAM,QAAA;AAAA,EAChB,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,EAC1B,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG;AAClC,CAAA,CAAA;AAEA,SAAS,sBAAsB,KAAA,EAAkE;AAC/F,EAAA,IAAI,KAAA,CAAM,cAAA,EAAgB,OAAO,KAAA,CAAM,cAAA;AACvC,EAAA,OAAO,KAAA,EAAO,cAAc,UAAA,GAAa,MAAA;AAC3C;AAEO,IAAM,mBAAA,GAAsB,CAAC,EAAE,KAAA,EAAO,SAAS,YAAA,EAAc,KAAA,EAAO,QAAO,KAA0B;AAC1G,EAAA,MAAM,IAAA,GAAO,sBAAsB,KAAK,CAAA;AAExC,EAAA,uBACEA,cAAAA;AAAA,IAACC,wBAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,WAAU,qBAC1BC,eAAAA,CAAA+B,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAjC,cAAAA;AAAA,UAACI,kBAAAA;AAAA,UAAA;AAAA,YACC,UAAU,KAAA,CAAM,QAAA;AAAA,YAChB,KAAA,EAAO,CAAC,CAAC,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,YAEzB,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,SACT;AAAA,wBACAF,eAAAA,CAACqC,yCAAA,EAAA,EAAqB,WAAA,EAAaC,yBAAA,EAChC,QAAA,EAAA;AAAA,UAAA,IAAA,KAAS,0BACRxC,cAAAA;AAAA,YAACyC,qBAAA;AAAA,YAAA;AAAA,cACC,MAAA,EAAO,YAAA;AAAA,cACP,OAAO,SAAA,CAAU,KAAA,GAAQlB,uBAAAA,CAAM,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA;AAAA,cAClD,QAAA,EAAU,CAAC,IAAA,KAAuB,SAAA,CAAU,SAAS,IAAA,EAAM,WAAA,MAAiB,IAAI,CAAA;AAAA,cAChF,WAAW,EAAE,SAAA,EAAW,kBAAA,CAAmB,KAAA,EAAO,MAAM,CAAA;AAAE;AAAA,WAC5D;AAAA,UAED,IAAA,KAAS,8BACRvB,cAAAA;AAAA,YAAC0C,6BAAA;AAAA,YAAA;AAAA,cACC,MAAA,EAAO,qBAAA;AAAA,cACP,OAAO,SAAA,CAAU,KAAA,GAAQnB,uBAAAA,CAAM,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA;AAAA,cAClD,QAAA,EAAU,CAAC,IAAA,KAAuB,SAAA,CAAU,SAAS,IAAA,EAAM,WAAA,MAAiB,IAAI,CAAA;AAAA,cAChF,WAAW,EAAE,SAAA,EAAW,kBAAA,CAAmB,KAAA,EAAO,MAAM,CAAA;AAAE;AAAA,WAC5D;AAAA,UAED,IAAA,KAAS,0BACRvB,cAAAA;AAAA,YAAC2C,qBAAA;AAAA,YAAA;AAAA,cACC,MAAA,EAAO,SAAA;AAAA,cACP,OAAO,SAAA,CAAU,KAAA,GAAQpB,uBAAAA,CAAM,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA;AAAA,cAClD,QAAA,EAAU,CAAC,IAAA,KAAuB,SAAA,CAAU,SAAS,IAAA,EAAM,WAAA,MAAiB,IAAI,CAAA;AAAA,cAChF,WAAW,EAAE,SAAA,EAAW,kBAAA,CAAmB,KAAA,EAAO,MAAM,CAAA;AAAE;AAAA;AAC5D,SAAA,EAEJ;AAAA,OAAA,EACF;AAAA,KAAA;AAAA,IAvCG,KAAA,CAAM;AAAA,GAyCb;AAEJ;ACjDO,IAAM,aAAA,GAAgB,CAAC,KAAA,KAAuC;AACnE,EAAA,MAAM,EAAE,OAAO,UAAA,EAAY,cAAA,EAAgB,mBAAmB,QAAA,EAAU,WAAA,EAAa,UAAS,GAAI,KAAA;AAClG,EAAA,MAAM,KAAA,GAAQ,gBAAgB,KAAK,CAAA;AACnC,EAAA,MAAM,YAAA,GAAe,gBAAgB,KAAK,CAAA;AAE1C,EAAA,MAAM,WAAA,GAAkC;AAAA,IACtC,KAAA;AAAA,IACA,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,YAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,UAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAQ,KAAA,CAAM;AAAA,GAChB;AAEA,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,uBAAOvB,cAAAA,CAAC,SAAA,EAAA,EAAW,GAAG,WAAA,EAAa,CAAA;AAAA,IAErC,KAAK,QAAA;AACH,MAAA,uBAAOA,cAAAA,CAAC,WAAA,EAAA,EAAa,GAAG,aAAa,QAAA,EAAoB,CAAA;AAAA,IAE3D,KAAK,UAAA;AACH,MAAA,uBAAOA,cAAAA,CAAC,aAAA,EAAA,EAAe,GAAG,WAAA,EAAa,CAAA;AAAA,IAEzC,KAAK,OAAA;AACH,MAAA,uBAAOA,cAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,WAAA,EAAa,CAAA;AAAA,IAEtC,KAAK,YAAA;AACH,MAAA,uBAAOA,cAAAA,CAAC,mBAAA,EAAA,EAAqB,GAAG,WAAA,EAAa,CAAA;AAAA,IAE/C,KAAK,QAAA;AACH,MAAA,uBAAOA,cAAAA,CAAC,WAAA,EAAA,EAAa,GAAG,WAAA,EAAa,CAAA;AAAA,IAEvC,KAAK,OAAA;AACH,MAAA,uBAAOA,cAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,WAAA,EAAa,CAAA;AAAA,IAEtC,KAAK,UAAA;AACH,MAAA,uBAAOA,eAAC,aAAA,EAAA,EAAe,GAAG,aAAa,UAAA,EAAwB,QAAA,EAAU,MAAM,QAAA,EAAU,CAAA;AAAA,IAE3F,KAAK,MAAA;AACH,MAAA,uBACEA,cAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,cAAA;AAAA,UACA,iBAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAGJ,KAAK,eAAA;AACH,MAAA,uBAAOA,cAAAA,CAAC,kBAAA,EAAA,EAAoB,GAAG,aAAa,QAAA,EAAoB,CAAA;AAAA,IAElE,KAAK,cAAA;AACH,MAAA,uBAAOA,cAAAA,CAAC,iBAAA,EAAA,EAAmB,GAAG,aAAa,QAAA,EAAoB,CAAA;AAAA,IAEjE;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AC3EO,IAAM,YAAY,CAAC,EAAE,KAAA,EAAO,KAAA,EAAO,UAAS,KAAsB;AACvE,EAAA,MAAM,aAAA,GAAgB,UAAU,aAAA,IAAiB,2BAAA;AACjD,EAAA,MAAM,uBAAuB,QAAA,EAAU,oBAAA;AACvC,EAAA,MAAM,2BAA2B,QAAA,EAAU,wBAAA;AAG3C,EAAA,MAAM,cAAA,GAAiB,gBAAA,CAAiB,KAAA,EAAO,KAAA,EAAO,aAAuB,CAAA;AAG7E,EAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,IAAA,IAAI,oBAAA,EAAsB;AACxB,MAAA,uBACEE,eAAAA;AAAA,QAACQ,YAAAA;AAAA,QAAA;AAAA,UAEC,EAAA,EAAI;AAAA,YACF,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,GAAA,EAAK,GAAA;AAAA,YACL,EAAA,EAAI,GAAA;AAAA,YACJ,EAAA,EAAI,CAAA;AAAA,YACJ,WAAA,EAAa;AAAA,WACf;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,UAAA,EAAY,GAAA,EAAI,EAC/C,QAAA,EAAA,KAAA,CAAM,KAAA,EACT,CAAA;AAAA,4BACArB,cAAAA,CAAC,oBAAA,EAAA,EAAqB,UAAA,EAAY,KAAA,EAAO;AAAA;AAAA,SAAA;AAAA,QAbpC,KAAA,CAAM;AAAA,OAcb;AAAA,IAEJ;AAEA,IAAA,uBACEE,eAAAA;AAAA,MAACQ,YAAAA;AAAA,MAAA;AAAA,QAEC,EAAA,EAAI;AAAA,UACF,OAAA,EAAS,MAAA;AAAA,UACT,aAAA,EAAe,QAAA;AAAA,UACf,GAAA,EAAK,GAAA;AAAA,UACL,EAAA,EAAI,GAAA;AAAA,UACJ,EAAA,EAAI,CAAA;AAAA,UACJ,WAAA,EAAa;AAAA,SACf;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,UAAA,EAAY,GAAA,EAAI,EAC/C,QAAA,EAAA,KAAA,CAAM,KAAA,EACT,CAAA;AAAA,0BACArB,eAACqB,mBAAAA,EAAA,EAAW,SAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,IACtC,QAAA,EAAA,KAAA,GAAS,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,GAAG,KAAA,CAAM,MAAM,CAAA,QAAA,CAAA,GAAa,QAAA,GAAY,QAAA,EAC3E;AAAA;AAAA,OAAA;AAAA,MAfK,KAAA,CAAM;AAAA,KAgBb;AAAA,EAEJ;AAGA,EAAA,IAAI,KAAA,CAAM,SAAS,UAAA,EAAY;AAC7B,IAAA,IAAI,wBAAA,EAA0B;AAC5B,MAAA,uBACEnB,eAAAA;AAAA,QAACQ,YAAAA;AAAA,QAAA;AAAA,UAEC,EAAA,EAAI;AAAA,YACF,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,GAAA,EAAK,GAAA;AAAA,YACL,EAAA,EAAI,GAAA;AAAA,YACJ,EAAA,EAAI,CAAA;AAAA,YACJ,WAAA,EAAa;AAAA,WACf;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,UAAA,EAAY,GAAA,EAAI,EAC/C,QAAA,EAAA,KAAA,CAAM,KAAA,EACT,CAAA;AAAA,4BACArB,cAAAA;AAAA,cAAC,wBAAA;AAAA,cAAA;AAAA,gBACC,SAAS,KAAA,IAAS,EAAA;AAAA,gBAClB,SAAA,EAAW,GAAA;AAAA,gBACX,cAAA,EAAgB;AAAA;AAAA;AAClB;AAAA,SAAA;AAAA,QAjBK,KAAA,CAAM;AAAA,OAkBb;AAAA,IAEJ;AAEA,IAAA,uBACEE,eAAAA;AAAA,MAACQ,YAAAA;AAAA,MAAA;AAAA,QAEC,EAAA,EAAI;AAAA,UACF,OAAA,EAAS,MAAA;AAAA,UACT,aAAA,EAAe,QAAA;AAAA,UACf,GAAA,EAAK,GAAA;AAAA,UACL,EAAA,EAAI,GAAA;AAAA,UACJ,EAAA,EAAI,CAAA;AAAA,UACJ,WAAA,EAAa;AAAA,SACf;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,UAAA,EAAY,GAAA,EAAI,EAC/C,QAAA,EAAA,KAAA,CAAM,KAAA,EACT,CAAA;AAAA,0BACArB,cAAAA;AAAA,YAACqB,mBAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,EAAA,EAAI;AAAA,gBACF,KAAA,EAAO,cAAA,KAAmB,QAAA,GAAM,eAAA,GAAkB,cAAA;AAAA,gBAClD,SAAA,EAAW,cAAA,KAAmB,QAAA,GAAM,QAAA,GAAW;AAAA,eACjD;AAAA,cACA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,KAAA,IAAS,EAAA;AAAG;AAAA;AACjD;AAAA,OAAA;AAAA,MApBK,KAAA,CAAM;AAAA,KAqBb;AAAA,EAEJ;AAEA,EAAA,uBACEnB,eAAAA;AAAA,IAACQ,YAAAA;AAAA,IAAA;AAAA,MAEC,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,GAAA,EAAK,GAAA;AAAA,QACL,EAAA,EAAI,GAAA;AAAA,QACJ,EAAA,EAAI,CAAA;AAAA,QACJ,WAAA,EAAa;AAAA,OACf;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,UAAA,EAAY,GAAA,EAAI,EAC/C,QAAA,EAAA,KAAA,CAAM,KAAA,EACT,CAAA;AAAA,wBACArB,cAAAA;AAAA,UAACqB,mBAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,EAAA,EAAI;AAAA,cACF,KAAA,EAAO,cAAA,KAAmB,QAAA,GAAM,eAAA,GAAkB,cAAA;AAAA,cAClD,SAAA,EAAW,cAAA,KAAmB,QAAA,GAAM,QAAA,GAAW,QAAA;AAAA,cAC/C,UAAA,EAAY,GAAA;AAAA,cACZ,QAAA,EAAU,UAAA;AAAA,cACV,UAAA,EAAY;AAAA,aACd;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,KAAA;AAAA,IAxBK,KAAA,CAAM;AAAA,GAyBb;AAEJ;AAEA,IAAM,gBAAA,GAAmB,CACvB,KAAA,EACA,KAAA,EACA,eACA,QAAA,KACW;AACX,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,UAAU,EAAA,EAAI;AACzD,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,UAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,QAAQ,KAAA,GAAQ,IAAA;AAAA,IAEzB,KAAK,YAAA;AACH,MAAA,OAAO,aAAA,EAAe,MAAA,CAAO,KAAA,EAAO,EAAE,cAAA,EAAgB,MAAM,cAAA,EAAgB,CAAA,IAAK,MAAA,CAAO,KAAK,CAAA;AAAA,IAE/F,KAAK,QAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,cAAA;AACH,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,MAAM,aAAA,EAAe;AACvB,QAAA,MAAA,GAAS,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,QAAS,KAAA,GAAQ,CAAC,KAAK,CAAA,GAAI,EAAC;AAAA,MAC9D,CAAA,MAAO;AACL,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,UAAA,MAAA,GAAS,KAAA,CAAM,SAAS,CAAA,GAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAC;AAAA,QAC5C,CAAA,MAAO;AACL,UAAA,MAAA,GAAS,KAAA,GAAQ,CAAC,KAAK,CAAA,GAAI,EAAC;AAAA,QAC9B;AAAA,MACF;AAEA,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,MAAM,gBAAA,GAAmB,CAAC,GAAA,KAAqB;AAC7C,QAAA,IAAI,MAAM,OAAA,EAAS;AACjB,UAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,KAAA,CAAM,OAAO,CAAA;AACxD,UAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,IAAA,CAAK,CAAC,GAAA,KAAQ;AAC7C,YAAA,OAAO,GAAA,CAAI,UAAU,GAAA,IAAO,MAAA,CAAO,IAAI,KAAK,CAAA,KAAM,OAAO,GAAG,CAAA;AAAA,UAC9D,CAAC,CAAA;AACD,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA,OAAO,MAAA,CAAO,KAAA;AAAA,UAChB;AAAA,QACF;AAIA,QAAA,OAAO,OAAO,GAAG,CAAA;AAAA,MACnB,CAAA;AAEA,MAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,aAAA,EAAe;AAC5C,QAAA,MAAM,SAAS,MAAA,CAAO,GAAA,CAAI,CAAA,GAAA,KAAO,gBAAA,CAAiB,GAAG,CAAC,CAAA;AACtD,QAAA,OAAO,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,MACzB;AAEA,MAAA,OAAO,gBAAA,CAAiB,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IAEnC,KAAK,OAAA;AACH,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,KAAA,CAAM,OAAO,CAAA;AACxD,QAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,IAAA,CAAK,CAAC,GAAA,KAAQ;AAC7C,UAAA,OAAO,IAAI,KAAA,KAAU,KAAA;AAAA,QACvB,CAAC,CAAA;AACD,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,OAAO,MAAA,CAAO,KAAA;AAAA,QAChB;AAAA,MACF;AACA,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA,IAErB;AACE,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA;AAEzB,CAAA;AC/MO,IAAM,YAAA,GAAe,CAAC,EAAE,UAAA,EAAY,eAAe,SAAA,GAAY,KAAA,EAAO,QAAA,EAAU,MAAA,EAAO,KAAyB;AACrH,EAAA,MAAM,cAAA,GAAiB,aAAa,UAAU,CAAA;AAC9C,EAAA,MAAM,QAAQtB,iBAAAA,EAAS;AACvB,EAAA,MAAM,WAAWgC,sBAAAA,CAAc,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AAEvC,EAAA,uBACE7B,eAAAA,CAACQ,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,QAAA,EAAU,GAAA,EAAK,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO,EACjD,QAAA,EAAA;AAAA,IAAA,CAAC,6BACAV,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,SAAQ,IAAA,EAAK,YAAA,EAAY,IAAA,EAAC,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,EAAG,YAAY,GAAA,EAAI,EAChE,qBAAW,KAAA,EACd,CAAA;AAAA,IAGD,UAAA,CAAW,QAAA,IAAY,UAAA,CAAW,QAAA,CAAS,MAAA,GAAS,CAAA,mBACnDrB,cAAAA,CAACU,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,SAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,GAAA,EAAI,EAC3D,QAAA,EAAA,UAAA,CAAW,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,YAAA,qBACjCR,eAAAA,CAAC0C,kBAAA,EAAA,EAA2B,eAAA,EAAiB,iBAAiB,CAAA,EAC5D,QAAA,EAAA;AAAA,sBAAA5C,cAAAA;AAAA,QAAC6C,yBAAA;AAAA,QAAA;AAAA,UACC,UAAA,kBAAY7C,cAAAA,CAAC8C,+BAAA,EAAA,EAAe,CAAA;AAAA,UAC5B,eAAA,EAAe,CAAA,MAAA,EAAS,OAAA,CAAQ,EAAE,CAAA,QAAA,CAAA;AAAA,UAClC,EAAA,EAAI,CAAA,MAAA,EAAS,OAAA,CAAQ,EAAE,CAAA,OAAA,CAAA;AAAA,UAEvB,QAAA,kBAAA5C,eAAAA,CAACQ,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,CAAA,EAAE,EACvD,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC+C,4CAAwB,QAAA,EAAS,OAAA,EAAQ,IAAI,EAAE,KAAA,EAAO,UAAA,CAAW,OAAA,EAAQ,EAAG,CAAA;AAAA,4BAC7E/C,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,SAAQ,WAAA,EAAY,EAAA,EAAI,EAAE,UAAA,EAAY,KAAK,KAAA,EAAO,UAAA,CAAW,OAAA,EAAQ,EAC9E,kBAAQ,KAAA,EACX;AAAA,WAAA,EACF;AAAA;AAAA,OACF;AAAA,sBACAnB,gBAAC8C,yBAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,+BACPhD,cAAAA,CAACqB,qBAAA,EAAW,OAAA,EAAQ,WAAU,EAAA,EAAI,EAAE,EAAA,EAAI,GAAA,EAAK,SAAS,OAAA,EAAS,KAAA,EAAO,WAAW,aAAA,EAAc,EAC5F,kBAAQ,WAAA,EACX,CAAA;AAAA,wBAEFrB,cAAAA;AAAA,UAACU,YAAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI;AAAA,cACF,OAAA,EAAS,MAAA;AAAA,cACT,mBAAA,EAAqB,WAAW,gBAAA,GAAmB,gBAAA;AAAA,cACnD,GAAA,EAAK;AAAA,aACP;AAAA,YAEC,kBAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACnBV,cAAAA,CAAC,SAAA,EAAA,EAA2B,KAAA,EAAc,KAAA,EAAO,gBAAgB,KAAA,CAAM,IAAI,GAAG,QAAA,EAAA,EAA9D,KAAA,CAAM,IAA4E,CACnG;AAAA;AAAA;AACH,OAAA,EACF;AAAA,KAAA,EAAA,EA9Bc,OAAA,CAAQ,EA+BxB,CACD,CAAA,EACH,oBAEAA,cAAAA;AAAA,MAACU,YAAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI;AAAA,UACF,OAAA,EAAS,MAAA;AAAA,UACT,mBAAA,EAAqB,gBAAA;AAAA,UACrB,GAAA,EAAK;AAAA,SACP;AAAA,QAEC,yBAAe,GAAA,CAAI,CAAC,KAAA,qBACnBV,eAAC,SAAA,EAAA,EAA2B,KAAA,EAAc,KAAA,EAAO,aAAA,GAAgB,MAAM,IAAI,CAAA,EAAG,QAAA,EAAA,EAA9D,KAAA,CAAM,IAA4E,CACnG;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;ACtDO,IAAM,eAAe,CAAC;AAAA,EAC3B,UAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,wBAAA,GAA2B,KAAA;AAAA,EAC3B,IAAA,GAAO,MAAA;AAAA,EACP,QAAA;AAAA,EACA;AACF,CAAA,KAAyB;AACvB,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,MAClBiD,qBAAA,CAA6B;AAAA,IAC/B,aAAA,EAAe,iBAAiB;AAAC,GAClC,CAAA;AAED,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIzB,eAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,oBAAA,GAAuBG,aAAwC,aAAa,CAAA;AAClF,EAAA,MAAM,oBAAA,GAAuBA,aAAgB,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIH,cAAAA,CAAkC,EAAE,CAAA;AAChF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,CAAC,CAAA;AAG9C,EAAAE,gBAAU,MAAM;AACd,IAAA,aAAA,CAAc,CAAC,CAAA;AAAA,EACjB,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,YAAA,GAAe,qBAAqB,OAAA,KAAY,MAAA;AACtD,IAAA,MAAM,eAAe,aAAA,KAAkB,MAAA;AAEvC,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,MAAM,gBAAA,GAAmB,sBAAA,CAAuB,aAAA,EAAe,UAAU,CAAA;AAEzE,MAAA,IAAI,wBAAA,EAA0B;AAC5B,QAAA,MAAM,aAAa,oBAAA,CAAqB,OAAA;AACxC,QAAA,MAAM,aAAA,GAAgB,CAAC,UAAA,IAAc,IAAA,CAAK,UAAU,UAAU,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,gBAAgB,CAAA;AACnG,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,KAAA,CAAM,gBAAgB,CAAA;AACtB,UAAA,cAAA,CAAe,IAAI,CAAA;AACnB,UAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAAA,QACjC;AAAA,MACF,CAAA,MAAA,IAAW,gBAAgB,YAAA,EAAc;AACvC,QAAA,KAAA,CAAM,gBAAgB,CAAA;AACtB,QAAA,cAAA,CAAe,IAAI,CAAA;AACnB,QAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAAA,MACjC;AAAA,IACF,CAAA,MAAA,IAAW,aAAA,KAAkB,MAAA,IAAa,oBAAA,CAAqB,YAAY,MAAA,EAAW;AACpF,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,oBAAA,CAAqB,OAAA,GAAU,KAAA;AAAA,IACjC;AAEA,IAAA,oBAAA,CAAqB,OAAA,GAAU,aAAA;AAAA,EACjC,GAAG,CAAC,aAAA,EAAe,KAAA,EAAO,wBAAA,EAA0B,UAAU,CAAC,CAAA;AAG/D,EAAA,MAAM,cAAA,GAAiBX,cAAQ,MAAM,YAAA,CAAa,UAAU,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAG3E,EAA4BA,cAAQ,MAAM;AACxC,IAAA,OAAO,cAAA,CAAe,MAAA;AAAA,MACpB,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,eAAA,IAAmB,KAAA,CAAM,qBAAqB,KAAA,CAAM;AAAA,KAChF;AAAA,EACF,CAAA,EAAG,CAAC,cAAc,CAAC;AAEnB,EAA2BA,cAAQ,MAAM;AACvC,IAAA,OAAO,cAAA,CAAe,MAAA;AAAA,MACpB,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,cAAA,IAAkB,KAAA,CAAM,eAAe,KAAA,CAAM;AAAA,KACzE;AAAA,EACF,CAAA,EAAG,CAAC,cAAc,CAAC;AAEnB,EAAA,MAAM,gBAAA,GAAmB,OAAO,IAAA,KAA8B;AAC5D,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,MAAM,eAAA,GAAkB,mBAAA,CAAoB,IAAA,EAAM,UAAU,CAAA;AAE5D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,eAAe,CAAA;AAC9B,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,KAAA,CAAM,aAAA,IAAiB,EAAE,CAAA;AACzB,UAAA,SAAA,EAAU;AAAA,QACZ;AAAA,MACF,SAAS,KAAA,EAAY;AACnB,QAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAC7C,QAAA,IAAI,YAAA,GAAe,2CAAA;AAEnB,QAAA,IAAI,KAAA,EAAO,UAAU,IAAA,EAAM;AACzB,UAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,IAAA;AACjC,UAAA,YAAA,GACE,UAAU,OAAA,IACV,SAAA,CAAU,SACV,SAAA,CAAU,MAAA,EAAQ,YACjB,KAAA,CAAM,OAAA,CAAQ,UAAU,MAAM,CAAA,GAAI,UAAU,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAA,IACjE,UAAU,GAAA,IACV,YAAA;AAAA,QACJ,CAAA,MAAA,IAAW,OAAO,OAAA,EAAS;AACzB,UAAA,YAAA,GAAe,KAAA,CAAM,OAAA;AAAA,QACvB;AAEA,QAAA,cAAA,CAAe,YAAY,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,cAAc,eAAe,CAAA;AAAA,IAC3C;AAAA,EACF,CAAA;AAGA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,uBAAOf,cAAAA,CAAC,YAAA,EAAA,EAAa,YAAwB,aAAA,EAA8B,SAAA,EAAsB,UAAoB,MAAA,EAAgB,CAAA;AAAA,EACvI;AAGA,EAAA,uBACEE,eAAAA,CAACQ,YAAAA,EAAA,EAAI,SAAA,EAAU,QAAO,QAAA,EAAU,YAAA,CAAa,gBAAgB,CAAA,EAAG,IAAI,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,QAAO,EAC7F,QAAA,EAAA;AAAA,IAAA,CAAC,6BACAV,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,SAAQ,IAAA,EAAK,YAAA,EAAY,IAAA,EAAC,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,EAAG,YAAY,GAAA,EAAI,EAChE,qBAAW,KAAA,EACd,CAAA;AAAA,IAGD,+BACCrB,cAAAA,CAACkD,cAAA,EAAA,EAAM,QAAA,EAAS,SAAQ,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,IAAK,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,GACtE,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,IAGD,WAAW,QAAA,IAAY,UAAA,CAAW,QAAA,CAAS,MAAA,GAAS,KAAK,MAAM;AAC9D,MAAA,MAAM,kBAAA,GAAqB,UAAA,CAAW,QAAA,EAAU,kBAAA,IAAsB,OAAA;AACtE,MAAA,MAAM,YAAA,GAAe,UAAA,CAAW,QAAA,EAAU,YAAA,IAAgB,CAAA;AAC1D,MAAA,MAAM,WAAA,GAAc,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,YAAY,GAAG,CAAC,CAAA;AACzD,MAAA,MAAM,mBAAA,GAAsB,CAAC,UAAU,CAAA;AAGvC,MAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,qBACxBlD,cAAAA;AAAA,QAACU,YAAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI;AAAA,YACF,OAAA,EAAS,MAAA;AAAA,YACT,mBAAA,EAAqB;AAAA,cACnB,EAAA,EAAI,KAAA;AAAA,cACJ,IAAI,WAAA,KAAgB,CAAA,GAAI,KAAA,GAAQ,WAAA,KAAgB,IAAI,gBAAA,GAAmB;AAAA,aACzE;AAAA,YACA,GAAA,EAAK;AAAA,WACP;AAAA,UAEC,QAAA,EAAA,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAe;AAClC,YAAA,MAAM,mBAAA,GAAsB,mBAAA,CAAoB,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AACnE,YAAA,uBACEV,cAAAA;AAAA,cAACU,YAAAA;AAAA,cAAA;AAAA,gBAEC,EAAA,EAAI;AAAA,kBACF,YAAY,mBAAA,GACR;AAAA,oBACA,EAAA,EAAI,QAAA;AAAA,oBACJ,EAAA,EAAI;AAAA,mBACN,GACE;AAAA,iBACN;AAAA,gBAEA,QAAA,kBAAAV,cAAAA;AAAA,kBAAC,aAAA;AAAA,kBAAA;AAAA,oBACC,KAAA;AAAA,oBACA,OAAA;AAAA,oBACA,MAAA;AAAA,oBACA,QAAA;AAAA,oBACA,UAAA;AAAA,oBACA,cAAA;AAAA,oBACA,iBAAA;AAAA,oBACA,QAAA;AAAA,oBACA,WAAA;AAAA,oBACA,QAAA;AAAA,oBACA;AAAA;AAAA;AACF,eAAA;AAAA,cAtBK,KAAA,CAAM;AAAA,aAuBb;AAAA,UAEJ,CAAC;AAAA;AAAA,OACH;AAGF,MAAA,IAAI,uBAAuB,SAAA,EAAW;AAEpC,QAAA,uBACEE,eAAAA,CAACQ,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,MAAA,EAAQ,WAAA,EAAa,WAAA,EAAa,UAAA,CAAW,SAAS,CAAA,EAAG,CAAA,EAAG,eAAA,EAAiB,UAAA,CAAW,iBAAgB,EACjH,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAACmD,gBAAA,EAAA,EAAQ,UAAA,EAAwB,WAAA,EAAY,cAC1C,QAAA,EAAA,UAAA,CAAW,QAAA,CAAS,GAAA,CAAI,CAAC,4BACxBnD,cAAAA,CAACoD,aAAA,EAAA,EACC,QAAA,kBAAApD,eAACqD,kBAAA,EAAA,EACC,QAAA,kBAAArD,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,OAAA,EAAQ,WAAA,EAAY,EAAA,EAAI,EAAE,UAAA,EAAY,GAAA,EAAI,EACnD,QAAA,EAAA,OAAA,CAAQ,OACX,CAAA,EACF,CAAA,EAAA,EALS,OAAA,CAAQ,EAMnB,CACD,CAAA,EACH,CAAA;AAAA,0BACArB,cAAAA,CAACU,YAAAA,EAAA,EAAI,IAAI,EAAE,EAAA,EAAI,CAAA,EAAE,EACd,QAAA,EAAA,UAAA,CAAW,QAAA,CAAS,GAAA,CAAI,CAAC,SAAS,YAAA,KAAiB;AAClD,YAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,QAAA,EAAU,MAAA,IAAU,CAAA;AACtD,YAAA,uBACER,eAAAA;AAAA,cAACQ,YAAAA;AAAA,cAAA;AAAA,gBAEC,EAAA,EAAI;AAAA,kBACF,OAAA,EAAS,UAAA,KAAe,YAAA,GAAe,OAAA,GAAU;AAAA,iBACnD;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,OAAA,CAAQ,+BACPV,cAAAA,CAACqB,qBAAA,EAAW,OAAA,EAAQ,WAAU,EAAA,EAAI,EAAE,EAAA,EAAI,GAAA,EAAK,SAAS,OAAA,EAAS,KAAA,EAAO,WAAW,aAAA,EAAc,EAC5F,kBAAQ,WAAA,EACX,CAAA;AAAA,kBAED,iBAAiB,OAAO,CAAA;AAAA,kCACzBnB,gBAACQ,YAAAA,EAAA,EAAI,IAAI,EAAE,EAAA,EAAI,GAAG,OAAA,EAAS,MAAA,EAAQ,KAAK,CAAA,EAAG,SAAA,EAAW,aAAa,EAAA,EAAI,CAAA,EAAG,aAAa,UAAA,CAAW,OAAA,EAAS,cAAA,EAAgB,QAAA,EAAS,EACjI,QAAA,EAAA;AAAA,oBAAA,YAAA,GAAe,qBACdV,cAAAA;AAAA,sBAACsD,eAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAK,OAAA;AAAA,wBACL,OAAA,EAAQ,UAAA;AAAA,wBACR,IAAI,EAAE,WAAA,EAAa,WAAW,OAAA,EAAS,KAAA,EAAO,WAAW,OAAA,EAAS,SAAA,EAAW,EAAE,WAAA,EAAa,WAAW,OAAA,EAAS,eAAA,EAAiB,GAAG,UAAA,CAAW,OAAO,MAAK,EAAE;AAAA,wBAC7J,SAAA,kBAAWtD,cAAAA,CAACuD,8BAAA,EAAA,EAAc,CAAA;AAAA,wBAC1B,OAAA,EAAS,MAAM,aAAA,CAAc,YAAA,GAAe,CAAC,CAAA;AAAA,wBAC9C,QAAA,EAAA;AAAA;AAAA,qBAED;AAAA,oBAED,YAAA,GAAe,cAAA,GAAiB,CAAA,oBAAKvD,cAAAA;AAAA,sBAACsD,eAAA;AAAA,sBAAA;AAAA,wBACrC,OAAA,EAAQ,UAAA;AAAA,wBACR,IAAA,EAAK,OAAA;AAAA,wBACL,IAAI,EAAE,WAAA,EAAa,WAAW,OAAA,EAAS,KAAA,EAAO,WAAW,OAAA,EAAS,SAAA,EAAW,EAAE,WAAA,EAAa,WAAW,OAAA,EAAS,eAAA,EAAiB,GAAG,UAAA,CAAW,OAAO,MAAK,EAAE;AAAA,wBAC7J,OAAA,kBAAStD,cAAAA,CAACwD,iCAAA,EAAA,EAAiB,CAAA;AAAA,wBAC3B,SAAS,MAAM;AACb,0BAAA,IAAI,YAAA,GAAe,iBAAiB,CAAA,EAAG;AACrC,4BAAA,aAAA,CAAc,eAAe,CAAC,CAAA;AAAA,0BAChC;AAAA,wBACF,CAAA;AAAA,wBACD,QAAA,EAAA;AAAA;AAAA;AAED,mBAAA,EAEF;AAAA;AAAA,eAAA;AAAA,cArCK,OAAA,CAAQ;AAAA,aAsCf;AAAA,UAEJ,CAAC,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,MAEJ;AAGA,MAAA,uBACExD,cAAAA,CAACU,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,GAAA,IACvD,QAAA,EAAA,UAAA,CAAW,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,YAAA,qBACjCR,eAAAA,CAAC0C,kBAAAA,EAAA,EAA2B,eAAA,EAAiB,YAAA,KAAiB,CAAA,EAC5D,QAAA,EAAA;AAAA,wBAAA5C,cAAAA;AAAA,UAAC6C,yBAAAA;AAAA,UAAA;AAAA,YACC,UAAA,kBAAY7C,cAAAA,CAAC8C,+BAAAA,EAAA,EAAe,CAAA;AAAA,YAC5B,eAAA,EAAe,CAAA,MAAA,EAAS,OAAA,CAAQ,EAAE,CAAA,QAAA,CAAA;AAAA,YAClC,EAAA,EAAI,CAAA,MAAA,EAAS,OAAA,CAAQ,EAAE,CAAA,OAAA,CAAA;AAAA,YAEvB,QAAA,kBAAA5C,eAAAA,CAACQ,YAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,CAAA,EAAE,EACvD,QAAA,EAAA;AAAA,8BAAAV,cAAAA,CAAC+C,wCAAAA,EAAA,EAAwB,QAAA,EAAS,OAAA,EAAQ,IAAI,EAAE,KAAA,EAAO,UAAA,CAAW,OAAA,EAAQ,EAAG,CAAA;AAAA,8BAC7E/C,cAAAA,CAACqB,mBAAAA,EAAA,EAAW,SAAQ,WAAA,EAAY,EAAA,EAAI,EAAE,UAAA,EAAY,KAAK,KAAA,EAAO,UAAA,CAAW,OAAA,EAAQ,EAC9E,kBAAQ,KAAA,EACX;AAAA,aAAA,EACF;AAAA;AAAA,SACF;AAAA,wBACAnB,eAAAA,CAAC8C,yBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,OAAA,CAAQ,+BACPhD,cAAAA,CAACqB,qBAAA,EAAW,OAAA,EAAQ,WAAU,EAAA,EAAI,EAAE,EAAA,EAAI,GAAA,EAAK,SAAS,OAAA,EAAS,KAAA,EAAO,WAAW,aAAA,EAAc,EAC5F,kBAAQ,WAAA,EACX,CAAA;AAAA,UAED,iBAAiB,OAAO;AAAA,SAAA,EAC3B;AAAA,OAAA,EAAA,EApBc,OAAA,CAAQ,EAqBxB,CACD,CAAA,EACH,CAAA;AAAA,IAEJ,CAAA,OAAQ,MAAM;AACZ,MAAA,MAAM,YAAA,GAAe,UAAA,CAAW,QAAA,EAAU,YAAA,IAAgB,CAAA;AAC1D,MAAA,MAAM,WAAA,GAAc,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,YAAY,GAAG,CAAC,CAAA;AAGzD,MAAA,MAAM,mBAAA,GAAsB,CAAC,UAAU,CAAA;AAEvC,MAAA,uBACErB,cAAAA;AAAA,QAACU,YAAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI;AAAA,YACF,OAAA,EAAS,MAAA;AAAA,YACT,mBAAA,EAAqB;AAAA,cACnB,EAAA,EAAI,KAAA;AAAA,cACJ,IAAI,WAAA,KAAgB,CAAA,GAAI,KAAA,GAAQ,WAAA,KAAgB,IAAI,gBAAA,GAAmB;AAAA,aACzE;AAAA,YACA,GAAA,EAAK;AAAA,WACP;AAAA,UAEC,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,KAAU;AAC7B,YAAA,MAAM,mBAAA,GAAsB,mBAAA,CAAoB,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AACnE,YAAA,uBACEV,cAAAA;AAAA,cAACU,YAAAA;AAAA,cAAA;AAAA,gBAEC,EAAA,EAAI;AAAA,kBACF,YAAY,mBAAA,GACR;AAAA,oBACA,EAAA,EAAI,QAAA;AAAA,oBACJ,EAAA,EAAI;AAAA,mBACN,GACE;AAAA,iBACN;AAAA,gBAEA,QAAA,kBAAAV,cAAAA;AAAA,kBAAC,aAAA;AAAA,kBAAA;AAAA,oBACC,KAAA;AAAA,oBACA,OAAA;AAAA,oBACA,MAAA;AAAA,oBACA,QAAA;AAAA,oBACA,UAAA;AAAA,oBACA,cAAA;AAAA,oBACA,iBAAA;AAAA,oBACA,QAAA;AAAA,oBACA,WAAA;AAAA,oBACA,QAAA;AAAA,oBACA;AAAA;AAAA;AACF,eAAA;AAAA,cAtBK,KAAA,CAAM;AAAA,aAuBb;AAAA,UAEJ,CAAC;AAAA;AAAA,OACH;AAAA,IAEJ,CAAA,GAAG;AAAA,oBAEHE,eAAAA,CAACuD,cAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,CAAA,EAAG,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,EAAE,EAAG,gBAAe,eAAA,EAC/D,QAAA,EAAA;AAAA,sBAAAzD,cAAAA;AAAA,QAACsD,eAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,OAAA;AAAA,UACL,EAAA,EAAI,EAAE,QAAA,EAAU,GAAA,EAAK,eAAA,EAAiB,UAAA,CAAW,OAAA,EAAS,SAAA,EAAW,EAAE,eAAA,EAAiB,UAAA,CAAW,OAAA,EAAQ,EAAE;AAAA,UAC7G,QAAA,EAAU,SAAA;AAAA,UAET,sBAAY,eAAA,GAAkB;AAAA;AAAA,OACjC;AAAA,sBACApD,eAAAA,CAACuD,cAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,SAAS,CAAA,EAC9B,QAAA,EAAA;AAAA,wBAAAzD,cAAAA;AAAA,UAACsD,eAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAK,OAAA;AAAA,YACL,SAAS,MAAM;AACb,cAAA,KAAA,EAAM;AACN,cAAA,WAAA,EAAY;AACZ,cAAA,cAAA,CAAe,IAAI,CAAA;AAEnB,cAAA,MAAM,kBAAA,GAAqB,UAAA,CAAW,QAAA,EAAU,kBAAA,IAAsB,OAAA;AACtE,cAAA,IAAI,uBAAuB,SAAA,EAAW;AACpC,gBAAA,aAAA,CAAc,CAAC,CAAA;AAAA,cACjB;AAAA,YACF,CAAA;AAAA,YACA,QAAA,EAAU,SAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,QACC,4BACCtD,cAAAA;AAAA,UAACsD,eAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAK,OAAA;AAAA,YACL,OAAA,EAAS,QAAA;AAAA,YACT,QAAA,EAAU,SAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EAEJ;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"index.js","sourcesContent":["import { FormSchema, FormField } from '../types';\r\n\r\n/**\r\n * Get all fields from form schema (sections or legacy fields)\r\n */\r\nexport const getAllFields = (formSchema: FormSchema): FormField[] => {\r\n return formSchema.sections\r\n ? formSchema.sections.flatMap(section => section.fields)\r\n : (formSchema.fields || []);\r\n};\r\n\r\n/**\r\n * Normalize initial values to handle backward compatibility\r\n * - Single value -> array for multiple fields\r\n * - Array -> first element for single fields\r\n */\r\nexport const normalizeInitialValues = (\r\n values: Record<string, any>,\r\n formSchema: FormSchema\r\n): Record<string, any> => {\r\n if (!values) return values;\r\n\r\n const normalized: Record<string, any> = { ...values };\r\n const allFields = getAllFields(formSchema);\r\n\r\n allFields.forEach(field => {\r\n const fieldValue = normalized[field.name];\r\n\r\n // Handle select, formReference, and apiReference fields\r\n if (field.type === 'select' || field.type === 'formReference' || field.type === 'apiReference') {\r\n if (field.allowMultiple) {\r\n // Multiple selection: convert single value to array\r\n if (fieldValue !== null && fieldValue !== undefined && fieldValue !== '') {\r\n if (!Array.isArray(fieldValue)) {\r\n normalized[field.name] = [fieldValue];\r\n }\r\n } else {\r\n normalized[field.name] = [];\r\n }\r\n } else {\r\n // Single selection: convert array to first element\r\n if (Array.isArray(fieldValue) && fieldValue.length > 0) {\r\n normalized[field.name] = fieldValue[0];\r\n } else if (Array.isArray(fieldValue) && fieldValue.length === 0) {\r\n normalized[field.name] = '';\r\n }\r\n }\r\n }\r\n\r\n // Normalize file fields: convert single file to array if field allows multiple\r\n if (field.type === 'file') {\r\n if (field.allowMultiple) {\r\n if (fieldValue !== null && fieldValue !== undefined) {\r\n if (!Array.isArray(fieldValue)) {\r\n normalized[field.name] = [fieldValue];\r\n }\r\n } else {\r\n normalized[field.name] = [];\r\n }\r\n } else {\r\n // Single file: convert array to first element\r\n if (Array.isArray(fieldValue) && fieldValue.length > 0) {\r\n normalized[field.name] = fieldValue[0];\r\n } else if (Array.isArray(fieldValue) && fieldValue.length === 0) {\r\n normalized[field.name] = null;\r\n }\r\n }\r\n }\r\n });\r\n\r\n return normalized;\r\n};\r\n\r\n/**\r\n * Get default value for a field based on its type\r\n */\r\nexport const getDefaultValue = (field: FormField): any => {\r\n switch (field.type) {\r\n case 'checkbox':\r\n case 'toggle':\r\n return false;\r\n case 'datepicker':\r\n return null;\r\n case 'file':\r\n return field.allowMultiple ? [] : null;\r\n case 'select':\r\n case 'formReference':\r\n case 'apiReference':\r\n return field.allowMultiple ? [] : '';\r\n case 'text':\r\n case 'email':\r\n case 'number':\r\n case 'radio':\r\n case 'ckeditor':\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\n/**\r\n * Transform form values based on field types.\r\n */\r\nexport const transformFormValues = (\r\n data: Record<string, any>,\r\n formSchema: FormSchema\r\n): Record<string, any> => {\r\n const allFields = getAllFields(formSchema);\r\n const fieldTypeMap = new Map<string, string>();\r\n allFields.forEach(field => {\r\n fieldTypeMap.set(field.name, field.type);\r\n });\r\n\r\n const transformedData: Record<string, any> = {};\r\n\r\n Object.keys(data).forEach(key => {\r\n const fieldType = fieldTypeMap.get(key);\r\n const value = data[key];\r\n\r\n if (value === null || value === undefined) {\r\n transformedData[key] = value;\r\n return;\r\n }\r\n\r\n switch (fieldType) {\r\n case 'number':\r\n if (value === '' || value === null || value === undefined) {\r\n transformedData[key] = null;\r\n } else {\r\n const numValue = Number(value);\r\n transformedData[key] = isNaN(numValue) ? value : numValue;\r\n }\r\n break;\r\n case 'checkbox':\r\n case 'toggle':\r\n transformedData[key] = Boolean(value);\r\n break;\r\n case 'datepicker':\r\n case 'file':\r\n default:\r\n transformedData[key] = value;\r\n }\r\n });\r\n\r\n return transformedData;\r\n};\r\n","import { useTheme } from '@mui/material';\r\nimport { FormColors } from '../types';\r\n\r\n/**\r\n * Hook to get form colors - uses custom colors if provided, otherwise falls back to Material-UI theme\r\n */\r\nexport const useFormColors = (customColors?: FormColors) => {\r\n const theme = useTheme();\r\n\r\n return {\r\n primary: customColors?.primary || theme.palette.primary.main,\r\n secondary: customColors?.secondary || theme.palette.secondary.main,\r\n error: customColors?.error || theme.palette.error.main,\r\n success: customColors?.success || theme.palette.success.main,\r\n warning: customColors?.warning || theme.palette.warning.main,\r\n info: customColors?.info || theme.palette.info.main,\r\n textPrimary: customColors?.textPrimary || theme.palette.text.primary,\r\n textSecondary: customColors?.textSecondary || theme.palette.text.secondary,\r\n divider: customColors?.divider || theme.palette.divider,\r\n background: customColors?.background || theme.palette.background.default,\r\n backgroundPaper: customColors?.backgroundPaper || theme.palette.background.paper,\r\n };\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormControl, FormLabel, TextField as MuiTextField } from '@mui/material';\r\nimport { FieldRendererProps } from '../../types';\r\n\r\nexport const TextField = ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => {\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <FormControl\r\n fullWidth\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n >\r\n <FormLabel> {field.label}</FormLabel>\r\n <MuiTextField\r\n {...formField}\r\n type={field.type === 'number' ? 'number' : field.type}\r\n placeholder={field.placeholder || 'Enter value'}\r\n fullWidth\r\n size=\"small\"\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n helperText={errors[field.name]?.message as string}\r\n inputProps={\r\n field.type === 'number'\r\n ? {\r\n min: field.validation?.min,\r\n max: field.validation?.max,\r\n }\r\n : undefined\r\n }\r\n />\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n};\r\n","import { FormField } from '../types';\r\n\r\n/**\r\n * Format file size in human-readable format\r\n */\r\nexport const formatFileSize = (bytes: number): string => {\r\n if (bytes === 0) return '0 Bytes';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\r\n};\r\n\r\n/**\r\n * Validate file based on field configuration\r\n */\r\nexport const validateFile = (file: File, field: FormField): string | true => {\r\n // Check file type\r\n if (field.validation?.allowedFileTypes && field.validation.allowedFileTypes.length > 0) {\r\n const fileExtension = file.name.split('.').pop()?.toLowerCase();\r\n const allowedTypes = field.validation.allowedFileTypes.map(t => t.toLowerCase().replace('.', ''));\r\n if (!fileExtension || !allowedTypes.includes(fileExtension)) {\r\n return `File type not allowed. Allowed types: ${field.validation.allowedFileTypes.join(', ')}`;\r\n }\r\n }\r\n\r\n // Check file size\r\n if (field.validation?.maxFileSize) {\r\n if (file.size > field.validation.maxFileSize) {\r\n const maxSizeFormatted = formatFileSize(field.validation.maxFileSize);\r\n return `File size exceeds maximum allowed size of ${maxSizeFormatted}`;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Build validation rules for a field\r\n */\r\nexport const buildFieldRules = (field: FormField): any => {\r\n const rules: any = {};\r\n \r\n if (field.required) {\r\n rules.required = `${field.label} is required`;\r\n }\r\n\r\n // File validation rules\r\n if (field.type === 'file') {\r\n rules.validate = (value: any) => {\r\n if (field.required) {\r\n if (field.allowMultiple) {\r\n const files = Array.isArray(value) ? value : [];\r\n if (files.length === 0) {\r\n return `${field.label} is required`;\r\n }\r\n const hasValidFiles = files.some((file: any) => \r\n file && typeof file === 'object' && ('fileName' in file || 'fileUrl' in file)\r\n );\r\n if (!hasValidFiles) {\r\n return `${field.label} is required`;\r\n }\r\n } else {\r\n if (!value || (typeof value === 'object' && !('fileName' in value || 'fileUrl' in value))) {\r\n return `${field.label} is required`;\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n }\r\n\r\n // Multiple select validation\r\n if ((field.type === 'select' || field.type === 'formReference' || field.type === 'apiReference') && field.allowMultiple) {\r\n rules.validate = (value: string | string[] | null) => {\r\n const values = value as string[] | null;\r\n if (!values || values.length === 0) {\r\n if (field.required) {\r\n return `${field.label} is required`;\r\n }\r\n return true;\r\n }\r\n return true;\r\n };\r\n }\r\n\r\n return rules;\r\n};\r\n\r\n/**\r\n * Normalize options to OptionItem format\r\n */\r\nexport const normalizeOptions = (options?: FormField['options']): Array<{ label: string; value: string | number }> => {\r\n if (!options) return [];\r\n \r\n return options.map(opt => {\r\n if (typeof opt === 'string') {\r\n return { label: opt, value: opt };\r\n }\r\n return opt;\r\n });\r\n};\r\n","import React from 'react';\r\nimport {\r\n FormControl,\r\n InputLabel,\r\n Select as MuiSelect,\r\n MenuItem,\r\n FormHelperText,\r\n Chip,\r\n Box,\r\n OutlinedInput,\r\n CircularProgress,\r\n} from '@mui/material';\r\n\r\nexport interface SimpleSelectOption {\r\n value: string | number;\r\n label: string;\r\n}\r\n\r\nexport interface SimpleSelectProps {\r\n label: string;\r\n value: string | string[] | number | number[] | null | undefined;\r\n onChange: (value: string | string[] | null) => void;\r\n options: SimpleSelectOption[];\r\n placeholder?: string;\r\n helperText?: string;\r\n fullWidth?: boolean;\r\n size?: 'small' | 'medium';\r\n required?: boolean;\r\n error?: boolean;\r\n disabled?: boolean;\r\n multiple?: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\nexport const SimpleSelect: React.FC<SimpleSelectProps> = ({\r\n label,\r\n value,\r\n onChange,\r\n options,\r\n placeholder,\r\n helperText,\r\n fullWidth = true,\r\n size = 'small',\r\n required = false,\r\n error = false,\r\n disabled = false,\r\n multiple = false,\r\n isLoading = false,\r\n}) => {\r\n const handleChange = (event: any) => {\r\n const val = event.target.value;\r\n onChange(val);\r\n };\r\n\r\n return (\r\n <FormControl fullWidth={fullWidth} size={size} required={required} error={error} disabled={disabled}>\r\n <InputLabel>{label}</InputLabel>\r\n <MuiSelect\r\n value={value ?? (multiple ? [] : '')}\r\n onChange={handleChange}\r\n input={<OutlinedInput label={label} />}\r\n multiple={multiple}\r\n disabled={disabled || isLoading}\r\n endAdornment={isLoading ? <CircularProgress size={20} /> : undefined}\r\n renderValue={(selected) => {\r\n if (multiple) {\r\n const selectedValues = selected as (string | number)[];\r\n if (selectedValues.length === 0) {\r\n return <em>{placeholder || 'Select...'}</em>;\r\n }\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\r\n {selectedValues.map((val) => {\r\n const option = options.find((opt) => opt.value === val);\r\n return (\r\n <Chip\r\n key={val}\r\n label={option?.label || val}\r\n size=\"small\"\r\n />\r\n );\r\n })}\r\n </Box>\r\n );\r\n }\r\n const option = options.find((opt) => opt.value === selected);\r\n return option?.label || selected || <em>{placeholder || 'Select...'}</em>;\r\n }}\r\n >\r\n {options.map((option) => (\r\n <MenuItem key={option.value} value={option.value}>\r\n {option.label}\r\n </MenuItem>\r\n ))}\r\n </MuiSelect>\r\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FieldRendererProps } from '../../types';\r\nimport { normalizeOptions } from '../../utils/fieldHelpers';\r\nimport { SimpleSelect, SimpleSelectOption } from '../common/SimpleSelect';\r\n\r\nexport const SelectField = ({ field, control, defaultValue, rules, errors, services }: FieldRendererProps) => {\r\n const isMultiple = field.allowMultiple || false;\r\n const normalizedOptions = normalizeOptions(field.options);\r\n\r\n // Convert to SimpleSelectOption format\r\n const selectOptions: SimpleSelectOption[] = useMemo(() => {\r\n return normalizedOptions.map((opt) => ({\r\n value: String(opt.value),\r\n label: opt.label,\r\n }));\r\n }, [normalizedOptions]);\r\n\r\n // Use custom SelectComponent if provided, otherwise use SimpleSelect\r\n const SelectComponent = services?.SelectComponent || SimpleSelect;\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => {\r\n return (\r\n <SelectComponent\r\n label={field.label}\r\n value={formField.value}\r\n onChange={(value: string | string[] | null) => {\r\n formField.onChange(value);\r\n }}\r\n options={selectOptions}\r\n placeholder={field.placeholder || 'Select...'}\r\n helperText={errors[field.name]?.message as string}\r\n fullWidth={true}\r\n size=\"small\"\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n disabled={false}\r\n multiple={isMultiple}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormControlLabel, Checkbox } from '@mui/material';\r\nimport { FieldRendererProps } from '../../types';\r\n\r\nexport const CheckboxField = ({ field, control, defaultValue, rules }: FieldRendererProps) => {\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n {...formField}\r\n checked={formField.value || false}\r\n size=\"small\"\r\n />\r\n }\r\n label={field.label}\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormControl, FormLabel, RadioGroup, FormControlLabel, Radio } from '@mui/material';\r\nimport { FieldRendererProps, OptionItem } from '../../types';\r\nimport { normalizeOptions } from '../../utils/fieldHelpers';\r\n\r\nexport const RadioField = ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => {\r\n const normalizedOptions = normalizeOptions(field.options);\r\n \r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <FormControl component=\"fieldset\" required={field.required} error={!!errors[field.name]}>\r\n <FormLabel required={field.required} error={!!errors[field.name]}>\r\n {field.label}\r\n </FormLabel>\r\n\r\n <RadioGroup {...formField} row>\r\n {normalizedOptions.map((option, index) => (\r\n <FormControlLabel\r\n key={index}\r\n value={option.value}\r\n control={<Radio size=\"small\" />}\r\n label={option.label}\r\n />\r\n ))}\r\n </RadioGroup>\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormControlLabel, Switch, Box, Typography } from '@mui/material';\r\nimport { FieldRendererProps } from '../../types';\r\n\r\nexport const ToggleField = ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => {\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <FormControlLabel\r\n control={\r\n <Switch\r\n {...formField}\r\n checked={formField.value || false}\r\n size=\"medium\"\r\n />\r\n }\r\n label={\r\n <Box>\r\n <Typography variant=\"body2\">\r\n {field.label} {field.required && '*'}\r\n </Typography>\r\n {errors[field.name] && (\r\n <Typography variant=\"caption\" color=\"error\" sx={{ display: 'block', mt: 0.5 }}>\r\n {errors[field.name]?.message as string}\r\n </Typography>\r\n )}\r\n </Box>\r\n }\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { Box, Typography, Input, FormLabel } from '@mui/material';\r\nimport { FieldRendererProps } from '../../types';\r\n\r\nexport const ColorField = ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => {\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, width: '100%' }}>\r\n <FormLabel\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n >\r\n {field.label}\r\n </FormLabel>\r\n <Box sx={{ display: 'flex', flexDirection: 'column', flex: 1, maxWidth: 200 }}>\r\n <Input\r\n {...formField}\r\n type=\"color\"\r\n sx={{\r\n width: '20%',\r\n height: '40px',\r\n cursor: 'pointer',\r\n border: errors[field.name] ? '1px solid red' : '1px solid rgba(0, 0, 0, 0.23)',\r\n borderRadius: '4px',\r\n padding: '1px',\r\n }}\r\n inputProps={{\r\n style: {\r\n height: '100%',\r\n cursor: 'pointer',\r\n },\r\n }}\r\n />\r\n {errors[field.name] && (\r\n <Typography variant=\"caption\" color=\"error\" sx={{ mt: 0.5 }}>\r\n {errors[field.name]?.message as string}\r\n </Typography>\r\n )}\r\n </Box>\r\n </Box>\r\n )}\r\n />\r\n );\r\n};\r\n","/**\r\n * Default service implementations\r\n * These are fallback implementations that can be overridden\r\n */\r\n\r\nimport {\r\n FileUploadService,\r\n FormReferenceService,\r\n ApiReferenceService,\r\n DateFormatterService,\r\n OptionItem,\r\n UploadedFile,\r\n} from '../types';\r\nimport dayjs from 'dayjs';\r\n\r\n/**\r\n * Default file upload service - throws error, must be provided\r\n */\r\nexport const defaultFileUploadService: FileUploadService = {\r\n uploadFiles: async () => {\r\n throw new Error('File upload service not provided. Please provide a fileUpload service in FormServices.');\r\n },\r\n};\r\n\r\n/**\r\n * Default form reference service - throws error, must be provided\r\n */\r\nexport const defaultFormReferenceService: FormReferenceService = {\r\n fetchOptions: async () => {\r\n throw new Error('Form reference service not provided. Please provide a formReference service in FormServices.');\r\n },\r\n};\r\n\r\n/**\r\n * Default API reference service - throws error, must be provided\r\n */\r\nexport const defaultApiReferenceService: ApiReferenceService = {\r\n fetchOptions: async () => {\r\n throw new Error('API reference service not provided. Please provide an apiReference service in FormServices.');\r\n },\r\n};\r\n\r\n/**\r\n * Default date formatter service\r\n */\r\nexport const defaultDateFormatterService: DateFormatterService = {\r\n format: (value: any, options?: { datePickerMode?: 'date' | 'datetime' | 'time' }) => {\r\n if (!value) return '—';\r\n \r\n const mode = options?.datePickerMode || 'date';\r\n const date = dayjs(value);\r\n \r\n if (!date.isValid()) return String(value);\r\n \r\n switch (mode) {\r\n case 'date':\r\n return date.format('DD/MM/YYYY');\r\n case 'time':\r\n return date.format('hh:mm A');\r\n case 'datetime':\r\n return date.format('DD/MM/YYYY hh:mm A');\r\n default:\r\n return date.format('DD/MM/YYYY');\r\n }\r\n },\r\n};\r\n","/**\r\n * CKEditor Loader Utility\r\n * \r\n * This utility helps load CKEditor from the lib/ckeditor/ckeditor.js file\r\n * and provides a way to check if CKEditor is available.\r\n */\r\n\r\n/**\r\n * Load CKEditor script dynamically\r\n * @param scriptPath - Path to ckeditor.js file (default: '/lib/ckeditor/ckeditor.js')\r\n * @returns Promise that resolves when CKEditor is loaded\r\n */\r\nexport const loadCKEditor = (scriptPath: string = '/lib/ckeditor/ckeditor.js'): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n // Check if already loaded\r\n if (window.ClassicEditor) {\r\n resolve();\r\n return;\r\n }\r\n\r\n // Check if script is already being loaded\r\n const existingScript = document.querySelector(`script[src=\"${scriptPath}\"]`);\r\n if (existingScript) {\r\n // Wait for it to load\r\n existingScript.addEventListener('load', () => {\r\n if (window.ClassicEditor) {\r\n resolve();\r\n } else {\r\n reject(new Error('CKEditor script loaded but ClassicEditor not found on window'));\r\n }\r\n });\r\n existingScript.addEventListener('error', () => {\r\n reject(new Error('Failed to load CKEditor script'));\r\n });\r\n return;\r\n }\r\n\r\n // Create and load script\r\n const script = document.createElement('script');\r\n script.src = scriptPath;\r\n script.async = true;\r\n \r\n script.onload = () => {\r\n // Wait a bit for ClassicEditor to be available\r\n const checkInterval = setInterval(() => {\r\n if (window.ClassicEditor) {\r\n clearInterval(checkInterval);\r\n resolve();\r\n }\r\n }, 100);\r\n\r\n // Timeout after 10 seconds\r\n setTimeout(() => {\r\n clearInterval(checkInterval);\r\n if (!window.ClassicEditor) {\r\n reject(new Error('CKEditor script loaded but ClassicEditor not found on window after 10 seconds'));\r\n }\r\n }, 10000);\r\n };\r\n\r\n script.onerror = () => {\r\n reject(new Error(`Failed to load CKEditor from ${scriptPath}`));\r\n };\r\n\r\n document.head.appendChild(script);\r\n });\r\n};\r\n\r\n/**\r\n * Check if CKEditor is available\r\n * @returns true if ClassicEditor is available on window\r\n */\r\nexport const isCKEditorAvailable = (): boolean => {\r\n return typeof window !== 'undefined' && typeof window.ClassicEditor !== 'undefined';\r\n};\r\n\r\n/**\r\n * Wait for CKEditor to be available\r\n * @param timeout - Maximum time to wait in milliseconds (default: 10000)\r\n * @returns Promise that resolves when CKEditor is available\r\n */\r\nexport const waitForCKEditor = (timeout: number = 10000): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n if (isCKEditorAvailable()) {\r\n resolve();\r\n return;\r\n }\r\n\r\n const startTime = Date.now();\r\n const checkInterval = setInterval(() => {\r\n if (isCKEditorAvailable()) {\r\n clearInterval(checkInterval);\r\n resolve();\r\n } else if (Date.now() - startTime > timeout) {\r\n clearInterval(checkInterval);\r\n reject(new Error('CKEditor not available after timeout'));\r\n }\r\n }, 100);\r\n });\r\n};\r\n","import { useState, useEffect } from 'react';\r\nimport { isCKEditorAvailable, waitForCKEditor, loadCKEditor } from '../utils/ckeditorLoader';\r\n\r\ninterface UseCKEditorOptions {\r\n /**\r\n * Path to CKEditor script (default: '/lib/ckeditor/ckeditor.js')\r\n */\r\n scriptPath?: string;\r\n /**\r\n * Auto-load CKEditor if not available (default: true)\r\n */\r\n autoLoad?: boolean;\r\n /**\r\n * Timeout for waiting for CKEditor (default: 10000ms)\r\n */\r\n timeout?: number;\r\n}\r\n\r\ninterface UseCKEditorReturn {\r\n /**\r\n * Whether CKEditor is ready\r\n */\r\n isReady: boolean;\r\n /**\r\n * Loading state\r\n */\r\n isLoading: boolean;\r\n /**\r\n * Error if loading failed\r\n */\r\n error: Error | null;\r\n /**\r\n * Manually trigger loading\r\n */\r\n load: () => Promise<void>;\r\n}\r\n\r\n/**\r\n * React hook for loading and checking CKEditor availability\r\n * \r\n * @example\r\n * ```tsx\r\n * const { isReady, isLoading, error } = useCKEditor();\r\n * \r\n * if (!isReady) {\r\n * return <div>Loading CKEditor...</div>;\r\n * }\r\n * ```\r\n */\r\nexport const useCKEditor = (options: UseCKEditorOptions = {}): UseCKEditorReturn => {\r\n const {\r\n scriptPath = '/lib/ckeditor/ckeditor.js',\r\n autoLoad = true,\r\n timeout = 10000,\r\n } = options;\r\n\r\n const [isReady, setIsReady] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const load = async () => {\r\n if (isCKEditorAvailable()) {\r\n setIsReady(true);\r\n setIsLoading(false);\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n try {\r\n await loadCKEditor(scriptPath);\r\n setIsReady(true);\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error('Failed to load CKEditor');\r\n setError(error);\r\n setIsReady(false);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n // Check if already available\r\n if (isCKEditorAvailable()) {\r\n setIsReady(true);\r\n return;\r\n }\r\n\r\n // Auto-load if enabled\r\n if (autoLoad) {\r\n load();\r\n } else {\r\n // Just wait for it to become available\r\n waitForCKEditor(timeout)\r\n .then(() => setIsReady(true))\r\n .catch((err) => setError(err instanceof Error ? err : new Error('CKEditor not available')));\r\n }\r\n }, [scriptPath, autoLoad, timeout]);\r\n\r\n return {\r\n isReady,\r\n isLoading,\r\n error,\r\n load,\r\n };\r\n};\r\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { Box, FormHelperText, useTheme, alpha, FormLabel } from '@mui/material';\r\nimport { useFormColors } from '../../utils/useFormColors';\r\nimport { CKEditor } from '@ckeditor/ckeditor5-react';\r\nimport { FieldRendererProps } from './../../types';\r\nimport {\r\n defaultFileUploadService,\r\n} from '../../services/defaultServices';\r\nimport { useCKEditor } from '../../hooks/useCKEditor';\r\n\r\n// Declare ClassicEditor on window\r\ndeclare global {\r\n interface Window {\r\n ClassicEditor: any;\r\n }\r\n}\r\n\r\nexport const CKEditorField = ({ field, control, defaultValue, rules, errors, setValue, formSchema, services, colors }: FieldRendererProps) => {\r\n const theme = useTheme();\r\n const formColors = useFormColors(colors);\r\n const editorContainerRef = useRef<HTMLDivElement>(null);\r\n \r\n const fileUploadService = services?.fileUpload || defaultFileUploadService;\r\n const fileBaseUrl = services?.fileBaseUrl || '';\r\n const licenseKey = services?.ckEditorLicenseKey || '';\r\n const ckEditorScriptPath = services?.ckEditorScriptPath || '/lib/ckeditor/ckeditor.js';\r\n\r\n // Use CKEditor hook to load and check availability\r\n const { isReady: isCKEditorReady, isLoading: isCKEditorLoading, error: ckEditorError } = useCKEditor({\r\n scriptPath: ckEditorScriptPath,\r\n autoLoad: true,\r\n });\r\n\r\n // Custom upload adapter that uses fileUploadService\r\n const createCustomUploadAdapter = useCallback((loader: any) => {\r\n return {\r\n upload: async () => {\r\n if (!formSchema?.name) {\r\n throw new Error('Form schema name is required for image uploads');\r\n }\r\n\r\n try {\r\n const file = await loader.file;\r\n\r\n if (!file) {\r\n throw new Error('No file provided');\r\n }\r\n\r\n // Validate file type (images only)\r\n if (!file.type.startsWith('image/')) {\r\n throw new Error('Only image files are allowed');\r\n }\r\n\r\n const uploadedFiles = await fileUploadService.uploadFiles(\r\n formSchema.name,\r\n field.name,\r\n [file]\r\n );\r\n\r\n if (uploadedFiles && uploadedFiles.length > 0 && uploadedFiles[0].fileUrl) {\r\n const fileUrl = uploadedFiles[0].fileUrl;\r\n const isFullUrl = fileUrl.startsWith('http://') || fileUrl.startsWith('https://');\r\n const url = isFullUrl ? fileUrl : fileBaseUrl + fileUrl;\r\n return {\r\n default: url\r\n };\r\n }\r\n\r\n throw new Error('Upload failed: No file URL returned');\r\n } catch (error: any) {\r\n console.error('Upload error:', error);\r\n const errorMessage = error.response?.data?.message || error.message || 'Upload failed';\r\n throw new Error(errorMessage);\r\n }\r\n },\r\n abort: () => {\r\n console.log('Upload aborted');\r\n }\r\n };\r\n }, [formSchema?.name, field.name, fileUploadService, fileBaseUrl]);\r\n\r\n // Show loading or error state\r\n if (isCKEditorLoading) {\r\n return (\r\n <Box>\r\n <FormLabel required={field.required} error={!!errors[field.name]}>\r\n {field.label}\r\n </FormLabel>\r\n <Box sx={{ p: 2, textAlign: 'center', color: formColors.textSecondary }}>\r\n Loading editor...\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n if (ckEditorError || !isCKEditorReady) {\r\n return (\r\n <Box>\r\n <FormLabel required={field.required} error={!!errors[field.name]}>\r\n {field.label}\r\n </FormLabel>\r\n <Box sx={{ p: 2, border: '1px solid', borderColor: formColors.error, borderRadius: 1 }}>\r\n <FormHelperText error>\r\n {ckEditorError?.message || 'CKEditor failed to load. Please ensure the CKEditor script is loaded.'}\r\n </FormHelperText>\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue || ''}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <Box>\r\n <FormLabel\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n >\r\n {field.label}\r\n </FormLabel>\r\n <Box\r\n ref={editorContainerRef}\r\n sx={{\r\n '& .ck-editor': {\r\n borderRadius: '4px',\r\n '& .ck-toolbar': {\r\n width: '100%',\r\n maxWidth: '100%',\r\n overflow: 'visible',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n '& .ck-toolbar__items': {\r\n display: 'flex',\r\n flexWrap: 'wrap !important',\r\n width: '100%',\r\n maxWidth: '100%',\r\n '& > *': {\r\n flexShrink: 0,\r\n },\r\n },\r\n },\r\n '& .ck-editor__editable': {\r\n minHeight: '100px'\r\n },\r\n '&:hover': {\r\n borderColor: errors[field.name]\r\n ? formColors.error\r\n : theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.87)' : formColors.primary\r\n },\r\n '& .ck-focused': {\r\n border: errors[field.name]\r\n ? `1px solid ${formColors.error} !important`\r\n : `1px solid ${theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.23)' : formColors.primary} !important`,\r\n boxShadow: errors[field.name]\r\n ? `0 0 0 1px ${formColors.error}`\r\n : `0 0 0 1px ${alpha(formColors.primary, 0.5)} !important`\r\n }\r\n }\r\n }}\r\n >\r\n {window.ClassicEditor && isCKEditorReady && (\r\n <CKEditor\r\n editor={window.ClassicEditor}\r\n config={{\r\n licenseKey: licenseKey,\r\n initialData: formField.value || '',\r\n } as any}\r\n data={formField.value || ''}\r\n onReady={(editor) => {\r\n // Set up custom upload adapter via FileRepository\r\n if (formSchema?.name) {\r\n try {\r\n const fileRepository = editor.plugins.get('FileRepository');\r\n if (fileRepository) {\r\n fileRepository.createUploadAdapter = (loader: any) => {\r\n return createCustomUploadAdapter(loader);\r\n };\r\n } else {\r\n console.warn('FileRepository plugin not found');\r\n }\r\n } catch (error) {\r\n console.error('Error setting up upload adapter:', error);\r\n }\r\n } else {\r\n console.warn('Form schema name not available, upload adapter not set');\r\n }\r\n\r\n // Set initial value if provided\r\n if (defaultValue && !formField.value) {\r\n editor.setData(defaultValue);\r\n setValue?.(field.name, defaultValue);\r\n }\r\n }}\r\n onChange={(_event, editor) => {\r\n const data = editor.getData();\r\n formField.onChange(data);\r\n }}\r\n onBlur={() => {\r\n formField.onBlur();\r\n }}\r\n />\r\n )}\r\n </Box>\r\n {errors[field.name] && (\r\n <FormHelperText error sx={{ mt: 0.5, mx: 0 }}>\r\n {errors[field.name]?.message as string}\r\n </FormHelperText>\r\n )}\r\n </Box>\r\n )}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport {\r\n Box,\r\n Typography,\r\n IconButton,\r\n CircularProgress,\r\n Tooltip,\r\n FormLabel,\r\n useTheme,\r\n useMediaQuery,\r\n} from '@mui/material';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\r\nimport InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';\r\nimport { FieldRendererProps, UploadedFile } from '../../types';\r\nimport { validateFile, formatFileSize } from '../../utils/fieldHelpers';\r\nimport { useFormColors } from '../../utils/useFormColors';\r\nimport {\r\n defaultFileUploadService,\r\n} from '../../services/defaultServices';\r\n\r\ninterface FileFieldProps extends FieldRendererProps {\r\n uploadingFiles?: Record<string, boolean>;\r\n setUploadingFiles?: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;\r\n setError?: (name: string, error: { type: string; message: string }) => void;\r\n clearErrors?: (name?: string) => void;\r\n}\r\n\r\nexport const FileField = ({\r\n field,\r\n control,\r\n defaultValue,\r\n rules,\r\n errors,\r\n formSchema,\r\n uploadingFiles = {},\r\n setUploadingFiles,\r\n setError,\r\n clearErrors,\r\n services,\r\n colors,\r\n}: FileFieldProps) => {\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\r\n const formColors = useFormColors(colors);\r\n const acceptTypes = field.validation?.allowedFileTypes\r\n ? field.validation.allowedFileTypes.map((type: string) => `.${type.replace('.', '')}`).join(',')\r\n : undefined;\r\n const isMultiple = field.allowMultiple || false;\r\n\r\n const fileUploadService = services?.fileUpload || defaultFileUploadService;\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => {\r\n const isUploading = uploadingFiles[field.name] || false;\r\n let files: (File | UploadedFile)[] = [];\r\n\r\n if (isMultiple) {\r\n files = Array.isArray(formField.value) ? formField.value : [];\r\n } else {\r\n files = formField.value ? [formField.value] : [];\r\n }\r\n\r\n const hasFiles = files.length > 0;\r\n\r\n return (\r\n <Box>\r\n <FormLabel\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n >\r\n {field.label}\r\n </FormLabel>\r\n <Box\r\n component=\"label\"\r\n htmlFor={`file-input-${field.name}`}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n border: '1px dashed',\r\n borderColor: errors[field.name] ? formColors.error : (isUploading ? formColors.primary : hasFiles ? formColors.primary : formColors.divider),\r\n p: 1,\r\n cursor: isUploading ? 'wait' : 'pointer',\r\n transition: 'all 0.2s ease-in-out',\r\n backgroundColor: (isUploading || hasFiles) ? 'action.hover' : formColors.backgroundPaper,\r\n opacity: isUploading ? 0.7 : 1,\r\n pointerEvents: isUploading ? 'none' : 'auto',\r\n '&:hover': {\r\n borderColor: isUploading ? formColors.primary : formColors.primary,\r\n backgroundColor: 'action.hover',\r\n },\r\n }}\r\n >\r\n <input\r\n id={`file-input-${field.name}`}\r\n type=\"file\"\r\n hidden\r\n multiple={isMultiple}\r\n accept={acceptTypes}\r\n onChange={async (e) => {\r\n const fileList = e.target.files;\r\n if (!fileList || fileList.length === 0) return;\r\n\r\n const newFiles = Array.from(fileList);\r\n const isUploading = uploadingFiles[field.name] || false;\r\n\r\n if (isUploading) {\r\n e.target.value = '';\r\n return;\r\n }\r\n\r\n for (const file of newFiles) {\r\n const validationResult = validateFile(file, field);\r\n if (validationResult !== true) {\r\n setError?.(field.name, {\r\n type: 'manual',\r\n message: validationResult as string,\r\n });\r\n e.target.value = '';\r\n return;\r\n }\r\n }\r\n\r\n try {\r\n setUploadingFiles?.((prev) => ({ ...prev, [field.name]: true }));\r\n clearErrors?.(field.name);\r\n\r\n if (!formSchema?.name) {\r\n throw new Error('Form schema name is required for file uploads');\r\n }\r\n\r\n const uploadedFiles = await fileUploadService.uploadFiles(\r\n formSchema.name,\r\n field.name,\r\n newFiles\r\n );\r\n\r\n if (isMultiple) {\r\n const currentValue = formField.value;\r\n const existingFiles = Array.isArray(currentValue)\r\n ? currentValue.filter((item: any) => item && typeof item === 'object' && 'fileName' in item)\r\n : [];\r\n const allUploadedFiles = [...existingFiles, ...uploadedFiles];\r\n formField.onChange(allUploadedFiles);\r\n } else {\r\n formField.onChange(uploadedFiles[0] || null);\r\n }\r\n } catch (error: any) {\r\n console.error(`Failed to upload files for field ${field.name}:`, error);\r\n const errorMessage = error.response?.data?.message || error.message || 'Failed to upload files';\r\n setError?.(field.name, {\r\n type: 'manual',\r\n message: `Failed to upload files: ${errorMessage}`,\r\n });\r\n } finally {\r\n setUploadingFiles?.((prev) => ({ ...prev, [field.name]: false }));\r\n e.target.value = '';\r\n }\r\n }}\r\n disabled={uploadingFiles[field.name] || false}\r\n />\r\n {isUploading ? (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 1, py: 3, width: '100%' }}>\r\n <CircularProgress size={40} />\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500, color: formColors.primary }}>\r\n Uploading files...\r\n </Typography>\r\n <Typography variant=\"caption\" sx={{ color: formColors.textSecondary }}>\r\n Please wait while files are being uploaded\r\n </Typography>\r\n </Box>\r\n ) : !hasFiles ? (\r\n <>\r\n <CloudUploadIcon sx={{ fontSize: 40, color: formColors.textSecondary, mb: 1 }} />\r\n <Typography variant=\"caption\" sx={{ color: formColors.textSecondary }}>\r\n Click to upload or drag and drop\r\n {isMultiple && ' (multiple files allowed)'}\r\n </Typography>\r\n {field.validation?.allowedFileTypes && field.validation.allowedFileTypes.length > 0 && (\r\n <Typography variant=\"caption\" sx={{ mt: 0.5, color: formColors.textSecondary }}>\r\n Allowed: {field.validation.allowedFileTypes.join(', ')}\r\n </Typography>\r\n )}\r\n {field.validation?.maxFileSize && (\r\n <Typography variant=\"caption\" sx={{ mt: 0.5, color: formColors.textSecondary }}>\r\n Max size: {formatFileSize(field.validation.maxFileSize)} per file\r\n </Typography>\r\n )}\r\n </>\r\n ) : (\r\n <Box sx={{ width: '100%' }}>\r\n {isMultiple && (\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500, mb: 1.5 }}>\r\n {files.length} file{files.length !== 1 ? 's' : ''} uploaded\r\n </Typography>\r\n )}\r\n {files.length === 1 && !isMultiple ? (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, width: '100%' }}>\r\n <InsertDriveFileIcon sx={{ fontSize: 40, color: formColors.primary }} />\r\n <Box sx={{ flexGrow: 1, minWidth: 0 }}>\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500, overflow: 'hidden', textOverflow: 'ellipsis', maxWidth: isMobile ? '200px' : '300px' }}>\r\n {files[0] instanceof File\r\n ? files[0].name\r\n : ((files[0] as UploadedFile).originalName || (files[0] as UploadedFile).fileName)}\r\n </Typography>\r\n <Typography variant=\"caption\" sx={{ color: formColors.textSecondary }}>\r\n {formatFileSize((files[0] as any).size || 0)}\r\n </Typography>\r\n </Box>\r\n <Tooltip title=\"Remove file\" placement=\"bottom\" arrow>\r\n <IconButton\r\n size=\"small\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n formField.onChange(null);\r\n const fileInput = document.getElementById(`file-input-${field.name}`) as HTMLInputElement;\r\n if (fileInput) {\r\n fileInput.value = '';\r\n }\r\n }}\r\n sx={{ color: formColors.error }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n ) : (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1, width: '100%' }}>\r\n {files.map((file, index) => {\r\n const fileName = file instanceof File\r\n ? file.name\r\n : ((file as UploadedFile).originalName || (file as UploadedFile).fileName);\r\n return (\r\n <Box\r\n key={`${fileName}-${index}`}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 1.5,\r\n p: 1,\r\n borderRadius: 1,\r\n backgroundColor: formColors.background,\r\n border: '1px solid',\r\n borderColor: formColors.divider,\r\n }}\r\n >\r\n <InsertDriveFileIcon sx={{ fontSize: 32, color: formColors.primary }} />\r\n <Box sx={{ flexGrow: 1, minWidth: 0 }}>\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500, overflow: 'hidden', textOverflow: 'ellipsis' }}>\r\n {fileName}\r\n </Typography>\r\n <Typography variant=\"caption\" sx={{ color: formColors.textSecondary }}>\r\n {formatFileSize((file as any).size || 0)}\r\n </Typography>\r\n </Box>\r\n <Tooltip title=\"Remove file\" placement=\"bottom\" arrow>\r\n <IconButton\r\n size=\"small\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (isMultiple) {\r\n const updatedFiles = files.filter((_, i) => i !== index);\r\n formField.onChange(updatedFiles.length > 0 ? updatedFiles : []);\r\n } else {\r\n formField.onChange(null);\r\n }\r\n }}\r\n sx={{ color: formColors.error }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n {errors[field.name] && (\r\n <Typography variant=\"caption\" sx={{ mt: 1, display: 'block', color: formColors.error }}>\r\n {errors[field.name]?.message as string}\r\n </Typography>\r\n )}\r\n </Box>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FieldRendererProps, OptionItem } from '../../types';\r\nimport { getDefaultValue } from '../../utils/formHelpers';\r\nimport { buildFieldRules } from '../../utils/fieldHelpers';\r\nimport { SimpleSelect, SimpleSelectOption } from '../common/SimpleSelect';\r\nimport {\r\n defaultFormReferenceService,\r\n defaultApiReferenceService,\r\n} from '../../services/defaultServices';\r\n\r\nexport const FormReferenceField = ({ field, control, defaultValue, rules, errors, services }: FieldRendererProps) => {\r\n const isMultiple = field.allowMultiple || false;\r\n const [options, setOptions] = useState<OptionItem[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const formReferenceService = services?.formReference || defaultFormReferenceService;\r\n\r\n useEffect(() => {\r\n if (!field.referenceFormName || !field.referenceFieldName) return;\r\n\r\n setIsLoading(true);\r\n formReferenceService\r\n .fetchOptions(field.referenceFormName, field.referenceFieldName)\r\n .then((opts: OptionItem[]) => {\r\n setOptions(opts);\r\n })\r\n .catch((error: any) => {\r\n console.error('Failed to fetch form reference options:', error);\r\n setOptions([]);\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }, [field.referenceFormName, field.referenceFieldName, formReferenceService]);\r\n\r\n // Convert OptionItem[] to SimpleSelectOption[]\r\n const selectOptions: SimpleSelectOption[] = useMemo(() => {\r\n return options.map((opt: OptionItem) => ({\r\n value: String(opt.value),\r\n label: opt.label,\r\n }));\r\n }, [options]);\r\n\r\n const fieldDefaultValue = defaultValue ?? getDefaultValue(field);\r\n const fieldRules = rules ?? buildFieldRules(field);\r\n const isDisabled = !field.referenceFormName || !field.referenceFieldName;\r\n\r\n // Use custom SelectComponent if provided, otherwise use SimpleSelect\r\n const SelectComponent = services?.SelectComponent || SimpleSelect;\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={fieldDefaultValue}\r\n rules={fieldRules}\r\n render={({ field: formField }) => {\r\n return (\r\n <SelectComponent\r\n label={field.label}\r\n value={formField.value}\r\n onChange={(value: string | string[] | null) => {\r\n formField.onChange(value);\r\n }}\r\n options={selectOptions}\r\n placeholder={field.placeholder || 'Search and select...'}\r\n helperText={errors[field.name]?.message as string}\r\n fullWidth={true}\r\n size=\"small\"\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n disabled={isDisabled || isLoading}\r\n multiple={isMultiple}\r\n isLoading={isLoading}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport const ApiReferenceField = ({ field, control, defaultValue, rules, errors, services }: FieldRendererProps) => {\r\n const isMultiple = field.allowMultiple || false;\r\n const [options, setOptions] = useState<OptionItem[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const apiReferenceService = services?.apiReference || defaultApiReferenceService;\r\n\r\n useEffect(() => {\r\n if (!field.apiEndpoint || !field.apiLabelField) return;\r\n\r\n setIsLoading(true);\r\n apiReferenceService\r\n .fetchOptions(field.apiEndpoint, field.apiLabelField, field.apiValueField || '_id')\r\n .then((opts: OptionItem[]) => {\r\n setOptions(opts);\r\n })\r\n .catch((error: any) => {\r\n console.error('Failed to fetch API reference options:', error);\r\n setOptions([]);\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }, [field.apiEndpoint, field.apiLabelField, field.apiValueField, apiReferenceService]);\r\n\r\n // Convert OptionItem[] to SimpleSelectOption[]\r\n const selectOptions: SimpleSelectOption[] = useMemo(() => {\r\n return options.map((opt: OptionItem) => ({\r\n value: String(opt.value),\r\n label: opt.label,\r\n }));\r\n }, [options]);\r\n\r\n const fieldDefaultValue = defaultValue ?? getDefaultValue(field);\r\n const fieldRules = rules ?? buildFieldRules(field);\r\n const isDisabled = !field.apiEndpoint || !field.apiLabelField;\r\n\r\n // Use custom SelectComponent if provided, otherwise use SimpleSelect\r\n const SelectComponent = services?.SelectComponent || SimpleSelect;\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={fieldDefaultValue}\r\n rules={fieldRules}\r\n render={({ field: formField }) => {\r\n return (\r\n <SelectComponent\r\n label={field.label}\r\n value={formField.value}\r\n onChange={(value: string | string[] | null) => {\r\n formField.onChange(value);\r\n }}\r\n options={selectOptions}\r\n placeholder={field.placeholder || 'Search and select...'}\r\n helperText={errors[field.name]?.message as string}\r\n fullWidth={true}\r\n size=\"small\"\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n disabled={isDisabled || isLoading}\r\n multiple={isMultiple}\r\n isLoading={isLoading}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\r\nimport { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';\r\nimport { TimePicker } from '@mui/x-date-pickers/TimePicker';\r\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\r\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { FieldRendererProps } from '../../types';\r\nimport { FormLabel } from '@mui/material';\r\n\r\nconst textFieldSlotProps = (field: FieldRendererProps['field'], errors: FieldRendererProps['errors']) => ({\r\n fullWidth: true,\r\n size: 'small' as const,\r\n required: field.required,\r\n error: !!errors[field.name],\r\n helperText: errors[field.name]?.message as string,\r\n});\r\n\r\nfunction resolveDatePickerMode(field: FieldRendererProps['field']): 'date' | 'datetime' | 'time' {\r\n if (field.datePickerMode) return field.datePickerMode;\r\n return field?.displayTime ? 'datetime' : 'date';\r\n}\r\n\r\nexport const DateTimePickerField = ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => {\r\n const mode = resolveDatePickerMode(field);\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <>\r\n <FormLabel\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n >\r\n {field.label}\r\n </FormLabel>\r\n <LocalizationProvider dateAdapter={AdapterDayjs}>\r\n {mode === 'date' && (\r\n <DatePicker\r\n format=\"DD-MM-YYYY\"\r\n value={formField.value ? dayjs(formField.value) : null}\r\n onChange={(date: Dayjs | null) => formField.onChange(date?.toISOString() ?? null)}\r\n slotProps={{ textField: textFieldSlotProps(field, errors) }}\r\n />\r\n )}\r\n {mode === 'datetime' && (\r\n <DateTimePicker\r\n format=\"DD-MM-YYYY hh:mm A\"\r\n value={formField.value ? dayjs(formField.value) : null}\r\n onChange={(date: Dayjs | null) => formField.onChange(date?.toISOString() ?? null)}\r\n slotProps={{ textField: textFieldSlotProps(field, errors) }}\r\n />\r\n )}\r\n {mode === 'time' && (\r\n <TimePicker\r\n format=\"hh:mm A\"\r\n value={formField.value ? dayjs(formField.value) : null}\r\n onChange={(date: Dayjs | null) => formField.onChange(date?.toISOString() ?? null)}\r\n slotProps={{ textField: textFieldSlotProps(field, errors) }}\r\n />\r\n )}\r\n </LocalizationProvider>\r\n </>\r\n )}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { FieldRendererProps } from '../types';\r\nimport { TextField } from './fields/TextField';\r\nimport { SelectField } from './fields/SelectField';\r\nimport { CheckboxField } from './fields/CheckboxField';\r\nimport { RadioField } from './fields/RadioField';\r\nimport { ToggleField } from './fields/ToggleField';\r\nimport { ColorField } from './fields/ColorField';\r\nimport { CKEditorField } from './fields/CKEditorField';\r\nimport { FileField } from './fields/FileField';\r\nimport { FormReferenceField, ApiReferenceField } from './fields/ReferenceFields';\r\nimport { buildFieldRules } from '../utils/fieldHelpers';\r\nimport { getDefaultValue } from '../utils/formHelpers';\r\nimport { DateTimePickerField } from './fields/DatePickerField';\r\n\r\ninterface FieldRendererComponentProps extends Omit<FieldRendererProps, 'defaultValue' | 'rules'> {\r\n formSchema: any;\r\n uploadingFiles: Record<string, boolean>;\r\n setUploadingFiles: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;\r\n setError: (name: string, error: { type: string; message: string }) => void;\r\n clearErrors: (name?: string) => void;\r\n}\r\n\r\nexport const FieldRenderer = (props: FieldRendererComponentProps) => {\r\n const { field, formSchema, uploadingFiles, setUploadingFiles, setError, clearErrors, services } = props;\r\n const rules = buildFieldRules(field);\r\n const defaultValue = getDefaultValue(field);\r\n\r\n const commonProps: FieldRendererProps = {\r\n field,\r\n control: props.control,\r\n defaultValue,\r\n rules,\r\n errors: props.errors,\r\n setValue: props.setValue,\r\n formSchema,\r\n services,\r\n colors: props.colors,\r\n };\r\n\r\n switch (field.type) {\r\n case 'text':\r\n case 'email':\r\n case 'number':\r\n return <TextField {...commonProps} />;\r\n\r\n case 'select':\r\n return <SelectField {...commonProps} services={services} />;\r\n\r\n case 'checkbox':\r\n return <CheckboxField {...commonProps} />;\r\n\r\n case 'radio':\r\n return <RadioField {...commonProps} />;\r\n\r\n case 'datepicker':\r\n return <DateTimePickerField {...commonProps} />;\r\n\r\n case 'toggle':\r\n return <ToggleField {...commonProps} />;\r\n\r\n case 'color':\r\n return <ColorField {...commonProps} />;\r\n\r\n case 'ckeditor':\r\n return <CKEditorField {...commonProps} formSchema={formSchema} setValue={props.setValue} />;\r\n\r\n case 'file':\r\n return (\r\n <FileField\r\n {...commonProps}\r\n uploadingFiles={uploadingFiles}\r\n setUploadingFiles={setUploadingFiles}\r\n setError={setError}\r\n clearErrors={clearErrors}\r\n />\r\n );\r\n\r\n case 'formReference':\r\n return <FormReferenceField {...commonProps} services={services} />;\r\n\r\n case 'apiReference':\r\n return <ApiReferenceField {...commonProps} services={services} />;\r\n\r\n default:\r\n return null;\r\n }\r\n};\r\n","import React from 'react';\r\nimport { Box, Typography } from '@mui/material';\r\nimport { FormField, OptionItem, FormServices } from '../../types';\r\nimport { normalizeOptions } from '../../utils/fieldHelpers';\r\nimport { defaultDateFormatterService } from '../../services/defaultServices';\r\n\r\ninterface FieldViewProps {\r\n field: FormField;\r\n value: any;\r\n services?: FormServices;\r\n}\r\n\r\nexport const FieldView = ({ field, value, services }: FieldViewProps) => {\r\n const dateFormatter = services?.dateFormatter || defaultDateFormatterService;\r\n const FileDisplayComponent = services?.FileDisplayComponent;\r\n const CKEditorDisplayComponent = services?.CKEditorDisplayComponent;\r\n\r\n // Format field value\r\n const formattedValue = formatFieldValue(field, value, dateFormatter, services);\r\n\r\n // Special handling for file fields\r\n if (field.type === 'file') {\r\n if (FileDisplayComponent) {\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 0.5,\r\n py: 1.5,\r\n px: 1,\r\n borderColor: 'divider',\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\r\n {field.label}\r\n </Typography>\r\n <FileDisplayComponent fieldValue={value} />\r\n </Box>\r\n );\r\n }\r\n // Fallback if no FileDisplayComponent provided\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 0.5,\r\n py: 1.5,\r\n px: 1,\r\n borderColor: 'divider',\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\r\n {field.label}\r\n </Typography>\r\n <Typography variant=\"body1\" sx={{ color: 'text.secondary' }}>\r\n {value ? (Array.isArray(value) ? `${value.length} file(s)` : '1 file') : '—'}\r\n </Typography>\r\n </Box>\r\n );\r\n }\r\n\r\n // Special handling for CKEditor fields\r\n if (field.type === 'ckeditor') {\r\n if (CKEditorDisplayComponent) {\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 0.5,\r\n py: 1.5,\r\n px: 1,\r\n borderColor: 'divider',\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\r\n {field.label}\r\n </Typography>\r\n <CKEditorDisplayComponent\r\n content={value || ''}\r\n maxLength={150}\r\n showViewButton={true}\r\n />\r\n </Box>\r\n );\r\n }\r\n // Fallback if no CKEditorDisplayComponent provided\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 0.5,\r\n py: 1.5,\r\n px: 1,\r\n borderColor: 'divider',\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\r\n {field.label}\r\n </Typography>\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n color: formattedValue === '—' ? 'text.disabled' : 'text.primary',\r\n fontStyle: formattedValue === '—' ? 'italic' : 'normal',\r\n }}\r\n dangerouslySetInnerHTML={{ __html: value || '' }}\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 0.5,\r\n py: 1.5,\r\n px: 1,\r\n borderColor: 'divider',\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\r\n {field.label}\r\n </Typography>\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n color: formattedValue === '—' ? 'text.disabled' : 'text.primary',\r\n fontStyle: formattedValue === '—' ? 'italic' : 'normal',\r\n fontWeight: 400,\r\n fontSize: '0.875rem',\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n {formattedValue}\r\n </Typography>\r\n </Box>\r\n );\r\n};\r\n\r\nconst formatFieldValue = (\r\n field: FormField,\r\n value: any,\r\n dateFormatter: FormServices['dateFormatter'],\r\n services?: FormServices\r\n): string => {\r\n if (value === null || value === undefined || value === '') {\r\n return '—';\r\n }\r\n\r\n switch (field.type) {\r\n case 'checkbox':\r\n case 'toggle':\r\n return value ? 'Yes' : 'No';\r\n\r\n case 'datepicker':\r\n return dateFormatter?.format(value, { datePickerMode: field.datePickerMode }) || String(value);\r\n\r\n case 'select':\r\n case 'formReference':\r\n case 'apiReference':\r\n let values: any[];\r\n if (field.allowMultiple) {\r\n values = Array.isArray(value) ? value : (value ? [value] : []);\r\n } else {\r\n if (Array.isArray(value)) {\r\n values = value.length > 0 ? [value[0]] : [];\r\n } else {\r\n values = value ? [value] : [];\r\n }\r\n }\r\n\r\n if (values.length === 0) {\r\n return '—';\r\n }\r\n\r\n const getLabelForValue = (val: any): string => {\r\n if (field.options) {\r\n const normalizedOptions = normalizeOptions(field.options);\r\n const option = normalizedOptions.find((opt) => {\r\n return opt.value === val || String(opt.value) === String(val);\r\n });\r\n if (option) {\r\n return option.label;\r\n }\r\n }\r\n // For reference fields, we can't resolve labels in view mode without services\r\n // This would require query client access which we don't have in view mode\r\n // Users should provide a custom FieldView component if they need this\r\n return String(val);\r\n };\r\n\r\n if (values.length > 1 || field.allowMultiple) {\r\n const labels = values.map(val => getLabelForValue(val));\r\n return labels.join(', ');\r\n }\r\n\r\n return getLabelForValue(values[0]);\r\n\r\n case 'radio':\r\n if (field.options) {\r\n const normalizedOptions = normalizeOptions(field.options);\r\n const option = normalizedOptions.find((opt) => {\r\n return opt.value === value;\r\n });\r\n if (option) {\r\n return option.label;\r\n }\r\n }\r\n return String(value);\r\n\r\n default:\r\n return String(value);\r\n }\r\n};\r\n","import React from 'react';\r\nimport { Box, Typography, Accordion, AccordionSummary, AccordionDetails, useTheme, useMediaQuery } from '@mui/material';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport DoubleArrowOutlinedIcon from '@mui/icons-material/DoubleArrowOutlined';\r\nimport { FormSchema, FormServices, FormColors } from '../../types';\r\nimport { useFormColors } from '../../utils/useFormColors';\r\nimport { FieldView } from './FieldView';\r\nimport { getAllFields } from '../../utils/formHelpers';\r\n\r\ninterface FormViewModeProps {\r\n formSchema: FormSchema;\r\n initialValues?: Record<string, any>;\r\n hideTitle?: boolean;\r\n services?: FormServices;\r\n colors?: FormColors;\r\n}\r\n\r\nexport const FormViewMode = ({ formSchema, initialValues, hideTitle = false, services, colors }: FormViewModeProps) => {\r\n const fieldsToRender = getAllFields(formSchema);\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\r\n const formColors = useFormColors(colors);\r\n \r\n return (\r\n <Box sx={{ maxWidth: 600, mx: 'auto', width: '100%' }}>\r\n {!hideTitle && (\r\n <Typography variant=\"h6\" gutterBottom sx={{ mb: 2, fontWeight: 600 }}>\r\n {formSchema.title}\r\n </Typography>\r\n )}\r\n\r\n {formSchema.sections && formSchema.sections.length > 0 ? (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\r\n {formSchema.sections.map((section, sectionIndex) => (\r\n <Accordion key={section.id} defaultExpanded={sectionIndex === 0}>\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls={`panel-${section.id}-content`}\r\n id={`panel-${section.id}-header`}\r\n >\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <DoubleArrowOutlinedIcon fontSize=\"small\" sx={{ color: formColors.primary }} />\r\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 600, color: formColors.primary }}>\r\n {section.title}\r\n </Typography>\r\n </Box>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n {section.description && (\r\n <Typography variant=\"caption\" sx={{ mb: 1.5, display: 'block', color: formColors.textSecondary }}>\r\n {section.description}\r\n </Typography>\r\n )}\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n gridTemplateColumns: isMobile ? 'repeat(1, 1fr)' : 'repeat(2, 1fr)',\r\n gap: 1,\r\n }}\r\n >\r\n {section.fields.map((field) => (\r\n <FieldView key={field.name} field={field} value={initialValues?.[field.name]} services={services} />\r\n ))}\r\n </Box>\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n ) : (\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(2, 1fr)',\r\n gap: 1,\r\n }}\r\n >\r\n {fieldsToRender.map((field) => (\r\n <FieldView key={field.name} field={field} value={initialValues?.[field.name]} services={services} />\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import React, { useEffect, useRef, useState, useMemo } from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport {\r\n Button,\r\n Box,\r\n Typography,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Stack,\r\n Alert,\r\n Stepper,\r\n Step,\r\n StepLabel,\r\n} from '@mui/material';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport DoubleArrowOutlinedIcon from '@mui/icons-material/DoubleArrowOutlined';\r\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport { FormRendererProps } from '../types';\r\nimport { normalizeInitialValues, transformFormValues, getAllFields } from '../utils/formHelpers';\r\nimport { useFormColors } from '../utils/useFormColors';\r\nimport { FieldRenderer } from './FieldRenderer';\r\nimport { FormViewMode } from './view/FormViewMode';\r\nimport {\r\n defaultFormReferenceService,\r\n defaultApiReferenceService,\r\n} from '../services/defaultServices';\r\n\r\nexport const FormRenderer = ({\r\n formSchema,\r\n onSubmit,\r\n onCancel,\r\n isLoading = false,\r\n onSuccess,\r\n initialValues,\r\n hideTitle = false,\r\n allowResetOnValuesChange = false,\r\n mode = 'edit',\r\n services,\r\n colors,\r\n}: FormRendererProps) => {\r\n const formColors = useFormColors(colors);\r\n const {\r\n control,\r\n handleSubmit,\r\n reset,\r\n clearErrors,\r\n setValue,\r\n setError,\r\n formState: { errors },\r\n } = useForm<Record<string, any>>({\r\n defaultValues: initialValues || {},\r\n });\r\n\r\n const [submitError, setSubmitError] = useState<string | null>(null);\r\n const prevInitialValuesRef = useRef<Record<string, any> | undefined>(initialValues);\r\n const isFormInitializedRef = useRef<boolean>(false);\r\n const [uploadingFiles, setUploadingFiles] = useState<Record<string, boolean>>({});\r\n const [activeStep, setActiveStep] = useState(0);\r\n\r\n // Reset active step when form schema changes\r\n useEffect(() => {\r\n setActiveStep(0);\r\n }, [formSchema]);\r\n\r\n // Update form when initialValues change (for edit mode)\r\n useEffect(() => {\r\n const wasUndefined = prevInitialValuesRef.current === undefined;\r\n const isNowDefined = initialValues !== undefined;\r\n\r\n if (initialValues) {\r\n const normalizedValues = normalizeInitialValues(initialValues, formSchema);\r\n\r\n if (allowResetOnValuesChange) {\r\n const prevValues = prevInitialValuesRef.current;\r\n const valuesChanged = !prevValues || JSON.stringify(prevValues) !== JSON.stringify(normalizedValues);\r\n if (valuesChanged) {\r\n reset(normalizedValues);\r\n setSubmitError(null);\r\n isFormInitializedRef.current = true;\r\n }\r\n } else if (wasUndefined && isNowDefined) {\r\n reset(normalizedValues);\r\n setSubmitError(null);\r\n isFormInitializedRef.current = true;\r\n }\r\n } else if (initialValues === undefined && prevInitialValuesRef.current !== undefined) {\r\n setSubmitError(null);\r\n isFormInitializedRef.current = false;\r\n }\r\n\r\n prevInitialValuesRef.current = initialValues;\r\n }, [initialValues, reset, allowResetOnValuesChange, formSchema]);\r\n\r\n // Get all fields to render - memoized to prevent unnecessary recalculations\r\n const fieldsToRender = useMemo(() => getAllFields(formSchema), [formSchema]);\r\n\r\n // Memoize reference fields to prevent unnecessary filtering\r\n const formReferenceFields = useMemo(() => {\r\n return fieldsToRender.filter(\r\n (field) => field.type === 'formReference' && field.referenceFormName && field.referenceFieldName\r\n );\r\n }, [fieldsToRender]);\r\n\r\n const apiReferenceFields = useMemo(() => {\r\n return fieldsToRender.filter(\r\n (field) => field.type === 'apiReference' && field.apiEndpoint && field.apiLabelField\r\n );\r\n }, [fieldsToRender]);\r\n\r\n const handleFormSubmit = async (data: Record<string, any>) => {\r\n setSubmitError(null);\r\n const transformedData = transformFormValues(data, formSchema);\r\n\r\n if (onSubmit) {\r\n try {\r\n await onSubmit(transformedData);\r\n if (onSuccess) {\r\n reset(initialValues || {});\r\n onSuccess();\r\n }\r\n } catch (error: any) {\r\n console.error('Form submission error:', error);\r\n let errorMessage = 'Form submission failed. Please try again.';\r\n\r\n if (error?.response?.data) {\r\n const errorData = error.response.data;\r\n errorMessage =\r\n errorData.message ||\r\n errorData.error ||\r\n errorData.errors?.message ||\r\n (Array.isArray(errorData.errors) ? errorData.errors.join(', ') : null) ||\r\n errorData.msg ||\r\n errorMessage;\r\n } else if (error?.message) {\r\n errorMessage = error.message;\r\n }\r\n\r\n setSubmitError(errorMessage);\r\n }\r\n } else {\r\n console.log('Form Data:', transformedData);\r\n }\r\n };\r\n\r\n // If view mode, render view component\r\n if (mode === 'view') {\r\n return <FormViewMode formSchema={formSchema} initialValues={initialValues} hideTitle={hideTitle} services={services} colors={colors} />;\r\n }\r\n\r\n // Edit mode - render form fields\r\n return (\r\n <Box component=\"form\" onSubmit={handleSubmit(handleFormSubmit)} sx={{ mx: 'auto', width: '100%' }}>\r\n {!hideTitle && (\r\n <Typography variant=\"h6\" gutterBottom sx={{ mb: 2, fontWeight: 600 }}>\r\n {formSchema.title}\r\n </Typography>\r\n )}\r\n\r\n {submitError && (\r\n <Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setSubmitError(null)}>\r\n {submitError}\r\n </Alert>\r\n )}\r\n\r\n {formSchema.sections && formSchema.sections.length > 0 ? (() => {\r\n const sectionDisplayMode = formSchema.settings?.sectionDisplayMode || 'panel';\r\n const fieldsPerRow = formSchema.settings?.fieldsPerRow || 1;\r\n const gridColumns = Math.min(Math.max(1, fieldsPerRow), 3);\r\n const fullWidthFieldTypes = ['ckeditor'];\r\n\r\n // Helper function to render fields grid\r\n const renderFieldsGrid = (section: any) => (\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n gridTemplateColumns: {\r\n xs: '1fr',\r\n sm: gridColumns === 1 ? '1fr' : gridColumns === 2 ? 'repeat(2, 1fr)' : 'repeat(3, 1fr)',\r\n },\r\n gap: \"10px\",\r\n }}\r\n >\r\n {section.fields.map((field: any) => {\r\n const shouldTakeFullWidth = fullWidthFieldTypes.includes(field.type);\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n gridColumn: shouldTakeFullWidth\r\n ? {\r\n xs: '1 / -1',\r\n sm: '1 / -1',\r\n }\r\n : 'auto',\r\n }}\r\n >\r\n <FieldRenderer\r\n field={field}\r\n control={control}\r\n errors={errors}\r\n setValue={setValue}\r\n formSchema={formSchema}\r\n uploadingFiles={uploadingFiles}\r\n setUploadingFiles={setUploadingFiles}\r\n setError={setError}\r\n clearErrors={clearErrors}\r\n services={services}\r\n colors={colors}\r\n />\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n\r\n if (sectionDisplayMode === 'stepper') {\r\n // Stepper view\r\n return (\r\n <Box sx={{ border: '1px solid', borderColor: formColors.divider, p: 5, backgroundColor: formColors.backgroundPaper }}>\r\n <Stepper activeStep={activeStep} orientation=\"horizontal\">\r\n {formSchema.sections.map((section) => (\r\n <Step key={section.id}>\r\n <StepLabel>\r\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 600 }}>\r\n {section.title}\r\n </Typography>\r\n </StepLabel>\r\n </Step>\r\n ))}\r\n </Stepper>\r\n <Box sx={{ mt: 5 }}>\r\n {formSchema.sections.map((section, sectionIndex) => {\r\n const sectionsLength = formSchema.sections?.length || 0;\r\n return (\r\n <Box\r\n key={section.id}\r\n sx={{\r\n display: activeStep === sectionIndex ? 'block' : 'none',\r\n }}\r\n >\r\n {section.description && (\r\n <Typography variant=\"caption\" sx={{ mb: 1.5, display: 'block', color: formColors.textSecondary }}>\r\n {section.description}\r\n </Typography>\r\n )}\r\n {renderFieldsGrid(section)}\r\n <Box sx={{ mt: 2, display: 'flex', gap: 1, borderTop: '1px solid', pt: 2, borderColor: formColors.divider, justifyContent: 'center' }}>\r\n {sectionIndex > 0 && (\r\n <Button\r\n size=\"small\"\r\n variant=\"outlined\"\r\n sx={{ borderColor: formColors.success, color: formColors.success, '&:hover': { borderColor: formColors.success, backgroundColor: `${formColors.success}15` } }}\r\n startIcon={<ArrowBackIcon />}\r\n onClick={() => setActiveStep(sectionIndex - 1)}\r\n >\r\n Previous\r\n </Button>\r\n )}\r\n {sectionIndex < sectionsLength - 1 && <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n sx={{ borderColor: formColors.warning, color: formColors.warning, '&:hover': { borderColor: formColors.warning, backgroundColor: `${formColors.warning}15` } }}\r\n endIcon={<ArrowForwardIcon />}\r\n onClick={() => {\r\n if (sectionIndex < sectionsLength - 1) {\r\n setActiveStep(sectionIndex + 1);\r\n }\r\n }}\r\n >\r\n Next\r\n </Button>\r\n }\r\n </Box>\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n // Panel view (default)\r\n return (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\r\n {formSchema.sections.map((section, sectionIndex) => (\r\n <Accordion key={section.id} defaultExpanded={sectionIndex === 0}>\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls={`panel-${section.id}-content`}\r\n id={`panel-${section.id}-header`}\r\n >\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <DoubleArrowOutlinedIcon fontSize=\"small\" sx={{ color: formColors.primary }} />\r\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 600, color: formColors.primary }}>\r\n {section.title}\r\n </Typography>\r\n </Box>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n {section.description && (\r\n <Typography variant=\"caption\" sx={{ mb: 1.5, display: 'block', color: formColors.textSecondary }}>\r\n {section.description}\r\n </Typography>\r\n )}\r\n {renderFieldsGrid(section)}\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n );\r\n })() : (() => {\r\n const fieldsPerRow = formSchema.settings?.fieldsPerRow || 1;\r\n const gridColumns = Math.min(Math.max(1, fieldsPerRow), 3);\r\n\r\n // Field types that should always take full width\r\n const fullWidthFieldTypes = ['ckeditor'];\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n gridTemplateColumns: {\r\n xs: '1fr',\r\n sm: gridColumns === 1 ? '1fr' : gridColumns === 2 ? 'repeat(2, 1fr)' : 'repeat(3, 1fr)',\r\n },\r\n gap: 3,\r\n }}\r\n >\r\n {fieldsToRender.map((field) => {\r\n const shouldTakeFullWidth = fullWidthFieldTypes.includes(field.type);\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n gridColumn: shouldTakeFullWidth\r\n ? {\r\n xs: '1 / -1',\r\n sm: '1 / -1',\r\n }\r\n : 'auto',\r\n }}\r\n >\r\n <FieldRenderer\r\n field={field}\r\n control={control}\r\n errors={errors}\r\n setValue={setValue}\r\n formSchema={formSchema}\r\n uploadingFiles={uploadingFiles}\r\n setUploadingFiles={setUploadingFiles}\r\n setError={setError}\r\n clearErrors={clearErrors}\r\n services={services}\r\n colors={colors}\r\n />\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n })()}\r\n\r\n <Stack direction=\"row\" spacing={2} sx={{ mt: 3 }} justifyContent=\"space-between\">\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n size=\"small\"\r\n sx={{ minWidth: 120, backgroundColor: formColors.primary, '&:hover': { backgroundColor: formColors.primary } }}\r\n disabled={isLoading}\r\n >\r\n {isLoading ? 'Submitting...' : 'Submit'}\r\n </Button>\r\n <Stack direction=\"row\" spacing={2}>\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={() => {\r\n reset();\r\n clearErrors();\r\n setSubmitError(null);\r\n // Reset to first step if in stepper mode\r\n const sectionDisplayMode = formSchema.settings?.sectionDisplayMode || 'panel';\r\n if (sectionDisplayMode === 'stepper') {\r\n setActiveStep(0);\r\n }\r\n }}\r\n disabled={isLoading}\r\n >\r\n Reset form\r\n </Button>\r\n {onCancel && (\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={onCancel}\r\n disabled={isLoading}\r\n >\r\n Cancel\r\n </Button>\r\n )}\r\n </Stack>\r\n </Stack>\r\n </Box>\r\n );\r\n};\r\n"]}
1
+ {"version":3,"sources":["../src/utils/formHelpers.ts","../src/utils/useFormColors.ts","../src/components/fields/TextField.tsx","../src/utils/fieldHelpers.ts","../src/components/common/SimpleSelect.tsx","../src/components/fields/SelectField.tsx","../src/components/fields/CheckboxField.tsx","../src/components/fields/RadioField.tsx","../src/components/fields/ToggleField.tsx","../src/components/fields/ColorField.tsx","../src/services/defaultServices.ts","../src/utils/ckeditorLoader.ts","../src/hooks/useCKEditor.ts","../src/components/fields/CKEditorField.tsx","../src/components/fields/FileField.tsx","../src/components/fields/ReferenceFields.tsx","../src/components/fields/DatePickerField.tsx","../src/components/FieldRenderer.tsx","../src/components/view/FieldView.tsx","../src/components/view/FormViewMode.tsx","../src/components/FormRenderer.tsx"],"names":["useTheme","jsx","Controller","jsxs","FormControl","FormLabel","MuiTextField","InputLabel","MuiSelect","OutlinedInput","CircularProgress","Box","option","Chip","MenuItem","FormHelperText","useMemo","FormControlLabel","Checkbox","RadioGroup","Radio","Switch","Typography","Input","dayjs","useState","error","useEffect","useRef","useCallback","alpha","CKEditor","useMediaQuery","isUploading","Fragment","CloudUploadIcon","InsertDriveFileIcon","Tooltip","IconButton","CloseIcon","LocalizationProvider","AdapterDayjs","DatePicker","DateTimePicker","TimePicker","Accordion","AccordionSummary","ExpandMoreIcon","DoubleArrowOutlinedIcon","AccordionDetails","useForm","Alert","Stepper","Step","StepLabel","Button","ArrowBackIcon","ArrowForwardIcon","Stack"],"mappings":"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","file":"index.js","sourcesContent":["import { FormSchema, FormField } from '../types';\r\n\r\n/**\r\n * Get all fields from form schema (sections or legacy fields)\r\n */\r\nexport const getAllFields = (formSchema: FormSchema): FormField[] => {\r\n return formSchema.sections\r\n ? formSchema.sections.flatMap(section => section.fields)\r\n : (formSchema.fields || []);\r\n};\r\n\r\n/**\r\n * Normalize initial values to handle backward compatibility\r\n * - Single value -> array for multiple fields\r\n * - Array -> first element for single fields\r\n */\r\nexport const normalizeInitialValues = (\r\n values: Record<string, any>,\r\n formSchema: FormSchema\r\n): Record<string, any> => {\r\n if (!values) return values;\r\n\r\n const normalized: Record<string, any> = { ...values };\r\n const allFields = getAllFields(formSchema);\r\n\r\n allFields.forEach(field => {\r\n const fieldValue = normalized[field.name];\r\n\r\n // Handle select, formReference, and apiReference fields\r\n if (field.type === 'select' || field.type === 'formReference' || field.type === 'apiReference') {\r\n if (field.allowMultiple) {\r\n // Multiple selection: convert single value to array\r\n if (fieldValue !== null && fieldValue !== undefined && fieldValue !== '') {\r\n if (!Array.isArray(fieldValue)) {\r\n normalized[field.name] = [fieldValue];\r\n }\r\n } else {\r\n normalized[field.name] = [];\r\n }\r\n } else {\r\n // Single selection: convert array to first element\r\n if (Array.isArray(fieldValue) && fieldValue.length > 0) {\r\n normalized[field.name] = fieldValue[0];\r\n } else if (Array.isArray(fieldValue) && fieldValue.length === 0) {\r\n normalized[field.name] = '';\r\n }\r\n }\r\n }\r\n\r\n // Normalize file fields: convert single file to array if field allows multiple\r\n if (field.type === 'file') {\r\n if (field.allowMultiple) {\r\n if (fieldValue !== null && fieldValue !== undefined) {\r\n if (!Array.isArray(fieldValue)) {\r\n normalized[field.name] = [fieldValue];\r\n }\r\n } else {\r\n normalized[field.name] = [];\r\n }\r\n } else {\r\n // Single file: convert array to first element\r\n if (Array.isArray(fieldValue) && fieldValue.length > 0) {\r\n normalized[field.name] = fieldValue[0];\r\n } else if (Array.isArray(fieldValue) && fieldValue.length === 0) {\r\n normalized[field.name] = null;\r\n }\r\n }\r\n }\r\n });\r\n\r\n return normalized;\r\n};\r\n\r\n/**\r\n * Get default value for a field based on its type\r\n */\r\nexport const getDefaultValue = (field: FormField): any => {\r\n switch (field.type) {\r\n case 'checkbox':\r\n case 'toggle':\r\n return false;\r\n case 'datepicker':\r\n return null;\r\n case 'file':\r\n return field.allowMultiple ? [] : null;\r\n case 'select':\r\n case 'formReference':\r\n case 'apiReference':\r\n return field.allowMultiple ? [] : '';\r\n case 'text':\r\n case 'email':\r\n case 'number':\r\n case 'radio':\r\n case 'ckeditor':\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\n/**\r\n * Transform form values based on field types.\r\n */\r\nexport const transformFormValues = (\r\n data: Record<string, any>,\r\n formSchema: FormSchema\r\n): Record<string, any> => {\r\n const allFields = getAllFields(formSchema);\r\n const fieldTypeMap = new Map<string, string>();\r\n allFields.forEach(field => {\r\n fieldTypeMap.set(field.name, field.type);\r\n });\r\n\r\n const transformedData: Record<string, any> = {};\r\n\r\n Object.keys(data).forEach(key => {\r\n const fieldType = fieldTypeMap.get(key);\r\n const value = data[key];\r\n\r\n if (value === null || value === undefined) {\r\n transformedData[key] = value;\r\n return;\r\n }\r\n\r\n switch (fieldType) {\r\n case 'number':\r\n if (value === '' || value === null || value === undefined) {\r\n transformedData[key] = null;\r\n } else {\r\n const numValue = Number(value);\r\n transformedData[key] = isNaN(numValue) ? value : numValue;\r\n }\r\n break;\r\n case 'checkbox':\r\n case 'toggle':\r\n transformedData[key] = Boolean(value);\r\n break;\r\n case 'datepicker':\r\n case 'file':\r\n default:\r\n transformedData[key] = value;\r\n }\r\n });\r\n\r\n return transformedData;\r\n};\r\n","import { useTheme } from '@mui/material';\r\nimport { FormColors } from '../types';\r\n\r\n/**\r\n * Hook to get form colors - uses custom colors if provided, otherwise falls back to Material-UI theme\r\n */\r\nexport const useFormColors = (customColors?: FormColors) => {\r\n const theme = useTheme();\r\n\r\n return {\r\n primary: customColors?.primary || theme.palette.primary.main,\r\n secondary: customColors?.secondary || theme.palette.secondary.main,\r\n error: customColors?.error || theme.palette.error.main,\r\n success: customColors?.success || theme.palette.success.main,\r\n warning: customColors?.warning || theme.palette.warning.main,\r\n info: customColors?.info || theme.palette.info.main,\r\n textPrimary: customColors?.textPrimary || theme.palette.text.primary,\r\n textSecondary: customColors?.textSecondary || theme.palette.text.secondary,\r\n divider: customColors?.divider || theme.palette.divider,\r\n background: customColors?.background || theme.palette.background.default,\r\n backgroundPaper: customColors?.backgroundPaper || theme.palette.background.paper,\r\n };\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormControl, FormLabel, TextField as MuiTextField } from '@mui/material';\r\nimport { FieldRendererProps } from '../../types';\r\n\r\nexport const TextField = ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => {\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <FormControl\r\n fullWidth\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n >\r\n <FormLabel> {field.label}</FormLabel>\r\n <MuiTextField\r\n {...formField}\r\n type={field.type === 'number' ? 'number' : field.type}\r\n placeholder={field.placeholder || 'Enter value'}\r\n fullWidth\r\n size=\"small\"\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n helperText={errors[field.name]?.message as string}\r\n inputProps={\r\n field.type === 'number'\r\n ? {\r\n min: field.validation?.min,\r\n max: field.validation?.max,\r\n }\r\n : undefined\r\n }\r\n />\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n};\r\n","import { FormField } from '../types';\r\n\r\n/**\r\n * Format file size in human-readable format\r\n */\r\nexport const formatFileSize = (bytes: number): string => {\r\n if (bytes === 0) return '0 Bytes';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\r\n};\r\n\r\n/**\r\n * Validate file based on field configuration\r\n */\r\nexport const validateFile = (file: File, field: FormField): string | true => {\r\n // Check file type\r\n if (field.validation?.allowedFileTypes && field.validation.allowedFileTypes.length > 0) {\r\n const fileExtension = file.name.split('.').pop()?.toLowerCase();\r\n const allowedTypes = field.validation.allowedFileTypes.map(t => t.toLowerCase().replace('.', ''));\r\n if (!fileExtension || !allowedTypes.includes(fileExtension)) {\r\n return `File type not allowed. Allowed types: ${field.validation.allowedFileTypes.join(', ')}`;\r\n }\r\n }\r\n\r\n // Check file size\r\n if (field.validation?.maxFileSize) {\r\n if (file.size > field.validation.maxFileSize) {\r\n const maxSizeFormatted = formatFileSize(field.validation.maxFileSize);\r\n return `File size exceeds maximum allowed size of ${maxSizeFormatted}`;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Build validation rules for a field\r\n */\r\nexport const buildFieldRules = (field: FormField): any => {\r\n const rules: any = {};\r\n \r\n if (field.required) {\r\n rules.required = `${field.label} is required`;\r\n }\r\n\r\n // File validation rules\r\n if (field.type === 'file') {\r\n rules.validate = (value: any) => {\r\n if (field.required) {\r\n if (field.allowMultiple) {\r\n const files = Array.isArray(value) ? value : [];\r\n if (files.length === 0) {\r\n return `${field.label} is required`;\r\n }\r\n const hasValidFiles = files.some((file: any) => \r\n file && typeof file === 'object' && ('fileName' in file || 'fileUrl' in file)\r\n );\r\n if (!hasValidFiles) {\r\n return `${field.label} is required`;\r\n }\r\n } else {\r\n if (!value || (typeof value === 'object' && !('fileName' in value || 'fileUrl' in value))) {\r\n return `${field.label} is required`;\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n }\r\n\r\n // Multiple select validation\r\n if ((field.type === 'select' || field.type === 'formReference' || field.type === 'apiReference') && field.allowMultiple) {\r\n rules.validate = (value: string | string[] | null) => {\r\n const values = value as string[] | null;\r\n if (!values || values.length === 0) {\r\n if (field.required) {\r\n return `${field.label} is required`;\r\n }\r\n return true;\r\n }\r\n return true;\r\n };\r\n }\r\n\r\n return rules;\r\n};\r\n\r\n/**\r\n * Normalize options to OptionItem format\r\n */\r\nexport const normalizeOptions = (options?: FormField['options']): Array<{ label: string; value: string | number }> => {\r\n if (!options) return [];\r\n \r\n return options.map(opt => {\r\n if (typeof opt === 'string') {\r\n return { label: opt, value: opt };\r\n }\r\n return opt;\r\n });\r\n};\r\n","import React from 'react';\r\nimport {\r\n FormControl,\r\n InputLabel,\r\n Select as MuiSelect,\r\n MenuItem,\r\n FormHelperText,\r\n Chip,\r\n Box,\r\n OutlinedInput,\r\n CircularProgress,\r\n} from '@mui/material';\r\n\r\nexport interface SimpleSelectOption {\r\n value: string | number;\r\n label: string;\r\n}\r\n\r\nexport interface SimpleSelectProps {\r\n label: string;\r\n value: string | string[] | number | number[] | null | undefined;\r\n onChange: (value: string | string[] | null) => void;\r\n options: SimpleSelectOption[];\r\n placeholder?: string;\r\n helperText?: string;\r\n fullWidth?: boolean;\r\n size?: 'small' | 'medium';\r\n required?: boolean;\r\n error?: boolean;\r\n disabled?: boolean;\r\n multiple?: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\nexport const SimpleSelect: React.FC<SimpleSelectProps> = ({\r\n label,\r\n value,\r\n onChange,\r\n options,\r\n placeholder,\r\n helperText,\r\n fullWidth = true,\r\n size = 'small',\r\n required = false,\r\n error = false,\r\n disabled = false,\r\n multiple = false,\r\n isLoading = false,\r\n}) => {\r\n const handleChange = (event: any) => {\r\n const val = event.target.value;\r\n onChange(val);\r\n };\r\n\r\n return (\r\n <FormControl fullWidth={fullWidth} size={size} required={required} error={error} disabled={disabled}>\r\n <InputLabel>{label}</InputLabel>\r\n <MuiSelect\r\n value={value ?? (multiple ? [] : '')}\r\n onChange={handleChange}\r\n input={<OutlinedInput label={label} />}\r\n multiple={multiple}\r\n disabled={disabled || isLoading}\r\n endAdornment={isLoading ? <CircularProgress size={20} /> : undefined}\r\n renderValue={(selected) => {\r\n if (multiple) {\r\n const selectedValues = selected as (string | number)[];\r\n if (selectedValues.length === 0) {\r\n return <em>{placeholder || 'Select...'}</em>;\r\n }\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\r\n {selectedValues.map((val) => {\r\n const option = options.find((opt) => opt.value === val);\r\n return (\r\n <Chip\r\n key={val}\r\n label={option?.label || val}\r\n size=\"small\"\r\n />\r\n );\r\n })}\r\n </Box>\r\n );\r\n }\r\n const option = options.find((opt) => opt.value === selected);\r\n return option?.label || selected || <em>{placeholder || 'Select...'}</em>;\r\n }}\r\n >\r\n {options.map((option) => (\r\n <MenuItem key={option.value} value={option.value}>\r\n {option.label}\r\n </MenuItem>\r\n ))}\r\n </MuiSelect>\r\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FieldRendererProps } from '../../types';\r\nimport { normalizeOptions } from '../../utils/fieldHelpers';\r\nimport { SimpleSelect, SimpleSelectOption } from '../common/SimpleSelect';\r\n\r\nexport const SelectField = ({ field, control, defaultValue, rules, errors, services }: FieldRendererProps) => {\r\n const isMultiple = field.allowMultiple || false;\r\n const normalizedOptions = normalizeOptions(field.options);\r\n\r\n // Convert to SimpleSelectOption format\r\n const selectOptions: SimpleSelectOption[] = useMemo(() => {\r\n return normalizedOptions.map((opt) => ({\r\n value: String(opt.value),\r\n label: opt.label,\r\n }));\r\n }, [normalizedOptions]);\r\n\r\n // Use custom SelectComponent if provided, otherwise use SimpleSelect\r\n const SelectComponent = services?.SelectComponent || SimpleSelect;\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => {\r\n return (\r\n <SelectComponent\r\n label={field.label}\r\n value={formField.value}\r\n onChange={(value: string | string[] | null) => {\r\n formField.onChange(value);\r\n }}\r\n options={selectOptions}\r\n placeholder={field.placeholder || 'Select...'}\r\n helperText={errors[field.name]?.message as string}\r\n fullWidth={true}\r\n size=\"small\"\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n disabled={false}\r\n multiple={isMultiple}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormControlLabel, Checkbox } from '@mui/material';\r\nimport { FieldRendererProps } from '../../types';\r\n\r\nexport const CheckboxField = ({ field, control, defaultValue, rules }: FieldRendererProps) => {\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n {...formField}\r\n checked={formField.value || false}\r\n size=\"small\"\r\n />\r\n }\r\n label={field.label}\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormControl, FormLabel, RadioGroup, FormControlLabel, Radio } from '@mui/material';\r\nimport { FieldRendererProps, OptionItem } from '../../types';\r\nimport { normalizeOptions } from '../../utils/fieldHelpers';\r\n\r\nexport const RadioField = ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => {\r\n const normalizedOptions = normalizeOptions(field.options);\r\n \r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <FormControl component=\"fieldset\" required={field.required} error={!!errors[field.name]}>\r\n <FormLabel required={field.required} error={!!errors[field.name]}>\r\n {field.label}\r\n </FormLabel>\r\n\r\n <RadioGroup {...formField} row>\r\n {normalizedOptions.map((option, index) => (\r\n <FormControlLabel\r\n key={index}\r\n value={option.value}\r\n control={<Radio size=\"small\" />}\r\n label={option.label}\r\n />\r\n ))}\r\n </RadioGroup>\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormControlLabel, Switch, Box, Typography } from '@mui/material';\r\nimport { FieldRendererProps } from '../../types';\r\n\r\nexport const ToggleField = ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => {\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <FormControlLabel\r\n control={\r\n <Switch\r\n {...formField}\r\n checked={formField.value || false}\r\n size=\"medium\"\r\n />\r\n }\r\n label={\r\n <Box>\r\n <Typography variant=\"body2\">\r\n {field.label} {field.required && '*'}\r\n </Typography>\r\n {errors[field.name] && (\r\n <Typography variant=\"caption\" color=\"error\" sx={{ display: 'block', mt: 0.5 }}>\r\n {errors[field.name]?.message as string}\r\n </Typography>\r\n )}\r\n </Box>\r\n }\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { Box, Typography, Input, FormLabel } from '@mui/material';\r\nimport { FieldRendererProps } from '../../types';\r\n\r\nexport const ColorField = ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => {\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, width: '100%' }}>\r\n <FormLabel\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n >\r\n {field.label}\r\n </FormLabel>\r\n <Box sx={{ display: 'flex', flexDirection: 'column', flex: 1, maxWidth: 200 }}>\r\n <Input\r\n {...formField}\r\n type=\"color\"\r\n sx={{\r\n width: '20%',\r\n height: '40px',\r\n cursor: 'pointer',\r\n border: errors[field.name] ? '1px solid red' : '1px solid rgba(0, 0, 0, 0.23)',\r\n borderRadius: '4px',\r\n padding: '1px',\r\n }}\r\n inputProps={{\r\n style: {\r\n height: '100%',\r\n cursor: 'pointer',\r\n },\r\n }}\r\n />\r\n {errors[field.name] && (\r\n <Typography variant=\"caption\" color=\"error\" sx={{ mt: 0.5 }}>\r\n {errors[field.name]?.message as string}\r\n </Typography>\r\n )}\r\n </Box>\r\n </Box>\r\n )}\r\n />\r\n );\r\n};\r\n","/**\r\n * Default service implementations\r\n * These are fallback implementations that can be overridden\r\n */\r\n\r\nimport {\r\n FileUploadService,\r\n FormReferenceService,\r\n ApiReferenceService,\r\n DateFormatterService,\r\n OptionItem,\r\n UploadedFile,\r\n} from '../types';\r\nimport dayjs from 'dayjs';\r\n\r\n/**\r\n * Default file upload service - throws error, must be provided\r\n */\r\nexport const defaultFileUploadService: FileUploadService = {\r\n uploadFiles: async () => {\r\n throw new Error('File upload service not provided. Please provide a fileUpload service in FormServices.');\r\n },\r\n};\r\n\r\n/**\r\n * Default form reference service - throws error, must be provided\r\n */\r\nexport const defaultFormReferenceService: FormReferenceService = {\r\n fetchOptions: async () => {\r\n throw new Error('Form reference service not provided. Please provide a formReference service in FormServices.');\r\n },\r\n};\r\n\r\n/**\r\n * Default API reference service - throws error, must be provided\r\n */\r\nexport const defaultApiReferenceService: ApiReferenceService = {\r\n fetchOptions: async () => {\r\n throw new Error('API reference service not provided. Please provide an apiReference service in FormServices.');\r\n },\r\n};\r\n\r\n/**\r\n * Default date formatter service\r\n */\r\nexport const defaultDateFormatterService: DateFormatterService = {\r\n format: (value: any, options?: { datePickerMode?: 'date' | 'datetime' | 'time' }) => {\r\n if (!value) return '—';\r\n \r\n const mode = options?.datePickerMode || 'date';\r\n const date = dayjs(value);\r\n \r\n if (!date.isValid()) return String(value);\r\n \r\n switch (mode) {\r\n case 'date':\r\n return date.format('DD/MM/YYYY');\r\n case 'time':\r\n return date.format('hh:mm A');\r\n case 'datetime':\r\n return date.format('DD/MM/YYYY hh:mm A');\r\n default:\r\n return date.format('DD/MM/YYYY');\r\n }\r\n },\r\n};\r\n","/**\r\n * CKEditor Loader Utility\r\n * \r\n * This utility helps load CKEditor from the lib/ckeditor/ckeditor.js file\r\n * and provides a way to check if CKEditor is available.\r\n */\r\n\r\n/**\r\n * Load CKEditor script dynamically\r\n * @param scriptPath - Path to ckeditor.js file (default: '/lib/ckeditor/ckeditor.js')\r\n * @returns Promise that resolves when CKEditor is loaded\r\n */\r\nexport const loadCKEditor = (scriptPath: string = '/lib/ckeditor/ckeditor.js'): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n // Check if already loaded\r\n if (window.ClassicEditor) {\r\n resolve();\r\n return;\r\n }\r\n\r\n // Check if script is already being loaded\r\n const existingScript = document.querySelector(`script[src=\"${scriptPath}\"]`);\r\n if (existingScript) {\r\n // Wait for it to load\r\n existingScript.addEventListener('load', () => {\r\n if (window.ClassicEditor) {\r\n resolve();\r\n } else {\r\n reject(new Error('CKEditor script loaded but ClassicEditor not found on window'));\r\n }\r\n });\r\n existingScript.addEventListener('error', () => {\r\n reject(new Error('Failed to load CKEditor script'));\r\n });\r\n return;\r\n }\r\n\r\n // Create and load script\r\n const script = document.createElement('script');\r\n script.src = scriptPath;\r\n script.async = true;\r\n \r\n script.onload = () => {\r\n // Wait a bit for ClassicEditor to be available\r\n const checkInterval = setInterval(() => {\r\n if (window.ClassicEditor) {\r\n clearInterval(checkInterval);\r\n resolve();\r\n }\r\n }, 100);\r\n\r\n // Timeout after 10 seconds\r\n setTimeout(() => {\r\n clearInterval(checkInterval);\r\n if (!window.ClassicEditor) {\r\n reject(\r\n new Error(\r\n 'CKEditor script loaded but ClassicEditor was not found on window. ' +\r\n 'Ensure you are using the package-provided build from lib/ckeditor/ckeditor.js (see CKEDITOR_SETUP.md).'\r\n )\r\n );\r\n }\r\n }, 10000);\r\n };\r\n\r\n script.onerror = () => {\r\n reject(\r\n new Error(\r\n `Failed to load CKEditor from ${scriptPath}. ` +\r\n 'Ensure the file exists at that URL (e.g. copy from node_modules/@aatulwork/customform-renderer/lib/ckeditor/ckeditor.js to public/lib/ckeditor/ckeditor.js) or set services.ckEditorScriptPath to a working URL.'\r\n )\r\n );\r\n };\r\n\r\n document.head.appendChild(script);\r\n });\r\n};\r\n\r\n/**\r\n * Check if CKEditor is available\r\n * @returns true if ClassicEditor is available on window\r\n */\r\nexport const isCKEditorAvailable = (): boolean => {\r\n return typeof window !== 'undefined' && typeof window.ClassicEditor !== 'undefined';\r\n};\r\n\r\n/**\r\n * Wait for CKEditor to be available\r\n * @param timeout - Maximum time to wait in milliseconds (default: 10000)\r\n * @returns Promise that resolves when CKEditor is available\r\n */\r\nexport const waitForCKEditor = (timeout: number = 10000): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n if (isCKEditorAvailable()) {\r\n resolve();\r\n return;\r\n }\r\n\r\n const startTime = Date.now();\r\n const checkInterval = setInterval(() => {\r\n if (isCKEditorAvailable()) {\r\n clearInterval(checkInterval);\r\n resolve();\r\n } else if (Date.now() - startTime > timeout) {\r\n clearInterval(checkInterval);\r\n reject(new Error('CKEditor not available after timeout'));\r\n }\r\n }, 100);\r\n });\r\n};\r\n","import { useState, useEffect } from 'react';\r\nimport { isCKEditorAvailable, waitForCKEditor, loadCKEditor } from '../utils/ckeditorLoader';\r\n\r\ninterface UseCKEditorOptions {\r\n /**\r\n * Path to CKEditor script (default: '/lib/ckeditor/ckeditor.js')\r\n */\r\n scriptPath?: string;\r\n /**\r\n * Auto-load CKEditor if not available (default: true)\r\n */\r\n autoLoad?: boolean;\r\n /**\r\n * Timeout for waiting for CKEditor (default: 10000ms)\r\n */\r\n timeout?: number;\r\n}\r\n\r\ninterface UseCKEditorReturn {\r\n /**\r\n * Whether CKEditor is ready\r\n */\r\n isReady: boolean;\r\n /**\r\n * Loading state\r\n */\r\n isLoading: boolean;\r\n /**\r\n * Error if loading failed\r\n */\r\n error: Error | null;\r\n /**\r\n * Manually trigger loading\r\n */\r\n load: () => Promise<void>;\r\n}\r\n\r\n/**\r\n * React hook for loading and checking CKEditor availability\r\n * \r\n * @example\r\n * ```tsx\r\n * const { isReady, isLoading, error } = useCKEditor();\r\n * \r\n * if (!isReady) {\r\n * return <div>Loading CKEditor...</div>;\r\n * }\r\n * ```\r\n */\r\nexport const useCKEditor = (options: UseCKEditorOptions = {}): UseCKEditorReturn => {\r\n const {\r\n scriptPath = '/lib/ckeditor/ckeditor.js',\r\n autoLoad = true,\r\n timeout = 10000,\r\n } = options;\r\n\r\n const [isReady, setIsReady] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const load = async () => {\r\n if (isCKEditorAvailable()) {\r\n setIsReady(true);\r\n setIsLoading(false);\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n try {\r\n await loadCKEditor(scriptPath);\r\n setIsReady(true);\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error('Failed to load CKEditor');\r\n setError(error);\r\n setIsReady(false);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n // Check if already available\r\n if (isCKEditorAvailable()) {\r\n setIsReady(true);\r\n return;\r\n }\r\n\r\n // Auto-load if enabled\r\n if (autoLoad) {\r\n load();\r\n } else {\r\n // Just wait for it to become available\r\n waitForCKEditor(timeout)\r\n .then(() => setIsReady(true))\r\n .catch((err) => setError(err instanceof Error ? err : new Error('CKEditor not available')));\r\n }\r\n }, [scriptPath, autoLoad, timeout]);\r\n\r\n return {\r\n isReady,\r\n isLoading,\r\n error,\r\n load,\r\n };\r\n};\r\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { Box, FormHelperText, useTheme, alpha, FormLabel } from '@mui/material';\r\nimport { useFormColors } from '../../utils/useFormColors';\r\nimport { CKEditor } from '@ckeditor/ckeditor5-react';\r\nimport { FieldRendererProps } from './../../types';\r\nimport {\r\n defaultFileUploadService,\r\n} from '../../services/defaultServices';\r\nimport { useCKEditor } from '../../hooks/useCKEditor';\r\n\r\n// Declare ClassicEditor on window\r\ndeclare global {\r\n interface Window {\r\n ClassicEditor: any;\r\n }\r\n}\r\n\r\nexport const CKEditorField = ({ field, control, defaultValue, rules, errors, setValue, formSchema, services, colors }: FieldRendererProps) => {\r\n const theme = useTheme();\r\n const formColors = useFormColors(colors);\r\n const editorContainerRef = useRef<HTMLDivElement>(null);\r\n \r\n const fileUploadService = services?.fileUpload || defaultFileUploadService;\r\n const fileBaseUrl = services?.fileBaseUrl || '';\r\n const licenseKey = services?.ckEditorLicenseKey || '';\r\n const ckEditorScriptPath = services?.ckEditorScriptPath || '/lib/ckeditor/ckeditor.js';\r\n\r\n // Use CKEditor hook to load and check availability\r\n const { isReady: isCKEditorReady, isLoading: isCKEditorLoading, error: ckEditorError } = useCKEditor({\r\n scriptPath: ckEditorScriptPath,\r\n autoLoad: true,\r\n });\r\n\r\n // Custom upload adapter that uses fileUploadService\r\n const createCustomUploadAdapter = useCallback((loader: any) => {\r\n return {\r\n upload: async () => {\r\n if (!formSchema?.name) {\r\n throw new Error('Form schema name is required for image uploads');\r\n }\r\n\r\n try {\r\n const file = await loader.file;\r\n\r\n if (!file) {\r\n throw new Error('No file provided');\r\n }\r\n\r\n // Validate file type (images only)\r\n if (!file.type.startsWith('image/')) {\r\n throw new Error('Only image files are allowed');\r\n }\r\n\r\n const uploadedFiles = await fileUploadService.uploadFiles(\r\n formSchema.name,\r\n field.name,\r\n [file]\r\n );\r\n\r\n if (uploadedFiles && uploadedFiles.length > 0 && uploadedFiles[0].fileUrl) {\r\n const fileUrl = uploadedFiles[0].fileUrl;\r\n const isFullUrl = fileUrl.startsWith('http://') || fileUrl.startsWith('https://');\r\n const url = isFullUrl ? fileUrl : fileBaseUrl + fileUrl;\r\n return {\r\n default: url\r\n };\r\n }\r\n\r\n throw new Error('Upload failed: No file URL returned');\r\n } catch (error: any) {\r\n console.error('Upload error:', error);\r\n const errorMessage = error.response?.data?.message || error.message || 'Upload failed';\r\n throw new Error(errorMessage);\r\n }\r\n },\r\n abort: () => {\r\n console.log('Upload aborted');\r\n }\r\n };\r\n }, [formSchema?.name, field.name, fileUploadService, fileBaseUrl]);\r\n\r\n // Show loading or error state\r\n if (isCKEditorLoading) {\r\n return (\r\n <Box>\r\n <FormLabel required={field.required} error={!!errors[field.name]}>\r\n {field.label}\r\n </FormLabel>\r\n <Box sx={{ p: 2, textAlign: 'center', color: formColors.textSecondary }}>\r\n Loading editor...\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n if (ckEditorError || !isCKEditorReady) {\r\n const message =\r\n ckEditorError?.message ||\r\n `CKEditor failed to load. Script path: ${ckEditorScriptPath}. Copy ckeditor.js to public/lib/ckeditor/ or set services.ckEditorScriptPath. See CKEDITOR_SETUP.md.`;\r\n return (\r\n <Box>\r\n <FormLabel required={field.required} error={!!errors[field.name]}>\r\n {field.label}\r\n </FormLabel>\r\n <Box sx={{ p: 2, border: '1px solid', borderColor: formColors.error, borderRadius: 1 }}>\r\n <FormHelperText error>{message}</FormHelperText>\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue || ''}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <Box>\r\n <FormLabel\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n >\r\n {field.label}\r\n </FormLabel>\r\n <Box\r\n ref={editorContainerRef}\r\n sx={{\r\n '& .ck-editor': {\r\n borderRadius: '4px',\r\n '& .ck-toolbar': {\r\n width: '100%',\r\n maxWidth: '100%',\r\n overflow: 'visible',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n '& .ck-toolbar__items': {\r\n display: 'flex',\r\n flexWrap: 'wrap !important',\r\n width: '100%',\r\n maxWidth: '100%',\r\n '& > *': {\r\n flexShrink: 0,\r\n },\r\n },\r\n },\r\n '& .ck-editor__editable': {\r\n minHeight: '100px'\r\n },\r\n '&:hover': {\r\n borderColor: errors[field.name]\r\n ? formColors.error\r\n : theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.87)' : formColors.primary\r\n },\r\n '& .ck-focused': {\r\n border: errors[field.name]\r\n ? `1px solid ${formColors.error} !important`\r\n : `1px solid ${theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.23)' : formColors.primary} !important`,\r\n boxShadow: errors[field.name]\r\n ? `0 0 0 1px ${formColors.error}`\r\n : `0 0 0 1px ${alpha(formColors.primary, 0.5)} !important`\r\n }\r\n }\r\n }}\r\n >\r\n {window.ClassicEditor && isCKEditorReady && (\r\n <CKEditor\r\n editor={window.ClassicEditor}\r\n config={{\r\n licenseKey: licenseKey,\r\n initialData: formField.value || '',\r\n } as any}\r\n data={formField.value || ''}\r\n onReady={(editor) => {\r\n // Set up custom upload adapter via FileRepository\r\n if (formSchema?.name) {\r\n try {\r\n const fileRepository = editor.plugins.get('FileRepository');\r\n if (fileRepository) {\r\n fileRepository.createUploadAdapter = (loader: any) => {\r\n return createCustomUploadAdapter(loader);\r\n };\r\n } else {\r\n console.warn('FileRepository plugin not found');\r\n }\r\n } catch (error) {\r\n console.error('Error setting up upload adapter:', error);\r\n }\r\n } else {\r\n console.warn('Form schema name not available, upload adapter not set');\r\n }\r\n\r\n // Set initial value if provided\r\n if (defaultValue && !formField.value) {\r\n editor.setData(defaultValue);\r\n setValue?.(field.name, defaultValue);\r\n }\r\n }}\r\n onChange={(_event, editor) => {\r\n const data = editor.getData();\r\n formField.onChange(data);\r\n }}\r\n onBlur={() => {\r\n formField.onBlur();\r\n }}\r\n />\r\n )}\r\n </Box>\r\n {errors[field.name] && (\r\n <FormHelperText error sx={{ mt: 0.5, mx: 0 }}>\r\n {errors[field.name]?.message as string}\r\n </FormHelperText>\r\n )}\r\n </Box>\r\n )}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport {\r\n Box,\r\n Typography,\r\n IconButton,\r\n CircularProgress,\r\n Tooltip,\r\n FormLabel,\r\n useTheme,\r\n useMediaQuery,\r\n} from '@mui/material';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\r\nimport InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';\r\nimport { FieldRendererProps, UploadedFile } from '../../types';\r\nimport { validateFile, formatFileSize } from '../../utils/fieldHelpers';\r\nimport { useFormColors } from '../../utils/useFormColors';\r\nimport {\r\n defaultFileUploadService,\r\n} from '../../services/defaultServices';\r\n\r\ninterface FileFieldProps extends FieldRendererProps {\r\n uploadingFiles?: Record<string, boolean>;\r\n setUploadingFiles?: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;\r\n setError?: (name: string, error: { type: string; message: string }) => void;\r\n clearErrors?: (name?: string) => void;\r\n}\r\n\r\nexport const FileField = ({\r\n field,\r\n control,\r\n defaultValue,\r\n rules,\r\n errors,\r\n formSchema,\r\n uploadingFiles = {},\r\n setUploadingFiles,\r\n setError,\r\n clearErrors,\r\n services,\r\n colors,\r\n}: FileFieldProps) => {\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\r\n const formColors = useFormColors(colors);\r\n const acceptTypes = field.validation?.allowedFileTypes\r\n ? field.validation.allowedFileTypes.map((type: string) => `.${type.replace('.', '')}`).join(',')\r\n : undefined;\r\n const isMultiple = field.allowMultiple || false;\r\n\r\n const fileUploadService = services?.fileUpload || defaultFileUploadService;\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => {\r\n const isUploading = uploadingFiles[field.name] || false;\r\n let files: (File | UploadedFile)[] = [];\r\n\r\n if (isMultiple) {\r\n files = Array.isArray(formField.value) ? formField.value : [];\r\n } else {\r\n files = formField.value ? [formField.value] : [];\r\n }\r\n\r\n const hasFiles = files.length > 0;\r\n\r\n return (\r\n <Box>\r\n <FormLabel\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n >\r\n {field.label}\r\n </FormLabel>\r\n <Box\r\n component=\"label\"\r\n htmlFor={`file-input-${field.name}`}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n border: '1px dashed',\r\n borderColor: errors[field.name] ? formColors.error : (isUploading ? formColors.primary : hasFiles ? formColors.primary : formColors.divider),\r\n p: 1,\r\n cursor: isUploading ? 'wait' : 'pointer',\r\n transition: 'all 0.2s ease-in-out',\r\n backgroundColor: (isUploading || hasFiles) ? 'action.hover' : formColors.backgroundPaper,\r\n opacity: isUploading ? 0.7 : 1,\r\n pointerEvents: isUploading ? 'none' : 'auto',\r\n '&:hover': {\r\n borderColor: isUploading ? formColors.primary : formColors.primary,\r\n backgroundColor: 'action.hover',\r\n },\r\n }}\r\n >\r\n <input\r\n id={`file-input-${field.name}`}\r\n type=\"file\"\r\n hidden\r\n multiple={isMultiple}\r\n accept={acceptTypes}\r\n onChange={async (e) => {\r\n const fileList = e.target.files;\r\n if (!fileList || fileList.length === 0) return;\r\n\r\n const newFiles = Array.from(fileList);\r\n const isUploading = uploadingFiles[field.name] || false;\r\n\r\n if (isUploading) {\r\n e.target.value = '';\r\n return;\r\n }\r\n\r\n for (const file of newFiles) {\r\n const validationResult = validateFile(file, field);\r\n if (validationResult !== true) {\r\n setError?.(field.name, {\r\n type: 'manual',\r\n message: validationResult as string,\r\n });\r\n e.target.value = '';\r\n return;\r\n }\r\n }\r\n\r\n try {\r\n setUploadingFiles?.((prev) => ({ ...prev, [field.name]: true }));\r\n clearErrors?.(field.name);\r\n\r\n if (!formSchema?.name) {\r\n throw new Error('Form schema name is required for file uploads');\r\n }\r\n\r\n const uploadedFiles = await fileUploadService.uploadFiles(\r\n formSchema.name,\r\n field.name,\r\n newFiles\r\n );\r\n\r\n if (isMultiple) {\r\n const currentValue = formField.value;\r\n const existingFiles = Array.isArray(currentValue)\r\n ? currentValue.filter((item: any) => item && typeof item === 'object' && 'fileName' in item)\r\n : [];\r\n const allUploadedFiles = [...existingFiles, ...uploadedFiles];\r\n formField.onChange(allUploadedFiles);\r\n } else {\r\n formField.onChange(uploadedFiles[0] || null);\r\n }\r\n } catch (error: any) {\r\n console.error(`Failed to upload files for field ${field.name}:`, error);\r\n const errorMessage = error.response?.data?.message || error.message || 'Failed to upload files';\r\n setError?.(field.name, {\r\n type: 'manual',\r\n message: `Failed to upload files: ${errorMessage}`,\r\n });\r\n } finally {\r\n setUploadingFiles?.((prev) => ({ ...prev, [field.name]: false }));\r\n e.target.value = '';\r\n }\r\n }}\r\n disabled={uploadingFiles[field.name] || false}\r\n />\r\n {isUploading ? (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 1, py: 3, width: '100%' }}>\r\n <CircularProgress size={40} />\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500, color: formColors.primary }}>\r\n Uploading files...\r\n </Typography>\r\n <Typography variant=\"caption\" sx={{ color: formColors.textSecondary }}>\r\n Please wait while files are being uploaded\r\n </Typography>\r\n </Box>\r\n ) : !hasFiles ? (\r\n <>\r\n <CloudUploadIcon sx={{ fontSize: 40, color: formColors.textSecondary, mb: 1 }} />\r\n <Typography variant=\"caption\" sx={{ color: formColors.textSecondary }}>\r\n Click to upload or drag and drop\r\n {isMultiple && ' (multiple files allowed)'}\r\n </Typography>\r\n {field.validation?.allowedFileTypes && field.validation.allowedFileTypes.length > 0 && (\r\n <Typography variant=\"caption\" sx={{ mt: 0.5, color: formColors.textSecondary }}>\r\n Allowed: {field.validation.allowedFileTypes.join(', ')}\r\n </Typography>\r\n )}\r\n {field.validation?.maxFileSize && (\r\n <Typography variant=\"caption\" sx={{ mt: 0.5, color: formColors.textSecondary }}>\r\n Max size: {formatFileSize(field.validation.maxFileSize)} per file\r\n </Typography>\r\n )}\r\n </>\r\n ) : (\r\n <Box sx={{ width: '100%' }}>\r\n {isMultiple && (\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500, mb: 1.5 }}>\r\n {files.length} file{files.length !== 1 ? 's' : ''} uploaded\r\n </Typography>\r\n )}\r\n {files.length === 1 && !isMultiple ? (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, width: '100%' }}>\r\n <InsertDriveFileIcon sx={{ fontSize: 40, color: formColors.primary }} />\r\n <Box sx={{ flexGrow: 1, minWidth: 0 }}>\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500, overflow: 'hidden', textOverflow: 'ellipsis', maxWidth: isMobile ? '200px' : '300px' }}>\r\n {files[0] instanceof File\r\n ? files[0].name\r\n : ((files[0] as UploadedFile).originalName || (files[0] as UploadedFile).fileName)}\r\n </Typography>\r\n <Typography variant=\"caption\" sx={{ color: formColors.textSecondary }}>\r\n {formatFileSize((files[0] as any).size || 0)}\r\n </Typography>\r\n </Box>\r\n <Tooltip title=\"Remove file\" placement=\"bottom\" arrow>\r\n <IconButton\r\n size=\"small\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n formField.onChange(null);\r\n const fileInput = document.getElementById(`file-input-${field.name}`) as HTMLInputElement;\r\n if (fileInput) {\r\n fileInput.value = '';\r\n }\r\n }}\r\n sx={{ color: formColors.error }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n ) : (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1, width: '100%' }}>\r\n {files.map((file, index) => {\r\n const fileName = file instanceof File\r\n ? file.name\r\n : ((file as UploadedFile).originalName || (file as UploadedFile).fileName);\r\n return (\r\n <Box\r\n key={`${fileName}-${index}`}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 1.5,\r\n p: 1,\r\n borderRadius: 1,\r\n backgroundColor: formColors.background,\r\n border: '1px solid',\r\n borderColor: formColors.divider,\r\n }}\r\n >\r\n <InsertDriveFileIcon sx={{ fontSize: 32, color: formColors.primary }} />\r\n <Box sx={{ flexGrow: 1, minWidth: 0 }}>\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500, overflow: 'hidden', textOverflow: 'ellipsis' }}>\r\n {fileName}\r\n </Typography>\r\n <Typography variant=\"caption\" sx={{ color: formColors.textSecondary }}>\r\n {formatFileSize((file as any).size || 0)}\r\n </Typography>\r\n </Box>\r\n <Tooltip title=\"Remove file\" placement=\"bottom\" arrow>\r\n <IconButton\r\n size=\"small\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (isMultiple) {\r\n const updatedFiles = files.filter((_, i) => i !== index);\r\n formField.onChange(updatedFiles.length > 0 ? updatedFiles : []);\r\n } else {\r\n formField.onChange(null);\r\n }\r\n }}\r\n sx={{ color: formColors.error }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n {errors[field.name] && (\r\n <Typography variant=\"caption\" sx={{ mt: 1, display: 'block', color: formColors.error }}>\r\n {errors[field.name]?.message as string}\r\n </Typography>\r\n )}\r\n </Box>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FieldRendererProps, OptionItem } from '../../types';\r\nimport { getDefaultValue } from '../../utils/formHelpers';\r\nimport { buildFieldRules } from '../../utils/fieldHelpers';\r\nimport { SimpleSelect, SimpleSelectOption } from '../common/SimpleSelect';\r\nimport {\r\n defaultFormReferenceService,\r\n defaultApiReferenceService,\r\n} from '../../services/defaultServices';\r\n\r\nexport const FormReferenceField = ({ field, control, defaultValue, rules, errors, services }: FieldRendererProps) => {\r\n const isMultiple = field.allowMultiple || false;\r\n const [options, setOptions] = useState<OptionItem[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const formReferenceService = services?.formReference || defaultFormReferenceService;\r\n\r\n useEffect(() => {\r\n if (!field.referenceFormName || !field.referenceFieldName) return;\r\n\r\n setIsLoading(true);\r\n formReferenceService\r\n .fetchOptions(field.referenceFormName, field.referenceFieldName)\r\n .then((opts: OptionItem[]) => {\r\n setOptions(opts);\r\n })\r\n .catch((error: any) => {\r\n console.error('Failed to fetch form reference options:', error);\r\n setOptions([]);\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }, [field.referenceFormName, field.referenceFieldName, formReferenceService]);\r\n\r\n // Convert OptionItem[] to SimpleSelectOption[]\r\n const selectOptions: SimpleSelectOption[] = useMemo(() => {\r\n return options.map((opt: OptionItem) => ({\r\n value: String(opt.value),\r\n label: opt.label,\r\n }));\r\n }, [options]);\r\n\r\n const fieldDefaultValue = defaultValue ?? getDefaultValue(field);\r\n const fieldRules = rules ?? buildFieldRules(field);\r\n const isDisabled = !field.referenceFormName || !field.referenceFieldName;\r\n\r\n // Use custom SelectComponent if provided, otherwise use SimpleSelect\r\n const SelectComponent = services?.SelectComponent || SimpleSelect;\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={fieldDefaultValue}\r\n rules={fieldRules}\r\n render={({ field: formField }) => {\r\n return (\r\n <SelectComponent\r\n label={field.label}\r\n value={formField.value}\r\n onChange={(value: string | string[] | null) => {\r\n formField.onChange(value);\r\n }}\r\n options={selectOptions}\r\n placeholder={field.placeholder || 'Search and select...'}\r\n helperText={errors[field.name]?.message as string}\r\n fullWidth={true}\r\n size=\"small\"\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n disabled={isDisabled || isLoading}\r\n multiple={isMultiple}\r\n isLoading={isLoading}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport const ApiReferenceField = ({ field, control, defaultValue, rules, errors, services }: FieldRendererProps) => {\r\n const isMultiple = field.allowMultiple || false;\r\n const [options, setOptions] = useState<OptionItem[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const apiReferenceService = services?.apiReference || defaultApiReferenceService;\r\n\r\n useEffect(() => {\r\n if (!field.apiEndpoint || !field.apiLabelField) return;\r\n\r\n setIsLoading(true);\r\n apiReferenceService\r\n .fetchOptions(field.apiEndpoint, field.apiLabelField, field.apiValueField || '_id')\r\n .then((opts: OptionItem[]) => {\r\n setOptions(opts);\r\n })\r\n .catch((error: any) => {\r\n console.error('Failed to fetch API reference options:', error);\r\n setOptions([]);\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }, [field.apiEndpoint, field.apiLabelField, field.apiValueField, apiReferenceService]);\r\n\r\n // Convert OptionItem[] to SimpleSelectOption[]\r\n const selectOptions: SimpleSelectOption[] = useMemo(() => {\r\n return options.map((opt: OptionItem) => ({\r\n value: String(opt.value),\r\n label: opt.label,\r\n }));\r\n }, [options]);\r\n\r\n const fieldDefaultValue = defaultValue ?? getDefaultValue(field);\r\n const fieldRules = rules ?? buildFieldRules(field);\r\n const isDisabled = !field.apiEndpoint || !field.apiLabelField;\r\n\r\n // Use custom SelectComponent if provided, otherwise use SimpleSelect\r\n const SelectComponent = services?.SelectComponent || SimpleSelect;\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={fieldDefaultValue}\r\n rules={fieldRules}\r\n render={({ field: formField }) => {\r\n return (\r\n <SelectComponent\r\n label={field.label}\r\n value={formField.value}\r\n onChange={(value: string | string[] | null) => {\r\n formField.onChange(value);\r\n }}\r\n options={selectOptions}\r\n placeholder={field.placeholder || 'Search and select...'}\r\n helperText={errors[field.name]?.message as string}\r\n fullWidth={true}\r\n size=\"small\"\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n disabled={isDisabled || isLoading}\r\n multiple={isMultiple}\r\n isLoading={isLoading}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\r\nimport { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';\r\nimport { TimePicker } from '@mui/x-date-pickers/TimePicker';\r\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\r\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { FieldRendererProps } from '../../types';\r\nimport { FormLabel } from '@mui/material';\r\n\r\nconst textFieldSlotProps = (field: FieldRendererProps['field'], errors: FieldRendererProps['errors']) => ({\r\n fullWidth: true,\r\n size: 'small' as const,\r\n required: field.required,\r\n error: !!errors[field.name],\r\n helperText: errors[field.name]?.message as string,\r\n});\r\n\r\nfunction resolveDatePickerMode(field: FieldRendererProps['field']): 'date' | 'datetime' | 'time' {\r\n if (field.datePickerMode) return field.datePickerMode;\r\n return field?.displayTime ? 'datetime' : 'date';\r\n}\r\n\r\nexport const DateTimePickerField = ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => {\r\n const mode = resolveDatePickerMode(field);\r\n\r\n return (\r\n <Controller\r\n key={field.name}\r\n name={field.name}\r\n control={control}\r\n defaultValue={defaultValue}\r\n rules={rules}\r\n render={({ field: formField }) => (\r\n <>\r\n <FormLabel\r\n required={field.required}\r\n error={!!errors[field.name]}\r\n >\r\n {field.label}\r\n </FormLabel>\r\n <LocalizationProvider dateAdapter={AdapterDayjs}>\r\n {mode === 'date' && (\r\n <DatePicker\r\n format=\"DD-MM-YYYY\"\r\n value={formField.value ? dayjs(formField.value) : null}\r\n onChange={(date: Dayjs | null) => formField.onChange(date?.toISOString() ?? null)}\r\n slotProps={{ textField: textFieldSlotProps(field, errors) }}\r\n />\r\n )}\r\n {mode === 'datetime' && (\r\n <DateTimePicker\r\n format=\"DD-MM-YYYY hh:mm A\"\r\n value={formField.value ? dayjs(formField.value) : null}\r\n onChange={(date: Dayjs | null) => formField.onChange(date?.toISOString() ?? null)}\r\n slotProps={{ textField: textFieldSlotProps(field, errors) }}\r\n />\r\n )}\r\n {mode === 'time' && (\r\n <TimePicker\r\n format=\"hh:mm A\"\r\n value={formField.value ? dayjs(formField.value) : null}\r\n onChange={(date: Dayjs | null) => formField.onChange(date?.toISOString() ?? null)}\r\n slotProps={{ textField: textFieldSlotProps(field, errors) }}\r\n />\r\n )}\r\n </LocalizationProvider>\r\n </>\r\n )}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { FieldRendererProps } from '../types';\r\nimport { TextField } from './fields/TextField';\r\nimport { SelectField } from './fields/SelectField';\r\nimport { CheckboxField } from './fields/CheckboxField';\r\nimport { RadioField } from './fields/RadioField';\r\nimport { ToggleField } from './fields/ToggleField';\r\nimport { ColorField } from './fields/ColorField';\r\nimport { CKEditorField } from './fields/CKEditorField';\r\nimport { FileField } from './fields/FileField';\r\nimport { FormReferenceField, ApiReferenceField } from './fields/ReferenceFields';\r\nimport { buildFieldRules } from '../utils/fieldHelpers';\r\nimport { getDefaultValue } from '../utils/formHelpers';\r\nimport { DateTimePickerField } from './fields/DatePickerField';\r\n\r\ninterface FieldRendererComponentProps extends Omit<FieldRendererProps, 'defaultValue' | 'rules'> {\r\n formSchema: any;\r\n uploadingFiles: Record<string, boolean>;\r\n setUploadingFiles: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;\r\n setError: (name: string, error: { type: string; message: string }) => void;\r\n clearErrors: (name?: string) => void;\r\n}\r\n\r\nexport const FieldRenderer = (props: FieldRendererComponentProps) => {\r\n const { field, formSchema, uploadingFiles, setUploadingFiles, setError, clearErrors, services } = props;\r\n const rules = buildFieldRules(field);\r\n const defaultValue = getDefaultValue(field);\r\n\r\n const commonProps: FieldRendererProps = {\r\n field,\r\n control: props.control,\r\n defaultValue,\r\n rules,\r\n errors: props.errors,\r\n setValue: props.setValue,\r\n formSchema,\r\n services,\r\n colors: props.colors,\r\n };\r\n\r\n switch (field.type) {\r\n case 'text':\r\n case 'email':\r\n case 'number':\r\n return <TextField {...commonProps} />;\r\n\r\n case 'select':\r\n return <SelectField {...commonProps} services={services} />;\r\n\r\n case 'checkbox':\r\n return <CheckboxField {...commonProps} />;\r\n\r\n case 'radio':\r\n return <RadioField {...commonProps} />;\r\n\r\n case 'datepicker':\r\n return <DateTimePickerField {...commonProps} />;\r\n\r\n case 'toggle':\r\n return <ToggleField {...commonProps} />;\r\n\r\n case 'color':\r\n return <ColorField {...commonProps} />;\r\n\r\n case 'ckeditor':\r\n return <CKEditorField {...commonProps} formSchema={formSchema} setValue={props.setValue} />;\r\n\r\n case 'file':\r\n return (\r\n <FileField\r\n {...commonProps}\r\n uploadingFiles={uploadingFiles}\r\n setUploadingFiles={setUploadingFiles}\r\n setError={setError}\r\n clearErrors={clearErrors}\r\n />\r\n );\r\n\r\n case 'formReference':\r\n return <FormReferenceField {...commonProps} services={services} />;\r\n\r\n case 'apiReference':\r\n return <ApiReferenceField {...commonProps} services={services} />;\r\n\r\n default:\r\n return null;\r\n }\r\n};\r\n","import React from 'react';\r\nimport { Box, Typography } from '@mui/material';\r\nimport { FormField, OptionItem, FormServices } from '../../types';\r\nimport { normalizeOptions } from '../../utils/fieldHelpers';\r\nimport { defaultDateFormatterService } from '../../services/defaultServices';\r\n\r\ninterface FieldViewProps {\r\n field: FormField;\r\n value: any;\r\n services?: FormServices;\r\n}\r\n\r\nexport const FieldView = ({ field, value, services }: FieldViewProps) => {\r\n const dateFormatter = services?.dateFormatter || defaultDateFormatterService;\r\n const FileDisplayComponent = services?.FileDisplayComponent;\r\n const CKEditorDisplayComponent = services?.CKEditorDisplayComponent;\r\n\r\n // Format field value\r\n const formattedValue = formatFieldValue(field, value, dateFormatter, services);\r\n\r\n // Special handling for file fields\r\n if (field.type === 'file') {\r\n if (FileDisplayComponent) {\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 0.5,\r\n py: 1.5,\r\n px: 1,\r\n borderColor: 'divider',\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\r\n {field.label}\r\n </Typography>\r\n <FileDisplayComponent fieldValue={value} />\r\n </Box>\r\n );\r\n }\r\n // Fallback if no FileDisplayComponent provided\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 0.5,\r\n py: 1.5,\r\n px: 1,\r\n borderColor: 'divider',\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\r\n {field.label}\r\n </Typography>\r\n <Typography variant=\"body1\" sx={{ color: 'text.secondary' }}>\r\n {value ? (Array.isArray(value) ? `${value.length} file(s)` : '1 file') : '—'}\r\n </Typography>\r\n </Box>\r\n );\r\n }\r\n\r\n // Special handling for CKEditor fields\r\n if (field.type === 'ckeditor') {\r\n if (CKEditorDisplayComponent) {\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 0.5,\r\n py: 1.5,\r\n px: 1,\r\n borderColor: 'divider',\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\r\n {field.label}\r\n </Typography>\r\n <CKEditorDisplayComponent\r\n content={value || ''}\r\n maxLength={150}\r\n showViewButton={true}\r\n />\r\n </Box>\r\n );\r\n }\r\n // Fallback if no CKEditorDisplayComponent provided\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 0.5,\r\n py: 1.5,\r\n px: 1,\r\n borderColor: 'divider',\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\r\n {field.label}\r\n </Typography>\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n color: formattedValue === '—' ? 'text.disabled' : 'text.primary',\r\n fontStyle: formattedValue === '—' ? 'italic' : 'normal',\r\n }}\r\n dangerouslySetInnerHTML={{ __html: value || '' }}\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 0.5,\r\n py: 1.5,\r\n px: 1,\r\n borderColor: 'divider',\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }}>\r\n {field.label}\r\n </Typography>\r\n <Typography\r\n variant=\"body1\"\r\n sx={{\r\n color: formattedValue === '—' ? 'text.disabled' : 'text.primary',\r\n fontStyle: formattedValue === '—' ? 'italic' : 'normal',\r\n fontWeight: 400,\r\n fontSize: '0.875rem',\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n {formattedValue}\r\n </Typography>\r\n </Box>\r\n );\r\n};\r\n\r\nconst formatFieldValue = (\r\n field: FormField,\r\n value: any,\r\n dateFormatter: FormServices['dateFormatter'],\r\n services?: FormServices\r\n): string => {\r\n if (value === null || value === undefined || value === '') {\r\n return '—';\r\n }\r\n\r\n switch (field.type) {\r\n case 'checkbox':\r\n case 'toggle':\r\n return value ? 'Yes' : 'No';\r\n\r\n case 'datepicker':\r\n return dateFormatter?.format(value, { datePickerMode: field.datePickerMode }) || String(value);\r\n\r\n case 'select':\r\n case 'formReference':\r\n case 'apiReference':\r\n let values: any[];\r\n if (field.allowMultiple) {\r\n values = Array.isArray(value) ? value : (value ? [value] : []);\r\n } else {\r\n if (Array.isArray(value)) {\r\n values = value.length > 0 ? [value[0]] : [];\r\n } else {\r\n values = value ? [value] : [];\r\n }\r\n }\r\n\r\n if (values.length === 0) {\r\n return '—';\r\n }\r\n\r\n const getLabelForValue = (val: any): string => {\r\n if (field.options) {\r\n const normalizedOptions = normalizeOptions(field.options);\r\n const option = normalizedOptions.find((opt) => {\r\n return opt.value === val || String(opt.value) === String(val);\r\n });\r\n if (option) {\r\n return option.label;\r\n }\r\n }\r\n // For reference fields, we can't resolve labels in view mode without services\r\n // This would require query client access which we don't have in view mode\r\n // Users should provide a custom FieldView component if they need this\r\n return String(val);\r\n };\r\n\r\n if (values.length > 1 || field.allowMultiple) {\r\n const labels = values.map(val => getLabelForValue(val));\r\n return labels.join(', ');\r\n }\r\n\r\n return getLabelForValue(values[0]);\r\n\r\n case 'radio':\r\n if (field.options) {\r\n const normalizedOptions = normalizeOptions(field.options);\r\n const option = normalizedOptions.find((opt) => {\r\n return opt.value === value;\r\n });\r\n if (option) {\r\n return option.label;\r\n }\r\n }\r\n return String(value);\r\n\r\n default:\r\n return String(value);\r\n }\r\n};\r\n","import React from 'react';\r\nimport { Box, Typography, Accordion, AccordionSummary, AccordionDetails, useTheme, useMediaQuery } from '@mui/material';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport DoubleArrowOutlinedIcon from '@mui/icons-material/DoubleArrowOutlined';\r\nimport { FormSchema, FormServices, FormColors } from '../../types';\r\nimport { useFormColors } from '../../utils/useFormColors';\r\nimport { FieldView } from './FieldView';\r\nimport { getAllFields } from '../../utils/formHelpers';\r\n\r\ninterface FormViewModeProps {\r\n formSchema: FormSchema;\r\n initialValues?: Record<string, any>;\r\n hideTitle?: boolean;\r\n services?: FormServices;\r\n colors?: FormColors;\r\n}\r\n\r\nexport const FormViewMode = ({ formSchema, initialValues, hideTitle = false, services, colors }: FormViewModeProps) => {\r\n const fieldsToRender = getAllFields(formSchema);\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\r\n const formColors = useFormColors(colors);\r\n \r\n return (\r\n <Box sx={{ maxWidth: 600, mx: 'auto', width: '100%' }}>\r\n {!hideTitle && (\r\n <Typography variant=\"h6\" gutterBottom sx={{ mb: 2, fontWeight: 600 }}>\r\n {formSchema.title}\r\n </Typography>\r\n )}\r\n\r\n {formSchema.sections && formSchema.sections.length > 0 ? (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\r\n {formSchema.sections.map((section, sectionIndex) => (\r\n <Accordion key={section.id} defaultExpanded={sectionIndex === 0}>\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls={`panel-${section.id}-content`}\r\n id={`panel-${section.id}-header`}\r\n >\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <DoubleArrowOutlinedIcon fontSize=\"small\" sx={{ color: formColors.primary }} />\r\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 600, color: formColors.primary }}>\r\n {section.title}\r\n </Typography>\r\n </Box>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n {section.description && (\r\n <Typography variant=\"caption\" sx={{ mb: 1.5, display: 'block', color: formColors.textSecondary }}>\r\n {section.description}\r\n </Typography>\r\n )}\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n gridTemplateColumns: isMobile ? 'repeat(1, 1fr)' : 'repeat(2, 1fr)',\r\n gap: 1,\r\n }}\r\n >\r\n {section.fields.map((field) => (\r\n <FieldView key={field.name} field={field} value={initialValues?.[field.name]} services={services} />\r\n ))}\r\n </Box>\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n ) : (\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(2, 1fr)',\r\n gap: 1,\r\n }}\r\n >\r\n {fieldsToRender.map((field) => (\r\n <FieldView key={field.name} field={field} value={initialValues?.[field.name]} services={services} />\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import React, { useEffect, useRef, useState, useMemo } from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport {\r\n Button,\r\n Box,\r\n Typography,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Stack,\r\n Alert,\r\n Stepper,\r\n Step,\r\n StepLabel,\r\n} from '@mui/material';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport DoubleArrowOutlinedIcon from '@mui/icons-material/DoubleArrowOutlined';\r\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport { FormRendererProps } from '../types';\r\nimport { normalizeInitialValues, transformFormValues, getAllFields } from '../utils/formHelpers';\r\nimport { useFormColors } from '../utils/useFormColors';\r\nimport { FieldRenderer } from './FieldRenderer';\r\nimport { FormViewMode } from './view/FormViewMode';\r\nimport {\r\n defaultFormReferenceService,\r\n defaultApiReferenceService,\r\n} from '../services/defaultServices';\r\n\r\nexport const FormRenderer = ({\r\n formSchema,\r\n onSubmit,\r\n onCancel,\r\n isLoading = false,\r\n onSuccess,\r\n initialValues,\r\n hideTitle = false,\r\n allowResetOnValuesChange = false,\r\n mode = 'edit',\r\n services,\r\n colors,\r\n}: FormRendererProps) => {\r\n const formColors = useFormColors(colors);\r\n const {\r\n control,\r\n handleSubmit,\r\n reset,\r\n clearErrors,\r\n setValue,\r\n setError,\r\n formState: { errors },\r\n } = useForm<Record<string, any>>({\r\n defaultValues: initialValues || {},\r\n });\r\n\r\n const [submitError, setSubmitError] = useState<string | null>(null);\r\n const prevInitialValuesRef = useRef<Record<string, any> | undefined>(initialValues);\r\n const isFormInitializedRef = useRef<boolean>(false);\r\n const [uploadingFiles, setUploadingFiles] = useState<Record<string, boolean>>({});\r\n const [activeStep, setActiveStep] = useState(0);\r\n\r\n // Reset active step when form schema changes\r\n useEffect(() => {\r\n setActiveStep(0);\r\n }, [formSchema]);\r\n\r\n // Update form when initialValues change (for edit mode)\r\n useEffect(() => {\r\n const wasUndefined = prevInitialValuesRef.current === undefined;\r\n const isNowDefined = initialValues !== undefined;\r\n\r\n if (initialValues) {\r\n const normalizedValues = normalizeInitialValues(initialValues, formSchema);\r\n\r\n if (allowResetOnValuesChange) {\r\n const prevValues = prevInitialValuesRef.current;\r\n const valuesChanged = !prevValues || JSON.stringify(prevValues) !== JSON.stringify(normalizedValues);\r\n if (valuesChanged) {\r\n reset(normalizedValues);\r\n setSubmitError(null);\r\n isFormInitializedRef.current = true;\r\n }\r\n } else if (wasUndefined && isNowDefined) {\r\n reset(normalizedValues);\r\n setSubmitError(null);\r\n isFormInitializedRef.current = true;\r\n }\r\n } else if (initialValues === undefined && prevInitialValuesRef.current !== undefined) {\r\n setSubmitError(null);\r\n isFormInitializedRef.current = false;\r\n }\r\n\r\n prevInitialValuesRef.current = initialValues;\r\n }, [initialValues, reset, allowResetOnValuesChange, formSchema]);\r\n\r\n // Get all fields to render - memoized to prevent unnecessary recalculations\r\n const fieldsToRender = useMemo(() => getAllFields(formSchema), [formSchema]);\r\n\r\n // Memoize reference fields to prevent unnecessary filtering\r\n const formReferenceFields = useMemo(() => {\r\n return fieldsToRender.filter(\r\n (field) => field.type === 'formReference' && field.referenceFormName && field.referenceFieldName\r\n );\r\n }, [fieldsToRender]);\r\n\r\n const apiReferenceFields = useMemo(() => {\r\n return fieldsToRender.filter(\r\n (field) => field.type === 'apiReference' && field.apiEndpoint && field.apiLabelField\r\n );\r\n }, [fieldsToRender]);\r\n\r\n const handleFormSubmit = async (data: Record<string, any>) => {\r\n setSubmitError(null);\r\n const transformedData = transformFormValues(data, formSchema);\r\n\r\n if (onSubmit) {\r\n try {\r\n await onSubmit(transformedData);\r\n if (onSuccess) {\r\n reset(initialValues || {});\r\n onSuccess();\r\n }\r\n } catch (error: any) {\r\n console.error('Form submission error:', error);\r\n let errorMessage = 'Form submission failed. Please try again.';\r\n\r\n if (error?.response?.data) {\r\n const errorData = error.response.data;\r\n errorMessage =\r\n errorData.message ||\r\n errorData.error ||\r\n errorData.errors?.message ||\r\n (Array.isArray(errorData.errors) ? errorData.errors.join(', ') : null) ||\r\n errorData.msg ||\r\n errorMessage;\r\n } else if (error?.message) {\r\n errorMessage = error.message;\r\n }\r\n\r\n setSubmitError(errorMessage);\r\n }\r\n } else {\r\n console.log('Form Data:', transformedData);\r\n }\r\n };\r\n\r\n // If view mode, render view component\r\n if (mode === 'view') {\r\n return <FormViewMode formSchema={formSchema} initialValues={initialValues} hideTitle={hideTitle} services={services} colors={colors} />;\r\n }\r\n\r\n // Edit mode - render form fields\r\n return (\r\n <Box component=\"form\" onSubmit={handleSubmit(handleFormSubmit)} sx={{ mx: 'auto', width: '100%' }}>\r\n {!hideTitle && (\r\n <Typography variant=\"h6\" gutterBottom sx={{ mb: 2, fontWeight: 600 }}>\r\n {formSchema.title}\r\n </Typography>\r\n )}\r\n\r\n {submitError && (\r\n <Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setSubmitError(null)}>\r\n {submitError}\r\n </Alert>\r\n )}\r\n\r\n {formSchema.sections && formSchema.sections.length > 0 ? (() => {\r\n const sectionDisplayMode = formSchema.settings?.sectionDisplayMode || 'panel';\r\n const fieldsPerRow = formSchema.settings?.fieldsPerRow || 1;\r\n const gridColumns = Math.min(Math.max(1, fieldsPerRow), 3);\r\n const fullWidthFieldTypes = ['ckeditor'];\r\n\r\n // Helper function to render fields grid\r\n const renderFieldsGrid = (section: any) => (\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n gridTemplateColumns: {\r\n xs: '1fr',\r\n sm: gridColumns === 1 ? '1fr' : gridColumns === 2 ? 'repeat(2, 1fr)' : 'repeat(3, 1fr)',\r\n },\r\n gap: \"10px\",\r\n }}\r\n >\r\n {section.fields.map((field: any) => {\r\n const shouldTakeFullWidth = fullWidthFieldTypes.includes(field.type);\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n gridColumn: shouldTakeFullWidth\r\n ? {\r\n xs: '1 / -1',\r\n sm: '1 / -1',\r\n }\r\n : 'auto',\r\n }}\r\n >\r\n <FieldRenderer\r\n field={field}\r\n control={control}\r\n errors={errors}\r\n setValue={setValue}\r\n formSchema={formSchema}\r\n uploadingFiles={uploadingFiles}\r\n setUploadingFiles={setUploadingFiles}\r\n setError={setError}\r\n clearErrors={clearErrors}\r\n services={services}\r\n colors={colors}\r\n />\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n\r\n if (sectionDisplayMode === 'stepper') {\r\n // Stepper view\r\n return (\r\n <Box sx={{ border: '1px solid', borderColor: formColors.divider, p: 5, backgroundColor: formColors.backgroundPaper }}>\r\n <Stepper activeStep={activeStep} orientation=\"horizontal\">\r\n {formSchema.sections.map((section) => (\r\n <Step key={section.id}>\r\n <StepLabel>\r\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 600 }}>\r\n {section.title}\r\n </Typography>\r\n </StepLabel>\r\n </Step>\r\n ))}\r\n </Stepper>\r\n <Box sx={{ mt: 5 }}>\r\n {formSchema.sections.map((section, sectionIndex) => {\r\n const sectionsLength = formSchema.sections?.length || 0;\r\n return (\r\n <Box\r\n key={section.id}\r\n sx={{\r\n display: activeStep === sectionIndex ? 'block' : 'none',\r\n }}\r\n >\r\n {section.description && (\r\n <Typography variant=\"caption\" sx={{ mb: 1.5, display: 'block', color: formColors.textSecondary }}>\r\n {section.description}\r\n </Typography>\r\n )}\r\n {renderFieldsGrid(section)}\r\n <Box sx={{ mt: 2, display: 'flex', gap: 1, borderTop: '1px solid', pt: 2, borderColor: formColors.divider, justifyContent: 'center' }}>\r\n {sectionIndex > 0 && (\r\n <Button\r\n size=\"small\"\r\n variant=\"outlined\"\r\n sx={{ borderColor: formColors.success, color: formColors.success, '&:hover': { borderColor: formColors.success, backgroundColor: `${formColors.success}15` } }}\r\n startIcon={<ArrowBackIcon />}\r\n onClick={() => setActiveStep(sectionIndex - 1)}\r\n >\r\n Previous\r\n </Button>\r\n )}\r\n {sectionIndex < sectionsLength - 1 && <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n sx={{ borderColor: formColors.warning, color: formColors.warning, '&:hover': { borderColor: formColors.warning, backgroundColor: `${formColors.warning}15` } }}\r\n endIcon={<ArrowForwardIcon />}\r\n onClick={() => {\r\n if (sectionIndex < sectionsLength - 1) {\r\n setActiveStep(sectionIndex + 1);\r\n }\r\n }}\r\n >\r\n Next\r\n </Button>\r\n }\r\n </Box>\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n // Panel view (default)\r\n return (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\r\n {formSchema.sections.map((section, sectionIndex) => (\r\n <Accordion key={section.id} defaultExpanded={sectionIndex === 0}>\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls={`panel-${section.id}-content`}\r\n id={`panel-${section.id}-header`}\r\n >\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <DoubleArrowOutlinedIcon fontSize=\"small\" sx={{ color: formColors.primary }} />\r\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 600, color: formColors.primary }}>\r\n {section.title}\r\n </Typography>\r\n </Box>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n {section.description && (\r\n <Typography variant=\"caption\" sx={{ mb: 1.5, display: 'block', color: formColors.textSecondary }}>\r\n {section.description}\r\n </Typography>\r\n )}\r\n {renderFieldsGrid(section)}\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n );\r\n })() : (() => {\r\n const fieldsPerRow = formSchema.settings?.fieldsPerRow || 1;\r\n const gridColumns = Math.min(Math.max(1, fieldsPerRow), 3);\r\n\r\n // Field types that should always take full width\r\n const fullWidthFieldTypes = ['ckeditor'];\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n gridTemplateColumns: {\r\n xs: '1fr',\r\n sm: gridColumns === 1 ? '1fr' : gridColumns === 2 ? 'repeat(2, 1fr)' : 'repeat(3, 1fr)',\r\n },\r\n gap: 3,\r\n }}\r\n >\r\n {fieldsToRender.map((field) => {\r\n const shouldTakeFullWidth = fullWidthFieldTypes.includes(field.type);\r\n return (\r\n <Box\r\n key={field.name}\r\n sx={{\r\n gridColumn: shouldTakeFullWidth\r\n ? {\r\n xs: '1 / -1',\r\n sm: '1 / -1',\r\n }\r\n : 'auto',\r\n }}\r\n >\r\n <FieldRenderer\r\n field={field}\r\n control={control}\r\n errors={errors}\r\n setValue={setValue}\r\n formSchema={formSchema}\r\n uploadingFiles={uploadingFiles}\r\n setUploadingFiles={setUploadingFiles}\r\n setError={setError}\r\n clearErrors={clearErrors}\r\n services={services}\r\n colors={colors}\r\n />\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n })()}\r\n\r\n <Stack direction=\"row\" spacing={2} sx={{ mt: 3 }} justifyContent=\"space-between\">\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n size=\"small\"\r\n sx={{ minWidth: 120, backgroundColor: formColors.primary, '&:hover': { backgroundColor: formColors.primary } }}\r\n disabled={isLoading}\r\n >\r\n {isLoading ? 'Submitting...' : 'Submit'}\r\n </Button>\r\n <Stack direction=\"row\" spacing={2}>\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={() => {\r\n reset();\r\n clearErrors();\r\n setSubmitError(null);\r\n // Reset to first step if in stepper mode\r\n const sectionDisplayMode = formSchema.settings?.sectionDisplayMode || 'panel';\r\n if (sectionDisplayMode === 'stepper') {\r\n setActiveStep(0);\r\n }\r\n }}\r\n disabled={isLoading}\r\n >\r\n Reset form\r\n </Button>\r\n {onCancel && (\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={onCancel}\r\n disabled={isLoading}\r\n >\r\n Cancel\r\n </Button>\r\n )}\r\n </Stack>\r\n </Stack>\r\n </Box>\r\n );\r\n};\r\n"]}