@realiizlabs/admin 0.7.2 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth-ui/index.cjs +56 -0
- package/dist/auth-ui/index.cjs.map +1 -1
- package/dist/auth-ui/index.js +1 -1
- package/dist/chunk-CE2DRQBD.js +98 -0
- package/dist/chunk-CE2DRQBD.js.map +1 -0
- package/dist/{chunk-IS52OXZ2.js → chunk-J6FI73PF.js} +39 -5
- package/dist/chunk-J6FI73PF.js.map +1 -0
- package/dist/forms/index.cjs +37 -2
- package/dist/forms/index.cjs.map +1 -1
- package/dist/forms/index.d.cts +21 -3
- package/dist/forms/index.d.ts +21 -3
- package/dist/forms/index.js +1 -1
- package/dist/forms-ui/index.cjs +770 -39
- package/dist/forms-ui/index.cjs.map +1 -1
- package/dist/forms-ui/index.d.cts +123 -12
- package/dist/forms-ui/index.d.ts +123 -12
- package/dist/forms-ui/index.js +691 -41
- package/dist/forms-ui/index.js.map +1 -1
- package/dist/git/index.cjs +16 -4
- package/dist/git/index.cjs.map +1 -1
- package/dist/git/index.d.cts +25 -2
- package/dist/git/index.d.ts +25 -2
- package/dist/git/index.js +15 -5
- package/dist/git/index.js.map +1 -1
- package/dist/shell/index.cjs +607 -0
- package/dist/shell/index.cjs.map +1 -0
- package/dist/shell/index.d.cts +171 -0
- package/dist/shell/index.d.ts +171 -0
- package/dist/shell/index.js +583 -0
- package/dist/shell/index.js.map +1 -0
- package/dist/{types-DsSMscTh.d.cts → types-DyryuIX1.d.cts} +24 -1
- package/dist/{types-DsSMscTh.d.ts → types-DyryuIX1.d.ts} +24 -1
- package/package.json +6 -1
- package/dist/chunk-4OCBMOEP.js +0 -42
- package/dist/chunk-4OCBMOEP.js.map +0 -1
- package/dist/chunk-IS52OXZ2.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/forms-ui/controls.tsx","../../src/forms-ui/Field.tsx","../../src/forms-ui/issues.ts","../../src/forms-ui/values.ts","../../src/forms-ui/ContentForm.tsx"],"names":["jsx","jsxs"],"mappings":";;;;;AAkBO,SAAS,QAAQ,CAAA,EAAiB;AACvC,EAAA,MAAM,GAAA,GAAM,CAAC,uBAAA,EAAyB,CAAA,CAAE,OAAA,IAAW,gCAAgC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC7G,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,IAAA,EAAM,EAAE,IAAA,CAAK,IAAA;AAAA,IACb,cAAA,EAAgB,EAAE,OAAA,IAAW,MAAA;AAAA,IAC7B,oBAAoB,CAAA,CAAE,OAAA,GAAU,CAAA,EAAG,CAAA,CAAE,EAAE,CAAA,MAAA,CAAA,GAAW,MAAA;AAAA,IAClD,QAAQ,CAAA,CAAE;AAAA,GACZ;AACA,EAAA,MAAM,MAAM,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,GAAW,EAAE,KAAA,GAAQ,EAAA;AAEpD,EAAA,IAAI,CAAA,CAAE,YAAY,SAAA,EAAW;AAC3B,IAAA,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EAAK,WAAA,EAAU,MAAA,EAAO,KAAA,EAAO,EAAE,KAAA,EAAO,eAAA,EAAgB,EAAG,QAAA,EAAA,uBAAA,EAAgB,CAAA;AAAA,EAClG;AAEA,EAAA,IAAI,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,IAAA,CAAK,UAAU,QAAA,EAAU;AAC1C,IAAA,4BACG,QAAA,EAAA,EAAQ,GAAG,MAAA,EAAQ,SAAA,EAAW,KAAK,KAAA,EAAO,GAAA,EAAK,QAAA,EAAU,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EACvF,QAAA,EAAA;AAAA,MAAA,CAAC,EAAE,IAAA,CAAK,QAAA,wBAAa,QAAA,EAAA,EAAO,KAAA,EAAM,IAAG,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,MAAA,CACrC,CAAA,CAAE,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,qBACtB,GAAA,CAAC,QAAA,EAAA,EAAe,KAAA,EAAO,CAAA,EAAI,QAAA,EAAA,CAAA,EAAA,EAAd,CAAgB,CAC9B;AAAA,KAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,QAAQ,CAAA,CAAE,KAAK,KAAA;AAAO,IACpB,KAAK,UAAA;AACH,MAAA,uBACE,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UAAU,GAAG,MAAA;AAAA,UAAQ,SAAA,EAAW,GAAG,GAAG,CAAA,gCAAA,CAAA;AAAA,UAAoC,KAAA,EAAO,GAAA;AAAA,UAChF,WAAA,EAAa,EAAE,IAAA,CAAK,WAAA;AAAA,UAAa,UAAU,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,OAAG;AAAA,IAEpF,KAAK,SAAA;AACH,MAAA,2BACG,OAAA,EAAA,EAAO,GAAG,QAAQ,IAAA,EAAK,UAAA,EAAW,SAAS,CAAA,CAAE,KAAA,KAAU,IAAA,EAAM,QAAA,EAAU,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,EAAG,CAAA;AAAA,IAEjH,KAAK,OAAA;AACH,MAAA,uBACE,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UAAO,GAAG,MAAA;AAAA,UAAQ,IAAA,EAAK,MAAA;AAAA,UAAO,MAAA,EAAO,SAAA;AAAA,UAAU,SAAA,EAAW,GAAA;AAAA,UACzD,QAAA,EAAU,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,EAAE,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,IAAK,IAAI;AAAA;AAAA,OAAG;AAAA,IAEhE,KAAK,MAAA;AACH,MAAA,2BAAQ,OAAA,EAAA,EAAO,GAAG,QAAQ,IAAA,EAAK,MAAA,EAAO,WAAW,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK,QAAA,EAAU,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,CAAA;AAAA,IACjH,KAAK,QAAA;AACH,MAAA,uBACE,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UAAO,GAAG,MAAA;AAAA,UAAQ,IAAA,EAAK,QAAA;AAAA,UAAS,SAAA,EAAU,SAAA;AAAA,UAAU,SAAA,EAAW,GAAA;AAAA,UAAK,KAAA,EAAO,GAAA;AAAA,UAC1E,GAAA,EAAK,CAAA,CAAE,IAAA,CAAK,WAAA,CAAY,GAAA;AAAA,UAAK,GAAA,EAAK,CAAA,CAAE,IAAA,CAAK,WAAA,CAAY,GAAA;AAAA,UACrD,MAAM,CAAA,CAAE,IAAA,CAAK,WAAA,CAAY,MAAA,KAAW,QAAQ,CAAA,GAAI,MAAA;AAAA,UAChD,WAAA,EAAa,EAAE,IAAA,CAAK,WAAA;AAAA,UAAa,UAAU,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,OAAG;AAAA,IAEpF,KAAK,KAAA;AACH,MAAA,uBACE,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UAAO,GAAG,MAAA;AAAA,UAAQ,IAAA,EAAK,KAAA;AAAA,UAAM,SAAA,EAAW,GAAA;AAAA,UAAK,KAAA,EAAO,GAAA;AAAA,UAAK,WAAA,EAAa,CAAA,CAAE,IAAA,CAAK,WAAA,IAAe,UAAA;AAAA,UAC3F,UAAU,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,OAAG;AAAA,IAEnD,KAAK,MAAA;AACH,MAAA,uBACE,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UAAO,GAAG,MAAA;AAAA,UAAQ,IAAA,EAAK,MAAA;AAAA,UAAO,SAAA,EAAW,GAAA;AAAA,UAAK,KAAA,EAAO,GAAA;AAAA,UACpD,WAAA,EAAa,CAAA,CAAE,IAAA,CAAK,WAAA,IAAe,iBAAA;AAAA,UAAmB,UAAU,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,OAAG;AAAA,IAEzG;AACE,MAAA,uBACE,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UAAO,GAAG,MAAA;AAAA,UAAQ,IAAA,EAAK,MAAA;AAAA,UAAO,SAAA,EAAW,GAAA;AAAA,UAAK,KAAA,EAAO,GAAA;AAAA,UAAK,WAAA,EAAa,EAAE,IAAA,CAAK,WAAA;AAAA,UAC7E,SAAA,EAAW,CAAA,CAAE,IAAA,CAAK,WAAA,CAAY,GAAA;AAAA,UAAK,UAAU,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,OAAG;AAAA;AAG1F;AC9DO,SAAS,MAAM,CAAA,EAAe;AACnC,EAAA,MAAM,KAAK,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,IAAI,CAAA,CAAA;AACrC,EAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA;AAClC,EAAA,MAAM,GAAA,GAAM,CAAA,CAAE,IAAA,CAAK,WAAA,CAAY,GAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,OAAO,GAAA,KAAQ,QAAA,KAAa,CAAA,CAAE,KAAK,KAAA,KAAU,MAAA,IAAU,CAAA,CAAE,IAAA,CAAK,KAAA,KAAU,UAAA,CAAA;AAC1F,EAAA,MAAM,MAAM,OAAO,CAAA,CAAE,UAAU,QAAA,GAAW,CAAA,CAAE,MAAM,MAAA,GAAS,CAAA;AAC3D,EAAA,MAAM,OAAA,GAAU,CAAA,CAAE,IAAA,CAAK,KAAA,KAAU,SAAA;AAEjC,EAAA,MAAM,OAAA,mBACJA,GAAAA,CAAC,OAAA,EAAA,EAAQ,IAAQ,IAAA,EAAM,CAAA,CAAE,MAAM,KAAA,EAAO,CAAA,CAAE,OAAO,OAAA,EAAkB,OAAA,EAAS,EAAE,OAAA,EAAS,QAAA,EAAU,EAAE,QAAA,EAAU,MAAA,EAAQ,EAAE,MAAA,EAAQ,CAAA;AAG/H,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,yCAAA,EAA4C,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,YAAA,EAAY,CAAA,CAAE,IAAA,CAAK,IAAA,EAC5F,QAAA,EAAA;AAAA,IAAA,OAAA,mBACCA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,qBAAA,EAAsB,SAAS,EAAA,EAC7C,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,sBACDA,KAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,IAAA,CAAK,KAAA;AAAA,QAAO,CAAA,CAAE,IAAA,CAAK,QAAA,oBAAYD,GAAAA,CAAC,UAAK,SAAA,EAAU,wBAAA,EAAyB,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,GAAA,EAAC;AAAA,OAAA,EAAQ;AAAA,KAAA,EAC/G,CAAA,mBAEAC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,qBAAA,EAAsB,SAAS,EAAA,EAC7C,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,IAAA,CAAK,KAAA;AAAA,QACP,CAAA,CAAE,IAAA,CAAK,QAAA,oBAAYD,GAAAA,CAAC,UAAK,SAAA,EAAU,wBAAA,EAAyB,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,GAAA,EAAC;AAAA,OAAA,EACnF,CAAA;AAAA,MACC;AAAA,KAAA,EACH,CAAA;AAAA,IAED,CAAA,CAAE,IAAA,CAAK,KAAA,KAAU,OAAA,IAAW,EAAE,OAAA,IAAW,EAAE,CAAA,CAAE,KAAA,YAAiB,IAAA,CAAA,oBAC7DC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uBAAA,EAAwB,QAAA,EAAA;AAAA,MAAA,WAAA;AAAA,MAAU,CAAA,CAAE;AAAA,KAAA,EAAQ,CAAA;AAAA,IAE5D,SAAA,oBACCD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACb,QAAA,kBAAAC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,MAAI,KAAA;AAAA,MAAI;AAAA,KAAA,EAAI,CAAA,EACrD,CAAA;AAAA,IAED,OAAA,oBACCD,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EAAsB,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA,MAAA,CAAA,EAC3C,QAAA,EAAA,CAAA,CAAE,OAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAAMA,GAAAA,CAAC,SAAa,QAAA,EAAA,CAAA,CAAE,OAAA,EAAA,EAAN,CAAc,CAAM,CAAA,EACxD;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;ACjCO,SAAS,SAAA,CAAU,QAAwB,KAAA,EAAkC;AAClF,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AACpD,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AAC3B,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA;AAClE,IAAA,MAAM,IAAA,GAAO,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,GAAI,MAAA;AACzC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,EAAO,IAAI,CAAA;AAC9B,IAAA,MAAM,OAAA,GACH,IAAA,EAAM,QAAA,CAAS,GAAG,CAAA,KAAM,KAAA,CAAM,IAAA,KAAS,mBAAA,GAAsB,kBAAA,CAAmB,KAAK,CAAA,GAAI,MAAA,CAAA,IAC1F,KAAA,CAAM,OAAA;AACR,IAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,OAAA,EAAQ;AAAA,EAC/B,CAAC,CAAA;AACH;AAEA,SAAS,MAAA,CAAO,OAAqB,IAAA,EAA0B;AAC7D,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,KAAW,QAAA,IAAY,MAAM,MAAA,KAAW,KAAA;AAC9D,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,WAAA;AACH,MAAA,IAAI,IAAA,EAAM,WAAA,CAAY,KAAA,KAAU,MAAA,EAAW,OAAO,eAAA;AAClD,MAAA,OAAO,UAAU,cAAA,GAAiB,YAAA;AAAA,IACpC,KAAK,SAAA;AACH,MAAA,IAAI,IAAA,EAAM,WAAA,CAAY,KAAA,KAAU,MAAA,EAAW,OAAO,eAAA;AAClD,MAAA,OAAO,UAAU,WAAA,GAAc,YAAA;AAAA,IACjC,KAAK,gBAAA;AACH,MAAA,OAAO,MAAM,MAAA,IAAU,QAAA;AAAA,IACzB,KAAK,cAAA;AACH,MAAA,OAAO,MAAM,MAAA,KAAW,SAAA,IAAa,KAAA,CAAM,MAAA,KAAW,UAAU,KAAA,GAAQ,cAAA;AAAA,IAC1E;AACE,MAAA,OAAO,KAAA,CAAM,IAAA;AAAA;AAEnB;AAEA,SAAS,mBAAmB,KAAA,EAA6B;AACvD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,IAAQ,EAAC;AAC5B,EAAA,OAAO,iBAAiB,IAAA,CAAK,MAAA,KAAW,CAAA,GAAI,SAAA,GAAY,QAAQ,CAAA,8BAAA,EAAiC,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,yDAAA,EAAuD,IAAA,CAAK,MAAA,KAAW,CAAA,GAAI,OAAO,MAAM,CAAA,aAAA,CAAA;AAC1M;AAGO,SAAS,YAAY,IAAA,EAAqF;AAC/G,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA0B;AAC9C,EAAA,MAAM,YAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,CAAA,CAAE,KAAA,KAAU,IAAA,EAAM,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,SACjC,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,KAAA,EAAO,CAAC,GAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,IAAK,EAAC,EAAI,CAAC,CAAC,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,EAAE,SAAS,SAAA,EAAU;AAC9B;;;AC9DO,IAAM,qBAAA,GAAwB;AAE9B,SAAS,SAAA,CAAU,MAAiB,GAAA,EAA4B;AACrE,EAAA,IAAI,GAAA,KAAQ,UAAa,GAAA,KAAQ,IAAA,SAAa,IAAA,CAAK,KAAA,KAAU,YAAY,KAAA,GAAQ,EAAA;AACjF,EAAA,QAAQ,KAAK,KAAA;AAAO,IAClB,KAAK,SAAA;AACH,MAAA,OAAO,QAAQ,GAAG,CAAA;AAAA,IACpB,KAAK,MAAA;AACH,MAAA,OAAO,GAAA,YAAe,IAAA,GAAO,GAAA,CAAI,WAAA,EAAY,CAAE,MAAM,CAAA,EAAG,EAAE,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,IAC1E,KAAK,MAAA;AACH,MAAA,OAAO,KAAA,CAAM,QAAQ,GAAG,CAAA,GAAI,IAAI,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,IACzD;AACE,MAAA,OAAO,OAAO,GAAG,CAAA;AAAA;AAEvB;AAGO,SAAS,aAAA,CACd,KAAA,EACA,KAAA,EACA,YAAA,EACuE;AACvE,EAAA,MAAM,WAAA,GAAuC,EAAE,GAAG,YAAA,EAAa;AAC/D,EAAA,MAAM,QAA8B,EAAC;AAErC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,SAAS,MAAA,EAAQ;AACpD,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAEzB,IAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC5B,MAAA,IAAI,CAAA,KAAM,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,WAAA,IAChC,IAAA,CAAK,QAAA,EAAU,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAAI,KAAA;AACjD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA;AACnB,MAAA,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAAI,qBAAA,GAAwB,CAAA,CAAE,IAAA;AACnD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAI,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,CAAE,MAAK,GAAI,EAAA;AAC7C,IAAA,IAAI,MAAM,EAAA,EAAI;AAEZ,MAAA,IAAI,IAAA,CAAK,QAAA,EAAU,WAAA,CAAY,IAAA,CAAK,IAAI,IAAI,IAAA,CAAK,KAAA,KAAU,MAAA,GAAS,EAAC,GAAI,EAAA;AACzE,MAAA;AAAA,IACF;AACA,IAAA,QAAQ,KAAK,KAAA;AAAO,MAClB,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,QAAA,WAAA,CAAY,KAAK,IAAI,CAAA,GAAI,OAAO,KAAA,CAAM,CAAC,IAAI,CAAA,GAAI,CAAA;AAC/C,QAAA;AAAA,MACF;AAAA,MACA,KAAK,MAAA;AACH,QAAA,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,CAAE,MAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AACzE,QAAA;AAAA,MACF;AACE,QAAA,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA;AAAA;AAC7B,EACF;AACA,EAAA,OAAO,EAAE,aAAa,KAAA,EAAM;AAC9B;AC3BO,SAAS,YAAY,EAAE,KAAA,EAAO,aAAA,GAAgB,IAAI,WAAA,GAAc,EAAA,EAAI,QAAA,EAAU,QAAA,EAAU,cAAc,MAAA,EAAQ,SAAA,EAAW,WAAW,IAAA,EAAM,SAAA,GAAY,WAAU,EAAqB;AAC1L,EAAA,MAAM,SAAS,KAAA,EAAM;AACrB,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,QAAQ,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACpE,EAAA,MAAM,UAAU,OAAA,CAAQ,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,QAAA,IAAY,EAAE,IAAA,KAAS,MAAM,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACpG,EAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AAEpD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAAoB,MAAM,MAAA,CAAO,WAAA,CAAY,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,SAAA,CAAU,CAAA,EAAG,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACvI,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,WAAW,CAAA;AAC5C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA,CAAuB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,QAAA,CAA+C,EAAE,CAAA;AAG/E,EAAA,MAAM,YAAA,GAAe,QAAQ,MAAM;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AAChD,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA;AACrC,IAAA,OAAO,OAAO,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,aAAa,EAAE,MAAA,CAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAA,CAAM,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAAA,EACxF,CAAA,EAAG,CAAC,aAAA,EAAe,OAAA,EAAS,QAAQ,CAAC,CAAA;AAGrC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,GAAO,IAAA;AACX,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,UAAA,EAAY;AACrC,MAAA,UAAA,CAAW,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE,IAAI,GAAG,SAAA,EAAU,CAAE,CAAA;AACjD,MAAA,OAAA,CAAQ,QAAQ,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AAC1C,QAAA,IAAI,IAAA,EAAM,UAAA,CAAW,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE,IAAI,GAAG,IAAA,EAAK,CAAE,CAAA;AAAA,MACxD,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,GAAO,KAAA;AAAA,IACT,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,QAAA,GAAW,YAAY,MAAiB;AAC5C,IAAA,MAAM,EAAE,WAAA,EAAY,GAAI,aAAA,CAAc,KAAA,EAAO,OAAO,YAAY,CAAA;AAChE,IAAA,MAAM,MAAA,GAAU,KAAA,CAAM,MAAA,CAAoD,SAAA,CAAU,WAAW,CAAA;AAC/F,IAAA,SAAA,CAAU,MAAA,CAAO,UAAU,EAAC,GAAI,UAAU,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAC,CAAA;AACrE,IAAA,OAAO,MAAA;AAAA,EACT,GAAG,CAAC,KAAA,CAAM,QAAQ,KAAA,EAAO,KAAA,EAAO,YAAY,CAAC,CAAA;AAE7C,EAAA,MAAM,YAAA,GAAe,OAAO,CAAA,KAAiB;AAC3C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,UAAA,EAAY;AAChB,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,MAAM,SAAS,QAAA,EAAS;AACxB,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACrB,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,aAAA,CAAc,KAAA,EAAO,OAAO,YAAY,CAAA;AAC1D,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,EAAE,WAAA,EAAa,OAAO,IAAA,EAAiC,IAAA,EAAM,OAAO,CAAA;AAAA,IACrF,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,YAAY,MAAM,CAAA;AACjD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAiB,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAA,KAAM,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,GAAI,EAAE,OAAA,GAAU,MAAA,CAAA;AAEhG,EAAA,uBACEC,KAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAC,cAAA,EAAgB,SAAS,EAAE,MAAA,CAAO,OAAO,EAAE,IAAA,CAAK,GAAG,GAAG,QAAA,EAAU,YAAA,EAAc,YAAU,IAAA,EAAC,2BAAA,EAA2B,MAAM,EAAA,EAC1I,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,WAAO,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,IAEhB,SAAA,CAAU,SAAS,CAAA,oBAClBC,KAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAsB,IAAA,EAAK,OAAA,EACxC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,YAAO,QAAA,EAAA,0BAAA,EAAwB,CAAA;AAAA,sBAChCA,GAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,SAAA,CAAU,IAAI,CAAC,CAAA,EAAG,CAAA,qBAAMA,IAAC,IAAA,EAAA,EAAY,QAAA,EAAA,CAAA,CAAE,OAAA,EAAA,EAAN,CAAc,CAAK,CAAA,EAAE;AAAA,KAAA,EAC7D,CAAA;AAAA,oBAGFC,KAAC,UAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM,CAAA;AAAA,MACpB,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAAmB,MAAA;AAAA,UAAgB,IAAA,EAAM,CAAA;AAAA,UAAG,KAAA,EAAO,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA;AAAA,UAAG,QAAQ,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,IAAI,KAAK,EAAC;AAAA,UACjG,OAAA,EAAS,OAAO,aAAA,CAAc,CAAA,CAAE,IAAI,MAAM,QAAA,GAAY,aAAA,CAAc,CAAA,CAAE,IAAI,CAAA,GAAe,MAAA;AAAA,UACzF,OAAA,EAAS,WAAW,CAAC,CAAA;AAAA,UACrB,QAAA,EAAU,CAAC,CAAA,KAAoB,QAAA,CAAS,CAAC,EAAA,MAAQ,EAAE,GAAG,EAAA,EAAI,CAAC,CAAA,CAAE,IAAI,GAAG,GAAE,CAAE,CAAA;AAAA,UACxE,QAAQ,MAAM;AAAE,YAAA,IAAI,WAAW,QAAA,EAAS;AAAA,UAAG;AAAA,SAAA;AAAA,QAJjC,CAAA,CAAE;AAAA,OAKf;AAAA,KAAA,EACH,CAAA;AAAA,IAAA,CAEE,QAAA,IAAY,QAAA,qBACZC,IAAAA,CAAC,UAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,QAAA,EAAU,KAAA,IAAS,SAAA,EAAU,CAAA;AAAA,sBACtCA,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,qBAAA,EAAsB,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,KAAA,CAAA,EAAU,QAAA,EAAA,QAAA,EAAU,KAAA,IAAS,SAAA,EAAU,CAAA;AAAA,sBAChGA,GAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UAAS,EAAA,EAAI,GAAG,MAAM,CAAA,KAAA,CAAA;AAAA,UAAS,IAAA,EAAK,MAAA;AAAA,UAAO,SAAA,EAAU,mDAAA;AAAA,UACpD,KAAA,EAAO,IAAA;AAAA,UAAM,WAAA,EAAa,UAAU,WAAA,IAAe,4DAAA;AAAA,UACnD,UAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA;AAAG,KAAA,EAC9C,CAAA;AAAA,oBAGFC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,QAAA,oBAAYD,IAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAU,sBAAA,EAAuB,OAAA,EAAS,QAAA,EAAU,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,sBAC7FA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,oDAAA,EAAqD,QAAA,EAAU,UAAA,EAC5F,QAAA,EAAA,UAAA,GAAa,CAAA,EAAG,WAAW,WAAM,WAAA,EACpC;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"index.js","sourcesContent":["/**\n * One control per InputKind. Dumb: value in, change out. Field.tsx owns the\n * label, helper row and error; ContentForm owns state.\n */\n\nimport type { FieldSpec } from \"../forms\";\nimport type { ControlValue } from \"./values\";\n\nexport interface ControlProps {\n id: string;\n spec: FieldSpec;\n value: ControlValue;\n invalid: boolean;\n options?: string[] | \"loading\";\n onChange: (v: ControlValue) => void;\n onBlur: () => void;\n}\n\nexport function Control(p: ControlProps) {\n const cls = [\"realiiz-form__control\", p.invalid && \"realiiz-form__control--invalid\"].filter(Boolean).join(\" \");\n const common = {\n id: p.id,\n name: p.spec.name,\n \"aria-invalid\": p.invalid || undefined,\n \"aria-describedby\": p.invalid ? `${p.id}-error` : undefined,\n onBlur: p.onBlur,\n } as const;\n const str = typeof p.value === \"string\" ? p.value : \"\";\n\n if (p.options === \"loading\") {\n return <div className={cls} aria-busy=\"true\" style={{ color: \"var(--_muted)\" }}>Loading options…</div>;\n }\n\n if (p.options || p.spec.input === \"select\") {\n return (\n <select {...common} className={cls} value={str} onChange={(e) => p.onChange(e.target.value)}>\n {!p.spec.required && <option value=\"\">—</option>}\n {(p.options ?? []).map((o) => (\n <option key={o} value={o}>{o}</option>\n ))}\n </select>\n );\n }\n\n switch (p.spec.input) {\n case \"textarea\":\n return (\n <textarea {...common} className={`${cls} realiiz-form__control--textarea`} value={str}\n placeholder={p.spec.placeholder} onChange={(e) => p.onChange(e.target.value)} />\n );\n case \"boolean\":\n return (\n <input {...common} type=\"checkbox\" checked={p.value === true} onChange={(e) => p.onChange(e.target.checked)} />\n );\n case \"image\":\n return (\n <input {...common} type=\"file\" accept=\"image/*\" className={cls}\n onChange={(e) => p.onChange(e.target.files?.[0] ?? null)} />\n );\n case \"date\":\n return <input {...common} type=\"date\" className={cls} value={str} onChange={(e) => p.onChange(e.target.value)} />;\n case \"number\":\n return (\n <input {...common} type=\"number\" inputMode=\"numeric\" className={cls} value={str}\n min={p.spec.constraints.min} max={p.spec.constraints.max}\n step={p.spec.constraints.format === \"int\" ? 1 : undefined}\n placeholder={p.spec.placeholder} onChange={(e) => p.onChange(e.target.value)} />\n );\n case \"url\":\n return (\n <input {...common} type=\"url\" className={cls} value={str} placeholder={p.spec.placeholder ?? \"https://\"}\n onChange={(e) => p.onChange(e.target.value)} />\n );\n case \"tags\":\n return (\n <input {...common} type=\"text\" className={cls} value={str}\n placeholder={p.spec.placeholder ?? \"one, two, three\"} onChange={(e) => p.onChange(e.target.value)} />\n );\n default:\n return (\n <input {...common} type=\"text\" className={cls} value={str} placeholder={p.spec.placeholder}\n maxLength={p.spec.constraints.max} onChange={(e) => p.onChange(e.target.value)} />\n );\n }\n}\n","/**\n * Field anatomy: label (+ required marker) → control → helper row (character\n * count when max exists) → error text. The error sits under the control,\n * never in a tooltip — the audience is a non-technical client.\n */\n\nimport type { FieldSpec } from \"../forms\";\nimport type { FieldIssue } from \"./issues\";\nimport { Control } from \"./controls\";\nimport type { ControlValue } from \"./values\";\n\nexport interface FieldProps {\n formId: string;\n spec: FieldSpec;\n value: ControlValue;\n current?: string;\n issues: FieldIssue[];\n options?: string[] | \"loading\";\n onChange: (v: ControlValue) => void;\n onBlur: () => void;\n}\n\nexport function Field(p: FieldProps) {\n const id = `${p.formId}-${p.spec.name}`;\n const invalid = p.issues.length > 0;\n const max = p.spec.constraints.max;\n const showCount = typeof max === \"number\" && (p.spec.input === \"text\" || p.spec.input === \"textarea\");\n const len = typeof p.value === \"string\" ? p.value.length : 0;\n const isCheck = p.spec.input === \"boolean\";\n\n const control = (\n <Control id={id} spec={p.spec} value={p.value} invalid={invalid} options={p.options} onChange={p.onChange} onBlur={p.onBlur} />\n );\n\n return (\n <div className={`realiiz-form__field realiiz-form__field--${p.spec.input}`} data-field={p.spec.name}>\n {isCheck ? (\n <label className=\"realiiz-form__check\" htmlFor={id}>\n {control}\n <span>{p.spec.label}{p.spec.required && <span className=\"realiiz-form__required\" aria-hidden=\"true\">*</span>}</span>\n </label>\n ) : (\n <>\n <label className=\"realiiz-form__label\" htmlFor={id}>\n {p.spec.label}\n {p.spec.required && <span className=\"realiiz-form__required\" aria-hidden=\"true\">*</span>}\n </label>\n {control}\n </>\n )}\n {p.spec.input === \"image\" && p.current && !(p.value instanceof File) && (\n <div className=\"realiiz-form__current\">Current: {p.current}</div>\n )}\n {showCount && (\n <div className=\"realiiz-form__helper\">\n <span className=\"realiiz-form__count\">{len} / {max}</span>\n </div>\n )}\n {invalid && (\n <div className=\"realiiz-form__error\" id={`${id}-error`}>\n {p.issues.map((i, n) => <div key={n}>{i.message}</div>)}\n </div>\n )}\n </div>\n );\n}\n","/**\n * zod issue → { field, key, message }. Pure.\n *\n * The key matches FieldSpec.messages so the schema's own per-check wording is\n * what the client reads. Observed on zod 4.5.4 (see the ADMIN-02b brief):\n * too_small / too_big origin string|array → min_length / max_length\n * origin number → greater_than / less_than\n * when the spec has `exact` → length_equals\n * invalid_format format regex|url|… → that format\n * invalid_type + format safeint (from .int()) → int\n * custom → custom\n * unrecognized_keys path [] , keys: [...] → form-level\n */\n\nimport type { FieldSpec } from \"../forms\";\n\nexport interface FieldIssue {\n /** null for form-level issues. */\n field: string | null;\n key: string;\n message: string;\n}\n\ninterface ZodIssueLike {\n code: string;\n path: PropertyKey[];\n message: string;\n origin?: string;\n format?: string;\n keys?: string[];\n}\n\nexport function mapIssues(issues: ZodIssueLike[], specs: FieldSpec[]): FieldIssue[] {\n const byName = new Map(specs.map((s) => [s.name, s]));\n return issues.map((issue) => {\n const field = typeof issue.path[0] === \"string\" ? issue.path[0] : null;\n const spec = field ? byName.get(field) : undefined;\n const key = keyFor(issue, spec);\n const message =\n (spec?.messages[key] ?? (issue.code === \"unrecognized_keys\" ? unknownKeysMessage(issue) : undefined)) ??\n issue.message;\n return { field, key, message };\n });\n}\n\nfunction keyFor(issue: ZodIssueLike, spec?: FieldSpec): string {\n const numeric = issue.origin === \"number\" || issue.origin === \"int\";\n switch (issue.code) {\n case \"too_small\":\n if (spec?.constraints.exact !== undefined) return \"length_equals\";\n return numeric ? \"greater_than\" : \"min_length\";\n case \"too_big\":\n if (spec?.constraints.exact !== undefined) return \"length_equals\";\n return numeric ? \"less_than\" : \"max_length\";\n case \"invalid_format\":\n return issue.format ?? \"format\";\n case \"invalid_type\":\n return issue.format === \"safeint\" || issue.format === \"int32\" ? \"int\" : \"invalid_type\";\n default:\n return issue.code;\n }\n}\n\nfunction unknownKeysMessage(issue: ZodIssueLike): string {\n const keys = issue.keys ?? [];\n return `This file has ${keys.length === 1 ? \"a field\" : \"fields\"} the site does not recognise: ${keys.join(\", \")}. It was probably edited by hand — remove or rename ${keys.length === 1 ? \"it\" : \"them\"} to continue.`;\n}\n\n/** Group by field for rendering. */\nexport function groupIssues(list: FieldIssue[]): { byField: Map<string, FieldIssue[]>; formLevel: FieldIssue[] } {\n const byField = new Map<string, FieldIssue[]>();\n const formLevel: FieldIssue[] = [];\n for (const i of list) {\n if (i.field === null) formLevel.push(i);\n else byField.set(i.field, [...(byField.get(i.field) ?? []), i]);\n }\n return { byField, formLevel };\n}\n","/**\n * Control strings ↔ frontmatter values. Pure.\n *\n * Controls hold strings (or booleans / Files). The schema wants typed values.\n * `toControl` seeds a control from an existing frontmatter value — including\n * a Date from a previously-parsed file — and `toValue` assembles what goes to\n * safeParse. Anything the schema then coerces (dates) is the schema's business.\n */\n\nimport type { FieldSpec } from \"../forms\";\n\nexport type ControlValue = string | boolean | File | null;\nexport type FormState = Record<string, ControlValue>;\n\n/** Stand-in path for an image chosen but not yet uploaded — replaced by ADMIN-06. */\nexport const PENDING_UPLOAD_PREFIX = \"pending-upload/\";\n\nexport function toControl(spec: FieldSpec, raw: unknown): ControlValue {\n if (raw === undefined || raw === null) return spec.input === \"boolean\" ? false : \"\";\n switch (spec.input) {\n case \"boolean\":\n return Boolean(raw);\n case \"date\":\n return raw instanceof Date ? raw.toISOString().slice(0, 10) : String(raw);\n case \"tags\":\n return Array.isArray(raw) ? raw.join(\", \") : String(raw);\n default:\n return String(raw);\n }\n}\n\n/** Build the object that goes to schema.safeParse. Empty optional fields are omitted. */\nexport function toFrontmatter(\n specs: FieldSpec[],\n state: FormState,\n hiddenValues: Record<string, unknown>,\n): { frontmatter: Record<string, unknown>; files: Record<string, File> } {\n const frontmatter: Record<string, unknown> = { ...hiddenValues };\n const files: Record<string, File> = {};\n\n for (const spec of specs) {\n if (spec.role === \"hidden\" || spec.role === \"body\") continue;\n const v = state[spec.name];\n\n if (spec.input === \"boolean\") {\n if (v === true) frontmatter[spec.name] = true;\n else if (spec.required) frontmatter[spec.name] = false;\n continue;\n }\n if (v instanceof File) {\n files[spec.name] = v;\n frontmatter[spec.name] = PENDING_UPLOAD_PREFIX + v.name;\n continue;\n }\n const s = typeof v === \"string\" ? v.trim() : \"\";\n if (s === \"\") {\n // Required fields are sent empty so the schema's own \"is required\" message fires.\n if (spec.required) frontmatter[spec.name] = spec.input === \"tags\" ? [] : \"\";\n continue;\n }\n switch (spec.input) {\n case \"number\": {\n const n = Number(s);\n frontmatter[spec.name] = Number.isNaN(n) ? s : n;\n break;\n }\n case \"tags\":\n frontmatter[spec.name] = s.split(\",\").map((t) => t.trim()).filter(Boolean);\n break;\n default:\n frontmatter[spec.name] = s;\n }\n }\n return { frontmatter, files };\n}\n","/**\n * ContentForm — a ContentTypeEntry in, validated { frontmatter, body, files } out.\n *\n * Validation runs on submit. After the first failed submit it also re-runs on\n * blur, so the client watches the error clear as they fix it. Before that\n * first submit the form stays quiet — nagging someone who hasn't finished\n * typing is the wrong default for this audience.\n *\n * The schema is the only judge. This component never decides what is valid;\n * it assembles values, calls entry.schema.safeParse, and maps issues back to\n * fields with the schema's own messages.\n */\n\nimport { useCallback, useEffect, useId, useMemo, useState, type FormEvent } from \"react\";\nimport type { ContentTypeEntry, FieldSpec } from \"../forms\";\nimport { walkSchema } from \"../forms\";\nimport { Field } from \"./Field\";\nimport { groupIssues, mapIssues, type FieldIssue } from \"./issues\";\nimport { FORM_CSS } from \"./styles\";\nimport { toControl, toFrontmatter, type ControlValue, type FormState } from \"./values\";\n\nexport interface ContentFormSubmission {\n frontmatter: Record<string, unknown>;\n body: string;\n files: Record<string, File>;\n}\n\nexport interface ContentFormProps {\n entry: ContentTypeEntry;\n initialValues?: Record<string, unknown>;\n initialBody?: string;\n onSubmit: (s: ContentFormSubmission) => void | Promise<void>;\n onCancel?: () => void;\n submitLabel?: string;\n className?: string;\n /**\n * Show the MDX body textarea (the content below the frontmatter). Default\n * true — most types have a body. Pass false for frontmatter-only types such\n * as venues. Independent of entry.body, which names a frontmatter FIELD\n * that should be edited as long text.\n */\n showBody?: boolean;\n bodyLabel?: string;\n}\n\ntype SafeParse = { success: true; data: unknown } | { success: false; error: { issues: Parameters<typeof mapIssues>[0] } };\n\nexport function ContentForm({ entry, initialValues = {}, initialBody = \"\", onSubmit, onCancel, submitLabel = \"Save\", className, showBody = true, bodyLabel = \"Content\" }: ContentFormProps) {\n const formId = useId();\n const specs = useMemo(() => walkSchema(entry.schema, entry), [entry]);\n const visible = useMemo(() => specs.filter((s) => s.role !== \"hidden\" && s.role !== \"body\"), [specs]);\n const bodySpec = specs.find((s) => s.role === \"body\");\n\n const [state, setState] = useState<FormState>(() => Object.fromEntries(specs.map((s) => [s.name, toControl(s, initialValues[s.name])])));\n const [body, setBody] = useState(initialBody);\n const [issues, setIssues] = useState<FieldIssue[]>([]);\n const [attempted, setAttempted] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const [options, setOptions] = useState<Record<string, string[] | \"loading\">>({});\n\n // Hidden fields (and any initial key with no spec) ride through untouched.\n const hiddenValues = useMemo(() => {\n const shown = new Set(visible.map((s) => s.name));\n if (bodySpec) shown.add(bodySpec.name);\n return Object.fromEntries(Object.entries(initialValues).filter(([k]) => !shown.has(k)));\n }, [initialValues, visible, bodySpec]);\n\n // Resolve function option sources once, on mount.\n useEffect(() => {\n let live = true;\n for (const s of visible) {\n if (typeof s.options !== \"function\") continue;\n setOptions((o) => ({ ...o, [s.name]: \"loading\" }));\n Promise.resolve(s.options()).then((list) => {\n if (live) setOptions((o) => ({ ...o, [s.name]: list }));\n });\n }\n return () => {\n live = false;\n };\n }, [visible]);\n\n const validate = useCallback((): SafeParse => {\n const { frontmatter } = toFrontmatter(specs, state, hiddenValues);\n const result = (entry.schema as { safeParse: (v: unknown) => SafeParse }).safeParse(frontmatter);\n setIssues(result.success ? [] : mapIssues(result.error.issues, specs));\n return result;\n }, [entry.schema, specs, state, hiddenValues]);\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n if (submitting) return;\n setAttempted(true);\n const result = validate();\n if (!result.success) return;\n const { files } = toFrontmatter(specs, state, hiddenValues);\n setSubmitting(true);\n try {\n await onSubmit({ frontmatter: result.data as Record<string, unknown>, body, files });\n } finally {\n setSubmitting(false);\n }\n };\n\n const { byField, formLevel } = groupIssues(issues);\n const optionsFor = (s: FieldSpec) => options[s.name] ?? (Array.isArray(s.options) ? s.options : undefined);\n\n return (\n <form className={[\"realiiz-form\", className].filter(Boolean).join(\" \")} onSubmit={handleSubmit} noValidate data-realiiz-content-form={entry.id}>\n <style>{FORM_CSS}</style>\n\n {formLevel.length > 0 && (\n <div className=\"realiiz-form__alert\" role=\"alert\">\n <strong>This can't be saved yet.</strong>\n <ul>{formLevel.map((i, n) => <li key={n}>{i.message}</li>)}</ul>\n </div>\n )}\n\n <fieldset>\n <legend>{entry.label}</legend>\n {visible.map((s) => (\n <Field key={s.name} formId={formId} spec={s} value={state[s.name]} issues={byField.get(s.name) ?? []}\n current={typeof initialValues[s.name] === \"string\" ? (initialValues[s.name] as string) : undefined}\n options={optionsFor(s)}\n onChange={(v: ControlValue) => setState((st) => ({ ...st, [s.name]: v }))}\n onBlur={() => { if (attempted) validate(); }} />\n ))}\n </fieldset>\n\n {(showBody || bodySpec) && (\n <fieldset>\n <legend>{bodySpec?.label ?? bodyLabel}</legend>\n <label className=\"realiiz-form__label\" htmlFor={`${formId}-body`}>{bodySpec?.label ?? bodyLabel}</label>\n <textarea id={`${formId}-body`} name=\"body\" className=\"realiiz-form__control realiiz-form__control--body\"\n value={body} placeholder={bodySpec?.placeholder ?? \"Write in Markdown. Headings with ##, links as [text](url).\"}\n onChange={(e) => setBody(e.target.value)} />\n </fieldset>\n )}\n\n <div className=\"realiiz-form__actions\">\n {onCancel && <button type=\"button\" className=\"realiiz-form__button\" onClick={onCancel}>Cancel</button>}\n <button type=\"submit\" className=\"realiiz-form__button realiiz-form__button--primary\" disabled={submitting}>\n {submitting ? `${submitLabel}…` : submitLabel}\n </button>\n </div>\n </form>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/forms-ui/ChipsInput.tsx","../../src/forms-ui/controls.tsx","../../src/forms-ui/Field.tsx","../../src/forms-ui/md/table.ts","../../src/forms-ui/md/edits.ts","../../src/forms-ui/md/icons.tsx","../../src/forms-ui/md/TableGrid.tsx","../../src/forms-ui/MarkdownEditor.tsx","../../src/forms-ui/issues.ts","../../src/forms-ui/values.ts","../../src/forms-ui/ContentForm.tsx"],"names":["jsx","jsxs","useState","useRef","useEffect","Fragment","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ChipsInput — tags as chips. Enter or comma adds, × or Backspace-on-empty\n * removes. The value is a string[]; the schema's length/regex rules still run\n * on submit, this is only a nicer way to type them.\n */\n\nimport { useState, type KeyboardEvent } from \"react\";\n\nexport function ChipsInput({ id, name, value, onChange, onBlur, placeholder, invalid, max }: {\n id: string;\n name: string;\n value: string[];\n onChange: (v: string[]) => void;\n onBlur: () => void;\n placeholder?: string;\n invalid?: boolean;\n /** When the schema says exactly N, show \"n of N\". */\n max?: number;\n}) {\n const [draft, setDraft] = useState(\"\");\n\n const commit = () => {\n const parts = draft.split(\",\").map((s) => s.trim()).filter(Boolean);\n if (parts.length) onChange([...value, ...parts.filter((p) => !value.includes(p))]);\n setDraft(\"\");\n };\n\n const onKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || e.key === \",\") {\n e.preventDefault();\n commit();\n } else if (e.key === \"Backspace\" && draft === \"\" && value.length) {\n onChange(value.slice(0, -1));\n }\n };\n\n return (\n <div className={[\"realiiz-chips\", invalid && \"realiiz-form__control--invalid\"].filter(Boolean).join(\" \")} data-name={name}>\n {value.map((tag) => (\n <span key={tag} className=\"realiiz-chip\">\n {tag}\n <button type=\"button\" aria-label={`Remove ${tag}`} onClick={() => onChange(value.filter((t) => t !== tag))}>×</button>\n </span>\n ))}\n <input\n id={id}\n type=\"text\"\n className=\"realiiz-chips__input\"\n value={draft}\n placeholder={value.length ? \"\" : placeholder}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={onKey}\n onBlur={() => { commit(); onBlur(); }}\n aria-invalid={invalid || undefined}\n />\n {typeof max === \"number\" && <span className=\"realiiz-chips__count\">{value.length} of {max}</span>}\n </div>\n );\n}\n","/**\n * One control per InputKind. Dumb: value in, change out. Field.tsx owns the\n * label, helper row and error; ContentForm owns state.\n */\n\nimport type { FieldSpec } from \"../forms\";\nimport type { ControlValue } from \"./values\";\n\nexport interface ControlProps {\n id: string;\n spec: FieldSpec;\n value: ControlValue;\n invalid: boolean;\n options?: string[] | \"loading\";\n onChange: (v: ControlValue) => void;\n onBlur: () => void;\n}\n\nexport function Control(p: ControlProps) {\n const cls = [\"realiiz-form__control\", p.invalid && \"realiiz-form__control--invalid\"].filter(Boolean).join(\" \");\n const common = {\n id: p.id,\n name: p.spec.name,\n \"aria-invalid\": p.invalid || undefined,\n \"aria-describedby\": p.invalid ? `${p.id}-error` : undefined,\n onBlur: p.onBlur,\n } as const;\n const str = typeof p.value === \"string\" ? p.value : \"\";\n\n if (p.options === \"loading\") {\n return <div className={cls} aria-busy=\"true\" style={{ color: \"var(--_muted)\" }}>Loading options…</div>;\n }\n\n if (p.options || p.spec.input === \"select\") {\n return (\n <select {...common} className={cls} value={str} onChange={(e) => p.onChange(e.target.value)}>\n {!p.spec.required && <option value=\"\">—</option>}\n {(p.options ?? []).map((o) => (\n <option key={o} value={o}>{o}</option>\n ))}\n </select>\n );\n }\n\n switch (p.spec.input) {\n case \"textarea\":\n return (\n <textarea {...common} className={`${cls} realiiz-form__control--textarea`} value={str}\n placeholder={p.spec.placeholder} onChange={(e) => p.onChange(e.target.value)} />\n );\n case \"boolean\":\n return (\n <input {...common} type=\"checkbox\" checked={p.value === true} onChange={(e) => p.onChange(e.target.checked)} />\n );\n case \"image\":\n return (\n <input {...common} type=\"file\" accept=\"image/*\" className={cls}\n onChange={(e) => p.onChange(e.target.files?.[0] ?? null)} />\n );\n case \"date\":\n return <input {...common} type=\"date\" className={cls} value={str} onChange={(e) => p.onChange(e.target.value)} />;\n case \"number\":\n return (\n <input {...common} type=\"number\" inputMode=\"numeric\" className={cls} value={str}\n min={p.spec.constraints.min} max={p.spec.constraints.max}\n step={p.spec.constraints.format === \"int\" ? 1 : undefined}\n placeholder={p.spec.placeholder} onChange={(e) => p.onChange(e.target.value)} />\n );\n case \"url\":\n return (\n <input {...common} type=\"url\" className={cls} value={str} placeholder={p.spec.placeholder ?? \"https://\"}\n onChange={(e) => p.onChange(e.target.value)} />\n );\n default:\n return (\n <input {...common} type=\"text\" className={cls} value={str} placeholder={p.spec.placeholder}\n maxLength={p.spec.constraints.max} onChange={(e) => p.onChange(e.target.value)} />\n );\n }\n}\n","/**\n * Field anatomy: label (+ required marker) → control → helper row (length\n * gauge / character count) → error text. The error sits under the control,\n * never in a tooltip — the audience is a non-technical client.\n */\n\nimport type { FieldSpec } from \"../forms\";\nimport type { FieldIssue } from \"./issues\";\nimport type { ReactNode } from \"react\";\nimport { ChipsInput } from \"./ChipsInput\";\nimport { Control } from \"./controls\";\nimport type { ControlValue } from \"./values\";\n\nexport interface FieldProps {\n formId: string;\n spec: FieldSpec;\n value: ControlValue;\n current?: string;\n issues: FieldIssue[];\n options?: string[] | \"loading\";\n onChange: (v: ControlValue) => void;\n onBlur: () => void;\n /** How to draw a label that has help text — e.g. the site's own tooltip component. */\n renderLabel?: LabelRenderer;\n}\n\nexport type LabelRenderer = (label: string, help: string) => ReactNode;\n\n/** Fallback when the host has no tooltip component: dotted underline + the browser's own title bubble. */\nconst defaultLabel: LabelRenderer = (label, help) => <span className=\"realiiz-form__help\" title={help}>{label}</span>;\n\n/**\n * Advisory length gauge. The bar is the whole scale (a bit past the max so\n * \"over\" has room to show), a green band marks the target range, and the fill\n * grows with the text in the state's colour: grey while short, green in range,\n * red past it. The words repeat only what the bar can't: the count and a verdict.\n */\nexport function LengthGauge({ length: raw, range, suffix }: { length: number; range: [number, number]; suffix?: string }) {\n const [min, max] = range;\n // The suffix is what the site adds on render (\" — Realiiz\"), so it counts once there is something to add it to.\n const length = raw === 0 ? 0 : raw + (suffix?.length ?? 0);\n const state = length === 0 ? \"empty\" : length < min ? \"short\" : length <= max ? \"ok\" : \"over\";\n const scale = Math.round(max * 1.3);\n const pct = (n: number) => `${Math.min(100, (n / scale) * 100)}%`;\n const verdict =\n state === \"ok\" ? \"good length\"\n : state === \"over\" ? `over ${max} — may be cut off`\n : `aim for ${min}–${max}`;\n const incl = suffix && length > 0 ? ` incl. “${suffix.trim()}”` : \"\";\n return (\n <span className={`realiiz-gauge realiiz-gauge--${state}`} title={`Recommended ${min}–${max} characters${suffix ? ` including “${suffix.trim()}”` : \"\"}`}>\n <span className=\"realiiz-gauge__bar\" aria-hidden=\"true\">\n <span className=\"realiiz-gauge__zone\" style={{ left: pct(min), width: `calc(${pct(max)} - ${pct(min)})` }} />\n <span className=\"realiiz-gauge__fill\" style={{ width: pct(length) }} />\n </span>\n <span className=\"realiiz-gauge__text\">\n <b>{length}</b> characters{incl} · {verdict}\n </span>\n </span>\n );\n}\n\nexport function Field(p: FieldProps) {\n const id = `${p.formId}-${p.spec.name}`;\n const invalid = p.issues.length > 0;\n const max = p.spec.constraints.max;\n const isText = p.spec.input === \"text\" || p.spec.input === \"textarea\";\n const len = typeof p.value === \"string\" ? p.value.length : 0;\n const isCheck = p.spec.input === \"boolean\";\n const isTags = p.spec.input === \"tags\";\n const labelText = p.spec.help ? (p.renderLabel ?? defaultLabel)(p.spec.label, p.spec.help) : p.spec.label;\n\n const control = isTags ? (\n <ChipsInput\n id={id}\n name={p.spec.name}\n value={Array.isArray(p.value) ? p.value : []}\n onChange={(v) => p.onChange(v)}\n onBlur={p.onBlur}\n placeholder={p.spec.placeholder}\n invalid={invalid}\n max={p.spec.constraints.exact ?? p.spec.constraints.max}\n />\n ) : (\n <Control id={id} spec={p.spec} value={p.value} invalid={invalid} options={p.options} onChange={p.onChange} onBlur={p.onBlur} />\n );\n\n return (\n <div className={`realiiz-form__field realiiz-form__field--${p.spec.input}`} data-field={p.spec.name}>\n {isCheck ? (\n <label className=\"realiiz-form__check\" htmlFor={id}>\n {control}\n <span>{labelText}{p.spec.required && <span className=\"realiiz-form__required\" aria-hidden=\"true\">*</span>}</span>\n </label>\n ) : (\n <>\n <label className=\"realiiz-form__label\" htmlFor={id}>\n {labelText}\n {p.spec.required && <span className=\"realiiz-form__required\" aria-hidden=\"true\">*</span>}\n </label>\n {control}\n </>\n )}\n {p.spec.input === \"image\" && p.current && !(p.value instanceof File) && (\n <div className=\"realiiz-form__current\">Current: {p.current}</div>\n )}\n {isText && (p.spec.recommended || typeof max === \"number\") && (\n <div className=\"realiiz-form__helper\">\n {p.spec.recommended ? (\n <LengthGauge length={len} range={p.spec.recommended} suffix={p.spec.suffix} />\n ) : (\n <span />\n )}\n {typeof max === \"number\" && <span className=\"realiiz-form__count\">{len} / {max}</span>}\n </div>\n )}\n {invalid && (\n <div className=\"realiiz-form__error\" id={`${id}-error`}>\n {p.issues.map((i, n) => <div key={n}>{i.message}</div>)}\n </div>\n )}\n </div>\n );\n}\n","/**\n * Markdown tables as data — ported from the surveillance-review report editor.\n *\n * `tableAt` finds the table under the caret (header + separator required),\n * `renderTable` writes one back padded to an even grid so the source is\n * readable, and `applyTableOp` does the four row/column edits. Pure functions\n * over the textarea's string; no DOM.\n */\n\nexport type Align = \"l\" | \"L\" | \"c\" | \"r\";\nexport type TableOp = \"rowAfter\" | \"rowDel\" | \"colAfter\" | \"colDel\";\n\nexport interface TableAt {\n start: number;\n end: number;\n rows: string[][];\n align: Align[];\n /** Row index of the caret; header and separator both count as 0. */\n row: number;\n col: number;\n}\n\nconst ROW = /^\\s*\\|.*\\|\\s*$/;\nconst SEP = /^\\s*\\|[\\s:|-]+\\|\\s*$/;\n\nexport function tableCells(line: string): string[] {\n return line.trim().replace(/^\\|/, \"\").replace(/\\|$/, \"\").split(/(?<!\\\\)\\|/).map((c) => c.trim());\n}\n\nexport function tableAt(v: string, pos: number): TableAt | null {\n const lines = v.split(\"\\n\");\n let i = 0, off = 0;\n while (i < lines.length && pos > off + lines[i].length) { off += lines[i].length + 1; i++; }\n if (i >= lines.length || !ROW.test(lines[i])) return null;\n let s = i, e = i;\n while (s > 0 && ROW.test(lines[s - 1])) s--;\n while (e < lines.length - 1 && ROW.test(lines[e + 1])) e++;\n if (e - s < 1 || !SEP.test(lines[s + 1])) return null;\n const start = lines.slice(0, s).reduce((n, l) => n + l.length + 1, 0);\n const end = start + lines.slice(s, e + 1).join(\"\\n\").length;\n // \"L\" is an explicit left-align (:---) kept distinct from the default so we never rewrite a line the user typed.\n const align = tableCells(lines[s + 1]).map((c): Align =>\n c.startsWith(\":\") && c.endsWith(\":\") ? \"c\" : c.endsWith(\":\") ? \"r\" : c.startsWith(\":\") ? \"L\" : \"l\");\n const rows = lines.slice(s, e + 1).filter((_, n) => n !== 1).map(tableCells);\n const col = Math.max(0, (lines[i].slice(0, pos - off).match(/(?<!\\\\)\\|/g) || []).length - 1);\n const row = i - s <= 1 ? 0 : i - s - 1;\n return { start, end, rows, align, row, col };\n}\n\nexport function renderTable(rows: string[][], align: Align[]): string {\n const cols = Math.max(...rows.map((r) => r.length));\n const w: number[] = [];\n for (let c = 0; c < cols; c++) w[c] = Math.max(3, ...rows.map((r) => (r[c] || \"\").length));\n const pad = (t: string | undefined, c: number) => (t || \"\").padEnd(w[c]);\n const line = (r: string[]) => \"| \" + Array.from({ length: cols }, (_, c) => pad(r[c], c)).join(\" | \") + \" |\";\n const sep = \"|\" + Array.from({ length: cols }, (_, c) =>\n align[c] === \"c\" ? \":\" + \"-\".repeat(w[c]) + \":\"\n : align[c] === \"r\" ? \" \" + \"-\".repeat(w[c] - 1) + \": \"\n : align[c] === \"L\" ? \":\" + \"-\".repeat(w[c] - 1) + \" \"\n : \" \" + \"-\".repeat(w[c]) + \" \").join(\"|\") + \"|\";\n return [line(rows[0]), sep, ...rows.slice(1).map(line)].join(\"\\n\");\n}\n\n/** A new table: header placeholders (\"Column 1\"…) plus `rows` empty body rows. */\nexport function newTable(rows: number, cols: number): { text: string; firstHeader: string } {\n const head = Array.from({ length: cols }, (_, i) => `Column ${i + 1}`);\n const grid = [head, ...Array.from({ length: rows }, () => Array<string>(cols).fill(\"\"))];\n return { text: renderTable(grid, Array<Align>(cols).fill(\"l\")), firstHeader: head[0] };\n}\n\nexport type TableEdit = { text: string; a: number; b: number } | { error: string };\n\nexport function applyTableOp(v: string, pos: number, op: TableOp): TableEdit | null {\n const t = tableAt(v, pos);\n if (!t) return null;\n const rows = t.rows.map((r) => r.slice());\n const cols = Math.max(...rows.map((r) => r.length));\n const align = t.align.slice();\n if (op === \"rowAfter\") {\n rows.splice(Math.max(1, t.row + 1), 0, Array<string>(cols).fill(\"\"));\n } else if (op === \"rowDel\") {\n if (t.row === 0 || rows.length <= 2) return { error: \"A table needs its header row and at least one row below it.\" };\n rows.splice(t.row, 1);\n } else if (op === \"colAfter\") {\n rows.forEach((r) => { while (r.length < cols) r.push(\"\"); r.splice(t.col + 1, 0, \"\"); });\n align.splice(t.col + 1, 0, \"l\");\n } else if (op === \"colDel\") {\n if (cols <= 1) return { error: \"That's the last column — delete the table instead.\" };\n rows.forEach((r) => r.splice(t.col, 1));\n align.splice(t.col, 1);\n }\n const out = renderTable(rows, align);\n return { text: v.slice(0, t.start) + out + v.slice(t.end), a: t.start, b: t.start + out.length };\n}\n","/**\n * Toolbar edits — pure functions (text, selStart, selEnd) → { text, a, b }.\n *\n * Every formatting tool TOGGLES, like the surveillance-review report editor:\n * bold on bold text un-bolds; H2 on an H2 line removes it; H3 on an H2 line\n * swaps it; link anywhere inside a link removes it. `activeTools` reports which\n * of them the caret is currently \"in\", so the buttons can light up and say what\n * they're about to do.\n */\n\nimport { newTable } from \"./table\";\n\nexport type Edit = { text: string; a: number; b: number };\nexport type Apply = (s: string, a: number, b: number) => Edit;\n\n/** Inline marks: wrapped selection → unwrap; selection inside markers → unwrap; else wrap. */\nexport const toggleWrap = (mark: string, placeholder = \"text\"): Apply =>\n (s, a, b) => {\n const sel = s.slice(a, b);\n const n = mark.length;\n if (sel.length >= 2 * n && sel.startsWith(mark) && sel.endsWith(mark)) {\n const inner = sel.slice(n, sel.length - n);\n return { text: s.slice(0, a) + inner + s.slice(b), a, b: a + inner.length };\n }\n if (s.slice(a - n, a) === mark && s.slice(b, b + n) === mark) {\n return { text: s.slice(0, a - n) + sel + s.slice(b + n), a: a - n, b: a - n + sel.length };\n }\n const body = sel || placeholder;\n return { text: s.slice(0, a) + mark + body + mark + s.slice(b), a: a + n, b: a + n + body.length };\n };\n\n/** Every line prefix a line tool might own; setting one strips any other in the family. */\nexport const PREFIX_RE = /^(#{1,6}\\s+|[-*+]\\s+|\\d+[.)]\\s+|>\\s?)/;\n\nconst lineSpan = (s: string, a: number, b: number) => {\n const start = s.lastIndexOf(\"\\n\", a - 1) + 1;\n const endIdx = s.indexOf(\"\\n\", Math.max(b, a));\n return { start, end: endIdx === -1 ? s.length : endIdx };\n};\n\n/** Line tools: if every selected line already has THIS prefix, remove it; otherwise replace whatever prefix they have. */\nexport const toggleLines = (prefix: string | ((i: number) => string), matches: (line: string) => boolean): Apply =>\n (s, a, b) => {\n const { start, end } = lineSpan(s, a, b);\n const lines = s.slice(start, end).split(\"\\n\");\n const allOn = lines.every((l) => l.trim() === \"\" || matches(l));\n const out = lines.map((l, i) => {\n const bare = l.replace(PREFIX_RE, \"\");\n return allOn ? bare : (typeof prefix === \"string\" ? prefix : prefix(i)) + bare;\n });\n const replaced = out.join(\"\\n\");\n return { text: s.slice(0, start) + replaced + s.slice(end), a: start, b: start + replaced.length };\n };\n\nconst LINK_RE = /\\[([^\\]\\n]*)\\]\\(([^)\\n]*)\\)/g;\n\n/** The `[label](url)` that contains [a,b], or null. Images (``) don't count. */\nexport function linkAt(s: string, a: number, b: number): { from: number; to: number; label: string } | null {\n for (const m of s.matchAll(LINK_RE)) {\n if (s[m.index - 1] === \"!\") continue;\n const from = m.index, to = from + m[0].length;\n if (a >= from && b <= to) return { from, to, label: m[1] };\n if (from > b) break;\n }\n return null;\n}\n\n/** Link: any selection or caret inside a link removes it (label kept); otherwise link the selection and select the URL. */\nexport const toggleLink: Apply = (s, a, b) => {\n const hit = linkAt(s, a, b);\n if (hit) return { text: s.slice(0, hit.from) + hit.label + s.slice(hit.to), a: hit.from, b: hit.from + hit.label.length };\n const label = s.slice(a, b) || \"link text\";\n const urlStart = a + label.length + 3;\n return { text: s.slice(0, a) + `[${label}](https://)` + s.slice(b), a: urlStart, b: urlStart + 8 };\n};\n\n/** Image: `` with the URL selected for typing or pasting. */\nexport const insertImage: Apply = (s, a, b) => {\n const alt = s.slice(a, b) || \"description\";\n const urlStart = a + alt.length + 4;\n return { text: s.slice(0, a) + `` + s.slice(b), a: urlStart, b: urlStart + 8 };\n};\n\n/** Inline separator between details, e.g. `email · phone`. */\nexport const insertDot: Apply = (s, a, b) => {\n const t = \" · \";\n return { text: s.slice(0, a) + t + s.slice(b), a: a + t.length, b: a + t.length };\n};\n\n/** Needs a blank line before it or the paragraph above swallows the block. */\nconst blockBefore = (s: string, a: number) => (a === 0 || s.slice(0, a).endsWith(\"\\n\\n\") ? \"\" : s.slice(0, a).endsWith(\"\\n\") ? \"\\n\" : \"\\n\\n\");\n\nexport const insertRule: Apply = (s, a, b) => {\n const before = blockBefore(s, a);\n const t = before + \"---\\n\\n\";\n return { text: s.slice(0, a) + t + s.slice(b), a: a + t.length, b: a + t.length };\n};\n\n/** Table of `rows` body rows × `cols`; lands with the first header selected so typing replaces it. */\nexport const insertTable = (rows: number, cols: number): Apply => (s, a, b) => {\n const { text, firstHeader } = newTable(rows, cols);\n const before = blockBefore(s, a);\n const t = before + text + \"\\n\";\n const at = a + before.length + text.indexOf(firstHeader);\n return { text: s.slice(0, a) + t + s.slice(b), a: at, b: at + firstHeader.length };\n};\n\n/**\n * Tooltip term — an MDX component, so opt-in per site: `<Term definition=\"…\">word</Term>`.\n * Select a word → wrapped with the caret inside the empty quotes, ready for the\n * definition. Anywhere inside an existing Term → unwrapped back to the word.\n */\nexport const toggleTerm = (component = \"Term\", attr = \"definition\"): Apply => (s, a, b) => {\n const re = new RegExp(`<${component}\\\\s+${attr}=\"([^\"]*)\"\\\\s*>([\\\\s\\\\S]*?)</${component}>`, \"g\");\n for (const m of s.matchAll(re)) {\n const from = m.index, to = from + m[0].length;\n if (a >= from && b <= to) return { text: s.slice(0, from) + m[2] + s.slice(to), a: from, b: from + m[2].length };\n if (from > b) break;\n }\n const word = s.slice(a, b) || \"term\";\n const open = `<${component} ${attr}=\"`;\n const text = s.slice(0, a) + open + `\">${word}</${component}>` + s.slice(b);\n return { text, a: a + open.length, b: a + open.length };\n};\n\nexport interface Tool { id: string; title: string; apply: Apply }\n\nexport const TOOLS: Tool[] = [\n { id: \"bold\", title: \"Bold — ⌘B\", apply: toggleWrap(\"**\") },\n { id: \"italic\", title: \"Italic — ⌘I\", apply: toggleWrap(\"_\") },\n { id: \"h2\", title: \"Section heading\", apply: toggleLines(\"## \", (l) => /^##\\s/.test(l)) },\n { id: \"h3\", title: \"Sub-heading\", apply: toggleLines(\"### \", (l) => /^###\\s/.test(l)) },\n { id: \"ul\", title: \"Bulleted list\", apply: toggleLines(\"- \", (l) => /^[-*+]\\s/.test(l)) },\n { id: \"ol\", title: \"Numbered list\", apply: toggleLines((i) => `${i + 1}. `, (l) => /^\\d+[.)]\\s/.test(l)) },\n { id: \"quote\", title: \"Quote\", apply: toggleLines(\"> \", (l) => /^>/.test(l)) },\n { id: \"link\", title: \"Link\", apply: toggleLink },\n { id: \"code\", title: \"Inline code\", apply: toggleWrap(\"`\", \"code\") },\n { id: \"image\", title: \"Image\", apply: insertImage },\n { id: \"dot\", title: \"Separator between details ( · )\", apply: insertDot },\n { id: \"rule\", title: \"Divider line across the page\", apply: insertRule },\n];\n\nexport const toolById = (id: string): Tool => TOOLS.find((t) => t.id === id)!;\n\n/** Which toggle tools the caret is currently inside, so their buttons can light up. */\nexport function activeTools(s: string, a: number, b: number): Set<string> {\n const on = new Set<string>();\n const sel = s.slice(a, b);\n const wrapped = (m: string) =>\n (s.slice(a - m.length, a) === m && s.slice(b, b + m.length) === m) ||\n (sel.length >= 2 * m.length && sel.startsWith(m) && sel.endsWith(m));\n if (wrapped(\"**\") || spanAt(s, a, b, /\\*\\*[^*\\n]+\\*\\*/g, 2)) on.add(\"bold\");\n if (wrapped(\"_\") || spanAt(s, a, b, /(?<![\\w_])_[^_\\n]+_(?![\\w_])/g, 1)) on.add(\"italic\");\n if (wrapped(\"`\") || spanAt(s, a, b, /`[^`\\n]+`/g, 1)) on.add(\"code\");\n if (linkAt(s, a, b)) on.add(\"link\");\n if (spanAt(s, a, b, /<([A-Z][\\w]*)\\s[^>]*>[\\s\\S]*?<\\/\\1>/g, 0)) on.add(\"term\");\n const { start, end } = lineSpan(s, a, a);\n const line = s.slice(start, end);\n if (/^##\\s/.test(line)) on.add(\"h2\");\n else if (/^###\\s/.test(line)) on.add(\"h3\");\n else if (/^[-*+]\\s/.test(line)) on.add(\"ul\");\n else if (/^\\d+[.)]\\s/.test(line)) on.add(\"ol\");\n else if (/^>/.test(line)) on.add(\"quote\");\n return on;\n}\n\n/** True when [a,b] lies strictly inside the content of a span matched by `re` (pad = marker length). */\nfunction spanAt(s: string, a: number, b: number, re: RegExp, pad: number): boolean {\n for (const m of s.matchAll(re)) {\n const from = m.index, to = from + m[0].length;\n if (a >= from + pad && b <= to - pad) return true;\n if (from > b) break;\n }\n return false;\n}\n","/**\n * Toolbar glyphs — drawn, not typed, like the report editor: \"H\", \"1.\" and a\n * quotation mark as characters next to real icons is two visual languages for\n * one job. B and I stay as letters because the letterform IS the icon.\n */\n\nimport type { ReactNode } from \"react\";\n\nconst Svg = ({ children, fill = \"none\" }: { children: ReactNode; fill?: string }) => (\n <svg className=\"realiiz-md__ico\" viewBox=\"0 0 24 24\" fill={fill} stroke=\"currentColor\" strokeWidth=\"1.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n {children}\n </svg>\n);\n\nexport const MD_ICONS: Record<string, ReactNode> = {\n bold: <b>B</b>,\n italic: <i>I</i>,\n h2: <Svg><path d=\"M6 5v14\" /><path d=\"M14 5v14\" /><path d=\"M6 12h8\" /><path d=\"M17.5 19v-6.5l-1.6 1.2\" /></Svg>,\n h3: <Svg><path d=\"M5 5v14\" /><path d=\"M12 5v14\" /><path d=\"M5 12h7\" /><path d=\"M16 12.5h3.5l-2 2.2a1.9 1.9 0 1 1-1.5 3.2\" /></Svg>,\n ul: (\n <Svg>\n <line x1=\"9\" y1=\"6.5\" x2=\"20\" y2=\"6.5\" /><line x1=\"9\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"9\" y1=\"17.5\" x2=\"20\" y2=\"17.5\" />\n <circle cx=\"4.6\" cy=\"6.5\" r=\"1.3\" fill=\"currentColor\" stroke=\"none\" /><circle cx=\"4.6\" cy=\"12\" r=\"1.3\" fill=\"currentColor\" stroke=\"none\" /><circle cx=\"4.6\" cy=\"17.5\" r=\"1.3\" fill=\"currentColor\" stroke=\"none\" />\n </Svg>\n ),\n ol: (\n <Svg>\n <line x1=\"10\" y1=\"6.5\" x2=\"20\" y2=\"6.5\" /><line x1=\"10\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"10\" y1=\"17.5\" x2=\"20\" y2=\"17.5\" />\n <path d=\"M4 5.6 5.2 5v3.4\" /><path d=\"M3.6 11.2h1.8L3.6 13.7h1.9\" /><path d=\"M3.7 16.3h1.7v1.2H4.2h1.2v1.2H3.7\" />\n </Svg>\n ),\n quote: (\n <Svg>\n <path d=\"M9 7c-2.4 0-4 1.7-4 4 0 1.9 1.3 3.2 3 3.2.4 0 .8-.1 1-.2-.3 1.4-1.5 2.6-3 3l.7 1.5c2.8-.8 4.8-3.3 4.8-6.6C11.5 8.7 10.5 7 9 7z\" fill=\"currentColor\" stroke=\"none\" />\n <path d=\"M18 7c-2.4 0-4 1.7-4 4 0 1.9 1.3 3.2 3 3.2.4 0 .8-.1 1-.2-.3 1.4-1.5 2.6-3 3l.7 1.5c2.8-.8 4.8-3.3 4.8-6.6C20.5 8.7 19.5 7 18 7z\" fill=\"currentColor\" stroke=\"none\" />\n </Svg>\n ),\n link: <Svg><path d=\"M10 13a5 5 0 0 0 7.5.5l2.5-2.5a5 5 0 0 0-7-7l-1.5 1.4\" /><path d=\"M14 11a5 5 0 0 0-7.5-.5L4 13a5 5 0 0 0 7 7l1.4-1.4\" /></Svg>,\n code: <Svg><path d=\"m8 7-5 5 5 5\" /><path d=\"m16 7 5 5-5 5\" /><path d=\"m14 4-4 16\" /></Svg>,\n // A tooltip: a tall speech bubble with an \"i\" — what the reader will actually see on the page.\n term: (\n <Svg>\n <path d=\"M5 2.5h14a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2h-4.5L12 21.5 9.5 17.5H5a2 2 0 0 1-2-2v-11a2 2 0 0 1 2-2z\" />\n <path d=\"M12 9v4.5\" />\n <circle cx=\"12\" cy=\"6.2\" r=\".9\" fill=\"currentColor\" stroke=\"none\" />\n </Svg>\n ),\n image: <Svg><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" /><circle cx=\"8.5\" cy=\"8.5\" r=\"1.6\" /><path d=\"m21 15-5-5L5 21\" /></Svg>,\n dot: <span className=\"realiiz-md__dot\">·</span>,\n rule: <Svg><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" /></Svg>,\n table: <Svg><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" /><line x1=\"3\" y1=\"9.5\" x2=\"21\" y2=\"9.5\" /><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\" /><line x1=\"12\" y1=\"9.5\" x2=\"12\" y2=\"20\" /></Svg>,\n expand: <Svg><path d=\"M9 3H3v6\" /><path d=\"M15 21h6v-6\" /><path d=\"M3 3l7 7\" /><path d=\"M21 21l-7-7\" /></Svg>,\n contract: <Svg><path d=\"M4 10h6V4\" /><path d=\"M20 14h-6v6\" /><path d=\"M3 3l7 7\" /><path d=\"M21 21l-7-7\" /></Svg>,\n};\n","/**\n * Table size picker — point at a 6×6 grid instead of typing two numbers.\n * The count is body rows; the header is always added on top.\n */\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { MD_ICONS } from \"./icons\";\n\nconst MAX = 6;\n\nexport function TableGrid({ onPick }: { onPick: (rows: number, cols: number) => void }) {\n const [open, setOpen] = useState(false);\n const [hot, setHot] = useState<[number, number]>([0, 0]);\n const wrap = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const away = (e: MouseEvent) => { if (!wrap.current?.contains(e.target as Node)) setOpen(false); };\n const esc = (e: globalThis.KeyboardEvent) => { if (e.key === \"Escape\") setOpen(false); };\n document.addEventListener(\"mousedown\", away);\n document.addEventListener(\"keydown\", esc);\n return () => { document.removeEventListener(\"mousedown\", away); document.removeEventListener(\"keydown\", esc); };\n }, [open]);\n\n const [r, c] = hot;\n const label = r && c ? `${c} column${c === 1 ? \"\" : \"s\"} × ${r} row${r === 1 ? \"\" : \"s\"}` : \"Pick a size\";\n\n return (\n <span className={[\"realiiz-md__tgwrap\", open && \"is-open\"].filter(Boolean).join(\" \")} ref={wrap}>\n <button type=\"button\" data-tool=\"table\" data-tip=\"New table — pick a size\" aria-label=\"Insert a table\" aria-expanded={open} onClick={() => setOpen((o) => !o)}>\n {MD_ICONS.table}\n </button>\n {open && (\n <span className=\"realiiz-md__tgrid\" role=\"dialog\" aria-label=\"Table size\" onMouseLeave={() => setHot([0, 0])}>\n <span className=\"realiiz-md__tgcells\">\n {Array.from({ length: MAX * MAX }, (_, n) => {\n const rr = Math.floor(n / MAX) + 1, cc = (n % MAX) + 1;\n return (\n <i\n key={n}\n className={rr <= r && cc <= c ? \"hot\" : undefined}\n onMouseEnter={() => setHot([rr, cc])}\n onClick={() => { setOpen(false); onPick(rr, cc); }}\n aria-label={`${cc} × ${rr}`}\n role=\"button\"\n />\n );\n })}\n </span>\n <span className=\"realiiz-md__tglab\">{label}</span>\n </span>\n )}\n </span>\n );\n}\n","/**\n * MarkdownEditor — a plain textarea with the report editor's toolbar and a real preview.\n *\n * Shape borrowed from the surveillance-review report editor: a segmented\n * \"Edit Markdown | Preview\" control, one toolbar row (format · link · Insert:\n * image, separator, divider, table) with buttons that TOGGLE and light up when\n * the caret sits in text of that kind, row/column controls that appear only\n * while the caret is in a table, and an Expand button that fills the window\n * (pure CSS, Esc to come back). No rich-text model — the text is the truth.\n *\n * An existing post opens in Preview (read first, then edit); a blank body opens\n * in Edit. Preview is delegated: `renderPreview(markdown)` is supplied by the\n * host site and runs its real pipeline, so what you see is what the blog\n * renders. Without it, the Preview tab is hidden.\n *\n * Edits go through execCommand(\"insertText\") when the browser allows it so the\n * native undo stack survives (assigning .value wipes it); otherwise onChange.\n */\n\nimport { useCallback, useEffect, useRef, useState, type KeyboardEvent } from \"react\";\nimport { activeTools, insertTable, toggleTerm, toolById, type Apply, type Edit, type Tool } from \"./md/edits\";\nimport { applyTableOp, tableAt, type TableOp } from \"./md/table\";\nimport { MD_ICONS } from \"./md/icons\";\nimport { TableGrid } from \"./md/TableGrid\";\n\nexport { TOOLS } from \"./md/edits\";\n\nexport interface MarkdownEditorProps {\n id: string;\n name?: string;\n value: string;\n onChange: (v: string) => void;\n placeholder?: string;\n /** Host-supplied renderer returning HTML. Errors should be returned as `{ error }`. */\n renderPreview?: (markdown: string) => Promise<{ html: string } | { error: string }>;\n /** Extra class on the preview body, e.g. the site's own prose class so it matches the blog. */\n previewClassName?: string;\n minHeight?: number;\n /**\n * Name of the site's tooltip MDX component, e.g. \"Term\" → a toolbar button that wraps the\n * selection as `<Term definition=\"\">word</Term>`. Off unless the site has such a component.\n */\n termComponent?: string;\n}\n\nconst FORMAT = [\"bold\", \"italic\"] as const;\nconst BLOCK = [\"h2\", \"h3\", \"ul\", \"ol\", \"quote\"] as const;\nconst INLINE = [\"link\", \"code\"] as const;\nconst INSERT = [\"image\", \"dot\", \"rule\"] as const;\nconst TABLE_OPS: { op: TableOp; label: string; tip: string }[] = [\n { op: \"rowAfter\", label: \"+ Row\", tip: \"Insert a row below this one\" },\n { op: \"rowDel\", label: \"− Row\", tip: \"Delete this row\" },\n { op: \"colAfter\", label: \"+ Col\", tip: \"Insert a column to the right\" },\n { op: \"colDel\", label: \"− Col\", tip: \"Delete this column\" },\n];\n\nexport function MarkdownEditor({ id, name = \"body\", value, onChange, placeholder, renderPreview, previewClassName, minHeight = 320, termComponent }: MarkdownEditorProps) {\n const [mode, setMode] = useState<\"edit\" | \"preview\">(() => (renderPreview && value.trim() ? \"preview\" : \"edit\"));\n const [preview, setPreview] = useState<{ html: string } | { error: string } | null>(null);\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState(false);\n const [on, setOn] = useState<Set<string>>(() => new Set());\n const [inTable, setInTable] = useState(false);\n const [note, setNote] = useState<string | null>(null);\n const ta = useRef<HTMLTextAreaElement>(null);\n\n const sync = useCallback(() => {\n const el = ta.current;\n if (!el) return;\n setOn(activeTools(el.value, el.selectionStart, el.selectionEnd));\n setInTable(Boolean(tableAt(el.value, el.selectionStart)));\n }, []);\n\n const commit = (edit: Edit) => {\n const el = ta.current;\n if (!el) return;\n const { text, a, b } = edit;\n // Replace only the changed span through insertText so undo keeps working; fall back to a plain set.\n const from = commonPrefix(el.value, text);\n const oldTail = el.value.length - from, newTail = text.length - from;\n const suffix = commonSuffix(el.value.slice(from), text.slice(from));\n const oldEnd = from + oldTail - suffix, newEnd = from + newTail - suffix;\n let ok = false;\n el.focus();\n el.setSelectionRange(from, oldEnd);\n try { ok = document.execCommand(\"insertText\", false, text.slice(from, newEnd)); } catch { ok = false; }\n if (!ok || el.value !== text) onChange(text);\n requestAnimationFrame(() => { el.setSelectionRange(a, b); sync(); });\n };\n\n const run = (apply: Apply) => {\n const el = ta.current;\n if (!el) return;\n commit(apply(value, el.selectionStart, el.selectionEnd));\n };\n\n const runTable = (op: TableOp) => {\n const el = ta.current;\n if (!el) return;\n const r = applyTableOp(value, el.selectionStart, op);\n if (!r) return;\n if (\"error\" in r) { setNote(r.error); return; }\n setNote(null);\n commit(r);\n };\n\n const onKey = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Escape\" && expanded) { e.preventDefault(); setExpanded(false); return; }\n if (!(e.metaKey || e.ctrlKey)) return;\n if (e.key === \"b\") { e.preventDefault(); run(toolById(\"bold\").apply); }\n if (e.key === \"i\") { e.preventDefault(); run(toolById(\"italic\").apply); }\n if (e.key === \"k\") { e.preventDefault(); run(toolById(\"link\").apply); }\n };\n\n useEffect(() => {\n if (!expanded) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n const esc = (e: globalThis.KeyboardEvent) => { if (e.key === \"Escape\") setExpanded(false); };\n document.addEventListener(\"keydown\", esc);\n return () => { document.body.style.overflow = prev; document.removeEventListener(\"keydown\", esc); };\n }, [expanded]);\n\n useEffect(() => {\n if (mode !== \"preview\" || !renderPreview) return;\n let live = true;\n setLoading(true);\n renderPreview(value)\n .then((r) => { if (live) setPreview(r); })\n .catch((err: unknown) => { if (live) setPreview({ error: err instanceof Error ? err.message : String(err) }); })\n .finally(() => { if (live) setLoading(false); });\n return () => { live = false; };\n }, [mode, value, renderPreview]);\n\n const termTool: Tool | null = termComponent\n ? { id: \"term\", title: `Tooltip — wraps the selection in <${termComponent}>`, apply: toggleTerm(termComponent) }\n : null;\n\n const btn = (toolId: string) => {\n const t = toolId === \"term\" && termTool ? termTool : toolById(toolId);\n return (\n <button key={t.id} type=\"button\" data-tool={t.id} data-tip={t.title} aria-label={t.title} aria-pressed={on.has(t.id) || undefined} className={on.has(t.id) ? \"on\" : undefined} onMouseDown={(e) => e.preventDefault()} onClick={() => run(t.apply)}>\n {MD_ICONS[t.id]}\n </button>\n );\n };\n\n return (\n <div className={[\"realiiz-md\", expanded && \"realiiz-md--fs\"].filter(Boolean).join(\" \")}>\n {renderPreview && (\n <span className=\"realiiz-md__mode\" role=\"tablist\" aria-label=\"Editor mode\">\n <button type=\"button\" role=\"tab\" aria-selected={mode === \"edit\"} onClick={() => setMode(\"edit\")}>Edit Markdown</button>\n <button type=\"button\" role=\"tab\" aria-selected={mode === \"preview\"} onClick={() => setMode(\"preview\")}>Preview</button>\n </span>\n )}\n\n <div className=\"realiiz-md__panel\">\n <div className=\"realiiz-md__head\">\n {mode === \"edit\" && (\n <span className=\"realiiz-md__tools\" role=\"toolbar\" aria-label=\"Formatting\">\n {FORMAT.map(btn)}\n <span className=\"realiiz-md__sep\" />\n {BLOCK.map(btn)}\n <span className=\"realiiz-md__sep\" />\n {INLINE.map(btn)}\n {termTool && btn(\"term\")}\n {inTable && (\n <>\n <span className=\"realiiz-md__sep\" />\n {TABLE_OPS.map((t) => (\n <button key={t.op} type=\"button\" data-tbl-op={t.op} data-tip={t.tip} aria-label={t.tip} onMouseDown={(e) => e.preventDefault()} onClick={() => runTable(t.op)}>{t.label}</button>\n ))}\n </>\n )}\n <span className=\"realiiz-md__insert\">\n <span className=\"realiiz-md__lab\">Insert</span>\n {INSERT.map(btn)}\n <TableGrid onPick={(r, c) => run(insertTable(r, c))} />\n </span>\n </span>\n )}\n <span className=\"realiiz-md__spacer\" />\n <button\n type=\"button\"\n className=\"realiiz-md__expand\"\n data-tip={expanded ? \"Back to the normal layout — or press Esc\" : \"Fill the window — Esc to come back\"}\n aria-label={expanded ? \"Exit\" : \"Expand\"}\n onClick={() => setExpanded((x) => !x)}\n >\n {expanded ? MD_ICONS.contract : MD_ICONS.expand}\n </button>\n </div>\n\n {mode === \"edit\" ? (\n <textarea\n ref={ta}\n id={id}\n name={name}\n className=\"realiiz-form__control realiiz-form__control--body realiiz-md__ta\"\n style={expanded ? undefined : { minHeight }}\n value={value}\n placeholder={placeholder}\n onChange={(e) => { onChange(e.target.value); sync(); }}\n onSelect={sync}\n onKeyUp={sync}\n onClick={sync}\n onKeyDown={onKey}\n spellCheck\n />\n ) : (\n <div className=\"realiiz-md__preview\" style={expanded ? undefined : { minHeight }} aria-live=\"polite\" aria-busy={loading}>\n {loading && <div className=\"realiiz-md__loading\">Rendering…</div>}\n {!loading && preview && \"error\" in preview && (\n <div className=\"realiiz-form__alert\" role=\"alert\">Couldn't render: {preview.error}</div>\n )}\n {!loading && preview && \"html\" in preview && (\n <div className={[\"realiiz-prose\", previewClassName].filter(Boolean).join(\" \")} dangerouslySetInnerHTML={{ __html: preview.html }} />\n )}\n </div>\n )}\n </div>\n {note && <div className=\"realiiz-form__helper realiiz-md__note\" role=\"status\">{note}</div>}\n </div>\n );\n}\n\nfunction commonPrefix(a: string, b: string): number {\n const n = Math.min(a.length, b.length);\n let i = 0;\n while (i < n && a[i] === b[i]) i++;\n return i;\n}\nfunction commonSuffix(a: string, b: string): number {\n const n = Math.min(a.length, b.length);\n let i = 0;\n while (i < n && a[a.length - 1 - i] === b[b.length - 1 - i]) i++;\n return i;\n}\n","/**\n * zod issue → { field, key, message }. Pure.\n *\n * The key matches FieldSpec.messages so the schema's own per-check wording is\n * what the client reads. Observed on zod 4.5.4 (see the ADMIN-02b brief):\n * too_small / too_big origin string|array → min_length / max_length\n * origin number → greater_than / less_than\n * when the spec has `exact` → length_equals\n * invalid_format format regex|url|… → that format\n * invalid_type + format safeint (from .int()) → int\n * custom → custom\n * unrecognized_keys path [] , keys: [...] → form-level\n */\n\nimport type { FieldSpec } from \"../forms\";\n\nexport interface FieldIssue {\n /** null for form-level issues. */\n field: string | null;\n key: string;\n message: string;\n}\n\ninterface ZodIssueLike {\n code: string;\n path: PropertyKey[];\n message: string;\n origin?: string;\n format?: string;\n keys?: string[];\n}\n\nexport function mapIssues(issues: ZodIssueLike[], specs: FieldSpec[]): FieldIssue[] {\n const byName = new Map(specs.map((s) => [s.name, s]));\n return issues.map((issue) => {\n const field = typeof issue.path[0] === \"string\" ? issue.path[0] : null;\n const spec = field ? byName.get(field) : undefined;\n const key = keyFor(issue, spec);\n const message =\n (spec?.messages[key] ?? (issue.code === \"unrecognized_keys\" ? unknownKeysMessage(issue) : undefined)) ??\n issue.message;\n return { field, key, message };\n });\n}\n\nfunction keyFor(issue: ZodIssueLike, spec?: FieldSpec): string {\n const numeric = issue.origin === \"number\" || issue.origin === \"int\";\n switch (issue.code) {\n case \"too_small\":\n if (spec?.constraints.exact !== undefined) return \"length_equals\";\n return numeric ? \"greater_than\" : \"min_length\";\n case \"too_big\":\n if (spec?.constraints.exact !== undefined) return \"length_equals\";\n return numeric ? \"less_than\" : \"max_length\";\n case \"invalid_format\":\n return issue.format ?? \"format\";\n case \"invalid_type\":\n return issue.format === \"safeint\" || issue.format === \"int32\" ? \"int\" : \"invalid_type\";\n default:\n return issue.code;\n }\n}\n\nfunction unknownKeysMessage(issue: ZodIssueLike): string {\n const keys = issue.keys ?? [];\n return `This file has ${keys.length === 1 ? \"a field\" : \"fields\"} the site does not recognise: ${keys.join(\", \")}. It was probably edited by hand — remove or rename ${keys.length === 1 ? \"it\" : \"them\"} to continue.`;\n}\n\n/** Group by field for rendering. */\nexport function groupIssues(list: FieldIssue[]): { byField: Map<string, FieldIssue[]>; formLevel: FieldIssue[] } {\n const byField = new Map<string, FieldIssue[]>();\n const formLevel: FieldIssue[] = [];\n for (const i of list) {\n if (i.field === null) formLevel.push(i);\n else byField.set(i.field, [...(byField.get(i.field) ?? []), i]);\n }\n return { byField, formLevel };\n}\n","/**\n * Control strings ↔ frontmatter values. Pure.\n *\n * Controls hold strings (or booleans / Files). The schema wants typed values.\n * `toControl` seeds a control from an existing frontmatter value — including\n * a Date from a previously-parsed file — and `toValue` assembles what goes to\n * safeParse. Anything the schema then coerces (dates) is the schema's business.\n */\n\nimport type { FieldSpec } from \"../forms\";\n\nexport type ControlValue = string | string[] | boolean | File | null;\nexport type FormState = Record<string, ControlValue>;\n\n/** Stand-in path for an image chosen but not yet uploaded — replaced by ADMIN-06. */\nexport const PENDING_UPLOAD_PREFIX = \"pending-upload/\";\n\nexport function toControl(spec: FieldSpec, raw: unknown): ControlValue {\n if (raw === undefined || raw === null) return spec.input === \"boolean\" ? false : \"\";\n switch (spec.input) {\n case \"boolean\":\n return Boolean(raw);\n case \"date\": {\n // <input type=\"date\"> only accepts YYYY-MM-DD; frontmatter often carries a full ISO stamp.\n if (raw instanceof Date) return raw.toISOString().slice(0, 10);\n const s = String(raw);\n return /^\\d{4}-\\d{2}-\\d{2}/.test(s) ? s.slice(0, 10) : s;\n }\n case \"tags\":\n return Array.isArray(raw) ? raw.map(String) : String(raw).split(\",\").map((t) => t.trim()).filter(Boolean);\n default:\n return String(raw);\n }\n}\n\n/** Build the object that goes to schema.safeParse. Empty optional fields are omitted. */\nexport function toFrontmatter(\n specs: FieldSpec[],\n state: FormState,\n hiddenValues: Record<string, unknown>,\n): { frontmatter: Record<string, unknown>; files: Record<string, File> } {\n const frontmatter: Record<string, unknown> = { ...hiddenValues };\n const files: Record<string, File> = {};\n\n for (const spec of specs) {\n if (spec.role === \"hidden\" || spec.role === \"body\") continue;\n const v = state[spec.name];\n\n if (spec.input === \"boolean\") {\n if (v === true) frontmatter[spec.name] = true;\n else if (spec.required) frontmatter[spec.name] = false;\n continue;\n }\n if (v instanceof File) {\n files[spec.name] = v;\n frontmatter[spec.name] = PENDING_UPLOAD_PREFIX + v.name;\n continue;\n }\n if (Array.isArray(v)) {\n if (v.length || spec.required) frontmatter[spec.name] = v;\n continue;\n }\n const s = typeof v === \"string\" ? v.trim() : \"\";\n if (s === \"\") {\n // Required fields are sent empty so the schema's own \"is required\" message fires.\n if (spec.required) frontmatter[spec.name] = spec.input === \"tags\" ? [] : \"\";\n continue;\n }\n switch (spec.input) {\n case \"number\": {\n const n = Number(s);\n frontmatter[spec.name] = Number.isNaN(n) ? s : n;\n break;\n }\n case \"tags\":\n frontmatter[spec.name] = s.split(\",\").map((t) => t.trim()).filter(Boolean);\n break;\n default:\n frontmatter[spec.name] = s;\n }\n }\n return { frontmatter, files };\n}\n","/**\n * ContentForm — a ContentTypeEntry in, validated { frontmatter, body, files } out.\n *\n * Validation runs on submit. After the first failed submit it also re-runs on\n * blur, so the client watches the error clear as they fix it. Before that\n * first submit the form stays quiet — nagging someone who hasn't finished\n * typing is the wrong default for this audience.\n *\n * The schema is the only judge. This component never decides what is valid;\n * it assembles values, calls entry.schema.safeParse, and maps issues back to\n * fields with the schema's own messages.\n */\n\nimport { useCallback, useEffect, useId, useMemo, useRef, useState, type FormEvent, type ReactNode } from \"react\";\nimport type { ContentTypeEntry, FieldSpec } from \"../forms\";\nimport { walkSchema } from \"../forms\";\nimport { Field, type LabelRenderer } from \"./Field\";\nimport { MarkdownEditor, type MarkdownEditorProps } from \"./MarkdownEditor\";\nimport { groupIssues, mapIssues, type FieldIssue } from \"./issues\";\nimport { FORM_CSS } from \"./styles\";\nimport { toControl, toFrontmatter, type ControlValue, type FormState } from \"./values\";\n\nexport interface ContentFormSubmission {\n frontmatter: Record<string, unknown>;\n body: string;\n files: Record<string, File>;\n}\n\nexport interface ContentFormProps {\n entry: ContentTypeEntry;\n initialValues?: Record<string, unknown>;\n initialBody?: string;\n onSubmit: (s: ContentFormSubmission) => void | Promise<void>;\n onCancel?: () => void;\n submitLabel?: string;\n className?: string;\n /**\n * Show the MDX body textarea (the content below the frontmatter). Default\n * true — most types have a body. Pass false for frontmatter-only types such\n * as venues. Independent of entry.body, which names a frontmatter FIELD\n * that should be edited as long text.\n */\n showBody?: boolean;\n bodyLabel?: string;\n /** Host-supplied Markdown/MDX renderer for the Preview tab. Without it the editor is edit-only. */\n renderPreview?: MarkdownEditorProps[\"renderPreview\"];\n previewClassName?: string;\n /** Site tooltip MDX component name (e.g. \"Term\") to expose as a toolbar button. */\n termComponent?: string;\n /**\n * Put Cancel/Save in a bar that the host can pin to the bottom of the page\n * (`.realiiz-form__bar`; the shell makes it sticky). The bar also reports\n * \"Unsaved changes\" / \"No changes yet\", or `status` when the host supplies one.\n */\n stickyBar?: boolean;\n status?: ReactNode;\n /** Extra controls in the bar, before Cancel/Save — e.g. a link to review a pending change. */\n barExtra?: ReactNode;\n /** Rendered after the fields and before the bar — the right place for a quiet destructive action (remove this item). */\n footer?: ReactNode;\n /** Draw a field label that has `.meta({ help })` — pass the site's tooltip component so labels explain themselves. */\n renderLabel?: LabelRenderer;\n /**\n * Fill `target` from `source` while the person types, until they edit `target`\n * themselves — e.g. { source: \"title\", target: \"slug\" } for a web address.\n * Only kicks in when `target` started empty (a new item), never on an existing one.\n */\n derive?: { source: string; target: string; transform?: (value: string) => string };\n /**\n * Warn before leaving with unsaved edits: the browser's own prompt on close/reload,\n * and a confirm on in-app link clicks (which never fire beforeunload). Default true.\n */\n guardUnsaved?: boolean;\n}\n\nconst LEAVE_MESSAGE = \"You have unsaved changes. Leave this page and lose them?\";\n\n/** \"Hello, World! 2026\" → \"hello-world-2026\" — the same rule the blog's slug regex enforces. */\nexport function slugify(s: string): string {\n return s\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\ntype SafeParse = { success: true; data: unknown } | { success: false; error: { issues: Parameters<typeof mapIssues>[0] } };\n\nexport function ContentForm({ entry, initialValues = {}, initialBody = \"\", onSubmit, onCancel, submitLabel = \"Save\", className, showBody = true, bodyLabel = \"Content\", renderPreview, previewClassName, termComponent, stickyBar = false, status, barExtra, footer, renderLabel, derive, guardUnsaved = true }: ContentFormProps) {\n const formId = useId();\n const specs = useMemo(() => walkSchema(entry.schema, entry), [entry]);\n const visible = useMemo(() => specs.filter((s) => s.role !== \"hidden\" && s.role !== \"body\"), [specs]);\n const bodySpec = specs.find((s) => s.role === \"body\");\n // Main section first, then each registry group in its own fieldset, fields in the group's order.\n const sections = useMemo(() => {\n const groups = entry.groups ?? [];\n const grouped = new Set(groups.flatMap((g) => g.fields));\n const byName = new Map(visible.map((s) => [s.name, s]));\n const main = { label: entry.singular ?? entry.label, fields: visible.filter((s) => !grouped.has(s.name)) };\n const rest = groups\n .map((g) => ({ label: g.label, fields: g.fields.map((n) => byName.get(n)).filter((s): s is FieldSpec => Boolean(s)) }))\n .filter((g) => g.fields.length > 0);\n return [main, ...rest];\n }, [visible, entry.groups, entry.label, entry.singular]);\n\n const initialState = useMemo<FormState>(() => Object.fromEntries(specs.map((s) => [s.name, toControl(s, initialValues[s.name])])), [specs, initialValues]);\n const [state, setState] = useState<FormState>(initialState);\n // Derivation runs only while the target is untouched AND started empty (a new item).\n const [deriving, setDeriving] = useState(() => Boolean(derive && !initialState[derive.target]));\n const update = (name: string, v: ControlValue) =>\n setState((st) => {\n const next = { ...st, [name]: v };\n if (derive && deriving && name === derive.source && typeof v === \"string\") {\n next[derive.target] = (derive.transform ?? slugify)(v);\n }\n return next;\n });\n const onFieldChange = (name: string, v: ControlValue) => {\n if (derive && deriving && name === derive.target) setDeriving(false);\n update(name, v);\n };\n const [body, setBody] = useState(initialBody);\n const dirty = body !== initialBody || specs.some((s) => !sameValue(state[s.name], initialState[s.name]));\n const [issues, setIssues] = useState<FieldIssue[]>([]);\n const [attempted, setAttempted] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const [options, setOptions] = useState<Record<string, string[] | \"loading\">>({});\n\n // Hidden fields (and any initial key with no spec) ride through untouched.\n const hiddenValues = useMemo(() => {\n const shown = new Set(visible.map((s) => s.name));\n if (bodySpec) shown.add(bodySpec.name);\n return Object.fromEntries(Object.entries(initialValues).filter(([k]) => !shown.has(k)));\n }, [initialValues, visible, bodySpec]);\n\n // Resolve function option sources once, on mount.\n useEffect(() => {\n let live = true;\n for (const s of visible) {\n if (typeof s.options !== \"function\") continue;\n setOptions((o) => ({ ...o, [s.name]: \"loading\" }));\n Promise.resolve(s.options()).then((list) => {\n if (live) setOptions((o) => ({ ...o, [s.name]: list }));\n });\n }\n return () => {\n live = false;\n };\n }, [visible]);\n\n // Leaving with edits: native prompt for close/reload, a confirm for same-app links (client routers skip beforeunload).\n const leaving = useRef(false);\n useEffect(() => {\n if (!guardUnsaved || !dirty || submitting) return;\n const onUnload = (e: BeforeUnloadEvent) => { if (!leaving.current) { e.preventDefault(); e.returnValue = LEAVE_MESSAGE; } };\n const onClick = (e: MouseEvent) => {\n const a = (e.target as HTMLElement | null)?.closest?.(\"a[href]\") as HTMLAnchorElement | null;\n if (!a || a.target === \"_blank\" || e.defaultPrevented || e.metaKey || e.ctrlKey) return;\n if (a.origin !== window.location.origin) return;\n if (!window.confirm(LEAVE_MESSAGE)) { e.preventDefault(); e.stopPropagation(); }\n else leaving.current = true;\n };\n window.addEventListener(\"beforeunload\", onUnload);\n document.addEventListener(\"click\", onClick, true);\n return () => { window.removeEventListener(\"beforeunload\", onUnload); document.removeEventListener(\"click\", onClick, true); };\n }, [guardUnsaved, dirty, submitting]);\n\n const validate = useCallback((): SafeParse => {\n const { frontmatter } = toFrontmatter(specs, state, hiddenValues);\n const result = (entry.schema as { safeParse: (v: unknown) => SafeParse }).safeParse(frontmatter);\n setIssues(result.success ? [] : mapIssues(result.error.issues, specs));\n return result;\n }, [entry.schema, specs, state, hiddenValues]);\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n if (submitting) return;\n setAttempted(true);\n const result = validate();\n if (!result.success) return;\n const { files } = toFrontmatter(specs, state, hiddenValues);\n setSubmitting(true);\n try {\n await onSubmit({ frontmatter: result.data as Record<string, unknown>, body, files });\n } finally {\n setSubmitting(false);\n }\n };\n\n const { byField, formLevel } = groupIssues(issues);\n const optionsFor = (s: FieldSpec) => options[s.name] ?? (Array.isArray(s.options) ? s.options : undefined);\n\n return (\n <form className={[\"realiiz-form\", className].filter(Boolean).join(\" \")} onSubmit={handleSubmit} noValidate data-realiiz-content-form={entry.id}>\n <style>{FORM_CSS}</style>\n\n {formLevel.length > 0 && (\n <div className=\"realiiz-form__alert\" role=\"alert\">\n <strong>This can't be saved yet.</strong>\n <ul>{formLevel.map((i, n) => <li key={n}>{i.message}</li>)}</ul>\n </div>\n )}\n\n {sections.map((sec) => (\n <fieldset key={sec.label}>\n <legend>{sec.label}</legend>\n {sec.fields.map((s) => (\n <Field key={s.name} formId={formId} spec={s} value={state[s.name]} issues={byField.get(s.name) ?? []}\n current={typeof initialValues[s.name] === \"string\" ? (initialValues[s.name] as string) : undefined}\n options={optionsFor(s)}\n renderLabel={renderLabel}\n onChange={(v: ControlValue) => onFieldChange(s.name, v)}\n onBlur={() => { if (attempted) validate(); }} />\n ))}\n </fieldset>\n ))}\n\n {(showBody || bodySpec) && (\n <fieldset>\n <legend>{bodySpec?.label ?? bodyLabel}</legend>\n {/* The legend already names this section; the label stays for assistive tech only. */}\n <label className=\"realiiz-form__label realiiz-sr-only\" htmlFor={`${formId}-body`}>{bodySpec?.label ?? bodyLabel}</label>\n <MarkdownEditor\n id={`${formId}-body`}\n value={body}\n onChange={setBody}\n placeholder={bodySpec?.placeholder ?? \"Write in Markdown. Headings with ##, links as [text](url).\"}\n renderPreview={renderPreview}\n previewClassName={previewClassName}\n termComponent={termComponent}\n />\n </fieldset>\n )}\n\n {/* Sole child of its own box: a server-created element dropped straight into this children array trips React's key check. */}\n {footer && <div className=\"realiiz-form__footer\">{footer}</div>}\n\n <div className={stickyBar ? \"realiiz-form__bar\" : \"realiiz-form__actions\"} data-dirty={dirty || undefined}>\n {stickyBar && (\n <span className=\"realiiz-form__status\" role=\"status\">\n {status ?? (dirty ? \"Unsaved changes\" : \"No changes yet\")}\n </span>\n )}\n {stickyBar && barExtra}\n {onCancel && <button type=\"button\" className=\"realiiz-form__button\" onClick={onCancel}>Cancel</button>}\n <button type=\"submit\" className=\"realiiz-form__button realiiz-form__button--primary\" disabled={submitting}>\n {submitting ? `${submitLabel}…` : submitLabel}\n </button>\n </div>\n </form>\n );\n}\n\nfunction sameValue(a: ControlValue | undefined, b: ControlValue | undefined): boolean {\n if (Array.isArray(a) && Array.isArray(b)) return a.length === b.length && a.every((v, i) => v === b[i]);\n return a === b;\n}\n"]}
|
package/dist/git/index.cjs
CHANGED
|
@@ -114,8 +114,9 @@ async function deleteBranch(ctx, branch) {
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
// src/git/files.ts
|
|
117
|
-
async function writeFiles(ctx, branch, files, message) {
|
|
118
|
-
|
|
117
|
+
async function writeFiles(ctx, branch, files, message, opts = {}) {
|
|
118
|
+
const remove = opts.remove ?? [];
|
|
119
|
+
if (files.length === 0 && remove.length === 0) throw new Error("writeFiles: no files given");
|
|
119
120
|
const base = repoPath(ctx);
|
|
120
121
|
const parentSha = await getBranchSha(ctx, branch);
|
|
121
122
|
const tree = [];
|
|
@@ -130,6 +131,7 @@ async function writeFiles(ctx, branch, files, message) {
|
|
|
130
131
|
tree.push({ path: file.path, mode: "100644", type: "blob", content: file.content });
|
|
131
132
|
}
|
|
132
133
|
}
|
|
134
|
+
for (const path of remove) tree.push({ path, mode: "100644", type: "blob", sha: null });
|
|
133
135
|
const newTree = await ghFetchOrThrow(ctx, "POST", `${base}/git/trees`, {
|
|
134
136
|
base_tree: parentSha,
|
|
135
137
|
tree
|
|
@@ -145,7 +147,7 @@ async function writeFiles(ctx, branch, files, message) {
|
|
|
145
147
|
`${base}/git/refs/heads/${encodeURIComponent(branch)}`,
|
|
146
148
|
{ sha: commit.sha, force: false }
|
|
147
149
|
);
|
|
148
|
-
return { branch, commitSha: commit.sha, treeSha: newTree.sha, fileCount: files.length };
|
|
150
|
+
return { branch, commitSha: commit.sha, treeSha: newTree.sha, fileCount: files.length + remove.length };
|
|
149
151
|
}
|
|
150
152
|
|
|
151
153
|
// src/git/pulls.ts
|
|
@@ -161,6 +163,13 @@ async function openPullRequest(ctx, branch, opts) {
|
|
|
161
163
|
async function getPullRequest(ctx, number) {
|
|
162
164
|
return ghFetchOrThrow(ctx, "GET", `${repoPath(ctx)}/pulls/${number}`);
|
|
163
165
|
}
|
|
166
|
+
async function listOpenPullRequests(ctx, opts) {
|
|
167
|
+
const prs = await ghFetchOrThrow(ctx, "GET", `${repoPath(ctx)}/pulls?state=open&per_page=100`);
|
|
168
|
+
return prs.filter((p) => p.head.ref.startsWith(opts.headPrefix)).map((p) => ({ number: p.number, title: p.title, html_url: p.html_url, headSha: p.head.sha, branch: p.head.ref }));
|
|
169
|
+
}
|
|
170
|
+
async function closePullRequest(ctx, number) {
|
|
171
|
+
await ghFetchOrThrow(ctx, "PATCH", `${repoPath(ctx)}/pulls/${number}`, { state: "closed" });
|
|
172
|
+
}
|
|
164
173
|
|
|
165
174
|
// src/git/status.ts
|
|
166
175
|
async function getPullRequestStatus(ctx, number, log = console) {
|
|
@@ -189,7 +198,8 @@ async function getPullRequestStatus(ctx, number, log = console) {
|
|
|
189
198
|
return { state: "pending" };
|
|
190
199
|
}
|
|
191
200
|
if (combined.state === "success" && pr.mergeable_state !== "blocked") {
|
|
192
|
-
|
|
201
|
+
const preview = combined.statuses.find((s) => s.state === "success" && /vercel|netlify|deploy|preview/i.test(s.context) && s.target_url);
|
|
202
|
+
return preview?.target_url ? { state: "green", previewUrl: preview.target_url } : { state: "green" };
|
|
193
203
|
}
|
|
194
204
|
return { state: "pending" };
|
|
195
205
|
}
|
|
@@ -271,10 +281,12 @@ exports.GitHubError = GitHubError;
|
|
|
271
281
|
exports.NotFoundError = NotFoundError;
|
|
272
282
|
exports.StaleBaseError = StaleBaseError;
|
|
273
283
|
exports.TokenScopeError = TokenScopeError;
|
|
284
|
+
exports.closePullRequest = closePullRequest;
|
|
274
285
|
exports.createBranch = createBranch;
|
|
275
286
|
exports.deleteBranch = deleteBranch;
|
|
276
287
|
exports.getPullRequestStatus = getPullRequestStatus;
|
|
277
288
|
exports.listDirectory = listDirectory;
|
|
289
|
+
exports.listOpenPullRequests = listOpenPullRequests;
|
|
278
290
|
exports.mergePullRequest = mergePullRequest;
|
|
279
291
|
exports.openPullRequest = openPullRequest;
|
|
280
292
|
exports.readFile = readFile;
|