{"version":3,"sources":["../src/components/JsonEditor/JsonEditor.paths.ts","../src/components/JsonEditor/JsonEditor.types.ts","../src/components/JsonEditor/JsonEditor.keymap.ts","../src/components/JsonEditor/JsonEditor.context.ts","../src/components/JsonEditor/JsonEditorValue.tsx","../src/components/JsonEditor/JsonEditorRow.tsx","../src/components/JsonEditor/JsonEditor.tsx"],"names":["resolveOption","createContext","useContext","jsx","Switch","Select","DatePicker","ColorPicker","Textarea","Input","useInlineEdit","DisplayValue","jsxs","cn","Button","Text","Badge","Fragment","useState","forwardRef","JsonEditor","useId","useRef","useMemo","useEffect","useCallback","Callout","issue"],"mappings":";;;;;;;;;;;;;;;;;;;;AAkBO,SAAS,aAAa,KAAA,EAAmD;AAC9E,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEO,SAAS,YAAY,KAAA,EAAkD;AAC5E,EAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5B;AAEO,SAAS,iBAAiB,KAAA,EAAuC;AACtE,EAAA,OAAO,YAAA,CAAa,KAAK,CAAA,IAAK,WAAA,CAAY,KAAK,CAAA;AACjD;AAGO,SAAS,UAAU,IAAA,EAAwB;AAChD,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AAEnB,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,IAAW,IAAA;AACX,MAAA,OAAA,GAAU,KAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,OAAA,GAAU,IAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AACrB,MAAA,OAAA,GAAU,EAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,OAAA,IAAW,IAAA;AAAA,EACb;AAGA,EAAA,IAAI,SAAS,OAAA,IAAW,IAAA;AACxB,EAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAErB,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,aAAa,QAAA,EAA4B;AACvD,EAAA,OAAO,QAAA,CACJ,GAAA,CAAI,CAAC,OAAA,KAAY,QAAQ,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,QAAQ,KAAA,EAAO,KAAK,CAAC,CAAA,CACrE,KAAK,GAAG,CAAA;AACb;AAEO,SAAS,SAAA,CAAU,OAAkB,QAAA,EAA2C;AACrF,EAAA,IAAI,OAAA,GAAiC,KAAA;AAErC,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,WAAA,CAAY,OAAO,CAAA,EAAG;AACxB,MAAA,MAAM,KAAA,GAAQ,OAAO,OAAO,CAAA;AAC5B,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,GAAG,OAAO,MAAA;AACrC,MAAA,OAAA,GAAU,QAAQ,KAAK,CAAA;AAAA,IACzB,CAAA,MAAA,IAAW,YAAA,CAAa,OAAO,CAAA,EAAG;AAChC,MAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,OAAA,EAAS,OAAO,GAAG,OAAO,MAAA;AACpE,MAAA,OAAA,GAAU,QAAQ,OAAO,CAAA;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAA,KAAY,QAAW,OAAO,MAAA;AAAA,EACpC;AAEA,EAAA,OAAO,OAAA;AACT;AAOA,SAAS,eAAA,CACP,KAAA,EACA,QAAA,EACA,OAAA,EACW;AACX,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,IAAI,CAAC,gBAAA,CAAiB,KAAK,CAAA,EAAG,OAAO,KAAA;AACrC,IAAA,MAAM,IAAA,GAAO,QAAQ,KAA+B,CAAA;AACpD,IAAA,OAAO,IAAA,KAAS,SAAY,KAAA,GAAQ,IAAA;AAAA,EACtC;AAEA,EAAA,MAAM,CAAC,IAAA,EAAM,GAAG,IAAI,CAAA,GAAI,QAAA;AAExB,EAAA,IAAI,WAAA,CAAY,KAAK,CAAA,EAAG;AACtB,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,QAAQ,CAAA,IAAK,KAAA,IAAS,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AAC3E,IAAA,MAAM,QAAQ,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAA,EAAI,MAAM,OAAO,CAAA;AAC1D,IAAA,IAAI,KAAA,KAAU,KAAA,CAAM,KAAK,CAAA,EAAG,OAAO,KAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,EAAM;AAC1B,IAAA,KAAA,CAAM,KAAK,CAAA,GAAI,KAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG;AACvB,IAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,KAAA,EAAO,IAAI,GAAG,OAAO,KAAA;AAC/D,IAAA,MAAM,QAAQ,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAA,EAAI,MAAM,OAAO,CAAA;AACzD,IAAA,IAAI,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA,EAAG,OAAO,KAAA;AAClC,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,CAAC,IAAI,GAAG,KAAA,EAAM;AAAA,EACnC;AAEA,EAAA,OAAO,KAAA;AACT;AAWO,SAAS,aAAA,CAAc,OAAkB,IAAA,EAAiC;AAC/E,EAAA,MAAM,QAAA,GAAW,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAEpC,EAAA,QAAQ,KAAK,EAAA;AAAI,IACf,KAAK,KAAA,EAAO;AAEV,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA,CAAK,KAAA;AAEvC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAExC,MAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,MAAA,EAAQ,CAAC,SAAA,KAAc;AACnD,QAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,UAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,UAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,QAAQ,CAAA,IAAK,KAAA,IAAS,SAAA,CAAU,MAAA,EAAQ,OAAO,MAAA;AAC/E,UAAA,MAAM,KAAA,GAAQ,UAAU,KAAA,EAAM;AAC9B,UAAA,KAAA,CAAM,KAAK,IAAI,IAAA,CAAK,KAAA;AACpB,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,OAAO,EAAE,GAAG,SAAA,EAAW,CAAC,GAAG,GAAG,KAAK,KAAA,EAAM;AAAA,MAC3C,CAAC,CAAA;AAAA,IACH;AAAA,IAEA,KAAK,QAAA,EAAU;AACb,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAElC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAExC,MAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,MAAA,EAAQ,CAAC,SAAA,KAAc;AACnD,QAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,UAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,UAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,QAAQ,CAAA,IAAK,KAAA,IAAS,SAAA,CAAU,MAAA,EAAQ,OAAO,MAAA;AAC/E,UAAA,OAAO,UAAU,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,MAAM,KAAK,CAAA;AAAA,QAC/C;AACA,QAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,SAAA,EAAW,GAAG,GAAG,OAAO,MAAA;AAClE,QAAA,MAAM,QAAoB,EAAC;AAC3B,QAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9C,UAAA,IAAI,CAAA,KAAM,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AAAA,QAC5B;AACA,QAAA,OAAO,KAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAAA,IAEA,KAAK,QAAA,EAAU;AACb,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAElC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAExC,MAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,MAAA,EAAQ,CAAC,SAAA,KAAc;AAEnD,QAAA,IAAI,CAAC,YAAA,CAAa,SAAS,CAAA,EAAG,OAAO,MAAA;AACrC,QAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,SAAA,EAAW,GAAG,GAAG,OAAO,MAAA;AAClE,QAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,GAAA,EAAK,OAAO,MAAA;AAE7B,QAAA,IAAI,MAAA,CAAO,UAAU,cAAA,CAAe,IAAA,CAAK,WAAW,IAAA,CAAK,GAAG,GAAG,OAAO,MAAA;AAItE,QAAA,MAAM,QAAoB,EAAC;AAC3B,QAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9C,UAAA,KAAA,CAAM,CAAA,KAAM,GAAA,GAAM,IAAA,CAAK,GAAA,GAAM,CAAC,CAAA,GAAI,CAAA;AAAA,QACpC;AACA,QAAA,OAAO,KAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAAA,IAEA,KAAK,QAAA,EAAU;AACb,MAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,QAAA,EAAU,CAAC,SAAA,KAAc;AACrD,QAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG,OAAO,CAAC,GAAG,SAAA,EAAW,KAAK,KAAK,CAAA;AAC5D,QAAA,IAAI,KAAK,GAAA,KAAQ,MAAA,IAAa,IAAA,CAAK,GAAA,KAAQ,IAAI,OAAO,MAAA;AACtD,QAAA,IAAI,MAAA,CAAO,UAAU,cAAA,CAAe,IAAA,CAAK,WAAW,IAAA,CAAK,GAAG,GAAG,OAAO,MAAA;AACtE,QAAA,OAAO,EAAE,GAAG,SAAA,EAAW,CAAC,KAAK,GAAG,GAAG,KAAK,KAAA,EAAM;AAAA,MAChD,CAAC,CAAA;AAAA,IACH;AAAA,IAEA,KAAK,MAAA,EAAQ;AACX,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAElC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnC,MAAA,MAAM,OAAO,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAC,CAAA;AAEjD,MAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,MAAA,EAAQ,CAAC,SAAA,KAAc;AACnD,QAAA,IAAI,CAAC,WAAA,CAAY,SAAS,CAAA,EAAG,OAAO,MAAA;AACpC,QAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,IAAK,OAAO,CAAA,IAAK,IAAA,IAAQ,SAAA,CAAU,MAAA,EAAQ,OAAO,MAAA;AAC5E,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,CAAC,CAAA,EAAG,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA;AAC9D,QAAA,IAAI,EAAA,KAAO,MAAM,OAAO,MAAA;AACxB,QAAA,MAAM,KAAA,GAAQ,UAAU,KAAA,EAAM;AAC9B,QAAA,MAAM,CAAC,KAAK,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA;AACpC,QAAA,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,CAAA,EAAG,KAAM,CAAA;AAC1B,QAAA,OAAO,KAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAAA;AAEJ;AAGO,SAAS,aAAa,IAAA,EAA8B;AACzD,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,KAAS,EAAA,GAAK,iBAAiB,IAAA,CAAK,IAAA;AACpD,EAAA,QAAQ,KAAK,EAAA;AAAI,IACf,KAAK,KAAA;AACH,MAAA,OAAO,OAAO,EAAE,CAAA,CAAA;AAAA,IAClB,KAAK,QAAA;AACH,MAAA,OAAO,UAAU,EAAE,CAAA,CAAA;AAAA,IACrB,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,OAAA,EAAU,EAAE,CAAA,IAAA,EAAO,IAAA,CAAK,GAAG,CAAA,CAAA;AAAA,IACpC,KAAK,QAAA;AACH,MAAA,OAAO,IAAA,CAAK,GAAA,KAAQ,MAAA,GAAY,CAAA,UAAA,EAAa,EAAE,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,GAAG,CAAA,IAAA,EAAO,EAAE,CAAA,CAAA;AAAA,IAC9E,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,KAAA,EAAQ,EAAE,CAAA,UAAA,EAAa,IAAA,CAAK,EAAE,CAAA,CAAA;AAAA;AAE3C;;;AC7MO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;;;AChBA,IAAM,UAAA,GAAa,IAAI,GAAA,CAAY,gBAAgB,CAAA;AAEnD,SAAS,WAAW,KAAA,EAAwC;AAC1D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,UAAA,CAAW,IAAI,KAAK,CAAA;AAC1D;AAEA,SAAS,KAAA,CAAM,IAAA,EAA+B,IAAA,EAAc,OAAA,EAAkC;AAC5F,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAQ;AAC/B;AAcO,SAAS,YAAY,MAAA,EAAsC;AAChE,EAAA,IAAI,WAAW,MAAA,IAAa,MAAA,KAAW,QAAQ,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACnE,IAAA,OAAO,EAAE,IAAI,IAAA,EAAM,KAAA,EAAO,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,EAC3C;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,OAAO,EAAC;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,KAAA;AAAA,UACE,QAAA;AAAA,UACA,EAAA;AAAA,UACA,6BAA6B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA;AACrF;AACF,KACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAO,WAAW,QAAA,IAAY,MAAA,KAAW,QAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1E,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,OAAO,EAAC;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,KAAA;AAAA,UACE,QAAA;AAAA,UACA,EAAA;AAAA,UACA,CAAA,sDAAA,EAAoD,aAAA,CAAc,MAAmB,CAAC,CAAA,CAAA;AAAA;AACxF;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,QAA2B,EAAC;AAClC,EAAA,MAAM,SAA4B,EAAC;AACnC,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAiC,CAAA,EAAG;AAC1E,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,EAAK,GAAA,EAAK,MAAM,CAAA;AAC3C,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,MAAM,OAAA,GAAU,UAAU,GAAG,CAAA;AAC7B,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,OAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA,EAAQ,GAAA;AAAA,MACR,QAAA,EAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,OAAA,KAAY,CAAA,IAAK,OAAA,KAAY,GAAA,GAAM,CAAA,GAAI,CAAA,CAAA,EAAI,CAAC,CAAA;AAAA,MACzE,KAAA,EAAO,KAAA;AAAA,KACR,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,MAAA,EAAO;AACnC;AAEA,SAAS,aAAA,CACP,GAAA,EACA,GAAA,EACA,MAAA,EACyB;AACzB,EAAA,IAAI,SAAA;AAEJ,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,SAAA,GAAY,EAAE,MAAM,GAAA,EAAI;AAAA,EAC1B,CAAA,MAAA,IAAW,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,QAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACzE,IAAA,SAAA,GAAY,GAAA;AAAA,EACd,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,KAAA;AAAA,QACE,MAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA,2CAAA,EAA8C,aAAA,CAAc,GAAgB,CAAC,CAAA,CAAA;AAAA;AAC/E,KACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,UAAA,CAAW,SAAA,CAAU,IAAI,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,KAAA;AAAA,QACE,MAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA,aAAA,EAAgB,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,IAAI,CAAC,CAAA,eAAA,EAAkB,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA;AAC7F,KACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,SAAA,CAAU,YAAY,MAAA,IAAa,CAAC,MAAM,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAA,EAAG;AACxE,IAAA,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,GAAA,EAAK,6BAA6B,CAAC,CAAA;AAC7D,IAAA,OAAO,MAAA;AAAA,EACT;AAIA,EAAA,IAAI,SAAA,CAAU,SAAS,MAAA,KAAW,CAAC,UAAU,OAAA,IAAW,SAAA,CAAU,OAAA,CAAQ,MAAA,KAAW,CAAA,CAAA,EAAI;AACvF,IAAA,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,GAAA,EAAK,8CAA8C,CAAC,CAAA;AAC9E,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAA;AACT;AAUO,SAAS,cAAA,CACd,OACA,QAAA,EACyB;AACzB,EAAA,IAAI,IAAA;AAEJ,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAS,QAAQ,CAAA,EAAG;AACvC,IAAA,IACE,CAAC,IAAA,IACD,KAAA,CAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IACrB,KAAA,CAAM,QAAA,KAAa,IAAA,CAAK,QAAA,IAAY,KAAA,CAAM,KAAA,GAAQ,KAAK,KAAA,EACxD;AACA,MAAA,IAAA,GAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA,EAAM,IAAA;AACf;AAEA,SAAS,OAAA,CAAQ,SAAmB,QAAA,EAA6B;AAC/D,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,QAAA,CAAS,MAAA,EAAQ,OAAO,KAAA;AAC/C,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA,KAAM,MAAM,GAAA,IAAO,CAAA,KAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAC/D;AAGO,SAAS,cAAc,KAAA,EAAsC;AAClE,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,WAAA;AAChC,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,OAAA;AACjC,EAAA,OAAO,OAAO,KAAA;AAChB;AAGO,SAAS,UAAU,KAAA,EAA6C;AACrE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,OAAA;AACjC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AAGzC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,QAAA;AACtC,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,SAAA;AACvC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,QAAA;AACtC,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,WAAW,IAAA,EAAkD;AACpE,EAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,MAAA,KAAWA,+BAAA,CAAc,MAAM,CAAA,CAAE,KAAe,CAAA;AACnF;AASO,SAAS,WAAA,CAAY,MAAmB,KAAA,EAAuC;AACpF,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,QAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA;AAAA,IAC1B,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,IAC3D,KAAK,SAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,IAC5D,KAAK,SAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,SAAA;AAAA,IAC1B,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,EAAA,IAAM,CAAC,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,IACrF,KAAK,MAAA;AACH,MAAA,OAAA,CACG,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,KAC5E,UAAA,CAAW,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,MAAM,CAAA,KAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAEtE,KAAK,QAAA;AACH,MAAA,OAAO,aAAa,KAAK,CAAA;AAAA,IAC3B,KAAK,OAAA;AACH,MAAA,OAAO,YAAY,KAAK,CAAA;AAAA,IAC1B,KAAK,MAAA;AAIH,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAChB,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA;AAEN;AAEA,SAAS,eAAA,CAAgB,MAAmB,KAAA,EAAsC;AAChF,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,OAAO,GAAG,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA,qCAAA,EAAwC,WAAW,IAAI,CAAA,CACnF,IAAI,CAAC,MAAA,KAAW,KAAK,SAAA,CAAU,MAAM,CAAC,CAAA,CACtC,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,EACf;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,OAAO,6BAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,IAAA,CAAK,SAAS,UAAA,EAAY;AACpD,IAAA,OAAO,YAAY,IAAA,CAAK,IAAI,CAAA,MAAA,EAAS,aAAA,CAAc,KAAK,CAAC,CAAA,8BAAA,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,YAAY,IAAA,CAAK,IAAI,CAAA,MAAA,EAAS,aAAA,CAAc,KAAK,CAAC,CAAA,CAAA,CAAA;AAC3D;AASO,SAAS,iBAAA,CAAkB,OAAkB,KAAA,EAA6C;AAC/F,EAAA,MAAM,SAA4B,EAAC;AACnC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAE/B,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,EAAiB,QAAA,KAAuB;AACpD,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,MAAM,IAAA,GAAO,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAA;AAC3C,MAAA,IAAI,IAAA,IAAQ,CAAC,WAAA,CAAY,IAAA,EAAM,IAAI,CAAA,EAAG;AACpC,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM,aAAa,QAAQ,CAAA;AAAA,UAC3B,OAAA,EAAS,eAAA,CAAgB,IAAA,EAAM,IAAI,CAAA;AAAA,UACnC,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,MAAA,EAAQ,cAAc,IAAI;AAAA,SAC3B,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACrB,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU,IAAA,CAAK,KAAA,EAAO,CAAC,GAAG,QAAA,EAAU,MAAA,CAAO,KAAK,CAAC,CAAC,CAAC,CAAA;AAAA,IAC1E,CAAA,MAAA,IAAW,YAAA,CAAa,IAAI,CAAA,EAAG;AAC7B,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAI,CAAA,EAAG,IAAA,CAAK,KAAA,EAAO,CAAC,GAAG,QAAA,EAAU,GAAG,CAAC,CAAA;AAAA,IACjF;AAAA,EACF,CAAA;AAEA,EAAA,IAAA,CAAK,KAAA,EAAO,EAAE,CAAA;AAEd,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,CAAK,QAAA,EAAU;AAC1B,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACjC,IAAA,IAAI,SAAA,CAAU,KAAA,EAAO,KAAA,CAAM,OAAO,MAAM,MAAA,EAAW;AACnD,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,MAAM,KAAA,CAAM,MAAA;AAAA,MACZ,OAAA,EAAS,CAAA,kCAAA,EAAqC,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAA,CAAA;AAAA,MAC7D,QAAA,EAAU,MAAM,IAAA,CAAK,IAAA;AAAA,MACrB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,SAAA,CAAU,MAAqB,IAAA,EAA+B;AAC5E,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA;AAAA,IACL,KAAK,SAAA;AACH,MAAA,OAAO,CAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,EAAC;AAAA,IACV,KAAK,OAAA;AACH,MAAA,OAAO,EAAC;AAAA,IACV,KAAK,MAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,IAAA,EAAM,SAAS,MAAA,GAAUA,+BAAA,CAAc,KAAK,OAAA,CAAQ,CAAC,CAAE,CAAA,CAAE,KAAA,GAAmB,EAAA;AAAA,IACrF;AACE,MAAA,OAAO,EAAA;AAAA;AAEb;AC5TO,IAAM,iBAAA,GAAoBC,oBAA6C,IAAI,CAAA;AAE3E,SAAS,oBAAA,GAA+C;AAC7D,EAAA,MAAM,OAAA,GAAUC,iBAAW,iBAAiB,CAAA;AAC5C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,OAAA;AACT;AC9BA,IAAM,iBAAA,GAAsD;AAAA,EAC1D,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAWA,SAAS,cAAc,IAAA,EAA8B;AACnD,EAAA,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,MAAA;AAC7D;AAGO,SAAS,OAAO,KAAA,EAAsC;AAC3D,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,EAAA;AAChC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,IAAK,EAAA;AAClC;AAWO,SAAS,QAAA,CAAS,MAAc,IAAA,EAAgC;AACrE,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA;AAAA,IACL,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,MAAA,IAAI,OAAA,KAAY,IAAI,OAAO,IAAA;AAC3B,MAAA,MAAM,MAAA,GAAS,OAAO,OAAO,CAAA;AAC7B,MAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,IAAA;AAAA,IAC5C;AAAA,IACA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,EAAK,CAAE,WAAA,EAAY;AACxC,MAAA,IAAI,OAAA,KAAY,QAAQ,OAAO,IAAA;AAC/B,MAAA,IAAI,OAAA,KAAY,SAAS,OAAO,KAAA;AAChC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,IACA,KAAK,MAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AASO,SAAS,eAAA,CAAgB,EAAE,IAAA,EAAM,IAAA,EAAM,MAAM,QAAA,EAAU,EAAA,EAAI,UAAS,EAAyB;AAClG,EAAA,MAAM,MAAA,GAAS,QAAA,IAAY,IAAA,CAAK,IAAA,EAAM,QAAA,KAAa,IAAA;AACnD,EAAA,MAAM,YAAA,GAA0B,SAAS,MAAA,GAAS,IAAA;AAClD,EAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,IAAA;AAKxB,EAAA,IAAI,IAAA,CAAK,QAAA,IAAY,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA,EAAG;AAC7C,IAAA,uBACEC,cAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,IAAA,EAAM,OAAO,KAAK,CAAA;AAAA,QAClB,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,IAAA,EAAM,YAAA;AAAA,QACN,IAAA;AAAA,QACA,QAAA,EAAU,MAAA;AAAA,QACV,SAAA,EAAW,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,OAAO,KAAA,KAAU,QAAA;AAAA,QACpD,aAAa,IAAA,EAAM,WAAA;AAAA,QACnB,YAAA,EAAc,CAAC,IAAA,KAAS,QAAA,CAAS,SAAS,IAAA,EAAM,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA,KAC5D;AAAA,EAEJ;AAEA,EAAA,MAAM,SAAS,EAAE,EAAA,EAAI,MAAM,IAAA,EAAM,YAAA,EAAc,UAAU,MAAA,EAAO;AAEhE,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,SAAA;AACH,MAAA,uBACEA,cAAA;AAAA,QAACC,wBAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,SAAS,KAAA,KAAU,IAAA;AAAA,UACnB,eAAA,EAAiB,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI;AAAA;AAAA,OAC1C;AAAA,IAGJ,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,OAAA,GAAU,IAAA,EAAM,OAAA,IAAW,EAAC;AAClC,MAAA,uBACED,cAAA;AAAA,QAACE,wBAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,UACnB,aAAA,EAAe,CAAC,IAAA,KAAS;AAGvB,YAAA,MAAM,QAAQ,OAAA,CACX,GAAA,CAAI,CAAC,MAAA,KAAWL,gCAAc,MAAM,CAAC,CAAA,CACrC,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,CAAO,KAAK,MAAM,IAAI,CAAA;AACjD,YAAA,QAAA,CAAU,KAAA,EAAO,SAAS,IAAkB,CAAA;AAAA,UAC9C;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,IAEA,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,uBACEG,cAAA;AAAA,QAACG,4BAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,WAAA,EAAa,KAAK,IAAA,KAAS,UAAA;AAAA,UAC3B,KAAK,IAAA,EAAM,GAAA,KAAQ,SAAY,MAAA,GAAY,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,UAC1D,KAAK,IAAA,EAAM,GAAA,KAAQ,SAAY,MAAA,GAAY,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,UAC1D,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,UAC3C,aAAA,EAAe,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI;AAAA;AAAA,OACxC;AAAA,IAGJ,KAAK,OAAA;AACH,MAAA,uBACEH,cAAA;AAAA,QAACI,6BAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,kBAAkB,IAAI,CAAA;AAAA,UAC5B,IAAA,EAAM,YAAA;AAAA,UACN,QAAA,EAAU,MAAA;AAAA,UACV,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,UAC3C,QAAA,EAAU,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI;AAAA;AAAA,OACnC;AAAA,IAGJ,KAAK,MAAA;AACH,MAAA,uBACEJ,cAAA;AAAA,QAACK,0BAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,OAAA,EAAS,CAAA;AAAA,UACT,UAAA,EAAU,IAAA;AAAA,UACV,aAAa,IAAA,EAAM,WAAA;AAAA,UACnB,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,UAC3C,aAAA,EAAe,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI;AAAA;AAAA,OACxC;AAAA,IAGJ,KAAK,QAAA;AACH,MAAA,uBACEL,cAAA;AAAA,QAACM,uBAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,IAAA,EAAK,UAAA;AAAA,UACL,MAAA,EAAM,IAAA;AAAA,UACN,aAAa,IAAA,EAAM,WAAA;AAAA,UACnB,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,UAC3C,aAAA,EAAe,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI;AAAA;AAAA,OACxC;AAAA,IAGJ,KAAK,KAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL;AACE,MAAA,uBACEN,cAAA;AAAA,QAACM,uBAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,IAAA,EAAM,KAAK,IAAA,KAAS,KAAA,GAAQ,QAAQ,IAAA,CAAK,IAAA,KAAS,UAAU,OAAA,GAAU,MAAA;AAAA,UACtE,aAAa,IAAA,EAAM,WAAA;AAAA,UACnB,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,UAC3C,aAAA,EAAe,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI;AAAA;AAAA,OACxC;AAAA;AAGR;AAuBA,SAAS,cAAA,CAAe;AAAA,EACtB,EAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,EAAE,aAAa,WAAA,EAAa,SAAA,EAAW,UAAS,GAAIC,+BAAA,CAAc,MAAM,QAAQ,CAAA;AAEtF,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,sCACGC,8BAAA,EAAA,EAAa,IAAA,EAAY,WAAA,EAA0B,UAAA,EAAY,WAC7D,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAiB;AAC/B,IAAA,IAAI,IAAA,KAAS,IAAA,EAAM,YAAA,CAAa,IAAI,CAAA;AAAA,EACtC,CAAA;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACER,cAAA;AAAA,MAACK,0BAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QAEA,IAAA;AAAA,QACA,IAAA,EAAK,MAAA;AAAA,QACL,OAAA,EAAS,CAAA;AAAA,QACT,QAAA;AAAA,QACA,WAAA;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,UAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,WAAA;AAAA,QACX,SAAA,EAAU,WAAA;AAAA,QACV,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjB,UAAA,MAAA,CAAO,KAAA,CAAM,cAAc,KAAK,CAAA;AAChC,UAAA,QAAA,EAAS;AAAA,QACX;AAAA,OAAA;AAAA,MAbK;AAAA,KAcP;AAAA,EAEJ;AAEA,EAAA,uBACEL,cAAA;AAAA,IAACM,uBAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MAEA,IAAA;AAAA,MACA,IAAA,EAAK,MAAA;AAAA,MACL,IAAA,EAAK,MAAA;AAAA,MAIL,SAAA,EAAW,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,YAAY,SAAA,GAAY,MAAA;AAAA,MACjE,QAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA,EAAc,IAAA;AAAA,MACd,UAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,WAAA;AAAA,MACX,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,QAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,EAAS,KAAA,CAAM,cAAc,IAAA,EAAK;AAAA,MACtD,CAAA;AAAA,MACA,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjB,QAAA,MAAA,CAAO,KAAA,CAAM,cAAc,KAAK,CAAA;AAChC,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,KAAA;AAAA,IAnBK;AAAA,GAoBP;AAEJ;ACtSA,IAAM,MAAA,GAAS,EAAA;AAcR,SAAS,aAAA,CAAc,EAAE,IAAA,EAAK,EAAuB;AAC1D,EAAA,MAAM,MAAM,oBAAA,EAAqB;AACjC,EAAA,MAAM,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,SAAA,EAAW,UAAS,GAAI,IAAA;AAEpD,EAAA,MAAM,QAAA,GAAW,SAAA,GAAY,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,GAAI,MAAA;AACtD,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA;AACrC,EAAA,MAAM,UAAA,GACJ,GAAA,CAAI,WAAA,IAAe,CAAC,GAAA,CAAI,YAAY,IAAA,CAAK,UAAA,KAAe,QAAA,IAAY,GAAA,CAAI,IAAA,KAAS,MAAA;AACnF,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,EAAM,KAAA,IAAS,GAAA;AAElC,EAAA,uBACEG,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,kCAAA,EAAiC,EAAA;AAAA,MACjC,WAAA,EAAW,MAAA;AAAA,MACX,UAAA,EAAU,GAAA;AAAA,MACV,aAAW,IAAA,CAAK,IAAA;AAAA,MAChB,YAAA,EAAY,KAAA;AAAA,MACZ,eAAA,EAAe,IAAA,CAAK,QAAA,GAAW,MAAA,GAAS,OAAA;AAAA,MACxC,eAAA,EAAe,WAAW,MAAA,GAAS,MAAA;AAAA,MACnC,cAAA,EAAc,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,MAAA;AAAA,MAC5C,IAAA,EAAK,UAAA;AAAA,MACL,cAAY,KAAA,GAAQ,CAAA;AAAA,MACpB,eAAA,EAAe,QAAA;AAAA,MACf,SAAA,EAAWC,oBAAA;AAAA,QACT,oEAAA;AAAA,QACA,QAAA,IAAY,iCAAA;AAAA,QACZ,OAAA,CAAQ,SAAS,CAAA,IAAK;AAAA,OACxB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EAA8B,KAAA,EAAO,EAAE,kBAAA,EAAoB,KAAA,GAAQ,MAAA,GAAS,CAAA,EAAE,EAC1F,QAAA,EAAA;AAAA,UAAA,SAAA,mBACCT,cAAAA;AAAA,YAACW,wBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,qCAAA,EAAoC,EAAA;AAAA,cACpC,WAAA,EAAW,MAAA;AAAA,cACX,cAAY,QAAA,GAAW,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,GAAK,UAAU,KAAK,CAAA,CAAA;AAAA,cAC5D,eAAA,EAAe,QAAA;AAAA,cACf,IAAA,EAAM,WAAW,cAAA,GAAiB,eAAA;AAAA,cAClC,OAAA,EAAS,MAAM,GAAA,CAAI,cAAA,CAAe,MAAM;AAAA;AAAA,8BAG1CX,cAAAA,CAAC,UAAK,aAAA,EAAY,MAAA,EAAO,WAAU,2BAAA,EAA4B,CAAA;AAAA,0BAGjES,eAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,kCAAA,EAAiC,EAAA;AAAA,cACjC,WAAA,EAAW,MAAA;AAAA,cACX,SAAA,EAAU,wBAAA;AAAA,cAET,QAAA,EAAA;AAAA,gBAAA,UAAA,mBACCT,cAAAA;AAAA,kBAACM,uBAAA;AAAA,kBAAA;AAAA,oBAIC,MAAM,GAAA,CAAI,IAAA;AAAA,oBACV,IAAA,EAAK,MAAA;AAAA,oBACL,YAAA,EAAc,GAAA;AAAA,oBACd,UAAA,EAAY,KAAA;AAAA,oBACZ,YAAA,EAAY,UAAU,MAAM,CAAA,CAAA;AAAA,oBAC5B,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,sBAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,EAAS,KAAA,CAAM,cAAc,IAAA,EAAK;AAAA,oBACtD,CAAA;AAAA,oBACA,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjB,sBAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,KAAA;AACjC,sBAAA,IAAI,IAAA,KAAS,GAAA,EAAK,GAAA,CAAI,QAAA,CAAS,MAAM,IAAI,CAAA;AAAA,oBAC3C;AAAA,mBAAA;AAAA,kBAZK;AAAA,oCAePN,cAAAA;AAAA,kBAACY,sBAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAG,MAAA;AAAA,oBACH,IAAA,EAAK,IAAA;AAAA,oBACL,MAAA,EAAO,QAAA;AAAA,oBACP,KAAA,EAAO,IAAA,CAAK,UAAA,KAAe,OAAA,GAAU,OAAA,GAAU,SAAA;AAAA,oBAC/C,SAAA,EAAU,+BAAA;AAAA,oBACV,KAAA,EAAO,MAAA;AAAA,oBAEN,QAAA,EAAA,IAAA,CAAK,UAAA,KAAe,OAAA,GAAU,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAA,GAAM;AAAA;AAAA,iBAC9C;AAAA,gBAED,KAAK,IAAA,EAAM,WAAA,oBACVZ,cAAAA,CAACY,0BAAK,EAAA,EAAG,MAAA,EAAO,IAAA,EAAK,IAAA,EAAK,OAAM,OAAA,EAAQ,SAAA,EAAU,gBAAA,EAC/C,QAAA,EAAA,IAAA,CAAK,KAAK,WAAA,EACb;AAAA;AAAA;AAAA,WAEJ;AAAA,0BAEAZ,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,oCAAA,EAAmC,EAAA;AAAA,cACnC,WAAA,EAAW,MAAA;AAAA,cACX,aAAW,IAAA,CAAK,IAAA;AAAA,cAChB,SAAA,EAAU,gBAAA;AAAA,cAET,sCACCA,cAAAA,CAACY,sBAAA,EAAA,EAAK,EAAA,EAAG,QAAO,IAAA,EAAK,IAAA,EAAK,KAAA,EAAM,OAAA,EAAQ,WAAU,sBAAA,EAC/C,QAAA,EAAA,IAAA,CAAK,IAAA,KAAS,OAAA,GACX,KAAK,IAAA,CAAK,UAAU,CAAA,CAAA,EAAI,IAAA,CAAK,eAAe,CAAA,GAAI,MAAA,GAAS,OAAO,CAAA,EAAA,CAAA,GAChE,KAAK,IAAA,CAAK,UAAU,CAAA,CAAA,EAAI,IAAA,CAAK,eAAe,CAAA,GAAI,KAAA,GAAQ,MAAM,CAAA,EAAA,CAAA,EACpE,oBAEAZ,cAAAA;AAAA,gBAAC,eAAA;AAAA,gBAAA;AAAA,kBACC,IAAA;AAAA,kBACA,MAAM,GAAA,CAAI,IAAA;AAAA,kBACV,MAAM,GAAA,CAAI,IAAA;AAAA,kBACV,UAAU,GAAA,CAAI,QAAA;AAAA,kBACd,EAAA,EAAI,CAAA,EAAG,GAAA,CAAI,QAAQ,IAAI,MAAM,CAAA,CAAA;AAAA,kBAC7B,UAAU,CAAC,IAAA,KAAS,GAAA,CAAI,UAAA,CAAW,MAAM,IAAI;AAAA;AAAA;AAC/C;AAAA,WAEJ;AAAA,0BAEAS,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACZ,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,QAAA,oBACJT,cAAAA,CAACa,uBAAA,EAAA,EAAM,IAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,MAAA,EAAO,KAAA,EAAO,QAAA,GAAW,KAAA,GAAQ,MAAA,EACvD,eAAK,IAAA,EACR,CAAA;AAAA,YAED,aAAa,GAAA,CAAI,QAAA,IAAY,CAAC,GAAA,CAAI,4BACjCb,cAAAA;AAAA,cAACW,wBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,OAAA;AAAA,gBACR,IAAA,EAAK,IAAA;AAAA,gBACL,kCAAA,EAAiC,EAAA;AAAA,gBACjC,WAAA,EAAW,MAAA;AAAA,gBACX,YAAA,EAAY,UAAU,KAAK,CAAA,CAAA;AAAA,gBAC3B,IAAA,EAAK,MAAA;AAAA,gBACL,OAAA,EAAS,MAAM,GAAA,CAAI,WAAA,CAAY,IAAI,QAAA,KAAa,MAAA,GAAS,OAAO,MAAM;AAAA;AAAA,aACxE;AAAA,YAED,GAAA,CAAI,gBAAgB,CAAC,GAAA,CAAI,YAAY,IAAA,CAAK,UAAA,KAAe,2BACxDF,eAAA,CAAAK,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAAd,cAAAA;AAAA,gBAACW,wBAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,OAAA;AAAA,kBACR,IAAA,EAAK,IAAA;AAAA,kBACL,sCAAA,EAAqC,EAAA;AAAA,kBACrC,WAAA,EAAW,MAAA;AAAA,kBACX,YAAA,EAAY,QAAQ,MAAM,CAAA,GAAA,CAAA;AAAA,kBAC1B,IAAA,EAAK,UAAA;AAAA,kBACL,OAAA,EAAS,MAAM,GAAA,CAAI,MAAA,CAAO,MAAM,MAAA,CAAO,GAAG,IAAI,CAAC;AAAA;AAAA,eACjD;AAAA,8BACAX,cAAAA;AAAA,gBAACW,wBAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,OAAA;AAAA,kBACR,IAAA,EAAK,IAAA;AAAA,kBACL,wCAAA,EAAuC,EAAA;AAAA,kBACvC,WAAA,EAAW,MAAA;AAAA,kBACX,YAAA,EAAY,QAAQ,MAAM,CAAA,KAAA,CAAA;AAAA,kBAC1B,IAAA,EAAK,YAAA;AAAA,kBACL,OAAA,EAAS,MAAM,GAAA,CAAI,MAAA,CAAO,MAAM,MAAA,CAAO,GAAG,IAAI,CAAC;AAAA;AAAA;AACjD,aAAA,EACF,CAAA;AAAA,YAED,GAAA,CAAI,eAAe,CAAC,GAAA,CAAI,YAAY,IAAA,CAAK,UAAA,KAAe,0BACvDX,cAAAA;AAAA,cAACW,wBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,OAAA;AAAA,gBACR,IAAA,EAAK,IAAA;AAAA,gBACL,KAAA,EAAM,KAAA;AAAA,gBACN,qCAAA,EAAoC,EAAA;AAAA,gBACpC,WAAA,EAAW,MAAA;AAAA,gBACX,YAAA,EAAY,UAAU,MAAM,CAAA,CAAA;AAAA,gBAC5B,IAAA,EAAK,SAAA;AAAA,gBACL,OAAA,EAAS,MAAM,GAAA,CAAI,QAAA,CAAS,IAAI;AAAA;AAAA;AAClC,WAAA,EAEJ;AAAA,SAAA,EACF,CAAA;AAAA,QAEC,4BACCX,cAAAA;AAAA,UAACY,sBAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,MAAA;AAAA,YACH,IAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAM,QAAA;AAAA,YACN,uCAAA,EAAsC,EAAA;AAAA,YACtC,WAAA,EAAW,MAAA;AAAA,YACX,SAAA,EAAU,iBAAA;AAAA,YACV,KAAA,EAAO,EAAE,kBAAA,EAAoB,KAAA,GAAQ,SAAS,EAAA,EAAG;AAAA,YAEhD,QAAA,EAAA,QAAA,CAAS;AAAA;AAAA,SACZ;AAAA,QAGD,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,qBACZH,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,sCAAA,EAAqC,EAAA;AAAA,YACrC,WAAS,IAAA,CAAK,EAAA;AAAA,YACd,WAAA,EAAW,MAAA;AAAA,YACX,SAAA,EAAU,mCAAA;AAAA,YACV,KAAA,EAAO,EAAE,kBAAA,EAAoB,KAAA,GAAQ,SAAS,EAAA,EAAG;AAAA,YAEjD,QAAA,EAAA;AAAA,8BAAAT,cAAAA,CAACa,2BAAM,IAAA,EAAK,IAAA,EAAK,SAAQ,MAAA,EAAO,KAAA,EAAM,UAAS,QAAA,EAAA,UAAA,EAE/C,CAAA;AAAA,8BACAJ,eAAA,CAACG,0BAAK,EAAA,EAAG,MAAA,EAAO,MAAK,IAAA,EAAK,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,4BAAA,EAC/C,QAAA,EAAA;AAAA,gBAAA,IAAA,CAAK,KAAA,IAAS,aAAa,IAAI,CAAA;AAAA,gBAC/B,IAAA,CAAK,EAAA,KAAO,KAAA,IAAS,IAAA,CAAK,EAAA,KAAO,QAAA,GAAW,CAAA,QAAA,EAAM,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,GAAK;AAAA,eAAA,EAC5E,CAAA;AAAA,8BACAZ,cAAAA;AAAA,gBAACW,wBAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,IAAA;AAAA,kBACL,KAAA,EAAM,SAAA;AAAA,kBACN,qCAAA,EAAoC,EAAA;AAAA,kBACpC,WAAS,IAAA,CAAK,EAAA;AAAA,kBACd,OAAA,EAAS,MAAM,GAAA,CAAI,aAAA,CAAc,KAAK,EAAE,CAAA;AAAA,kBACzC,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BACAX,cAAAA;AAAA,gBAACW,wBAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,IAAA;AAAA,kBACL,OAAA,EAAQ,OAAA;AAAA,kBACR,qCAAA,EAAoC,EAAA;AAAA,kBACpC,WAAS,IAAA,CAAK,EAAA;AAAA,kBACd,OAAA,EAAS,MAAM,GAAA,CAAI,aAAA,CAAc,KAAK,EAAE,CAAA;AAAA,kBACzC,QAAA,EAAA;AAAA;AAAA;AAED;AAAA,WAAA;AAAA,UA/BK,IAAA,CAAK;AAAA,SAiCb;AAAA;AAAA;AAAA,GACH;AAEJ;AAmBO,SAAS,kBAAkB,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,eAAc,EAA2B;AAC9F,EAAA,MAAM,MAAM,oBAAA,EAAqB;AACjC,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAII,eAAS,EAAE,CAAA;AACjC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,cAAA,CAAwB,iBAAiB,QAAQ,CAAA;AAEzE,EAAA,uBACEN,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,uCAAA,EAAsC,EAAA;AAAA,MACtC,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAU,mFAAA;AAAA,MACV,KAAA,EAAO,EAAE,kBAAA,EAAoB,KAAA,GAAQ,SAAS,EAAA,EAAG;AAAA,MAEhD,QAAA,EAAA;AAAA,QAAA,IAAA,KAAS,4BACRT,cAAAA;AAAA,UAACM,uBAAA;AAAA,UAAA;AAAA,YACC,MAAM,GAAA,CAAI,IAAA;AAAA,YACV,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,GAAA;AAAA,YACP,WAAA,EAAY,KAAA;AAAA,YACZ,YAAA,EAAW,SAAA;AAAA,YACX,UAAA,EAAY,KAAA;AAAA,YACZ,sCAAA,EAAqC,EAAA;AAAA,YACrC,aAAA,EAAe;AAAA;AAAA,SACjB;AAAA,wBAEFN,cAAAA;AAAA,UAACE,wBAAA;AAAA,UAAA;AAAA,YACC,MAAM,GAAA,CAAI,IAAA;AAAA,YACV,IAAA,EAAK,MAAA;AAAA,YACL,YAAA,EAAW,gBAAA;AAAA,YACX,uCAAA,EAAsC,EAAA;AAAA,YACtC,IAAA,EAAM,CAAC,GAAG,gBAAgB,CAAA;AAAA,YAC1B,KAAA,EAAO,IAAA;AAAA,YACP,aAAA,EAAe,CAAC,IAAA,KAAS,OAAA,CAAQ,IAAqB;AAAA;AAAA,SACxD;AAAA,wBACAF,cAAAA;AAAA,UAACW,wBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAM,MAAA;AAAA,YACN,0CAAA,EAAyC,EAAA;AAAA,YACzC,OAAA,EAAS,MAAM,GAAA,CAAI,UAAA,CAAW,MAAM,IAAA,KAAS,QAAA,GAAW,GAAA,GAAM,MAAA,EAAW,IAAI,CAAA;AAAA,YAC9E,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAX,cAAAA;AAAA,UAACW,wBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAQ,OAAA;AAAA,YACR,yCAAA,EAAwC,EAAA;AAAA,YACxC,OAAA,EAAS,MAAM,GAAA,CAAI,WAAA,CAAY,IAAI,CAAA;AAAA,YACpC,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,GACF;AAEJ;ACjRA,SAAS,sBAAsB,KAAA,EAA4B;AACzD,EAAA,MAAM,MAAgB,EAAC;AAEvB,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,EAAiB,QAAA,KAAuB;AACpD,IAAA,IAAI,CAAC,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC7B,IAAA,IAAI,SAAS,MAAA,GAAS,CAAA,MAAO,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAC,CAAA;AACxD,IAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACrB,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU,IAAA,CAAK,KAAA,EAAO,CAAC,GAAG,QAAA,EAAU,MAAA,CAAO,KAAK,CAAC,CAAC,CAAC,CAAA;AAAA,IAC1E,CAAA,MAAA,IAAW,YAAA,CAAa,IAAI,CAAA,EAAG;AAC7B,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAI,CAAA,EAAG,IAAA,CAAK,KAAA,EAAO,CAAC,GAAG,QAAA,EAAU,GAAG,CAAC,CAAA;AAAA,IACjF;AAAA,EACF,CAAA;AAEA,EAAA,IAAA,CAAK,KAAA,EAAO,EAAE,CAAA;AACd,EAAA,OAAO,GAAA;AACT;AA4BO,IAAM,UAAA,GAAaK,gBAAA,CAA4C,SAASC,WAAAA,CAC7E;AAAA,EACE,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,IAAA,GAAO,IAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,cAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,OAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,WAAA,GAAc,IAAA;AAAA,EACd,YAAA,GAAe,IAAA;AAAA,EACf,SAAA,GAAY,OAAA;AAAA,EACZ,UAAA,GAAa,cAAA;AAAA,EACb,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,SAASC,WAAA,EAAM;AACrB,EAAA,MAAM,SAAS,QAAA,IAAY,MAAA;AAC3B,EAAA,MAAM,OAAA,GAAUC,aAAO,CAAC,CAAA;AAKxB,EAAA,MAAM,YAAA,GAAeC,cAAQ,MAAM,WAAA,CAAY,MAAM,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAChE,EAAA,MAAM,QAAQ,YAAA,CAAa,KAAA;AAE3B,EAAA,MAAM,SAAA,GAAYA,aAAA,CAAQ,MAAM,iBAAA,CAAkB,KAAA,EAAO,KAAK,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAK/E,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIL,cAAAA,CAA4B,EAAE,CAAA;AAElE,EAAA,MAAM,MAAA,GAASK,aAAA;AAAA,IACb,MAAM,CAAC,GAAG,YAAA,CAAa,QAAQ,GAAG,SAAA,EAAW,GAAG,UAAU,CAAA;AAAA,IAC1D,CAAC,YAAA,CAAa,MAAA,EAAQ,SAAA,EAAW,UAAU;AAAA,GAC7C;AAEA,EAAA,MAAM,iBAAA,GAAoBD,aAAO,cAAc,CAAA;AAC/C,EAAA,iBAAA,CAAkB,OAAA,GAAU,cAAA;AAC5B,EAAA,MAAM,kBAAA,GAAqBA,aAAsB,IAAI,CAAA;AAErD,EAAAE,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AACvC,IAAA,IAAI,SAAA,KAAc,mBAAmB,OAAA,EAAS;AAC9C,IAAA,kBAAA,CAAmB,OAAA,GAAU,SAAA;AAC7B,IAAA,iBAAA,CAAkB,UAAU,MAAM,CAAA;AAAA,EACpC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAMX,EAAA,MAAM,qBAAqB,QAAA,KAAa,MAAA;AACxC,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAIN,cAAAA;AAAA,IACtD,eAAA,IAAmB;AAAA,GACrB;AACA,EAAA,MAAM,YAAA,GAAe,qBAAqB,QAAA,GAAW,oBAAA;AAErD,EAAA,MAAM,UAAA,GAAaO,iBAAA;AAAA,IACjB,CAAC,MAAA,KAAmB,YAAA,KAAiB,IAAA,IAAQ,YAAA,CAAa,SAAS,MAAM,CAAA;AAAA,IACzE,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,cAAA,GAAiBA,iBAAA;AAAA,IACrB,CAAC,MAAA,KAAmB;AAClB,MAAA,MAAM,OAAA,GAAU,YAAA,IAAgB,qBAAA,CAAsB,KAAK,CAAA;AAC3D,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,QAAA,CAAS,MAAM,IAChC,OAAA,CAAQ,MAAA,CAAO,CAAC,IAAA,KAAS,SAAS,MAAM,CAAA,GACxC,CAAC,GAAG,SAAS,MAAM,CAAA;AACvB,MAAA,IAAI,CAAC,kBAAA,EAAoB,uBAAA,CAAwB,IAAI,CAAA;AACrD,MAAA,gBAAA,GAAmB,IAAI,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,kBAAA,EAAoB,gBAAA,EAAkB,KAAK;AAAA,GAC5D;AAGA,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIP,eAAwB,IAAI,CAAA;AAG5D,EAAA,MAAM,aAAA,GAAgBK,cAAQ,MAAM,OAAA,IAAW,EAAC,EAAG,CAAC,OAAO,CAAC,CAAA;AAE5D,EAAA,MAAM,MAAA,GAASE,iBAAA;AAAA,IACb,CAAC,IAAA,KAAyB;AACxB,MAAA,aAAA,CAAc,EAAE,CAAA;AAEhB,MAAA,IAAI,WAAA,EAAa;AAGf,QAAA,MAAM,MAAA,GAAgC;AAAA,UACpC,GAAG,IAAA;AAAA,UACH,IAAI,IAAA,CAAK,EAAA,IAAM,GAAG,MAAM,CAAA,MAAA,EAAS,QAAQ,OAAA,EAAS,CAAA,CAAA;AAAA,UAClD,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,YAAA,CAAa,IAAI;AAAA,SACxC;AACA,QAAA,eAAA,GAAkB,CAAC,GAAG,aAAA,EAAe,MAAM,CAAC,CAAA;AAC5C,QAAA,UAAA,GAAa,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,QAAQ,CAAA;AAC5C,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,KAAA,EAAO,IAAI,CAAA;AAGtC,MAAA,IAAI,SAAS,KAAA,EAAO;AACpB,MAAA,QAAA,GAAW,MAAM,IAAI,CAAA;AACrB,MAAA,UAAA,GAAa,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,IACvC,CAAA;AAAA,IACA,CAAC,WAAA,EAAa,MAAA,EAAQ,eAAe,eAAA,EAAiB,UAAA,EAAY,OAAO,QAAQ;AAAA,GACnF;AAEA,EAAA,MAAM,MAAA,GAASA,iBAAA,CAAY,CAAC,IAAA,EAAc,OAAA,KAAoB;AAC5D,IAAA,aAAA,CAAc,CAAC,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAS,CAAC,CAAA;AAAA,EACjD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,iBAAA;AAAA,IACjB,CAAC,MAAsB,IAAA,KAAoB;AACzC,MAAA,MAAA,CAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,KAAK,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,QAAA,GAAWA,iBAAA;AAAA,IACf,CAAC,IAAA,KAAyB;AACxB,MAAA,MAAA,CAAO,EAAE,EAAA,EAAI,QAAA,EAAU,IAAA,EAAM,IAAA,CAAK,QAAQ,CAAA;AAAA,IAC5C,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,MAAA,GAASA,iBAAA;AAAA,IACb,CAAC,MAAsB,EAAA,KAAe;AACpC,MAAA,MAAA,CAAO,EAAE,EAAA,EAAI,MAAA,EAAQ,MAAM,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,QAAA,GAAWA,iBAAA;AAAA,IACf,CAAC,MAAsB,GAAA,KAAgB;AACrC,MAAA,IAAI,GAAA,KAAQ,KAAK,GAAA,EAAK;AACtB,MAAA,IAAI,GAAA,CAAI,IAAA,EAAK,KAAM,EAAA,EAAI;AACrB,QAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,wBAAwB,CAAA;AAC5C,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,UAAU,KAAA,EAAO,IAAA,CAAK,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AACtD,MAAA,IAAI,YAAA,CAAa,MAAM,CAAA,IAAK,MAAA,CAAO,UAAU,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA,EAAG;AAC7E,QAAA,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,CAAA,aAAA,EAAgB,GAAG,CAAA,4CAAA,CAAyC,CAAA;AAChF,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,EAAE,EAAA,EAAI,QAAA,EAAU,MAAM,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,MAAA,EAAQ,KAAK;AAAA,GACxB;AAEA,EAAA,MAAM,UAAA,GAAaA,iBAAA;AAAA,IACjB,CAAC,MAAA,EAAgB,GAAA,EAAyB,IAAA,KAAwB;AAChE,MAAA,MAAM,QAAA,GAAW,UAAU,MAAM,CAAA;AACjC,MAAA,MAAM,YAAY,MAAA,KAAW,EAAA,GAAK,KAAA,GAAQ,SAAA,CAAU,OAAO,QAAQ,CAAA;AACnE,MAAA,MAAM,OAAA,GAAU,YAAY,SAAS,CAAA;AAErC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,CAAI,IAAA,OAAW,EAAA,EAAI;AAC1C,UAAA,MAAA,CAAO,QAAQ,yBAAyB,CAAA;AACxC,UAAA;AAAA,QACF;AACA,QAAA,IAAI,YAAA,CAAa,SAAS,CAAA,IAAK,MAAA,CAAO,UAAU,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,GAAG,CAAA,EAAG;AACnF,UAAA,MAAA,CAAO,MAAA,EAAQ,CAAA,aAAA,EAAgB,GAAG,CAAA,sBAAA,CAAwB,CAAA;AAC1D,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAO,eAAe,KAAA,EAAO,CAAC,GAAG,QAAA,EAAU,OAAA,GAAU,GAAA,GAAM,GAAI,CAAC,CAAA;AACtE,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA,MAAA,CAAO;AAAA,QACL,EAAA,EAAI,QAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,GAAA,EAAK,UAAU,MAAA,GAAY,GAAA;AAAA,QAC3B,KAAA,EAAO,SAAA,CAAU,IAAA,EAAM,IAAI;AAAA,OAC5B,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,KAAK;AAAA,GAC/B;AAEA,EAAA,MAAM,UAAA,GAAaA,iBAAA;AAAA,IACjB,CAAC,WAAmB,aAAA,CAAc,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,IACvE,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,aAAA,GAAgBA,iBAAA;AAAA,IACpB,CAAC,EAAA,KAAe;AACd,MAAA,MAAM,OAAO,aAAA,CAAc,IAAA,CAAK,CAAC,SAAA,KAAc,SAAA,CAAU,OAAO,EAAE,CAAA;AAClE,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,KAAA,EAAO,IAAI,CAAA;AACtC,MAAA,eAAA,GAAkB,cAAc,MAAA,CAAO,CAAC,cAAc,SAAA,CAAU,EAAA,KAAO,EAAE,CAAC,CAAA;AAC1E,MAAA,IAAI,SAAS,KAAA,EAAO;AAClB,QAAA,QAAA,GAAW,MAAM,IAAI,CAAA;AACrB,QAAA,UAAA,GAAa,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,MACvC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,KAAA,EAAO,eAAA,EAAiB,UAAU,UAAU;AAAA,GAC9D;AAEA,EAAA,MAAM,aAAA,GAAgBA,iBAAA;AAAA,IACpB,CAAC,EAAA,KAAe;AACd,MAAA,MAAM,OAAO,aAAA,CAAc,IAAA,CAAK,CAAC,SAAA,KAAc,SAAA,CAAU,OAAO,EAAE,CAAA;AAClE,MAAA,eAAA,GAAkB,cAAc,MAAA,CAAO,CAAC,cAAc,SAAA,CAAU,EAAA,KAAO,EAAE,CAAC,CAAA;AAC1E,MAAA,IAAI,MAAM,UAAA,GAAa,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,eAAA,EAAiB,UAAU;AAAA,GAC7C;AAGA,EAAA,MAAM,KAAA,GAAQF,aAAA;AAAA,IACZ,MACE,UAAA,CAAW;AAAA,MACT,KAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACH,CAAC,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,UAAA,EAAY,UAAU,SAAS;AAAA,GAC3D;AAEA,EAAA,MAAM,eAAA,GAAkB,iBAAiB,KAAK,CAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,KAAK,CAAA,GAAI,OAAA,GAAU,QAAA;AAChD,EAAA,MAAM,cAAc,IAAI,GAAA;AAAA,IACtB,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAU,IAAA,CAAK,IAAA,KAAS,MAAA,GAAS,CAAC,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA,GAAI,EAAG;AAAA,GAC1E;AACA,EAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAEhF,EAAA,MAAM,OAAA,GAAUA,aAAA;AAAA,IACd,OAAO;AAAA,MACL,IAAA,EAAM,WAAW,MAAA,GAAS,IAAA;AAAA,MAC1B,IAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA,EAAU,YAAY,CAAC,QAAA;AAAA,MACvB,WAAA,EAAa,eAAe,CAAC,QAAA;AAAA,MAC7B,WAAA,EAAa,eAAe,CAAC,QAAA;AAAA,MAC7B,YAAA,EAAc,gBAAgB,CAAC,QAAA;AAAA,MAC/B,WAAA;AAAA,MACA,QAAA,EAAU,MAAA;AAAA,MACV,UAAA;AAAA,MACA,cAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,uBACEpB,cAAAA,CAAC,iBAAA,CAAkB,UAAlB,EAA2B,KAAA,EAAO,SACjC,QAAA,kBAAAS,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MAGC,GAAG,IAAA;AAAA,MACJ,8BAAA,EAA6B,EAAA;AAAA,MAC7B,aAAA,EAAa,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAAA,MACjC,mBAAA,EAAmB,YAAA,CAAa,EAAA,GAAK,MAAA,GAAY,MAAA;AAAA,MACjD,WAAA,EAAW,WAAW,UAAA,GAAa,IAAA;AAAA,MACnC,SAAA,EAAWC,oBAAA;AAAA,QACT,mIAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,UAAA,IAAc,OAAO,MAAA,GAAS,CAAA,oBAC7BV,cAAAA,CAAC,SAAI,qCAAA,EAAoC,EAAA,EAAG,SAAA,EAAU,KAAA,EACpD,0BAAAS,eAAAA,CAACc,yBAAA,EAAA,EAAQ,OAAO,YAAA,CAAa,EAAA,GAAK,UAAU,KAAA,EAC1C,QAAA,EAAA;AAAA,0BAAAvB,cAAAA,CAACY,0BAAK,IAAA,EAAK,IAAA,EAAK,QAAO,UAAA,EAAW,SAAA,EAAU,QACzC,QAAA,EAAA,YAAA,CAAa,EAAA,GACV,GAAG,MAAA,CAAO,MAAM,IAAI,MAAA,CAAO,MAAA,KAAW,IAAI,OAAA,GAAU,QAAQ,KAC5D,+DAAA,EACN,CAAA;AAAA,0BACAZ,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,aAAA,EACX,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAACwB,MAAAA,EAAO,KAAA,qBAClBxB,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAS,eAAAA,CAACG,sBAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,IAAA,EAAK,IAAA,EAAK,oCAAA,EAAmC,EAAA,EAAG,WAAA,EAAWY,MAAAA,CAAM,IAAA,EAAM,WAAA,EAAWA,MAAAA,CAAM,IAAA,EACrG,QAAA,EAAA;AAAA,YAAAA,MAAAA,CAAM,IAAA,GAAO,CAAA,EAAGA,MAAAA,CAAM,IAAI,CAAA,QAAA,CAAA,GAAQ,EAAA;AAAA,YAClCA,MAAAA,CAAM;AAAA,WAAA,EACT,CAAA,EAAA,EAJO,CAAA,EAAGA,MAAAA,CAAM,IAAI,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAK7C,CACD,CAAA,EACH;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAGFxB,cAAAA,CAAC,KAAA,EAAA,EAAI,mCAAA,EAAkC,EAAA,EAAG,IAAA,EAAK,MAAA,EAAO,YAAA,EAAY,IAAA,CAAK,YAAY,CAAA,IAAK,eAAA,EACrF,QAAA,EAAA,KAAA,CAAM,MAAA,KAAW,CAAA,mBAChBA,cAAAA,CAACY,sBAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAA,EAAK,IAAA,EAAK,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,WAAA,EAC5C,QAAA,EAAA,UAAA,EACH,CAAA,GAEA,KAAA,CAAM,GAAA;AAAA,UAAI,CAAC,IAAA,KACT,IAAA,CAAK,IAAA,KAAS,MAAA,mBACZZ,cAAAA,CAAC,aAAA,EAAA,EAA8C,IAAA,EAAM,IAAA,CAAK,QAAtC,CAAA,IAAA,EAAO,IAAA,CAAK,KAAK,MAAM,CAAA,CAAqB,oBAEhEA,cAAAA;AAAA,YAAC,iBAAA;AAAA,YAAA;AAAA,cAEC,MAAM,IAAA,CAAK,IAAA;AAAA,cACX,MAAM,IAAA,CAAK,aAAA;AAAA,cACX,OAAO,IAAA,CAAK,KAAA;AAAA,cACZ,eAAe,IAAA,CAAK;AAAA,aAAA;AAAA,YAJf,CAAA,IAAA,EAAO,KAAK,IAAI,CAAA;AAAA;AAKvB,SAEJ,EAEJ,CAAA;AAAA,QAEC,cAAc,MAAA,GAAS,CAAA,oBACtBA,cAAAA,CAAC,KAAA,EAAA,EAAI,+CAA4C,EAAA,EAAG,SAAA,EAAU,mDAAA,EAC3D,QAAA,EAAA,aAAA,CAAc,IAAI,CAAC,IAAA,qBAClBS,eAAAA,CAAC,KAAA,EAAA,EAAkB,WAAU,gCAAA,EAC3B,QAAA,EAAA;AAAA,0BAAAT,cAAAA,CAACY,sBAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,MAAK,IAAA,EAAK,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,mCAAA,EAC/C,QAAA,EAAA,IAAA,CAAK,KAAA,IAAS,YAAA,CAAa,IAAI,CAAA,EAClC,CAAA;AAAA,0BACAZ,cAAAA;AAAA,YAACW,wBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,KAAA,EAAM,SAAA;AAAA,cACN,qCAAA,EAAoC,EAAA;AAAA,cACpC,WAAS,IAAA,CAAK,EAAA;AAAA,cACd,OAAA,EAAS,MAAM,aAAA,CAAc,IAAA,CAAK,EAAE,CAAA;AAAA,cACrC,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACAX,cAAAA;AAAA,YAACW,wBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAQ,OAAA;AAAA,cACR,qCAAA,EAAoC,EAAA;AAAA,cACpC,WAAS,IAAA,CAAK,EAAA;AAAA,cACd,OAAA,EAAS,MAAM,aAAA,CAAc,IAAA,CAAK,EAAE,CAAA;AAAA,cACrC,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EAAA,EArBQ,IAAA,CAAK,EAsBf,CACD,CAAA,EACH,CAAA;AAAA,QAGD,eAAA,IAAmB,YAAY,CAAC,QAAA,oBAC/BX,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,UAACW,wBAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,IAAA,EAAK,MAAA;AAAA,YACL,kCAAA,EAAiC,EAAA;AAAA,YACjC,WAAA,EAAU,EAAA;AAAA,YACV,SAAS,MAAM,WAAA,CAAY,QAAA,KAAa,EAAA,GAAK,OAAO,EAAE,CAAA;AAAA,YAErD,QAAA,EAAA,QAAA,KAAa,UAAU,aAAA,GAAgB;AAAA;AAAA,SAC1C,EACF;AAAA;AAAA;AAAA,GAEJ,EACF,CAAA;AAEJ,CAAC;AAWD,SAAS,UAAA,CAAW;AAAA,EAClB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAoC;AAClC,EAAA,MAAM,MAAoB,EAAC;AAC3B,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAA6B;AACxD,EAAA,KAAA,MAAWa,UAAS,SAAA,EAAW;AAC7B,IAAA,IAAIA,MAAAA,CAAM,IAAA,KAAS,MAAA,IAAU,CAAC,cAAA,CAAe,GAAA,CAAIA,MAAAA,CAAM,IAAI,CAAA,EAAG,cAAA,CAAe,GAAA,CAAIA,MAAAA,CAAM,MAAMA,MAAK,CAAA;AAAA,EACpG;AAEA,EAAA,MAAM,QAAA,GAAW,CACf,QAAA,EACA,IAAA,EACA,OACA,UAAA,KACmB;AACnB,IAAA,MAAM,OAAO,QAAA,CAAS,MAAA,GAAS,IAAI,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAA,GAAI,MAAA;AACrE,IAAA,MAAM,IAAA,GAAO,IAAA,EAAM,IAAA,IAAQ,SAAA,CAAU,IAAI,CAAA;AACzC,IAAA,MAAM,MAAA,GAAS,aAAa,QAAQ,CAAA;AACpC,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,GAAA,CAAI,MAAM,CAAA;AAG1C,IAAA,MAAM,YAAY,CAAC,QAAA,IAAY,IAAA,KAAS,MAAA,IAAU,iBAAiB,IAAI,CAAA;AAEvE,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,MAAA;AAAA,MACA,GAAA,EAAK,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,IAAK,SAAA;AAAA,MACtC,KAAA;AAAA,MACA,KAAA,EAAO,IAAA;AAAA,MACP,UAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAU,IAAA,KAAS,MAAA;AAAA,MACnB,SAAA;AAAA,MACA,UAAA,EAAY,WAAA,CAAY,IAAI,CAAA,GACxB,IAAA,CAAK,MAAA,GACL,YAAA,CAAa,IAAI,CAAA,GACf,MAAA,CAAO,IAAA,CAAK,IAAI,EAAE,MAAA,GAClB,CAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,EAAiB,QAAA,EAAoB,KAAA,KAAkB;AAC3E,IAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACrB,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU,KAAK,KAAA,EAAO,CAAC,GAAG,QAAA,EAAU,OAAO,KAAK,CAAC,CAAA,EAAG,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,IAC1F,CAAA,MAAA,IAAW,YAAA,CAAa,IAAI,CAAA,EAAG;AAC7B,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC/C,QAAA,IAAA,CAAK,OAAO,CAAC,GAAG,UAAU,GAAG,CAAA,EAAG,OAAO,QAAQ,CAAA;AAAA,MACjD;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CACX,IAAA,EACA,QAAA,EACA,OACA,UAAA,KACG;AACH,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,EAAU,IAAA,EAAM,OAAO,UAAU,CAAA;AACxD,IAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAO,CAAA;AAEtC,IAAA,IAAI,CAAC,KAAA,CAAM,SAAA,IAAa,CAAC,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA,EAAG;AAEnD,IAAA,YAAA,CAAa,IAAA,EAAM,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAA;AACtC,IAAA,IAAI,QAAA,KAAa,MAAM,MAAA,EAAQ;AAC7B,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,KAAA;AAAA,QACN,MAAM,KAAA,CAAM,MAAA;AAAA,QACZ,aAAA,EAAe,WAAA,CAAY,IAAI,CAAA,GAAI,OAAA,GAAU,QAAA;AAAA,QAC7C,OAAO,KAAA,GAAQ,CAAA;AAAA,QACf,aAAA,EAAe,eAAe,KAAA,EAAO,CAAC,GAAG,QAAA,EAAU,GAAG,CAAC,CAAA,EAAG;AAAA,OAC3D,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,IAAA,YAAA,CAAa,KAAA,EAAO,EAAC,EAAG,CAAC,CAAA;AACzB,IAAA,IAAI,aAAa,EAAA,EAAI;AACnB,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,KAAA;AAAA,QACN,IAAA,EAAM,EAAA;AAAA,QACN,aAAA,EAAe,WAAA,CAAY,KAAK,CAAA,GAAI,OAAA,GAAU,QAAA;AAAA,QAC9C,KAAA,EAAO,CAAA;AAAA,QACP,eAAe,cAAA,CAAe,KAAA,EAAO,CAAC,GAAG,CAAC,CAAA,EAAG;AAAA,OAC9C,CAAA;AAAA,IACH;AAAA,EACF,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAA,CAAS,EAAC,EAAG,KAAA,EAAO,CAAA,EAAG,MAAM,CAAA,EAAG,CAAA;AAAA,EACjE;AAEA,EAAA,OAAO,GAAA;AACT","file":"chunk-JX6NKLQV.cjs","sourcesContent":["import type {\n  JsonArray,\n  JsonEditorEdit,\n  JsonObject,\n  JsonPath,\n  JsonValue,\n} from \"./JsonEditor.types\";\n\n// ---------------------------------------------------------------------------\n// Paths\n//\n// The wire form of a path is a dotted string — `user.address.city`,\n// `orders.0.total` — because that is what fits in a `data-*` attribute, a\n// keyMap key, an MCP tool argument, and a log line. `.` separates segments and\n// `\\` escapes, so a key that genuinely contains a dot is still addressable\n// (`meta.a\\.b` is `[\"meta\", \"a.b\"]`, not three segments).\n// ---------------------------------------------------------------------------\n\nexport function isJsonObject(value: JsonValue | undefined): value is JsonObject {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isJsonArray(value: JsonValue | undefined): value is JsonArray {\n  return Array.isArray(value);\n}\n\nexport function isContainerValue(value: JsonValue | undefined): boolean {\n  return isJsonObject(value) || isJsonArray(value);\n}\n\n/** Split a dotted path into segments, honouring `\\.` and `\\\\`. */\nexport function parsePath(path: string): JsonPath {\n  if (!path) return [];\n\n  const segments: string[] = [];\n  let current = \"\";\n  let escaped = false;\n\n  for (const char of path) {\n    if (escaped) {\n      current += char;\n      escaped = false;\n      continue;\n    }\n    if (char === \"\\\\\") {\n      escaped = true;\n      continue;\n    }\n    if (char === \".\") {\n      segments.push(current);\n      current = \"\";\n      continue;\n    }\n    current += char;\n  }\n  // A trailing lone backslash is a typo, not a separator — keep it literal\n  // rather than throwing on a half-typed path.\n  if (escaped) current += \"\\\\\";\n  segments.push(current);\n\n  return segments;\n}\n\n/** The inverse of {@link parsePath}. */\nexport function pathToString(segments: JsonPath): string {\n  return segments\n    .map((segment) => segment.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\./g, \"\\\\.\"))\n    .join(\".\");\n}\n\nexport function getAtPath(value: JsonValue, segments: JsonPath): JsonValue | undefined {\n  let current: JsonValue | undefined = value;\n\n  for (const segment of segments) {\n    if (isJsonArray(current)) {\n      const index = Number(segment);\n      if (!Number.isInteger(index)) return undefined;\n      current = current[index];\n    } else if (isJsonObject(current)) {\n      if (!Object.prototype.hasOwnProperty.call(current, segment)) return undefined;\n      current = current[segment];\n    } else {\n      return undefined;\n    }\n    if (current === undefined) return undefined;\n  }\n\n  return current;\n}\n\n/**\n * Rebuild `value` with `updater` applied to the container at `segments`,\n * cloning only the containers along that path. Returns the original reference\n * when the path does not resolve, so a no-op edit is detectable by identity.\n */\nfunction updateContainer(\n  value: JsonValue,\n  segments: JsonPath,\n  updater: (container: JsonObject | JsonArray) => JsonObject | JsonArray | undefined,\n): JsonValue {\n  if (segments.length === 0) {\n    if (!isContainerValue(value)) return value;\n    const next = updater(value as JsonObject | JsonArray);\n    return next === undefined ? value : next;\n  }\n\n  const [head, ...rest] = segments as [string, ...string[]];\n\n  if (isJsonArray(value)) {\n    const index = Number(head);\n    if (!Number.isInteger(index) || index < 0 || index >= value.length) return value;\n    const child = updateContainer(value[index]!, rest, updater);\n    if (child === value[index]) return value;\n    const clone = value.slice();\n    clone[index] = child;\n    return clone;\n  }\n\n  if (isJsonObject(value)) {\n    if (!Object.prototype.hasOwnProperty.call(value, head)) return value;\n    const child = updateContainer(value[head]!, rest, updater);\n    if (child === value[head]) return value;\n    return { ...value, [head]: child };\n  }\n\n  return value;\n}\n\n/**\n * Apply one {@link JsonEditorEdit} and return a NEW document.\n *\n * Pure and total: an edit that cannot be applied — a path that does not exist,\n * a rename onto an occupied key, an insert without a key into an object —\n * returns the input unchanged rather than throwing or half-applying. The\n * component checks those cases first and raises an issue; this function is the\n * backstop for the same op arriving from a bridge, where there is no UI to warn.\n */\nexport function applyJsonEdit(value: JsonValue, edit: JsonEditorEdit): JsonValue {\n  const segments = parsePath(edit.path);\n\n  switch (edit.op) {\n    case \"set\": {\n      // An empty path is the document itself.\n      if (segments.length === 0) return edit.value;\n\n      const parent = segments.slice(0, -1);\n      const key = segments[segments.length - 1]!;\n\n      return updateContainer(value, parent, (container) => {\n        if (isJsonArray(container)) {\n          const index = Number(key);\n          if (!Number.isInteger(index) || index < 0 || index >= container.length) return undefined;\n          const clone = container.slice();\n          clone[index] = edit.value;\n          return clone;\n        }\n        return { ...container, [key]: edit.value };\n      });\n    }\n\n    case \"remove\": {\n      if (segments.length === 0) return value;\n\n      const parent = segments.slice(0, -1);\n      const key = segments[segments.length - 1]!;\n\n      return updateContainer(value, parent, (container) => {\n        if (isJsonArray(container)) {\n          const index = Number(key);\n          if (!Number.isInteger(index) || index < 0 || index >= container.length) return undefined;\n          return container.filter((_, i) => i !== index);\n        }\n        if (!Object.prototype.hasOwnProperty.call(container, key)) return undefined;\n        const clone: JsonObject = {};\n        for (const [k, v] of Object.entries(container)) {\n          if (k !== key) clone[k] = v;\n        }\n        return clone;\n      });\n    }\n\n    case \"rename\": {\n      if (segments.length === 0) return value;\n\n      const parent = segments.slice(0, -1);\n      const key = segments[segments.length - 1]!;\n\n      return updateContainer(value, parent, (container) => {\n        // Array indices are positional, not names — reorder is `move`.\n        if (!isJsonObject(container)) return undefined;\n        if (!Object.prototype.hasOwnProperty.call(container, key)) return undefined;\n        if (edit.key === key) return undefined;\n        // Renaming onto a live sibling would silently destroy it.\n        if (Object.prototype.hasOwnProperty.call(container, edit.key)) return undefined;\n\n        // Rebuilt in order: `delete` + re-add would move the key to the end,\n        // which reads as the row jumping down the list for no reason.\n        const clone: JsonObject = {};\n        for (const [k, v] of Object.entries(container)) {\n          clone[k === key ? edit.key : k] = v;\n        }\n        return clone;\n      });\n    }\n\n    case \"insert\": {\n      return updateContainer(value, segments, (container) => {\n        if (isJsonArray(container)) return [...container, edit.value];\n        if (edit.key === undefined || edit.key === \"\") return undefined;\n        if (Object.prototype.hasOwnProperty.call(container, edit.key)) return undefined;\n        return { ...container, [edit.key]: edit.value };\n      });\n    }\n\n    case \"move\": {\n      if (segments.length === 0) return value;\n\n      const parent = segments.slice(0, -1);\n      const from = Number(segments[segments.length - 1]);\n\n      return updateContainer(value, parent, (container) => {\n        if (!isJsonArray(container)) return undefined;\n        if (!Number.isInteger(from) || from < 0 || from >= container.length) return undefined;\n        const to = Math.min(Math.max(edit.to, 0), container.length - 1);\n        if (to === from) return undefined;\n        const clone = container.slice();\n        const [moved] = clone.splice(from, 1);\n        clone.splice(to, 0, moved!);\n        return clone;\n      });\n    }\n  }\n}\n\n/** A one-line summary of an edit, for the pending strip and activity events. */\nexport function describeEdit(edit: JsonEditorEdit): string {\n  const at = edit.path === \"\" ? \"the document\" : edit.path;\n  switch (edit.op) {\n    case \"set\":\n      return `set ${at}`;\n    case \"remove\":\n      return `remove ${at}`;\n    case \"rename\":\n      return `rename ${at} to ${edit.key}`;\n    case \"insert\":\n      return edit.key === undefined ? `append to ${at}` : `add ${edit.key} to ${at}`;\n    case \"move\":\n      return `move ${at} to index ${edit.to}`;\n  }\n}\n","import type { HTMLAttributes } from \"react\";\nimport type { InputOption } from \"../inputs/inputs.types\";\nimport type { FieldMode } from \"../inputs/inputs.types\";\nimport type { Size } from \"../../utils/types\";\n\n// ---------------------------------------------------------------------------\n// JSON\n// ---------------------------------------------------------------------------\n\nexport type JsonPrimitive = string | number | boolean | null;\n\nexport interface JsonObject {\n  [key: string]: JsonValue;\n}\n\nexport type JsonArray = JsonValue[];\n\nexport type JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * A location inside a JSON document, one array element per segment. Array\n * indices are decimal STRINGS (`[\"orders\", \"0\", \"total\"]`) so a path is a plain\n * `string[]` an agent can emit without a tagged union, and so object keys and\n * array indices are addressed identically.\n *\n * The wire form is the dotted string produced by `pathToString` — see\n * `JsonEditor.paths.ts` for the escaping rule.\n */\nexport type JsonPath = string[];\n\n// ---------------------------------------------------------------------------\n// Declared types\n// ---------------------------------------------------------------------------\n\n/**\n * The data types a `keyMap` can impose on a JSON value.\n *\n * Each one owes BOTH a read-only representation and an edit control — that\n * pairing is the whole point of the feature, so a type with no distinct input\n * does not earn a place here.\n *\n * `json` is the escape hatch: it matches any value and edits as raw text, which\n * is how a sub-document opts out of the row-per-key treatment.\n */\nexport const JSON_FIELD_TYPES = [\n  \"string\",\n  \"text\",\n  \"number\",\n  \"integer\",\n  \"boolean\",\n  \"date\",\n  \"datetime\",\n  \"enum\",\n  \"secret\",\n  \"url\",\n  \"email\",\n  \"color\",\n  \"json\",\n  \"object\",\n  \"array\",\n] as const;\n\nexport type JsonFieldType = (typeof JSON_FIELD_TYPES)[number];\n\n/**\n * The long form of a `keyMap` entry. The short form — a bare type name — is\n * sugar for `{ type }`.\n */\nexport interface JsonKeyRule {\n  type: JsonFieldType;\n  /** Overrides the raw key as the row's label. */\n  label?: string;\n  /** Choices for `type: \"enum\"`. Required there; ignored elsewhere. */\n  options?: InputOption[];\n  /** Render the value but never offer a control for it. */\n  readOnly?: boolean;\n  /** The key must be present. Only enforced on wildcard-free patterns. */\n  required?: boolean;\n  description?: string;\n  placeholder?: string;\n  /** Forwarded to the control for `number` / `integer` / `date` / `datetime`. */\n  min?: number | string;\n  max?: number | string;\n}\n\n/** One compiled `keyMap` entry: a path pattern plus the rule it imposes. */\nexport interface JsonKeyMapEntry {\n  /** Path pattern; a `\"*\"` segment matches any single key or index. */\n  pattern: JsonPath;\n  rule: JsonKeyRule;\n  /** The key exactly as written in the `keyMap`, for error messages. */\n  source: string;\n  /** Non-wildcard segment count — the specificity score. */\n  literals: number;\n  /** Declaration order, the tie-breaker at equal specificity. */\n  order: number;\n}\n\nexport interface ParsedKeyMap {\n  /**\n   * `false` only when the STRING itself was unusable (unparseable, or valid\n   * JSON of the wrong shape). Individual bad rules leave this `true` — they are\n   * reported and skipped so one typo cannot silently disable a whole map.\n   */\n  ok: boolean;\n  rules: JsonKeyMapEntry[];\n  issues: JsonEditorIssue[];\n}\n\n// ---------------------------------------------------------------------------\n// Issues\n// ---------------------------------------------------------------------------\n\n/**\n * Everything the editor knows to be wrong, in one shape.\n *\n * A typing feature that silently stops typing things is worse than no typing at\n * all, because the caller believes the constraint is in force. So a broken\n * `keyMap`, a broken rule inside a working one, and a value that contradicts\n * its declared type all surface through the SAME channel — the panel, the\n * `data-issues` count, and `onIssuesChange`.\n */\nexport interface JsonEditorIssue {\n  /**\n   * - `keymap` — the `keyMap` string could not be used at all.\n   * - `rule`   — one entry in an otherwise-usable map is malformed.\n   * - `type`   — a value contradicts the type declared for its path.\n   * - `edit`   — a structural edit was refused (duplicate key, and the like).\n   */\n  kind: \"keymap\" | \"rule\" | \"type\" | \"edit\";\n  /** Dotted path; `\"\"` for the `keyMap` as a whole. */\n  path: string;\n  message: string;\n  /** The declared type, when the issue has one. */\n  expected?: JsonFieldType;\n  /** What the value actually is: `\"string\"`, `\"array\"`, `\"null\"`, … */\n  actual?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Edits\n// ---------------------------------------------------------------------------\n\n/**\n * One mutation, as data.\n *\n * Every change the UI makes is expressed as one of these and applied through\n * `applyJsonEdit`, which means an MCP bridge can replay exactly what a human\n * did — and `pendingMode` can hold one in a queue instead of applying it —\n * without a second code path.\n */\nexport type JsonEditorEditBase = {\n  id?: string;\n  /** Human-readable summary, used by the pending strip. */\n  label?: string;\n};\n\nexport type JsonEditorEdit =\n  | (JsonEditorEditBase & { op: \"set\"; path: string; value: JsonValue })\n  | (JsonEditorEditBase & { op: \"remove\"; path: string })\n  | (JsonEditorEditBase & { op: \"rename\"; path: string; key: string })\n  /** `path` is the CONTAINER. `key` is required for an object, ignored for an array. */\n  | (JsonEditorEditBase & { op: \"insert\"; path: string; key?: string; value: JsonValue })\n  /** `path` is the element; `to` is its new index in the same array. */\n  | (JsonEditorEditBase & { op: \"move\"; path: string; to: number });\n\nexport type JsonEditorPendingEdit = JsonEditorEdit & { id: string };\n\nexport interface JsonEditorActivity {\n  /** `commit` — applied to the document. `stage` / `accept` / `reject` — pending flow. */\n  type: \"commit\" | \"stage\" | \"accept\" | \"reject\";\n  edit: JsonEditorEdit;\n}\n\n// ---------------------------------------------------------------------------\n// Rows\n// ---------------------------------------------------------------------------\n\n/** One rendered key/value row — also the unit a bridge would address. */\nexport interface JsonEditorNode {\n  path: JsonPath;\n  /** `pathToString(path)`; `\"\"` for a scalar root. */\n  dotted: string;\n  /** The last segment: an object key or an array index. */\n  key: string;\n  depth: number;\n  value: JsonValue;\n  parentKind: \"object\" | \"array\" | \"root\";\n  /** The rule that matched, if any. */\n  rule?: JsonKeyRule;\n  /** Declared type if a rule matched, otherwise inferred from the value. */\n  type: JsonFieldType;\n  declared: boolean;\n  /** Renders as a collapsible branch rather than a value. */\n  container: boolean;\n  childCount: number;\n  /** Set when the value contradicts its declared type. */\n  conflict?: JsonEditorIssue;\n}\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\nexport interface JsonEditorProps\n  extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\"> {\n  /** The document. Controlled — the editor keeps no copy of it. */\n  value: JsonValue;\n  /**\n   * Called with the WHOLE next document plus the edit that produced it. The\n   * edit is what a bridge would log, replay, or undo.\n   */\n  onChange?: (value: JsonValue, edit: JsonEditorEdit) => void;\n  /**\n   * Type declarations, as a **JSON string** — not an object, and an object is\n   * NOT accepted as a convenience overload.\n   *\n   * A string survives every boundary this prop actually crosses: an MCP tool\n   * argument, a config column, a `data-*` attribute, a form field. A live\n   * object survives none of them, so accepting both would make the documented\n   * form the second-class one in practice.\n   *\n   * ```jsonc\n   * {\n   *   \"user.age\":       \"number\",           // short form: a bare type name\n   *   \"tags.*\":         \"string\",           // every element of an array\n   *   \"orders.*.total\": \"number\",\n   *   \"role\": { \"type\": \"enum\", \"options\": [\"admin\", \"member\"] }\n   * }\n   * ```\n   *\n   * Malformed input is never thrown and never silently ignored — see\n   * {@link JsonEditorIssue}.\n   */\n  keyMap?: string | null;\n  /**\n   * `\"view\"` (the default here) renders values as text that turns into the\n   * typed control when clicked; `\"edit\"` renders every control at once.\n   *\n   * The kit default is `\"edit\"`, and this component deliberately differs: a\n   * forty-key document drawn as forty boxed inputs is not a document you can\n   * read, and reading is most of what a JSON editor is for.\n   */\n  mode?: FieldMode;\n  size?: Size;\n  /** Show every value, offer no control. Overrides `mode` and every `allow*`. */\n  readOnly?: boolean;\n  /**\n   * Dotted paths of the expanded containers. Omit BOTH this and\n   * `defaultExpanded` to expand everything (pass `defaultExpanded={[]}` for a\n   * large document).\n   */\n  expanded?: string[];\n  defaultExpanded?: string[];\n  onExpandedChange?: (expanded: string[]) => void;\n  /** Render the issues panel. The `data-issues` count and `onIssuesChange` are unaffected. */\n  showIssues?: boolean;\n  onIssuesChange?: (issues: JsonEditorIssue[]) => void;\n  /**\n   * Trust-but-verify. With this on, an edit is STAGED into `pending` instead of\n   * being applied: `onChange` does not fire until a human accepts it.\n   */\n  pendingMode?: boolean;\n  /** Staged edits. Controlled, so an agent's proposals are inspectable. */\n  pending?: JsonEditorPendingEdit[];\n  onPendingChange?: (pending: JsonEditorPendingEdit[]) => void;\n  /** Every mutation, staged or applied — the hook presence / undo layers listen on. */\n  onActivity?: (event: JsonEditorActivity) => void;\n  allowAdd?: boolean;\n  allowRemove?: boolean;\n  allowRename?: boolean;\n  allowReorder?: boolean;\n  /** Label for a scalar root document. Default `\"value\"`. */\n  rootLabel?: string;\n  /** Shown when the document has no keys. */\n  emptyLabel?: string;\n  /** Prefix for generated control ids — `<idPrefix>-<dotted path>`. */\n  idPrefix?: string;\n}\n","import { resolveOption } from \"../inputs/inputs.utils\";\nimport {\n  getAtPath,\n  isJsonArray,\n  isJsonObject,\n  parsePath,\n  pathToString,\n} from \"./JsonEditor.paths\";\nimport { JSON_FIELD_TYPES } from \"./JsonEditor.types\";\nimport type {\n  JsonEditorIssue,\n  JsonFieldType,\n  JsonKeyMapEntry,\n  JsonKeyRule,\n  JsonPath,\n  JsonValue,\n  ParsedKeyMap,\n} from \"./JsonEditor.types\";\n\n// ---------------------------------------------------------------------------\n// The keyMap\n//\n// Shape: a FLAT object whose keys are dotted path patterns and whose values are\n// either a bare type name or a rule object.\n//\n//   { \"user.age\": \"number\", \"orders.*.total\": \"number\", \"tags.*\": \"string\" }\n//\n// Why flat paths rather than a nested mirror of the data:\n//\n//  - A nested mirror is ambiguous the moment a key needs a type AND typed\n//    children — `{\"user\": {\"age\": \"number\"}}` could mean either, and resolving\n//    it needs a magic key (`$type`) that a flat map does not.\n//  - Arrays force a wildcard into a nested mirror anyway, so the mirror buys\n//    nothing there and costs a level of nesting per segment.\n//  - One rule per line is greppable, diffable and reviewable, which matters\n//    when the map arrives as a string from an agent or a config column.\n//  - It is sparse by construction: you declare the keys you care about, and\n//    everything else is inferred from the value.\n//\n// A `*` segment matches exactly one key or index. There is deliberately no\n// `**`: \"any depth\" makes two patterns overlap in ways that are hard to reason\n// about, and every case we had for it was really \"this array's elements\".\n// ---------------------------------------------------------------------------\n\nconst TYPE_NAMES = new Set<string>(JSON_FIELD_TYPES);\n\nfunction isTypeName(value: unknown): value is JsonFieldType {\n  return typeof value === \"string\" && TYPE_NAMES.has(value);\n}\n\nfunction issue(kind: JsonEditorIssue[\"kind\"], path: string, message: string): JsonEditorIssue {\n  return { kind, path, message };\n}\n\n/**\n * Compile a `keyMap` JSON **string**.\n *\n * Never throws. Two failure modes, deliberately distinct:\n *\n *  - The string itself is unusable (not JSON, or JSON that is not an object) —\n *    `ok: false`, no rules, one `keymap` issue. The caller must show this: an\n *    editor that quietly runs untyped is worse than one that refuses, because\n *    the person editing believes the constraint is in force.\n *  - One entry is malformed — `ok: true`, that entry dropped, one `rule` issue.\n *    A typo in `orders.*.totl` must not disable the other forty rules.\n */\nexport function parseKeyMap(source?: string | null): ParsedKeyMap {\n  if (source === undefined || source === null || source.trim() === \"\") {\n    return { ok: true, rules: [], issues: [] };\n  }\n\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(source);\n  } catch (error) {\n    return {\n      ok: false,\n      rules: [],\n      issues: [\n        issue(\n          \"keymap\",\n          \"\",\n          `keyMap is not valid JSON: ${error instanceof Error ? error.message : String(error)}`,\n        ),\n      ],\n    };\n  }\n\n  if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n    return {\n      ok: false,\n      rules: [],\n      issues: [\n        issue(\n          \"keymap\",\n          \"\",\n          `keyMap must be a JSON object of path → type, got ${describeValue(parsed as JsonValue)}.`,\n        ),\n      ],\n    };\n  }\n\n  const rules: JsonKeyMapEntry[] = [];\n  const issues: JsonEditorIssue[] = [];\n  let order = 0;\n\n  for (const [key, raw] of Object.entries(parsed as Record<string, unknown>)) {\n    const rule = normalizeRule(key, raw, issues);\n    if (!rule) continue;\n\n    const pattern = parsePath(key);\n    rules.push({\n      pattern,\n      rule,\n      source: key,\n      literals: pattern.reduce((n, segment) => n + (segment === \"*\" ? 0 : 1), 0),\n      order: order++,\n    });\n  }\n\n  return { ok: true, rules, issues };\n}\n\nfunction normalizeRule(\n  key: string,\n  raw: unknown,\n  issues: JsonEditorIssue[],\n): JsonKeyRule | undefined {\n  let candidate: Record<string, unknown>;\n\n  if (typeof raw === \"string\") {\n    candidate = { type: raw };\n  } else if (typeof raw === \"object\" && raw !== null && !Array.isArray(raw)) {\n    candidate = raw as Record<string, unknown>;\n  } else {\n    issues.push(\n      issue(\n        \"rule\",\n        key,\n        `Expected a type name or a rule object, got ${describeValue(raw as JsonValue)}.`,\n      ),\n    );\n    return undefined;\n  }\n\n  if (!isTypeName(candidate.type)) {\n    issues.push(\n      issue(\n        \"rule\",\n        key,\n        `Unknown type ${JSON.stringify(candidate.type)}. Known types: ${JSON_FIELD_TYPES.join(\", \")}.`,\n      ),\n    );\n    return undefined;\n  }\n\n  if (candidate.options !== undefined && !Array.isArray(candidate.options)) {\n    issues.push(issue(\"rule\", key, \"`options` must be an array.\"));\n    return undefined;\n  }\n\n  // An enum with nothing to choose from cannot type anything, and would render\n  // an empty select that looks like a loading state.\n  if (candidate.type === \"enum\" && (!candidate.options || candidate.options.length === 0)) {\n    issues.push(issue(\"rule\", key, \"`enum` requires a non-empty `options` array.\"));\n    return undefined;\n  }\n\n  return candidate as unknown as JsonKeyRule;\n}\n\n/**\n * The rule governing `segments`, or `undefined` when the map is silent.\n *\n * Specificity: the pattern with the most literal (non-`*`) segments wins, and\n * at equal specificity the one declared LAST wins — so a general\n * `orders.*.total` can be overridden by a specific `orders.0.total` placed\n * anywhere in the map.\n */\nexport function resolveKeyRule(\n  rules: JsonKeyMapEntry[],\n  segments: JsonPath,\n): JsonKeyRule | undefined {\n  let best: JsonKeyMapEntry | undefined;\n\n  for (const entry of rules) {\n    if (!matches(entry.pattern, segments)) continue;\n    if (\n      !best ||\n      entry.literals > best.literals ||\n      (entry.literals === best.literals && entry.order > best.order)\n    ) {\n      best = entry;\n    }\n  }\n\n  return best?.rule;\n}\n\nfunction matches(pattern: JsonPath, segments: JsonPath): boolean {\n  if (pattern.length !== segments.length) return false;\n  return pattern.every((p, i) => p === \"*\" || p === segments[i]);\n}\n\n/** What a value IS, in the vocabulary the issue messages use. */\nexport function describeValue(value: JsonValue | undefined): string {\n  if (value === undefined) return \"undefined\";\n  if (value === null) return \"null\";\n  if (Array.isArray(value)) return \"array\";\n  return typeof value;\n}\n\n/** The type a value carries on its own, when nothing declares one for it. */\nexport function inferType(value: JsonValue | undefined): JsonFieldType {\n  if (Array.isArray(value)) return \"array\";\n  if (value === null || value === undefined) {\n    // `null` carries no type information at all, so the raw editor is the only\n    // choice that neither invents a type nor drops the value.\n    return \"json\";\n  }\n  if (typeof value === \"object\") return \"object\";\n  if (typeof value === \"boolean\") return \"boolean\";\n  if (typeof value === \"number\") return \"number\";\n  return \"string\";\n}\n\nfunction enumValues(rule: JsonKeyRule): (string | number | boolean)[] {\n  return (rule.options ?? []).map((option) => resolveOption(option).value as string);\n}\n\n/**\n * Does the value satisfy the declared type?\n *\n * Deliberately strict and deliberately non-coercing. `\"36\"` is NOT a number\n * here — the whole reason a `keyMap` exists is to make that visible rather than\n * to paper over it.\n */\nexport function typeMatches(rule: JsonKeyRule, value: JsonValue | undefined): boolean {\n  switch (rule.type) {\n    case \"string\":\n    case \"text\":\n    case \"url\":\n    case \"email\":\n    case \"secret\":\n    case \"color\":\n      return typeof value === \"string\";\n    case \"number\":\n      return typeof value === \"number\" && Number.isFinite(value);\n    case \"integer\":\n      return typeof value === \"number\" && Number.isInteger(value);\n    case \"boolean\":\n      return typeof value === \"boolean\";\n    case \"date\":\n    case \"datetime\":\n      return typeof value === \"string\" && value !== \"\" && !Number.isNaN(Date.parse(value));\n    case \"enum\":\n      return (\n        (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") &&\n        enumValues(rule).some((option) => String(option) === String(value))\n      );\n    case \"object\":\n      return isJsonObject(value);\n    case \"array\":\n      return isJsonArray(value);\n    case \"json\":\n      // The escape hatch matches anything EXCEPT text that does not parse —\n      // which is exactly the state the raw editor leaves behind when someone\n      // saves a half-written document.\n      if (typeof value !== \"string\") return true;\n      try {\n        JSON.parse(value);\n        return true;\n      } catch {\n        return false;\n      }\n  }\n}\n\nfunction conflictMessage(rule: JsonKeyRule, value: JsonValue | undefined): string {\n  if (rule.type === \"enum\") {\n    return `${JSON.stringify(value)} is not one of the declared options (${enumValues(rule)\n      .map((option) => JSON.stringify(option))\n      .join(\", \")}).`;\n  }\n  if (rule.type === \"json\") {\n    return \"Raw text is not valid JSON.\";\n  }\n  if (rule.type === \"date\" || rule.type === \"datetime\") {\n    return `Declared ${rule.type}, got ${describeValue(value)} that is not a parseable date.`;\n  }\n  return `Declared ${rule.type}, got ${describeValue(value)}.`;\n}\n\n/**\n * Every place the document contradicts its `keyMap`.\n *\n * Walks the value (so a conflict is found at any depth, arrays included), then\n * checks `required` on the wildcard-free patterns — a wildcard cannot say \"this\n * must exist\" about a key nobody has named.\n */\nexport function findJsonConflicts(value: JsonValue, rules: JsonKeyMapEntry[]): JsonEditorIssue[] {\n  const issues: JsonEditorIssue[] = [];\n  if (rules.length === 0) return issues;\n\n  const walk = (node: JsonValue, segments: JsonPath) => {\n    if (segments.length > 0) {\n      const rule = resolveKeyRule(rules, segments);\n      if (rule && !typeMatches(rule, node)) {\n        issues.push({\n          kind: \"type\",\n          path: pathToString(segments),\n          message: conflictMessage(rule, node),\n          expected: rule.type,\n          actual: describeValue(node),\n        });\n      }\n    }\n\n    if (isJsonArray(node)) {\n      node.forEach((child, index) => walk(child, [...segments, String(index)]));\n    } else if (isJsonObject(node)) {\n      for (const [key, child] of Object.entries(node)) walk(child, [...segments, key]);\n    }\n  };\n\n  walk(value, []);\n\n  for (const entry of rules) {\n    if (!entry.rule.required) continue;\n    if (entry.pattern.includes(\"*\")) continue;\n    if (getAtPath(value, entry.pattern) !== undefined) continue;\n    issues.push({\n      kind: \"type\",\n      path: entry.source,\n      message: `Required key is missing (declared ${entry.rule.type}).`,\n      expected: entry.rule.type,\n      actual: \"undefined\",\n    });\n  }\n\n  return issues;\n}\n\n/** The value a newly-added key starts as, so a new row is never `undefined`. */\nexport function seedValue(type: JsonFieldType, rule?: JsonKeyRule): JsonValue {\n  switch (type) {\n    case \"number\":\n    case \"integer\":\n      return 0;\n    case \"boolean\":\n      return false;\n    case \"object\":\n      return {};\n    case \"array\":\n      return [];\n    case \"json\":\n      return null;\n    case \"enum\":\n      return rule?.options?.length ? (resolveOption(rule.options[0]!).value as string) : \"\";\n    default:\n      return \"\";\n  }\n}\n","import { createContext, useContext } from \"react\";\nimport type { FieldMode } from \"../inputs/inputs.types\";\nimport type { Size } from \"../../utils/types\";\nimport type {\n  JsonEditorNode,\n  JsonEditorPendingEdit,\n  JsonFieldType,\n  JsonValue,\n} from \"./JsonEditor.types\";\n\n/**\n * Everything a row needs that is not the row itself.\n *\n * Same shape as `Table`'s context and for the same reason: a row is rendered\n * once per key in a document that can be hundreds deep, and threading a dozen\n * props through the recursion makes every signature change a rewrite.\n */\nexport interface JsonEditorContextValue {\n  mode: FieldMode;\n  size: Size;\n  readOnly: boolean;\n  allowAdd: boolean;\n  allowRemove: boolean;\n  allowRename: boolean;\n  allowReorder: boolean;\n  pendingMode: boolean;\n  idPrefix: string;\n\n  isExpanded: (dotted: string) => boolean;\n  toggleExpanded: (dotted: string) => void;\n\n  setValueAt: (node: JsonEditorNode, value: JsonValue) => void;\n  removeAt: (node: JsonEditorNode) => void;\n  renameAt: (node: JsonEditorNode, key: string) => void;\n  moveAt: (node: JsonEditorNode, to: number) => void;\n  insertInto: (dotted: string, key: string | undefined, type: JsonFieldType) => void;\n\n  /** Which container's add form is open, if any. Transient UI state, never model state. */\n  addingAt: string | null;\n  setAddingAt: (dotted: string | null) => void;\n\n  pendingFor: (dotted: string) => JsonEditorPendingEdit[];\n  acceptPending: (id: string) => void;\n  rejectPending: (id: string) => void;\n}\n\nexport const JsonEditorContext = createContext<JsonEditorContextValue | null>(null);\n\nexport function useJsonEditorContext(): JsonEditorContextValue {\n  const context = useContext(JsonEditorContext);\n  if (!context) {\n    throw new Error(\"JsonEditor rows must be rendered inside a <JsonEditor>.\");\n  }\n  return context;\n}\n","import { ColorPicker } from \"../ColorPicker/ColorPicker\";\nimport { Input } from \"../inputs/Input/Input\";\nimport { Textarea } from \"../inputs/Textarea/Textarea\";\nimport { Select } from \"../inputs/Select/Select\";\nimport { Switch } from \"../inputs/Switch/Switch\";\nimport { DatePicker } from \"../inputs/DatePicker/DatePicker\";\nimport { DisplayValue } from \"../inputs/mode/DisplayValue\";\nimport { useInlineEdit } from \"../inputs/mode/useInlineEdit\";\nimport { resolveOption } from \"../inputs/inputs.utils\";\nimport type { FieldMode } from \"../inputs/inputs.types\";\nimport type { Size } from \"../../utils/types\";\nimport type { JsonEditorNode, JsonFieldType, JsonValue } from \"./JsonEditor.types\";\n\nexport interface JsonEditorValueProps {\n  node: JsonEditorNode;\n  mode: FieldMode;\n  size: Size;\n  /** No control at all — the row still shows the value. */\n  readOnly: boolean;\n  /** Stable control id: `<idPrefix>-<dotted path>`. */\n  id: string;\n  onCommit: (value: JsonValue) => void;\n}\n\nconst COLOR_PICKER_SIZE: Record<Size, \"sm\" | \"md\" | \"lg\"> = {\n  xs: \"sm\",\n  sm: \"sm\",\n  md: \"md\",\n  lg: \"lg\",\n  xl: \"lg\",\n};\n\n/**\n * Types whose text form IS the value commit on every keystroke; types that must\n * be PARSED out of text commit on blur instead.\n *\n * That split is not fussiness. A controlled `number` field that parses per\n * keystroke turns `1.5` into `1` the moment you type the dot, and moves the\n * caret while you are still typing. Committing on blur means the intermediate\n * text is never anybody's value.\n */\nfunction isRawTextType(type: JsonFieldType): boolean {\n  return type === \"number\" || type === \"integer\" || type === \"json\";\n}\n\n/** The text shown for a value in a raw editor — strings verbatim, everything else as JSON. */\nexport function toText(value: JsonValue | undefined): string {\n  if (value === undefined) return \"\";\n  if (typeof value === \"string\") return value;\n  return JSON.stringify(value) ?? \"\";\n}\n\n/**\n * Read a raw editor's text back into a value.\n *\n * Text that will not parse as the declared type is stored AS TEXT. That is the\n * deliberate choice at the heart of this component: typing `abc` into a field\n * declared `number` neither coerces to `0`/`NaN` nor throws the keystrokes\n * away — it writes `\"abc\"` and lets the conflict machinery say so, in the same\n * place it reports bad data that arrived from the server.\n */\nexport function fromText(text: string, type: JsonFieldType): JsonValue {\n  switch (type) {\n    case \"number\":\n    case \"integer\": {\n      const trimmed = text.trim();\n      if (trimmed === \"\") return text;\n      const parsed = Number(trimmed);\n      return Number.isFinite(parsed) ? parsed : text;\n    }\n    case \"boolean\": {\n      const trimmed = text.trim().toLowerCase();\n      if (trimmed === \"true\") return true;\n      if (trimmed === \"false\") return false;\n      return text;\n    }\n    case \"json\":\n    case \"object\":\n    case \"array\":\n      try {\n        return JSON.parse(text) as JsonValue;\n      } catch {\n        return text;\n      }\n    default:\n      return text;\n  }\n}\n\n/**\n * The read-or-edit control for one leaf value.\n *\n * Everything here is a `react-fancy` primitive — `Input`, `Textarea`, `Select`,\n * `Switch`, `DatePicker`, `ColorPicker` — and the view/edit swap is the kit's\n * own `useInlineEdit` + `DisplayValue`, not a private re-implementation of it.\n */\nexport function JsonEditorValue({ node, mode, size, readOnly, id, onCommit }: JsonEditorValueProps) {\n  const locked = readOnly || node.rule?.readOnly === true;\n  const resolvedMode: FieldMode = locked ? \"view\" : mode;\n  const { value, rule } = node;\n\n  // A value that contradicts its declared type cannot be shown through that\n  // type's control — a number input cannot hold \"thirty-six\" — so it falls back\n  // to the raw editor, which is also the only place it can be repaired.\n  if (node.conflict || isRawTextType(node.type)) {\n    return (\n      <RawValueEditor\n        id={id}\n        text={toText(value)}\n        type={node.type}\n        mode={resolvedMode}\n        size={size}\n        disabled={locked}\n        multiline={node.type === \"json\" || typeof value === \"object\"}\n        placeholder={rule?.placeholder}\n        onCommitText={(text) => onCommit(fromText(text, node.type))}\n      />\n    );\n  }\n\n  const common = { id, size, mode: resolvedMode, disabled: locked } as const;\n\n  switch (node.type) {\n    case \"boolean\":\n      return (\n        <Switch\n          {...common}\n          checked={value === true}\n          onCheckedChange={(next) => onCommit(next)}\n        />\n      );\n\n    case \"enum\": {\n      const options = rule?.options ?? [];\n      return (\n        <Select\n          {...common}\n          list={options}\n          value={String(value)}\n          onValueChange={(next) => {\n            // Emit the option's ORIGINAL value, so a numeric or boolean enum\n            // does not silently become a string on its way through the DOM.\n            const match = options\n              .map((option) => resolveOption(option))\n              .find((option) => String(option.value) === next);\n            onCommit((match?.value ?? next) as JsonValue);\n          }}\n        />\n      );\n    }\n\n    case \"date\":\n    case \"datetime\":\n      return (\n        <DatePicker\n          {...common}\n          includeTime={node.type === \"datetime\"}\n          min={rule?.min === undefined ? undefined : String(rule.min)}\n          max={rule?.max === undefined ? undefined : String(rule.max)}\n          value={typeof value === \"string\" ? value : \"\"}\n          onValueChange={(next) => onCommit(next)}\n        />\n      );\n\n    case \"color\":\n      return (\n        <ColorPicker\n          size={COLOR_PICKER_SIZE[size]}\n          mode={resolvedMode}\n          disabled={locked}\n          value={typeof value === \"string\" ? value : \"\"}\n          onChange={(next) => onCommit(next)}\n        />\n      );\n\n    case \"text\":\n      return (\n        <Textarea\n          {...common}\n          minRows={2}\n          autoResize\n          placeholder={rule?.placeholder}\n          value={typeof value === \"string\" ? value : \"\"}\n          onValueChange={(next) => onCommit(next)}\n        />\n      );\n\n    case \"secret\":\n      return (\n        <Input\n          {...common}\n          type=\"password\"\n          reveal\n          placeholder={rule?.placeholder}\n          value={typeof value === \"string\" ? value : \"\"}\n          onValueChange={(next) => onCommit(next)}\n        />\n      );\n\n    case \"url\":\n    case \"email\":\n    case \"string\":\n    default:\n      return (\n        <Input\n          {...common}\n          type={node.type === \"url\" ? \"url\" : node.type === \"email\" ? \"email\" : \"text\"}\n          placeholder={rule?.placeholder}\n          value={typeof value === \"string\" ? value : \"\"}\n          onValueChange={(next) => onCommit(next)}\n        />\n      );\n  }\n}\n\ninterface RawValueEditorProps {\n  id: string;\n  text: string;\n  type: JsonFieldType;\n  mode: FieldMode;\n  size: Size;\n  disabled: boolean;\n  multiline: boolean;\n  placeholder?: string;\n  onCommitText: (text: string) => void;\n}\n\n/**\n * An uncontrolled text control that commits on blur.\n *\n * Uncontrolled is what keeps the component free of a private copy of the\n * document: the half-typed text lives in the DOM node, never in React state,\n * and the `key` is the committed text — so a value changed from OUTSIDE (an\n * agent writing through a bridge, a server push) remounts the control with the\n * new text, while local typing does not.\n */\nfunction RawValueEditor({\n  id,\n  text,\n  type,\n  mode,\n  size,\n  disabled,\n  multiline,\n  placeholder,\n  onCommitText,\n}: RawValueEditorProps) {\n  const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(mode, disabled);\n\n  if (!showControl) {\n    return (\n      <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n        {text}\n      </DisplayValue>\n    );\n  }\n\n  const commit = (next: string) => {\n    if (next !== text) onCommitText(next);\n  };\n\n  if (multiline) {\n    return (\n      <Textarea\n        id={id}\n        key={text}\n        size={size}\n        mode=\"edit\"\n        minRows={3}\n        disabled={disabled}\n        placeholder={placeholder}\n        defaultValue={text}\n        spellCheck={false}\n        autoFocus={interactive}\n        className=\"font-mono\"\n        onBlur={(event) => {\n          commit(event.currentTarget.value);\n          exitEdit();\n        }}\n      />\n    );\n  }\n\n  return (\n    <Input\n      id={id}\n      key={text}\n      size={size}\n      mode=\"edit\"\n      type=\"text\"\n      // Not `type=\"number\"`: an `<input type=number>` reports \"\" for text it\n      // considers invalid, so the literal keystrokes we promise to keep would\n      // be unreadable on commit. The numeric keyboard is requested instead.\n      inputMode={type === \"number\" || type === \"integer\" ? \"decimal\" : undefined}\n      disabled={disabled}\n      placeholder={placeholder}\n      defaultValue={text}\n      spellCheck={false}\n      autoFocus={interactive}\n      onKeyDown={(event) => {\n        if (event.key === \"Enter\") event.currentTarget.blur();\n      }}\n      onBlur={(event) => {\n        commit(event.currentTarget.value);\n        exitEdit();\n      }}\n    />\n  );\n}\n","import { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Badge } from \"../Badge/Badge\";\nimport { Button } from \"../Button/Button\";\nimport { Text } from \"../Text/Text\";\nimport { Input } from \"../inputs/Input/Input\";\nimport { Select } from \"../inputs/Select/Select\";\nimport { useJsonEditorContext } from \"./JsonEditor.context\";\nimport { describeEdit } from \"./JsonEditor.paths\";\nimport { JsonEditorValue, toText } from \"./JsonEditorValue\";\nimport { JSON_FIELD_TYPES } from \"./JsonEditor.types\";\nimport type { JsonEditorNode, JsonFieldType } from \"./JsonEditor.types\";\n\n/** One indent step, in px. Applied as an inline style because depth is data. */\nconst INDENT = 18;\n\nexport interface JsonEditorRowProps {\n  node: JsonEditorNode;\n}\n\n/**\n * One key/value row.\n *\n * Flat in the DOM rather than nested: `aria-level` carries the depth, so an\n * agent can address `[data-path=\"orders.2.total\"]` in one selector instead of\n * walking a nesting it would have to guess the shape of. It is also the\n * standard flat-tree ARIA pattern.\n */\nexport function JsonEditorRow({ node }: JsonEditorRowProps) {\n  const ctx = useJsonEditorContext();\n  const { dotted, key, depth, container, conflict } = node;\n\n  const expanded = container ? ctx.isExpanded(dotted) : undefined;\n  const pending = ctx.pendingFor(dotted);\n  const renameable =\n    ctx.allowRename && !ctx.readOnly && node.parentKind === \"object\" && ctx.mode === \"edit\";\n  const label = node.rule?.label ?? key;\n\n  return (\n    <div\n      data-react-fancy-json-editor-row=\"\"\n      data-path={dotted}\n      data-key={key}\n      data-type={node.type}\n      data-depth={depth}\n      data-declared={node.declared ? \"true\" : \"false\"}\n      data-conflict={conflict ? \"true\" : undefined}\n      data-pending={pending.length > 0 ? \"true\" : undefined}\n      role=\"treeitem\"\n      aria-level={depth + 1}\n      aria-expanded={expanded}\n      className={cn(\n        \"border-b border-zinc-100 py-1 last:border-b-0 dark:border-zinc-800\",\n        conflict && \"bg-red-50/60 dark:bg-red-950/20\",\n        pending.length > 0 && \"bg-violet-50/60 dark:bg-violet-950/20\",\n      )}\n    >\n      <div className=\"flex items-start gap-2 px-2\" style={{ paddingInlineStart: depth * INDENT + 8 }}>\n        {container ? (\n          <Button\n            variant=\"ghost\"\n            size=\"xs\"\n            data-react-fancy-json-editor-toggle=\"\"\n            data-path={dotted}\n            aria-label={expanded ? `Collapse ${label}` : `Expand ${label}`}\n            aria-expanded={expanded}\n            icon={expanded ? \"chevron-down\" : \"chevron-right\"}\n            onClick={() => ctx.toggleExpanded(dotted)}\n          />\n        ) : (\n          <span aria-hidden=\"true\" className=\"inline-block w-6 shrink-0\" />\n        )}\n\n        <div\n          data-react-fancy-json-editor-key=\"\"\n          data-path={dotted}\n          className=\"w-1/3 min-w-0 shrink-0\"\n        >\n          {renameable ? (\n            <Input\n              // Uncontrolled + keyed + commit on blur: renaming per keystroke\n              // would fire one structural edit per character.\n              key={key}\n              size={ctx.size}\n              mode=\"edit\"\n              defaultValue={key}\n              spellCheck={false}\n              aria-label={`Key of ${dotted}`}\n              onKeyDown={(event) => {\n                if (event.key === \"Enter\") event.currentTarget.blur();\n              }}\n              onBlur={(event) => {\n                const next = event.currentTarget.value;\n                if (next !== key) ctx.renameAt(node, next);\n              }}\n            />\n          ) : (\n            <Text\n              as=\"span\"\n              size=\"sm\"\n              weight=\"medium\"\n              color={node.parentKind === \"array\" ? \"muted\" : \"default\"}\n              className=\"block truncate py-1 font-mono\"\n              title={dotted}\n            >\n              {node.parentKind === \"array\" ? `[${key}]` : label}\n            </Text>\n          )}\n          {node.rule?.description && (\n            <Text as=\"span\" size=\"xs\" color=\"muted\" className=\"block truncate\">\n              {node.rule.description}\n            </Text>\n          )}\n        </div>\n\n        <div\n          data-react-fancy-json-editor-value=\"\"\n          data-path={dotted}\n          data-type={node.type}\n          className=\"min-w-0 flex-1\"\n        >\n          {container ? (\n            <Text as=\"span\" size=\"sm\" color=\"muted\" className=\"block py-1 font-mono\">\n              {node.type === \"array\"\n                ? `[ ${node.childCount} ${node.childCount === 1 ? \"item\" : \"items\"} ]`\n                : `{ ${node.childCount} ${node.childCount === 1 ? \"key\" : \"keys\"} }`}\n            </Text>\n          ) : (\n            <JsonEditorValue\n              node={node}\n              mode={ctx.mode}\n              size={ctx.size}\n              readOnly={ctx.readOnly}\n              id={`${ctx.idPrefix}-${dotted}`}\n              onCommit={(next) => ctx.setValueAt(node, next)}\n            />\n          )}\n        </div>\n\n        <div className=\"flex shrink-0 items-center gap-0.5 pt-0.5\">\n          {node.declared && (\n            <Badge size=\"sm\" variant=\"soft\" color={conflict ? \"red\" : \"zinc\"}>\n              {node.type}\n            </Badge>\n          )}\n          {container && ctx.allowAdd && !ctx.readOnly && (\n            <Button\n              variant=\"ghost\"\n              size=\"xs\"\n              data-react-fancy-json-editor-add=\"\"\n              data-path={dotted}\n              aria-label={`Add to ${label}`}\n              icon=\"plus\"\n              onClick={() => ctx.setAddingAt(ctx.addingAt === dotted ? null : dotted)}\n            />\n          )}\n          {ctx.allowReorder && !ctx.readOnly && node.parentKind === \"array\" && (\n            <>\n              <Button\n                variant=\"ghost\"\n                size=\"xs\"\n                data-react-fancy-json-editor-move-up=\"\"\n                data-path={dotted}\n                aria-label={`Move ${dotted} up`}\n                icon=\"arrow-up\"\n                onClick={() => ctx.moveAt(node, Number(key) - 1)}\n              />\n              <Button\n                variant=\"ghost\"\n                size=\"xs\"\n                data-react-fancy-json-editor-move-down=\"\"\n                data-path={dotted}\n                aria-label={`Move ${dotted} down`}\n                icon=\"arrow-down\"\n                onClick={() => ctx.moveAt(node, Number(key) + 1)}\n              />\n            </>\n          )}\n          {ctx.allowRemove && !ctx.readOnly && node.parentKind !== \"root\" && (\n            <Button\n              variant=\"ghost\"\n              size=\"xs\"\n              color=\"red\"\n              data-react-fancy-json-editor-remove=\"\"\n              data-path={dotted}\n              aria-label={`Remove ${dotted}`}\n              icon=\"trash-2\"\n              onClick={() => ctx.removeAt(node)}\n            />\n          )}\n        </div>\n      </div>\n\n      {conflict && (\n        <Text\n          as=\"span\"\n          size=\"xs\"\n          color=\"danger\"\n          data-react-fancy-json-editor-conflict=\"\"\n          data-path={dotted}\n          className=\"block px-2 pb-1\"\n          style={{ paddingInlineStart: depth * INDENT + 40 }}\n        >\n          {conflict.message}\n        </Text>\n      )}\n\n      {pending.map((edit) => (\n        <div\n          key={edit.id}\n          data-react-fancy-json-editor-pending=\"\"\n          data-id={edit.id}\n          data-path={dotted}\n          className=\"flex items-center gap-2 px-2 pb-1\"\n          style={{ paddingInlineStart: depth * INDENT + 40 }}\n        >\n          <Badge size=\"sm\" variant=\"soft\" color=\"violet\">\n            proposed\n          </Badge>\n          <Text as=\"span\" size=\"xs\" color=\"muted\" className=\"min-w-0 truncate font-mono\">\n            {edit.label ?? describeEdit(edit)}\n            {edit.op === \"set\" || edit.op === \"insert\" ? ` → ${toText(edit.value)}` : \"\"}\n          </Text>\n          <Button\n            size=\"xs\"\n            color=\"emerald\"\n            data-react-fancy-json-editor-accept=\"\"\n            data-id={edit.id}\n            onClick={() => ctx.acceptPending(edit.id)}\n          >\n            Accept\n          </Button>\n          <Button\n            size=\"xs\"\n            variant=\"ghost\"\n            data-react-fancy-json-editor-reject=\"\"\n            data-id={edit.id}\n            onClick={() => ctx.rejectPending(edit.id)}\n          >\n            Reject\n          </Button>\n        </div>\n      ))}\n    </div>\n  );\n}\n\nexport interface JsonEditorAddFormProps {\n  /** Dotted path of the container being added to; `\"\"` is the document root. */\n  path: string;\n  kind: \"object\" | \"array\";\n  depth: number;\n  /** Declared type for the container's children, when the keyMap names one. */\n  suggestedType?: JsonFieldType;\n}\n\n/**\n * The inline \"add a key\" form.\n *\n * Its open/closed state and its two draft fields are the only state this\n * component owns that is not in `value` — and deliberately so: a half-typed key\n * name is not part of the document, and an agent adding a key does it through\n * an `insert` edit, never by driving this form.\n */\nexport function JsonEditorAddForm({ path, kind, depth, suggestedType }: JsonEditorAddFormProps) {\n  const ctx = useJsonEditorContext();\n  const [key, setKey] = useState(\"\");\n  const [type, setType] = useState<JsonFieldType>(suggestedType ?? \"string\");\n\n  return (\n    <div\n      data-react-fancy-json-editor-add-form=\"\"\n      data-path={path}\n      className=\"flex items-center gap-2 border-b border-zinc-100 px-2 py-1.5 dark:border-zinc-800\"\n      style={{ paddingInlineStart: depth * INDENT + 32 }}\n    >\n      {kind === \"object\" && (\n        <Input\n          size={ctx.size}\n          mode=\"edit\"\n          value={key}\n          placeholder=\"key\"\n          aria-label=\"New key\"\n          spellCheck={false}\n          data-react-fancy-json-editor-add-key=\"\"\n          onValueChange={setKey}\n        />\n      )}\n      <Select\n        size={ctx.size}\n        mode=\"edit\"\n        aria-label=\"New value type\"\n        data-react-fancy-json-editor-add-type=\"\"\n        list={[...JSON_FIELD_TYPES]}\n        value={type}\n        onValueChange={(next) => setType(next as JsonFieldType)}\n      />\n      <Button\n        size=\"xs\"\n        color=\"blue\"\n        data-react-fancy-json-editor-add-confirm=\"\"\n        onClick={() => ctx.insertInto(path, kind === \"object\" ? key : undefined, type)}\n      >\n        Add\n      </Button>\n      <Button\n        size=\"xs\"\n        variant=\"ghost\"\n        data-react-fancy-json-editor-add-cancel=\"\"\n        onClick={() => ctx.setAddingAt(null)}\n      >\n        Cancel\n      </Button>\n    </div>\n  );\n}\n","import { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Button } from \"../Button/Button\";\nimport { Callout } from \"../Callout/Callout\";\nimport { Text } from \"../Text/Text\";\nimport { JsonEditorContext } from \"./JsonEditor.context\";\nimport { JsonEditorAddForm, JsonEditorRow } from \"./JsonEditorRow\";\nimport { findJsonConflicts, inferType, parseKeyMap, resolveKeyRule, seedValue } from \"./JsonEditor.keymap\";\nimport {\n  applyJsonEdit,\n  describeEdit,\n  getAtPath,\n  isContainerValue,\n  isJsonArray,\n  isJsonObject,\n  parsePath,\n  pathToString,\n} from \"./JsonEditor.paths\";\nimport type { JsonEditorContextValue } from \"./JsonEditor.context\";\nimport type {\n  JsonEditorEdit,\n  JsonEditorIssue,\n  JsonEditorNode,\n  JsonEditorPendingEdit,\n  JsonEditorProps,\n  JsonFieldType,\n  JsonKeyMapEntry,\n  JsonPath,\n  JsonValue,\n} from \"./JsonEditor.types\";\n\ntype RenderItem =\n  | { kind: \"node\"; node: JsonEditorNode }\n  | {\n      kind: \"add\";\n      path: string;\n      containerKind: \"object\" | \"array\";\n      depth: number;\n      suggestedType?: JsonFieldType;\n    };\n\n/** Dotted paths of every container in the document — the \"expand everything\" set. */\nfunction collectContainerPaths(value: JsonValue): string[] {\n  const out: string[] = [];\n\n  const walk = (node: JsonValue, segments: JsonPath) => {\n    if (!isContainerValue(node)) return;\n    if (segments.length > 0) out.push(pathToString(segments));\n    if (isJsonArray(node)) {\n      node.forEach((child, index) => walk(child, [...segments, String(index)]));\n    } else if (isJsonObject(node)) {\n      for (const [key, child] of Object.entries(node)) walk(child, [...segments, key]);\n    }\n  };\n\n  walk(value, []);\n  return out;\n}\n\n/**\n * JsonEditor — a key/value editor over arbitrary, arbitrarily-nested JSON, with\n * a caller-supplied `keyMap` imposing a data type on any path.\n *\n * The type does two jobs at once, which is the point of the feature: it decides\n * how a value is RENDERED when you are reading, and which control appears when\n * you are editing. `{\"user.age\": \"number\"}` is not documentation — it is the\n * reason that row is a numeric field and the reason `\"thirty-six\"` shows up in\n * red instead of quietly becoming `0`.\n *\n * The three design decisions worth knowing before you use it:\n *\n *  - **`keyMap` is a JSON string, and only a string.** It has to survive an MCP\n *    tool argument, a config column and a `data-*` attribute; a live object\n *    survives none of those. See {@link JsonEditorProps.keyMap}.\n *  - **Nothing is coerced and nothing is dropped.** A value that contradicts\n *    its declared type keeps its real value, renders through the raw editor,\n *    and is reported through the issues panel, the `data-issues` count and\n *    `onIssuesChange` — the same channel a broken `keyMap` uses.\n *  - **It is controlled, all the way down.** The document lives in `value`.\n *    The only state here is which rows are expanded, which add-form is open,\n *    and the half-typed text inside a control that has not committed yet.\n *\n * Every control is a `react-fancy` primitive, so restyling the kit restyles\n * this, and `mode=\"view\"` gets the kit's click-to-edit behaviour for free.\n */\nexport const JsonEditor = forwardRef<HTMLDivElement, JsonEditorProps>(function JsonEditor(\n  {\n    value,\n    onChange,\n    keyMap,\n    mode = \"view\",\n    size = \"sm\",\n    readOnly = false,\n    expanded,\n    defaultExpanded,\n    onExpandedChange,\n    showIssues = true,\n    onIssuesChange,\n    pendingMode = false,\n    pending,\n    onPendingChange,\n    onActivity,\n    allowAdd = true,\n    allowRemove = true,\n    allowRename = true,\n    allowReorder = true,\n    rootLabel = \"value\",\n    emptyLabel = \"No keys yet.\",\n    idPrefix,\n    className,\n    ...rest\n  },\n  ref,\n) {\n  const autoId = useId();\n  const prefix = idPrefix ?? autoId;\n  const editSeq = useRef(0);\n\n  // Parsed ONCE per distinct keyMap string — not per row, not per render. The\n  // map is compiled into path patterns with a specificity score, and rows only\n  // ever do a match against that.\n  const parsedKeyMap = useMemo(() => parseKeyMap(keyMap), [keyMap]);\n  const rules = parsedKeyMap.rules;\n\n  const conflicts = useMemo(() => findJsonConflicts(value, rules), [value, rules]);\n\n  // Transient complaints about an edit that was refused (duplicate key, empty\n  // key). They belong beside the type conflicts because from the user's side\n  // they are the same thing: something they can see is wrong and can fix.\n  const [editIssues, setEditIssues] = useState<JsonEditorIssue[]>([]);\n\n  const issues = useMemo(\n    () => [...parsedKeyMap.issues, ...conflicts, ...editIssues],\n    [parsedKeyMap.issues, conflicts, editIssues],\n  );\n\n  const onIssuesChangeRef = useRef(onIssuesChange);\n  onIssuesChangeRef.current = onIssuesChange;\n  const lastIssueSignature = useRef<string | null>(null);\n\n  useEffect(() => {\n    const signature = JSON.stringify(issues);\n    if (signature === lastIssueSignature.current) return;\n    lastIssueSignature.current = signature;\n    onIssuesChangeRef.current?.(issues);\n  }, [issues]);\n\n  // ── expansion ─────────────────────────────────────────────────────────\n  // `null` means \"expanded, everything\" — the state a caller that named no\n  // paths is in. Storing it as a sentinel rather than materialising every\n  // container path keeps a container added later expanded too.\n  const expandedControlled = expanded !== undefined;\n  const [expandedUncontrolled, setExpandedUncontrolled] = useState<string[] | null>(\n    defaultExpanded ?? null,\n  );\n  const expandedList = expandedControlled ? expanded : expandedUncontrolled;\n\n  const isExpanded = useCallback(\n    (dotted: string) => expandedList === null || expandedList.includes(dotted),\n    [expandedList],\n  );\n\n  const toggleExpanded = useCallback(\n    (dotted: string) => {\n      const current = expandedList ?? collectContainerPaths(value);\n      const next = current.includes(dotted)\n        ? current.filter((path) => path !== dotted)\n        : [...current, dotted];\n      if (!expandedControlled) setExpandedUncontrolled(next);\n      onExpandedChange?.(next);\n    },\n    [expandedList, expandedControlled, onExpandedChange, value],\n  );\n\n  // ── add form ──────────────────────────────────────────────────────────\n  const [addingAt, setAddingAt] = useState<string | null>(null);\n\n  // ── committing ────────────────────────────────────────────────────────\n  const stagedPending = useMemo(() => pending ?? [], [pending]);\n\n  const commit = useCallback(\n    (edit: JsonEditorEdit) => {\n      setEditIssues([]);\n\n      if (pendingMode) {\n        // Trust-but-verify: the edit becomes a PROPOSAL. `value` does not move\n        // and `onChange` does not fire until a human accepts it.\n        const staged: JsonEditorPendingEdit = {\n          ...edit,\n          id: edit.id ?? `${prefix}-edit-${editSeq.current++}`,\n          label: edit.label ?? describeEdit(edit),\n        };\n        onPendingChange?.([...stagedPending, staged]);\n        onActivity?.({ type: \"stage\", edit: staged });\n        return;\n      }\n\n      const next = applyJsonEdit(value, edit);\n      // `applyJsonEdit` returns the same reference when it refuses an edit, so\n      // a refusal never reaches the host as a spurious \"changed\" callback.\n      if (next === value) return;\n      onChange?.(next, edit);\n      onActivity?.({ type: \"commit\", edit });\n    },\n    [pendingMode, prefix, stagedPending, onPendingChange, onActivity, value, onChange],\n  );\n\n  const refuse = useCallback((path: string, message: string) => {\n    setEditIssues([{ kind: \"edit\", path, message }]);\n  }, []);\n\n  const setValueAt = useCallback(\n    (node: JsonEditorNode, next: JsonValue) => {\n      commit({ op: \"set\", path: node.dotted, value: next });\n    },\n    [commit],\n  );\n\n  const removeAt = useCallback(\n    (node: JsonEditorNode) => {\n      commit({ op: \"remove\", path: node.dotted });\n    },\n    [commit],\n  );\n\n  const moveAt = useCallback(\n    (node: JsonEditorNode, to: number) => {\n      commit({ op: \"move\", path: node.dotted, to });\n    },\n    [commit],\n  );\n\n  const renameAt = useCallback(\n    (node: JsonEditorNode, key: string) => {\n      if (key === node.key) return;\n      if (key.trim() === \"\") {\n        refuse(node.dotted, \"A key cannot be empty.\");\n        return;\n      }\n      const parent = getAtPath(value, node.path.slice(0, -1));\n      if (isJsonObject(parent) && Object.prototype.hasOwnProperty.call(parent, key)) {\n        refuse(node.dotted, `A key named \"${key}\" already exists here — rename refused.`);\n        return;\n      }\n      commit({ op: \"rename\", path: node.dotted, key });\n    },\n    [commit, refuse, value],\n  );\n\n  const insertInto = useCallback(\n    (dotted: string, key: string | undefined, type: JsonFieldType) => {\n      const segments = parsePath(dotted);\n      const container = dotted === \"\" ? value : getAtPath(value, segments);\n      const isArray = isJsonArray(container);\n\n      if (!isArray) {\n        if (key === undefined || key.trim() === \"\") {\n          refuse(dotted, \"A new key needs a name.\");\n          return;\n        }\n        if (isJsonObject(container) && Object.prototype.hasOwnProperty.call(container, key)) {\n          refuse(dotted, `A key named \"${key}\" already exists here.`);\n          return;\n        }\n      }\n\n      const rule = resolveKeyRule(rules, [...segments, isArray ? \"*\" : key!]);\n      setAddingAt(null);\n      commit({\n        op: \"insert\",\n        path: dotted,\n        key: isArray ? undefined : key,\n        value: seedValue(type, rule),\n      });\n    },\n    [commit, refuse, rules, value],\n  );\n\n  const pendingFor = useCallback(\n    (dotted: string) => stagedPending.filter((edit) => edit.path === dotted),\n    [stagedPending],\n  );\n\n  const acceptPending = useCallback(\n    (id: string) => {\n      const edit = stagedPending.find((candidate) => candidate.id === id);\n      if (!edit) return;\n      const next = applyJsonEdit(value, edit);\n      onPendingChange?.(stagedPending.filter((candidate) => candidate.id !== id));\n      if (next !== value) {\n        onChange?.(next, edit);\n        onActivity?.({ type: \"accept\", edit });\n      }\n    },\n    [stagedPending, value, onPendingChange, onChange, onActivity],\n  );\n\n  const rejectPending = useCallback(\n    (id: string) => {\n      const edit = stagedPending.find((candidate) => candidate.id === id);\n      onPendingChange?.(stagedPending.filter((candidate) => candidate.id !== id));\n      if (edit) onActivity?.({ type: \"reject\", edit });\n    },\n    [stagedPending, onPendingChange, onActivity],\n  );\n\n  // ── rows ──────────────────────────────────────────────────────────────\n  const items = useMemo(\n    () =>\n      buildItems({\n        value,\n        rules,\n        conflicts,\n        isExpanded,\n        addingAt,\n        rootLabel,\n      }),\n    [value, rules, conflicts, isExpanded, addingAt, rootLabel],\n  );\n\n  const rootIsContainer = isContainerValue(value);\n  const rootKind = isJsonArray(value) ? \"array\" : \"object\";\n  const attachedIds = new Set(\n    items.flatMap((item) => (item.kind === \"node\" ? [item.node.dotted] : [])),\n  );\n  const orphanPending = stagedPending.filter((edit) => !attachedIds.has(edit.path));\n\n  const context = useMemo<JsonEditorContextValue>(\n    () => ({\n      mode: readOnly ? \"view\" : mode,\n      size,\n      readOnly,\n      allowAdd: allowAdd && !readOnly,\n      allowRemove: allowRemove && !readOnly,\n      allowRename: allowRename && !readOnly,\n      allowReorder: allowReorder && !readOnly,\n      pendingMode,\n      idPrefix: prefix,\n      isExpanded,\n      toggleExpanded,\n      setValueAt,\n      removeAt,\n      renameAt,\n      moveAt,\n      insertInto,\n      addingAt,\n      setAddingAt,\n      pendingFor,\n      acceptPending,\n      rejectPending,\n    }),\n    [\n      mode,\n      size,\n      readOnly,\n      allowAdd,\n      allowRemove,\n      allowRename,\n      allowReorder,\n      pendingMode,\n      prefix,\n      isExpanded,\n      toggleExpanded,\n      setValueAt,\n      removeAt,\n      renameAt,\n      moveAt,\n      insertInto,\n      addingAt,\n      pendingFor,\n      acceptPending,\n      rejectPending,\n    ],\n  );\n\n  return (\n    <JsonEditorContext.Provider value={context}>\n      <div\n        ref={ref}\n        // Rest FIRST: a caller's `data-*` / `aria-*` reach the DOM, but nothing\n        // they pass can overwrite the marker below or drop the internal classes.\n        {...rest}\n        data-react-fancy-json-editor=\"\"\n        data-issues={String(issues.length)}\n        data-keymap-error={parsedKeyMap.ok ? undefined : \"true\"}\n        data-mode={readOnly ? \"readonly\" : mode}\n        className={cn(\n          \"overflow-hidden rounded-lg border border-zinc-200 bg-white text-zinc-900 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100\",\n          className,\n        )}\n      >\n        {showIssues && issues.length > 0 && (\n          <div data-react-fancy-json-editor-issues=\"\" className=\"p-2\">\n            <Callout color={parsedKeyMap.ok ? \"amber\" : \"red\"}>\n              <Text size=\"sm\" weight=\"semibold\" className=\"mb-1\">\n                {parsedKeyMap.ok\n                  ? `${issues.length} ${issues.length === 1 ? \"issue\" : \"issues\"}`\n                  : \"The keyMap could not be used — values are shown untyped.\"}\n              </Text>\n              <ul className=\"space-y-0.5\">\n                {issues.map((issue, index) => (\n                  <li key={`${issue.kind}-${issue.path}-${index}`}>\n                    <Text as=\"span\" size=\"xs\" data-react-fancy-json-editor-issue=\"\" data-kind={issue.kind} data-path={issue.path}>\n                      {issue.path ? `${issue.path} — ` : \"\"}\n                      {issue.message}\n                    </Text>\n                  </li>\n                ))}\n              </ul>\n            </Callout>\n          </div>\n        )}\n\n        <div data-react-fancy-json-editor-tree=\"\" role=\"tree\" aria-label={rest[\"aria-label\"] ?? \"JSON document\"}>\n          {items.length === 0 ? (\n            <Text as=\"p\" size=\"sm\" color=\"muted\" className=\"px-3 py-4\">\n              {emptyLabel}\n            </Text>\n          ) : (\n            items.map((item) =>\n              item.kind === \"node\" ? (\n                <JsonEditorRow key={`row:${item.node.dotted}`} node={item.node} />\n              ) : (\n                <JsonEditorAddForm\n                  key={`add:${item.path}`}\n                  path={item.path}\n                  kind={item.containerKind}\n                  depth={item.depth}\n                  suggestedType={item.suggestedType}\n                />\n              ),\n            )\n          )}\n        </div>\n\n        {orphanPending.length > 0 && (\n          <div data-react-fancy-json-editor-orphan-pending=\"\" className=\"border-t border-zinc-100 p-2 dark:border-zinc-800\">\n            {orphanPending.map((edit) => (\n              <div key={edit.id} className=\"flex items-center gap-2 py-0.5\">\n                <Text as=\"span\" size=\"xs\" color=\"muted\" className=\"min-w-0 flex-1 truncate font-mono\">\n                  {edit.label ?? describeEdit(edit)}\n                </Text>\n                <Button\n                  size=\"xs\"\n                  color=\"emerald\"\n                  data-react-fancy-json-editor-accept=\"\"\n                  data-id={edit.id}\n                  onClick={() => acceptPending(edit.id)}\n                >\n                  Accept\n                </Button>\n                <Button\n                  size=\"xs\"\n                  variant=\"ghost\"\n                  data-react-fancy-json-editor-reject=\"\"\n                  data-id={edit.id}\n                  onClick={() => rejectPending(edit.id)}\n                >\n                  Reject\n                </Button>\n              </div>\n            ))}\n          </div>\n        )}\n\n        {rootIsContainer && allowAdd && !readOnly && (\n          <div className=\"border-t border-zinc-100 p-2 dark:border-zinc-800\">\n            <Button\n              variant=\"ghost\"\n              size=\"xs\"\n              icon=\"plus\"\n              data-react-fancy-json-editor-add=\"\"\n              data-path=\"\"\n              onClick={() => setAddingAt(addingAt === \"\" ? null : \"\")}\n            >\n              {rootKind === \"array\" ? \"Append item\" : \"Add key\"}\n            </Button>\n          </div>\n        )}\n      </div>\n    </JsonEditorContext.Provider>\n  );\n});\n\ninterface BuildItemsOptions {\n  value: JsonValue;\n  rules: JsonKeyMapEntry[];\n  conflicts: JsonEditorIssue[];\n  isExpanded: (dotted: string) => boolean;\n  addingAt: string | null;\n  rootLabel: string;\n}\n\nfunction buildItems({\n  value,\n  rules,\n  conflicts,\n  isExpanded,\n  addingAt,\n  rootLabel,\n}: BuildItemsOptions): RenderItem[] {\n  const out: RenderItem[] = [];\n  const conflictByPath = new Map<string, JsonEditorIssue>();\n  for (const issue of conflicts) {\n    if (issue.kind === \"type\" && !conflictByPath.has(issue.path)) conflictByPath.set(issue.path, issue);\n  }\n\n  const makeNode = (\n    segments: JsonPath,\n    node: JsonValue,\n    depth: number,\n    parentKind: JsonEditorNode[\"parentKind\"],\n  ): JsonEditorNode => {\n    const rule = segments.length > 0 ? resolveKeyRule(rules, segments) : undefined;\n    const type = rule?.type ?? inferType(node);\n    const dotted = pathToString(segments);\n    const conflict = conflictByPath.get(dotted);\n    // A `json` node is raw text by definition, and a node in conflict must show\n    // what it really holds — neither is a branch to walk into.\n    const container = !conflict && type !== \"json\" && isContainerValue(node);\n\n    return {\n      path: segments,\n      dotted,\n      key: segments[segments.length - 1] ?? rootLabel,\n      depth,\n      value: node,\n      parentKind,\n      rule,\n      type,\n      declared: rule !== undefined,\n      container,\n      childCount: isJsonArray(node)\n        ? node.length\n        : isJsonObject(node)\n          ? Object.keys(node).length\n          : 0,\n      conflict,\n    };\n  };\n\n  const emitChildren = (node: JsonValue, segments: JsonPath, depth: number) => {\n    if (isJsonArray(node)) {\n      node.forEach((child, index) => emit(child, [...segments, String(index)], depth, \"array\"));\n    } else if (isJsonObject(node)) {\n      for (const [key, child] of Object.entries(node)) {\n        emit(child, [...segments, key], depth, \"object\");\n      }\n    }\n  };\n\n  const emit = (\n    node: JsonValue,\n    segments: JsonPath,\n    depth: number,\n    parentKind: JsonEditorNode[\"parentKind\"],\n  ) => {\n    const built = makeNode(segments, node, depth, parentKind);\n    out.push({ kind: \"node\", node: built });\n\n    if (!built.container || !isExpanded(built.dotted)) return;\n\n    emitChildren(node, segments, depth + 1);\n    if (addingAt === built.dotted) {\n      out.push({\n        kind: \"add\",\n        path: built.dotted,\n        containerKind: isJsonArray(node) ? \"array\" : \"object\",\n        depth: depth + 1,\n        suggestedType: resolveKeyRule(rules, [...segments, \"*\"])?.type,\n      });\n    }\n  };\n\n  if (isContainerValue(value)) {\n    emitChildren(value, [], 0);\n    if (addingAt === \"\") {\n      out.push({\n        kind: \"add\",\n        path: \"\",\n        containerKind: isJsonArray(value) ? \"array\" : \"object\",\n        depth: 0,\n        suggestedType: resolveKeyRule(rules, [\"*\"])?.type,\n      });\n    }\n  } else {\n    out.push({ kind: \"node\", node: makeNode([], value, 0, \"root\") });\n  }\n\n  return out;\n}\n"]}