@operato/slot-layout-editor 10.29.51 → 10.29.56

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ox-slot-layout-editor.js","sourceRoot":"","sources":["../../src/ox-slot-layout-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAOnB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,aAAa,EACb,aAAa,EACb,WAAW,EACX,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,UAAU,EAGX,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,EAAoB,MAAM,iBAAiB,CAAA;AA8BtG,MAAM,GAAG,GAAG,CAAC,CAAQ,EAAE,EAAE;IACvB,MAAM,CAAC,GAAI,CAAC,CAAC,MAA2B,CAAC,aAAa,CAAA;IACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AACrC,CAAC,CAAA;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;IAA9D;;QAoF2B,YAAO,GAA4B,EAAE,CAAA;QAG5D,SAAI,GAAG,CAAC,CAAA;QACR,UAAK,GAAG,KAAK,CAAA;QACb,cAAS,GAAG,EAAE,CAAA;QACd,eAAU,GAAwB,EAAE,CAAA;QACpC,iBAAY,GAA2B,EAAE,CAAA;IA8WpD,CAAC;IA5WC,UAAU,CAAC,OAA6B;;QACtC,wEAAwE;QACxE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAwC,CAAA;QAC5E,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,OAAK,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,CAAA,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;QAC1H,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAM;QACnC,IAAI,CAAC,CAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,CAAA;YAAE,IAAI,CAAC,SAAS,GAAG,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,0CAAG,CAAC,CAAC,0CAAE,GAAG,mCAAI,EAAE,CAAA;QACvH,iEAAiE;QACjE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,mCAAI,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,UAAU,mCAAI,EAAE,CAAC;YAAE,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,UAAU,mCAAI,EAAE,CAAC,EAAE,CAAA;IAC5J,CAAC;IAED,gDAAgD;IAChD,KAAK;;QACH,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,KAAK,mCAAI,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,CAAA;QACnD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACvD,IAAI,CAAC,IAAI,GAAG,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,MAAM,mCAAI,CAAC,CAAA;QAC/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,UAAU,mCAAI,EAAE,CAAC,EAAE,CAAA;QACzD,IAAI,CAAC,CAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,CAAA;YAAE,IAAI,CAAC,SAAS,GAAG,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,0CAAG,CAAC,CAAC,0CAAE,GAAG,mCAAI,EAAE,CAAA;IACzH,CAAC;IAED,IAAI,MAAM;;QACR,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAA;QAC1B,MAAM,OAAO,GAAG,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACrD,MAAM,OAAO,GAAkB,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,QAAQ,mDAAG,IAAI,CAAC,KAAK,CAAC,mCAAI,EAAE,CAAC,CAAC,CAAA;QAChI,gDAAgD;QAChD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjE,CAAC;IAED,gFAAgF;IAChF,IAAI,QAAQ;;QACV,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,EAAE,CAAA;QAChD,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,WAAW,CAAA;QACvC,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAA;IACtH,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM;;QACR,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IACvI,CAAC;IAEO,KAAK,CAAC,KAAkB;;QAC9B,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,mDAAG,KAAK,CAAC,mCAAI,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACpE,CAAC;IAEO,KAAK,CAAC,IAAgB;;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,GAAG,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,MAAM,mCAAI,CAAC,CAAA;IAC/G,CAAC;IAEO,MAAM;QACZ,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC5E,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,yBAAyB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACnG,CAAC;IAED,MAAM;;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,aAAa,GAAG,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,aAAa,mCAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAA;QAC7E,OAAO,IAAI,CAAA;QACP,CAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,0CAAE,MAAM;YAC3B,CAAC,CAAC,IAAI,CAAA;cACA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAA,cAAc,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC;iBACpG;YACT,CAAC,CAAC,OAAO;QACT,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE;;UAE9F,aAAa,CAAC,CAAC,CAAC,IAAI,CAAA,4CAA4C,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO;kDAChG,CAAC,IAAI,CAAC,KAAK,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC;gDACrE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;;KAEvI,CAAA;IACH,CAAC;IAEO,aAAa;;QACnB,MAAM,OAAO,GAAG,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,mCAAI,EAAE,CAAA;QAC3C,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,OAAO,CAAA;QACnC,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,mCAAI,OAAO,CAAC,CAAC,CAAC,CAAA;QACxE,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QACrE,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,KAAc,EAAE,QAA6B,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,CAAA;;iBAExF,KAAK;2CACqB,GAAG,WAAW,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;KAE7J,CAAA;QACD,OAAO,IAAI,CAAA;YACH,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC;;iBAEhB,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC;6CACI,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,GAAI,CAAC,CAAC,MAA4B,CAAC,KAAK,CAAC;YACvG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAA,iBAAiB,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;;;QAG5H,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;QAC7H,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;QAC7H,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC;QACpJ,CAAC,MAAA,MAAM,CAAC,MAAM,mCAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC9B,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAC/I;0BACmB,CAAC,CAAC,aAAa,EAAE,mGAAmG,CAAC;;uDAExF,CAAC,KAAK,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;YACtH,CAAC,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;;;KAGlD,CAAA;IACH,CAAC;IAED,uEAAuE;IAC/D,aAAa;QACnB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAA;QACjD,MAAM,IAAI,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACvH,OAAO,IAAI,CAAA;QACP,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA,qBAAqB,CAAC,CAAC,cAAc,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;QACjH,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA,sBAAsB,CAAC,CAAC,aAAa,EAAE,gBAAgB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;WAC9G,CAAA;IACT,CAAC;IAED,sDAAsD;IAC9C,UAAU,CAAC,MAAkB;;QACnC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,EAAE,CAA4B,CAAA;QAC7E,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,EAAgB,CAAC,CAAA;IACpE,CAAC;IAEO,YAAY,CAAC,MAAqB;;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAM,CAAA;QACzB,MAAM,IAAI,GAAG,MAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,mCAAI,MAAA,KAAK,CAAC,KAAK,0CAAG,CAAC,CAAC,CAAA;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM;YAC7B,CAAC,CAAC,IAAI,CAAA,kCAAkC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAA,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ;YACpG,CAAC,CAAC,QAAQ,CAAC,MAAM;gBACf,CAAC,CAAC,IAAI,CAAA,mCAAmC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAA,UAAU,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ;gBAC7G,CAAC,CAAC,OAAO,CAAA;QACb,uDAAuD;QACvD,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAA;QAC3B,OAAO,IAAI,CAAA;YACH,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;;UAErB,KAAK,CAAC,KAAK,CAAC,GAAG,CACf,CAAC,CAAC,EAAE,CAAC,IAAI,CAAA,qBAAqB,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,CACzK;;;iDAGwC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC;sDAClE,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC;;QAEnK,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,WAAW,mDAAG,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,mCAAI,OAAO;YAC3G,CAAC,CAAC,SAAS,EAAE,2CAA2C,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACjF,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS;KACvD,CAAA;IACH,CAAC;IAED,sDAAsD;IAC9C,SAAS,CAAC,KAAiB,EAAE,MAAc;QACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IACtD,CAAC;IAEO,WAAW,CAAC,KAAiB,EAAE,MAAc;;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAE,CAAA;QACxD,MAAM,CAAC,GAAG,IAAI,CAAC,MAA2C,CAAA;QAC1D,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,KAAa,EAAE,KAAc,EAAE,QAA+B,GAAG,EAAE,EAAE,CAAC,IAAI,CAAA;;iBAE9F,KAAK;0CACoB,CAAC,WAAW,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;KAErM,CAAA;QACD,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa,EAAE,OAAiB,EAAE,QAA6B,EAAE,EAAE,CAAC,IAAI,CAAA;;iBAEzG,KAAK;6BACO,KAAK,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,QAAQ,CAAE,CAAC,CAAC,MAA4B,CAAC,KAAK,CAAC;YAC/F,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAA,iBAAiB,CAAC,cAAc,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC;;;KAGxF,CAAA;QACD,OAAO,IAAI,CAAA;QACP,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC;QACpC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,CAA2B,CAAC,CAAC,CAAC;QACvK,CAAC,CAAC,OAAO,KAAK,KAAK;YACnB,CAAC,CAAC,IAAI,CAAA;cACA,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;cAC1G,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAc,EAAE,CAAC,CAAC,CAAC;cAC9H,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,MAAA,CAAC,CAAC,MAAM,mCAAI,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAkB,EAAE,CAAC,CAAC,CAAC;WAC/J;YACH,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,KAAK,MAAM;YACpB,CAAC,CAAC,IAAI,CAAA;cACA,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;cAC7G,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,MAAA,CAAC,CAAC,KAAK,0CAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;cAC5F,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,MAAA,CAAC,CAAC,KAAK,0CAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;cAC5F,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,MAAA,CAAC,CAAC,KAAK,mCAAI,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,CACrI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAc,EAAE,CAAC,CAAC,CACpE;cACC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,MAAA,MAAA,CAAC,CAAC,MAAM,0CAAE,CAAC,mCAAI,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAC3F,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAkB,EAAE,EAAE,CAAC,CAAC,CACvG;cACC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,MAAA,MAAA,CAAC,CAAC,MAAM,0CAAE,CAAC,mCAAI,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAC3F,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAkB,EAAE,EAAE,CAAC,CAAC,CACvG;WACF;YACH,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;KACvG,CAAA;IACH,CAAC;IAED,8CAA8C;IACtC,gBAAgB,CAAC,KAAiB,EAAE,MAAc;;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAE,CAAA;QACxD,MAAM,OAAO,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,CAAA;QACrC,MAAM,IAAI,GAAG,CAAC,KAAuC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;QACtG,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QACtD,MAAM,IAAI,GAAG,CAAC,CAAkB,EAAE,KAAa,EAAE,EAAE;;YAAC,OAAA,IAAI,CAAA;;iBAE3C,KAAK;0CACoB,YAAY,CAAC,EAAE,WAAW,MAAM,CAAC,MAAA,QAAQ,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;;KAElK,CAAA;SAAA,CAAA;QACD,OAAO,IAAI,CAAA;;iBAEE,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC;UAC5B,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM;YACf,CAAC,CAAC,IAAI,CAAA,uCAAuC,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAG,CAAC,CAAC,MAA4B,CAAC,KAAK,EAAE,CAAC;gBAC9G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA,iBAAiB,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,aAAa,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,WAAW;gBACzI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAC,OAAA,IAAI,CAAA,iBAAiB,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,IAAI,MAAA,CAAC,CAAC,KAAK,mCAAI,CAAC,CAAC,EAAE,WAAW,CAAA,EAAA,CAAC;sBACvG;YACZ,CAAC,CAAC,IAAI,CAAA,qCAAqC,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAG,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK;;;iBAGrJ,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;6CACS,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAG,CAAC,CAAC,MAA4B,CAAC,KAAkB,EAAE,CAAC;YACjH,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAA,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC;;;QAGlH,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;;iBAEhI,CAAC,CAAC,eAAe,EAAE,qBAAqB,CAAC;iEACO,MAAM,CAAC,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,CAAC,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;;KAE3I,CAAA;IACH,CAAC;IAED,2DAA2D;IACnD,cAAc,CAAC,IAAc,EAAE,QAAiD;;QACtF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9C,OAAO,IAAI,CAAA;;iBAEE,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC;oDACY,CAAC,CAAQ,EAAE,EAAE,WAAC,OAAA,QAAQ,CAAE,CAAC,CAAC,MAA4B,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAA,EAAA;0CAClH,CAAC,UAAU,IAAI,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC;2CAC1C,UAAU,IAAI,CAAC,CAAC,cAAc,EAAE,mBAAmB,CAAC;;;QAGvF,UAAU;YACV,CAAC,CAAC,IAAI,CAAA;qBACO,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC;;;uBAGjC,CAAC,MAAA,IAAI,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC1B,CAAC,CAAC,cAAc,EAAE,yBAAyB,CAAC;wBAChD,CAAC,CAAQ,EAAE,EAAE,CACrB,QAAQ,CACL,CAAC,CAAC,MAA2B,CAAC,KAAK;iBACjC,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAClB,MAAM,CAAC,OAAO,CAAC,CACnB;;iBAEA;YACT,CAAC,CAAC,OAAO;KACZ,CAAA;IACH,CAAC;IAEO,WAAW,CAAC,KAAiB,EAAE,MAAc,EAAE,IAAc;;QACnE,MAAM,IAAI,GAAG,CAAC,KAAwB,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;QAC3F,MAAM,OAAO,GAAG,CAAC,CAA+B,EAAE,KAAa,EAAE,EAAE;;YAAC,OAAA,IAAI,CAAA;;iBAE3D,KAAK;0CACoB,WAAW,CAAC,EAAE,WAAW,MAAM,CAAC,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAG,CAAC,CAAC,mCAAI,EAAE,CAAC,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;;KAE1K,CAAA;SAAA,CAAA;QACD,OAAO,IAAI,CAAA;YACH,CAAC,CAAC,WAAW,EAAE,yCAAyC,CAAC;QAC7D,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;QAC9G,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;;iBAE/C,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC;gFACgC,MAAM,CAAC,MAAA,IAAI,CAAC,UAAU,mCAAI,CAAC,CAAC,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;;;iBAGjJ,CAAC,CAAC,UAAU,EAAE,gBAAgB,CAAC;4DACY,MAAM,CAAC,MAAA,IAAI,CAAC,QAAQ,mCAAI,CAAC,CAAC,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;;QAE/I,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;KAC1D,CAAA;IACH,CAAC;IAEO,aAAa,CAAC,KAAiB,EAAE,MAAc;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAE,CAAA;QACxD,MAAM,KAAK,GAAG,CAAC,GAAI,IAAI,CAAC,MAAsD,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;QACzH,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,KAAc,EAAE,KAA4C,EAAE,EAAE,CAC5F,IAAI,CAAA,mCAAmC,MAAM,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,UAAU,CAAA;QAC3J,OAAO,IAAI,CAAA;YACH,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC;;;;;;gBAMtB,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;gBACX,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;gBACX,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;gBACX,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;gBACnB,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;;;UAGrB,KAAK,CAAC,GAAG,CACT,CAAC,CAAC,EAAE;;YAAC,OAAA,IAAI,CAAA;;oBAEC,CAAC,CAAC,MAAM;gBACZ,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAA,CAAC,CAAC,MAAM,0CAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1E,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAA,CAAC,CAAC,MAAM,0CAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1E,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAA,CAAC,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrF,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAA,CAAC,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrF,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAA,CAAC,CAAC,OAAO,0CAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvF,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAA,CAAC,CAAC,UAAU,mCAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAA,CAAC,CAAC,QAAQ,mCAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;sCACvH,KAAK,CAAC,MAAM,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;;WAElH,CAAA;SAAA,CACF;;mEAE0D,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC;KACzI,CAAA;IACH,CAAC;IAED,mCAAmC;IAC3B,cAAc,CAAC,KAAiB,EAAE,MAAc;QACtD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA,yCAAyC,CAAC,CAAC,cAAc,EAAE,2CAA2C,CAAC,QAAQ,CAAA;QAC7I,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;QAClC,OAAO,IAAI,CAAA;mCACoB,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;UAC/E,KAAK,CAAC,GAAG,CACT,CAAC,CAAC,EAAE,CAAC,GAAG,CAAA;8BACY,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,KAAK;wFAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;sBACxF,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,IAAI,oEAAoE,CAAC,CAAC,MAAM;WACrH,CACF;;0BAEiB,CAAC,CAAC,cAAc,EAAE,qBAAqB,CAAC;KAC7D,CAAA;IACH,CAAC;;AAvcM,yBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+ElB,AA/EY,CA+EZ;AAG+B;IAA/B,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;iDAA8B;AAC7B;IAA/B,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;mDAAsC;AAE5D;IAAR,KAAK,EAAE;iDAA8B;AAC7B;IAAR,KAAK,EAAE;gDAAS;AACR;IAAR,KAAK,EAAE;iDAAc;AACb;IAAR,KAAK,EAAE;qDAAe;AACd;IAAR,KAAK,EAAE;sDAAqC;AACpC;IAAR,KAAK,EAAE;wDAA0C;AA3FvC,kBAAkB;IAD9B,aAAa,CAAC,uBAAuB,CAAC;GAC1B,kBAAkB,CAyc9B","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n *\n * 자리 레이아웃 편집기. 홀더의 Tier·Slot 구성을 고치고, 검증하고, 미리 보고, [적용]으로 알린다.\n * Tier 는 홀더가 주는 Anchor 하나에 서고, 그 Anchor 기준 위치·회전과 적재 방식(mount)을 갖는다.\n *\n * 컴포넌트 상태를 직접 바꾸지 않는다. 호스트에 두 가지만 알린다:\n * change — 적용한 레이아웃 (this.value)\n * slot-layout-use-default — 개별 설정을 지우고 기본값을 쓰겠다는 의도 (값을 비우는 편집과 다르다)\n * 기본값을 쓰게 된 뒤 보일 값은 호스트가 options.effective 로 다시 준다.\n */\n\nimport { css, html, nothing, LitElement, svg } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { i18next, localize } from '@operato/i18n'\nimport {\n persistenceIssues,\n slotSpaceWarnings,\n validateSlotLayout,\n type GridOrder,\n type SlotLayout,\n type SlotMount,\n type SlotPattern,\n type SlotSpec,\n type SlotSpaceOptions\n} from '@hatiolab/things-scene'\n\nimport {\n addCustomSlot,\n addressImpact,\n applyPreset,\n copyTier,\n previewTier,\n removeCustomSlot,\n removeTier,\n setTierPattern,\n updatePattern,\n updateSlotSpec,\n updateTier,\n type PresetSize,\n type SlotLayoutPreset\n} from './draft.js'\nimport { issueText as defaultIssueText, spaceWarningText, t, type EditorIssue } from './issue-text.js'\n\nexport interface SlotLayoutEditorNote {\n text: string\n level?: 'info' | 'error'\n}\n\nexport interface SlotLayoutEditorOptions<L extends SlotLayout = SlotLayout> {\n /** 개별 설정이 없을 때 보이는 값 (호스트가 고른 기본값). 편집 시작점이 된다 */\n effective?: L\n /** [기본값 사용]을 보일지. 기본은 개별 설정(value)이 있을 때 */\n canUseDefault?: boolean\n /** 호스트가 주는 프리셋 */\n presets?: SlotLayoutPreset<L>[]\n /** 프리셋 크기 초기값 */\n presetSize?: Partial<PresetSize>\n /** 상태 문구 (값의 출처, 단위 상태 등) */\n notes?: SlotLayoutEditorNote[]\n /** 홀더가 주는 Anchor. 주면 Tier 는 이 중 하나를 고르고, 없는 Anchor 는 문제로 보인다 */\n anchors?: { id: string; label?: string }[]\n /** Anchor 가 주는 적재면 크기 (Anchor 기준 X·Z). 주면 자리가 면 밖으로 나가는지와 확인 불가를 알린다 */\n anchorFaces?: SlotSpaceOptions['anchorFaces']\n /** 호스트 고유 검증 (경로는 레이아웃 기준) */\n validate?: (layout: L) => EditorIssue[]\n /** 문제 문구. undefined 를 돌려주면 기본 문구 */\n issueText?: (issue: EditorIssue) => string | undefined\n /** 레이아웃에 덧붙인 호스트 키를 고치는 구역 (예: 실시간 주소 읽기). edit 로 새 레이아웃을 넘긴다 */\n renderExtra?: (draft: L, edit: (next: L) => void) => unknown\n}\n\nconst num = (e: Event) => {\n const n = (e.target as HTMLInputElement).valueAsNumber\n return Number.isFinite(n) ? n : NaN\n}\n\n@customElement('ox-slot-layout-editor')\nexport class OxSlotLayoutEditor extends localize(i18next)(LitElement) {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n gap: 6px;\n font-size: 12px;\n }\n .row {\n display: grid;\n grid-template-columns: 40% 1fr;\n align-items: center;\n gap: 4px;\n }\n .notes {\n padding: 4px 6px;\n border-radius: 4px;\n background: rgba(0, 0, 0, 0.04);\n }\n .error {\n color: #c62828;\n }\n .note {\n color: rgba(0, 0, 0, 0.55);\n }\n .chips {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .chips button[active] {\n border-color: var(--md-sys-color-primary, #1976d2);\n color: var(--md-sys-color-primary, #1976d2);\n font-weight: bold;\n }\n button {\n font-size: 12px;\n padding: 2px 8px;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n background: #fff;\n cursor: pointer;\n }\n button[disabled] {\n opacity: 0.4;\n cursor: default;\n }\n input,\n select {\n font-size: 12px;\n min-width: 0;\n }\n table {\n border-collapse: collapse;\n width: 100%;\n }\n td,\n th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n padding: 1px;\n }\n td input {\n width: 100%;\n box-sizing: border-box;\n }\n h4 {\n margin: 6px 0 2px;\n font-size: 12px;\n }\n svg {\n width: 100%;\n height: 160px;\n background: rgba(0, 0, 0, 0.02);\n border: 1px solid rgba(0, 0, 0, 0.08);\n }\n .actions {\n display: flex;\n gap: 4px;\n justify-content: flex-end;\n }\n `\n\n /** 개별 설정. 없으면 undefined */\n @property({ attribute: false }) value: SlotLayout | undefined\n @property({ attribute: false }) options: SlotLayoutEditorOptions = {}\n\n @state() draft: SlotLayout | undefined\n @state() tier = 1\n @state() dirty = false\n @state() presetKey = ''\n @state() presetSize: Partial<PresetSize> = {}\n @state() presetParams: Record<string, number> = {}\n\n willUpdate(changed: Map<string, unknown>) {\n // 호스트가 렌더마다 새 options 를 넘겨도 편집 중인 값을 잃지 않도록, 값이나 호스트 기본값이 바뀔 때만 다시 시작한다\n const before = changed.get('options') as SlotLayoutEditorOptions | undefined\n if (changed.has('value') || (changed.has('options') && before?.effective !== this.options?.effective)) return this.reset()\n if (!changed.has('options')) return\n if (!this.options?.presets?.some(p => p.key === this.presetKey)) this.presetKey = this.options?.presets?.[0]?.key ?? ''\n // 값도 기본값도 없는 호스트도 프리셋 크기는 준다. 크기가 실제로 바뀔 때만 받고, 편집 중인 초안은 그대로 둔다\n if (JSON.stringify(before?.presetSize ?? {}) !== JSON.stringify(this.options?.presetSize ?? {})) this.presetSize = { ...(this.options?.presetSize ?? {}) }\n }\n\n /** 편집 중인 값을 버리고 개별 설정(없으면 호스트 기본값)에서 다시 시작한다 */\n reset() {\n const start = this.value ?? this.options?.effective\n this.draft = start ? structuredClone(start) : undefined\n this.tier = this.draft?.tiers?.[0]?.tierNo ?? 1\n this.dirty = false\n this.presetSize = { ...(this.options?.presetSize ?? {}) }\n if (!this.options?.presets?.some(p => p.key === this.presetKey)) this.presetKey = this.options?.presets?.[0]?.key ?? ''\n }\n\n get issues(): EditorIssue[] {\n if (!this.draft) return []\n const anchors = this.options?.anchors?.map(a => a.id)\n const invalid: EditorIssue[] = [...validateSlotLayout(this.draft, { anchors }), ...(this.options?.validate?.(this.draft) ?? [])]\n // 저장 불가 검사는 검증을 통과한 값에만 보인다 (같은 문제를 두 번 적지 않는다)\n return invalid.length ? invalid : persistenceIssues(this.draft)\n }\n\n /** 자리끼리 겹치거나 면 밖으로 나가는 설정 경고. 적용을 막지 않는다. 적재면 크기를 주지 않은 호스트에는 확인 불가를 보이지 않는다 */\n get warnings(): EditorIssue[] {\n if (!this.draft || this.issues.length) return []\n const faces = this.options?.anchorFaces\n return slotSpaceWarnings(this.draft, { anchorFaces: faces }).filter(w => faces || w.code !== 'ANCHOR_SPACE_UNKNOWN')\n }\n\n /** 적용하면 뜻이 바뀌는 주소 (지금 적용된 값 기준) */\n get impact() {\n return this.dirty && !this.issues.length ? addressImpact(this.value ?? this.options?.effective, this.draft) : { moved: [], gone: [] }\n }\n\n private _text(issue: EditorIssue) {\n return this.options?.issueText?.(issue) ?? defaultIssueText(issue)\n }\n\n private _edit(next: SlotLayout) {\n this.draft = next\n this.dirty = true\n if (!next.tiers.some(x => x.tierNo === this.tier)) this.tier = next.tiers[next.tiers.length - 1]?.tierNo ?? 1\n }\n\n private _apply() {\n this.value = structuredClone(this.draft)\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n\n private _useDefault() {\n this.dispatchEvent(new CustomEvent('slot-layout-use-default', { bubbles: true, composed: true }))\n }\n\n render() {\n const issues = this.issues\n const canUseDefault = this.options?.canUseDefault ?? this.value !== undefined\n return html`\n ${this.options?.notes?.length\n ? html`<div class=\"notes\">\n ${this.options.notes.map(n => html`<div class=${n.level === 'error' ? 'error' : 'note'}>${n.text}</div>`)}\n </div>`\n : nothing}\n ${this._renderPreset()} ${this.draft ? this._renderDraft(issues) : nothing} ${this._renderImpact()}\n <div class=\"actions\">\n ${canUseDefault ? html`<button data-action=\"use-default\" @click=${this._useDefault}>${t('use-default', 'Use default')}</button>` : nothing}\n <button data-action=\"discard\" ?disabled=${!this.dirty} @click=${() => this.reset()}>${t('discard', 'Discard')}</button>\n <button data-action=\"apply\" ?disabled=${!this.dirty || !this.draft || issues.length > 0} @click=${this._apply}>${t('apply', 'Apply')}</button>\n </div>\n `\n }\n\n private _renderPreset() {\n const presets = this.options?.presets ?? []\n if (!presets.length) return nothing\n const preset = presets.find(p => p.key === this.presetKey) ?? presets[0]\n const built = applyPreset(preset, this.presetSize, this.presetParams)\n const numberRow = (label: string, value: unknown, onChange: (n: number) => void, key: string) => html`\n <div class=\"row\">\n <label>${label}</label>\n <input type=\"number\" data-preset=${key} .value=${value === undefined || Number.isNaN(value) ? '' : String(value)} @change=${(e: Event) => onChange(num(e))} />\n </div>\n `\n return html`\n <h4>${t('preset', 'Preset')}</h4>\n <div class=\"row\">\n <label>${t('preset-kind', 'Kind')}</label>\n <select data-preset=\"kind\" @change=${(e: Event) => (this.presetKey = (e.target as HTMLSelectElement).value)}>\n ${presets.map(p => html`<option value=${p.key} ?selected=${p.key === preset.key}>${t(`preset.${p.key}`, p.key)}</option>`)}\n </select>\n </div>\n ${numberRow(t('width', 'Width (X)'), this.presetSize.width, n => (this.presetSize = { ...this.presetSize, width: n }), 'width')}\n ${numberRow(t('depth', 'Depth (Z)'), this.presetSize.depth, n => (this.presetSize = { ...this.presetSize, depth: n }), 'depth')}\n ${numberRow(t('slot-height', 'Slot height'), this.presetSize.slotHeight, n => (this.presetSize = { ...this.presetSize, slotHeight: n }), 'slotHeight')}\n ${(preset.params ?? []).map(p =>\n numberRow(t(`preset-param.${p.key}`, p.key), this.presetParams[p.key], n => (this.presetParams = { ...this.presetParams, [p.key]: n }), p.key)\n )}\n <div class=\"note\">${t('preset-note', 'Pitch and slot size are split evenly as starting values. Confirm them against the real equipment.')}</div>\n <div class=\"actions\">\n <button data-action=\"start-preset\" ?disabled=${!built.layout} @click=${() => built.layout && this._startFrom(built.layout)}>\n ${t('start-from-preset', 'Start from preset')}\n </button>\n </div>\n `\n }\n\n /** 적용 전에 뜻이 바뀌는 주소를 보인다. 놓인 Carrier 는 주소로 다시 읽혀 다른 자리에 그려지거나 예외가 된다 */\n private _renderImpact() {\n const { moved, gone } = this.impact\n if (!moved.length && !gone.length) return nothing\n const list = (ids: string[]) => (ids.length > 12 ? `${ids.slice(0, 12).join(', ')} … (${ids.length})` : ids.join(', '))\n return html`<div class=\"notes\" data-impact>\n ${moved.length ? html`<div class=\"note\">${t('impact-moved', 'Moves: {ids}', { ids: list(moved) })}</div>` : nothing}\n ${gone.length ? html`<div class=\"error\">${t('impact-gone', 'Removed: {ids}', { ids: list(gone) })}</div>` : nothing}\n </div>`\n }\n\n /** 프리셋으로 다시 시작한다. 지금 값에 덧붙은 호스트 키(Tier 밖의 키)는 가져온다 */\n private _startFrom(layout: SlotLayout) {\n const { tiers: _t, ...extra } = (this.draft ?? {}) as Record<string, unknown>\n this._edit({ ...extra, ...structuredClone(layout) } as SlotLayout)\n }\n\n private _renderDraft(issues: EditorIssue[]) {\n const draft = this.draft!\n const tier = draft.tiers?.find(x => x.tierNo === this.tier) ?? draft.tiers?.[0]\n const warnings = this.warnings\n const issueList = issues.length\n ? html`<div class=\"error\" data-issues>${issues.map(i => html`<div>· ${this._text(i)}</div>`)}</div>`\n : warnings.length\n ? html`<div class=\"note\" data-warnings>${warnings.map(w => html`<div>· ${spaceWarningText(w)}</div>`)}</div>`\n : nothing\n // 층이 없는 값(잘못된 저장값)은 편집할 층이 없으므로 문제만 보인다. 프리셋으로 다시 시작한다\n if (!tier) return issueList\n return html`\n <h4>${t('tiers', 'Tiers')}</h4>\n <div class=\"chips\">\n ${draft.tiers.map(\n x => html`<button data-tier=${x.tierNo} ?active=${x.tierNo === tier.tierNo} @click=${() => (this.tier = x.tierNo)}>${t('tier-n', 'Tier {n}', { n: x.tierNo })}</button>`\n )}\n </div>\n <div class=\"actions\">\n <button data-action=\"copy-tier\" @click=${() => this._copyTier(draft, tier.tierNo)}>${t('copy-tier', 'Copy tier')}</button>\n <button data-action=\"remove-tier\" ?disabled=${draft.tiers.length <= 1} @click=${() => this._edit(removeTier(draft, tier.tierNo))}>${t('remove-tier', 'Remove tier')}</button>\n </div>\n ${this._renderTier(draft, tier.tierNo)} ${this.options?.renderExtra?.(draft, next => this._edit(next)) ?? nothing}\n <h4>${t('preview', 'Preview (top view, tier {n}, in the tier)', { n: tier.tierNo })}</h4>\n ${this._renderPreview(draft, tier.tierNo)} ${issueList}\n `\n }\n\n /** 복사한 Tier 를 골라 둔다. 같은 자리에 겹쳐 생기므로 바로 이어서 배치를 고친다 */\n private _copyTier(draft: SlotLayout, tierNo: number) {\n const next = copyTier(draft, tierNo)\n this._edit(next)\n this.tier = next.tiers[next.tiers.length - 1].tierNo\n }\n\n private _renderTier(draft: SlotLayout, tierNo: number) {\n const tier = draft.tiers.find(x => x.tierNo === tierNo)!\n const l = tier.layout as SlotPattern & Record<string, any>\n const patternInput = (k: string, label: string, value: unknown, parse: (e: Event) => unknown = num) => html`\n <div class=\"row\">\n <label>${label}</label>\n <input type=\"number\" data-field=${k} .value=${value === undefined || Number.isNaN(value) ? '' : String(value)} @change=${(e: Event) => this._edit(updatePattern(draft, tierNo, { [k]: parse(e) }))} />\n </div>\n `\n const select = (field: string, label: string, value: string, options: string[], onChange: (v: string) => void) => html`\n <div class=\"row\">\n <label>${label}</label>\n <select data-field=${field} @change=${(e: Event) => onChange((e.target as HTMLSelectElement).value)}>\n ${options.map(o => html`<option value=${o} ?selected=${o === value}>${o}</option>`)}\n </select>\n </div>\n `\n return html`\n ${this._renderPlacement(draft, tierNo)}\n ${select('pattern', t('pattern', 'Pattern'), l.pattern, ['SINGLE', 'ROW', 'GRID', 'CUSTOM'], v => this._edit(setTierPattern(draft, tierNo, v as SlotPattern['pattern'])))}\n ${l.pattern === 'ROW'\n ? html`\n ${patternInput('count', t('count', 'Slots'), l.count)} ${patternInput('pitch', t('pitch', 'Pitch'), l.pitch)}\n ${select('axis', t('axis', 'Axis'), l.axis, ['X', 'Z'], v => this._edit(updatePattern(draft, tierNo, { axis: v as 'X' | 'Z' })))}\n ${select('origin', t('origin', 'Slot 1 at'), l.origin ?? 'MIN', ['MIN', 'MAX'], v => this._edit(updatePattern(draft, tierNo, { origin: v as 'MIN' | 'MAX' })))}\n `\n : nothing}\n ${l.pattern === 'GRID'\n ? html`\n ${patternInput('rows', t('rows', 'Rows (Z)'), l.rows)} ${patternInput('cols', t('cols', 'Columns (X)'), l.cols)}\n ${patternInput('pitch', t('pitch-x', 'Pitch X'), l.pitch?.x, e => ({ ...l.pitch, x: num(e) }))}\n ${patternInput('pitch', t('pitch-z', 'Pitch Z'), l.pitch?.z, e => ({ ...l.pitch, z: num(e) }))}\n ${select('order', t('order', 'Numbering'), l.order ?? 'ROW_MAJOR', ['ROW_MAJOR', 'COL_MAJOR', 'SERPENTINE_ROW', 'SERPENTINE_COL'], v =>\n this._edit(updatePattern(draft, tierNo, { order: v as GridOrder }))\n )}\n ${select('origin-x', t('origin-x', 'Slot 1 at X'), l.origin?.x ?? 'MIN', ['MIN', 'MAX'], v =>\n this._edit(updatePattern(draft, tierNo, { origin: { z: 'MIN', ...l.origin, x: v as 'MIN' | 'MAX' } }))\n )}\n ${select('origin-z', t('origin-z', 'Slot 1 at Z'), l.origin?.z ?? 'MIN', ['MIN', 'MAX'], v =>\n this._edit(updatePattern(draft, tierNo, { origin: { x: 'MIN', ...l.origin, z: v as 'MIN' | 'MAX' } }))\n )}\n `\n : nothing}\n ${l.pattern === 'CUSTOM' ? this._renderCustom(draft, tierNo) : this._renderSpec(draft, tierNo, l.slot)}\n `\n }\n\n /** Tier 가 선 Anchor, 적재 방식, Anchor 기준 위치·회전 */\n private _renderPlacement(draft: SlotLayout, tierNo: number) {\n const tier = draft.tiers.find(x => x.tierNo === tierNo)!\n const anchors = this.options?.anchors\n const edit = (patch: Parameters<typeof updateTier>[2]) => this._edit(updateTier(draft, tierNo, patch))\n const position = tier.position ?? { x: 0, y: 0, z: 0 }\n const axis = (k: 'x' | 'y' | 'z', label: string) => html`\n <div class=\"row\">\n <label>${label}</label>\n <input type=\"number\" data-field=${`position-${k}`} .value=${String(position[k] ?? '')} @change=${(e: Event) => edit({ position: { ...position, [k]: num(e) } })} />\n </div>\n `\n return html`\n <div class=\"row\">\n <label>${t('anchor', 'Anchor')}</label>\n ${anchors?.length\n ? html`<select data-field=\"anchor\" @change=${(e: Event) => edit({ anchorId: (e.target as HTMLSelectElement).value })}>\n ${anchors.some(a => a.id === tier.anchorId) ? nothing : html`<option value=${tier.anchorId ?? ''} selected>${tier.anchorId ?? ''}</option>`}\n ${anchors.map(a => html`<option value=${a.id} ?selected=${a.id === tier.anchorId}>${a.label ?? a.id}</option>`)}\n </select>`\n : html`<input data-field=\"anchor\" .value=${tier.anchorId ?? ''} @change=${(e: Event) => edit({ anchorId: (e.target as HTMLInputElement).value.trim() })} />`}\n </div>\n <div class=\"row\">\n <label>${t('mount', 'Mount')}</label>\n <select data-field=\"mount\" @change=${(e: Event) => edit({ mount: (e.target as HTMLSelectElement).value as SlotMount })}>\n ${(['ON', 'IN', 'HANG'] as const).map(m => html`<option value=${m} ?selected=${m === tier.mount}>${m}</option>`)}\n </select>\n </div>\n ${axis('x', t('position-x', 'Position X'))} ${axis('y', t('position-y', 'Position Y (height)'))} ${axis('z', t('position-z', 'Position Z'))}\n <div class=\"row\">\n <label>${t('tier-rotation', 'Tier rotation (deg)')}</label>\n <input type=\"number\" data-field=\"tier-rotation\" .value=${String(tier.rotation ?? '')} @change=${(e: Event) => edit({ rotation: num(e) })} />\n </div>\n `\n }\n\n /** 받는 타입: 모든 타입(accepts 생략) / 지정 타입만(빈 목록이면 아무것도 받지 않음) */\n private _acceptsEditor(spec: SlotSpec, onChange: (accepts: string[] | undefined) => void) {\n const restricted = Array.isArray(spec.accepts)\n return html`\n <div class=\"row\">\n <label>${t('accepts', 'Accepts')}</label>\n <select data-field=\"accepts-mode\" @change=${(e: Event) => onChange((e.target as HTMLSelectElement).value === 'ALL' ? undefined : spec.accepts ?? [])}>\n <option value=\"ALL\" ?selected=${!restricted}>${t('accepts-all', 'Any type')}</option>\n <option value=\"LIST\" ?selected=${restricted}>${t('accepts-list', 'Listed types only')}</option>\n </select>\n </div>\n ${restricted\n ? html`<div class=\"row\">\n <label>${t('accepts-types', 'Types (comma)')}</label>\n <input\n data-field=\"accepts\"\n .value=${(spec.accepts ?? []).join(', ')}\n placeholder=${t('accepts-none', 'Empty = accepts nothing')}\n @change=${(e: Event) =>\n onChange(\n (e.target as HTMLInputElement).value\n .split(',')\n .map(s => s.trim())\n .filter(Boolean)\n )}\n />\n </div>`\n : nothing}\n `\n }\n\n private _renderSpec(draft: SlotLayout, tierNo: number, spec: SlotSpec) {\n const edit = (patch: Partial<SlotSpec>) => this._edit(updateSlotSpec(draft, tierNo, patch))\n const allowed = (k: 'width' | 'depth' | 'height', label: string) => html`\n <div class=\"row\">\n <label>${label}</label>\n <input type=\"number\" data-field=${`allowed-${k}`} .value=${String(spec.allowed?.[k] ?? '')} @change=${(e: Event) => edit({ allowed: { ...spec.allowed, [k]: num(e) } })} />\n </div>\n `\n return html`\n <h4>${t('slot-spec', 'Slot (same for every slot in this tier)')}</h4>\n ${allowed('width', t('allowed-width', 'Allowed width'))} ${allowed('depth', t('allowed-depth', 'Allowed depth'))}\n ${allowed('height', t('allowed-height', 'Allowed height'))}\n <div class=\"row\">\n <label>${t('stack-limit', 'Stack limit')}</label>\n <input type=\"number\" data-field=\"stack-limit\" min=\"1\" step=\"1\" .value=${String(spec.stackLimit ?? 1)} @change=${(e: Event) => edit({ stackLimit: num(e) })} />\n </div>\n <div class=\"row\">\n <label>${t('rotation', 'Rotation (deg)')}</label>\n <input type=\"number\" data-field=\"rotation\" .value=${String(spec.rotation ?? 0)} @change=${(e: Event) => edit({ rotation: num(e) || undefined })} />\n </div>\n ${this._acceptsEditor(spec, accepts => edit({ accepts }))}\n `\n }\n\n private _renderCustom(draft: SlotLayout, tierNo: number) {\n const tier = draft.tiers.find(x => x.tierNo === tierNo)!\n const slots = [...(tier.layout as Extract<SlotPattern, { pattern: 'CUSTOM' }>).slots].sort((a, b) => a.slotNo - b.slotNo)\n const cell = (slotNo: number, value: unknown, patch: (e: Event) => Record<string, unknown>) =>\n html`<td><input type=\"number\" .value=${String(value ?? '')} @change=${(e: Event) => this._edit(updateSlotSpec(draft, tierNo, patch(e), slotNo))} /></td>`\n return html`\n <h4>${t('custom-slots', 'Slots')}</h4>\n <table>\n <tr>\n <th>#</th>\n <th>X</th>\n <th>Z</th>\n <th>${t('w', 'W')}</th>\n <th>${t('d', 'D')}</th>\n <th>${t('h', 'H')}</th>\n <th>${t('stack', 'Stack')}</th>\n <th>${t('rot', 'Rot')}</th>\n <th></th>\n </tr>\n ${slots.map(\n s => html`\n <tr>\n <td>${s.slotNo}</td>\n ${cell(s.slotNo, s.offset?.x, e => ({ offset: { ...s.offset, x: num(e) } }))}\n ${cell(s.slotNo, s.offset?.z, e => ({ offset: { ...s.offset, z: num(e) } }))}\n ${cell(s.slotNo, s.allowed?.width, e => ({ allowed: { ...s.allowed, width: num(e) } }))}\n ${cell(s.slotNo, s.allowed?.depth, e => ({ allowed: { ...s.allowed, depth: num(e) } }))}\n ${cell(s.slotNo, s.allowed?.height, e => ({ allowed: { ...s.allowed, height: num(e) } }))}\n ${cell(s.slotNo, s.stackLimit ?? 1, e => ({ stackLimit: num(e) }))} ${cell(s.slotNo, s.rotation ?? 0, e => ({ rotation: num(e) || undefined }))}\n <td><button ?disabled=${slots.length <= 1} @click=${() => this._edit(removeCustomSlot(draft, tierNo, s.slotNo))}>−</button></td>\n </tr>\n `\n )}\n </table>\n <div class=\"actions\"><button data-action=\"add-slot\" @click=${() => this._edit(addCustomSlot(draft, tierNo))}>${t('add-slot', 'Add slot')}</button></div>\n `\n }\n\n /** 위에서 본 자리 배치. 오른쪽이 +X, 위쪽이 −Z */\n private _renderPreview(draft: SlotLayout, tierNo: number) {\n const slots = previewTier(draft, tierNo)\n if (!slots.length) return html`<div class=\"note\" data-preview=\"none\">${t('preview-none', 'No slots to show with the current values.')}</div>`\n const minX = Math.min(...slots.map(s => s.x - s.width / 2))\n const maxX = Math.max(...slots.map(s => s.x + s.width / 2))\n const minZ = Math.min(...slots.map(s => s.z - s.depth / 2))\n const maxZ = Math.max(...slots.map(s => s.z + s.depth / 2))\n const w = Math.max(maxX - minX, 1)\n const h = Math.max(maxZ - minZ, 1)\n const pad = Math.max(w, h) * 0.08\n const font = Math.max(w, h) * 0.07\n return html`\n <svg data-preview viewBox=\"${minX - pad} ${minZ - pad} ${w + pad * 2} ${h + pad * 2}\" preserveAspectRatio=\"xMidYMid meet\">\n ${slots.map(\n s => svg`\n <rect data-slot=${s.slotNo} x=${s.x - s.width / 2} y=${s.z - s.depth / 2} width=${s.width} height=${s.depth}\n fill=\"rgba(25,118,210,0.08)\" stroke=\"rgba(25,118,210,0.8)\" stroke-width=${Math.max(w, h) * 0.006} />\n <text x=${s.x} y=${s.z} font-size=${font} text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"#0d47a1\">${s.slotNo}</text>\n `\n )}\n </svg>\n <div class=\"note\">${t('preview-axes', 'Right = +X, up = −Z')}</div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ox-slot-layout-editor': OxSlotLayoutEditor\n }\n}\n"]}
1
+ {"version":3,"file":"ox-slot-layout-editor.js","sourceRoot":"","sources":["../../src/ox-slot-layout-editor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n *\n * 자리 레이아웃 편집기. 홀더의 Tier·Slot 구성을 고치고, 검증하고, 미리 보고, 호스트에 알린다.\n * Tier 는 홀더가 주는 Anchor 하나에 서고, 그 Anchor 기준 위치·회전과 적재 방식(mount)을 갖는다.\n *\n * 맨 위 그림은 Anchor 면(호스트가 크기를 주면)과 그 위의 자리, 실린 아이템을 Anchor 기준으로 보인다. 자리를 끌면 Tier 위치가,\n * 끝 자리의 점을 끌면 간격이 바뀐다. 끄는 동안은 그림만 바뀌고, 놓을 때 한 번 편집이 된다. Esc 는 끌기 전으로 돌린다.\n *\n * 컴포넌트 상태를 직접 바꾸지 않는다. 호스트에 두 가지만 알린다:\n * change — 적용한 레이아웃 (this.value). live 호스트에는 맞는 편집마다, 아니면 [적용]으로\n * slot-layout-use-default — 개별 설정을 지우고 기본값을 쓰겠다는 의도 (값을 비우는 편집과 다르다)\n * 맞지 않는 초안은 알리지 않는다: 칸 옆에 문제를 보이고, 장면에는 마지막으로 알린 값이 남는다.\n * 기본값을 쓰게 된 뒤 보일 값은 호스트가 options.effective 로 다시 준다.\n */\n\nimport { css, html, nothing, LitElement, svg } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { i18next, localize } from '@operato/i18n'\nimport {\n persistenceIssues,\n rotatedFootprint,\n slotSpaceWarnings,\n validateSlotLayout,\n type GridOrder,\n type SlotLayout,\n type SlotMount,\n type SlotPattern,\n type SlotSpec,\n type SlotSpaceOptions\n} from '@hatiolab/things-scene'\n\nimport {\n addCustomSlot,\n addressImpact,\n anchorFaceSlots,\n applyPreset,\n copyTier,\n fitTierToFace,\n heldItemStatuses,\n pitchToPoint,\n removeCustomSlot,\n removeTier,\n setTierPattern,\n updatePattern,\n updateSlotSpec,\n updateTier,\n type HeldItem,\n type PresetSize,\n type SlotLayoutPreset\n} from './draft.js'\nimport {\n fitFaceText,\n fitText,\n issueField,\n issueMessage,\n issueText as defaultIssueText,\n ISSUE_TEXT,\n spaceWarningText,\n t,\n type EditorIssue\n} from './issue-text.js'\n\nexport interface SlotLayoutEditorNote {\n /** 보일 문구. 없으면 issue 를 편집기의 문구로 보인다 */\n text?: string\n level?: 'info' | 'error'\n /** 문구의 종류. OVERRIDE_INVALID: 개별 설정이 맞지 않아 자리가 없음 */\n code?: string\n issue?: EditorIssue\n}\n\nexport interface SlotLayoutEditorOptions<L extends SlotLayout = SlotLayout> {\n /** 개별 설정이 없을 때 보이는 값 (호스트가 고른 기본값). 편집 시작점이 된다 */\n effective?: L\n /** [기본값 사용]을 보일지. 기본은 개별 설정(value)이 있을 때 */\n canUseDefault?: boolean\n /** 맞는 편집마다 바로 알린다. [적용]·[변경 취소]가 없다. 끌기는 놓을 때 한 번 */\n live?: boolean\n /** 호스트가 주는 프리셋 */\n presets?: SlotLayoutPreset<L>[]\n /** 프리셋 크기 초기값 */\n presetSize?: Partial<PresetSize>\n /** 상태 문구 (값의 출처, 단위 상태 등) */\n notes?: SlotLayoutEditorNote[]\n /** 홀더가 주는 Anchor. 주면 Tier 는 이 중 하나를 고르고, 없는 Anchor 는 문제로 보인다. part·face 를 주면 면 이름으로 보인다 */\n anchors?: { id: string; label?: string; part?: string; face?: string }[]\n /** Anchor 가 주는 적재면 크기 (Anchor 기준 X·Z). 그림에 면을 그리고, 자리가 면 밖으로 나가는지 알린다. 없으면 확인 불가로 보인다 */\n anchorFaces?: SlotSpaceOptions['anchorFaces']\n /** 레이아웃 길이 단위 (예: mm). 그림과 칸 이름에 붙인다 */\n unit?: string\n /** 받는 타입을 고르는 목록 (아이템 타입 코드·이름). 없으면 코드를 직접 적는다 */\n itemTypes?: { code: string; name?: string }[]\n /** 자리마다 받는 타입을 적어야 한다 (Figure 레이아웃). [모든 타입]을 보이지 않는다 */\n acceptsRequired?: boolean\n /** 지금 실린 아이템 (읽기 전용). 편집 중인 레이아웃에서 어떻게 되는지 보인다 */\n items?: HeldItem[]\n /** 호스트 고유 검증 (경로는 레이아웃 기준) */\n validate?: (layout: L) => EditorIssue[]\n /** 문제 문구. undefined 를 돌려주면 기본 문구 */\n issueText?: (issue: EditorIssue) => string | undefined\n /** 레이아웃에 덧붙인 호스트 키를 고치는 구역 (예: 실시간 주소 읽기). edit 로 새 레이아웃을 넘긴다 */\n renderExtra?: (draft: L, edit: (next: L) => void) => unknown\n}\n\nconst num = (e: Event) => {\n const n = (e.target as HTMLInputElement).valueAsNumber\n return Number.isFinite(n) ? n : NaN\n}\nconst shown = (v: unknown) => (v === undefined || v === null || Number.isNaN(v) ? '' : String(v))\nconst snap = (v: number) => Math.round(v / 10) * 10\nconst ERROR = '#c62828'\nconst SLOT = '#1976d2'\n\n/** 칸 이름 (칸 옆에 오지 못한 문제를 목록에 적을 때) */\nconst FIELD_LABEL: Record<string, [string, string]> = {\n anchor: ['face', 'Face'],\n mount: ['mount', 'Mount'],\n 'position-x': ['position-x', 'Position X'],\n 'position-y': ['position-y', 'Position Y (height)'],\n 'position-z': ['position-z', 'Position Z'],\n 'tier-rotation': ['tier-rotation', 'Tier rotation (deg)'],\n pattern: ['pattern', 'Arrangement'],\n count: ['count', 'Slots'],\n pitch: ['pitch', 'Pitch'],\n 'pitch-x': ['pitch-x', 'Pitch X'],\n 'pitch-z': ['pitch-z', 'Pitch Z'],\n axis: ['axis', 'Direction'],\n origin: ['origin', 'Slot 1 at'],\n 'origin-x': ['origin-x', 'Slot 1 at X'],\n 'origin-z': ['origin-z', 'Slot 1 at Z'],\n rows: ['rows', 'Rows (Z)'],\n cols: ['cols', 'Columns (X)'],\n order: ['order', 'Numbering'],\n 'allowed-width': ['allowed-width', 'Width (X)'],\n 'allowed-depth': ['allowed-depth', 'Depth (Z)'],\n 'allowed-height': ['allowed-height', 'Height'],\n 'stack-limit': ['stack-limit', 'Stack limit'],\n rotation: ['rotation', 'Slot rotation (deg)'],\n accepts: ['accepts', 'Accepts']\n}\nconst fieldLabel = (field: string) => (FIELD_LABEL[field] ? t(FIELD_LABEL[field][0], FIELD_LABEL[field][1]) : field)\n\ninterface Drag {\n kind: 'move' | 'pitch'\n tierNo: number\n from: { x: number; z: number }\n before: SlotLayout\n viewBox: string\n}\n\n@customElement('ox-slot-layout-editor')\nexport class OxSlotLayoutEditor extends localize(i18next)(LitElement) {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n font-size: 12px;\n color: var(--property-editor-color, inherit);\n }\n section {\n display: grid;\n grid-template-columns: minmax(64px, 34%) minmax(0, 1fr);\n gap: 4px 6px;\n align-items: center;\n }\n h4,\n summary {\n grid-column: 1 / -1;\n margin: 4px 0 0;\n font-size: 12px;\n font-weight: bold;\n }\n summary {\n cursor: pointer;\n }\n details > section {\n margin-top: 4px;\n }\n label.l {\n text-align: right;\n font: var(--property-editor-label-font, inherit);\n color: var(--property-editor-label-color, inherit);\n }\n .unit {\n opacity: 0.6;\n }\n .err {\n grid-column: 2;\n color: #c62828;\n font-size: 11px;\n }\n .notes {\n padding: 4px 6px;\n border-radius: 4px;\n background: rgba(0, 0, 0, 0.04);\n }\n .error {\n color: #c62828;\n }\n .note,\n .hint {\n color: rgba(0, 0, 0, 0.55);\n }\n .hint {\n grid-column: 2;\n font-size: 11px;\n }\n input,\n select {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n min-height: var(--property-editor-field-height, 24px);\n padding: var(--property-editor-field-padding, 1px 4px);\n border: var(--property-editor-border, 1px solid rgba(0, 0, 0, 0.2));\n border-radius: var(--property-editor-border-radius, 4px);\n background-color: var(--property-editor-background, field);\n color: inherit;\n font: var(--property-editor-field-font, inherit);\n outline: none;\n }\n input[type='number'] {\n font-variant-numeric: tabular-nums;\n }\n input[invalid],\n select[invalid],\n .seg[invalid],\n .chips[invalid] {\n border-color: #c62828;\n }\n .seg {\n display: flex;\n box-sizing: border-box;\n min-height: var(--property-editor-field-height, 24px);\n border: var(--property-editor-border, 1px solid rgba(0, 0, 0, 0.2));\n border-radius: var(--property-editor-border-radius, 4px);\n background-color: var(--property-editor-background, field);\n overflow: hidden;\n }\n .seg button {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 0 4px;\n border: 0;\n border-left: 1px solid rgba(0, 0, 0, 0.12);\n border-radius: 0;\n background: transparent;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .seg button:first-child {\n border-left: 0;\n }\n .seg button[aria-checked='true'] {\n background: var(--md-sys-color-primary, #1976d2);\n color: var(--md-sys-color-on-primary, #fff);\n }\n button {\n box-sizing: border-box;\n min-height: var(--property-editor-field-height, 24px);\n padding: 0 8px;\n border: var(--property-editor-border, 1px solid rgba(0, 0, 0, 0.2));\n border-radius: var(--property-editor-border-radius, 4px);\n background-color: var(--property-editor-background, field);\n color: inherit;\n font: var(--property-editor-field-font, inherit);\n cursor: pointer;\n }\n button[disabled] {\n opacity: 0.4;\n cursor: default;\n }\n .tiers,\n .chips,\n .actions,\n .inline {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n align-items: center;\n }\n .actions {\n justify-content: flex-end;\n }\n .tiers button[aria-pressed='true'] {\n border-color: var(--md-sys-color-primary, #1976d2);\n color: var(--md-sys-color-primary, #1976d2);\n font-weight: bold;\n }\n .tiers .end {\n margin-left: auto;\n }\n .inline > input {\n flex: 1;\n }\n .chips {\n box-sizing: border-box;\n padding: 2px;\n border: 1px solid transparent;\n border-radius: var(--property-editor-border-radius, 4px);\n }\n .chip {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n padding: 1px 2px 1px 6px;\n border-radius: 10px;\n background: rgba(25, 118, 210, 0.1);\n color: #0d47a1;\n }\n .chip[unregistered] {\n background: rgba(239, 159, 39, 0.18);\n color: #633806;\n }\n .chip button {\n min-height: 0;\n padding: 0 4px;\n border: 0;\n background: transparent;\n }\n .chips select {\n flex: 1;\n min-width: 80px;\n width: auto;\n }\n svg {\n display: block;\n width: 100%;\n height: auto;\n max-height: 240px;\n touch-action: none;\n background: rgba(0, 0, 0, 0.02);\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 4px;\n }\n svg [data-slot] {\n cursor: move;\n }\n svg [data-handle] {\n cursor: ew-resize;\n }\n .caption {\n display: flex;\n justify-content: space-between;\n gap: 6px;\n color: rgba(0, 0, 0, 0.55);\n font-size: 11px;\n }\n .items {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .items .bad {\n color: #c62828;\n }\n .items .warn {\n color: #854f0b;\n }\n table {\n border-collapse: collapse;\n width: 100%;\n }\n td,\n th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n padding: 1px;\n }\n `\n\n /** 개별 설정. 없으면 undefined */\n @property({ attribute: false }) value: SlotLayout | undefined\n @property({ attribute: false }) options: SlotLayoutEditorOptions = {}\n\n @state() draft: SlotLayout | undefined\n @state() tier = 1\n @state() dirty = false\n @state() presetKey = ''\n @state() presetSize: Partial<PresetSize> = {}\n @state() presetParams: Record<string, number> = {}\n /** [면에 맞춤]을 할 수 없던 까닭 */\n @state() fitNote: string | undefined\n\n private _drag: Drag | undefined\n\n willUpdate(changed: Map<string, unknown>) {\n // 호스트가 렌더마다 새 options 를 넘겨도 편집 중인 값을 잃지 않도록, 값이나 호스트 기본값이 바뀔 때만 다시 시작한다\n const before = changed.get('options') as SlotLayoutEditorOptions | undefined\n if (changed.has('value') || (changed.has('options') && before?.effective !== this.options?.effective)) return this.reset()\n if (!changed.has('options')) return\n if (!this.options?.presets?.some(p => p.key === this.presetKey)) this.presetKey = this.options?.presets?.[0]?.key ?? ''\n // 값도 기본값도 없는 호스트도 프리셋 크기는 준다. 크기가 실제로 바뀔 때만 받고, 편집 중인 초안은 그대로 둔다\n if (JSON.stringify(before?.presetSize ?? {}) !== JSON.stringify(this.options?.presetSize ?? {})) this.presetSize = { ...(this.options?.presetSize ?? {}) }\n }\n\n /** 편집 중인 값을 버리고 개별 설정(없으면 호스트 기본값)에서 다시 시작한다. 고른 Tier 는 남아 있으면 그대로 */\n reset() {\n const start = this.value ?? this.options?.effective\n this.draft = start ? structuredClone(start) : undefined\n if (!this.draft?.tiers?.some(x => x?.tierNo === this.tier)) this.tier = this.draft?.tiers?.[0]?.tierNo ?? 1\n this.dirty = false\n this.fitNote = undefined\n this._endDrag()\n this.presetSize = { ...(this.options?.presetSize ?? {}) }\n if (!this.options?.presets?.some(p => p.key === this.presetKey)) this.presetKey = this.options?.presets?.[0]?.key ?? ''\n }\n\n get issues(): EditorIssue[] {\n if (!this.draft) return []\n const anchors = this.options?.anchors?.map(a => a.id)\n const invalid: EditorIssue[] = [...validateSlotLayout(this.draft, { anchors }), ...(this.options?.validate?.(this.draft) ?? [])]\n // 호스트 검증이 같은 문제를 다시 내도 한 번만 적는다\n const seen = new Set<string>()\n const unique = invalid.filter(i => !seen.has(`${i.code}@${i.path}`) && !!seen.add(`${i.code}@${i.path}`))\n // 저장 불가 검사는 검증을 통과한 값에만 보인다 (같은 문제를 두 번 적지 않는다)\n return unique.length ? unique : persistenceIssues(this.draft)\n }\n\n /** 자리끼리 겹치거나 면 밖으로 나가는 설정, 면 크기를 몰라 확인하지 못한 Anchor. 적용을 막지 않는다 */\n get warnings(): EditorIssue[] {\n if (!this.draft || this.issues.length) return []\n return slotSpaceWarnings(this.draft, { anchorFaces: this.options?.anchorFaces })\n }\n\n /** 적용하면 뜻이 바뀌는 주소 (지금 적용된 값 기준) */\n get impact() {\n return this.dirty && !this.issues.length ? addressImpact(this.value ?? this.options?.effective, this.draft) : { moved: [], gone: [] }\n }\n\n private _message(issue: EditorIssue) {\n // 편집기가 아는 코드는 칸 옆에 위치 없이 보인다. 호스트 고유 코드는 호스트 문구\n if (issue.code in ISSUE_TEXT) return issueMessage(issue)\n return this.options?.issueText?.(issue) ?? issueMessage(issue)\n }\n\n private _text(issue: EditorIssue) {\n return this.options?.issueText?.(issue) ?? defaultIssueText(issue)\n }\n\n private _edit(next: SlotLayout) {\n this.draft = next\n this.dirty = true\n this.fitNote = undefined\n if (!next.tiers.some(x => x.tierNo === this.tier)) this.tier = next.tiers[next.tiers.length - 1]?.tierNo ?? 1\n if (this.options?.live && !this.issues.length) this._apply()\n }\n\n private _apply() {\n this.value = structuredClone(this.draft)\n this.dirty = false\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n\n private _useDefault() {\n this.dispatchEvent(new CustomEvent('slot-layout-use-default', { bubbles: true, composed: true }))\n }\n\n render() {\n const issues = this.issues\n const live = !!this.options?.live\n const canUseDefault = this.options?.canUseDefault ?? this.value !== undefined\n return html`\n ${this._renderNotes()} ${this.draft ? this._renderDraft(issues) : nothing} ${this._renderPreset()} ${live ? nothing : this._renderImpact()}\n <div class=\"actions\">\n ${canUseDefault ? html`<button data-action=\"use-default\" @click=${this._useDefault}>${t('use-default', 'Use default')}</button>` : nothing}\n ${live\n ? nothing\n : html`\n <button data-action=\"discard\" ?disabled=${!this.dirty} @click=${() => this.reset()}>${t('discard', 'Discard')}</button>\n <button data-action=\"apply\" ?disabled=${!this.dirty || !this.draft || issues.length > 0} @click=${this._apply}>${t('apply', 'Apply')}</button>\n `}\n </div>\n `\n }\n\n private _renderNotes() {\n const notes = this.options?.notes ?? []\n if (!notes.length) return nothing\n const text = (n: SlotLayoutEditorNote) =>\n n.text ??\n (n.code === 'OVERRIDE_INVALID' && n.issue\n ? t('override-invalid', \"This placement's layout does not hold and offers no slots: {text}\", { text: this._located(n.issue), interpolation: { escapeValue: false } })\n : n.issue\n ? this._located(n.issue)\n : '')\n return html`<div class=\"notes\">${notes.map(n => html`<div class=${n.level === 'error' ? 'error' : 'note'}>${text(n)}</div>`)}</div>`\n }\n\n /** 문제를 Tier·칸 이름과 함께. 칸을 모르면 경로 그대로 */\n private _located(issue: EditorIssue) {\n const { tierIndex, field } = issueField(issue)\n const tierNo = tierIndex === undefined ? undefined : this.draft?.tiers?.[tierIndex]?.tierNo ?? tierIndex + 1\n if (tierNo === undefined || !field) return this._text(issue)\n return `${t('tier-n', 'Tier {n}', { n: tierNo })} · ${fieldLabel(field)}: ${this._message(issue)}`\n }\n\n private _renderPreset() {\n const presets = this.options?.presets ?? []\n if (!presets.length) return nothing\n const preset = presets.find(p => p.key === this.presetKey) ?? presets[0]\n const built = applyPreset(preset, this.presetSize, this.presetParams)\n const numberRow = (label: string, value: unknown, onChange: (n: number) => void, key: string) => html`\n <label class=\"l\">${label}</label>\n <input type=\"number\" data-preset=${key} .value=${shown(value)} @change=${(e: Event) => onChange(num(e))} />\n `\n return html`\n <details data-section=\"preset\" ?open=${!this.draft}>\n <summary>${t('preset', 'Start again from a preset')}</summary>\n <section>\n <label class=\"l\">${t('preset-kind', 'Kind')}</label>\n <select data-preset=\"kind\" @change=${(e: Event) => (this.presetKey = (e.target as HTMLSelectElement).value)}>\n ${presets.map(p => html`<option value=${p.key} ?selected=${p.key === preset.key}>${t(`preset.${p.key}`, p.key)}</option>`)}\n </select>\n ${numberRow(t('width', 'Width (X)'), this.presetSize.width, n => (this.presetSize = { ...this.presetSize, width: n }), 'width')}\n ${numberRow(t('depth', 'Depth (Z)'), this.presetSize.depth, n => (this.presetSize = { ...this.presetSize, depth: n }), 'depth')}\n ${numberRow(t('slot-height', 'Slot height'), this.presetSize.slotHeight, n => (this.presetSize = { ...this.presetSize, slotHeight: n }), 'slotHeight')}\n ${(preset.params ?? []).map(p =>\n numberRow(t(`preset-param.${p.key}`, p.key), this.presetParams[p.key], n => (this.presetParams = { ...this.presetParams, [p.key]: n }), p.key)\n )}\n <div class=\"hint\">${t('preset-note', 'Pitch and slot size are split evenly as starting values. Confirm them against the real equipment.')}</div>\n </section>\n <div class=\"actions\">\n <button data-action=\"start-preset\" ?disabled=${!built.layout} @click=${() => built.layout && this._startFrom(built.layout)}>\n ${t('start-from-preset', 'Start from preset')}\n </button>\n </div>\n </details>\n `\n }\n\n /** 적용 전에 뜻이 바뀌는 주소를 보인다. 놓인 Carrier 는 주소로 다시 읽혀 다른 자리에 그려지거나 예외가 된다 */\n private _renderImpact() {\n const { moved, gone } = this.impact\n if (!moved.length && !gone.length) return nothing\n const list = (ids: string[]) => (ids.length > 12 ? `${ids.slice(0, 12).join(', ')} … (${ids.length})` : ids.join(', '))\n return html`<div class=\"notes\" data-impact>\n ${moved.length ? html`<div class=\"note\">${t('impact-moved', 'Moves: {ids}', { ids: list(moved) })}</div>` : nothing}\n ${gone.length ? html`<div class=\"error\">${t('impact-gone', 'Removed: {ids}', { ids: list(gone) })}</div>` : nothing}\n </div>`\n }\n\n /** 프리셋으로 다시 시작한다. 지금 값에 덧붙은 호스트 키(Tier 밖의 키)는 가져온다 */\n private _startFrom(layout: SlotLayout) {\n const { tiers: _t, ...extra } = (this.draft ?? {}) as Record<string, unknown>\n this._edit({ ...extra, ...structuredClone(layout) } as SlotLayout)\n }\n\n private _renderDraft(issues: EditorIssue[]) {\n const draft = this.draft!\n const tier = draft.tiers?.find(x => x.tierNo === this.tier) ?? draft.tiers?.[0]\n // 층이 없는 값(잘못된 저장값)은 편집할 층이 없으므로 문제만 보인다. 프리셋으로 다시 시작한다\n if (!tier) return issues.length ? html`<div class=\"error\" data-issues>${issues.map(i => html`<div>· ${this._text(i)}</div>`)}</div>` : nothing\n const index = draft.tiers.indexOf(tier)\n // 고른 Tier 의 문제는 칸 옆에, 나머지(다른 Tier, 칸이 없는 경로)는 목록에\n const errors = new Map<string, string[]>()\n const listed: EditorIssue[] = []\n for (const issue of issues) {\n const { tierIndex, field } = issueField(issue)\n if (tierIndex === index && field) errors.set(field, [...(errors.get(field) ?? []), this._message(issue)])\n else listed.push(issue)\n }\n return html`\n ${this._renderPicture(draft, tier.tierNo)}\n <div class=\"tiers\">\n ${draft.tiers.map(\n x => html`<button data-tier=${x.tierNo} aria-pressed=${x.tierNo === tier.tierNo ? 'true' : 'false'} @click=${() => (this.tier = x.tierNo)}>\n ${t('tier-n', 'Tier {n}', { n: x.tierNo })}\n </button>`\n )}\n <button class=\"end\" data-action=\"copy-tier\" @click=${() => this._copyTier(draft, tier.tierNo)}>${t('copy-tier', 'Copy tier')}</button>\n <button data-action=\"remove-tier\" ?disabled=${draft.tiers.length <= 1} @click=${() => this._edit(removeTier(draft, tier.tierNo))}>${t('remove-tier', 'Remove tier')}</button>\n </div>\n ${listed.length || (issues.length && this.options?.live)\n ? html`<div class=\"error\" data-issues>\n ${listed.map(i => html`<div>· ${this._located(i)}</div>`)}\n ${this.options?.live && issues.length ? html`<div class=\"note\" data-held>${t('held-back', 'Not applied until fixed: the scene keeps the last sound layout.')}</div>` : nothing}\n </div>`\n : nothing}\n ${this._renderTier(draft, tier.tierNo, errors)} ${this.options?.renderExtra?.(draft, next => this._edit(next)) ?? nothing}\n `\n }\n\n /** 복사한 Tier 를 골라 둔다. 같은 자리에 겹쳐 생기므로 바로 이어서 배치를 고친다 */\n private _copyTier(draft: SlotLayout, tierNo: number) {\n const next = copyTier(draft, tierNo)\n this.tier = next.tiers[next.tiers.length - 1].tierNo\n this._edit(next)\n }\n\n // ── 그림 ──────────────────────────────────────────────────────────────────\n\n private _anchorName(id: string) {\n const a = this.options?.anchors?.find(x => x.id === id)\n if (a?.label) return a.label\n if (a?.part) return `${id} · ${t(`face-${a.face ?? 'top'}`, `{part} ${a.face ?? 'top'}`, { part: a.part })}`\n return id\n }\n\n private _unit() {\n return this.options?.unit ? html` <span class=\"unit\">${this.options.unit}</span>` : nothing\n }\n\n /** 고른 Tier 의 Anchor 면 위에서 본 자리 (Anchor 기준). 오른쪽이 +X, 위쪽이 −Z */\n private _renderPicture(draft: SlotLayout, tierNo: number) {\n const tier = draft.tiers.find(x => x.tierNo === tierNo)!\n const face = this.options?.anchorFaces?.[tier.anchorId]\n const slots = anchorFaceSlots(draft, tier.anchorId)\n const mine = slots.filter(s => s.tier === tierNo)\n if (!mine.length) return html`<div class=\"note\" data-preview=\"none\">${t('preview-none', 'No slots to show with the current values.')}</div>`\n\n const boxes = slots.map(s => ({ s, fp: rotatedFootprint({ width: s.width, depth: s.depth, height: 0 }, s.rotation) }))\n const xs = boxes.flatMap(({ s, fp }) => [s.x - fp.width / 2, s.x + fp.width / 2]).concat(face ? [-face.width / 2, face.width / 2] : [])\n const zs = boxes.flatMap(({ s, fp }) => [s.z - fp.depth / 2, s.z + fp.depth / 2]).concat(face ? [-face.depth / 2, face.depth / 2] : [])\n const [minX, maxX, minZ, maxZ] = [Math.min(...xs), Math.max(...xs), Math.min(...zs), Math.max(...zs)]\n const size = Math.max(maxX - minX, maxZ - minZ, 1)\n const pad = size * 0.06\n const viewBox = this._drag?.viewBox ?? `${minX - pad} ${minZ - pad} ${maxX - minX + pad * 2} ${maxZ - minZ + pad * 2}`\n const font = size * 0.045\n const stroke = size * 0.004\n\n const flagged = new Map<string, 'out' | 'overlap'>()\n for (const w of this.warnings) {\n const id = `t${w.params?.tier}_s${w.params?.slot}`\n if (w.code === 'SLOT_OUTSIDE_ANCHOR') flagged.set(id, 'out')\n else if (w.code === 'SLOT_OVERLAP' && !flagged.has(id)) flagged.set(id, 'overlap')\n }\n const items = this.options?.items ?? []\n const onSlot = (id: string) => items.filter(i => i.slot === id).map(i => i.id)\n const tl = tier.layout\n const last = tl.pattern === 'ROW' && tl.count >= 2 ? mine.find(s => s.slotNo === tl.count) : undefined\n /* 간격 손잡이: 끝 자리 안, 줄과 직각으로 가장자리 쪽에 둔다(글자를 가리지 않게). 간격은 줄 방향 거리로만 정해진다 */\n const handle = last && (() => {\n const first = mine.find(s => s.slotNo === 1)!\n const length = Math.hypot(last.x - first.x, last.z - first.z) || 1\n const across = { x: -(last.z - first.z) / length, z: (last.x - first.x) / length }\n const room = Math.min(last.width, last.depth) / 2 - font\n return { x: last.x + across.x * room, z: last.z + across.z * room }\n })()\n\n return html`\n <svg\n data-preview\n viewBox=${viewBox}\n preserveAspectRatio=\"xMidYMid meet\"\n tabindex=\"0\"\n @pointermove=${this._onDragMove}\n @pointerup=${this._onDragEnd}\n @pointercancel=${this._cancelDrag}\n >\n ${face\n ? svg`<rect data-face x=${-face.width / 2} y=${-face.depth / 2} width=${face.width} height=${face.depth}\n fill=\"rgba(0,0,0,0.04)\" stroke=\"rgba(0,0,0,0.45)\" stroke-width=${stroke} />`\n : nothing}\n ${slots\n .filter(s => s.tier !== tierNo)\n .map(\n s => svg`<g transform=\"translate(${s.x} ${s.z}) rotate(${-s.rotation})\">\n <rect data-other-slot=${s.id} x=${-s.width / 2} y=${-s.depth / 2} width=${s.width} height=${s.depth}\n fill=\"none\" stroke=\"rgba(0,0,0,0.35)\" stroke-dasharray=\"${stroke * 4} ${stroke * 3}\" stroke-width=${stroke} />\n </g>`\n )}\n ${mine.map(s => {\n const flag = flagged.get(s.id)\n const colour = flag ? ERROR : SLOT\n return svg`<g transform=\"translate(${s.x} ${s.z}) rotate(${-s.rotation})\">\n <rect data-slot=${s.slotNo} data-slot-id=${s.id} data-flag=${flag ?? ''} x=${-s.width / 2} y=${-s.depth / 2} width=${s.width} height=${s.depth}\n fill=${flag ? 'rgba(198,40,40,0.1)' : 'rgba(25,118,210,0.1)'} stroke=${colour} stroke-width=${stroke}\n stroke-dasharray=${flag ? `${stroke * 4} ${stroke * 3}` : 'none'}\n @pointerdown=${(e: PointerEvent) => this._startDrag(e, 'move', tierNo)} />\n </g>`\n })}\n ${mine.map(s => {\n const held = onSlot(s.id)\n return svg`<text x=${s.x} y=${s.z - (held.length ? font * 0.6 : 0)} font-size=${font} text-anchor=\"middle\" dominant-baseline=\"central\"\n fill=${flagged.has(s.id) ? '#791f1f' : '#0d47a1'} pointer-events=\"none\">${s.id}</text>\n ${held.length\n ? svg`<text data-held-on=${s.id} x=${s.x} y=${s.z + font * 0.7} font-size=${font * 0.85} text-anchor=\"middle\" dominant-baseline=\"central\"\n fill=\"rgba(0,0,0,0.6)\" pointer-events=\"none\">${held.length > 2 ? `${held.slice(0, 2).join(', ')} +${held.length - 2}` : held.join(', ')}</text>`\n : nothing}`\n })}\n ${handle\n ? svg`<circle data-handle=\"pitch\" cx=${handle.x} cy=${handle.z} r=${font * 0.45} fill=${SLOT} stroke=\"#fff\" stroke-width=${stroke}\n @pointerdown=${(e: PointerEvent) => this._startDrag(e, 'pitch', tierNo)} />`\n : nothing}\n </svg>\n <div class=\"caption\">\n <span data-face-caption>\n ${face\n ? html`${this._anchorName(tier.anchorId)} · ${face.width} × ${face.depth}${this._unit()}`\n : html`<span class=\"error\">${t('face-unknown', 'Face size unknown: whether slots stay on it is not checked')}</span>`}\n </span>\n <span>${t('preview-axes', 'Right = +X, up = −Z')}</span>\n </div>\n ${this._renderSpaceWarnings(tier.anchorId, !!face)} ${this._renderItems(draft)}\n `\n }\n\n /** 면 밖·겹침 경고. 고른 Tier 의 Anchor 면을 모른다는 것은 그림 아래에 이미 적었다 */\n private _renderSpaceWarnings(anchorId: string, faceKnown: boolean) {\n const warnings = this.warnings.filter(w => !(w.code === 'ANCHOR_SPACE_UNKNOWN' && !faceKnown && w.params?.anchorId === anchorId))\n if (!warnings.length) return nothing\n return html`<div class=\"error\" data-warnings>${warnings.map(w => html`<div>· ${spaceWarningText(w)}</div>`)}</div>`\n }\n\n /**\n * 실린 아이템이 편집 중인 레이아웃에서 어떻게 되는지. 자리가 없어지면 미배치로 남고(지우거나 옮기지 않는다), 받는 타입·규격은\n * 공통 판정으로 본다. 치수를 모르는 아이템은 판정하지 않았다고 적는다 — 모양을 자리에 맞춰 그리는 것은 판정이 아니다.\n */\n private _renderItems(draft: SlotLayout) {\n const items = this.options?.items ?? []\n if (!items.length) return nothing\n const statuses = heldItemStatuses(draft, items)\n const shownItems = statuses.slice(0, 12)\n return html`<div class=\"items\" data-items>\n ${shownItems.map(s => {\n const line: unknown[] = []\n if (!s.placed) line.push(html`<span class=\"bad\">${fitText('SLOT_NOT_FOUND')}</span>`)\n else {\n if (s.unregistered) line.push(html`<span class=\"warn\">${t('unregistered-type', 'Type not registered')}</span>`)\n for (const r of s.reasons) line.push(html`<span class=${r === 'SPEC_UNKNOWN' ? 'note' : 'bad'}>${fitText(r)}</span>`)\n if (s.verdict === 'OK') line.push(html`<span class=\"note\">OK</span>`)\n }\n return html`<div data-item=${s.item.id} data-verdict=${s.placed ? s.verdict : 'UNPLACED'}>\n <b>${s.item.id}</b> · ${s.item.slot ?? '—'}${s.item.code ? html` · ${s.item.code}` : nothing} — ${line.map((x, i) => html`${i ? ', ' : ''}${x}`)}\n </div>`\n })}\n ${statuses.length > shownItems.length ? html`<div class=\"note\">… (${statuses.length})</div>` : nothing}\n </div>`\n }\n\n // ── 끌기 ──────────────────────────────────────────────────────────────────\n\n private _point(e: PointerEvent) {\n const svgEl = this.renderRoot.querySelector('svg[data-preview]') as SVGSVGElement | null\n const m = svgEl?.getScreenCTM()\n if (!m) return null\n const p = new DOMPoint(e.clientX, e.clientY).matrixTransform(m.inverse())\n return { x: p.x, z: p.y }\n }\n\n private _startDrag(e: PointerEvent, kind: Drag['kind'], tierNo: number) {\n const from = this._point(e)\n const svgEl = this.renderRoot.querySelector('svg[data-preview]') as SVGSVGElement | null\n if (!from || !svgEl || !this.draft) return\n e.preventDefault()\n e.stopPropagation()\n try {\n svgEl.setPointerCapture(e.pointerId)\n } catch {\n // 이미 놓인 포인터: 끌기는 svg 안에서만 이어진다\n }\n this._drag = { kind, tierNo, from, before: structuredClone(this.draft), viewBox: svgEl.getAttribute('viewBox') ?? '' }\n // 끄는 동안의 Esc 는 포커스가 어디 있든 끌기를 거둔다\n window.addEventListener('keydown', this._onDragKey, true)\n }\n\n private _onDragKey = (e: KeyboardEvent) => {\n if (e.key !== 'Escape' || !this._drag) return\n e.preventDefault()\n e.stopPropagation()\n this._cancelDrag()\n }\n\n private _endDrag() {\n const d = this._drag\n this._drag = undefined\n window.removeEventListener('keydown', this._onDragKey, true)\n return d\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this._endDrag()\n }\n\n private _onDragMove = (e: PointerEvent) => {\n const d = this._drag\n const p = d && this._point(e)\n if (!d || !p) return\n const tier = d.before.tiers.find(x => x.tierNo === d.tierNo)!\n if (d.kind === 'move') {\n const position = { ...tier.position, x: snap(tier.position.x + p.x - d.from.x), z: snap(tier.position.z + p.z - d.from.z) }\n this.draft = updateTier(d.before, d.tierNo, { position })\n } else {\n const pitch = pitchToPoint(d.before, d.tierNo, p)\n if (pitch !== null) this.draft = updatePattern(d.before, d.tierNo, { pitch: Math.max(10, snap(pitch)) })\n }\n }\n\n /** 놓으면 한 번의 편집. 움직이지 않았으면 아무 일도 없다 */\n private _onDragEnd = () => {\n const d = this._endDrag()\n if (!d) return\n if (JSON.stringify(this.draft) === JSON.stringify(d.before)) {\n this.draft = d.before\n return\n }\n this._edit(this.draft!)\n }\n\n private _cancelDrag = () => {\n const d = this._endDrag()\n if (!d) return\n this.draft = d.before\n }\n\n // ── 칸 ────────────────────────────────────────────────────────────────────\n\n private _row(field: string, label: unknown, control: unknown, errors: Map<string, string[]>) {\n const messages = errors.get(field)\n return html`\n <label class=\"l\">${label}</label>\n ${control} ${messages ? html`<div class=\"err\" data-error=${field}>${messages.join(' · ')}</div>` : nothing}\n `\n }\n\n private _num(field: string, value: unknown, onChange: (n: number) => void, errors: Map<string, string[]>, extra: { min?: string; step?: string } = {}) {\n return html`<input\n type=\"number\"\n data-field=${field}\n ?invalid=${errors.has(field)}\n min=${extra.min ?? nothing}\n step=${extra.step ?? nothing}\n .value=${shown(value)}\n @change=${(e: Event) => onChange(num(e))}\n />`\n }\n\n private _seg<T extends string>(field: string, value: T | undefined, options: [T, string][], onChange: (v: T) => void, errors: Map<string, string[]>) {\n return html`<div class=\"seg\" role=\"radiogroup\" data-field=${field} ?invalid=${errors.has(field)}>\n ${options.map(\n ([v, label]) =>\n html`<button type=\"button\" role=\"radio\" data-value=${v} aria-checked=${v === value ? 'true' : 'false'} title=${label} @click=${() => v !== value && onChange(v)}>\n ${label}\n </button>`\n )}\n </div>`\n }\n\n private _renderTier(draft: SlotLayout, tierNo: number, errors: Map<string, string[]>) {\n const tier = draft.tiers.find(x => x.tierNo === tierNo)!\n const anchors = this.options?.anchors\n const editTier = (patch: Parameters<typeof updateTier>[2]) => this._edit(updateTier(draft, tierNo, patch))\n const position = tier.position ?? { x: 0, y: 0, z: 0 }\n const fine = ['position-x', 'position-y', 'position-z', 'tier-rotation'].some(f => errors.has(f))\n const u = this._unit()\n return html`\n <section data-section=\"where\">\n <h4>${t('where', 'Where')}</h4>\n ${this._row(\n 'anchor',\n t('face', 'Face'),\n anchors?.length\n ? html`<select data-field=\"anchor\" ?invalid=${errors.has('anchor')} @change=${(e: Event) => editTier({ anchorId: (e.target as HTMLSelectElement).value })}>\n ${anchors.some(a => a.id === tier.anchorId) ? nothing : html`<option value=${tier.anchorId ?? ''} selected>${tier.anchorId ?? ''}</option>`}\n ${anchors.map(a => html`<option value=${a.id} ?selected=${a.id === tier.anchorId}>${this._anchorName(a.id)}</option>`)}\n </select>`\n : html`<input data-field=\"anchor\" ?invalid=${errors.has('anchor')} .value=${tier.anchorId ?? ''} @change=${(e: Event) => editTier({ anchorId: (e.target as HTMLInputElement).value.trim() })} />`,\n errors\n )}\n ${this._row(\n 'mount',\n t('mount', 'Mount'),\n this._seg<SlotMount>(\n 'mount',\n tier.mount,\n [\n ['ON', t('mount.ON', 'On')],\n ['IN', t('mount.IN', 'In')],\n ['HANG', t('mount.HANG', 'Hang')]\n ],\n mount => editTier({ mount }),\n errors\n ),\n errors\n )}\n </section>\n ${this._renderArrangement(draft, tierNo, errors)} ${this._renderSlot(draft, tierNo, errors)}\n <details data-section=\"fine\" ?open=${fine}>\n <summary>${t('fine', 'Position and rotation')}</summary>\n <section>\n ${this._row('position-x', html`${t('position-x', 'Position X')}${u}`, this._num('position-x', position.x, n => editTier({ position: { ...position, x: n } }), errors), errors)}\n ${this._row('position-y', html`${t('position-y', 'Position Y (height)')}${u}`, this._num('position-y', position.y, n => editTier({ position: { ...position, y: n } }), errors), errors)}\n ${this._row('position-z', html`${t('position-z', 'Position Z')}${u}`, this._num('position-z', position.z, n => editTier({ position: { ...position, z: n } }), errors), errors)}\n ${this._row('tier-rotation', t('tier-rotation', 'Tier rotation (deg)'), this._num('tier-rotation', tier.rotation, n => editTier({ rotation: n }), errors), errors)}\n </section>\n </details>\n `\n }\n\n /** 자리를 어떻게 늘어놓는가: 패턴, 수, 간격, 방향, 1번 자리. 그리고 [면에 맞춤] */\n private _renderArrangement(draft: SlotLayout, tierNo: number, errors: Map<string, string[]>) {\n const tier = draft.tiers.find(x => x.tierNo === tierNo)!\n const l = tier.layout as SlotPattern & Record<string, any>\n const edit = (patch: Parameters<typeof updatePattern>[2]) => this._edit(updatePattern(draft, tierNo, patch))\n const u = this._unit()\n const side = (axis: 'X' | 'Z'): [['MIN', string], ['MAX', string]] =>\n axis === 'X'\n ? [\n ['MIN', t('side.left', 'Left')],\n ['MAX', t('side.right', 'Right')]\n ]\n : [\n ['MIN', t('side.top', 'Top')],\n ['MAX', t('side.bottom', 'Bottom')]\n ]\n const fit = () => {\n const result = fitTierToFace(draft, tierNo, this.options?.anchorFaces?.[tier.anchorId])\n if ('layout' in result) this._edit(result.layout)\n else this.fitNote = fitFaceText(result.reason)\n }\n const fitButton = html`<button data-action=\"fit-face\" title=${t('fit-face-tip', 'Centre on the face and spread the slots end to end, once')} @click=${fit}>\n ${t('fit-face', 'Fit to face')}\n </button>`\n return html`\n <section data-section=\"arrangement\">\n <h4>${t('arrangement', 'Arrangement')}</h4>\n ${this._row(\n 'pattern',\n t('pattern', 'Arrangement'),\n this._seg<SlotPattern['pattern']>(\n 'pattern',\n l.pattern,\n [\n ['SINGLE', t('pattern.SINGLE', 'One')],\n ['ROW', t('pattern.ROW', 'Row')],\n ['GRID', t('pattern.GRID', 'Grid')],\n ['CUSTOM', t('pattern.CUSTOM', 'Listed')]\n ],\n v => this._edit(setTierPattern(draft, tierNo, v)),\n errors\n ),\n errors\n )}\n ${l.pattern === 'ROW'\n ? html`\n ${this._row('count', t('count', 'Slots'), this._num('count', l.count, n => edit({ count: n }), errors, { min: '1', step: '1' }), errors)}\n ${this._row('pitch', html`${t('pitch', 'Pitch')}${u}`, html`<div class=\"inline\">${this._num('pitch', l.pitch, n => edit({ pitch: n }), errors)} ${fitButton}</div>`, errors)}\n ${this._row(\n 'axis',\n t('axis', 'Direction'),\n this._seg<'X' | 'Z'>(\n 'axis',\n l.axis,\n [\n ['X', t('axis.X', 'Across (X)')],\n ['Z', t('axis.Z', 'Down (Z)')]\n ],\n axis => edit({ axis }),\n errors\n ),\n errors\n )}\n ${this._row('origin', t('origin', 'Slot 1 at'), this._seg('origin', l.origin ?? 'MIN', side(l.axis), origin => edit({ origin }), errors), errors)}\n `\n : nothing}\n ${l.pattern === 'GRID'\n ? html`\n ${this._row('rows', t('rows', 'Rows (Z)'), this._num('rows', l.rows, n => edit({ rows: n }), errors, { min: '1', step: '1' }), errors)}\n ${this._row('cols', t('cols', 'Columns (X)'), this._num('cols', l.cols, n => edit({ cols: n }), errors, { min: '1', step: '1' }), errors)}\n ${this._row('pitch-x', html`${t('pitch-x', 'Pitch X')}${u}`, this._num('pitch-x', l.pitch?.x, n => edit({ pitch: { ...l.pitch, x: n } }), errors), errors)}\n ${this._row('pitch-z', html`${t('pitch-z', 'Pitch Z')}${u}`, html`<div class=\"inline\">${this._num('pitch-z', l.pitch?.z, n => edit({ pitch: { ...l.pitch, z: n } }), errors)} ${fitButton}</div>`, errors)}\n ${this._row(\n 'order',\n t('order', 'Numbering'),\n html`<select data-field=\"order\" @change=${(e: Event) => edit({ order: (e.target as HTMLSelectElement).value as GridOrder })}>\n ${(['ROW_MAJOR', 'COL_MAJOR', 'SERPENTINE_ROW', 'SERPENTINE_COL'] as const).map(\n o => html`<option value=${o} ?selected=${o === (l.order ?? 'ROW_MAJOR')}>${t(`order.${o}`, o)}</option>`\n )}\n </select>`,\n errors\n )}\n ${this._row('origin-x', t('origin-x', 'Slot 1 at X'), this._seg('origin-x', l.origin?.x ?? 'MIN', side('X'), x => edit({ origin: { z: 'MIN', ...l.origin, x } }), errors), errors)}\n ${this._row('origin-z', t('origin-z', 'Slot 1 at Z'), this._seg('origin-z', l.origin?.z ?? 'MIN', side('Z'), z => edit({ origin: { x: 'MIN', ...l.origin, z } }), errors), errors)}\n `\n : nothing}\n ${l.pattern === 'SINGLE' ? html`<label class=\"l\"></label><div class=\"inline\">${fitButton}</div>` : nothing}\n ${this.fitNote ? html`<div class=\"err\" data-fit-note>${this.fitNote}</div>` : nothing}\n </section>\n ${l.pattern === 'CUSTOM' ? this._renderCustom(draft, tierNo) : nothing}\n `\n }\n\n /** 받는 타입: 목록에서 고른 코드(목록에 없는 코드는 그대로 두고 표시), 목록이 없으면 직접 적는다. 필수가 아니면 [모든 타입]도 */\n private _acceptsEditor(spec: SlotSpec, onChange: (accepts: string[] | undefined) => void, errors: Map<string, string[]>) {\n const required = !!this.options?.acceptsRequired\n const restricted = required || Array.isArray(spec.accepts)\n const types = this.options?.itemTypes\n const accepts = spec.accepts ?? []\n const mode = required\n ? nothing\n : this._row(\n 'accepts-mode',\n t('accepts', 'Accepts'),\n this._seg<'ALL' | 'LIST'>(\n 'accepts-mode',\n restricted ? 'LIST' : 'ALL',\n [\n ['ALL', t('accepts-all', 'Any type')],\n ['LIST', t('accepts-list', 'Listed types only')]\n ],\n v => onChange(v === 'ALL' ? undefined : (spec.accepts ?? [])),\n errors\n ),\n errors\n )\n if (!restricted) return mode\n const label = required ? t('accepts', 'Accepts') : t('accepts-types', 'Types')\n const control = types\n ? html`<div class=\"chips\" data-field=\"accepts\" ?invalid=${errors.has('accepts')}>\n ${accepts.map(code => {\n const known = types.find(x => x.code === code)\n return html`<span class=\"chip\" data-code=${code} ?unregistered=${!known} title=${known ? code : t('unregistered-type', 'Type not registered')}>\n ${known?.name && known.name !== code ? `${known.name} (${code})` : code}${known ? nothing : ' ⚠'}\n <button aria-label=${t('remove', 'Remove')} @click=${() => onChange(accepts.filter(c => c !== code))}>×</button>\n </span>`\n })}\n <select\n data-field=\"accepts-add\"\n @change=${(e: Event) => {\n const select = e.target as HTMLSelectElement\n const code = select.value\n select.value = ''\n if (code) onChange([...accepts, code])\n }}\n >\n <option value=\"\">${t('accepts-add', '+ Add type')}</option>\n ${types.filter(x => !accepts.includes(x.code)).map(x => html`<option value=${x.code}>${x.name && x.name !== x.code ? `${x.name} (${x.code})` : x.code}</option>`)}\n </select>\n </div>`\n : html`<input\n data-field=\"accepts\"\n ?invalid=${errors.has('accepts')}\n .value=${accepts.join(', ')}\n placeholder=${t('accepts-none', 'Empty = accepts nothing')}\n @change=${(e: Event) =>\n onChange(\n (e.target as HTMLInputElement).value\n .split(',')\n .map(s => s.trim())\n .filter(Boolean)\n )}\n />`\n return html`${mode} ${this._row('accepts', label, control, errors)}`\n }\n\n /** 자리 하나의 크기·받는 것·쌓기 (이 Tier 의 모든 자리 공통). CUSTOM 은 자리 표에서 */\n private _renderSlot(draft: SlotLayout, tierNo: number, errors: Map<string, string[]>) {\n const tier = draft.tiers.find(x => x.tierNo === tierNo)!\n if (tier.layout.pattern === 'CUSTOM') return nothing\n const spec = tier.layout.slot\n const edit = (patch: Partial<SlotSpec>) => this._edit(updateSlotSpec(draft, tierNo, patch))\n const u = this._unit()\n const allowed = (k: 'width' | 'depth' | 'height', field: string, label: string) =>\n this._row(field, html`${label}${u}`, this._num(field, spec.allowed?.[k], n => edit({ allowed: { ...spec.allowed, [k]: n } }), errors), errors)\n return html`\n <section data-section=\"slot\">\n <h4>${t('slot-spec', 'Each slot')}</h4>\n ${this._acceptsEditor(spec, accepts => edit({ accepts }), errors)} ${allowed('width', 'allowed-width', t('allowed-width', 'Width (X)'))}\n ${allowed('depth', 'allowed-depth', t('allowed-depth', 'Depth (Z)'))} ${allowed('height', 'allowed-height', t('allowed-height', 'Height'))}\n ${this.options?.itemTypes ? html`<div class=\"hint\">${t('drawn-at-slot', 'An item that gives no size is drawn at this size.')}</div>` : nothing}\n ${this._row('stack-limit', t('stack-limit', 'Stack limit'), this._num('stack-limit', spec.stackLimit ?? 1, n => edit({ stackLimit: n }), errors, { min: '1', step: '1' }), errors)}\n ${this._row('rotation', t('rotation', 'Slot rotation (deg)'), this._num('rotation', spec.rotation ?? 0, n => edit({ rotation: n || undefined }), errors), errors)}\n </section>\n `\n }\n\n private _renderCustom(draft: SlotLayout, tierNo: number) {\n const tier = draft.tiers.find(x => x.tierNo === tierNo)!\n const slots = [...(tier.layout as Extract<SlotPattern, { pattern: 'CUSTOM' }>).slots].sort((a, b) => a.slotNo - b.slotNo)\n const cell = (slotNo: number, value: unknown, patch: (e: Event) => Record<string, unknown>) =>\n html`<td><input type=\"number\" .value=${String(value ?? '')} @change=${(e: Event) => this._edit(updateSlotSpec(draft, tierNo, patch(e), slotNo))} /></td>`\n return html`\n <h4>${t('custom-slots', 'Slots')}</h4>\n <table>\n <tr>\n <th>#</th>\n <th>X</th>\n <th>Z</th>\n <th>${t('w', 'W')}</th>\n <th>${t('d', 'D')}</th>\n <th>${t('h', 'H')}</th>\n <th>${t('stack', 'Stack')}</th>\n <th>${t('rot', 'Rot')}</th>\n <th></th>\n </tr>\n ${slots.map(\n s => html`\n <tr>\n <td>${s.slotNo}</td>\n ${cell(s.slotNo, s.offset?.x, e => ({ offset: { ...s.offset, x: num(e) } }))}\n ${cell(s.slotNo, s.offset?.z, e => ({ offset: { ...s.offset, z: num(e) } }))}\n ${cell(s.slotNo, s.allowed?.width, e => ({ allowed: { ...s.allowed, width: num(e) } }))}\n ${cell(s.slotNo, s.allowed?.depth, e => ({ allowed: { ...s.allowed, depth: num(e) } }))}\n ${cell(s.slotNo, s.allowed?.height, e => ({ allowed: { ...s.allowed, height: num(e) } }))}\n ${cell(s.slotNo, s.stackLimit ?? 1, e => ({ stackLimit: num(e) }))} ${cell(s.slotNo, s.rotation ?? 0, e => ({ rotation: num(e) || undefined }))}\n <td><button ?disabled=${slots.length <= 1} @click=${() => this._edit(removeCustomSlot(draft, tierNo, s.slotNo))}>−</button></td>\n </tr>\n `\n )}\n </table>\n <div class=\"actions\"><button data-action=\"add-slot\" @click=${() => this._edit(addCustomSlot(draft, tierNo))}>${t('add-slot', 'Add slot')}</button></div>\n ${this._acceptsEditor(\n { allowed: slots[0]?.allowed ?? { width: 1, depth: 1, height: 1 }, accepts: slots[0]?.accepts } as SlotSpec,\n accepts => {\n let next = draft\n for (const s of slots) next = updateSlotSpec(next, tierNo, { accepts }, s.slotNo)\n this._edit(next)\n },\n new Map()\n )}\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ox-slot-layout-editor': OxSlotLayoutEditor\n }\n}\n"]}