@knkcs/anker 2.4.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/forms/index.d.ts +35 -10
- package/dist/forms/index.js +168 -65
- package/dist/forms/index.js.map +1 -1
- package/dist/templates/index.d.ts +24 -8
- package/dist/templates/index.js +29 -15
- package/dist/templates/index.js.map +1 -1
- package/package.json +1 -1
package/dist/forms/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/forms/form-field.tsx","../../src/forms/array-field.tsx","../../src/forms/checkbox-field.tsx","../../src/forms/code-field.tsx","../../src/forms/color-picker-field.tsx","../../src/forms/controlled-form-field.tsx","../../src/forms/date-picker-field.tsx","../../src/forms/dirty-form-guard.tsx","../../src/forms/file-field.tsx","../../src/forms/inline-edit.tsx","../../src/forms/input-field.tsx","../../src/forms/markdown-field.tsx","../../src/forms/number-input-field.tsx","../../src/forms/radio-group-field.tsx","../../src/forms/select-field.tsx","../../src/forms/switch-field.tsx","../../src/forms/textarea-field.tsx"],"names":["jsx","useFormContext","jsxs","Controller","Field","IconButton","useId","Input","useCallback","Button","ButtonGroup","NumberInputField"],"mappings":";;;;;;;;;;;;;AA+BO,SAAS,SAAA,CAAiC;AAAA,EAChD,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACD,CAAA,EAAsB;AACrB,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,cAAA,EAAkB;AACtC,EAAA,MAAM,MAAM,KAAA,EAAM;AAClB,EAAA,MAAM,aAAA,GAAgB,GAAG,GAAG,CAAA,YAAA,CAAA;AAC5B,EAAA,MAAM,QAAA,GAAW,GAAG,GAAG,CAAA,OAAA,CAAA;AACvB,EAAA,MAAM,OAAA,GAAU,GAAG,GAAG,CAAA,MAAA,CAAA;AAEtB,EAAA,uBACC,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,YAAW,KAAM;AAClC,QAAA,MAAM,WAAA,GACL;AAAA,UACC,cAAc,aAAA,GAAgB,IAAA;AAAA,UAC9B,aAAa,QAAA,GAAW,IAAA;AAAA,UACxB,UAAA,CAAW,QAAQ,OAAA,GAAU;AAAA,UAE5B,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAEhB,QAAA,uBACC,IAAA;AAAA,UAAC,KAAA,CAAM,IAAA;AAAA,UAAN;AAAA,YACA,OAAA,EAAS,CAAC,CAAC,UAAA,CAAW,KAAA;AAAA,YACtB,QAAA;AAAA,YACA,QAAA;AAAA,YACA,QAAA;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,KAAA,KACC,OAAO,KAAA,KAAU,QAAA,mBACjB,IAAA,CAAC,MAAA,EAAA,EACA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,MAAM,KAAA,EAAN,EAAY,MAAK,GAAA,EAAI,OAAA,EAAS,MAC7B,QAAA,EAAA,KAAA,EACF,CAAA;AAAA,gBACC;AAAA,eAAA,EACF,CAAA,GAEA,KAAA,CAAA;AAAA,cAED,SAAS,EAAE,GAAG,KAAA,EAAO,kBAAA,EAAoB,aAAa,CAAA;AAAA,cACtD,WAAA,wBACC,IAAA,EAAA,EAAK,EAAA,EAAI,eAAe,QAAA,EAAS,IAAA,EAAK,KAAA,EAAM,OAAA,EAC3C,QAAA,EAAA,WAAA,EACF,CAAA;AAAA,cAEA,eACC,OAAO,UAAA,KAAe,QAAA,mBACtB,GAAA,CAAC,MAAM,UAAA,EAAN,EAAiB,EAAA,EAAI,QAAA,EAAW,sBAAW,CAAA,mBAE5C,GAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAI,UAAW,QAAA,EAAA,UAAA,EAAW,CAAA,CAAA;AAAA,cAEjC,UAAA,CAAW,KAAA,oBACX,GAAA,CAAC,KAAA,CAAM,SAAA,EAAN,EAAgB,EAAA,EAAI,OAAA,EAAS,WAAA,EAAU,QAAA,EACtC,QAAA,EAAA,UAAA,CAAW,KAAA,CAAM,OAAA,EACnB;AAAA;AAAA;AAAA,SAEF;AAAA,MAEF;AAAA;AAAA,GACD;AAEF;AACC,SAAA,CAAuC,WAAA,GAAc,WAAA;ACpE/C,SAAS,WAAkC,KAAA,EAA2B;AAC5E,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,WAAA,GAAc,OAAA;AAAA,IACd,SAAA,GAAY,KAAA;AAAA,IACZ,OAAO,EAAC;AAAA,IACR,QAAA,GAAW,WAAA;AAAA,IACX,WAAA,GAAc,aAAA;AAAA,IACd,QAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAG;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,uBACCA,IAAC,SAAA,EAAA,EAAa,IAAA,EAAY,OAAc,QAAA,EAAqB,GAAG,IAAA,EAC9D,QAAA,EAAA,sBACAA,GAAAA,CAAC,OAAI,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAG,MAAK,OAAA,EAAQ,IAAA,EACjC,QAAA,EAAA,IAAA,KAAS,SAAA,mBACTA,GAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA;AAAA,sBAGDA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA;AAAA,KAGH,CAAA,EAEF,CAAA;AAEF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AAYzB,IAAM,YAAA,GAA4C,KAAA,CAAM,IAAA,CAAK,CAAC,KAAA,KAAU;AACvE,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,GAAI,KAAA;AAEJ,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAIC,cAAAA,EAAe;AAC7C,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,KAAW,aAAA,CAAc;AAAA,IAChD,OAAA;AAAA,IACA;AAAA,GACA,CAAA;AAED,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAM,GAAA,EAAK,CAAA,EACX,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,IAAA,EAAA,EAAK,eAAA,EAAgB,gBAAA,EAAiB,KAAK,CAAA,EAC3C,QAAA,EAAA;AAAA,sBAAAF,GAAAA,CAAC,YACA,QAAA,kBAAAA,GAAAA,CAAC,QAAK,UAAA,EAAY,GAAA,EAAM,qBAAU,CAAA,EACnC,CAAA;AAAA,sBACAA,GAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAS,CAAA,EAClB,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,UAAA,EAAY,GAAA,EAAM,QAAA,EAAA,WAAA,EAAY,CAAA,EACrC,CAAA;AAAA,MAEC,MAAA,CAAO,IAAI,CAAC,IAAA,EAAM,0BAClBE,IAAAA,CAAC,KAAA,CAAM,QAAA,EAAN,EACA,QAAA,EAAA;AAAA,wBAAAF,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAG,QAAA,CAAS,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,IAAA,CAAa,CAAA;AAAA,YAC1C;AAAA;AAAA,SACD;AAAA,wBACAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAG,QAAA,CAAS,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,MAAA,CAAe,CAAA;AAAA,YAC5C;AAAA;AAAA,SACD;AAAA,wBACAA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAQ,OAAA;AAAA,YACR,YAAA,EAAa,KAAA;AAAA,YACb,YAAA,EAAY,WAAA;AAAA,YACZ,OAAA,EAAS,MAAM,MAAA,CAAO,KAAK,CAAA;AAAA,YAC3B,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AACnB,OAAA,EAAA,EAlBoB,IAAA,CAAK,EAmB1B,CACA;AAAA,KAAA,EACF,CAAA;AAAA,IACC,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,UAAA,oBACvBA,GAAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EAAG,SAAA,EAAU,QAAA,EACpB,QAAA,EAAA,UAAA,EACF,CAAA;AAAA,oBAEDA,GAAAA,CAAC,WAAA,EAAA,EACA,QAAA,kBAAAE,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACA,OAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAS,MAAM,MAAA,CAAO,EAAE,KAAK,EAAA,EAAI,KAAA,EAAO,IAAI,CAAA;AAAA,QAC5C,QAAA,EAAU,QAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAF,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,UACf;AAAA;AAAA;AAAA,KACF,EACD;AAAA,GAAA,EACD,CAAA;AAEF,CAAC,CAAA;AAED,YAAA,CAAa,WAAA,GAAc,cAAA;AAU3B,IAAM,UAAA,GAAwC,KAAA,CAAM,IAAA,CAAK,CAAC,KAAA,KAAU;AACnE,EAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,IAAA,EAAM,UAAS,GAAI,KAAA;AACzD,EAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,cAAAA,EAAe;AAEpC,EAAA,uBACCD,GAAAA,CAAC,KAAA,EAAA,EAAM,GAAA,EAAK,CAAA,EACX,QAAA,kBAAAE,IAAAA,CAAC,IAAA,EAAA,EAAK,eAAA,EAAgB,WAAA,EAAY,GAAA,EAAK,CAAA,EACtC,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,YACA,QAAA,kBAAAA,GAAAA,CAAC,QAAK,UAAA,EAAY,GAAA,EAAM,qBAAU,CAAA,EACnC,CAAA;AAAA,oBACAA,IAAC,QAAA,EAAA,EACA,QAAA,kBAAAA,IAAC,IAAA,EAAA,EAAK,UAAA,EAAY,GAAA,EAAM,QAAA,EAAA,WAAA,EAAY,CAAA,EACrC,CAAA;AAAA,IACC,IAAA,CAAK,IAAI,CAAC,OAAA,qBACVE,IAAAA,CAAC,KAAA,CAAM,UAAN,EACA,QAAA,EAAA;AAAA,sBAAAF,IAAC,IAAA,EAAA,EAAK,EAAA,EAAI,GAAI,QAAA,EAAA,OAAA,CAAQ,KAAA,IAAS,QAAQ,GAAA,EAAI,CAAA;AAAA,sBAC3CA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAG,QAAA,CAAS,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAS,CAAA;AAAA,UAC5C;AAAA;AAAA;AACD,KAAA,EAAA,EALoB,OAAA,CAAQ,GAM7B,CACA;AAAA,GAAA,EACF,CAAA,EACD,CAAA;AAEF,CAAC,CAAA;AAED,UAAA,CAAW,WAAA,GAAc,YAAA;ACnLlB,SAAS,aAAA,CAAqC;AAAA,EACpD,GAAA;AAAA,EACA,GAAG;AACJ,CAAA,EAAkE;AACjE,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,QAAA,EAAU,UAAA,EAAY,UAAS,GAAI,KAAA;AAC/D,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAIC,cAAAA,EAAkB;AAEtC,EAAA,uBACCD,GAAAA;AAAA,IAACG,UAAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,YAAW,KAAM;AAElC,QAAA,MAAM,cAAc,KAAA,KAAU,MAAA;AAE9B,QAAA,MAAM,SAAA,GAAY,WAAA,GACf,KAAA,CAAM,OAAA,CAAQ,MAAM,KAAK,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,GACxD,CAAC,CAAC,KAAA,CAAM,KAAA;AAEX,QAAA,MAAM,mBAAA,GAAsB,CAAC,OAAA,KAEvB;AACL,UAAA,IAAI,WAAA,EAAa;AAChB,YAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,GAC3C,CAAC,GAAG,KAAA,CAAM,KAAK,CAAA,GACf,EAAC;AACJ,YAAA,IAAI,QAAQ,OAAA,EAAS;AACpB,cAAA,IAAI,CAAC,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA,EAAG;AAClC,gBAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,cACxB;AAAA,YACD,CAAA,MAAO;AACN,cAAA,MAAM,GAAA,GAAM,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AACtC,cAAA,IAAI,GAAA,GAAM,EAAA,EAAI,YAAA,CAAa,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,YACzC;AACA,YAAA,KAAA,CAAM,SAAS,YAAY,CAAA;AAAA,UAC5B,CAAA,MAAO;AACN,YAAA,KAAA,CAAM,QAAA,CAAS,CAAC,CAAC,OAAA,CAAQ,OAAO,CAAA;AAAA,UACjC;AAAA,QACD,CAAA;AAEA,QAAA,MAAM,QAAA,GAAW,cAAc,CAAA,EAAG,IAAI,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,GAAK,IAAA;AAE5D,QAAA,uBACCD,IAAAA,CAACE,KAAAA,CAAM,IAAA,EAAN,EAAW,SAAS,CAAC,CAAC,UAAA,CAAW,KAAA,EAAO,QAAA,EACxC,QAAA,EAAA;AAAA,0BAAAF,IAAAA;AAAA,YAAC,QAAA,CAAS,IAAA;AAAA,YAAT;AAAA,cACA,EAAA,EAAI,QAAA;AAAA,cACJ,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,KAAA,EAAO,WAAA,GAAc,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAAA,cACrC,OAAA,EAAS,CAAC,CAAC,UAAA,CAAW,KAAA;AAAA,cACtB,GAAA;AAAA,cACA,OAAA,EAAS,SAAA;AAAA,cACT,eAAA,EAAiB,mBAAA;AAAA,cACjB,QAAQ,KAAA,CAAM,MAAA;AAAA,cACd,QAAA;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAF,GAAAA,CAAC,QAAA,CAAS,WAAA,EAAT,EAAqB,CAAA;AAAA,gCACtBA,GAAAA,CAAC,QAAA,CAAS,OAAA,EAAT,EACA,0BAAAA,GAAAA,CAAC,QAAA,CAAS,SAAA,EAAT,EAAmB,CAAA,EACrB,CAAA;AAAA,gBAAA,CACE,SAAS,QAAA,qBACVE,IAAAA,CAAC,QAAA,CAAS,OAAT,EACC,QAAA,EAAA;AAAA,kBAAA,KAAA;AAAA,kBACA;AAAA,iBAAA,EACF;AAAA;AAAA;AAAA,WAEF;AAAA,UACC,8BAAcF,GAAAA,CAACI,KAAAA,CAAM,UAAA,EAAN,EAAkB,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,UAC5C,UAAA,CAAW,KAAA,oBACXJ,GAAAA,CAACI,KAAAA,CAAM,SAAA,EAAN,EAAgB,WAAA,EAAU,QAAA,EACzB,QAAA,EAAA,UAAA,CAAW,KAAA,CAAM,OAAA,EACnB;AAAA,SAAA,EAEF,CAAA;AAAA,MAEF;AAAA;AAAA,GACD;AAEF;AACC,aAAA,CAA2C,WAAA,GAAc,eAAA;ACxEnD,SAAS,SAAA,CAAiC;AAAA,EAChD,GAAA;AAAA,EACA,GAAG;AACJ,CAAA,EAAiD;AAChD,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA,GAAW,YAAA;AAAA,IACX,MAAA,GAAS,OAAA;AAAA,IACT,aAAA,GAAgB,IAAA;AAAA,IAChB,QAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAG;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,MAAM,OAAA,GAAU,WAAA;AAAA,IACf,CAAC,gBAAqB,OAAA,KAAiB;AACtC,MAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC9B,QAAA,GAAA,CAAI,cAAc,CAAA;AAAA,MACnB,CAAA,MAAA,IAAW,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC1C,QAAC,IAAoC,OAAA,GAAU,cAAA;AAAA,MAChD;AACA,MAAA,cAAA,CAAe,aAAA,GAAgB;AAAA,QAC9B,aAAA,EAAe,gBAAgB,IAAA,GAAO;AAAA,OACtC,CAAA;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAK,aAAa;AAAA,GACpB;AAEA,EAAA,uBACCJ,GAAAA,CAAC,SAAA,EAAA,EAAa,IAAA,EAAY,KAAA,EAAc,QAAA,EAAqB,GAAG,IAAA,EAC9D,QAAA,EAAA,CAAC,KAAA,KACD,MAAA,mBACCA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACA,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA;AAAA,MACA,UAAU,CAAC,KAAA,KAAU,KAAA,CAAM,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,MAC/C,OAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACR,QAAA;AAAA,QACA,QAAA,EAAU,IAAA;AAAA,QACV,OAAA,EAAS,EAAE,OAAA,EAAS,KAAA,EAAM;AAAA,QAC1B,oBAAA,EAAsB,KAAA;AAAA,QACtB,aAAA,EAAe,gBAAgB,IAAA,GAAO;AAAA;AACvC;AAAA,sBAGDA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACA,KAAA,EAAO,MAAM,KAAA,IAAS,EAAA;AAAA,MACtB,UAAU,CAAC,CAAA,KAAM,MAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MAC9C,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,QAAA;AAAA,MACA,kBAAA,EAAkB,MAAM,kBAAkB,CAAA;AAAA,MAC1C,KAAA,EAAO;AAAA,QACN,UAAA,EAAY,WAAA;AAAA,QACZ,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,SAAA;AAAA,QACT,MAAA,EAAQ,uCAAA;AAAA,QACR,YAAA,EAAc,UAAA;AAAA,QACd,KAAA,EAAO,MAAA;AAAA,QACP,SAAA,EAAW,MAAA;AAAA,QACX,MAAA,EAAQ;AAAA;AACT;AAAA,GACD,EAGH,CAAA;AAEF;AACC,SAAA,CAAuC,WAAA,GAAc,WAAA;ACvE/C,SAAS,gBAAA,CAAwC;AAAA,EACvD,GAAA;AAAA,EACA,GAAG;AACJ,CAAA,EAAsE;AACrE,EAAA,MAAM,EAAE,MAAM,KAAA,EAAO,IAAA,GAAO,MAAM,QAAA,EAAU,WAAA,EAAa,GAAG,IAAA,EAAK,GAAI,KAAA;AAErE,EAAA,uBACCA,GAAAA,CAAC,SAAA,EAAA,EAAa,IAAA,EAAY,KAAA,EAAc,QAAA,EAAqB,GAAG,IAAA,EAC9D,QAAA,EAAA,CAAC,KAAA,qBACDE,IAAAA,CAAC,OAAA,EAAA,EACA,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACtB,QAAA,kBAAAA,GAAAA;AAAA,MAACK,UAAAA;AAAA,MAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA;AAAA,QACA,CAAA,EAAE,aAAA;AAAA,QACF,WAAA,EAAY,KAAA;AAAA,QACZ,OAAA,EAAQ,IAAA;AAAA,QACR,CAAA,EAAG,CAAA;AAAA,QACH,OAAA,EAAQ,SAAA;AAAA,QACR,QAAA,EAAU,QAAA;AAAA,QACV,YAAA,EAAY,CAAA,OAAA,EAAU,KAAA,CAAM,KAAA,IAAS,MAAM,CAAA,CAAA;AAAA,QAC3C,kBAAA,EAAkB,MAAM,kBAAkB,CAAA;AAAA,QAE1C,QAAA,kBAAAL,IAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,MAAK,EAAA,EAAI,KAAA,CAAM,KAAA,EAAO,IAAA,EAAM,CAAA,EAAG;AAAA;AAAA,KAChD,EACD,CAAA;AAAA,oBACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,KAAA,EAAM,MAAA,EAAO,SAAA,EAAS,IAAA,EACrC,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EACC,QAAA,EAAA,WAAA,mBACAA,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACA,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,QAAA,EAAU,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,KAAK;AAAA;AAAA,wBAG1CA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,KAAA,EAAO,MAAM,KAAA,IAAS,SAAA;AAAA,QACtB,UAAU,CAAC,CAAA,KAAM,MAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QAC9C,KAAA,EAAO;AAAA,UACN,KAAA,EAAO,GAAA;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,MAAA,EAAQ,MAAA;AAAA,UACR,MAAA,EAAQ;AAAA;AACT;AAAA,OAGH,CAAA,EACD;AAAA,GAAA,EACD,CAAA,EAEF,CAAA;AAEF;AACC,gBAAA,CAA8C,WAAA,GAAc,kBAAA;AC5DtD,IAAM,sBAA0D,CAAC;AAAA,EACvE,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACD,CAAA,KAAM;AACL,EAAA,MAAM,MAAMM,KAAAA,EAAM;AAClB,EAAA,MAAM,QAAA,GAAW,GAAG,GAAG,CAAA,OAAA,CAAA;AACvB,EAAA,MAAM,OAAA,GAAU,GAAG,GAAG,CAAA,MAAA,CAAA;AAEtB,EAAA,uBACCJ,IAAAA;AAAA,IAACE,KAAAA,CAAM,IAAA;AAAA,IAAN;AAAA,MACA,OAAA,EAAS,CAAC,CAAC,YAAA;AAAA,MACX,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,KAAA,KACC,OAAO,KAAA,KAAU,QAAA,mBACjBF,KAAC,MAAA,EAAA,EACA,QAAA,EAAA;AAAA,0BAAAF,GAAAA,CAACI,MAAM,KAAA,EAAN,EAAY,MAAK,GAAA,EAAI,OAAA,EAAS,MAC7B,QAAA,EAAA,KAAA,EACF,CAAA;AAAA,UACC;AAAA,SAAA,EACF,CAAA,GAEA,KAAA,CAAA;AAAA,QAGD,QAAA;AAAA,QACA,eACC,OAAO,UAAA,KAAe,2BACtBJ,GAAAA,CAACI,MAAM,UAAA,EAAN,EAAiB,EAAA,EAAI,QAAA,EAAW,sBAAW,CAAA,mBAE5CJ,IAAC,MAAA,EAAA,EAAK,EAAA,EAAI,UAAW,QAAA,EAAA,UAAA,EAAW,CAAA,CAAA;AAAA,QAEjC,YAAA,oBACAA,GAAAA,CAACI,KAAAA,CAAM,SAAA,EAAN,EAAgB,EAAA,EAAI,OAAA,EAAS,WAAA,EAAU,QAAA,EACtC,QAAA,EAAA,YAAA,EACF;AAAA;AAAA;AAAA,GAEF;AAEF;AACA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;ACnD3B,SAAS,eAAA,CAAuC;AAAA,EACtD,GAAA;AAAA,EACA,GAAG;AACJ,CAAA,EAAoE;AACnE,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA,GAAO,MAAA;AAAA,IACP,QAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,uBACCJ,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA,CAAC,0BACDA,GAAAA;AAAA,QAACO,KAAAA;AAAA,QAAA;AAAA,UACC,GAAG,KAAA;AAAA,UACJ,KAAA,EAAO,MAAM,KAAA,IAAS,EAAA;AAAA,UACtB,IAAA;AAAA,UACA,EAAA,EAAI,IAAA;AAAA,UACJ,GAAA;AAAA,UACA,GAAA;AAAA,UACA,QAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA;AAAA;AACD;AAAA,GAEF;AAEF;AACC,eAAA,CAA6C,WAAA,GAAc,iBAAA;ACtCrD,IAAM,iBAAgD,CAAC;AAAA,EAC7D,KAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA;AACD,CAAA,KAAM;AACL,EAAA,MAAM,EAAE,SAAA,EAAU,GAAIN,cAAAA,EAAe;AACrC,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,SAAA,CAAU,OAAO,CAAA;AAE5C,EAAA,uBACCD,GAAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACA,OAAA,EAAS,QAAQ,KAAA,KAAU,SAAA;AAAA,MAC3B,cAAA,EAAgB,MAAM,OAAA,CAAQ,OAAA,IAAU;AAAA,MACxC,aAAA,EAAe,MAAM,OAAA,CAAQ,KAAA,IAAQ;AAAA,MACrC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AAAA,GACD;AAEF;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;ACItB,SAAS,UAAiC,KAAA,EAA0B;AAC1E,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,QAAA;AAAA,IACA,cAAA,GAAiB,mBAAA;AAAA,IACjB,YAAA,GAAe,8BAAA;AAAA,IACf,WAAA,GAAc,aAAA;AAAA,IACd,WAAA;AAAA,IACA,GAAG;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,uBACCA,IAAC,SAAA,EAAA,EAAa,IAAA,EAAY,OAAc,QAAA,EAAqB,GAAG,IAAA,EAC9D,QAAA,EAAA,CAAC,KAAA,KAAU;AACX,IAAA,IAAI,WAAA,EAAa;AAChB,MAAA,uBACCA,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACA,KAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAA;AAAA,UACA,QAAA;AAAA,UACA,cAAA;AAAA,UACA,YAAA;AAAA,UACA,WAAA;AAAA,UACA;AAAA;AAAA,OACD;AAAA,IAEF;AAGA,IAAA,uBACCE,KAAC,GAAA,EAAA,EACA,QAAA,EAAA;AAAA,sBAAAF,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACA,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EACC,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,MAAM,EAAE,IAAA,EAAK,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA;AAAA,UAEnD,QAAA;AAAA,UACA,QAAA;AAAA,UACA,kBAAA,EAAkB,MAAM,kBAAkB,CAAA;AAAA,UAC1C,QAAA,EAAU,CAAC,CAAA,KAAM;AAChB,YAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,CAAO,KAAA;AACvB,YAAA,IAAI,CAAC,KAAA,EAAO;AACZ,YAAA,IAAI,QAAA,EAAU;AACb,cAAA,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,YACjC,CAAA,MAAO;AACN,cAAA,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,IAAK,IAAI,CAAA;AAAA,YAChC;AAAA,UACD;AAAA;AAAA,OACD;AAAA,MACC,KAAA,CAAM,KAAA,oBACNA,GAAAA,CAAC,QAAK,EAAA,EAAI,CAAA,EAAG,QAAA,EAAS,IAAA,EAAK,KAAA,EAAM,UAAA,EAC9B,QAAA,EAAA,KAAA,CAAM,KAAA,EAAgB,QAAQ,eAAA,EACjC;AAAA,KAAA,EAEF,CAAA;AAAA,EAEF,CAAA,EACD,CAAA;AAEF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;AAmBxB,IAAM,kBAAkD,CAAC;AAAA,EACxD,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA;AACD,CAAA,KAAM;AACL,EAAA,MAAM,UAAA,GAAaQ,WAAAA;AAAA,IAClB,CAAC,KAAA,KAAkB;AAClB,MAAA,IAAI,QAAA,EAAU;AACb,QAAA,KAAA,CAAM,SAAS,KAAK,CAAA;AAAA,MACrB,CAAA,MAAO;AACN,QAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,QAAA,IAAI,IAAA,EAAM;AACT,UAAA,KAAA,CAAM,QAAA;AAAA,YACL,MAAA,CAAO,OAAO,IAAA,EAAM;AAAA,cACnB,OAAA,EAAS,GAAA,CAAI,eAAA,CAAgB,IAAI;AAAA,aACjC;AAAA,WACF;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GACjB;AAEA,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,OAAO,MAAM;AACZ,MAAA,IAAI,KAAA,CAAM,OAAO,OAAA,EAAS;AACzB,QAAA,GAAA,CAAI,eAAA,CAAgB,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA;AAAA,MACxC;AAAA,IACD,CAAA;AAAA,EACD,CAAA,EAAG,CAAC,KAAA,CAAM,KAAK,CAAC,CAAA;AAEhB,EAAA,MAAM,EAAE,YAAA,EAAc,aAAA,EAAe,YAAA,EAAc,IAAA,KAAS,WAAA,CAAY;AAAA,IACvE,OAAA,EAAS,IAAA;AAAA,IACT,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACR,CAAA;AAED,EAAA,uBACCN,IAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,cAAa,EACrB,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,GAAA,EAAA,EAAI,OAAA,EAAQ,MAAA,EAAQ,GAAG,aAAA,EAAc,EAAG,OAAA,EAAO,IAAA,EAC/C,QAAA,kBAAAA,GAAAA,CAAC,OAAA,EAAA,EAAM,CAAA,EACR,CAAA;AAAA,oBACAE,IAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACA,OAAA,EAAQ,UAAA;AAAA,QACR,CAAA,EAAG,CAAA;AAAA,QACH,OAAA,EAAQ,IAAA;AAAA,QACR,QAAA,EAAS,QAAA;AAAA,QACT,QAAA,EAAS,UAAA;AAAA,QACT,SAAA,EAAU,QAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,YAAA,oBACAA,IAAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACA,aAAA,EAAc,MAAA;AAAA,cACd,GAAA,EAAI,GAAA;AAAA,cACJ,gBAAA,EAAiB,GAAA;AAAA,cACjB,QAAA,EAAS,UAAA;AAAA,cACT,eAAA,EAAgB,gBAAA;AAAA,cAChB,KAAA,EAAM,MAAA;AAAA,cACN,MAAA,EAAO,MAAA;AAAA,cACP,MAAA,EAAQ,CAAA;AAAA,cACR,UAAA,EAAW,QAAA;AAAA,cACX,cAAA,EAAe,QAAA;AAAA,cACf,SAAA,EAAU,QAAA;AAAA,cACV,KAAA,EAAM,OAAA;AAAA,cACN,GAAA,EAAI,GAAA;AAAA,cAEJ,QAAA,EAAA;AAAA,gCAAAF,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,gCAClBA,GAAAA,CAAC,IAAA,EAAA,EAAK,UAAS,IAAA,EAAK,UAAA,EAAW,QAC7B,QAAA,EAAA,cAAA,EACF;AAAA;AAAA;AAAA,WACD;AAAA,UAEA,KAAA,CAAM,KAAA,EAAO,IAAA,oBACbA,GAAAA,CAAC,IAAA,EAAA,EAAK,QAAA,EAAS,IAAA,EAAK,KAAA,EAAM,UAAA,EACxB,QAAA,EAAA,KAAA,CAAM,KAAA,CAAM,IAAA,EACd,CAAA;AAAA,0BAEDA,IAAC,IAAA,EAAA,EAAK,KAAA,EAAM,YAAW,QAAA,EAAS,IAAA,EAAK,EAAA,EAAI,CAAA,EACvC,QAAA,EAAA,YAAA,EACF,CAAA;AAAA,0BACAE,IAAAA,CAACO,MAAAA,EAAA,EAAO,EAAA,EAAI,CAAA,EAAG,IAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,IAAA,EACnD,QAAA,EAAA;AAAA,4BAAAT,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,YACjB;AAAA,WAAA,EACF;AAAA;AAAA;AAAA;AACD,GAAA,EACD,CAAA;AAEF,CAAA;ACxLA,IAAM,gBAAA,GAAoD,CAAC,EAAE,SAAA,EAAU,KAAM;AAC5E,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,kBAAA,EAAmB;AACtC,EAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,EAAA,OAAO,IAAA;AACR,CAAA;AAEA,IAAM,YAAA,GAAgD,CAAC,EAAE,SAAA,EAAU,KAAM;AACxE,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,kBAAA,EAAmB;AAEvC,EAAA,IAAI,SAAS,OAAO,IAAA;AAEpB,EAAA,uBACCA,GAAAA,CAACU,WAAAA,EAAA,EACA,QAAA,kBAAAV,GAAAA,CAAC,QAAA,CAAS,WAAA,EAAT,EAAqB,OAAA,EAAO,IAAA,EAC5B,QAAA,kBAAAA,GAAAA;AAAA,IAACK,UAAAA;AAAA,IAAA;AAAA,MACA,OAAA,EAAQ,OAAA;AAAA,MACR,iBAAA,EAAmB,CAAA;AAAA,MACnB,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,kBAAAL,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,KAEpB,CAAA,EACD,CAAA;AAEF,CAAA;AAEO,IAAM,aAAwC,CAAC;AAAA,EACrD,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,OAAA;AAAA,EACV,WAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,UAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,IAAA,GAAO,CAAA;AAAA,EACP,SAAA,GAAY;AACb,CAAA,KAAM;AACL,EAAA,MAAM,SAAA,GAAY,OAA4B,IAAI,CAAA;AAElD,EAAA,MAAM,YAAA,GAAe,CAAC,OAAA,KAA+B;AACpD,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AACnC,IAAA,IAAI,CAAC,UAAA,IAAc,OAAA,KAAY,EAAA,EAAI;AAClC,MAAA,SAAA,CAAU,OAAA,IAAU;AACpB,MAAA;AAAA,IACD;AACA,IAAA,QAAA,GAAW,OAAO,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,uBACCE,IAAAA;AAAA,IAAC,QAAA,CAAS,IAAA;AAAA,IAAT;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA;AAAA,MACzB,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,GAAW,EAAE,KAAK,CAAA;AAAA,MACxC,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,GAAW,EAAE,KAAK,CAAA;AAAA,MACxC,aAAA,EAAe,YAAA;AAAA,MACf,QAAA;AAAA,MACA,WAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAF,GAAAA,CAAC,oBAAiB,SAAA,EAAsB,CAAA;AAAA,wBACxCA,GAAAA,CAAC,QAAA,CAAS,OAAA,EAAT,EAAiB,CAAA;AAAA,QACjB,YAAY,UAAA,mBACZA,GAAAA,CAAC,QAAA,CAAS,UAAT,EAAkB,IAAA,EAAM,CAAA,EAAG,IAAA,GAAO,GAAG,CAAA,EAAA,CAAA,EAAM,CAAA,mBAE5CA,GAAAA,CAAC,QAAA,CAAS,OAAT,EAAe,CAAA;AAAA,wBAEjBA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAsB;AAAA;AAAA;AAAA,GACrC;AAEF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AC/FlB,SAAS,UAAA,CAAkC;AAAA,EACjD,GAAA;AAAA,EACA,GAAG;AACJ,CAAA,EAA+D;AAC9D,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,uBACCA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA,CAAC,0BACDA,GAAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,GAAG,KAAA;AAAA,UACJ,KAAA,EAAO,MAAM,KAAA,IAAS,EAAA;AAAA,UACtB,EAAA,EAAI,IAAA;AAAA,UACJ,WAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAA;AAAA,UACA,QAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAA,EAAS,WAAW,GAAA,GAAM,CAAA;AAAA,UAC1B,GAAA;AAAA,UACC,GAAG;AAAA;AAAA;AACL;AAAA,GAEF;AAEF;AACC,UAAA,CAAwC,WAAA,GAAc,YAAA;AClChD,SAAS,cACf,KAAA,EACC;AACD,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,GAAY,GAAA;AAAA,IACZ,SAAA,GAAY,GAAA;AAAA,IACZ,GAAG;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,uBACCA,IAAC,SAAA,EAAA,EAAa,IAAA,EAAY,OAAc,QAAA,EAAqB,GAAG,IAAA,EAC9D,QAAA,EAAA,CAAC,KAAA,KAAU;AACX,IAAA,IAAI,QAAA,EAAU;AACb,MAAA,IAAI,QAAA,IAAY,SAAS,QAAA,EAAU;AAClC,QAAA,uBAAOA,GAAAA,CAAC,QAAA,CAAS,UAAT,EAAkB,MAAA,EAAQ,MAAM,KAAA,EAAO,CAAA;AAAA,MAChD;AACA,MAAA,uBACCA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACA,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,UAAU,CAAC,KAAA,KAAU,KAAA,CAAM,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,UAC/C,SAAA;AAAA,UACA,SAAA;AAAA,UACA,cAAA,EAAc;AAAA;AAAA,OACf;AAAA,IAEF;AAGA,IAAA,uBACCA,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACA,KAAA,EAAO,MAAM,KAAA,IAAS,EAAA;AAAA,QACtB,UAAU,CAAC,CAAA,KAAM,MAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QAC9C,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,QAAA;AAAA,QACA,kBAAA,EAAkB,MAAM,kBAAkB,CAAA;AAAA,QAC1C,KAAA,EAAO;AAAA,UACN,OAAA,EAAS,SAAA;AAAA,UACT,MAAA,EAAQ,uCAAA;AAAA,UACR,YAAA,EAAc,UAAA;AAAA,UACd,KAAA,EAAO,MAAA;AAAA,UACP,SAAA,EAAW,GAAG,SAAS,CAAA,EAAA,CAAA;AAAA,UACvB,MAAA,EAAQ;AAAA;AACT;AAAA,KACD;AAAA,EAEF,CAAA,EACD,CAAA;AAEF;AACC,aAAA,CAA2C,WAAA,GAAc,eAAA;AC5DnD,SAASW,iBAAAA,CAAwC;AAAA,EACvD,GAAA;AAAA,EACA,GAAG;AACJ,CAAA,EAAqE;AACpE,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA,GAAc,IAAA;AAAA,IACd,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,uBACCX,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA,CAAC,0BACDA,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACA,GAAA;AAAA,UACA,GAAA;AAAA,UACA,IAAA;AAAA,UACA,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,CAAC,CAAA;AAAA,UAC9B,aAAA,EAAe,CAAC,OAAA,KAAY;AAC3B,YAAA,KAAA,CAAM,QAAA;AAAA,cACL,QAAQ,KAAA,KAAU,EAAA,GAAK,IAAI,MAAA,CAAO,UAAA,CAAW,QAAQ,KAAK;AAAA,aAC3D;AAAA,UACD,CAAA;AAAA,UACA,EAAA,EAAI,IAAA;AAAA,UACJ,QAAA;AAAA,UACA,QAAA;AAAA,UACA,WAAA,EAAa,eAAe,CAAC,QAAA;AAAA,UAC7B,OAAA,EAAS,WAAW,GAAA,GAAM,CAAA;AAAA,UACzB,GAAG,gBAAA;AAAA,UAEJ,QAAA,kBAAAA,GAAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACA,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,GAAA;AAAA,cACA,QAAQ,KAAA,CAAM,MAAA;AAAA,cACd,kBAAA,EAAkB,MAAM,kBAAkB;AAAA;AAAA;AAC3C;AAAA;AACD;AAAA,GAEF;AAEF;AACCW,iBAAAA,CAA8C,WAAA,GAAc,kBAAA;ACrDtD,SAAS,gBACf,KAAA,EACC;AACD,EAAA,MAAM,EAAE,MAAM,KAAA,EAAO,OAAA,EAAS,iBAAiB,UAAA,EAAY,GAAG,MAAK,GAAI,KAAA;AAEvE,EAAA,uBACCX,IAAC,SAAA,EAAA,EAAa,IAAA,EAAY,OAAe,GAAG,IAAA,EAC1C,QAAA,EAAA,CAAC,KAAA,qBACDA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA;AAAA,MAC/B,eAAe,CAAC,CAAA,KAAM,KAAA,CAAM,QAAA,CAAS,EAAE,KAAK,CAAA;AAAA,MAC5C,kBAAA,EAAkB,MAAM,kBAAkB,CAAA;AAAA,MACzC,GAAG,eAAA;AAAA,MAEJ,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAM,SAAA,EAAU,OAAO,GAAG,UAAA,EACzB,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACbA,GAAAA,CAAC,KAAA,EAAA,EAAyB,OAAO,MAAA,CAAO,KAAA,EACtC,iBAAO,KAAA,EAAA,EADG,MAAA,CAAO,KAEnB,CACA,CAAA,EACF;AAAA;AAAA,GACD,EAEF,CAAA;AAEF;AACC,eAAA,CAA6C,WAAA,GAAc,iBAAA;AChCrD,SAAS,WAAA,CAAmC;AAAA,EAClD,GAAA;AAAA,EACA,GAAG;AACJ,CAAA,EAAiE;AAChE,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,uBACCA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA,CAAC,0BACDA,GAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACA,UAAU,QAAA,IAAY,QAAA;AAAA,UACtB,WAAA;AAAA,UACC,GAAG,KAAA;AAAA,UACJ,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA;AAAA,UAC/B,EAAA,EAAI,IAAA;AAAA,UACJ,GAAA;AAAA,UACC,GAAG,WAAA;AAAA,UAEH;AAAA;AAAA;AACF;AAAA,GAEF;AAEF;AACC,WAAA,CAAyC,WAAA,GAAc,aAAA;AC1CjD,SAAS,WAAA,CAAmC;AAAA,EAClD,GAAA;AAAA,EACA,GAAG;AACJ,CAAA,EAAgE;AAC/D,EAAA,MAAM,EAAE,MAAM,KAAA,EAAO,QAAA,EAAU,UAAU,WAAA,EAAa,GAAG,MAAK,GAAI,KAAA;AAElE,EAAA,uBACCA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA,CAAC,0BACDA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACA,EAAA,EAAI,IAAA;AAAA,UACJ,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,OAAA,EAAS,MAAM,KAAA,IAAS,KAAA;AAAA,UACxB,eAAA,EAAiB,CAAC,OAAA,KAAY,KAAA,CAAM,SAAS,CAAC,CAAC,QAAQ,OAAO,CAAA;AAAA,UAC9D,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,QAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAA,EAAS,WAAW,GAAA,GAAM,CAAA;AAAA,UAC1B,kBAAA,EAAkB,MAAM,kBAAkB,CAAA;AAAA,UAC1C,GAAA;AAAA,UACC,GAAG;AAAA;AAAA;AACL;AAAA,GAEF;AAEF;AACC,WAAA,CAAyC,WAAA,GAAc,aAAA;AC/BjD,SAAS,aAAA,CAAqC;AAAA,EACpD,GAAA;AAAA,EACA,GAAG;AACJ,CAAA,EAAqE;AACpE,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,uBACCA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA,CAAC,0BACDA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAG,KAAA;AAAA,UACJ,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA;AAAA,UAC/B,EAAA,EAAI,IAAA;AAAA,UACJ,WAAA;AAAA,UACA,QAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAA,EAAS,WAAW,GAAA,GAAM,CAAA;AAAA,UAC1B,GAAA;AAAA,UACC,GAAG;AAAA;AAAA;AACL;AAAA,GAEF;AAEF;AACC,aAAA,CAA2C,WAAA,GAAc,eAAA","file":"index.js","sourcesContent":["import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport {\n\tController,\n\ttype ControllerRenderProps,\n\ttype FieldValues,\n\ttype Path,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { HStack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\n\nexport interface FormFieldProps<T extends FieldValues> {\n\tname: Path<T>;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\t/** Persistent description that shows even when there's an error. */\n\tdescription?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\tchildren: (\n\t\tfield: ControllerRenderProps<T, Path<T>> & {\n\t\t\t/** Computed aria-describedby linking to helper/description/error elements. */\n\t\t\t\"aria-describedby\"?: string;\n\t\t},\n\t) => React.ReactNode;\n}\n\nexport function FormField<T extends FieldValues>({\n\tname,\n\tlabel,\n\thelperText,\n\tdescription,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tchildren,\n}: FormFieldProps<T>) {\n\tconst { control } = useFormContext<T>();\n\tconst uid = useId();\n\tconst descriptionId = `${uid}-description`;\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\tconst describedBy =\n\t\t\t\t\t[\n\t\t\t\t\t\tdescription ? descriptionId : null,\n\t\t\t\t\t\thelperText ? helperId : null,\n\t\t\t\t\t\tfieldState.error ? errorId : null,\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\" \") || undefined;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Field.Root\n\t\t\t\t\t\tinvalid={!!fieldState.error}\n\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label &&\n\t\t\t\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{children({ ...field, \"aria-describedby\": describedBy })}\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<Text id={descriptionId} fontSize=\"xs\" color=\"muted\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{helperText &&\n\t\t\t\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{fieldState.error && (\n\t\t\t\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t\t\t\t{fieldState.error.message}\n\t\t\t\t\t\t\t</Field.ErrorText>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Field.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n(FormField as { displayName?: string }).displayName = \"FormField\";\n","import { Button, ButtonGroup, IconButton, Input } from \"@chakra-ui/react\";\nimport { Plus, Trash2 } from \"lucide-react\";\nimport React from \"react\";\nimport {\n\ttype FieldValues,\n\tuseFieldArray,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { Box, Grid, GridItem, Stack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface ArrayFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/**\n\t * The mode of the array field.\n\t * - `dynamic` — add/remove key-value pairs\n\t * - `keyed` — fixed keys, editable values\n\t * @default \"dynamic\"\n\t */\n\tmode?: \"dynamic\" | \"keyed\";\n\t/** Header label for the value column. @default \"Value\" */\n\tvalueHeader?: string;\n\t/** Header label for the key column. @default \"Key\" */\n\tkeyHeader?: string;\n\t/** Fixed keys when mode is \"keyed\". */\n\tkeys?: Array<{ key: string; value: string }>;\n\t/** Label for the add button. @default \"Add Field\" */\n\taddLabel?: string;\n\t/** Aria label for the remove button. @default \"Remove Item\" */\n\tremoveLabel?: string;\n\t/** Content to display when there are no items. */\n\temptyState?: React.ReactNode;\n}\n\nexport function ArrayField<T extends FieldValues>(props: ArrayFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmode = \"dynamic\",\n\t\tvalueHeader = \"Value\",\n\t\tkeyHeader = \"Key\",\n\t\tkeys = [],\n\t\taddLabel = \"Add Field\",\n\t\tremoveLabel = \"Remove Item\",\n\t\treadOnly,\n\t\temptyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(/* field */) => (\n\t\t\t\t<Box py={4} px={4} bg=\"bg\" rounded=\"md\">\n\t\t\t\t\t{mode === \"dynamic\" ? (\n\t\t\t\t\t\t<DynamicArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\taddLabel={addLabel}\n\t\t\t\t\t\t\tremoveLabel={removeLabel}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t\temptyState={emptyState}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<KeyedArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\tkeys={keys}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n\nArrayField.displayName = \"ArrayField\";\n\ninterface DynamicArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\taddLabel: string;\n\tremoveLabel: string;\n\treadOnly?: boolean;\n\temptyState?: React.ReactNode;\n}\n\nconst DynamicArray: React.FC<DynamicArrayProps> = React.memo((props) => {\n\tconst {\n\t\tname,\n\t\tvalueHeader,\n\t\tkeyHeader,\n\t\taddLabel,\n\t\tremoveLabel,\n\t\treadOnly,\n\t\temptyState,\n\t} = props;\n\n\tconst { control, register } = useFormContext();\n\tconst { fields, append, remove } = useFieldArray({\n\t\tcontrol,\n\t\tname: name as any,\n\t});\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr 50px\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem colSpan={2}>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\n\t\t\t\t{fields.map((item, index) => (\n\t\t\t\t\t<React.Fragment key={item.id}>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.key` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.value` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tcolorPalette=\"red\"\n\t\t\t\t\t\t\taria-label={removeLabel}\n\t\t\t\t\t\t\tonClick={() => remove(index)}\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Trash2 size={16} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t\t{fields.length === 0 && emptyState && (\n\t\t\t\t<Box py={4} textAlign=\"center\">\n\t\t\t\t\t{emptyState}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t\t<ButtonGroup>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonClick={() => append({ key: \"\", value: \"\" })}\n\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t>\n\t\t\t\t\t<Plus size={16} />\n\t\t\t\t\t{addLabel}\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup>\n\t\t</Stack>\n\t);\n});\n\nDynamicArray.displayName = \"DynamicArray\";\n\ninterface KeyedArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\tkeys: Array<{ key: string; value: string }>;\n\treadOnly?: boolean;\n}\n\nconst KeyedArray: React.FC<KeyedArrayProps> = React.memo((props) => {\n\tconst { name, valueHeader, keyHeader, keys, readOnly } = props;\n\tconst { register } = useFormContext();\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t{keys.map((keyItem) => (\n\t\t\t\t\t<React.Fragment key={keyItem.key}>\n\t\t\t\t\t\t<Text py={2}>{keyItem.value ?? keyItem.key}</Text>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${keyItem.key}` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n});\n\nKeyedArray.displayName = \"KeyedArray\";\n","import { Checkbox, Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport {\n\tController,\n\ttype FieldValues,\n\ttype Path,\n\tuseFormContext,\n} from \"react-hook-form\";\n\nexport interface CheckboxFieldProps<T extends FieldValues> {\n\tname: Path<T>;\n\tlabel?: string;\n\t/** When provided, the field is treated as an array of checked values. */\n\tvalue?: string | number;\n\tdisabled?: boolean;\n\thelperText?: React.ReactNode;\n\tchildren?: React.ReactNode;\n}\n\nexport function CheckboxField<T extends FieldValues>({\n\tref,\n\t...props\n}: CheckboxFieldProps<T> & { ref?: React.Ref<HTMLLabelElement> }) {\n\tconst { name, label, value, disabled, helperText, children } = props;\n\tconst { control } = useFormContext<T>();\n\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\t// Array mode: field.value is an array, value prop identifies the item\n\t\t\t\tconst isArrayMode = value !== undefined;\n\n\t\t\t\tconst isChecked = isArrayMode\n\t\t\t\t\t? Array.isArray(field.value) && field.value.includes(value)\n\t\t\t\t\t: !!field.value;\n\n\t\t\t\tconst handleCheckedChange = (details: {\n\t\t\t\t\tchecked: boolean | \"indeterminate\";\n\t\t\t\t}) => {\n\t\t\t\t\tif (isArrayMode) {\n\t\t\t\t\t\tconst currentValue = Array.isArray(field.value)\n\t\t\t\t\t\t\t? [...field.value]\n\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\tif (details.checked) {\n\t\t\t\t\t\t\tif (!currentValue.includes(value)) {\n\t\t\t\t\t\t\t\tcurrentValue.push(value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst idx = currentValue.indexOf(value);\n\t\t\t\t\t\t\tif (idx > -1) currentValue.splice(idx, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfield.onChange(currentValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfield.onChange(!!details.checked);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst uniqueId = isArrayMode ? `${name}-${String(value)}` : name;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Field.Root invalid={!!fieldState.error} disabled={disabled}>\n\t\t\t\t\t\t<Checkbox.Root\n\t\t\t\t\t\t\tid={uniqueId}\n\t\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\t\tvalue={isArrayMode ? String(value) : undefined}\n\t\t\t\t\t\t\tinvalid={!!fieldState.error}\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tchecked={isChecked}\n\t\t\t\t\t\t\tonCheckedChange={handleCheckedChange}\n\t\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Checkbox.HiddenInput />\n\t\t\t\t\t\t\t<Checkbox.Control>\n\t\t\t\t\t\t\t\t<Checkbox.Indicator />\n\t\t\t\t\t\t\t</Checkbox.Control>\n\t\t\t\t\t\t\t{(label || children) && (\n\t\t\t\t\t\t\t\t<Checkbox.Label>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</Checkbox.Label>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Checkbox.Root>\n\t\t\t\t\t\t{helperText && <Field.HelperText>{helperText}</Field.HelperText>}\n\t\t\t\t\t\t{fieldState.error && (\n\t\t\t\t\t\t\t<Field.ErrorText aria-live=\"polite\">\n\t\t\t\t\t\t\t\t{fieldState.error.message}\n\t\t\t\t\t\t\t</Field.ErrorText>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Field.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n(CheckboxField as { displayName?: string }).displayName = \"CheckboxField\";\n","import type React from \"react\";\nimport { useCallback } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @monaco-editor/react is an optional peer dependency\ntype MonacoEditorProps = {\n\tvalue?: string;\n\tlanguage?: string;\n\tonChange?: (value: string | undefined) => void;\n\tonMount?: (editor: any, monaco: any) => void;\n\theight?: string;\n\toptions?: Record<string, any>;\n};\n\nexport interface CodeFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tlanguage?: string;\n\tplaceholder?: string;\n\theight?: string;\n\tindentWithTab?: boolean;\n\t/** The Monaco Editor component. Pass it to avoid hard dependency on @monaco-editor/react. */\n\tEditor?: React.ComponentType<MonacoEditorProps>;\n}\n\nexport function CodeField<T extends FieldValues>({\n\tref,\n\t...props\n}: CodeFieldProps<T> & { ref?: React.Ref<any> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tlanguage = \"typescript\",\n\t\theight = \"400px\",\n\t\tindentWithTab = true,\n\t\treadOnly,\n\t\tEditor,\n\t\t...rest\n\t} = props;\n\n\tconst onMount = useCallback(\n\t\t(editorInstance: any, _monaco: any) => {\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(editorInstance);\n\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t(ref as React.MutableRefObject<any>).current = editorInstance;\n\t\t\t}\n\t\t\teditorInstance.updateOptions?.({\n\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t});\n\t\t},\n\t\t[ref, indentWithTab],\n\t);\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) =>\n\t\t\t\tEditor ? (\n\t\t\t\t\t<Editor\n\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\tonMount={onMount}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\toptions={{\n\t\t\t\t\t\t\treadOnly,\n\t\t\t\t\t\t\twordWrap: \"on\",\n\t\t\t\t\t\t\tminimap: { enabled: false },\n\t\t\t\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontFamily: \"monospace\",\n\t\t\t\t\t\t\tfontSize: \"0.875rem\",\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: height,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t}\n\t\t</FormField>\n\t);\n}\n(CodeField as { displayName?: string }).displayName = \"CodeField\";\n","import { type ButtonProps, IconButton, Square } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tPopover,\n\tPopoverBody,\n\tPopoverContent,\n\tPopoverTrigger,\n} from \"../primitives/popover\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-colorful is an optional peer dependency\ntype HexColorPickerProps = {\n\tcolor?: string;\n\tonChange?: (color: string) => void;\n};\n\nexport interface ColorPickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tsize?: ButtonProps[\"size\"];\n\t/** The HexColorPicker component from react-colorful. Pass it to avoid hard dependency. */\n\tColorPicker?: React.ComponentType<HexColorPickerProps>;\n}\n\nexport function ColorPickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: ColorPickerFieldProps<T> & { ref?: React.Ref<HTMLButtonElement> }) {\n\tconst { name, label, size = \"md\", readOnly, ColorPicker, ...rest } = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => (\n\t\t\t\t<Popover>\n\t\t\t\t\t<PopoverTrigger asChild>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\tw=\"fit-content\"\n\t\t\t\t\t\t\tborderWidth=\"1px\"\n\t\t\t\t\t\t\trounded=\"md\"\n\t\t\t\t\t\t\tp={1}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t\taria-label={`Color: ${field.value || \"none\"}`}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Square rounded=\"sm\" bg={field.value} size={6} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</PopoverTrigger>\n\t\t\t\t\t<PopoverContent width=\"auto\" showArrow>\n\t\t\t\t\t\t<PopoverBody>\n\t\t\t\t\t\t\t{ColorPicker ? (\n\t\t\t\t\t\t\t\t<ColorPicker\n\t\t\t\t\t\t\t\t\tcolor={field.value}\n\t\t\t\t\t\t\t\t\tonChange={(color) => field.onChange(color)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\tvalue={field.value || \"#000000\"}\n\t\t\t\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: 200,\n\t\t\t\t\t\t\t\t\t\theight: 200,\n\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</PopoverBody>\n\t\t\t\t\t</PopoverContent>\n\t\t\t\t</Popover>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(ColorPickerField as { displayName?: string }).displayName = \"ColorPickerField\";\n","import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport { HStack } from \"../primitives/layout\";\n\nexport interface ControlledFormFieldProps {\n\tname: string;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\terrorMessage?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\tchildren: React.ReactNode;\n}\n\nexport const ControlledFormField: React.FC<ControlledFormFieldProps> = ({\n\tname,\n\tlabel,\n\thelperText,\n\terrorMessage,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tchildren,\n}) => {\n\tconst uid = useId();\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Field.Root\n\t\t\tinvalid={!!errorMessage}\n\t\t\trequired={required}\n\t\t\tdisabled={disabled}\n\t\t\treadOnly={readOnly}\n\t\t>\n\t\t\t{label &&\n\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t<HStack>\n\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t</HStack>\n\t\t\t\t) : (\n\t\t\t\t\tlabel\n\t\t\t\t))}\n\t\t\t{/* aria-describedby must be set manually by the consumer since children is ReactNode, not a render function. */}\n\t\t\t{children}\n\t\t\t{helperText &&\n\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t) : (\n\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t))}\n\t\t\t{errorMessage && (\n\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t{errorMessage}\n\t\t\t\t</Field.ErrorText>\n\t\t\t)}\n\t\t</Field.Root>\n\t);\n};\nControlledFormField.displayName = \"ControlledFormField\";\n","import { Input } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface DatePickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Minimum date in YYYY-MM-DD format */\n\tmin?: string;\n\t/** Maximum date in YYYY-MM-DD format */\n\tmax?: string;\n\t/** Input type: \"date\", \"datetime-local\", or \"time\" */\n\ttype?: \"date\" | \"datetime-local\" | \"time\";\n}\n\nexport function DatePickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: DatePickerFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\ttype = \"date\",\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Input\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tid={name}\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tref={ref}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(DatePickerField as { displayName?: string }).displayName = \"DatePickerField\";\n","import type React from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { useBlocker } from \"react-router-dom\";\nimport { LeavePageConfirmation } from \"../primitives/leave-page-confirmation\";\n\nexport interface DirtyFormGuardProps {\n\t/** Dialog title. @default \"You have unsaved changes\" */\n\ttitle?: string;\n\t/** Dialog message body. @default \"Are you sure you want to leave this page? You have unsaved changes.\" */\n\tmessage?: string;\n\t/** Label for the confirm/leave button. @default \"Leave\" */\n\tconfirmLabel?: string;\n\t/** Label for the cancel/stay button. @default \"Stay\" */\n\tcancelLabel?: string;\n}\n\nexport const DirtyFormGuard: React.FC<DirtyFormGuardProps> = ({\n\ttitle,\n\tmessage,\n\tconfirmLabel,\n\tcancelLabel,\n}) => {\n\tconst { formState } = useFormContext();\n\tconst blocker = useBlocker(formState.isDirty);\n\n\treturn (\n\t\t<LeavePageConfirmation\n\t\t\tblocked={blocker.state === \"blocked\"}\n\t\t\tonConfirmLeave={() => blocker.proceed?.()}\n\t\t\tonCancelLeave={() => blocker.reset?.()}\n\t\t\ttitle={title}\n\t\t\tmessage={message}\n\t\t\tconfirmLabel={confirmLabel}\n\t\t\tcancelLabel={cancelLabel}\n\t\t/>\n\t);\n};\nDirtyFormGuard.displayName = \"DirtyFormGuard\";\n","import { Button } from \"@chakra-ui/react\";\nimport { Upload } from \"lucide-react\";\nimport type React from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Box, Flex } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-dropzone is an optional peer dependency\ntype DropzoneOptions = {\n\tnoClick?: boolean;\n\tmultiple?: boolean;\n\tdisabled?: boolean;\n\taccept?: Record<string, string[]>;\n\tonDrop?: (files: File[]) => void;\n};\n\ntype UseDropzoneReturn = {\n\tgetRootProps: () => Record<string, any>;\n\tgetInputProps: () => Record<string, any>;\n\tisDragActive: boolean;\n\topen: () => void;\n};\n\nexport interface FileFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Accept configuration for file types, e.g. { \"image/*\": [\".png\", \".jpg\"] } */\n\taccept?: Record<string, string[]>;\n\t/** Allow multiple file selection. @default false */\n\tmultiple?: boolean;\n\t/** Text shown when dragging files over. @default \"Release to upload\" */\n\tdragActiveText?: string;\n\t/** Text shown below the file preview. @default \"Drag & drop a file to upload\" */\n\tdropHintText?: string;\n\t/** Label for the upload button. @default \"Choose File\" */\n\tbuttonLabel?: string;\n\t/** The useDropzone hook from react-dropzone. Pass it to avoid hard dependency. */\n\tuseDropzone?: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nexport function FileField<T extends FieldValues>(props: FileFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\taccept,\n\t\tmultiple = false,\n\t\tdisabled,\n\t\tdragActiveText = \"Release to upload\",\n\t\tdropHintText = \"Drag & drop a file to upload\",\n\t\tbuttonLabel = \"Choose File\",\n\t\tuseDropzone,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} disabled={disabled} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (useDropzone) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<DropzoneContent\n\t\t\t\t\t\t\tfield={field}\n\t\t\t\t\t\t\taccept={accept}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tdragActiveText={dragActiveText}\n\t\t\t\t\t\t\tdropHintText={dropHintText}\n\t\t\t\t\t\t\tbuttonLabel={buttonLabel}\n\t\t\t\t\t\t\tuseDropzone={useDropzone}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: native file input\n\t\t\t\treturn (\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\taccept={\n\t\t\t\t\t\t\t\taccept ? Object.values(accept).flat().join(\",\") : undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tconst files = e.target.files;\n\t\t\t\t\t\t\t\tif (!files) return;\n\t\t\t\t\t\t\t\tif (multiple) {\n\t\t\t\t\t\t\t\t\tfield.onChange(Array.from(files));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield.onChange(files[0] || null);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{field.value && (\n\t\t\t\t\t\t\t<Text mt={2} fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t\t\t{(field.value as File)?.name ?? \"File selected\"}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Box>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n\nFileField.displayName = \"FileField\";\n\ninterface DropzoneContentProps {\n\tfield: {\n\t\tvalue: any;\n\t\tonChange: (...event: any[]) => void;\n\t\tonBlur: () => void;\n\t\tref: React.Ref<any>;\n\t\tname: string;\n\t};\n\taccept?: Record<string, string[]>;\n\tmultiple: boolean;\n\tdisabled?: boolean;\n\tdragActiveText: string;\n\tdropHintText: string;\n\tbuttonLabel: string;\n\tuseDropzone: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nconst DropzoneContent: React.FC<DropzoneContentProps> = ({\n\tfield,\n\taccept,\n\tmultiple,\n\tdisabled,\n\tdragActiveText,\n\tdropHintText,\n\tbuttonLabel,\n\tuseDropzone,\n}) => {\n\tconst handleDrop = useCallback(\n\t\t(files: File[]) => {\n\t\t\tif (multiple) {\n\t\t\t\tfield.onChange(files);\n\t\t\t} else {\n\t\t\t\tconst file = files[0];\n\t\t\t\tif (file) {\n\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\tObject.assign(file, {\n\t\t\t\t\t\t\tpreview: URL.createObjectURL(file),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[field, multiple],\n\t);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (field.value?.preview) {\n\t\t\t\tURL.revokeObjectURL(field.value.preview);\n\t\t\t}\n\t\t};\n\t}, [field.value]);\n\n\tconst { getRootProps, getInputProps, isDragActive, open } = useDropzone({\n\t\tnoClick: true,\n\t\tmultiple,\n\t\tdisabled,\n\t\taccept,\n\t\tonDrop: handleDrop,\n\t});\n\n\treturn (\n\t\t<Box {...getRootProps()}>\n\t\t\t<Box display=\"none\" {...getInputProps()} asChild>\n\t\t\t\t<input />\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tbgColor=\"bg.muted\"\n\t\t\t\tp={4}\n\t\t\t\trounded=\"md\"\n\t\t\t\toverflow=\"hidden\"\n\t\t\t\tposition=\"relative\"\n\t\t\t\ttextAlign=\"center\"\n\t\t\t>\n\t\t\t\t{isDragActive && (\n\t\t\t\t\t<Flex\n\t\t\t\t\t\tpointerEvents=\"none\"\n\t\t\t\t\t\ttop=\"0\"\n\t\t\t\t\t\tinsetInlineStart=\"0\"\n\t\t\t\t\t\tposition=\"absolute\"\n\t\t\t\t\t\tbackgroundColor=\"blackAlpha.400\"\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\tzIndex={1}\n\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\tjustifyContent=\"center\"\n\t\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\t\tcolor=\"white\"\n\t\t\t\t\t\tgap=\"3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Upload size={48} />\n\t\t\t\t\t\t<Text fontSize=\"lg\" fontWeight=\"bold\">\n\t\t\t\t\t\t\t{dragActiveText}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Flex>\n\t\t\t\t)}\n\t\t\t\t{field.value?.name && (\n\t\t\t\t\t<Text fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t{field.value.name}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t<Text color=\"fg.muted\" fontSize=\"xs\" mt={2}>\n\t\t\t\t\t{dropHintText}\n\t\t\t\t</Text>\n\t\t\t\t<Button mt={2} size=\"sm\" variant=\"outline\" onClick={open}>\n\t\t\t\t\t<Upload size={14} />\n\t\t\t\t\t{buttonLabel}\n\t\t\t\t</Button>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n};\n","import {\n\tButtonGroup,\n\tEditable,\n\tIconButton,\n\tuseEditableContext,\n} from \"@chakra-ui/react\";\nimport { Pencil } from \"lucide-react\";\nimport type React from \"react\";\nimport { useRef } from \"react\";\n\nexport interface InlineEditProps {\n\tvalue?: string;\n\tonSubmit?: (nextValue: string) => void;\n\tonChange?: (nextValue: string) => void;\n\tonCancel?: (previousValue: string) => void;\n\t/** @default \"input\" */\n\tvariant?: \"input\" | \"textarea\";\n\tplaceholder?: string;\n\t/** @default \"md\" */\n\tfontSize?: string;\n\tfontWeight?: string;\n\tmaxW?: string;\n\tdisabled?: boolean;\n\t/** When false, submitting an empty value reverts to the previous value. @default false */\n\tallowEmpty?: boolean;\n\t/** Number of rows used to calculate minH for textarea variant. @default 3 */\n\trows?: number;\n\t/** Aria label for the edit button. @default \"Edit\" */\n\teditLabel?: string;\n}\n\ninterface CancelRefCaptureProps {\n\tcancelRef: React.MutableRefObject<(() => void) | null>;\n}\n\nconst CancelRefCapture: React.FC<CancelRefCaptureProps> = ({ cancelRef }) => {\n\tconst { cancel } = useEditableContext();\n\tcancelRef.current = cancel;\n\treturn null;\n};\n\nconst EditControls: React.FC<{ editLabel: string }> = ({ editLabel }) => {\n\tconst { editing } = useEditableContext();\n\n\tif (editing) return null;\n\n\treturn (\n\t\t<ButtonGroup>\n\t\t\t<Editable.EditTrigger asChild>\n\t\t\t\t<IconButton\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tmarginInlineStart={2}\n\t\t\t\t\taria-label={editLabel}\n\t\t\t\t>\n\t\t\t\t\t<Pencil size={16} />\n\t\t\t\t</IconButton>\n\t\t\t</Editable.EditTrigger>\n\t\t</ButtonGroup>\n\t);\n};\n\nexport const InlineEdit: React.FC<InlineEditProps> = ({\n\tvalue,\n\tonSubmit,\n\tonChange,\n\tonCancel,\n\tvariant = \"input\",\n\tplaceholder,\n\tfontSize = \"md\",\n\tfontWeight,\n\tmaxW,\n\tdisabled,\n\tallowEmpty = false,\n\trows = 3,\n\teditLabel = \"Edit\",\n}) => {\n\tconst cancelRef = useRef<(() => void) | null>(null);\n\n\tconst handleSubmit = (details: { value: string }) => {\n\t\tconst trimmed = details.value.trim();\n\t\tif (!allowEmpty && trimmed === \"\") {\n\t\t\tcancelRef.current?.();\n\t\t\treturn;\n\t\t}\n\t\tonSubmit?.(trimmed);\n\t};\n\n\treturn (\n\t\t<Editable.Root\n\t\t\tfontSize={fontSize}\n\t\t\tfontWeight={fontWeight}\n\t\t\tmaxW={maxW}\n\t\t\tvalue={String(value ?? \"\")}\n\t\t\tonValueChange={(d) => onChange?.(d.value)}\n\t\t\tonValueRevert={(d) => onCancel?.(d.value)}\n\t\t\tonValueCommit={handleSubmit}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t>\n\t\t\t<CancelRefCapture cancelRef={cancelRef} />\n\t\t\t<Editable.Preview />\n\t\t\t{variant === \"textarea\" ? (\n\t\t\t\t<Editable.Textarea minH={`${rows * 1.5}em`} />\n\t\t\t) : (\n\t\t\t\t<Editable.Input />\n\t\t\t)}\n\t\t\t<EditControls editLabel={editLabel} />\n\t\t</Editable.Root>\n\t);\n};\nInlineEdit.displayName = \"InlineEdit\";\n","import type { InputProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport TextInput from \"../atoms/text-input/text-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface InputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttype?: InputProps[\"type\"];\n\tappend?: string | React.ReactElement;\n\tprepend?: string | React.ReactElement;\n\tinputProps?: InputProps;\n}\n\nexport function InputField<T extends FieldValues>({\n\tref,\n\t...props\n}: InputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttype,\n\t\tappend,\n\t\tprepend,\n\t\tinputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<TextInput\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tappend={append}\n\t\t\t\t\tprepend={prepend}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...inputProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(InputField as { displayName?: string }).displayName = \"InputField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @uiw/react-md-editor is an optional peer dependency\ntype MDEditorProps = {\n\tvalue?: string;\n\tonChange?: (value?: string) => void;\n\tminHeight?: number;\n\tmaxHeight?: number;\n\tvisibleDragbar?: boolean;\n};\n\ntype MDEditorComponent = React.ComponentType<MDEditorProps> & {\n\tMarkdown?: React.ComponentType<{ source?: string }>;\n};\n\nexport interface MarkdownFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** The MDEditor component from @uiw/react-md-editor. Pass it to avoid hard dependency. */\n\tMDEditor?: MDEditorComponent;\n\tminHeight?: number;\n\tmaxHeight?: number;\n}\n\nexport function MarkdownField<T extends FieldValues>(\n\tprops: MarkdownFieldProps<T>,\n) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\treadOnly,\n\t\tMDEditor,\n\t\tminHeight = 200,\n\t\tmaxHeight = 600,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (MDEditor) {\n\t\t\t\t\tif (readOnly && MDEditor.Markdown) {\n\t\t\t\t\t\treturn <MDEditor.Markdown source={field.value} />;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<MDEditor\n\t\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\t\tminHeight={minHeight}\n\t\t\t\t\t\t\tmaxHeight={maxHeight}\n\t\t\t\t\t\t\tvisibleDragbar\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: plain textarea\n\t\t\t\treturn (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: `${minHeight}px`,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n(MarkdownField as { displayName?: string }).displayName = \"MarkdownField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tNumberInputField as NumberInputInput,\n\ttype NumberInputProps,\n\tNumberInputRoot,\n} from \"../primitives/number-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface NumberInputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tmin?: number;\n\tmax?: number;\n\tstep?: number;\n\tshowStepper?: boolean;\n\tnumberInputProps?: NumberInputProps;\n}\n\nexport function NumberInputField<T extends FieldValues>({\n\tref,\n\t...props\n}: NumberInputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\tstep,\n\t\tshowStepper = true,\n\t\tnumberInputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<NumberInputRoot\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tstep={step}\n\t\t\t\t\tvalue={String(field.value ?? 0)}\n\t\t\t\t\tonValueChange={(details) => {\n\t\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\t\tdetails.value === \"\" ? 0 : Number.parseFloat(details.value),\n\t\t\t\t\t\t);\n\t\t\t\t\t}}\n\t\t\t\t\tid={name}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tshowStepper={showStepper && !readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\t{...numberInputProps}\n\t\t\t\t>\n\t\t\t\t\t<NumberInputInput\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t/>\n\t\t\t\t</NumberInputRoot>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(NumberInputField as { displayName?: string }).displayName = \"NumberInputField\";\n","import type { RadioGroupRootProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Stack, type StackProps } from \"../primitives/layout\";\nimport { Radio, RadioGroup } from \"../primitives/radio\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface RadioOption {\n\tlabel: React.ReactNode;\n\tvalue: string;\n}\n\nexport interface RadioGroupFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\toptions: RadioOption[];\n\tradioGroupProps?: RadioGroupRootProps;\n\tstackProps?: StackProps;\n}\n\nexport function RadioGroupField<T extends FieldValues>(\n\tprops: RadioGroupFieldProps<T>,\n) {\n\tconst { name, label, options, radioGroupProps, stackProps, ...rest } = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} {...rest}>\n\t\t\t{(field) => (\n\t\t\t\t<RadioGroup\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tonValueChange={(e) => field.onChange(e.value)}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t{...radioGroupProps}\n\t\t\t\t>\n\t\t\t\t\t<Stack direction=\"row\" {...stackProps}>\n\t\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t\t<Radio key={option.value} value={option.value}>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</Radio>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t</RadioGroup>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(RadioGroupField as { displayName?: string }).displayName = \"RadioGroupField\";\n","import type { NativeSelectFieldProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { NativeSelect } from \"../primitives/native-select\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SelectFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\tselectProps?: NativeSelectFieldProps;\n\tchildren: React.ReactNode;\n}\n\nexport function SelectField<T extends FieldValues>({\n\tref,\n\t...props\n}: SelectFieldProps<T> & { ref?: React.Ref<HTMLSelectElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\tselectProps,\n\t\tchildren,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<NativeSelect\n\t\t\t\t\tdisabled={readOnly || disabled}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...selectProps}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</NativeSelect>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SelectField as { displayName?: string }).displayName = \"SelectField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Switch, type SwitchProps } from \"../primitives/switch\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SwitchFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tswitchProps?: SwitchProps;\n}\n\nexport function SwitchField<T extends FieldValues>({\n\tref,\n\t...props\n}: SwitchFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst { name, label, readOnly, disabled, switchProps, ...rest } = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Switch\n\t\t\t\t\tid={name}\n\t\t\t\t\tname={field.name}\n\t\t\t\t\tchecked={field.value || false}\n\t\t\t\t\tonCheckedChange={(details) => field.onChange(!!details.checked)}\n\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...switchProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SwitchField as { displayName?: string }).displayName = \"SwitchField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Textarea, type TextareaProps } from \"../primitives/textarea\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface TextareaFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttextareaProps?: TextareaProps;\n}\n\nexport function TextareaField<T extends FieldValues>({\n\tref,\n\t...props\n}: TextareaFieldProps<T> & { ref?: React.Ref<HTMLTextAreaElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttextareaProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Textarea\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...textareaProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(TextareaField as { displayName?: string }).displayName = \"TextareaField\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/forms/form-field.tsx","../../src/forms/array-field.tsx","../../src/forms/checkbox-field.tsx","../../src/forms/code-field.tsx","../../src/forms/color-picker-field.tsx","../../src/forms/controlled-form-field.tsx","../../src/forms/date-picker-field.tsx","../../src/forms/dirty-counter.tsx","../../src/forms/dirty-form-guard.tsx","../../src/forms/file-field.tsx","../../src/forms/inline-edit.tsx","../../src/forms/input-field.tsx","../../src/forms/markdown-field.tsx","../../src/forms/number-input-field.tsx","../../src/forms/radio-group-field.tsx","../../src/forms/select-field.tsx","../../src/forms/switch-field.tsx","../../src/forms/textarea-field.tsx","../../src/forms/use-field-dirty.ts"],"names":["jsx","useFormContext","jsxs","IconButton","useId","Field","Input","useCallback","Button","ButtonGroup","NumberInputField"],"mappings":"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","file":"index.js","sourcesContent":["import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport {\n\tController,\n\ttype ControllerRenderProps,\n\ttype FieldValues,\n\ttype Path,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { Box, HStack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\n\nexport interface FormFieldProps<T extends FieldValues> {\n\tname: Path<T>;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\t/** Persistent description that shows even when there's an error. */\n\tdescription?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\t/** When false, the dirty-marker on the label is suppressed and the\n\t * children-callback's `meta.isDirty` is forced to false. @default true */\n\tshowDirtyState?: boolean;\n\tchildren: (\n\t\tfield: ControllerRenderProps<T, Path<T>> & {\n\t\t\t/** Computed aria-describedby linking to helper/description/error elements. */\n\t\t\t\"aria-describedby\"?: string;\n\t\t},\n\t\tmeta: { isDirty: boolean },\n\t) => React.ReactNode;\n}\n\nexport function FormField<T extends FieldValues>({\n\tname,\n\tlabel,\n\thelperText,\n\tdescription,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tshowDirtyState = true,\n\tchildren,\n}: FormFieldProps<T>) {\n\tconst { control } = useFormContext<T>();\n\tconst uid = useId();\n\tconst descriptionId = `${uid}-description`;\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\tconst describedBy =\n\t\t\t\t\t[\n\t\t\t\t\t\tdescription ? descriptionId : null,\n\t\t\t\t\t\thelperText ? helperId : null,\n\t\t\t\t\t\tfieldState.error ? errorId : null,\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\" \") || undefined;\n\t\t\t\tconst isDirty = Boolean(showDirtyState && fieldState.isDirty);\n\n\t\t\t\treturn (\n\t\t\t\t\t<Field.Root\n\t\t\t\t\t\tinvalid={!!fieldState.error}\n\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\tdata-dirty={isDirty ? \"true\" : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label &&\n\t\t\t\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t{isDirty && (\n\t\t\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\t\t\tas=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"inline-block\"\n\t\t\t\t\t\t\t\t\t\t\t\twidth=\"6px\"\n\t\t\t\t\t\t\t\t\t\t\t\theight=\"6px\"\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius=\"full\"\n\t\t\t\t\t\t\t\t\t\t\t\tbg=\"yellow.500\"\n\t\t\t\t\t\t\t\t\t\t\t\tml=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"ungespeicherte Änderung\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{children(\n\t\t\t\t\t\t\t{ ...field, \"aria-describedby\": describedBy },\n\t\t\t\t\t\t\t{ isDirty },\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<Text id={descriptionId} fontSize=\"xs\" color=\"muted\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{helperText &&\n\t\t\t\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{fieldState.error && (\n\t\t\t\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t\t\t\t{fieldState.error.message}\n\t\t\t\t\t\t\t</Field.ErrorText>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Field.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n(FormField as { displayName?: string }).displayName = \"FormField\";\n","import { Button, ButtonGroup, IconButton, Input } from \"@chakra-ui/react\";\nimport { Plus, Trash2 } from \"lucide-react\";\nimport React from \"react\";\nimport {\n\ttype FieldValues,\n\tuseFieldArray,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { Box, Grid, GridItem, Stack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface ArrayFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/**\n\t * The mode of the array field.\n\t * - `dynamic` — add/remove key-value pairs\n\t * - `keyed` — fixed keys, editable values\n\t * @default \"dynamic\"\n\t */\n\tmode?: \"dynamic\" | \"keyed\";\n\t/** Header label for the value column. @default \"Value\" */\n\tvalueHeader?: string;\n\t/** Header label for the key column. @default \"Key\" */\n\tkeyHeader?: string;\n\t/** Fixed keys when mode is \"keyed\". */\n\tkeys?: Array<{ key: string; value: string }>;\n\t/** Label for the add button. @default \"Add Field\" */\n\taddLabel?: string;\n\t/** Aria label for the remove button. @default \"Remove Item\" */\n\tremoveLabel?: string;\n\t/** Content to display when there are no items. */\n\temptyState?: React.ReactNode;\n}\n\nexport function ArrayField<T extends FieldValues>(props: ArrayFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmode = \"dynamic\",\n\t\tvalueHeader = \"Value\",\n\t\tkeyHeader = \"Key\",\n\t\tkeys = [],\n\t\taddLabel = \"Add Field\",\n\t\tremoveLabel = \"Remove Item\",\n\t\treadOnly,\n\t\tshowDirtyState,\n\t\temptyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(/* field */) => (\n\t\t\t\t<Box py={4} px={4} bg=\"bg\" rounded=\"md\">\n\t\t\t\t\t{mode === \"dynamic\" ? (\n\t\t\t\t\t\t<DynamicArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\taddLabel={addLabel}\n\t\t\t\t\t\t\tremoveLabel={removeLabel}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t\temptyState={emptyState}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<KeyedArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\tkeys={keys}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n\nArrayField.displayName = \"ArrayField\";\n\ninterface DynamicArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\taddLabel: string;\n\tremoveLabel: string;\n\treadOnly?: boolean;\n\temptyState?: React.ReactNode;\n}\n\nconst DynamicArray: React.FC<DynamicArrayProps> = React.memo((props) => {\n\tconst {\n\t\tname,\n\t\tvalueHeader,\n\t\tkeyHeader,\n\t\taddLabel,\n\t\tremoveLabel,\n\t\treadOnly,\n\t\temptyState,\n\t} = props;\n\n\tconst { control, register } = useFormContext();\n\tconst { fields, append, remove } = useFieldArray({\n\t\tcontrol,\n\t\tname: name as any,\n\t});\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr 50px\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem colSpan={2}>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\n\t\t\t\t{fields.map((item, index) => (\n\t\t\t\t\t<React.Fragment key={item.id}>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.key` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.value` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tcolorPalette=\"red\"\n\t\t\t\t\t\t\taria-label={removeLabel}\n\t\t\t\t\t\t\tonClick={() => remove(index)}\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Trash2 size={16} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t\t{fields.length === 0 && emptyState && (\n\t\t\t\t<Box py={4} textAlign=\"center\">\n\t\t\t\t\t{emptyState}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t\t<ButtonGroup>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonClick={() => append({ key: \"\", value: \"\" })}\n\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t>\n\t\t\t\t\t<Plus size={16} />\n\t\t\t\t\t{addLabel}\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup>\n\t\t</Stack>\n\t);\n});\n\nDynamicArray.displayName = \"DynamicArray\";\n\ninterface KeyedArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\tkeys: Array<{ key: string; value: string }>;\n\treadOnly?: boolean;\n}\n\nconst KeyedArray: React.FC<KeyedArrayProps> = React.memo((props) => {\n\tconst { name, valueHeader, keyHeader, keys, readOnly } = props;\n\tconst { register } = useFormContext();\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t{keys.map((keyItem) => (\n\t\t\t\t\t<React.Fragment key={keyItem.key}>\n\t\t\t\t\t\t<Text py={2}>{keyItem.value ?? keyItem.key}</Text>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${keyItem.key}` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n});\n\nKeyedArray.displayName = \"KeyedArray\";\n","import { Checkbox } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport type { FormFieldProps } from \"./form-field\";\nimport { FormField } from \"./form-field\";\n\nexport interface CheckboxFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** When provided, the field is treated as an array of checked values. */\n\tvalue?: string | number;\n\t/** Content to display after the checkbox. */\n\tchildren?: React.ReactNode;\n}\n\nexport function CheckboxField<T extends FieldValues>({\n\t...props\n}: CheckboxFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tvalue,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\thelperText,\n\t\tchildren,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\thelperText={helperText}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => {\n\t\t\t\t// Array mode: field.value is an array, value prop identifies the item\n\t\t\t\tconst isArrayMode = value !== undefined;\n\n\t\t\t\tconst isChecked = isArrayMode\n\t\t\t\t\t? Array.isArray(field.value) && field.value.includes(value)\n\t\t\t\t\t: !!field.value;\n\n\t\t\t\tconst handleCheckedChange = (details: {\n\t\t\t\t\tchecked: boolean | \"indeterminate\";\n\t\t\t\t}) => {\n\t\t\t\t\tif (isArrayMode) {\n\t\t\t\t\t\tconst currentValue = Array.isArray(field.value)\n\t\t\t\t\t\t\t? [...field.value]\n\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\tif (details.checked) {\n\t\t\t\t\t\t\tif (!currentValue.includes(value)) {\n\t\t\t\t\t\t\t\tcurrentValue.push(value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst idx = currentValue.indexOf(value);\n\t\t\t\t\t\t\tif (idx > -1) currentValue.splice(idx, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfield.onChange(currentValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfield.onChange(!!details.checked);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst uniqueId = isArrayMode ? `${name}-${String(value)}` : name;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Checkbox.Root\n\t\t\t\t\t\tid={uniqueId}\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tvalue={isArrayMode ? String(value) : undefined}\n\t\t\t\t\t\tchecked={isChecked}\n\t\t\t\t\t\tonCheckedChange={handleCheckedChange}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Checkbox.HiddenInput />\n\t\t\t\t\t\t<Checkbox.Control>\n\t\t\t\t\t\t\t<Checkbox.Indicator />\n\t\t\t\t\t\t</Checkbox.Control>\n\t\t\t\t\t\t{(label || children) && <Checkbox.Label>{children}</Checkbox.Label>}\n\t\t\t\t\t</Checkbox.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n(CheckboxField as { displayName?: string }).displayName = \"CheckboxField\";\n","import type React from \"react\";\nimport { useCallback } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @monaco-editor/react is an optional peer dependency\ntype MonacoEditorProps = {\n\tvalue?: string;\n\tlanguage?: string;\n\tonChange?: (value: string | undefined) => void;\n\tonMount?: (editor: any, monaco: any) => void;\n\theight?: string;\n\toptions?: Record<string, any>;\n};\n\nexport interface CodeFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tlanguage?: string;\n\tplaceholder?: string;\n\theight?: string;\n\tindentWithTab?: boolean;\n\t/** The Monaco Editor component. Pass it to avoid hard dependency on @monaco-editor/react. */\n\tEditor?: React.ComponentType<MonacoEditorProps>;\n}\n\nexport function CodeField<T extends FieldValues>({\n\tref,\n\t...props\n}: CodeFieldProps<T> & { ref?: React.Ref<any> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tlanguage = \"typescript\",\n\t\theight = \"400px\",\n\t\tindentWithTab = true,\n\t\treadOnly,\n\t\tEditor,\n\t\t...rest\n\t} = props;\n\n\tconst onMount = useCallback(\n\t\t(editorInstance: any, _monaco: any) => {\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(editorInstance);\n\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t(ref as React.MutableRefObject<any>).current = editorInstance;\n\t\t\t}\n\t\t\teditorInstance.updateOptions?.({\n\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t});\n\t\t},\n\t\t[ref, indentWithTab],\n\t);\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) =>\n\t\t\t\tEditor ? (\n\t\t\t\t\t<Editor\n\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\tonMount={onMount}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\toptions={{\n\t\t\t\t\t\t\treadOnly,\n\t\t\t\t\t\t\twordWrap: \"on\",\n\t\t\t\t\t\t\tminimap: { enabled: false },\n\t\t\t\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontFamily: \"monospace\",\n\t\t\t\t\t\t\tfontSize: \"0.875rem\",\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: height,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t}\n\t\t</FormField>\n\t);\n}\n(CodeField as { displayName?: string }).displayName = \"CodeField\";\n","import { type ButtonProps, IconButton, Square } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tPopover,\n\tPopoverBody,\n\tPopoverContent,\n\tPopoverTrigger,\n} from \"../primitives/popover\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-colorful is an optional peer dependency\ntype HexColorPickerProps = {\n\tcolor?: string;\n\tonChange?: (color: string) => void;\n};\n\nexport interface ColorPickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tsize?: ButtonProps[\"size\"];\n\t/** The HexColorPicker component from react-colorful. Pass it to avoid hard dependency. */\n\tColorPicker?: React.ComponentType<HexColorPickerProps>;\n}\n\nexport function ColorPickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: ColorPickerFieldProps<T> & { ref?: React.Ref<HTMLButtonElement> }) {\n\tconst { name, label, size = \"md\", readOnly, ColorPicker, ...rest } = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => (\n\t\t\t\t<Popover>\n\t\t\t\t\t<PopoverTrigger asChild>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\tw=\"fit-content\"\n\t\t\t\t\t\t\tborderWidth=\"1px\"\n\t\t\t\t\t\t\trounded=\"md\"\n\t\t\t\t\t\t\tp={1}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t\taria-label={`Color: ${field.value || \"none\"}`}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Square rounded=\"sm\" bg={field.value} size={6} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</PopoverTrigger>\n\t\t\t\t\t<PopoverContent width=\"auto\" showArrow>\n\t\t\t\t\t\t<PopoverBody>\n\t\t\t\t\t\t\t{ColorPicker ? (\n\t\t\t\t\t\t\t\t<ColorPicker\n\t\t\t\t\t\t\t\t\tcolor={field.value}\n\t\t\t\t\t\t\t\t\tonChange={(color) => field.onChange(color)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\tvalue={field.value || \"#000000\"}\n\t\t\t\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: 200,\n\t\t\t\t\t\t\t\t\t\theight: 200,\n\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</PopoverBody>\n\t\t\t\t\t</PopoverContent>\n\t\t\t\t</Popover>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(ColorPickerField as { displayName?: string }).displayName = \"ColorPickerField\";\n","import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport { HStack } from \"../primitives/layout\";\n\nexport interface ControlledFormFieldProps {\n\tname: string;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\terrorMessage?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\tchildren: React.ReactNode;\n}\n\nexport const ControlledFormField: React.FC<ControlledFormFieldProps> = ({\n\tname,\n\tlabel,\n\thelperText,\n\terrorMessage,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tchildren,\n}) => {\n\tconst uid = useId();\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Field.Root\n\t\t\tinvalid={!!errorMessage}\n\t\t\trequired={required}\n\t\t\tdisabled={disabled}\n\t\t\treadOnly={readOnly}\n\t\t>\n\t\t\t{label &&\n\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t<HStack>\n\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t</HStack>\n\t\t\t\t) : (\n\t\t\t\t\tlabel\n\t\t\t\t))}\n\t\t\t{/* aria-describedby must be set manually by the consumer since children is ReactNode, not a render function. */}\n\t\t\t{children}\n\t\t\t{helperText &&\n\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t) : (\n\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t))}\n\t\t\t{errorMessage && (\n\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t{errorMessage}\n\t\t\t\t</Field.ErrorText>\n\t\t\t)}\n\t\t</Field.Root>\n\t);\n};\nControlledFormField.displayName = \"ControlledFormField\";\n","import { Input } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface DatePickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Minimum date in YYYY-MM-DD format */\n\tmin?: string;\n\t/** Maximum date in YYYY-MM-DD format */\n\tmax?: string;\n\t/** Input type: \"date\", \"datetime-local\", or \"time\" */\n\ttype?: \"date\" | \"datetime-local\" | \"time\";\n}\n\nexport function DatePickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: DatePickerFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\ttype = \"date\",\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Input\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tid={name}\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tref={ref}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(DatePickerField as { displayName?: string }).displayName = \"DatePickerField\";\n","import { useFormContext } from \"react-hook-form\";\nimport { Box, HStack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\n\nexport interface DirtyCounterProps {\n\t/**\n\t * Label template. The literal `{count}` is replaced with the dirty\n\t * field count. @default \"{count} ungespeicherte Änderungen\"\n\t */\n\tlabel?: string;\n\t/** Render nothing when no fields are dirty. @default true */\n\thideWhenClean?: boolean;\n}\n\nexport function DirtyCounter({\n\tlabel = \"{count} ungespeicherte Änderungen\",\n\thideWhenClean = true,\n}: DirtyCounterProps) {\n\tconst ctx = useFormContext();\n\tconst dirty = ctx\n\t\t? (ctx.formState.dirtyFields as Record<string, unknown>)\n\t\t: {};\n\tconst count = Object.keys(dirty).length;\n\tif (count === 0 && hideWhenClean) return null;\n\treturn (\n\t\t<HStack gap=\"2\" fontSize=\"sm\" color=\"yellow.700\">\n\t\t\t<Box\n\t\t\t\twidth=\"6px\"\n\t\t\t\theight=\"6px\"\n\t\t\t\tborderRadius=\"full\"\n\t\t\t\tbg=\"yellow.500\"\n\t\t\t\taria-hidden\n\t\t\t/>\n\t\t\t<Text>{label.replace(\"{count}\", String(count))}</Text>\n\t\t</HStack>\n\t);\n}\nDirtyCounter.displayName = \"DirtyCounter\";\n","import type React from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { useBlocker } from \"react-router-dom\";\nimport { LeavePageConfirmation } from \"../primitives/leave-page-confirmation\";\n\nexport interface DirtyFormGuardProps {\n\t/** Dialog title. @default \"You have unsaved changes\" */\n\ttitle?: string;\n\t/** Dialog message body. @default \"Are you sure you want to leave this page? You have unsaved changes.\" */\n\tmessage?: string;\n\t/** Label for the confirm/leave button. @default \"Leave\" */\n\tconfirmLabel?: string;\n\t/** Label for the cancel/stay button. @default \"Stay\" */\n\tcancelLabel?: string;\n}\n\nexport const DirtyFormGuard: React.FC<DirtyFormGuardProps> = ({\n\ttitle,\n\tmessage,\n\tconfirmLabel,\n\tcancelLabel,\n}) => {\n\tconst { formState } = useFormContext();\n\tconst blocker = useBlocker(formState.isDirty);\n\n\treturn (\n\t\t<LeavePageConfirmation\n\t\t\tblocked={blocker.state === \"blocked\"}\n\t\t\tonConfirmLeave={() => blocker.proceed?.()}\n\t\t\tonCancelLeave={() => blocker.reset?.()}\n\t\t\ttitle={title}\n\t\t\tmessage={message}\n\t\t\tconfirmLabel={confirmLabel}\n\t\t\tcancelLabel={cancelLabel}\n\t\t/>\n\t);\n};\nDirtyFormGuard.displayName = \"DirtyFormGuard\";\n","import { Button } from \"@chakra-ui/react\";\nimport { Upload } from \"lucide-react\";\nimport type React from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Box, Flex } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-dropzone is an optional peer dependency\ntype DropzoneOptions = {\n\tnoClick?: boolean;\n\tmultiple?: boolean;\n\tdisabled?: boolean;\n\taccept?: Record<string, string[]>;\n\tonDrop?: (files: File[]) => void;\n};\n\ntype UseDropzoneReturn = {\n\tgetRootProps: () => Record<string, any>;\n\tgetInputProps: () => Record<string, any>;\n\tisDragActive: boolean;\n\topen: () => void;\n};\n\nexport interface FileFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Accept configuration for file types, e.g. { \"image/*\": [\".png\", \".jpg\"] } */\n\taccept?: Record<string, string[]>;\n\t/** Allow multiple file selection. @default false */\n\tmultiple?: boolean;\n\t/** Text shown when dragging files over. @default \"Release to upload\" */\n\tdragActiveText?: string;\n\t/** Text shown below the file preview. @default \"Drag & drop a file to upload\" */\n\tdropHintText?: string;\n\t/** Label for the upload button. @default \"Choose File\" */\n\tbuttonLabel?: string;\n\t/** The useDropzone hook from react-dropzone. Pass it to avoid hard dependency. */\n\tuseDropzone?: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nexport function FileField<T extends FieldValues>(props: FileFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\taccept,\n\t\tmultiple = false,\n\t\tdisabled,\n\t\tdragActiveText = \"Release to upload\",\n\t\tdropHintText = \"Drag & drop a file to upload\",\n\t\tbuttonLabel = \"Choose File\",\n\t\tuseDropzone,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} disabled={disabled} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (useDropzone) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<DropzoneContent\n\t\t\t\t\t\t\tfield={field}\n\t\t\t\t\t\t\taccept={accept}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tdragActiveText={dragActiveText}\n\t\t\t\t\t\t\tdropHintText={dropHintText}\n\t\t\t\t\t\t\tbuttonLabel={buttonLabel}\n\t\t\t\t\t\t\tuseDropzone={useDropzone}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: native file input\n\t\t\t\treturn (\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\taccept={\n\t\t\t\t\t\t\t\taccept ? Object.values(accept).flat().join(\",\") : undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tconst files = e.target.files;\n\t\t\t\t\t\t\t\tif (!files) return;\n\t\t\t\t\t\t\t\tif (multiple) {\n\t\t\t\t\t\t\t\t\tfield.onChange(Array.from(files));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield.onChange(files[0] || null);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{field.value && (\n\t\t\t\t\t\t\t<Text mt={2} fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t\t\t{(field.value as File)?.name ?? \"File selected\"}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Box>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n\nFileField.displayName = \"FileField\";\n\ninterface DropzoneContentProps {\n\tfield: {\n\t\tvalue: any;\n\t\tonChange: (...event: any[]) => void;\n\t\tonBlur: () => void;\n\t\tref: React.Ref<any>;\n\t\tname: string;\n\t};\n\taccept?: Record<string, string[]>;\n\tmultiple: boolean;\n\tdisabled?: boolean;\n\tdragActiveText: string;\n\tdropHintText: string;\n\tbuttonLabel: string;\n\tuseDropzone: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nconst DropzoneContent: React.FC<DropzoneContentProps> = ({\n\tfield,\n\taccept,\n\tmultiple,\n\tdisabled,\n\tdragActiveText,\n\tdropHintText,\n\tbuttonLabel,\n\tuseDropzone,\n}) => {\n\tconst handleDrop = useCallback(\n\t\t(files: File[]) => {\n\t\t\tif (multiple) {\n\t\t\t\tfield.onChange(files);\n\t\t\t} else {\n\t\t\t\tconst file = files[0];\n\t\t\t\tif (file) {\n\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\tObject.assign(file, {\n\t\t\t\t\t\t\tpreview: URL.createObjectURL(file),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[field, multiple],\n\t);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (field.value?.preview) {\n\t\t\t\tURL.revokeObjectURL(field.value.preview);\n\t\t\t}\n\t\t};\n\t}, [field.value]);\n\n\tconst { getRootProps, getInputProps, isDragActive, open } = useDropzone({\n\t\tnoClick: true,\n\t\tmultiple,\n\t\tdisabled,\n\t\taccept,\n\t\tonDrop: handleDrop,\n\t});\n\n\treturn (\n\t\t<Box {...getRootProps()}>\n\t\t\t<Box display=\"none\" {...getInputProps()} asChild>\n\t\t\t\t<input />\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tbgColor=\"bg.muted\"\n\t\t\t\tp={4}\n\t\t\t\trounded=\"md\"\n\t\t\t\toverflow=\"hidden\"\n\t\t\t\tposition=\"relative\"\n\t\t\t\ttextAlign=\"center\"\n\t\t\t>\n\t\t\t\t{isDragActive && (\n\t\t\t\t\t<Flex\n\t\t\t\t\t\tpointerEvents=\"none\"\n\t\t\t\t\t\ttop=\"0\"\n\t\t\t\t\t\tinsetInlineStart=\"0\"\n\t\t\t\t\t\tposition=\"absolute\"\n\t\t\t\t\t\tbackgroundColor=\"blackAlpha.400\"\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\tzIndex={1}\n\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\tjustifyContent=\"center\"\n\t\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\t\tcolor=\"white\"\n\t\t\t\t\t\tgap=\"3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Upload size={48} />\n\t\t\t\t\t\t<Text fontSize=\"lg\" fontWeight=\"bold\">\n\t\t\t\t\t\t\t{dragActiveText}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Flex>\n\t\t\t\t)}\n\t\t\t\t{field.value?.name && (\n\t\t\t\t\t<Text fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t{field.value.name}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t<Text color=\"fg.muted\" fontSize=\"xs\" mt={2}>\n\t\t\t\t\t{dropHintText}\n\t\t\t\t</Text>\n\t\t\t\t<Button mt={2} size=\"sm\" variant=\"outline\" onClick={open}>\n\t\t\t\t\t<Upload size={14} />\n\t\t\t\t\t{buttonLabel}\n\t\t\t\t</Button>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n};\n","import {\n\tButtonGroup,\n\tEditable,\n\tIconButton,\n\tuseEditableContext,\n} from \"@chakra-ui/react\";\nimport { Pencil } from \"lucide-react\";\nimport type React from \"react\";\nimport { useRef } from \"react\";\n\nexport interface InlineEditProps {\n\tvalue?: string;\n\tonSubmit?: (nextValue: string) => void;\n\tonChange?: (nextValue: string) => void;\n\tonCancel?: (previousValue: string) => void;\n\t/** @default \"input\" */\n\tvariant?: \"input\" | \"textarea\";\n\tplaceholder?: string;\n\t/** @default \"md\" */\n\tfontSize?: string;\n\tfontWeight?: string;\n\tmaxW?: string;\n\tdisabled?: boolean;\n\t/** When false, submitting an empty value reverts to the previous value. @default false */\n\tallowEmpty?: boolean;\n\t/** Number of rows used to calculate minH for textarea variant. @default 3 */\n\trows?: number;\n\t/** Aria label for the edit button. @default \"Edit\" */\n\teditLabel?: string;\n}\n\ninterface CancelRefCaptureProps {\n\tcancelRef: React.MutableRefObject<(() => void) | null>;\n}\n\nconst CancelRefCapture: React.FC<CancelRefCaptureProps> = ({ cancelRef }) => {\n\tconst { cancel } = useEditableContext();\n\tcancelRef.current = cancel;\n\treturn null;\n};\n\nconst EditControls: React.FC<{ editLabel: string }> = ({ editLabel }) => {\n\tconst { editing } = useEditableContext();\n\n\tif (editing) return null;\n\n\treturn (\n\t\t<ButtonGroup>\n\t\t\t<Editable.EditTrigger asChild>\n\t\t\t\t<IconButton\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tmarginInlineStart={2}\n\t\t\t\t\taria-label={editLabel}\n\t\t\t\t>\n\t\t\t\t\t<Pencil size={16} />\n\t\t\t\t</IconButton>\n\t\t\t</Editable.EditTrigger>\n\t\t</ButtonGroup>\n\t);\n};\n\nexport const InlineEdit: React.FC<InlineEditProps> = ({\n\tvalue,\n\tonSubmit,\n\tonChange,\n\tonCancel,\n\tvariant = \"input\",\n\tplaceholder,\n\tfontSize = \"md\",\n\tfontWeight,\n\tmaxW,\n\tdisabled,\n\tallowEmpty = false,\n\trows = 3,\n\teditLabel = \"Edit\",\n}) => {\n\tconst cancelRef = useRef<(() => void) | null>(null);\n\n\tconst handleSubmit = (details: { value: string }) => {\n\t\tconst trimmed = details.value.trim();\n\t\tif (!allowEmpty && trimmed === \"\") {\n\t\t\tcancelRef.current?.();\n\t\t\treturn;\n\t\t}\n\t\tonSubmit?.(trimmed);\n\t};\n\n\treturn (\n\t\t<Editable.Root\n\t\t\tfontSize={fontSize}\n\t\t\tfontWeight={fontWeight}\n\t\t\tmaxW={maxW}\n\t\t\tvalue={String(value ?? \"\")}\n\t\t\tonValueChange={(d) => onChange?.(d.value)}\n\t\t\tonValueRevert={(d) => onCancel?.(d.value)}\n\t\t\tonValueCommit={handleSubmit}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t>\n\t\t\t<CancelRefCapture cancelRef={cancelRef} />\n\t\t\t<Editable.Preview />\n\t\t\t{variant === \"textarea\" ? (\n\t\t\t\t<Editable.Textarea minH={`${rows * 1.5}em`} />\n\t\t\t) : (\n\t\t\t\t<Editable.Input />\n\t\t\t)}\n\t\t\t<EditControls editLabel={editLabel} />\n\t\t</Editable.Root>\n\t);\n};\nInlineEdit.displayName = \"InlineEdit\";\n","import type { InputProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport TextInput from \"../atoms/text-input/text-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface InputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttype?: InputProps[\"type\"];\n\tappend?: string | React.ReactElement;\n\tprepend?: string | React.ReactElement;\n\tinputProps?: InputProps;\n}\n\nexport function InputField<T extends FieldValues>({\n\tref,\n\t...props\n}: InputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttype,\n\t\tappend,\n\t\tprepend,\n\t\tinputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<TextInput\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tappend={append}\n\t\t\t\t\tprepend={prepend}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...inputProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(InputField as { displayName?: string }).displayName = \"InputField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @uiw/react-md-editor is an optional peer dependency\ntype MDEditorProps = {\n\tvalue?: string;\n\tonChange?: (value?: string) => void;\n\tminHeight?: number;\n\tmaxHeight?: number;\n\tvisibleDragbar?: boolean;\n};\n\ntype MDEditorComponent = React.ComponentType<MDEditorProps> & {\n\tMarkdown?: React.ComponentType<{ source?: string }>;\n};\n\nexport interface MarkdownFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** The MDEditor component from @uiw/react-md-editor. Pass it to avoid hard dependency. */\n\tMDEditor?: MDEditorComponent;\n\tminHeight?: number;\n\tmaxHeight?: number;\n}\n\nexport function MarkdownField<T extends FieldValues>(\n\tprops: MarkdownFieldProps<T>,\n) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\treadOnly,\n\t\tMDEditor,\n\t\tminHeight = 200,\n\t\tmaxHeight = 600,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (MDEditor) {\n\t\t\t\t\tif (readOnly && MDEditor.Markdown) {\n\t\t\t\t\t\treturn <MDEditor.Markdown source={field.value} />;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<MDEditor\n\t\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\t\tminHeight={minHeight}\n\t\t\t\t\t\t\tmaxHeight={maxHeight}\n\t\t\t\t\t\t\tvisibleDragbar\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: plain textarea\n\t\t\t\treturn (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: `${minHeight}px`,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n(MarkdownField as { displayName?: string }).displayName = \"MarkdownField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tNumberInputField as NumberInputInput,\n\ttype NumberInputProps,\n\tNumberInputRoot,\n} from \"../primitives/number-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface NumberInputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tmin?: number;\n\tmax?: number;\n\tstep?: number;\n\tshowStepper?: boolean;\n\tnumberInputProps?: NumberInputProps;\n}\n\nexport function NumberInputField<T extends FieldValues>({\n\tref,\n\t...props\n}: NumberInputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\tstep,\n\t\tshowStepper = true,\n\t\tnumberInputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<NumberInputRoot\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tstep={step}\n\t\t\t\t\tvalue={String(field.value ?? 0)}\n\t\t\t\t\tonValueChange={(details) => {\n\t\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\t\tdetails.value === \"\" ? 0 : Number.parseFloat(details.value),\n\t\t\t\t\t\t);\n\t\t\t\t\t}}\n\t\t\t\t\tid={name}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tshowStepper={showStepper && !readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\t{...numberInputProps}\n\t\t\t\t>\n\t\t\t\t\t<NumberInputInput\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t/>\n\t\t\t\t</NumberInputRoot>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(NumberInputField as { displayName?: string }).displayName = \"NumberInputField\";\n","import type { RadioGroupRootProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Stack, type StackProps } from \"../primitives/layout\";\nimport { Radio, RadioGroup } from \"../primitives/radio\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface RadioOption {\n\tlabel: React.ReactNode;\n\tvalue: string;\n}\n\nexport interface RadioGroupFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\toptions: RadioOption[];\n\tradioGroupProps?: RadioGroupRootProps;\n\tstackProps?: StackProps;\n}\n\nexport function RadioGroupField<T extends FieldValues>(\n\tprops: RadioGroupFieldProps<T>,\n) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\toptions,\n\t\tshowDirtyState,\n\t\tradioGroupProps,\n\t\tstackProps,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<RadioGroup\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tonValueChange={(e) => field.onChange(e.value)}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t{...radioGroupProps}\n\t\t\t\t>\n\t\t\t\t\t<Stack direction=\"row\" {...stackProps}>\n\t\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t\t<Radio key={option.value} value={option.value}>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</Radio>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t</RadioGroup>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(RadioGroupField as { displayName?: string }).displayName = \"RadioGroupField\";\n","import type { NativeSelectFieldProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { NativeSelect } from \"../primitives/native-select\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SelectFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\tselectProps?: NativeSelectFieldProps;\n\tchildren: React.ReactNode;\n}\n\nexport function SelectField<T extends FieldValues>({\n\tref,\n\t...props\n}: SelectFieldProps<T> & { ref?: React.Ref<HTMLSelectElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\tselectProps,\n\t\tchildren,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<NativeSelect\n\t\t\t\t\tdisabled={readOnly || disabled}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\t{...selectProps}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</NativeSelect>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SelectField as { displayName?: string }).displayName = \"SelectField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Switch, type SwitchProps } from \"../primitives/switch\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SwitchFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tswitchProps?: SwitchProps;\n}\n\nexport function SwitchField<T extends FieldValues>({\n\tref,\n\t...props\n}: SwitchFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\tswitchProps,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Switch\n\t\t\t\t\tid={name}\n\t\t\t\t\tname={field.name}\n\t\t\t\t\tchecked={field.value || false}\n\t\t\t\t\tonCheckedChange={(details) => field.onChange(!!details.checked)}\n\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...switchProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SwitchField as { displayName?: string }).displayName = \"SwitchField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Textarea, type TextareaProps } from \"../primitives/textarea\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface TextareaFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttextareaProps?: TextareaProps;\n}\n\nexport function TextareaField<T extends FieldValues>({\n\tref,\n\t...props\n}: TextareaFieldProps<T> & { ref?: React.Ref<HTMLTextAreaElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttextareaProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<Textarea\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...textareaProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(TextareaField as { displayName?: string }).displayName = \"TextareaField\";\n","import { useFormContext } from \"react-hook-form\";\n\nexport interface UseFieldDirtyOptions {\n\t/** Set to false to never report dirty (opt-out per field). */\n\tshowDirtyState?: boolean;\n}\n\n/**\n * useFieldDirty returns true when the field at `name` is dirty (changed\n * from its react-hook-form default) AND visual marking isn't suppressed.\n * Safe to call outside a FormProvider — returns false in that case.\n */\nexport function useFieldDirty(\n\tname: string,\n\topts: UseFieldDirtyOptions = {},\n): boolean {\n\t// useFormContext must be called unconditionally before any branch\n\t// (rules of hooks). Apply showDirtyState gate after.\n\tconst ctx = useFormContext();\n\tconst { showDirtyState = true } = opts;\n\tif (!showDirtyState || !ctx) return false;\n\tconst dirty = ctx.formState.dirtyFields as Record<string, unknown>;\n\treturn Boolean(dirty[name]);\n}\n"]}
|
|
@@ -25,13 +25,14 @@ declare function usePageRail(content: ReactNode): void;
|
|
|
25
25
|
/**
|
|
26
26
|
* Register page-header content (typically a <PageHeader>) from any descendant
|
|
27
27
|
* of `<AppShell>`. The content is rendered by AppShell in grid row 1, spanning
|
|
28
|
-
* the main column and the rail column (when present)
|
|
29
|
-
* crosses both columns and the rail starts below it.
|
|
28
|
+
* the main column and the rail column (when present).
|
|
30
29
|
*
|
|
31
|
-
* Pass `
|
|
32
|
-
* called outside an AppShell.
|
|
30
|
+
* Pass `options.sticky === false` to opt out of the default sticky behaviour
|
|
31
|
+
* for the specific page. The hook is a no-op when called outside an AppShell.
|
|
33
32
|
*/
|
|
34
|
-
declare function usePageHeader(content: ReactNode
|
|
33
|
+
declare function usePageHeader(content: ReactNode, options?: {
|
|
34
|
+
sticky?: boolean;
|
|
35
|
+
}): void;
|
|
35
36
|
interface AppShellProps {
|
|
36
37
|
/**
|
|
37
38
|
* Sidebar element — the navigation column. Required. Typically an instance
|
|
@@ -128,8 +129,13 @@ interface DetailPageTemplateProps extends Pick<PageHeaderProps, "breadcrumbs" |
|
|
|
128
129
|
/** Optional tab strip rendered as the third row of the page header band. */
|
|
129
130
|
tabs?: ReactNode;
|
|
130
131
|
children?: ReactNode;
|
|
132
|
+
/**
|
|
133
|
+
* Pin the page-header band to the top of the viewport while the body
|
|
134
|
+
* scrolls. @default true
|
|
135
|
+
*/
|
|
136
|
+
stickyHeader?: boolean;
|
|
131
137
|
}
|
|
132
|
-
declare function DetailPageTemplate({ breadcrumbs, title, subtitle, eyebrow, actions, avatar, badges, meta, tabs, children, }: DetailPageTemplateProps): react_jsx_runtime.JSX.Element;
|
|
138
|
+
declare function DetailPageTemplate({ breadcrumbs, title, subtitle, eyebrow, actions, avatar, badges, meta, tabs, children, stickyHeader, }: DetailPageTemplateProps): react_jsx_runtime.JSX.Element;
|
|
133
139
|
declare namespace DetailPageTemplate {
|
|
134
140
|
var displayName: string;
|
|
135
141
|
}
|
|
@@ -192,6 +198,11 @@ interface IndexPageTemplateProps extends Pick<PageHeaderProps, "breadcrumbs" | "
|
|
|
192
198
|
* `children` if you need it.
|
|
193
199
|
*/
|
|
194
200
|
children: ReactNode;
|
|
201
|
+
/**
|
|
202
|
+
* Pin the page-header band to the top of the viewport while the body
|
|
203
|
+
* scrolls. @default true
|
|
204
|
+
*/
|
|
205
|
+
stickyHeader?: boolean;
|
|
195
206
|
}
|
|
196
207
|
/**
|
|
197
208
|
* Canonical list-page layout. Renders PageHeader (with optional tabs inside) →
|
|
@@ -201,7 +212,7 @@ interface IndexPageTemplateProps extends Pick<PageHeaderProps, "breadcrumbs" | "
|
|
|
201
212
|
* registered slot via `usePageActions`. This lets a tab-pane component deep
|
|
202
213
|
* inside `children` register its own actions without prop-drilling.
|
|
203
214
|
*/
|
|
204
|
-
declare function IndexPageTemplate({ breadcrumbs, title, subtitle, eyebrow, actions, tabs, toolbar, children, }: IndexPageTemplateProps): react_jsx_runtime.JSX.Element;
|
|
215
|
+
declare function IndexPageTemplate({ breadcrumbs, title, subtitle, eyebrow, actions, tabs, toolbar, children, stickyHeader, }: IndexPageTemplateProps): react_jsx_runtime.JSX.Element;
|
|
205
216
|
declare namespace IndexPageTemplate {
|
|
206
217
|
var displayName: string;
|
|
207
218
|
}
|
|
@@ -303,8 +314,13 @@ interface SettingsPageTemplateProps extends Pick<PageHeaderProps, "breadcrumbs"
|
|
|
303
314
|
* render flush.
|
|
304
315
|
*/
|
|
305
316
|
bodyPadding?: "default" | "none";
|
|
317
|
+
/**
|
|
318
|
+
* Pin the page-header band to the top of the viewport while the body
|
|
319
|
+
* scrolls. @default true
|
|
320
|
+
*/
|
|
321
|
+
stickyHeader?: boolean;
|
|
306
322
|
}
|
|
307
|
-
declare function SettingsPageTemplate({ breadcrumbs, title, subtitle, eyebrow, actions, avatar, badges, meta, tabs, children, maxBodyWidth, bodyPadding, }: SettingsPageTemplateProps): react_jsx_runtime.JSX.Element;
|
|
323
|
+
declare function SettingsPageTemplate({ breadcrumbs, title, subtitle, eyebrow, actions, avatar, badges, meta, tabs, children, maxBodyWidth, bodyPadding, stickyHeader, }: SettingsPageTemplateProps): react_jsx_runtime.JSX.Element;
|
|
308
324
|
declare namespace SettingsPageTemplate {
|
|
309
325
|
var displayName: string;
|
|
310
326
|
}
|
package/dist/templates/index.js
CHANGED
|
@@ -24,9 +24,9 @@ function createSlotStore() {
|
|
|
24
24
|
get(slot) {
|
|
25
25
|
return values[slot];
|
|
26
26
|
},
|
|
27
|
-
set(slot,
|
|
28
|
-
if (values[slot] ===
|
|
29
|
-
values[slot] =
|
|
27
|
+
set(slot, value) {
|
|
28
|
+
if (values[slot] === value) return;
|
|
29
|
+
values[slot] = value;
|
|
30
30
|
notify(slot);
|
|
31
31
|
},
|
|
32
32
|
clear(slot) {
|
|
@@ -90,10 +90,12 @@ function usePageRail(content) {
|
|
|
90
90
|
store.set("rail", content);
|
|
91
91
|
}, [store, content]);
|
|
92
92
|
}
|
|
93
|
-
function usePageHeader(content) {
|
|
93
|
+
function usePageHeader(content, options) {
|
|
94
94
|
const store = useContext(SlotStoreContext);
|
|
95
|
-
const
|
|
96
|
-
|
|
95
|
+
const sticky = options?.sticky ?? true;
|
|
96
|
+
const value = { node: content, sticky };
|
|
97
|
+
const latest = useRef(value);
|
|
98
|
+
latest.current = value;
|
|
97
99
|
useEffect(() => {
|
|
98
100
|
if (!store) return;
|
|
99
101
|
store.set("header", latest.current);
|
|
@@ -103,8 +105,8 @@ function usePageHeader(content) {
|
|
|
103
105
|
}, [store]);
|
|
104
106
|
useEffect(() => {
|
|
105
107
|
if (!store) return;
|
|
106
|
-
store.set("header", content);
|
|
107
|
-
}, [store, content]);
|
|
108
|
+
store.set("header", { node: content, sticky });
|
|
109
|
+
}, [store, content, sticky]);
|
|
108
110
|
}
|
|
109
111
|
function useRegisteredPageActions() {
|
|
110
112
|
return useSlotValue("actions");
|
|
@@ -116,7 +118,9 @@ function AppShell({ sidebar, rail, children }) {
|
|
|
116
118
|
AppShell.displayName = "AppShell";
|
|
117
119
|
function AppShellInner({ sidebar, rail, children }) {
|
|
118
120
|
const railNode = useSlotValue("rail");
|
|
119
|
-
const
|
|
121
|
+
const headerSlot = useSlotValue("header");
|
|
122
|
+
const headerNode = headerSlot?.node ?? null;
|
|
123
|
+
const headerSticky = headerSlot?.sticky ?? true;
|
|
120
124
|
const renderedRail = railNode ?? rail;
|
|
121
125
|
const showRailColumn = renderedRail !== void 0 && renderedRail !== null && renderedRail !== false;
|
|
122
126
|
const showHeaderRow = headerNode !== null && headerNode !== void 0;
|
|
@@ -149,9 +153,13 @@ function AppShellInner({ sidebar, rail, children }) {
|
|
|
149
153
|
Box,
|
|
150
154
|
{
|
|
151
155
|
"data-testid": "app-shell-header",
|
|
156
|
+
"data-sticky-header": headerSticky ? "true" : "false",
|
|
152
157
|
gridColumn: showRailColumn ? "2 / 4" : "2 / 3",
|
|
153
158
|
gridRow: "1",
|
|
154
159
|
minW: "0",
|
|
160
|
+
position: headerSticky ? "sticky" : void 0,
|
|
161
|
+
top: headerSticky ? "0" : void 0,
|
|
162
|
+
zIndex: headerSticky ? "docked" : void 0,
|
|
155
163
|
children: headerNode
|
|
156
164
|
}
|
|
157
165
|
) : null,
|
|
@@ -248,7 +256,8 @@ function DetailPageTemplate({
|
|
|
248
256
|
badges,
|
|
249
257
|
meta,
|
|
250
258
|
tabs,
|
|
251
|
-
children
|
|
259
|
+
children,
|
|
260
|
+
stickyHeader = true
|
|
252
261
|
}) {
|
|
253
262
|
const registered = useRegisteredPageActions();
|
|
254
263
|
const resolvedActions = actions ?? registered;
|
|
@@ -266,7 +275,8 @@ function DetailPageTemplate({
|
|
|
266
275
|
meta,
|
|
267
276
|
tabs
|
|
268
277
|
}
|
|
269
|
-
)
|
|
278
|
+
),
|
|
279
|
+
{ sticky: stickyHeader }
|
|
270
280
|
);
|
|
271
281
|
return /* @__PURE__ */ jsx(
|
|
272
282
|
Flex,
|
|
@@ -351,7 +361,8 @@ function IndexPageTemplate({
|
|
|
351
361
|
actions,
|
|
352
362
|
tabs,
|
|
353
363
|
toolbar,
|
|
354
|
-
children
|
|
364
|
+
children,
|
|
365
|
+
stickyHeader = true
|
|
355
366
|
}) {
|
|
356
367
|
const registered = useRegisteredPageActions();
|
|
357
368
|
const resolvedActions = actions ?? registered;
|
|
@@ -366,7 +377,8 @@ function IndexPageTemplate({
|
|
|
366
377
|
actions: resolvedActions,
|
|
367
378
|
tabs
|
|
368
379
|
}
|
|
369
|
-
)
|
|
380
|
+
),
|
|
381
|
+
{ sticky: stickyHeader }
|
|
370
382
|
);
|
|
371
383
|
return /* @__PURE__ */ jsxs(
|
|
372
384
|
Flex,
|
|
@@ -574,7 +586,8 @@ function SettingsPageTemplate({
|
|
|
574
586
|
tabs,
|
|
575
587
|
children,
|
|
576
588
|
maxBodyWidth = "3xl",
|
|
577
|
-
bodyPadding = "default"
|
|
589
|
+
bodyPadding = "default",
|
|
590
|
+
stickyHeader = true
|
|
578
591
|
}) {
|
|
579
592
|
const registered = useRegisteredPageActions();
|
|
580
593
|
const resolvedActions = actions ?? registered;
|
|
@@ -592,7 +605,8 @@ function SettingsPageTemplate({
|
|
|
592
605
|
meta,
|
|
593
606
|
tabs
|
|
594
607
|
}
|
|
595
|
-
)
|
|
608
|
+
),
|
|
609
|
+
{ sticky: stickyHeader }
|
|
596
610
|
);
|
|
597
611
|
const bodyPx = bodyPadding === "none" ? "0" : "8";
|
|
598
612
|
const bodyPt = bodyPadding === "none" ? "0" : "6";
|