prince-ui-forms 1.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/model/task-form.ts","../src/model/conditional.ts","../src/model/schema.ts","../src/model/camunda.ts","../src/model/validation.ts","../src/renderer/FormRenderer.tsx","../src/builder/builder-model.ts","../src/builder/FormBuilder.tsx"],"names":["useState","useCallback","jsxs","jsx","Button","TextField","Checkbox","NumberField"],"mappings":";;;;;;AAgBA,SAAS,yBACP,WAAA,EACiC;AACjC,EAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,MAAA,KAAW,GAAG,OAAO,MAAA;AACrD,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,EAAM,WAAA,EAAY;AACjC,IAAA,MAAM,MAAM,CAAA,CAAE,aAAA;AACd,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,UAAA;AACH,QAAA,QAAA,CAAS,QAAA,GAAW,IAAA;AACpB,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,IAAI,OAAO,IAAA,IAAQ,GAAA,KAAQ,IAAI,QAAA,CAAS,SAAA,GAAY,OAAO,GAAG,CAAA;AAC9D,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,IAAI,OAAO,IAAA,IAAQ,GAAA,KAAQ,IAAI,QAAA,CAAS,SAAA,GAAY,OAAO,GAAG,CAAA;AAC9D,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,IAAI,OAAO,IAAA,IAAQ,GAAA,KAAQ,IAAI,QAAA,CAAS,GAAA,GAAM,OAAO,GAAG,CAAA;AACxD,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,IAAI,OAAO,IAAA,IAAQ,GAAA,KAAQ,IAAI,QAAA,CAAS,GAAA,GAAM,OAAO,GAAG,CAAA;AACxD,QAAA;AAGA;AACJ,EACF;AACA,EAAA,OAAO,OAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,GAAS,IAAI,QAAA,GAAW,MAAA;AACvD;AAGA,SAAS,UAAU,MAAA,EAAgE;AACjF,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,IAAI,CAAC,CAAC,KAAA,EAAO,KAAK,CAAA,MAAO;AAAA,IAC1D,KAAA;AAAA,IACA,OAAO,KAAA,IAAS;AAAA,GAClB,CAAE,CAAA;AACF,EAAA,OAAO,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,MAAA;AAChC;AAGO,SAAS,gBAAgB,IAAA,EAAqC;AACnE,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,IAAA;AACrC,EAAA,OAAO,MAAM,IAAA,IAAQ,QAAA;AACvB;AAOO,SAAS,uBACd,KAAA,EACe;AACf,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAA;AACvC,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,MAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,QAAA;AAAA,IACL;AACE,MAAA,OAAO,WAAA;AAAA;AAEb;AAGO,SAAS,kBAAkB,IAAA,EAAsB;AACtD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,MAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,MAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL;AACE,MAAA,OAAO,QAAA;AAAA;AAEb;AASO,SAAS,iBAAiB,MAAA,EAAqC;AACpE,EAAA,MAAM,cAA2B,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAM;AACxD,IAAA,MAAM,IAAA,GAAO,uBAAuB,CAAC,CAAA;AACrC,IAAA,MAAM,KAAA,GAAmB;AAAA,MACvB,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,KAAK,CAAA,CAAE,EAAA;AAAA,MACP,IAAA;AAAA,MACA,KAAA,EAAO,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE;AAAA,KACtB;AACA,IAAA,IAAI,CAAA,CAAE,YAAA,KAAiB,MAAA,EAAW,KAAA,CAAM,eAAe,CAAA,CAAE,YAAA;AAEzD,IAAA,KAAA,CAAM,YAAA,GAAe,iBAAA,CAAkB,eAAA,CAAgB,CAAA,CAAE,IAAI,CAAC,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,wBAAA,CAAyB,CAAA,CAAE,qBAAqB,CAAA;AACjE,IAAA,IAAI,QAAA,QAAgB,QAAA,GAAW,QAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,CAAA,CAAE,MAAM,CAAA;AACjC,IAAA,IAAI,MAAA,QAAc,MAAA,GAAS,MAAA;AAC3B,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,UAAA;AAAA,IACA,aAAA,EAAe,CAAA;AAAA,IACf,QAAA,EAAU,EAAE,IAAA,EAAM,iBAAA,EAAmB,SAAS,OAAA;AAAQ,GACxD;AACF;;;AC7HO,SAAS,eAAA,CACd,UACA,IAAA,EACS;AACT,EAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,EAAA,IAAI,IAAA,GAAO,SAAS,IAAA,EAAK;AACzB,EAAA,IAAI,IAAA,CAAK,WAAW,GAAG,CAAA,SAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AACpD,EAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,EAAA,IAAI;AACF,IAAA,OAAO,OAAA,CAAQ,QAAA,CAAS,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,EACrC,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGA,SAAS,QAAA,CAAS,MAAc,IAAA,EAAyB;AACvD,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,EAAM,MAAM,CAAA;AAC1C,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,OAAA,CAAQ,QAAA,CAAS,CAAA,CAAE,IAAA,EAAK,EAAG,IAAI,CAAC,CAAC,CAAA;AAAA,EAC9D;AACA,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,IAAA,EAAM,OAAO,CAAA;AAC5C,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,OAAO,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,KAAM,OAAA,CAAQ,QAAA,CAAS,CAAA,CAAE,IAAA,EAAK,EAAG,IAAI,CAAC,CAAC,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,cAAA,CAAe,IAAA,CAAK,IAAA,EAAK,EAAG,IAAI,CAAA;AACzC;AAGA,SAAS,aAAA,CAAc,MAAc,GAAA,EAAuB;AAC1D,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,KAAA,GAAuB,IAAA;AAC3B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,GAAA,IAAO,EAAA;AACP,MAAA,IAAI,EAAA,KAAO,OAAO,KAAA,GAAQ,IAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AAC5B,MAAA,KAAA,GAAQ,EAAA;AACR,MAAA,GAAA,IAAO,EAAA;AACP,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAA,EAAK,CAAC,CAAA,EAAG;AAC3B,MAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AACZ,MAAA,GAAA,GAAM,EAAA;AACN,MAAA,CAAA,IAAK,IAAI,MAAA,GAAS,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,GAAA,IAAO,EAAA;AAAA,EACT;AACA,EAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AACZ,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,WAAA,GAAc,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,GAAA,EAAK,KAAK,GAAG,CAAA;AAE1D,SAAS,cAAA,CAAe,MAAc,IAAA,EAAyB;AAE7D,EAAA,IAAI,IAAA,CAAK,aAAY,CAAE,UAAA,CAAW,MAAM,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAC/D,IAAA,OAAO,CAAC,SAAS,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA,CAAE,IAAA,EAAK,EAAG,IAAI,CAAA;AAAA,EACjD;AACA,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,IAAA,OAAO,CAAC,SAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,IAAQ,IAAI,CAAA;AAAA,EAC7C;AAEA,EAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,IAAA,EAAM,EAAE,CAAA;AACjC,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA,MAAM,IAAA,GAAO,aAAa,IAAA,CAAK,KAAA,CAAM,GAAG,GAAG,CAAA,CAAE,IAAA,EAAK,EAAG,IAAI,CAAA;AACzD,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,GAAA,GAAM,GAAG,MAAM,CAAA,CAAE,IAAA,EAAK,EAAG,IAAI,CAAA;AACnE,MAAA,OAAO,OAAA,CAAQ,IAAA,EAAM,KAAA,EAAO,EAAE,CAAA;AAAA,IAChC;AAAA,EACF;AAGA,EAAA,OAAO,OAAA,CAAQ,YAAA,CAAa,IAAA,EAAM,IAAI,CAAC,CAAA;AACzC;AAGA,SAAS,YAAA,CAAa,MAAc,EAAA,EAAoB;AACtD,EAAA,IAAI,KAAA,GAAuB,IAAA;AAC3B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,IAAK,KAAK,MAAA,GAAS,EAAA,CAAG,QAAQ,CAAA,EAAA,EAAK;AACjD,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAI,EAAA,KAAO,OAAO,KAAA,GAAQ,IAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AAC5B,MAAA,KAAA,GAAQ,EAAA;AACR,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,EAAA,EAAI,CAAC,CAAA,EAAG;AAC1B,MAAA,IAAI,OAAO,GAAA,EAAK;AACd,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AACvB,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AACvB,QAAA,IAAI,SAAS,GAAA,IAAO,IAAA,KAAS,OAAO,IAAA,KAAS,GAAA,IAAO,SAAS,GAAA,EAAK;AAClE,QAAA,IAAI,SAAS,GAAA,EAAK;AAAA,MACpB;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,OAAA,CAAQ,IAAA,EAAe,KAAA,EAAgB,EAAA,EAAqB;AACnE,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,IAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAA,OAAO,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,IAC5B,KAAK,IAAA;AACH,MAAA,OAAO,CAAC,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA;AAAA,IAC7B,KAAK,GAAA;AACH,MAAA,OAAO,MAAA,CAAO,IAAI,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAAA,IACpC,KAAK,IAAA;AACH,MAAA,OAAO,MAAA,CAAO,IAAI,CAAA,IAAK,MAAA,CAAO,KAAK,CAAA;AAAA,IACrC,KAAK,GAAA;AACH,MAAA,OAAO,MAAA,CAAO,IAAI,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAAA,IACpC,KAAK,IAAA;AACH,MAAA,OAAO,MAAA,CAAO,IAAI,CAAA,IAAK,MAAA,CAAO,KAAK,CAAA;AAAA,IACrC;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEA,SAAS,OAAA,CAAQ,GAAY,CAAA,EAAqB;AAChD,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AACpB,EAAA,IAAI,KAAK,IAAA,IAAQ,CAAA,IAAK,MAAM,OAAO,CAAA,IAAK,QAAQ,CAAA,IAAK,IAAA;AACrD,EAAA,OAAO,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAA;AAC/B;AAGA,SAAS,YAAA,CAAa,OAAe,IAAA,EAAyB;AAC5D,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,EAAA,IAAI,CAAA,KAAM,IAAI,OAAO,MAAA;AACrB,EAAA,IAAI,CAAA,KAAM,QAAQ,OAAO,IAAA;AACzB,EAAA,IAAI,CAAA,KAAM,SAAS,OAAO,KAAA;AAC1B,EAAA,IAAI,CAAA,KAAM,QAAQ,OAAO,IAAA;AACzB,EAAA,IACG,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,IAAK,EAAE,QAAA,CAAS,GAAG,CAAA,IACnC,CAAA,CAAE,WAAW,GAAG,CAAA,IAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EACpC;AACA,IAAA,OAAO,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,kBAAkB,IAAA,CAAK,CAAC,CAAA,EAAG,OAAO,OAAO,CAAC,CAAA;AAE9C,EAAA,OAAO,OAAA,CAAQ,MAAM,CAAC,CAAA;AACxB;AAGO,SAAS,OAAA,CAAQ,KAAc,IAAA,EAAuB;AAC3D,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,IAAI,GAAA,GAAe,GAAA;AACnB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,GAAA,IAAO,IAAA,IAAQ,OAAO,GAAA,KAAQ,UAAU,OAAO,MAAA;AACnD,IAAA,GAAA,GAAO,IAAgC,IAAI,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,OAAA,CAAQ,GAAA,EAA8B,IAAA,EAAc,KAAA,EAAsB;AACxF,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,IAAI,GAAA,GAA+B,GAAA;AACnC,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACzC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAI,OAAO,IAAI,IAAI,CAAA,KAAM,YAAY,GAAA,CAAI,IAAI,MAAM,IAAA,EAAM;AACvD,MAAA,GAAA,CAAI,IAAI,IAAI,EAAC;AAAA,IACf;AACA,IAAA,GAAA,GAAM,IAAI,IAAI,CAAA;AAAA,EAChB;AACA,EAAA,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAW,CAAA,GAAI,KAAA;AAC3C;;;AC/LO,IAAM,oBAAA,uBAAuD,GAAA,CAAI;AAAA,EACtE,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC;AAGM,SAAS,YAAY,KAAA,EAA2B;AACrD,EAAA,OAAO,CAAC,oBAAA,CAAqB,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,IAAK,OAAO,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,KAAA,CAAM,GAAA,KAAQ,EAAA;AACjG;AAMO,SAAS,cAAc,MAAA,EAAiC;AAC7D,EAAA,MAAM,MAAmB,EAAC;AAC1B,EAAA,MAAM,IAAA,GAAO,CAAC,MAAA,KAAoC;AAChD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,GAAA,CAAI,KAAK,CAAC,CAAA;AACV,MAAA,IAAI,EAAE,IAAA,KAAS,OAAA,IAAW,MAAM,OAAA,CAAQ,CAAA,CAAE,UAAU,CAAA,EAAG;AACrD,QAAA,IAAA,CAAK,EAAE,UAAU,CAAA;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,IAAA,CAAK,OAAO,UAAU,CAAA;AACtB,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,WAAW,MAAA,EAAiC;AAC1D,EAAA,OAAO,aAAA,CAAc,MAAM,CAAA,CAAE,MAAA,CAAO,WAAW,CAAA;AACjD;;;AChCO,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,SAAA;AACvC,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,GAAI,SAAA,GAAY,QAAA;AAAA,EAC/C;AACA,EAAA,IAAI,KAAA,YAAiB,MAAM,OAAO,MAAA;AAClC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AACxD,EAAA,OAAO,QAAA;AACT;AAMA,SAAS,mBAAA,CAAoB,OAA8B,KAAA,EAAwB;AACjF,EAAA,IAAI,KAAA,EAAO;AAGT,IAAA,MAAM,WAAW,KAAA,CAAM,YAAA;AACvB,IAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,EAAU,OAAO,QAAA;AACrD,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,QAAA;AACH,QAAA,OAAO,cAAc,OAAO,KAAA,KAAU,WAAW,KAAA,GAAQ,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MACxE,KAAK,UAAA;AACH,QAAA,OAAO,SAAA;AAAA,MACT,KAAK,UAAA;AACH,QAAA,OAAO,MAAA;AAEP;AACJ,EACF;AACA,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B;AAUO,SAAS,0BAAA,CACd,MACA,MAAA,EACkB;AAClB,EAAA,MAAM,MAAwB,EAAC;AAE/B,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,KAAA,MAAW,KAAA,IAAS,UAAA,CAAW,MAAM,CAAA,EAAG;AACtC,MAAA,IAAI,eAAA,CAAgB,KAAA,CAAM,WAAA,EAAa,IAAA,EAAM,IAAI,CAAA,EAAG;AACpD,MAAA,MAAM,MAAM,KAAA,CAAM,GAAA;AAClB,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAC/B,MAAA,IAAI,UAAU,MAAA,EAAW;AACzB,MAAA,GAAA,CAAI,GAAG,IAAI,EAAE,KAAA,EAAO,MAAM,mBAAA,CAAoB,KAAA,EAAO,KAAK,CAAA,EAAE;AAAA,IAC9D;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAA,EAAG;AACrD,IAAA,IAAI,UAAU,MAAA,EAAW;AACzB,IAAA,GAAA,CAAI,GAAG,CAAA,GAAI,EAAE,OAAO,IAAA,EAAM,aAAA,CAAc,KAAK,CAAA,EAAE;AAAA,EACjD;AACA,EAAA,OAAO,GAAA;AACT;;;ACjEO,IAAM,mBAAA,GAAsB;AAAA,EACjC,QAAA,EAAU,+BAAA;AAAA,EACV,GAAA,EAAK,CAAC,GAAA,KAAgB,CAAA,qBAAA,EAAwB,GAAG,CAAA,MAAA,CAAA;AAAA,EACjD,GAAA,EAAK,CAAC,GAAA,KAAgB,CAAA,uBAAA,EAAuB,GAAG,CAAA,MAAA,CAAA;AAAA,EAChD,SAAA,EAAW,CAAC,CAAA,KAAc,CAAA,WAAA,EAAc,CAAC,CAAA,sBAAA,CAAA;AAAA,EACzC,SAAA,EAAW,CAAC,CAAA,KAAc,CAAA,aAAA,EAAa,CAAC,CAAA,iBAAA,CAAA;AAAA,EACxC,OAAA,EAAS;AACX;AAEA,SAAS,QAAQ,KAAA,EAAyB;AACxC,EAAA,OACE,KAAA,KAAU,MAAA,IACV,KAAA,KAAU,IAAA,IACV,KAAA,KAAU,EAAA,IACT,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAA,KAAW,CAAA;AAE9C;AAGO,SAAS,aAAA,CAAc,OAAkB,KAAA,EAA0B;AACxE,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,IAAI,KAAA,CAAM,QAAA;AAChB,EAAA,IAAI,CAAC,GAAG,OAAO,MAAA;AAEf,EAAA,IAAI,CAAA,CAAE,QAAA,IAAY,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChC,IAAA,MAAA,CAAO,IAAA,CAAK,oBAAoB,QAAQ,CAAA;AAExC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,MAAA;AAE3B,EAAA,IAAI,OAAO,EAAE,GAAA,KAAQ,QAAA,IAAY,OAAO,KAAK,CAAA,GAAI,EAAE,GAAA,EAAK;AACtD,IAAA,MAAA,CAAO,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,EAC5C;AACA,EAAA,IAAI,OAAO,EAAE,GAAA,KAAQ,QAAA,IAAY,OAAO,KAAK,CAAA,GAAI,EAAE,GAAA,EAAK;AACtD,IAAA,MAAA,CAAO,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,EAC5C;AACA,EAAA,MAAM,MAAM,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC5D,EAAA,IAAI,OAAO,CAAA,CAAE,SAAA,KAAc,YAAY,GAAA,CAAI,MAAA,GAAS,EAAE,SAAA,EAAW;AAC/D,IAAA,MAAA,CAAO,IAAA,CAAK,mBAAA,CAAoB,SAAA,CAAU,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,OAAO,CAAA,CAAE,SAAA,KAAc,YAAY,GAAA,CAAI,MAAA,GAAS,EAAE,SAAA,EAAW;AAC/D,IAAA,MAAA,CAAO,IAAA,CAAK,mBAAA,CAAoB,SAAA,CAAU,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,EAAE,OAAA,EAAS;AACb,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,IAAI,MAAA,CAAO,CAAA,CAAE,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,EAAG;AACpC,QAAA,MAAA,CAAO,IAAA,CAAK,oBAAoB,OAAO,CAAA;AAAA,MACzC;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,YAAA,CACd,QACA,IAAA,EAC0B;AAC1B,EAAA,MAAM,SAAmC,EAAC;AAC1C,EAAA,KAAA,MAAW,KAAA,IAAS,UAAA,CAAW,MAAM,CAAA,EAAG;AACtC,IAAA,IAAI,eAAA,CAAgB,KAAA,CAAM,WAAA,EAAa,IAAA,EAAM,IAAI,CAAA,EAAG;AACpD,IAAA,MAAM,MAAM,KAAA,CAAM,GAAA;AAClB,IAAA,MAAM,cAAc,aAAA,CAAc,KAAA,EAAO,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA;AAC3D,IAAA,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,GAAI,WAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAA;AACT;ACFA,SAAS,gBAAA,CAAiB,QAAoB,IAAA,EAA2B;AACvE,EAAA,MAAM,GAAA,GAAgB,IAAA,GAAO,eAAA,CAAgB,IAAI,IAAI,EAAC;AACtD,EAAA,KAAA,MAAW,KAAA,IAAS,UAAA,CAAW,MAAM,CAAA,EAAG;AACtC,IAAA,MAAM,MAAM,KAAA,CAAM,GAAA;AAClB,IAAA,IAAI,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA,KAAM,MAAA,EAAW;AACrC,IAAA,IAAI,KAAA,CAAM,iBAAiB,MAAA,EAAW;AACpC,MAAA,OAAA,CAAQ,GAAA,EAAK,GAAA,EAAK,KAAA,CAAM,YAAY,CAAA;AACpC,MAAA;AAAA,IACF;AACA,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,UAAA;AACH,QAAA,OAAA,CAAQ,GAAA,EAAK,KAAK,KAAK,CAAA;AACvB,QAAA;AAAA,MACF,KAAK,WAAA;AAAA,MACL,KAAK,SAAA;AACH,QAAA,OAAA,CAAQ,GAAA,EAAK,GAAA,EAAK,EAAE,CAAA;AACpB,QAAA;AAGA;AACJ,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,oBAAA,GAAuB,SAAA;AAAA,EACvB,WAAA,GAAc,UAAA;AAAA,EACd,WAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,eAAe,IAAA,KAAS,MAAA;AAC9B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAA;AAAA,IAAmB,MACjD,gBAAA,CAAiB,MAAA,EAAQ,YAAA,GAAe,OAAO,WAAW;AAAA,GAC5D;AACA,EAAA,MAAM,MAAA,GAAS,eAAe,IAAA,GAAO,QAAA;AAErC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA,CAAqC,EAAE,CAAA;AACnE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,KAAa,KAAA,KAAmB;AAC/B,MAAA,MAAM,IAAA,GAAO,gBAAgB,MAAM,CAAA;AACnC,MAAA,OAAA,CAAQ,IAAA,EAAM,KAAK,KAAK,CAAA;AACxB,MAAA,IAAI,CAAC,YAAA,EAAc,WAAA,CAAY,IAAI,CAAA;AACnC,MAAA,QAAA,GAAW,IAAI,CAAA;AAEf,MAAA,IAAI,SAAA,EAAW,SAAA,CAAU,YAAA,CAAa,MAAA,EAAQ,IAAI,CAAC,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,YAAA,EAAc,QAAA,EAAU,WAAW,MAAM;AAAA,GACpD;AAEA,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CAAC,CAAA,KAAiB;AAChB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAA,EAAQ,MAAM,CAAA;AACxC,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,MAAM,YACJ,oBAAA,KAAyB,SAAA,GACrB,0BAAA,CAA2B,MAAA,EAAQ,MAAM,CAAA,GACzC,MAAA;AACN,MAAA,QAAA,GAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,WAAW,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,MAAA,EAAQ,oBAAA,EAAsB,QAAQ;AAAA,GACjD;AAGA,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,KAAA,KAAqB,eAAA,CAAgB,KAAA,CAAM,WAAA,EAAa,MAAM,MAAM,CAAA;AAAA,IACrE,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,uBACE,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAO,SAAS,CAAA;AAAA,MAC3B,QAAA,EAAU,YAAA;AAAA,MACV,kBAAA,EAAmB,MAAA;AAAA,MACnB,wBAAA,EAAuB,EAAA;AAAA,MAEvB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EACZ,QAAA,EAAA,MAAA,CAAO,WAAW,GAAA,CAAI,CAAC,OAAO,CAAA,qBAC7B,GAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YAEC,KAAA;AAAA,YACA,MAAA;AAAA,YACA,MAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA,WAAA;AAAA,UALK,KAAA,CAAM,MAAM,KAAA,CAAM,GAAA,IAAO,GAAG,KAAA,CAAM,IAAI,IAAI,CAAC,CAAA;AAAA,SAOnD,CAAA,EACH,CAAA;AAAA,QAAA,CACE,gBAAgB,IAAA,IAAQ,WAAA,qBACxB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,WAAA;AAAA,UACA,WAAA,KAAgB,wBACf,GAAA,CAAC,MAAA,EAAA,EAAO,MAAK,QAAA,EAAS,OAAA,EAAQ,UAC3B,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAEA,SAAS,OAAO,SAAA,EAA4B;AAC1C,EAAA,OAAO,SAAA,GAAY,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAA,GAAK,mBAAA;AACxD;AAIA,SAAS,YAAA,CAAa;AAAA,EACpB,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,QAAA,CAAS,CAAC,CAAC,CAAA;AAC5D,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,SAAS,CAAA,EAAG,wBAAA,EAAuB,EAAA,EACxD,QAAA,kBAAA,GAAA,CAAC,mBAAgB,MAAA,EAAO,SAAA,EACrB,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACrB,IAAA,MAAM,MAAM,KAAA,CAAM,GAAA;AAClB,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAO,MAAM,KAAA,IAAS,GAAA;AAAA,QACtB,OAAO,cAAA,CAAe,KAAA,EAAO,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAC;AAAA,OAAA;AAAA,MAF5C,MAAM,EAAA,IAAM;AAAA,KAGnB;AAAA,EAEJ,CAAC,GACH,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,cAAA,CAAe,OAAkB,KAAA,EAA2B;AACnE,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,IAAI,OAAO,QAAA;AAClE,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,QAAQ,IAAA,GAAO,MAAA;AACtD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,CAAC,MAAM,WAAA,CAAY,KAAA,EAAO,CAAC,CAAC,CAAA;AACrD,IAAA,OAAO,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,QAAA;AAAA,EAC7C;AACA,EAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,OAAO,WAAA,CAAY,OAAO,KAAK,CAAA;AACjD,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,WAAA,CAAY,OAAkB,KAAA,EAAwB;AAC7D,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,MAAA,EAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAC/D,EAAA,OAAO,GAAA,EAAK,KAAA,IAAS,MAAA,CAAO,KAAK,CAAA;AACnC;AAYA,SAAS,cAAc,EAAE,KAAA,EAAO,QAAQ,MAAA,EAAQ,QAAA,EAAU,UAAS,EAAuB;AACxF,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,IAAA;AAE5B,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,OAAA;AACH,MAAA,uBACE,IAAA,CAAC,UAAA,EAAA,EAAS,SAAA,EAAU,gBAAA,EACjB,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,yBAAS,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,uBAAA,EAAyB,gBAAM,KAAA,EAAM,CAAA;AAAA,QAAA,CACrE,MAAM,UAAA,IAAc,IAAI,GAAA,CAAI,CAAC,OAAO,CAAA,qBACpC,GAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YAEC,KAAA,EAAO,KAAA;AAAA,YACP,MAAA;AAAA,YACA,MAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA,WAAA;AAAA,UALK,KAAA,CAAM,MAAM,KAAA,CAAM,GAAA,IAAO,GAAG,KAAA,CAAM,IAAI,IAAI,CAAC,CAAA;AAAA,SAOnD;AAAA,OAAA,EACH,CAAA;AAAA,IAEJ,KAAK,MAAA;AACH,MAAA,2BAAQ,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,KAAA,CAAM,IAAA,IAAQ,MAAM,KAAA,EAAM,CAAA;AAAA,IACnE,KAAK,WAAA;AACH,MAAA,uBAAO,GAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,IACnD,KAAK,QAAA;AACH,MAAA,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAkB,eAAW,IAAA,EAAC,CAAA;AAAA,IACtD,KAAK,QAAA;AACH,MAAA,OAAO,IAAA;AAAA;AAAA,IACT;AACE,MAAA,uBACE,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,KAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA;AAGR;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAyC;AACvC,EAAA,IAAI,CAAC,WAAA,CAAY,KAAK,CAAA,EAAG,OAAO,IAAA;AAChC,EAAA,MAAM,MAAM,KAAA,CAAM,GAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAG,CAAA,GAAI,CAAC,CAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,GAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,EAAU,QAAA;AACjC,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,IAAU,EAAC;AAEjC,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,KAAA;AAAA,IACA,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,YAAA,EAAc,KAAA;AAAA,IACd,SAAA,EAAW,QAAQ,KAAK,CAAA;AAAA,IACxB,UAAA,EAAY;AAAA,GACd;AAEA,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,UAAA;AACH,MAAA,uBACE,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,EAAA,GAAK,OAAO,KAAK,CAAA;AAAA,UACxC,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,CAAC;AAAA;AAAA,OAClC;AAAA,IAEJ,KAAK,QAAA;AACH,MAAA,uBACE,GAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,QAAQ,MAAA,CAAO,GAAA;AAAA,UAClD,QAAA,EAAU,MAAM,QAAA,EAAU,GAAA;AAAA,UAC1B,QAAA,EAAU,MAAM,QAAA,EAAU,GAAA;AAAA,UAC1B,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,GAAA,EAAK,OAAO,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,GAAY,CAAC;AAAA;AAAA,OAChE;AAAA,IAEJ,KAAK,UAAA;AACH,MAAA,uBACE,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,UAAA,EAAY,QAAQ,KAAK,CAAA;AAAA,UACzB,SAAA,EAAW,QAAQ,KAAK,CAAA;AAAA,UACxB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,UAE/B,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,YACA,WAAW,IAAA,GAAO;AAAA;AAAA;AAAA,OACrB;AAAA,IAEJ,KAAK,UAAA,EAAY;AAGf,MAAA,IAAI,SAAA,GAAiC,IAAA;AACrC,MAAA,MAAM,GAAA,GAAM,SAAS,IAAA,GAAO,EAAA,GAAK,OAAO,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC1D,MAAA,IAAI,GAAA,CAAI,MAAK,EAAG;AACd,QAAA,IAAI;AACF,UAAA,SAAA,GAAY,UAAU,GAAG,CAAA;AAAA,QAC3B,CAAA,CAAA,MAAQ;AACN,UAAA,SAAA,GAAY,IAAA;AAAA,QACd;AAAA,MACF;AACA,MAAA,uBACE,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,KAAA,EAAO,SAAA;AAAA,UACP,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,CAAA,GAAI,CAAA,CAAE,QAAA,EAAS,GAAI,MAAS;AAAA;AAAA,OAC7D;AAAA,IAEJ;AAAA,IACA,KAAK,QAAA;AACH,MAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,SAAA,EAAW,QAAQ,KAAK,CAAA;AAAA,YACxB,UAAA,EAAY,QAAA;AAAA,YACZ,WAAA,EAAa,KAAA,IAAS,IAAA,GAAO,IAAA,GAAO,OAAO,KAAK,CAAA;AAAA,YAChD,iBAAA,EAAmB,CAAC,CAAA,KAAM,QAAA,CAAS,GAAA,EAAK,KAAK,IAAA,GAAO,MAAA,GAAY,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,YAExE,kBAAQ,GAAA,CAAI,CAAC,CAAA,qBACZ,GAAA,CAAC,cAAyB,EAAA,EAAI,CAAA,CAAE,KAAA,EAAO,SAAA,EAAW,EAAE,KAAA,EACjD,QAAA,EAAA,CAAA,CAAE,KAAA,EAAA,EADY,CAAA,CAAE,KAEnB,CACD;AAAA;AAAA,SACH;AAAA,QACC,MAAM,WAAA,oBAAe,GAAA,CAAC,SAAI,SAAA,EAAU,eAAA,EAAiB,gBAAM,WAAA,EAAY,CAAA;AAAA,QACvE,yBACC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EAAiB,IAAA,EAAK,SAClC,QAAA,EAAA,KAAA,EACH;AAAA,OAAA,EAEJ,CAAA;AAAA,IAEJ,KAAK,OAAA;AACH,MAAA,uBACE,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,IAAA,GAAO,OAAO,KAAK,CAAA;AAAA,UAC1C,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,UAE/B,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZ,GAAA,CAAC,KAAA,EAAA,EAAoB,KAAA,EAAO,CAAA,CAAE,KAAA,EAC3B,QAAA,EAAA,CAAA,CAAE,KAAA,EAAA,EADO,CAAA,CAAE,KAEd,CACD;AAAA;AAAA,OACH;AAAA,IAEJ,KAAK,WAAA;AACH,MAAA,uBACE,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAK,IAAI,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,GAAI,EAAC;AAAA,UACnD,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,UAE/B,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZ,GAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,CAAA,CAAE,KAAA,EAC9B,QAAA,EAAA,CAAA,CAAE,KAAA,EAAA,EADU,CAAA,CAAE,KAEjB,CACD;AAAA;AAAA,OACH;AAAA,IAEJ,KAAK,SAAA;AACH,MAAA,uBACE,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,KAAA;AAAA,UACA,OAAA;AAAA,UACA,QAAA,EAAU,MAAM,OAAA,CAAQ,KAAK,IAAI,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,GAAI,EAAC;AAAA,UACtD,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,UAChC;AAAA;AAAA,OACF;AAAA,IAEJ,KAAK,WAAA;AAAA,IACL;AACE,MAAA,uBACE,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,EAAA,GAAK,OAAO,KAAK,CAAA;AAAA,UACxC,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,CAAC;AAAA;AAAA,OAClC;AAAA;AAGR;AAMA,SAAS,YAAA,CAAa;AAAA,EACpB,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,QAAA,CAAS,QAAA,CAAS,CAAA,CAAE,KAAK,CAAC,CAAA;AACnE,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAc,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,CAAC,CAAA,EAAG,KAAA,IAAS,CAAA;AAC7E,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,YAAA,EAAc,KAAA;AAAA,QACd,SAAA,EAAW,QAAQ,KAAK,CAAA;AAAA,QACxB,WAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAmB,CAAC,CAAA,KAAM;AACxB,UAAA,IAAI,CAAA,IAAK,MAAM,QAAA,CAAS,CAAC,GAAG,QAAA,EAAU,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAAA,QAClD,CAAA;AAAA,QAEC,oBAAU,GAAA,CAAI,CAAC,CAAA,qBACd,GAAA,CAAC,gBAA2B,EAAA,EAAI,CAAA,CAAE,KAAA,EAAO,SAAA,EAAW,EAAE,KAAA,EACnD,QAAA,EAAA,CAAA,CAAE,KAAA,EAAA,EADc,CAAA,CAAE,KAErB,CACD;AAAA;AAAA,KACH;AAAA,IACC,QAAA,CAAS,SAAS,CAAA,oBACjB,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAY,CAAA,EAAG,MAAA,CAAO,KAAK,CAAC,CAAA,QAAA,CAAA;AAAA,QAC5B,QAAA,EAAU,CAAC,IAAA,KAAS,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAAA,QAEhE,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,qBACb,GAAA,CAAC,GAAA,EAAA,EAAY,EAAA,EAAI,CAAA,EACd,QAAA,EAAA,QAAA,CAAS,CAAC,CAAA,EAAA,EADH,CAEV,CACD;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;;;AC9eO,IAAM,mBAAA,GAAsB;AAAA,EACjC,WAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF;AAKO,IAAM,iBAAA,GAAsD;AAAA,EACjE,SAAA,EAAW,UAAA;AAAA,EACX,QAAA,EAAU,aAAA;AAAA,EACV,MAAA,EAAQ,MAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,YAAA;AAAA,EACX,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS,WAAA;AAAA,EACT,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,YAAA;AAAA,EACX,MAAA,EAAQ;AACV;AAGA,IAAM,cAAA,uBAAiD,GAAA,CAAI;AAAA,EACzD,MAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGM,IAAM,YAAA,uBAA+C,GAAA,CAAI;AAAA,EAC9D,QAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEM,SAAS,iBAAiB,IAAA,EAA8B;AAC7D,EAAA,OAAO,cAAA,CAAe,IAAI,IAAI,CAAA;AAChC;AAEO,SAAS,WAAW,IAAA,EAA8B;AACvD,EAAA,OAAO,YAAA,CAAa,IAAI,IAAI,CAAA;AAC9B;AAEA,IAAI,SAAA,GAAY,CAAA;AAET,SAAS,eAAA,GAA0B;AACxC,EAAA,SAAA,IAAa,CAAA;AACb,EAAA,MAAM,IAAA,GAAO,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAClD,EAAA,OAAO,CAAA,MAAA,EAAS,IAAI,CAAA,EAAG,SAAS,CAAA,CAAA;AAClC;AAGO,SAAS,WAAA,GAA0B;AACxC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,YAAY,EAAC;AAAA,IACb,aAAA,EAAe,CAAA;AAAA,IACf,QAAA,EAAU,EAAE,IAAA,EAAM,iBAAA,EAAmB,SAAS,OAAA;AAAQ,GACxD;AACF;AAGO,SAAS,YAAY,IAAA,EAAmC;AAC7D,EAAA,MAAM,KAAK,eAAA,EAAgB;AAC3B,EAAA,IAAI,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC1B,IAAA,IAAI,SAAS,MAAA,EAAQ,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAM,iBAAA,EAAkB;AAChE,IAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,EACpB;AACA,EAAA,MAAM,KAAA,GAAmB;AAAA,IACvB,EAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA,EAAK,EAAA;AAAA,IACL,KAAA,EAAO,kBAAkB,IAAI;AAAA,GAC/B;AACA,EAAA,IAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AACpB,IAAA,KAAA,CAAM,MAAA,GAAS;AAAA,MACb,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,MACtC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,UAAA;AAAW,KACxC;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,WAAA,CACd,MAAA,EACA,KAAA,EACA,KAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,CAAC,GAAG,MAAA,CAAO,UAAU,CAAA;AACxC,EAAA,MAAM,EAAA,GAAK,KAAA,IAAS,IAAA,GAAO,UAAA,CAAW,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,UAAA,CAAW,MAAM,CAAC,CAAA;AAC7F,EAAA,UAAA,CAAW,MAAA,CAAO,EAAA,EAAI,CAAA,EAAG,KAAK,CAAA;AAC9B,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,UAAA,EAAW;AACjC;AAGO,SAAS,aAAA,CAAc,QAAoB,KAAA,EAA2B;AAC3E,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,MAAM,KAAK,CAAA;AACjE,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,UAAA,EAAW;AACjC;AAGO,SAAS,SAAA,CAAU,MAAA,EAAoB,IAAA,EAAc,EAAA,EAAwB;AAClF,EAAA,MAAM,UAAA,GAAa,CAAC,GAAG,MAAA,CAAO,UAAU,CAAA;AACxC,EAAA,IAAI,IAAA,GAAO,CAAA,IAAK,IAAA,IAAQ,UAAA,CAAW,QAAQ,OAAO,MAAA;AAClD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,EAAA,EAAI,UAAA,CAAW,MAAA,GAAS,CAAC,CAAC,CAAA;AACjE,EAAA,MAAM,CAAC,KAAK,CAAA,GAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAC,CAAA;AACzC,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,UAAA,CAAW,MAAA,CAAO,SAAA,EAAW,CAAA,EAAG,KAAK,CAAA;AACrC,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,UAAA,EAAW;AACjC;AAGO,SAAS,aAAA,CACd,MAAA,EACA,KAAA,EACA,KAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,CAAW,GAAA;AAAA,IAAI,CAAC,CAAA,EAAG,CAAA,KAC3C,CAAA,KAAM,KAAA,GAAQ,EAAE,GAAG,CAAA,EAAG,GAAG,KAAA,EAAM,GAAI;AAAA,GACrC;AACA,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,UAAA,EAAW;AACjC;AC/EA,IAAM,QAAA,GAAW,8BAAA;AAEV,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA,GAAa,mBAAA;AAAA,EACb;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,QAAAA;AAAA,IAC9B,MAAM,KAAA,IAAS,YAAA,IAAgB,WAAA;AAAY,GAC7C;AACA,EAAA,MAAM,MAAA,GAAS,eAAe,KAAA,GAAQ,QAAA;AAEtC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,QAAAA,CAA0B,QAAQ,QAAQ,CAAA;AAClF,EAAA,MAAM,aAAa,IAAA,IAAQ,YAAA;AAE3B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAE9D,EAAA,MAAM,MAAA,GAASC,WAAAA;AAAA,IACb,CAAC,IAAA,KAAqB;AACpB,MAAA,IAAI,CAAC,YAAA,EAAc,WAAA,CAAY,IAAI,CAAA;AACnC,MAAA,QAAA,GAAW,IAAI,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAEA,EAAA,MAAM,OAAA,GAAUA,WAAAA;AAAA,IACd,CAAC,CAAA,KAAuB;AACtB,MAAA,IAAI,IAAA,KAAS,MAAA,EAAW,eAAA,CAAgB,CAAC,CAAA;AACzC,MAAA,YAAA,GAAe,CAAC,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,CAAC,MAAM,YAAY;AAAA,GACrB;AAGA,EAAA,MAAM,QAAA,GAAW,OAAsB,IAAI,CAAA;AAE3C,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,EAAc,IAAA,KAA2B;AACnE,IAAA,CAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,QAAA,EAAU,IAAI,CAAA;AACrC,IAAA,CAAA,CAAE,aAAa,aAAA,GAAgB,MAAA;AAC/B,IAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,CAAA,EAAc,KAAA,KAAkB;AAC7D,IAAA,CAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,QAAA,EAAU,UAAU,CAAA;AAC3C,IAAA,CAAA,CAAE,aAAa,aAAA,GAAgB,MAAA;AAC/B,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,EAAc,KAAA,KAAkB;AAChD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AAC5C,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,IAAI,QAAA,CAAS,WAAW,IAAA,EAAM;AAC5B,MAAA,MAAM,IAAA,GAAO,SAAA,CAAU,MAAA,EAAQ,QAAA,CAAS,SAAS,KAAK,CAAA;AACtD,MAAA,MAAA,CAAO,IAAI,CAAA;AACX,MAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,MAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,IAAQ,SAAS,UAAA,EAAY;AAC/B,MAAA,MAAM,KAAA,GAAQ,YAAY,IAAwB,CAAA;AAClD,MAAA,MAAA,CAAO,WAAA,CAAY,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAC,CAAA;AACxC,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,IACxB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAiB;AAClC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AAC5C,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,IAAI,QAAA,CAAS,WAAW,IAAA,EAAM;AAC5B,MAAA,MAAA,CAAO,SAAA,CAAU,QAAQ,QAAA,CAAS,OAAA,EAAS,OAAO,UAAA,CAAW,MAAA,GAAS,CAAC,CAAC,CAAA;AACxE,MAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,IAAQ,SAAS,UAAA,EAAY;AAC/B,MAAA,MAAM,KAAA,GAAQ,YAAY,IAAwB,CAAA;AAClD,MAAA,MAAA,CAAO,WAAA,CAAY,MAAA,EAAQ,KAAK,CAAC,CAAA;AACjC,MAAA,gBAAA,CAAiB,MAAA,CAAO,WAAW,MAAM,CAAA;AAAA,IAC3C;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBACJ,aAAA,IAAiB,IAAA,GAAO,MAAA,CAAO,UAAA,CAAW,aAAa,CAAA,GAAI,MAAA;AAE7D,EAAA,MAAM,aAAA,GAAgBA,WAAAA;AAAA,IACpB,CAAC,KAAA,KAA8B;AAC7B,MAAA,IAAI,iBAAiB,IAAA,EAAM;AAC3B,MAAA,MAAA,CAAO,aAAA,CAAc,MAAA,EAAQ,aAAA,EAAe,KAAK,CAAC,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,MAAA,EAAQ,MAAM;AAAA,GAChC;AAEA,EAAA,MAAM,cAAA,GAAiBA,YAAY,MAAM;AACvC,IAAA,IAAI,iBAAiB,IAAA,EAAM;AAC3B,IAAA,MAAA,CAAO,aAAA,CAAc,MAAA,EAAQ,aAAa,CAAC,CAAA;AAC3C,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,aAAA,EAAe,MAAA,EAAQ,MAAM,CAAC,CAAA;AAElC,EAAA,uBACEC,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,kBAAA,EAAoB,SAAS,CAAA,EAAG,WAAA,EAAW,UAAA,EAC5D,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,YAAA,EAAW,eAAA;AAAA,UACX,YAAA,kBAAc,IAAI,GAAA,CAAI,CAAC,UAAU,CAAC,CAAA;AAAA,UAClC,iBAAA,EAAmB,CAAC,IAAA,KAAS;AAC3B,YAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;AACxB,YAAA,IAAI,IAAA,UAAc,IAAI,CAAA;AAAA,UACxB,CAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAC,GAAAA,CAAC,OAAA,EAAA,EAAQ,EAAA,EAAG,QAAA,EAAS,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,4BAC7BA,GAAAA,CAAC,OAAA,EAAA,EAAQ,EAAA,EAAG,UAAS,QAAA,EAAA,mBAAA,EAAiB;AAAA;AAAA;AAAA,OACxC;AAAA,MACC,MAAA,oBACCA,GAAAA,CAACC,MAAAA,EAAA,EAAO,OAAA,EAAQ,QAAA,EAAS,OAAA,EAAS,MAAM,MAAA,CAAO,MAAM,CAAA,EAAG,QAAA,EAAA,WAAA,EAExD;AAAA,KAAA,EAEJ,CAAA;AAAA,IAEC,UAAA,KAAe,QAAA,mBACdD,GAAAA,CAAC,YAAA,EAAA,EAAa,MAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,CAAA,mBAEhDD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EAEb,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,WAAU,gBAAA,EAC7B,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EACZ,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,yBACfD,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,qBAAA;AAAA,UACV,SAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAa,CAAC,CAAA,KAAM,kBAAA,CAAmB,GAAG,IAAI,CAAA;AAAA,UAC9C,SAAS,MAAM;AACb,YAAA,MAAA,CAAO,WAAA,CAAY,MAAA,EAAQ,WAAA,CAAY,IAAI,CAAC,CAAC,CAAA;AAC7C,YAAA,gBAAA,CAAiB,MAAA,CAAO,WAAW,MAAM,CAAA;AAAA,UAC3C,CAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAC,GAAAA,CAAC,UAAK,SAAA,EAAU,sBAAA,EAAuB,eAAW,IAAA,EAC/C,QAAA,EAAA,KAAA,CAAM,IAAI,CAAA,IAAK,cAAA,EAClB,CAAA;AAAA,YACC,kBAAkB,IAAI;AAAA;AAAA,SAAA;AAAA,QAblB;AAAA,OAeR,GACH,CAAA,EACF,CAAA;AAAA,sBAGAA,GAAAA,CAAC,IAAA,EAAA,EAAK,OAAM,UAAA,EAAW,SAAA,EAAU,iBAC/B,QAAA,kBAAAA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,oBAAA;AAAA,UACV,UAAA,EAAY,CAAC,CAAA,KAAM;AACjB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,YAAA,CAAa,MAAA,CAAO,WAAW,MAAM,CAAA;AAAA,UACvC,CAAA;AAAA,UACA,MAAA,EAAQ,SAAA;AAAA,UAEP,QAAA,EAAA,MAAA,CAAO,UAAA,CAAW,MAAA,KAAW,CAAA,mBAC5BA,GAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,iBAAA;AAAA,cACN,WAAA,EAAY;AAAA;AAAA,WACd,mBAEAA,GAAAA,CAAC,IAAA,EAAA,EAAG,WAAU,oBAAA,EAAqB,IAAA,EAAK,MAAA,EACrC,QAAA,EAAA,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,CAAC,KAAA,EAAO,0BAC7BD,IAAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAU,oBAAA;AAAA,cACV,eAAA,EAAe,kBAAkB,KAAA,IAAS,MAAA;AAAA,cAC1C,iBAAA,EAAiB,cAAc,KAAA,IAAS,MAAA;AAAA,cACxC,SAAA,EAAS,IAAA;AAAA,cACT,WAAA,EAAa,CAAC,CAAA,KAAM,qBAAA,CAAsB,GAAG,KAAK,CAAA;AAAA,cAClD,UAAA,EAAY,CAAC,CAAA,KAAM;AACjB,gBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,gBAAA,YAAA,CAAa,KAAK,CAAA;AAAA,cACpB,CAAA;AAAA,cACA,MAAA,EAAQ,CAAC,CAAA,KAAM;AACb,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,gBAAA,QAAA,CAAS,GAAG,KAAK,CAAA;AAAA,cACnB,CAAA;AAAA,cACA,OAAA,EAAS,MAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,cAErC,QAAA,EAAA;AAAA,gCAAAC,GAAAA,CAAC,UAAK,SAAA,EAAU,kBAAA,EACb,4BAAkB,KAAA,CAAM,IAAwB,CAAA,IAAK,KAAA,CAAM,IAAA,EAC9D,CAAA;AAAA,gCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EACb,2BAAiB,KAAA,CAAM,IAAI,CAAA,GACxB,KAAA,CAAM,QAAQ,QAAA,GACd,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,OAAO,QAAA,EAClC,CAAA;AAAA,gCACAA,GAAAA;AAAA,kBAACC,MAAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,SAAA,EAAU,oBAAA;AAAA,oBACV,YAAA,EAAW,gBAAA;AAAA,oBACX,SAAS,MAAM;AACb,sBAAA,MAAA,CAAO,aAAA,CAAc,MAAA,EAAQ,KAAK,CAAC,CAAA;AACnC,sBAAA,IAAI,aAAA,KAAkB,KAAA,EAAO,gBAAA,CAAiB,IAAI,CAAA;AAAA,oBACpD,CAAA;AAAA,oBACD,QAAA,EAAA;AAAA;AAAA;AAED;AAAA,aAAA;AAAA,YAnCK,MAAM,EAAA,IAAM;AAAA,WAqCpB,CAAA,EACH;AAAA;AAAA,OAEJ,EACF,CAAA;AAAA,sBAGAD,IAAC,IAAA,EAAA,EAAK,KAAA,EAAM,iBAAgB,SAAA,EAAU,cAAA,EACnC,0CACCA,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAA;AAAA,UACP,OAAA,EAAS,aAAA;AAAA,UACT,QAAA,EAAU;AAAA;AAAA,0BAGZA,GAAAA,CAAC,OAAE,SAAA,EAAU,oBAAA,EAAqB,sCAAqB,CAAA,EAE3D,CAAA;AAAA,sBAGAA,GAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,UAAA,EAAW,WAAU,gBAAA,EAC9B,QAAA,EAAA,MAAA,CAAO,UAAA,CAAW,MAAA,KAAW,CAAA,mBAC5BA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oBAAA,EAAqB,QAAA,EAAA,oBAAA,EAAkB,CAAA,mBAEpDA,IAAC,YAAA,EAAA,EAAa,MAAA,EAAgB,WAAA,EAAa,IAAA,EAAM,CAAA,EAErD;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAIA,IAAM,EAAA,GAAK,CAAC,QAAA,qBACVA,GAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,OAAA,EAAQ,WAAA;AAAA,IACR,KAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAO,IAAA;AAAA,IACP,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAc,OAAA;AAAA,IACd,cAAA,EAAe,OAAA;AAAA,IAEd;AAAA;AACH,CAAA;AAGF,IAAM,cAAA,GAA4B,EAAA,iBAAGA,GAAAA,CAAC,UAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,OAAM,CAAE,CAAA;AAEzF,IAAM,KAAA,GAAsD;AAAA,EAC1D,SAAA,EAAW,EAAA;AAAA,oBACTD,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,KAAA,EAAM,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,GAAA,EAAI,EAAA,EAAG,KAAA,EAAM,CAAA;AAAA,sBACnDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW;AAAA,KAAA,EACrB;AAAA,GACF;AAAA,EACA,QAAA,EAAU,EAAA;AAAA,oBACRD,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,KAAA,EAAM,CAAA;AAAA,sBAClDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6BAAA,EAA8B;AAAA,KAAA,EACxC;AAAA,GACF;AAAA,EACA,QAAQ,EAAA,iBAAGA,IAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yDAAwD,CAAE,CAAA;AAAA,EAC7E,QAAA,EAAU,EAAA;AAAA,oBACRD,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,KAAA,EAAM,CAAA,EAAE,KAAA,EAAM,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,KAAA,EAAM,CAAA;AAAA,sBACtDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0BAAA,EAA2B;AAAA,KAAA,EACrC;AAAA,GACF;AAAA,EACA,SAAA,EAAW,EAAA;AAAA,oBACTD,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+BAAA,EAAgC,CAAA;AAAA,sBACxCA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,kEAAA,EAAmE;AAAA,KAAA,EAC7E;AAAA,GACF;AAAA,EACA,KAAA,EAAO,EAAA;AAAA,oBACLD,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAC,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,KAAI,EAAA,EAAG,GAAA,EAAI,GAAE,KAAA,EAAM,CAAA;AAAA,sBAC9BA,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,CAAA,EAAE,KAAA,EAAM,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO;AAAA,KAAA,EAClE;AAAA,GACF;AAAA,EACA,MAAA,EAAQ,EAAA;AAAA,oBACND,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,GAAA,EAAI,EAAA,EAAG,KAAA,EAAM,CAAA;AAAA,sBACjDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qBAAA,EAAsB;AAAA,KAAA,EAChC;AAAA,GACF;AAAA,EACA,QAAA,EAAU,EAAA;AAAA,oBACRD,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,MAAA,EAAO,CAAA,EAAE,MAAA,EAAO,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,MAAA,EAAO,EAAA,EAAG,KAAA,EAAM,CAAA;AAAA,sBAC5DA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iCAAA,EAAkC;AAAA,KAAA,EAC5C;AAAA,GACF;AAAA,EACA,OAAA,EAAS,EAAA;AAAA,oBACPD,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2CAAA,EAA4C,CAAA;AAAA,sBACpDA,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,KAAA,EAAM,EAAA,EAAG,KAAA,EAAM,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO;AAAA,KAAA,EACpE;AAAA,GACF;AAAA,EACA,MAAM,EAAA,iBAAGA,IAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yBAAwB,CAAE,CAAA;AAAA,EAC3C,WAAW,EAAA,iBAAGA,IAAC,MAAA,EAAA,EAAK,CAAA,EAAE,aAAY,CAAE,CAAA;AAAA,EACpC,MAAA,EAAQ,EAAA;AAAA,oBACND,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU,CAAA;AAAA,sBAClBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2CAAA,EAA4C;AAAA,KAAA,EACtD;AAAA;AAEJ,CAAA;AAIA,SAAS,eAAA,CAAgB;AAAA,EACvB,KAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,cAAA,GAAiB,gBAAA,CAAiB,KAAA,CAAM,IAAI,CAAA;AAClD,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAEtC,EAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,cAAA,GACC,KAAA,CAAM,IAAA,KAAS,MAAA,oBACbC,GAAAA;AAAA,MAACE,SAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO,MAAM,IAAA,IAAQ,EAAA;AAAA,QACrB,UAAU,CAAC,CAAA,KAAM,QAAQ,EAAE,IAAA,EAAM,GAAG;AAAA;AAAA,KACtC,mBAGFH,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAC,GAAAA;AAAA,QAACE,SAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO,MAAM,KAAA,IAAS,EAAA;AAAA,UACtB,UAAU,CAAC,CAAA,KAAM,QAAQ,EAAE,KAAA,EAAO,GAAG;AAAA;AAAA,OACvC;AAAA,sBACAF,GAAAA;AAAA,QAACE,SAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,oBAAA;AAAA,UACN,KAAA,EAAO,MAAM,GAAA,IAAO,EAAA;AAAA,UACpB,UAAU,CAAC,CAAA,KAAM,QAAQ,EAAE,GAAA,EAAK,GAAG;AAAA;AAAA,OACrC;AAAA,sBACAF,GAAAA;AAAA,QAACE,SAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,cAAA;AAAA,UACN,KAAA,EAAO,MAAM,WAAA,IAAe,EAAA;AAAA,UAC5B,UAAU,CAAC,CAAA,KAAM,QAAQ,EAAE,WAAA,EAAa,GAAG;AAAA;AAAA,OAC7C;AAAA,sBAGAF,GAAAA;AAAA,QAACG,QAAAA;AAAA,QAAA;AAAA,UACC,UAAA,EAAY,OAAA,CAAQ,KAAA,CAAM,QAAA,EAAU,QAAQ,CAAA;AAAA,UAC5C,QAAA,EAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,EAAE,QAAA,EAAU,EAAE,GAAG,KAAA,CAAM,QAAA,EAAU,QAAA,EAAU,CAAA,IAAK,CAAA;AAAA,UAC1E,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,MAEC,MAAM,IAAA,KAAS,QAAA,oBACdJ,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EACb,QAAA,EAAA;AAAA,wBAAAC,GAAAA;AAAA,UAACI,WAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,KAAA;AAAA,YACN,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,GAAA,IAAO,MAAA,CAAO,GAAA;AAAA,YACrC,QAAA,EAAU,CAAC,CAAA,KACT,OAAA,CAAQ;AAAA,cACN,QAAA,EAAU,EAAE,GAAG,KAAA,CAAM,QAAA,EAAU,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,GAAY,CAAA;AAAE,aACrE;AAAA;AAAA,SAEL;AAAA,wBACAJ,GAAAA;AAAA,UAACI,WAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,KAAA;AAAA,YACN,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,GAAA,IAAO,MAAA,CAAO,GAAA;AAAA,YACrC,QAAA,EAAU,CAAC,CAAA,KACT,OAAA,CAAQ;AAAA,cACN,QAAA,EAAU,EAAE,GAAG,KAAA,CAAM,QAAA,EAAU,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,GAAY,CAAA;AAAE,aACrE;AAAA;AAAA;AAEL,OAAA,EACF,CAAA;AAAA,MAAA,CAGA,KAAA,CAAM,IAAA,KAAS,WAAA,IAAe,KAAA,CAAM,IAAA,KAAS,+BAC7CL,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,wBAAAC,GAAAA;AAAA,UAACI,WAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,eAAA;AAAA,YACN,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,SAAA,IAAa,MAAA,CAAO,GAAA;AAAA,YAC3C,QAAA,EAAU,CAAC,CAAA,KACT,OAAA,CAAQ;AAAA,cACN,QAAA,EAAU;AAAA,gBACR,GAAG,KAAA,CAAM,QAAA;AAAA,gBACT,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,CAAC,IAAI,MAAA,GAAY;AAAA;AAC3C,aACD;AAAA;AAAA,SAEL;AAAA,wBACAJ,GAAAA;AAAA,UAACI,WAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,eAAA;AAAA,YACN,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,SAAA,IAAa,MAAA,CAAO,GAAA;AAAA,YAC3C,QAAA,EAAU,CAAC,CAAA,KACT,OAAA,CAAQ;AAAA,cACN,QAAA,EAAU;AAAA,gBACR,GAAG,KAAA,CAAM,QAAA;AAAA,gBACT,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,CAAC,IAAI,MAAA,GAAY;AAAA;AAC3C,aACD;AAAA;AAAA;AAEL,OAAA,EACF,CAAA;AAAA,MAGD,KAAA,CAAM,IAAA,KAAS,WAAA,oBACdJ,GAAAA;AAAA,QAACE,SAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,iBAAA;AAAA,UACN,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,EAAA;AAAA,UAClC,QAAA,EAAU,CAAC,CAAA,KACT,OAAA,CAAQ,EAAE,QAAA,EAAU,EAAE,GAAG,KAAA,CAAM,QAAA,EAAU,OAAA,EAAS,CAAA,IAAK,MAAA,IAAa;AAAA;AAAA,OAExE;AAAA,sBAGFF,GAAAA;AAAA,QAACE,SAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,4CAAA;AAAA,UACN,WAAA,EAAY,+BAAA;AAAA,UACZ,KAAA,EAAO,KAAA,CAAM,WAAA,EAAa,IAAA,IAAQ,EAAA;AAAA,UAClC,QAAA,EAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,EAAE,WAAA,EAAa,EAAE,IAAA,EAAM,CAAA,IAAK,MAAA,EAAU,EAAG;AAAA;AAAA,OACpE;AAAA,MAEC,4BACCF,GAAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,KAAA,CAAM,MAAA,IAAU,EAAC;AAAA,UAC1B,UAAU,CAAC,MAAA,KAAW,OAAA,CAAQ,EAAE,QAAQ;AAAA;AAAA;AAC1C,KAAA,EAEJ,CAAA;AAAA,oBAGFA,GAAAA,CAACC,MAAAA,EAAA,EAAO,OAAA,EAAQ,UAAS,OAAA,EAAS,QAAA,EAAU,SAAA,EAAU,eAAA,EAAgB,QAAA,EAAA,iBAAA,EAEtE;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,OAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,SAAS,CAAC,CAAA,EAAW,UACzB,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAC,CAAA,EAAG,QAAS,GAAA,KAAQ,CAAA,GAAI,EAAE,GAAG,CAAA,EAAG,GAAG,KAAA,EAAM,GAAI,CAAE,CAAC,CAAA;AACxE,EAAA,uBACEF,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,IAC5C,OAAA,CAAQ,IAAI,CAAC,CAAA,EAAG,sBACfD,IAAAA,CAAC,KAAA,EAAA,EAAY,SAAA,EAAU,kBAAA,EACrB,QAAA,EAAA;AAAA,sBAAAC,GAAAA;AAAA,QAACE,SAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,OAAA;AAAA,UACN,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,QAAA,EAAU,CAAC,CAAA,KAAM,MAAA,CAAO,GAAG,EAAE,KAAA,EAAO,GAAG;AAAA;AAAA,OACzC;AAAA,sBACAF,GAAAA;AAAA,QAACE,SAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,MAAA;AAAA,UACN,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,QAAA,EAAU,CAAC,CAAA,KAAM,MAAA,CAAO,GAAG,EAAE,KAAA,EAAO,GAAG;AAAA;AAAA,OACzC;AAAA,sBACAF,GAAAA;AAAA,QAACC,MAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,OAAA;AAAA,UACR,YAAA,EAAW,kBAAA;AAAA,UACX,OAAA,EAAS,MAAM,QAAA,CAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,GAAA,KAAQ,GAAA,KAAQ,CAAC,CAAC,CAAA;AAAA,UAC9D,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EAAA,EAjBQ,CAkBV,CACD,CAAA;AAAA,oBACDD,GAAAA;AAAA,MAACC,MAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAS,MACP,QAAA,CAAS;AAAA,UACP,GAAG,OAAA;AAAA,UACH,EAAE,KAAA,EAAO,CAAA,OAAA,EAAU,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,CAAA,EAAI,KAAA,EAAO,CAAA,MAAA,EAAS,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,CAAA;AAAG,SAC/E,CAAA;AAAA,QAEJ,QAAA,EAAA;AAAA;AAAA;AAED,GAAA,EACF,CAAA;AAEJ;AAIA,SAAS,YAAA,CAAa;AAAA,EACpB,MAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,SAAA,GAAY,OAAgB,IAAI,CAAA;AACtC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIJ,QAAAA;AAAA,IAC1B;AAAA,GACF;AACA,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAE5D,EAAA,MAAM,aAAA,GAAgB,OAAO,MAAM,CAAA;AAEnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,MAAM,KAAK,YAAA,CAAa,OAAA;AACxB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,SAAA,CAAU,SAAS,CAAA;AACnB,IAAA,WAAA,CAAY,IAAI,CAAA;AAEhB,IAAA,CAAC,YAAY;AACX,MAAA,IAAI;AAGF,QAAA,MAAM,QAAQ,GAAA,CAAI;AAAA;AAAA,UAEhB;AAAA;AAAA,YAA0B;AAAA;AAAwD,SACnF,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAWjB,QAAA,MAAM,MAAO,MAAM;AAAA;AAAA,UACE;AAAA,SACrB;AAOA,QAAA,IAAI,SAAA,EAAW;AAEf,QAAA,MAAM,OAAA,GAAU,IAAI,aAAA,IAAiB,EAAA;AACrC,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,aAAA,EAAe,OAAA;AAAA,UACf,GAAI,aAAA,CAAc;AAAA,SACpB;AACA,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI;AACF,UAAA,MAAA,GAAS,MAAM,IAAI,gBAAA,CAAiB,EAAE,WAAW,EAAA,EAAI,MAAA,EAAQ,YAAY,CAAA;AAAA,QAC3E,CAAA,CAAA,MAAQ;AAIN,UAAA,MAAA,GAAS,MAAM,IAAI,gBAAA,CAAiB;AAAA,YAClC,SAAA,EAAW,EAAA;AAAA,YACX,MAAA,EAAQ,EAAE,aAAA,EAAe,OAAA,EAAS,MAAM,SAAA,EAAW,UAAA,EAAY,EAAC;AAAE,WACnE,CAAA;AAAA,QACH;AACA,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,MAAA,CAAO,OAAA,EAAQ;AACf,UAAA;AAAA,QACF;AACA,QAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,QAAA,MAAA,CAAO,EAAA,CAAG,WAAW,MAAM;AACzB,UAAA,IAAI;AACF,YAAA,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA;AAAA,UAC7B,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF,CAAC,CAAA;AACD,QAAA,IAAI,CAAC,SAAA,EAAW,SAAA,CAAU,OAAO,CAAA;AAIjC,QAAA,MAAA,CAAO,WAAW,MAAM;AACtB,UAAA,IAAI,SAAA,EAAW;AACf,UAAA,MAAM,GAAA,GAAM,EAAA,CAAG,aAAA,CAAc,gBAAgB,CAAA;AAC7C,UAAA,IAAI,OAAO,GAAA,CAAI,QAAA,CAAS,MAAA,KAAW,CAAA,YAAa,OAAO,CAAA;AAAA,QACzD,GAAG,GAAG,CAAA;AAAA,MACR,SAAS,CAAA,EAAG;AACV,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,WAAA,CAAa,CAAA,EAAa,OAAA,IAAW,MAAA,CAAO,CAAC,CAAC,CAAA;AAC9C,UAAA,SAAA,CAAU,OAAO,CAAA;AAAA,QACnB;AAAA,MACF;AAAA,IACF,CAAA,GAAG;AAEH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,MAAA,IAAI;AACF,QAAA,MAAA,EAAQ,OAAA,IAAU;AAAA,MACpB,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,IACtB,CAAA;AAAA,EAGF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA;AAAA,IAAA,MAAA,KAAW,2BACVA,IAAAA,CAAC,UAAO,IAAA,EAAK,UAAA,EAAW,OAAM,4BAAA,EAA0B,QAAA,EAAA;AAAA,MAAA,iJAAA;AAAA,MAGjD,QAAA,GAAW,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,CAAA,GAAM;AAAA,KAAA,EACrC,CAAA;AAAA,IAED,MAAA,KAAW,2BACVC,GAAAA,CAAC,UAAO,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,+CAAA,EAAgD,QAAA,EAAA,sMAAA,EAI1E,CAAA;AAAA,oBAEFA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,YAAA;AAAA,QACL,SAAA,EAAU,oBAAA;AAAA,QACV,aAAA,EAAa;AAAA;AAAA;AAEf,GAAA,EACF,CAAA;AAEJ;AAIA,SAAS,MAAM,KAAA,EAA+C;AAC5D,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AACvC","file":"index.js","sourcesContent":["import type {\n FormField,\n FormFieldOption,\n FormFieldType,\n FormFieldValidation,\n FormSchema,\n TaskFormField,\n} from \"../types\";\n\n/**\n * Camunda-Validierungs-Constraints (`validationConstraints`) auf die\n * form-js-kompatible {@link FormFieldValidation} mappen.\n *\n * Camunda kennt u. a. `required`, `minlength`, `maxlength`, `min`, `max`,\n * `readonly`. Unbekannte Constraints werden ignoriert (best effort).\n */\nfunction mapValidationConstraints(\n constraints: TaskFormField[\"validationConstraints\"],\n): FormFieldValidation | undefined {\n if (!constraints || constraints.length === 0) return undefined;\n const validate: FormFieldValidation = {};\n for (const c of constraints) {\n const name = c.name?.toLowerCase();\n const cfg = c.configuration;\n switch (name) {\n case \"required\":\n validate.required = true;\n break;\n case \"minlength\":\n if (cfg != null && cfg !== \"\") validate.minLength = Number(cfg);\n break;\n case \"maxlength\":\n if (cfg != null && cfg !== \"\") validate.maxLength = Number(cfg);\n break;\n case \"min\":\n if (cfg != null && cfg !== \"\") validate.min = Number(cfg);\n break;\n case \"max\":\n if (cfg != null && cfg !== \"\") validate.max = Number(cfg);\n break;\n default:\n // unbekannte Constraints (z. B. readonly, custom Validator) ignorieren\n break;\n }\n }\n return Object.keys(validate).length > 0 ? validate : undefined;\n}\n\n/** Camunda-`values` (`{ value: label }`) auf {@link FormFieldOption}[] mappen. */\nfunction mapValues(values: TaskFormField[\"values\"]): FormFieldOption[] | undefined {\n if (!values) return undefined;\n const out = Object.entries(values).map(([value, label]) => ({\n value,\n label: label ?? value,\n }));\n return out.length > 0 ? out : undefined;\n}\n\n/** Normalisiert den Camunda-Typnamen (`{ name }` oder String). */\nexport function camundaTypeName(type: TaskFormField[\"type\"]): string {\n if (typeof type === \"string\") return type;\n return type?.name ?? \"string\";\n}\n\n/**\n * Mappt einen Camunda-Typnamen auf den form-js-kompatiblen\n * {@link FormFieldType}. `enum` → `select`, `boolean` → `checkbox`,\n * `date` → `datetime`, `long`/`integer`/`double` → `number`, sonst `textfield`.\n */\nexport function camundaTypeToFieldType(\n field: TaskFormField,\n): FormFieldType {\n const name = camundaTypeName(field.type);\n switch (name) {\n case \"enum\":\n return \"select\";\n case \"boolean\":\n return \"checkbox\";\n case \"date\":\n return \"datetime\";\n case \"long\":\n case \"integer\":\n case \"double\":\n case \"short\":\n return \"number\";\n case \"string\":\n default:\n return \"textfield\";\n }\n}\n\n/** Camunda-Typname → Submit-Variablentyp (`{ value, type }`). */\nexport function camundaSubmitType(name: string): string {\n switch (name) {\n case \"boolean\":\n return \"Boolean\";\n case \"long\":\n case \"integer\":\n case \"short\":\n return \"Integer\";\n case \"double\":\n return \"Double\";\n case \"date\":\n return \"Date\";\n case \"enum\":\n case \"string\":\n default:\n return \"String\";\n }\n}\n\n/**\n * Camunda-7-Task-Form-Felder (`GET /task/{id}/form`) auf das\n * form-js-kompatible {@link FormSchema} mappen.\n *\n * Vorlage: finops `UserTaskFormDialog`-Feldtypen, generalisiert auf alle\n * Camunda-`TaskFormField`-Typen (string/long/boolean/enum/date).\n */\nexport function taskFormToSchema(fields: TaskFormField[]): FormSchema {\n const components: FormField[] = (fields ?? []).map((f) => {\n const type = camundaTypeToFieldType(f);\n const field: FormField = {\n id: f.id,\n key: f.id,\n type,\n label: f.label ?? f.id,\n };\n if (f.defaultValue !== undefined) field.defaultValue = f.defaultValue;\n // Camunda-Typ für verlustfreies Submit-Mapping merken.\n field._camundaType = camundaSubmitType(camundaTypeName(f.type));\n const validate = mapValidationConstraints(f.validationConstraints);\n if (validate) field.validate = validate;\n const values = mapValues(f.values);\n if (values) field.values = values;\n return field;\n });\n\n return {\n type: \"default\",\n components,\n schemaVersion: 1,\n exporter: { name: \"prince-ui-forms\", version: \"0.1.0\" },\n };\n}\n","import type { FormData } from \"../types\";\n\n/**\n * Heuristische Auswertung eines `conditional.hide`-Ausdrucks (FEEL-nah).\n *\n * **Kein echter FEEL-Parser** (siehe Spec §7.2) — wir werten eine sinnvolle\n * Teilmenge aus, die in form-js-Schemata real vorkommt, und geben im Zweifel\n * `false` (nicht verstecken) zurück, damit Felder nie fälschlich verschwinden.\n *\n * Unterstützt:\n * - `=expr` (führendes Gleichheitszeichen wie in form-js)\n * - Variablenreferenzen `foo`, Punkt-Notation `foo.bar`\n * - Literale: `true`/`false`, Zahlen, `\"strings\"`/`'strings'`, `null`\n * - Vergleiche `==`/`=`, `!=`, `>`, `>=`, `<`, `<=`\n * - Negation `not(expr)` / `!expr`\n * - Verknüpfung ` and ` / ` or ` (links-assoziativ, kein Klammer-Parsing)\n * - bloße Truthiness einer Variable (`hide: \"foo\"`)\n */\nexport function evalConditional(\n hideExpr: string | undefined,\n data: FormData,\n): boolean {\n if (!hideExpr) return false;\n let expr = hideExpr.trim();\n if (expr.startsWith(\"=\")) expr = expr.slice(1).trim();\n if (!expr) return false;\n try {\n return Boolean(evalExpr(expr, data));\n } catch {\n // Im Zweifel sichtbar lassen.\n return false;\n }\n}\n\n/** Wertet eine `and`/`or`-Kette aus (links-assoziativ, ohne Klammern). */\nfunction evalExpr(expr: string, data: FormData): unknown {\n const orParts = splitTopLevel(expr, \" or \");\n if (orParts.length > 1) {\n return orParts.some((p) => Boolean(evalExpr(p.trim(), data)));\n }\n const andParts = splitTopLevel(expr, \" and \");\n if (andParts.length > 1) {\n return andParts.every((p) => Boolean(evalExpr(p.trim(), data)));\n }\n return evalComparison(expr.trim(), data);\n}\n\n/** Trennt nur außerhalb von Quotes (rudimentär, ohne Klammertiefe). */\nfunction splitTopLevel(expr: string, sep: string): string[] {\n const out: string[] = [];\n let buf = \"\";\n let quote: string | null = null;\n for (let i = 0; i < expr.length; i++) {\n const ch = expr[i];\n if (quote) {\n buf += ch;\n if (ch === quote) quote = null;\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n buf += ch;\n continue;\n }\n if (expr.startsWith(sep, i)) {\n out.push(buf);\n buf = \"\";\n i += sep.length - 1;\n continue;\n }\n buf += ch;\n }\n out.push(buf);\n return out;\n}\n\nconst COMPARATORS = [\"!=\", \">=\", \"<=\", \"==\", \">\", \"<\", \"=\"] as const;\n\nfunction evalComparison(expr: string, data: FormData): unknown {\n // Negation\n if (expr.toLowerCase().startsWith(\"not(\") && expr.endsWith(\")\")) {\n return !evalExpr(expr.slice(4, -1).trim(), data);\n }\n if (expr.startsWith(\"!\")) {\n return !evalExpr(expr.slice(1).trim(), data);\n }\n\n for (const op of COMPARATORS) {\n const idx = findOperator(expr, op);\n if (idx >= 0) {\n const left = resolveValue(expr.slice(0, idx).trim(), data);\n const right = resolveValue(expr.slice(idx + op.length).trim(), data);\n return compare(left, right, op);\n }\n }\n\n // Keine Operation → bloße Truthiness des Werts.\n return Boolean(resolveValue(expr, data));\n}\n\n/** Findet einen Operator außerhalb von Quotes; `=` nicht als Teil von `!=`/`>=`/`<=`/`==`. */\nfunction findOperator(expr: string, op: string): number {\n let quote: string | null = null;\n for (let i = 0; i <= expr.length - op.length; i++) {\n const ch = expr[i];\n if (quote) {\n if (ch === quote) quote = null;\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (expr.startsWith(op, i)) {\n if (op === \"=\") {\n const prev = expr[i - 1];\n const next = expr[i + 1];\n if (prev === \"!\" || prev === \">\" || prev === \"<\" || prev === \"=\") continue;\n if (next === \"=\") continue;\n }\n return i;\n }\n }\n return -1;\n}\n\nfunction compare(left: unknown, right: unknown, op: string): boolean {\n switch (op) {\n case \"==\":\n case \"=\":\n return looseEq(left, right);\n case \"!=\":\n return !looseEq(left, right);\n case \">\":\n return Number(left) > Number(right);\n case \">=\":\n return Number(left) >= Number(right);\n case \"<\":\n return Number(left) < Number(right);\n case \"<=\":\n return Number(left) <= Number(right);\n default:\n return false;\n }\n}\n\nfunction looseEq(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a == null || b == null) return a == null && b == null;\n return String(a) === String(b);\n}\n\n/** Auflösung eines Tokens: Literal oder Variablenpfad in `data`. */\nfunction resolveValue(token: string, data: FormData): unknown {\n const t = token.trim();\n if (t === \"\") return undefined;\n if (t === \"true\") return true;\n if (t === \"false\") return false;\n if (t === \"null\") return null;\n if (\n (t.startsWith('\"') && t.endsWith('\"')) ||\n (t.startsWith(\"'\") && t.endsWith(\"'\"))\n ) {\n return t.slice(1, -1);\n }\n if (/^-?\\d+(\\.\\d+)?$/.test(t)) return Number(t);\n // Variablenpfad (Punkt-Notation).\n return getPath(data, t);\n}\n\n/** Liest einen Punkt-Pfad (`a.b.c`) aus einem Objekt. */\nexport function getPath(obj: unknown, path: string): unknown {\n if (!path) return undefined;\n const parts = path.split(\".\");\n let cur: unknown = obj;\n for (const part of parts) {\n if (cur == null || typeof cur !== \"object\") return undefined;\n cur = (cur as Record<string, unknown>)[part];\n }\n return cur;\n}\n\n/** Setzt einen Punkt-Pfad (`a.b.c`) in einem Objekt (mutierend, mit Auto-Nesting). */\nexport function setPath(obj: Record<string, unknown>, path: string, value: unknown): void {\n const parts = path.split(\".\");\n let cur: Record<string, unknown> = obj;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i] as string;\n if (typeof cur[part] !== \"object\" || cur[part] === null) {\n cur[part] = {};\n }\n cur = cur[part] as Record<string, unknown>;\n }\n cur[parts[parts.length - 1] as string] = value;\n}\n","import type { FormField, FormFieldType, FormSchema } from \"../types\";\n\n/** Feldtypen ohne Datenbindung (rein präsentationell). */\nexport const PRESENTATIONAL_TYPES: ReadonlySet<FormFieldType> = new Set([\n \"text\",\n \"spacer\",\n \"separator\",\n \"button\",\n \"group\",\n]);\n\n/** Hat das Feld eine Datenbindung (`key` + nicht rein präsentationell)? */\nexport function isDataField(field: FormField): boolean {\n return !PRESENTATIONAL_TYPES.has(field.type) && typeof field.key === \"string\" && field.key !== \"\";\n}\n\n/**\n * Flacht ein Schema (inkl. verschachtelter `group`-Felder) zu einer\n * flachen Liste ab — in Dokumentreihenfolge.\n */\nexport function flattenFields(schema: FormSchema): FormField[] {\n const out: FormField[] = [];\n const walk = (fields: FormField[] | undefined) => {\n if (!fields) return;\n for (const f of fields) {\n out.push(f);\n if (f.type === \"group\" && Array.isArray(f.components)) {\n walk(f.components);\n }\n }\n };\n walk(schema.components);\n return out;\n}\n\n/** Alle datentragenden Felder eines Schemas (flach). */\nexport function dataFields(schema: FormSchema): FormField[] {\n return flattenFields(schema).filter(isDataField);\n}\n","import type { CamundaVariables, FormData, FormField, FormSchema } from \"../types\";\nimport { evalConditional, getPath } from \"./conditional\";\nimport { camundaTypeName } from \"./task-form\";\nimport { dataFields } from \"./schema\";\n\n/** Leitet den Camunda-Variablentyp aus einem JS-Wert ab. */\nexport function camundaTypeOf(value: unknown): string {\n if (typeof value === \"boolean\") return \"Boolean\";\n if (typeof value === \"number\") {\n return Number.isInteger(value) ? \"Integer\" : \"Double\";\n }\n if (value instanceof Date) return \"Date\";\n if (value !== null && typeof value === \"object\") return \"Json\";\n return \"String\";\n}\n\n/**\n * Bevorzugt den im Schema/Camunda deklarierten Typ eines Feldes, fällt\n * sonst auf die Wert-Heuristik zurück.\n */\nfunction camundaTypeForField(field: FormField | undefined, value: unknown): string {\n if (field) {\n // Falls das Feld aus einem Camunda-TaskForm stammt, kann `_camundaType`\n // (oder ein deklarierter Typ) gesetzt sein — best effort.\n const declared = field._camundaType;\n if (typeof declared === \"string\" && declared) return declared;\n switch (field.type) {\n case \"number\":\n return camundaTypeOf(typeof value === \"number\" ? value : Number(value));\n case \"checkbox\":\n return \"Boolean\";\n case \"datetime\":\n return \"Date\";\n default:\n break;\n }\n }\n return camundaTypeOf(value);\n}\n\n/**\n * Wandelt Formulardaten in das Camunda-7-Submit-Variablenformat\n * `{ name: { value, type } }` (siehe finops `submitTaskForm`).\n *\n * Mit Schema werden nur **sichtbare datentragende Felder** übernommen und der\n * Typ wird – wo möglich – aus dem Feld abgeleitet. Ohne Schema werden alle\n * Top-Level-Einträge der Daten gemappt (Typ per Heuristik).\n */\nexport function formDataToCamundaVariables(\n data: FormData,\n schema?: FormSchema,\n): CamundaVariables {\n const out: CamundaVariables = {};\n\n if (schema) {\n for (const field of dataFields(schema)) {\n if (evalConditional(field.conditional?.hide, data)) continue;\n const key = field.key as string;\n const value = getPath(data, key);\n if (value === undefined) continue;\n out[key] = { value, type: camundaTypeForField(field, value) };\n }\n return out;\n }\n\n for (const [key, value] of Object.entries(data ?? {})) {\n if (value === undefined) continue;\n out[key] = { value, type: camundaTypeOf(value) };\n }\n return out;\n}\n","import type { FormData, FormField, FormSchema } from \"../types\";\nimport { evalConditional, getPath } from \"./conditional\";\nimport { dataFields } from \"./schema\";\n\n/** Standard-Fehlermeldungen (deutsch). Pro Feld überschreibbar wäre denkbar. */\nexport const VALIDATION_MESSAGES = {\n required: \"Dieses Feld ist erforderlich.\",\n min: (min: number) => `Wert muss mindestens ${min} sein.`,\n max: (max: number) => `Wert darf höchstens ${max} sein.`,\n minLength: (n: number) => `Mindestens ${n} Zeichen erforderlich.`,\n maxLength: (n: number) => `Höchstens ${n} Zeichen erlaubt.`,\n pattern: \"Eingabe entspricht nicht dem erwarteten Format.\",\n};\n\nfunction isEmpty(value: unknown): boolean {\n return (\n value === undefined ||\n value === null ||\n value === \"\" ||\n (Array.isArray(value) && value.length === 0)\n );\n}\n\n/** Validiert ein einzelnes Feld gegen seinen Wert; liefert Fehlermeldungen. */\nexport function validateField(field: FormField, value: unknown): string[] {\n const errors: string[] = [];\n const v = field.validate;\n if (!v) return errors;\n\n if (v.required && isEmpty(value)) {\n errors.push(VALIDATION_MESSAGES.required);\n // Bei leerem Pflichtfeld sind weitere Constraints nicht aussagekräftig.\n return errors;\n }\n if (isEmpty(value)) return errors;\n\n if (typeof v.min === \"number\" && Number(value) < v.min) {\n errors.push(VALIDATION_MESSAGES.min(v.min));\n }\n if (typeof v.max === \"number\" && Number(value) > v.max) {\n errors.push(VALIDATION_MESSAGES.max(v.max));\n }\n const str = typeof value === \"string\" ? value : String(value);\n if (typeof v.minLength === \"number\" && str.length < v.minLength) {\n errors.push(VALIDATION_MESSAGES.minLength(v.minLength));\n }\n if (typeof v.maxLength === \"number\" && str.length > v.maxLength) {\n errors.push(VALIDATION_MESSAGES.maxLength(v.maxLength));\n }\n if (v.pattern) {\n try {\n if (!new RegExp(v.pattern).test(str)) {\n errors.push(VALIDATION_MESSAGES.pattern);\n }\n } catch {\n // Ungültiges Pattern → nicht blockieren.\n }\n }\n return errors;\n}\n\n/**\n * Validiert ein komplettes Formular gegen seine Daten. **Versteckte Felder**\n * (`conditional.hide` truthy) werden übersprungen. Liefert `{ key: messages[] }`\n * nur für Felder mit Fehlern.\n */\nexport function validateForm(\n schema: FormSchema,\n data: FormData,\n): Record<string, string[]> {\n const errors: Record<string, string[]> = {};\n for (const field of dataFields(schema)) {\n if (evalConditional(field.conditional?.hide, data)) continue;\n const key = field.key as string;\n const fieldErrors = validateField(field, getPath(data, key));\n if (fieldErrors.length > 0) errors[key] = fieldErrors;\n }\n return errors;\n}\n","import {\n useCallback,\n useMemo,\n useState,\n type FormEvent,\n type ReactNode,\n} from \"react\";\nimport {\n Button,\n Checkbox,\n CheckboxGroup,\n ComboBox,\n ComboBoxItem,\n DatePicker,\n DescriptionList,\n Field,\n Form,\n NumberField,\n RadioGroup,\n Radio,\n Select,\n SelectItem,\n Separator,\n Switch,\n TagGroup,\n Tag,\n TextField,\n} from \"prince-ui\";\nimport type {\n CamundaVariables,\n FormData,\n FormField,\n FormSchema,\n FormSubmitResult,\n} from \"../types\";\nimport { CalendarDate, parseDate } from \"@internationalized/date\";\nimport { evalConditional, getPath, setPath } from \"../model/conditional\";\nimport { dataFields, isDataField } from \"../model/schema\";\nimport { validateForm } from \"../model/validation\";\nimport { formDataToCamundaVariables } from \"../model/camunda\";\nimport \"./FormRenderer.css\";\n\nexport type SubmitVariableFormat = \"camunda\" | \"plain\";\n\nexport interface FormRendererSubmit {\n /** Roh-Formulardaten (`key -> value`, mit Nesting). */\n data: FormData;\n /** Validierungsfehler je Feld-Key (leer = valide). */\n errors: FormSubmitResult[\"errors\"];\n /** Submit-Payload im gewählten Format (Default Camunda `{name:{value,type}}`). */\n variables: CamundaVariables | FormData;\n}\n\nexport interface FormRendererProps {\n /** form-js-kompatibles Schema (`{ type:\"default\", components:[...] }`). */\n schema: FormSchema;\n /** Kontrollierte Daten (`key -> value`). */\n data?: FormData;\n /** Ungesteuerte Anfangsdaten. */\n defaultData?: FormData;\n /** Datenänderungen (für controlled-Nutzung). */\n onChange?: (data: FormData) => void;\n /** Submit-Callback; erhält Daten, Validierungsfehler und Submit-Variablen. */\n onSubmit?: (result: FormRendererSubmit) => void;\n /** Read-only-Darstellung über `DescriptionList`/`Field`. */\n readOnly?: boolean;\n /** Submit-Variablenformat (Default `camunda`). */\n submitVariableFormat?: SubmitVariableFormat;\n /** Label des Submit-Buttons (Default „Absenden\"). `null` → kein Button. */\n submitLabel?: ReactNode;\n /** Zusätzlicher Aktions-Slot neben dem Submit-Button. */\n actionsSlot?: ReactNode;\n className?: string;\n}\n\n/** Initialwerte aus Schema (`defaultValue` + Typ-Defaults) + übergebenen Daten. */\nfunction buildInitialData(schema: FormSchema, seed?: FormData): FormData {\n const out: FormData = seed ? structuredClone(seed) : {};\n for (const field of dataFields(schema)) {\n const key = field.key as string;\n if (getPath(out, key) !== undefined) continue;\n if (field.defaultValue !== undefined) {\n setPath(out, key, field.defaultValue);\n continue;\n }\n switch (field.type) {\n case \"checkbox\":\n setPath(out, key, false);\n break;\n case \"checklist\":\n case \"taglist\":\n setPath(out, key, []);\n break;\n default:\n // Text/Number/Select/Radio/Datetime starten leer.\n break;\n }\n }\n return out;\n}\n\nexport function FormRenderer({\n schema,\n data,\n defaultData,\n onChange,\n onSubmit,\n readOnly = false,\n submitVariableFormat = \"camunda\",\n submitLabel = \"Absenden\",\n actionsSlot,\n className,\n}: FormRendererProps) {\n const isControlled = data !== undefined;\n const [internal, setInternal] = useState<FormData>(() =>\n buildInitialData(schema, isControlled ? data : defaultData),\n );\n const values = isControlled ? data : internal;\n\n const [errors, setErrors] = useState<FormSubmitResult[\"errors\"]>({});\n const [submitted, setSubmitted] = useState(false);\n\n const setValue = useCallback(\n (key: string, value: unknown) => {\n const next = structuredClone(values);\n setPath(next, key, value);\n if (!isControlled) setInternal(next);\n onChange?.(next);\n // Live-Revalidierung nach erstem Submit-Versuch.\n if (submitted) setErrors(validateForm(schema, next));\n },\n [values, isControlled, onChange, submitted, schema],\n );\n\n const handleSubmit = useCallback(\n (e: FormEvent) => {\n e.preventDefault();\n const errs = validateForm(schema, values);\n setErrors(errs);\n setSubmitted(true);\n const variables =\n submitVariableFormat === \"camunda\"\n ? formDataToCamundaVariables(values, schema)\n : values;\n onSubmit?.({ data: values, errors: errs, variables });\n },\n [schema, values, submitVariableFormat, onSubmit],\n );\n\n // Sichtbarkeit je Feld (conditional.hide) — memoisiert pro Render.\n const isHidden = useCallback(\n (field: FormField) => evalConditional(field.conditional?.hide, values),\n [values],\n );\n\n if (readOnly) {\n return (\n <ReadOnlyForm\n schema={schema}\n values={values}\n isHidden={isHidden}\n className={className}\n />\n );\n }\n\n return (\n <Form\n className={cxForm(className)}\n onSubmit={handleSubmit}\n validationBehavior=\"aria\"\n data-prn-form-renderer=\"\"\n >\n <div className=\"prn-form-fields\">\n {schema.components.map((field, i) => (\n <FieldRenderer\n key={field.id ?? field.key ?? `${field.type}-${i}`}\n field={field}\n values={values}\n errors={errors}\n isHidden={isHidden}\n setValue={setValue}\n />\n ))}\n </div>\n {(submitLabel !== null || actionsSlot) && (\n <div className=\"prn-form-actions\">\n {actionsSlot}\n {submitLabel !== null && (\n <Button type=\"submit\" variant=\"filled\">\n {submitLabel}\n </Button>\n )}\n </div>\n )}\n </Form>\n );\n}\n\nfunction cxForm(className?: string): string {\n return className ? `prn-form-renderer ${className}` : \"prn-form-renderer\";\n}\n\n/* ---------------- Read-only ---------------- */\n\nfunction ReadOnlyForm({\n schema,\n values,\n isHidden,\n className,\n}: {\n schema: FormSchema;\n values: FormData;\n isHidden: (f: FormField) => boolean;\n className?: string;\n}) {\n const fields = dataFields(schema).filter((f) => !isHidden(f));\n return (\n <div className={cxForm(className)} data-prn-form-readonly=\"\">\n <DescriptionList layout=\"stacked\">\n {fields.map((field) => {\n const key = field.key as string;\n return (\n <Field\n key={field.id ?? key}\n label={field.label ?? key}\n value={formatReadOnly(field, getPath(values, key))}\n />\n );\n })}\n </DescriptionList>\n </div>\n );\n}\n\nfunction formatReadOnly(field: FormField, value: unknown): ReactNode {\n if (value === undefined || value === null || value === \"\") return \"—\";\n if (typeof value === \"boolean\") return value ? \"Ja\" : \"Nein\";\n if (Array.isArray(value)) {\n const labels = value.map((v) => optionLabel(field, v));\n return labels.length ? labels.join(\", \") : \"—\";\n }\n if (field.values) return optionLabel(field, value);\n return String(value);\n}\n\nfunction optionLabel(field: FormField, value: unknown): string {\n const opt = field.values?.find((o) => o.value === String(value));\n return opt?.label ?? String(value);\n}\n\n/* ---------------- Field dispatch ---------------- */\n\ninterface FieldRendererProps {\n field: FormField;\n values: FormData;\n errors: FormSubmitResult[\"errors\"];\n isHidden: (f: FormField) => boolean;\n setValue: (key: string, value: unknown) => void;\n}\n\nfunction FieldRenderer({ field, values, errors, isHidden, setValue }: FieldRendererProps) {\n if (isHidden(field)) return null;\n\n switch (field.type) {\n case \"group\":\n return (\n <fieldset className=\"prn-form-group\">\n {field.label && <legend className=\"prn-form-group-legend\">{field.label}</legend>}\n {(field.components ?? []).map((child, i) => (\n <FieldRenderer\n key={child.id ?? child.key ?? `${child.type}-${i}`}\n field={child}\n values={values}\n errors={errors}\n isHidden={isHidden}\n setValue={setValue}\n />\n ))}\n </fieldset>\n );\n case \"text\":\n return <div className=\"prn-form-text\">{field.text ?? field.label}</div>;\n case \"separator\":\n return <Separator className=\"prn-form-separator\" />;\n case \"spacer\":\n return <div className=\"prn-form-spacer\" aria-hidden />;\n case \"button\":\n return null; // Submit-Button wird zentral gerendert.\n default:\n return (\n <DataFieldRenderer\n field={field}\n values={values}\n errors={errors}\n setValue={setValue}\n />\n );\n }\n}\n\nfunction DataFieldRenderer({\n field,\n values,\n errors,\n setValue,\n}: Omit<FieldRendererProps, \"isHidden\">) {\n if (!isDataField(field)) return null;\n const key = field.key as string;\n const value = getPath(values, key);\n const error = errors[key]?.[0];\n const label = field.label ?? key;\n const required = field.validate?.required;\n const options = field.values ?? [];\n\n const commonField = {\n label,\n description: field.description,\n errorMessage: error,\n isInvalid: Boolean(error),\n isRequired: required,\n } as const;\n\n switch (field.type) {\n case \"textarea\":\n return (\n <TextField\n {...commonField}\n value={value == null ? \"\" : String(value)}\n onChange={(v) => setValue(key, v)}\n />\n );\n case \"number\":\n return (\n <NumberField\n {...commonField}\n value={typeof value === \"number\" ? value : Number.NaN}\n minValue={field.validate?.min}\n maxValue={field.validate?.max}\n onChange={(v) => setValue(key, Number.isNaN(v) ? undefined : v)}\n />\n );\n case \"checkbox\":\n return (\n <Checkbox\n isSelected={Boolean(value)}\n isInvalid={Boolean(error)}\n onChange={(v) => setValue(key, v)}\n >\n {label}\n {required ? \" *\" : \"\"}\n </Checkbox>\n );\n case \"datetime\": {\n // prince-ui DatePicker → de-DE-Format (TT.MM.JJJJ) + Apple-Segmente/Kalender.\n // Wert wird als ISO-Datum (yyyy-mm-dd) gehalten.\n let dateValue: CalendarDate | null = null;\n const raw = value == null ? \"\" : String(value).slice(0, 10);\n if (raw.trim()) {\n try {\n dateValue = parseDate(raw);\n } catch {\n dateValue = null;\n }\n }\n return (\n <DatePicker\n {...commonField}\n value={dateValue}\n onChange={(v) => setValue(key, v ? v.toString() : undefined)}\n />\n );\n }\n case \"select\":\n return (\n <div className=\"prn-form-select-wrap\">\n <Select\n label={label}\n isInvalid={Boolean(error)}\n isRequired={required}\n selectedKey={value == null ? null : String(value)}\n onSelectionChange={(k) => setValue(key, k == null ? undefined : String(k))}\n >\n {options.map((o) => (\n <SelectItem key={o.value} id={o.value} textValue={o.label}>\n {o.label}\n </SelectItem>\n ))}\n </Select>\n {field.description && <div className=\"prn-form-hint\">{field.description}</div>}\n {error && (\n <div className=\"prn-form-error\" role=\"alert\">\n {error}\n </div>\n )}\n </div>\n );\n case \"radio\":\n return (\n <RadioGroup\n {...commonField}\n value={value == null ? null : String(value)}\n onChange={(v) => setValue(key, v)}\n >\n {options.map((o) => (\n <Radio key={o.value} value={o.value}>\n {o.label}\n </Radio>\n ))}\n </RadioGroup>\n );\n case \"checklist\":\n return (\n <CheckboxGroup\n {...commonField}\n value={Array.isArray(value) ? value.map(String) : []}\n onChange={(v) => setValue(key, v)}\n >\n {options.map((o) => (\n <Checkbox key={o.value} value={o.value}>\n {o.label}\n </Checkbox>\n ))}\n </CheckboxGroup>\n );\n case \"taglist\":\n return (\n <TaglistField\n label={label}\n options={options}\n selected={Array.isArray(value) ? value.map(String) : []}\n onChange={(v) => setValue(key, v)}\n error={error}\n />\n );\n case \"textfield\":\n default:\n return (\n <TextField\n {...commonField}\n value={value == null ? \"\" : String(value)}\n onChange={(v) => setValue(key, v)}\n />\n );\n }\n}\n\n/**\n * Taglist: ComboBox zum Hinzufügen + TagGroup zum Entfernen (Mehrfachauswahl\n * aus `values`). Hält Mehrfachwerte als `string[]`.\n */\nfunction TaglistField({\n label,\n options,\n selected,\n onChange,\n error,\n}: {\n label: ReactNode;\n options: { value: string; label: string }[];\n selected: string[];\n onChange: (v: string[]) => void;\n error?: string;\n}) {\n const available = options.filter((o) => !selected.includes(o.value));\n const labelFor = (v: string) => options.find((o) => o.value === v)?.label ?? v;\n return (\n <div className=\"prn-form-taglist\">\n <ComboBox\n label={label}\n errorMessage={error}\n isInvalid={Boolean(error)}\n selectedKey={null}\n onSelectionChange={(k) => {\n if (k != null) onChange([...selected, String(k)]);\n }}\n >\n {available.map((o) => (\n <ComboBoxItem key={o.value} id={o.value} textValue={o.label}>\n {o.label}\n </ComboBoxItem>\n ))}\n </ComboBox>\n {selected.length > 0 && (\n <TagGroup\n aria-label={`${String(label)} Auswahl`}\n onRemove={(keys) => onChange(selected.filter((s) => !keys.has(s)))}\n >\n {selected.map((v) => (\n <Tag key={v} id={v}>\n {labelFor(v)}\n </Tag>\n ))}\n </TagGroup>\n )}\n </div>\n );\n}\n","import type { FormField, FormFieldType, FormSchema } from \"../types\";\n\n/** Im Builder anlegbare Feldtypen (Palette). */\nexport const BUILDER_FIELD_TYPES = [\n \"textfield\",\n \"textarea\",\n \"number\",\n \"checkbox\",\n \"checklist\",\n \"radio\",\n \"select\",\n \"datetime\",\n \"taglist\",\n \"text\",\n \"separator\",\n \"spacer\",\n] as const;\n\nexport type BuilderFieldType = (typeof BUILDER_FIELD_TYPES)[number];\n\n/** Menschlich lesbare Labels für die Palette. */\nexport const FIELD_TYPE_LABELS: Record<BuilderFieldType, string> = {\n textfield: \"Textfeld\",\n textarea: \"Textbereich\",\n number: \"Zahl\",\n checkbox: \"Checkbox\",\n checklist: \"Checkliste\",\n radio: \"Optionsfeld\",\n select: \"Auswahl\",\n datetime: \"Datum\",\n taglist: \"Tag-Liste\",\n text: \"Text\",\n separator: \"Trennlinie\",\n spacer: \"Abstand\",\n};\n\n/** Feldtypen ohne Datenbindung (kein key/label nötig). */\nconst PRESENTATIONAL: ReadonlySet<FormFieldType> = new Set([\n \"text\",\n \"separator\",\n \"spacer\",\n]);\n\n/** Feldtypen mit Optionsliste. */\nexport const OPTION_TYPES: ReadonlySet<FormFieldType> = new Set([\n \"select\",\n \"radio\",\n \"checklist\",\n \"taglist\",\n]);\n\nexport function isPresentational(type: FormFieldType): boolean {\n return PRESENTATIONAL.has(type);\n}\n\nexport function hasOptions(type: FormFieldType): boolean {\n return OPTION_TYPES.has(type);\n}\n\nlet idCounter = 0;\n/** Eindeutige Feld-ID (form-js-Stil: `Field_xxxx`). */\nexport function generateFieldId(): string {\n idCounter += 1;\n const rand = Math.random().toString(36).slice(2, 8);\n return `Field_${rand}${idCounter}`;\n}\n\n/** Leeres, valides Schema. */\nexport function emptySchema(): FormSchema {\n return {\n type: \"default\",\n components: [],\n schemaVersion: 1,\n exporter: { name: \"prince-ui-forms\", version: \"0.1.0\" },\n };\n}\n\n/** Erzeugt ein neues Feld eines Typs mit sinnvollen Defaults. */\nexport function createField(type: BuilderFieldType): FormField {\n const id = generateFieldId();\n if (isPresentational(type)) {\n if (type === \"text\") return { id, type, text: \"Statischer Text\" };\n return { id, type };\n }\n const field: FormField = {\n id,\n type,\n key: id,\n label: FIELD_TYPE_LABELS[type],\n };\n if (hasOptions(type)) {\n field.values = [\n { value: \"option1\", label: \"Option 1\" },\n { value: \"option2\", label: \"Option 2\" },\n ];\n }\n return field;\n}\n\n/** Fügt ein Feld an Position `index` ein (Default: ans Ende). */\nexport function insertField(\n schema: FormSchema,\n field: FormField,\n index?: number,\n): FormSchema {\n const components = [...schema.components];\n const at = index == null ? components.length : Math.max(0, Math.min(index, components.length));\n components.splice(at, 0, field);\n return { ...schema, components };\n}\n\n/** Entfernt das Feld an Position `index`. */\nexport function removeFieldAt(schema: FormSchema, index: number): FormSchema {\n const components = schema.components.filter((_, i) => i !== index);\n return { ...schema, components };\n}\n\n/** Verschiebt das Feld von `from` nach `to` (Reorder). */\nexport function moveField(schema: FormSchema, from: number, to: number): FormSchema {\n const components = [...schema.components];\n if (from < 0 || from >= components.length) return schema;\n const clampedTo = Math.max(0, Math.min(to, components.length - 1));\n const [moved] = components.splice(from, 1);\n if (moved === undefined) return schema;\n components.splice(clampedTo, 0, moved);\n return { ...schema, components };\n}\n\n/** Aktualisiert das Feld an Position `index` (Merge). */\nexport function updateFieldAt(\n schema: FormSchema,\n index: number,\n patch: Partial<FormField>,\n): FormSchema {\n const components = schema.components.map((f, i) =>\n i === index ? { ...f, ...patch } : f,\n );\n return { ...schema, components };\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type DragEvent,\n type ReactNode,\n} from \"react\";\nimport {\n Button,\n Card,\n Checkbox,\n EmptyState,\n Notice,\n NumberField,\n SegmentedControl,\n Segment,\n Select,\n SelectItem,\n TextField,\n} from \"prince-ui\";\nimport type { FormField, FormFieldOption, FormSchema } from \"../types\";\nimport { FormRenderer } from \"../renderer/FormRenderer\";\nimport {\n BUILDER_FIELD_TYPES,\n FIELD_TYPE_LABELS,\n type BuilderFieldType,\n createField,\n emptySchema,\n hasOptions,\n insertField,\n isPresentational,\n moveField,\n removeFieldAt,\n updateFieldAt,\n} from \"./builder-model\";\nimport \"./FormBuilder.css\";\n\nexport type { BuilderFieldType } from \"./builder-model\";\n\nexport type FormBuilderMode = \"design\" | \"expert\";\n\nexport interface FormBuilderProps {\n /** Kontrolliertes Schema. */\n value?: FormSchema;\n /** Ungesteuertes Anfangs-Schema. */\n defaultValue?: FormSchema;\n /** Schema-Änderungen. */\n onChange?: (schema: FormSchema) => void;\n /** Persistenz-Callback (z. B. ⌘S in der App). */\n onSave?: (schema: FormSchema) => void | Promise<void>;\n /** Editor-Modus: nativer Designer oder form-js-Experten-Fallback. */\n mode?: FormBuilderMode;\n onModeChange?: (mode: FormBuilderMode) => void;\n /** Beschränkt/erweitert die Palette (Default: alle Builder-Feldtypen). */\n fieldTypes?: readonly BuilderFieldType[];\n className?: string;\n}\n\nconst DND_MIME = \"application/x-prn-field-type\";\n\nexport function FormBuilder({\n value,\n defaultValue,\n onChange,\n onSave,\n mode,\n onModeChange,\n fieldTypes = BUILDER_FIELD_TYPES,\n className,\n}: FormBuilderProps) {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<FormSchema>(\n () => value ?? defaultValue ?? emptySchema(),\n );\n const schema = isControlled ? value : internal;\n\n const [modeInternal, setModeInternal] = useState<FormBuilderMode>(mode ?? \"design\");\n const activeMode = mode ?? modeInternal;\n\n const [selectedIndex, setSelectedIndex] = useState<number | null>(null);\n const [dropIndex, setDropIndex] = useState<number | null>(null);\n\n const commit = useCallback(\n (next: FormSchema) => {\n if (!isControlled) setInternal(next);\n onChange?.(next);\n },\n [isControlled, onChange],\n );\n\n const setMode = useCallback(\n (m: FormBuilderMode) => {\n if (mode === undefined) setModeInternal(m);\n onModeChange?.(m);\n },\n [mode, onModeChange],\n );\n\n /* ---- Drag & Drop ---- */\n const dragFrom = useRef<number | null>(null);\n\n const onPaletteDragStart = (e: DragEvent, type: BuilderFieldType) => {\n e.dataTransfer.setData(DND_MIME, type);\n e.dataTransfer.effectAllowed = \"copy\";\n dragFrom.current = null;\n };\n\n const onCanvasItemDragStart = (e: DragEvent, index: number) => {\n e.dataTransfer.setData(DND_MIME, \"__move__\");\n e.dataTransfer.effectAllowed = \"move\";\n dragFrom.current = index;\n };\n\n const onDropAt = (e: DragEvent, index: number) => {\n e.preventDefault();\n const data = e.dataTransfer.getData(DND_MIME);\n setDropIndex(null);\n if (dragFrom.current != null) {\n const next = moveField(schema, dragFrom.current, index);\n commit(next);\n setSelectedIndex(index);\n dragFrom.current = null;\n return;\n }\n if (data && data !== \"__move__\") {\n const field = createField(data as BuilderFieldType);\n commit(insertField(schema, field, index));\n setSelectedIndex(index);\n }\n };\n\n const onDropEnd = (e: DragEvent) => {\n e.preventDefault();\n const data = e.dataTransfer.getData(DND_MIME);\n setDropIndex(null);\n if (dragFrom.current != null) {\n commit(moveField(schema, dragFrom.current, schema.components.length - 1));\n dragFrom.current = null;\n return;\n }\n if (data && data !== \"__move__\") {\n const field = createField(data as BuilderFieldType);\n commit(insertField(schema, field));\n setSelectedIndex(schema.components.length);\n }\n };\n\n const selectedField =\n selectedIndex != null ? schema.components[selectedIndex] : undefined;\n\n const patchSelected = useCallback(\n (patch: Partial<FormField>) => {\n if (selectedIndex == null) return;\n commit(updateFieldAt(schema, selectedIndex, patch));\n },\n [selectedIndex, schema, commit],\n );\n\n const deleteSelected = useCallback(() => {\n if (selectedIndex == null) return;\n commit(removeFieldAt(schema, selectedIndex));\n setSelectedIndex(null);\n }, [selectedIndex, schema, commit]);\n\n return (\n <div className={cx(\"prn-form-builder\", className)} data-mode={activeMode}>\n <div className=\"prn-fb-toolbar\">\n <SegmentedControl\n aria-label=\"Builder-Modus\"\n selectedKeys={new Set([activeMode])}\n onSelectionChange={(keys) => {\n const next = [...keys][0] as FormBuilderMode | undefined;\n if (next) setMode(next);\n }}\n >\n <Segment id=\"design\">Designer</Segment>\n <Segment id=\"expert\">Experte (form-js)</Segment>\n </SegmentedControl>\n {onSave && (\n <Button variant=\"filled\" onPress={() => onSave(schema)}>\n Speichern\n </Button>\n )}\n </div>\n\n {activeMode === \"expert\" ? (\n <ExpertEditor schema={schema} onChange={commit} />\n ) : (\n <div className=\"prn-fb-grid\">\n {/* Palette */}\n <Card title=\"Felder\" className=\"prn-fb-palette\">\n <div className=\"prn-fb-palette-list\">\n {fieldTypes.map((type) => (\n <button\n key={type}\n type=\"button\"\n className=\"prn-fb-palette-item\"\n draggable\n onDragStart={(e) => onPaletteDragStart(e, type)}\n onClick={() => {\n commit(insertField(schema, createField(type)));\n setSelectedIndex(schema.components.length);\n }}\n >\n <span className=\"prn-fb-palette-glyph\" aria-hidden>\n {GLYPH[type] ?? FALLBACK_GLYPH}\n </span>\n {FIELD_TYPE_LABELS[type]}\n </button>\n ))}\n </div>\n </Card>\n\n {/* Canvas */}\n <Card title=\"Formular\" className=\"prn-fb-canvas\">\n <div\n className=\"prn-fb-canvas-drop\"\n onDragOver={(e) => {\n e.preventDefault();\n setDropIndex(schema.components.length);\n }}\n onDrop={onDropEnd}\n >\n {schema.components.length === 0 ? (\n <EmptyState\n title=\"Leeres Formular\"\n description=\"Felder aus der Palette hierher ziehen oder anklicken.\"\n />\n ) : (\n <ul className=\"prn-fb-canvas-list\" role=\"list\">\n {schema.components.map((field, index) => (\n <li\n key={field.id ?? index}\n className=\"prn-fb-canvas-item\"\n data-selected={selectedIndex === index || undefined}\n data-dropbefore={dropIndex === index || undefined}\n draggable\n onDragStart={(e) => onCanvasItemDragStart(e, index)}\n onDragOver={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setDropIndex(index);\n }}\n onDrop={(e) => {\n e.stopPropagation();\n onDropAt(e, index);\n }}\n onClick={() => setSelectedIndex(index)}\n >\n <span className=\"prn-fb-item-type\">\n {FIELD_TYPE_LABELS[field.type as BuilderFieldType] ?? field.type}\n </span>\n <span className=\"prn-fb-item-label\">\n {isPresentational(field.type)\n ? field.text ?? \"—\"\n : field.label ?? field.key ?? \"—\"}\n </span>\n <Button\n variant=\"plain\"\n className=\"prn-fb-item-remove\"\n aria-label=\"Feld entfernen\"\n onPress={() => {\n commit(removeFieldAt(schema, index));\n if (selectedIndex === index) setSelectedIndex(null);\n }}\n >\n ✕\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n </Card>\n\n {/* Properties */}\n <Card title=\"Eigenschaften\" className=\"prn-fb-props\">\n {selectedField ? (\n <PropertiesPanel\n field={selectedField}\n onPatch={patchSelected}\n onDelete={deleteSelected}\n />\n ) : (\n <p className=\"prn-fb-props-empty\">Kein Feld ausgewählt.</p>\n )}\n </Card>\n\n {/* Live-Vorschau */}\n <Card title=\"Vorschau\" className=\"prn-fb-preview\">\n {schema.components.length === 0 ? (\n <p className=\"prn-fb-props-empty\">Noch keine Felder.</p>\n ) : (\n <FormRenderer schema={schema} submitLabel={null} />\n )}\n </Card>\n </div>\n )}\n </div>\n );\n}\n\n/** Einheitliche, monochrome Linien-Icons (SF-Symbols-Anmutung) für die Palette.\n * Erben `currentColor` (= --prn-accent-strong), keine bunten Emojis. */\nconst ic = (children: ReactNode): ReactNode => (\n <svg\n viewBox=\"0 0 16 16\"\n width=\"15\"\n height=\"15\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {children}\n </svg>\n);\n\nconst FALLBACK_GLYPH: ReactNode = ic(<rect x=\"3\" y=\"3\" width=\"10\" height=\"10\" rx=\"2.5\" />);\n\nconst GLYPH: Partial<Record<BuilderFieldType, ReactNode>> = {\n textfield: ic(\n <>\n <rect x=\"2\" y=\"5.5\" width=\"12\" height=\"5\" rx=\"1.5\" />\n <path d=\"M4.5 8h3\" />\n </>,\n ),\n textarea: ic(\n <>\n <rect x=\"2\" y=\"3\" width=\"12\" height=\"10\" rx=\"1.5\" />\n <path d=\"M4.5 6h7M4.5 8.5h7M4.5 11h4\" />\n </>,\n ),\n number: ic(<path d=\"M6 2.5 4.5 13.5M11.5 2.5 10 13.5M2.5 5.5h11M2 10.5h11\" />),\n checkbox: ic(\n <>\n <rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"2.5\" />\n <path d=\"M5.5 8.2l1.8 1.8 3.2-3.6\" />\n </>,\n ),\n checklist: ic(\n <>\n <path d=\"M6 4.5h7.5M6 8h7.5M6 11.5h7.5\" />\n <path d=\"M2.3 4.2l.8.9 1.5-1.7M2.3 7.7l.8.9 1.5-1.7M2.3 11.2l.8.9 1.5-1.7\" />\n </>,\n ),\n radio: ic(\n <>\n <circle cx=\"8\" cy=\"8\" r=\"5.5\" />\n <circle cx=\"8\" cy=\"8\" r=\"2.2\" fill=\"currentColor\" stroke=\"none\" />\n </>,\n ),\n select: ic(\n <>\n <rect x=\"2\" y=\"4\" width=\"12\" height=\"8\" rx=\"1.5\" />\n <path d=\"M6 7.5 8 9.5 10 7.5\" />\n </>,\n ),\n datetime: ic(\n <>\n <rect x=\"2.25\" y=\"3.25\" width=\"11.5\" height=\"10.5\" rx=\"2.5\" />\n <path d=\"M2.25 6.5h11.5M5 2v2.2M11 2v2.2\" />\n </>,\n ),\n taglist: ic(\n <>\n <path d=\"M2.5 7.6V3.6a1 1 0 0 1 1-1h4l6 6-5 5-6-6z\" />\n <circle cx=\"5.4\" cy=\"5.5\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n </>,\n ),\n text: ic(<path d=\"M4 4h8M8 4v8M6.5 12h3\" />),\n separator: ic(<path d=\"M2.5 8h11\" />),\n spacer: ic(\n <>\n <path d=\"M8 3v10\" />\n <path d=\"M5.5 5 8 2.5 10.5 5M5.5 11 8 13.5 10.5 11\" />\n </>,\n ),\n};\n\n/* ---------------- Properties Panel ---------------- */\n\nfunction PropertiesPanel({\n field,\n onPatch,\n onDelete,\n}: {\n field: FormField;\n onPatch: (patch: Partial<FormField>) => void;\n onDelete: () => void;\n}) {\n const presentational = isPresentational(field.type);\n const optioned = hasOptions(field.type);\n\n return (\n <div className=\"prn-fb-props-form\">\n {presentational ? (\n field.type === \"text\" && (\n <TextField\n label=\"Text\"\n value={field.text ?? \"\"}\n onChange={(v) => onPatch({ text: v })}\n />\n )\n ) : (\n <>\n <TextField\n label=\"Label\"\n value={field.label ?? \"\"}\n onChange={(v) => onPatch({ label: v })}\n />\n <TextField\n label=\"Key (Datenbindung)\"\n value={field.key ?? \"\"}\n onChange={(v) => onPatch({ key: v })}\n />\n <TextField\n label=\"Beschreibung\"\n value={field.description ?? \"\"}\n onChange={(v) => onPatch({ description: v })}\n />\n\n {/* Validierung */}\n <Checkbox\n isSelected={Boolean(field.validate?.required)}\n onChange={(v) => onPatch({ validate: { ...field.validate, required: v } })}\n >\n Pflichtfeld\n </Checkbox>\n\n {field.type === \"number\" && (\n <div className=\"prn-fb-props-row\">\n <NumberField\n label=\"Min\"\n value={field.validate?.min ?? Number.NaN}\n onChange={(v) =>\n onPatch({\n validate: { ...field.validate, min: Number.isNaN(v) ? undefined : v },\n })\n }\n />\n <NumberField\n label=\"Max\"\n value={field.validate?.max ?? Number.NaN}\n onChange={(v) =>\n onPatch({\n validate: { ...field.validate, max: Number.isNaN(v) ? undefined : v },\n })\n }\n />\n </div>\n )}\n\n {(field.type === \"textfield\" || field.type === \"textarea\") && (\n <div className=\"prn-fb-props-row\">\n <NumberField\n label=\"Min. Länge\"\n value={field.validate?.minLength ?? Number.NaN}\n onChange={(v) =>\n onPatch({\n validate: {\n ...field.validate,\n minLength: Number.isNaN(v) ? undefined : v,\n },\n })\n }\n />\n <NumberField\n label=\"Max. Länge\"\n value={field.validate?.maxLength ?? Number.NaN}\n onChange={(v) =>\n onPatch({\n validate: {\n ...field.validate,\n maxLength: Number.isNaN(v) ? undefined : v,\n },\n })\n }\n />\n </div>\n )}\n\n {field.type === \"textfield\" && (\n <TextField\n label=\"Pattern (RegEx)\"\n value={field.validate?.pattern ?? \"\"}\n onChange={(v) =>\n onPatch({ validate: { ...field.validate, pattern: v || undefined } })\n }\n />\n )}\n\n <TextField\n label=\"Sichtbar wenn versteckt (conditional.hide)\"\n description='FEEL-nah, z. B. role = \"user\"'\n value={field.conditional?.hide ?? \"\"}\n onChange={(v) => onPatch({ conditional: { hide: v || undefined } })}\n />\n\n {optioned && (\n <OptionsEditor\n options={field.values ?? []}\n onChange={(values) => onPatch({ values })}\n />\n )}\n </>\n )}\n\n <Button variant=\"tinted\" onPress={onDelete} className=\"prn-fb-delete\">\n Feld löschen\n </Button>\n </div>\n );\n}\n\nfunction OptionsEditor({\n options,\n onChange,\n}: {\n options: FormFieldOption[];\n onChange: (options: FormFieldOption[]) => void;\n}) {\n const update = (i: number, patch: Partial<FormFieldOption>) =>\n onChange(options.map((o, idx) => (idx === i ? { ...o, ...patch } : o)));\n return (\n <div className=\"prn-fb-options\">\n <div className=\"prn-fb-options-head\">Optionen</div>\n {options.map((o, i) => (\n <div key={i} className=\"prn-fb-props-row\">\n <TextField\n label=\"Label\"\n value={o.label}\n onChange={(v) => update(i, { label: v })}\n />\n <TextField\n label=\"Wert\"\n value={o.value}\n onChange={(v) => update(i, { value: v })}\n />\n <Button\n variant=\"plain\"\n aria-label=\"Option entfernen\"\n onPress={() => onChange(options.filter((_, idx) => idx !== i))}\n >\n ✕\n </Button>\n </div>\n ))}\n <Button\n variant=\"tinted\"\n onPress={() =>\n onChange([\n ...options,\n { label: `Option ${options.length + 1}`, value: `option${options.length + 1}` },\n ])\n }\n >\n Option hinzufügen\n </Button>\n </div>\n );\n}\n\n/* ---------------- Expert (form-js) fallback ---------------- */\n\nfunction ExpertEditor({\n schema,\n onChange,\n}: {\n schema: FormSchema;\n onChange: (schema: FormSchema) => void;\n}) {\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<unknown>(null);\n const [status, setStatus] = useState<\"loading\" | \"ready\" | \"error\" | \"empty\">(\n \"loading\",\n );\n const [errorMsg, setErrorMsg] = useState<string | null>(null);\n // Schema beim Mount einmal übernehmen; spätere Sync über getSchema() bei Save.\n const initialSchema = useRef(schema);\n\n useEffect(() => {\n let cancelled = false;\n const el = containerRef.current;\n if (!el) return;\n setStatus(\"loading\");\n setErrorMsg(null);\n\n (async () => {\n try {\n // form-js-Editor-CSS laden (optionaler Peer → dynamisch, nur im\n // Experten-Modus). Ohne dieses CSS rendert der Editor leer/unsichtbar.\n await Promise.all([\n // @ts-ignore CSS-Asset ohne Typdeklaration; vom Bundler aufgelöst.\n import(/* @vite-ignore */ \"@bpmn-io/form-js-editor/dist/assets/form-js-editor.css\"),\n ]).catch(() => {});\n // FormEditor lebt im Editor-Paket; das Meta-Paket @bpmn-io/form-js\n // exportiert nur den Viewer (Form) + Playground, KEIN FormEditor.\n // `createFormEditor` ist die Factory, die Editor-Chrome (Palette +\n // Canvas + Properties) tatsächlich rendert — `new FormEditor()` +\n // importSchema allein rendert die Oberfläche nicht zuverlässig.\n type FjsEditor = {\n getSchema: () => FormSchema;\n on: (event: string, cb: () => void) => void;\n destroy: () => void;\n };\n const mod = (await import(\n /* @vite-ignore */ \"@bpmn-io/form-js-editor\"\n )) as unknown as {\n createFormEditor: (opts: {\n container: HTMLElement;\n schema: unknown;\n }) => Promise<FjsEditor>;\n schemaVersion?: number;\n };\n if (cancelled) return;\n // form-js verlangt `schemaVersion` am Schema (sonst rendert es leer).\n const version = mod.schemaVersion ?? 18;\n const baseSchema = {\n schemaVersion: version,\n ...(initialSchema.current as object),\n };\n let editor: FjsEditor;\n try {\n editor = await mod.createFormEditor({ container: el, schema: baseSchema });\n } catch {\n // Schema (z. B. prince-ui-spezifische Feldtypen) inkompatibel →\n // mit leerem, gültigem form-js-Schema starten, damit die Oberfläche\n // (Palette/Canvas/Properties) trotzdem erscheint.\n editor = await mod.createFormEditor({\n container: el,\n schema: { schemaVersion: version, type: \"default\", components: [] },\n });\n }\n if (cancelled) {\n editor.destroy();\n return;\n }\n editorRef.current = editor;\n editor.on(\"changed\", () => {\n try {\n onChange(editor.getSchema());\n } catch {\n /* ignore */\n }\n });\n if (!cancelled) setStatus(\"ready\");\n // Graceful-Check: in manchen Bundler-Umgebungen (doppelte Preact-\n // Instanz unter Vite) mountet form-js eine leere `.fjs-container`\n // ohne Fehler. Statt einer leeren Box dann einen klaren Hinweis zeigen.\n window.setTimeout(() => {\n if (cancelled) return;\n const fjs = el.querySelector(\".fjs-container\");\n if (fjs && fjs.children.length === 0) setStatus(\"empty\");\n }, 800);\n } catch (e) {\n if (!cancelled) {\n setErrorMsg((e as Error)?.message ?? String(e));\n setStatus(\"error\");\n }\n }\n })();\n\n return () => {\n cancelled = true;\n const editor = editorRef.current as { destroy?: () => void } | null;\n try {\n editor?.destroy?.();\n } catch {\n /* ignore */\n }\n editorRef.current = null;\n };\n // Nur einmal mounten; Schema-Bridge bewusst über initialSchema-Ref.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"prn-fb-expert\">\n {status === \"error\" && (\n <Notice tone=\"negative\" title=\"form-js nicht verfügbar\">\n Der Experten-Editor (`@bpmn-io/form-js-editor`) konnte nicht geladen\n werden. Stellen Sie sicher, dass das optionale Peer-Paket installiert\n ist.{errorMsg ? ` (${errorMsg})` : \"\"}\n </Notice>\n )}\n {status === \"empty\" && (\n <Notice tone=\"info\" title=\"Experten-Editor konnte nicht gerendert werden\">\n Der form-js-Editor wurde geladen, aber in dieser Umgebung nicht\n dargestellt (bekanntes Bundler-/Preact-Problem). Nutzen Sie bitte den\n „Designer\"-Modus — er deckt dieselben Funktionen ab.\n </Notice>\n )}\n <div\n ref={containerRef}\n className=\"prn-fb-expert-host\"\n data-status={status}\n // form-js Carbon-CSS best effort über --prn-* übertünchen (nicht pixelgleich).\n />\n </div>\n );\n}\n\n/* ---------------- utils ---------------- */\n\nfunction cx(...parts: (string | false | undefined)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "prince-ui-forms",
3
+ "version": "1.0.1",
4
+ "description": "Schema-getriebener Formular-Renderer und nativer Form-Builder im prince-ui-Look (form-js-kompatibel, form-js-editor als Experten-Fallback).",
5
+ "license": "MIT",
6
+ "private": false,
7
+ "type": "module",
8
+ "sideEffects": [
9
+ "*.css"
10
+ ],
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "main": "./dist/index.js",
15
+ "module": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ },
22
+ "./styles.css": "./dist/index.css",
23
+ "./package.json": "./package.json"
24
+ },
25
+ "dependencies": {
26
+ "@internationalized/date": "3.12.2",
27
+ "prince-ui-tokens": "0.4.0"
28
+ },
29
+ "peerDependencies": {
30
+ "react": ">=18 <20",
31
+ "react-dom": ">=18 <20",
32
+ "@bpmn-io/form-js": "^1.21.0",
33
+ "@bpmn-io/form-js-editor": "^1.21.0",
34
+ "prince-ui": "0.9.2"
35
+ },
36
+ "peerDependenciesMeta": {
37
+ "@bpmn-io/form-js": {
38
+ "optional": true
39
+ },
40
+ "@bpmn-io/form-js-editor": {
41
+ "optional": true
42
+ }
43
+ },
44
+ "devDependencies": {
45
+ "@bpmn-io/form-js": "^1.21.0",
46
+ "@bpmn-io/form-js-editor": "^1.21.0",
47
+ "@bpmn-io/cm-theme": "^0.2.0",
48
+ "@testing-library/jest-dom": "^6.6.3",
49
+ "@testing-library/react": "^16.0.1",
50
+ "@testing-library/user-event": "^14.5.2",
51
+ "@types/react": "^18.3.12",
52
+ "@types/react-dom": "^18.3.1",
53
+ "@vitest/coverage-v8": "^2.1.5",
54
+ "jsdom": "^25.0.1",
55
+ "react": "^18.3.1",
56
+ "react-dom": "^18.3.1",
57
+ "tsup": "^8.3.0",
58
+ "typescript": "^5.6.3",
59
+ "vitest": "^2.1.5",
60
+ "prince-ui": "0.9.2"
61
+ },
62
+ "publishConfig": {
63
+ "registry": "https://registry.npmjs.org"
64
+ },
65
+ "repository": {
66
+ "type": "git",
67
+ "url": "git+https://github.com/conuti-das/prince-ui.git",
68
+ "directory": "packages/forms"
69
+ },
70
+ "scripts": {
71
+ "build": "tsup",
72
+ "dev": "tsup --watch",
73
+ "typecheck": "tsc --noEmit",
74
+ "test": "vitest run",
75
+ "test:watch": "vitest",
76
+ "test:coverage": "vitest run --coverage"
77
+ }
78
+ }