stickyflow 0.11.0 → 0.11.2

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.
Files changed (32) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/binding/index.cjs +8 -8
  3. package/dist/binding/index.js +2 -2
  4. package/dist/{chunk-FXGXUWSI.cjs → chunk-4KBU4CFU.cjs} +7 -7
  5. package/dist/{chunk-FXGXUWSI.cjs.map → chunk-4KBU4CFU.cjs.map} +1 -1
  6. package/dist/{chunk-RQYZNW2I.js → chunk-DGAVCN4D.js} +3 -3
  7. package/dist/{chunk-RQYZNW2I.js.map → chunk-DGAVCN4D.js.map} +1 -1
  8. package/dist/{chunk-5G3BEXQU.cjs → chunk-EHH6ZDK6.cjs} +9 -2
  9. package/dist/chunk-EHH6ZDK6.cjs.map +1 -0
  10. package/dist/{chunk-Q6QLU6YQ.js → chunk-TQIYK5OA.js} +9 -2
  11. package/dist/chunk-TQIYK5OA.js.map +1 -0
  12. package/dist/{chunk-UB2ANTWF.js → chunk-UD6IG2PG.js} +3 -3
  13. package/dist/{chunk-UB2ANTWF.js.map → chunk-UD6IG2PG.js.map} +1 -1
  14. package/dist/{chunk-F24JURN2.cjs → chunk-VYQ6N5SI.cjs} +4 -4
  15. package/dist/{chunk-F24JURN2.cjs.map → chunk-VYQ6N5SI.cjs.map} +1 -1
  16. package/dist/index.cjs +14 -14
  17. package/dist/index.js +3 -3
  18. package/dist/interaction/index.cjs +83 -19
  19. package/dist/interaction/index.cjs.map +1 -1
  20. package/dist/interaction/index.d.cts +2 -1
  21. package/dist/interaction/index.d.ts +2 -1
  22. package/dist/interaction/index.js +83 -20
  23. package/dist/interaction/index.js.map +1 -1
  24. package/dist/stickyflow-diagram.global.js +1 -1
  25. package/dist/stickyflow-diagram.global.js.map +1 -1
  26. package/dist/viewer/index.cjs +7 -7
  27. package/dist/viewer/index.js +2 -2
  28. package/dist/web-component/index.cjs +4 -4
  29. package/dist/web-component/index.js +2 -2
  30. package/package.json +1 -1
  31. package/dist/chunk-5G3BEXQU.cjs.map +0 -1
  32. package/dist/chunk-Q6QLU6YQ.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { renderCanvas, sflToRenderInput, sliderReach } from './chunk-Q6QLU6YQ.js';
1
+ import { renderCanvas, sflToRenderInput, sliderReach } from './chunk-TQIYK5OA.js';
2
2
  import { getComponentDescriptor, expandDocument, parseSource, isGenericComponent, isBuiltInComponentType } from './chunk-G6IW2IX3.js';
3
3
 
4
4
  // src/binding/types.ts
@@ -1311,5 +1311,5 @@ function renderBound(sfl, options = {}) {
1311
1311
  }
1312
1312
 
1313
1313
  export { buildBindingGraph, collectContracts, createBindingRuntime, createDataSource, interactiveElements, renderBound };
1314
- //# sourceMappingURL=chunk-UB2ANTWF.js.map
1315
- //# sourceMappingURL=chunk-UB2ANTWF.js.map
1314
+ //# sourceMappingURL=chunk-UD6IG2PG.js.map
1315
+ //# sourceMappingURL=chunk-UD6IG2PG.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/binding/types.ts","../src/binding/contract.ts","../src/binding/dataSource.ts","../src/binding/componentBinding.ts","../src/binding/expression.ts","../src/binding/targets.ts","../src/binding/graph.ts","../src/binding/interactive.ts","../src/binding/checkData.ts","../src/binding/applyValue.ts","../src/binding/runtimeState.ts","../src/binding/evaluation.ts","../src/binding/handlers.ts","../src/binding/userInput.ts","../src/binding/runtime.ts"],"names":["value","key"],"mappings":";;;;AAMA,IAAM,QAAA,GAAuC;AAAA,EAC3C,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,QAAA;AAAA,EACL,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM;AACR,CAAA;AAEO,IAAM,QAAA,GAAW,CAAC,QAAA,KAA6C,QAAA,CAAS,QAAQ,CAAA;AAEhF,IAAM,QAAA,GAAW,CAAC,IAAA,KAA+B,OAAO,SAAS,QAAA,GAAW,IAAA,GAAO,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA;AAEpG,IAAM,QAAA,GAAW,CAAC,IAAA,EAAmB,KAAA,KAAgC,SAAS,IAAI,CAAA,KAAM,SAAS,KAAK,CAAA;AA0DtG,IAAM,cAAA,GAAiB,CAAC,SAAA,EAAW,WAAA,EAAa,SAAS,QAAQ,CAAA;AACjE,IAAM,YAAA,GAAe,UAAA;AACrB,IAAM,UAAA,GAAa,QAAA;;;AC5E1B,SAAS,QAAQ,KAAA,EAAiD;AAChE,EAAA,OAAO,OAAO,IAAA,KAAS,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA;AAC9D;AAEA,SAAS,YAAA,CAAa,OAAiB,WAAA,EAAsD;AAC3F,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,CAAA,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,UAAA,GAAa,CAAC,KAAA,CAAM,QAAQ,CAAA,GAAI,EAAG,CAAA;AACrG,EAAA,MAAM,IAAA,GACJ,OAAA,CAAQ,UAAA,CAAW,IAAA,CAAK,CAAA,QAAA,KAAY,QAAA,CAAS,GAAA,KAAQ,MAAM,CAAA,EAAG,KAAK,CAAA,KAAM,QAAA,GAAW,QAAA,GAAW,OAAA;AACjG,EAAA,MAAM,QAAA,GAA+B,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,EAAC,EAAG,QAAA,EAAU,EAAC,EAAE;AACxF,EAAA,KAAA,MAAW,KAAA,IAAS,MAAM,OAAA,EAAS;AACjC,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,IAAK,EAAA;AACzC,QAAA,MAAM,MAAA,GAAS,SAAS,QAAQ,CAAA;AAChC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,MAAA;AAC7B,UAAA,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,GAAI,QAAA;AAAA,QACjC,CAAA,MAAO;AACL,UAAA,WAAA,CAAY,IAAA,CAAK;AAAA,YACf,QAAA,EAAU,OAAA;AAAA,YACV,IAAA,EAAM,oBAAA;AAAA,YACN,OAAA,EAAS,UAAU,KAAA,CAAM,IAAI,IAAI,KAAA,CAAM,GAAG,uBAAuB,QAAQ,CAAA,2CAAA,CAAA;AAAA,YACzE,IAAA,EAAM,CAAA;AAAA,YACN,GAAA,EAAK;AAAA,WACN,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,WAAA,CAAY,QAAoB,KAAA,EAAwC;AACtF,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,KAAA,CAAM,KAAK,CAAA;AACX,IAAA,WAAA;AAAA,MACE,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,CAAA,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,OAAA,GAAU,CAAC,KAAA,CAAM,KAAK,CAAA,GAAI,EAAG,CAAA;AAAA,MAC5E;AAAA,KACF;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,WAAA,EAG/B;AACA,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAgC;AACtD,EAAA,MAAM,cAAmC,EAAC;AAC1C,EAAA,WAAA,CAAY,WAAA,CAAY,QAAQ,CAAA,KAAA,KAAS;AACvC,IAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AAC7B,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,QAAA,EAAU,OAAA;AAAA,QACV,IAAA,EAAM,uBAAA;AAAA,QACN,OAAA,EAAS,CAAA,YAAA,EAAe,KAAA,CAAM,IAAI,CAAA,6BAAA,CAAA;AAAA,QAClC,IAAA,EAAM,CAAA;AAAA,QACN,GAAA,EAAK;AAAA,OACN,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,IAAI,KAAA,CAAM,IAAA,EAAM,YAAA,CAAa,KAAA,EAAO,WAAW,CAAC,CAAA;AAAA,EAC5D,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,WAAW,WAAA,EAAY;AAClC;;;ACvDO,SAAS,iBAAiB,OAAA,EAAkD;AACjF,EAAA,IAAI,OAAA,GAAU,OAAA;AACd,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,EAAA,OAAO;AAAA,IACL,KAAK,MAAM,OAAA;AAAA,IACX,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,SAAS,CAAA,EAAG;AACrC,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,IACF,CAAA;AAAA,IACA,UAAU,QAAA,EAAU;AAClB,MAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,MAAA,OAAO,MAAM,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,IACxC;AAAA,GACF;AACF;;;ACxBO,IAAM,6BAAA,GAAgC,CAAC,OAAA,EAAS,UAAA,EAAY,UAAU,CAAA;AAEtE,SAAS,kBAAkB,aAAA,EAA4C;AAC5E,EAAA,OAAO,sBAAA,CAAuB,aAAa,CAAA,EAAG,KAAA,EAAO,QAAA,KAAa,IAAA;AACpE;AAEO,SAAS,kBAAA,CAAmB,eAAmC,KAAA,EAAwC;AAC5G,EAAA,MAAM,UAAA,GAAa,uBAAuB,aAAa,CAAA;AACvD,EAAA,IAAI,UAAU,SAAA,EAAW;AACvB,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAU,SAAA,EAAW;AACvB,IAAA,OAAO,UAAA,EAAY,eAAe,QAAA,GAAW,MAAA;AAAA,EAC/C;AACA,EAAA,OAAO,KAAA,KAAU,OAAA,GAAU,UAAA,EAAY,KAAA,EAAO,IAAA,GAAO,MAAA;AACvD;AAEO,SAAS,qBAAA,CAAsB,eAAmC,QAAA,EAA2C;AAClH,EAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,IAAA,OAAO,uBAAuB,aAAa,CAAA,EAAG,WAAW,QAAA,EAAU,IAAA,KAAS,WAAW,QAAA,GAAW,MAAA;AAAA,EACpG;AACA,EAAA,OAAO,aAAa,OAAA,GAAU,sBAAA,CAAuB,aAAa,CAAA,EAAG,OAAO,IAAA,GAAO,MAAA;AACrF;AAEO,SAAS,mBAAA,CACd,GAAA,EACA,IAAA,EACA,SAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,KAAS,KAAA,GAAQ,KAAK,IAAA,GAAO,MAAA;AACjD,EAAA,MAAM,QAAA,GAAW,QAAQ,MAAA,KAAW,CAAA,GAAI,UAAU,GAAA,CAAI,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,MAAA;AACnE,EAAA,IAAI,CAAC,MAAA,IAAU,QAAA,EAAU,IAAA,KAAS,QAAA,IAAY,CAAC,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG;AACzE,IAAA,OAAO,aAAa,GAAG,CAAA,2EAAA,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,MAAA;AACT;;;AC9BA,IAAM,SAAA,GAAY,CAAC,IAAA,KACjB,IAAA,KAAS,YAAa,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,KAAS,QAAA;AAClE,IAAM,MAAA,GAAS,CAAC,IAAA,KAA+B,OAAO,IAAA,KAAS,QAAA;AAExD,SAAS,YAAY,IAAA,EAA2B;AACrD,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA;AACH,MAAA,OAAO,CAAC,KAAK,IAAI,CAAA;AAAA,IACnB,KAAK,OAAA;AACH,MAAA,OAAO,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,IACjC,KAAK,QAAA;AACH,MAAA,OAAO,CAAC,GAAG,WAAA,CAAY,IAAA,CAAK,IAAI,GAAG,GAAG,WAAA,CAAY,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,IAC/D,KAAK,MAAA;AACH,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AAAA,IACtC;AACE,MAAA,OAAO,EAAC;AAAA;AAEd;AAEA,SAAS,WAAA,CACP,IAAA,EACA,KAAA,EACA,MAAA,EACyB;AACzB,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,OAAO,MAAM,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO,OAAO,MAAM,CAAA;AACjD,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,EAAO;AACnB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAE,UAAS,GAAI,IAAA;AACrB,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,IAAA,EAAM;AAC1C,IAAA,IAAI,IAAA,KAAS,SAAA,IAAa,KAAA,KAAU,SAAA,EAAW;AAC7C,MAAA,MAAA,CAAO,eAAA,EAAiB,CAAA,CAAA,EAAI,QAAQ,CAAA,0BAAA,EAA6B,QAAA,CAAS,IAAI,CAAC,CAAA,KAAA,EAAQ,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA;AACzG,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,KAAK,GAAA,EAAK,IAAA,EAAM,IAAI,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC7C,IAAA,IAAI,IAAA,KAAS,QAAA,IAAY,KAAA,KAAU,QAAA,EAAU;AAC3C,MAAA,MAAA,CAAO,eAAA,EAAiB,CAAA,CAAA,EAAI,QAAQ,CAAA,4BAAA,EAA+B,QAAA,CAAS,IAAI,CAAC,CAAA,KAAA,EAAQ,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA;AAC3G,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,IAAA,EAAM;AAC1C,IAAA,IAAI,OAAO,IAAI,CAAA,IAAK,CAAC,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA,EAAG;AAC1C,MAAA,MAAA;AAAA,QACE,eAAA;AAAA,QACA,CAAA,CAAA,EAAI,QAAQ,CAAA,mDAAA,EAAsD,QAAA,CAAS,IAAI,CAAC,CAAA,KAAA,EAAQ,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,OACzG;AACA,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAA,KAAa,GAAA,IAAO,CAAC,MAAA,CAAO,IAAI,CAAA,IAAK,CAAC,MAAA,CAAO,KAAK,CAAA,KAAM,IAAA,KAAS,QAAA,IAAY,UAAU,QAAA,CAAA,EAAW;AACpG,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,SAAA,CAAU,IAAI,KAAK,CAAC,SAAA,CAAU,KAAK,CAAA,EAAG;AACzC,IAAA,MAAA,CAAO,eAAA,EAAiB,CAAA,CAAA,EAAI,QAAQ,CAAA,qBAAA,EAAwB,QAAA,CAAS,IAAI,CAAC,CAAA,KAAA,EAAQ,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA;AACpG,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA,CAAO,IAAI,CAAA,IAAK,MAAA,CAAO,KAAK,CAAA,GAAI,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,QAAA;AAC9D;AAEA,IAAM,IAAA,GAA+E;AAAA,EACnF,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAG,KAAA,EAAO,CAAC,CAAC,KAAK,CAAA,KAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAE;AAAA,EAC7D,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAG,KAAA,EAAO,CAAC,CAAC,KAAK,CAAA,KAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAE;AAAA,EAC7D,IAAA,EAAM,EAAE,SAAA,EAAW,CAAA,EAAG,KAAA,EAAO,CAAC,CAAC,KAAK,CAAA,KAAM,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,EAAE;AAAA,EAC3D,GAAA,EAAK,EAAE,SAAA,EAAW,CAAA,EAAG,KAAA,EAAO,CAAC,CAAC,KAAK,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAE;AAAA,EACzD,GAAA,EAAK,EAAE,SAAA,EAAW,CAAA,EAAG,OAAO,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,EAAE;AAAA,EACvD,GAAA,EAAK,EAAE,SAAA,EAAW,CAAA,EAAG,OAAO,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,EAAE;AAAA,EACvD,OAAO,EAAE,SAAA,EAAW,GAAG,KAAA,EAAO,CAAC,CAAC,KAAA,EAAO,GAAA,EAAK,IAAI,CAAA,KAAM,IAAA,CAAK,IAAI,IAAA,EAAM,IAAA,CAAK,IAAI,GAAA,EAAK,KAAK,CAAC,CAAA,EAAE;AAAA,EAC3F,UAAA,EAAY;AAAA,IACV,SAAA,EAAW,CAAA;AAAA,IACX,OAAO,CAAC,CAAC,SAAS,MAAA,EAAQ,OAAO,MAC/B,IAAA,CAAK,GAAA,CAAI,SAAS,OAAO,CAAA,IAAK,UAAU,MAAA,GAAS,OAAA,GAAU,KAAK,IAAA,CAAK,MAAA,GAAS,OAAO,CAAA,GAAI;AAAA;AAE/F,CAAA;AAEA,SAAS,SAAA,CACP,IAAA,EACA,IAAA,EACA,KAAA,EACA,MAAA,EACyB;AACzB,EAAA,MAAM,IAAA,GAAO,KAAK,IAAI,CAAA;AACtB,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,SAAA,EAAW;AACvC,IAAA,MAAA,CAAO,iBAAA,EAAmB,CAAA,EAAG,IAAI,CAAA,iBAAA,EAAoB,IAAA,CAAK,SAAS,CAAA,SAAA,EAAY,IAAA,CAAK,SAAA,KAAc,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AACjH,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,GAAA,CAAI,SAAO,SAAA,CAAU,GAAA,EAAK,KAAA,EAAO,MAAM,CAAC,CAAA;AAChE,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,KAAQ,CAAC,IAAI,CAAA,EAAG;AAC7B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,IAAA,CAAK,CAAA,IAAA,KAAQ,CAAC,SAAA,CAAU,IAAmB,CAAC,CAAA,EAAG;AACvD,IAAA,MAAA;AAAA,MACE,eAAA;AAAA,MACA,CAAA,EAAG,IAAI,CAAA,sBAAA,EAAyB,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,QAAA,CAAS,IAAmB,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,KAC7F;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,KAAQ,MAAA,CAAO,IAAmB,CAAC,CAAA,GAAI,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,QAAA;AAChF;AAEA,SAAS,SAAA,CACP,IAAA,EACA,KAAA,EACA,MAAA,EACyB;AACzB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AACjC,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,OAAO,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,EAC5C;AACA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,MAAA,CAAO,kBAAA,EAAoB,CAAA,kBAAA,EAAqB,IAAI,CAAA,oBAAA,EAAuB,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAC1G,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC1B,IAAA,MAAA,CAAO,mBAAmB,4DAA4D,CAAA;AACtF,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,QAAA,EAAU,SAAS,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO,SAAA,CAAU,GAAA,EAAK,KAAA,EAAO,MAAM,CAAC,CAAA;AAC3F,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,QAAA,IAAY,CAAC,SAAA,EAAW;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,cAAc,SAAA,EAAW;AAC3B,IAAA,MAAA,CAAO,eAAA,EAAiB,CAAA,6CAAA,EAAgD,QAAA,CAAS,SAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AAC9F,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,QAAA,EAAU,SAAS,CAAA,EAAG;AAClC,IAAA,MAAA;AAAA,MACE,eAAA;AAAA,MACA,gDAAgD,QAAA,CAAS,QAAQ,CAAC,CAAA,KAAA,EAAQ,QAAA,CAAS,SAAS,CAAC,CAAA,CAAA;AAAA,KAC/F;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,SAAA,CAAU,IAAA,EAAe,KAAA,EAAkB,MAAA,EAAyC;AAClG,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACpC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC/B,QAAA,MAAA;AAAA,UACE,mBAAA;AAAA,UACA,IAAA,KAAS,YAAA,GACL,sDAAA,GACA,CAAA,mBAAA,EAAsB,IAAI,CAAA,+EAAA;AAAA,SAChC;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,IACA,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,IAAA,CAAK,OAAA,EAAS,OAAO,MAAM,CAAA;AACrD,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,KAAa,GAAA,GAAM,SAAA,GAAY,QAAA;AACnD,MAAA,IAAI,OAAA,IAAW,YAAY,MAAA,EAAQ;AACjC,QAAA,MAAA,CAAO,eAAA,EAAiB,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,CAAA,UAAA,EAAa,MAAM,CAAA,MAAA,EAAS,QAAA,CAAS,OAAO,CAAC,CAAA,CAAA,CAAG,CAAA;AACzF,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,OAAO,UAAU,MAAA,GAAS,MAAA;AAAA,IAC5B;AAAA,IACA,KAAK,QAAA;AACH,MAAA,OAAO,WAAA,CAAY,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IACxC,KAAK,MAAA;AACH,MAAA,OAAO,SAAA,CAAU,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA;AAE1C;AAEA,SAAS,UAAA,CAAW,QAAA,EAAkB,IAAA,EAAc,KAAA,EAAuB;AACzE,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,GAAA;AACH,MAAA,OAAO,IAAA,GAAO,KAAA;AAAA,IAChB,KAAK,GAAA;AACH,MAAA,OAAO,IAAA,GAAO,KAAA;AAAA,IAChB,KAAK,GAAA;AACH,MAAA,OAAO,IAAA,GAAO,KAAA;AAAA,IAChB;AACE,MAAA,OAAO,KAAA,KAAU,CAAA,GAAI,CAAA,GAAI,IAAA,GAAO,KAAA;AAAA;AAEtC;AAEA,IAAM,IAAA,GAAO,CAAC,KAAA,KACZ,OAAO,UAAU,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,EAAE,CAAA,GAAI,EAAE,CAAA,GAAI,OAAO,KAAK,CAAA;AAEhF,SAAS,cAAA,CAAe,MAA4C,GAAA,EAA6B;AAC/F,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAA,EAAM,GAAG,CAAA;AACpC,EAAA,IAAI,IAAA,CAAK,aAAa,IAAA,EAAM;AAC1B,IAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,IAAK,OAAA,CAAQ,SAAS,IAAA,CAAK,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,EAC3D;AACA,EAAA,IAAI,IAAA,CAAK,aAAa,IAAA,EAAM;AAC1B,IAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,IAAK,OAAA,CAAQ,SAAS,IAAA,CAAK,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,EAC3D;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AACtC,EAAA,QAAQ,KAAK,QAAA;AAAU,IACrB,KAAK,GAAA;AACH,MAAA,OAAQ,IAAA,GAAmB,KAAA;AAAA,IAC7B,KAAK,GAAA;AACH,MAAA,OAAQ,IAAA,GAAmB,KAAA;AAAA,IAC7B,KAAK,IAAA;AACH,MAAA,OAAQ,IAAA,IAAoB,KAAA;AAAA,IAC9B,KAAK,IAAA;AACH,MAAA,OAAQ,IAAA,IAAoB,KAAA;AAAA,IAC9B,KAAK,IAAA;AACH,MAAA,OAAO,IAAA,KAAS,KAAA;AAAA,IAClB,KAAK,IAAA;AACH,MAAA,OAAO,IAAA,KAAS,KAAA;AAAA;AAEpB,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AACzD,IAAA,OAAO,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAK,KAAK,CAAA;AAAA,EAChC;AACA,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,EAAW,CAAA,KAAc,WAAW,IAAA,CAAK,QAAA,EAAU,GAAG,CAAC,CAAA;AACtE,EAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/C,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,MAAM,MAAM,CAAA;AACjD,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,IAAU,CAAC,MAAA,EAAQ,KAAA,KAAU,KAAA,CAAM,KAAK,KAAK,CAAA,EAAa,KAAA,CAAM,KAAK,CAAW,CAAC,CAAA;AAAA,EACvG;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO,KAAK,GAAA,CAAI,CAAA,KAAA,KAAS,KAAA,CAAM,KAAA,EAAiB,KAAe,CAAC,CAAA;AAAA,EAClE;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,MAAM,GAAA,CAAI,CAAA,KAAA,KAAS,KAAA,CAAM,IAAA,EAAgB,KAAe,CAAC,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,KAAA,CAAM,MAAgB,KAAe,CAAA;AAC9C;AAEO,SAAS,QAAA,CAAS,MAAe,GAAA,EAA6B;AACnE,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,QAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,SAAA;AACH,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACd,KAAK,KAAA;AACH,MAAA,OAAO,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAAA,IAC3B,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AAC1C,MAAA,OAAO,IAAA,CAAK,QAAA,KAAa,GAAA,GAAM,CAAC,UAAU,CAAE,OAAA;AAAA,IAC9C;AAAA,IACA,KAAK,QAAA;AACH,MAAA,OAAO,cAAA,CAAe,MAAM,GAAG,CAAA;AAAA,IACjC,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AACjC,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,MAAM,MAAA,GAAS,KAAK,IAAA,CAAK,GAAA,CAAI,SAAO,QAAA,CAAS,GAAA,EAAK,GAAG,CAAC,CAAA;AACtD,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,MAAA,CAAO,GAAA,CAAI,CAAA,KAAA,KAAU,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,CAAE,CAAC,CAAA;AAC5F,QAAA,IAAI,WAAW,CAAA,IAAK,CAAC,OAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG;AAC/C,UAAA,OAAO,IAAA,CAAK,IAAI,CAAA,CAAE,KAAA,CAAM,MAAkB,CAAA;AAAA,QAC5C;AACA,QAAA,OAAO,KAAA,CAAM,IAAA;AAAA,UAAK,EAAE,MAAA,EAAO;AAAA,UAAG,CAAC,MAAA,EAAQ,KAAA,KACrC,KAAK,IAAI,CAAA,CAAE,MAAM,MAAA,CAAO,GAAA,CAAI,CAAA,KAAA,KAAU,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAK,MAAM,KAAK,CAAA,GAAgB,KAAiB,CAAC;AAAA,SAC7G;AAAA,MACF;AACA,MAAA,MAAM,CAAC,SAAA,EAAW,QAAA,EAAU,SAAS,IAAI,IAAA,CAAK,IAAA;AAC9C,MAAA,OAAO,QAAA,CAAS,SAAA,EAAW,GAAG,CAAA,GAAI,QAAA,CAAS,UAAU,GAAG,CAAA,GAAI,QAAA,CAAS,SAAA,EAAW,GAAG,CAAA;AAAA,IACrF;AAAA;AAEJ;;;AChRO,IAAM,mBAAA,GAA+E;AAAA,EAC1F,KAAA,EAAO,EAAE,UAAA,EAAY,EAAE,MAAM,QAAA,EAAS,EAAG,MAAM,QAAA,EAAS;AAAA,EACxD,MAAA,EAAQ,EAAE,MAAA,EAAQ,EAAE,MAAM,QAAA,EAAS,EAAG,OAAO,QAAA,EAAS;AAAA,EACtD,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,QAAA,EAAS;AAAA,EAClG,MAAM,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,QAAA,EAAU,SAAS,QAAA;AACxD,CAAA;;;ACiCA,SAAS,YAAA,CAAa,MAAA,EAAoB,SAAA,EAAqB,KAAA,EAA4B;AACzF,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,KAAS,QAAA,GAAW,CAAC,GAAG,SAAA,EAAW,KAAA,CAAM,IAAI,CAAA,GAAI,CAAC,KAAA,CAAM,IAAI,CAAA;AAC/E,IAAA,MAAM,WAAW,KAAA,CAAM,IAAA,KAAS,UAAU,CAAC,KAAA,CAAM,IAAI,CAAA,GAAI,SAAA;AACzD,IAAA,KAAA,MAAW,KAAA,IAAS,MAAM,OAAA,EAAS;AACjC,MAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,CAAU,KAAK,GAAG,IAAA,EAAM,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,CAAA;AAAA,MACrE,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AACjC,QAAA,KAAA,MAAW,OAAA,IAAW,KAAA,CAAM,KAAA,CAAM,QAAA,IAAY,EAAC,EAAG;AAChD,UAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,CAAU,KAAK,CAAA,EAAG,IAAA,EAAM,SAAS,CAAA;AAAA,QACtD;AAAA,MACF,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AACjC,QAAA,YAAA,CAAa,CAAC,KAAA,CAAM,KAAK,CAAA,EAAG,UAAU,KAAK,CAAA;AAAA,MAC7C,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ;AAChC,QAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS;AACtC,UAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,YAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,QAAA,EAAU,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,CAAA;AAAA,UACtE,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AACjC,YAAA,YAAA,CAAa,CAAC,KAAA,CAAM,KAAK,CAAA,EAAG,UAAU,KAAK,CAAA;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,SAAA,CAAU,UAA8B,KAAA,EAAwC;AACvF,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AAClC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAS,IAAA,KAAS,OAAA,GAAU,EAAE,IAAA,EAAM,MAAK,GAAI,IAAA;AACtD;AAEA,IAAM,iBAAA,GAAiC,CAAC,OAAA,EAAS,MAAA,EAAQ,WAAW,CAAA;AACpE,IAAM,YAAY,CAAC,KAAA,KAAgC,MAAM,IAAA,KAAS,QAAA,GAAW,cAAc,KAAA,CAAM,IAAA;AAEjG,SAAS,gBAAgB,WAAA,EAAoD;AAC3E,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAyB;AAC9C,EAAA,WAAA,CAAY,WAAA,CAAY,QAAQ,CAAA,KAAA,KAAS;AACvC,IAAA,IAAI,CAAC,iBAAA,CAAkB,QAAA,CAAS,SAAA,CAAU,KAAK,CAAC,CAAA,IAAK,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AAC7E,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,IAAA,KAAS,UAAA,IAAc,KAAA,CAAM,QAAA,CAAS,GAAA,KAAQ,MAAM,CAAA;AACnG,IAAA,MAAM,QAAQ,IAAA,EAAM,IAAA,KAAS,UAAA,GAAa,IAAA,CAAK,SAAS,KAAA,GAAQ,MAAA;AAChE,IAAA,QAAA,CAAS,GAAA,CAAI,MAAM,IAAA,EAAM;AAAA,MACvB,IAAA,EAAM,UAAU,KAAK,CAAA;AAAA,MACrB,aAAA,EAAe,OAAO,IAAA,KAAS,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KACrE,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,SAAsB,KAAA,EAAwC;AACtF,EAAA,IAAI,KAAA,KAAU,SAAA,IAAa,KAAA,KAAU,SAAA,EAAW;AAC9C,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAQ,IAAA,KAAS,WAAA,GAAc,mBAAmB,OAAA,CAAQ,aAAA,EAAe,KAAK,CAAA,GAAI,MAAA;AAC3F;AAEA,SAAS,YACP,SAAA,EACA,QAAA,EACA,OAAA,GAAU,KAAA,EACV,gBAAgB,KAAA,EACL;AACX,EAAA,OAAO;AAAA,IACL,QAAQ,IAAA,EAAM;AACZ,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,IAAI,aAAA,IAAiB,KAAK,CAAC,CAAA,KAAM,UAAU,IAAA,CAAK,CAAC,MAAM,IAAA,EAAM;AAC3D,QAAA,OAAO,QAAA;AAAA,MACT;AACA,MAAA,MAAM,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AACtC,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,OAAO,SAAA,CAAU,QAAA,EAAU,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,MACpC;AACA,MAAA,IAAI,OAAA,IAAW,KAAK,CAAC,CAAA,KAAM,UAAU,IAAA,CAAK,CAAC,MAAM,OAAA,EAAS;AACxD,QAAA,OAAO,QAAA;AAAA,MACT;AACA,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AACpC,MAAA,OAAO,UAAU,gBAAA,CAAiB,OAAA,EAAS,IAAA,CAAK,CAAC,CAAC,CAAA,GAAI,MAAA;AAAA,IACxD;AAAA,GACF;AACF;AAEA,SAAS,OAAA,CAAQ,MAAe,MAAA,EAAqC;AACnE,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA;AACH,MAAA,OAAO,IAAA,CAAK,KAAK,MAAA,KAAW,CAAA,IAAK,KAAK,IAAA,CAAK,CAAC,CAAA,IAAK,MAAA,CAAO,MAAA,GACpD,EAAE,MAAM,KAAA,EAAO,IAAA,EAAM,CAAC,MAAA,CAAO,IAAA,EAAM,KAAK,IAAA,CAAK,CAAC,CAAC,CAAA,EAAE,GACjD,IAAA;AAAA,IACN,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,OAAA,EAAS,QAAQ,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA,EAAE;AAAA,IAC3D,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,IAAA,EAAM,QAAQ,IAAA,CAAK,IAAA,EAAM,MAAM,CAAA,EAAG,KAAA,EAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA,EAAE;AAAA,IACzF,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO,OAAA,CAAQ,GAAA,EAAK,MAAM,CAAC,CAAA,EAAE;AAAA,IACrE;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAQA,SAAS,oBAAoB,WAAA,EAAyC;AACpE,EAAA,MAAM,QAAuB,EAAC;AAC9B,EAAA,WAAA,CAAY,WAAA,CAAY,QAAQ,CAAA,KAAA,KAAS;AACvC,IAAA,KAAA,MAAW,KAAA,IAAS,MAAM,OAAA,EAAS;AACjC,MAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,CAAU,KAAK,CAAA,EAAG,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,CAAA;AAAA,MACjF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACT;AAIA,SAAS,aAAA,CAAc,MAAiB,aAAA,EAAsD;AAC5F,EAAA,IAAI,SAAS,YAAA,EAAc;AACzB,IAAA,OAAO,CAAC,UAAU,CAAA;AAAA,EACpB;AACA,EAAA,IAAI,CAAC,iBAAA,CAAkB,QAAA,CAAS,IAAI,CAAA,EAAG;AACrC,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,MAAM,OAAA,GAAU,IAAA,KAAS,WAAA,IAAe,iBAAA,CAAkB,aAAa,CAAA;AACvE,EAAA,OAAO,OAAA,GAAU,CAAC,GAAG,cAAA,EAAgB,YAAY,CAAA,GAAI,cAAA;AACvD;AAEA,SAAS,YAAA,CAAa,IAAA,EAAmB,aAAA,EAAmC,MAAA,EAAyB;AACnG,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAQ,GAAI,IAAA;AAChC,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,EAAM,aAAa,CAAA;AACjD,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAA;AAAA,IACE,eAAA;AAAA,IACA,QAAQ,MAAA,GACJ,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,mBAAmB,OAAA,CAAQ,KAAK,CAAA,WAAA,EAAc,OAAA,CAAQ,KAAK,IAAI,CAAC,OAChF,CAAA,EAAG,IAAI,KAAK,IAAI,CAAA,2EAAA;AAAA,GACtB;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eACP,UAAA,EACA,IAAA,EACA,GAAA,EACA,SAAA,EACA,OACA,MAAA,EAC6B;AAC7B,EAAA,MAAM,EAAA,GAAK,CAAC,IAAA,EAAc,OAAA,KAAoB,MAAA,CAAO,MAAM,OAAA,EAAS,UAAA,CAAW,IAAA,EAAM,UAAA,CAAW,GAAG,CAAA;AACnG,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AACzC,EAAA,MAAM,CAAC,MAAA,EAAQ,KAAK,CAAA,GAAI,GAAA,IAAO,WAAW,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,CAAC,IAAI,IAAA,EAAM,UAAA,CAAW,OAAO,CAAC,CAAC,IAAI,UAAA,CAAW,MAAA;AAC9G,EAAA,MAAM,QAAA,GAAW,WAAW,MAAA,CAAO,MAAA,IAAU,IAAI,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA,GAAI,MAAA;AACzE,EAAA,IAAI,CAAC,QAAA,IAAY,KAAA,KAAU,MAAA,EAAW;AACpC,IAAA,EAAA,CAAG,gBAAA,EAAkB,CAAA,CAAA,EAAI,MAAM,CAAA,8DAAA,CAAgE,CAAA;AAC/F,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,GAAA,IAAO,aAAa,GAAA,EAAK;AAC3B,IAAA,EAAA,CAAG,uBAAuB,CAAA,WAAA,EAAc,IAAI,gCAAgC,IAAI,CAAA,QAAA,EAAW,MAAM,CAAA,EAAA,CAAI,CAAA;AACrG,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAA,CAAS,SAAS,QAAA,EAAU;AAC9B,IAAA,EAAA;AAAA,MACE,mBAAA;AAAA,MACA,eAAe,MAAM,CAAA,qEAAA;AAAA,KACvB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AACpC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,EAAA,CAAG,gBAAA,EAAkB,CAAA,YAAA,EAAe,MAAM,CAAA,gBAAA,EAAmB,KAAK,CAAA,EAAA,CAAI,CAAA;AACtE,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAO,GAAA,GAAM,OAAA,CAAQ,WAAW,IAAA,EAAM,GAAG,IAAI,UAAA,CAAW,IAAA;AAC9D,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,IAAA,EAAM,KAAA,EAAO,CAAC,MAAM,OAAA,KAAY,EAAA,CAAG,IAAA,EAAM,OAAO,CAAC,CAAA;AAC1E,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,EAAQ,MAAM,CAAA,EAAG;AAC7B,IAAA,EAAA,CAAG,eAAA,EAAiB,IAAI,MAAM,CAAA,KAAA,EAAQ,MAAM,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AACtF,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,UAAA,CAAW,IAAA,EAAM,GAAA,EAAK,UAAA,CAAW,GAAA,EAAI;AACzF;AAEA,SAAS,WAAA,CACP,IAAA,EACA,SAAA,EACA,QAAA,EACA,WAAA,EAC0B;AAC1B,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAQ,GAAI,IAAA;AAChC,EAAA,MAAM,SAAiB,CAAC,IAAA,EAAM,SAAS,IAAA,GAAO,OAAA,CAAQ,MAAM,GAAA,GAAM,OAAA,CAAQ,QACxE,WAAA,CAAY,IAAA,CAAK,EAAE,QAAA,EAAU,OAAA,EAAS,MAAM,OAAA,EAAS,IAAA,EAAM,KAAK,CAAA;AAClE,EAAA,IAAI,CAAC,aAAa,IAAA,EAAM,QAAA,CAAS,IAAI,IAAI,CAAA,EAAG,aAAA,EAAe,MAAM,CAAA,EAAG;AAClE,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAU,IAAA,KAAS,YAAA;AACzB,EAAA,MAAM,GAAA,GAAM,OAAA,GAAU,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,GAAI,MAAA;AAC5C,EAAA,IAAI,OAAA,IAAW,GAAA,EAAK,IAAA,KAAS,QAAA,EAAU;AACrC,IAAA,MAAA,CAAO,mBAAA,EAAqB,CAAA,YAAA,EAAe,IAAI,CAAA,+DAAA,CAAiE,CAAA;AAChH,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAQ,WAAA,CAAY,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,CAAC,OAAO,CAAA;AAChE,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,CAAY,OAAA;AAAA,IACtC,CAAA,UAAA,KAAc,eAAe,UAAA,EAAY,IAAA,EAAM,KAAK,SAAA,EAAW,KAAA,EAAO,MAAM,CAAA,IAAK;AAAC,GACpF;AACA,EAAA,OAAO;AAAA,IACL,IAAI,CAAA,EAAG,IAAI,IAAI,IAAI,CAAA,CAAA,EAAI,QAAQ,KAAK,CAAA,CAAA;AAAA,IACpC,SAAA,EAAW,IAAA;AAAA,IACX,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,IAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,WAAA;AAAA,IACA,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,KAAK,OAAA,CAAQ;AAAA,GACf;AACF;AAEA,SAAS,kBAAA,CACP,SAAA,EACA,QAAA,EACA,WAAA,EACM;AACN,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAA,CAAS,IAAA,EAAK,EAAG;AAClC,IAAA,IAAI,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAG;AACvB,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,QAAA,EAAU,SAAA;AAAA,QACV,IAAA,EAAM,gBAAA;AAAA,QACN,OAAA,EAAS,IAAI,IAAI,CAAA,yEAAA,CAAA;AAAA,QACjB,IAAA,EAAM,CAAA;AAAA,QACN,GAAA,EAAK;AAAA,OACN,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,YAAA,CAAa,MAAmB,QAAA,EAA6D;AACpG,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAQ,GAAI,IAAA;AAChC,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,OAAO,qBAAA,CAAsB,SAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,aAAA,EAAe,OAAA,CAAQ,GAAG,CAAA;AAAA,EAChF;AACA,EAAA,OAAO,mBAAA,CAAoB,IAAI,CAAA,GAAI,OAAA,CAAQ,GAAG,CAAA;AAChD;AAEA,SAAS,aAAA,CAAc,MAAmB,QAAA,EAA6C;AACrF,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAQ,GAAI,IAAA;AAChC,EAAA,OACE,IAAA,KAAS,WAAA,KACR,OAAA,CAAQ,GAAA,KAAQ,WAAW,OAAA,CAAQ,GAAA,KAAQ,UAAA,CAAA,IAC5C,iBAAA,CAAkB,SAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,GAAG,aAAa,CAAA;AAE1D;AAQA,SAAS,gBAAA,CACP,IAAA,EACA,QAAA,EACA,SAAA,EAC8B;AAC9B,EAAA,MAAM,EAAE,SAAQ,GAAI,IAAA;AACpB,EAAA,MAAM,MAAA,GAAS,QAAQ,QAAA,KAAa,KAAA;AACpC,EAAA,IAAI,OAAA,CAAQ,aAAa,IAAA,IAAS,MAAA,IAAU,CAAC,aAAA,CAAc,IAAA,EAAM,QAAQ,CAAA,EAAI;AAC3E,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,8BAAA;AAAA,MACN,SAAS,CAAA,CAAA,EAAI,OAAA,CAAQ,QAAQ,CAAA,MAAA,EAAS,QAAQ,GAAG,CAAA,0HAAA,CAAA;AAAA,MACjD,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AACA,EAAA,MAAM,OAAA,GAAU,SAAS,mBAAA,CAAoB,OAAA,CAAQ,KAAK,OAAA,CAAQ,IAAA,EAAM,SAAS,CAAA,GAAI,MAAA;AACrF,EAAA,OAAO,OAAA,GAAU,EAAE,IAAA,EAAM,gBAAA,EAAkB,SAAS,OAAA,EAAS,QAAA,EAAU,SAAQ,GAAI,MAAA;AACrF;AAEA,SAAS,YAAA,CACP,IAAA,EACA,KAAA,EACA,QAAA,EACA,WACA,WAAA,EAC2B;AAC3B,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAQ,GAAI,IAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC3B,EAAA,MAAM,SAAS,CAAC,IAAA,EAAc,SAAiB,QAAA,GAAgC,OAAA,KAC7E,YAAY,IAAA,CAAK,EAAE,QAAA,EAAU,IAAA,EAAM,SAAS,IAAA,EAAM,OAAA,CAAQ,MAAM,GAAA,EAAK,OAAA,CAAQ,KAAK,CAAA;AACpF,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA;AAC3D,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,OAAA,EAAS,SAAS,QAAQ,CAAA;AACzD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,IAAA,EAAM,QAAQ,CAAA;AAC5C,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,OAAA,GAAU,IAAA,KAAS,WAAA,GAAc,6BAAA,GAAgC,MAAA,CAAO,KAAK,mBAAA,CAAoB,IAAI,CAAA,IAAK,EAAE,CAAA;AAClH,IAAA,MAAA;AAAA,MACE,wBAAA;AAAA,MACA,GAAG,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,4BAAA,EAA+B,QAAQ,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAA,GAAS,eAAe,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,MAAM,EAAE,CAAA,CAAA;AAAA,KAC3H;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,OAAA,CAAQ,IAAA,EAAM,OAAO,MAAM,CAAA;AACpD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,EAAQ,QAAQ,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,eAAA,EAAiB,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,UAAA,EAAa,QAAA,CAAS,QAAQ,CAAC,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AAChH,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO;AAAA,IACL,IAAI,CAAA,EAAG,IAAI,IAAI,KAAK,CAAA,CAAA,EAAI,QAAQ,GAAG,CAAA,CAAA;AAAA,IACnC,SAAA,EAAW,IAAA;AAAA,IACX,SAAA,EAAW,IAAA;AAAA,IACX,UAAU,OAAA,CAAQ,GAAA;AAAA,IAClB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,IAAA,EAAM,QAAA;AAAA,IACN,cAAc,CAAC,GAAG,IAAI,GAAA,CAAI,YAAY,OAAA,CAAQ,IAAI,CAAA,CAAE,GAAA,CAAI,SAAO,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAC,CAAC,CAAA;AAAA,IAC9E,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,KAAK,OAAA,CAAQ;AAAA,GACf;AACF;AAEA,SAAS,aAAa,QAAA,EAAyD;AAC7E,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA6B;AACjD,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,KAAA,MAAW,UAAA,IAAc,QAAQ,YAAA,EAAc;AAC7C,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,EAAY,CAAC,GAAI,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,IAAK,EAAC,EAAI,OAAO,CAAC,CAAA;AAAA,IACvE;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,kBAAkB,WAAA,EAAwC;AACxE,EAAA,MAAM,EAAE,SAAA,EAAW,WAAA,EAAY,GAAI,iBAAiB,WAAW,CAAA;AAC/D,EAAA,MAAM,QAAA,GAAW,gBAAgB,WAAW,CAAA;AAC5C,EAAA,kBAAA,CAAmB,SAAA,EAAW,UAAU,WAAW,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,SAAA,EAAW,QAAA,EAAU,OAAO,IAAI,CAAA;AAC1D,EAAA,MAAM,QAAuB,EAAC;AAC9B,EAAA,YAAA,CAAa,WAAA,CAAY,MAAA,EAAQ,EAAC,EAAG,KAAK,CAAA;AAE1C,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,CAAA,IAAA,KAAQ,YAAA,CAAa,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,WAAW,CAAA,IAAK,EAAE,CAAA;AACxG,EAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,WAAW,CAAA,CAAE,OAAA;AAAA,IAChD,UAAQ,WAAA,CAAY,IAAA,EAAM,WAAW,QAAA,EAAU,WAAW,KAAK;AAAC,GAClE;AACA,EAAA,OAAO,EAAE,WAAW,QAAA,EAAU,QAAA,EAAU,UAAU,OAAA,EAAS,YAAA,CAAa,QAAQ,CAAA,EAAG,WAAA,EAAY;AACjG;;;ACvYA,IAAM,QAAA,mBAAW,IAAI,GAAA,CAAI,CAAC,QAAA,EAAU,SAAS,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEvE,SAAS,oBAAoB,KAAA,EAA0C;AAC5E,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,EAAA,MAAM,IAAA,GAAO,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAgB;AACxC,IAAA,IAAI,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,IAAK,CAAC,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1D,MAAA;AAAA,IACF;AACA,IAAA,CAAC,KAAA,KAAU,SAAA,GAAY,MAAA,GAAS,SAAA,EAAW,IAAI,IAAI,CAAA;AAAA,EACrD,CAAA;AACA,EAAA,KAAA,MAAW,OAAA,IAAW,MAAM,QAAA,EAAU;AACpC,IAAA,IAAI,OAAA,CAAQ,cAAc,YAAA,EAAc;AACtC,MAAA,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,IACpC;AACA,IAAA,KAAA,MAAW,UAAA,IAAc,QAAQ,WAAA,EAAa;AAC5C,MAAA,WAAA,CAAY,UAAA,CAAW,IAAI,CAAA,CAAE,OAAA,CAAQ,IAAI,CAAA;AAAA,IAC3C;AAAA,EACF;AACA,EAAA,KAAA,MAAW,OAAA,IAAW,MAAM,QAAA,EAAU;AACpC,IAAA,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAA,CAAE,OAAA,CAAQ,IAAI,CAAA;AAAA,EACxC;AACA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAM,QAAA,EAAU;AACzC,IAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,IAAA,CAAK,aAAa,CAAA,EAAG,WAAA;AAChE,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,WAAA,IAAe,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA,IAAK,CAAC,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAG;AACvG,MAAA,SAAA,CAAU,IAAI,IAAI,CAAA;AAAA,IACpB;AAAA,EACF;AACA,EAAA,OAAO,EAAE,WAAW,MAAA,EAAO;AAC7B;;;ACnCA,IAAM,WAAA,GAAc,CAAC,KAAA,KACnB,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,SAAA,GAAY,OAAO,KAAA,GAAQ,OAAA;AAEjG,SAAS,SAAA,CAAU,UAA8B,IAAA,EAAoD;AAC1G,EAAA,MAAM,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,GAAO,CAAC,IAAI,CAAA;AAC/C,EAAA,IAAK,SAAS,IAAA,KAAS,OAAA,KAAa,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvD,IAAA,OAAO,CAAA,YAAA,EAAe,QAAA,CAAS,IAAI,CAAA,OAAA,EAAU,QAAA,CAAS,IAAI,CAAA,sBAAA,EAAyB,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,MAAA,GAAS,UAAU,CAAA,CAAA,CAAA;AAAA,EAC9H;AACA,EAAA,KAAA,MAAW,OAAO,IAAA,EAAe;AAC/B,IAAA,KAAA,MAAW,CAAC,OAAO,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3D,MAAA,IAAI,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC,MAAM,IAAA,EAAM;AACpC,QAAA,OAAO,CAAA,CAAA,EAAI,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,YAAA,EAAe,QAAA,CAAS,QAAA,CAAS,KAAK,CAAC,CAAA,MAAA,EAAS,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAC1G;AACA,MAAA,IAAI,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,KAAM,KAAA,IAAS,CAAC,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG;AACvE,QAAA,OAAO,CAAA,CAAA,EAAI,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,KAAK,yCAAyC,MAAA,CAAO,GAAA,CAAI,KAAK,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAC9F;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;;;AChBA,IAAM,SAAA,GAAY,CAAC,KAAA,EAAoB,EAAA,KAAe,KAAA,CAAM,QAAQ,IAAA,CAAK,CAAA,SAAA,KAAa,SAAA,CAAU,EAAA,KAAO,EAAE,CAAA;AAEzG,SAAS,aAAA,CACP,KAAA,EACA,IAAA,EACA,MAAA,EACM;AACN,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,EAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AACtC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA;AAAA,EACF;AACA,EAAA,IAAI,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAK,eAAa,SAAA,CAAU,EAAA,KAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AACpE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,GAAS,EAAE,EAAA,EAAI,IAAA,CAAK,CAAC,CAAA,EAAG,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,EAAG,MAAA,EAAQ,EAAC,EAAE;AACnD,IAAA,KAAA,CAAM,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,EAC1B;AACA,EAAA,MAAA,CAAO,MAAM,CAAA;AACf;AAEO,SAAS,aAAA,CAAc,OAAoB,EAAA,EAAmC;AACnF,EAAA,OAAA,CAAQ,KAAA,CAAM,cAAc,KAAA,CAAM,OAAA,GAAU,KAAK,CAAA,SAAA,KAAa,SAAA,CAAU,OAAO,EAAE,CAAA;AACnF;AAEO,SAAS,mBAAA,CAAoB,KAAA,EAAoB,EAAA,EAAY,KAAA,EAA6B;AAC/F,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,EAAO,EAAE,CAAA;AACzC,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA;AAAA,EACF;AACA,EAAA,SAAA,CAAU,QAAQ,kBAAA,CAAmB,SAAS,CAAA,GAAI,KAAA,GAAQ,OAAO,KAAK,CAAA;AACxE;AAEO,SAAS,sBAAA,CAAuB,KAAA,EAAoB,EAAA,EAAY,KAAA,EAAqB;AAC1F,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,EAAO,EAAE,CAAA;AACzC,EAAA,IAAI,SAAA,IAAa,kBAAA,CAAmB,SAAS,CAAA,EAAG;AAC9C,IAAA,SAAA,CAAU,WAAW,QAAA,GAAW,KAAA;AAAA,EAClC;AACF;AAEO,SAAS,sBAAA,CAAuB,KAAA,EAAoB,EAAA,EAAY,QAAA,EAAyB;AAC9F,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,EAAO,EAAE,CAAA;AACzC,EAAA,IAAI,SAAA,IAAa,kBAAA,CAAmB,SAAS,CAAA,EAAG;AAC9C,IAAA,SAAA,CAAU,QAAA,GAAW,QAAA;AAAA,EACvB;AACF;AAEO,SAAS,mBAAA,CAAoB,OAAoB,EAAA,EAAqB;AAC3E,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,EAAO,EAAE,CAAA;AACzC,EAAA,OAAO,SAAA,KAAc,MAAA,IAAa,kBAAA,CAAmB,SAAS,KAAK,SAAA,CAAU,QAAA;AAC/E;AAEA,SAAS,QAAA,CAAS,KAAA,EAAoB,IAAA,EAAgB,MAAA,EAA8D;AAClH,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,IAAA,CAAK,eAAa,SAAA,CAAU,EAAA,KAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AACrE,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAA,CAAO,KAAK,CAAA;AAAA,EACd;AACF;AAEO,IAAM,KAAA,GAA+B;AAAA,EAC1C,kBAAA,EAAoB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU;AAC1C,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,EAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AACtC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,MAAA,GAAS,EAAE,GAAI,KAAA,CAAM,UAAU,EAAC,EAAI,YAAY,KAAA,EAAkB;AAAA,IAC1E;AAAA,EACF,CAAA;AAAA,EACA,YAAA,EAAc,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU;AACpC,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,EAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AACtC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AAAA,IAChB;AAAA,EACF,CAAA;AAAA,EACA,eAAA,EAAiB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU,aAAA,CAAc,KAAA,EAAO,IAAA,EAAM,CAAA,MAAA,KAAW,MAAA,CAAO,MAAA,GAAS,KAAM,CAAA;AAAA,EACrG,cAAA,EAAgB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU,aAAA,CAAc,KAAA,EAAO,IAAA,EAAM,CAAA,MAAA,KAAW,MAAA,CAAO,KAAA,GAAQ,KAAgB,CAAA;AAAA,EAC7G,YAAA,EAAc,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU;AACpC,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,IAAA,CAAK,eAAa,SAAA,CAAU,EAAA,KAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AACrE,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,IAAA,GAAO,KAAA;AAAA,IACf;AAAA,EACF,CAAA;AAAA,EACA,YAAA,EAAc,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU,QAAA,CAAS,KAAA,EAAO,IAAA,EAAM,CAAA,KAAA,KAAU,KAAA,CAAM,SAAA,GAAY,KAAgB,CAAA;AAAA,EACxG,cAAA,EAAgB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU,QAAA,CAAS,KAAA,EAAO,IAAA,EAAM,CAAA,KAAA,KAAU,KAAA,CAAM,WAAA,GAAc,KAAgB,CAAA;AAAA,EAC5G,iBAAA,EAAmB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU,QAAA,CAAS,KAAA,EAAO,IAAA,EAAM,CAAA,KAAA,KAAU,KAAA,CAAM,SAAA,GAAY,KAAgB,CAAA;AAAA,EAC7G,eAAA,EAAiB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU,QAAA,CAAS,KAAA,EAAO,IAAA,EAAM,CAAA,KAAA,KAAU,KAAA,CAAM,OAAA,GAAU,KAAgB,CAAA;AAAA,EACzG,iBAAA,EAAmB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU,oBAAoB,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,EAAG,KAAuB,CAAA;AAAA,EACtG,oBAAA,EAAsB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU,uBAAuB,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,EAAG,KAAe,CAAA;AAAA,EACpG,oBAAA,EAAsB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,KAAU,sBAAA,CAAuB,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,EAAG,KAAA,KAAU,IAAI;AACrG,CAAA;AAEO,SAAS,WAAA,CACd,KAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACU;AACV,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,IAAA,KAAS,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA,KAAM,OAAA,KAAY,MAAA,IAAa,KAAA,CAAM,EAAA,KAAO,OAAA,CAAA,EAAU;AAElG,MAAA,KAAA,CAAM,MAAA,GAAS;AAAA,QACb,GAAG,KAAA,CAAM,MAAA;AAAA,QACT,UAAA,EAAY,EAAE,GAAG,KAAA,CAAM,MAAA,CAAO,YAAY,CAAC,OAAA,CAAQ,QAAQ,GAAG,KAAA;AAAgB,OAChF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,MAAM,EAAE,CAAA;AAAA,IACtB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;AClFA,SAAS,YAAA,CAAa,KAAA,EAAoB,EAAA,EAAY,aAAA,EAAmD;AACvG,EAAA,MAAM,UAAA,GAAa,uBAAuB,aAAa,CAAA;AACvD,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,KAAA,EAAO,EAAE,CAAA,EAAG,KAAA;AAC1C,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,OAAO,UAAA,EAAY,OAAO,OAAA,IAAW,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,UAAA,EAAY,KAAA,EAAO,IAAA,KAAS,QAAA,EAAU;AACxC,IAAA,MAAM,KAAA,GAAQ,OAAO,OAAO,CAAA;AAC5B,IAAA,OAAO,OAAO,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,GAAQ,WAAW,KAAA,CAAM,OAAA;AAAA,EAC3D;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,kBAAA,CAAmB,KAAa,OAAA,EAA8C;AAC5F,EAAA,MAAM,QAAQ,iBAAA,CAAkB,cAAA,CAAe,WAAA,CAAM,GAAG,CAAC,CAAC,CAAA;AAC1D,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,gBAAA,CAAiB,GAAG,CAAC,CAAA;AACnD,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAA0B;AACnD,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAM,QAAA,EAAU;AACzC,IAAA,IAAI,CAAC,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAG;AAC9B,MAAA,YAAA,CAAa,IAAI,IAAA,EAAM;AAAA,QACrB,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,CAAA;AAAA,QACT,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,IAAA,EAAM,KAAK,aAAa;AAAA,OACpD,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA,EAAa,CAAC,GAAG,KAAA,CAAM,WAAW,CAAA;AAAA,IAClC,KAAA;AAAA,IACA,OAAA,sBAAa,GAAA,EAAI;AAAA,IACjB,OAAA,sBAAa,GAAA,EAAI;AAAA,IACjB,KAAA,sBAAW,GAAA,EAAI;AAAA,IACf,SAAA,sBAAe,GAAA,EAAI;AAAA,IACnB,MAAA,sBAAY,GAAA,EAAI;AAAA,IAChB,aAAA,sBAAmB,GAAA,EAAI;AAAA,IACvB,SAAA,sBAAe,GAAA,EAAI;AAAA,IACnB,YAAA;AAAA,IACA,SAAA,EAAW,KAAA;AAAA,IACX,YAAA,EAAc;AAAA,GAChB;AACF;AAEO,SAAS,SAAA,CAAU,OAAqB,IAAA,EAA8B;AAC3E,EAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,IAAA;AACtB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,IAAI,MAAA,GAAY,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACjF,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,QAAQ,KAA2B,CAAA;AAAA,EAC5C;AACA,EAAA,MAAM,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,GAAG,GAAA,EAAI;AAC1C,EAAA,IAAI,SAAS,MAAA,EAAW;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,kBAAA,CAAoB,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GACpB,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,KAAK,CAAC,CAAA,GACzB,IAAA,CAAiC,KAAK,CAAA;AAC9C;AAEO,SAAS,aAAA,CAAc,OAAqB,OAAA,EAA4C;AAC7F,EAAA,OAAO,OAAA,CAAQ,YAAA,CACZ,GAAA,CAAI,CAAA,UAAA,KAAc,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1C,IAAA,CAAK,CAAA,IAAA,KAAQ,SAAS,MAAA,IAAU,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,IAAK,CAAC,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,IAAI,CAAC,CAAA;AAC9F;;;ACtFA,SAAS,QAAA,CAAS,KAAA,EAAqB,EAAA,EAAY,MAAA,EAA0B;AAC3E,EAAA,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA;AAC9B,EAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,KAAA,CAAM,aAAa,CAAA,EAAG;AAC/C,IAAA,QAAA,CAAS,MAAM,CAAA;AAAA,EACjB;AACF;AAEA,SAAS,mBAAA,CAAoB,KAAA,EAAqB,OAAA,EAAwB,KAAA,EAAgC;AACxG,EAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AACzC,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAChB,IAAA,SAAA,CAAU,OAAO,EAAE,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,CAAC,uBAAuB,KAAA,CAAM,KAAA,CAAM,SAAS,GAAA,CAAI,EAAE,CAAA,EAAG,aAAa,CAAA,EAAG;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,QAAA,CAAS,KAAA,EAAO,QAAQ,EAAA,EAAI,EAAE,MAAM,WAAA,EAAa,EAAA,EAAI,OAAwB,CAAA;AAC7E,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,KAAA,EAAqB,OAAA,EAAwB,OAAA,EAAuB;AAC7F,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA,EAAG;AAC7B,IAAA;AAAA,EACF;AACA,EAAA,KAAA,CAAM,MAAA,CAAO,IAAI,OAAO,CAAA;AACxB,EAAA,KAAA,CAAM,YAAY,IAAA,CAAK;AAAA,IACrB,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,uBAAA;AAAA,IACN,OAAA,EAAS,CAAA,YAAA,EAAe,OAAO,CAAA,gCAAA,EAAmC,QAAQ,QAAQ,CAAA,cAAA,CAAA;AAAA,IAClF,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,KAAK,OAAA,CAAQ;AAAA,GACd,CAAA;AACH;AAEA,SAAS,eAAA,CAAgB,OAAqB,OAAA,EAAiC;AAC7E,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,KAAA,EAAO,OAAO,CAAA;AAC5C,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,iBAAA,CAAkB,KAAA,EAAO,SAAS,OAAO,CAAA;AACzC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,YAAA,CAAa,QAAA,CAAS,SAAS,CAAA;AACzD,EAAA,IAAI,OAAA,CAAQ,SAAA,KAAc,QAAA,IAAY,SAAA,EAAW;AAC/C,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,CAAA,KAAA,KAAS,KAAA,CAAM,MAAA,EAAQ,IAAA,KAAS,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAC,CAAA;AAC7F,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAMA,MAAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,IAAA,EAAM;AAAA,QACnC,IAAA,EAAM,CAAA,IAAA,KAAS,IAAA,CAAK,CAAC,MAAM,MAAA,IAAU,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,GAAO,KAAA,CAAM,EAAA,GAAK,SAAA,CAAU,OAAO,IAAI;AAAA,OACzF,CAAA;AACD,MAAA,MAAM,YAAY,CAAA,EAAG,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,MAAM,EAAE,CAAA,CAAA;AAC3C,MAAA,MAAMC,IAAAA,GAAM,IAAA,CAAK,SAAA,CAAUD,MAAK,CAAA;AAChC,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,SAAS,MAAMC,IAAAA,EAAK;AACxC,QAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAWA,IAAG,CAAA;AAChC,MAAA,WAAA,CAAY,KAAA,CAAM,KAAA,EAAO,OAAA,EAASD,MAAAA,EAAO,MAAM,EAAE,CAAA;AACjD,MAAA,QAAA,CAAS,OAAO,SAAA,EAAW;AAAA,QACzB,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,CAAC,KAAA,CAAM,EAAE,CAAA;AAAA,QACjB,YAAY,EAAE,CAAC,OAAA,CAAQ,QAAQ,GAAGA,MAAAA;AAAgB,OACnD,CAAA;AAAA,IACH;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAS,OAAA,CAAQ,SAAA,KAAc,WAAW,MAAA,GAAY,OAAA,CAAQ,UAAU,CAAC,CAAA;AAC/E,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,IAAA,EAAM;AAAA,IACnC,IAAA,EAAM,CAAA,IAAA,KAAS,IAAA,CAAK,CAAC,MAAM,MAAA,IAAU,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,IAAQ,MAAA,GAAS,MAAA,GAAS,SAAA,CAAU,OAAO,IAAI;AAAA,GACjG,CAAA;AACD,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAChC,EAAA,IAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,EAAE,MAAM,GAAA,EAAK;AACzC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,EAAA,EAAI,GAAG,CAAA;AACjC,EAAA,IAAI,OAAA,CAAQ,cAAc,QAAA,EAAU;AAClC,IAAA,QAAA,CAAS,KAAA,EAAO,QAAQ,EAAA,EAAI;AAAA,MAC1B,IAAA,EAAM,QAAA;AAAA,MACN,MAAA,EAAQ,WAAA,CAAY,KAAA,CAAM,KAAA,EAAO,SAAS,KAAK,CAAA;AAAA,MAC/C,YAAY,EAAE,CAAC,OAAA,CAAQ,QAAQ,GAAG,KAAA;AAAgB,KACnD,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,SAAA,KAAc,MAAA,GAAS,OAAA,GAAU,QAAQ,SAAS,CAAA,CAAA,EAAI,OAAA,CAAQ,QAAQ,CAAA,CAAE,CAAA;AAAA,IACvF,KAAA,CAAM,KAAA;AAAA,IACN,OAAA,CAAQ,SAAA;AAAA,IACR;AAAA,GACF;AACA,EAAA,IAAI,OAAA,CAAQ,SAAA,KAAc,WAAA,IAAe,OAAA,CAAQ,aAAa,OAAA,EAAS;AACrE,IAAA,OAAO,mBAAA,CAAoB,KAAA,EAAO,OAAA,EAAS,KAAuB,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,MAAM,KAAA,EAA0C;AAC9D,EAAA,KAAA,CAAM,SAAA,GAAY,KAAA;AAClB,EAAA,IAAI,UAAU,KAAA,CAAM,YAAA;AACpB,EAAA,KAAA,CAAM,YAAA,GAAe,KAAA;AACrB,EAAA,KAAA,MAAW,OAAA,IAAW,MAAM,KAAA,EAAO;AACjC,IAAA,OAAA,GAAU,eAAA,CAAgB,KAAA,EAAO,OAAO,CAAA,IAAK,OAAA;AAAA,EAC/C;AACA,EAAA,KAAA,CAAM,MAAM,KAAA,EAAM;AAClB,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,KAAA,CAAM,KAAA,EAAO,EAAE,GAAG,KAAA,CAAM,OAAA,CAAQ,aAAA,EAAe,YAAA,EAAc,IAAA,EAAM,CAAA;AAC/F,EAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,IAAA,QAAA,CAAS,MAAM,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,SAAS,KAAA,EAA2B;AAClD,EAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACpB,IAAA,KAAA,CAAM,SAAA,GAAY,IAAA;AAClB,IAAA,cAAA,CAAe,MAAM,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EACnC;AACF;AAEO,SAAS,SAAA,CAAU,OAAqB,IAAA,EAAoB;AACjE,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,QAAQ,CAAA,IAAK,KAAA,CAAM,MAAM,OAAA,EAAS;AACnD,IAAA,IAAI,KAAA,CAAM,UAAA,CAAW,CAAA,EAAG,IAAI,GAAG,CAAA,EAAG;AAChC,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,QAAA,KAAA,CAAM,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;;;AC5HO,SAAS,UAAA,CAAW,KAAA,EAAqB,OAAA,EAAuB,KAAA,EAAgB,MAAA,EAAuB;AAC5G,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,IAAA,EAAM,CAAC,IAAA,KAAmB;AACxB,MAAA,IAAI,KAAK,CAAC,CAAA,KAAM,UAAU,IAAA,CAAK,CAAC,MAAM,OAAA,EAAS;AAC7C,QAAA,OAAO,KAAA,IAAS,CAAA;AAAA,MAClB;AACA,MAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,IAAU,KAAK,CAAC,CAAA,KAAM,QAAQ,MAAA,EAAQ;AACpD,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,OAAO,SAAA,CAAU,OAAO,IAAI,CAAA;AAAA,IAC9B;AAAA,GACF;AACA,EAAA,KAAA,MAAW,UAAA,IAAc,QAAQ,WAAA,EAAa;AAC5C,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,WAAW,MAAM,CAAA;AAClD,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,UAAA,CAAW,IAAI,CAAA,CAAE,KAAA;AAAA,MAC5C,CAAC,CAAC,IAAI,MACJ,IAAA,KAAS,MAAA,IACR,SAAS,MAAA,IAAU,OAAA,CAAQ,MAAM,CAAA,IAClC,KAAA,CAAM,QAAQ,GAAA,CAAI,IAAI,KACtB,KAAA,CAAM,YAAA,CAAa,IAAI,IAAI;AAAA,KAC/B;AACA,IAAA,IAAI,CAAC,MAAA,IAAU,EAAE,KAAA,IAAS,MAAA,CAAA,IAAW,CAAC,QAAA,EAAU;AAC9C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,GAAQ,QAAA,CAAS,UAAA,CAAW,IAAA,EAAM,GAAG,CAAA;AACzC,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,KAAA,GACE,KAAA,CAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,WAAW,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,CAAW,KAAK,CAAA,KAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,GAAI,KAAA;AAC3G,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3B,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,OAAO,GAAA,EAAI;AACvB,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,KAAK,CAAA,KAAM,KAAA,EAAO;AACnC,MAAC,MAAA,CAA6B,GAAA,CAAI,EAAE,GAAG,GAAA,EAAK,CAAC,UAAA,CAAW,KAAK,GAAG,KAAA,EAAO,CAAA;AAAA,IACzE;AAAA,EACF;AACF;AAEO,SAAS,QAAA,CAAS,KAAA,EAAqB,EAAA,EAAY,KAAA,EAAqB;AAC7E,EAAA,KAAA,MAAW,OAAA,IAAW,KAAA,CAAM,KAAA,CAAM,QAAA,EAAU;AAC1C,IAAA,IAAI,OAAA,CAAQ,KAAA,KAAU,KAAA,IAAS,OAAA,CAAQ,SAAA,KAAc,gBAAgB,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA,KAAM,EAAA,EAAI;AAChG,MAAA,UAAA,CAAW,KAAA,EAAO,OAAA,EAAS,MAAA,EAAW,EAAE,CAAA;AAAA,IAC1C;AAAA,EACF;AACF;AAEO,SAAS,OAAA,CAAQ,OAAqB,OAAA,EAAuB;AAClE,EAAA,KAAA,MAAW,OAAA,IAAW,KAAA,CAAM,KAAA,CAAM,QAAA,EAAU;AAC1C,IAAA,IAAI,OAAA,CAAQ,UAAU,UAAA,EAAY;AAChC,MAAA,UAAA,CAAW,KAAA,EAAO,SAAS,OAAO,CAAA;AAAA,IACpC;AAAA,EACF;AACF;AAEO,SAAS,eAAA,CAAgB,KAAA,EAAqB,EAAA,EAAY,KAAA,EAAoC;AACnG,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AACzC,EAAA,IAAI,CAAC,OAAA,IAAY,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAgC,KAAA,CAAM,CAAA,GAAA,KAAO,OAAA,CAAQ,GAAG,CAAA,KAAM,KAAA,CAAM,GAAG,CAAC,CAAA,EAAG;AAC3G,IAAA;AAAA,EACF;AACA,EAAA,MAAA,CAAO,MAAA,CAAO,SAAS,KAAK,CAAA;AAC5B,EAAA,SAAA,CAAU,OAAO,EAAE,CAAA;AACnB,EAAA,QAAA,CAAS,KAAK,CAAA;AAChB;;;AC9DA,SAAS,YAAA,CAAa,OAAqB,EAAA,EAAY;AACrD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,IAAI,EAAE,CAAA;AACxC,EAAA,OAAO,MAAM,IAAA,KAAS,WAAA,GAAc,sBAAA,CAAuB,IAAA,CAAK,aAAa,CAAA,GAAI,MAAA;AACnF;AAEA,SAAS,YAAA,CAAa,KAAA,EAAqB,EAAA,EAAY,QAAA,GAAW,OAAA,EAAoC;AACpG,EAAA,OAAO,KAAA,CAAM,MAAM,QAAA,CAAS,IAAA;AAAA,IAC1B,CAAA,OAAA,KAAW,OAAA,CAAQ,SAAA,KAAc,WAAA,IAAe,OAAA,CAAQ,UAAU,CAAC,CAAA,KAAM,EAAA,IAAM,OAAA,CAAQ,QAAA,KAAa;AAAA,GACtG;AACF;AAEA,SAAS,SAAA,CAAU,KAAA,EAAqB,OAAA,EAAwB,KAAA,EAA6B;AAC3F,EAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,SAAS,KAAA,GAAQ,OAAA,CAAQ,KAAK,IAAA,GAAO,MAAA;AACjE,EAAA,MAAM,MAAA,GAAS,SAAS,KAAA,CAAM,OAAA,CAAQ,IAAI,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,MAAA;AACvD,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,IAAU,EAAE,SAAS,MAAA,CAAA,EAAS;AAC5C,IAAA;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAM,OAAO,GAAA,EAAI;AACvB,EAAA,IAAI,GAAA,CAAI,MAAA,CAAO,CAAC,CAAC,MAAM,KAAA,EAAO;AAC5B,IAAC,MAAA,CAA6B,GAAA,CAAI,EAAE,GAAG,GAAA,EAAK,CAAC,MAAA,CAAO,CAAC,CAAC,GAAG,KAAA,EAAO,CAAA;AAAA,EAClE;AACF;AAGA,SAAS,cAAA,CAAe,KAAA,EAAqB,EAAA,EAAY,IAAA,EAAuB;AAC9E,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,CAAM,KAAA,EAAO,EAAE,CAAA;AAC/C,EAAA,IACE,CAAC,SAAA,IACD,CAAC,kBAAA,CAAmB,SAAS,CAAA,IAC7B,SAAA,CAAU,UAAA,CAAW,QAAA,KAAa,IAAA,IAClC,mBAAA,CAAoB,KAAA,CAAM,KAAA,EAAO,EAAE,CAAA,EACnC;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,EAAO,EAAA,EAAI,UAAU,CAAA;AAClD,EAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,QAAA,KAAa,KAAA,EAAO;AACzC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,EAAA,EAAI,IAAI,CAAA;AAC5C,EAAA,KAAA,CAAM,YAAA,GAAe,IAAA;AACrB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,KAAA,CAAM,QAAQ,GAAA,CAAI,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAClD,IAAA,SAAA,CAAU,KAAA,EAAO,SAAS,IAAI,CAAA;AAAA,EAChC;AACA,EAAA,SAAA,CAAU,OAAO,EAAE,CAAA;AACnB,EAAA,QAAA,CAAS,KAAA,EAAO,IAAI,YAAY,CAAA;AAChC,EAAA,QAAA,CAAS,KAAK,CAAA;AACd,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,oBAAA,CACd,KAAA,EACA,EAAA,EACA,IAAA,EACA,WAAiC,OAAA,EACxB;AACT,EAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,IAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,cAAA,CAAe,KAAA,EAAO,IAAI,IAAI,CAAA;AAAA,EACnE;AACA,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,EAAO,EAAE,CAAA,EAAG,KAAA;AACtC,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AACzC,EAAA,IAAI,CAAC,IAAA,EAAM,QAAA,IAAY,CAAC,OAAA,IAAW,OAAO,IAAA,KAAS,IAAA,CAAK,IAAA,IAAQ,OAAA,CAAQ,KAAA,KAAU,IAAA,EAAM;AACtF,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,mBAAA,CAAoB,KAAA,CAAM,KAAA,EAAO,EAAE,CAAA,EAAG;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,EAAO,EAAE,CAAA;AACtC,EAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,QAAA,KAAa,KAAA,EAAO;AACzC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAChB,EAAA,mBAAA,CAAoB,KAAA,CAAM,KAAA,EAAO,EAAA,EAAI,IAAI,CAAA;AACzC,EAAA,KAAA,CAAM,YAAA,GAAe,IAAA;AACrB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,KAAA,CAAM,QAAQ,GAAA,CAAI,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAClD,IAAA,SAAA,CAAU,KAAA,EAAO,SAAS,IAAI,CAAA;AAAA,EAChC;AACA,EAAA,SAAA,CAAU,OAAO,EAAE,CAAA;AACnB,EAAA,QAAA,CAAS,KAAA,EAAO,IAAI,YAAY,CAAA;AAChC,EAAA,QAAA,CAAS,KAAK,CAAA;AACd,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,GAAA,GAAM,KAAK,EAAA,GAAK,CAAA;AAEtB,IAAM,OAAA,uBAAc,OAAA,EAAoD;AACxE,IAAM,MAAA,GAAS,CAAC,KAAA,KAA0B,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AAGxE,SAAS,UAAA,CACP,UAAA,EACA,KAAA,EACA,MAAA,EACA,GACA,CAAA,EACQ;AACR,EAAA,MAAM,QAAA,GAAW,WAAW,SAAA,KAAc,UAAA;AAC1C,EAAA,MAAM,MAAA,GAAS,WAAW,MAAA,GAAS,KAAA;AACnC,EAAA,MAAM,QAAQ,WAAA,CAAY,UAAA,CAAW,OAAA,EAAS,QAAA,GAAW,QAAQ,MAAM,CAAA;AACvE,EAAA,MAAM,QAAA,GAAW,QAAA,GAAW,CAAA,GAAI,CAAA,GAAI,CAAA;AACpC,EAAA,OAAO,MAAA,GAAS,KAAA,GAAQ,CAAA,GAAI,MAAA,CAAA,CAAQ,QAAA,GAAW,SAAS,KAAA,KAAU,MAAA,GAAS,KAAA,GAAQ,CAAA,CAAE,CAAA,GAAI,QAAA;AAC3F;AAGA,SAAS,SAAA,CACP,UAAA,EACA,KAAA,EACA,MAAA,EACA,GACA,CAAA,EACQ;AACR,EAAA,MAAM,QAAS,MAAA,CAAO,UAAA,CAAW,SAAS,GAAG,CAAA,GAAI,KAAK,EAAA,GAAM,GAAA;AAC5D,EAAA,MAAM,QAAS,MAAA,CAAO,UAAA,CAAW,SAAS,GAAG,CAAA,GAAI,KAAK,EAAA,GAAM,GAAA;AAC5D,EAAA,MAAM,MAAM,GAAA,GAAM,KAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,EAAE,IAAI,GAAA,CAAA,GAAO,MAAA,EAAA,CAAS,CAAA,GAAI,GAAA,IAAO,KAAK,CAAA;AAC/D,EAAA,MAAM,OAAA,GAAU,KAAA,GAAQ,KAAA,GAAQ,GAAA,GAAM,CAAA;AACtC,EAAA,OAAO,SAAW,OAAA,GAAU,GAAA,GAAO,OAAO,GAAA,GAAO,GAAA,GAAM,KAAK,KAAK,CAAA;AACnE;AAGO,SAAS,YAAA,CAAa,KAAA,EAAqB,EAAA,EAAY,CAAA,EAAW,IAAI,CAAA,EAAS;AACpF,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,CAAM,KAAA,EAAO,EAAE,CAAA;AAC/C,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,kBAAA,CAAmB,SAAS,CAAA,EAAG;AAChD,IAAA;AAAA,EACF;AACA,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,EAAO,EAAE,CAAA,EAAG,WAAA;AACtC,EAAA,MAAM,EAAE,YAAW,GAAI,SAAA;AACvB,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,OAAA,IAAW,EAAE,CAAA,CAC1C,KAAA,CAAM,GAAG,CAAA,CACT,MAAA,CAAO,CAAA,MAAA,KAAU,MAAA,CAAO,IAAA,EAAM,CAAA,CAAE,MAAA;AACnC,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,oBAAA,CAAqB,KAAA,EAAO,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,KAAK,CAAC,CAAC,CAAA;AAAA,IAC5E;AACA,IAAA;AAAA,EACF;AACA,EAAA,MAAM,QACJ,IAAA,KAAS,MAAA,GACL,UAAU,UAAA,EAAY,SAAA,CAAU,OAAO,SAAA,CAAU,MAAA,EAAQ,GAAG,CAAC,CAAA,GAC7D,WAAW,UAAA,EAAY,SAAA,CAAU,OAAO,SAAA,CAAU,MAAA,EAAQ,GAAG,CAAC,CAAA;AACpE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,GAAA,IAAO,CAAC,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,GAAA,IAAO,GAAG,CAAA;AACxC,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,UAAA,CAAW,IAAA,IAAQ,CAAC,CAAA;AACxC,EAAA,IAAI,KAAA,GAAQ,GAAA,GAAM,KAAA,IAAS,GAAA,GAAM,GAAA,CAAA;AACjC,EAAA,IAAI,OAAO,CAAA,EAAG;AACZ,IAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,KAAA,CAAA,CAAO,KAAA,GAAQ,GAAA,IAAO,IAAI,CAAA,GAAI,IAAA;AAAA,EACnD;AACA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AACnE,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,oBAAA,CAAqB,KAAA,EAAO,IAAI,KAAK,CAAA;AACrC,IAAA;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA;AAClC,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,UAAA,CAAW,QAAA,IAAY,GAAG,CAAA;AAC9C,EAAA,MAAM,QAAQ,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,wBAAS,GAAA,EAA6B;AACrE,EAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,KAAK,CAAA;AACxB,EAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EAAG;AAClB,IAAA,KAAA,CAAM,GAAA,CAAI,EAAA,EAAI,KAAA,IAAS,IAAA,IAAS,KAAA,GAAQ,GAAA,IAAO,KAAA,GAAQ,GAAA,GAAM,IAAA,GAAO,KAAA,GAAS,KAAA,GAAQ,OAAO,CAAA;AAAA,EAC9F;AAEA,EAAA,IAAI,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,KAAM,OAAA,EAAS;AAC7B,IAAA,oBAAA,CAAqB,OAAO,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAI,CAAC,CAAA;AAAA,EACvD,CAAA,MAAO;AACL,IAAA,oBAAA,CAAqB,OAAO,EAAA,EAAI,IAAA,CAAK,IAAI,KAAA,EAAO,GAAG,GAAG,UAAU,CAAA;AAAA,EAClE;AACF;AAEA,SAAS,iBAAA,CAAkB,OAAqB,EAAA,EAAkB;AAChE,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AACzC,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,KAAA,EAAO,EAAE,CAAA;AACzC,EAAA,IAAI,WAAW,UAAA,EAAY,WAAA,KAAgB,YAAY,UAAA,CAAW,KAAA,EAAO,SAAS,SAAA,EAAW;AAC3F,IAAA,oBAAA,CAAqB,KAAA,EAAO,EAAA,EAAI,OAAA,CAAQ,KAAA,KAAU,IAAI,CAAA;AAAA,EACxD;AACF;AAEO,SAAS,YAAA,CAAa,OAAqB,EAAA,EAAkB;AAClE,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,EAAG,MAAA,CAAO,EAAE,CAAA;AAC7B,EAAA,IAAI,mBAAA,CAAoB,KAAA,CAAM,KAAA,EAAO,EAAE,CAAA,EAAG;AACxC,IAAA;AAAA,EACF;AACA,EAAA,eAAA,CAAgB,KAAA,EAAO,EAAA,EAAI,EAAE,OAAA,EAAS,MAAM,CAAA;AAC5C,EAAA,QAAA,CAAS,KAAA,EAAO,IAAI,SAAS,CAAA;AAC/B;AAEO,SAAS,cAAA,CAAe,KAAA,EAAqB,EAAA,EAAY,MAAA,EAAuB;AACrF,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,EAAG,MAAA,CAAO,EAAE,CAAA;AAC7B,EAAA,eAAA,CAAgB,KAAA,EAAO,EAAA,EAAI,EAAE,OAAA,EAAS,OAAO,CAAA;AAC7C,EAAA,IAAI,mBAAA,CAAoB,KAAA,CAAM,KAAA,EAAO,EAAE,CAAA,EAAG;AACxC,IAAA;AAAA,EACF;AACA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,iBAAA,CAAkB,OAAO,EAAE,CAAA;AAAA,EAC7B;AACA,EAAA,QAAA,CAAS,KAAA,EAAO,IAAI,WAAW,CAAA;AAC/B,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,QAAA,CAAS,KAAA,EAAO,IAAI,OAAO,CAAA;AAAA,EAC7B;AACF;AAEO,SAAS,eAAA,CAAgB,OAAqB,EAAA,EAAkB;AACrE,EAAA,IAAI,mBAAA,CAAoB,KAAA,CAAM,KAAA,EAAO,EAAE,CAAA,EAAG;AACxC,IAAA;AAAA,EACF;AACA,EAAA,iBAAA,CAAkB,OAAO,EAAE,CAAA;AAC3B,EAAA,QAAA,CAAS,KAAA,EAAO,IAAI,OAAO,CAAA;AAC7B;;;AC5MA,SAAS,cAAA,CAAe,KAAA,EAAqB,IAAA,EAAc,MAAA,EAAgC;AACzF,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,SAAA,CAAU,IAAI,IAAI,CAAA;AAC/C,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,IAAI,CAAA,yBAAA,CAA2B,CAAA;AAAA,EACnE;AACA,EAAA,MAAM,SAAS,MAAe;AAC5B,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,QAAA,EAAU,MAAA,CAAO,KAAK,CAAA;AAChD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,EAAE,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,oBAAA,EAAsB,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA;AAC3G,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,IAAI,QAAO,EAAG;AACZ,MAAA,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AAC9B,MAAA,KAAA,CAAM,MAAA,CAAO,OAAO,IAAI,CAAA;AACxB,MAAA,SAAA,CAAU,OAAO,IAAI,CAAA;AACrB,MAAA,QAAA,CAAS,KAAK,CAAA;AAAA,IAChB;AAAA,EACF,CAAA;AACA,EAAA,KAAA,EAAM;AACN,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA;AAC1C,EAAA,OAAO,MAAM;AACX,IAAA,WAAA,EAAY;AACZ,IAAA,KAAA,CAAM,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,EAC3B,CAAA;AACF;AAEA,SAAS,cAAA,CAAe,QAAuB,MAAA,EAA0B;AACvE,EAAA,IAAI,MAAA,CAAO,SAAS,WAAA,EAAa;AAC/B,IAAA,CAAC,MAAA,CAAO,qBAAqB,MAAA,CAAO,cAAA,GAAiB,KAAK,MAAA,EAAQ,MAAA,CAAO,EAAA,EAAI,MAAA,CAAO,KAAK,CAAA;AACzF,IAAA;AAAA,EACF;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,IAAA,MAAA,CAAO,mBAAA,GAAsB,KAAA,EAAO,MAAA,CAAO,UAAU,CAAA;AAAA,EACvD;AACF;AAEA,SAAS,MAAA,CAAO,OAAqB,MAAA,EAAmC;AACtE,EAAA,MAAM,IAAA,GAAO,CAAC,MAAA,KAAuB,cAAA,CAAe,QAAQ,MAAM,CAAA;AAClE,EAAA,KAAA,CAAM,aAAA,CAAc,IAAI,IAAI,CAAA;AAC5B,EAAA,KAAA,MAAW,MAAA,IAAU,KAAA,CAAM,SAAA,CAAU,MAAA,EAAO,EAAG;AAC7C,IAAA,IAAA,CAAK,MAAM,CAAA;AAAA,EACb;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,MAAA,KAAyB,MAAA,CAAO,OAAO,EAAE,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,CAAA;AAC5E,EAAA,KAAA,CAAM,SAAA,CAAU,IAAI,QAAQ,CAAA;AAC5B,EAAA,KAAA,MAAW,OAAA,IAAW,KAAA,CAAM,KAAA,CAAM,QAAA,EAAU;AAC1C,IAAA,KAAA,CAAM,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,EACzB;AACA,EAAA,KAAA,CAAM,KAAK,CAAA;AACX,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,CAAM,SAAA,CAAU,OAAO,QAAQ,CAAA;AAC/B,IAAA,KAAA,CAAM,aAAA,CAAc,OAAO,IAAI,CAAA;AAAA,EACjC,CAAA;AACF;AAEO,SAAS,oBAAA,CAAqB,GAAA,EAAa,OAAA,GAAiC,EAAC,EAAmB;AACrG,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,GAAA,EAAK,OAAO,CAAA;AAC7C,EAAA,KAAA,MAAW,OAAA,IAAW,KAAA,CAAM,KAAA,CAAM,QAAA,EAAU;AAC1C,IAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA,KAAA,CAAM,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,IACzB;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG;AACxB,IAAA,QAAA,CAAS,KAAK,CAAA;AAAA,EAChB;AAEA,EAAA,OAAO;AAAA,IACL,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,WAAA,EAAa,mBAAA,CAAoB,KAAA,CAAM,KAAK,CAAA;AAAA,IAC5C,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,gBAAgB,CAAC,IAAA,EAAM,WAAW,cAAA,CAAe,KAAA,EAAO,MAAM,MAAM,CAAA;AAAA,IACpE,iBAAiB,CAAC,EAAA,EAAI,UAAU,eAAA,CAAgB,KAAA,EAAO,IAAI,KAAK,CAAA;AAAA,IAChE,KAAA,EAAO,CAAA,EAAA,KAAM,YAAA,CAAa,KAAA,EAAO,EAAE,CAAA;AAAA,IACnC,SAAS,CAAC,EAAA,EAAI,WAAW,cAAA,CAAe,KAAA,EAAO,IAAI,MAAM,CAAA;AAAA,IACzD,QAAA,EAAU,CAAA,EAAA,KAAM,eAAA,CAAgB,KAAA,EAAO,EAAE,CAAA;AAAA,IACzC,QAAQ,CAAC,EAAA,EAAI,UAAU,oBAAA,CAAqB,KAAA,EAAO,IAAI,KAAK,CAAA;AAAA,IAC5D,KAAA,EAAO,CAAC,EAAA,EAAI,CAAA,EAAG,MAAM,YAAA,CAAa,KAAA,EAAO,EAAA,EAAI,CAAA,EAAG,CAAC,CAAA;AAAA,IACjD,IAAA,CAAK,IAAI,OAAA,EAAS;AAChB,MAAA,IAAI,YAAY,MAAA,EAAW;AACzB,QAAA,eAAA,CAAgB,KAAA,EAAO,EAAA,EAAI,EAAE,OAAA,EAAS,CAAA;AAAA,MACxC;AACA,MAAA,QAAA,CAAS,KAAA,EAAO,IAAI,QAAQ,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,IAAA,EAAM,CAAA,OAAA,KAAW,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvC,KAAA,EAAO,MAAM,KAAA,CAAM,KAAK,CAAA;AAAA,IACxB,SAAS,QAAA,EAAU;AACjB,MAAA,KAAA,CAAM,SAAA,CAAU,IAAI,QAAQ,CAAA;AAC5B,MAAA,OAAO,MAAM,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,MAAA,EAAQ,CAAA,MAAA,KAAU,MAAA,CAAO,KAAA,EAAO,MAAM;AAAA,GACxC;AACF;AAMO,SAAS,WAAA,CAAY,GAAA,EAAa,OAAA,GAA8B,EAAC,EAAiB;AACvF,EAAA,MAAM,EAAE,IAAA,GAAO,EAAC,EAAG,GAAG,eAAc,GAAI,OAAA;AACxC,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,GAAA,EAAK,EAAE,eAAe,CAAA;AAC3D,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC/C,IAAA,OAAA,CAAQ,cAAA,CAAe,IAAA,EAAM,EAAE,GAAA,EAAK,MAAM,MAAM,SAAA,EAAW,MAAM,MAAM,MAAA,EAAW,CAAA;AAAA,EACpF;AACA,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAClD","file":"chunk-UB2ANTWF.js","sourcesContent":["import type { BindingOperator, BlockKind, SflExpr } from '../sflLanguage/ast';\n\nexport type ScalarType = 'number' | 'string' | 'boolean';\nexport type BindingType = ScalarType | { list: ScalarType };\nexport type BindingValue = number | string | boolean | number[] | string[] | boolean[];\n\nconst DECLARED: Record<string, ScalarType> = {\n number: 'number',\n int: 'number',\n float: 'number',\n string: 'string',\n boolean: 'boolean',\n bool: 'boolean',\n};\n\nexport const scalarOf = (declared: string): ScalarType | undefined => DECLARED[declared];\n\nexport const typeName = (type: BindingType): string => (typeof type === 'string' ? type : `list<${type.list}>`);\n\nexport const sameType = (left: BindingType, right: BindingType): boolean => typeName(left) === typeName(right);\n\nexport type SourceMode = 'table' | 'record';\n\nexport type Row = Record<string, unknown>;\n\nexport interface DataSourceContract {\n name: string;\n mode: SourceMode;\n fields: Record<string, ScalarType>;\n declared: Record<string, string>;\n}\n\nexport interface BindingDiagnostic {\n severity: 'error' | 'warning';\n code: string;\n message: string;\n line: number;\n col: number;\n}\n\nexport interface BoundProperty {\n id: string;\n ownerKind: BlockKind;\n ownerPath: string[];\n property: string;\n operator: BindingOperator;\n expr: SflExpr;\n type: BindingType;\n dependencies: string[];\n line: number;\n col: number;\n}\n\nexport interface BoundAssignment {\n source: string;\n field: string;\n expr: SflExpr;\n type: ScalarType;\n line: number;\n col: number;\n}\n\nexport interface BoundHandler {\n id: string;\n ownerKind: BlockKind;\n ownerPath: string[];\n event: string;\n assignments: BoundAssignment[];\n line: number;\n col: number;\n}\n\nexport interface ElementInfo {\n kind: BlockKind;\n componentType?: string;\n}\n\nexport const POINTER_EVENTS = ['onPress', 'onRelease', 'onTap', 'onDrag'] as const;\nexport const CHANGE_EVENT = 'onChange';\nexport const TICK_EVENT = 'onTick';\n","import type { SflBlock, SflDocument, SflValue } from '../sflLanguage/ast';\nimport { type BindingDiagnostic, type DataSourceContract, type SourceMode, scalarOf } from './types';\n\nfunction identOf(value: SflValue | undefined): string | undefined {\n return value?.type === 'ident' ? value.segments.join('.') : undefined;\n}\n\nfunction readContract(block: SflBlock, diagnostics: BindingDiagnostic[]): DataSourceContract {\n const properties = block.entries.flatMap(entry => (entry.type === 'property' ? [entry.property] : []));\n const mode: SourceMode =\n identOf(properties.find(property => property.key === 'mode')?.value) === 'record' ? 'record' : 'table';\n const contract: DataSourceContract = { name: block.name, mode, fields: {}, declared: {} };\n for (const entry of block.entries) {\n if (entry.type === 'fields') {\n for (const field of entry.fields) {\n const declared = identOf(field.value) ?? '';\n const scalar = scalarOf(declared);\n if (scalar) {\n contract.fields[field.key] = scalar;\n contract.declared[field.key] = declared;\n } else {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-field-type',\n message: `Field '${block.name}.${field.key}' has unknown type '${declared}' (use int, float, number, string or bool).`,\n line: 0,\n col: 0,\n });\n }\n }\n }\n }\n return contract;\n}\n\nexport function visitBlocks(blocks: SflBlock[], visit: (block: SflBlock) => void): void {\n for (const block of blocks) {\n visit(block);\n visitBlocks(\n block.entries.flatMap(entry => (entry.type === 'block' ? [entry.block] : [])),\n visit,\n );\n }\n}\n\nexport function collectContracts(sflDocument: SflDocument): {\n contracts: Map<string, DataSourceContract>;\n diagnostics: BindingDiagnostic[];\n} {\n const contracts = new Map<string, DataSourceContract>();\n const diagnostics: BindingDiagnostic[] = [];\n visitBlocks(sflDocument.blocks, block => {\n if (block.kind !== 'DataSource') {\n return;\n }\n if (contracts.has(block.name)) {\n diagnostics.push({\n severity: 'error',\n code: 'duplicate-data-source',\n message: `DataSource '${block.name}' is declared more than once.`,\n line: 0,\n col: 0,\n });\n return;\n }\n contracts.set(block.name, readContract(block, diagnostics));\n });\n return { contracts, diagnostics };\n}\n","import type { Row } from './types';\n\nexport type SourceListener = () => void;\n\nexport interface DataSource {\n get(): readonly Row[] | Row;\n subscribe(listener: SourceListener): () => void;\n}\n\nexport interface MutableDataSource extends DataSource {\n set(next: readonly Row[] | Row): void;\n}\n\nexport function createDataSource(initial: readonly Row[] | Row): MutableDataSource {\n let current = initial;\n const listeners = new Set<SourceListener>();\n return {\n get: () => current,\n set(next) {\n current = next;\n for (const listener of [...listeners]) {\n listener();\n }\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n","import { getComponentDescriptor } from '../model/component';\nimport type { SflExpr } from '../sflLanguage/ast';\nimport type { BindingType, DataSourceContract } from './types';\n\n// `valueEnd` is the second value of a component that holds two, such as the upper end of a range.\nexport const BINDABLE_COMPONENT_PROPERTIES = ['value', 'valueEnd', 'disabled'];\n\nexport function acceptsUserChange(componentType: string | undefined): boolean {\n return getComponentDescriptor(componentType)?.value?.writable === true;\n}\n\nexport function componentStateType(componentType: string | undefined, state: string): BindingType | undefined {\n const descriptor = getComponentDescriptor(componentType);\n if (state === 'focused') {\n return 'boolean';\n }\n if (state === 'pointer') {\n return descriptor?.pointerScale ? 'number' : undefined;\n }\n return state === 'value' ? descriptor?.value?.type : undefined;\n}\n\nexport function componentPropertyType(componentType: string | undefined, property: string): BindingType | undefined {\n if (property === 'disabled') {\n return 'boolean';\n }\n if (property === 'valueEnd') {\n return getComponentDescriptor(componentType)?.properties.valueEnd?.type === 'number' ? 'number' : undefined;\n }\n return property === 'value' ? getComponentDescriptor(componentType)?.value?.type : undefined;\n}\n\nexport function twoWayTargetProblem(\n key: string,\n expr: SflExpr,\n contracts: Map<string, DataSourceContract>,\n): string | undefined {\n const target = expr.kind === 'ref' ? expr.path : undefined;\n const contract = target?.length === 2 ? contracts.get(target[0]) : undefined;\n if (!target || contract?.mode !== 'record' || !contract.fields[target[1]]) {\n return `'<->' on '${key}' has to name one field of a record DataSource, as in <DataSource>.<field>.`;\n }\n return undefined;\n}\n","import type { SflExpr } from '../sflLanguage/ast';\nimport { type BindingType, type BindingValue, sameType, typeName } from './types';\n\nexport interface TypeScope {\n resolve(path: string[]): BindingType | undefined;\n}\n\nexport interface ValueEnv {\n read(path: string[]): BindingValue;\n}\n\ntype Report = (code: string, message: string) => void;\n\nconst isNumeric = (type: BindingType): boolean =>\n type === 'number' || (typeof type === 'object' && type.list === 'number');\nconst isList = (type: BindingType): boolean => typeof type === 'object';\n\nexport function collectRefs(expr: SflExpr): string[][] {\n switch (expr.kind) {\n case 'ref':\n return [expr.path];\n case 'unary':\n return collectRefs(expr.operand);\n case 'binary':\n return [...collectRefs(expr.left), ...collectRefs(expr.right)];\n case 'call':\n return expr.args.flatMap(collectRefs);\n default:\n return [];\n }\n}\n\nfunction inferBinary(\n expr: Extract<SflExpr, { kind: 'binary' }>,\n scope: TypeScope,\n report: Report,\n): BindingType | undefined {\n const left = inferType(expr.left, scope, report);\n const right = inferType(expr.right, scope, report);\n if (!left || !right) {\n return undefined;\n }\n const { operator } = expr;\n if (operator === '&&' || operator === '||') {\n if (left !== 'boolean' || right !== 'boolean') {\n report('type-mismatch', `'${operator}' needs two booleans, got ${typeName(left)} and ${typeName(right)}.`);\n return undefined;\n }\n return 'boolean';\n }\n if (['>', '<', '>=', '<='].includes(operator)) {\n if (left !== 'number' || right !== 'number') {\n report('type-mismatch', `'${operator}' compares two numbers, got ${typeName(left)} and ${typeName(right)}.`);\n return undefined;\n }\n return 'boolean';\n }\n if (operator === '==' || operator === '!=') {\n if (isList(left) || !sameType(left, right)) {\n report(\n 'type-mismatch',\n `'${operator}' compares two values of the same simple type, got ${typeName(left)} and ${typeName(right)}.`,\n );\n return undefined;\n }\n return 'boolean';\n }\n if (operator === '+' && !isList(left) && !isList(right) && (left === 'string' || right === 'string')) {\n return 'string';\n }\n if (!isNumeric(left) || !isNumeric(right)) {\n report('type-mismatch', `'${operator}' needs numbers, got ${typeName(left)} and ${typeName(right)}.`);\n return undefined;\n }\n return isList(left) || isList(right) ? { list: 'number' } : 'number';\n}\n\nconst MATH: Record<string, { arguments: number; apply(values: number[]): number }> = {\n round: { arguments: 1, apply: ([value]) => Math.round(value) },\n floor: { arguments: 1, apply: ([value]) => Math.floor(value) },\n ceil: { arguments: 1, apply: ([value]) => Math.ceil(value) },\n abs: { arguments: 1, apply: ([value]) => Math.abs(value) },\n min: { arguments: 2, apply: ([a, b]) => Math.min(a, b) },\n max: { arguments: 2, apply: ([a, b]) => Math.max(a, b) },\n clamp: { arguments: 3, apply: ([value, low, high]) => Math.min(high, Math.max(low, value)) },\n moveToward: {\n arguments: 3,\n apply: ([current, target, maxStep]) =>\n Math.abs(target - current) <= maxStep ? target : current + Math.sign(target - current) * maxStep,\n },\n};\n\nfunction inferMath(\n name: string,\n expr: Extract<SflExpr, { kind: 'call' }>,\n scope: TypeScope,\n report: Report,\n): BindingType | undefined {\n const spec = MATH[name];\n if (expr.args.length !== spec.arguments) {\n report('wrong-arguments', `${name}() takes exactly ${spec.arguments} argument${spec.arguments === 1 ? '' : 's'}.`);\n return undefined;\n }\n const types = expr.args.map(arg => inferType(arg, scope, report));\n if (types.some(type => !type)) {\n return undefined;\n }\n if (types.some(type => !isNumeric(type as BindingType))) {\n report(\n 'type-mismatch',\n `${name}() needs numbers, got ${types.map(type => typeName(type as BindingType)).join(', ')}.`,\n );\n return undefined;\n }\n return types.some(type => isList(type as BindingType)) ? { list: 'number' } : 'number';\n}\n\nfunction inferCall(\n expr: Extract<SflExpr, { kind: 'call' }>,\n scope: TypeScope,\n report: Report,\n): BindingType | undefined {\n const name = expr.callee.join('.');\n if (name in MATH) {\n return inferMath(name, expr, scope, report);\n }\n if (name !== 'when') {\n report('unknown-function', `Unknown function '${name}'. Available: when, ${Object.keys(MATH).join(', ')}.`);\n return undefined;\n }\n if (expr.args.length !== 3) {\n report('wrong-arguments', 'when(condition, then, else) takes exactly three arguments.');\n return undefined;\n }\n const [condition, whenTrue, whenFalse] = expr.args.map(arg => inferType(arg, scope, report));\n if (!condition || !whenTrue || !whenFalse) {\n return undefined;\n }\n if (condition !== 'boolean') {\n report('type-mismatch', `The condition of when() must be boolean, got ${typeName(condition)}.`);\n return undefined;\n }\n if (!sameType(whenTrue, whenFalse)) {\n report(\n 'type-mismatch',\n `when() branches must have the same type, got ${typeName(whenTrue)} and ${typeName(whenFalse)}.`,\n );\n return undefined;\n }\n return whenTrue;\n}\n\nexport function inferType(expr: SflExpr, scope: TypeScope, report: Report): BindingType | undefined {\n switch (expr.kind) {\n case 'number':\n return 'number';\n case 'string':\n return 'string';\n case 'boolean':\n return 'boolean';\n case 'ref': {\n const type = scope.resolve(expr.path);\n if (!type) {\n const name = expr.path.join('.');\n report(\n 'unknown-reference',\n name === 'time.delta'\n ? \"'time.delta' is only available in an onTick handler.\"\n : `Unknown reference '${name}'. Use <DataSource>.<field>, self.id, or <element>.pressed / hovered / pointer.`,\n );\n }\n return type;\n }\n case 'unary': {\n const operand = inferType(expr.operand, scope, report);\n const wanted = expr.operator === '!' ? 'boolean' : 'number';\n if (operand && operand !== wanted) {\n report('type-mismatch', `'${expr.operator}' needs a ${wanted}, got ${typeName(operand)}.`);\n return undefined;\n }\n return operand ? wanted : undefined;\n }\n case 'binary':\n return inferBinary(expr, scope, report);\n case 'call':\n return inferCall(expr, scope, report);\n }\n}\n\nfunction arithmetic(operator: string, left: number, right: number): number {\n switch (operator) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n default:\n return right === 0 ? 0 : left / right;\n }\n}\n\nconst text = (value: BindingValue): string =>\n typeof value === 'number' ? String(Math.round(value * 10) / 10) : String(value);\n\nfunction evaluateBinary(expr: Extract<SflExpr, { kind: 'binary' }>, env: ValueEnv): BindingValue {\n const left = evaluate(expr.left, env);\n if (expr.operator === '&&') {\n return Boolean(left) && Boolean(evaluate(expr.right, env));\n }\n if (expr.operator === '||') {\n return Boolean(left) || Boolean(evaluate(expr.right, env));\n }\n const right = evaluate(expr.right, env);\n switch (expr.operator) {\n case '>':\n return (left as number) > (right as number);\n case '<':\n return (left as number) < (right as number);\n case '>=':\n return (left as number) >= (right as number);\n case '<=':\n return (left as number) <= (right as number);\n case '==':\n return left === right;\n case '!=':\n return left !== right;\n }\n if (typeof left === 'string' || typeof right === 'string') {\n return text(left) + text(right);\n }\n const apply = (a: number, b: number) => arithmetic(expr.operator, a, b);\n if (Array.isArray(left) && Array.isArray(right)) {\n const length = Math.min(left.length, right.length);\n return Array.from({ length }, (_value, index) => apply(left[index] as number, right[index] as number));\n }\n if (Array.isArray(left)) {\n return left.map(value => apply(value as number, right as number));\n }\n if (Array.isArray(right)) {\n return right.map(value => apply(left as number, value as number));\n }\n return apply(left as number, right as number);\n}\n\nexport function evaluate(expr: SflExpr, env: ValueEnv): BindingValue {\n switch (expr.kind) {\n case 'number':\n case 'string':\n case 'boolean':\n return expr.value;\n case 'ref':\n return env.read(expr.path);\n case 'unary': {\n const operand = evaluate(expr.operand, env);\n return expr.operator === '!' ? !operand : -(operand as number);\n }\n case 'binary':\n return evaluateBinary(expr, env);\n case 'call': {\n const name = expr.callee.join('.');\n if (name in MATH) {\n const values = expr.args.map(arg => evaluate(arg, env));\n const length = Math.max(0, ...values.map(value => (Array.isArray(value) ? value.length : 0)));\n if (length === 0 && !values.some(Array.isArray)) {\n return MATH[name].apply(values as number[]);\n }\n return Array.from({ length }, (_value, index) =>\n MATH[name].apply(values.map(value => (Array.isArray(value) ? (value[index] as number) : (value as number)))),\n );\n }\n const [condition, whenTrue, whenFalse] = expr.args;\n return evaluate(condition, env) ? evaluate(whenTrue, env) : evaluate(whenFalse, env);\n }\n }\n}\n","import type { BlockKind } from '../sflLanguage/ast';\nimport type { BindingType } from './types';\n\nexport const BINDABLE_PROPERTIES: Partial<Record<BlockKind, Record<string, BindingType>>> = {\n Chart: { categories: { list: 'string' }, text: 'string' },\n Series: { values: { list: 'number' }, label: 'string' },\n Shape: { text: 'string', fill: 'string', stroke: 'string', textColor: 'string', opacity: 'number' },\n Text: { text: 'string', textColor: 'string', opacity: 'number' },\n};\n","import type { BlockKind, SflBinding, SflBlock, SflDocument, SflExpr, SflHandler } from '../sflLanguage/ast';\nimport {\n acceptsUserChange,\n BINDABLE_COMPONENT_PROPERTIES,\n componentPropertyType,\n componentStateType,\n twoWayTargetProblem,\n} from './componentBinding';\nimport { collectContracts, visitBlocks } from './contract';\nimport { collectRefs, inferType, type TypeScope } from './expression';\nimport { BINDABLE_PROPERTIES } from './targets';\nimport {\n type BindingDiagnostic,\n type BindingType,\n type BoundAssignment,\n type BoundHandler,\n type BoundProperty,\n CHANGE_EVENT,\n type DataSourceContract,\n type ElementInfo,\n POINTER_EVENTS,\n sameType,\n TICK_EVENT,\n typeName,\n} from './types';\n\nexport interface BindingGraph {\n contracts: Map<string, DataSourceContract>;\n bindings: BoundProperty[];\n handlers: BoundHandler[];\n elements: Map<string, ElementInfo>;\n byField: Map<string, BoundProperty[]>;\n diagnostics: BindingDiagnostic[];\n}\n\ninterface BindingSite {\n kind: BlockKind;\n path: string[];\n binding: SflBinding;\n}\n\nfunction collectSites(blocks: SflBlock[], chartPath: string[], sites: BindingSite[]): void {\n for (const block of blocks) {\n const path = block.kind === 'Series' ? [...chartPath, block.name] : [block.name];\n const ownChart = block.kind === 'Chart' ? [block.name] : chartPath;\n for (const entry of block.entries) {\n if (entry.type === 'binding') {\n sites.push({ kind: blockKind(block), path, binding: entry.binding });\n } else if (entry.type === 'style') {\n for (const binding of entry.style.bindings ?? []) {\n sites.push({ kind: blockKind(block), path, binding });\n }\n } else if (entry.type === 'block') {\n collectSites([entry.block], ownChart, sites);\n } else if (entry.type === 'data') {\n for (const inner of entry.data.entries) {\n if (inner.type === 'binding') {\n sites.push({ kind: 'Chart', path: ownChart, binding: inner.binding });\n } else if (inner.type === 'block') {\n collectSites([inner.block], ownChart, sites);\n }\n }\n }\n }\n }\n}\n\nfunction fieldType(contract: DataSourceContract, field: string): BindingType | undefined {\n const type = contract.fields[field];\n if (!type) {\n return undefined;\n }\n return contract.mode === 'table' ? { list: type } : type;\n}\n\nconst INTERACTIVE_KINDS: BlockKind[] = ['Shape', 'Text', 'Component'];\nconst blockKind = (block: SflBlock): BlockKind => (block.kind === 'Widget' ? 'Component' : block.kind);\n\nfunction collectElements(sflDocument: SflDocument): Map<string, ElementInfo> {\n const elements = new Map<string, ElementInfo>();\n visitBlocks(sflDocument.blocks, block => {\n if (!INTERACTIVE_KINDS.includes(blockKind(block)) || elements.has(block.name)) {\n return;\n }\n const type = block.entries.find(entry => entry.type === 'property' && entry.property.key === 'type');\n const value = type?.type === 'property' ? type.property.value : undefined;\n elements.set(block.name, {\n kind: blockKind(block),\n componentType: value?.type === 'ident' ? value.segments.join('.') : undefined,\n });\n });\n return elements;\n}\n\nfunction elementStateType(element: ElementInfo, state: string): BindingType | undefined {\n if (state === 'pressed' || state === 'hovered') {\n return 'boolean';\n }\n return element.kind === 'Component' ? componentStateType(element.componentType, state) : undefined;\n}\n\nfunction createScope(\n contracts: Map<string, DataSourceContract>,\n elements: Map<string, ElementInfo>,\n ticking = false,\n selfAvailable = false,\n): TypeScope {\n return {\n resolve(path) {\n if (path.length !== 2) {\n return undefined;\n }\n if (selfAvailable && path[0] === 'self' && path[1] === 'id') {\n return 'string';\n }\n const contract = contracts.get(path[0]);\n if (contract) {\n return fieldType(contract, path[1]);\n }\n if (ticking && path[0] === 'time' && path[1] === 'delta') {\n return 'number';\n }\n const element = elements.get(path[0]);\n return element ? elementStateType(element, path[1]) : undefined;\n },\n };\n}\n\nfunction qualify(expr: SflExpr, source: DataSourceContract): SflExpr {\n switch (expr.kind) {\n case 'ref':\n return expr.path.length === 1 && expr.path[0] in source.fields\n ? { kind: 'ref', path: [source.name, expr.path[0]] }\n : expr;\n case 'unary':\n return { ...expr, operand: qualify(expr.operand, source) };\n case 'binary':\n return { ...expr, left: qualify(expr.left, source), right: qualify(expr.right, source) };\n case 'call':\n return { ...expr, args: expr.args.map(arg => qualify(arg, source)) };\n default:\n return expr;\n }\n}\n\ninterface HandlerSite {\n kind: BlockKind;\n name: string;\n handler: SflHandler;\n}\n\nfunction collectHandlerSites(sflDocument: SflDocument): HandlerSite[] {\n const sites: HandlerSite[] = [];\n visitBlocks(sflDocument.blocks, block => {\n for (const entry of block.entries) {\n if (entry.type === 'handler') {\n sites.push({ kind: blockKind(block), name: block.name, handler: entry.handler });\n }\n }\n });\n return sites;\n}\n\ntype Report = (code: string, message: string, line?: number, col?: number) => void;\n\nfunction allowedEvents(kind: BlockKind, componentType: string | undefined): readonly string[] {\n if (kind === 'DataSource') {\n return [TICK_EVENT];\n }\n if (!INTERACTIVE_KINDS.includes(kind)) {\n return [];\n }\n const changes = kind === 'Component' && acceptsUserChange(componentType);\n return changes ? [...POINTER_EVENTS, CHANGE_EVENT] : POINTER_EVENTS;\n}\n\nfunction eventIsKnown(site: HandlerSite, componentType: string | undefined, report: Report): boolean {\n const { kind, name, handler } = site;\n const allowed = allowedEvents(kind, componentType);\n if (allowed.includes(handler.event)) {\n return true;\n }\n report(\n 'unknown-event',\n allowed.length\n ? `${kind} '${name}' has no event '${handler.event}' (events: ${allowed.join(', ')}).`\n : `${kind} '${name}' has no events; handlers belong on a Shape, Text, Component or DataSource.`,\n );\n return false;\n}\n\nfunction bindAssignment(\n assignment: SflHandler['assignments'][number],\n name: string,\n own: DataSourceContract | undefined,\n contracts: Map<string, DataSourceContract>,\n scope: TypeScope,\n report: Report,\n): BoundAssignment | undefined {\n const at = (code: string, message: string) => report(code, message, assignment.line, assignment.col);\n const target = assignment.target.join('.');\n const [source, field] = own && assignment.target.length === 1 ? [own.name, assignment.target[0]] : assignment.target;\n const contract = assignment.target.length <= 2 ? contracts.get(source) : undefined;\n if (!contract || field === undefined) {\n at('unknown-target', `'${target}' is not a field of a DataSource (write <DataSource>.<field>).`);\n return undefined;\n }\n if (own && contract !== own) {\n at('tick-foreign-target', `onTick of '${name}' can only change fields of '${name}', not '${target}'.`);\n return undefined;\n }\n if (contract.mode !== 'record') {\n at(\n 'target-not-record',\n `DataSource '${source}' is a table source; only record sources can be changed by a handler.`,\n );\n return undefined;\n }\n const wanted = contract.fields[field];\n if (!wanted) {\n at('unknown-target', `DataSource '${source}' has no field '${field}'.`);\n return undefined;\n }\n const expr = own ? qualify(assignment.expr, own) : assignment.expr;\n const actual = inferType(expr, scope, (code, message) => at(code, message));\n if (!actual) {\n return undefined;\n }\n if (!sameType(actual, wanted)) {\n at('type-mismatch', `'${target}' is ${wanted}, the expression is ${typeName(actual)}.`);\n return undefined;\n }\n return { source, field, expr, type: wanted, line: assignment.line, col: assignment.col };\n}\n\nfunction bindHandler(\n site: HandlerSite,\n contracts: Map<string, DataSourceContract>,\n elements: Map<string, ElementInfo>,\n diagnostics: BindingDiagnostic[],\n): BoundHandler | undefined {\n const { kind, name, handler } = site;\n const report: Report = (code, message, line = handler.line, col = handler.col) =>\n diagnostics.push({ severity: 'error', code, message, line, col });\n if (!eventIsKnown(site, elements.get(name)?.componentType, report)) {\n return undefined;\n }\n const ticking = kind === 'DataSource';\n const own = ticking ? contracts.get(name) : undefined;\n if (ticking && own?.mode !== 'record') {\n report('tick-needs-record', `DataSource '${name}' has to be a record source to change its fields on every tick.`);\n return undefined;\n }\n const scope = createScope(contracts, elements, ticking, !ticking);\n const assignments = handler.assignments.flatMap(\n assignment => bindAssignment(assignment, name, own, contracts, scope, report) ?? [],\n );\n return {\n id: `${kind}.${name}.${handler.event}`,\n ownerKind: kind,\n ownerPath: [name],\n event: handler.event,\n assignments,\n line: handler.line,\n col: handler.col,\n };\n}\n\nfunction warnNameCollisions(\n contracts: Map<string, DataSourceContract>,\n elements: Map<string, ElementInfo>,\n diagnostics: BindingDiagnostic[],\n): void {\n for (const name of elements.keys()) {\n if (contracts.has(name)) {\n diagnostics.push({\n severity: 'warning',\n code: 'name-collision',\n message: `'${name}' is a DataSource and an element; in expressions it means the DataSource.`,\n line: 0,\n col: 0,\n });\n }\n }\n}\n\nfunction expectedType(site: BindingSite, elements: Map<string, ElementInfo>): BindingType | undefined {\n const { kind, path, binding } = site;\n if (kind === 'Shader') {\n return 'number';\n }\n if (kind === 'Component') {\n return componentPropertyType(elements.get(path[0])?.componentType, binding.key);\n }\n return BINDABLE_PROPERTIES[kind]?.[binding.key];\n}\n\nfunction canBindTwoWay(site: BindingSite, elements: Map<string, ElementInfo>): boolean {\n const { kind, path, binding } = site;\n return (\n kind === 'Component' &&\n (binding.key === 'value' || binding.key === 'valueEnd') &&\n acceptsUserChange(elements.get(path[0])?.componentType)\n );\n}\n\ninterface RejectedOperator {\n code: string;\n message: string;\n severity: 'error' | 'warning';\n}\n\nfunction rejectedOperator(\n site: BindingSite,\n elements: Map<string, ElementInfo>,\n contracts: Map<string, DataSourceContract>,\n): RejectedOperator | undefined {\n const { binding } = site;\n const twoWay = binding.operator === '<->';\n if (binding.operator === '->' || (twoWay && !canBindTwoWay(site, elements))) {\n return {\n code: 'binding-operator-unsupported',\n message: `'${binding.operator}' on '${binding.key}' is parsed but not executed; '<->' works on the value of a component that the user can change, and '->' is not supported.`,\n severity: 'warning',\n };\n }\n const problem = twoWay ? twoWayTargetProblem(binding.key, binding.expr, contracts) : undefined;\n return problem ? { code: 'two-way-target', message: problem, severity: 'error' } : undefined;\n}\n\nfunction bindProperty(\n site: BindingSite,\n scope: TypeScope,\n elements: Map<string, ElementInfo>,\n contracts: Map<string, DataSourceContract>,\n diagnostics: BindingDiagnostic[],\n): BoundProperty | undefined {\n const { kind, path, binding } = site;\n const owner = path.join('.');\n const report = (code: string, message: string, severity: 'error' | 'warning' = 'error') =>\n diagnostics.push({ severity, code, message, line: binding.line, col: binding.col });\n const rejected = rejectedOperator(site, elements, contracts);\n if (rejected) {\n report(rejected.code, rejected.message, rejected.severity);\n return undefined;\n }\n const expected = expectedType(site, elements);\n if (!expected) {\n const allowed = kind === 'Component' ? BINDABLE_COMPONENT_PROPERTIES : Object.keys(BINDABLE_PROPERTIES[kind] ?? {});\n report(\n 'unknown-bound-property',\n `${kind} '${owner}' has no bindable property '${binding.key}'${allowed.length ? ` (bindable: ${allowed.join(', ')})` : ''}.`,\n );\n return undefined;\n }\n const actual = inferType(binding.expr, scope, report);\n if (!actual) {\n return undefined;\n }\n if (!sameType(actual, expected)) {\n report('type-mismatch', `'${binding.key}' expects ${typeName(expected)}, the expression is ${typeName(actual)}.`);\n return undefined;\n }\n return {\n id: `${kind}.${owner}.${binding.key}`,\n ownerKind: kind,\n ownerPath: path,\n property: binding.key,\n operator: binding.operator,\n expr: binding.expr,\n type: expected,\n dependencies: [...new Set(collectRefs(binding.expr).map(ref => ref.join('.')))],\n line: binding.line,\n col: binding.col,\n };\n}\n\nfunction indexByField(bindings: BoundProperty[]): Map<string, BoundProperty[]> {\n const byField = new Map<string, BoundProperty[]>();\n for (const binding of bindings) {\n for (const dependency of binding.dependencies) {\n byField.set(dependency, [...(byField.get(dependency) ?? []), binding]);\n }\n }\n return byField;\n}\n\nexport function buildBindingGraph(sflDocument: SflDocument): BindingGraph {\n const { contracts, diagnostics } = collectContracts(sflDocument);\n const elements = collectElements(sflDocument);\n warnNameCollisions(contracts, elements, diagnostics);\n const scope = createScope(contracts, elements, false, true);\n const sites: BindingSite[] = [];\n collectSites(sflDocument.blocks, [], sites);\n\n const bindings = sites.flatMap(site => bindProperty(site, scope, elements, contracts, diagnostics) ?? []);\n const handlers = collectHandlerSites(sflDocument).flatMap(\n site => bindHandler(site, contracts, elements, diagnostics) ?? [],\n );\n return { contracts, bindings, handlers, elements, byField: indexByField(bindings), diagnostics };\n}\n","import { getComponentDescriptor } from '../model/component';\nimport { collectRefs } from './expression';\nimport type { BindingGraph } from './graph';\n\nexport interface InteractiveElements {\n pressable: ReadonlySet<string>;\n scales: ReadonlySet<string>;\n}\n\nconst OPERATED = new Set(['toggle', 'press', 'slide', 'pick', 'turn', 'range']);\n\nexport function interactiveElements(graph: BindingGraph): InteractiveElements {\n const pressable = new Set<string>();\n const scales = new Set<string>();\n const note = ([name, state]: string[]) => {\n if (graph.contracts.has(name) || !graph.elements.has(name)) {\n return;\n }\n (state === 'pointer' ? scales : pressable).add(name);\n };\n for (const handler of graph.handlers) {\n if (handler.ownerKind !== 'DataSource') {\n pressable.add(handler.ownerPath[0]);\n }\n for (const assignment of handler.assignments) {\n collectRefs(assignment.expr).forEach(note);\n }\n }\n for (const binding of graph.bindings) {\n collectRefs(binding.expr).forEach(note);\n }\n for (const [name, info] of graph.elements) {\n const interaction = getComponentDescriptor(info.componentType)?.interaction;\n if (info.kind === 'Component' && interaction && OPERATED.has(interaction) && !graph.contracts.has(name)) {\n pressable.add(name);\n }\n }\n return { pressable, scales };\n}\n","import type { DataSource } from './dataSource';\nimport type { DataSourceContract, Row } from './types';\n\nconst typeOfValue = (value: unknown): string =>\n typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean' ? typeof value : 'other';\n\nexport function checkData(contract: DataSourceContract, data: ReturnType<DataSource['get']>): string | null {\n const rows = Array.isArray(data) ? data : [data];\n if ((contract.mode === 'table') !== Array.isArray(data)) {\n return `DataSource '${contract.name}' is a ${contract.mode} source but delivered ${Array.isArray(data) ? 'rows' : 'a record'}.`;\n }\n for (const row of rows as Row[]) {\n for (const [field, type] of Object.entries(contract.fields)) {\n if (typeOfValue(row[field]) !== type) {\n return `'${contract.name}.${field}' should be ${contract.declared[field]}, got ${typeOfValue(row[field])}.`;\n }\n if (contract.declared[field] === 'int' && !Number.isInteger(row[field])) {\n return `'${contract.name}.${field}' should be a whole number (int), got ${String(row[field])}.`;\n }\n }\n }\n return null;\n}\n","import { type Component, type ComponentValue, isGenericComponent } from '../model/component';\nimport type { RenderInput } from '../renderInput/types';\nimport type { BindingValue, BoundProperty } from './types';\n\ntype Apply = (input: RenderInput, path: string[], value: BindingValue) => void;\n\nconst findChart = (input: RenderInput, id: string) => input.charts?.find(candidate => candidate.id === id);\n\nfunction applyToSeries(\n input: RenderInput,\n path: string[],\n change: (series: { values: unknown; label: string }) => void,\n): void {\n const chart = findChart(input, path[0]);\n if (!chart) {\n return;\n }\n let series = chart.series.find(candidate => candidate.id === path[1]);\n if (!series) {\n series = { id: path[1], label: path[1], values: [] };\n chart.series.push(series);\n }\n change(series);\n}\n\nexport function findComponent(input: RenderInput, id: string): Component | undefined {\n return (input.components ?? input.widgets)?.find(candidate => candidate.id === id);\n}\n\nexport function writeComponentValue(input: RenderInput, id: string, value: ComponentValue): void {\n const component = findComponent(input, id);\n if (!component) {\n return;\n }\n component.value = isGenericComponent(component) ? value : String(value);\n}\n\nexport function writeComponentValueEnd(input: RenderInput, id: string, value: number): void {\n const component = findComponent(input, id);\n if (component && isGenericComponent(component)) {\n component.properties.valueEnd = value;\n }\n}\n\nexport function writeComponentDisabled(input: RenderInput, id: string, disabled: boolean): void {\n const component = findComponent(input, id);\n if (component && isGenericComponent(component)) {\n component.disabled = disabled;\n }\n}\n\nexport function isComponentDisabled(input: RenderInput, id: string): boolean {\n const component = findComponent(input, id);\n return component !== undefined && isGenericComponent(component) && component.disabled;\n}\n\nfunction setShape(input: RenderInput, path: string[], change: (shape: RenderInput['shapes'][number]) => void): void {\n const shape = input.shapes.find(candidate => candidate.id === path[0]);\n if (shape) {\n change(shape);\n }\n}\n\nexport const APPLY: Record<string, Apply> = {\n 'Chart.categories': (input, path, value) => {\n const chart = findChart(input, path[0]);\n if (chart) {\n chart.config = { ...(chart.config ?? {}), categories: value as string[] } as typeof chart.config;\n }\n },\n 'Chart.text': (input, path, value) => {\n const chart = findChart(input, path[0]);\n if (chart) {\n chart.title = value as string;\n }\n },\n 'Series.values': (input, path, value) => applyToSeries(input, path, series => (series.values = value)),\n 'Series.label': (input, path, value) => applyToSeries(input, path, series => (series.label = value as string)),\n 'Shape.text': (input, path, value) => {\n const shape = input.shapes.find(candidate => candidate.id === path[0]);\n if (shape) {\n shape.text = value as string;\n }\n },\n 'Shape.fill': (input, path, value) => setShape(input, path, shape => (shape.fillColor = value as string)),\n 'Shape.stroke': (input, path, value) => setShape(input, path, shape => (shape.strokeColor = value as string)),\n 'Shape.textColor': (input, path, value) => setShape(input, path, shape => (shape.textColor = value as string)),\n 'Shape.opacity': (input, path, value) => setShape(input, path, shape => (shape.opacity = value as number)),\n 'Component.value': (input, path, value) => writeComponentValue(input, path[0], value as ComponentValue),\n 'Component.valueEnd': (input, path, value) => writeComponentValueEnd(input, path[0], value as number),\n 'Component.disabled': (input, path, value) => writeComponentDisabled(input, path[0], value === true),\n};\n\nexport function applyShader(\n input: RenderInput,\n binding: BoundProperty,\n value: BindingValue,\n ownerId?: string,\n): string[] {\n const owners: string[] = [];\n for (const shape of input.shapes) {\n if (shape.shader?.name === binding.ownerPath[0] && (ownerId === undefined || shape.id === ownerId)) {\n // Shapes that use one Shader share its object, so each one gets its own copy to hold its own value.\n shape.shader = {\n ...shape.shader,\n parameters: { ...shape.shader.parameters, [binding.property]: value as number },\n };\n owners.push(shape.id);\n }\n }\n return owners;\n}\n","import { type ComponentValue, getComponentDescriptor } from '../model/component';\nimport type { RenderResult } from '../render';\nimport { sflToRenderInput } from '../renderInput/fromSfl';\nimport type { RenderInput } from '../renderInput/types';\nimport { parse } from '../sflLanguage';\nimport { expandDocument } from '../sflLanguage/expansion';\nimport { findComponent } from './applyValue';\nimport type { DataSource } from './dataSource';\nimport { type BindingGraph, buildBindingGraph } from './graph';\nimport type { BindingRuntimeOptions, ElementState, LiveChange } from './runtimeTypes';\nimport type { BindingDiagnostic, BindingValue, BoundProperty } from './types';\n\nexport interface RuntimeState {\n options: BindingRuntimeOptions;\n graph: BindingGraph;\n diagnostics: BindingDiagnostic[];\n input: RenderInput;\n sources: Map<string, DataSource>;\n applied: Map<string, string>;\n dirty: Set<BoundProperty>;\n listeners: Set<(result: RenderResult) => void>;\n warned: Set<string>;\n liveListeners: Set<(change: LiveChange) => void>;\n liveState: Map<string, LiveChange>;\n elementState: Map<string, ElementState>;\n scheduled: boolean;\n renderNeeded: boolean;\n}\n\nfunction initialValue(input: RenderInput, id: string, componentType: string | undefined): ComponentValue {\n const descriptor = getComponentDescriptor(componentType);\n const current = findComponent(input, id)?.value;\n if (current === undefined) {\n return descriptor?.value?.default ?? 0;\n }\n if (descriptor?.value?.type === 'number') {\n const value = Number(current);\n return Number.isFinite(value) ? value : descriptor.value.default;\n }\n return current;\n}\n\nexport function createRuntimeState(sfl: string, options: BindingRuntimeOptions): RuntimeState {\n const graph = buildBindingGraph(expandDocument(parse(sfl)));\n const input = structuredClone(sflToRenderInput(sfl));\n const elementState = new Map<string, ElementState>();\n for (const [name, info] of graph.elements) {\n if (!graph.contracts.has(name)) {\n elementState.set(name, {\n pressed: false,\n hovered: false,\n focused: false,\n pointer: 0,\n value: initialValue(input, name, info.componentType),\n });\n }\n }\n return {\n options,\n graph,\n diagnostics: [...graph.diagnostics],\n input,\n sources: new Map(),\n applied: new Map(),\n dirty: new Set(),\n listeners: new Set(),\n warned: new Set(),\n liveListeners: new Set(),\n liveState: new Map(),\n elementState,\n scheduled: false,\n renderNeeded: false,\n };\n}\n\nexport function readValue(state: RuntimeState, path: string[]): BindingValue {\n const [name, field] = path;\n const element = state.sources.has(name) ? undefined : state.elementState.get(name);\n if (element) {\n return element[field as keyof ElementState];\n }\n const data = state.sources.get(name)?.get();\n if (data === undefined) {\n throw new Error(`DataSource '${name}' has no data yet.`);\n }\n return Array.isArray(data)\n ? (data.map(row => row[field]) as BindingValue)\n : ((data as Record<string, unknown>)[field] as BindingValue);\n}\n\nexport function missingSource(state: RuntimeState, binding: BoundProperty): string | undefined {\n return binding.dependencies\n .map(dependency => dependency.split('.')[0])\n .find(name => name !== 'self' && !state.sources.has(name) && !state.elementState.has(name));\n}\n","import { type ComponentValue, isBuiltInComponentType } from '../model/component';\nimport { type RenderResult, renderCanvas } from '../render';\nimport { APPLY, applyShader } from './applyValue';\nimport { evaluate } from './expression';\nimport { missingSource, type RuntimeState, readValue } from './runtimeState';\nimport type { LiveChange } from './runtimeTypes';\nimport type { BoundProperty } from './types';\n\nfunction announce(state: RuntimeState, id: string, change: LiveChange): void {\n state.liveState.set(id, change);\n for (const listener of [...state.liveListeners]) {\n listener(change);\n }\n}\n\nfunction applyComponentValue(state: RuntimeState, binding: BoundProperty, value: ComponentValue): boolean {\n const id = binding.ownerPath[0];\n const element = state.elementState.get(id);\n if (element) {\n element.value = value;\n markDirty(state, id);\n }\n if (!isBuiltInComponentType(state.graph.elements.get(id)?.componentType)) {\n return true;\n }\n announce(state, binding.id, { kind: 'component', id, value: value as number });\n return false;\n}\n\nfunction warnMissingSource(state: RuntimeState, binding: BoundProperty, missing: string): void {\n if (state.warned.has(missing)) {\n return;\n }\n state.warned.add(missing);\n state.diagnostics.push({\n severity: 'warning',\n code: 'source-not-registered',\n message: `DataSource '${missing}' has no registered source, so '${binding.property}' stays empty.`,\n line: binding.line,\n col: binding.col,\n });\n}\n\nfunction evaluateBinding(state: RuntimeState, binding: BoundProperty): boolean {\n const missing = missingSource(state, binding);\n if (missing) {\n warnMissingSource(state, binding, missing);\n return false;\n }\n const readsSelf = binding.dependencies.includes('self.id');\n if (binding.ownerKind === 'Shader' && readsSelf) {\n const owners = state.input.shapes.filter(shape => shape.shader?.name === binding.ownerPath[0]);\n for (const owner of owners) {\n const value = evaluate(binding.expr, {\n read: path => (path[0] === 'self' && path[1] === 'id' ? owner.id : readValue(state, path)),\n });\n const appliedId = `${binding.id}.${owner.id}`;\n const key = JSON.stringify(value);\n if (state.applied.get(appliedId) === key) {\n continue;\n }\n state.applied.set(appliedId, key);\n applyShader(state.input, binding, value, owner.id);\n announce(state, appliedId, {\n kind: 'shader',\n owners: [owner.id],\n parameters: { [binding.property]: value as number },\n });\n }\n return false;\n }\n const selfId = binding.ownerKind === 'Shader' ? undefined : binding.ownerPath[0];\n const value = evaluate(binding.expr, {\n read: path => (path[0] === 'self' && path[1] === 'id' && selfId ? selfId : readValue(state, path)),\n });\n const key = JSON.stringify(value);\n if (state.applied.get(binding.id) === key) {\n return false;\n }\n state.applied.set(binding.id, key);\n if (binding.ownerKind === 'Shader') {\n announce(state, binding.id, {\n kind: 'shader',\n owners: applyShader(state.input, binding, value),\n parameters: { [binding.property]: value as number },\n });\n return false;\n }\n APPLY[`${binding.ownerKind === 'Text' ? 'Shape' : binding.ownerKind}.${binding.property}`]?.(\n state.input,\n binding.ownerPath,\n value,\n );\n if (binding.ownerKind === 'Component' && binding.property === 'value') {\n return applyComponentValue(state, binding, value as ComponentValue);\n }\n return true;\n}\n\nexport function flush(state: RuntimeState): RenderResult | null {\n state.scheduled = false;\n let changed = state.renderNeeded;\n state.renderNeeded = false;\n for (const binding of state.dirty) {\n changed = evaluateBinding(state, binding) || changed;\n }\n state.dirty.clear();\n if (!changed) {\n return null;\n }\n const result = renderCanvas(state.input, { ...state.options.renderOptions, linkHitAreas: true });\n for (const listener of [...state.listeners]) {\n listener(result);\n }\n return result;\n}\n\nexport function schedule(state: RuntimeState): void {\n if (!state.scheduled) {\n state.scheduled = true;\n queueMicrotask(() => flush(state));\n }\n}\n\nexport function markDirty(state: RuntimeState, name: string): void {\n for (const [field, bindings] of state.graph.byField) {\n if (field.startsWith(`${name}.`)) {\n for (const binding of bindings) {\n state.dirty.add(binding);\n }\n }\n }\n}\n","import type { MutableDataSource } from './dataSource';\nimport { markDirty, schedule } from './evaluation';\nimport { collectRefs, evaluate } from './expression';\nimport { type RuntimeState, readValue } from './runtimeState';\nimport type { ElementState } from './runtimeTypes';\nimport type { BoundHandler, Row } from './types';\nimport { TICK_EVENT } from './types';\n\nexport function runHandler(state: RuntimeState, handler: BoundHandler, delta?: number, selfId?: string): void {\n const env = {\n read: (path: string[]) => {\n if (path[0] === 'time' && path[1] === 'delta') {\n return delta ?? 0;\n }\n if (path[0] === 'self' && path[1] === 'id' && selfId) {\n return selfId;\n }\n return readValue(state, path);\n },\n };\n for (const assignment of handler.assignments) {\n const target = state.sources.get(assignment.source);\n const readable = collectRefs(assignment.expr).every(\n ([name]) =>\n name === 'time' ||\n (name === 'self' && Boolean(selfId)) ||\n state.sources.has(name) ||\n state.elementState.has(name),\n );\n if (!target || !('set' in target) || !readable) {\n continue;\n }\n let value = evaluate(assignment.expr, env);\n if (typeof value === 'number') {\n value =\n state.graph.contracts.get(assignment.source)?.declared[assignment.field] === 'int' ? Math.round(value) : value;\n if (!Number.isFinite(value)) {\n continue;\n }\n }\n const row = target.get() as Row;\n if (row[assignment.field] !== value) {\n (target as MutableDataSource).set({ ...row, [assignment.field]: value });\n }\n }\n}\n\nexport function dispatch(state: RuntimeState, id: string, event: string): void {\n for (const handler of state.graph.handlers) {\n if (handler.event === event && handler.ownerKind !== 'DataSource' && handler.ownerPath[0] === id) {\n runHandler(state, handler, undefined, id);\n }\n }\n}\n\nexport function runTick(state: RuntimeState, seconds: number): void {\n for (const handler of state.graph.handlers) {\n if (handler.event === TICK_EVENT) {\n runHandler(state, handler, seconds);\n }\n }\n}\n\nexport function setElementState(state: RuntimeState, id: string, patch: Partial<ElementState>): void {\n const current = state.elementState.get(id);\n if (!current || (Object.keys(patch) as Array<keyof ElementState>).every(key => current[key] === patch[key])) {\n return;\n }\n Object.assign(current, patch);\n markDirty(state, id);\n schedule(state);\n}\n","import { type ComponentValue, getComponentDescriptor, isGenericComponent } from '../model/component';\nimport { sliderReach } from '../model/component/sliderReach';\nimport { findComponent, isComponentDisabled, writeComponentValue, writeComponentValueEnd } from './applyValue';\nimport type { MutableDataSource } from './dataSource';\nimport { markDirty, schedule } from './evaluation';\nimport { dispatch, setElementState } from './handlers';\nimport type { RuntimeState } from './runtimeState';\nimport { type BoundProperty, CHANGE_EVENT, type Row } from './types';\n\nfunction descriptorOf(state: RuntimeState, id: string) {\n const info = state.graph.elements.get(id);\n return info?.kind === 'Component' ? getComponentDescriptor(info.componentType) : undefined;\n}\n\nfunction valueBinding(state: RuntimeState, id: string, property = 'value'): BoundProperty | undefined {\n return state.graph.bindings.find(\n binding => binding.ownerKind === 'Component' && binding.ownerPath[0] === id && binding.property === property,\n );\n}\n\nfunction writeBack(state: RuntimeState, binding: BoundProperty, value: ComponentValue): void {\n const target = binding.expr.kind === 'ref' ? binding.expr.path : undefined;\n const source = target ? state.sources.get(target[0]) : undefined;\n if (!target || !source || !('set' in source)) {\n return;\n }\n const row = source.get() as Row;\n if (row[target[1]] !== value) {\n (source as MutableDataSource).set({ ...row, [target[1]]: value });\n }\n}\n\n// The second value of a component that holds two, such as the upper end of a range.\nfunction changeValueEnd(state: RuntimeState, id: string, next: number): boolean {\n const component = findComponent(state.input, id);\n if (\n !component ||\n !isGenericComponent(component) ||\n component.properties.valueEnd === next ||\n isComponentDisabled(state.input, id)\n ) {\n return false;\n }\n const binding = valueBinding(state, id, 'valueEnd');\n if (binding && binding.operator !== '<->') {\n return false;\n }\n writeComponentValueEnd(state.input, id, next);\n state.renderNeeded = true;\n if (binding) {\n state.applied.set(binding.id, JSON.stringify(next));\n writeBack(state, binding, next);\n }\n markDirty(state, id);\n dispatch(state, id, CHANGE_EVENT);\n schedule(state);\n return true;\n}\n\nexport function changeComponentValue(\n state: RuntimeState,\n id: string,\n next: ComponentValue,\n property: 'value' | 'valueEnd' = 'value',\n): boolean {\n if (property === 'valueEnd') {\n return typeof next === 'number' && changeValueEnd(state, id, next);\n }\n const spec = descriptorOf(state, id)?.value;\n const element = state.elementState.get(id);\n if (!spec?.writable || !element || typeof next !== spec.type || element.value === next) {\n return false;\n }\n if (isComponentDisabled(state.input, id)) {\n return false;\n }\n const binding = valueBinding(state, id);\n if (binding && binding.operator !== '<->') {\n return false;\n }\n element.value = next;\n writeComponentValue(state.input, id, next);\n state.renderNeeded = true;\n if (binding) {\n state.applied.set(binding.id, JSON.stringify(next));\n writeBack(state, binding, next);\n }\n markDirty(state, id);\n dispatch(state, id, CHANGE_EVENT);\n schedule(state);\n return true;\n}\n\nconst TAU = Math.PI * 2;\n// Which thumb of a range a gesture holds: the one that was nearer where it began.\nconst grabbed = new WeakMap<RuntimeState, Map<string, 'start' | 'end'>>();\nconst within = (value: number): number => Math.min(1, Math.max(0, value));\n\n// How far along its range a slider is when the pointer is at a fraction of its width and of its height.\nfunction slideAlong(\n properties: Record<string, ComponentValue>,\n width: number,\n height: number,\n x: number,\n y: number,\n): number {\n const vertical = properties.direction === 'vertical';\n const length = vertical ? height : width;\n const reach = sliderReach(properties.variant, vertical ? width : height);\n const position = vertical ? 1 - y : x;\n return length > reach * 2 ? within((position * length - reach) / (length - reach * 2)) : position;\n}\n\n// How far round its range a knob is when the pointer is at a fraction of its width and of its height.\nfunction turnAlong(\n properties: Record<string, ComponentValue>,\n width: number,\n height: number,\n x: number,\n y: number,\n): number {\n const start = (Number(properties.start ?? 225) * Math.PI) / 180;\n const sweep = (Number(properties.sweep ?? 270) * Math.PI) / 180;\n const gap = TAU - sweep;\n const angle = Math.atan2(-(y - 0.5) * height, (x - 0.5) * width);\n const shifted = start - angle + gap / 2;\n return within(((((shifted % TAU) + TAU) % TAU) - gap / 2) / sweep);\n}\n\n// A pointer in a slider, a knob or a row of options becomes the value of the component. It comes as fractions of the width and the height.\nexport function slideElement(state: RuntimeState, id: string, x: number, y = 0): void {\n const component = findComponent(state.input, id);\n if (!component || !isGenericComponent(component)) {\n return;\n }\n const kind = descriptorOf(state, id)?.interaction;\n const { properties } = component;\n if (kind === 'pick') {\n const count = String(properties.options ?? '')\n .split(',')\n .filter(option => option.trim()).length;\n if (count > 0) {\n changeComponentValue(state, id, Math.min(count - 1, Math.floor(x * count)));\n }\n return;\n }\n const along =\n kind === 'turn'\n ? turnAlong(properties, component.width, component.height, x, y)\n : slideAlong(properties, component.width, component.height, x, y);\n const min = Number(properties.min ?? 0);\n const max = Number(properties.max ?? 100);\n const step = Number(properties.step ?? 0);\n let value = min + along * (max - min);\n if (step > 0) {\n value = min + Math.round((value - min) / step) * step;\n }\n const taken = Number(Math.min(max, Math.max(min, value)).toFixed(6));\n if (kind !== 'range') {\n changeComponentValue(state, id, taken);\n return;\n }\n const low = Number(component.value);\n const high = Number(properties.valueEnd ?? max);\n const holds = grabbed.get(state) ?? new Map<string, 'start' | 'end'>();\n grabbed.set(state, holds);\n if (!holds.has(id)) {\n holds.set(id, taken >= high || (taken > low && taken - low > high - taken) ? 'end' : 'start');\n }\n // The thumbs do not pass each other.\n if (holds.get(id) === 'start') {\n changeComponentValue(state, id, Math.min(taken, high));\n } else {\n changeComponentValue(state, id, Math.max(taken, low), 'valueEnd');\n }\n}\n\nfunction reactToActivation(state: RuntimeState, id: string): void {\n const element = state.elementState.get(id);\n const descriptor = descriptorOf(state, id);\n if (element && descriptor?.interaction === 'toggle' && descriptor.value?.type === 'boolean') {\n changeComponentValue(state, id, element.value !== true);\n }\n}\n\nexport function pressElement(state: RuntimeState, id: string): void {\n grabbed.get(state)?.delete(id);\n if (isComponentDisabled(state.input, id)) {\n return;\n }\n setElementState(state, id, { pressed: true });\n dispatch(state, id, 'onPress');\n}\n\nexport function releaseElement(state: RuntimeState, id: string, tapped: boolean): void {\n grabbed.get(state)?.delete(id);\n setElementState(state, id, { pressed: false });\n if (isComponentDisabled(state.input, id)) {\n return;\n }\n if (tapped) {\n reactToActivation(state, id);\n }\n dispatch(state, id, 'onRelease');\n if (tapped) {\n dispatch(state, id, 'onTap');\n }\n}\n\nexport function activateElement(state: RuntimeState, id: string): void {\n if (isComponentDisabled(state.input, id)) {\n return;\n }\n reactToActivation(state, id);\n dispatch(state, id, 'onTap');\n}\n","import { type RenderOptions, type RenderResult, renderCanvas } from '../render';\nimport { checkData } from './checkData';\nimport type { DataSource } from './dataSource';\nimport { flush, markDirty, schedule } from './evaluation';\nimport { dispatch, runTick, setElementState } from './handlers';\nimport { interactiveElements } from './interactive';\nimport { createRuntimeState, type RuntimeState } from './runtimeState';\nimport type { BindingRuntime, BindingRuntimeOptions, BindingTarget, LiveChange } from './runtimeTypes';\nimport type { Row } from './types';\nimport { activateElement, changeComponentValue, pressElement, releaseElement, slideElement } from './userInput';\n\nfunction registerSource(state: RuntimeState, name: string, source: DataSource): () => void {\n const contract = state.graph.contracts.get(name);\n if (!contract) {\n throw new Error(`No DataSource '${name}' is declared in the SFL.`);\n }\n const accept = (): boolean => {\n const problem = checkData(contract, source.get());\n if (problem) {\n state.diagnostics.push({ severity: 'error', code: 'data-type-mismatch', message: problem, line: 0, col: 0 });\n return false;\n }\n return true;\n };\n const adopt = () => {\n if (accept()) {\n state.sources.set(name, source);\n state.warned.delete(name);\n markDirty(state, name);\n schedule(state);\n }\n };\n adopt();\n const unsubscribe = source.subscribe(adopt);\n return () => {\n unsubscribe();\n state.sources.delete(name);\n };\n}\n\nfunction pushLiveChange(target: BindingTarget, change: LiveChange): void {\n if (change.kind === 'component') {\n (target.setComponentValue ?? target.setWidgetValue)?.call(target, change.id, change.value);\n return;\n }\n for (const owner of change.owners) {\n target.setShaderParameters?.(owner, change.parameters);\n }\n}\n\nfunction attach(state: RuntimeState, target: BindingTarget): () => void {\n const send = (change: LiveChange) => pushLiveChange(target, change);\n state.liveListeners.add(send);\n for (const change of state.liveState.values()) {\n send(change);\n }\n const listener = (result: RenderResult) => target.update({ svg: result.svg });\n state.listeners.add(listener);\n for (const binding of state.graph.bindings) {\n state.dirty.add(binding);\n }\n flush(state);\n return () => {\n state.listeners.delete(listener);\n state.liveListeners.delete(send);\n };\n}\n\nexport function createBindingRuntime(sfl: string, options: BindingRuntimeOptions = {}): BindingRuntime {\n const state = createRuntimeState(sfl, options);\n for (const binding of state.graph.bindings) {\n if (binding.dependencies.length === 0) {\n state.dirty.add(binding);\n }\n }\n if (state.dirty.size > 0) {\n schedule(state);\n }\n\n return {\n diagnostics: state.diagnostics,\n graph: state.graph,\n interactive: interactiveElements(state.graph),\n input: state.input,\n registerSource: (name, source) => registerSource(state, name, source),\n setElementState: (id, patch) => setElementState(state, id, patch),\n press: id => pressElement(state, id),\n release: (id, tapped) => releaseElement(state, id, tapped),\n activate: id => activateElement(state, id),\n change: (id, value) => changeComponentValue(state, id, value),\n slide: (id, x, y) => slideElement(state, id, x, y),\n drag(id, pointer) {\n if (pointer !== undefined) {\n setElementState(state, id, { pointer });\n }\n dispatch(state, id, 'onDrag');\n },\n tick: seconds => runTick(state, seconds),\n flush: () => flush(state),\n onRender(listener) {\n state.listeners.add(listener);\n return () => state.listeners.delete(listener);\n },\n attach: target => attach(state, target),\n };\n}\n\nexport interface RenderBoundOptions extends RenderOptions {\n data?: Record<string, Row | Row[]>;\n}\n\nexport function renderBound(sfl: string, options: RenderBoundOptions = {}): RenderResult {\n const { data = {}, ...renderOptions } = options;\n const runtime = createBindingRuntime(sfl, { renderOptions });\n for (const [name, rows] of Object.entries(data)) {\n runtime.registerSource(name, { get: () => rows, subscribe: () => () => undefined });\n }\n runtime.flush();\n return renderCanvas(runtime.input, renderOptions);\n}\n"]}
1
+ {"version":3,"sources":["../src/binding/types.ts","../src/binding/contract.ts","../src/binding/dataSource.ts","../src/binding/componentBinding.ts","../src/binding/expression.ts","../src/binding/targets.ts","../src/binding/graph.ts","../src/binding/interactive.ts","../src/binding/checkData.ts","../src/binding/applyValue.ts","../src/binding/runtimeState.ts","../src/binding/evaluation.ts","../src/binding/handlers.ts","../src/binding/userInput.ts","../src/binding/runtime.ts"],"names":["value","key"],"mappings":"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","file":"chunk-UD6IG2PG.js","sourcesContent":["import type { BindingOperator, BlockKind, SflExpr } from '../sflLanguage/ast';\n\nexport type ScalarType = 'number' | 'string' | 'boolean';\nexport type BindingType = ScalarType | { list: ScalarType };\nexport type BindingValue = number | string | boolean | number[] | string[] | boolean[];\n\nconst DECLARED: Record<string, ScalarType> = {\n number: 'number',\n int: 'number',\n float: 'number',\n string: 'string',\n boolean: 'boolean',\n bool: 'boolean',\n};\n\nexport const scalarOf = (declared: string): ScalarType | undefined => DECLARED[declared];\n\nexport const typeName = (type: BindingType): string => (typeof type === 'string' ? type : `list<${type.list}>`);\n\nexport const sameType = (left: BindingType, right: BindingType): boolean => typeName(left) === typeName(right);\n\nexport type SourceMode = 'table' | 'record';\n\nexport type Row = Record<string, unknown>;\n\nexport interface DataSourceContract {\n name: string;\n mode: SourceMode;\n fields: Record<string, ScalarType>;\n declared: Record<string, string>;\n}\n\nexport interface BindingDiagnostic {\n severity: 'error' | 'warning';\n code: string;\n message: string;\n line: number;\n col: number;\n}\n\nexport interface BoundProperty {\n id: string;\n ownerKind: BlockKind;\n ownerPath: string[];\n property: string;\n operator: BindingOperator;\n expr: SflExpr;\n type: BindingType;\n dependencies: string[];\n line: number;\n col: number;\n}\n\nexport interface BoundAssignment {\n source: string;\n field: string;\n expr: SflExpr;\n type: ScalarType;\n line: number;\n col: number;\n}\n\nexport interface BoundHandler {\n id: string;\n ownerKind: BlockKind;\n ownerPath: string[];\n event: string;\n assignments: BoundAssignment[];\n line: number;\n col: number;\n}\n\nexport interface ElementInfo {\n kind: BlockKind;\n componentType?: string;\n}\n\nexport const POINTER_EVENTS = ['onPress', 'onRelease', 'onTap', 'onDrag'] as const;\nexport const CHANGE_EVENT = 'onChange';\nexport const TICK_EVENT = 'onTick';\n","import type { SflBlock, SflDocument, SflValue } from '../sflLanguage/ast';\nimport { type BindingDiagnostic, type DataSourceContract, type SourceMode, scalarOf } from './types';\n\nfunction identOf(value: SflValue | undefined): string | undefined {\n return value?.type === 'ident' ? value.segments.join('.') : undefined;\n}\n\nfunction readContract(block: SflBlock, diagnostics: BindingDiagnostic[]): DataSourceContract {\n const properties = block.entries.flatMap(entry => (entry.type === 'property' ? [entry.property] : []));\n const mode: SourceMode =\n identOf(properties.find(property => property.key === 'mode')?.value) === 'record' ? 'record' : 'table';\n const contract: DataSourceContract = { name: block.name, mode, fields: {}, declared: {} };\n for (const entry of block.entries) {\n if (entry.type === 'fields') {\n for (const field of entry.fields) {\n const declared = identOf(field.value) ?? '';\n const scalar = scalarOf(declared);\n if (scalar) {\n contract.fields[field.key] = scalar;\n contract.declared[field.key] = declared;\n } else {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-field-type',\n message: `Field '${block.name}.${field.key}' has unknown type '${declared}' (use int, float, number, string or bool).`,\n line: 0,\n col: 0,\n });\n }\n }\n }\n }\n return contract;\n}\n\nexport function visitBlocks(blocks: SflBlock[], visit: (block: SflBlock) => void): void {\n for (const block of blocks) {\n visit(block);\n visitBlocks(\n block.entries.flatMap(entry => (entry.type === 'block' ? [entry.block] : [])),\n visit,\n );\n }\n}\n\nexport function collectContracts(sflDocument: SflDocument): {\n contracts: Map<string, DataSourceContract>;\n diagnostics: BindingDiagnostic[];\n} {\n const contracts = new Map<string, DataSourceContract>();\n const diagnostics: BindingDiagnostic[] = [];\n visitBlocks(sflDocument.blocks, block => {\n if (block.kind !== 'DataSource') {\n return;\n }\n if (contracts.has(block.name)) {\n diagnostics.push({\n severity: 'error',\n code: 'duplicate-data-source',\n message: `DataSource '${block.name}' is declared more than once.`,\n line: 0,\n col: 0,\n });\n return;\n }\n contracts.set(block.name, readContract(block, diagnostics));\n });\n return { contracts, diagnostics };\n}\n","import type { Row } from './types';\n\nexport type SourceListener = () => void;\n\nexport interface DataSource {\n get(): readonly Row[] | Row;\n subscribe(listener: SourceListener): () => void;\n}\n\nexport interface MutableDataSource extends DataSource {\n set(next: readonly Row[] | Row): void;\n}\n\nexport function createDataSource(initial: readonly Row[] | Row): MutableDataSource {\n let current = initial;\n const listeners = new Set<SourceListener>();\n return {\n get: () => current,\n set(next) {\n current = next;\n for (const listener of [...listeners]) {\n listener();\n }\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n","import { getComponentDescriptor } from '../model/component';\nimport type { SflExpr } from '../sflLanguage/ast';\nimport type { BindingType, DataSourceContract } from './types';\n\n// `valueEnd` is the second value of a component that holds two, such as the upper end of a range.\nexport const BINDABLE_COMPONENT_PROPERTIES = ['value', 'valueEnd', 'disabled'];\n\nexport function acceptsUserChange(componentType: string | undefined): boolean {\n return getComponentDescriptor(componentType)?.value?.writable === true;\n}\n\nexport function componentStateType(componentType: string | undefined, state: string): BindingType | undefined {\n const descriptor = getComponentDescriptor(componentType);\n if (state === 'focused') {\n return 'boolean';\n }\n if (state === 'pointer') {\n return descriptor?.pointerScale ? 'number' : undefined;\n }\n return state === 'value' ? descriptor?.value?.type : undefined;\n}\n\nexport function componentPropertyType(componentType: string | undefined, property: string): BindingType | undefined {\n if (property === 'disabled') {\n return 'boolean';\n }\n if (property === 'valueEnd') {\n return getComponentDescriptor(componentType)?.properties.valueEnd?.type === 'number' ? 'number' : undefined;\n }\n return property === 'value' ? getComponentDescriptor(componentType)?.value?.type : undefined;\n}\n\nexport function twoWayTargetProblem(\n key: string,\n expr: SflExpr,\n contracts: Map<string, DataSourceContract>,\n): string | undefined {\n const target = expr.kind === 'ref' ? expr.path : undefined;\n const contract = target?.length === 2 ? contracts.get(target[0]) : undefined;\n if (!target || contract?.mode !== 'record' || !contract.fields[target[1]]) {\n return `'<->' on '${key}' has to name one field of a record DataSource, as in <DataSource>.<field>.`;\n }\n return undefined;\n}\n","import type { SflExpr } from '../sflLanguage/ast';\nimport { type BindingType, type BindingValue, sameType, typeName } from './types';\n\nexport interface TypeScope {\n resolve(path: string[]): BindingType | undefined;\n}\n\nexport interface ValueEnv {\n read(path: string[]): BindingValue;\n}\n\ntype Report = (code: string, message: string) => void;\n\nconst isNumeric = (type: BindingType): boolean =>\n type === 'number' || (typeof type === 'object' && type.list === 'number');\nconst isList = (type: BindingType): boolean => typeof type === 'object';\n\nexport function collectRefs(expr: SflExpr): string[][] {\n switch (expr.kind) {\n case 'ref':\n return [expr.path];\n case 'unary':\n return collectRefs(expr.operand);\n case 'binary':\n return [...collectRefs(expr.left), ...collectRefs(expr.right)];\n case 'call':\n return expr.args.flatMap(collectRefs);\n default:\n return [];\n }\n}\n\nfunction inferBinary(\n expr: Extract<SflExpr, { kind: 'binary' }>,\n scope: TypeScope,\n report: Report,\n): BindingType | undefined {\n const left = inferType(expr.left, scope, report);\n const right = inferType(expr.right, scope, report);\n if (!left || !right) {\n return undefined;\n }\n const { operator } = expr;\n if (operator === '&&' || operator === '||') {\n if (left !== 'boolean' || right !== 'boolean') {\n report('type-mismatch', `'${operator}' needs two booleans, got ${typeName(left)} and ${typeName(right)}.`);\n return undefined;\n }\n return 'boolean';\n }\n if (['>', '<', '>=', '<='].includes(operator)) {\n if (left !== 'number' || right !== 'number') {\n report('type-mismatch', `'${operator}' compares two numbers, got ${typeName(left)} and ${typeName(right)}.`);\n return undefined;\n }\n return 'boolean';\n }\n if (operator === '==' || operator === '!=') {\n if (isList(left) || !sameType(left, right)) {\n report(\n 'type-mismatch',\n `'${operator}' compares two values of the same simple type, got ${typeName(left)} and ${typeName(right)}.`,\n );\n return undefined;\n }\n return 'boolean';\n }\n if (operator === '+' && !isList(left) && !isList(right) && (left === 'string' || right === 'string')) {\n return 'string';\n }\n if (!isNumeric(left) || !isNumeric(right)) {\n report('type-mismatch', `'${operator}' needs numbers, got ${typeName(left)} and ${typeName(right)}.`);\n return undefined;\n }\n return isList(left) || isList(right) ? { list: 'number' } : 'number';\n}\n\nconst MATH: Record<string, { arguments: number; apply(values: number[]): number }> = {\n round: { arguments: 1, apply: ([value]) => Math.round(value) },\n floor: { arguments: 1, apply: ([value]) => Math.floor(value) },\n ceil: { arguments: 1, apply: ([value]) => Math.ceil(value) },\n abs: { arguments: 1, apply: ([value]) => Math.abs(value) },\n min: { arguments: 2, apply: ([a, b]) => Math.min(a, b) },\n max: { arguments: 2, apply: ([a, b]) => Math.max(a, b) },\n clamp: { arguments: 3, apply: ([value, low, high]) => Math.min(high, Math.max(low, value)) },\n moveToward: {\n arguments: 3,\n apply: ([current, target, maxStep]) =>\n Math.abs(target - current) <= maxStep ? target : current + Math.sign(target - current) * maxStep,\n },\n};\n\nfunction inferMath(\n name: string,\n expr: Extract<SflExpr, { kind: 'call' }>,\n scope: TypeScope,\n report: Report,\n): BindingType | undefined {\n const spec = MATH[name];\n if (expr.args.length !== spec.arguments) {\n report('wrong-arguments', `${name}() takes exactly ${spec.arguments} argument${spec.arguments === 1 ? '' : 's'}.`);\n return undefined;\n }\n const types = expr.args.map(arg => inferType(arg, scope, report));\n if (types.some(type => !type)) {\n return undefined;\n }\n if (types.some(type => !isNumeric(type as BindingType))) {\n report(\n 'type-mismatch',\n `${name}() needs numbers, got ${types.map(type => typeName(type as BindingType)).join(', ')}.`,\n );\n return undefined;\n }\n return types.some(type => isList(type as BindingType)) ? { list: 'number' } : 'number';\n}\n\nfunction inferCall(\n expr: Extract<SflExpr, { kind: 'call' }>,\n scope: TypeScope,\n report: Report,\n): BindingType | undefined {\n const name = expr.callee.join('.');\n if (name in MATH) {\n return inferMath(name, expr, scope, report);\n }\n if (name !== 'when') {\n report('unknown-function', `Unknown function '${name}'. Available: when, ${Object.keys(MATH).join(', ')}.`);\n return undefined;\n }\n if (expr.args.length !== 3) {\n report('wrong-arguments', 'when(condition, then, else) takes exactly three arguments.');\n return undefined;\n }\n const [condition, whenTrue, whenFalse] = expr.args.map(arg => inferType(arg, scope, report));\n if (!condition || !whenTrue || !whenFalse) {\n return undefined;\n }\n if (condition !== 'boolean') {\n report('type-mismatch', `The condition of when() must be boolean, got ${typeName(condition)}.`);\n return undefined;\n }\n if (!sameType(whenTrue, whenFalse)) {\n report(\n 'type-mismatch',\n `when() branches must have the same type, got ${typeName(whenTrue)} and ${typeName(whenFalse)}.`,\n );\n return undefined;\n }\n return whenTrue;\n}\n\nexport function inferType(expr: SflExpr, scope: TypeScope, report: Report): BindingType | undefined {\n switch (expr.kind) {\n case 'number':\n return 'number';\n case 'string':\n return 'string';\n case 'boolean':\n return 'boolean';\n case 'ref': {\n const type = scope.resolve(expr.path);\n if (!type) {\n const name = expr.path.join('.');\n report(\n 'unknown-reference',\n name === 'time.delta'\n ? \"'time.delta' is only available in an onTick handler.\"\n : `Unknown reference '${name}'. Use <DataSource>.<field>, self.id, or <element>.pressed / hovered / pointer.`,\n );\n }\n return type;\n }\n case 'unary': {\n const operand = inferType(expr.operand, scope, report);\n const wanted = expr.operator === '!' ? 'boolean' : 'number';\n if (operand && operand !== wanted) {\n report('type-mismatch', `'${expr.operator}' needs a ${wanted}, got ${typeName(operand)}.`);\n return undefined;\n }\n return operand ? wanted : undefined;\n }\n case 'binary':\n return inferBinary(expr, scope, report);\n case 'call':\n return inferCall(expr, scope, report);\n }\n}\n\nfunction arithmetic(operator: string, left: number, right: number): number {\n switch (operator) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n default:\n return right === 0 ? 0 : left / right;\n }\n}\n\nconst text = (value: BindingValue): string =>\n typeof value === 'number' ? String(Math.round(value * 10) / 10) : String(value);\n\nfunction evaluateBinary(expr: Extract<SflExpr, { kind: 'binary' }>, env: ValueEnv): BindingValue {\n const left = evaluate(expr.left, env);\n if (expr.operator === '&&') {\n return Boolean(left) && Boolean(evaluate(expr.right, env));\n }\n if (expr.operator === '||') {\n return Boolean(left) || Boolean(evaluate(expr.right, env));\n }\n const right = evaluate(expr.right, env);\n switch (expr.operator) {\n case '>':\n return (left as number) > (right as number);\n case '<':\n return (left as number) < (right as number);\n case '>=':\n return (left as number) >= (right as number);\n case '<=':\n return (left as number) <= (right as number);\n case '==':\n return left === right;\n case '!=':\n return left !== right;\n }\n if (typeof left === 'string' || typeof right === 'string') {\n return text(left) + text(right);\n }\n const apply = (a: number, b: number) => arithmetic(expr.operator, a, b);\n if (Array.isArray(left) && Array.isArray(right)) {\n const length = Math.min(left.length, right.length);\n return Array.from({ length }, (_value, index) => apply(left[index] as number, right[index] as number));\n }\n if (Array.isArray(left)) {\n return left.map(value => apply(value as number, right as number));\n }\n if (Array.isArray(right)) {\n return right.map(value => apply(left as number, value as number));\n }\n return apply(left as number, right as number);\n}\n\nexport function evaluate(expr: SflExpr, env: ValueEnv): BindingValue {\n switch (expr.kind) {\n case 'number':\n case 'string':\n case 'boolean':\n return expr.value;\n case 'ref':\n return env.read(expr.path);\n case 'unary': {\n const operand = evaluate(expr.operand, env);\n return expr.operator === '!' ? !operand : -(operand as number);\n }\n case 'binary':\n return evaluateBinary(expr, env);\n case 'call': {\n const name = expr.callee.join('.');\n if (name in MATH) {\n const values = expr.args.map(arg => evaluate(arg, env));\n const length = Math.max(0, ...values.map(value => (Array.isArray(value) ? value.length : 0)));\n if (length === 0 && !values.some(Array.isArray)) {\n return MATH[name].apply(values as number[]);\n }\n return Array.from({ length }, (_value, index) =>\n MATH[name].apply(values.map(value => (Array.isArray(value) ? (value[index] as number) : (value as number)))),\n );\n }\n const [condition, whenTrue, whenFalse] = expr.args;\n return evaluate(condition, env) ? evaluate(whenTrue, env) : evaluate(whenFalse, env);\n }\n }\n}\n","import type { BlockKind } from '../sflLanguage/ast';\nimport type { BindingType } from './types';\n\nexport const BINDABLE_PROPERTIES: Partial<Record<BlockKind, Record<string, BindingType>>> = {\n Chart: { categories: { list: 'string' }, text: 'string' },\n Series: { values: { list: 'number' }, label: 'string' },\n Shape: { text: 'string', fill: 'string', stroke: 'string', textColor: 'string', opacity: 'number' },\n Text: { text: 'string', textColor: 'string', opacity: 'number' },\n};\n","import type { BlockKind, SflBinding, SflBlock, SflDocument, SflExpr, SflHandler } from '../sflLanguage/ast';\nimport {\n acceptsUserChange,\n BINDABLE_COMPONENT_PROPERTIES,\n componentPropertyType,\n componentStateType,\n twoWayTargetProblem,\n} from './componentBinding';\nimport { collectContracts, visitBlocks } from './contract';\nimport { collectRefs, inferType, type TypeScope } from './expression';\nimport { BINDABLE_PROPERTIES } from './targets';\nimport {\n type BindingDiagnostic,\n type BindingType,\n type BoundAssignment,\n type BoundHandler,\n type BoundProperty,\n CHANGE_EVENT,\n type DataSourceContract,\n type ElementInfo,\n POINTER_EVENTS,\n sameType,\n TICK_EVENT,\n typeName,\n} from './types';\n\nexport interface BindingGraph {\n contracts: Map<string, DataSourceContract>;\n bindings: BoundProperty[];\n handlers: BoundHandler[];\n elements: Map<string, ElementInfo>;\n byField: Map<string, BoundProperty[]>;\n diagnostics: BindingDiagnostic[];\n}\n\ninterface BindingSite {\n kind: BlockKind;\n path: string[];\n binding: SflBinding;\n}\n\nfunction collectSites(blocks: SflBlock[], chartPath: string[], sites: BindingSite[]): void {\n for (const block of blocks) {\n const path = block.kind === 'Series' ? [...chartPath, block.name] : [block.name];\n const ownChart = block.kind === 'Chart' ? [block.name] : chartPath;\n for (const entry of block.entries) {\n if (entry.type === 'binding') {\n sites.push({ kind: blockKind(block), path, binding: entry.binding });\n } else if (entry.type === 'style') {\n for (const binding of entry.style.bindings ?? []) {\n sites.push({ kind: blockKind(block), path, binding });\n }\n } else if (entry.type === 'block') {\n collectSites([entry.block], ownChart, sites);\n } else if (entry.type === 'data') {\n for (const inner of entry.data.entries) {\n if (inner.type === 'binding') {\n sites.push({ kind: 'Chart', path: ownChart, binding: inner.binding });\n } else if (inner.type === 'block') {\n collectSites([inner.block], ownChart, sites);\n }\n }\n }\n }\n }\n}\n\nfunction fieldType(contract: DataSourceContract, field: string): BindingType | undefined {\n const type = contract.fields[field];\n if (!type) {\n return undefined;\n }\n return contract.mode === 'table' ? { list: type } : type;\n}\n\nconst INTERACTIVE_KINDS: BlockKind[] = ['Shape', 'Text', 'Component'];\nconst blockKind = (block: SflBlock): BlockKind => (block.kind === 'Widget' ? 'Component' : block.kind);\n\nfunction collectElements(sflDocument: SflDocument): Map<string, ElementInfo> {\n const elements = new Map<string, ElementInfo>();\n visitBlocks(sflDocument.blocks, block => {\n if (!INTERACTIVE_KINDS.includes(blockKind(block)) || elements.has(block.name)) {\n return;\n }\n const type = block.entries.find(entry => entry.type === 'property' && entry.property.key === 'type');\n const value = type?.type === 'property' ? type.property.value : undefined;\n elements.set(block.name, {\n kind: blockKind(block),\n componentType: value?.type === 'ident' ? value.segments.join('.') : undefined,\n });\n });\n return elements;\n}\n\nfunction elementStateType(element: ElementInfo, state: string): BindingType | undefined {\n if (state === 'pressed' || state === 'hovered') {\n return 'boolean';\n }\n return element.kind === 'Component' ? componentStateType(element.componentType, state) : undefined;\n}\n\nfunction createScope(\n contracts: Map<string, DataSourceContract>,\n elements: Map<string, ElementInfo>,\n ticking = false,\n selfAvailable = false,\n): TypeScope {\n return {\n resolve(path) {\n if (path.length !== 2) {\n return undefined;\n }\n if (selfAvailable && path[0] === 'self' && path[1] === 'id') {\n return 'string';\n }\n const contract = contracts.get(path[0]);\n if (contract) {\n return fieldType(contract, path[1]);\n }\n if (ticking && path[0] === 'time' && path[1] === 'delta') {\n return 'number';\n }\n const element = elements.get(path[0]);\n return element ? elementStateType(element, path[1]) : undefined;\n },\n };\n}\n\nfunction qualify(expr: SflExpr, source: DataSourceContract): SflExpr {\n switch (expr.kind) {\n case 'ref':\n return expr.path.length === 1 && expr.path[0] in source.fields\n ? { kind: 'ref', path: [source.name, expr.path[0]] }\n : expr;\n case 'unary':\n return { ...expr, operand: qualify(expr.operand, source) };\n case 'binary':\n return { ...expr, left: qualify(expr.left, source), right: qualify(expr.right, source) };\n case 'call':\n return { ...expr, args: expr.args.map(arg => qualify(arg, source)) };\n default:\n return expr;\n }\n}\n\ninterface HandlerSite {\n kind: BlockKind;\n name: string;\n handler: SflHandler;\n}\n\nfunction collectHandlerSites(sflDocument: SflDocument): HandlerSite[] {\n const sites: HandlerSite[] = [];\n visitBlocks(sflDocument.blocks, block => {\n for (const entry of block.entries) {\n if (entry.type === 'handler') {\n sites.push({ kind: blockKind(block), name: block.name, handler: entry.handler });\n }\n }\n });\n return sites;\n}\n\ntype Report = (code: string, message: string, line?: number, col?: number) => void;\n\nfunction allowedEvents(kind: BlockKind, componentType: string | undefined): readonly string[] {\n if (kind === 'DataSource') {\n return [TICK_EVENT];\n }\n if (!INTERACTIVE_KINDS.includes(kind)) {\n return [];\n }\n const changes = kind === 'Component' && acceptsUserChange(componentType);\n return changes ? [...POINTER_EVENTS, CHANGE_EVENT] : POINTER_EVENTS;\n}\n\nfunction eventIsKnown(site: HandlerSite, componentType: string | undefined, report: Report): boolean {\n const { kind, name, handler } = site;\n const allowed = allowedEvents(kind, componentType);\n if (allowed.includes(handler.event)) {\n return true;\n }\n report(\n 'unknown-event',\n allowed.length\n ? `${kind} '${name}' has no event '${handler.event}' (events: ${allowed.join(', ')}).`\n : `${kind} '${name}' has no events; handlers belong on a Shape, Text, Component or DataSource.`,\n );\n return false;\n}\n\nfunction bindAssignment(\n assignment: SflHandler['assignments'][number],\n name: string,\n own: DataSourceContract | undefined,\n contracts: Map<string, DataSourceContract>,\n scope: TypeScope,\n report: Report,\n): BoundAssignment | undefined {\n const at = (code: string, message: string) => report(code, message, assignment.line, assignment.col);\n const target = assignment.target.join('.');\n const [source, field] = own && assignment.target.length === 1 ? [own.name, assignment.target[0]] : assignment.target;\n const contract = assignment.target.length <= 2 ? contracts.get(source) : undefined;\n if (!contract || field === undefined) {\n at('unknown-target', `'${target}' is not a field of a DataSource (write <DataSource>.<field>).`);\n return undefined;\n }\n if (own && contract !== own) {\n at('tick-foreign-target', `onTick of '${name}' can only change fields of '${name}', not '${target}'.`);\n return undefined;\n }\n if (contract.mode !== 'record') {\n at(\n 'target-not-record',\n `DataSource '${source}' is a table source; only record sources can be changed by a handler.`,\n );\n return undefined;\n }\n const wanted = contract.fields[field];\n if (!wanted) {\n at('unknown-target', `DataSource '${source}' has no field '${field}'.`);\n return undefined;\n }\n const expr = own ? qualify(assignment.expr, own) : assignment.expr;\n const actual = inferType(expr, scope, (code, message) => at(code, message));\n if (!actual) {\n return undefined;\n }\n if (!sameType(actual, wanted)) {\n at('type-mismatch', `'${target}' is ${wanted}, the expression is ${typeName(actual)}.`);\n return undefined;\n }\n return { source, field, expr, type: wanted, line: assignment.line, col: assignment.col };\n}\n\nfunction bindHandler(\n site: HandlerSite,\n contracts: Map<string, DataSourceContract>,\n elements: Map<string, ElementInfo>,\n diagnostics: BindingDiagnostic[],\n): BoundHandler | undefined {\n const { kind, name, handler } = site;\n const report: Report = (code, message, line = handler.line, col = handler.col) =>\n diagnostics.push({ severity: 'error', code, message, line, col });\n if (!eventIsKnown(site, elements.get(name)?.componentType, report)) {\n return undefined;\n }\n const ticking = kind === 'DataSource';\n const own = ticking ? contracts.get(name) : undefined;\n if (ticking && own?.mode !== 'record') {\n report('tick-needs-record', `DataSource '${name}' has to be a record source to change its fields on every tick.`);\n return undefined;\n }\n const scope = createScope(contracts, elements, ticking, !ticking);\n const assignments = handler.assignments.flatMap(\n assignment => bindAssignment(assignment, name, own, contracts, scope, report) ?? [],\n );\n return {\n id: `${kind}.${name}.${handler.event}`,\n ownerKind: kind,\n ownerPath: [name],\n event: handler.event,\n assignments,\n line: handler.line,\n col: handler.col,\n };\n}\n\nfunction warnNameCollisions(\n contracts: Map<string, DataSourceContract>,\n elements: Map<string, ElementInfo>,\n diagnostics: BindingDiagnostic[],\n): void {\n for (const name of elements.keys()) {\n if (contracts.has(name)) {\n diagnostics.push({\n severity: 'warning',\n code: 'name-collision',\n message: `'${name}' is a DataSource and an element; in expressions it means the DataSource.`,\n line: 0,\n col: 0,\n });\n }\n }\n}\n\nfunction expectedType(site: BindingSite, elements: Map<string, ElementInfo>): BindingType | undefined {\n const { kind, path, binding } = site;\n if (kind === 'Shader') {\n return 'number';\n }\n if (kind === 'Component') {\n return componentPropertyType(elements.get(path[0])?.componentType, binding.key);\n }\n return BINDABLE_PROPERTIES[kind]?.[binding.key];\n}\n\nfunction canBindTwoWay(site: BindingSite, elements: Map<string, ElementInfo>): boolean {\n const { kind, path, binding } = site;\n return (\n kind === 'Component' &&\n (binding.key === 'value' || binding.key === 'valueEnd') &&\n acceptsUserChange(elements.get(path[0])?.componentType)\n );\n}\n\ninterface RejectedOperator {\n code: string;\n message: string;\n severity: 'error' | 'warning';\n}\n\nfunction rejectedOperator(\n site: BindingSite,\n elements: Map<string, ElementInfo>,\n contracts: Map<string, DataSourceContract>,\n): RejectedOperator | undefined {\n const { binding } = site;\n const twoWay = binding.operator === '<->';\n if (binding.operator === '->' || (twoWay && !canBindTwoWay(site, elements))) {\n return {\n code: 'binding-operator-unsupported',\n message: `'${binding.operator}' on '${binding.key}' is parsed but not executed; '<->' works on the value of a component that the user can change, and '->' is not supported.`,\n severity: 'warning',\n };\n }\n const problem = twoWay ? twoWayTargetProblem(binding.key, binding.expr, contracts) : undefined;\n return problem ? { code: 'two-way-target', message: problem, severity: 'error' } : undefined;\n}\n\nfunction bindProperty(\n site: BindingSite,\n scope: TypeScope,\n elements: Map<string, ElementInfo>,\n contracts: Map<string, DataSourceContract>,\n diagnostics: BindingDiagnostic[],\n): BoundProperty | undefined {\n const { kind, path, binding } = site;\n const owner = path.join('.');\n const report = (code: string, message: string, severity: 'error' | 'warning' = 'error') =>\n diagnostics.push({ severity, code, message, line: binding.line, col: binding.col });\n const rejected = rejectedOperator(site, elements, contracts);\n if (rejected) {\n report(rejected.code, rejected.message, rejected.severity);\n return undefined;\n }\n const expected = expectedType(site, elements);\n if (!expected) {\n const allowed = kind === 'Component' ? BINDABLE_COMPONENT_PROPERTIES : Object.keys(BINDABLE_PROPERTIES[kind] ?? {});\n report(\n 'unknown-bound-property',\n `${kind} '${owner}' has no bindable property '${binding.key}'${allowed.length ? ` (bindable: ${allowed.join(', ')})` : ''}.`,\n );\n return undefined;\n }\n const actual = inferType(binding.expr, scope, report);\n if (!actual) {\n return undefined;\n }\n if (!sameType(actual, expected)) {\n report('type-mismatch', `'${binding.key}' expects ${typeName(expected)}, the expression is ${typeName(actual)}.`);\n return undefined;\n }\n return {\n id: `${kind}.${owner}.${binding.key}`,\n ownerKind: kind,\n ownerPath: path,\n property: binding.key,\n operator: binding.operator,\n expr: binding.expr,\n type: expected,\n dependencies: [...new Set(collectRefs(binding.expr).map(ref => ref.join('.')))],\n line: binding.line,\n col: binding.col,\n };\n}\n\nfunction indexByField(bindings: BoundProperty[]): Map<string, BoundProperty[]> {\n const byField = new Map<string, BoundProperty[]>();\n for (const binding of bindings) {\n for (const dependency of binding.dependencies) {\n byField.set(dependency, [...(byField.get(dependency) ?? []), binding]);\n }\n }\n return byField;\n}\n\nexport function buildBindingGraph(sflDocument: SflDocument): BindingGraph {\n const { contracts, diagnostics } = collectContracts(sflDocument);\n const elements = collectElements(sflDocument);\n warnNameCollisions(contracts, elements, diagnostics);\n const scope = createScope(contracts, elements, false, true);\n const sites: BindingSite[] = [];\n collectSites(sflDocument.blocks, [], sites);\n\n const bindings = sites.flatMap(site => bindProperty(site, scope, elements, contracts, diagnostics) ?? []);\n const handlers = collectHandlerSites(sflDocument).flatMap(\n site => bindHandler(site, contracts, elements, diagnostics) ?? [],\n );\n return { contracts, bindings, handlers, elements, byField: indexByField(bindings), diagnostics };\n}\n","import { getComponentDescriptor } from '../model/component';\nimport { collectRefs } from './expression';\nimport type { BindingGraph } from './graph';\n\nexport interface InteractiveElements {\n pressable: ReadonlySet<string>;\n scales: ReadonlySet<string>;\n}\n\nconst OPERATED = new Set(['toggle', 'press', 'slide', 'pick', 'turn', 'range']);\n\nexport function interactiveElements(graph: BindingGraph): InteractiveElements {\n const pressable = new Set<string>();\n const scales = new Set<string>();\n const note = ([name, state]: string[]) => {\n if (graph.contracts.has(name) || !graph.elements.has(name)) {\n return;\n }\n (state === 'pointer' ? scales : pressable).add(name);\n };\n for (const handler of graph.handlers) {\n if (handler.ownerKind !== 'DataSource') {\n pressable.add(handler.ownerPath[0]);\n }\n for (const assignment of handler.assignments) {\n collectRefs(assignment.expr).forEach(note);\n }\n }\n for (const binding of graph.bindings) {\n collectRefs(binding.expr).forEach(note);\n }\n for (const [name, info] of graph.elements) {\n const interaction = getComponentDescriptor(info.componentType)?.interaction;\n if (info.kind === 'Component' && interaction && OPERATED.has(interaction) && !graph.contracts.has(name)) {\n pressable.add(name);\n }\n }\n return { pressable, scales };\n}\n","import type { DataSource } from './dataSource';\nimport type { DataSourceContract, Row } from './types';\n\nconst typeOfValue = (value: unknown): string =>\n typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean' ? typeof value : 'other';\n\nexport function checkData(contract: DataSourceContract, data: ReturnType<DataSource['get']>): string | null {\n const rows = Array.isArray(data) ? data : [data];\n if ((contract.mode === 'table') !== Array.isArray(data)) {\n return `DataSource '${contract.name}' is a ${contract.mode} source but delivered ${Array.isArray(data) ? 'rows' : 'a record'}.`;\n }\n for (const row of rows as Row[]) {\n for (const [field, type] of Object.entries(contract.fields)) {\n if (typeOfValue(row[field]) !== type) {\n return `'${contract.name}.${field}' should be ${contract.declared[field]}, got ${typeOfValue(row[field])}.`;\n }\n if (contract.declared[field] === 'int' && !Number.isInteger(row[field])) {\n return `'${contract.name}.${field}' should be a whole number (int), got ${String(row[field])}.`;\n }\n }\n }\n return null;\n}\n","import { type Component, type ComponentValue, isGenericComponent } from '../model/component';\nimport type { RenderInput } from '../renderInput/types';\nimport type { BindingValue, BoundProperty } from './types';\n\ntype Apply = (input: RenderInput, path: string[], value: BindingValue) => void;\n\nconst findChart = (input: RenderInput, id: string) => input.charts?.find(candidate => candidate.id === id);\n\nfunction applyToSeries(\n input: RenderInput,\n path: string[],\n change: (series: { values: unknown; label: string }) => void,\n): void {\n const chart = findChart(input, path[0]);\n if (!chart) {\n return;\n }\n let series = chart.series.find(candidate => candidate.id === path[1]);\n if (!series) {\n series = { id: path[1], label: path[1], values: [] };\n chart.series.push(series);\n }\n change(series);\n}\n\nexport function findComponent(input: RenderInput, id: string): Component | undefined {\n return (input.components ?? input.widgets)?.find(candidate => candidate.id === id);\n}\n\nexport function writeComponentValue(input: RenderInput, id: string, value: ComponentValue): void {\n const component = findComponent(input, id);\n if (!component) {\n return;\n }\n component.value = isGenericComponent(component) ? value : String(value);\n}\n\nexport function writeComponentValueEnd(input: RenderInput, id: string, value: number): void {\n const component = findComponent(input, id);\n if (component && isGenericComponent(component)) {\n component.properties.valueEnd = value;\n }\n}\n\nexport function writeComponentDisabled(input: RenderInput, id: string, disabled: boolean): void {\n const component = findComponent(input, id);\n if (component && isGenericComponent(component)) {\n component.disabled = disabled;\n }\n}\n\nexport function isComponentDisabled(input: RenderInput, id: string): boolean {\n const component = findComponent(input, id);\n return component !== undefined && isGenericComponent(component) && component.disabled;\n}\n\nfunction setShape(input: RenderInput, path: string[], change: (shape: RenderInput['shapes'][number]) => void): void {\n const shape = input.shapes.find(candidate => candidate.id === path[0]);\n if (shape) {\n change(shape);\n }\n}\n\nexport const APPLY: Record<string, Apply> = {\n 'Chart.categories': (input, path, value) => {\n const chart = findChart(input, path[0]);\n if (chart) {\n chart.config = { ...(chart.config ?? {}), categories: value as string[] } as typeof chart.config;\n }\n },\n 'Chart.text': (input, path, value) => {\n const chart = findChart(input, path[0]);\n if (chart) {\n chart.title = value as string;\n }\n },\n 'Series.values': (input, path, value) => applyToSeries(input, path, series => (series.values = value)),\n 'Series.label': (input, path, value) => applyToSeries(input, path, series => (series.label = value as string)),\n 'Shape.text': (input, path, value) => {\n const shape = input.shapes.find(candidate => candidate.id === path[0]);\n if (shape) {\n shape.text = value as string;\n }\n },\n 'Shape.fill': (input, path, value) => setShape(input, path, shape => (shape.fillColor = value as string)),\n 'Shape.stroke': (input, path, value) => setShape(input, path, shape => (shape.strokeColor = value as string)),\n 'Shape.textColor': (input, path, value) => setShape(input, path, shape => (shape.textColor = value as string)),\n 'Shape.opacity': (input, path, value) => setShape(input, path, shape => (shape.opacity = value as number)),\n 'Component.value': (input, path, value) => writeComponentValue(input, path[0], value as ComponentValue),\n 'Component.valueEnd': (input, path, value) => writeComponentValueEnd(input, path[0], value as number),\n 'Component.disabled': (input, path, value) => writeComponentDisabled(input, path[0], value === true),\n};\n\nexport function applyShader(\n input: RenderInput,\n binding: BoundProperty,\n value: BindingValue,\n ownerId?: string,\n): string[] {\n const owners: string[] = [];\n for (const shape of input.shapes) {\n if (shape.shader?.name === binding.ownerPath[0] && (ownerId === undefined || shape.id === ownerId)) {\n // Shapes that use one Shader share its object, so each one gets its own copy to hold its own value.\n shape.shader = {\n ...shape.shader,\n parameters: { ...shape.shader.parameters, [binding.property]: value as number },\n };\n owners.push(shape.id);\n }\n }\n return owners;\n}\n","import { type ComponentValue, getComponentDescriptor } from '../model/component';\nimport type { RenderResult } from '../render';\nimport { sflToRenderInput } from '../renderInput/fromSfl';\nimport type { RenderInput } from '../renderInput/types';\nimport { parse } from '../sflLanguage';\nimport { expandDocument } from '../sflLanguage/expansion';\nimport { findComponent } from './applyValue';\nimport type { DataSource } from './dataSource';\nimport { type BindingGraph, buildBindingGraph } from './graph';\nimport type { BindingRuntimeOptions, ElementState, LiveChange } from './runtimeTypes';\nimport type { BindingDiagnostic, BindingValue, BoundProperty } from './types';\n\nexport interface RuntimeState {\n options: BindingRuntimeOptions;\n graph: BindingGraph;\n diagnostics: BindingDiagnostic[];\n input: RenderInput;\n sources: Map<string, DataSource>;\n applied: Map<string, string>;\n dirty: Set<BoundProperty>;\n listeners: Set<(result: RenderResult) => void>;\n warned: Set<string>;\n liveListeners: Set<(change: LiveChange) => void>;\n liveState: Map<string, LiveChange>;\n elementState: Map<string, ElementState>;\n scheduled: boolean;\n renderNeeded: boolean;\n}\n\nfunction initialValue(input: RenderInput, id: string, componentType: string | undefined): ComponentValue {\n const descriptor = getComponentDescriptor(componentType);\n const current = findComponent(input, id)?.value;\n if (current === undefined) {\n return descriptor?.value?.default ?? 0;\n }\n if (descriptor?.value?.type === 'number') {\n const value = Number(current);\n return Number.isFinite(value) ? value : descriptor.value.default;\n }\n return current;\n}\n\nexport function createRuntimeState(sfl: string, options: BindingRuntimeOptions): RuntimeState {\n const graph = buildBindingGraph(expandDocument(parse(sfl)));\n const input = structuredClone(sflToRenderInput(sfl));\n const elementState = new Map<string, ElementState>();\n for (const [name, info] of graph.elements) {\n if (!graph.contracts.has(name)) {\n elementState.set(name, {\n pressed: false,\n hovered: false,\n focused: false,\n pointer: 0,\n value: initialValue(input, name, info.componentType),\n });\n }\n }\n return {\n options,\n graph,\n diagnostics: [...graph.diagnostics],\n input,\n sources: new Map(),\n applied: new Map(),\n dirty: new Set(),\n listeners: new Set(),\n warned: new Set(),\n liveListeners: new Set(),\n liveState: new Map(),\n elementState,\n scheduled: false,\n renderNeeded: false,\n };\n}\n\nexport function readValue(state: RuntimeState, path: string[]): BindingValue {\n const [name, field] = path;\n const element = state.sources.has(name) ? undefined : state.elementState.get(name);\n if (element) {\n return element[field as keyof ElementState];\n }\n const data = state.sources.get(name)?.get();\n if (data === undefined) {\n throw new Error(`DataSource '${name}' has no data yet.`);\n }\n return Array.isArray(data)\n ? (data.map(row => row[field]) as BindingValue)\n : ((data as Record<string, unknown>)[field] as BindingValue);\n}\n\nexport function missingSource(state: RuntimeState, binding: BoundProperty): string | undefined {\n return binding.dependencies\n .map(dependency => dependency.split('.')[0])\n .find(name => name !== 'self' && !state.sources.has(name) && !state.elementState.has(name));\n}\n","import { type ComponentValue, isBuiltInComponentType } from '../model/component';\nimport { type RenderResult, renderCanvas } from '../render';\nimport { APPLY, applyShader } from './applyValue';\nimport { evaluate } from './expression';\nimport { missingSource, type RuntimeState, readValue } from './runtimeState';\nimport type { LiveChange } from './runtimeTypes';\nimport type { BoundProperty } from './types';\n\nfunction announce(state: RuntimeState, id: string, change: LiveChange): void {\n state.liveState.set(id, change);\n for (const listener of [...state.liveListeners]) {\n listener(change);\n }\n}\n\nfunction applyComponentValue(state: RuntimeState, binding: BoundProperty, value: ComponentValue): boolean {\n const id = binding.ownerPath[0];\n const element = state.elementState.get(id);\n if (element) {\n element.value = value;\n markDirty(state, id);\n }\n if (!isBuiltInComponentType(state.graph.elements.get(id)?.componentType)) {\n return true;\n }\n announce(state, binding.id, { kind: 'component', id, value: value as number });\n return false;\n}\n\nfunction warnMissingSource(state: RuntimeState, binding: BoundProperty, missing: string): void {\n if (state.warned.has(missing)) {\n return;\n }\n state.warned.add(missing);\n state.diagnostics.push({\n severity: 'warning',\n code: 'source-not-registered',\n message: `DataSource '${missing}' has no registered source, so '${binding.property}' stays empty.`,\n line: binding.line,\n col: binding.col,\n });\n}\n\nfunction evaluateBinding(state: RuntimeState, binding: BoundProperty): boolean {\n const missing = missingSource(state, binding);\n if (missing) {\n warnMissingSource(state, binding, missing);\n return false;\n }\n const readsSelf = binding.dependencies.includes('self.id');\n if (binding.ownerKind === 'Shader' && readsSelf) {\n const owners = state.input.shapes.filter(shape => shape.shader?.name === binding.ownerPath[0]);\n for (const owner of owners) {\n const value = evaluate(binding.expr, {\n read: path => (path[0] === 'self' && path[1] === 'id' ? owner.id : readValue(state, path)),\n });\n const appliedId = `${binding.id}.${owner.id}`;\n const key = JSON.stringify(value);\n if (state.applied.get(appliedId) === key) {\n continue;\n }\n state.applied.set(appliedId, key);\n applyShader(state.input, binding, value, owner.id);\n announce(state, appliedId, {\n kind: 'shader',\n owners: [owner.id],\n parameters: { [binding.property]: value as number },\n });\n }\n return false;\n }\n const selfId = binding.ownerKind === 'Shader' ? undefined : binding.ownerPath[0];\n const value = evaluate(binding.expr, {\n read: path => (path[0] === 'self' && path[1] === 'id' && selfId ? selfId : readValue(state, path)),\n });\n const key = JSON.stringify(value);\n if (state.applied.get(binding.id) === key) {\n return false;\n }\n state.applied.set(binding.id, key);\n if (binding.ownerKind === 'Shader') {\n announce(state, binding.id, {\n kind: 'shader',\n owners: applyShader(state.input, binding, value),\n parameters: { [binding.property]: value as number },\n });\n return false;\n }\n APPLY[`${binding.ownerKind === 'Text' ? 'Shape' : binding.ownerKind}.${binding.property}`]?.(\n state.input,\n binding.ownerPath,\n value,\n );\n if (binding.ownerKind === 'Component' && binding.property === 'value') {\n return applyComponentValue(state, binding, value as ComponentValue);\n }\n return true;\n}\n\nexport function flush(state: RuntimeState): RenderResult | null {\n state.scheduled = false;\n let changed = state.renderNeeded;\n state.renderNeeded = false;\n for (const binding of state.dirty) {\n changed = evaluateBinding(state, binding) || changed;\n }\n state.dirty.clear();\n if (!changed) {\n return null;\n }\n const result = renderCanvas(state.input, { ...state.options.renderOptions, linkHitAreas: true });\n for (const listener of [...state.listeners]) {\n listener(result);\n }\n return result;\n}\n\nexport function schedule(state: RuntimeState): void {\n if (!state.scheduled) {\n state.scheduled = true;\n queueMicrotask(() => flush(state));\n }\n}\n\nexport function markDirty(state: RuntimeState, name: string): void {\n for (const [field, bindings] of state.graph.byField) {\n if (field.startsWith(`${name}.`)) {\n for (const binding of bindings) {\n state.dirty.add(binding);\n }\n }\n }\n}\n","import type { MutableDataSource } from './dataSource';\nimport { markDirty, schedule } from './evaluation';\nimport { collectRefs, evaluate } from './expression';\nimport { type RuntimeState, readValue } from './runtimeState';\nimport type { ElementState } from './runtimeTypes';\nimport type { BoundHandler, Row } from './types';\nimport { TICK_EVENT } from './types';\n\nexport function runHandler(state: RuntimeState, handler: BoundHandler, delta?: number, selfId?: string): void {\n const env = {\n read: (path: string[]) => {\n if (path[0] === 'time' && path[1] === 'delta') {\n return delta ?? 0;\n }\n if (path[0] === 'self' && path[1] === 'id' && selfId) {\n return selfId;\n }\n return readValue(state, path);\n },\n };\n for (const assignment of handler.assignments) {\n const target = state.sources.get(assignment.source);\n const readable = collectRefs(assignment.expr).every(\n ([name]) =>\n name === 'time' ||\n (name === 'self' && Boolean(selfId)) ||\n state.sources.has(name) ||\n state.elementState.has(name),\n );\n if (!target || !('set' in target) || !readable) {\n continue;\n }\n let value = evaluate(assignment.expr, env);\n if (typeof value === 'number') {\n value =\n state.graph.contracts.get(assignment.source)?.declared[assignment.field] === 'int' ? Math.round(value) : value;\n if (!Number.isFinite(value)) {\n continue;\n }\n }\n const row = target.get() as Row;\n if (row[assignment.field] !== value) {\n (target as MutableDataSource).set({ ...row, [assignment.field]: value });\n }\n }\n}\n\nexport function dispatch(state: RuntimeState, id: string, event: string): void {\n for (const handler of state.graph.handlers) {\n if (handler.event === event && handler.ownerKind !== 'DataSource' && handler.ownerPath[0] === id) {\n runHandler(state, handler, undefined, id);\n }\n }\n}\n\nexport function runTick(state: RuntimeState, seconds: number): void {\n for (const handler of state.graph.handlers) {\n if (handler.event === TICK_EVENT) {\n runHandler(state, handler, seconds);\n }\n }\n}\n\nexport function setElementState(state: RuntimeState, id: string, patch: Partial<ElementState>): void {\n const current = state.elementState.get(id);\n if (!current || (Object.keys(patch) as Array<keyof ElementState>).every(key => current[key] === patch[key])) {\n return;\n }\n Object.assign(current, patch);\n markDirty(state, id);\n schedule(state);\n}\n","import { type ComponentValue, getComponentDescriptor, isGenericComponent } from '../model/component';\nimport { sliderReach } from '../model/component/sliderReach';\nimport { findComponent, isComponentDisabled, writeComponentValue, writeComponentValueEnd } from './applyValue';\nimport type { MutableDataSource } from './dataSource';\nimport { markDirty, schedule } from './evaluation';\nimport { dispatch, setElementState } from './handlers';\nimport type { RuntimeState } from './runtimeState';\nimport { type BoundProperty, CHANGE_EVENT, type Row } from './types';\n\nfunction descriptorOf(state: RuntimeState, id: string) {\n const info = state.graph.elements.get(id);\n return info?.kind === 'Component' ? getComponentDescriptor(info.componentType) : undefined;\n}\n\nfunction valueBinding(state: RuntimeState, id: string, property = 'value'): BoundProperty | undefined {\n return state.graph.bindings.find(\n binding => binding.ownerKind === 'Component' && binding.ownerPath[0] === id && binding.property === property,\n );\n}\n\nfunction writeBack(state: RuntimeState, binding: BoundProperty, value: ComponentValue): void {\n const target = binding.expr.kind === 'ref' ? binding.expr.path : undefined;\n const source = target ? state.sources.get(target[0]) : undefined;\n if (!target || !source || !('set' in source)) {\n return;\n }\n const row = source.get() as Row;\n if (row[target[1]] !== value) {\n (source as MutableDataSource).set({ ...row, [target[1]]: value });\n }\n}\n\n// The second value of a component that holds two, such as the upper end of a range.\nfunction changeValueEnd(state: RuntimeState, id: string, next: number): boolean {\n const component = findComponent(state.input, id);\n if (\n !component ||\n !isGenericComponent(component) ||\n component.properties.valueEnd === next ||\n isComponentDisabled(state.input, id)\n ) {\n return false;\n }\n const binding = valueBinding(state, id, 'valueEnd');\n if (binding && binding.operator !== '<->') {\n return false;\n }\n writeComponentValueEnd(state.input, id, next);\n state.renderNeeded = true;\n if (binding) {\n state.applied.set(binding.id, JSON.stringify(next));\n writeBack(state, binding, next);\n }\n markDirty(state, id);\n dispatch(state, id, CHANGE_EVENT);\n schedule(state);\n return true;\n}\n\nexport function changeComponentValue(\n state: RuntimeState,\n id: string,\n next: ComponentValue,\n property: 'value' | 'valueEnd' = 'value',\n): boolean {\n if (property === 'valueEnd') {\n return typeof next === 'number' && changeValueEnd(state, id, next);\n }\n const spec = descriptorOf(state, id)?.value;\n const element = state.elementState.get(id);\n if (!spec?.writable || !element || typeof next !== spec.type || element.value === next) {\n return false;\n }\n if (isComponentDisabled(state.input, id)) {\n return false;\n }\n const binding = valueBinding(state, id);\n if (binding && binding.operator !== '<->') {\n return false;\n }\n element.value = next;\n writeComponentValue(state.input, id, next);\n state.renderNeeded = true;\n if (binding) {\n state.applied.set(binding.id, JSON.stringify(next));\n writeBack(state, binding, next);\n }\n markDirty(state, id);\n dispatch(state, id, CHANGE_EVENT);\n schedule(state);\n return true;\n}\n\nconst TAU = Math.PI * 2;\n// Which thumb of a range a gesture holds: the one that was nearer where it began.\nconst grabbed = new WeakMap<RuntimeState, Map<string, 'start' | 'end'>>();\nconst within = (value: number): number => Math.min(1, Math.max(0, value));\n\n// How far along its range a slider is when the pointer is at a fraction of its width and of its height.\nfunction slideAlong(\n properties: Record<string, ComponentValue>,\n width: number,\n height: number,\n x: number,\n y: number,\n): number {\n const vertical = properties.direction === 'vertical';\n const length = vertical ? height : width;\n const reach = sliderReach(properties.variant, vertical ? width : height);\n const position = vertical ? 1 - y : x;\n return length > reach * 2 ? within((position * length - reach) / (length - reach * 2)) : position;\n}\n\n// How far round its range a knob is when the pointer is at a fraction of its width and of its height.\nfunction turnAlong(\n properties: Record<string, ComponentValue>,\n width: number,\n height: number,\n x: number,\n y: number,\n): number {\n const start = (Number(properties.start ?? 225) * Math.PI) / 180;\n const sweep = (Number(properties.sweep ?? 270) * Math.PI) / 180;\n const gap = TAU - sweep;\n const angle = Math.atan2(-(y - 0.5) * height, (x - 0.5) * width);\n const shifted = start - angle + gap / 2;\n return within(((((shifted % TAU) + TAU) % TAU) - gap / 2) / sweep);\n}\n\n// A pointer in a slider, a knob or a row of options becomes the value of the component. It comes as fractions of the width and the height.\nexport function slideElement(state: RuntimeState, id: string, x: number, y = 0): void {\n const component = findComponent(state.input, id);\n if (!component || !isGenericComponent(component)) {\n return;\n }\n const kind = descriptorOf(state, id)?.interaction;\n const { properties } = component;\n if (kind === 'pick') {\n const count = String(properties.options ?? '')\n .split(',')\n .filter(option => option.trim()).length;\n if (count > 0) {\n changeComponentValue(state, id, Math.min(count - 1, Math.floor(x * count)));\n }\n return;\n }\n const along =\n kind === 'turn'\n ? turnAlong(properties, component.width, component.height, x, y)\n : slideAlong(properties, component.width, component.height, x, y);\n const min = Number(properties.min ?? 0);\n const max = Number(properties.max ?? 100);\n const step = Number(properties.step ?? 0);\n let value = min + along * (max - min);\n if (step > 0) {\n value = min + Math.round((value - min) / step) * step;\n }\n const taken = Number(Math.min(max, Math.max(min, value)).toFixed(6));\n if (kind !== 'range') {\n changeComponentValue(state, id, taken);\n return;\n }\n const low = Number(component.value);\n const high = Number(properties.valueEnd ?? max);\n const holds = grabbed.get(state) ?? new Map<string, 'start' | 'end'>();\n grabbed.set(state, holds);\n if (!holds.has(id)) {\n holds.set(id, taken >= high || (taken > low && taken - low > high - taken) ? 'end' : 'start');\n }\n // The thumbs do not pass each other.\n if (holds.get(id) === 'start') {\n changeComponentValue(state, id, Math.min(taken, high));\n } else {\n changeComponentValue(state, id, Math.max(taken, low), 'valueEnd');\n }\n}\n\nfunction reactToActivation(state: RuntimeState, id: string): void {\n const element = state.elementState.get(id);\n const descriptor = descriptorOf(state, id);\n if (element && descriptor?.interaction === 'toggle' && descriptor.value?.type === 'boolean') {\n changeComponentValue(state, id, element.value !== true);\n }\n}\n\nexport function pressElement(state: RuntimeState, id: string): void {\n grabbed.get(state)?.delete(id);\n if (isComponentDisabled(state.input, id)) {\n return;\n }\n setElementState(state, id, { pressed: true });\n dispatch(state, id, 'onPress');\n}\n\nexport function releaseElement(state: RuntimeState, id: string, tapped: boolean): void {\n grabbed.get(state)?.delete(id);\n setElementState(state, id, { pressed: false });\n if (isComponentDisabled(state.input, id)) {\n return;\n }\n if (tapped) {\n reactToActivation(state, id);\n }\n dispatch(state, id, 'onRelease');\n if (tapped) {\n dispatch(state, id, 'onTap');\n }\n}\n\nexport function activateElement(state: RuntimeState, id: string): void {\n if (isComponentDisabled(state.input, id)) {\n return;\n }\n reactToActivation(state, id);\n dispatch(state, id, 'onTap');\n}\n","import { type RenderOptions, type RenderResult, renderCanvas } from '../render';\nimport { checkData } from './checkData';\nimport type { DataSource } from './dataSource';\nimport { flush, markDirty, schedule } from './evaluation';\nimport { dispatch, runTick, setElementState } from './handlers';\nimport { interactiveElements } from './interactive';\nimport { createRuntimeState, type RuntimeState } from './runtimeState';\nimport type { BindingRuntime, BindingRuntimeOptions, BindingTarget, LiveChange } from './runtimeTypes';\nimport type { Row } from './types';\nimport { activateElement, changeComponentValue, pressElement, releaseElement, slideElement } from './userInput';\n\nfunction registerSource(state: RuntimeState, name: string, source: DataSource): () => void {\n const contract = state.graph.contracts.get(name);\n if (!contract) {\n throw new Error(`No DataSource '${name}' is declared in the SFL.`);\n }\n const accept = (): boolean => {\n const problem = checkData(contract, source.get());\n if (problem) {\n state.diagnostics.push({ severity: 'error', code: 'data-type-mismatch', message: problem, line: 0, col: 0 });\n return false;\n }\n return true;\n };\n const adopt = () => {\n if (accept()) {\n state.sources.set(name, source);\n state.warned.delete(name);\n markDirty(state, name);\n schedule(state);\n }\n };\n adopt();\n const unsubscribe = source.subscribe(adopt);\n return () => {\n unsubscribe();\n state.sources.delete(name);\n };\n}\n\nfunction pushLiveChange(target: BindingTarget, change: LiveChange): void {\n if (change.kind === 'component') {\n (target.setComponentValue ?? target.setWidgetValue)?.call(target, change.id, change.value);\n return;\n }\n for (const owner of change.owners) {\n target.setShaderParameters?.(owner, change.parameters);\n }\n}\n\nfunction attach(state: RuntimeState, target: BindingTarget): () => void {\n const send = (change: LiveChange) => pushLiveChange(target, change);\n state.liveListeners.add(send);\n for (const change of state.liveState.values()) {\n send(change);\n }\n const listener = (result: RenderResult) => target.update({ svg: result.svg });\n state.listeners.add(listener);\n for (const binding of state.graph.bindings) {\n state.dirty.add(binding);\n }\n flush(state);\n return () => {\n state.listeners.delete(listener);\n state.liveListeners.delete(send);\n };\n}\n\nexport function createBindingRuntime(sfl: string, options: BindingRuntimeOptions = {}): BindingRuntime {\n const state = createRuntimeState(sfl, options);\n for (const binding of state.graph.bindings) {\n if (binding.dependencies.length === 0) {\n state.dirty.add(binding);\n }\n }\n if (state.dirty.size > 0) {\n schedule(state);\n }\n\n return {\n diagnostics: state.diagnostics,\n graph: state.graph,\n interactive: interactiveElements(state.graph),\n input: state.input,\n registerSource: (name, source) => registerSource(state, name, source),\n setElementState: (id, patch) => setElementState(state, id, patch),\n press: id => pressElement(state, id),\n release: (id, tapped) => releaseElement(state, id, tapped),\n activate: id => activateElement(state, id),\n change: (id, value) => changeComponentValue(state, id, value),\n slide: (id, x, y) => slideElement(state, id, x, y),\n drag(id, pointer) {\n if (pointer !== undefined) {\n setElementState(state, id, { pointer });\n }\n dispatch(state, id, 'onDrag');\n },\n tick: seconds => runTick(state, seconds),\n flush: () => flush(state),\n onRender(listener) {\n state.listeners.add(listener);\n return () => state.listeners.delete(listener);\n },\n attach: target => attach(state, target),\n };\n}\n\nexport interface RenderBoundOptions extends RenderOptions {\n data?: Record<string, Row | Row[]>;\n}\n\nexport function renderBound(sfl: string, options: RenderBoundOptions = {}): RenderResult {\n const { data = {}, ...renderOptions } = options;\n const runtime = createBindingRuntime(sfl, { renderOptions });\n for (const [name, rows] of Object.entries(data)) {\n runtime.registerSource(name, { get: () => rows, subscribe: () => () => undefined });\n }\n runtime.flush();\n return renderCanvas(runtime.input, renderOptions);\n}\n"]}