react-klinecharts-ui 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +528 -29
- package/dist/chunk-PIFLJKYF.cjs +2512 -0
- package/dist/chunk-PIFLJKYF.cjs.map +1 -0
- package/dist/chunk-U325AHHX.js +2468 -0
- package/dist/chunk-U325AHHX.js.map +1 -0
- package/dist/extensions.cjs +12 -4
- package/dist/extensions.d.cts +22 -1
- package/dist/extensions.d.ts +22 -1
- package/dist/extensions.js +1 -1
- package/dist/index.cjs +1936 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +441 -3
- package/dist/index.d.ts +441 -3
- package/dist/index.js +1815 -31
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-PUULIBFN.js +0 -911
- package/dist/chunk-PUULIBFN.js.map +0 -1
- package/dist/chunk-SLTXNLKN.cjs +0 -932
- package/dist/chunk-SLTXNLKN.cjs.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider/ChartTerminalContext.ts","../src/data/periods.ts","../src/provider/ChartTerminalProvider.tsx","../src/hooks/useKlinechartsUITheme.ts","../src/hooks/useKlinechartsUILoading.ts","../src/hooks/usePeriods.ts","../src/data/timezones.ts","../src/hooks/useTimezone.ts","../src/hooks/useSymbolSearch.ts","../src/data/indicators.ts","../src/hooks/useIndicators.ts","../src/data/drawings.ts","../src/hooks/useDrawingTools.ts","../src/data/candle-types.ts","../src/hooks/useKlinechartsUISettings.ts","../src/hooks/useScreenshot.ts","../src/hooks/useFullscreen.ts","../src/hooks/useOrderLines.ts","../src/utils/createDataLoader.ts"],"names":["useCallback","useMemo","useRef","useEffect","useState","overlays"],"mappings":";;;;;;AAOO,IAAM,yBAAA,GACX,cAAyC,IAAI;AAExC,IAAM,4BAAA,GACX,cAAiD,IAAI;AAOhD,SAAS,wBAAA,GAAuD;AACrE,EAAA,MAAM,GAAA,GAAM,WAAW,4BAA4B,CAAA;AACnD,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,gBAAA,GAA8C;AAC5D,EAAA,MAAM,KAAA,GAAQ,WAAW,yBAAyB,CAAA;AAClD,EAAA,MAAM,QAAA,GAAW,WAAW,4BAA4B,CAAA;AACxD,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,QAAA,EAAU;AACvB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,KAAA,EAAO,GAAG,QAAA,EAAS;AAC9B;;;ACnCO,IAAM,eAAA,GAAoC;AAAA,EAC/C,EAAE,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,QAAA,EAAU,OAAO,IAAA,EAAK;AAAA,EACvC,EAAE,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,QAAA,EAAU,OAAO,IAAA,EAAK;AAAA,EACvC,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,QAAA,EAAU,OAAO,KAAA,EAAM;AAAA,EACzC,EAAE,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA,EAAK;AAAA,EACrC,EAAE,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA,EAAK;AAAA,EACrC,EAAE,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA,EAAK;AAAA,EACrC,EAAE,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,KAAA,EAAO,OAAO,GAAA,EAAI;AAAA,EACnC,EAAE,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,MAAA,EAAQ,OAAO,GAAA,EAAI;AAAA,EACpC,EAAE,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,OAAA,EAAS,OAAO,GAAA,EAAI;AAAA,EACrC,EAAE,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,MAAA,EAAQ,OAAO,GAAA;AAClC;ACIA,SAAS,OAAA,CACP,OACA,MAAA,EACoB;AACpB,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,OAAO,KAAA,EAAM;AAAA,IACzC,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA,EAAO;AAAA,IAC3C,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA,EAAO;AAAA,IAC3C,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,OAAO,KAAA,EAAM;AAAA,IACzC,KAAK,cAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,OAAO,QAAA,EAAS;AAAA,IAC/C,KAAK,aAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,IACjD,KAAK,qBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,cAAA,EAAgB,OAAO,UAAA,EAAW;AAAA,IACvD,KAAK,oBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAO,UAAA,EAAW;AAAA,IACtD,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA,EAAO;AAAA,IAC3C,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA,EAAO;AAAA,IAC3C,KAAK,oBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAO,GAAA,EAAI;AAAA,IAC/C;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEO,SAAS,qBAAA,CAAsB;AAAA,EACpC,QAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA,GAAe,OAAA;AAAA,EACf,eAAA,GAAkB,eAAA;AAAA,EAClB,qBAAA,GAAwB,CAAC,IAAI,CAAA;AAAA,EAC7B,oBAAA,GAAuB,CAAC,KAAK,CAAA;AAAA,EAC7B,aAAA,GAAgB,OAAA;AAAA,EAChB,OAAA;AAAA,EACA,MAAA;AAAA,EACA,oBAAoB,cAAA,GAAiB,IAAA;AAAA,EACrC,QAAA,EAAU,aAAA;AAAA,EACV,QAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA;AACF,CAAA,EAAuC;AAErC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,UAAA;AAAA,IACxB,OAAA;AAAA,IACA;AAAA,MACE,QAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,qBAAA;AAAA,MACA,oBAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,CAAC,IAAA,MAAU;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,MAAA,EAAQ,KAAK,aAAA,IAAiB,IAAA;AAAA,MAC9B,QAAQ,IAAA,CAAK,aAAA,IAAA,CAAkB,IAAA,CAAK,OAAA,IAAW,iBAAiB,CAAC,CAAA;AAAA,MACjE,KAAA,EAAO,KAAK,YAAA,IAAgB,OAAA;AAAA,MAC5B,QAAA,EAAU,KAAK,eAAA,IAAmB,eAAA;AAAA,MAClC,SAAA,EAAW,KAAA;AAAA,MACX,MAAA,EAAQ,KAAK,aAAA,IAAiB,OAAA;AAAA,MAC9B,OAAA,EAAS,KAAK,OAAA,IAAW,eAAA;AAAA,MACzB,cAAA,EAAgB,IAAA,CAAK,qBAAA,IAAyB,CAAC,IAAI,CAAA;AAAA,MACnD,aAAA,EAAA,CAAgB,IAAA,CAAK,oBAAA,IAAwB,CAAC,KAAK,CAAA,EAAG,MAAA;AAAA,QACpD,CAAC,KAAK,IAAA,MAAU,EAAE,GAAG,GAAA,EAAK,CAAC,IAAI,GAAG,EAAA,EAAG,CAAA;AAAA,QACrC;AAAC,OACH;AAAA,MACA,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,aAAA,EAAe;AAAA,KACjB;AAAA,GACF;AAEA,EAAA,MAAM,sBAAA,GAAyB,OAA2B,IAAI,CAAA;AAI9D,EAAA,MAAM,QAAA,GAAW,OAAO,KAAK,CAAA;AAC7B,EAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAGnB,EAAA,MAAM,eAAe,MAAA,CAAO;AAAA,IAC1B,aAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,YAAA,CAAa,OAAA,GAAU;AAAA,IACrB,aAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACF;AAQA,EAAA,MAAM,gBAAA,GAAmB,WAAA,CAAY,CAAC,MAAA,KAAgC;AACpE,IAAA,MAAM,YAAY,QAAA,CAAS,OAAA;AAC3B,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAA;AAC1C,IAAA,QAAA,CAAS,OAAA,GAAU,QAAA;AACnB,IAAA,QAAA,CAAS,MAAM,CAAA;AACf,IAAA,MAAM,MAAM,YAAA,CAAa,OAAA;AACzB,IAAA,GAAA,CAAI,aAAA,GAAgB,MAAA,EAAQ,QAAA,EAAU,SAAS,CAAA;AAC/C,IAAA,QAAQ,OAAO,IAAA;AAAM,MACnB,KAAK,YAAA;AACH,QAAA,GAAA,CAAI,cAAA,GAAiB,OAAO,MAAM,CAAA;AAClC,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,GAAA,CAAI,cAAA,GAAiB,OAAO,MAAM,CAAA;AAClC,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,GAAA,CAAI,aAAA,GAAgB,OAAO,KAAK,CAAA;AAChC,QAAA;AAAA,MACF,KAAK,cAAA;AACH,QAAA,GAAA,CAAI,gBAAA,GAAmB,OAAO,QAAQ,CAAA;AACtC,QAAA;AAAA,MACF,KAAK,qBAAA;AACH,QAAA,GAAA,CAAI,sBAAA,GAAyB,OAAO,UAAU,CAAA;AAC9C,QAAA;AAAA,MACF,KAAK,oBAAA;AACH,QAAA,GAAA,CAAI,qBAAA,GAAwB,OAAO,UAAU,CAAA;AAC7C,QAAA;AAAA;AACJ,EACF,CAAA,EAAG,EAAE,CAAA;AAIL,EAAA,MAAM,gBAAA,GAAmB,OAAO,aAAa,CAAA;AAE7C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,kBAAA,EAAmB;AAAA,IACrB;AACA,IAAA,gBAAA,CAAiB,SAAS,OAAA,CAAQ,CAAC,OAAA,KAAY,eAAA,CAAgB,OAAO,CAAC,CAAA;AAAA,EACzE,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,EAAQ;AAC/B,MAAA,KAAA,CAAM,KAAA,CAAM,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA;AAAA,IACpC;AAAA,EACF,GAAG,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AAI9B,EAAA,MAAM,aAAA,GAAgB,OAAA;AAAA,IACpB,OAAO;AAAA,MACL,QAAA,EAAU,gBAAA;AAAA,MACV,QAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,gBAAA,EAAkB,QAAA,EAAU,gBAAgB;AAAA,GAC/C;AAEA,EAAA,uBACE,GAAA,CAAC,yBAAA,CAA0B,QAAA,EAA1B,EAAmC,KAAA,EAAO,KAAA,EACzC,QAAA,kBAAA,GAAA,CAAC,4BAAA,CAA6B,QAAA,EAA7B,EAAsC,KAAA,EAAO,aAAA,EAC3C,UACH,CAAA,EACF,CAAA;AAEJ;ACxMO,SAAS,qBAAA,GAAqD;AACnE,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,gBAAA,EAAiB;AAE7C,EAAA,MAAM,QAAA,GAAWA,WAAAA;AAAA,IACf,CAAC,KAAA,KAAkB;AACjB,MAAA,KAAA,CAAM,KAAA,EAAO,UAAU,KAAK,CAAA;AAC5B,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,CAAA;AAAA,IACvC,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,KAAA,EAAO,QAAQ;AAAA,GACxB;AAEA,EAAA,MAAM,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,KAAU,OAAA,GAAU,MAAA,GAAS,OAAA;AACpD,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAC,CAAA;AAE1B,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,QAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACxBO,SAAS,uBAAA,GAAyD;AACvE,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,gBAAA,EAAiB;AACnC,EAAA,OAAO,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA,EAAU;AACtC;ACCO,SAAS,UAAA,GAA+B;AAC7C,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,gBAAA,EAAiB;AAE7C,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,CAAC,MAAA,KAA2B;AAC1B,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,CAAA;AAAA,IACzC,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,OAAO;AAAA,IACL,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,cAAc,KAAA,CAAM,MAAA;AAAA,IACpB;AAAA,GACF;AACF;;;ACpBO,IAAM,SAAA,GAA8B;AAAA,EACzC,EAAE,GAAA,EAAK,SAAA,EAAW,SAAA,EAAW,KAAA,EAAM;AAAA,EACnC,EAAE,GAAA,EAAK,kBAAA,EAAoB,SAAA,EAAW,UAAA,EAAW;AAAA,EACjD,EAAE,GAAA,EAAK,gBAAA,EAAkB,SAAA,EAAW,QAAA,EAAS;AAAA,EAC7C,EAAE,GAAA,EAAK,qBAAA,EAAuB,SAAA,EAAW,aAAA,EAAc;AAAA,EACvD,EAAE,GAAA,EAAK,iBAAA,EAAmB,SAAA,EAAW,SAAA,EAAU;AAAA,EAC/C,EAAE,GAAA,EAAK,iBAAA,EAAmB,SAAA,EAAW,SAAA,EAAU;AAAA,EAC/C,EAAE,GAAA,EAAK,mBAAA,EAAqB,SAAA,EAAW,WAAA,EAAY;AAAA,EACnD,EAAE,GAAA,EAAK,eAAA,EAAiB,SAAA,EAAW,QAAA,EAAS;AAAA,EAC5C,EAAE,GAAA,EAAK,eAAA,EAAiB,SAAA,EAAW,QAAA,EAAS;AAAA,EAC5C,EAAE,GAAA,EAAK,cAAA,EAAgB,SAAA,EAAW,SAAA,EAAU;AAAA,EAC5C,EAAE,GAAA,EAAK,YAAA,EAAc,SAAA,EAAW,OAAA,EAAQ;AAAA,EACxC,EAAE,GAAA,EAAK,gBAAA,EAAkB,SAAA,EAAW,WAAA,EAAY;AAAA,EAChD,EAAE,GAAA,EAAK,aAAA,EAAe,SAAA,EAAW,QAAA,EAAS;AAAA,EAC1C,EAAE,GAAA,EAAK,cAAA,EAAgB,SAAA,EAAW,SAAA,EAAU;AAAA,EAC5C,EAAE,GAAA,EAAK,eAAA,EAAiB,SAAA,EAAW,UAAA,EAAW;AAAA,EAC9C,EAAE,GAAA,EAAK,YAAA,EAAc,SAAA,EAAW,OAAA,EAAQ;AAAA,EACxC,EAAE,GAAA,EAAK,kBAAA,EAAoB,SAAA,EAAW,QAAA,EAAS;AAAA,EAC/C,EAAE,GAAA,EAAK,iBAAA,EAAmB,SAAA,EAAW,SAAA;AACvC;;;ACTO,SAAS,WAAA,GAAiC;AAC/C,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,gBAAA,EAAiB;AAE7C,EAAA,MAAM,SAAA,GAAYC,OAAAA;AAAA,IAChB,MACE,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,MACrB,KAAK,EAAA,CAAG,GAAA;AAAA,MACR,WAAW,EAAA,CAAG;AAAA,KAChB,CAAE,CAAA;AAAA,IACJ;AAAC,GACH;AAEA,EAAA,MAAM,WAAA,GAAcD,WAAAA;AAAA,IAClB,CAAC,QAAA,KAAqB;AACpB,MAAA,KAAA,CAAM,KAAA,EAAO,YAAY,QAAQ,CAAA;AACjC,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAU,CAAA;AAAA,IAC7C,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,KAAA,EAAO,QAAQ;AAAA,GACxB;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,gBAAgB,KAAA,CAAM,QAAA;AAAA,IACtB;AAAA,GACF;AACF;AC1BO,SAAS,eAAA,CAAgB,aAAa,GAAA,EAA4B;AACvE,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,QAAA,KAAa,gBAAA,EAAiB;AACvD,EAAA,MAAM,CAAC,KAAA,EAAO,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,QAAA,CAA8B,EAAE,CAAA;AAC9D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA;AAEpD,EAAA,MAAM,QAAA,GAAWE,OAA6C,IAAI,CAAA;AAElE,EAAA,MAAM,QAAA,GAAWA,OAA+B,IAAI,CAAA;AAEpD,EAAA,MAAM,QAAA,GAAWF,WAAAA;AAAA,IACf,CAAC,CAAA,KAAc;AACb,MAAA,aAAA,CAAc,CAAC,CAAA;AAGf,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AAGnD,MAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AACxB,MAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAEnB,MAAA,IAAI,CAAC,CAAA,CAAE,IAAA,EAAK,EAAG;AACb,QAAA,UAAA,CAAW,EAAE,CAAA;AACb,QAAA,cAAA,CAAe,KAAK,CAAA;AACpB,QAAA;AAAA,MACF;AAEA,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,QAAA,CAAS,OAAA,GAAU,WAAW,YAAY;AACxC,QAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,QAAA,QAAA,CAAS,OAAA,GAAU,UAAA;AAEnB,QAAA,IAAI;AACF,UAAA,MAAM,OAAO,MAAM,QAAA,CAAS,aAAA,CAAc,CAAA,EAAG,WAAW,MAAM,CAAA;AAC9D,UAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC9B,YAAA,UAAA,CAAW,IAAI,CAAA;AAAA,UACjB;AAAA,QACF,CAAA,CAAA,MAAQ;AACN,UAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC9B,YAAA,UAAA,CAAW,EAAE,CAAA;AAAA,UACf;AAAA,QACF,CAAA,SAAE;AACA,UAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC9B,YAAA,cAAA,CAAe,KAAK,CAAA;AAAA,UACtB;AAAA,QACF;AAAA,MACF,GAAG,UAAU,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,UAAU,UAAU;AAAA,GACvB;AAEA,EAAA,MAAM,YAAA,GAAeA,WAAAA;AAAA,IACnB,CAAC,MAAA,KAA8B;AAC7B,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,CAAA;AACvC,MAAA,aAAA,CAAc,EAAE,CAAA;AAChB,MAAA,UAAA,CAAW,EAAE,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,YAAA,GAAeA,YAAY,MAAM;AACrC,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,UAAA,CAAW,EAAE,CAAA;AACb,IAAA,cAAA,CAAe,KAAK,CAAA;AAAA,EACtB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAG,UAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AACnD,MAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,IAC1B,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAc,KAAA,CAAM,MAAA;AAAA,IACpB,QAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACtFO,IAAM,eAAA,GAA4B;AAAA,EACvC,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF;AAEO,IAAM,cAAA,GAA2B;AAAA,EACtC,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF;AAEO,IAAM,gBAAA,GAAwD;AAAA,EACnE,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA;AAAE;AACvC,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,SAAA,EAAW,MAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,EAAA,EAAG;AAAA,MACpC,EAAE,KAAA,EAAO,oBAAA,EAAsB,YAAA,EAAc,CAAA;AAAE;AACjD,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA,EAAE;AAAA,MACrC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA,EAAE;AAAA,MACrC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA;AAAG;AACxC,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA,EAAE;AAAA,MACrC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA,EAAE;AAAA,MACrC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA;AAAG;AACxC,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,SAAA,EAAW,MAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA;AAAE;AACvC,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA,EAAE;AAAA,MACrC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA,EAAE;AAAA,MACrC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA;AAAE;AACvC,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,SAAA,EAAW,MAAA;AAAA,IACX,QAAQ,CAAC,EAAE,OAAO,UAAA,EAAY,YAAA,EAAc,IAAI;AAAA,GAClD;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,QAAQ,CAAC,EAAE,OAAO,UAAA,EAAY,YAAA,EAAc,IAAI;AAAA,GAClD;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA;AAAE;AACvC,GACF;AAAA,EACA,EAAA,EAAI;AAAA,IACF,IAAA,EAAM,IAAA;AAAA,IACN,SAAA,EAAW,IAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA;AAAG;AACxC,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA;AAAE;AACvC,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA;AAAG;AACxC,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,SAAA,EAAW,MAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA;AAAE;AACvC,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,QAAQ,CAAC,EAAE,OAAO,UAAA,EAAY,YAAA,EAAc,IAAI;AAAA,GAClD;AAAA,EACA,EAAA,EAAI;AAAA,IACF,IAAA,EAAM,IAAA;AAAA,IACN,SAAA,EAAW,IAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA;AAAE;AACvC,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA;AAAE;AACvC,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA;AAAE;AACvC,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA,EAAG;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA;AAAE;AACvC,GACF;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,QAAQ;AAAC,GACX;AAAA,EACA,EAAA,EAAI;AAAA,IACF,IAAA,EAAM,IAAA;AAAA,IACN,SAAA,EAAW,IAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,CAAA,EAAE;AAAA,MACrC,EAAE,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,EAAA;AAAG;AACxC;AAEJ;;;AClKO,SAAS,aAAA,GAAqC;AACnD,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,gBAAA,EAAiB;AAE7C,EAAA,MAAM,cAAA,GAAiBF,QAAQ,MAAM;AACnC,IAAA,MAAM,cAAc,KAAA,CAAM,cAAA;AAC1B,IAAA,MAAM,QAAA,GAAW,gBAAgB,MAAA,CAAO,CAAC,MAAM,CAAC,WAAA,CAAY,QAAA,CAAS,CAAC,CAAC,CAAA;AACvE,IAAA,OAAO;AAAA,MACL,GAAG,YAAY,GAAA,CAAI,CAAC,UAAU,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAK,CAAE,CAAA;AAAA,MACvD,GAAG,SAAS,GAAA,CAAI,CAAC,UAAU,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAM,CAAE;AAAA,KACvD;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,cAAc,CAAC,CAAA;AAEzB,EAAA,MAAM,aAAA,GAAgBA,QAAQ,MAAM;AAClC,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,aAAa,CAAA;AACnD,IAAA,MAAM,QAAA,GAAW,eAAe,MAAA,CAAO,CAAC,MAAM,CAAC,WAAA,CAAY,QAAA,CAAS,CAAC,CAAC,CAAA;AACtE,IAAA,OAAO;AAAA,MACL,GAAG,YAAY,GAAA,CAAI,CAAC,UAAU,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAK,CAAE,CAAA;AAAA,MACvD,GAAG,SAAS,GAAA,CAAI,CAAC,UAAU,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAM,CAAE;AAAA,KACvD;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,aAAa,CAAC,CAAA;AAExB,EAAA,MAAM,gBAAA,GAAmBD,WAAAA;AAAA,IACvB,CAAC,IAAA,KAAiB;AAChB,MAAA,IAAI,KAAA,CAAM,cAAA,CAAe,QAAA,CAAS,IAAI,CAAA,EAAG;AACzC,MAAA,KAAA,CAAM,KAAA,EAAO,eAAA;AAAA,QACX,EAAE,IAAA,EAAM,EAAA,EAAI,QAAQ,IAAI,CAAA,CAAA,EAAI,QAAQ,aAAA,EAAc;AAAA,QAClD,IAAA;AAAA,QACA,EAAE,IAAI,aAAA;AAAc,OACtB;AACA,MAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,KAAA,CAAM,gBAAgB,IAAI,CAAA;AACpD,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,qBAAA,EAAuB,UAAA,EAAY,eAAe,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,gBAAgB,QAAQ;AAAA,GAC9C;AAEA,EAAA,MAAM,mBAAA,GAAsBA,WAAAA;AAAA,IAC1B,CAAC,IAAA,KAAiB;AAChB,MAAA,KAAA,CAAM,OAAO,eAAA,CAAgB,EAAE,IAAI,CAAA,KAAA,EAAQ,IAAI,IAAI,CAAA;AACnD,MAAA,MAAM,gBAAgB,KAAA,CAAM,cAAA,CAAe,OAAO,CAAC,CAAA,KAAM,MAAM,IAAI,CAAA;AACnE,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,qBAAA,EAAuB,UAAA,EAAY,eAAe,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,gBAAgB,QAAQ;AAAA,GAC9C;AAEA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,CAAC,IAAA,KAAiB;AAChB,MAAA,IAAI,IAAA,IAAQ,MAAM,aAAA,EAAe;AACjC,MAAA,MAAM,EAAA,GAAK,OAAO,IAAI,CAAA,CAAA;AACtB,MAAA,KAAA,CAAM,KAAA,EAAO,eAAA,CAAgB,EAAE,IAAA,EAAM,IAAI,CAAA;AACzC,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,EAAO,aAAA,CAAc,EAAE,IAAI,CAAA,GAAI,CAAC,CAAA,EAAG,MAAA,IAAU,EAAA;AAClE,MAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,KAAA,CAAM,eAAe,CAAC,IAAI,GAAG,MAAA,EAAO;AAC/D,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,oBAAA,EAAsB,UAAA,EAAY,eAAe,CAAA;AAAA,IACpE,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,eAAe,QAAQ;AAAA,GAC7C;AAEA,EAAA,MAAM,kBAAA,GAAqBA,WAAAA;AAAA,IACzB,CAAC,IAAA,KAAiB;AAChB,MAAA,KAAA,CAAM,OAAO,eAAA,CAAgB,EAAE,IAAI,CAAA,IAAA,EAAO,IAAI,IAAI,CAAA;AAClD,MAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,KAAA,CAAM,aAAA,EAAc;AAC/C,MAAA,OAAO,cAAc,IAAI,CAAA;AACzB,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,oBAAA,EAAsB,UAAA,EAAY,eAAe,CAAA;AAAA,IACpE,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,eAAe,QAAQ;AAAA,GAC7C;AAEA,EAAA,MAAM,mBAAA,GAAsBA,WAAAA;AAAA,IAC1B,CAAC,IAAA,KAAiB;AAChB,MAAA,IAAI,KAAA,CAAM,cAAA,CAAe,QAAA,CAAS,IAAI,CAAA,EAAG;AACvC,QAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,cAAA,EAAgB,gBAAA,EAAkB,mBAAmB;AAAA,GAC9D;AAEA,EAAA,MAAM,kBAAA,GAAqBA,WAAAA;AAAA,IACzB,CAAC,IAAA,KAAiB;AAChB,MAAA,IAAI,IAAA,IAAQ,MAAM,aAAA,EAAe;AAC/B,QAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,aAAA,EAAe,eAAA,EAAiB,kBAAkB;AAAA,GAC3D;AAEA,EAAA,MAAM,mBAAA,GAAsBA,WAAAA;AAAA,IAC1B,CAAC,IAAA,EAAc,MAAA,EAAiB,OAAA,KAAqB;AACnD,MAAA,MAAM,KAAK,MAAA,GAAS,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAA,GAAK,OAAO,IAAI,CAAA,CAAA;AAChD,MAAA,KAAA,CAAM,OAAO,iBAAA,CAAkB,EAAE,IAAA,EAAM,EAAA,EAAI,SAAS,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,qBAAA,GAAwBA,WAAAA;AAAA,IAC5B,CAAC,IAAA,EAAc,MAAA,EAAgB,MAAA,KAAqB;AAClD,MAAA,KAAA,CAAM,OAAO,iBAAA,CAAkB,EAAE,MAAM,MAAA,EAAQ,UAAA,EAAY,QAAQ,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,kBAAA,GAAqBA,WAAAA,CAAY,CAAC,IAAA,KAAiB;AACvD,IAAA,MAAM,MAAA,GAAS,iBAAiB,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC/B,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,cAAc,CAAA,CAAE;AAAA,KAClB,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,WAAAA;AAAA,IACjB,CAAC,IAAA,KAAiB;AAChB,MAAA,IAAI,CAAC,MAAM,KAAA,EAAO;AAClB,MAAA,KAAA,CAAM,MAAM,eAAA,CAAgB,EAAE,IAAI,CAAA,IAAA,EAAO,IAAI,IAAI,CAAA;AACjD,MAAA,KAAA,CAAM,KAAA,CAAM,eAAA;AAAA,QACV,EAAE,IAAA,EAAM,EAAA,EAAI,QAAQ,IAAI,CAAA,CAAA,EAAI,QAAQ,aAAA,EAAc;AAAA,QAClD,IAAA;AAAA,QACA,EAAE,IAAI,aAAA;AAAc,OACtB;AACA,MAAA,MAAM,MAAA,GAAS,EAAE,GAAG,KAAA,CAAM,aAAA,EAAc;AACxC,MAAA,OAAO,OAAO,IAAI,CAAA;AAClB,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,oBAAA,EAAsB,UAAA,EAAY,QAAQ,CAAA;AAC3D,MAAA,QAAA,CAAS;AAAA,QACP,IAAA,EAAM,qBAAA;AAAA,QACN,UAAA,EAAY,CAAC,GAAG,KAAA,CAAM,gBAAgB,IAAI;AAAA,OAC3C,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,KAAA,EAAO,MAAM,cAAA,EAAgB,KAAA,CAAM,eAAe,QAAQ;AAAA,GACnE;AAEA,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,CAAC,IAAA,KAAiB;AAChB,MAAA,IAAI,CAAC,MAAM,KAAA,EAAO;AAClB,MAAA,KAAA,CAAM,MAAM,eAAA,CAAgB,EAAE,IAAI,CAAA,KAAA,EAAQ,IAAI,IAAI,CAAA;AAClD,MAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA,CAAA;AACzB,MAAA,KAAA,CAAM,MAAM,eAAA,CAAgB,EAAE,IAAA,EAAM,EAAA,EAAI,OAAO,CAAA;AAC/C,MAAA,MAAM,MAAA,GACJ,KAAA,CAAM,KAAA,CAAM,aAAA,CAAc,EAAE,EAAA,EAAI,KAAA,EAAO,CAAA,GAAI,CAAC,CAAA,EAAG,MAAA,IAAU,EAAA;AAC3D,MAAA,MAAM,UAAU,KAAA,CAAM,cAAA,CAAe,OAAO,CAAC,CAAA,KAAM,MAAM,IAAI,CAAA;AAC7D,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,qBAAA,EAAuB,UAAA,EAAY,SAAS,CAAA;AAC7D,MAAA,QAAA,CAAS;AAAA,QACP,IAAA,EAAM,oBAAA;AAAA,QACN,UAAA,EAAY,EAAE,GAAG,KAAA,CAAM,eAAe,CAAC,IAAI,GAAG,MAAA;AAAO,OACtD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,KAAA,EAAO,MAAM,cAAA,EAAgB,KAAA,CAAM,eAAe,QAAQ;AAAA,GACnE;AAEA,EAAA,MAAM,qBAAA,GAAwBA,WAAAA;AAAA,IAC5B,CAAC,IAAA,KAAiB,KAAA,CAAM,cAAA,CAAe,SAAS,IAAI,CAAA;AAAA,IACpD,CAAC,MAAM,cAAc;AAAA,GACvB;AAEA,EAAA,MAAM,oBAAA,GAAuBA,WAAAA;AAAA,IAC3B,CAAC,IAAA,KAAiB,IAAA,IAAQ,KAAA,CAAM,aAAA;AAAA,IAChC,CAAC,MAAM,aAAa;AAAA,GACtB;AAEA,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,aAAA;AAAA,IACA,sBAAsB,KAAA,CAAM,cAAA;AAAA,IAC5B,qBAAqB,KAAA,CAAM,aAAA;AAAA,IAC3B,uBAAA,EAAyB,eAAA;AAAA,IACzB,sBAAA,EAAwB,cAAA;AAAA,IACxB,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA;AAAA,IACA,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACxNO,IAAM,kBAAA,GAA4C;AAAA,EACvD;AAAA,IACE,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO;AAAA,MACL,EAAE,IAAA,EAAM,wBAAA,EAA0B,SAAA,EAAW,0BAAA,EAA2B;AAAA,MACxE,EAAE,IAAA,EAAM,mBAAA,EAAqB,SAAA,EAAW,qBAAA,EAAsB;AAAA,MAC9D,EAAE,IAAA,EAAM,mBAAA,EAAqB,SAAA,EAAW,oBAAA,EAAqB;AAAA,MAC7D,EAAE,IAAA,EAAM,sBAAA,EAAwB,SAAA,EAAW,wBAAA,EAAyB;AAAA,MACpE,EAAE,IAAA,EAAM,iBAAA,EAAmB,SAAA,EAAW,mBAAA,EAAoB;AAAA,MAC1D,EAAE,IAAA,EAAM,iBAAA,EAAmB,SAAA,EAAW,kBAAA,EAAmB;AAAA,MACzD,EAAE,IAAA,EAAM,cAAA,EAAgB,SAAA,EAAW,eAAA,EAAgB;AAAA,MACnD,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,UAAA,EAAW;AAAA,MACzC,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,SAAA,EAAU;AAAA,MACxC,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,OAAA,EAAQ;AAAA,MACpC,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,YAAA;AAAa;AAC/C,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,UAAA;AAAA,IACL,KAAA,EAAO;AAAA,MACL,EAAE,IAAA,EAAM,kBAAA,EAAoB,SAAA,EAAW,oBAAA,EAAqB;AAAA,MAC5D,EAAE,IAAA,EAAM,sBAAA,EAAwB,SAAA,EAAW,wBAAA;AAAyB;AACtE,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,SAAA;AAAA,IACL,KAAA,EAAO;AAAA,MACL,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,QAAA,EAAS;AAAA,MACtC,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAO;AAAA,MAClC,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAA,EAAW,eAAA,EAAgB;AAAA,MACpD,EAAE,IAAA,EAAM,UAAA,EAAY,SAAA,EAAW,UAAA;AAAW;AAC5C,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO;AAAA,MACL,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAA,EAAW,gBAAA,EAAiB;AAAA,MACrD,EAAE,IAAA,EAAM,kBAAA,EAAoB,SAAA,EAAW,mBAAA,EAAoB;AAAA,MAC3D,EAAE,IAAA,EAAM,iBAAA,EAAmB,SAAA,EAAW,kBAAA,EAAmB;AAAA,MACzD,EAAE,IAAA,EAAM,iBAAA,EAAmB,SAAA,EAAW,kBAAA,EAAmB;AAAA,MACzD;AAAA,QACE,IAAA,EAAM,6BAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACb;AAAA,MACA,EAAE,IAAA,EAAM,oBAAA,EAAsB,SAAA,EAAW,qBAAA,EAAsB;AAAA,MAC/D,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,UAAA;AAAW;AAC3C,GACF;AAAA,EACA;AAAA,IACE,GAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAO;AAAA,MACL,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,OAAA,EAAQ;AAAA,MACpC,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAO;AAAA,MAClC,EAAE,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,aAAA,EAAc;AAAA,MAC/C,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,YAAA,EAAa;AAAA,MAC7C,EAAE,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,aAAA,EAAc;AAAA,MAC/C,EAAE,IAAA,EAAM,UAAA,EAAY,SAAA,EAAW,WAAA;AAAY;AAC7C;AAEJ;;;ACjEA,IAAM,gBAAA,GAAmB,eAAA;AA0BlB,SAAS,eAAA,GAAyC;AACvD,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,gBAAA,EAAiB;AACnC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAII,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,UAAA,EAAY,kBAAkB,CAAA,GAAIA,SAAqB,QAAQ,CAAA;AACtE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,IAAI,CAAA;AAE/C,EAAA,MAAM,UAAA,GAAaH,OAAAA;AAAA,IACjB,MACE,kBAAA,CAAmB,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MAC/B,KAAK,GAAA,CAAI,GAAA;AAAA,MACT,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QAC9B,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,WAAW,IAAA,CAAK;AAAA,OAClB,CAAE;AAAA,KACJ,CAAE,CAAA;AAAA,IACJ;AAAC,GACH;AAEA,EAAA,MAAM,UAAA,GAAaD,WAAAA;AAAA,IACjB,CAAC,IAAA,KAAiB;AAChB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,KAAA,CAAM,OAAO,aAAA,CAAc;AAAA,QACzB,IAAA;AAAA,QACA,OAAA,EAAS,gBAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,SAAA;AAAA,QACT,MACE,UAAA,KAAe,QAAA,GACX,eAAA,GACA,UAAA,KAAe,SACb,aAAA,GACA;AAAA,OACT,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU,WAAW,UAAU;AAAA,GAC/C;AAEA,EAAA,MAAM,eAAA,GAAkBA,YAAY,MAAM;AACxC,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgBA,WAAAA;AAAA,IACpB,CAAC,IAAA,KAAqB;AACpB,MAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,MAAA,MAAMK,YAAW,KAAA,CAAM,KAAA,EAAO,YAAY,EAAE,OAAA,EAAS,kBAAkB,CAAA;AACvE,MAAA,IAAIA,SAAAA,EAAU;AACZ,QAAA,MAAM,cACJ,IAAA,KAAS,QAAA,GACL,eAAA,GACA,IAAA,KAAS,SACP,aAAA,GACA,QAAA;AACR,QAAAA,SAAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAiB;AACjC,UAAA,KAAA,CAAM,OAAO,eAAA,CAAgB;AAAA,YAC3B,IAAI,OAAA,CAAQ,EAAA;AAAA,YACZ,IAAA,EAAM;AAAA,WACP,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,UAAA,GAAaL,YAAY,MAAM;AACnC,IAAA,MAAM,YAAY,CAAC,QAAA;AACnB,IAAA,WAAA,CAAY,SAAS,CAAA;AACrB,IAAA,MAAMK,YAAW,KAAA,CAAM,KAAA,EAAO,YAAY,EAAE,OAAA,EAAS,kBAAkB,CAAA;AACvE,IAAA,IAAIA,SAAAA,EAAU;AACZ,MAAAA,SAAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAiB;AACjC,QAAA,KAAA,CAAM,OAAO,eAAA,CAAgB;AAAA,UAC3B,IAAI,OAAA,CAAQ,EAAA;AAAA,UACZ,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAC,CAAA;AAE1B,EAAA,MAAM,gBAAA,GAAmBL,YAAY,MAAM;AACzC,IAAA,MAAM,aAAa,CAAC,SAAA;AACpB,IAAA,YAAA,CAAa,UAAU,CAAA;AACvB,IAAA,MAAMK,YAAW,KAAA,CAAM,KAAA,EAAO,YAAY,EAAE,OAAA,EAAS,kBAAkB,CAAA;AACvE,IAAA,IAAIA,SAAAA,EAAU;AACZ,MAAAA,SAAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAiB;AACjC,QAAA,KAAA,CAAM,OAAO,eAAA,CAAgB;AAAA,UAC3B,IAAI,OAAA,CAAQ,EAAA;AAAA,UACZ,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,KAAA,EAAO,SAAS,CAAC,CAAA;AAE3B,EAAA,MAAM,iBAAA,GAAoBL,YAAY,MAAM;AAC1C,IAAA,KAAA,CAAM,KAAA,EAAO,aAAA,CAAc,EAAE,OAAA,EAAS,kBAAkB,CAAA;AACxD,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,CAAC,KAAA,CAAM,KAAK,CAAC,CAAA;AAEhB,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACvIO,IAAM,YAAA,GAAmC;AAAA,EAC9C,EAAE,GAAA,EAAK,cAAA,EAAgB,SAAA,EAAW,cAAA,EAAe;AAAA,EACjD,EAAE,GAAA,EAAK,eAAA,EAAiB,SAAA,EAAW,eAAA,EAAgB;AAAA,EACnD,EAAE,GAAA,EAAK,kBAAA,EAAoB,SAAA,EAAW,kBAAA,EAAmB;AAAA,EACzD,EAAE,GAAA,EAAK,oBAAA,EAAsB,SAAA,EAAW,oBAAA,EAAqB;AAAA,EAC7D,EAAE,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAO;AAAA,EACjC,EAAE,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAW,MAAA;AAC5B;AAEO,IAAM,gBAAA,GAAmB,CAAC,QAAA,EAAU,YAAA,EAAc,WAAW;AAG7D,IAAM,eAAA,GAAkB,CAAC,MAAA,EAAQ,OAAO;AAGxC,IAAM,aAAA,GAAgB,CAAC,cAAA,EAAgB,YAAY;AAGnD,IAAM,kBAAA,GAAqB,CAAC,QAAA,EAAU,cAAA,EAAgB,MAAM;;;ACmDnE,IAAM,eAAA,GAA8C;AAAA,EAClD,UAAA,EAAY,cAAA;AAAA,EACZ,aAAA,EAAe,SAAA;AAAA,EACf,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,cAAA;AAAA,EACb,aAAA,EAAe,IAAA;AAAA,EACf,iBAAA,EAAmB,IAAA;AAAA,EACnB,aAAA,EAAe,IAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,sBAAA,EAAwB,IAAA;AAAA,EACxB,aAAA,EAAe,QAAA;AAAA,EACf,aAAA,EAAe,OAAA;AAAA,EACf,WAAA,EAAa,KAAA;AAAA,EACb,iBAAA,EAAmB,KAAA;AAAA,EACnB,YAAA,EAAc,IAAA;AAAA,EACd,QAAA,EAAU,IAAA;AAAA,EACV,aAAA,EAAe,IAAA;AAAA,EACf,iBAAA,EAAmB,IAAA;AAAA,EACnB,oBAAA,EAAsB,IAAA;AAAA,EACtB,eAAA,EAAiB;AACnB,CAAA;AAEO,SAAS,wBAAA,GAA2D;AACzE,EAAA,MAAM,EAAE,KAAA,EAAO,gBAAA,EAAiB,GAAI,gBAAA,EAAiB;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAII,SAAqC,eAAe,CAAA;AACpF,EAAA,MAAM,cAAA,GAAiBF,OAAO,IAAI,CAAA;AAElC,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AACzB,MAAA;AAAA,IACF;AACA,IAAA,gBAAA,GAAmB,EAAE,GAAG,QAAA,EAAU,CAAA;AAAA,EACpC,CAAA,EAAG,CAAC,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAE/B,EAAA,MAAM,WAAA,GAAcF,OAAAA;AAAA,IAClB,MACE,YAAA,CAAa,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,MACxB,KAAK,EAAA,CAAG,GAAA;AAAA,MACR,WAAW,EAAA,CAAG;AAAA,KAChB,CAAE,CAAA;AAAA,IACJ;AAAC,GACH;AAEA,EAAA,MAAM,cAAA,GAAiBA,OAAAA;AAAA,IACrB,MAAM,gBAAA,CAAiB,GAAA,CAAI,CAAC,GAAA,MAAS,EAAE,GAAA,EAAK,GAAA,EAAK,SAAA,EAAW,GAAA,EAAI,CAAE,CAAA;AAAA,IAClE;AAAC,GACH;AAEA,EAAA,MAAM,cAAA,GAAiBA,OAAAA;AAAA,IACrB,MAAM,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAA,EAAK,CAAA,EAAG,SAAA,EAAW,CAAA,EAAE,CAAE,CAAA;AAAA,IAC3D;AAAC,GACH;AAEA,EAAA,MAAM,YAAA,GAAeA,OAAAA;AAAA,IACnB,MAAM,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAA,EAAK,CAAA,EAAG,SAAA,EAAW,CAAA,EAAE,CAAE,CAAA;AAAA,IACzD;AAAC,GACH;AAEA,EAAA,MAAM,gBAAA,GAAmBA,OAAAA;AAAA,IACvB,MAAM,kBAAA,CAAmB,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAA,EAAK,CAAA,EAAG,SAAA,EAAW,CAAA,EAAE,CAAE,CAAA;AAAA,IAC9D;AAAC,GACH;AAGA,EAAA,MAAM,iBAAA,GAAoBC,OAAO,KAAK,CAAA;AACtC,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,CAAM,KAAA,IAAS,iBAAA,CAAkB,OAAA,EAAS;AAC/C,IAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAG5B,IAAA,MAAM,gBAAA,GACJ,SAAS,iBAAA,IACT,QAAA,CAAS,kBAAkB,QAAA,IAC3B,QAAA,CAAS,aAAA,KAAkB,OAAA,IAC3B,QAAA,CAAS,WAAA;AACX,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,KAAA,CAAM,MAAM,cAAA,CAAe;AAAA,QACzB,EAAA,EAAI,aAAA;AAAA,QACJ,IAAA,EAAM;AAAA,UACJ,GAAI,QAAA,CAAS,aAAA,KAAkB,YAAY,EAAE,IAAA,EAAM,SAAS,aAAA,EAAc;AAAA,UAC1E,GAAI,QAAA,CAAS,iBAAA,IAAqB,EAAE,SAAS,IAAA,EAAK;AAAA,UAClD,GAAI,QAAA,CAAS,aAAA,KAAkB,WAAW,EAAE,QAAA,EAAU,SAAS,aAAA,EAAc;AAAA,UAC7E,GAAI,QAAA,CAAS,WAAA,IAAe,EAAE,QAAQ,IAAA;AAAK;AAC7C,OACD,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,SAAS,sBAAA,EAAwB;AACnC,MAAA,KAAA,CAAM,MAAM,SAAA,CAAU;AAAA,QACpB,WAAW,EAAE,aAAA,EAAe,EAAE,IAAA,EAAM,MAAK;AAAE,OAC5C,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,KAAK,CAAC,CAAA;AAEhB,EAAA,MAAM,UAAA,GAAaH,WAAAA;AAAA,IACjB,CAAC,MAAc,KAAA,KAAmB;AAChC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,MAAA,MAAM,WAAoC,EAAC;AAC3C,MAAA,IAAI,OAAA,GAAmC,QAAA;AACvC,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACzC,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,EAAC;AACrB,QAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,MAC5B;AACA,MAAA,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAC,CAAA,GAAI,KAAA;AACnC,MAAA,KAAA,CAAM,KAAA,EAAO,UAAU,QAAQ,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,aAAA,GAAgBA,WAAAA;AAAA,IACpB,CAAC,IAAA,KAAkC;AACjC,MAAA,KAAA,CAAM,OAAO,cAAA,CAAe,EAAE,EAAA,EAAI,aAAA,EAAe,MAAM,CAAA;AAAA,IACzD,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,aAAA,GAAgBA,WAAAA;AAAA,IACpB,CAAC,IAAA,KAAiB;AAChB,MAAA,UAAA,CAAW,eAAe,IAAI,CAAA;AAC9B,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,UAAA,EAAY,MAAK,CAAE,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,gBAAA,GAAmBA,WAAAA;AAAA,IACvB,CAAC,KAAA,KAAkB;AACjB,MAAA,KAAA,CAAM,OAAO,SAAA,CAAU;AAAA,QACrB,MAAA,EAAQ;AAAA,UACN,KAAK,EAAE,OAAA,EAAS,OAAO,aAAA,EAAe,KAAA,EAAO,aAAa,KAAA;AAAM;AAClE,OACD,CAAA;AACD,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,aAAA,EAAe,OAAM,CAAE,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,kBAAA,GAAqBA,WAAAA;AAAA,IACzB,CAAC,KAAA,KAAkB;AACjB,MAAA,KAAA,CAAM,OAAO,SAAA,CAAU;AAAA,QACrB,MAAA,EAAQ;AAAA,UACN,KAAK,EAAE,SAAA,EAAW,OAAO,eAAA,EAAiB,KAAA,EAAO,eAAe,KAAA;AAAM;AACxE,OACD,CAAA;AACD,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,eAAA,EAAiB,OAAM,CAAE,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,cAAA,GAAiBA,WAAAA;AAAA,IACrB,CAAC,IAAA,KAAsB;AACrB,MAAA,UAAA,CAAW,0BAA0B,IAAI,CAAA;AACzC,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,WAAA,EAAa,MAAK,CAAE,CAAA;AAAA,IAClD,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,gBAAA,GAAmBA,WAAAA;AAAA,IACvB,CAAC,IAAA,KAAkB;AACjB,MAAA,UAAA,CAAW,8BAA8B,IAAI,CAAA;AAC7C,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,aAAA,EAAe,MAAK,CAAE,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,oBAAA,GAAuBA,WAAAA;AAAA,IAC3B,CAAC,IAAA,KAAkB;AACjB,MAAA,UAAA,CAAW,mCAAmC,IAAI,CAAA;AAClD,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,iBAAA,EAAmB,MAAK,CAAE,CAAA;AAAA,IACxD,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,gBAAA,GAAmBA,WAAAA;AAAA,IACvB,CAAC,IAAA,KAAkB;AACjB,MAAA,UAAA,CAAW,8BAA8B,IAAI,CAAA;AAC7C,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,aAAA,EAAe,MAAK,CAAE,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,CAAC,IAAA,KAAkB;AACjB,MAAA,UAAA,CAAW,6BAA6B,IAAI,CAAA;AAC5C,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,YAAA,EAAc,MAAK,CAAE,CAAA;AAAA,IACnD,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,yBAAA,GAA4BA,WAAAA;AAAA,IAChC,CAAC,IAAA,KAAkB;AACjB,MAAA,UAAA,CAAW,gCAAgC,IAAI,CAAA;AAC/C,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,sBAAA,EAAwB,MAAK,CAAE,CAAA;AAAA,IAC7D,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,gBAAA,GAAmBA,WAAAA;AAAA,IACvB,CAAC,IAAA,KAAwB;AACvB,MAAA,aAAA,CAAc,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAC5B,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,aAAA,EAAe,MAAK,CAAE,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,gBAAA,GAAmBA,WAAAA;AAAA,IACvB,CAAC,QAAA,KAA4B;AAC3B,MAAA,aAAA,CAAc,EAAE,UAAU,CAAA;AAC1B,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,aAAA,EAAe,UAAS,CAAE,CAAA;AAAA,IACxD,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,cAAA,GAAiBA,WAAAA;AAAA,IACrB,CAAC,MAAA,KAAoB;AACnB,MAAA,aAAA,CAAc,EAAE,QAAQ,CAAA;AACxB,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,WAAA,EAAa,QAAO,CAAE,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,oBAAA,GAAuBA,WAAAA;AAAA,IAC3B,CAAC,OAAA,KAAqB;AACpB,MAAA,aAAA,CAAc,EAAE,SAAS,CAAA;AACzB,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,iBAAA,EAAmB,SAAQ,CAAE,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,WAAA,GAAcA,WAAAA;AAAA,IAClB,CAAC,IAAA,KAAkB;AACjB,MAAA,UAAA,CAAW,aAAa,IAAI,CAAA;AAC5B,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,QAAA,EAAU,MAAK,CAAE,CAAA;AAAA,IAC/C,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,CAAC,IAAA,KAAkB;AACjB,MAAA,UAAA,CAAW,cAAc,IAAI,CAAA;AAC7B,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,YAAA,EAAc,MAAK,CAAE,CAAA;AAAA,IACnD,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,gBAAA,GAAmBA,WAAAA;AAAA,IACvB,CAAC,IAAA,KAAkB;AACjB,MAAA,UAAA,CAAW,kBAAkB,IAAI,CAAA;AACjC,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,aAAA,EAAe,MAAK,CAAE,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,oBAAA,GAAuBA,WAAAA;AAAA,IAC3B,CAAC,IAAA,KAAkB;AACjB,MAAA,UAAA,CAAW,uBAAuB,IAAI,CAAA;AACtC,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,iBAAA,EAAmB,MAAK,CAAE,CAAA;AAAA,IACxD,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,uBAAA,GAA0BA,WAAAA;AAAA,IAC9B,CAAC,IAAA,KAAkB;AACjB,MAAA,UAAA,CAAW,0BAA0B,IAAI,CAAA;AACzC,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,oBAAA,EAAsB,MAAK,CAAE,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,kBAAA,GAAqBA,WAAAA;AAAA,IACzB,CAAC,IAAA,KAA0B;AACzB,MAAA,KAAA,CAAM,OAAO,SAAA,CAAU;AAAA,QACrB,QAAQ,EAAE,OAAA,EAAS,EAAE,QAAA,EAAU,MAAK,EAAE;AAAA,QACtC,WAAW,EAAE,OAAA,EAAS,EAAE,QAAA,EAAU,MAAK;AAAE,OAC1C,CAAA;AACD,MAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,eAAA,EAAiB,MAAK,CAAE,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,eAAA,GAAkBA,YAAY,MAAM;AACxC,IAAA,WAAA,CAAY,eAAe,CAAA;AAC3B,IAAA,KAAA,CAAM,KAAA,EAAO,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA;AAElC,IAAA,KAAA,CAAM,OAAO,cAAA,CAAe;AAAA,MAC1B,EAAA,EAAI,aAAA;AAAA,MACJ,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,KAAA;AAAM,KAC1E,CAAA;AAAA,EACH,GAAG,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,WAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,oBAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,yBAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,oBAAA;AAAA,IACA,uBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF;AACF;AC/XO,SAAS,aAAA,GAAqC;AACnD,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,gBAAA,EAAiB;AAE7C,EAAA,MAAM,OAAA,GAAUA,YAAY,MAAM;AAChC,IAAA,IAAI,CAAC,MAAM,KAAA,EAAO;AAClB,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,oBAAA,CAAqB,IAAA,EAAM,QAAQ,KAAA,CAAM,KAAA,KAAU,MAAA,GAAS,SAAA,GAAY,SAAS,CAAA;AACzG,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,oBAAA,EAAsB,GAAA,EAAK,CAAA;AAAA,EAC9C,GAAG,CAAC,KAAA,CAAM,OAAO,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAC,CAAA;AAEvC,EAAA,MAAM,QAAA,GAAWA,WAAAA;AAAA,IACf,CAAC,WAAW,sBAAA,KAA2B;AACrC,MAAA,IAAI,CAAC,MAAM,aAAA,EAAe;AAC1B,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACvC,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,aAAA;AAClB,MAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAC9B,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,CAAC,MAAM,aAAa;AAAA,GACtB;AAEA,EAAA,MAAM,KAAA,GAAQA,YAAY,MAAM;AAC9B,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,oBAAA,EAAsB,GAAA,EAAK,MAAM,CAAA;AAAA,EACpD,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,OAAO;AAAA,IACL,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,OAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AC/BO,SAAS,aAAA,GAAqC;AACnD,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,wBAAA,EAAyB;AAC5D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAII,SAAS,KAAK,CAAA;AAEtD,EAAA,MAAM,KAAA,GAAQJ,YAAY,MAAM;AAC9B,IAAA,MAAM,KAAK,sBAAA,CAAuB,OAAA;AAClC,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,IAAI,GAAG,iBAAA,EAAmB;AACxB,MAAA,EAAA,CAAG,iBAAA,EAAkB;AAAA,IACvB,CAAA,MAAA,IAAW,6BAA6B,EAAA,EAAI;AAC1C,MAAC,GAA6D,uBAAA,EAAwB;AAAA,IACxF,CAAA,MAAA,IAAW,yBAAyB,EAAA,EAAI;AACtC,MAAC,GAAyD,mBAAA,EAAoB;AAAA,IAChF;AAAA,EACF,CAAA,EAAG,CAAC,sBAAsB,CAAC,CAAA;AAE3B,EAAA,MAAM,IAAA,GAAOA,YAAY,MAAM;AAC7B,IAAA,IAAI,SAAS,cAAA,EAAgB;AAC3B,MAAA,QAAA,CAAS,cAAA,EAAe;AAAA,IAC1B,CAAA,MAAA,IAAW,0BAA0B,QAAA,EAAU;AAC7C,MAAC,SAA6D,oBAAA,EAAqB;AAAA,IACrF,CAAA,MAAA,IAAW,sBAAsB,QAAA,EAAU;AACzC,MAAC,SAAyD,gBAAA,EAAiB;AAAA,IAC7E;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASA,YAAY,MAAM;AAC/B,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAA,EAAK;AAAA,IACP,CAAA,MAAO;AACL,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,KAAA,EAAO,IAAI,CAAC,CAAA;AAE9B,EAAAG,UAAU,MAAM;AACd,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,eAAA,CAAgB,CAAC,CAAC,QAAA,CAAS,iBAAiB,CAAA;AAAA,IAC9C,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,OAAO,CAAA;AACrD,IAAA,QAAA,CAAS,gBAAA,CAAiB,0BAA0B,OAAO,CAAA;AAC3D,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,oBAAoB,OAAO,CAAA;AACxD,MAAA,QAAA,CAAS,mBAAA,CAAoB,0BAA0B,OAAO,CAAA;AAAA,IAChE,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA,EAAc;AAAA,GAChB;AACF;ACzBO,SAAS,aAAA,GAAqC;AACnD,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,gBAAA,EAAiB;AAInC,EAAA,MAAM,YAAA,GAAeD,MAAAA,iBAA6C,IAAI,GAAA,EAAK,CAAA;AAE3E,EAAA,MAAM,eAAA,GAAkBF,WAAAA;AAAA,IACtB,CAAC,OAAA,KAA6C;AAC5C,MAAA,IAAI,CAAC,KAAA,CAAM,KAAA,EAAO,OAAO,IAAA;AACzB,MAAA,MAAM;AAAA,QACJ,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA;AAAA,QACA,SAAA,GAAY,KAAA;AAAA,QACZ,aAAA;AAAA,QACA,GAAG;AAAA,OACL,GAAI,OAAA;AACJ,MAAA,MAAM,KACJ,KAAA,IACA,CAAA,WAAA,EAAc,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAEpE,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,aAAa,CAAA;AAAA,MAC5C;AAKA,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,WAAA,EAAY,CAAE,MAAA;AAC5C,MAAA,MAAM,WAAA,GAAc,SAAA,GAAY,CAAA,GAAI,SAAA,GAAY,CAAA,GAAI,CAAA;AAEpD,MAAA,KAAA,CAAM,MAAM,aAAA,CAAc;AAAA,QACxB,IAAA,EAAM,WAAA;AAAA,QACN,EAAA;AAAA,QACA,QAAQ,CAAC,EAAE,WAAW,WAAA,EAAa,KAAA,EAAO,OAAO,CAAA;AAAA,QACjD,UAAA;AAAA,QACA,MAAM,CAAC,SAAA;AAAA,QACP,IAAA,EAAM,QAAA;AAAA,QACN,gBAAA,EAAkB,CAAC,KAAA,KAAU;AAC3B,UAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA;AAC1C,UAAA,IAAI,YAAY,IAAA,EAAM;AACpB,YAAA,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,GAAI,QAAQ,CAAA;AAAA,UACzC;AAAA,QACF;AAAA,OACD,CAAA;AACD,MAAA,OAAO,EAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,CAAC,IAAY,OAAA,KAAmD;AAC9D,MAAA,IAAI,CAAC,MAAM,KAAA,EAAO;AAClB,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,aAAA,EAAe,GAAG,YAAW,GAAI,OAAA;AAC3D,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,WAAA,CAAY,EAAE,EAAA,EAAI,IAAI,CAAC,CAAA;AACpD,MAAA,IAAI,CAAC,QAAA,EAAU;AAEf,MAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,QAAA,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,aAAa,CAAA;AAAA,MAC5C;AAEA,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,WAAA,EAAY,CAAE,MAAA;AAC5C,MAAA,MAAM,WAAA,GAAc,SAAA,GAAY,CAAA,GAAI,SAAA,GAAY,CAAA,GAAI,CAAA;AACpD,MAAA,KAAA,CAAM,MAAM,eAAA,CAAgB;AAAA,QAC1B,EAAA;AAAA,QACA,GAAI,KAAA,IAAS,IAAA,GACT,EAAE,QAAQ,CAAC,EAAE,SAAA,EAAW,WAAA,EAAa,KAAA,EAAO,KAAA,EAAO,CAAA,KACnD,EAAC;AAAA,QACL,GAAI,aAAa,IAAA,GAAO,EAAE,MAAM,CAAC,SAAA,KAAc,EAAC;AAAA,QAChD,UAAA,EAAY;AAAA,UACV,GAAI,QAAA,CAAS,UAAA;AAAA,UACb,GAAG;AAAA;AACL,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,CAAC,EAAA,KAAe;AACd,MAAA,KAAA,CAAM,KAAA,EAAO,aAAA,CAAc,EAAE,EAAA,EAAI,CAAA;AACjC,MAAA,YAAA,CAAa,OAAA,CAAQ,OAAO,EAAE,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,MAAM,mBAAA,GAAsBA,YAAY,MAAM;AAC5C,IAAA,KAAA,CAAM,KAAA,EAAO,aAAA,CAAc,EAAE,IAAA,EAAM,aAAa,CAAA;AAChD,IAAA,YAAA,CAAa,QAAQ,KAAA,EAAM;AAAA,EAC7B,CAAA,EAAG,CAAC,KAAA,CAAM,KAAK,CAAC,CAAA;AAEhB,EAAA,OAAO;AAAA,IACL,eAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC1HO,SAAS,gBAAA,CACd,UACA,QAAA,EACY;AACZ,EAAA,IAAI,eAAA,GAAiC,IAAA;AAGrC,EAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAO,MAAA,KAAW;AACzB,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,aAAA,EAAe,SAAA,EAAW,MAAM,CAAA;AAEjD,QAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,UAAA,eAAA,GAAkB,IAAA;AAClB,UAAA,MAAM,MAAM,EAAE,UAAA;AACd,UAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,mBAAA;AAAA,YAC1B,MAAA,CAAO,MAAA;AAAA,YACP,EAAE,GAAG,MAAA,CAAO,MAAA,EAAQ,OAAO,EAAA,EAAG;AAAA,YAC9B,CAAA;AAAA,YACA,KAAK,GAAA;AAAI,WACX;AACA,UAAA,IAAI,QAAQ,UAAA,EAAY;AACxB,UAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,YAAA,eAAA,GAAkB,IAAA,CAAK,CAAC,CAAA,CAAE,SAAA;AAAA,UAC5B;AACA,UAAA,MAAA,CAAO,SAAS,IAAA,EAAqB;AAAA,YACnC,OAAA,EAAS,KAAK,MAAA,GAAS,CAAA;AAAA,YACvB,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,KAAS,SAAA,IAAa,oBAAoB,IAAA,EAAM;AAChE,UAAA,MAAM,GAAA,GAAM,UAAA;AACZ,UAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,mBAAA;AAAA,YAC1B,MAAA,CAAO,MAAA;AAAA,YACP,EAAE,GAAG,MAAA,CAAO,MAAA,EAAQ,OAAO,EAAA,EAAG;AAAA,YAC9B,CAAA;AAAA,YACA,eAAA,GAAkB;AAAA,WACpB;AACA,UAAA,IAAI,QAAQ,UAAA,EAAY;AACxB,UAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,YAAA,eAAA,GAAkB,IAAA,CAAK,CAAC,CAAA,CAAE,SAAA;AAAA,UAC5B;AACA,UAAA,MAAA,CAAO,SAAS,IAAA,EAAqB;AAAA,YACnC,OAAA,EAAS,KAAK,MAAA,GAAS,CAAA;AAAA,YACvB,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,KAAS,UAAA,EAAY;AAGrC,UAAA,MAAA,CAAO,QAAA,CAAS,EAAC,EAAG,EAAE,SAAS,KAAA,EAAO,QAAA,EAAU,OAAO,CAAA;AAAA,QACzD;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,KAAK,CAAA;AACjD,QAAA,MAAA,CAAO,QAAA,CAAS,EAAC,EAAG,EAAE,SAAS,KAAA,EAAO,QAAA,EAAU,OAAO,CAAA;AAAA,MACzD,CAAA,SAAE;AACA,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,aAAA,EAAe,SAAA,EAAW,OAAO,CAAA;AAAA,MACpD;AAAA,IACF,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,MAAA,KAAW;AACxB,MAAA,QAAA,CAAS,SAAA;AAAA,QACP,MAAA,CAAO,MAAA;AAAA,QACP,EAAE,GAAG,MAAA,CAAO,MAAA,EAAQ,OAAO,EAAA,EAAG;AAAA,QAC9B,CAAC,SAAA,KAAc,MAAA,CAAO,QAAA,CAAS,SAAsB;AAAA,OACvD;AAAA,IACF,CAAA;AAAA,IACA,cAAA,EAAgB,CAAC,MAAA,KAAW;AAC1B,MAAA,QAAA,CAAS,WAAA,CAAY,OAAO,MAAA,EAAQ,EAAE,GAAG,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,IACrE;AAAA,GACF;AACF","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type {\n KlinechartsUIState,\n KlinechartsUIContextValue,\n KlinechartsUIDispatchValue,\n} from \"./types\";\n\nexport const KlinechartsUIStateContext =\n createContext<KlinechartsUIState | null>(null);\n\nexport const KlinechartsUIDispatchContext =\n createContext<KlinechartsUIDispatchValue | null>(null);\n\n/**\n * @internal\n * Reads only the stable dispatch slice. Hooks that use this won't re-render\n * when chart state changes (e.g. symbol, period, isLoading).\n */\nexport function useKlinechartsUIDispatch(): KlinechartsUIDispatchValue {\n const ctx = useContext(KlinechartsUIDispatchContext);\n if (!ctx) {\n throw new Error(\n \"useKlinechartsUI must be used within a <KlinechartsUIProvider>\"\n );\n }\n return ctx;\n}\n\n/**\n * Primary hook — returns the full combined context value.\n * For performance-sensitive cases, prefer the two split hooks internally.\n */\nexport function useKlinechartsUI(): KlinechartsUIContextValue {\n const state = useContext(KlinechartsUIStateContext);\n const dispatch = useContext(KlinechartsUIDispatchContext);\n if (!state || !dispatch) {\n throw new Error(\n \"useKlinechartsUI must be used within a <KlinechartsUIProvider>\"\n );\n }\n return { state, ...dispatch };\n}\n","import type { Period as KlinechartsPeriod } from \"react-klinecharts\";\n\nexport interface TerminalPeriod extends KlinechartsPeriod {\n label: string;\n}\n\nexport const DEFAULT_PERIODS: TerminalPeriod[] = [\n { span: 1, type: \"minute\", label: \"1m\" },\n { span: 5, type: \"minute\", label: \"5m\" },\n { span: 15, type: \"minute\", label: \"15m\" },\n { span: 1, type: \"hour\", label: \"1H\" },\n { span: 2, type: \"hour\", label: \"2H\" },\n { span: 4, type: \"hour\", label: \"4H\" },\n { span: 1, type: \"day\", label: \"D\" },\n { span: 1, type: \"week\", label: \"W\" },\n { span: 1, type: \"month\", label: \"M\" },\n { span: 1, type: \"year\", label: \"Y\" },\n];\n","import {\n useReducer,\n useMemo,\n useEffect,\n useCallback,\n useRef,\n type ReactElement,\n} from \"react\";\nimport type {\n KlinechartsUIOptions,\n KlinechartsUIState,\n KlinechartsUIAction,\n} from \"./types\";\nimport {\n KlinechartsUIStateContext,\n KlinechartsUIDispatchContext,\n} from \"./ChartTerminalContext\";\nimport { DEFAULT_PERIODS } from \"../data/periods\";\nimport { registerExtensions } from \"../extensions\";\nimport { registerOverlay } from \"react-klinecharts\";\n\nfunction reducer(\n state: KlinechartsUIState,\n action: KlinechartsUIAction,\n): KlinechartsUIState {\n switch (action.type) {\n case \"SET_CHART\":\n return { ...state, chart: action.chart };\n case \"SET_SYMBOL\":\n return { ...state, symbol: action.symbol };\n case \"SET_PERIOD\":\n return { ...state, period: action.period };\n case \"SET_THEME\":\n return { ...state, theme: action.theme };\n case \"SET_TIMEZONE\":\n return { ...state, timezone: action.timezone };\n case \"SET_LOADING\":\n return { ...state, isLoading: action.isLoading };\n case \"SET_MAIN_INDICATORS\":\n return { ...state, mainIndicators: action.indicators };\n case \"SET_SUB_INDICATORS\":\n return { ...state, subIndicators: action.indicators };\n case \"SET_STYLES\":\n return { ...state, styles: action.styles };\n case \"SET_LOCALE\":\n return { ...state, locale: action.locale };\n case \"SET_SCREENSHOT_URL\":\n return { ...state, screenshotUrl: action.url };\n default:\n return state;\n }\n}\n\nexport function KlinechartsUIProvider({\n datafeed,\n defaultSymbol,\n defaultPeriod,\n defaultTheme = \"light\",\n defaultTimezone = \"Asia/Shanghai\",\n defaultMainIndicators = [\"MA\"],\n defaultSubIndicators = [\"VOL\"],\n defaultLocale = \"en-US\",\n periods,\n styles,\n registerExtensions: shouldRegister = true,\n overlays: extraOverlays,\n children,\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n onSettingsChange,\n}: KlinechartsUIOptions): ReactElement {\n // Lazy initializer — runs only once, avoiding a new object on every render.\n const [state, dispatch] = useReducer(\n reducer,\n {\n datafeed,\n defaultSymbol,\n defaultPeriod,\n defaultTheme,\n defaultTimezone,\n defaultMainIndicators,\n defaultSubIndicators,\n defaultLocale,\n periods,\n styles,\n },\n (opts) => ({\n chart: null,\n datafeed: opts.datafeed,\n symbol: opts.defaultSymbol ?? null,\n period: opts.defaultPeriod ?? (opts.periods ?? DEFAULT_PERIODS)[0],\n theme: opts.defaultTheme ?? \"light\",\n timezone: opts.defaultTimezone ?? \"Asia/Shanghai\",\n isLoading: false,\n locale: opts.defaultLocale ?? \"en-US\",\n periods: opts.periods ?? DEFAULT_PERIODS,\n mainIndicators: opts.defaultMainIndicators ?? [\"MA\"],\n subIndicators: (opts.defaultSubIndicators ?? [\"VOL\"]).reduce(\n (acc, name) => ({ ...acc, [name]: \"\" }),\n {} as Record<string, string>,\n ),\n styles: opts.styles,\n screenshotUrl: null,\n }),\n );\n\n const fullscreenContainerRef = useRef<HTMLElement | null>(null);\n\n // Tracks the current state so enhancedDispatch can compute the new state\n // synchronously (reducer is pure, so we can call it before dispatch).\n const stateRef = useRef(state);\n stateRef.current = state;\n\n // Keep latest callbacks in a ref so enhancedDispatch closure never goes stale.\n const callbacksRef = useRef({\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n });\n callbacksRef.current = {\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n };\n\n /**\n * Wraps dispatch so that per-action callbacks are called synchronously.\n * Because React's dispatch is async, we pre-compute the new state by\n * calling reducer() directly (it is pure) — this gives onStateChange the\n * correct post-action state without any useEffect delay.\n */\n const enhancedDispatch = useCallback((action: KlinechartsUIAction) => {\n const prevState = stateRef.current;\n const newState = reducer(prevState, action);\n stateRef.current = newState; // Update immediately so sequential sync dispatches see the new state\n dispatch(action);\n const cbs = callbacksRef.current;\n cbs.onStateChange?.(action, newState, prevState);\n switch (action.type) {\n case \"SET_SYMBOL\":\n cbs.onSymbolChange?.(action.symbol);\n break;\n case \"SET_PERIOD\":\n cbs.onPeriodChange?.(action.period);\n break;\n case \"SET_THEME\":\n cbs.onThemeChange?.(action.theme);\n break;\n case \"SET_TIMEZONE\":\n cbs.onTimezoneChange?.(action.timezone);\n break;\n case \"SET_MAIN_INDICATORS\":\n cbs.onMainIndicatorsChange?.(action.indicators);\n break;\n case \"SET_SUB_INDICATORS\":\n cbs.onSubIndicatorsChange?.(action.indicators);\n break;\n }\n }, []);\n\n // Capture initial overlays in a ref so the effect doesn't re-run when the\n // consumer passes an inline array (which would be a new reference each render).\n const extraOverlaysRef = useRef(extraOverlays);\n\n useEffect(() => {\n if (shouldRegister) {\n registerExtensions();\n }\n extraOverlaysRef.current?.forEach((overlay) => registerOverlay(overlay));\n }, [shouldRegister]);\n\n useEffect(() => {\n if (state.chart && state.styles) {\n state.chart.setStyles(state.styles);\n }\n }, [state.chart, state.styles]);\n\n // Dispatch context is stable — only recreated if datafeed/onSettingsChange\n // reference changes (which should be rare / memoised by the consumer).\n const dispatchValue = useMemo(\n () => ({\n dispatch: enhancedDispatch,\n datafeed,\n onSettingsChange,\n fullscreenContainerRef,\n }),\n [enhancedDispatch, datafeed, onSettingsChange],\n );\n\n return (\n <KlinechartsUIStateContext.Provider value={state}>\n <KlinechartsUIDispatchContext.Provider value={dispatchValue}>\n {children}\n </KlinechartsUIDispatchContext.Provider>\n </KlinechartsUIStateContext.Provider>\n );\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseKlinechartsUIThemeReturn {\n theme: string;\n setTheme: (theme: string) => void;\n toggleTheme: () => void;\n}\n\nexport function useKlinechartsUITheme(): UseKlinechartsUIThemeReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const setTheme = useCallback(\n (theme: string) => {\n state.chart?.setStyles(theme);\n dispatch({ type: \"SET_THEME\", theme });\n },\n [state.chart, dispatch]\n );\n\n const toggleTheme = useCallback(() => {\n const newTheme = state.theme === \"light\" ? \"dark\" : \"light\";\n setTheme(newTheme);\n }, [state.theme, setTheme]);\n\n return {\n theme: state.theme,\n setTheme,\n toggleTheme,\n };\n}\n","import { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseKlinechartsUILoadingReturn {\n isLoading: boolean;\n}\n\nexport function useKlinechartsUILoading(): UseKlinechartsUILoadingReturn {\n const { state } = useKlinechartsUI();\n return { isLoading: state.isLoading };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { TerminalPeriod } from \"../data/periods\";\n\nexport interface UsePeriodsReturn {\n periods: TerminalPeriod[];\n activePeriod: TerminalPeriod;\n setPeriod: (period: TerminalPeriod) => void;\n}\n\nexport function usePeriods(): UsePeriodsReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const setPeriod = useCallback(\n (period: TerminalPeriod) => {\n dispatch({ type: \"SET_PERIOD\", period });\n },\n [dispatch]\n );\n\n return {\n periods: state.periods,\n activePeriod: state.period,\n setPeriod,\n };\n}\n","export interface TimezoneOption {\n key: string;\n localeKey: string;\n}\n\nexport const TIMEZONES: TimezoneOption[] = [\n { key: \"Etc/UTC\", localeKey: \"utc\" },\n { key: \"Pacific/Honolulu\", localeKey: \"honolulu\" },\n { key: \"America/Juneau\", localeKey: \"juneau\" },\n { key: \"America/Los_Angeles\", localeKey: \"los_angeles\" },\n { key: \"America/Chicago\", localeKey: \"chicago\" },\n { key: \"America/Toronto\", localeKey: \"toronto\" },\n { key: \"America/Sao_Paulo\", localeKey: \"sao_paulo\" },\n { key: \"Europe/London\", localeKey: \"london\" },\n { key: \"Europe/Berlin\", localeKey: \"berlin\" },\n { key: \"Asia/Bahrain\", localeKey: \"bahrain\" },\n { key: \"Asia/Dubai\", localeKey: \"dubai\" },\n { key: \"Asia/Ashkhabad\", localeKey: \"ashkhabad\" },\n { key: \"Asia/Almaty\", localeKey: \"almaty\" },\n { key: \"Asia/Bangkok\", localeKey: \"bangkok\" },\n { key: \"Asia/Shanghai\", localeKey: \"shanghai\" },\n { key: \"Asia/Tokyo\", localeKey: \"tokyo\" },\n { key: \"Australia/Sydney\", localeKey: \"sydney\" },\n { key: \"Pacific/Norfolk\", localeKey: \"norfolk\" },\n];\n","import { useCallback, useMemo } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport { TIMEZONES } from \"../data/timezones\";\n\nexport interface TimezoneItem {\n key: string;\n localeKey: string;\n}\n\nexport interface UseTimezoneReturn {\n timezones: TimezoneItem[];\n activeTimezone: string;\n setTimezone: (timezone: string) => void;\n}\n\nexport function useTimezone(): UseTimezoneReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const timezones = useMemo(\n () =>\n TIMEZONES.map((tz) => ({\n key: tz.key,\n localeKey: tz.localeKey,\n })),\n []\n );\n\n const setTimezone = useCallback(\n (timezone: string) => {\n state.chart?.setTimezone(timezone);\n dispatch({ type: \"SET_TIMEZONE\", timezone });\n },\n [state.chart, dispatch]\n );\n\n return {\n timezones,\n activeTimezone: state.timezone,\n setTimezone,\n };\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { PartialSymbolInfo } from \"../provider/types\";\n\nexport interface UseSymbolSearchReturn {\n query: string;\n results: PartialSymbolInfo[];\n isSearching: boolean;\n activeSymbol: PartialSymbolInfo | null;\n setQuery: (query: string) => void;\n selectSymbol: (symbol: PartialSymbolInfo) => void;\n clearResults: () => void;\n}\n\nexport function useSymbolSearch(debounceMs = 300): UseSymbolSearchReturn {\n const { state, dispatch, datafeed } = useKlinechartsUI();\n const [query, setQueryState] = useState(\"\");\n const [results, setResults] = useState<PartialSymbolInfo[]>([]);\n const [isSearching, setIsSearching] = useState(false);\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n // AbortController for the in-flight fetch — cancelled when a new query arrives.\n const abortRef = useRef<AbortController | null>(null);\n\n const setQuery = useCallback(\n (q: string) => {\n setQueryState(q);\n\n // Cancel previous debounce timer.\n if (timerRef.current) clearTimeout(timerRef.current);\n\n // Cancel previous in-flight request.\n abortRef.current?.abort();\n abortRef.current = null;\n\n if (!q.trim()) {\n setResults([]);\n setIsSearching(false);\n return;\n }\n\n setIsSearching(true);\n timerRef.current = setTimeout(async () => {\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const data = await datafeed.searchSymbols(q, controller.signal);\n if (!controller.signal.aborted) {\n setResults(data);\n }\n } catch {\n if (!controller.signal.aborted) {\n setResults([]);\n }\n } finally {\n if (!controller.signal.aborted) {\n setIsSearching(false);\n }\n }\n }, debounceMs);\n },\n [datafeed, debounceMs]\n );\n\n const selectSymbol = useCallback(\n (symbol: PartialSymbolInfo) => {\n dispatch({ type: \"SET_SYMBOL\", symbol });\n setQueryState(\"\");\n setResults([]);\n },\n [dispatch]\n );\n\n const clearResults = useCallback(() => {\n setQueryState(\"\");\n setResults([]);\n setIsSearching(false);\n }, []);\n\n // Cleanup on unmount.\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n abortRef.current?.abort();\n };\n }, []);\n\n return {\n query,\n results,\n isSearching,\n activeSymbol: state.symbol,\n setQuery,\n selectSymbol,\n clearResults,\n };\n}\n","export interface IndicatorParamConfig {\n label: string;\n defaultValue: number;\n}\n\nexport interface IndicatorDefinition {\n name: string;\n localeKey: string;\n params: IndicatorParamConfig[];\n}\n\nexport const MAIN_INDICATORS: string[] = [\n \"MA\",\n \"EMA\",\n \"SMA\",\n \"BOLL\",\n \"SAR\",\n \"BBI\",\n];\n\nexport const SUB_INDICATORS: string[] = [\n \"MA\",\n \"EMA\",\n \"VOL\",\n \"MACD\",\n \"BOLL\",\n \"KDJ\",\n \"RSI\",\n \"BIAS\",\n \"BRAR\",\n \"CCI\",\n \"DMI\",\n \"CR\",\n \"PSY\",\n \"DMA\",\n \"TRIX\",\n \"OBV\",\n \"VR\",\n \"WR\",\n \"MTM\",\n \"EMV\",\n \"SAR\",\n \"SMA\",\n \"ROC\",\n \"PVT\",\n \"BBI\",\n \"AO\",\n];\n\nexport const INDICATOR_PARAMS: Record<string, IndicatorDefinition> = {\n SMA: {\n name: \"SMA\",\n localeKey: \"sma\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 2 },\n ],\n },\n BOLL: {\n name: \"BOLL\",\n localeKey: \"boll\",\n params: [\n { label: \"period\", defaultValue: 20 },\n { label: \"standard_deviation\", defaultValue: 2 },\n ],\n },\n SAR: {\n name: \"SAR\",\n localeKey: \"sar\",\n params: [\n { label: \"params_1\", defaultValue: 2 },\n { label: \"params_2\", defaultValue: 2 },\n { label: \"params_3\", defaultValue: 20 },\n ],\n },\n BBI: {\n name: \"BBI\",\n localeKey: \"bbi\",\n params: [\n { label: \"params_1\", defaultValue: 3 },\n { label: \"params_2\", defaultValue: 6 },\n { label: \"params_3\", defaultValue: 12 },\n { label: \"params_4\", defaultValue: 24 },\n ],\n },\n MACD: {\n name: \"MACD\",\n localeKey: \"macd\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 26 },\n { label: \"params_3\", defaultValue: 9 },\n ],\n },\n KDJ: {\n name: \"KDJ\",\n localeKey: \"kdj\",\n params: [\n { label: \"params_1\", defaultValue: 9 },\n { label: \"params_2\", defaultValue: 3 },\n { label: \"params_3\", defaultValue: 3 },\n ],\n },\n BRAR: {\n name: \"BRAR\",\n localeKey: \"brar\",\n params: [{ label: \"params_1\", defaultValue: 26 }],\n },\n CCI: {\n name: \"CCI\",\n localeKey: \"cci\",\n params: [{ label: \"params_1\", defaultValue: 20 }],\n },\n DMI: {\n name: \"DMI\",\n localeKey: \"dmi\",\n params: [\n { label: \"params_1\", defaultValue: 14 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n CR: {\n name: \"CR\",\n localeKey: \"cr\",\n params: [\n { label: \"params_1\", defaultValue: 26 },\n { label: \"params_2\", defaultValue: 10 },\n { label: \"params_3\", defaultValue: 20 },\n { label: \"params_4\", defaultValue: 40 },\n { label: \"params_5\", defaultValue: 60 },\n ],\n },\n PSY: {\n name: \"PSY\",\n localeKey: \"psy\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n DMA: {\n name: \"DMA\",\n localeKey: \"dma\",\n params: [\n { label: \"params_1\", defaultValue: 10 },\n { label: \"params_2\", defaultValue: 50 },\n { label: \"params_3\", defaultValue: 10 },\n ],\n },\n TRIX: {\n name: \"TRIX\",\n localeKey: \"trix\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 9 },\n ],\n },\n OBV: {\n name: \"OBV\",\n localeKey: \"obv\",\n params: [{ label: \"params_1\", defaultValue: 30 }],\n },\n VR: {\n name: \"VR\",\n localeKey: \"vr\",\n params: [\n { label: \"params_1\", defaultValue: 26 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n MTM: {\n name: \"MTM\",\n localeKey: \"mtm\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n EMV: {\n name: \"EMV\",\n localeKey: \"emv\",\n params: [\n { label: \"params_1\", defaultValue: 14 },\n { label: \"params_2\", defaultValue: 9 },\n ],\n },\n ROC: {\n name: \"ROC\",\n localeKey: \"roc\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n PVT: {\n name: \"PVT\",\n localeKey: \"pvt\",\n params: [],\n },\n AO: {\n name: \"AO\",\n localeKey: \"ao\",\n params: [\n { label: \"params_1\", defaultValue: 5 },\n { label: \"params_2\", defaultValue: 34 },\n ],\n },\n};\n","import { useCallback, useMemo } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport {\n MAIN_INDICATORS,\n SUB_INDICATORS,\n INDICATOR_PARAMS,\n} from \"../data/indicators\";\n\nexport interface IndicatorInfo {\n name: string;\n isActive: boolean;\n}\n\nexport interface UseIndicatorsReturn {\n mainIndicators: IndicatorInfo[];\n subIndicators: IndicatorInfo[];\n activeMainIndicators: string[];\n activeSubIndicators: Record<string, string>;\n availableMainIndicators: string[];\n availableSubIndicators: string[];\n addMainIndicator: (name: string) => void;\n removeMainIndicator: (name: string) => void;\n addSubIndicator: (name: string) => void;\n removeSubIndicator: (name: string) => void;\n toggleMainIndicator: (name: string) => void;\n toggleSubIndicator: (name: string) => void;\n moveToMain: (name: string) => void;\n moveToSub: (name: string) => void;\n setIndicatorVisible: (\n name: string,\n isMain: boolean,\n visible: boolean,\n ) => void;\n updateIndicatorParams: (\n name: string,\n paneId: string,\n params: number[],\n ) => void;\n getIndicatorParams: (\n name: string,\n ) => { label: string; defaultValue: number }[];\n isMainIndicatorActive: (name: string) => boolean;\n isSubIndicatorActive: (name: string) => boolean;\n}\n\nexport function useIndicators(): UseIndicatorsReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const mainIndicators = useMemo(() => {\n const activeNames = state.mainIndicators;\n const inactive = MAIN_INDICATORS.filter((n) => !activeNames.includes(n));\n return [\n ...activeNames.map((name) => ({ name, isActive: true })),\n ...inactive.map((name) => ({ name, isActive: false })),\n ];\n }, [state.mainIndicators]);\n\n const subIndicators = useMemo(() => {\n const activeNames = Object.keys(state.subIndicators);\n const inactive = SUB_INDICATORS.filter((n) => !activeNames.includes(n));\n return [\n ...activeNames.map((name) => ({ name, isActive: true })),\n ...inactive.map((name) => ({ name, isActive: false })),\n ];\n }, [state.subIndicators]);\n\n const addMainIndicator = useCallback(\n (name: string) => {\n if (state.mainIndicators.includes(name)) return;\n state.chart?.createIndicator(\n { name, id: `main_${name}`, paneId: \"candle_pane\" },\n true,\n { id: \"candle_pane\" },\n );\n const newIndicators = [...state.mainIndicators, name];\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newIndicators });\n },\n [state.chart, state.mainIndicators, dispatch],\n );\n\n const removeMainIndicator = useCallback(\n (name: string) => {\n state.chart?.removeIndicator({ id: `main_${name}` });\n const newIndicators = state.mainIndicators.filter((n) => n !== name);\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newIndicators });\n },\n [state.chart, state.mainIndicators, dispatch],\n );\n\n const addSubIndicator = useCallback(\n (name: string) => {\n if (name in state.subIndicators) return;\n const id = `sub_${name}`;\n state.chart?.createIndicator({ name, id });\n const paneId = state.chart?.getIndicators({ id })?.[0]?.paneId ?? \"\";\n const newIndicators = { ...state.subIndicators, [name]: paneId };\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newIndicators });\n },\n [state.chart, state.subIndicators, dispatch],\n );\n\n const removeSubIndicator = useCallback(\n (name: string) => {\n state.chart?.removeIndicator({ id: `sub_${name}` });\n const newIndicators = { ...state.subIndicators };\n delete newIndicators[name];\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newIndicators });\n },\n [state.chart, state.subIndicators, dispatch],\n );\n\n const toggleMainIndicator = useCallback(\n (name: string) => {\n if (state.mainIndicators.includes(name)) {\n removeMainIndicator(name);\n } else {\n addMainIndicator(name);\n }\n },\n [state.mainIndicators, addMainIndicator, removeMainIndicator],\n );\n\n const toggleSubIndicator = useCallback(\n (name: string) => {\n if (name in state.subIndicators) {\n removeSubIndicator(name);\n } else {\n addSubIndicator(name);\n }\n },\n [state.subIndicators, addSubIndicator, removeSubIndicator],\n );\n\n const setIndicatorVisible = useCallback(\n (name: string, isMain: boolean, visible: boolean) => {\n const id = isMain ? `main_${name}` : `sub_${name}`;\n state.chart?.overrideIndicator({ name, id, visible });\n },\n [state.chart],\n );\n\n const updateIndicatorParams = useCallback(\n (name: string, paneId: string, params: number[]) => {\n state.chart?.overrideIndicator({ name, paneId, calcParams: params });\n },\n [state.chart],\n );\n\n const getIndicatorParams = useCallback((name: string) => {\n const config = INDICATOR_PARAMS[name];\n if (!config) return [];\n return config.params.map((p) => ({\n label: p.label,\n defaultValue: p.defaultValue,\n }));\n }, []);\n\n const moveToMain = useCallback(\n (name: string) => {\n if (!state.chart) return;\n state.chart.removeIndicator({ id: `sub_${name}` });\n state.chart.createIndicator(\n { name, id: `main_${name}`, paneId: \"candle_pane\" },\n true,\n { id: \"candle_pane\" },\n );\n const newSub = { ...state.subIndicators };\n delete newSub[name];\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newSub });\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: [...state.mainIndicators, name],\n });\n },\n [state.chart, state.mainIndicators, state.subIndicators, dispatch],\n );\n\n const moveToSub = useCallback(\n (name: string) => {\n if (!state.chart) return;\n state.chart.removeIndicator({ id: `main_${name}` });\n const subId = `sub_${name}`;\n state.chart.createIndicator({ name, id: subId });\n const paneId =\n state.chart.getIndicators({ id: subId })?.[0]?.paneId ?? \"\";\n const newMain = state.mainIndicators.filter((n) => n !== name);\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newMain });\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: { ...state.subIndicators, [name]: paneId },\n });\n },\n [state.chart, state.mainIndicators, state.subIndicators, dispatch],\n );\n\n const isMainIndicatorActive = useCallback(\n (name: string) => state.mainIndicators.includes(name),\n [state.mainIndicators],\n );\n\n const isSubIndicatorActive = useCallback(\n (name: string) => name in state.subIndicators,\n [state.subIndicators],\n );\n\n return {\n mainIndicators,\n subIndicators,\n activeMainIndicators: state.mainIndicators,\n activeSubIndicators: state.subIndicators,\n availableMainIndicators: MAIN_INDICATORS,\n availableSubIndicators: SUB_INDICATORS,\n addMainIndicator,\n removeMainIndicator,\n addSubIndicator,\n removeSubIndicator,\n toggleMainIndicator,\n toggleSubIndicator,\n moveToMain,\n moveToSub,\n setIndicatorVisible,\n updateIndicatorParams,\n getIndicatorParams,\n isMainIndicatorActive,\n isSubIndicatorActive,\n };\n}\n","export interface DrawingTool {\n name: string;\n localeKey: string;\n}\n\nexport interface DrawingToolCategory {\n key: string;\n tools: DrawingTool[];\n}\n\nexport const DRAWING_CATEGORIES: DrawingToolCategory[] = [\n {\n key: \"singleLine\",\n tools: [\n { name: \"horizontalStraightLine\", localeKey: \"horizontal_straight_line\" },\n { name: \"horizontalRayLine\", localeKey: \"horizontal_ray_line\" },\n { name: \"horizontalSegment\", localeKey: \"horizontal_segment\" },\n { name: \"verticalStraightLine\", localeKey: \"vertical_straight_line\" },\n { name: \"verticalRayLine\", localeKey: \"vertical_ray_line\" },\n { name: \"verticalSegment\", localeKey: \"vertical_segment\" },\n { name: \"straightLine\", localeKey: \"straight_line\" },\n { name: \"rayLine\", localeKey: \"ray_line\" },\n { name: \"segment\", localeKey: \"segment\" },\n { name: \"arrow\", localeKey: \"arrow\" },\n { name: \"priceLine\", localeKey: \"price_line\" },\n ],\n },\n {\n key: \"moreLine\",\n tools: [\n { name: \"priceChannelLine\", localeKey: \"price_channel_line\" },\n { name: \"parallelStraightLine\", localeKey: \"parallel_straight_line\" },\n ],\n },\n {\n key: \"polygon\",\n tools: [\n { name: \"circle\", localeKey: \"circle\" },\n { name: \"rect\", localeKey: \"rect\" },\n { name: \"parallelogram\", localeKey: \"parallelogram\" },\n { name: \"triangle\", localeKey: \"triangle\" },\n ],\n },\n {\n key: \"fibonacci\",\n tools: [\n { name: \"fibonacciLine\", localeKey: \"fibonacci_line\" },\n { name: \"fibonacciSegment\", localeKey: \"fibonacci_segment\" },\n { name: \"fibonacciCircle\", localeKey: \"fibonacci_circle\" },\n { name: \"fibonacciSpiral\", localeKey: \"fibonacci_spiral\" },\n {\n name: \"fibonacciSpeedResistanceFan\",\n localeKey: \"fibonacci_speed_resistance_fan\",\n },\n { name: \"fibonacciExtension\", localeKey: \"fibonacci_extension\" },\n { name: \"gannBox\", localeKey: \"gann_box\" },\n ],\n },\n {\n key: \"wave\",\n tools: [\n { name: \"xabcd\", localeKey: \"xabcd\" },\n { name: \"abcd\", localeKey: \"abcd\" },\n { name: \"threeWaves\", localeKey: \"three_waves\" },\n { name: \"fiveWaves\", localeKey: \"five_waves\" },\n { name: \"eightWaves\", localeKey: \"eight_waves\" },\n { name: \"anyWaves\", localeKey: \"any_waves\" },\n ],\n },\n];\n\nexport type MagnetMode = \"normal\" | \"weak\" | \"strong\";\n","import { useState, useCallback, useMemo } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport { DRAWING_CATEGORIES, type MagnetMode } from \"../data/drawings\";\n\nconst DRAWING_GROUP_ID = \"drawing_tools\";\n\nexport interface DrawingToolItem {\n name: string;\n localeKey: string;\n}\n\nexport interface DrawingCategoryItem {\n key: string;\n tools: DrawingToolItem[];\n}\n\nexport interface UseDrawingToolsReturn {\n categories: DrawingCategoryItem[];\n activeTool: string | null;\n magnetMode: MagnetMode;\n isLocked: boolean;\n isVisible: boolean;\n selectTool: (name: string) => void;\n clearActiveTool: () => void;\n setMagnetMode: (mode: MagnetMode) => void;\n toggleLock: () => void;\n toggleVisibility: () => void;\n removeAllDrawings: () => void;\n}\n\nexport function useDrawingTools(): UseDrawingToolsReturn {\n const { state } = useKlinechartsUI();\n const [activeTool, setActiveTool] = useState<string | null>(null);\n const [magnetMode, setMagnetModeState] = useState<MagnetMode>(\"normal\");\n const [isLocked, setIsLocked] = useState(false);\n const [isVisible, setIsVisible] = useState(true);\n\n const categories = useMemo(\n () =>\n DRAWING_CATEGORIES.map((cat) => ({\n key: cat.key,\n tools: cat.tools.map((tool) => ({\n name: tool.name,\n localeKey: tool.localeKey,\n })),\n })),\n []\n );\n\n const selectTool = useCallback(\n (name: string) => {\n setActiveTool(name);\n state.chart?.createOverlay({\n name,\n groupId: DRAWING_GROUP_ID,\n lock: isLocked,\n visible: isVisible,\n mode:\n magnetMode === \"strong\"\n ? \"strong_magnet\"\n : magnetMode === \"weak\"\n ? \"weak_magnet\"\n : \"normal\" as any,\n });\n },\n [state.chart, isLocked, isVisible, magnetMode]\n );\n\n const clearActiveTool = useCallback(() => {\n setActiveTool(null);\n }, []);\n\n const setMagnetMode = useCallback(\n (mode: MagnetMode) => {\n setMagnetModeState(mode);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n const overlayMode =\n mode === \"strong\"\n ? \"strong_magnet\"\n : mode === \"weak\"\n ? \"weak_magnet\"\n : \"normal\";\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n mode: overlayMode as any,\n });\n });\n }\n },\n [state.chart]\n );\n\n const toggleLock = useCallback(() => {\n const newLocked = !isLocked;\n setIsLocked(newLocked);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n lock: newLocked,\n });\n });\n }\n }, [state.chart, isLocked]);\n\n const toggleVisibility = useCallback(() => {\n const newVisible = !isVisible;\n setIsVisible(newVisible);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n visible: newVisible,\n });\n });\n }\n }, [state.chart, isVisible]);\n\n const removeAllDrawings = useCallback(() => {\n state.chart?.removeOverlay({ groupId: DRAWING_GROUP_ID });\n setActiveTool(null);\n }, [state.chart]);\n\n return {\n categories,\n activeTool,\n magnetMode,\n isLocked,\n isVisible,\n selectTool,\n clearActiveTool,\n setMagnetMode,\n toggleLock,\n toggleVisibility,\n removeAllDrawings,\n };\n}\n","export interface CandleTypeOption {\n key: string;\n localeKey: string;\n}\n\nexport const CANDLE_TYPES: CandleTypeOption[] = [\n { key: \"candle_solid\", localeKey: \"candle_solid\" },\n { key: \"candle_stroke\", localeKey: \"candle_stroke\" },\n { key: \"candle_up_stroke\", localeKey: \"candle_up_stroke\" },\n { key: \"candle_down_stroke\", localeKey: \"candle_down_stroke\" },\n { key: \"ohlc\", localeKey: \"ohlc\" },\n { key: \"area\", localeKey: \"area\" },\n];\n\nexport const PRICE_AXIS_TYPES = [\"normal\", \"percentage\", \"logarithm\"] as const;\nexport type PriceAxisType = (typeof PRICE_AXIS_TYPES)[number];\n\nexport const YAXIS_POSITIONS = [\"left\", \"right\"] as const;\nexport type YAxisPosition = (typeof YAXIS_POSITIONS)[number];\n\nexport const COMPARE_RULES = [\"current_open\", \"prev_close\"] as const;\nexport type CompareRule = (typeof COMPARE_RULES)[number];\n\nexport const TOOLTIP_SHOW_RULES = [\"always\", \"follow_cross\", \"none\"] as const;\nexport type TooltipShowRule = (typeof TOOLTIP_SHOW_RULES)[number];\n","import { useState, useCallback, useMemo, useEffect, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport {\n CANDLE_TYPES,\n PRICE_AXIS_TYPES,\n YAXIS_POSITIONS,\n COMPARE_RULES,\n TOOLTIP_SHOW_RULES,\n type PriceAxisType,\n type YAxisPosition,\n type CompareRule,\n type TooltipShowRule,\n} from \"../data/candle-types\";\n\nexport interface CandleTypeItem {\n key: string;\n localeKey: string;\n}\n\nexport interface KlinechartsUISettingsState {\n // Candle\n candleType: string;\n candleUpColor: string;\n candleDownColor: string;\n compareRule: CompareRule;\n // Price marks\n showLastPrice: boolean;\n showLastPriceLine: boolean;\n showHighPrice: boolean;\n showLowPrice: boolean;\n showIndicatorLastValue: boolean;\n // Axis\n priceAxisType: PriceAxisType;\n yAxisPosition: YAxisPosition;\n yAxisInside: boolean;\n reverseCoordinate: boolean;\n showTimeAxis: boolean;\n // Chart elements\n showGrid: boolean;\n showCrosshair: boolean;\n // Tooltips\n showCandleTooltip: boolean;\n showIndicatorTooltip: boolean;\n tooltipShowRule: TooltipShowRule;\n}\n\nexport interface UseKlinechartsUISettingsReturn extends KlinechartsUISettingsState {\n candleTypes: CandleTypeItem[];\n priceAxisTypes: { key: PriceAxisType; localeKey: string }[];\n yAxisPositions: { key: YAxisPosition; localeKey: string }[];\n compareRules: { key: CompareRule; localeKey: string }[];\n tooltipShowRules: { key: TooltipShowRule; localeKey: string }[];\n setCandleType: (type: string) => void;\n setCandleUpColor: (color: string) => void;\n setCandleDownColor: (color: string) => void;\n setCompareRule: (rule: CompareRule) => void;\n setShowLastPrice: (show: boolean) => void;\n setShowLastPriceLine: (show: boolean) => void;\n setShowHighPrice: (show: boolean) => void;\n setShowLowPrice: (show: boolean) => void;\n setShowIndicatorLastValue: (show: boolean) => void;\n setPriceAxisType: (type: PriceAxisType) => void;\n setYAxisPosition: (position: YAxisPosition) => void;\n setYAxisInside: (inside: boolean) => void;\n setReverseCoordinate: (reverse: boolean) => void;\n setShowTimeAxis: (show: boolean) => void;\n setShowGrid: (show: boolean) => void;\n setShowCrosshair: (show: boolean) => void;\n setShowCandleTooltip: (show: boolean) => void;\n setShowIndicatorTooltip: (show: boolean) => void;\n setTooltipShowRule: (rule: TooltipShowRule) => void;\n resetToDefaults: () => void;\n}\n\nconst defaultSettings: KlinechartsUISettingsState = {\n candleType: \"candle_solid\",\n candleUpColor: \"#2DC08E\",\n candleDownColor: \"#F92855\",\n compareRule: \"current_open\",\n showLastPrice: true,\n showLastPriceLine: true,\n showHighPrice: true,\n showLowPrice: true,\n showIndicatorLastValue: true,\n priceAxisType: \"normal\",\n yAxisPosition: \"right\",\n yAxisInside: false,\n reverseCoordinate: false,\n showTimeAxis: true,\n showGrid: true,\n showCrosshair: true,\n showCandleTooltip: true,\n showIndicatorTooltip: true,\n tooltipShowRule: \"always\",\n};\n\nexport function useKlinechartsUISettings(): UseKlinechartsUISettingsReturn {\n const { state, onSettingsChange } = useKlinechartsUI();\n const [settings, setSettings] = useState<KlinechartsUISettingsState>(defaultSettings);\n const isInitialMount = useRef(true);\n\n useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n return;\n }\n onSettingsChange?.({ ...settings });\n }, [settings, onSettingsChange]);\n\n const candleTypes = useMemo(\n () =>\n CANDLE_TYPES.map((ct) => ({\n key: ct.key,\n localeKey: ct.localeKey,\n })),\n []\n );\n\n const priceAxisTypes = useMemo(\n () => PRICE_AXIS_TYPES.map((pat) => ({ key: pat, localeKey: pat })),\n []\n );\n\n const yAxisPositions = useMemo(\n () => YAXIS_POSITIONS.map((p) => ({ key: p, localeKey: p })),\n []\n );\n\n const compareRules = useMemo(\n () => COMPARE_RULES.map((r) => ({ key: r, localeKey: r })),\n []\n );\n\n const tooltipShowRules = useMemo(\n () => TOOLTIP_SHOW_RULES.map((r) => ({ key: r, localeKey: r })),\n []\n );\n\n // Apply initial settings when chart becomes available\n const hasAppliedInitial = useRef(false);\n useEffect(() => {\n if (!state.chart || hasAppliedInitial.current) return;\n hasAppliedInitial.current = true;\n\n // Sync axis settings via setPaneOptions (not styles)\n const needsPaneOptions =\n settings.reverseCoordinate ||\n settings.priceAxisType !== \"normal\" ||\n settings.yAxisPosition !== \"right\" ||\n settings.yAxisInside;\n if (needsPaneOptions) {\n state.chart.setPaneOptions({\n id: \"candle_pane\",\n axis: {\n ...(settings.priceAxisType !== \"normal\" && { name: settings.priceAxisType }),\n ...(settings.reverseCoordinate && { reverse: true }),\n ...(settings.yAxisPosition !== \"right\" && { position: settings.yAxisPosition }),\n ...(settings.yAxisInside && { inside: true }),\n },\n });\n }\n\n // Sync indicator last value mark (klinecharts defaults to show: false)\n if (settings.showIndicatorLastValue) {\n state.chart.setStyles({\n indicator: { lastValueMark: { show: true } },\n });\n }\n }, [state.chart]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const applyStyle = useCallback(\n (path: string, value: unknown) => {\n const parts = path.split(\".\");\n const styleObj: Record<string, unknown> = {};\n let current: Record<string, unknown> = styleObj;\n for (let i = 0; i < parts.length - 1; i++) {\n current[parts[i]] = {};\n current = current[parts[i]] as Record<string, unknown>;\n }\n current[parts[parts.length - 1]] = value;\n state.chart?.setStyles(styleObj);\n },\n [state.chart]\n );\n\n const applyPaneAxis = useCallback(\n (axis: Record<string, unknown>) => {\n state.chart?.setPaneOptions({ id: \"candle_pane\", axis });\n },\n [state.chart]\n );\n\n const setCandleType = useCallback(\n (type: string) => {\n applyStyle(\"candle.type\", type);\n setSettings((s) => ({ ...s, candleType: type }));\n },\n [applyStyle]\n );\n\n const setCandleUpColor = useCallback(\n (color: string) => {\n state.chart?.setStyles({\n candle: {\n bar: { upColor: color, upBorderColor: color, upWickColor: color },\n },\n });\n setSettings((s) => ({ ...s, candleUpColor: color }));\n },\n [state.chart]\n );\n\n const setCandleDownColor = useCallback(\n (color: string) => {\n state.chart?.setStyles({\n candle: {\n bar: { downColor: color, downBorderColor: color, downWickColor: color },\n },\n });\n setSettings((s) => ({ ...s, candleDownColor: color }));\n },\n [state.chart]\n );\n\n const setCompareRule = useCallback(\n (rule: CompareRule) => {\n applyStyle(\"candle.bar.compareRule\", rule);\n setSettings((s) => ({ ...s, compareRule: rule }));\n },\n [applyStyle]\n );\n\n const setShowLastPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.last.show\", show);\n setSettings((s) => ({ ...s, showLastPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowLastPriceLine = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.last.line.show\", show);\n setSettings((s) => ({ ...s, showLastPriceLine: show }));\n },\n [applyStyle]\n );\n\n const setShowHighPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.high.show\", show);\n setSettings((s) => ({ ...s, showHighPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowLowPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.low.show\", show);\n setSettings((s) => ({ ...s, showLowPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowIndicatorLastValue = useCallback(\n (show: boolean) => {\n applyStyle(\"indicator.lastValueMark.show\", show);\n setSettings((s) => ({ ...s, showIndicatorLastValue: show }));\n },\n [applyStyle]\n );\n\n const setPriceAxisType = useCallback(\n (type: PriceAxisType) => {\n applyPaneAxis({ name: type });\n setSettings((s) => ({ ...s, priceAxisType: type }));\n },\n [applyPaneAxis]\n );\n\n const setYAxisPosition = useCallback(\n (position: YAxisPosition) => {\n applyPaneAxis({ position });\n setSettings((s) => ({ ...s, yAxisPosition: position }));\n },\n [applyPaneAxis]\n );\n\n const setYAxisInside = useCallback(\n (inside: boolean) => {\n applyPaneAxis({ inside });\n setSettings((s) => ({ ...s, yAxisInside: inside }));\n },\n [applyPaneAxis]\n );\n\n const setReverseCoordinate = useCallback(\n (reverse: boolean) => {\n applyPaneAxis({ reverse });\n setSettings((s) => ({ ...s, reverseCoordinate: reverse }));\n },\n [applyPaneAxis]\n );\n\n const setShowGrid = useCallback(\n (show: boolean) => {\n applyStyle(\"grid.show\", show);\n setSettings((s) => ({ ...s, showGrid: show }));\n },\n [applyStyle]\n );\n\n const setShowTimeAxis = useCallback(\n (show: boolean) => {\n applyStyle(\"xAxis.show\", show);\n setSettings((s) => ({ ...s, showTimeAxis: show }));\n },\n [applyStyle]\n );\n\n const setShowCrosshair = useCallback(\n (show: boolean) => {\n applyStyle(\"crosshair.show\", show);\n setSettings((s) => ({ ...s, showCrosshair: show }));\n },\n [applyStyle]\n );\n\n const setShowCandleTooltip = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.tooltip.show\", show);\n setSettings((s) => ({ ...s, showCandleTooltip: show }));\n },\n [applyStyle]\n );\n\n const setShowIndicatorTooltip = useCallback(\n (show: boolean) => {\n applyStyle(\"indicator.tooltip.show\", show);\n setSettings((s) => ({ ...s, showIndicatorTooltip: show }));\n },\n [applyStyle]\n );\n\n const setTooltipShowRule = useCallback(\n (rule: TooltipShowRule) => {\n state.chart?.setStyles({\n candle: { tooltip: { showRule: rule } },\n indicator: { tooltip: { showRule: rule } },\n });\n setSettings((s) => ({ ...s, tooltipShowRule: rule }));\n },\n [state.chart]\n );\n\n const resetToDefaults = useCallback(() => {\n setSettings(defaultSettings);\n state.chart?.setStyles(state.theme);\n // Reset axis options to defaults\n state.chart?.setPaneOptions({\n id: \"candle_pane\",\n axis: { name: \"normal\", reverse: false, position: \"right\", inside: false },\n });\n }, [state.chart, state.theme]);\n\n return {\n ...settings,\n candleTypes,\n priceAxisTypes,\n yAxisPositions,\n compareRules,\n tooltipShowRules,\n setCandleType,\n setCandleUpColor,\n setCandleDownColor,\n setCompareRule,\n setShowLastPrice,\n setShowLastPriceLine,\n setShowHighPrice,\n setShowLowPrice,\n setShowIndicatorLastValue,\n setPriceAxisType,\n setYAxisPosition,\n setYAxisInside,\n setReverseCoordinate,\n setShowTimeAxis,\n setShowGrid,\n setShowCrosshair,\n setShowCandleTooltip,\n setShowIndicatorTooltip,\n setTooltipShowRule,\n resetToDefaults,\n };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseScreenshotReturn {\n screenshotUrl: string | null;\n capture: () => void;\n download: (filename?: string) => void;\n clear: () => void;\n}\n\nexport function useScreenshot(): UseScreenshotReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const capture = useCallback(() => {\n if (!state.chart) return;\n const url = state.chart.getConvertPictureUrl(true, \"jpeg\", state.theme === \"dark\" ? \"#151517\" : \"#ffffff\");\n dispatch({ type: \"SET_SCREENSHOT_URL\", url });\n }, [state.chart, state.theme, dispatch]);\n\n const download = useCallback(\n (filename = \"chart-screenshot.jpg\") => {\n if (!state.screenshotUrl) return;\n const link = document.createElement(\"a\");\n link.href = state.screenshotUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n [state.screenshotUrl]\n );\n\n const clear = useCallback(() => {\n dispatch({ type: \"SET_SCREENSHOT_URL\", url: null });\n }, [dispatch]);\n\n return {\n screenshotUrl: state.screenshotUrl,\n capture,\n download,\n clear,\n };\n}\n","import { useState, useCallback, useEffect } from \"react\";\nimport { useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\n\nexport interface UseFullscreenReturn {\n isFullscreen: boolean;\n toggle: () => void;\n enter: () => void;\n exit: () => void;\n containerRef: React.RefObject<HTMLElement | null>;\n}\n\nexport function useFullscreen(): UseFullscreenReturn {\n const { fullscreenContainerRef } = useKlinechartsUIDispatch();\n const [isFullscreen, setIsFullscreen] = useState(false);\n\n const enter = useCallback(() => {\n const el = fullscreenContainerRef.current;\n if (!el) return;\n if (el.requestFullscreen) {\n el.requestFullscreen();\n } else if (\"webkitRequestFullscreen\" in el) {\n (el as HTMLElement & { webkitRequestFullscreen: () => void }).webkitRequestFullscreen();\n } else if (\"msRequestFullscreen\" in el) {\n (el as HTMLElement & { msRequestFullscreen: () => void }).msRequestFullscreen();\n }\n }, [fullscreenContainerRef]);\n\n const exit = useCallback(() => {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (\"webkitExitFullscreen\" in document) {\n (document as Document & { webkitExitFullscreen: () => void }).webkitExitFullscreen();\n } else if (\"msExitFullscreen\" in document) {\n (document as Document & { msExitFullscreen: () => void }).msExitFullscreen();\n }\n }, []);\n\n const toggle = useCallback(() => {\n if (isFullscreen) {\n exit();\n } else {\n enter();\n }\n }, [isFullscreen, enter, exit]);\n\n useEffect(() => {\n const handler = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n document.addEventListener(\"fullscreenchange\", handler);\n document.addEventListener(\"webkitfullscreenchange\", handler);\n return () => {\n document.removeEventListener(\"fullscreenchange\", handler);\n document.removeEventListener(\"webkitfullscreenchange\", handler);\n };\n }, []);\n\n return {\n isFullscreen,\n toggle,\n enter,\n exit,\n containerRef: fullscreenContainerRef,\n };\n}\n","import { useCallback, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { OrderLineExtendData } from \"../extensions/overlays/orderLine\";\n\nexport interface OrderLineOptions extends OrderLineExtendData {\n /** Unique identifier. Auto-generated if omitted. */\n id?: string;\n /** Price level for the line. */\n price: number;\n /** Whether the user can drag the line to change its price. Defaults to false. */\n draggable?: boolean;\n /**\n * Called when the user finishes dragging the line to a new price.\n * Receives the final price value after the drag ends.\n */\n onPriceChange?: (price: number) => void;\n}\n\nexport interface UseOrderLinesReturn {\n /**\n * Creates an order line overlay at the given price level.\n * Returns the line id, or null if the chart is not yet ready.\n */\n createOrderLine: (options: OrderLineOptions) => string | null;\n /**\n * Updates an existing order line.\n * Supply only the fields you want to change.\n * Updating onPriceChange replaces the previous callback.\n */\n updateOrderLine: (\n id: string,\n options: Partial<Omit<OrderLineOptions, \"id\">>,\n ) => void;\n /** Removes the order line with the given id. */\n removeOrderLine: (id: string) => void;\n /** Removes all order lines created with this hook. */\n removeAllOrderLines: () => void;\n}\n\nexport function useOrderLines(): UseOrderLinesReturn {\n const { state } = useKlinechartsUI();\n\n // Map of id → onPriceChange callback. The stable onPressedMoveEnd closure\n // reads from this ref so callbacks can be updated without re-creating overlays.\n const callbacksRef = useRef<Map<string, (price: number) => void>>(new Map());\n\n const createOrderLine = useCallback(\n (options: OrderLineOptions): string | null => {\n if (!state.chart) return null;\n const {\n id: optId,\n price,\n draggable = false,\n onPriceChange,\n ...extendData\n } = options;\n const id =\n optId ??\n `order_line_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n\n if (onPriceChange) {\n callbacksRef.current.set(id, onPriceChange);\n }\n\n // klinecharts needs at least a dataIndex to anchor the point so that\n // needDefaultYAxisFigure can compute the Y coordinate and render the\n // price label on the right axis. We use the last bar's index.\n const dataCount = state.chart.getDataList().length;\n const anchorIndex = dataCount > 0 ? dataCount - 1 : 0;\n\n state.chart.createOverlay({\n name: \"orderLine\",\n id,\n points: [{ dataIndex: anchorIndex, value: price }],\n extendData,\n lock: !draggable,\n mode: \"normal\",\n onPressedMoveEnd: (event) => {\n const newPrice = event.overlay.points[0]?.value;\n if (newPrice != null) {\n callbacksRef.current.get(id)?.(newPrice);\n }\n },\n });\n return id;\n },\n [state.chart],\n );\n\n const updateOrderLine = useCallback(\n (id: string, options: Partial<Omit<OrderLineOptions, \"id\">>) => {\n if (!state.chart) return;\n const { price, draggable, onPriceChange, ...extendData } = options;\n const existing = state.chart.getOverlays({ id })?.[0];\n if (!existing) return;\n\n if (onPriceChange !== undefined) {\n callbacksRef.current.set(id, onPriceChange);\n }\n\n const dataCount = state.chart.getDataList().length;\n const anchorIndex = dataCount > 0 ? dataCount - 1 : 0;\n state.chart.overrideOverlay({\n id,\n ...(price != null\n ? { points: [{ dataIndex: anchorIndex, value: price }] }\n : {}),\n ...(draggable != null ? { lock: !draggable } : {}),\n extendData: {\n ...(existing.extendData as OrderLineExtendData),\n ...extendData,\n },\n });\n },\n [state.chart],\n );\n\n const removeOrderLine = useCallback(\n (id: string) => {\n state.chart?.removeOverlay({ id });\n callbacksRef.current.delete(id);\n },\n [state.chart],\n );\n\n const removeAllOrderLines = useCallback(() => {\n state.chart?.removeOverlay({ name: \"orderLine\" });\n callbacksRef.current.clear();\n }, [state.chart]);\n\n return {\n createOrderLine,\n updateOrderLine,\n removeOrderLine,\n removeAllOrderLines,\n };\n}\n","import type { Dispatch } from \"react\";\nimport type { DataLoader, KLineData } from \"react-klinecharts\";\nimport type { Datafeed, KlinechartsUIAction } from \"../provider/types\";\n\n/**\n * Creates a klinecharts DataLoader from a Datafeed instance.\n * This bridges the react-klinecharts-ui Datafeed interface to the\n * klinecharts native DataLoader format used by KLineChart component.\n *\n * In klinecharts terminology:\n * - \"init\" = initial data load\n * - \"forward\" = load older data (user scrolled left into history)\n * - \"backward\" = load newer data (user scrolled right)\n */\nexport function createDataLoader(\n datafeed: Datafeed,\n dispatch: Dispatch<KlinechartsUIAction>,\n): DataLoader {\n let oldestTimestamp: number | null = null;\n // Incremented on every \"init\" request. Forward requests capture the value at\n // their start and bail out if a newer init has begun while they were in-flight.\n let currentGen = 0;\n\n return {\n getBars: async (params) => {\n try {\n dispatch({ type: \"SET_LOADING\", isLoading: true });\n\n if (params.type === \"init\") {\n oldestTimestamp = null;\n const gen = ++currentGen;\n const data = await datafeed.getHistoryKLineData(\n params.symbol,\n { ...params.period, label: \"\" },\n 0,\n Date.now(),\n );\n if (gen !== currentGen) return; // newer init started — discard stale result\n if (data.length > 0) {\n oldestTimestamp = data[0].timestamp;\n }\n params.callback(data as KLineData[], {\n forward: data.length > 0,\n backward: false,\n });\n } else if (params.type === \"forward\" && oldestTimestamp !== null) {\n const gen = currentGen;\n const data = await datafeed.getHistoryKLineData(\n params.symbol,\n { ...params.period, label: \"\" },\n 0,\n oldestTimestamp - 1,\n );\n if (gen !== currentGen) return; // init for new period started — discard\n if (data.length > 0) {\n oldestTimestamp = data[0].timestamp;\n }\n params.callback(data as KLineData[], {\n forward: data.length > 0,\n backward: false,\n });\n } else if (params.type === \"backward\") {\n // Backward pagination (loading data newer than what we have) is generally\n // not needed in typical terminal usage because we subscribe via ws for real-time.\n params.callback([], { forward: false, backward: false });\n }\n } catch (error) {\n console.error(\"Failed to load chart data:\", error);\n params.callback([], { forward: false, backward: false });\n } finally {\n dispatch({ type: \"SET_LOADING\", isLoading: false });\n }\n },\n subscribeBar: (params) => {\n datafeed.subscribe(\n params.symbol,\n { ...params.period, label: \"\" },\n (klineData) => params.callback(klineData as KLineData),\n );\n },\n unsubscribeBar: (params) => {\n datafeed.unsubscribe(params.symbol, { ...params.period, label: \"\" });\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/provider/ChartTerminalContext.ts","../src/data/periods.ts","../src/provider/ChartTerminalProvider.tsx","../src/hooks/useKlinechartsUITheme.ts","../src/hooks/useKlinechartsUILoading.ts","../src/hooks/usePeriods.ts","../src/data/timezones.ts","../src/hooks/useTimezone.ts","../src/hooks/useSymbolSearch.ts","../src/data/indicators.ts","../src/hooks/useIndicators.ts","../src/data/drawings.ts","../src/hooks/useDrawingTools.ts","../src/data/candle-types.ts","../src/hooks/useKlinechartsUISettings.ts","../src/hooks/useScreenshot.ts","../src/hooks/useFullscreen.ts","../src/hooks/useOrderLines.ts","../src/hooks/useUndoRedo.ts","../src/hooks/useLayoutManager.ts","../src/hooks/useScriptEditor.ts","../src/hooks/useCrosshair.ts","../src/hooks/useAlerts.ts","../src/hooks/useDataExport.ts","../src/hooks/useWatchlist.ts","../src/hooks/useReplay.ts","../src/hooks/useCompare.ts","../src/hooks/useMeasure.ts","../src/hooks/useAnnotations.ts","../src/utils/createDataLoader.ts"],"names":["useCallback","useMemo","useRef","useEffect","useState","overlays","DRAWING_GROUP_ID","indicators","registerIndicator"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type {\n KlinechartsUIState,\n KlinechartsUIContextValue,\n KlinechartsUIDispatchValue,\n} from \"./types\";\n\nexport const KlinechartsUIStateContext =\n createContext<KlinechartsUIState | null>(null);\n\nexport const KlinechartsUIDispatchContext =\n createContext<KlinechartsUIDispatchValue | null>(null);\n\n/**\n * @internal\n * Reads only the stable dispatch slice. Hooks that use this won't re-render\n * when chart state changes (e.g. symbol, period, isLoading).\n */\nexport function useKlinechartsUIDispatch(): KlinechartsUIDispatchValue {\n const ctx = useContext(KlinechartsUIDispatchContext);\n if (!ctx) {\n throw new Error(\n \"useKlinechartsUI must be used within a <KlinechartsUIProvider>\"\n );\n }\n return ctx;\n}\n\n/**\n * Primary hook — returns the full combined context value.\n * For performance-sensitive cases, prefer the two split hooks internally.\n */\nexport function useKlinechartsUI(): KlinechartsUIContextValue {\n const state = useContext(KlinechartsUIStateContext);\n const dispatch = useContext(KlinechartsUIDispatchContext);\n if (!state || !dispatch) {\n throw new Error(\n \"useKlinechartsUI must be used within a <KlinechartsUIProvider>\"\n );\n }\n return { state, ...dispatch };\n}\n","import type { Period as KlinechartsPeriod } from \"react-klinecharts\";\n\nexport interface TerminalPeriod extends KlinechartsPeriod {\n label: string;\n}\n\nexport const DEFAULT_PERIODS: TerminalPeriod[] = [\n { span: 1, type: \"minute\", label: \"1m\" },\n { span: 5, type: \"minute\", label: \"5m\" },\n { span: 15, type: \"minute\", label: \"15m\" },\n { span: 1, type: \"hour\", label: \"1H\" },\n { span: 2, type: \"hour\", label: \"2H\" },\n { span: 4, type: \"hour\", label: \"4H\" },\n { span: 1, type: \"day\", label: \"D\" },\n { span: 1, type: \"week\", label: \"W\" },\n { span: 1, type: \"month\", label: \"M\" },\n { span: 1, type: \"year\", label: \"Y\" },\n];\n","import {\n useReducer,\n useMemo,\n useEffect,\n useCallback,\n useRef,\n type ReactElement,\n} from \"react\";\nimport type {\n KlinechartsUIOptions,\n KlinechartsUIState,\n KlinechartsUIAction,\n} from \"./types\";\nimport {\n KlinechartsUIStateContext,\n KlinechartsUIDispatchContext,\n} from \"./ChartTerminalContext\";\nimport { DEFAULT_PERIODS } from \"../data/periods\";\nimport { registerExtensions } from \"../extensions\";\nimport { registerOverlay } from \"react-klinecharts\";\n\nfunction reducer(\n state: KlinechartsUIState,\n action: KlinechartsUIAction,\n): KlinechartsUIState {\n switch (action.type) {\n case \"SET_CHART\":\n return { ...state, chart: action.chart };\n case \"SET_SYMBOL\":\n return { ...state, symbol: action.symbol };\n case \"SET_PERIOD\":\n return { ...state, period: action.period };\n case \"SET_THEME\":\n return { ...state, theme: action.theme };\n case \"SET_TIMEZONE\":\n return { ...state, timezone: action.timezone };\n case \"SET_LOADING\":\n return { ...state, isLoading: action.isLoading };\n case \"SET_MAIN_INDICATORS\":\n return { ...state, mainIndicators: action.indicators };\n case \"SET_SUB_INDICATORS\":\n return { ...state, subIndicators: action.indicators };\n case \"SET_STYLES\":\n return { ...state, styles: action.styles };\n case \"SET_LOCALE\":\n return { ...state, locale: action.locale };\n case \"SET_SCREENSHOT_URL\":\n return { ...state, screenshotUrl: action.url };\n default:\n return state;\n }\n}\n\nexport function KlinechartsUIProvider({\n datafeed,\n defaultSymbol,\n defaultPeriod,\n defaultTheme = \"light\",\n defaultTimezone = \"Asia/Shanghai\",\n defaultMainIndicators = [\"MA\"],\n defaultSubIndicators = [\"VOL\"],\n defaultLocale = \"en-US\",\n periods,\n styles,\n registerExtensions: shouldRegister = true,\n overlays: extraOverlays,\n children,\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n onSettingsChange,\n}: KlinechartsUIOptions): ReactElement {\n // Lazy initializer — runs only once, avoiding a new object on every render.\n const [state, dispatch] = useReducer(\n reducer,\n {\n datafeed,\n defaultSymbol,\n defaultPeriod,\n defaultTheme,\n defaultTimezone,\n defaultMainIndicators,\n defaultSubIndicators,\n defaultLocale,\n periods,\n styles,\n },\n (opts) => ({\n chart: null,\n datafeed: opts.datafeed,\n symbol: opts.defaultSymbol ?? null,\n period: opts.defaultPeriod ?? (opts.periods ?? DEFAULT_PERIODS)[0],\n theme: opts.defaultTheme ?? \"light\",\n timezone: opts.defaultTimezone ?? \"Asia/Shanghai\",\n isLoading: false,\n locale: opts.defaultLocale ?? \"en-US\",\n periods: opts.periods ?? DEFAULT_PERIODS,\n mainIndicators: opts.defaultMainIndicators ?? [\"MA\"],\n subIndicators: (opts.defaultSubIndicators ?? [\"VOL\"]).reduce(\n (acc, name) => ({ ...acc, [name]: \"\" }),\n {} as Record<string, string>,\n ),\n styles: opts.styles,\n screenshotUrl: null,\n }),\n );\n\n const fullscreenContainerRef = useRef<HTMLElement | null>(null);\n const undoRedoListenerRef = useRef<import(\"./types\").UndoRedoListener | null>(null);\n\n // Tracks the current state so enhancedDispatch can compute the new state\n // synchronously (reducer is pure, so we can call it before dispatch).\n const stateRef = useRef(state);\n stateRef.current = state;\n\n // Keep latest callbacks in a ref so enhancedDispatch closure never goes stale.\n const callbacksRef = useRef({\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n });\n callbacksRef.current = {\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n };\n\n /**\n * Wraps dispatch so that per-action callbacks are called synchronously.\n * Because React's dispatch is async, we pre-compute the new state by\n * calling reducer() directly (it is pure) — this gives onStateChange the\n * correct post-action state without any useEffect delay.\n */\n const enhancedDispatch = useCallback((action: KlinechartsUIAction) => {\n const prevState = stateRef.current;\n const newState = reducer(prevState, action);\n stateRef.current = newState; // Update immediately so sequential sync dispatches see the new state\n dispatch(action);\n const cbs = callbacksRef.current;\n cbs.onStateChange?.(action, newState, prevState);\n switch (action.type) {\n case \"SET_SYMBOL\":\n cbs.onSymbolChange?.(action.symbol);\n break;\n case \"SET_PERIOD\":\n cbs.onPeriodChange?.(action.period);\n break;\n case \"SET_THEME\":\n cbs.onThemeChange?.(action.theme);\n break;\n case \"SET_TIMEZONE\":\n cbs.onTimezoneChange?.(action.timezone);\n break;\n case \"SET_MAIN_INDICATORS\":\n cbs.onMainIndicatorsChange?.(action.indicators);\n break;\n case \"SET_SUB_INDICATORS\":\n cbs.onSubIndicatorsChange?.(action.indicators);\n break;\n }\n }, []);\n\n // Capture initial overlays in a ref so the effect doesn't re-run when the\n // consumer passes an inline array (which would be a new reference each render).\n const extraOverlaysRef = useRef(extraOverlays);\n\n useEffect(() => {\n if (shouldRegister) {\n registerExtensions();\n }\n extraOverlaysRef.current?.forEach((overlay) => registerOverlay(overlay));\n }, [shouldRegister]);\n\n useEffect(() => {\n if (state.chart && state.styles) {\n state.chart.setStyles(state.styles);\n }\n }, [state.chart, state.styles]);\n\n // Dispatch context is stable — only recreated if datafeed/onSettingsChange\n // reference changes (which should be rare / memoised by the consumer).\n const dispatchValue = useMemo(\n () => ({\n dispatch: enhancedDispatch,\n datafeed,\n onSettingsChange,\n fullscreenContainerRef,\n undoRedoListenerRef,\n }),\n [enhancedDispatch, datafeed, onSettingsChange],\n );\n\n return (\n <KlinechartsUIStateContext.Provider value={state}>\n <KlinechartsUIDispatchContext.Provider value={dispatchValue}>\n {children}\n </KlinechartsUIDispatchContext.Provider>\n </KlinechartsUIStateContext.Provider>\n );\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseKlinechartsUIThemeReturn {\n theme: string;\n setTheme: (theme: string) => void;\n toggleTheme: () => void;\n}\n\nexport function useKlinechartsUITheme(): UseKlinechartsUIThemeReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const setTheme = useCallback(\n (theme: string) => {\n state.chart?.setStyles(theme);\n dispatch({ type: \"SET_THEME\", theme });\n },\n [state.chart, dispatch]\n );\n\n const toggleTheme = useCallback(() => {\n const newTheme = state.theme === \"light\" ? \"dark\" : \"light\";\n setTheme(newTheme);\n }, [state.theme, setTheme]);\n\n return {\n theme: state.theme,\n setTheme,\n toggleTheme,\n };\n}\n","import { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseKlinechartsUILoadingReturn {\n isLoading: boolean;\n}\n\nexport function useKlinechartsUILoading(): UseKlinechartsUILoadingReturn {\n const { state } = useKlinechartsUI();\n return { isLoading: state.isLoading };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { TerminalPeriod } from \"../data/periods\";\n\nexport interface UsePeriodsReturn {\n periods: TerminalPeriod[];\n activePeriod: TerminalPeriod;\n setPeriod: (period: TerminalPeriod) => void;\n}\n\nexport function usePeriods(): UsePeriodsReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const setPeriod = useCallback(\n (period: TerminalPeriod) => {\n dispatch({ type: \"SET_PERIOD\", period });\n },\n [dispatch]\n );\n\n return {\n periods: state.periods,\n activePeriod: state.period,\n setPeriod,\n };\n}\n","export interface TimezoneOption {\n key: string;\n localeKey: string;\n}\n\nexport const TIMEZONES: TimezoneOption[] = [\n { key: \"Etc/UTC\", localeKey: \"utc\" },\n { key: \"Pacific/Honolulu\", localeKey: \"honolulu\" },\n { key: \"America/Juneau\", localeKey: \"juneau\" },\n { key: \"America/Los_Angeles\", localeKey: \"los_angeles\" },\n { key: \"America/Chicago\", localeKey: \"chicago\" },\n { key: \"America/Toronto\", localeKey: \"toronto\" },\n { key: \"America/Sao_Paulo\", localeKey: \"sao_paulo\" },\n { key: \"Europe/London\", localeKey: \"london\" },\n { key: \"Europe/Berlin\", localeKey: \"berlin\" },\n { key: \"Asia/Bahrain\", localeKey: \"bahrain\" },\n { key: \"Asia/Dubai\", localeKey: \"dubai\" },\n { key: \"Asia/Ashkhabad\", localeKey: \"ashkhabad\" },\n { key: \"Asia/Almaty\", localeKey: \"almaty\" },\n { key: \"Asia/Bangkok\", localeKey: \"bangkok\" },\n { key: \"Asia/Shanghai\", localeKey: \"shanghai\" },\n { key: \"Asia/Tokyo\", localeKey: \"tokyo\" },\n { key: \"Australia/Sydney\", localeKey: \"sydney\" },\n { key: \"Pacific/Norfolk\", localeKey: \"norfolk\" },\n];\n","import { useCallback, useMemo } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport { TIMEZONES } from \"../data/timezones\";\n\nexport interface TimezoneItem {\n key: string;\n localeKey: string;\n}\n\nexport interface UseTimezoneReturn {\n timezones: TimezoneItem[];\n activeTimezone: string;\n setTimezone: (timezone: string) => void;\n}\n\nexport function useTimezone(): UseTimezoneReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const timezones = useMemo(\n () =>\n TIMEZONES.map((tz) => ({\n key: tz.key,\n localeKey: tz.localeKey,\n })),\n []\n );\n\n const setTimezone = useCallback(\n (timezone: string) => {\n state.chart?.setTimezone(timezone);\n dispatch({ type: \"SET_TIMEZONE\", timezone });\n },\n [state.chart, dispatch]\n );\n\n return {\n timezones,\n activeTimezone: state.timezone,\n setTimezone,\n };\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { PartialSymbolInfo } from \"../provider/types\";\n\nexport interface UseSymbolSearchReturn {\n query: string;\n results: PartialSymbolInfo[];\n isSearching: boolean;\n activeSymbol: PartialSymbolInfo | null;\n setQuery: (query: string) => void;\n selectSymbol: (symbol: PartialSymbolInfo) => void;\n clearResults: () => void;\n}\n\nexport function useSymbolSearch(debounceMs = 300): UseSymbolSearchReturn {\n const { state, dispatch, datafeed } = useKlinechartsUI();\n const [query, setQueryState] = useState(\"\");\n const [results, setResults] = useState<PartialSymbolInfo[]>([]);\n const [isSearching, setIsSearching] = useState(false);\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n // AbortController for the in-flight fetch — cancelled when a new query arrives.\n const abortRef = useRef<AbortController | null>(null);\n\n const setQuery = useCallback(\n (q: string) => {\n setQueryState(q);\n\n // Cancel previous debounce timer.\n if (timerRef.current) clearTimeout(timerRef.current);\n\n // Cancel previous in-flight request.\n abortRef.current?.abort();\n abortRef.current = null;\n\n if (!q.trim()) {\n setResults([]);\n setIsSearching(false);\n return;\n }\n\n setIsSearching(true);\n timerRef.current = setTimeout(async () => {\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const data = await datafeed.searchSymbols(q, controller.signal);\n if (!controller.signal.aborted) {\n setResults(data);\n }\n } catch {\n if (!controller.signal.aborted) {\n setResults([]);\n }\n } finally {\n if (!controller.signal.aborted) {\n setIsSearching(false);\n }\n }\n }, debounceMs);\n },\n [datafeed, debounceMs]\n );\n\n const selectSymbol = useCallback(\n (symbol: PartialSymbolInfo) => {\n dispatch({ type: \"SET_SYMBOL\", symbol });\n setQueryState(\"\");\n setResults([]);\n },\n [dispatch]\n );\n\n const clearResults = useCallback(() => {\n setQueryState(\"\");\n setResults([]);\n setIsSearching(false);\n }, []);\n\n // Cleanup on unmount.\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n abortRef.current?.abort();\n };\n }, []);\n\n return {\n query,\n results,\n isSearching,\n activeSymbol: state.symbol,\n setQuery,\n selectSymbol,\n clearResults,\n };\n}\n","export interface IndicatorParamConfig {\n label: string;\n defaultValue: number;\n}\n\nexport interface IndicatorDefinition {\n name: string;\n localeKey: string;\n params: IndicatorParamConfig[];\n}\n\nexport const MAIN_INDICATORS: string[] = [\n \"MA\",\n \"EMA\",\n \"SMA\",\n \"BOLL\",\n \"SAR\",\n \"BBI\",\n \"BOLL_TV\",\n \"Ichimoku\",\n \"SuperTrend\",\n \"HMA\",\n \"VWAP\",\n \"PivotPoints\",\n \"MA_Ribbon\",\n];\n\nexport const SUB_INDICATORS: string[] = [\n \"MA\",\n \"EMA\",\n \"VOL\",\n \"MACD\",\n \"BOLL\",\n \"KDJ\",\n \"RSI\",\n \"BIAS\",\n \"BRAR\",\n \"CCI\",\n \"DMI\",\n \"CR\",\n \"PSY\",\n \"DMA\",\n \"TRIX\",\n \"OBV\",\n \"VR\",\n \"WR\",\n \"MTM\",\n \"EMV\",\n \"SAR\",\n \"SMA\",\n \"ROC\",\n \"PVT\",\n \"BBI\",\n \"AO\",\n \"MACD_TV\",\n \"RSI_TV\",\n \"CCI_TV\",\n \"Stochastic\",\n];\n\nexport const INDICATOR_PARAMS: Record<string, IndicatorDefinition> = {\n SMA: {\n name: \"SMA\",\n localeKey: \"sma\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 2 },\n ],\n },\n BOLL: {\n name: \"BOLL\",\n localeKey: \"boll\",\n params: [\n { label: \"period\", defaultValue: 20 },\n { label: \"standard_deviation\", defaultValue: 2 },\n ],\n },\n SAR: {\n name: \"SAR\",\n localeKey: \"sar\",\n params: [\n { label: \"params_1\", defaultValue: 2 },\n { label: \"params_2\", defaultValue: 2 },\n { label: \"params_3\", defaultValue: 20 },\n ],\n },\n BBI: {\n name: \"BBI\",\n localeKey: \"bbi\",\n params: [\n { label: \"params_1\", defaultValue: 3 },\n { label: \"params_2\", defaultValue: 6 },\n { label: \"params_3\", defaultValue: 12 },\n { label: \"params_4\", defaultValue: 24 },\n ],\n },\n MACD: {\n name: \"MACD\",\n localeKey: \"macd\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 26 },\n { label: \"params_3\", defaultValue: 9 },\n ],\n },\n KDJ: {\n name: \"KDJ\",\n localeKey: \"kdj\",\n params: [\n { label: \"params_1\", defaultValue: 9 },\n { label: \"params_2\", defaultValue: 3 },\n { label: \"params_3\", defaultValue: 3 },\n ],\n },\n BRAR: {\n name: \"BRAR\",\n localeKey: \"brar\",\n params: [{ label: \"params_1\", defaultValue: 26 }],\n },\n CCI: {\n name: \"CCI\",\n localeKey: \"cci\",\n params: [{ label: \"params_1\", defaultValue: 20 }],\n },\n DMI: {\n name: \"DMI\",\n localeKey: \"dmi\",\n params: [\n { label: \"params_1\", defaultValue: 14 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n CR: {\n name: \"CR\",\n localeKey: \"cr\",\n params: [\n { label: \"params_1\", defaultValue: 26 },\n { label: \"params_2\", defaultValue: 10 },\n { label: \"params_3\", defaultValue: 20 },\n { label: \"params_4\", defaultValue: 40 },\n { label: \"params_5\", defaultValue: 60 },\n ],\n },\n PSY: {\n name: \"PSY\",\n localeKey: \"psy\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n DMA: {\n name: \"DMA\",\n localeKey: \"dma\",\n params: [\n { label: \"params_1\", defaultValue: 10 },\n { label: \"params_2\", defaultValue: 50 },\n { label: \"params_3\", defaultValue: 10 },\n ],\n },\n TRIX: {\n name: \"TRIX\",\n localeKey: \"trix\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 9 },\n ],\n },\n OBV: {\n name: \"OBV\",\n localeKey: \"obv\",\n params: [{ label: \"params_1\", defaultValue: 30 }],\n },\n VR: {\n name: \"VR\",\n localeKey: \"vr\",\n params: [\n { label: \"params_1\", defaultValue: 26 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n MTM: {\n name: \"MTM\",\n localeKey: \"mtm\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n EMV: {\n name: \"EMV\",\n localeKey: \"emv\",\n params: [\n { label: \"params_1\", defaultValue: 14 },\n { label: \"params_2\", defaultValue: 9 },\n ],\n },\n ROC: {\n name: \"ROC\",\n localeKey: \"roc\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n PVT: {\n name: \"PVT\",\n localeKey: \"pvt\",\n params: [],\n },\n AO: {\n name: \"AO\",\n localeKey: \"ao\",\n params: [\n { label: \"params_1\", defaultValue: 5 },\n { label: \"params_2\", defaultValue: 34 },\n ],\n },\n BOLL_TV: {\n name: \"BOLL_TV\",\n localeKey: \"boll_tv\",\n params: [\n { label: \"period\", defaultValue: 20 },\n { label: \"multiplier\", defaultValue: 2 },\n ],\n },\n Ichimoku: {\n name: \"Ichimoku\",\n localeKey: \"ichimoku\",\n params: [\n { label: \"tenkan\", defaultValue: 9 },\n { label: \"kijun\", defaultValue: 26 },\n { label: \"senkou_b\", defaultValue: 52 },\n { label: \"offset\", defaultValue: 26 },\n ],\n },\n SuperTrend: {\n name: \"SuperTrend\",\n localeKey: \"super_trend\",\n params: [\n { label: \"period\", defaultValue: 10 },\n { label: \"factor\", defaultValue: 3 },\n ],\n },\n HMA: {\n name: \"HMA\",\n localeKey: \"hma\",\n params: [{ label: \"period\", defaultValue: 9 }],\n },\n VWAP: {\n name: \"VWAP\",\n localeKey: \"vwap\",\n params: [],\n },\n PivotPoints: {\n name: \"PivotPoints\",\n localeKey: \"pivot_points\",\n params: [],\n },\n MA_Ribbon: {\n name: \"MA_Ribbon\",\n localeKey: \"ma_ribbon\",\n params: [\n { label: \"period_1\", defaultValue: 10 },\n { label: \"period_2\", defaultValue: 20 },\n { label: \"period_3\", defaultValue: 30 },\n { label: \"period_4\", defaultValue: 40 },\n ],\n },\n MACD_TV: {\n name: \"MACD_TV\",\n localeKey: \"macd_tv\",\n params: [\n { label: \"fast\", defaultValue: 12 },\n { label: \"slow\", defaultValue: 26 },\n { label: \"signal\", defaultValue: 9 },\n ],\n },\n RSI_TV: {\n name: \"RSI_TV\",\n localeKey: \"rsi_tv\",\n params: [\n { label: \"rsi_period\", defaultValue: 14 },\n { label: \"ma_period\", defaultValue: 14 },\n ],\n },\n CCI_TV: {\n name: \"CCI_TV\",\n localeKey: \"cci_tv\",\n params: [{ label: \"period\", defaultValue: 20 }],\n },\n Stochastic: {\n name: \"Stochastic\",\n localeKey: \"stochastic\",\n params: [\n { label: \"period\", defaultValue: 14 },\n { label: \"smooth_k\", defaultValue: 3 },\n { label: \"smooth_d\", defaultValue: 3 },\n ],\n },\n};\n","import { useCallback, useMemo, useRef } from \"react\";\nimport { useKlinechartsUI, useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\nimport {\n MAIN_INDICATORS,\n SUB_INDICATORS,\n INDICATOR_PARAMS,\n} from \"../data/indicators\";\n\nexport interface IndicatorInfo {\n name: string;\n isActive: boolean;\n}\n\nexport interface UseIndicatorsReturn {\n mainIndicators: IndicatorInfo[];\n subIndicators: IndicatorInfo[];\n activeMainIndicators: string[];\n activeSubIndicators: Record<string, string>;\n availableMainIndicators: string[];\n availableSubIndicators: string[];\n addMainIndicator: (name: string) => void;\n removeMainIndicator: (name: string) => void;\n addSubIndicator: (name: string) => void;\n removeSubIndicator: (name: string) => void;\n toggleMainIndicator: (name: string) => void;\n toggleSubIndicator: (name: string) => void;\n moveToMain: (name: string) => void;\n moveToSub: (name: string) => void;\n setIndicatorVisible: (\n name: string,\n isMain: boolean,\n visible: boolean,\n ) => void;\n updateIndicatorParams: (\n name: string,\n paneId: string,\n params: number[],\n ) => void;\n getIndicatorParams: (\n name: string,\n ) => { label: string; defaultValue: number }[];\n isMainIndicatorActive: (name: string) => boolean;\n isSubIndicatorActive: (name: string) => boolean;\n /** Collapse a sub-indicator pane to minimal height (30px). */\n collapseSubIndicator: (name: string) => void;\n /** Expand a previously collapsed sub-indicator pane to its prior height. */\n expandSubIndicator: (name: string) => void;\n /** Whether the given sub-indicator pane is currently collapsed. */\n isSubIndicatorCollapsed: (name: string) => boolean;\n /** Reorder a sub-indicator pane up or down relative to other sub-indicators. */\n reorderSubIndicator: (name: string, direction: \"up\" | \"down\") => void;\n}\n\nconst COLLAPSED_HEIGHT = 30;\n\nexport function useIndicators(): UseIndicatorsReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { undoRedoListenerRef } = useKlinechartsUIDispatch();\n\n // Track original pane heights for collapse/expand\n const paneHeightsRef = useRef<Record<string, number>>({});\n const collapsedPanesRef = useRef<Set<string>>(new Set());\n\n const mainIndicators = useMemo(() => {\n const activeNames = state.mainIndicators;\n const inactive = MAIN_INDICATORS.filter((n) => !activeNames.includes(n));\n return [\n ...activeNames.map((name) => ({ name, isActive: true })),\n ...inactive.map((name) => ({ name, isActive: false })),\n ];\n }, [state.mainIndicators]);\n\n const subIndicators = useMemo(() => {\n const activeNames = Object.keys(state.subIndicators);\n const inactive = SUB_INDICATORS.filter((n) => !activeNames.includes(n));\n return [\n ...activeNames.map((name) => ({ name, isActive: true })),\n ...inactive.map((name) => ({ name, isActive: false })),\n ];\n }, [state.subIndicators]);\n\n const addMainIndicator = useCallback(\n (name: string) => {\n if (state.mainIndicators.includes(name)) return;\n state.chart?.createIndicator(\n { name, id: `main_${name}`, paneId: \"candle_pane\" },\n true,\n { id: \"candle_pane\" },\n );\n const newIndicators = [...state.mainIndicators, name];\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newIndicators });\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: { name, wasActive: false, isMain: true, paneId: \"candle_pane\" },\n });\n },\n [state.chart, state.mainIndicators, dispatch, undoRedoListenerRef],\n );\n\n const removeMainIndicator = useCallback(\n (name: string) => {\n state.chart?.removeIndicator({ id: `main_${name}` });\n const newIndicators = state.mainIndicators.filter((n) => n !== name);\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newIndicators });\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: { name, wasActive: true, isMain: true, paneId: \"candle_pane\" },\n });\n },\n [state.chart, state.mainIndicators, dispatch, undoRedoListenerRef],\n );\n\n const addSubIndicator = useCallback(\n (name: string) => {\n if (name in state.subIndicators) return;\n const id = `sub_${name}`;\n state.chart?.createIndicator({ name, id });\n const paneId = state.chart?.getIndicators({ id })?.[0]?.paneId ?? \"\";\n const newIndicators = { ...state.subIndicators, [name]: paneId };\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newIndicators });\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: { name, wasActive: false, isMain: false, paneId },\n });\n },\n [state.chart, state.subIndicators, dispatch, undoRedoListenerRef],\n );\n\n const removeSubIndicator = useCallback(\n (name: string) => {\n const paneId = state.subIndicators[name] ?? \"\";\n state.chart?.removeIndicator({ id: `sub_${name}` });\n const newIndicators = { ...state.subIndicators };\n delete newIndicators[name];\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newIndicators });\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: { name, wasActive: true, isMain: false, paneId },\n });\n },\n [state.chart, state.subIndicators, dispatch, undoRedoListenerRef],\n );\n\n const toggleMainIndicator = useCallback(\n (name: string) => {\n if (state.mainIndicators.includes(name)) {\n removeMainIndicator(name);\n } else {\n addMainIndicator(name);\n }\n },\n [state.mainIndicators, addMainIndicator, removeMainIndicator],\n );\n\n const toggleSubIndicator = useCallback(\n (name: string) => {\n if (name in state.subIndicators) {\n removeSubIndicator(name);\n } else {\n addSubIndicator(name);\n }\n },\n [state.subIndicators, addSubIndicator, removeSubIndicator],\n );\n\n const setIndicatorVisible = useCallback(\n (name: string, isMain: boolean, visible: boolean) => {\n const id = isMain ? `main_${name}` : `sub_${name}`;\n state.chart?.overrideIndicator({ name, id, visible });\n },\n [state.chart],\n );\n\n const updateIndicatorParams = useCallback(\n (name: string, paneId: string, params: number[]) => {\n state.chart?.overrideIndicator({ name, paneId, calcParams: params });\n },\n [state.chart],\n );\n\n const getIndicatorParams = useCallback((name: string) => {\n const config = INDICATOR_PARAMS[name];\n if (!config) return [];\n return config.params.map((p) => ({\n label: p.label,\n defaultValue: p.defaultValue,\n }));\n }, []);\n\n const moveToMain = useCallback(\n (name: string) => {\n if (!state.chart) return;\n const prevCalcParams =\n state.chart.getIndicators({ id: `sub_${name}` })?.[0]?.calcParams;\n state.chart.removeIndicator({ id: `sub_${name}` });\n state.chart.createIndicator(\n {\n name,\n id: `main_${name}`,\n paneId: \"candle_pane\",\n ...(prevCalcParams ? { calcParams: prevCalcParams } : {}),\n },\n true,\n { id: \"candle_pane\" },\n );\n const newSub = { ...state.subIndicators };\n delete newSub[name];\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newSub });\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: [...state.mainIndicators, name],\n });\n },\n [state.chart, state.mainIndicators, state.subIndicators, dispatch],\n );\n\n const moveToSub = useCallback(\n (name: string) => {\n if (!state.chart) return;\n const prevCalcParams =\n state.chart.getIndicators({ id: `main_${name}` })?.[0]?.calcParams;\n state.chart.removeIndicator({ id: `main_${name}` });\n const subId = `sub_${name}`;\n state.chart.createIndicator({\n name,\n id: subId,\n ...(prevCalcParams ? { calcParams: prevCalcParams } : {}),\n });\n const paneId =\n state.chart.getIndicators({ id: subId })?.[0]?.paneId ?? \"\";\n const newMain = state.mainIndicators.filter((n) => n !== name);\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newMain });\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: { ...state.subIndicators, [name]: paneId },\n });\n },\n [state.chart, state.mainIndicators, state.subIndicators, dispatch],\n );\n\n const isMainIndicatorActive = useCallback(\n (name: string) => state.mainIndicators.includes(name),\n [state.mainIndicators],\n );\n\n const isSubIndicatorActive = useCallback(\n (name: string) => name in state.subIndicators,\n [state.subIndicators],\n );\n\n const collapseSubIndicator = useCallback(\n (name: string) => {\n const paneId = state.subIndicators[name];\n if (!state.chart || !paneId) return;\n\n const currentSize = (state.chart as any).getSize?.(paneId);\n if (currentSize?.height && currentSize.height > COLLAPSED_HEIGHT) {\n paneHeightsRef.current[paneId] = currentSize.height;\n }\n collapsedPanesRef.current.add(paneId);\n\n (state.chart as any).setPaneOptions?.({\n id: paneId,\n height: COLLAPSED_HEIGHT,\n });\n state.chart.overrideIndicator({ name, id: `sub_${name}`, visible: false });\n },\n [state.chart, state.subIndicators],\n );\n\n const expandSubIndicator = useCallback(\n (name: string) => {\n const paneId = state.subIndicators[name];\n if (!state.chart || !paneId) return;\n\n const savedHeight = paneHeightsRef.current[paneId] ?? 100;\n collapsedPanesRef.current.delete(paneId);\n\n (state.chart as any).setPaneOptions?.({\n id: paneId,\n height: savedHeight,\n });\n state.chart.overrideIndicator({ name, id: `sub_${name}`, visible: true });\n },\n [state.chart, state.subIndicators],\n );\n\n const isSubIndicatorCollapsed = useCallback(\n (name: string) => {\n const paneId = state.subIndicators[name];\n return paneId ? collapsedPanesRef.current.has(paneId) : false;\n },\n [state.subIndicators],\n );\n\n const reorderSubIndicator = useCallback(\n (name: string, direction: \"up\" | \"down\") => {\n if (!state.chart) return;\n\n const subNames = Object.keys(state.subIndicators);\n const idx = subNames.indexOf(name);\n if (idx === -1) return;\n\n const swapIdx = direction === \"up\" ? idx - 1 : idx + 1;\n if (swapIdx < 0 || swapIdx >= subNames.length) return;\n\n // Collect full indicator state for all sub-indicators\n const subStates = subNames.map((n) => {\n const id = `sub_${n}`;\n const indicator = state.chart!.getIndicators({ id })?.[0];\n return {\n name: n,\n calcParams: indicator?.calcParams,\n visible: indicator?.visible ?? true,\n styles: indicator?.styles,\n paneId: state.subIndicators[n],\n };\n });\n\n // Swap the two entries\n [subStates[idx], subStates[swapIdx]] = [subStates[swapIdx], subStates[idx]];\n\n // Remove all sub-indicators\n for (const n of subNames) {\n state.chart!.removeIndicator({ id: `sub_${n}` });\n }\n\n // Recreate in new order\n const newSubIndicators: Record<string, string> = {};\n for (const sub of subStates) {\n const id = `sub_${sub.name}`;\n state.chart!.createIndicator({\n name: sub.name,\n id,\n ...(sub.calcParams ? { calcParams: sub.calcParams } : {}),\n visible: sub.visible,\n });\n const paneId =\n state.chart!.getIndicators({ id })?.[0]?.paneId ?? \"\";\n newSubIndicators[sub.name] = paneId;\n\n if (sub.styles) {\n state.chart!.overrideIndicator({\n name: sub.name,\n paneId,\n styles: sub.styles,\n });\n }\n }\n\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newSubIndicators });\n },\n [state.chart, state.subIndicators, dispatch],\n );\n\n return {\n mainIndicators,\n subIndicators,\n activeMainIndicators: state.mainIndicators,\n activeSubIndicators: state.subIndicators,\n availableMainIndicators: MAIN_INDICATORS,\n availableSubIndicators: SUB_INDICATORS,\n addMainIndicator,\n removeMainIndicator,\n addSubIndicator,\n removeSubIndicator,\n toggleMainIndicator,\n toggleSubIndicator,\n moveToMain,\n moveToSub,\n setIndicatorVisible,\n updateIndicatorParams,\n getIndicatorParams,\n isMainIndicatorActive,\n isSubIndicatorActive,\n collapseSubIndicator,\n expandSubIndicator,\n isSubIndicatorCollapsed,\n reorderSubIndicator,\n };\n}\n","export interface DrawingTool {\n name: string;\n localeKey: string;\n}\n\nexport interface DrawingToolCategory {\n key: string;\n tools: DrawingTool[];\n}\n\nexport const DRAWING_CATEGORIES: DrawingToolCategory[] = [\n {\n key: \"singleLine\",\n tools: [\n { name: \"horizontalStraightLine\", localeKey: \"horizontal_straight_line\" },\n { name: \"horizontalRayLine\", localeKey: \"horizontal_ray_line\" },\n { name: \"horizontalSegment\", localeKey: \"horizontal_segment\" },\n { name: \"verticalStraightLine\", localeKey: \"vertical_straight_line\" },\n { name: \"verticalRayLine\", localeKey: \"vertical_ray_line\" },\n { name: \"verticalSegment\", localeKey: \"vertical_segment\" },\n { name: \"straightLine\", localeKey: \"straight_line\" },\n { name: \"rayLine\", localeKey: \"ray_line\" },\n { name: \"segment\", localeKey: \"segment\" },\n { name: \"arrow\", localeKey: \"arrow\" },\n { name: \"priceLine\", localeKey: \"price_line\" },\n ],\n },\n {\n key: \"moreLine\",\n tools: [\n { name: \"priceChannelLine\", localeKey: \"price_channel_line\" },\n { name: \"parallelStraightLine\", localeKey: \"parallel_straight_line\" },\n { name: \"ray\", localeKey: \"ray\" },\n { name: \"parallelChannel\", localeKey: \"parallel_channel\" },\n ],\n },\n {\n key: \"polygon\",\n tools: [\n { name: \"circle\", localeKey: \"circle\" },\n { name: \"rect\", localeKey: \"rect\" },\n { name: \"parallelogram\", localeKey: \"parallelogram\" },\n { name: \"triangle\", localeKey: \"triangle\" },\n ],\n },\n {\n key: \"fibonacci\",\n tools: [\n { name: \"fibonacciLine\", localeKey: \"fibonacci_line\" },\n { name: \"fibonacciSegment\", localeKey: \"fibonacci_segment\" },\n { name: \"fibonacciCircle\", localeKey: \"fibonacci_circle\" },\n { name: \"fibonacciSpiral\", localeKey: \"fibonacci_spiral\" },\n {\n name: \"fibonacciSpeedResistanceFan\",\n localeKey: \"fibonacci_speed_resistance_fan\",\n },\n { name: \"fibonacciExtension\", localeKey: \"fibonacci_extension\" },\n { name: \"fibRetracement\", localeKey: \"fib_retracement\" },\n { name: \"gannBox\", localeKey: \"gann_box\" },\n { name: \"gannFan\", localeKey: \"gann_fan\" },\n ],\n },\n {\n key: \"wave\",\n tools: [\n { name: \"xabcd\", localeKey: \"xabcd\" },\n { name: \"abcd\", localeKey: \"abcd\" },\n { name: \"threeWaves\", localeKey: \"three_waves\" },\n { name: \"fiveWaves\", localeKey: \"five_waves\" },\n { name: \"eightWaves\", localeKey: \"eight_waves\" },\n { name: \"anyWaves\", localeKey: \"any_waves\" },\n { name: \"elliottWave\", localeKey: \"elliott_wave\" },\n ],\n },\n {\n key: \"measure\",\n tools: [\n { name: \"measure\", localeKey: \"measure\" },\n ],\n },\n {\n key: \"position\",\n tools: [\n { name: \"longPosition\", localeKey: \"long_position\" },\n { name: \"shortPosition\", localeKey: \"short_position\" },\n ],\n },\n {\n key: \"annotation\",\n tools: [\n { name: \"brush\", localeKey: \"brush\" },\n ],\n },\n];\n\nexport type MagnetMode = \"normal\" | \"weak\" | \"strong\";\n","import { useState, useCallback, useMemo, useRef } from \"react\";\nimport { useKlinechartsUI, useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\nimport { DRAWING_CATEGORIES, type MagnetMode } from \"../data/drawings\";\n\nconst DRAWING_GROUP_ID = \"drawing_tools\";\n\nexport interface DrawingToolItem {\n name: string;\n localeKey: string;\n}\n\nexport interface DrawingCategoryItem {\n key: string;\n tools: DrawingToolItem[];\n}\n\nexport interface UseDrawingToolsReturn {\n categories: DrawingCategoryItem[];\n activeTool: string | null;\n magnetMode: MagnetMode;\n isLocked: boolean;\n isVisible: boolean;\n /** Whether drawing tools auto-retrigger after completing a shape. Default: true. */\n autoRetrigger: boolean;\n selectTool: (name: string) => void;\n clearActiveTool: () => void;\n setMagnetMode: (mode: MagnetMode) => void;\n toggleLock: () => void;\n toggleVisibility: () => void;\n removeAllDrawings: () => void;\n /** Enable/disable auto-retrigger mode. */\n setAutoRetrigger: (enabled: boolean) => void;\n}\n\nexport function useDrawingTools(): UseDrawingToolsReturn {\n const { state } = useKlinechartsUI();\n const { undoRedoListenerRef } = useKlinechartsUIDispatch();\n const [activeTool, setActiveTool] = useState<string | null>(null);\n const [magnetMode, setMagnetModeState] = useState<MagnetMode>(\"normal\");\n const [isLocked, setIsLocked] = useState(false);\n const [isVisible, setIsVisible] = useState(true);\n const [autoRetrigger, setAutoRetrigger] = useState(true);\n\n // Refs to capture latest state for the onDrawEnd closure\n const activeToolRef = useRef(activeTool);\n activeToolRef.current = activeTool;\n const autoRetriggerRef = useRef(autoRetrigger);\n autoRetriggerRef.current = autoRetrigger;\n const isLockedRef = useRef(isLocked);\n isLockedRef.current = isLocked;\n const isVisibleRef = useRef(isVisible);\n isVisibleRef.current = isVisible;\n const magnetModeRef = useRef(magnetMode);\n magnetModeRef.current = magnetMode;\n\n const categories = useMemo(\n () =>\n DRAWING_CATEGORIES.map((cat) => ({\n key: cat.key,\n tools: cat.tools.map((tool) => ({\n name: tool.name,\n localeKey: tool.localeKey,\n })),\n })),\n []\n );\n\n const createOverlayForTool = useCallback(\n (name: string) => {\n const mode =\n magnetModeRef.current === \"strong\"\n ? \"strong_magnet\"\n : magnetModeRef.current === \"weak\"\n ? \"weak_magnet\"\n : \"normal\";\n state.chart?.createOverlay({\n name,\n groupId: DRAWING_GROUP_ID,\n lock: isLockedRef.current,\n visible: isVisibleRef.current,\n mode: mode as any,\n onDrawEnd: (event: any) => {\n const o = event.overlay;\n undoRedoListenerRef.current?.({\n type: \"overlay_added\",\n data: {\n id: o.id,\n overlayData: {\n name: o.name,\n points: o.points,\n styles: o.styles,\n extendData: o.extendData,\n },\n },\n });\n // Auto-retrigger: immediately start another overlay of the same type\n if (autoRetriggerRef.current && activeToolRef.current === name) {\n requestAnimationFrame(() => {\n createOverlayForTool(name);\n });\n }\n },\n });\n },\n [state.chart, undoRedoListenerRef],\n );\n\n const selectTool = useCallback(\n (name: string) => {\n setActiveTool(name);\n createOverlayForTool(name);\n },\n [createOverlayForTool],\n );\n\n const clearActiveTool = useCallback(() => {\n setActiveTool(null);\n }, []);\n\n const setMagnetMode = useCallback(\n (mode: MagnetMode) => {\n setMagnetModeState(mode);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n const overlayMode =\n mode === \"strong\"\n ? \"strong_magnet\"\n : mode === \"weak\"\n ? \"weak_magnet\"\n : \"normal\";\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n mode: overlayMode as any,\n });\n });\n }\n },\n [state.chart]\n );\n\n const toggleLock = useCallback(() => {\n const newLocked = !isLocked;\n setIsLocked(newLocked);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n lock: newLocked,\n });\n });\n }\n }, [state.chart, isLocked]);\n\n const toggleVisibility = useCallback(() => {\n const newVisible = !isVisible;\n setIsVisible(newVisible);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n visible: newVisible,\n });\n });\n }\n }, [state.chart, isVisible]);\n\n const removeAllDrawings = useCallback(() => {\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays && overlays.length > 0) {\n const snapshot = overlays.map((o: any) => ({\n name: o.name,\n id: o.id,\n points: o.points,\n styles: o.styles,\n extendData: o.extendData,\n }));\n undoRedoListenerRef.current?.({\n type: \"overlays_removed\",\n data: { overlays: snapshot },\n });\n }\n state.chart?.removeOverlay({ groupId: DRAWING_GROUP_ID });\n setActiveTool(null);\n }, [state.chart, undoRedoListenerRef]);\n\n return {\n categories,\n activeTool,\n magnetMode,\n isLocked,\n isVisible,\n autoRetrigger,\n selectTool,\n clearActiveTool,\n setMagnetMode,\n toggleLock,\n toggleVisibility,\n removeAllDrawings,\n setAutoRetrigger,\n };\n}\n","export interface CandleTypeOption {\n key: string;\n localeKey: string;\n}\n\nexport const CANDLE_TYPES: CandleTypeOption[] = [\n { key: \"candle_solid\", localeKey: \"candle_solid\" },\n { key: \"candle_stroke\", localeKey: \"candle_stroke\" },\n { key: \"candle_up_stroke\", localeKey: \"candle_up_stroke\" },\n { key: \"candle_down_stroke\", localeKey: \"candle_down_stroke\" },\n { key: \"ohlc\", localeKey: \"ohlc\" },\n { key: \"area\", localeKey: \"area\" },\n];\n\nexport const PRICE_AXIS_TYPES = [\"normal\", \"percentage\", \"logarithm\"] as const;\nexport type PriceAxisType = (typeof PRICE_AXIS_TYPES)[number];\n\nexport const YAXIS_POSITIONS = [\"left\", \"right\"] as const;\nexport type YAxisPosition = (typeof YAXIS_POSITIONS)[number];\n\nexport const COMPARE_RULES = [\"current_open\", \"prev_close\"] as const;\nexport type CompareRule = (typeof COMPARE_RULES)[number];\n\nexport const TOOLTIP_SHOW_RULES = [\"always\", \"follow_cross\", \"none\"] as const;\nexport type TooltipShowRule = (typeof TOOLTIP_SHOW_RULES)[number];\n","import { useState, useCallback, useMemo, useEffect, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport {\n CANDLE_TYPES,\n PRICE_AXIS_TYPES,\n YAXIS_POSITIONS,\n COMPARE_RULES,\n TOOLTIP_SHOW_RULES,\n type PriceAxisType,\n type YAxisPosition,\n type CompareRule,\n type TooltipShowRule,\n} from \"../data/candle-types\";\n\nexport interface CandleTypeItem {\n key: string;\n localeKey: string;\n}\n\nexport interface KlinechartsUISettingsState {\n // Candle\n candleType: string;\n candleUpColor: string;\n candleDownColor: string;\n compareRule: CompareRule;\n // Price marks\n showLastPrice: boolean;\n showLastPriceLine: boolean;\n showHighPrice: boolean;\n showLowPrice: boolean;\n showIndicatorLastValue: boolean;\n // Axis\n priceAxisType: PriceAxisType;\n yAxisPosition: YAxisPosition;\n yAxisInside: boolean;\n reverseCoordinate: boolean;\n showTimeAxis: boolean;\n // Chart elements\n showGrid: boolean;\n showCrosshair: boolean;\n // Tooltips\n showCandleTooltip: boolean;\n showIndicatorTooltip: boolean;\n tooltipShowRule: TooltipShowRule;\n}\n\nexport interface UseKlinechartsUISettingsReturn extends KlinechartsUISettingsState {\n candleTypes: CandleTypeItem[];\n priceAxisTypes: { key: PriceAxisType; localeKey: string }[];\n yAxisPositions: { key: YAxisPosition; localeKey: string }[];\n compareRules: { key: CompareRule; localeKey: string }[];\n tooltipShowRules: { key: TooltipShowRule; localeKey: string }[];\n setCandleType: (type: string) => void;\n setCandleUpColor: (color: string) => void;\n setCandleDownColor: (color: string) => void;\n setCompareRule: (rule: CompareRule) => void;\n setShowLastPrice: (show: boolean) => void;\n setShowLastPriceLine: (show: boolean) => void;\n setShowHighPrice: (show: boolean) => void;\n setShowLowPrice: (show: boolean) => void;\n setShowIndicatorLastValue: (show: boolean) => void;\n setPriceAxisType: (type: PriceAxisType) => void;\n setYAxisPosition: (position: YAxisPosition) => void;\n setYAxisInside: (inside: boolean) => void;\n setReverseCoordinate: (reverse: boolean) => void;\n setShowTimeAxis: (show: boolean) => void;\n setShowGrid: (show: boolean) => void;\n setShowCrosshair: (show: boolean) => void;\n setShowCandleTooltip: (show: boolean) => void;\n setShowIndicatorTooltip: (show: boolean) => void;\n setTooltipShowRule: (rule: TooltipShowRule) => void;\n resetToDefaults: () => void;\n}\n\nconst defaultSettings: KlinechartsUISettingsState = {\n candleType: \"candle_solid\",\n candleUpColor: \"#2DC08E\",\n candleDownColor: \"#F92855\",\n compareRule: \"current_open\",\n showLastPrice: true,\n showLastPriceLine: true,\n showHighPrice: true,\n showLowPrice: true,\n showIndicatorLastValue: true,\n priceAxisType: \"normal\",\n yAxisPosition: \"right\",\n yAxisInside: false,\n reverseCoordinate: false,\n showTimeAxis: true,\n showGrid: true,\n showCrosshair: true,\n showCandleTooltip: true,\n showIndicatorTooltip: true,\n tooltipShowRule: \"always\",\n};\n\nexport function useKlinechartsUISettings(): UseKlinechartsUISettingsReturn {\n const { state, onSettingsChange } = useKlinechartsUI();\n const [settings, setSettings] = useState<KlinechartsUISettingsState>(defaultSettings);\n const isInitialMount = useRef(true);\n\n useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n return;\n }\n onSettingsChange?.({ ...settings });\n }, [settings, onSettingsChange]);\n\n const candleTypes = useMemo(\n () =>\n CANDLE_TYPES.map((ct) => ({\n key: ct.key,\n localeKey: ct.localeKey,\n })),\n []\n );\n\n const priceAxisTypes = useMemo(\n () => PRICE_AXIS_TYPES.map((pat) => ({ key: pat, localeKey: pat })),\n []\n );\n\n const yAxisPositions = useMemo(\n () => YAXIS_POSITIONS.map((p) => ({ key: p, localeKey: p })),\n []\n );\n\n const compareRules = useMemo(\n () => COMPARE_RULES.map((r) => ({ key: r, localeKey: r })),\n []\n );\n\n const tooltipShowRules = useMemo(\n () => TOOLTIP_SHOW_RULES.map((r) => ({ key: r, localeKey: r })),\n []\n );\n\n // Apply initial settings when chart becomes available\n const hasAppliedInitial = useRef(false);\n useEffect(() => {\n if (!state.chart || hasAppliedInitial.current) return;\n hasAppliedInitial.current = true;\n\n // Sync axis settings via setPaneOptions (not styles)\n const needsPaneOptions =\n settings.reverseCoordinate ||\n settings.priceAxisType !== \"normal\" ||\n settings.yAxisPosition !== \"right\" ||\n settings.yAxisInside;\n if (needsPaneOptions) {\n state.chart.setPaneOptions({\n id: \"candle_pane\",\n axis: {\n ...(settings.priceAxisType !== \"normal\" && { name: settings.priceAxisType }),\n ...(settings.reverseCoordinate && { reverse: true }),\n ...(settings.yAxisPosition !== \"right\" && { position: settings.yAxisPosition }),\n ...(settings.yAxisInside && { inside: true }),\n },\n });\n }\n\n // Sync indicator last value mark (klinecharts defaults to show: false)\n if (settings.showIndicatorLastValue) {\n state.chart.setStyles({\n indicator: { lastValueMark: { show: true } },\n });\n }\n }, [state.chart]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const applyStyle = useCallback(\n (path: string, value: unknown) => {\n const parts = path.split(\".\");\n const styleObj: Record<string, unknown> = {};\n let current: Record<string, unknown> = styleObj;\n for (let i = 0; i < parts.length - 1; i++) {\n current[parts[i]] = {};\n current = current[parts[i]] as Record<string, unknown>;\n }\n current[parts[parts.length - 1]] = value;\n state.chart?.setStyles(styleObj);\n },\n [state.chart]\n );\n\n const applyPaneAxis = useCallback(\n (axis: Record<string, unknown>) => {\n state.chart?.setPaneOptions({ id: \"candle_pane\", axis });\n },\n [state.chart]\n );\n\n const setCandleType = useCallback(\n (type: string) => {\n applyStyle(\"candle.type\", type);\n setSettings((s) => ({ ...s, candleType: type }));\n },\n [applyStyle]\n );\n\n const setCandleUpColor = useCallback(\n (color: string) => {\n state.chart?.setStyles({\n candle: {\n bar: { upColor: color, upBorderColor: color, upWickColor: color },\n },\n });\n setSettings((s) => ({ ...s, candleUpColor: color }));\n },\n [state.chart]\n );\n\n const setCandleDownColor = useCallback(\n (color: string) => {\n state.chart?.setStyles({\n candle: {\n bar: { downColor: color, downBorderColor: color, downWickColor: color },\n },\n });\n setSettings((s) => ({ ...s, candleDownColor: color }));\n },\n [state.chart]\n );\n\n const setCompareRule = useCallback(\n (rule: CompareRule) => {\n applyStyle(\"candle.bar.compareRule\", rule);\n setSettings((s) => ({ ...s, compareRule: rule }));\n },\n [applyStyle]\n );\n\n const setShowLastPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.last.show\", show);\n setSettings((s) => ({ ...s, showLastPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowLastPriceLine = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.last.line.show\", show);\n setSettings((s) => ({ ...s, showLastPriceLine: show }));\n },\n [applyStyle]\n );\n\n const setShowHighPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.high.show\", show);\n setSettings((s) => ({ ...s, showHighPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowLowPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.low.show\", show);\n setSettings((s) => ({ ...s, showLowPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowIndicatorLastValue = useCallback(\n (show: boolean) => {\n applyStyle(\"indicator.lastValueMark.show\", show);\n setSettings((s) => ({ ...s, showIndicatorLastValue: show }));\n },\n [applyStyle]\n );\n\n const setPriceAxisType = useCallback(\n (type: PriceAxisType) => {\n applyPaneAxis({ name: type });\n setSettings((s) => ({ ...s, priceAxisType: type }));\n },\n [applyPaneAxis]\n );\n\n const setYAxisPosition = useCallback(\n (position: YAxisPosition) => {\n applyPaneAxis({ position });\n setSettings((s) => ({ ...s, yAxisPosition: position }));\n },\n [applyPaneAxis]\n );\n\n const setYAxisInside = useCallback(\n (inside: boolean) => {\n applyPaneAxis({ inside });\n setSettings((s) => ({ ...s, yAxisInside: inside }));\n },\n [applyPaneAxis]\n );\n\n const setReverseCoordinate = useCallback(\n (reverse: boolean) => {\n applyPaneAxis({ reverse });\n setSettings((s) => ({ ...s, reverseCoordinate: reverse }));\n },\n [applyPaneAxis]\n );\n\n const setShowGrid = useCallback(\n (show: boolean) => {\n applyStyle(\"grid.show\", show);\n setSettings((s) => ({ ...s, showGrid: show }));\n },\n [applyStyle]\n );\n\n const setShowTimeAxis = useCallback(\n (show: boolean) => {\n applyStyle(\"xAxis.show\", show);\n setSettings((s) => ({ ...s, showTimeAxis: show }));\n },\n [applyStyle]\n );\n\n const setShowCrosshair = useCallback(\n (show: boolean) => {\n applyStyle(\"crosshair.show\", show);\n setSettings((s) => ({ ...s, showCrosshair: show }));\n },\n [applyStyle]\n );\n\n const setShowCandleTooltip = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.tooltip.show\", show);\n setSettings((s) => ({ ...s, showCandleTooltip: show }));\n },\n [applyStyle]\n );\n\n const setShowIndicatorTooltip = useCallback(\n (show: boolean) => {\n applyStyle(\"indicator.tooltip.show\", show);\n setSettings((s) => ({ ...s, showIndicatorTooltip: show }));\n },\n [applyStyle]\n );\n\n const setTooltipShowRule = useCallback(\n (rule: TooltipShowRule) => {\n state.chart?.setStyles({\n candle: { tooltip: { showRule: rule } },\n indicator: { tooltip: { showRule: rule } },\n });\n setSettings((s) => ({ ...s, tooltipShowRule: rule }));\n },\n [state.chart]\n );\n\n const resetToDefaults = useCallback(() => {\n setSettings(defaultSettings);\n state.chart?.setStyles(state.theme);\n // Reset axis options to defaults\n state.chart?.setPaneOptions({\n id: \"candle_pane\",\n axis: { name: \"normal\", reverse: false, position: \"right\", inside: false },\n });\n }, [state.chart, state.theme]);\n\n return {\n ...settings,\n candleTypes,\n priceAxisTypes,\n yAxisPositions,\n compareRules,\n tooltipShowRules,\n setCandleType,\n setCandleUpColor,\n setCandleDownColor,\n setCompareRule,\n setShowLastPrice,\n setShowLastPriceLine,\n setShowHighPrice,\n setShowLowPrice,\n setShowIndicatorLastValue,\n setPriceAxisType,\n setYAxisPosition,\n setYAxisInside,\n setReverseCoordinate,\n setShowTimeAxis,\n setShowGrid,\n setShowCrosshair,\n setShowCandleTooltip,\n setShowIndicatorTooltip,\n setTooltipShowRule,\n resetToDefaults,\n };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseScreenshotReturn {\n screenshotUrl: string | null;\n capture: () => void;\n download: (filename?: string) => void;\n clear: () => void;\n}\n\nexport function useScreenshot(): UseScreenshotReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const capture = useCallback(() => {\n if (!state.chart) return;\n const url = state.chart.getConvertPictureUrl(true, \"jpeg\", state.theme === \"dark\" ? \"#151517\" : \"#ffffff\");\n dispatch({ type: \"SET_SCREENSHOT_URL\", url });\n }, [state.chart, state.theme, dispatch]);\n\n const download = useCallback(\n (filename = \"chart-screenshot.jpg\") => {\n if (!state.screenshotUrl) return;\n const link = document.createElement(\"a\");\n link.href = state.screenshotUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n [state.screenshotUrl]\n );\n\n const clear = useCallback(() => {\n dispatch({ type: \"SET_SCREENSHOT_URL\", url: null });\n }, [dispatch]);\n\n return {\n screenshotUrl: state.screenshotUrl,\n capture,\n download,\n clear,\n };\n}\n","import { useState, useCallback, useEffect } from \"react\";\nimport { useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\n\nexport interface UseFullscreenReturn {\n isFullscreen: boolean;\n toggle: () => void;\n enter: () => void;\n exit: () => void;\n containerRef: React.RefObject<HTMLElement | null>;\n}\n\nexport function useFullscreen(): UseFullscreenReturn {\n const { fullscreenContainerRef } = useKlinechartsUIDispatch();\n const [isFullscreen, setIsFullscreen] = useState(false);\n\n const enter = useCallback(() => {\n const el = fullscreenContainerRef.current;\n if (!el) return;\n if (el.requestFullscreen) {\n el.requestFullscreen();\n } else if (\"webkitRequestFullscreen\" in el) {\n (el as HTMLElement & { webkitRequestFullscreen: () => void }).webkitRequestFullscreen();\n } else if (\"msRequestFullscreen\" in el) {\n (el as HTMLElement & { msRequestFullscreen: () => void }).msRequestFullscreen();\n }\n }, [fullscreenContainerRef]);\n\n const exit = useCallback(() => {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (\"webkitExitFullscreen\" in document) {\n (document as Document & { webkitExitFullscreen: () => void }).webkitExitFullscreen();\n } else if (\"msExitFullscreen\" in document) {\n (document as Document & { msExitFullscreen: () => void }).msExitFullscreen();\n }\n }, []);\n\n const toggle = useCallback(() => {\n if (isFullscreen) {\n exit();\n } else {\n enter();\n }\n }, [isFullscreen, enter, exit]);\n\n useEffect(() => {\n const handler = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n document.addEventListener(\"fullscreenchange\", handler);\n document.addEventListener(\"webkitfullscreenchange\", handler);\n return () => {\n document.removeEventListener(\"fullscreenchange\", handler);\n document.removeEventListener(\"webkitfullscreenchange\", handler);\n };\n }, []);\n\n return {\n isFullscreen,\n toggle,\n enter,\n exit,\n containerRef: fullscreenContainerRef,\n };\n}\n","import { useCallback, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { OrderLineExtendData } from \"../extensions/overlays/orderLine\";\n\nexport interface OrderLineOptions extends OrderLineExtendData {\n /** Unique identifier. Auto-generated if omitted. */\n id?: string;\n /** Price level for the line. */\n price: number;\n /** Whether the user can drag the line to change its price. Defaults to false. */\n draggable?: boolean;\n /**\n * Called when the user finishes dragging the line to a new price.\n * Receives the final price value after the drag ends.\n */\n onPriceChange?: (price: number) => void;\n}\n\nexport interface UseOrderLinesReturn {\n /**\n * Creates an order line overlay at the given price level.\n * Returns the line id, or null if the chart is not yet ready.\n */\n createOrderLine: (options: OrderLineOptions) => string | null;\n /**\n * Updates an existing order line.\n * Supply only the fields you want to change.\n * Updating onPriceChange replaces the previous callback.\n */\n updateOrderLine: (\n id: string,\n options: Partial<Omit<OrderLineOptions, \"id\">>,\n ) => void;\n /** Removes the order line with the given id. */\n removeOrderLine: (id: string) => void;\n /** Removes all order lines created with this hook. */\n removeAllOrderLines: () => void;\n}\n\nexport function useOrderLines(): UseOrderLinesReturn {\n const { state } = useKlinechartsUI();\n\n // Map of id → onPriceChange callback. The stable onPressedMoveEnd closure\n // reads from this ref so callbacks can be updated without re-creating overlays.\n const callbacksRef = useRef<Map<string, (price: number) => void>>(new Map());\n\n const createOrderLine = useCallback(\n (options: OrderLineOptions): string | null => {\n if (!state.chart) return null;\n const {\n id: optId,\n price,\n draggable = false,\n onPriceChange,\n ...extendData\n } = options;\n const id =\n optId ??\n `order_line_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n\n if (onPriceChange) {\n callbacksRef.current.set(id, onPriceChange);\n }\n\n // Anchor the point using the latest bar's timestamp. This is stable\n // across data pagination (left-scroll adds bars, shifting dataIndex).\n const dataList = state.chart.getDataList();\n const anchorTimestamp =\n dataList.length > 0 ? dataList[dataList.length - 1].timestamp : Date.now();\n\n state.chart.createOverlay({\n name: \"orderLine\",\n id,\n points: [{ timestamp: anchorTimestamp, value: price }],\n extendData,\n lock: !draggable,\n mode: \"normal\",\n onPressedMoveEnd: (event) => {\n const newPrice = event.overlay.points[0]?.value;\n if (newPrice != null) {\n callbacksRef.current.get(id)?.(newPrice);\n }\n },\n });\n return id;\n },\n [state.chart],\n );\n\n const updateOrderLine = useCallback(\n (id: string, options: Partial<Omit<OrderLineOptions, \"id\">>) => {\n if (!state.chart) return;\n const { price, draggable, onPriceChange, ...extendData } = options;\n const existing = state.chart.getOverlays({ id })?.[0];\n if (!existing) return;\n\n if (onPriceChange !== undefined) {\n callbacksRef.current.set(id, onPriceChange);\n }\n\n const dataList = state.chart.getDataList();\n const anchorTimestamp =\n dataList.length > 0 ? dataList[dataList.length - 1].timestamp : Date.now();\n state.chart.overrideOverlay({\n id,\n ...(price != null\n ? { points: [{ timestamp: anchorTimestamp, value: price }] }\n : {}),\n ...(draggable != null ? { lock: !draggable } : {}),\n extendData: {\n ...(existing.extendData as OrderLineExtendData),\n ...extendData,\n },\n });\n },\n [state.chart],\n );\n\n const removeOrderLine = useCallback(\n (id: string) => {\n state.chart?.removeOverlay({ id });\n callbacksRef.current.delete(id);\n },\n [state.chart],\n );\n\n const removeAllOrderLines = useCallback(() => {\n state.chart?.removeOverlay({ name: \"orderLine\" });\n callbacksRef.current.clear();\n }, [state.chart]);\n\n return {\n createOrderLine,\n updateOrderLine,\n removeOrderLine,\n removeAllOrderLines,\n };\n}\n","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useKlinechartsUI, useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\n\nexport type UndoRedoActionType =\n | \"overlay_added\"\n | \"overlays_removed\"\n | \"indicator_toggled\";\n\nexport interface UndoRedoAction {\n type: UndoRedoActionType;\n /** Snapshot data needed to undo/redo this action */\n data: any;\n}\n\nexport interface UseUndoRedoReturn {\n /** Whether there are actions to undo */\n canUndo: boolean;\n /** Whether there are actions to redo */\n canRedo: boolean;\n /** Undo the last action */\n undo: () => void;\n /** Redo the last undone action */\n redo: () => void;\n /** Push a new action onto the undo stack (clears redo stack) */\n pushAction: (action: UndoRedoAction) => void;\n /** Clear all undo/redo history */\n clear: () => void;\n}\n\nconst DRAWING_GROUP_ID = \"drawing_tools\";\n\n/**\n * Headless hook for undo/redo of drawing overlays and indicator toggles.\n *\n * Supports keyboard shortcuts: Ctrl+Z (undo), Ctrl+Y / Ctrl+Shift+Z (redo).\n */\nexport function useUndoRedo(): UseUndoRedoReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { undoRedoListenerRef } = useKlinechartsUIDispatch();\n const [undoStack, setUndoStack] = useState<UndoRedoAction[]>([]);\n const [redoStack, setRedoStack] = useState<UndoRedoAction[]>([]);\n const isProcessingRef = useRef(false);\n\n const canUndo = undoStack.length > 0;\n const canRedo = redoStack.length > 0;\n\n const pushAction = useCallback((action: UndoRedoAction) => {\n if (isProcessingRef.current) return; // skip actions triggered by undo/redo itself\n setUndoStack((prev) => [...prev, action]);\n setRedoStack([]);\n }, []);\n\n // Register pushAction so other hooks (useDrawingTools, useIndicators) can call it.\n useEffect(() => {\n undoRedoListenerRef.current = pushAction as any;\n return () => { undoRedoListenerRef.current = null; };\n }, [pushAction, undoRedoListenerRef]);\n\n const clear = useCallback(() => {\n setUndoStack([]);\n setRedoStack([]);\n }, []);\n\n const undo = useCallback(() => {\n if (undoStack.length === 0 || !state.chart || isProcessingRef.current)\n return;\n isProcessingRef.current = true;\n\n const action = undoStack[undoStack.length - 1];\n setUndoStack((prev) => prev.slice(0, -1));\n\n try {\n switch (action.type) {\n case \"overlay_added\": {\n // Remove the overlay that was added\n const { id, overlayData } = action.data;\n state.chart.removeOverlay({ id });\n setRedoStack((prev) => [\n ...prev,\n {\n type: \"overlay_added\",\n data: { id, overlayData },\n },\n ]);\n break;\n }\n case \"overlays_removed\": {\n // Restore all overlays that were removed\n const { overlays } = action.data;\n const restoredIds: string[] = [];\n for (const overlay of overlays) {\n const newId = state.chart.createOverlay({\n ...overlay,\n groupId: DRAWING_GROUP_ID,\n });\n if (typeof newId === \"string\") {\n restoredIds.push(newId);\n }\n }\n setRedoStack((prev) => [\n ...prev,\n {\n type: \"overlays_removed\",\n data: {\n overlays: overlays.map((o: any, i: number) => ({\n ...o,\n id: restoredIds[i],\n })),\n },\n },\n ]);\n break;\n }\n case \"indicator_toggled\": {\n const { name, wasActive, isMain, paneId } = action.data;\n if (wasActive) {\n // It was active before, so re-add it\n if (isMain) {\n state.chart.createIndicator(\n { name, id: `main_${name}`, paneId: \"candle_pane\" },\n true,\n { id: \"candle_pane\" },\n );\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: [...state.mainIndicators, name],\n });\n } else {\n state.chart.createIndicator({ name, id: `sub_${name}` });\n const newPaneId =\n state.chart.getIndicators({ id: `sub_${name}` })?.[0]\n ?.paneId ?? \"\";\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: {\n ...state.subIndicators,\n [name]: newPaneId,\n },\n });\n }\n } else {\n // It was not active before, so remove it\n if (isMain) {\n state.chart.removeIndicator({ id: `main_${name}` });\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: state.mainIndicators.filter(\n (n) => n !== name,\n ),\n });\n } else {\n state.chart.removeIndicator({ id: `sub_${name}` });\n const newSub = { ...state.subIndicators };\n delete newSub[name];\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: newSub,\n });\n }\n }\n setRedoStack((prev) => [\n ...prev,\n {\n type: \"indicator_toggled\",\n data: {\n name,\n wasActive: !wasActive,\n isMain,\n paneId,\n },\n },\n ]);\n break;\n }\n }\n } finally {\n isProcessingRef.current = false;\n }\n }, [undoStack, state.chart, state.mainIndicators, state.subIndicators, dispatch]);\n\n const redo = useCallback(() => {\n if (redoStack.length === 0 || !state.chart || isProcessingRef.current)\n return;\n isProcessingRef.current = true;\n\n const action = redoStack[redoStack.length - 1];\n setRedoStack((prev) => prev.slice(0, -1));\n\n try {\n switch (action.type) {\n case \"overlay_added\": {\n // Re-create the overlay\n const { overlayData } = action.data;\n const newId = state.chart.createOverlay({\n ...overlayData,\n groupId: DRAWING_GROUP_ID,\n });\n setUndoStack((prev) => [\n ...prev,\n {\n type: \"overlay_added\",\n data: {\n id: typeof newId === \"string\" ? newId : action.data.id,\n overlayData,\n },\n },\n ]);\n break;\n }\n case \"overlays_removed\": {\n // Remove all the restored overlays\n const { overlays } = action.data;\n const snapshotOverlays = overlays.map((o: any) => {\n const allOverlays = state.chart?.getOverlays({ id: o.id });\n const actual = allOverlays?.[0];\n return actual\n ? {\n name: actual.name,\n points: actual.points,\n styles: actual.styles,\n extendData: actual.extendData,\n }\n : o;\n });\n for (const overlay of overlays) {\n state.chart.removeOverlay({ id: overlay.id });\n }\n setUndoStack((prev) => [\n ...prev,\n {\n type: \"overlays_removed\",\n data: { overlays: snapshotOverlays },\n },\n ]);\n break;\n }\n case \"indicator_toggled\": {\n const { name, wasActive, isMain } = action.data;\n if (wasActive) {\n if (isMain) {\n state.chart.createIndicator(\n { name, id: `main_${name}`, paneId: \"candle_pane\" },\n true,\n { id: \"candle_pane\" },\n );\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: [...state.mainIndicators, name],\n });\n } else {\n state.chart.createIndicator({ name, id: `sub_${name}` });\n const newPaneId =\n state.chart.getIndicators({ id: `sub_${name}` })?.[0]\n ?.paneId ?? \"\";\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: {\n ...state.subIndicators,\n [name]: newPaneId,\n },\n });\n }\n } else {\n if (isMain) {\n state.chart.removeIndicator({ id: `main_${name}` });\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: state.mainIndicators.filter(\n (n) => n !== name,\n ),\n });\n } else {\n state.chart.removeIndicator({ id: `sub_${name}` });\n const newSub = { ...state.subIndicators };\n delete newSub[name];\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: newSub,\n });\n }\n }\n setUndoStack((prev) => [\n ...prev,\n {\n type: \"indicator_toggled\",\n data: {\n name,\n wasActive: !wasActive,\n isMain,\n },\n },\n ]);\n break;\n }\n }\n } finally {\n isProcessingRef.current = false;\n }\n }, [redoStack, state.chart, state.mainIndicators, state.subIndicators, dispatch]);\n\n // Keyboard shortcuts\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n const isCtrlOrMeta = e.ctrlKey || e.metaKey;\n if (!isCtrlOrMeta) return;\n\n if (e.key === \"z\" && !e.shiftKey) {\n e.preventDefault();\n undo();\n } else if (\n e.key === \"y\" ||\n (e.key === \"z\" && e.shiftKey)\n ) {\n e.preventDefault();\n redo();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [undo, redo]);\n\n return {\n canUndo,\n canRedo,\n undo,\n redo,\n pushAction,\n clear,\n };\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nconst STORAGE_KEY_PREFIX = \"klinecharts_layout:\";\nconst INDEX_KEY = \"klinecharts_layout_index\";\nconst STATE_VERSION = \"1.0\";\n\nexport interface ChartLayoutState {\n version: string;\n meta: {\n symbol: string;\n period: string;\n timestamp: number;\n lastModified: number;\n };\n indicators: Array<{\n paneId: string;\n name: string;\n calcParams: any[];\n visible: boolean;\n styles?: any;\n }>;\n drawings: Array<{\n name: string;\n points: any[];\n styles?: any;\n extendData?: any;\n }>;\n}\n\nexport interface LayoutEntry {\n id: string;\n name: string;\n symbol: string;\n period: string;\n timestamp: number;\n lastModified: number;\n state: ChartLayoutState;\n}\n\nexport interface UseLayoutManagerReturn {\n /** List of saved layout entries */\n layouts: LayoutEntry[];\n /** Save current chart state as a named layout */\n saveLayout: (name: string) => string | null;\n /** Load a layout by ID and apply to the chart */\n loadLayout: (id: string) => boolean;\n /** Delete a layout by ID */\n deleteLayout: (id: string) => void;\n /** Rename a layout */\n renameLayout: (id: string, name: string) => boolean;\n /** Refresh the layouts list from localStorage */\n refreshLayouts: () => void;\n /** Whether auto-save is enabled */\n autoSaveEnabled: boolean;\n /** Toggle auto-save on/off */\n setAutoSaveEnabled: (enabled: boolean) => void;\n}\n\nfunction generateId(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(\n /[xy]/g,\n (c) => {\n const r = (Math.random() * 16) | 0;\n return (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\n },\n );\n}\n\nfunction getLayoutIds(): string[] {\n try {\n const raw = localStorage.getItem(INDEX_KEY);\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nfunction getEntry(id: string): LayoutEntry | null {\n try {\n const raw = localStorage.getItem(STORAGE_KEY_PREFIX + id);\n return raw ? JSON.parse(raw) : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Headless hook for saving, loading, and managing named chart layouts\n * via localStorage. Supports auto-save with 5-second debounce.\n */\nexport function useLayoutManager(): UseLayoutManagerReturn {\n const { state, dispatch } = useKlinechartsUI();\n const [layouts, setLayouts] = useState<LayoutEntry[]>([]);\n const [autoSaveEnabled, setAutoSaveEnabled] = useState(false);\n const autoSaveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const autoSaveIdRef = useRef<string | null>(null);\n\n const refreshLayouts = useCallback(() => {\n const entries = getLayoutIds()\n .map((id) => getEntry(id))\n .filter((e): e is LayoutEntry => e !== null);\n setLayouts(entries);\n }, []);\n\n // Load layouts on mount\n useEffect(() => {\n refreshLayouts();\n }, [refreshLayouts]);\n\n const serializeState = useCallback((): ChartLayoutState | null => {\n const chart = state.chart;\n if (!chart) return null;\n\n const indicators: ChartLayoutState[\"indicators\"] = [];\n const indicatorMap = (chart as any).getIndicatorByPaneId?.();\n if (indicatorMap) {\n indicatorMap.forEach((paneIndicators: any, paneId: string) => {\n paneIndicators.forEach((indicator: any) => {\n indicators.push({\n paneId,\n name: indicator.name,\n calcParams: indicator.calcParams,\n visible: indicator.visible,\n ...(indicator.styles ? { styles: indicator.styles } : {}),\n });\n });\n });\n }\n\n const drawings: ChartLayoutState[\"drawings\"] = [];\n const allOverlays = chart.getOverlays({});\n if (allOverlays) {\n for (const overlay of allOverlays) {\n drawings.push({\n name: overlay.name,\n points: overlay.points,\n styles: overlay.styles,\n extendData: overlay.extendData,\n });\n }\n }\n\n return {\n version: STATE_VERSION,\n meta: {\n symbol: state.symbol?.ticker ?? \"\",\n period: state.period?.label ?? \"\",\n timestamp: Date.now(),\n lastModified: Date.now(),\n },\n indicators,\n drawings,\n };\n }, [state.chart, state.symbol, state.period]);\n\n const saveLayout = useCallback(\n (name: string): string | null => {\n const chartState = serializeState();\n if (!chartState) return null;\n\n const id = generateId();\n const now = Date.now();\n const entry: LayoutEntry = {\n id,\n name: name.trim() || `Layout ${new Date(now).toLocaleString()}`,\n symbol: chartState.meta.symbol,\n period: chartState.meta.period,\n timestamp: now,\n lastModified: now,\n state: chartState,\n };\n\n localStorage.setItem(\n STORAGE_KEY_PREFIX + id,\n JSON.stringify(entry),\n );\n const ids = getLayoutIds();\n if (!ids.includes(id)) {\n ids.push(id);\n localStorage.setItem(INDEX_KEY, JSON.stringify(ids));\n }\n\n refreshLayouts();\n return id;\n },\n [serializeState, refreshLayouts],\n );\n\n const loadLayout = useCallback(\n (id: string): boolean => {\n const entry = getEntry(id);\n if (!entry || !state.chart) return false;\n\n const chartState = entry.state;\n if (chartState.version !== STATE_VERSION) return false;\n\n const chart = state.chart;\n\n // Clear existing overlays\n chart.removeOverlay();\n\n // Clear existing indicators (except built-in)\n const indicatorMap = (chart as any).getIndicatorByPaneId?.();\n if (indicatorMap) {\n indicatorMap.forEach((_paneIndicators: any, paneId: string) => {\n _paneIndicators.forEach((_: any, indicatorName: string) => {\n chart.removeIndicator({ paneId, name: indicatorName });\n });\n });\n }\n\n // Restore indicators\n const newMainIndicators: string[] = [];\n const newSubIndicators: Record<string, string> = {};\n\n if (chartState.indicators) {\n for (const ind of chartState.indicators) {\n chart.createIndicator(\n {\n name: ind.name,\n calcParams: ind.calcParams,\n visible: ind.visible,\n },\n ind.paneId !== \"candle_pane\",\n { id: ind.paneId },\n );\n\n if (ind.styles) {\n chart.overrideIndicator({\n name: ind.name,\n paneId: ind.paneId,\n styles: ind.styles,\n });\n }\n\n if (ind.paneId === \"candle_pane\") {\n newMainIndicators.push(ind.name);\n } else {\n newSubIndicators[ind.name] = ind.paneId;\n }\n }\n }\n\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: newMainIndicators,\n });\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: newSubIndicators,\n });\n\n // Restore drawings\n if (chartState.drawings) {\n for (const drawing of chartState.drawings) {\n chart.createOverlay({\n name: drawing.name,\n points: drawing.points,\n styles: drawing.styles,\n extendData: drawing.extendData,\n });\n }\n }\n\n return true;\n },\n [state.chart, dispatch],\n );\n\n const deleteLayout = useCallback(\n (id: string) => {\n localStorage.removeItem(STORAGE_KEY_PREFIX + id);\n const ids = getLayoutIds().filter((i) => i !== id);\n localStorage.setItem(INDEX_KEY, JSON.stringify(ids));\n refreshLayouts();\n },\n [refreshLayouts],\n );\n\n const renameLayout = useCallback(\n (id: string, name: string): boolean => {\n const entry = getEntry(id);\n if (!entry) return false;\n const updated = {\n ...entry,\n name: name.trim(),\n lastModified: Date.now(),\n };\n localStorage.setItem(\n STORAGE_KEY_PREFIX + id,\n JSON.stringify(updated),\n );\n refreshLayouts();\n return true;\n },\n [refreshLayouts],\n );\n\n // Auto-save with 5-second debounce\n useEffect(() => {\n if (!autoSaveEnabled || !state.chart) return;\n\n if (autoSaveTimerRef.current) {\n clearTimeout(autoSaveTimerRef.current);\n }\n\n autoSaveTimerRef.current = setTimeout(() => {\n const chartState = serializeState();\n if (!chartState) return;\n\n if (autoSaveIdRef.current) {\n // Update existing auto-save slot\n const entry = getEntry(autoSaveIdRef.current);\n if (entry) {\n const updated = {\n ...entry,\n lastModified: Date.now(),\n state: chartState,\n };\n localStorage.setItem(\n STORAGE_KEY_PREFIX + autoSaveIdRef.current,\n JSON.stringify(updated),\n );\n refreshLayouts();\n }\n } else {\n // Create initial auto-save slot\n const id = generateId();\n const now = Date.now();\n const entry: LayoutEntry = {\n id,\n name: \"Auto-save\",\n symbol: chartState.meta.symbol,\n period: chartState.meta.period,\n timestamp: now,\n lastModified: now,\n state: chartState,\n };\n localStorage.setItem(\n STORAGE_KEY_PREFIX + id,\n JSON.stringify(entry),\n );\n const ids = getLayoutIds();\n ids.push(id);\n localStorage.setItem(INDEX_KEY, JSON.stringify(ids));\n autoSaveIdRef.current = id;\n refreshLayouts();\n }\n }, 5000);\n\n return () => {\n if (autoSaveTimerRef.current) {\n clearTimeout(autoSaveTimerRef.current);\n }\n };\n }, [\n autoSaveEnabled,\n state.chart,\n state.mainIndicators,\n state.subIndicators,\n serializeState,\n refreshLayouts,\n ]);\n\n return {\n layouts,\n saveLayout,\n loadLayout,\n deleteLayout,\n renameLayout,\n refreshLayouts,\n autoSaveEnabled,\n setAutoSaveEnabled,\n };\n}\n","import { useState, useCallback, useRef } from \"react\";\nimport { registerIndicator } from \"react-klinecharts\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport TA from \"../utils/TA\";\n\nconst DEFAULT_SCRIPT = `// Custom Indicator — Pine Script Style\n// Available: TA, dataList, params\n\nconst period = params[0] ?? 14\nconst closes = dataList.map(d => d.close)\nconst highs = dataList.map(d => d.high)\nconst lows = dataList.map(d => d.low)\n\n// Example: RSI + Bollinger Bands\nconst rsi = TA.rsi(closes, period)\nconst boll = TA.bollinger(closes, period, 2)\n\n// Return one object per candle — each key = one line on chart\nreturn rsi.map((v, i) => ({\n rsi: v,\n upper: boll.upper[i],\n mid: boll.mid[i],\n lower: boll.lower[i],\n}))`;\n\nconst SERIES_COLORS = [\n \"#2962FF\",\n \"#FF6D00\",\n \"#00BCD4\",\n \"#E91E63\",\n \"#76FF03\",\n \"#FFD600\",\n];\n\n/** Keys shadowed inside the sandbox so user code cannot access them. */\nconst SHADOW_KEYS = [\n \"fetch\",\n \"XMLHttpRequest\",\n \"WebSocket\",\n \"Worker\",\n \"SharedWorker\",\n \"importScripts\",\n \"self\",\n \"caches\",\n \"indexedDB\",\n];\n\nlet scriptCounter = 0;\n\nexport type ScriptPlacement = \"main\" | \"sub\";\n\nexport interface UseScriptEditorReturn {\n /** Current script source code */\n code: string;\n setCode: (code: string) => void;\n /** Display name of the script */\n scriptName: string;\n setScriptName: (name: string) => void;\n /** Comma-separated numeric params (e.g. \"14, 26, 9\") */\n params: string;\n setParams: (params: string) => void;\n /** Where to place the indicator */\n placement: ScriptPlacement;\n setPlacement: (p: ScriptPlacement) => void;\n /** Last error message (empty = no error) */\n error: string;\n /** Last status message */\n status: string;\n /** Whether the script is currently running */\n isRunning: boolean;\n /** Whether there is a script indicator currently on the chart */\n hasActiveScript: boolean;\n /** Execute the script and register the indicator */\n runScript: () => void;\n /** Remove the current script indicator from the chart */\n removeScript: () => void;\n /** Reset code to the default template */\n resetCode: () => void;\n /** Export the current code as a downloadable .js file */\n exportScript: () => void;\n /** Import a script from a File object */\n importScript: (file: File) => void;\n /** The default template code */\n defaultScript: string;\n}\n\n/**\n * Headless hook for a Pine Script-style custom indicator editor.\n *\n * Scripts are plain JavaScript function bodies that receive:\n * - `TA` — technical analysis math library\n * - `dataList` — KLineData[] (open, high, low, close, volume, timestamp)\n * - `params` — number[] from the params input\n *\n * Must return an array of objects, one per candle. Each key = one chart series.\n */\nexport function useScriptEditor(): UseScriptEditorReturn {\n const { state } = useKlinechartsUI();\n\n const [code, setCode] = useState(DEFAULT_SCRIPT);\n const [scriptName, setScriptName] = useState(\"\");\n const [params, setParams] = useState(\"14\");\n const [placement, setPlacement] = useState<ScriptPlacement>(\"sub\");\n const [error, setError] = useState(\"\");\n const [status, setStatus] = useState(\"\");\n const [isRunning, setIsRunning] = useState(false);\n\n const activeIdRef = useRef<string | null>(null);\n const activeNameRef = useRef<string | null>(null);\n\n const hasActiveScript = activeNameRef.current !== null;\n\n const runScript = useCallback(() => {\n const chart = state.chart;\n if (!chart) {\n setError(\"Chart not initialized\");\n return;\n }\n\n setError(\"\");\n setStatus(\"Running...\");\n setIsRunning(true);\n\n try {\n const parsedParams = params\n .split(\",\")\n .map((s) => parseFloat(s.trim()))\n .filter((n) => !isNaN(n));\n\n const dataList = (chart as any).getDataList?.() ?? [];\n\n // Execute in sandboxed new Function — shadow dangerous globals\n const allArgs = [\n ...SHADOW_KEYS,\n \"TA\",\n \"dataList\",\n \"params\",\n `\"use strict\";\\n${code}`,\n ];\n const fn = new Function(...allArgs);\n const shadowValues = SHADOW_KEYS.map(() => undefined);\n const result = fn(...shadowValues, TA, dataList, parsedParams);\n\n if (!Array.isArray(result)) {\n throw new Error(\"Script must return an Array.\");\n }\n\n const sample = result.find((v: unknown) => v !== null && v !== undefined);\n const seriesKeys: string[] = sample ? Object.keys(sample) : [\"value\"];\n if (seriesKeys.length === 0) {\n throw new Error(\"Returned objects have no keys.\");\n }\n\n scriptCounter++;\n const indicatorName = `_custom_script_${scriptCounter}`;\n\n const figures = seriesKeys.map((key, i) => ({\n key,\n title: `${key}: `,\n type: \"line\" as const,\n styles: () => ({ color: SERIES_COLORS[i % SERIES_COLORS.length] }),\n }));\n\n registerIndicator({\n name: indicatorName,\n shortName:\n (scriptName.trim() || `Script #${scriptCounter}`) +\n (placement === \"main\" ? \" (Main)\" : \" (Sub)\"),\n calcParams: parsedParams,\n figures: figures as any,\n calc: () => result,\n extendData: {\n isCustomScript: true,\n code,\n placement,\n },\n });\n\n // Remove previous custom script indicator if exists\n if (activeNameRef.current) {\n try {\n chart.removeIndicator({\n id:\n activeIdRef.current === \"candle_pane\"\n ? \"candle_pane\"\n : activeIdRef.current!,\n name: activeNameRef.current,\n } as any);\n } catch {\n // ignore\n }\n }\n\n // Add to chart\n let paneId: string | null = null;\n if (placement === \"main\") {\n paneId = chart.createIndicator(\n { name: indicatorName },\n true,\n { id: \"candle_pane\" },\n );\n } else {\n paneId = chart.createIndicator({ name: indicatorName });\n }\n\n activeIdRef.current = typeof paneId === \"string\" ? paneId : null;\n activeNameRef.current = indicatorName;\n\n const title = scriptName.trim() || `Script #${scriptCounter}`;\n setStatus(\n `${title} applied to ${placement === \"main\" ? \"Main Chart\" : \"Sub Pane\"} — ${seriesKeys.length} series: ${seriesKeys.join(\", \")}`,\n );\n } catch (e: any) {\n setError(e?.message ?? String(e));\n } finally {\n setIsRunning(false);\n }\n }, [state.chart, code, scriptName, params, placement]);\n\n const removeScript = useCallback(() => {\n const chart = state.chart;\n if (chart && activeNameRef.current && activeIdRef.current) {\n try {\n chart.removeIndicator({\n id: activeIdRef.current,\n name: activeNameRef.current,\n } as any);\n } catch {\n // ignore\n }\n activeIdRef.current = null;\n activeNameRef.current = null;\n setStatus(\"Indicator removed.\");\n }\n }, [state.chart]);\n\n const resetCode = useCallback(() => {\n setCode(DEFAULT_SCRIPT);\n setError(\"\");\n setStatus(\"\");\n }, []);\n\n const exportScript = useCallback(() => {\n const blob = new Blob([code], {\n type: \"text/javascript;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${scriptName.trim() || \"custom_indicator\"}.js`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n setStatus(\"Script exported.\");\n }, [code, scriptName]);\n\n const importScript = useCallback(\n (file: File) => {\n const reader = new FileReader();\n reader.onload = (e) => {\n const content = e.target?.result as string;\n if (content) {\n setCode(content);\n if (!scriptName) {\n setScriptName(file.name.replace(/\\.(js|ts|txt)$/i, \"\"));\n }\n setError(\"\");\n setStatus(`Loaded ${file.name}`);\n }\n };\n reader.readAsText(file);\n },\n [scriptName],\n );\n\n return {\n code,\n setCode,\n scriptName,\n setScriptName,\n params,\n setParams,\n placement,\n setPlacement,\n error,\n status,\n isRunning,\n hasActiveScript,\n runScript,\n removeScript,\n resetCode,\n exportScript,\n importScript,\n defaultScript: DEFAULT_SCRIPT,\n };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface CrosshairBarData {\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n timestamp: number;\n change: number;\n changePercent: number;\n}\n\nexport interface UseCrosshairReturn {\n /** OHLCV data of the bar under the crosshair. Null when cursor is off-chart. */\n barData: CrosshairBarData | null;\n}\n\nexport function useCrosshair(): UseCrosshairReturn {\n const { state } = useKlinechartsUI();\n const [barData, setBarData] = useState<CrosshairBarData | null>(null);\n const rafRef = useRef<number>(0);\n\n const handler = useCallback(\n (event: any) => {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = 0;\n\n const klineData = event?.kLineData;\n if (!klineData) {\n setBarData(null);\n return;\n }\n\n const pricePrecision = state.symbol?.pricePrecision ?? 2;\n const open = klineData.open ?? 0;\n const close = klineData.close ?? 0;\n const change = parseFloat((close - open).toFixed(pricePrecision));\n const changePercent =\n open !== 0\n ? parseFloat(((change / open) * 100).toFixed(2))\n : 0;\n\n setBarData({\n open,\n high: klineData.high ?? 0,\n low: klineData.low ?? 0,\n close,\n volume: klineData.volume ?? 0,\n timestamp: klineData.timestamp ?? 0,\n change,\n changePercent,\n });\n });\n },\n [state.symbol?.pricePrecision],\n );\n\n useEffect(() => {\n const chart = state.chart;\n if (!chart) return;\n\n (chart as any).subscribeAction?.(\"onCrosshairChange\", handler);\n\n return () => {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = 0;\n }\n (chart as any).unsubscribeAction?.(\"onCrosshairChange\", handler);\n };\n }, [state.chart, handler]);\n\n return { barData };\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport type AlertCondition = \"crossing_up\" | \"crossing_down\" | \"crossing\";\n\nexport interface Alert {\n id: string;\n price: number;\n condition: AlertCondition;\n message?: string;\n triggered: boolean;\n}\n\nexport interface UseAlertsReturn {\n alerts: Alert[];\n addAlert: (\n price: number,\n condition: AlertCondition,\n message?: string,\n ) => string;\n removeAlert: (id: string) => void;\n clearAlerts: () => void;\n onAlertTriggered: (callback: (alert: Alert) => void) => void;\n}\n\nlet alertCounter = 0;\n\nexport function useAlerts(): UseAlertsReturn {\n const { state } = useKlinechartsUI();\n const [alerts, setAlerts] = useState<Alert[]>([]);\n const callbackRef = useRef<((alert: Alert) => void) | null>(null);\n const prevCloseRef = useRef<number | null>(null);\n\n const addAlert = useCallback(\n (price: number, condition: AlertCondition, message?: string): string => {\n const id = `alert_${++alertCounter}`;\n\n const alert: Alert = {\n id,\n price,\n condition,\n message,\n triggered: false,\n };\n\n setAlerts((prev) => [...prev, alert]);\n\n if (state.chart) {\n state.chart.createOverlay({\n name: \"horizontalStraightLine\",\n id,\n groupId: \"price_alerts\",\n points: [{ value: price }],\n styles: {\n line: {\n style: \"dashed\",\n color: \"#ff9800\",\n size: 1,\n },\n },\n lock: true,\n });\n }\n\n return id;\n },\n [state.chart],\n );\n\n const removeAlert = useCallback(\n (id: string) => {\n setAlerts((prev) => prev.filter((a) => a.id !== id));\n state.chart?.removeOverlay({ id });\n },\n [state.chart],\n );\n\n const clearAlerts = useCallback(() => {\n setAlerts((prev) => {\n for (const alert of prev) {\n state.chart?.removeOverlay({ id: alert.id });\n }\n return [];\n });\n }, [state.chart]);\n\n const onAlertTriggered = useCallback(\n (callback: (alert: Alert) => void) => {\n callbackRef.current = callback;\n },\n [],\n );\n\n // Poll for price crossings every second\n useEffect(() => {\n if (!state.chart) return;\n\n const interval = setInterval(() => {\n const dataList = state.chart?.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n const lastBar = dataList[dataList.length - 1];\n const currentClose = lastBar.close;\n const prevClose = prevCloseRef.current;\n\n if (prevClose === null) {\n prevCloseRef.current = currentClose;\n return;\n }\n\n prevCloseRef.current = currentClose;\n\n setAlerts((prev) => {\n let changed = false;\n const next = prev.map((alert) => {\n if (alert.triggered) return alert;\n\n let shouldTrigger = false;\n\n if (alert.condition === \"crossing_up\") {\n shouldTrigger = prevClose < alert.price && currentClose >= alert.price;\n } else if (alert.condition === \"crossing_down\") {\n shouldTrigger = prevClose > alert.price && currentClose <= alert.price;\n } else if (alert.condition === \"crossing\") {\n shouldTrigger =\n (prevClose < alert.price && currentClose >= alert.price) ||\n (prevClose > alert.price && currentClose <= alert.price);\n }\n\n if (shouldTrigger) {\n changed = true;\n const triggered = { ...alert, triggered: true };\n callbackRef.current?.(triggered);\n return triggered;\n }\n\n return alert;\n });\n\n return changed ? next : prev;\n });\n }, 1000);\n\n return () => clearInterval(interval);\n }, [state.chart]);\n\n return {\n alerts,\n addAlert,\n removeAlert,\n clearAlerts,\n onAlertTriggered,\n };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport type ExportFormat = \"csv\" | \"json\";\n\nexport interface UseDataExportReturn {\n /** Export all chart data */\n exportAll: (format: ExportFormat) => void;\n /** Export only the visible range */\n exportVisible: (format: ExportFormat) => void;\n}\n\nexport function useDataExport(): UseDataExportReturn {\n const { state } = useKlinechartsUI();\n\n const exportAll = useCallback(\n (format: ExportFormat) => {\n if (!state.chart) return;\n const dataList = state.chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n downloadData(dataList, format, state.symbol?.ticker);\n },\n [state.chart, state.symbol?.ticker]\n );\n\n const exportVisible = useCallback(\n (format: ExportFormat) => {\n if (!state.chart) return;\n const dataList = state.chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n const visibleRange = (state.chart as any).getVisibleRange?.();\n if (!visibleRange) {\n downloadData(dataList, format, state.symbol?.ticker);\n return;\n }\n\n const { from, to } = visibleRange as { from: number; to: number };\n const visibleData = dataList.slice(from, to);\n downloadData(visibleData, format, state.symbol?.ticker);\n },\n [state.chart, state.symbol?.ticker]\n );\n\n return { exportAll, exportVisible };\n}\n\nfunction formatRow(bar: any): {\n date: string;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n} {\n return {\n date: new Date(bar.timestamp).toISOString(),\n open: bar.open,\n high: bar.high,\n low: bar.low,\n close: bar.close,\n volume: bar.volume ?? 0,\n };\n}\n\nfunction buildCsv(dataList: any[]): string {\n const header = \"Date,Open,High,Low,Close,Volume\\n\";\n const rows = dataList.map((bar) => {\n const r = formatRow(bar);\n return `${r.date},${r.open},${r.high},${r.low},${r.close},${r.volume}`;\n });\n return header + rows.join(\"\\n\");\n}\n\nfunction buildJson(dataList: any[]): string {\n return JSON.stringify(dataList.map(formatRow), null, 2);\n}\n\nfunction downloadData(\n dataList: any[],\n format: ExportFormat,\n ticker?: string\n): void {\n const content = format === \"csv\" ? buildCsv(dataList) : buildJson(dataList);\n const mimeType = format === \"csv\" ? \"text/csv\" : \"application/json\";\n\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n\n const date = new Date().toISOString().slice(0, 10);\n const prefix = ticker ?? \"chart\";\n const filename = `${prefix}_${date}.${format}`;\n\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n URL.revokeObjectURL(url);\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport {\n useKlinechartsUI,\n useKlinechartsUIDispatch,\n} from \"../provider/ChartTerminalContext\";\nimport type { SymbolInfo, KLineData } from \"react-klinecharts\";\nimport type { TerminalPeriod } from \"../data/periods\";\n\nexport interface WatchlistItem {\n ticker: string;\n lastPrice: number | null;\n change: number | null;\n changePercent: number | null;\n}\n\nexport interface UseWatchlistReturn {\n items: WatchlistItem[];\n addSymbol: (ticker: string) => void;\n removeSymbol: (ticker: string) => void;\n switchSymbol: (ticker: string) => void;\n activeSymbol: string | null;\n}\n\nexport function useWatchlist(): UseWatchlistReturn {\n const { state } = useKlinechartsUI();\n const { dispatch, datafeed } = useKlinechartsUIDispatch();\n\n const [items, setItems] = useState<WatchlistItem[]>([]);\n\n // Track active subscriptions so we can clean them up.\n const subscriptionsRef = useRef<\n Map<string, { symbolInfo: SymbolInfo; period: TerminalPeriod }>\n >(new Map());\n\n const activeSymbol = state.symbol?.ticker ?? null;\n\n const addSymbol = useCallback(\n (ticker: string) => {\n // Prevent duplicates.\n setItems((prev) => {\n if (prev.some((item) => item.ticker === ticker)) return prev;\n return [\n ...prev,\n { ticker, lastPrice: null, change: null, changePercent: null },\n ];\n });\n\n if (subscriptionsRef.current.has(ticker)) return;\n\n const symbolInfo = { ticker } as SymbolInfo;\n const period = state.period;\n\n subscriptionsRef.current.set(ticker, { symbolInfo, period });\n\n datafeed.subscribe(symbolInfo, period, (bar: KLineData) => {\n setItems((prev) =>\n prev.map((item) => {\n if (item.ticker !== ticker) return item;\n const change = bar.close - bar.open;\n const changePercent =\n bar.open !== 0 ? (change / bar.open) * 100 : null;\n return {\n ...item,\n lastPrice: bar.close,\n change,\n changePercent,\n };\n }),\n );\n });\n },\n [datafeed, state.period],\n );\n\n const removeSymbol = useCallback(\n (ticker: string) => {\n const sub = subscriptionsRef.current.get(ticker);\n if (sub) {\n datafeed.unsubscribe(sub.symbolInfo, sub.period);\n subscriptionsRef.current.delete(ticker);\n }\n setItems((prev) => prev.filter((item) => item.ticker !== ticker));\n },\n [datafeed],\n );\n\n const switchSymbol = useCallback(\n (ticker: string) => {\n dispatch({ type: \"SET_SYMBOL\", symbol: { ticker } });\n },\n [dispatch],\n );\n\n // Clean up all subscriptions on unmount.\n useEffect(() => {\n return () => {\n subscriptionsRef.current.forEach((sub) => {\n datafeed.unsubscribe(sub.symbolInfo, sub.period);\n });\n subscriptionsRef.current.clear();\n };\n }, [datafeed]);\n\n return {\n items,\n addSymbol,\n removeSymbol,\n switchSymbol,\n activeSymbol,\n };\n}\n","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport type ReplaySpeed = 1 | 2 | 5 | 10;\n\nexport interface UseReplayReturn {\n /** Whether a replay session is active */\n isReplaying: boolean;\n /** Whether the replay is currently paused */\n isPaused: boolean;\n /** Current playback speed multiplier */\n speed: ReplaySpeed;\n /** Current bar index in the replay */\n barIndex: number;\n /** Total number of bars in the saved data */\n totalBars: number;\n /** Start replaying from the beginning */\n startReplay: () => void;\n /** Stop replay and restore original data */\n stopReplay: () => void;\n /** Toggle play/pause */\n togglePause: () => void;\n /** Advance one bar while paused */\n stepForward: () => void;\n /** Go back one bar while paused */\n stepBackward: () => void;\n /** Seek to a specific bar index (0-based). Pauses playback. */\n seekTo: (index: number) => void;\n /** Change the playback speed */\n setSpeed: (speed: ReplaySpeed) => void;\n}\n\n/**\n * Headless hook for historical data replay (bar-by-bar playback).\n *\n * Loads the current chart data, clears the chart, then progressively adds\n * bars back one at a time at the configured speed. Useful for backtesting\n * and reviewing price action.\n */\nexport function useReplay(): UseReplayReturn {\n const { state } = useKlinechartsUI();\n\n const [isReplaying, setIsReplaying] = useState(false);\n const [isPaused, setIsPaused] = useState(false);\n const [speed, setSpeedState] = useState<ReplaySpeed>(1);\n const [barIndex, setBarIndex] = useState(0);\n const [totalBars, setTotalBars] = useState(0);\n\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const savedDataRef = useRef<any[]>([]);\n const currentIndexRef = useRef(0);\n\n const clearInterval_ = useCallback(() => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n\n const addNextBar = useCallback(() => {\n if (!state.chart) return;\n\n const data = savedDataRef.current;\n const idx = currentIndexRef.current;\n\n if (idx >= data.length) {\n // Replay finished — stop the interval but keep replay state\n clearInterval_();\n setIsPaused(true);\n return;\n }\n\n const bar = data[idx];\n (state.chart as any).updateData?.(bar);\n currentIndexRef.current = idx + 1;\n setBarIndex(idx + 1);\n }, [state.chart, clearInterval_]);\n\n const startInterval = useCallback(\n (currentSpeed: ReplaySpeed) => {\n clearInterval_();\n intervalRef.current = setInterval(addNextBar, 1000 / currentSpeed);\n },\n [addNextBar, clearInterval_]\n );\n\n const startReplay = useCallback(() => {\n if (!state.chart) return;\n\n const dataList = state.chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n // Save a copy of the original data\n savedDataRef.current = [...dataList];\n currentIndexRef.current = 0;\n\n setTotalBars(dataList.length);\n setBarIndex(0);\n setIsReplaying(true);\n setIsPaused(false);\n\n // Clear chart data\n (state.chart as any).clearData?.();\n\n // Start the playback interval\n startInterval(speed);\n }, [state.chart, speed, startInterval]);\n\n const stopReplay = useCallback(() => {\n if (!state.chart) return;\n\n clearInterval_();\n\n // Restore original data\n const data = savedDataRef.current;\n if (data.length > 0) {\n (state.chart as any).clearData?.();\n for (const bar of data) {\n (state.chart as any).updateData?.(bar);\n }\n }\n\n savedDataRef.current = [];\n currentIndexRef.current = 0;\n\n setIsReplaying(false);\n setIsPaused(false);\n setBarIndex(0);\n setTotalBars(0);\n }, [state.chart, clearInterval_]);\n\n const togglePause = useCallback(() => {\n if (!isReplaying) return;\n\n if (isPaused) {\n // Resume\n startInterval(speed);\n setIsPaused(false);\n } else {\n // Pause\n clearInterval_();\n setIsPaused(true);\n }\n }, [isReplaying, isPaused, speed, startInterval, clearInterval_]);\n\n const stepForward = useCallback(() => {\n if (!isReplaying || !isPaused) return;\n addNextBar();\n }, [isReplaying, isPaused, addNextBar]);\n\n const stepBackward = useCallback(() => {\n if (!isReplaying || !isPaused || !state.chart) return;\n const idx = currentIndexRef.current;\n if (idx <= 1) return;\n\n // Remove the last bar by rebuilding data up to idx-1\n const data = savedDataRef.current;\n (state.chart as any).clearData?.();\n for (let i = 0; i < idx - 1; i++) {\n (state.chart as any).updateData?.(data[i]);\n }\n currentIndexRef.current = idx - 1;\n setBarIndex(idx - 1);\n }, [isReplaying, isPaused, state.chart]);\n\n const seekTo = useCallback(\n (targetIndex: number) => {\n if (!isReplaying || !state.chart) return;\n const data = savedDataRef.current;\n const clamped = Math.max(0, Math.min(targetIndex, data.length));\n\n // Pause if playing\n clearInterval_();\n setIsPaused(true);\n\n // Rebuild chart data up to the target index\n (state.chart as any).clearData?.();\n for (let i = 0; i < clamped; i++) {\n (state.chart as any).updateData?.(data[i]);\n }\n currentIndexRef.current = clamped;\n setBarIndex(clamped);\n },\n [isReplaying, state.chart, clearInterval_],\n );\n\n const setSpeed = useCallback(\n (newSpeed: ReplaySpeed) => {\n setSpeedState(newSpeed);\n\n // If currently playing, restart the interval with the new speed\n if (isReplaying && !isPaused) {\n startInterval(newSpeed);\n }\n },\n [isReplaying, isPaused, startInterval]\n );\n\n // Clean up interval on unmount\n useEffect(() => {\n return () => {\n clearInterval_();\n };\n }, [clearInterval_]);\n\n return {\n isReplaying,\n isPaused,\n speed,\n barIndex,\n totalBars,\n startReplay,\n stopReplay,\n togglePause,\n stepForward,\n stepBackward,\n seekTo,\n setSpeed,\n };\n}\n","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { registerIndicator } from \"react-klinecharts\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface CompareSymbol {\n ticker: string;\n /** Base price (first bar close) used for percentage normalization */\n basePrice: number | null;\n color: string;\n visible: boolean;\n}\n\nexport interface UseCompareReturn {\n /** Currently compared symbols */\n symbols: CompareSymbol[];\n /** Add a symbol — fetches data, normalizes to %, renders as indicator line */\n addSymbol: (ticker: string, color?: string) => Promise<void>;\n /** Remove a symbol overlay */\n removeSymbol: (ticker: string) => void;\n /** Toggle visibility of a compared symbol */\n toggleSymbol: (ticker: string) => void;\n /** Clear all comparisons */\n clearAll: () => void;\n}\n\nconst DEFAULT_COLORS = [\n \"#2196f3\",\n \"#ff9800\",\n \"#4caf50\",\n \"#e91e63\",\n \"#9c27b0\",\n \"#00bcd4\",\n \"#ff5722\",\n \"#8bc34a\",\n];\n\nlet colorIndex = 0;\nlet compareCounter = 0;\n\n/**\n * Headless hook for comparing multiple symbols on the same chart.\n *\n * Fetches historical data for each added symbol via the datafeed,\n * normalizes prices to percentage change from the first bar,\n * and renders each as a custom indicator line on the main pane.\n */\nexport function useCompare(): UseCompareReturn {\n const { state, datafeed } = useKlinechartsUI();\n const [symbols, setSymbols] = useState<CompareSymbol[]>([]);\n const indicatorsRef = useRef<\n Map<string, { name: string; paneId: string }>\n >(new Map());\n\n const addSymbol = useCallback(\n async (ticker: string, color?: string) => {\n if (!state.chart || !datafeed) return;\n if (indicatorsRef.current.has(ticker)) return;\n\n const assignedColor =\n color ?? DEFAULT_COLORS[colorIndex++ % DEFAULT_COLORS.length];\n\n const mainDataList = state.chart.getDataList();\n if (!mainDataList || mainDataList.length === 0) return;\n\n const from = mainDataList[0].timestamp;\n const to = mainDataList[mainDataList.length - 1].timestamp;\n\n // Fetch compare symbol data\n const compareData = await datafeed.getHistoryKLineData(\n { ticker } as any,\n { ...state.period!, label: \"\" },\n from,\n to,\n );\n\n if (!compareData || compareData.length === 0) return;\n\n // Build timestamp → close lookup\n const compareMap = new Map<number, number>();\n for (const bar of compareData) {\n compareMap.set(bar.timestamp, bar.close);\n }\n\n // Find the base price (first aligned bar)\n let basePrice: number | null = null;\n for (const bar of mainDataList) {\n const close = compareMap.get(bar.timestamp);\n if (close != null) {\n basePrice = close;\n break;\n }\n }\n if (basePrice === null || basePrice === 0) return;\n const bp = basePrice;\n\n // Build %-change array aligned to main chart timeline\n const normalizedData = mainDataList.map((mainBar) => {\n const close = compareMap.get(mainBar.timestamp);\n return {\n pct: close != null ? ((close - bp) / bp) * 100 : NaN,\n };\n });\n\n // Register custom indicator\n const indicatorName = `__cmp_${++compareCounter}_${ticker}`;\n\n registerIndicator({\n name: indicatorName,\n shortName: ticker,\n figures: [\n {\n key: \"pct\",\n title: `${ticker} %: `,\n type: \"line\",\n styles: () => ({ color: assignedColor }),\n },\n ] as any,\n calc: () => normalizedData,\n });\n\n // Place on main pane\n const paneId = state.chart.createIndicator(\n { name: indicatorName },\n true,\n { id: \"candle_pane\" },\n );\n\n indicatorsRef.current.set(ticker, {\n name: indicatorName,\n paneId: typeof paneId === \"string\" ? paneId : \"candle_pane\",\n });\n\n setSymbols((prev) => {\n if (prev.some((s) => s.ticker === ticker)) return prev;\n return [\n ...prev,\n { ticker, basePrice: bp, color: assignedColor, visible: true },\n ];\n });\n },\n [state.chart, state.period, datafeed],\n );\n\n const removeSymbol = useCallback(\n (ticker: string) => {\n const info = indicatorsRef.current.get(ticker);\n if (info && state.chart) {\n try {\n state.chart.removeIndicator({ name: info.name } as any);\n } catch {\n // indicator may already be removed\n }\n indicatorsRef.current.delete(ticker);\n }\n setSymbols((prev) => prev.filter((s) => s.ticker !== ticker));\n },\n [state.chart],\n );\n\n const toggleSymbol = useCallback(\n (ticker: string) => {\n const info = indicatorsRef.current.get(ticker);\n if (!info || !state.chart) return;\n\n setSymbols((prev) => {\n const sym = prev.find((s) => s.ticker === ticker);\n if (!sym) return prev;\n\n const newVisible = !sym.visible;\n state.chart?.overrideIndicator({\n name: info.name,\n visible: newVisible,\n } as any);\n\n return prev.map((s) =>\n s.ticker === ticker ? { ...s, visible: newVisible } : s,\n );\n });\n },\n [state.chart],\n );\n\n const clearAll = useCallback(() => {\n indicatorsRef.current.forEach((info) => {\n try {\n state.chart?.removeIndicator({ name: info.name } as any);\n } catch {\n // ignore\n }\n });\n indicatorsRef.current.clear();\n setSymbols([]);\n }, [state.chart]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n indicatorsRef.current.forEach((info) => {\n try {\n state.chart?.removeIndicator({ name: info.name } as any);\n } catch {\n // ignore\n }\n });\n indicatorsRef.current.clear();\n };\n }, [state.chart]);\n\n return { symbols, addSymbol, removeSymbol, toggleSymbol, clearAll };\n}\n","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface MeasurePoint {\n price: number;\n timestamp: number;\n barIndex: number;\n}\n\nexport interface MeasureResult {\n from: MeasurePoint;\n to: MeasurePoint;\n /** Absolute price difference */\n priceDiff: number;\n /** Percentage change from → to */\n pricePercent: number;\n /** Number of bars between the two points */\n bars: number;\n /** Time difference in milliseconds */\n timeDiff: number;\n}\n\nexport interface UseMeasureReturn {\n /** Whether measure mode is active (waiting for clicks) */\n isActive: boolean;\n /** Start measure mode — next two clicks on chart set from/to */\n startMeasure: () => void;\n /** Cancel measure mode */\n cancelMeasure: () => void;\n /** Current measurement result (null until both points are set) */\n result: MeasureResult | null;\n /** Clear the current measurement */\n clearResult: () => void;\n /** First point (set after first click) */\n fromPoint: MeasurePoint | null;\n}\n\nconst MEASURE_OVERLAY_ID = \"__measure_line__\";\n\n/**\n * Headless hook for measuring distance/time/percentage between two points.\n *\n * Activates measure mode, captures two clicks on the chart via overlay\n * interaction, then computes price diff, %, bar count, and time diff.\n */\nexport function useMeasure(): UseMeasureReturn {\n const { state } = useKlinechartsUI();\n const [isActive, setIsActive] = useState(false);\n const [fromPoint, setFromPoint] = useState<MeasurePoint | null>(null);\n const [result, setResult] = useState<MeasureResult | null>(null);\n const clickCountRef = useRef(0);\n\n const computeResult = useCallback(\n (from: MeasurePoint, to: MeasurePoint): MeasureResult => {\n const priceDiff = to.price - from.price;\n const pricePercent =\n from.price !== 0 ? (priceDiff / from.price) * 100 : 0;\n const bars = Math.abs(to.barIndex - from.barIndex);\n const timeDiff = Math.abs(to.timestamp - from.timestamp);\n return { from, to, priceDiff, pricePercent, bars, timeDiff };\n },\n [],\n );\n\n const cleanup = useCallback(() => {\n state.chart?.removeOverlay({ id: MEASURE_OVERLAY_ID });\n }, [state.chart]);\n\n const startMeasure = useCallback(() => {\n cleanup();\n setIsActive(true);\n setFromPoint(null);\n setResult(null);\n clickCountRef.current = 0;\n\n if (!state.chart) return;\n\n // Create a segment overlay that the user draws by clicking two points.\n // The onDrawEnd callback fires when the user finishes placing both points.\n state.chart.createOverlay({\n name: \"segment\",\n id: MEASURE_OVERLAY_ID,\n groupId: \"measure\",\n styles: {\n line: {\n style: \"dashed\" as any,\n color: \"#FFD600\",\n size: 1,\n },\n },\n lock: true,\n onDrawEnd: (event: any) => {\n const overlay = event?.overlay;\n const points = overlay?.points;\n if (!points || points.length < 2) return;\n\n const chart = state.chart;\n if (!chart) return;\n\n const dataList = chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n const makePoint = (p: any): MeasurePoint => {\n const idx = Math.max(\n 0,\n Math.min(p.dataIndex ?? 0, dataList.length - 1),\n );\n const bar = dataList[idx];\n return {\n price: p.value ?? bar?.close ?? 0,\n timestamp: bar?.timestamp ?? 0,\n barIndex: idx,\n };\n };\n\n const from = makePoint(points[0]);\n const to = makePoint(points[1]);\n\n setFromPoint(from);\n setResult(computeResult(from, to));\n setIsActive(false);\n },\n });\n }, [state.chart, cleanup, computeResult]);\n\n const cancelMeasure = useCallback(() => {\n cleanup();\n setIsActive(false);\n setFromPoint(null);\n clickCountRef.current = 0;\n }, [cleanup]);\n\n const clearResult = useCallback(() => {\n cleanup();\n setResult(null);\n setFromPoint(null);\n }, [cleanup]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n state.chart?.removeOverlay({ id: MEASURE_OVERLAY_ID });\n };\n }, [state.chart]);\n\n return {\n isActive,\n startMeasure,\n cancelMeasure,\n result,\n clearResult,\n fromPoint,\n };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface Annotation {\n id: string;\n text: string;\n price: number;\n timestamp: number;\n color?: string;\n}\n\nexport interface UseAnnotationsReturn {\n annotations: Annotation[];\n addAnnotation: (\n text: string,\n price: number,\n timestamp: number,\n color?: string,\n ) => string;\n removeAnnotation: (id: string) => void;\n updateAnnotation: (\n id: string,\n updates: Partial<Pick<Annotation, \"text\" | \"color\">>,\n ) => void;\n clearAnnotations: () => void;\n}\n\nlet annotationCounter = 0;\n\nexport function useAnnotations(): UseAnnotationsReturn {\n const { state } = useKlinechartsUI();\n const [annotations, setAnnotations] = useState<Annotation[]>([]);\n\n const addAnnotation = useCallback(\n (text: string, price: number, timestamp: number, color?: string): string => {\n const id = `annotation_${++annotationCounter}`;\n\n const annotation: Annotation = {\n id,\n text,\n price,\n timestamp,\n color,\n };\n\n setAnnotations((prev) => [...prev, annotation]);\n\n if (state.chart) {\n state.chart.createOverlay({\n name: \"simpleAnnotation\",\n id,\n groupId: \"annotations\",\n points: [{ timestamp, value: price }],\n extendData: text,\n styles: color\n ? {\n text: {\n color,\n },\n }\n : undefined,\n lock: true,\n });\n }\n\n return id;\n },\n [state.chart],\n );\n\n const removeAnnotation = useCallback(\n (id: string) => {\n setAnnotations((prev) => prev.filter((a) => a.id !== id));\n state.chart?.removeOverlay({ id });\n },\n [state.chart],\n );\n\n const updateAnnotation = useCallback(\n (id: string, updates: Partial<Pick<Annotation, \"text\" | \"color\">>) => {\n setAnnotations((prev) =>\n prev.map((a) => (a.id === id ? { ...a, ...updates } : a)),\n );\n\n if (state.chart) {\n const overrideData: Record<string, any> = { id };\n\n if (updates.text !== undefined) {\n overrideData.extendData = updates.text;\n }\n\n if (updates.color !== undefined) {\n overrideData.styles = {\n text: {\n color: updates.color,\n },\n };\n }\n\n state.chart.overrideOverlay(overrideData as any);\n }\n },\n [state.chart],\n );\n\n const clearAnnotations = useCallback(() => {\n setAnnotations((prev) => {\n for (const annotation of prev) {\n state.chart?.removeOverlay({ id: annotation.id });\n }\n return [];\n });\n }, [state.chart]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n state.chart?.removeOverlay({ groupId: \"annotations\" });\n };\n }, [state.chart]);\n\n return {\n annotations,\n addAnnotation,\n removeAnnotation,\n updateAnnotation,\n clearAnnotations,\n };\n}\n","import type { Dispatch } from \"react\";\nimport type { DataLoader, KLineData } from \"react-klinecharts\";\nimport type { Datafeed, KlinechartsUIAction } from \"../provider/types\";\n\n/**\n * Creates a klinecharts DataLoader from a Datafeed instance.\n * This bridges the react-klinecharts-ui Datafeed interface to the\n * klinecharts native DataLoader format used by KLineChart component.\n *\n * In klinecharts terminology:\n * - \"init\" = initial data load\n * - \"forward\" = load older data (user scrolled left into history)\n * - \"backward\" = load newer data (user scrolled right)\n */\nexport function createDataLoader(\n datafeed: Datafeed,\n dispatch: Dispatch<KlinechartsUIAction>,\n): DataLoader {\n let oldestTimestamp: number | null = null;\n // Incremented on every \"init\" request. Forward requests capture the value at\n // their start and bail out if a newer init has begun while they were in-flight.\n let currentGen = 0;\n\n return {\n getBars: async (params) => {\n try {\n dispatch({ type: \"SET_LOADING\", isLoading: true });\n\n if (params.type === \"init\") {\n oldestTimestamp = null;\n const gen = ++currentGen;\n const data = await datafeed.getHistoryKLineData(\n params.symbol,\n { ...params.period, label: \"\" },\n 0,\n Date.now(),\n );\n if (gen !== currentGen) return; // newer init started — discard stale result\n if (data.length > 0) {\n oldestTimestamp = data[0].timestamp;\n }\n params.callback(data as KLineData[], {\n forward: data.length > 0,\n backward: false,\n });\n } else if (params.type === \"forward\" && oldestTimestamp !== null) {\n const gen = currentGen;\n const data = await datafeed.getHistoryKLineData(\n params.symbol,\n { ...params.period, label: \"\" },\n 0,\n oldestTimestamp - 1,\n );\n if (gen !== currentGen) return; // init for new period started — discard\n if (data.length > 0) {\n oldestTimestamp = data[0].timestamp;\n }\n params.callback(data as KLineData[], {\n forward: data.length > 0,\n backward: false,\n });\n } else if (params.type === \"backward\") {\n // Backward pagination (loading data newer than what we have) is generally\n // not needed in typical terminal usage because we subscribe via ws for real-time.\n params.callback([], { forward: false, backward: false });\n }\n } catch (error) {\n console.error(\"Failed to load chart data:\", error);\n params.callback([], { forward: false, backward: false });\n } finally {\n dispatch({ type: \"SET_LOADING\", isLoading: false });\n }\n },\n subscribeBar: (params) => {\n datafeed.subscribe(\n params.symbol,\n { ...params.period, label: \"\" },\n (klineData) => params.callback(klineData as KLineData),\n );\n },\n unsubscribeBar: (params) => {\n datafeed.unsubscribe(params.symbol, { ...params.period, label: \"\" });\n },\n };\n}\n"]}
|