@dloizides/poster-render 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/enums/BackgroundStyle.ts","../src/enums/FontSetId.ts","../src/enums/FormatId.ts","../src/enums/LayoutId.ts","../src/enums/PaletteId.ts","../src/enums/PictureAnchor.ts","../src/formats.ts","../src/palettes.ts","../src/fontSets.ts","../src/schema/flierDocSchema.ts","../src/schema/validate.ts","../src/schema/validateFlierDoc.ts","../src/layout/layoutSpecs.ts","../src/layout/geometry.ts","../src/layout/blockGroups.ts","../src/layout/textFlow.ts","../src/render/regions.ts","../src/render/yieldToText.ts","../src/render/fitToFloor.ts","../src/render/render.ts","../src/exportPng.ts","../src/layoutCatalogue.ts","../src/examples/kizombaWorkshop.ts"],"names":["BackgroundStyle","FontSetId","FormatId","LayoutId","PaletteId","PictureAnchor","bottom","r","split","top","text","LINE_HEIGHT","smallest","BASE"],"mappings":";;;AAAO,IAAK,eAAA,qBAAAA,gBAAAA,KAAL;AACL,EAAAA,iBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,iBAAA,MAAA,CAAA,GAAO,MAAA;AAFG,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;;;ACAL,IAAK,SAAA,qBAAAC,UAAAA,KAAL;AACL,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AAHA,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;;;ACAL,IAAK,QAAA,qBAAAC,SAAAA,KAAL;AACL,EAAAA,UAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,UAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,UAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,UAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,UAAA,SAAA,CAAA,GAAU,SAAA;AALA,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;;;ACAL,IAAK,QAAA,qBAAAC,SAAAA,KAAL;AACL,EAAAA,UAAA,cAAA,CAAA,GAAe,eAAA;AACf,EAAAA,UAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,UAAA,eAAA,CAAA,GAAgB,gBAAA;AAChB,EAAAA,UAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,UAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,UAAA,gBAAA,CAAA,GAAiB,kBAAA;AACjB,EAAAA,UAAA,WAAA,CAAA,GAAY,YAAA;AACZ,EAAAA,UAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,UAAA,aAAA,CAAA,GAAc,cAAA;AATJ,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;;;ACAL,IAAK,SAAA,qBAAAC,UAAAA,KAAL;AACL,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AAJG,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;;;ACAL,IAAK,aAAA,qBAAAC,cAAAA,KAAL;AACL,EAAAA,eAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,eAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,eAAA,QAAA,CAAA,GAAS,QAAA;AAHC,EAAA,OAAAA,cAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA;;;ACOL,IAAM,YAAA,GAAuD;AAAA,EAClE,uBAAkB,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,EAC9C,qBAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,EAC7C,yBAAmB,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,EAC/C,uBAAkB,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,EAC9C,2BAAoB,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA;AAC7C;;;ACVO,IAAM,QAAA,GAAiD;AAAA,EAC5D,qBAAkB,EAAE,YAAY,SAAA,EAAW,IAAA,EAAM,WAAW,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,KAAK,SAAA,EAAW,IAAA,EAAM,WAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,EACnK,uBAAmB,EAAE,YAAY,SAAA,EAAW,IAAA,EAAM,WAAW,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,KAAK,SAAA,EAAW,IAAA,EAAM,WAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,EACpK,mBAAiB,EAAE,YAAY,SAAA,EAAW,IAAA,EAAM,WAAW,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,KAAK,SAAA,EAAW,IAAA,EAAM,WAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,EAClK,qBAAkB,EAAE,YAAY,SAAA,EAAW,IAAA,EAAM,WAAW,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,KAAK,SAAA,EAAW,IAAA,EAAM,WAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA;AAC3J;;;ACLO,IAAM,SAAA,GAAkD;AAAA,EAC7D,CAAA,SAAA,iBAAqB,EAAE,OAAA,EAAS,wCAAwC,MAAA,EAAQ,uBAAA,EAAyB,MAAM,uBAAA,EAAwB;AAAA,EACvI,CAAA,QAAA,gBAAoB,EAAE,OAAA,EAAS,4CAA4C,MAAA,EAAQ,wBAAA,EAA0B,MAAM,0BAAA,EAA2B;AAAA,EAC9I,CAAA,SAAA,iBAAqB,EAAE,OAAA,EAAS,6BAA6B,MAAA,EAAQ,mBAAA,EAAqB,MAAM,oBAAA;AAClG;;;ACCA,IAAM,KAAA,GAAQ,EAAA;AACd,IAAM,IAAA,GAAO,GAAA;AACb,IAAM,QAAA,GAAW,CAAA;AACjB,IAAM,SAAA,GAAY,CAAA;AAClB,IAAM,UAAA,GAAa,CAAA;AACnB,IAAM,SAAA,GAAY,CAAA;AAClB,IAAM,SAAA,GAAY,GAAA;AAElB,IAAM,IAAA,GAAO,CAAC,SAAA,MAAmC,EAAE,MAAM,QAAA,EAAU,SAAA,EAAW,GAAG,SAAA,EAAU,CAAA;AAE3F,IAAM,WAAA,GAA0B;AAAA,EAC9B,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,CAAC,OAAA,EAAS,MAAM,CAAA;AAAA,EAC1B,oBAAA,EAAsB,KAAA;AAAA,EACtB,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA,EAAG,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AACpD,CAAA;AAEA,IAAM,YAAA,GAA2B,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,WAAA,EAAa,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,QAAA,EAAS;AAEtG,IAAM,MAAA,GAAqB;AAAA,EACzB,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,CAAC,OAAO,CAAA;AAAA,EAClB,oBAAA,EAAsB,KAAA;AAAA,EACtB,UAAA,EAAY;AAAA,IACV,KAAA,EAAO,KAAK,KAAK,CAAA;AAAA,IACjB,WAAA,EAAa,KAAK,KAAK,CAAA;AAAA,IACvB,MAAA,EAAQ,KAAK,KAAK,CAAA;AAAA,IAClB,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,SAAA,EAAU;AAAA,IAC7E,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,OAAA;AAAA,MACN,QAAA,EAAU,CAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAC,QAAA,EAAU,OAAO,CAAA;AAAA,QAC5B,oBAAA,EAAsB,KAAA;AAAA,QACtB,UAAA,EAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,EAAG,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA;AAAE;AACxD,KACF;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,CAAC,SAAA,EAAW,OAAO,CAAA;AAAA,MAC7B,oBAAA,EAAsB,KAAA;AAAA,MACtB,YAAY,EAAE,OAAA,EAAS,KAAK,KAAK,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,KAAK,IAAI,CAAA,EAAG,UAAU,CAAA,EAAG,QAAA,EAAU,UAAS;AAAE,KACnH;AAAA,IACA,MAAA,EAAQ,KAAK,IAAI;AAAA;AAErB,CAAA;AAEO,IAAM,cAAA,GAA6B;AAAA,EACxC,OAAA,EAAS,8CAAA;AAAA,EACT,GAAA,EAAK,iDAAA;AAAA,EACL,KAAA,EAAO,UAAA;AAAA,EACP,WAAA,EAAa,wFAAA;AAAA,EACb,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,CAAC,SAAA,EAAW,QAAA,EAAU,UAAU,SAAA,EAAW,OAAA,EAAS,cAAc,QAAQ,CAAA;AAAA,EACpF,oBAAA,EAAsB,KAAA;AAAA,EACtB,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAE;AAAA,IACpB,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,IACxD,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,IACxD,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAE;AAAA,IAC1D,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAE;AAAA,IACxD,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA,EAAE;AAAA,IACnE,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,CAAC,SAAA,EAAW,QAAA,EAAU,OAAO,CAAA;AAAA,MACvC,oBAAA,EAAsB,KAAA;AAAA,MACtB,UAAA,EAAY;AAAA,QACV,OAAA,EAAS,KAAK,KAAK,CAAA;AAAA,QACnB,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,EAAE;AAAA,QAC7D,OAAO,EAAE,IAAA,EAAM,UAAU,OAAA,EAAS,SAAA,EAAW,SAAS,CAAA;AAAE;AAC1D,KACF;AAAA,IACA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,CAAC,SAAS,CAAA,EAAG,oBAAA,EAAsB,KAAA,EAAO,YAAY,EAAE,OAAA,EAAS,IAAA,CAAK,KAAK,GAAE,EAAE;AAAA,IACjH,MAAA;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,QAAA,EAAU,CAAA;AAAA,MACV,QAAA,EAAU,SAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAC,MAAA,EAAQ,UAAU,CAAA;AAAA,QAC7B,oBAAA,EAAsB,KAAA;AAAA,QACtB,UAAA,EAAY,EAAE,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA,EAAG,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA;AAAE;AAC9E;AACF;AAEJ;;;AC/FO,IAAM,QAAA,GAAW,CAAC,CAAA,KAAuB;AAC9C,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,UAAU,OAAO,CAAA;AAC7C,CAAA;AAEA,IAAM,IAAA,GAAO,CAAC,IAAA,EAAc,GAAA,KAAyB,IAAA,KAAS,KAAK,GAAA,GAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AACvF,IAAM,IAAA,GAAO,CAAC,CAAA,KAAuB,IAAA,CAAK,UAAU,CAAC,CAAA,IAAK,SAAS,CAAC,CAAA;AAEpE,IAAM,OAAA,GAAkC,EAAE,MAAA,EAAQ,WAAA,EAAa,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,UAAA,EAAY,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAS,YAAA,EAAa;AAEhJ,SAAS,WAAA,CAAY,QAAoB,KAAA,EAAyB;AAChE,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,MAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,IAC/B,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,IAC3D;AACE,MAAA,OAAO,QAAA,CAAS,KAAK,CAAA,KAAM,MAAA,CAAO,IAAA;AAAA;AAExC;AAEA,SAAS,WAAA,CAAY,MAAA,EAAoB,KAAA,EAAe,IAAA,EAAc,MAAA,EAAwB;AAC5F,EAAA,IAAI,MAAA,CAAO,cAAc,MAAA,IAAa,KAAA,CAAM,MAAK,CAAE,MAAA,GAAS,OAAO,SAAA,EAAW;AAC5E,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,mBAAA,CAAqB,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,OAAO,SAAA,KAAc,MAAA,IAAa,KAAA,CAAM,MAAA,GAAS,OAAO,SAAA,EAAW;AACrE,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAI,CAAA,kBAAA,EAAqB,OAAO,SAAS,CAAA,iBAAA,EAAoB,KAAA,CAAM,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,EAC7F;AACF;AAEA,SAAS,WAAA,CAAY,MAAA,EAAoB,KAAA,EAAe,IAAA,EAAc,MAAA,EAAwB;AAC5F,EAAA,IAAI,MAAA,CAAO,OAAA,KAAY,MAAA,IAAa,KAAA,GAAQ,OAAO,OAAA,EAAS;AAC1D,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAI,CAAA,mBAAA,EAAsB,OAAO,OAAO,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EAC1E;AACA,EAAA,IAAI,MAAA,CAAO,OAAA,KAAY,MAAA,IAAa,KAAA,GAAQ,OAAO,OAAA,EAAS;AAC1D,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAI,CAAA,kBAAA,EAAqB,OAAO,OAAO,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EACzE;AACF;AAEA,SAAS,UAAA,CAAW,MAAA,EAAoB,KAAA,EAAkB,IAAA,EAAc,MAAA,EAAwB;AAC9F,EAAA,IAAI,OAAO,QAAA,KAAa,MAAA,IAAa,KAAA,CAAM,MAAA,GAAS,OAAO,QAAA,EAAU;AACnE,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAI,CAAA,qBAAA,EAAwB,OAAO,QAAQ,CAAA,cAAA,EAAiB,KAAA,CAAM,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,EAC5F;AACA,EAAA,IAAI,OAAO,QAAA,KAAa,MAAA,IAAa,KAAA,CAAM,MAAA,GAAS,OAAO,QAAA,EAAU;AACnE,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAI,CAAA,oBAAA,EAAuB,OAAO,QAAQ,CAAA,cAAA,EAAiB,KAAA,CAAM,MAAM,CAAA,CAAA,CAAG,CAAA;AACzF,IAAA;AAAA,EACF;AACA,EAAA,MAAM,aAAa,MAAA,CAAO,KAAA;AAC1B,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,CAAA,KAAM,eAAA,CAAgB,UAAA,EAAY,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAA,EAAK,MAAM,CAAC,CAAA;AAAA,EACvF;AACF;AAEA,SAAS,WAAA,CAAY,MAAA,EAAoB,KAAA,EAAgC,IAAA,EAAc,MAAA,EAAwB;AAC7G,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,IAAc,EAAC;AACpC,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,QAAA,IAAY,EAAC,EAAG;AACvC,IAAA,IAAI,KAAA,CAAM,GAAG,CAAA,KAAM,MAAA,EAAW;AAC5B,MAAA,MAAA,CAAO,KAAK,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,GAAG,CAAC,CAAA,aAAA,CAAe,CAAA;AAAA,IAC/C;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,MAAM,WAAA,GAAc,MAAM,GAAG,CAAA;AAC7B,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,IAAI,MAAA,CAAO,yBAAyB,KAAA,EAAO;AACzC,QAAA,MAAA,CAAO,KAAK,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,GAAG,CAAC,CAAA,gBAAA,CAAkB,CAAA;AAAA,MAClD;AAAA,IACF,CAAA,MAAA,IAAW,UAAU,MAAA,EAAW;AAC9B,MAAA,eAAA,CAAgB,aAAa,KAAA,EAAO,IAAA,CAAK,IAAA,EAAM,GAAG,GAAG,MAAM,CAAA;AAAA,IAC7D;AAAA,EACF;AACF;AAEO,SAAS,eAAA,CAAgB,MAAA,EAAoB,KAAA,EAAgB,IAAA,EAAc,MAAA,EAAwB;AACxG,EAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,IAAA,IAAI,KAAA,KAAU,OAAO,KAAA,EAAO;AAC1B,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,UAAA,EAAa,MAAA,CAAO,KAAK,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,IACrE;AACA,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,WAAA,CAAY,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,UAAA,EAAa,OAAA,CAAQ,MAAA,CAAO,IAAA,IAAQ,QAAQ,CAAC,CAAA,MAAA,EAAS,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA;AAC3F,IAAA;AAAA,EACF;AACA,EAAA,IAAI,OAAO,IAAA,IAAQ,CAAC,OAAO,IAAA,CAAK,QAAA,CAAS,KAAe,CAAA,EAAG;AACzD,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,iBAAA,EAAoB,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA;AACpF,IAAA;AAAA,EACF;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,WAAA,CAAY,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,MAAM,CAAA;AAAA,EACzC,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,IAAA,WAAA,CAAY,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,MAAM,CAAA;AAAA,EACzC,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/B,IAAA,UAAA,CAAW,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,MAAM,CAAA;AAAA,EACxC,CAAA,MAAA,IAAW,QAAA,CAAS,KAAK,CAAA,KAAM,QAAA,EAAU;AACvC,IAAA,WAAA,CAAY,MAAA,EAAQ,KAAA,EAAkC,IAAA,EAAM,MAAM,CAAA;AAAA,EACpE;AACF;;;AC/FO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EAGhC,YAAY,MAAA,EAAkB;AACnC,IAAA,KAAA,CAAM,CAAA,eAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC3C,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;AAGO,SAAS,iBAAiB,KAAA,EAAgC;AAC/D,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,KAAM,QAAA,EAAU;AAChC,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,CAAC,wBAAwB,CAAA,EAAE;AAAA,EACzD;AACA,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,eAAA,CAAgB,cAAA,EAAgB,KAAA,EAAO,EAAA,EAAI,MAAM,CAAA;AACjD,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,IAAI,GAAA,CAAI,iCAA6B,GAAA,CAAI,KAAA,KAAU,UAAa,GAAA,CAAI,KAAA,CAAM,WAAW,CAAA,CAAA,EAAI;AACvF,IAAA,MAAA,CAAO,KAAK,8CAA8C,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,EAAE,EAAA,EAAI,IAAA,EAAM,GAAA,EAAI,GAAI,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAO;AACvE;AAEO,SAAS,aAAA,CAAc,KAAe,MAAA,EAAgC;AAC3E,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,IAAI,OAAA,IAAW,MAAA,CAAO,IAAI,OAAA,CAAQ,OAAO,MAAM,MAAA,EAAW;AAC5D,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iCAAA,EAAoC,GAAA,CAAI,OAAA,CAAQ,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,IAAI,IAAA,IAAQ,MAAA,CAAO,IAAI,IAAA,CAAK,OAAO,MAAM,MAAA,EAAW;AACtD,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,8BAAA,EAAiC,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,MAAA;AACT;;;ACpBA,IAAM,YAAA,GAAe,CAAC,GAAA,EAAW,GAAA,EAAaC,SAAgB,CAAA,KAA4B;AAAA,EACxF,CAAC,GAAG,GAAA,EAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA,EAAGA,OAAAA,GAAS,GAAG,CAAA;AAAA,EACrC,CAAC,GAAA,CAAI,CAAC,IAAI,GAAA,CAAI,CAAC,IAAI,CAAA,EAAG,GAAA,EAAK,IAAI,GAAA,CAAI,CAAC,IAAI,GAAA,CAAI,CAAC,IAAI,CAAA,GAAI,CAAA,EAAGA,UAAS,GAAG;AACtE,CAAA;AAEA,IAAM,QAAA,GAAiB,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAC9C,IAAM,cAAA,GAAuB,CAAC,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG,CAAA;AAChD,IAAM,aAAA,GAAsB,CAAC,KAAA,EAAO,IAAA,EAAM,MAAM,IAAI,CAAA;AAEpD,IAAM,cAAA,GAA6B;AAAA,EACjC,MAAA,EAAQ,CAAC,IAAA,EAAM,IAAA,EAAM,KAAK,GAAG,CAAA;AAAA,EAC7B,IAAA,EAAM,CAAC,IAAA,EAAM,IAAA,EAAM,KAAK,IAAI,CAAA;AAAA,EAC5B,OAAA,EAAS,CAAC,IAAA,EAAM,IAAA,EAAM,KAAK,IAAI,CAAA;AAAA,EAC/B,MAAA,EAAQ,GAAA;AAAA,EACR,MAAA,EAAQ,CAAC,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,EAC3D,IAAA,EAAM;AACR,CAAA;AAEO,IAAM,YAAA,GAAwD;AAAA,EACnE,qBAAiB;AAAA,IACf,QAAA,EAAU,EAAE,MAAA,EAAQ,CAAC,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,CAAC,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA,EAAG,OAAA,EAAS,QAAA,EAAU,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,YAAA,CAAa,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,IAAA,EAAK;AAAA,IAC/K,SAAA,EAAW;AAAA,GACb;AAAA,EACA,2CAA2B;AAAA,IACzB,QAAA,EAAU,EAAE,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAM,IAAA,EAAM,GAAG,CAAA,EAAG,IAAA,EAAM,CAAC,KAAA,EAAO,KAAK,IAAA,EAAM,IAAI,CAAA,EAAG,OAAA,EAAS,CAAC,IAAA,EAAM,KAAK,IAAA,EAAM,GAAG,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE;AAAA,IACzH,SAAA,EAAW,EAAE,MAAA,EAAQ,CAAC,IAAA,EAAM,KAAK,IAAA,EAAM,GAAG,CAAA,EAAG,IAAA,EAAM,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,IAAI,CAAA,EAAG,OAAA,EAAS,CAAC,GAAA,EAAK,MAAM,GAAA,EAAK,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA;AAAE,GAC1H;AAAA,EACA,gCAAsB;AAAA,IACpB,QAAA,EAAU,EAAE,MAAA,EAAQ,CAAC,KAAA,EAAO,GAAA,EAAK,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,CAAC,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG,OAAA,EAAS,cAAA,EAAgB,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,YAAA,CAAa,cAAA,EAAgB,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,IAAA,EAAK;AAAA,IACxL,WAAW,EAAE,GAAG,cAAA,EAAgB,MAAA,EAAQ,CAAC,IAAA,EAAM,IAAA,EAAM,GAAA,EAAK,IAAI,GAAG,OAAA,EAAS,CAAC,MAAM,IAAA,EAAM,GAAA,EAAK,IAAI,CAAA;AAAE,GACpG;AAAA,EACA,oCAAwB;AAAA,IACtB,QAAA,EAAU,EAAE,MAAA,EAAQ,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,IAAI,CAAA,EAAG,OAAA,EAAS,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE;AAAA,IAC3H,SAAA,EAAW,EAAE,MAAA,EAAQ,CAAC,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,CAAC,MAAA,EAAQ,KAAK,IAAA,EAAM,IAAI,CAAA,EAAG,OAAA,EAAS,CAAC,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,CAAC,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA;AAAE,GACrK;AAAA,EACA,oCAAwB;AAAA,IACtB,QAAA,EAAU,EAAE,MAAA,EAAQ,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,GAAG,CAAA,EAAG,IAAA,EAAM,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,GAAG,CAAA,EAAG,OAAA,EAAS,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,IAAA,EAAK;AAAA,IACvI,SAAA,EAAW,EAAE,MAAA,EAAQ,CAAC,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,CAAC,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG,OAAA,EAAS,aAAA,EAAe,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,IAAA;AAAK;AAEjK,CAAA;AAEA,IAAM,IAAI,IAAA,CAAK,KAAA;AAER,IAAM,MAAA,GAAS,CAAC,CAAA,EAAS,CAAA,EAAW,CAAA,KAAoB;AAC7D,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,CAAA,CAAE,CAAC,IAAI,CAAC,CAAA;AACpB,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,CAAA,CAAE,CAAC,IAAI,CAAC,CAAA;AACpB,EAAA,OAAO,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,CAAA,CAAG,EAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,IAAK,CAAC,IAAI,CAAA,EAAG,CAAA,EAAG,CAAA,CAAA,CAAG,CAAA,CAAE,CAAC,CAAA,GAAI,EAAE,CAAC,CAAA,IAAK,CAAC,CAAA,GAAI,CAAA,EAAE;AAC1E,CAAA;;;ACpDA,IAAM,MAAA,GAAS,KAAA;AACf,IAAM,eAAA,GAAkB,GAAA;AACxB,IAAM,gBAAA,GAAmB,IAAA;AACzB,IAAM,gBAAA,GAAmB,GAAA;AACzB,IAAM,cAAA,GAAiB,IAAA;AACvB,IAAM,mBAAA,GAAsB,GAAA;AAC5B,IAAM,aAAa,EAAA,GAAK,IAAA;AACxB,IAAM,aAAA,GAAgB,IAAA;AACtB,IAAM,YAAA,GAAiD;AAAA,EACrD,CAAA,eAAA,sBAAyB,CAAC,GAAA,EAAK,IAAI,CAAA;AAAA,EACnC,CAAA,cAAA,qBAAwB,CAAC,GAAA,EAAK,IAAI,CAAA;AAAA,EAClC,CAAA,MAAA,cAAiB,CAAC,GAAA,EAAK,IAAI;AAC7B,CAAA;AACA,IAAM,QAAA,GAA0C,EAAE,CAAA,KAAA,aAAqB,CAAA,EAAG,yBAAwB,GAAA,EAAK,CAAA,QAAA,gBAAwB,CAAA,EAAE;AAEjI,IAAMC,KAAI,IAAA,CAAK,KAAA;AAEf,SAAS,IAAA,CAAK,CAAA,EAAW,CAAA,EAAW,QAAA,EAA4C;AAC9E,EAAA,MAAM,IAAIA,EAAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EAAG,CAAC,IAAI,MAAM,CAAA;AACnC,EAAA,IAAI,KAAK,CAAA,EAAG;AACV,IAAA,MAAMC,SAAQD,EAAAA,CAAE,CAAA,IAAK,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA,CAAE,CAAA;AACrC,IAAA,MAAME,IAAAA,GAAMF,EAAAA,CAAE,CAAA,GAAI,eAAe,CAAA;AACjC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,CAAA,EAAGE,IAAAA,GAAM,IAAI,CAAA,EAAE;AAAA,MACnD,OAAA,EAAS,EAAE,CAAA,EAAGD,MAAAA,EAAO,CAAA,EAAGC,IAAAA,EAAK,CAAA,EAAG,CAAA,GAAID,MAAAA,EAAO,CAAA,EAAG,CAAA,GAAIC,IAAAA,EAAI;AAAA,MACtD,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAGA,IAAAA,EAAK,CAAA,EAAGD,MAAAA,GAAQ,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,CAAA,GAAIC,OAAM,CAAA,EAAE;AAAA,MACvD,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACA,EAAA,MAAM,QAAQF,EAAAA,CAAE,CAAA,IAAK,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA,CAAE,CAAA;AACrC,EAAA,MAAM,GAAA,GAAMA,EAAAA,CAAE,CAAA,GAAI,gBAAgB,CAAA;AAClC,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,GAAQ,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,GAAA,GAAM,CAAA,EAAE;AAAA,IACnD,OAAA,EAAS,EAAE,CAAA,EAAG,KAAA,EAAO,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAE;AAAA,IAC3C,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,GAAMA,EAAAA,CAAE,IAAI,CAAC,CAAA,EAAG,GAAG,KAAA,GAAQ,CAAA,GAAI,GAAG,CAAA,EAAG,CAAA,GAAI,MAAMA,EAAAA,CAAE,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA,EAAE;AAAA,IAC7E,MAAA,EAAQ;AAAA,GACV;AACF;AAEA,SAAS,MAAA,CAAO,CAAA,EAAW,CAAA,EAAW,KAAA,EAA+B;AACnE,EAAA,MAAM,IAAIA,EAAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EAAG,CAAC,IAAI,MAAM,CAAA;AACnC,EAAA,MAAM,MAAMA,EAAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EAAG,CAAC,IAAI,UAAU,CAAA;AACzC,EAAA,MAAM,IAAA,GAAOA,EAAAA,CAAE,CAAA,GAAI,KAAK,CAAA;AACxB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAIA,EAAAA,CAAE,OAAO,aAAa,CAAA,EAAGA,EAAAA,CAAAA,CAAI,CAAA,GAAIA,GAAE,CAAA,GAAI,cAAc,CAAA,IAAK,KAAA,GAAS,gBAAgB,CAAC,CAAA;AAC1G,EAAA,MAAM,MAAM,CAAA,GAAI,IAAA;AAChB,EAAA,MAAM,GAAA,GAAM,CAAA,GAAIA,EAAAA,CAAAA,CAAG,GAAA,GAAM,KAAK,mBAAmB,CAAA;AACjD,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,GAAA,GAAM,CAAA,EAAE;AAAA,IAC/C,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,GAAA,GAAM,MAAM,GAAA,EAAI;AAAA,IACvD,OAAA,EAAS,EAAE,CAAA,EAAGA,EAAAA,CAAAA,CAAG,CAAA,GAAI,IAAA,IAAQ,CAAC,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,GAAG,IAAA,EAAK;AAAA,IAC1D,MAAA,EAAQ;AAAA,GACV;AACF;AAEA,SAAS,QAAA,CAAS,IAAA,EAAgE,CAAA,EAAW,CAAA,EAA2B;AACtH,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAC,CAAA;AAAA,IAChC,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA,IAC5B,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,GAAG,CAAC,CAAA;AAAA,IAClC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,GAAA,CAAI,CAAC,MAAM,MAAA,CAAO,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IAC/C,IAAA,EAAM,KAAK,IAAA,GAAO,MAAA,CAAO,KAAK,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA,GAAI,MAAA;AAAA,IAC5C,MAAM,IAAA,CAAK;AAAA,GACb;AACF;AAEA,IAAM,MAAA,GAAS,CAAC,IAAA,EAAY,CAAA,MAAqB,EAAE,GAAG,IAAA,EAAM,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,CAAA,EAAE,CAAA;AAG5E,SAAS,QAAA,CAAS,MAAA,EAAkB,CAAA,EAAW,CAAA,EAAW,OAAO,CAAA,EAAmB;AACzF,EAAA,MAAM,QAAA,GAAW,aAAa,MAAM,CAAA;AACpC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,QAAA,CAAS,KAAK,CAAA,GAAI,QAAA,CAAS,WAAW,QAAA,CAAS,SAAA,EAAW,GAAG,CAAC,CAAA;AAAA,EACvE;AACA,EAAA,IAAI,MAAA,KAAA,gBAAA,sBAAmC;AACrC,IAAA,OAAO,MAAA,CAAO,CAAA,EAAG,CAAA,EAAG,gBAAA,GAAmB,IAAI,CAAA;AAAA,EAC7C;AACA,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,CAAA,EAAG,CAAA,EAAG,YAAA,CAAa,MAAM,CAAA,IAAK,CAAC,GAAA,EAAK,IAAI,CAAC,CAAA;AACxD,EAAA,IAAI,MAAA,KAAA,cAAA,oBAAiC;AACnC,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAE,QAAQ,MAAA,CAAO,CAAA,CAAE,QAAQ,CAAC,CAAA,EAAG,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA,EAAG,OAAA,EAAS,OAAO,CAAA,CAAE,OAAA,EAAS,CAAC,CAAA,EAAG,MAAA,EAAQ,CAAA,GAAI,CAAA,CAAE,MAAA,EAAO;AACrH;AAGO,SAAS,YAAA,CAAa,KAAA,EAAoB,MAAA,EAAc,MAAA,EAAuB,QAAgB,KAAA,EAAqB;AACzH,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,KAAA,CAAM,KAAA,EAAO,MAAA,CAAO,CAAA,GAAI,KAAA,CAAM,MAAM,CAAA,GAAI,KAAA;AACtE,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA;AACpC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA;AACrC,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,OAAO,CAAA,GAAI,IAAA,CAAK,OAAO,MAAA,CAAO,CAAA,GAAI,KAAK,MAAM,CAAA;AAAA,IAChD,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,IAAA,CAAK,KAAA,CAAA,CAAO,OAAO,CAAA,GAAI,CAAA,IAAK,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC1GA,IAAM,IAAA,GAAO,GAAA;AACb,IAAM,IAAA,GAAO,GAAA;AACb,IAAM,MAAA,GAAS,GAAA;AACf,IAAM,MAAA,GAAS,GAAA;AAIf,IAAM,MAAA,GAAS,CAAC,CAAA,EAAY,CAAA,MAAqC;AAAA,EAC/D,SAAS,CAACG,KAAAA,EAAM,IAAA,MAAU,EAAE,MAAAA,KAAAA,EAAM,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,MAAM,IAAA,EAAM,IAAA,GAAO,CAAA,EAAG,KAAA,EAAO,EAAE,KAAA,EAAM,CAAA;AAAA,EAChG,OAAO,CAACA,KAAAA,EAAM,IAAA,MAAU,EAAE,MAAAA,KAAAA,EAAM,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,QAAQ,IAAA,EAAM,IAAA,GAAO,CAAA,EAAG,KAAA,EAAO,EAAE,GAAA,EAAI,CAAA;AAAA,EAC9F,QAAQ,CAACA,KAAAA,EAAM,IAAA,MAAU,EAAE,MAAAA,KAAAA,EAAM,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,QAAQ,IAAA,EAAM,IAAA,GAAO,CAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAO,CAAA;AAAA,EACjG,QAAQ,CAACA,KAAAA,EAAM,IAAA,MAAU,EAAE,MAAAA,KAAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,MAAM,IAAA,EAAM,IAAA,GAAO,CAAA,EAAG,KAAA,EAAO,EAAE,GAAA,EAAI,CAAA;AAAA,EAC1F,QAAQ,CAACA,KAAAA,EAAM,IAAA,MAAU,EAAE,MAAAA,KAAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,MAAM,IAAA,EAAM,IAAA,GAAO,CAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAO,CAAA;AAAA,EAC7F,MAAM,CAACA,KAAAA,EAAM,UAAU,EAAE,IAAA,EAAAA,OAAM,IAAA,EAAM,MAAA,EAAQ,QAAQ,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA,EAAG,KAAA,EAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,EAAE,MAAA,EAAO,CAAA;AAAA,EAC1G,MAAM,CAACA,KAAAA,EAAM,IAAA,MAAU,EAAE,MAAAA,KAAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,QAAQ,IAAA,EAAM,IAAA,GAAO,CAAA,EAAG,KAAA,EAAO,EAAE,IAAA,EAAK;AAC7F,CAAA,CAAA;AAEO,SAAS,YAAA,CAAa,GAAA,EAAe,CAAA,EAAY,CAAA,EAAwB;AAC9E,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AACrB,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA;AACd,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,OAAO,GAAG,CAAA,EAAG,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAA,GAAS,EAAE,MAAA,EAAQ,GAAG,CAAA,GAAI,MAAA,EAAW,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,WAAA,EAAa,GAAG,CAAA,GAAI,MAAS,CAAA;AACvJ,EAAA,OAAO,CAAC,EAAE,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAqB,CAAA,KAAM,MAAS,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,CAAA;AACrF;AAEA,SAAS,SAAA,CAAU,IAAA,EAAgB,CAAA,EAAyB,CAAA,EAAsB;AAChF,EAAA,MAAM,QAAoB,CAAC,CAAA,CAAE,SAAS,IAAA,CAAK,IAAA,EAAM,EAAE,CAAa,CAAA;AAChE,EAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,CAAC,GAAA,KAAQ,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,EAAA,EAAK,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,EAAE,CAAa,CAAC,CAAA;AAClG,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,GAAS,IAAA,CAAK,KAAA,EAAO,EAAE,CAAa,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,EAAA,GAAK,CAAA,EAAE;AACnC;AAEA,SAAS,WAAA,CAAY,GAAA,EAAe,CAAA,EAAyB,CAAA,EAAW,UAAA,EAAkC;AACxG,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA;AACd,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,CAAA,CAAE,QAAA,EAAU,OAAA,CAAQ,CAAC,GAAA,KAAQ,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,CAAC,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA,EAAe,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,IAAA,EAAM,EAAE,CAAa,CAAA,EAAG,QAAA,EAAU,EAAA,GAAK,CAAA,EAAG,CAAC,CAAA;AACpJ,EAAA,MAAM,MAAA,GAAA,CAAU,UAAA,GAAa,CAAA,CAAE,MAAA,GAAS,WAAc,EAAC;AACvD,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,CAAC,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,QAAQ,EAAE,CAAA,EAAe,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,KAAA,EAAO,EAAE,CAAa,GAAG,QAAA,EAAU,EAAA,GAAK,CAAA,EAAG,YAAA,EAAc,CAAA,GAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAC,CAAA;AACzL,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,CAAW,GAAA,EAAe,CAAA,EAAyB,CAAA,EAAwB;AAClF,EAAA,MAAM,MAAA,GAAA,CAAU,GAAA,CAAI,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,KAAS,SAAA,CAAU,IAAA,EAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AACpE,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA,CAAO,QAAQ,GAAA,CAAI,CAAC,QAAQ,CAAA,CAAE,MAAA,GAAS,GAAG,GAAA,CAAI,MAAM,IAAI,GAAA,CAAI,KAAK,IAAI,EAAE,CAAa,KAAK,EAAC;AAC7G,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,MAAA,CAAO,KAAK,EAAE,KAAA,EAAO,QAAQ,QAAA,EAAU,EAAA,GAAK,GAAG,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,gBAAA,CAAiB,GAAA,EAAe,CAAA,EAAY,CAAA,EAAwB;AAClF,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AACrB,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,GAAA,MAAS,EAAE,KAAA,EAAO,CAAC,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,MAAA,EAAQ,GAAG,CAAA,EAAe,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,KAAA,EAAO,EAAE,CAAa,CAAA,EAAG,QAAA,EAAU,EAAA,GAAK,CAAA,EAAE,CAAE,CAAA;AAC/J;AAGO,SAAS,UAAA,CAAW,GAAA,EAAe,CAAA,EAAY,CAAA,EAAW,aAAa,IAAA,EAAmB;AAC/F,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AACrB,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA;AACd,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA,KAAA,MAAA;AACnB,EAAA,IAAI,EAAE,KAAA,EAAO;AACX,IAAA,MAAA,CAAO,KAAK,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,GAAG,MAAA,GAAS,EAAA,GAAK,EAAE,CAAa,CAAA,EAAG,UAAU,EAAA,GAAK,CAAA,EAAG,IAAA,EAAM,EAAE,OAAO,CAAA,CAAE,MAAA,EAAQ,QAAQ,CAAA,GAAI,CAAA,IAAK,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,EAAE,OAAO,CAAA,CAAE,MAAA,EAAQ,OAAO,CAAA,CAAE,UAAA,IAAc,CAAA;AAAA,EACpN;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,GAAI,MAAA,GAAS,UAAA,CAAW,GAAA,EAAK,CAAA,EAAG,CAAC,CAAA,GAAI,WAAA,CAAY,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,UAAU,CAAE,CAAA;AACpF,EAAA,IAAI,EAAE,QAAA,EAAU;AACd,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,CAAE,MAAA,GAAS,EAAE,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA,EAAe,GAAG,EAAE,QAAA,CAAS,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,EAAE,IAAA,GAAO,CAAA,EAAG,EAAE,CAAa,CAAC,CAAA;AAC1H,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,QAAA,EAAU,KAAK,CAAA,EAAG,OAAA,EAAS,MAAM,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,CAAC,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,MAAA,EAAQ,EAAE,CAAa,CAAA,EAAG,QAAA,EAAU,GAAG,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,MAAA;AACT;;;ACjCA,IAAM,WAAA,GAAc,GAAA;AACpB,IAAM,aAAA,GAAgB,GAAA;AACtB,IAAM,aAAA,GAAgB,GAAA;AACtB,IAAM,QAAA,GAAW,GAAA;AACjB,IAAM,UAAA,GAAa,GAAA;AACnB,IAAM,IAAA,GAAO,GAAA;AACb,IAAM,cAAA,GAAiB,IAAA;AACvB,IAAM,eAAA,GAAkB,IAAA;AACxB,IAAM,KAAA,GAAQ,IAAA;AACd,IAAM,KAAA,GAAQ,EAAA;AACd,IAAM,UAAA,GAAa,GAAA;AACnB,IAAM,QAAA,GAAW,IAAA;AAEV,IAAM,MAAA,GAAS,CAAC,IAAA,EAAgB,IAAA,EAAc,UAA2B,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,GAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAErH,IAAM,YAAY,OAAmB,EAAE,KAAA,EAAO,IAAI,KAAA,EAAO,EAAC,EAAG,KAAA,EAAO,EAAC,EAAG,OAAA,EAAS,EAAC,EAAG,KAAA,EAAO,EAAC,EAAE,CAAA;AAEtG,IAAM,QAAA,GAAW,CAAC,KAAA,EAAkB,CAAA,KAAsB;AACxD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAC3B,EAAA,OAAO,MAAM,IAAA,IAAQ,KAAA,GAAQ,MAAM,IAAA,GAAO,CAAA,GAAI,cAAc,UAAA,GAAa,CAAA;AAC3E,CAAA;AAEA,SAAS,QAAA,CAAS,IAAA,EAAgB,KAAA,EAAe,CAAA,EAAW,KAAA,EAAuB;AACjF,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,IAAA,GAAO,IAAI,aAAA,GAAgB,CAAA;AAC7D,EAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,GAAO,CAAA,EAAI,IAAA,CAAK,IAAA,IAAQ,QAAQ,MAAA,CAAA,GAAW,IAAA,CAAK,IAAI,KAAA,EAAO,CAAC,CAAC,CAAC,CAAA;AACjG;AAEA,SAAS,UAAA,CAAW,CAAA,EAAa,CAAA,EAAW,KAAA,EAA8B;AACxE,EAAA,IAAI,CAAC,CAAA,CAAE,KAAA,CAAM,OAAA,EAAS;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA,CAAK,IAAI,GAAG,CAAA,CAAE,MAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM,QAAA,CAAS,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,EAAG,GAAG,KAAK,CAAA,GAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAC3G;AAEA,SAAS,UAAU,KAAA,EAAkB,CAAA,EAAW,CAAA,EAAW,OAAA,EAAiB,YAAoB,GAAA,EAAgC;AAC9H,EAAA,IAAI,CAAC,KAAA,CAAM,IAAA,IAAQ,CAAA,IAAK,CAAA,EAAG;AACzB,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAQ,UAAA,GAAa,OAAA;AAC3B,EAAA,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,KAAA,GAAQ,CAAA,IAAK,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAA;AACxI,EAAA,OAAO,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,CAAC,CAAA;AACpC;AAEA,SAAS,UAAA,CAAW,CAAA,EAAa,CAAA,EAAW,GAAA,EAAe,IAAY,GAAA,EAAgC;AACrG,EAAA,MAAM,EAAE,OAAM,GAAI,CAAA;AAClB,EAAA,IAAI,CAAA,GAAI,EAAA;AACR,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,GAAA,EAAK,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,EAAE,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,IAAI,UAAA,EAAY,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAA;AACnH,IAAA,CAAA,IAAK,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,QAAA;AAAA,EAC/B;AACA,EAAA,MAAM,MAAM,KAAA,CAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,CAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,CAAA;AACZ,EAAA,CAAA,IAAK,GAAA;AACL,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,KAAA,EAAO,CAAC,CAAA;AAC3B,EAAA,MAAM,UAAA,GAAa,CAAA,GAAI,CAAA,GAAI,CAAA,IAAK,IAAI,QAAA,CAAA,GAAY,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,CAAA,GAAI,CAAA,GAAI,GAAA,GAAM,UAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA;AACpC,EAAA,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,CAAA,KAAM;AAC/B,IAAA,MAAM,IAAA,GAAO,KAAA,KAAU,IAAA,GAAO,QAAA,CAAS,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA,GAAI,KAAK,IAAA,GAAO,KAAA;AACvF,IAAA,MAAM,UAAU,IAAA,CAAK,MAAA,GAAS,KAAK,IAAA,GAAO,CAAA,GAAI,gBAAgB,CAAA,IAAK,UAAA;AACnE,IAAA,MAAM,KAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,IAAK,OAAQ,IAAA,CAAK,IAAA;AAC7C,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,GAAQ,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,CAAA,GAAI,GAAA,GAAM,CAAA,GAAI,GAAA,CAAI,CAAA,GAAI,GAAA,GAAM,MAAA;AAC9D,IAAA,GAAA,EAAK,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,KAAK,IAAA,EAAM,IAAA,EAAM,IAAI,KAAA,EAAO,IAAA,CAAK,OAAO,GAAA,EAAK,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,IAAA,GAAO,WAAA,IAAe,CAAA;AACzG,IAAA,IAAI,IAAA,CAAK,UAAU,GAAA,EAAK;AACtB,MAAA,GAAA,CAAI,OAAA,CAAQ,KAAK,EAAE,CAAA,EAAG,IAAI,CAAA,GAAI,GAAA,GAAM,OAAO,aAAA,EAAe,CAAA,EAAG,IAAK,IAAA,GAAO,WAAA,GAAe,GAAG,CAAA,EAAG,IAAA,GAAO,eAAe,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAAA,IAC1I;AACA,IAAA,CAAA,IAAK,IAAA,GAAO,WAAA;AAAA,EACd,CAAC,CAAA;AACD,EAAA,CAAA,GAAI,SAAA,CAAU,OAAO,CAAA,EAAG,GAAA,CAAI,IAAI,GAAA,EAAK,GAAA,GAAM,GAAA,EAAK,CAAA,EAAG,GAAG,CAAA;AACtD,EAAA,CAAA,IAAK,GAAA;AACL,EAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,SAAA,EAAW;AACjC,IAAA,CAAA,IAAK,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,QAAA,GAAW,CAAA,CAAA;AACzC,IAAA,GAAA,EAAK,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,EAAE,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,IAAI,UAAA,EAAY,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAA;AACnH,IAAA,CAAA,IAAK,KAAA,CAAM,KAAK,MAAA,GAAS,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,GAAA,EAAK,KAAA,CAAM,QAAQ,EAAE,IAAA,EAAM,EAAE,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,GAAI,GAAA,IAAO,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAA;AAAA,EAClG;AACA,EAAA,OAAO,CAAA,GAAI,KAAA,CAAM,QAAA,GAAW,CAAA,GAAI,EAAA;AAClC;AAEA,SAAS,YAAY,MAAA,EAAoB,CAAA,EAAW,GAAA,EAAe,GAAA,EAAwB,SAAS,CAAA,EAAW;AAC7G,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,CAAA,IAAK,UAAA,CAAW,GAAG,CAAA,EAAG,GAAA,EAAK,IAAI,CAAA,GAAI,CAAA,EAAG,GAAG,CAAA,GAAI,MAAA;AAAA,EAC/C;AACA,EAAA,OAAO,CAAA,GAAI,MAAA;AACb;AAEA,IAAM,YAAY,CAAC,OAAA,EAAmB,IAAA,EAAc,EAAA,KAAuB,QAAQ,KAAA,CAAM,IAAA,EAAM,EAAE,CAAA,CAAE,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,GAAG,CAAC,CAAA;AAE5H,IAAM,OAAA,GAAU,CAAC,OAAA,EAAmB,GAAA,KAAwB;AAC1D,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAC5D,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAC1D,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAC7B,CAAA;AAEA,SAAS,YAAA,CAAa,MAAA,EAAoB,OAAA,EAAmB,GAAA,EAAqB;AAChF,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAuB,MAAA,CAAO,IAAI,CAAC,CAAA,EAAG,MAAM,YAAA,KAAiB,IAAA;AAC7E,EAAA,IAAI,IAAA,GAAO,GAAA;AACX,EAAA,OAAO,IAAA,GAAO,CAAA,IAAK,MAAA,CAAO,IAAI,CAAA,EAAG;AAAC,IAAA,IAAA,EAAA;AAAA,EAAO;AACzC,EAAA,IAAI,GAAA,GAAM,GAAA;AACV,EAAA,OAAO,MAAM,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,GAAG,CAAA,EAAG;AAAC,IAAA,GAAA,EAAA;AAAA,EAAM;AACtD,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,EAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,MAAA,CAAO,CAAC,CAAC,CAAA;AACvD,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,UAAA,CAAW,MAAA,CAAO,CAAC,IAAA,EAAM,MAAO,OAAA,CAAQ,OAAA,EAAS,CAAC,CAAA,GAAI,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA,GAAI,IAAI,IAAK,CAAA;AACjG;AAIA,SAAS,YAAA,CAAa,QAAoB,IAAA,EAAyB;AACjE,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,IAAI,CAAA;AACpC,EAAA,MAAM,CAAA,GAAA,CAAK,IAAA,CAAK,CAAA,GAAI,GAAA,IAAO,CAAA;AAC3B,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,CAAC,MAAM,UAAA,CAAW,CAAA,EAAG,CAAA,EAAG,EAAE,GAAG,IAAA,EAAM,CAAA,EAAE,EAAG,CAAA,EAAG,IAAI,CAAC,CAAA;AAC3E,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,OAAA,EAAS,CAAA,EAAG,QAAQ,MAAM,CAAA;AAClD,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,IAAI,KAAK,GAAA,CAAI,KAAA,GAAQ,IAAI,SAAA,CAAU,OAAA,EAAS,GAAG,CAAC,CAAC,IAAI,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,GAAI,SAAA,CAAU,SAAS,CAAA,EAAG,GAAG,CAAC,CAAA,EAAG;AACrG,MAAA,GAAA,GAAM,CAAA;AAAA,IACR;AAAA,EACF;AACA,EAAA,GAAA,GAAM,YAAA,CAAa,MAAA,EAAQ,OAAA,EAAS,GAAG,CAAA;AACvC,EAAA,OAAO;AAAA,IACL,EAAE,GAAA,EAAK,EAAE,GAAG,IAAA,EAAM,CAAA,EAAE,EAAG,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpD,EAAE,GAAA,EAAK,EAAE,GAAG,IAAA,EAAM,GAAG,IAAA,CAAK,CAAA,GAAI,CAAA,GAAI,GAAA,EAAK,GAAE,EAAG,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAE,GACxE;AACF;AAEA,SAAS,QAAA,CAAS,SAAkB,KAAA,EAAuB;AACzD,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAuB,OAAA,CAAQ,MAAM,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,QAAQ,CAAA,EAAG,CAAA,CAAE,GAAA,EAAK,IAAI,KAAK,KAAK,CAAA;AACxG,EAAA,IAAI,EAAA,GAAK,KAAA;AACT,EAAA,IAAI,EAAA,GAAK,CAAA;AACT,EAAA,IAAI,IAAA,CAAK,CAAC,CAAA,EAAG;AACX,IAAA,EAAA,GAAK,CAAA;AAAA,EACP;AACA,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,IAAS,EAAA,GAAK,IAAI,CAAA,EAAA,EAAK;AACzC,IAAA,MAAM,GAAA,GAAA,CAAO,KAAK,EAAA,IAAM,CAAA;AACxB,IAAA,IAAI,IAAA,CAAK,GAAG,CAAA,EAAG;AACb,MAAA,EAAA,GAAK,GAAA;AAAA,IACP,CAAA,MAAO;AACL,MAAA,EAAA,GAAK,GAAA;AAAA,IACP;AAAA,EACF;AACA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,WAAA,CAAY,UAAsB,IAAA,EAAiD;AAC1F,EAAA,MAAM,SAAkB,CAAC,EAAE,KAAK,IAAA,EAAM,MAAA,EAAQ,UAAU,CAAA;AACxD,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,MAAA,EAAQ,IAAA,CAAK,CAAC,CAAA;AAClC,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,CAAC,CAAA,GAAI,cAAA,EAAgB;AACxE,IAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,CAAA,EAAG,EAAA,EAAG;AAAA,EAClC;AACA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,EAAU,IAAI,CAAA;AACzC,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,KAAK,CAAA,GAAI,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA,EAAG,CAAC,CAAA,GAAI,IAAA;AAC9C,EAAA,OAAO,MAAA,IAAU,EAAA,GAAK,EAAA,GAAK,eAAA,GAAkB,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA,EAAG,EAAA,EAAG,GAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,GAAG,EAAA,EAAG;AACpG;AAGO,SAAS,IAAA,CAAK,GAAA,EAAoB,MAAA,EAAqB,IAAA,EAAgB,KAAA,EAA4B;AACxG,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACtC,KAAA;AAAA,IACA,MAAA,EAAQ,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AAChC,MAAA,GAAA,CAAI,IAAA,GAAO,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,MAAM,KAAK,CAAA;AACxC,MAAA,OAAO,GAAA,CAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,CAAE,KAAA;AAAA,IACpC,CAAC;AAAA,GACH,CAAE,CAAA;AACF,EAAA,MAAM,EAAE,OAAA,EAAS,CAAA,EAAG,IAAG,GAAI,WAAA,CAAY,UAAU,IAAI,CAAA;AACrD,EAAA,MAAM,MAAM,SAAA,EAAU;AACtB,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,MAAA,EAAQ,EAAA,EAAI,CAAA,CAAE,GAAA,EAAK,IAAI,CAAC,CAAA;AACzE,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,OAAO,CAAA;AAC/B,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,MAAA,EAAQ,EAAA,EAAI,CAAA,CAAE,GAAA,EAAK,GAAA,EAAK,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAA,CAAK,GAAA,IAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,GAAA,CAAA,KAAS,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA,CAAA,GAAK,CAAC,CAAC,CAAA;AACpK,EAAA,MAAM,QAAQ,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAC3C,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AAC1B,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,CAAA,CAAE,IAAA,GAAO,IAAA,GAAO,MAAA,CAAO,IAAA,EAAM,CAAA,CAAE,IAAI,CAAA,GAAI,WAAA,EAAa,KAAK,CAAA,GAAI,CAAA,CAAE,IAAA;AAAA,EACjE,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT;;;AC7NA,IAAMC,YAAAA,GAAc,GAAA;AACpB,IAAM,QAAA,GAAW,EAAA;AAEjB,SAAS,UAAA,CAAW,GAAA,EAAoB,MAAA,EAAqB,MAAA,EAAgB,KAAA,EAA8B;AACzG,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,SAAS,CAAC,CAAA;AACxC,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAO,CAAA,KAAM,CAAA,GAAI,IAAA,CAAK,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK,EAAG,KAAK,CAAE,CAAA;AAC3J;AAEA,SAAS,eAAA,CAAgB,QAAqB,OAAA,EAAiC;AAC7E,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,CAACJ,OAAMA,EAAAA,CAAE,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,CAAI,CAAA,GAAII,YAAW,CAAC,CAAA;AAC9E,EAAA,MAAMC,YAAqB,EAAC;AAC5B,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAA,CAAO,OAAA;AAAA,IAAQ,CAAC,CAAA,KACd,CAAA,CAAE,MAAM,OAAA,CAAQ,CAAC,OAAO,CAAA,KAAM;AAC5B,MAAAA,SAAAA,CAAS,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAIA,SAAAA,CAAS,CAAC,CAAA,IAAK,QAAA,EAAU,KAAA,CAAM,CAAC,CAAA,IAAK,QAAQ,CAAA;AACpE,MAAA,CAAA,EAAA;AAAA,IACF,CAAC;AAAA,GACH;AACA,EAAA,OAAOA,SAAAA;AACT;AAGO,SAAS,WAAA,CAAY,GAAA,EAAoB,MAAA,EAAqB,MAAA,EAAgB,KAAA,EAA8B;AACjH,EAAA,MAAMA,SAAAA,GAAW,gBAAgB,MAAA,EAAQ,UAAA,CAAW,KAAK,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC/E,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,MAAO,EAAE,GAAG,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,EAAMA,SAAAA,CAAS,CAAC,CAAA,IAAK,IAAA,CAAK,IAAI,CAAA,EAAE,CAAE,GAAE,CAAE,CAAA;AAC/I,EAAA,OAAO,UAAA,CAAW,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,KAAK,CAAA;AAC7C;AAEA,SAAS,WAAA,CAAY,GAAe,QAAA,EAA0B;AAC5D,EAAA,MAAM,UAAU,CAAC,GAAG,CAAA,CAAE,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,GAAG,GAAG,CAAA,CAAE,KAAA,CAAM,GAAA,CAAI,CAACL,EAAAA,KAAMA,EAAAA,CAAE,IAAI,CAAA,EAAG,GAAG,CAAA,CAAE,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,CAACA,EAAAA,KAAMA,EAAAA,CAAE,CAAA,GAAIA,GAAE,CAAC,CAAA;AACjI,EAAA,OAAO,QAAQ,MAAA,GAAS,CAAA,GAAI,KAAK,GAAA,CAAI,GAAG,OAAO,CAAA,GAAI,QAAA;AACrD;AAGO,SAAS,aAAA,CAAc,MAAA,EAAkB,GAAA,EAAqB,IAAA,EAAkB,GAAW,KAAA,EAAgD;AAChJ,EAAA,IAAI,MAAA,KAAA,gBAAA,sBAAmC;AACrC,IAAA,OAAO,GAAA,CAAI,OAAA;AAAA,EACb;AACA,EAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,OAAA,CAAQ,GAAG,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,IAAA,EAAM,IAAI,IAAA,CAAK,CAAC,CAAA,GAAI,QAAA,GAAW,CAAC,CAAC,CAAA;AACzF,EAAA,OAAO,EAAE,CAAA,EAAG,GAAA,CAAI,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA,EAAE;AACtE;;;AC1CO,SAAS,WAAA,CAAY,KAAqB,IAAA,EAA8B;AAC7E,EAAA,MAAM,EAAE,OAAA,EAAS,CAAA,EAAG,IAAA,EAAM,GAAE,GAAI,GAAA;AAChC,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,CAAE,CAAA,IAAK,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,EAAG;AACpB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,IAAI,IAAI,CAAA;AAC/B,IAAA,OAAO,EAAE,GAAG,GAAA,EAAK,OAAA,EAAS,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA,EAAE,EAAG,IAAA,EAAM,EAAE,GAAG,GAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,EAAE,EAAE;AAAA,EACzF;AACA,EAAA,IAAI,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,IAAK,EAAE,CAAA,EAAG;AACpB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,IAAI,IAAI,CAAA;AAC/B,IAAA,OAAO,EAAE,GAAG,GAAA,EAAK,OAAA,EAAS,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,EAAE,EAAG,MAAM,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,GAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,EAAE,EAAE;AAAA,EACzF;AACA,EAAA,IAAI,CAAA,CAAE,CAAA,IAAK,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,EAAG;AACpB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,IAAI,IAAI,CAAA;AAC/B,IAAA,MAAM,UAAU,GAAA,CAAI,MAAA,CAAO,IAAI,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AACjD,IAAA,MAAM,WAAW,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA;AAC/C,IAAA,OAAO;AAAA,MACL,GAAG,GAAA;AAAA,MACH,MAAA,EAAQ,EAAE,GAAG,GAAA,CAAI,QAAQ,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,QAAA,EAAS;AAAA,MACpD,OAAA,EAAS,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,EAAE;AAAA,MACxC,IAAA,EAAM,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,QAAA,EAAU,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,GAAI,QAAA,EAAS;AAAA,MACvD,QAAQ,GAAA,CAAI,MAAA,EAAQ,GAAA,CAAI,CAAC,OAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA,GAAI,GAAE,CAAE;AAAA,KACnE;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;;;ACrBO,IAAM,QAAA,GAAW,EAAA;AACxB,IAAM,IAAA,GAAO,IAAA;AACb,IAAMI,YAAAA,GAAc,GAAA;AACpB,IAAM,UAAA,GAAa,IAAA;AACnB,IAAM,SAAA,GAAY,KAAA;AAClB,IAAM,UAAA,GAAa,EAAA;AAkBnB,SAAS,WAAA,CAAY,QAAc,OAAA,EAA8C;AAC/E,EAAA,MAAM,QAAQ,OAAA,GAAU,IAAA,CAAK,MAAM,MAAA,CAAO,CAAA,GAAI,UAAU,CAAA,GAAI,CAAA;AAC5D,EAAA,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,KAAA,GAAQ,GAAA,EAAI,EAAG,MAAM,EAAE,GAAG,MAAA,EAAQ,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,OAAO,CAAA,GAAI,KAAA,EAAO,CAAA,EAAG,KAAA,EAAM,EAAE;AACzH;AAEA,SAAS,OAAA,CAAQ,GAAA,EAAoB,KAAA,EAAiB,GAAA,EAAqB,CAAA,EAAuB;AAChG,EAAA,MAAM,EAAE,GAAA,EAAK,OAAA,EAAS,KAAA,EAAM,GAAI,KAAA;AAChC,EAAA,MAAM,QAAQ,GAAA,CAAI,IAAA,GAAO,EAAE,IAAA,EAAM,IAAI,MAAA,EAAQ,IAAA,EAAM,GAAA,CAAI,IAAA,KAAS,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,GAAA,CAAI,SAAS,MAAS,CAAA;AAC9G,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,EAAK,YAAA,CAAa,GAAA,EAAK,SAAS,CAAC,CAAA,EAAG,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AACvE,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,IAAU,EAAC;AAC9B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,EAAK,UAAA,CAAW,GAAA,EAAK,OAAA,EAAS,CAAA,EAAG,MAAA,CAAO,MAAA,KAAW,CAAC,CAAA,EAAG,GAAA,CAAI,MAAM,KAAK,CAAA;AACxF,EAAA,MAAM,QAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,WAAA,CAAY,KAAK,gBAAA,CAAiB,GAAA,EAAK,OAAA,EAAS,CAAC,GAAG,MAAA,EAAQ,KAAK,CAAA,GAAI,CAAC,WAAW,CAAA;AACnH,EAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,MAAM,KAAA,EAAM;AACzC;AAEA,IAAM,QAAA,GAAW,CAAC,CAAA,KAA0B,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,GAAG,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,GAAG,CAAA,CAAE,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,CAAI,CAAA,GAAIA,YAAW,CAAC,CAAC,CAAA;AAExJ,SAAS,gBAAA,CAAiB,MAAA,EAAkB,KAAA,EAAe,MAAA,EAAgB,IAAA,EAA8B;AACvG,EAAA,OAAO,MAAA,KAAA,gBAAA,uBAAoC,QAAA,CAAS,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,IAAI,CAAA,GAAI,WAAA,CAAY,QAAA,CAAS,MAAA,EAAQ,KAAA,EAAO,MAAM,GAAG,IAAI,CAAA;AACtI;AAGO,SAAS,UAAA,CAAW,KAAoB,KAAA,EAA6B;AAC1E,EAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAO,GAAI,KAAA;AAC/B,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA,GAAI,IAAA;AACpC,EAAA,MAAM,QAAQ,QAAA,GAAW,CAAA;AACzB,EAAA,IAAI,MAAA,GAAS,OAAA,CAAQ,GAAA,EAAK,KAAA,EAAO,gBAAA,CAAiB,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA;AAClF,EAAA,KAAA,IAAS,IAAA,GAAO,GAAG,IAAA,IAAQ,UAAA,IAAc,SAAS,MAAM,CAAA,GAAI,OAAO,IAAA,EAAA,EAAQ;AACzE,IAAA,MAAA,GAAS,OAAA,CAAQ,GAAA,EAAK,KAAA,EAAO,gBAAA,CAAiB,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,IAAA,GAAO,SAAS,CAAA,EAAG,CAAC,CAAA;AAAA,EAC/F;AACA,EAAA,OAAO,MAAA;AACT;;;AClDA,IAAME,KAAAA,GAAO,IAAA;AACb,IAAM,WAAA,GAAc,KAAA;AACpB,IAAM,OAAA,GAAU,IAAA;AAChB,IAAM,UAAA,GAAa,IAAA;AACnB,IAAM,UAAA,GAAa,IAAA;AACnB,IAAM,SAAA,GAAY,IAAA;AAClB,IAAM,QAAA,GAAW,IAAA;AACjB,IAAM,SAAA,GAAY,IAAA;AAClB,IAAM,OAAA,GAAU,IAAA;AAEhB,SAAS,OAAA,CAAQ,GAAA,EAAoBN,EAAAA,EAAS,KAAA,EAAe,KAAA,EAAqB;AAChF,EAAA,MAAM,EAAA,GAAKA,EAAAA,CAAE,CAAA,GAAIA,EAAAA,CAAE,CAAA,GAAI,CAAA;AACvB,EAAA,MAAM,EAAA,GAAKA,EAAAA,CAAE,CAAA,GAAIA,EAAAA,CAAE,CAAA,GAAI,CAAA;AACvB,EAAA,MAAM,EAAA,GAAK,EAAA,GAAKA,EAAAA,CAAE,CAAA,GAAI,UAAA;AACtB,EAAA,MAAM,GAAA,GAAMA,GAAE,CAAA,GAAI,UAAA;AAClB,EAAA,GAAA,CAAI,SAAA,GAAY,KAAA;AAChB,EAAA,GAAA,CAAI,SAAA,EAAU;AACd,EAAA,GAAA,CAAI,GAAA,CAAI,IAAI,EAAA,EAAIA,EAAAA,CAAE,IAAI,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA;AACvC,EAAA,GAAA,CAAI,IAAA,EAAK;AACT,EAAA,GAAA,CAAI,SAAA,GAAY,KAAA;AAChB,EAAA,GAAA,CAAI,SAAA,EAAU;AACd,EAAA,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,EAAA,GAAKA,EAAAA,CAAE,IAAI,SAAS,CAAA;AACnC,EAAA,GAAA,CAAI,GAAA,CAAI,IAAI,EAAA,EAAI,GAAA,EAAK,KAAK,EAAA,GAAK,SAAA,EAAW,IAAA,CAAK,EAAA,GAAK,OAAO,CAAA;AAC3D,EAAA,GAAA,CAAI,SAAA,EAAU;AACd,EAAA,GAAA,CAAI,IAAA,EAAK;AACT,EAAA,GAAA,CAAI,SAAA,GAAY,KAAA;AAChB,EAAA,GAAA,CAAI,SAAA,EAAU;AACd,EAAA,GAAA,CAAI,GAAA,CAAI,IAAI,EAAA,EAAI,GAAA,GAAM,UAAU,CAAA,EAAG,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9C,EAAA,GAAA,CAAI,IAAA,EAAK;AACX;AAEA,SAAS,SAAA,CAAU,GAAA,EAAoBA,EAAAA,EAAS,MAAA,EAAsB;AACpE,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,MAAA,EAAQA,GAAE,CAAA,GAAI,CAAA,EAAGA,EAAAA,CAAE,CAAA,GAAI,CAAC,CAAA;AAC7C,EAAA,GAAA,CAAI,SAAA,EAAU;AACd,EAAA,GAAA,CAAI,MAAA,CAAOA,EAAAA,CAAE,CAAA,GAAI,GAAA,EAAKA,GAAE,CAAC,CAAA;AACzB,EAAA,GAAA,CAAI,KAAA,CAAMA,EAAAA,CAAE,CAAA,GAAIA,EAAAA,CAAE,GAAGA,EAAAA,CAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,GAAIA,GAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,GAAIA,EAAAA,CAAE,GAAG,GAAG,CAAA;AACnD,EAAA,GAAA,CAAI,KAAA,CAAMA,EAAAA,CAAE,CAAA,GAAIA,EAAAA,CAAE,GAAGA,EAAAA,CAAE,CAAA,GAAIA,EAAAA,CAAE,CAAA,EAAGA,GAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,GAAIA,EAAAA,CAAE,GAAG,GAAG,CAAA;AACnD,EAAA,GAAA,CAAI,KAAA,CAAMA,EAAAA,CAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,GAAIA,EAAAA,CAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,EAAG,GAAG,CAAA;AACvC,EAAA,GAAA,CAAI,KAAA,CAAMA,EAAAA,CAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,GAAIA,EAAAA,CAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,EAAG,GAAG,CAAA;AACvC,EAAA,GAAA,CAAI,SAAA,EAAU;AACd,EAAA,GAAA,CAAI,IAAA,EAAK;AACX;AAEA,SAAS,QAAA,CAAS,GAAA,EAAoB,CAAA,EAAe,MAAA,EAAsB;AACzE,EAAA,CAAA,CAAE,KAAA,CAAM,OAAA,CAAQ,CAACA,EAAAA,KAAM;AACrB,IAAA,GAAA,CAAI,YAAYA,EAAAA,CAAE,KAAA;AAClB,IAAA,GAAA,CAAI,QAAA,CAASA,EAAAA,CAAE,IAAA,CAAK,CAAA,EAAGA,EAAAA,CAAE,IAAA,CAAK,CAAA,EAAGA,EAAAA,CAAE,IAAA,CAAK,CAAA,EAAGA,EAAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AAAA,EACrD,CAAC,CAAA;AACD,EAAA,CAAA,CAAE,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,KAAM;AACrB,IAAA,GAAA,CAAI,YAAY,CAAA,CAAE,KAAA;AAClB,IAAA,SAAA,CAAU,GAAA,EAAK,CAAA,CAAE,IAAA,EAAM,MAAM,CAAA;AAAA,EAC/B,CAAC,CAAA;AACD,EAAA,CAAA,CAAE,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM;AACvB,IAAA,GAAA,CAAI,YAAY,CAAA,CAAE,KAAA;AAClB,IAAA,GAAA,CAAI,SAAA,EAAU;AACd,IAAA,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,CAAA,EAAG,CAAA,CAAE,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA;AACrC,IAAA,GAAA,CAAI,IAAA,EAAK;AAAA,EACX,CAAC,CAAA;AACD,EAAA,CAAA,CAAE,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,EAAK,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,KAAA,EAAO,CAAA,CAAE,KAAK,CAAC,CAAA;AAC7D,EAAA,GAAA,CAAI,SAAA,GAAY,MAAA;AAChB,EAAA,GAAA,CAAI,YAAA,GAAe,KAAA;AACnB,EAAA,CAAA,CAAE,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,KAAM;AACrB,IAAA,GAAA,CAAI,OAAO,CAAA,CAAE,IAAA;AACb,IAAA,GAAA,CAAI,YAAY,CAAA,CAAE,KAAA;AAClB,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA,CAAE,IAAI,CAAA,EAAG,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EACvC,CAAC,CAAA;AACH;AAEA,SAAS,OAAA,CAAQ,OAAgB,MAAA,EAAgC;AAC/D,EAAA,MAAM,MAAA,GAAS,iBAAiB,KAAK,CAAA;AACrC,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,MAAM,IAAI,aAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAAA,EACvC;AACA,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,MAAA,CAAO,GAAA,EAAK,MAAM,CAAA;AAChD,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,cAAc,OAAO,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,MAAA,CAAO,GAAA;AAChB;AAEA,SAAS,SAAS,GAAA,EAAkC;AAClD,EAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAW;AAC1B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,CAAA,GAAI,IAAA,CAAK,MAAM,GAAA,CAAI,OAAA,CAAQ,CAAA,GAAI,GAAA,CAAI,IAAI,CAAA;AAC/D,EAAA,OAAO,EAAE,CAAA,EAAG,GAAA,CAAI,QAAQ,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,CAAI,OAAA,CAAQ,CAAA,EAAG,GAAG,GAAA,CAAI,OAAA,CAAQ,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,GAAA,EAAI;AAC9F;AAEA,SAAS,QAAA,CAAS,GAAA,EAAoBA,EAAAA,EAAS,KAAA,EAAqB;AAClE,EAAA,MAAM,GAAA,GAAMA,GAAE,CAAA,GAAI,CAAA;AAClB,EAAA,GAAA,CAAI,SAAA,GAAY,KAAA;AAChB,EAAA,GAAA,CAAI,QAAA,CAASA,EAAAA,CAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,GAAI,KAAKA,EAAAA,CAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,GAAI,GAAG,CAAA;AAC3C,EAAA,GAAA,CAAI,SAAA,EAAU;AACd,EAAA,GAAA,CAAI,GAAA,CAAIA,EAAAA,CAAE,CAAA,GAAI,GAAA,EAAKA,EAAAA,CAAE,CAAA,GAAI,GAAA,EAAK,GAAA,EAAK,IAAA,CAAK,EAAA,EAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA;AACvD,EAAA,GAAA,CAAI,IAAA,EAAK;AACX;AAEA,SAAS,UAAA,CAAW,MAAY,IAAA,EAAwB;AACtD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG,GAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAA,GAAI,KAAA,CAAM,IAAI,OAAO,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,MAAM,IAAA,CAAK,CAAA,GAAI,CAAC,CAAC,CAAA,GAAI,CAAA;AACxH,EAAA,OAAO,EAAE,GAAG,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAI,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,CAAA,GAAI,KAAA,EAAM;AACzD;AAGO,SAAS,MAAA,CAAO,KAAA,EAAgB,MAAA,EAAsB,MAAA,EAAoC;AAC/F,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAA;AACjC,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,YAAA,CAAa,IAAI,MAAM,CAAA;AACjD,EAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AACf,EAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAChB,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AAClC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EAC/D;AACA,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA;AACjC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA,GAAIM,KAAAA;AACpC,EAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,MAAM,KAAA,EAAM,GAAI,UAAA,CAAW,GAAA,EAAK,EAAE,GAAA,EAAK,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,QAAQ,CAAA;AAChG,EAAA,GAAA,CAAI,WAAA,GAAc,CAAA;AAClB,EAAA,GAAA,CAAI,YAAY,OAAA,CAAQ,UAAA;AACxB,EAAA,GAAA,CAAI,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,MAAM,CAAA;AAChC,EAAA,IAAI,IAAI,UAAA,KAAA,MAAA,aAAqC;AAC3C,IAAA,GAAA,CAAI,YAAY,OAAA,CAAQ,IAAA;AACxB,IAAA,CAAC,IAAI,MAAA,EAAQ,GAAA,CAAI,IAAI,CAAA,CAAE,OAAA,CAAQ,CAACN,EAAAA,KAAM,GAAA,CAAI,QAAA,CAASA,EAAAA,CAAE,GAAGA,EAAAA,CAAE,CAAA,EAAGA,GAAE,CAAA,EAAGA,EAAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EACxE;AACA,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA,GAAI,WAAA;AACzC,EAAA,CAAC,IAAA,EAAM,IAAA,EAAM,GAAG,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,QAAA,CAAS,GAAA,EAAK,CAAA,EAAG,MAAM,CAAC,CAAA;AAC9D,EAAA,MAAM,YAAY,GAAA,CAAI,IAAA,GAAO,OAAO,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA,GAAI,MAAA;AACxD,EAAA,MAAM,IAAA,GAAO,SAAA,GAAY,YAAA,CAAa,SAAA,EAAW,IAAI,IAAA,GAAO,KAAA,CAAM,IAAA,GAAO,UAAA,CAAW,MAAM,IAAA,EAAM,IAAI,CAAA,EAAA,KAAA,YAAsB,CAAA,EAAG,CAAC,CAAA,GAAI,IAAA;AAClI,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,GAAA,CAAI,SAAA,CAAU,WAAW,IAAA,CAAK,CAAA,EAAG,KAAK,CAAA,EAAG,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA;AAAA,EACzD;AACA,EAAA,MAAM,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAA,CAAI,OAAA,CAAQ,OAAO,CAAA,GAAI,MAAA;AAC1D,EAAA,MAAM,QAAA,GAAW,KAAA,GAAQ,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA;AACzC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,QAAA,CAAS,GAAA,EAAK,QAAA,EAAU,OAAA,CAAQ,IAAI,CAAA;AAAA,EACtC;AACA,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,MAAA,EAAQ,GAAA,EAAK,MAAM,CAAA,EAAG,EAAS,MAAA,EAAQ,CAAA;AACxE,EAAA,MAAM,OAAA,GAAU,KAAA,IAAS,GAAA,CAAI,OAAA,GAAU,aAAa,KAAA,EAAO,MAAA,EAAQ,GAAA,CAAI,OAAA,CAAQ,QAAQ,GAAA,CAAI,MAAA,EAAQ,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA,GAAI,IAAA;AACxH,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,GAAA,CAAI,SAAA,CAAU,OAAO,OAAA,CAAQ,CAAA,EAAG,QAAQ,CAAA,EAAG,OAAA,CAAQ,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAA;AAAA,EACjE;AACA,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA,EAAe,MAAA;AAAA,IACf,WAAW,CAAC,IAAA,EAAM,IAAA,EAAM,GAAG,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,IAC1E,WAAW,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,IACvC,WAAW,CAAC,IAAA,EAAM,IAAA,EAAM,GAAG,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,IAC3E,IAAA;AAAA,IACA;AAAA,GACF;AACF;;;AChKA,IAAM,MAAA,GAAS,wBAAA;AAGR,SAAS,UAAU,MAAA,EAA6B;AACrD,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,SAAA,CAAU,WAAW,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AACA,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,IAAA,EAAM,aAAa,CAAA;AAChD;;;ACPA,IAAM,UAAU,CAAA,OAAA,cAAA,MAAA,aAAA,QAAA,cAA+C;AAExD,IAAM,gBAAA,GAAoD;AAAA,EAC/D,EAAE,wCAA2B,QAAA,EAAU,KAAA,EAAO,OAAO,eAAA,EAAiB,WAAA,EAAa,mGAAA,EAAqG,OAAA,EAAS,OAAA,EAAQ;AAAA,EACzM,EAAE,sCAA0B,QAAA,EAAU,KAAA,EAAO,OAAO,cAAA,EAAgB,WAAA,EAAa,mGAAA,EAAqG,OAAA,EAAS,OAAA,EAAQ;AAAA,EACvM,EAAE,uBAAmB,QAAA,EAAU,KAAA,EAAO,OAAO,MAAA,EAAQ,WAAA,EAAa,kGAAA,EAAoG,OAAA,EAAS,OAAA,EAAQ;AAAA,EACvL,EAAE,0CAA4B,QAAA,EAAU,gBAAA,EAAkB,OAAO,gBAAA,EAAkB,WAAA,EAAa,gEAAA,EAAkE,OAAA,EAAS,OAAA,EAAQ;AAAA,EACnL,EAAE,uBAAmB,QAAA,EAAU,MAAA,EAAQ,OAAO,eAAA,EAAiB,WAAA,EAAa,oDAAA,EAAsD,OAAA,EAAS,OAAA,EAAQ;AAAA,EACnJ,EAAE,EAAA,EAAA,kBAAA,uBAA6B,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO,sBAAsB,WAAA,EAAa,iGAAA,EAAmG,OAAA,EAAS,CAAA,OAAA,aAAe,EAAE;AAAA,EACvN,EAAE,EAAA,EAAA,YAAA,kBAAwB,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO,cAAc,WAAA,EAAa,mHAAA,EAAqH,OAAA,EAAS,CAAA,OAAA,aAAe,EAAE;AAAA,EAC5N,EAAE,EAAA,EAAA,cAAA,oBAA0B,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO,wBAAwB,WAAA,EAAa,uGAAA,EAAyG,OAAA,EAAS,CAAA,SAAA,eAAiB,EAAE;AAAA,EAC9N,EAAE,EAAA,EAAA,cAAA,oBAA0B,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO,gBAAgB,WAAA,EAAa,+EAAA,EAAiF,OAAA,EAAS,CAAA,SAAA,eAAiB;AAC9L;AAEA,IAAM,QAAA,GAAiD;AAAA,EACrD,CAAA,OAAA,eAAe,eAAA;AAAA,EACf,CAAA,MAAA,cAAc,eAAA;AAAA,EACd,CAAA,QAAA,gBAAgB,eAAA;AAAA,EAChB,CAAA,OAAA,eAAe,kBAAA;AAAA,EACf,CAAA,SAAA,iBAAiB,cAAA;AACnB,CAAA;AAGO,SAAS,iBAAiB,MAAA,EAA4B;AAC3D,EAAA,OAAO,SAAS,MAAM,CAAA;AACxB;;;ACpBA,IAAM,SAAA,GAAwB;AAAA,EAC5B,EAAE,MAAA,EAAQ,qBAAA,EAAuB,IAAA,EAAM,YAAA,EAAc,OAAO,eAAA,EAAiB,MAAA,EAAQ,eAAA,EAAiB,KAAA,EAAO,UAAA,EAAM;AAAA,EACnH,EAAE,MAAA,EAAQ,qBAAA,EAAuB,IAAA,EAAM,WAAA,EAAa,OAAO,eAAA,EAAiB,MAAA,EAAQ,eAAA,EAAiB,KAAA,EAAO,UAAA,EAAM;AAAA,EAClH,EAAE,MAAA,EAAQ,oBAAA,EAAsB,IAAA,EAAM,YAAA,EAAc,OAAO,eAAA,EAAiB,MAAA,EAAQ,eAAA,EAAiB,KAAA,EAAO,UAAA;AAC9G,CAAA;AAEA,IAAM,QAAA,GAAW,EAAE,OAAA,EAAS,qBAAA,EAAuB,OAAO,CAAC,sBAAA,EAAwB,wBAAA,EAA0B,UAAU,CAAA,EAAE;AAEzH,IAAM,QAAA,GAAW,CAAC,CAAA,KAA+B;AAAA,EAC/C,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,EAAE,KAAA,EAAM;AAAA,EAClC,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,EAAE,MAAA;AAC9B,CAAA;AAEA,IAAM,IAAA,GAAO;AAAA,EACX,OAAA,EAAS,CAAA;AAAA,EACT,MAAA,EAAA,OAAA;AAAA,EACA,OAAA,EAAA,MAAA;AAAA,EACA,KAAA,EAAA,SAAA;AAAA,EACA,UAAA,EAAA,OAAA;AAAA,EACA,SAAS,EAAE,OAAA,EAAS,SAAA,EAAW,MAAA,EAAA,QAAA,eAA8B,OAAO,CAAA,EAAE;AAAA,EACtE,IAAA,EAAM,EAAE,OAAA,EAAS,MAAA;AACnB,CAAA;AAEA,IAAM,MAAA,GAAqC;AAAA,EACzC,KAAA,EAAO,CAAC,UAAA,EAAY,cAAc,CAAA;AAAA,EAClC,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,CAAA,MAA2B;AAAA,EAC9C,GAAG,IAAA;AAAA,EACH,MAAA,EAAA,eAAA;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAG,MAAA;AAAA,IACH,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,UAAA;AAAA,IACb,QAAQ,CAAA,CAAE,MAAA;AAAA,IACV,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA,IACpB,MAAA,EAAQ,CAAC,EAAE,MAAA,EAAQ,WAAM,KAAA,EAAO,UAAA,EAAW,EAAG,EAAE,MAAA,EAAQ,CAAA,CAAE,KAAA,EAAO,KAAA,EAAO,cAAc;AAAA;AAE1F,CAAA,CAAA;AAEO,IAAM,eAAA,GAA4B;AAAA,EACvC,GAAG,IAAA;AAAA,EACH,MAAA,EAAA,MAAA;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAG,MAAA;AAAA,IACH,KAAA,EAAO,UAAA;AAAA,IACP,WAAA,EAAa,WAAA;AAAA,IACb,MAAA,EAAQ,SAAA;AAAA,IACR,QAAQ,CAAC,EAAE,QAAQ,SAAA,EAAM,KAAA,EAAO,YAAY;AAAA,GAC9C;AAAA,EACA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,MAAM,CAAA,CAAE,IAAA,EAAM,QAAA,EAAU,QAAA,CAAS,CAAC,CAAA,EAAG,KAAA,EAAO,cAAc,CAAA,CAAE,KAAK,IAAG,CAAE;AACvG;AAEO,IAAM,sBAAkC,CAAC,GAAG,UAAU,GAAA,CAAI,WAAW,GAAG,eAAe","file":"index.js","sourcesContent":["export enum BackgroundStyle {\n Solid = 'solid',\n Tint = 'tint',\n}\n","export enum FontSetId {\n Classic = 'classic',\n Modern = 'modern',\n Elegant = 'elegant',\n}\n","export enum FormatId {\n Story = 'story',\n Post = 'post',\n Square = 'square',\n Phone = 'phone',\n Desktop = 'desktop',\n}\n","export enum LayoutId {\n PictureRight = 'picture-right',\n PictureLeft = 'picture-left',\n PictureBottom = 'picture-bottom',\n List = 'list',\n Arch = 'arch',\n PhoneClockSafe = 'phone-clock-safe',\n PhoneArch = 'phone-arch',\n DesktopSafe = 'desktop-safe',\n DesktopArch = 'desktop-arch',\n}\n","export enum PaletteId {\n Sand = 'sand',\n Night = 'night',\n Sea = 'sea',\n Rose = 'rose',\n}\n","export enum PictureAnchor {\n Top = 'top',\n Center = 'center',\n Bottom = 'bottom',\n}\n","import { FormatId } from './enums/FormatId';\n\nexport interface FormatSize {\n width: number;\n height: number;\n}\n\nexport const FORMAT_SIZES: Readonly<Record<FormatId, FormatSize>> = {\n [FormatId.Story]: { width: 1080, height: 1920 },\n [FormatId.Post]: { width: 1080, height: 1350 },\n [FormatId.Square]: { width: 1080, height: 1080 },\n [FormatId.Phone]: { width: 1170, height: 2532 },\n [FormatId.Desktop]: { width: 2560, height: 1440 },\n};\n","import { PaletteId } from './enums/PaletteId';\nimport type { Palette } from './types';\n\nexport const PALETTES: Readonly<Record<PaletteId, Palette>> = {\n [PaletteId.Sand]: { background: '#f5f4f2', tint: '#ece8e3', title: '#958a80', accent: '#e9b47f', ink: '#5f564f', soft: '#b3a89e', card: '#ffffff', arch: '#ede8e2' },\n [PaletteId.Night]: { background: '#1c1a17', tint: '#25221e', title: '#e8dccb', accent: '#e9b47f', ink: '#f4efe8', soft: '#9c9284', card: '#2c2824', arch: '#25221f' },\n [PaletteId.Sea]: { background: '#eef4f3', tint: '#e1ecea', title: '#4f7d7a', accent: '#e07a5f', ink: '#2f3e46', soft: '#8aa3a1', card: '#ffffff', arch: '#e4ecea' },\n [PaletteId.Rose]: { background: '#f8efec', tint: '#f1e2dd', title: '#9b6b63', accent: '#c9846f', ink: '#4a3934', soft: '#b39a92', card: '#ffffff', arch: '#f1e5e1' },\n};\n","import { FontSetId } from './enums/FontSetId';\nimport type { FontSet } from './types';\n\nexport const FONT_SETS: Readonly<Record<FontSetId, FontSet>> = {\n [FontSetId.Classic]: { display: '\"Oswald\", \"Arial Narrow\", sans-serif', script: '\"Sacramento\", cursive', body: '\"Fredoka\", sans-serif' },\n [FontSetId.Modern]: { display: '\"Bebas Neue\", \"Arial Narrow\", sans-serif', script: '\"Great Vibes\", cursive', body: '\"Montserrat\", sans-serif' },\n [FontSetId.Elegant]: { display: '\"Playfair Display\", serif', script: '\"Allura\", cursive', body: '\"Lato\", sans-serif' },\n};\n","import { BackgroundStyle } from '../enums/BackgroundStyle';\nimport { FontSetId } from '../enums/FontSetId';\nimport { FormatId } from '../enums/FormatId';\nimport { LayoutId } from '../enums/LayoutId';\nimport { PaletteId } from '../enums/PaletteId';\nimport { PictureAnchor } from '../enums/PictureAnchor';\nimport type { JsonSchema } from './jsonSchemaTypes';\n\nconst SHORT = 60;\nconst LINE = 120;\nconst MAX_ROWS = 6;\nconst MAX_ITEMS = 8;\nconst MAX_PRICES = 4;\nconst MAX_VENUE = 3;\nconst MIN_SCALE = 0.3;\n\nconst text = (maxLength: number): JsonSchema => ({ type: 'string', minLength: 1, maxLength });\n\nconst scheduleRow: JsonSchema = {\n type: 'object',\n required: ['label', 'time'],\n additionalProperties: false,\n properties: { label: text(SHORT), time: text(SHORT) },\n};\n\nconst scheduleList: JsonSchema = { type: 'array', items: scheduleRow, minItems: 1, maxItems: MAX_ROWS };\n\nconst blocks: JsonSchema = {\n type: 'object',\n required: ['title'],\n additionalProperties: false,\n properties: {\n title: text(SHORT),\n titleBottom: text(SHORT),\n script: text(SHORT),\n venue: { type: 'array', items: text(SHORT), minItems: 1, maxItems: MAX_VENUE },\n schedule: scheduleList,\n prices: {\n type: 'array',\n minItems: 1,\n maxItems: MAX_PRICES,\n items: {\n type: 'object',\n required: ['amount', 'label'],\n additionalProperties: false,\n properties: { amount: text(SHORT), label: text(SHORT) },\n },\n },\n includes: {\n type: 'object',\n required: ['heading', 'items'],\n additionalProperties: false,\n properties: { heading: text(SHORT), items: { type: 'array', items: text(LINE), minItems: 1, maxItems: MAX_ROWS } },\n },\n footer: text(LINE),\n },\n};\n\nexport const flierDocSchema: JsonSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: 'https://dloizides.com/schemas/flier-doc-v1.json',\n title: 'FlierDoc',\n description: 'One poster or wallpaper: format, layout, palette, fonts, picture slot and text blocks.',\n type: 'object',\n required: ['version', 'format', 'layout', 'palette', 'fonts', 'background', 'blocks'],\n additionalProperties: false,\n properties: {\n version: { const: 1 },\n format: { type: 'string', enum: Object.values(FormatId) },\n layout: { type: 'string', enum: Object.values(LayoutId) },\n palette: { type: 'string', enum: Object.values(PaletteId) },\n fonts: { type: 'string', enum: Object.values(FontSetId) },\n background: { type: 'string', enum: Object.values(BackgroundStyle) },\n picture: {\n type: 'object',\n required: ['imageId', 'anchor', 'scale'],\n additionalProperties: false,\n properties: {\n imageId: text(SHORT),\n anchor: { type: 'string', enum: Object.values(PictureAnchor) },\n scale: { type: 'number', minimum: MIN_SCALE, maximum: 1 },\n },\n },\n logo: { type: 'object', required: ['imageId'], additionalProperties: false, properties: { imageId: text(SHORT) } },\n blocks,\n items: {\n type: 'array',\n minItems: 1,\n maxItems: MAX_ITEMS,\n items: {\n type: 'object',\n required: ['date', 'schedule'],\n additionalProperties: false,\n properties: { date: text(SHORT), schedule: scheduleList, price: text(SHORT) },\n },\n },\n },\n};\n","import type { JsonSchema } from './jsonSchemaTypes';\n\nexport const typeName = (v: unknown): string => {\n if (v === null) {\n return 'null';\n }\n return Array.isArray(v) ? 'array' : typeof v;\n};\n\nconst join = (path: string, key: string): string => (path === '' ? key : `${path}.${key}`);\nconst show = (v: unknown): string => JSON.stringify(v) ?? typeName(v);\n\nconst ARTICLE: Record<string, string> = { object: 'an object', array: 'an array', string: 'a string', number: 'a number', integer: 'an integer' };\n\nfunction matchesType(schema: JsonSchema, value: unknown): boolean {\n switch (schema.type) {\n case undefined:\n return true;\n case 'integer':\n return Number.isInteger(value);\n case 'number':\n return typeof value === 'number' && Number.isFinite(value);\n default:\n return typeName(value) === schema.type;\n }\n}\n\nfunction checkString(schema: JsonSchema, value: string, path: string, errors: string[]): void {\n if (schema.minLength !== undefined && value.trim().length < schema.minLength) {\n errors.push(`${path}: must not be empty`);\n }\n if (schema.maxLength !== undefined && value.length > schema.maxLength) {\n errors.push(`${path}: must be at most ${schema.maxLength} characters (got ${value.length})`);\n }\n}\n\nfunction checkNumber(schema: JsonSchema, value: number, path: string, errors: string[]): void {\n if (schema.minimum !== undefined && value < schema.minimum) {\n errors.push(`${path}: must be at least ${schema.minimum} (got ${value})`);\n }\n if (schema.maximum !== undefined && value > schema.maximum) {\n errors.push(`${path}: must be at most ${schema.maximum} (got ${value})`);\n }\n}\n\nfunction checkArray(schema: JsonSchema, value: unknown[], path: string, errors: string[]): void {\n if (schema.minItems !== undefined && value.length < schema.minItems) {\n errors.push(`${path}: must have at least ${schema.minItems} entries (got ${value.length})`);\n }\n if (schema.maxItems !== undefined && value.length > schema.maxItems) {\n errors.push(`${path}: must have at most ${schema.maxItems} entries (got ${value.length})`);\n return;\n }\n const itemSchema = schema.items;\n if (itemSchema) {\n value.forEach((item, i) => validateAgainst(itemSchema, item, `${path}[${i}]`, errors));\n }\n}\n\nfunction checkObject(schema: JsonSchema, value: Record<string, unknown>, path: string, errors: string[]): void {\n const props = schema.properties ?? {};\n for (const key of schema.required ?? []) {\n if (value[key] === undefined) {\n errors.push(`${join(path, key)}: is required`);\n }\n }\n for (const [key, child] of Object.entries(value)) {\n const childSchema = props[key];\n if (childSchema === undefined) {\n if (schema.additionalProperties === false) {\n errors.push(`${join(path, key)}: is not allowed`);\n }\n } else if (child !== undefined) {\n validateAgainst(childSchema, child, join(path, key), errors);\n }\n }\n}\n\nexport function validateAgainst(schema: JsonSchema, value: unknown, path: string, errors: string[]): void {\n if (schema.const !== undefined) {\n if (value !== schema.const) {\n errors.push(`${path}: must be ${schema.const} (got ${show(value)})`);\n }\n return;\n }\n if (!matchesType(schema, value)) {\n errors.push(`${path}: must be ${ARTICLE[schema.type ?? 'object']} (got ${typeName(value)})`);\n return;\n }\n if (schema.enum && !schema.enum.includes(value as string)) {\n errors.push(`${path}: must be one of ${schema.enum.join(', ')} (got ${show(value)})`);\n return;\n }\n if (typeof value === 'string') {\n checkString(schema, value, path, errors);\n } else if (typeof value === 'number') {\n checkNumber(schema, value, path, errors);\n } else if (Array.isArray(value)) {\n checkArray(schema, value, path, errors);\n } else if (typeName(value) === 'object') {\n checkObject(schema, value as Record<string, unknown>, path, errors);\n }\n}\n","import { LayoutId } from '../enums/LayoutId';\nimport type { FlierDoc, PosterAssets } from '../types';\nimport { flierDocSchema } from './flierDocSchema';\nimport { typeName, validateAgainst } from './validate';\n\nexport type FlierDocResult = { ok: true; doc: FlierDoc } | { ok: false; errors: string[] };\n\nexport class FlierDocError extends Error {\n public readonly errors: string[];\n\n public constructor(errors: string[]) {\n super(`Invalid flier: ${errors.join('; ')}`);\n this.name = 'FlierDocError';\n this.errors = errors;\n }\n}\n\n/** Checks any input (form, preset file, LLM output) against the FlierDoc schema; errors read \"path: problem\". */\nexport function validateFlierDoc(input: unknown): FlierDocResult {\n if (typeName(input) !== 'object') {\n return { ok: false, errors: ['doc: must be an object'] };\n }\n const errors: string[] = [];\n validateAgainst(flierDocSchema, input, '', errors);\n const doc = input as FlierDoc;\n if (doc.layout === LayoutId.List && (doc.items === undefined || doc.items.length === 0)) {\n errors.push('items: layout \"list\" needs at least one item');\n }\n return errors.length === 0 ? { ok: true, doc } : { ok: false, errors };\n}\n\nexport function missingAssets(doc: FlierDoc, assets: PosterAssets): string[] {\n const errors: string[] = [];\n if (doc.picture && assets[doc.picture.imageId] === undefined) {\n errors.push(`picture.imageId: no asset named \"${doc.picture.imageId}\"`);\n }\n if (doc.logo && assets[doc.logo.imageId] === undefined) {\n errors.push(`logo.imageId: no asset named \"${doc.logo.imageId}\"`);\n }\n return errors;\n}\n","import { LayoutId } from '../enums/LayoutId';\nimport type { Rect } from '../types';\n\ntype Frac = [number, number, number, number];\n\nexport interface LayoutSpec {\n header: Frac;\n body: Frac;\n picture: Frac;\n alignX: number;\n flanks?: [Frac, Frac];\n logo?: Frac;\n arch?: number;\n}\n\ninterface OrientedSpec {\n portrait: LayoutSpec;\n landscape: LayoutSpec;\n}\n\nconst flanksBeside = (pic: Frac, top: number, bottom: number, m: number): [Frac, Frac] => [\n [m, top, pic[0] - 2 * m, bottom - top],\n [pic[0] + pic[2] + m, top, 1 - pic[0] - pic[2] - 2 * m, bottom - top],\n];\n\nconst ARCH_PIC: Frac = [0.22, 0.42, 0.56, 0.58];\nconst PHONE_ARCH_PIC: Frac = [0.2, 0.6, 0.6, 0.4];\nconst DESK_ARCH_PIC: Frac = [0.355, 0.07, 0.32, 0.93];\n\nconst ARCH_LANDSCAPE: LayoutSpec = {\n header: [0.04, 0.06, 0.3, 0.5],\n body: [0.04, 0.58, 0.3, 0.36],\n picture: [0.36, 0.08, 0.3, 0.92],\n alignX: 0.5,\n flanks: [[0.68, 0.08, 0.28, 0.42], [0.68, 0.52, 0.28, 0.42]],\n arch: 0.06,\n};\n\nexport const LAYOUT_SPECS: Partial<Record<LayoutId, OrientedSpec>> = {\n [LayoutId.Arch]: {\n portrait: { header: [0.045, 0.025, 0.91, 0.18], body: [0.045, 0.215, 0.91, 0.19], picture: ARCH_PIC, alignX: 0.5, flanks: flanksBeside(ARCH_PIC, 0.44, 0.97, 0.03), arch: 0.04 },\n landscape: ARCH_LANDSCAPE,\n },\n [LayoutId.PhoneClockSafe]: {\n portrait: { header: [0.045, 0.28, 0.91, 0.2], body: [0.045, 0.5, 0.42, 0.44], picture: [0.48, 0.5, 0.52, 0.5], alignX: 1 },\n landscape: { header: [0.04, 0.2, 0.52, 0.3], body: [0.04, 0.52, 0.52, 0.42], picture: [0.6, 0.12, 0.4, 0.88], alignX: 1 },\n },\n [LayoutId.PhoneArch]: {\n portrait: { header: [0.045, 0.3, 0.91, 0.13], body: [0.045, 0.44, 0.91, 0.14], picture: PHONE_ARCH_PIC, alignX: 0.5, flanks: flanksBeside(PHONE_ARCH_PIC, 0.63, 0.94, 0.03), arch: 0.08 },\n landscape: { ...ARCH_LANDSCAPE, header: [0.04, 0.16, 0.3, 0.42], picture: [0.36, 0.16, 0.3, 0.84] },\n },\n [LayoutId.DesktopSafe]: {\n portrait: { header: [0.08, 0.06, 0.84, 0.24], body: [0.08, 0.31, 0.46, 0.58], picture: [0.56, 0.36, 0.44, 0.64], alignX: 1 },\n landscape: { header: [0.0625, 0.05, 0.58, 0.44], body: [0.0625, 0.5, 0.58, 0.38], picture: [0.67, 0.0972, 0.29, 0.9028], alignX: 1, logo: [0.4, 0.045, 0.09, 0.17] },\n },\n [LayoutId.DesktopArch]: {\n portrait: { header: [0.08, 0.06, 0.84, 0.2], body: [0.08, 0.27, 0.84, 0.2], picture: [0.14, 0.48, 0.72, 0.52], alignX: 0.5, arch: 0.05 },\n landscape: { header: [0.07, 0.3, 0.26, 0.45], body: [0.7, 0.25, 0.27, 0.65], picture: DESK_ARCH_PIC, alignX: 0.5, logo: [0.86, 0.03, 0.11, 0.18], arch: 0.05 },\n },\n};\n\nconst r = Math.round;\n\nexport const toRect = (f: Frac, w: number, h: number): Rect => {\n const x = r(f[0] * w);\n const y = r(f[1] * h);\n return { x, y, w: r((f[0] + f[2]) * w) - x, h: r((f[1] + f[3]) * h) - y };\n};\n","import { LayoutId } from '../enums/LayoutId';\r\nimport { PictureAnchor } from '../enums/PictureAnchor';\r\nimport type { PosterImage, Rect } from '../types';\r\nimport { LAYOUT_SPECS, toRect } from './layoutSpecs';\r\n\r\nexport interface LayoutGeometry {\r\n header: Rect;\r\n body: Rect;\r\n picture: Rect;\r\n alignX: number;\r\n flanks?: Rect[];\r\n logo?: Rect;\r\n arch?: number;\r\n}\r\n\r\nconst MARGIN = 0.045;\r\nconst HEADER_PORTRAIT = 0.3;\r\nconst HEADER_LANDSCAPE = 0.36;\r\nconst BOTTOM_PICTURE_W = 0.8;\r\nconst BOTTOM_MIN_TOP = 0.25;\r\nconst BOTTOM_HEADER_SHARE = 0.3;\r\nconst BOTTOM_GAP = 40 / 1080;\r\nconst BOTTOM_ASPECT = 0.57;\r\nconst PICTURE_SIDE: Record<string, [number, number]> = {\r\n [LayoutId.PictureRight]: [0.6, 0.42],\r\n [LayoutId.PictureLeft]: [0.6, 0.42],\r\n [LayoutId.List]: [0.5, 0.36],\r\n};\r\nconst ANCHOR_Y: Record<PictureAnchor, number> = { [PictureAnchor.Top]: 0, [PictureAnchor.Center]: 0.5, [PictureAnchor.Bottom]: 1 };\r\n\r\nconst r = Math.round;\r\n\r\nfunction side(w: number, h: number, fraction: [number, number]): LayoutGeometry {\r\n const m = r(Math.min(w, h) * MARGIN);\r\n if (h >= w) {\r\n const split = r(w * (1 - fraction[0]));\r\n const top = r(h * HEADER_PORTRAIT);\r\n return {\r\n header: { x: m, y: m, w: w - 2 * m, h: top - 2 * m },\r\n picture: { x: split, y: top, w: w - split, h: h - top },\r\n body: { x: m, y: top, w: split - 2 * m, h: h - top - m },\r\n alignX: 1,\r\n };\r\n }\r\n const split = r(w * (1 - fraction[1]));\r\n const top = r(h * HEADER_LANDSCAPE);\r\n return {\r\n header: { x: m, y: m, w: split - 2 * m, h: top - m },\r\n picture: { x: split, y: 0, w: w - split, h },\r\n body: { x: m, y: top + r(m / 2), w: split - 2 * m, h: h - top - r(m / 2) - m },\r\n alignX: 1,\r\n };\r\n}\r\n\r\nfunction bottom(w: number, h: number, share: number): LayoutGeometry {\r\n const m = r(Math.min(w, h) * MARGIN);\r\n const gap = r(Math.min(w, h) * BOTTOM_GAP);\r\n const picW = r(w * share);\r\n const picH = Math.min(r(picW / BOTTOM_ASPECT), r(((h - r(h * BOTTOM_MIN_TOP)) * share) / BOTTOM_PICTURE_W));\r\n const pic = h - picH;\r\n const top = m + r((pic - m) * BOTTOM_HEADER_SHARE);\r\n return {\r\n header: { x: m, y: m, w: w - 2 * m, h: top - m },\r\n body: { x: m, y: top, w: w - 2 * m, h: pic - gap - top },\r\n picture: { x: r((w - picW) / 2), y: pic, w: picW, h: picH },\r\n alignX: 0.5,\r\n };\r\n}\r\n\r\nfunction fromSpec(spec: NonNullable<(typeof LAYOUT_SPECS)[LayoutId]>['portrait'], w: number, h: number): LayoutGeometry {\r\n return {\r\n header: toRect(spec.header, w, h),\r\n body: toRect(spec.body, w, h),\r\n picture: toRect(spec.picture, w, h),\r\n alignX: spec.alignX,\r\n flanks: spec.flanks?.map((f) => toRect(f, w, h)),\r\n logo: spec.logo ? toRect(spec.logo, w, h) : undefined,\r\n arch: spec.arch,\r\n };\r\n}\r\n\r\nconst mirror = (rect: Rect, w: number): Rect => ({ ...rect, x: w - rect.x - rect.w });\r\n\r\n/** Splits the canvas into header, body and picture regions that never overlap; give narrows the picture-bottom picture. */\r\nexport function geometry(layout: LayoutId, w: number, h: number, give = 0): LayoutGeometry {\r\n const oriented = LAYOUT_SPECS[layout];\r\n if (oriented) {\r\n return fromSpec(h >= w ? oriented.portrait : oriented.landscape, w, h);\r\n }\r\n if (layout === LayoutId.PictureBottom) {\r\n return bottom(w, h, BOTTOM_PICTURE_W - give);\r\n }\r\n const g = side(w, h, PICTURE_SIDE[layout] ?? [0.6, 0.42]);\r\n if (layout !== LayoutId.PictureLeft) {\r\n return g;\r\n }\r\n return { header: mirror(g.header, w), body: mirror(g.body, w), picture: mirror(g.picture, w), alignX: 1 - g.alignX };\r\n}\r\n\r\n/** Fits the whole image inside the region (contain), scaled and anchored; never crops it. */\r\nexport function placeContain(image: PosterImage, region: Rect, anchor: PictureAnchor, alignX: number, scale: number): Rect {\r\n const s = Math.min(region.w / image.width, region.h / image.height) * scale;\r\n const w = Math.floor(image.width * s);\r\n const h = Math.floor(image.height * s);\r\n return {\r\n x: region.x + Math.floor((region.w - w) * alignX),\r\n y: region.y + Math.floor((region.h - h) * ANCHOR_Y[anchor]),\r\n w,\r\n h,\r\n };\r\n}\r\n","import { LayoutId } from '../enums/LayoutId';\nimport type { FlierDoc, ListItem, Palette } from '../types';\nimport type { FlowGroup, FlowLine } from './textFlow';\n\nconst BOLD = 700;\nconst SEMI = 600;\nconst MEDIUM = 500;\nconst SCRIPT = 400;\n\ntype Line = (text: string, size: number) => FlowLine;\n\nconst makers = (p: Palette, u: number): Record<string, Line> => ({\n display: (text, size) => ({ text, role: 'display', weight: BOLD, size: size * u, color: p.title }),\n venue: (text, size) => ({ text, role: 'display', weight: MEDIUM, size: size * u, color: p.ink }),\n script: (text, size) => ({ text, role: 'script', weight: SCRIPT, size: size * u, color: p.accent }),\n strong: (text, size) => ({ text, role: 'body', weight: BOLD, size: size * u, color: p.ink }),\n accent: (text, size) => ({ text, role: 'body', weight: SEMI, size: size * u, color: p.accent }),\n item: (text, size) => ({ text, role: 'body', weight: SEMI, size: size * u, color: p.ink, bullet: p.accent }),\n soft: (text, size) => ({ text, role: 'body', weight: MEDIUM, size: size * u, color: p.soft }),\n});\n\nexport function headerGroups(doc: FlierDoc, p: Palette, u: number): FlowGroup[] {\n const l = makers(p, u);\n const b = doc.blocks;\n const lines = [l.display?.(b.title, 250), b.script ? l.script?.(b.script, 120) : undefined, b.titleBottom ? l.display?.(b.titleBottom, 250) : undefined];\n return [{ lines: lines.filter((x): x is FlowLine => x !== undefined), gapAfter: 0 }];\n}\n\nfunction itemGroup(item: ListItem, l: Record<string, Line>, u: number): FlowGroup {\n const lines: FlowLine[] = [l.script?.(item.date, 67) as FlowLine];\n item.schedule.forEach((row) => lines.push(l.strong?.(`${row.label} ${row.time}`, 42) as FlowLine));\n if (item.price) {\n lines.push(l.accent?.(item.price, 42) as FlowLine);\n }\n return { lines, gapAfter: 48 * u };\n}\n\nfunction eventGroups(doc: FlierDoc, l: Record<string, Line>, u: number, withPrices: boolean): FlowGroup[] {\n const b = doc.blocks;\n const groups: FlowGroup[] = [];\n b.schedule?.forEach((row) => groups.push({ lines: [l.strong?.(row.label, 66) as FlowLine, l.accent?.(row.time, 60) as FlowLine], gapAfter: 30 * u }));\n const prices = (withPrices ? b.prices : undefined) ?? [];\n prices.forEach((row, i) => groups.push({ lines: [l.strong?.(row.amount, 66) as FlowLine, l.accent?.(row.label, 52) as FlowLine], gapAfter: 30 * u, keepWithNext: i < prices.length - 1 }));\n return groups;\n}\n\nfunction listGroups(doc: FlierDoc, l: Record<string, Line>, u: number): FlowGroup[] {\n const groups = (doc.items ?? []).map((item) => itemGroup(item, l, u));\n const prices = doc.blocks.prices?.map((row) => l.strong?.(`${row.amount} ${row.label}`, 58) as FlowLine) ?? [];\n if (prices.length > 0) {\n groups.push({ lines: prices, gapAfter: 30 * u });\n }\n return groups;\n}\n\n/** Price groups set large for the flank zones beside an arch. */\nexport function flankPriceGroups(doc: FlierDoc, p: Palette, u: number): FlowGroup[] {\n const l = makers(p, u);\n return (doc.blocks.prices ?? []).map((row) => ({ lines: [l.strong?.(row.amount, 110) as FlowLine, l.accent?.(row.label, 48) as FlowLine], gapAfter: 30 * u }));\n}\n\n/** Turns the doc's body blocks into flow groups: venue with its pin, schedule or list items, prices, includes, footer. */\nexport function bodyGroups(doc: FlierDoc, p: Palette, u: number, withPrices = true): FlowGroup[] {\n const l = makers(p, u);\n const b = doc.blocks;\n const groups: FlowGroup[] = [];\n const isList = doc.layout === LayoutId.List;\n if (b.venue) {\n groups.push({ lines: b.venue.map((v) => l.venue?.(v, isList ? 48 : 58) as FlowLine), gapAfter: 40 * u, rule: { color: p.accent, height: 8 * u }, ruleBelow: true, icon: { color: p.accent, glyph: p.background } });\n }\n groups.push(...(isList ? listGroups(doc, l, u) : eventGroups(doc, l, u, withPrices)));\n if (b.includes) {\n const lines = [l.accent?.(b.includes.heading, 38) as FlowLine, ...b.includes.items.map((i) => l.item?.(i, 38) as FlowLine)];\n groups.push({ lines, gapAfter: 24 * u, uniform: true });\n }\n if (b.footer) {\n groups.push({ lines: [l.soft?.(b.footer, 38) as FlowLine], gapAfter: 0 });\n }\n return groups;\n}\n","import type { FontSet, PosterContext, Rect } from '../types';\n\nexport interface FlowLine {\n text: string;\n role: keyof FontSet;\n weight: number;\n size: number;\n color: string;\n bullet?: string;\n}\n\nexport interface FlowGroup {\n lines: FlowLine[];\n gapAfter: number;\n card?: { color: string; pad: number };\n rule?: { color: string; height: number };\n ruleBelow?: boolean;\n uniform?: boolean;\n icon?: { color: string; glyph: string };\n keepWithNext?: boolean;\n}\n\nexport interface FlowZone extends Rect {\n right?: boolean;\n}\n\nexport interface TextOp {\n text: string;\n font: string;\n color: string;\n box: Rect;\n}\n\nexport interface FlowResult {\n texts: TextOp[];\n cards: { rect: Rect; color: string }[];\n rules: { rect: Rect; color: string }[];\n bullets: { x: number; y: number; r: number; color: string }[];\n icons: { rect: Rect; color: string; glyph: string }[];\n}\n\ninterface Measured {\n group: FlowGroup;\n widths: number[];\n}\n\nconst LINE_HEIGHT = 1.2;\nconst BULLET_INDENT = 1.1;\nconst BULLET_RADIUS = 0.2;\nconst RULE_GAP = 2.5;\nconst RULE_WIDTH = 0.9;\nconst WIDE = 1.6;\nconst TWO_COLUMN_MIN = 0.75;\nconst TWO_COLUMN_GAIN = 1.15;\nconst MIN_K = 0.02;\nconst STEPS = 22;\nconst ICON_SCALE = 1.6;\nconst ICON_GAP = 0.35;\n\nexport const fontOf = (line: FlowLine, size: number, fonts: FontSet): string => `${line.weight} ${size}px ${fonts[line.role]}`;\n\nexport const emptyFlow = (): FlowResult => ({ texts: [], cards: [], rules: [], bullets: [], icons: [] });\n\nconst iconSize = (group: FlowGroup, k: number): number => {\n const first = group.lines[0];\n return group.icon && first ? first.size * k * LINE_HEIGHT * ICON_SCALE : 0;\n};\n\nfunction lineSize(line: FlowLine, width: number, k: number, avail: number): number {\n const indent = line.bullet ? line.size * k * BULLET_INDENT : 0;\n return Math.max(0, Math.min(line.size * k, (line.size * (avail - indent)) / Math.max(width, 1)));\n}\n\nfunction groupRatio(m: Measured, k: number, avail: number): number | null {\n if (!m.group.uniform) {\n return null;\n }\n return Math.min(...m.group.lines.map((line, i) => lineSize(line, m.widths[i] ?? 1, k, avail) / line.size));\n}\n\nfunction placeIcon(group: FlowGroup, d: number, x: number, textTop: number, textBottom: number, out: FlowResult | null): number {\n if (!group.icon || d <= 0) {\n return textBottom;\n }\n const textH = textBottom - textTop;\n out?.icons.push({ rect: { x, y: textTop + Math.max(0, (textH - d) / 2), w: d, h: d }, color: group.icon.color, glyph: group.icon.glyph });\n return textTop + Math.max(textH, d);\n}\n\nfunction placeGroup(m: Measured, k: number, col: FlowZone, y0: number, out: FlowResult | null): number {\n const { group } = m;\n let y = y0;\n if (group.rule) {\n out?.rules.push({ rect: { x: col.x, y, w: col.w * RULE_WIDTH, h: group.rule.height * k }, color: group.rule.color });\n y += group.rule.height * k * RULE_GAP;\n }\n const pad = group.card ? group.card.pad * k : 0;\n const top = y;\n y += pad;\n const d = iconSize(group, k);\n const iconIndent = d > 0 ? d * (1 + ICON_GAP) : 0;\n const avail = col.w - 2 * pad - iconIndent;\n const ratio = groupRatio(m, k, avail);\n group.lines.forEach((line, i) => {\n const size = ratio === null ? lineSize(line, m.widths[i] ?? 1, k, avail) : line.size * ratio;\n const indent = (line.bullet ? line.size * k * BULLET_INDENT : 0) + iconIndent;\n const w = ((m.widths[i] ?? 0) * size) / line.size;\n const x = col.right ? col.x + col.w - pad - w : col.x + pad + indent;\n out?.texts.push({ text: line.text, font: '', color: line.color, box: { x, y, w, h: size * LINE_HEIGHT } });\n if (line.bullet && out) {\n out.bullets.push({ x: col.x + pad + size * BULLET_RADIUS, y: y + (size * LINE_HEIGHT) / 2, r: size * BULLET_RADIUS, color: line.bullet });\n }\n y += size * LINE_HEIGHT;\n });\n y = placeIcon(group, d, col.x + pad, top + pad, y, out);\n y += pad;\n if (group.rule && group.ruleBelow) {\n y += group.rule.height * k * (RULE_GAP - 1);\n out?.rules.push({ rect: { x: col.x, y, w: col.w * RULE_WIDTH, h: group.rule.height * k }, color: group.rule.color });\n y += group.rule.height * k;\n }\n if (group.card) {\n out?.cards.unshift({ rect: { x: col.x, y: top, w: col.w, h: y - top }, color: group.card.color });\n }\n return y + group.gapAfter * k - y0;\n}\n\nfunction placeColumn(groups: Measured[], k: number, col: FlowZone, out: FlowResult | null, spread = 0): number {\n let h = 0;\n for (const g of groups) {\n h += placeGroup(g, k, col, col.y + h, out) + spread;\n }\n return h - spread;\n}\n\nconst columnSum = (heights: number[], from: number, to: number): number => heights.slice(from, to).reduce((a, b) => a + b, 0);\n\nconst tallest = (heights: number[], cut: number): number => {\n const left = heights.slice(0, cut).reduce((a, b) => a + b, 0);\n const right = heights.slice(cut).reduce((a, b) => a + b, 0);\n return Math.max(left, right);\n};\n\nfunction keepTogether(groups: Measured[], heights: number[], cut: number): number {\n const breaks = (c: number): boolean => groups[c - 1]?.group.keepWithNext === true;\n let back = cut;\n while (back > 1 && breaks(back)) {back--;}\n let fwd = cut;\n while (fwd < groups.length - 1 && breaks(fwd)) {fwd++;}\n const candidates = [back, fwd].filter((c) => !breaks(c));\n if (candidates.length === 0) {\n return cut;\n }\n return candidates.reduce((best, c) => (tallest(heights, c) < tallest(heights, best) ? c : best));\n}\n\ntype Columns = { col: FlowZone; groups: Measured[] }[];\n\nfunction splitColumns(groups: Measured[], zone: FlowZone): Columns {\n const gap = Math.round(zone.w * 0.04);\n const w = (zone.w - gap) / 2;\n const heights = groups.map((g) => placeGroup(g, 1, { ...zone, w }, 0, null));\n const total = columnSum(heights, 0, heights.length);\n let cut = 1;\n for (let c = 2; c < groups.length; c++) {\n if (Math.abs(total - 2 * columnSum(heights, 0, c)) < Math.abs(total - 2 * columnSum(heights, 0, cut))) {\n cut = c;\n }\n }\n cut = keepTogether(groups, heights, cut);\n return [\n { col: { ...zone, w }, groups: groups.slice(0, cut) },\n { col: { ...zone, x: zone.x + w + gap, w }, groups: groups.slice(cut) },\n ];\n}\n\nfunction largestK(columns: Columns, zoneH: number): number {\n const fits = (k: number): boolean => columns.every((c) => placeColumn(c.groups, k, c.col, null) <= zoneH);\n let lo = MIN_K;\n let hi = 1;\n if (fits(1)) {\n lo = 1;\n }\n for (let i = 0; i < STEPS && lo < hi; i++) {\n const mid = (lo + hi) / 2;\n if (fits(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\n\nfunction bestColumns(measured: Measured[], zone: FlowZone): { columns: Columns; k: number } {\n const single: Columns = [{ col: zone, groups: measured }];\n const k1 = largestK(single, zone.h);\n if (measured.length < 2 || zone.w / Math.max(zone.h, 1) < TWO_COLUMN_MIN) {\n return { columns: single, k: k1 };\n }\n const split = splitColumns(measured, zone);\n const k2 = largestK(split, zone.h);\n const forced = zone.w / Math.max(zone.h, 1) > WIDE;\n return forced || k2 > k1 * TWO_COLUMN_GAIN ? { columns: split, k: k2 } : { columns: single, k: k1 };\n}\n\n/** Lays groups out in the zone, shrinking every size by one factor until all text fits; never overflows. */\nexport function flow(ctx: PosterContext, groups: FlowGroup[], zone: FlowZone, fonts: FontSet): FlowResult {\n const measured = groups.map((group) => ({\n group,\n widths: group.lines.map((line) => {\n ctx.font = fontOf(line, line.size, fonts);\n return ctx.measureText(line.text).width;\n }),\n }));\n const { columns, k: lo } = bestColumns(measured, zone);\n const out = emptyFlow();\n const heights = columns.map((c) => placeColumn(c.groups, lo, c.col, null));\n const end = Math.max(...heights);\n columns.forEach((c, i) => placeColumn(c.groups, lo, c.col, out, c.groups.length > 1 && columns.length > 1 ? (end - (heights[i] ?? end)) / (c.groups.length - 1) : 0));\n const lines = groups.flatMap((g) => g.lines);\n out.texts.forEach((t, i) => {\n const line = lines[i];\n t.font = line ? fontOf(line, t.box.h / LINE_HEIGHT, fonts) : t.font;\n });\n return out;\n}\n","import { LayoutId } from '../enums/LayoutId';\nimport type { LayoutGeometry } from '../layout/geometry';\nimport { flow, type FlowGroup, type FlowResult } from '../layout/textFlow';\nimport type { FontSet, PosterContext, Rect } from '../types';\n\nconst LINE_HEIGHT = 1.2;\nconst BODY_GAP = 40;\n\nfunction flowFlanks(ctx: PosterContext, groups: FlowGroup[], flanks: Rect[], fonts: FontSet): FlowResult[] {\n const half = Math.ceil(groups.length / 2);\n return flanks.map((zone, i) => (i === 0 ? flow(ctx, groups.slice(0, half), zone, fonts) : flow(ctx, groups.slice(half), { ...zone, right: true }, fonts)));\n}\n\nfunction smallestPerLine(groups: FlowGroup[], results: FlowResult[]): number[] {\n const sizes = results.flatMap((r) => r.texts.map((t) => t.box.h / LINE_HEIGHT));\n const smallest: number[] = [];\n let i = 0;\n groups.forEach((g) =>\n g.lines.forEach((_line, j) => {\n smallest[j] = Math.min(smallest[j] ?? Infinity, sizes[i] ?? Infinity);\n i++;\n }),\n );\n return smallest;\n}\n\n/** Flows the price groups into the flank zones, then sets each line role at one size across every flank. */\nexport function equalFlanks(ctx: PosterContext, groups: FlowGroup[], flanks: Rect[], fonts: FontSet): FlowResult[] {\n const smallest = smallestPerLine(groups, flowFlanks(ctx, groups, flanks, fonts));\n const sized = groups.map((g) => ({ ...g, lines: g.lines.map((line, j) => ({ ...line, size: Math.min(line.size, smallest[j] ?? line.size) })) }));\n return flowFlanks(ctx, sized, flanks, fonts);\n}\n\nfunction measuredEnd(f: FlowResult, fallback: number): number {\n const bottoms = [...f.texts.map((t) => t.box), ...f.rules.map((r) => r.rect), ...f.icons.map((i) => i.rect)].map((r) => r.y + r.h);\n return bottoms.length > 0 ? Math.max(...bottoms) : fallback;\n}\n\n/** The picture region; for picture-bottom it starts 40u under the body's measured end, keeps the geometry's width and runs to the frame edge. */\nexport function pictureRegion(layout: LayoutId, geo: LayoutGeometry, body: FlowResult, u: number, frame: { width: number; height: number }): Rect {\n if (layout !== LayoutId.PictureBottom) {\n return geo.picture;\n }\n const y = Math.min(geo.picture.y, Math.ceil(measuredEnd(body, geo.body.y) + BODY_GAP * u));\n return { x: geo.picture.x, y, w: geo.picture.w, h: frame.height - y };\n}\n","import type { LayoutGeometry } from '../layout/geometry';\n\n/** Moves the picture edge that faces the body by give of the picture's size, handing that space to the body (and to a header stacked above it). */\nexport function yieldToText(geo: LayoutGeometry, give: number): LayoutGeometry {\n const { picture: p, body: b } = geo;\n if (give <= 0) {\n return geo;\n }\n if (p.x >= b.x + b.w) {\n const d = Math.round(p.w * give);\n return { ...geo, picture: { ...p, x: p.x + d, w: p.w - d }, body: { ...b, w: b.w + d } };\n }\n if (p.x + p.w <= b.x) {\n const d = Math.round(p.w * give);\n return { ...geo, picture: { ...p, w: p.w - d }, body: { ...b, x: b.x - d, w: b.w + d } };\n }\n if (p.y >= b.y + b.h) {\n const d = Math.round(p.h * give);\n const stacked = geo.header.y + geo.header.h <= b.y;\n const toHeader = stacked ? Math.round(d / 2) : 0;\n return {\n ...geo,\n header: { ...geo.header, h: geo.header.h + toHeader },\n picture: { ...p, y: p.y + d, h: p.h - d },\n body: { ...b, y: b.y + toHeader, h: b.h + d - toHeader },\n flanks: geo.flanks?.map((f) => ({ ...f, y: f.y + d, h: f.h - d })),\n };\n }\n return geo;\n}\n","import { LayoutId } from '../enums/LayoutId';\nimport { bodyGroups, flankPriceGroups, headerGroups } from '../layout/blockGroups';\nimport { geometry, type LayoutGeometry } from '../layout/geometry';\nimport { emptyFlow, flow, type FlowResult } from '../layout/textFlow';\nimport type { FlierDoc, FontSet, Palette, PosterContext, Rect } from '../types';\nimport { equalFlanks } from './regions';\nimport { yieldToText } from './yieldToText';\n\nexport const FLOOR_PX = 30;\nconst BASE = 1080;\nconst LINE_HEIGHT = 1.2;\nconst LOGO_SHARE = 0.26;\nconst GIVE_STEP = 0.025;\nconst GIVE_STEPS = 32;\n\nexport interface FittedText {\n geo: LayoutGeometry;\n zones: { text: Rect; logo: Rect };\n head: FlowResult;\n body: FlowResult;\n sides: FlowResult[];\n}\n\ninterface FitInput {\n doc: FlierDoc;\n palette: Palette;\n fonts: FontSet;\n width: number;\n height: number;\n}\n\nfunction splitHeader(header: Rect, hasLogo: boolean): { text: Rect; logo: Rect } {\n const logoW = hasLogo ? Math.round(header.w * LOGO_SHARE) : 0;\n return { text: { ...header, w: header.w - logoW * 1.1 }, logo: { ...header, x: header.x + header.w - logoW, w: logoW } };\n}\n\nfunction flowAll(ctx: PosterContext, input: FitInput, geo: LayoutGeometry, u: number): FittedText {\n const { doc, palette, fonts } = input;\n const zones = geo.logo ? { text: geo.header, logo: geo.logo } : splitHeader(geo.header, doc.logo !== undefined);\n const head = flow(ctx, headerGroups(doc, palette, u), zones.text, fonts);\n const flanks = geo.flanks ?? [];\n const body = flow(ctx, bodyGroups(doc, palette, u, flanks.length === 0), geo.body, fonts);\n const sides = flanks.length > 0 ? equalFlanks(ctx, flankPriceGroups(doc, palette, u), flanks, fonts) : [emptyFlow()];\n return { geo, zones, head, body, sides };\n}\n\nconst smallest = (t: FittedText): number => Math.min(Infinity, ...[t.head, t.body, ...t.sides].flatMap((f) => f.texts.map((x) => x.box.h / LINE_HEIGHT)));\n\nfunction geometryWithGive(layout: LayoutId, width: number, height: number, give: number): LayoutGeometry {\n return layout === LayoutId.PictureBottom ? geometry(layout, width, height, give) : yieldToText(geometry(layout, width, height), give);\n}\n\n/** Flows header, body and flanks, giving picture space to the text until every run reaches 30px at a 1080 short edge. */\nexport function fitToFloor(ctx: PosterContext, input: FitInput): FittedText {\n const { doc, width, height } = input;\n const u = Math.min(width, height) / BASE;\n const floor = FLOOR_PX * u;\n let fitted = flowAll(ctx, input, geometryWithGive(doc.layout, width, height, 0), u);\n for (let step = 1; step <= GIVE_STEPS && smallest(fitted) < floor; step++) {\n fitted = flowAll(ctx, input, geometryWithGive(doc.layout, width, height, step * GIVE_STEP), u);\n }\n return fitted;\n}\n","import { BackgroundStyle } from '../enums/BackgroundStyle';\nimport { PictureAnchor } from '../enums/PictureAnchor';\nimport { FONT_SETS } from '../fontSets';\nimport { FORMAT_SIZES } from '../formats';\nimport { placeContain, type LayoutGeometry } from '../layout/geometry';\nimport type { FlowResult } from '../layout/textFlow';\nimport { PALETTES } from '../palettes';\nimport { FlierDocError, missingAssets, validateFlierDoc } from '../schema/validateFlierDoc';\nimport { fitToFloor } from './fitToFloor';\nimport { pictureRegion } from './regions';\nimport type { FlierDoc, PosterAssets, PosterCanvas, PosterContext, Rect, RenderReport } from '../types';\n\nconst BASE = 1080;\nconst CARD_RADIUS = 0.035;\nconst CAP_TOP = 0.15;\nconst PIN_HEAD_Y = 0.08;\nconst PIN_HEAD_R = 0.19;\nconst PIN_TIP_Y = 0.28;\nconst PIN_HOLE = 0.42;\nconst ARC_START = 0.75;\nconst ARC_END = 2.25;\n\nfunction drawPin(ctx: PosterContext, r: Rect, color: string, glyph: string): void {\n const cx = r.x + r.w / 2;\n const cy = r.y + r.h / 2;\n const hy = cy - r.w * PIN_HEAD_Y;\n const rad = r.w * PIN_HEAD_R;\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.arc(cx, cy, r.w / 2, 0, Math.PI * 2);\n ctx.fill();\n ctx.fillStyle = glyph;\n ctx.beginPath();\n ctx.moveTo(cx, cy + r.w * PIN_TIP_Y);\n ctx.arc(cx, hy, rad, Math.PI * ARC_START, Math.PI * ARC_END);\n ctx.closePath();\n ctx.fill();\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.arc(cx, hy, rad * PIN_HOLE, 0, Math.PI * 2);\n ctx.fill();\n}\n\nfunction roundRect(ctx: PosterContext, r: Rect, radius: number): void {\n const rad = Math.min(radius, r.w / 2, r.h / 2);\n ctx.beginPath();\n ctx.moveTo(r.x + rad, r.y);\n ctx.arcTo(r.x + r.w, r.y, r.x + r.w, r.y + r.h, rad);\n ctx.arcTo(r.x + r.w, r.y + r.h, r.x, r.y + r.h, rad);\n ctx.arcTo(r.x, r.y + r.h, r.x, r.y, rad);\n ctx.arcTo(r.x, r.y, r.x + r.w, r.y, rad);\n ctx.closePath();\n ctx.fill();\n}\n\nfunction drawFlow(ctx: PosterContext, f: FlowResult, radius: number): void {\n f.rules.forEach((r) => {\n ctx.fillStyle = r.color;\n ctx.fillRect(r.rect.x, r.rect.y, r.rect.w, r.rect.h);\n });\n f.cards.forEach((c) => {\n ctx.fillStyle = c.color;\n roundRect(ctx, c.rect, radius);\n });\n f.bullets.forEach((b) => {\n ctx.fillStyle = b.color;\n ctx.beginPath();\n ctx.arc(b.x, b.y, b.r, 0, Math.PI * 2);\n ctx.fill();\n });\n f.icons.forEach((i) => drawPin(ctx, i.rect, i.color, i.glyph));\n ctx.textAlign = 'left';\n ctx.textBaseline = 'top';\n f.texts.forEach((t) => {\n ctx.font = t.font;\n ctx.fillStyle = t.color;\n ctx.fillText(t.text, t.box.x, t.box.y);\n });\n}\n\nfunction checked(input: unknown, assets: PosterAssets): FlierDoc {\n const result = validateFlierDoc(input);\n if (!result.ok) {\n throw new FlierDocError(result.errors);\n }\n const missing = missingAssets(result.doc, assets);\n if (missing.length > 0) {\n throw new FlierDocError(missing);\n }\n return result.doc;\n}\n\nfunction archRect(geo: LayoutGeometry): Rect | null {\n if (geo.arch === undefined) {\n return null;\n }\n const top = geo.picture.y + Math.round(geo.picture.h * geo.arch);\n return { x: geo.picture.x, y: top, w: geo.picture.w, h: geo.picture.y + geo.picture.h - top };\n}\n\nfunction drawArch(ctx: PosterContext, r: Rect, color: string): void {\n const rad = r.w / 2;\n ctx.fillStyle = color;\n ctx.fillRect(r.x, r.y + rad, r.w, r.h - rad);\n ctx.beginPath();\n ctx.arc(r.x + rad, r.y + rad, rad, Math.PI, Math.PI * 2);\n ctx.fill();\n}\n\nfunction capAligned(zone: Rect, head: FlowResult): Rect {\n const first = head.texts[0]?.box;\n const shift = first ? Math.min(Math.max(0, Math.round(first.y + first.h * CAP_TOP) - zone.y), Math.round(zone.h / 2)) : 0;\n return { ...zone, y: zone.y + shift, h: zone.h - shift };\n}\n\n/** Validates the doc, then draws it on the canvas (resized to the format); throws FlierDocError before touching the canvas. */\nexport function render(input: unknown, assets: PosterAssets, canvas: PosterCanvas): RenderReport {\n const doc = checked(input, assets);\n const { width, height } = FORMAT_SIZES[doc.format];\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('poster-render: the canvas has no 2d context');\n }\n const palette = PALETTES[doc.palette];\n const fonts = FONT_SETS[doc.fonts];\n const u = Math.min(width, height) / BASE;\n const { geo, zones, head, body, sides } = fitToFloor(ctx, { doc, palette, fonts, width, height });\n ctx.globalAlpha = 1;\n ctx.fillStyle = palette.background;\n ctx.fillRect(0, 0, width, height);\n if (doc.background === BackgroundStyle.Tint) {\n ctx.fillStyle = palette.tint;\n [geo.header, geo.body].forEach((r) => ctx.fillRect(r.x, r.y, r.w, r.h));\n }\n const radius = Math.min(width, height) * CARD_RADIUS;\n [head, body, ...sides].forEach((f) => drawFlow(ctx, f, radius));\n const logoImage = doc.logo ? assets[doc.logo.imageId] : undefined;\n const logo = logoImage ? placeContain(logoImage, geo.logo ? zones.logo : capAligned(zones.logo, head), PictureAnchor.Top, 1, 1) : null;\n if (logoImage && logo) {\n ctx.drawImage(logoImage, logo.x, logo.y, logo.w, logo.h);\n }\n const image = doc.picture ? assets[doc.picture.imageId] : undefined;\n const backdrop = image ? archRect(geo) : null;\n if (backdrop) {\n drawArch(ctx, backdrop, palette.arch);\n }\n const region = pictureRegion(doc.layout, geo, body, u, { width, height });\n const picture = image && doc.picture ? placeContain(image, region, doc.picture.anchor, geo.alignX, doc.picture.scale) : null;\n if (image && picture) {\n ctx.drawImage(image, picture.x, picture.y, picture.w, picture.h);\n }\n return {\n width,\n height,\n picture,\n pictureRegion: region,\n textBoxes: [head, body, ...sides].flatMap((f) => f.texts.map((t) => t.box)),\n cardBoxes: body.cards.map((c) => c.rect),\n iconBoxes: [head, body, ...sides].flatMap((f) => f.icons.map((i) => i.rect)),\n logo,\n backdrop,\n };\n}\n","export interface DataUrlCanvas {\n toDataURL(type: string): string;\n}\n\nconst PREFIX = 'data:image/png;base64,';\n\n/** Encodes the canvas as a PNG Blob of the canvas's exact pixel size. */\nexport function exportPng(canvas: DataUrlCanvas): Blob {\n const url = canvas.toDataURL('image/png');\n if (!url.startsWith(PREFIX)) {\n throw new Error('poster-render: the canvas did not return a PNG data URL');\n }\n const binary = atob(url.slice(PREFIX.length));\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new Blob([bytes], { type: 'image/png' });\n}\n","import { FormatId } from './enums/FormatId';\nimport { LayoutId } from './enums/LayoutId';\n\nexport interface LayoutCatalogueEntry {\n id: LayoutId;\n designId: string;\n label: string;\n description: string;\n formats: readonly FormatId[];\n}\n\nconst POSTERS = [FormatId.Story, FormatId.Post, FormatId.Square];\n\nexport const LAYOUT_CATALOGUE: readonly LayoutCatalogueEntry[] = [\n { id: LayoutId.PictureRight, designId: 'E-A', label: 'Picture right', description: 'Titles across the top, details on the left, the picture on the right standing on the bottom edge.', formats: POSTERS },\n { id: LayoutId.PictureLeft, designId: 'E-B', label: 'Picture left', description: 'Titles across the top, the picture on the left standing on the bottom edge, details on the right.', formats: POSTERS },\n { id: LayoutId.Arch, designId: 'E-C', label: 'Arch', description: 'Titles and details on top, the picture centred in a soft arch at the bottom, prices either side.', formats: POSTERS },\n { id: LayoutId.PictureBottom, designId: 'picture-bottom', label: 'Picture bottom', description: 'Titles and details on top, the picture across the bottom half.', formats: POSTERS },\n { id: LayoutId.List, designId: 'list', label: 'Upcoming list', description: 'Several dated events as a list beside the picture.', formats: POSTERS },\n { id: LayoutId.PhoneClockSafe, designId: 'P-A', label: 'Phone, clock clear', description: 'Lock-screen wallpaper: top kept clear for the clock, details on the left, picture on the right.', formats: [FormatId.Phone] },\n { id: LayoutId.PhoneArch, designId: 'P-B', label: 'Phone arch', description: 'Lock-screen wallpaper: top kept clear for the clock, details in the middle, the picture in an arch at the bottom.', formats: [FormatId.Phone] },\n { id: LayoutId.DesktopSafe, designId: 'D-A', label: 'Desktop, icons clear', description: 'Desktop wallpaper: text on the left clear of desktop icons and the taskbar, the picture on the right.', formats: [FormatId.Desktop] },\n { id: LayoutId.DesktopArch, designId: 'D-B', label: 'Desktop arch', description: 'Desktop wallpaper: titles left, the picture in a centred arch, details right.', formats: [FormatId.Desktop] },\n];\n\nconst DEFAULTS: Readonly<Record<FormatId, LayoutId>> = {\n [FormatId.Story]: LayoutId.PictureRight,\n [FormatId.Post]: LayoutId.PictureRight,\n [FormatId.Square]: LayoutId.PictureRight,\n [FormatId.Phone]: LayoutId.PhoneClockSafe,\n [FormatId.Desktop]: LayoutId.DesktopSafe,\n};\n\n/** The default layout for a format (D4: E-A for posters, P-A for phone, D-A for desktop). */\nexport function defaultLayoutFor(format: FormatId): LayoutId {\n return DEFAULTS[format];\n}\n","import { BackgroundStyle } from '../enums/BackgroundStyle';\nimport { FontSetId } from '../enums/FontSetId';\nimport { FormatId } from '../enums/FormatId';\nimport { LayoutId } from '../enums/LayoutId';\nimport { PaletteId } from '../enums/PaletteId';\nimport { PictureAnchor } from '../enums/PictureAnchor';\nimport type { FlierBlocks, FlierDoc, ScheduleRow } from '../types';\n\ninterface Workshop {\n script: string;\n date: string;\n first: string;\n second: string;\n party: string;\n}\n\nconst WORKSHOPS: Workshop[] = [\n { script: 'Saturday 31 October', date: 'Sat 31 Oct', first: '20:00 - 21:00', second: '21:00 - 22:00', party: '20€' },\n { script: 'Saturday 7 November', date: 'Sat 7 Nov', first: '20:00 - 21:00', second: '21:00 - 22:00', party: '15€' },\n { script: 'Sunday 29 November', date: 'Sun 29 Nov', first: '17:00 - 18:00', second: '18:00 - 19:00', party: '10€' },\n];\n\nconst INCLUDES = { heading: 'Party pass includes', items: ['Salsa & Bachata room', 'Kizomba dedicated room', '2 drinks'] };\n\nconst schedule = (w: Workshop): ScheduleRow[] => [\n { label: 'Level 1', time: w.first },\n { label: 'Level 2', time: w.second },\n];\n\nconst base = {\n version: 1 as const,\n format: FormatId.Story,\n palette: PaletteId.Sand,\n fonts: FontSetId.Classic,\n background: BackgroundStyle.Solid,\n picture: { imageId: 'dancers', anchor: PictureAnchor.Bottom, scale: 1 },\n logo: { imageId: 'logo' },\n};\n\nconst shared: Omit<FlierBlocks, 'title'> = {\n venue: ['Bailemos', 'Dance School'],\n includes: INCLUDES,\n footer: 'with Jimmy & Ismini',\n};\n\nconst workshopDoc = (w: Workshop): FlierDoc => ({\n ...base,\n layout: LayoutId.PictureRight,\n blocks: {\n ...shared,\n title: 'KIZOMBA',\n titleBottom: 'WORKSHOP',\n script: w.script,\n schedule: schedule(w),\n prices: [{ amount: '5€', label: 'per hour' }, { amount: w.party, label: 'Party pass' }],\n },\n});\n\nexport const kizombaWorkshop: FlierDoc = {\n ...base,\n layout: LayoutId.List,\n blocks: {\n ...shared,\n title: 'UPCOMING',\n titleBottom: 'WORKSHOPS',\n script: 'Kizomba',\n prices: [{ amount: '5€', label: 'per hour' }],\n },\n items: WORKSHOPS.map((w) => ({ date: w.date, schedule: schedule(w), price: `Party pass ${w.party}` })),\n};\n\nexport const kizombaWorkshopDocs: FlierDoc[] = [...WORKSHOPS.map(workshopDoc), kizombaWorkshop];\n"]}
1
+ {"version":3,"sources":["../src/enums/BackgroundStyle.ts","../src/enums/FontSetId.ts","../src/enums/FormatId.ts","../src/enums/LayoutId.ts","../src/enums/PaletteId.ts","../src/enums/PictureAnchor.ts","../src/formats.ts","../src/palettes.ts","../src/fontSets.ts","../src/schema/flierDocSchema.ts","../src/schema/validate.ts","../src/schema/validateFlierDoc.ts","../src/layout/layoutSpecs.ts","../src/layout/geometry.ts","../src/layout/blockGroups.ts","../src/layout/textFlow.ts","../src/render/regions.ts","../src/render/fitToFloor.ts","../src/render/render.ts","../src/exportPng.ts","../src/layoutCatalogue.ts","../src/examples/kizombaWorkshop.ts"],"names":["BackgroundStyle","FontSetId","FormatId","LayoutId","PaletteId","PictureAnchor","bottom","r","split","top","text","schedule","LINE_HEIGHT","smallest","MARGIN","base","BASE"],"mappings":"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","file":"index.js","sourcesContent":["export enum BackgroundStyle {\n Solid = 'solid',\n Tint = 'tint',\n}\n","export enum FontSetId {\n Classic = 'classic',\n Modern = 'modern',\n Elegant = 'elegant',\n}\n","export enum FormatId {\n Story = 'story',\n Post = 'post',\n Square = 'square',\n Phone = 'phone',\n Desktop = 'desktop',\n}\n","export enum LayoutId {\n PictureRight = 'picture-right',\n PictureLeft = 'picture-left',\n PictureBottom = 'picture-bottom',\n List = 'list',\n Arch = 'arch',\n PhoneClockSafe = 'phone-clock-safe',\n PhoneArch = 'phone-arch',\n DesktopSafe = 'desktop-safe',\n DesktopArch = 'desktop-arch',\n}\n","export enum PaletteId {\n Sand = 'sand',\n Night = 'night',\n Sea = 'sea',\n Rose = 'rose',\n}\n","export enum PictureAnchor {\n Top = 'top',\n Center = 'center',\n Bottom = 'bottom',\n}\n","import { FormatId } from './enums/FormatId';\n\nexport interface FormatSize {\n width: number;\n height: number;\n}\n\nexport const FORMAT_SIZES: Readonly<Record<FormatId, FormatSize>> = {\n [FormatId.Story]: { width: 1080, height: 1920 },\n [FormatId.Post]: { width: 1080, height: 1350 },\n [FormatId.Square]: { width: 1080, height: 1080 },\n [FormatId.Phone]: { width: 1170, height: 2532 },\n [FormatId.Desktop]: { width: 2560, height: 1440 },\n};\n","import { PaletteId } from './enums/PaletteId';\nimport type { Palette } from './types';\n\nexport const PALETTES: Readonly<Record<PaletteId, Palette>> = {\n [PaletteId.Sand]: { background: '#f5f4f2', tint: '#ece8e3', title: '#958a80', accent: '#e9b47f', ink: '#5f564f', soft: '#b3a89e', card: '#ffffff', arch: '#ede8e2' },\n [PaletteId.Night]: { background: '#1c1a17', tint: '#25221e', title: '#e8dccb', accent: '#e9b47f', ink: '#f4efe8', soft: '#9c9284', card: '#2c2824', arch: '#25221f' },\n [PaletteId.Sea]: { background: '#eef4f3', tint: '#e1ecea', title: '#4f7d7a', accent: '#e07a5f', ink: '#2f3e46', soft: '#8aa3a1', card: '#ffffff', arch: '#e4ecea' },\n [PaletteId.Rose]: { background: '#f8efec', tint: '#f1e2dd', title: '#9b6b63', accent: '#c9846f', ink: '#4a3934', soft: '#b39a92', card: '#ffffff', arch: '#f1e5e1' },\n};\n","import { FontSetId } from './enums/FontSetId';\nimport type { FontSet } from './types';\n\nexport const FONT_SETS: Readonly<Record<FontSetId, FontSet>> = {\n [FontSetId.Classic]: { display: '\"Oswald\", \"Arial Narrow\", sans-serif', script: '\"Sacramento\", cursive', body: '\"Fredoka\", sans-serif' },\n [FontSetId.Modern]: { display: '\"Bebas Neue\", \"Arial Narrow\", sans-serif', script: '\"Great Vibes\", cursive', body: '\"Montserrat\", sans-serif' },\n [FontSetId.Elegant]: { display: '\"Playfair Display\", serif', script: '\"Allura\", cursive', body: '\"Lato\", sans-serif' },\n};\n","import { BackgroundStyle } from '../enums/BackgroundStyle';\nimport { FontSetId } from '../enums/FontSetId';\nimport { FormatId } from '../enums/FormatId';\nimport { LayoutId } from '../enums/LayoutId';\nimport { PaletteId } from '../enums/PaletteId';\nimport { PictureAnchor } from '../enums/PictureAnchor';\nimport type { JsonSchema } from './jsonSchemaTypes';\n\nconst SHORT = 60;\nconst LINE = 120;\nconst MAX_ROWS = 6;\nconst MAX_ITEMS = 8;\nconst MAX_PRICES = 4;\nconst MAX_VENUE = 3;\nconst MIN_SCALE = 0.3;\n\nconst text = (maxLength: number): JsonSchema => ({ type: 'string', minLength: 1, maxLength });\n\nconst scheduleRow: JsonSchema = {\n type: 'object',\n required: ['label', 'time'],\n additionalProperties: false,\n properties: { label: text(SHORT), time: text(SHORT) },\n};\n\nconst scheduleList: JsonSchema = { type: 'array', items: scheduleRow, minItems: 1, maxItems: MAX_ROWS };\n\nconst blocks: JsonSchema = {\n type: 'object',\n required: ['title'],\n additionalProperties: false,\n properties: {\n title: text(SHORT),\n titleBottom: text(SHORT),\n script: text(SHORT),\n venue: { type: 'array', items: text(SHORT), minItems: 1, maxItems: MAX_VENUE },\n schedule: scheduleList,\n prices: {\n type: 'array',\n minItems: 1,\n maxItems: MAX_PRICES,\n items: {\n type: 'object',\n required: ['amount', 'label'],\n additionalProperties: false,\n properties: { amount: text(SHORT), label: text(SHORT) },\n },\n },\n includes: {\n type: 'object',\n required: ['heading', 'items'],\n additionalProperties: false,\n properties: { heading: text(SHORT), items: { type: 'array', items: text(LINE), minItems: 1, maxItems: MAX_ROWS } },\n },\n footer: text(LINE),\n },\n};\n\nexport const flierDocSchema: JsonSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: 'https://dloizides.com/schemas/flier-doc-v1.json',\n title: 'FlierDoc',\n description: 'One poster or wallpaper: format, layout, palette, fonts, picture slot and text blocks.',\n type: 'object',\n required: ['version', 'format', 'layout', 'palette', 'fonts', 'background', 'blocks'],\n additionalProperties: false,\n properties: {\n version: { const: 1 },\n format: { type: 'string', enum: Object.values(FormatId) },\n layout: { type: 'string', enum: Object.values(LayoutId) },\n palette: { type: 'string', enum: Object.values(PaletteId) },\n fonts: { type: 'string', enum: Object.values(FontSetId) },\n background: { type: 'string', enum: Object.values(BackgroundStyle) },\n picture: {\n type: 'object',\n required: ['imageId', 'anchor', 'scale'],\n additionalProperties: false,\n properties: {\n imageId: text(SHORT),\n anchor: { type: 'string', enum: Object.values(PictureAnchor) },\n scale: { type: 'number', minimum: MIN_SCALE, maximum: 1 },\n },\n },\n logo: { type: 'object', required: ['imageId'], additionalProperties: false, properties: { imageId: text(SHORT) } },\n blocks,\n items: {\n type: 'array',\n minItems: 1,\n maxItems: MAX_ITEMS,\n items: {\n type: 'object',\n required: ['date', 'schedule'],\n additionalProperties: false,\n properties: { date: text(SHORT), schedule: scheduleList, price: text(SHORT) },\n },\n },\n },\n};\n","import type { JsonSchema } from './jsonSchemaTypes';\n\nexport const typeName = (v: unknown): string => {\n if (v === null) {\n return 'null';\n }\n return Array.isArray(v) ? 'array' : typeof v;\n};\n\nconst join = (path: string, key: string): string => (path === '' ? key : `${path}.${key}`);\nconst show = (v: unknown): string => JSON.stringify(v) ?? typeName(v);\n\nconst ARTICLE: Record<string, string> = { object: 'an object', array: 'an array', string: 'a string', number: 'a number', integer: 'an integer' };\n\nfunction matchesType(schema: JsonSchema, value: unknown): boolean {\n switch (schema.type) {\n case undefined:\n return true;\n case 'integer':\n return Number.isInteger(value);\n case 'number':\n return typeof value === 'number' && Number.isFinite(value);\n default:\n return typeName(value) === schema.type;\n }\n}\n\nfunction checkString(schema: JsonSchema, value: string, path: string, errors: string[]): void {\n if (schema.minLength !== undefined && value.trim().length < schema.minLength) {\n errors.push(`${path}: must not be empty`);\n }\n if (schema.maxLength !== undefined && value.length > schema.maxLength) {\n errors.push(`${path}: must be at most ${schema.maxLength} characters (got ${value.length})`);\n }\n}\n\nfunction checkNumber(schema: JsonSchema, value: number, path: string, errors: string[]): void {\n if (schema.minimum !== undefined && value < schema.minimum) {\n errors.push(`${path}: must be at least ${schema.minimum} (got ${value})`);\n }\n if (schema.maximum !== undefined && value > schema.maximum) {\n errors.push(`${path}: must be at most ${schema.maximum} (got ${value})`);\n }\n}\n\nfunction checkArray(schema: JsonSchema, value: unknown[], path: string, errors: string[]): void {\n if (schema.minItems !== undefined && value.length < schema.minItems) {\n errors.push(`${path}: must have at least ${schema.minItems} entries (got ${value.length})`);\n }\n if (schema.maxItems !== undefined && value.length > schema.maxItems) {\n errors.push(`${path}: must have at most ${schema.maxItems} entries (got ${value.length})`);\n return;\n }\n const itemSchema = schema.items;\n if (itemSchema) {\n value.forEach((item, i) => validateAgainst(itemSchema, item, `${path}[${i}]`, errors));\n }\n}\n\nfunction checkObject(schema: JsonSchema, value: Record<string, unknown>, path: string, errors: string[]): void {\n const props = schema.properties ?? {};\n for (const key of schema.required ?? []) {\n if (value[key] === undefined) {\n errors.push(`${join(path, key)}: is required`);\n }\n }\n for (const [key, child] of Object.entries(value)) {\n const childSchema = Object.hasOwn(props, key) ? props[key] : undefined;\n if (childSchema === undefined) {\n if (schema.additionalProperties === false) {\n errors.push(`${join(path, key)}: is not allowed`);\n }\n } else if (child !== undefined) {\n validateAgainst(childSchema, child, join(path, key), errors);\n }\n }\n}\n\nexport function validateAgainst(schema: JsonSchema, value: unknown, path: string, errors: string[]): void {\n if (schema.const !== undefined) {\n if (value !== schema.const) {\n errors.push(`${path}: must be ${schema.const} (got ${show(value)})`);\n }\n return;\n }\n if (!matchesType(schema, value)) {\n errors.push(`${path}: must be ${ARTICLE[schema.type ?? 'object']} (got ${typeName(value)})`);\n return;\n }\n if (schema.enum && !schema.enum.includes(value as string)) {\n errors.push(`${path}: must be one of ${schema.enum.join(', ')} (got ${show(value)})`);\n return;\n }\n if (typeof value === 'string') {\n checkString(schema, value, path, errors);\n } else if (typeof value === 'number') {\n checkNumber(schema, value, path, errors);\n } else if (Array.isArray(value)) {\n checkArray(schema, value, path, errors);\n } else if (typeName(value) === 'object') {\n checkObject(schema, value as Record<string, unknown>, path, errors);\n }\n}\n","import { LayoutId } from '../enums/LayoutId';\nimport type { FlierDoc, PosterAssets } from '../types';\nimport { flierDocSchema } from './flierDocSchema';\nimport { typeName, validateAgainst } from './validate';\n\nexport type FlierDocResult = { ok: true; doc: FlierDoc } | { ok: false; errors: string[] };\n\nexport class FlierDocError extends Error {\n public readonly errors: string[];\n\n public constructor(errors: string[]) {\n super(`Invalid flier: ${errors.join('; ')}`);\n this.name = 'FlierDocError';\n this.errors = errors;\n }\n}\n\n/** Checks any input (form, preset file, LLM output) against the FlierDoc schema; errors read \"path: problem\". */\nexport function validateFlierDoc(input: unknown): FlierDocResult {\n if (typeName(input) !== 'object') {\n return { ok: false, errors: ['doc: must be an object'] };\n }\n const errors: string[] = [];\n validateAgainst(flierDocSchema, input, '', errors);\n const doc = input as FlierDoc;\n if (doc.layout === LayoutId.List && (doc.items === undefined || doc.items.length === 0)) {\n errors.push('items: layout \"list\" needs at least one item');\n }\n return errors.length === 0 ? { ok: true, doc } : { ok: false, errors };\n}\n\nexport function missingAssets(doc: FlierDoc, assets: PosterAssets): string[] {\n const errors: string[] = [];\n if (doc.picture && !Object.hasOwn(assets, doc.picture.imageId)) {\n errors.push(`picture.imageId: no asset named \"${doc.picture.imageId}\"`);\n }\n if (doc.logo && !Object.hasOwn(assets, doc.logo.imageId)) {\n errors.push(`logo.imageId: no asset named \"${doc.logo.imageId}\"`);\n }\n return errors;\n}\n","import { LayoutId } from '../enums/LayoutId';\nimport type { Rect } from '../types';\n\ntype Frac = [number, number, number, number];\n\nexport interface LayoutSpec {\n header: Frac;\n body: Frac;\n picture: Frac;\n alignX: number;\n flanks?: [Frac, Frac];\n logo?: Frac;\n arch?: number;\n}\n\ninterface OrientedSpec {\n portrait: LayoutSpec;\n landscape: LayoutSpec;\n}\n\nconst flanksBeside = (pic: Frac, top: number, bottom: number, m: number): [Frac, Frac] => [\n [m, top, pic[0] - 2 * m, bottom - top],\n [pic[0] + pic[2] + m, top, 1 - pic[0] - pic[2] - 2 * m, bottom - top],\n];\n\nconst ARCH_PIC: Frac = [0.22, 0.42, 0.56, 0.58];\nconst PHONE_ARCH_PIC: Frac = [0.2, 0.6, 0.6, 0.4];\nconst DESK_ARCH_PIC: Frac = [0.355, 0.07, 0.32, 0.93];\n\nconst ARCH_LANDSCAPE: LayoutSpec = {\n header: [0.04, 0.06, 0.3, 0.5],\n body: [0.04, 0.58, 0.3, 0.36],\n picture: [0.36, 0.08, 0.3, 0.92],\n alignX: 0.5,\n flanks: [[0.68, 0.08, 0.28, 0.42], [0.68, 0.52, 0.28, 0.42]],\n arch: 0.06,\n};\n\nexport const LAYOUT_SPECS: Partial<Record<LayoutId, OrientedSpec>> = {\n [LayoutId.Arch]: {\n portrait: { header: [0.045, 0.025, 0.91, 0.18], body: [0.045, 0.215, 0.91, 0.19], picture: ARCH_PIC, alignX: 0.5, flanks: flanksBeside(ARCH_PIC, 0.44, 0.97, 0.03), arch: 0.04 },\n landscape: ARCH_LANDSCAPE,\n },\n [LayoutId.PhoneClockSafe]: {\n portrait: { header: [0.045, 0.28, 0.91, 0.2], body: [0.045, 0.5, 0.42, 0.44], picture: [0.48, 0.5, 0.52, 0.5], alignX: 1 },\n landscape: { header: [0.04, 0.2, 0.52, 0.3], body: [0.04, 0.52, 0.52, 0.42], picture: [0.6, 0.12, 0.4, 0.88], alignX: 1 },\n },\n [LayoutId.PhoneArch]: {\n portrait: { header: [0.045, 0.3, 0.91, 0.13], body: [0.045, 0.44, 0.91, 0.14], picture: PHONE_ARCH_PIC, alignX: 0.5, flanks: flanksBeside(PHONE_ARCH_PIC, 0.63, 0.94, 0.03), arch: 0.08 },\n landscape: { ...ARCH_LANDSCAPE, header: [0.04, 0.16, 0.3, 0.42], picture: [0.36, 0.16, 0.3, 0.84] },\n },\n [LayoutId.DesktopSafe]: {\n portrait: { header: [0.08, 0.06, 0.84, 0.24], body: [0.08, 0.31, 0.46, 0.58], picture: [0.56, 0.36, 0.44, 0.64], alignX: 1 },\n landscape: { header: [0.0625, 0.05, 0.58, 0.44], body: [0.0625, 0.5, 0.58, 0.38], picture: [0.67, 0.0972, 0.29, 0.9028], alignX: 1, logo: [0.4, 0.045, 0.09, 0.17] },\n },\n [LayoutId.DesktopArch]: {\n portrait: { header: [0.08, 0.06, 0.84, 0.2], body: [0.08, 0.27, 0.84, 0.2], picture: [0.14, 0.48, 0.72, 0.52], alignX: 0.5, arch: 0.05 },\n landscape: { header: [0.07, 0.3, 0.26, 0.45], body: [0.7, 0.25, 0.27, 0.65], picture: DESK_ARCH_PIC, alignX: 0.5, logo: [0.86, 0.03, 0.11, 0.18], arch: 0.05 },\n },\n};\n\nconst r = Math.round;\n\nexport const toRect = (f: Frac, w: number, h: number): Rect => {\n const x = r(f[0] * w);\n const y = r(f[1] * h);\n return { x, y, w: r((f[0] + f[2]) * w) - x, h: r((f[1] + f[3]) * h) - y };\n};\n","import { LayoutId } from '../enums/LayoutId';\r\nimport { PictureAnchor } from '../enums/PictureAnchor';\r\nimport type { PosterImage, Rect } from '../types';\r\nimport { LAYOUT_SPECS, toRect } from './layoutSpecs';\r\n\r\nexport interface LayoutGeometry {\r\n header: Rect;\r\n body: Rect;\r\n picture: Rect;\r\n alignX: number;\r\n flanks?: Rect[];\r\n logo?: Rect;\r\n arch?: number;\r\n}\r\n\r\nconst MARGIN = 0.045;\r\nconst HEADER_PORTRAIT = 0.3;\r\nconst HEADER_LANDSCAPE = 0.36;\r\nconst BOTTOM_PICTURE_W = 0.8;\r\nconst BOTTOM_MIN_TOP = 0.25;\r\nconst BOTTOM_HEADER_SHARE = 0.3;\r\nconst BOTTOM_GAP = 40 / 1080;\r\nconst BOTTOM_ASPECT = 0.57;\r\nconst DEFAULT_SIDE: [number, number] = [0.6, 0.42];\r\nconst PICTURE_SIDE: Record<string, [number, number]> = {\r\n [LayoutId.PictureRight]: DEFAULT_SIDE,\r\n [LayoutId.PictureLeft]: DEFAULT_SIDE,\r\n [LayoutId.List]: [0.5, 0.36],\r\n};\r\nconst SHORT_PORTRAIT = 1.5;\r\nconst SHORT_PICTURE_W = 0.5;\r\nconst SHORT_PICTURE_H = 0.75;\r\nconst ANCHOR_Y: Record<PictureAnchor, number> = { [PictureAnchor.Top]: 0, [PictureAnchor.Center]: 0.5, [PictureAnchor.Bottom]: 1 };\r\n\r\nconst r = Math.round;\r\n\r\nfunction side(w: number, h: number, fraction: [number, number]): LayoutGeometry {\r\n const m = r(Math.min(w, h) * MARGIN);\r\n if (h >= w) {\r\n const split = r(w * (1 - fraction[0]));\r\n const top = r(h * HEADER_PORTRAIT);\r\n return {\r\n header: { x: m, y: m, w: w - 2 * m, h: top - 2 * m },\r\n picture: { x: split, y: top, w: w - split, h: h - top },\r\n body: { x: m, y: top, w: split - 2 * m, h: h - top - m },\r\n alignX: 1,\r\n };\r\n }\r\n const split = r(w * (1 - fraction[1]));\r\n const top = r(h * HEADER_LANDSCAPE);\r\n return {\r\n header: { x: m, y: m, w: split - 2 * m, h: top - m },\r\n picture: { x: split, y: 0, w: w - split, h },\r\n body: { x: m, y: top + r(m / 2), w: split - 2 * m, h: h - top - r(m / 2) - m },\r\n alignX: 1,\r\n };\r\n}\r\n\r\nfunction shortSide(w: number, h: number): LayoutGeometry {\r\n const m = r(Math.min(w, h) * MARGIN);\r\n const picW = r(w * SHORT_PICTURE_W);\r\n const picH = r(h * SHORT_PICTURE_H);\r\n const top = r(h * HEADER_PORTRAIT);\r\n const textW = w - picW - 2 * m;\r\n return {\r\n header: { x: m, y: m, w: textW, h: top - 2 * m },\r\n body: { x: m, y: top, w: textW, h: h - top - m },\r\n picture: { x: w - picW, y: h - picH, w: picW, h: picH },\r\n logo: { x: w - picW + m, y: m, w: picW - 2 * m, h: h - picH - 2 * m },\r\n alignX: 1,\r\n };\r\n}\r\n\r\nfunction bottom(w: number, h: number, share: number): LayoutGeometry {\r\n const m = r(Math.min(w, h) * MARGIN);\r\n const gap = r(Math.min(w, h) * BOTTOM_GAP);\r\n const picW = r(w * share);\r\n const picH = Math.min(r(picW / BOTTOM_ASPECT), r(((h - r(h * BOTTOM_MIN_TOP)) * share) / BOTTOM_PICTURE_W));\r\n const pic = h - picH;\r\n const top = m + r((pic - m) * BOTTOM_HEADER_SHARE);\r\n return {\r\n header: { x: m, y: m, w: w - 2 * m, h: top - m },\r\n body: { x: m, y: top, w: w - 2 * m, h: pic - gap - top },\r\n picture: { x: r((w - picW) / 2), y: pic, w: picW, h: picH },\r\n alignX: 0.5,\r\n };\r\n}\r\n\r\nfunction fromSpec(spec: NonNullable<(typeof LAYOUT_SPECS)[LayoutId]>['portrait'], w: number, h: number): LayoutGeometry {\r\n return {\r\n header: toRect(spec.header, w, h),\r\n body: toRect(spec.body, w, h),\r\n picture: toRect(spec.picture, w, h),\r\n alignX: spec.alignX,\r\n flanks: spec.flanks?.map((f) => toRect(f, w, h)),\r\n logo: spec.logo ? toRect(spec.logo, w, h) : undefined,\r\n arch: spec.arch,\r\n };\r\n}\r\n\r\nconst mirror = (rect: Rect, w: number): Rect => ({ ...rect, x: w - rect.x - rect.w });\r\n\r\n/** Splits the canvas into header, body and picture regions that never overlap; give narrows the picture-bottom picture only. */\r\nexport function geometry(layout: LayoutId, w: number, h: number, give = 0): LayoutGeometry {\r\n const oriented = LAYOUT_SPECS[layout];\r\n if (oriented) {\r\n return fromSpec(h >= w ? oriented.portrait : oriented.landscape, w, h);\r\n }\r\n if (layout === LayoutId.PictureBottom) {\r\n return bottom(w, h, BOTTOM_PICTURE_W - give);\r\n }\r\n const isSide = layout === LayoutId.PictureRight || layout === LayoutId.PictureLeft;\r\n const g = isSide && h >= w && h < w * SHORT_PORTRAIT ? shortSide(w, h) : side(w, h, PICTURE_SIDE[layout] ?? DEFAULT_SIDE);\r\n if (layout !== LayoutId.PictureLeft) {\r\n return g;\r\n }\r\n return { header: mirror(g.header, w), body: mirror(g.body, w), picture: mirror(g.picture, w), logo: g.logo ? mirror(g.logo, w) : undefined, alignX: 1 - g.alignX };\r\n}\r\n\r\nexport interface ContainFit {\r\n anchor: PictureAnchor;\r\n alignX: number;\r\n scale: number;\r\n}\r\n\r\n/** Fits the whole image inside the region (contain), scaled and anchored; never crops it. */\r\nexport function placeContain(image: PosterImage, region: Rect, fit: ContainFit): Rect {\r\n const { anchor, alignX, scale } = fit;\r\n const s = Math.min(region.w / image.width, region.h / image.height) * scale;\r\n const w = Math.floor(image.width * s);\r\n const h = Math.floor(image.height * s);\r\n return {\r\n x: region.x + Math.floor((region.w - w) * alignX),\r\n y: region.y + Math.floor((region.h - h) * ANCHOR_Y[anchor]),\r\n w,\r\n h,\r\n };\r\n}\r\n","import { LayoutId } from '../enums/LayoutId';\r\nimport type { FlierDoc, ListItem, Palette } from '../types';\r\nimport type { FlowGroup, FlowLine } from './textFlow';\r\n\r\nconst BOLD = 700;\r\nconst SEMI = 600;\r\nconst MEDIUM = 500;\r\nconst SCRIPT = 400;\r\n\r\nconst SIZE = {\r\n title: 250,\r\n headerScript: 120,\r\n itemDate: 67,\r\n itemRow: 42,\r\n scheduleLabel: 66,\r\n scheduleTime: 60,\r\n priceAmount: 66,\r\n priceLabel: 52,\r\n listPrice: 58,\r\n flankAmount: 110,\r\n flankLabel: 48,\r\n venue: 58,\r\n listVenue: 48,\r\n small: 38,\r\n} as const;\r\n\r\nconst GAP = {\r\n item: 48,\r\n row: 30,\r\n venue: 40,\r\n includes: 24,\r\n rule: 8,\r\n} as const;\r\n\r\ntype Line = (text: string, size: number) => FlowLine;\r\n\r\ninterface Makers {\r\n display: Line;\r\n venue: Line;\r\n script: Line;\r\n strong: Line;\r\n accent: Line;\r\n item: Line;\r\n soft: Line;\r\n}\r\n\r\nconst makers = (p: Palette, u: number): Makers => ({\r\n display: (text, size) => ({ text, role: 'display', weight: BOLD, size: size * u, color: p.title }),\r\n venue: (text, size) => ({ text, role: 'display', weight: MEDIUM, size: size * u, color: p.ink }),\r\n script: (text, size) => ({ text, role: 'script', weight: SCRIPT, size: size * u, color: p.accent }),\r\n strong: (text, size) => ({ text, role: 'body', weight: BOLD, size: size * u, color: p.ink }),\r\n accent: (text, size) => ({ text, role: 'body', weight: SEMI, size: size * u, color: p.accent }),\r\n item: (text, size) => ({ text, role: 'body', weight: SEMI, size: size * u, color: p.ink, bullet: p.accent }),\r\n soft: (text, size) => ({ text, role: 'body', weight: MEDIUM, size: size * u, color: p.soft }),\r\n});\r\n\r\nexport function headerGroups(doc: FlierDoc, p: Palette, u: number): FlowGroup[] {\r\n const l = makers(p, u);\r\n const b = doc.blocks;\r\n const lines = [l.display(b.title, SIZE.title), b.script ? l.script(b.script, SIZE.headerScript) : undefined, b.titleBottom ? l.display(b.titleBottom, SIZE.title) : undefined];\r\n return [{ lines: lines.filter((x): x is FlowLine => x !== undefined), gapAfter: 0 }];\r\n}\r\n\r\nfunction itemGroup(item: ListItem, l: Makers, u: number): FlowGroup {\r\n const lines: FlowLine[] = [l.script(item.date, SIZE.itemDate)];\r\n item.schedule.forEach((row) => lines.push(l.strong(`${row.label} ${row.time}`, SIZE.itemRow)));\r\n if (item.price) {\r\n lines.push(l.accent(item.price, SIZE.itemRow));\r\n }\r\n return { lines, gapAfter: GAP.item * u };\r\n}\r\n\r\nexport interface BodyOptions {\r\n withPrices?: boolean;\r\n compact?: boolean;\r\n wrap?: boolean;\r\n}\r\n\r\nconst WRAP_FROM = 14;\r\n\r\nfunction halves(text: string): string[] {\r\n const mid = text.length / 2;\r\n const spaces = [...text].flatMap((c, i) => (c === ' ' ? [i] : []));\r\n if (text.length < WRAP_FROM || spaces.length === 0) {\r\n return [text];\r\n }\r\n const cut = spaces.reduce((best, i) => (Math.abs(i - mid) < Math.abs(best - mid) ? i : best));\r\n return [text.slice(0, cut), text.slice(cut + 1)];\r\n}\r\n\r\nfunction wrapped(line: FlowLine, wrap: boolean | undefined): FlowLine[] {\r\n const parts = wrap ? halves(line.text) : [line.text];\r\n return parts.map((text, i) => (i === 0 ? { ...line, text } : { ...line, text, bullet: undefined, hang: line.bullet !== undefined }));\r\n}\r\n\r\nfunction eventGroups(doc: FlierDoc, l: Makers, u: number, options: BodyOptions): FlowGroup[] {\r\n const b = doc.blocks;\r\n const groups: FlowGroup[] = [];\r\n const schedule = b.schedule ?? [];\r\n schedule.forEach((row, i) => {\r\n const lines = options.compact ? [l.strong(`${row.label} ${row.time}`, SIZE.scheduleLabel)] : [l.strong(row.label, SIZE.scheduleLabel), l.accent(row.time, SIZE.scheduleTime)];\r\n groups.push({ lines, gapAfter: GAP.row * u, keepWithNext: i < schedule.length - 1 });\r\n });\r\n const prices = (options.withPrices === false ? undefined : b.prices) ?? [];\r\n prices.forEach((row, i) => {\r\n const lines = options.compact ? [l.strong(`${row.amount} ${row.label}`, SIZE.priceAmount)] : [l.strong(row.amount, SIZE.priceAmount), l.accent(row.label, SIZE.priceLabel)];\r\n groups.push({ lines, gapAfter: GAP.row * u, keepWithNext: i < prices.length - 1 });\r\n });\r\n return groups;\r\n}\r\n\r\nfunction listGroups(doc: FlierDoc, l: Makers, u: number): FlowGroup[] {\r\n const groups = (doc.items ?? []).map((item) => itemGroup(item, l, u));\r\n const prices = doc.blocks.prices?.map((row) => l.strong(`${row.amount} ${row.label}`, SIZE.listPrice)) ?? [];\r\n if (prices.length > 0) {\r\n groups.push({ lines: prices, gapAfter: GAP.row * u });\r\n }\r\n return groups;\r\n}\r\n\r\n/** Price groups set large for the flank zones beside an arch. */\r\nexport function flankPriceGroups(doc: FlierDoc, p: Palette, u: number): FlowGroup[] {\r\n const l = makers(p, u);\r\n return (doc.blocks.prices ?? []).map((row) => ({ lines: [l.strong(row.amount, SIZE.flankAmount), l.accent(row.label, SIZE.flankLabel)], gapAfter: GAP.row * u }));\r\n}\r\n\r\n/** Turns the doc's body blocks into flow groups: venue with its pin, schedule or list items, prices, includes, footer; compact sets each schedule and price row on one line. */\r\nexport function bodyGroups(doc: FlierDoc, p: Palette, u: number, options: BodyOptions = {}): FlowGroup[] {\r\n const l = makers(p, u);\r\n const b = doc.blocks;\r\n const groups: FlowGroup[] = [];\r\n const isList = doc.layout === LayoutId.List;\r\n if (b.venue) {\r\n const size = isList ? SIZE.listVenue : SIZE.venue;\r\n const keepWithNext = !isList && (b.schedule?.length ?? 0) > 0;\r\n groups.push({ lines: b.venue.map((v) => l.venue(v, size)), gapAfter: GAP.venue * u, rule: { color: p.accent, height: GAP.rule * u }, ruleBelow: true, icon: { color: p.accent, glyph: p.background }, keepWithNext });\r\n }\r\n groups.push(...(isList ? listGroups(doc, l, u) : eventGroups(doc, l, u, options)));\r\n if (b.includes) {\r\n const lines = [l.accent(b.includes.heading, SIZE.small), ...b.includes.items.map((i) => l.item(i, SIZE.small))].flatMap((line) => wrapped(line, options.wrap));\r\n groups.push({ lines, gapAfter: GAP.includes * u, uniform: true });\r\n }\r\n if (b.footer) {\r\n groups.push({ lines: wrapped(l.soft(b.footer, SIZE.small), options.wrap), gapAfter: 0 });\r\n }\r\n return groups;\r\n}\r\n","import type { FontSet, PosterContext, Rect } from '../types';\r\n\r\nexport interface FlowLine {\r\n text: string;\r\n role: keyof FontSet;\r\n weight: number;\r\n size: number;\r\n color: string;\r\n bullet?: string;\r\n hang?: boolean;\r\n}\r\n\r\nexport interface FlowGroup {\r\n lines: FlowLine[];\r\n gapAfter: number;\r\n card?: { color: string; pad: number };\r\n rule?: { color: string; height: number };\r\n ruleBelow?: boolean;\r\n uniform?: boolean;\r\n icon?: { color: string; glyph: string };\r\n keepWithNext?: boolean;\r\n}\r\n\r\nexport interface FlowZone extends Rect {\r\n right?: boolean;\r\n}\r\n\r\nexport interface TextOp {\r\n text: string;\r\n font: string;\r\n color: string;\r\n box: Rect;\r\n}\r\n\r\nexport interface FlowResult {\r\n texts: TextOp[];\r\n cards: { rect: Rect; color: string }[];\r\n rules: { rect: Rect; color: string }[];\r\n bullets: { x: number; y: number; r: number; color: string }[];\r\n icons: { rect: Rect; color: string; glyph: string }[];\r\n}\r\n\r\ninterface Measured {\r\n group: FlowGroup;\r\n widths: number[];\r\n}\r\n\r\nconst LINE_HEIGHT = 1.2;\r\nconst BULLET_INDENT = 1.1;\r\nconst BULLET_RADIUS = 0.2;\r\nconst RULE_GAP = 2.5;\r\nconst RULE_WIDTH = 0.9;\r\nconst WIDE = 1.6;\r\nconst COLUMN_GAP = 0.04;\r\nconst TWO_COLUMN_MIN = 0.75;\r\nconst TWO_COLUMN_GAIN = 1.15;\r\nconst MIN_K = 0.02;\r\nconst STEPS = 22;\r\nconst ICON_SCALE = 1.6;\r\nconst ICON_GAP = 0.35;\r\n\r\nexport const fontOf = (line: FlowLine, size: number, fonts: FontSet): string => `${line.weight} ${size}px ${fonts[line.role]}`;\r\n\r\nexport const emptyFlow = (): FlowResult => ({ texts: [], cards: [], rules: [], bullets: [], icons: [] });\r\n\r\nconst indented = (line: FlowLine): boolean => line.bullet !== undefined || line.hang === true;\r\n\r\nconst iconSize = (group: FlowGroup, k: number): number => {\r\n const first = group.lines[0];\r\n return group.icon && first ? first.size * k * LINE_HEIGHT * ICON_SCALE : 0;\r\n};\r\n\r\nfunction lineSize(line: FlowLine, width: number, k: number, avail: number): number {\r\n const indent = indented(line) ? line.size * k * BULLET_INDENT : 0;\r\n return Math.max(0, Math.min(line.size * k, (line.size * (avail - indent)) / Math.max(width, 1)));\r\n}\r\n\r\nfunction groupRatio(m: Measured, k: number, avail: number): number | null {\r\n if (!m.group.uniform) {\r\n return null;\r\n }\r\n return Math.min(...m.group.lines.map((line, i) => lineSize(line, m.widths[i] ?? 1, k, avail) / line.size));\r\n}\r\n\r\ninterface IconBox {\r\n d: number;\r\n x: number;\r\n top: number;\r\n bottom: number;\r\n}\r\n\r\ninterface GroupPlace {\r\n k: number;\r\n col: FlowZone;\r\n y0: number;\r\n}\r\n\r\ninterface ColumnPlace {\r\n k: number;\r\n col: FlowZone;\r\n spread?: number;\r\n}\r\n\r\nfunction placeIcon(group: FlowGroup, box: IconBox, out: FlowResult | null): number {\r\n const { d, x, top, bottom } = box;\r\n if (!group.icon || d <= 0) {\r\n return bottom;\r\n }\r\n const textH = bottom - top;\r\n out?.icons.push({ rect: { x, y: top + Math.max(0, (textH - d) / 2), w: d, h: d }, color: group.icon.color, glyph: group.icon.glyph });\r\n return top + Math.max(textH, d);\r\n}\r\n\r\nfunction placeGroup(m: Measured, at: GroupPlace, out: FlowResult | null): number {\r\n const { k, col, y0 } = at;\r\n const { group } = m;\r\n let y = y0;\r\n if (group.rule) {\r\n out?.rules.push({ rect: { x: col.x, y, w: col.w * RULE_WIDTH, h: group.rule.height * k }, color: group.rule.color });\r\n y += group.rule.height * k * RULE_GAP;\r\n }\r\n const pad = group.card ? group.card.pad * k : 0;\r\n const top = y;\r\n y += pad;\r\n const d = iconSize(group, k);\r\n const iconIndent = d > 0 ? d * (1 + ICON_GAP) : 0;\r\n const avail = col.w - 2 * pad - iconIndent;\r\n const ratio = groupRatio(m, k, avail);\r\n group.lines.forEach((line, i) => {\r\n const size = ratio === null ? lineSize(line, m.widths[i] ?? 1, k, avail) : line.size * ratio;\r\n const indent = (indented(line) ? line.size * k * BULLET_INDENT : 0) + iconIndent;\r\n const w = ((m.widths[i] ?? 0) * size) / line.size;\r\n const x = col.right ? col.x + col.w - pad - w : col.x + pad + indent;\r\n out?.texts.push({ text: line.text, font: '', color: line.color, box: { x, y, w, h: size * LINE_HEIGHT } });\r\n if (line.bullet && out) {\r\n out.bullets.push({ x: col.x + pad + size * BULLET_RADIUS, y: y + (size * LINE_HEIGHT) / 2, r: size * BULLET_RADIUS, color: line.bullet });\r\n }\r\n y += size * LINE_HEIGHT;\r\n });\r\n y = placeIcon(group, { d, x: col.x + pad, top: top + pad, bottom: y }, out);\r\n y += pad;\r\n if (group.rule && group.ruleBelow) {\r\n y += group.rule.height * k * (RULE_GAP - 1);\r\n out?.rules.push({ rect: { x: col.x, y, w: col.w * RULE_WIDTH, h: group.rule.height * k }, color: group.rule.color });\r\n y += group.rule.height * k;\r\n }\r\n if (group.card) {\r\n out?.cards.unshift({ rect: { x: col.x, y: top, w: col.w, h: y - top }, color: group.card.color });\r\n }\r\n return y + group.gapAfter * k - y0;\r\n}\r\n\r\nfunction placeColumn(groups: Measured[], at: ColumnPlace, out: FlowResult | null): number {\r\n const { k, col, spread = 0 } = at;\r\n let h = 0;\r\n for (const g of groups) {\r\n h += placeGroup(g, { k, col, y0: col.y + h }, out) + spread;\r\n }\r\n return h - spread;\r\n}\r\n\r\nconst columnSum = (heights: number[], from: number, to: number): number => heights.slice(from, to).reduce((a, b) => a + b, 0);\r\n\r\nconst tallest = (heights: number[], cut: number): number => {\r\n const left = heights.slice(0, cut).reduce((a, b) => a + b, 0);\r\n const right = heights.slice(cut).reduce((a, b) => a + b, 0);\r\n return Math.max(left, right);\r\n};\r\n\r\nfunction keepTogether(groups: Measured[], heights: number[], cut: number): number {\r\n const breaks = (c: number): boolean => groups[c - 1]?.group.keepWithNext === true;\r\n let back = cut;\r\n while (back > 1 && breaks(back)) {back--;}\r\n let fwd = cut;\r\n while (fwd < groups.length - 1 && breaks(fwd)) {fwd++;}\r\n const candidates = [back, fwd].filter((c) => !breaks(c));\r\n if (candidates.length === 0) {\r\n return cut;\r\n }\r\n return candidates.reduce((best, c) => (tallest(heights, c) < tallest(heights, best) ? c : best));\r\n}\r\n\r\ntype Columns = { col: FlowZone; groups: Measured[] }[];\r\n\r\nfunction splitColumns(groups: Measured[], zone: FlowZone): Columns {\r\n const gap = Math.round(zone.w * COLUMN_GAP);\r\n const w = (zone.w - gap) / 2;\r\n const heights = groups.map((g) => placeGroup(g, { k: 1, col: { ...zone, w }, y0: 0 }, null));\r\n const total = columnSum(heights, 0, heights.length);\r\n let cut = 1;\r\n for (let c = 2; c < groups.length; c++) {\r\n if (Math.abs(total - 2 * columnSum(heights, 0, c)) < Math.abs(total - 2 * columnSum(heights, 0, cut))) {\r\n cut = c;\r\n }\r\n }\r\n cut = keepTogether(groups, heights, cut);\r\n return [\r\n { col: { ...zone, w }, groups: groups.slice(0, cut) },\r\n { col: { ...zone, x: zone.x + w + gap, w }, groups: groups.slice(cut) },\r\n ];\r\n}\r\n\r\nfunction largestK(columns: Columns, zoneH: number): number {\r\n const fits = (k: number): boolean => columns.every((c) => placeColumn(c.groups, { k, col: c.col }, null) <= zoneH);\r\n let lo = MIN_K;\r\n let hi = 1;\r\n if (fits(1)) {\r\n lo = 1;\r\n }\r\n for (let i = 0; i < STEPS && lo < hi; i++) {\r\n const mid = (lo + hi) / 2;\r\n if (fits(mid)) {\r\n lo = mid;\r\n } else {\r\n hi = mid;\r\n }\r\n }\r\n return lo;\r\n}\r\n\r\nfunction bestColumns(measured: Measured[], zone: FlowZone): { columns: Columns; k: number } {\r\n const single: Columns = [{ col: zone, groups: measured }];\r\n const k1 = largestK(single, zone.h);\r\n if (measured.length < 2 || zone.w / Math.max(zone.h, 1) < TWO_COLUMN_MIN) {\r\n return { columns: single, k: k1 };\r\n }\r\n const split = splitColumns(measured, zone);\r\n const k2 = largestK(split, zone.h);\r\n const forced = zone.w / Math.max(zone.h, 1) > WIDE;\r\n return forced || k2 > k1 * TWO_COLUMN_GAIN ? { columns: split, k: k2 } : { columns: single, k: k1 };\r\n}\r\n\r\n/** Lays groups out in the zone, shrinking every size by one factor until all text fits; never overflows. */\r\nexport function flow(ctx: PosterContext, groups: FlowGroup[], zone: FlowZone, fonts: FontSet): FlowResult {\r\n const measured = groups.map((group) => ({\r\n group,\r\n widths: group.lines.map((line) => {\r\n ctx.font = fontOf(line, line.size, fonts);\r\n return ctx.measureText(line.text).width;\r\n }),\r\n }));\r\n const { columns, k: lo } = bestColumns(measured, zone);\r\n const out = emptyFlow();\r\n const heights = columns.map((c) => placeColumn(c.groups, { k: lo, col: c.col }, null));\r\n const end = Math.max(...heights);\r\n columns.forEach((c, i) => placeColumn(c.groups, { k: lo, col: c.col, spread: c.groups.length > 1 && columns.length > 1 ? (end - (heights[i] ?? end)) / (c.groups.length - 1) : 0 }, out));\r\n const lines = groups.flatMap((g) => g.lines);\r\n out.texts.forEach((t, i) => {\r\n const line = lines[i];\r\n t.font = line ? fontOf(line, t.box.h / LINE_HEIGHT, fonts) : t.font;\r\n });\r\n return out;\r\n}\r\n","import { LayoutId } from '../enums/LayoutId';\nimport type { LayoutGeometry } from '../layout/geometry';\nimport { flow, type FlowGroup, type FlowResult } from '../layout/textFlow';\nimport type { FontSet, PosterContext, Rect } from '../types';\n\nconst LINE_HEIGHT = 1.2;\nconst BODY_GAP = 40;\n\nfunction flowFlanks(ctx: PosterContext, groups: FlowGroup[], flanks: Rect[], fonts: FontSet): FlowResult[] {\n const half = Math.ceil(groups.length / 2);\n return flanks.map((zone, i) => (i === 0 ? flow(ctx, groups.slice(0, half), zone, fonts) : flow(ctx, groups.slice(half), { ...zone, right: true }, fonts)));\n}\n\nfunction smallestPerLine(groups: FlowGroup[], results: FlowResult[]): number[] {\n const sizes = results.flatMap((r) => r.texts.map((t) => t.box.h / LINE_HEIGHT));\n const smallest: number[] = [];\n let i = 0;\n groups.forEach((g) =>\n g.lines.forEach((_line, j) => {\n smallest[j] = Math.min(smallest[j] ?? Infinity, sizes[i] ?? Infinity);\n i++;\n }),\n );\n return smallest;\n}\n\n/** Flows the price groups into the flank zones, then sets each line role at one size across every flank. */\nexport function equalFlanks(ctx: PosterContext, groups: FlowGroup[], flanks: Rect[], fonts: FontSet): FlowResult[] {\n const smallest = smallestPerLine(groups, flowFlanks(ctx, groups, flanks, fonts));\n const sized = groups.map((g) => ({ ...g, lines: g.lines.map((line, j) => ({ ...line, size: Math.min(line.size, smallest[j] ?? line.size) })) }));\n return flowFlanks(ctx, sized, flanks, fonts);\n}\n\nfunction measuredEnd(f: FlowResult, fallback: number): number {\n const bottoms = [...f.texts.map((t) => t.box), ...f.rules.map((r) => r.rect), ...f.icons.map((i) => i.rect)].map((r) => r.y + r.h);\n return bottoms.length > 0 ? Math.max(...bottoms) : fallback;\n}\n\n/** The picture region; for picture-bottom it starts 40u under the body's measured end, keeps the geometry's width and runs to the frame edge. */\nexport function pictureRegion(layout: LayoutId, geo: LayoutGeometry, body: FlowResult, frame: { width: number; height: number; u: number }): Rect {\n if (layout !== LayoutId.PictureBottom) {\n return geo.picture;\n }\n const y = Math.min(geo.picture.y, Math.ceil(measuredEnd(body, geo.body.y) + BODY_GAP * frame.u));\n return { x: geo.picture.x, y, w: geo.picture.w, h: frame.height - y };\n}\n","import { LayoutId } from '../enums/LayoutId';\r\nimport { bodyGroups, flankPriceGroups, headerGroups } from '../layout/blockGroups';\r\nimport { geometry, type LayoutGeometry } from '../layout/geometry';\r\nimport { emptyFlow, flow, type FlowResult } from '../layout/textFlow';\r\nimport type { FlierDoc, FontSet, Palette, PosterContext, Rect } from '../types';\r\nimport { equalFlanks } from './regions';\r\n\r\nexport const FLOOR_PX = 30;\r\nconst BASE = 1080;\r\nconst LINE_HEIGHT = 1.2;\r\nconst LOGO_SHARE = 0.26;\r\nconst GIVE_STEP = 0.025;\r\nconst GIVE_STEPS = 32;\r\nconst SHIFT_STEP = 0.06;\r\nconst SHIFT_STEPS = 8;\r\n\r\nexport interface FittedText {\r\n geo: LayoutGeometry;\r\n zones: { text: Rect; logo: Rect };\r\n head: FlowResult;\r\n body: FlowResult;\r\n sides: FlowResult[];\r\n}\r\n\r\ninterface Reflow {\r\n shift: number;\r\n compact: boolean;\r\n wrap: boolean;\r\n lift: boolean;\r\n}\r\n\r\nconst MARGIN = 0.045;\r\n\r\ninterface FitInput {\r\n doc: FlierDoc;\r\n palette: Palette;\r\n fonts: FontSet;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nfunction splitHeader(header: Rect, hasLogo: boolean): { text: Rect; logo: Rect } {\r\n const logoW = hasLogo ? Math.round(header.w * LOGO_SHARE) : 0;\r\n return { text: { ...header, w: header.w - logoW * 1.1 }, logo: { ...header, x: header.x + header.w - logoW, w: logoW } };\r\n}\r\n\r\nfunction flowAll(ctx: PosterContext, input: FitInput, geo: LayoutGeometry, reflow: Reflow): FittedText {\r\n const { doc, palette, fonts } = input;\r\n const u = Math.min(input.width, input.height) / BASE;\r\n const zones = geo.logo ? { text: geo.header, logo: geo.logo } : splitHeader(geo.header, doc.logo !== undefined);\r\n const head = flow(ctx, headerGroups(doc, palette, u), zones.text, fonts);\r\n const flanks = geo.flanks ?? [];\r\n const body = flow(ctx, bodyGroups(doc, palette, u, { withPrices: flanks.length === 0, compact: reflow.compact, wrap: reflow.wrap }), geo.body, fonts);\r\n const sides = flanks.length > 0 ? equalFlanks(ctx, flankPriceGroups(doc, palette, u), flanks, fonts) : [emptyFlow()];\r\n return { geo, zones, head, body, sides };\r\n}\r\n\r\nconst smallest = (t: FittedText): number => Math.min(Infinity, ...[t.head, t.body, ...t.sides].flatMap((f) => f.texts.map((x) => x.box.h / LINE_HEIGHT)));\r\n\r\nfunction shiftHeader(geo: LayoutGeometry, shift: number): LayoutGeometry {\r\n const { header, body } = geo;\r\n const stacked = header.y + header.h <= body.y && header.x < body.x + body.w && body.x < header.x + header.w;\r\n const d = Math.round(header.h * shift);\r\n if (!stacked || d === 0 || body.h - d <= 0) {\r\n return geo;\r\n }\r\n return { ...geo, header: { ...header, h: header.h - d }, body: { ...body, y: body.y - d, h: body.h + d } };\r\n}\r\n\r\nfunction liftHeader(geo: LayoutGeometry, top: number): LayoutGeometry {\r\n const { header } = geo;\r\n return header.y > top ? { ...geo, header: { ...header, y: top, h: header.h + header.y - top } } : geo;\r\n}\r\n\r\nfunction fitBottom(ctx: PosterContext, input: FitInput, floor: number): FittedText {\r\n const { width, height } = input;\r\n const none: Reflow = { shift: 0, compact: false, wrap: false, lift: false };\r\n let fitted = flowAll(ctx, input, geometry(LayoutId.PictureBottom, width, height), none);\r\n for (let step = 1; step <= GIVE_STEPS && smallest(fitted) < floor; step++) {\r\n fitted = flowAll(ctx, input, geometry(LayoutId.PictureBottom, width, height, step * GIVE_STEP), none);\r\n }\r\n return fitted;\r\n}\r\n\r\nfunction yieldPicture(geo: LayoutGeometry, give: number): LayoutGeometry {\r\n const { picture: p, body: b } = geo;\r\n const d = Math.round(p.w * give);\r\n return { ...geo, picture: { ...p, x: p.x + d, w: p.w - d }, body: { ...b, w: b.w + d } };\r\n}\r\n\r\nfunction fitList(ctx: PosterContext, input: FitInput, floor: number, base: LayoutGeometry): FittedText {\r\n const last: Reflow = { shift: 0, compact: true, wrap: true, lift: false };\r\n let fitted = flowAll(ctx, input, base, last);\r\n for (let step = 1; step <= GIVE_STEPS && smallest(fitted) < floor; step++) {\r\n fitted = flowAll(ctx, input, yieldPicture(base, step * GIVE_STEP), last);\r\n }\r\n return fitted;\r\n}\r\n\r\nconst SHIFTS = [0, ...Array.from({ length: SHIFT_STEPS }, (_v, i) => [(i + 1) * SHIFT_STEP, -(i + 1) * SHIFT_STEP]).flat()];\r\nconst TIERS = [\r\n { compact: false, wrap: false, lift: false },\r\n { compact: true, wrap: false, lift: false },\r\n { compact: true, wrap: true, lift: false },\r\n { compact: true, wrap: true, lift: true },\r\n];\r\nconst REFLOWS: Reflow[] = TIERS.flatMap((tier) => SHIFTS.map((shift) => ({ ...tier, shift })));\r\n\r\n/** Flows header, body and flanks until every run reaches 30px at a 1080 short edge: picture-bottom and list narrow their picture as a last step; every other layout moves the header line, sets rows on one line, wraps long lines and lifts the header into empty space, never shrinking the picture. */\r\nexport function fitToFloor(ctx: PosterContext, input: FitInput): FittedText {\r\n const { doc, width, height } = input;\r\n const floor = (FLOOR_PX * Math.min(width, height)) / BASE;\r\n if (doc.layout === LayoutId.PictureBottom) {\r\n return fitBottom(ctx, input, floor);\r\n }\r\n const base = geometry(doc.layout, width, height);\r\n const top = Math.round(Math.min(width, height) * MARGIN);\r\n let best: FittedText | null = null;\r\n for (const reflow of REFLOWS) {\r\n const fitted = flowAll(ctx, input, shiftHeader(reflow.lift ? liftHeader(base, top) : base, reflow.shift), reflow);\r\n if (smallest(fitted) >= floor) {\r\n return fitted;\r\n }\r\n best = best === null || smallest(fitted) > smallest(best) ? fitted : best;\r\n }\r\n if (doc.layout === LayoutId.List) {\r\n return fitList(ctx, input, floor, base);\r\n }\r\n return best ?? flowAll(ctx, input, base, { shift: 0, compact: false, wrap: false, lift: false });\r\n}\r\n","import { BackgroundStyle } from '../enums/BackgroundStyle';\nimport { PictureAnchor } from '../enums/PictureAnchor';\nimport { FONT_SETS } from '../fontSets';\nimport { FORMAT_SIZES } from '../formats';\nimport { placeContain, type LayoutGeometry } from '../layout/geometry';\nimport type { FlowResult } from '../layout/textFlow';\nimport { PALETTES } from '../palettes';\nimport { FlierDocError, missingAssets, validateFlierDoc } from '../schema/validateFlierDoc';\nimport { fitToFloor } from './fitToFloor';\nimport { pictureRegion } from './regions';\nimport type { FlierDoc, PosterAssets, PosterCanvas, PosterContext, Rect, RenderReport } from '../types';\n\nconst BASE = 1080;\nconst CARD_RADIUS = 0.035;\nconst CAP_TOP = 0.15;\nconst PIN_HEAD_Y = 0.08;\nconst PIN_HEAD_R = 0.19;\nconst PIN_TIP_Y = 0.28;\nconst PIN_HOLE = 0.42;\nconst ARC_START = 0.75;\nconst ARC_END = 2.25;\n\nfunction drawPin(ctx: PosterContext, r: Rect, color: string, glyph: string): void {\n const cx = r.x + r.w / 2;\n const cy = r.y + r.h / 2;\n const hy = cy - r.w * PIN_HEAD_Y;\n const rad = r.w * PIN_HEAD_R;\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.arc(cx, cy, r.w / 2, 0, Math.PI * 2);\n ctx.fill();\n ctx.fillStyle = glyph;\n ctx.beginPath();\n ctx.moveTo(cx, cy + r.w * PIN_TIP_Y);\n ctx.arc(cx, hy, rad, Math.PI * ARC_START, Math.PI * ARC_END);\n ctx.closePath();\n ctx.fill();\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.arc(cx, hy, rad * PIN_HOLE, 0, Math.PI * 2);\n ctx.fill();\n}\n\nfunction roundRect(ctx: PosterContext, r: Rect, radius: number): void {\n const rad = Math.min(radius, r.w / 2, r.h / 2);\n ctx.beginPath();\n ctx.moveTo(r.x + rad, r.y);\n ctx.arcTo(r.x + r.w, r.y, r.x + r.w, r.y + r.h, rad);\n ctx.arcTo(r.x + r.w, r.y + r.h, r.x, r.y + r.h, rad);\n ctx.arcTo(r.x, r.y + r.h, r.x, r.y, rad);\n ctx.arcTo(r.x, r.y, r.x + r.w, r.y, rad);\n ctx.closePath();\n ctx.fill();\n}\n\nfunction drawFlow(ctx: PosterContext, f: FlowResult, radius: number): void {\n f.rules.forEach((r) => {\n ctx.fillStyle = r.color;\n ctx.fillRect(r.rect.x, r.rect.y, r.rect.w, r.rect.h);\n });\n f.cards.forEach((c) => {\n ctx.fillStyle = c.color;\n roundRect(ctx, c.rect, radius);\n });\n f.bullets.forEach((b) => {\n ctx.fillStyle = b.color;\n ctx.beginPath();\n ctx.arc(b.x, b.y, b.r, 0, Math.PI * 2);\n ctx.fill();\n });\n f.icons.forEach((i) => drawPin(ctx, i.rect, i.color, i.glyph));\n ctx.textAlign = 'left';\n ctx.textBaseline = 'top';\n f.texts.forEach((t) => {\n ctx.font = t.font;\n ctx.fillStyle = t.color;\n ctx.fillText(t.text, t.box.x, t.box.y);\n });\n}\n\nfunction checked(input: unknown, assets: PosterAssets): FlierDoc {\n const result = validateFlierDoc(input);\n if (!result.ok) {\n throw new FlierDocError(result.errors);\n }\n const missing = missingAssets(result.doc, assets);\n if (missing.length > 0) {\n throw new FlierDocError(missing);\n }\n return result.doc;\n}\n\nfunction archRect(geo: LayoutGeometry): Rect | null {\n if (geo.arch === undefined) {\n return null;\n }\n const top = geo.picture.y + Math.round(geo.picture.h * geo.arch);\n return { x: geo.picture.x, y: top, w: geo.picture.w, h: geo.picture.y + geo.picture.h - top };\n}\n\nfunction drawArch(ctx: PosterContext, r: Rect, color: string): void {\n const rad = r.w / 2;\n ctx.fillStyle = color;\n ctx.fillRect(r.x, r.y + rad, r.w, r.h - rad);\n ctx.beginPath();\n ctx.arc(r.x + rad, r.y + rad, rad, Math.PI, Math.PI * 2);\n ctx.fill();\n}\n\nfunction capAligned(zone: Rect, head: FlowResult): Rect {\n const first = head.texts[0]?.box;\n const shift = first ? Math.min(Math.max(0, Math.round(first.y + first.h * CAP_TOP) - zone.y), Math.round(zone.h / 2)) : 0;\n return { ...zone, y: zone.y + shift, h: zone.h - shift };\n}\n\n/** Validates the doc, then draws it on the canvas (resized to the format); throws FlierDocError before touching the canvas. */\nexport function render(input: unknown, assets: PosterAssets, canvas: PosterCanvas): RenderReport {\n const doc = checked(input, assets);\n const { width, height } = FORMAT_SIZES[doc.format];\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('poster-render: the canvas has no 2d context');\n }\n const palette = PALETTES[doc.palette];\n const fonts = FONT_SETS[doc.fonts];\n const u = Math.min(width, height) / BASE;\n const { geo, zones, head, body, sides } = fitToFloor(ctx, { doc, palette, fonts, width, height });\n ctx.globalAlpha = 1;\n ctx.fillStyle = palette.background;\n ctx.fillRect(0, 0, width, height);\n if (doc.background === BackgroundStyle.Tint) {\n ctx.fillStyle = palette.tint;\n [geo.header, geo.body].forEach((r) => ctx.fillRect(r.x, r.y, r.w, r.h));\n }\n const radius = Math.min(width, height) * CARD_RADIUS;\n [head, body, ...sides].forEach((f) => drawFlow(ctx, f, radius));\n const logoImage = doc.logo ? assets[doc.logo.imageId] : undefined;\n const logo = logoImage ? placeContain(logoImage, geo.logo ? zones.logo : capAligned(zones.logo, head), { anchor: PictureAnchor.Top, alignX: 1, scale: 1 }) : null;\n if (logoImage && logo) {\n ctx.drawImage(logoImage, logo.x, logo.y, logo.w, logo.h);\n }\n const image = doc.picture ? assets[doc.picture.imageId] : undefined;\n const backdrop = image ? archRect(geo) : null;\n if (backdrop) {\n drawArch(ctx, backdrop, palette.arch);\n }\n const region = pictureRegion(doc.layout, geo, body, { width, height, u });\n const picture = image && doc.picture ? placeContain(image, region, { anchor: doc.picture.anchor, alignX: geo.alignX, scale: doc.picture.scale }) : null;\n if (image && picture) {\n ctx.drawImage(image, picture.x, picture.y, picture.w, picture.h);\n }\n return {\n width,\n height,\n picture,\n pictureRegion: region,\n textBoxes: [head, body, ...sides].flatMap((f) => f.texts.map((t) => t.box)),\n cardBoxes: body.cards.map((c) => c.rect),\n iconBoxes: [head, body, ...sides].flatMap((f) => f.icons.map((i) => i.rect)),\n logo,\n backdrop,\n };\n}\n","export interface DataUrlCanvas {\n toDataURL(type: string): string;\n}\n\nconst PREFIX = 'data:image/png;base64,';\n\n/** Encodes the canvas as a PNG Blob of the canvas's exact pixel size. */\nexport function exportPng(canvas: DataUrlCanvas): Blob {\n const url = canvas.toDataURL('image/png');\n if (!url.startsWith(PREFIX)) {\n throw new Error('poster-render: the canvas did not return a PNG data URL');\n }\n const binary = atob(url.slice(PREFIX.length));\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new Blob([bytes], { type: 'image/png' });\n}\n","import { FormatId } from './enums/FormatId';\nimport { LayoutId } from './enums/LayoutId';\n\nexport interface LayoutCatalogueEntry {\n id: LayoutId;\n designId: string;\n label: string;\n description: string;\n formats: readonly FormatId[];\n}\n\nconst POSTERS = [FormatId.Story, FormatId.Post, FormatId.Square];\n\nexport const LAYOUT_CATALOGUE: readonly LayoutCatalogueEntry[] = [\n { id: LayoutId.PictureRight, designId: 'E-A', label: 'Picture right', description: 'Titles across the top, details on the left, the picture on the right standing on the bottom edge.', formats: POSTERS },\n { id: LayoutId.PictureLeft, designId: 'E-B', label: 'Picture left', description: 'Titles across the top, the picture on the left standing on the bottom edge, details on the right.', formats: POSTERS },\n { id: LayoutId.Arch, designId: 'E-C', label: 'Arch', description: 'Titles and details on top, the picture centred in a soft arch at the bottom, prices either side.', formats: POSTERS },\n { id: LayoutId.PictureBottom, designId: 'picture-bottom', label: 'Picture bottom', description: 'Titles and details on top, the picture across the bottom half.', formats: POSTERS },\n { id: LayoutId.List, designId: 'list', label: 'Upcoming list', description: 'Several dated events as a list beside the picture.', formats: POSTERS },\n { id: LayoutId.PhoneClockSafe, designId: 'P-A', label: 'Phone, clock clear', description: 'Lock-screen wallpaper: top kept clear for the clock, details on the left, picture on the right.', formats: [FormatId.Phone] },\n { id: LayoutId.PhoneArch, designId: 'P-B', label: 'Phone arch', description: 'Lock-screen wallpaper: top kept clear for the clock, details in the middle, the picture in an arch at the bottom.', formats: [FormatId.Phone] },\n { id: LayoutId.DesktopSafe, designId: 'D-A', label: 'Desktop, icons clear', description: 'Desktop wallpaper: text on the left clear of desktop icons and the taskbar, the picture on the right.', formats: [FormatId.Desktop] },\n { id: LayoutId.DesktopArch, designId: 'D-B', label: 'Desktop arch', description: 'Desktop wallpaper: titles left, the picture in a centred arch, details right.', formats: [FormatId.Desktop] },\n];\n\nconst DEFAULTS: Readonly<Record<FormatId, LayoutId>> = {\n [FormatId.Story]: LayoutId.PictureRight,\n [FormatId.Post]: LayoutId.PictureRight,\n [FormatId.Square]: LayoutId.PictureRight,\n [FormatId.Phone]: LayoutId.PhoneClockSafe,\n [FormatId.Desktop]: LayoutId.DesktopSafe,\n};\n\n/** The default layout for a format (D4 \"Layouts: keep all\"): E-A \"Picture right\" for posters, P-A \"Phone, clock clear\", D-A \"Desktop, icons clear\". */\nexport function defaultLayoutFor(format: FormatId): LayoutId {\n return DEFAULTS[format];\n}\n","import { BackgroundStyle } from '../enums/BackgroundStyle';\nimport { FontSetId } from '../enums/FontSetId';\nimport { FormatId } from '../enums/FormatId';\nimport { LayoutId } from '../enums/LayoutId';\nimport { PaletteId } from '../enums/PaletteId';\nimport { PictureAnchor } from '../enums/PictureAnchor';\nimport type { FlierBlocks, FlierDoc, ScheduleRow } from '../types';\n\ninterface Workshop {\n script: string;\n date: string;\n first: string;\n second: string;\n party: string;\n}\n\nconst WORKSHOPS: Workshop[] = [\n { script: 'Saturday 31 October', date: 'Sat 31 Oct', first: '20:00 - 21:00', second: '21:00 - 22:00', party: '20€' },\n { script: 'Saturday 7 November', date: 'Sat 7 Nov', first: '20:00 - 21:00', second: '21:00 - 22:00', party: '15€' },\n { script: 'Sunday 29 November', date: 'Sun 29 Nov', first: '17:00 - 18:00', second: '18:00 - 19:00', party: '10€' },\n];\n\nconst INCLUDES = { heading: 'Party pass includes', items: ['Salsa & Bachata room', 'Kizomba dedicated room', '2 drinks'] };\n\nconst schedule = (w: Workshop): ScheduleRow[] => [\n { label: 'Level 1', time: w.first },\n { label: 'Level 2', time: w.second },\n];\n\nconst base = {\n version: 1 as const,\n format: FormatId.Story,\n palette: PaletteId.Sand,\n fonts: FontSetId.Classic,\n background: BackgroundStyle.Solid,\n picture: { imageId: 'dancers', anchor: PictureAnchor.Bottom, scale: 1 },\n logo: { imageId: 'logo' },\n};\n\nconst shared: Omit<FlierBlocks, 'title'> = {\n venue: ['Bailemos', 'Dance School'],\n includes: INCLUDES,\n footer: 'with Jimmy & Ismini',\n};\n\nconst workshopDoc = (w: Workshop): FlierDoc => ({\n ...base,\n layout: LayoutId.PictureRight,\n blocks: {\n ...shared,\n title: 'KIZOMBA',\n titleBottom: 'WORKSHOP',\n script: w.script,\n schedule: schedule(w),\n prices: [{ amount: '5€', label: 'per hour' }, { amount: w.party, label: 'Party pass' }],\n },\n});\n\nexport const kizombaWorkshop: FlierDoc = {\n ...base,\n layout: LayoutId.List,\n blocks: {\n ...shared,\n title: 'UPCOMING',\n titleBottom: 'WORKSHOPS',\n script: 'Kizomba',\n prices: [{ amount: '5€', label: 'per hour' }],\n },\n items: WORKSHOPS.map((w) => ({ date: w.date, schedule: schedule(w), price: `Party pass ${w.party}` })),\n};\n\nexport const kizombaWorkshopDocs: FlierDoc[] = [...WORKSHOPS.map(workshopDoc), kizombaWorkshop];\n"]}