@forgecharts/sdk 1.1.28 → 1.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dist/index.js +8100 -48
  2. package/dist/index.js.map +1 -1
  3. package/dist/internal.js +8851 -31
  4. package/dist/internal.js.map +1 -1
  5. package/dist/react/index.js +11558 -27
  6. package/dist/react/index.js.map +1 -1
  7. package/dist/react/internal.js +12147 -43
  8. package/dist/react/internal.js.map +1 -1
  9. package/package.json +1 -1
  10. package/dist/__tests__/backwardCompatibility.test.js +0 -159
  11. package/dist/__tests__/backwardCompatibility.test.js.map +0 -1
  12. package/dist/__tests__/candleInvariant.test.js +0 -415
  13. package/dist/__tests__/candleInvariant.test.js.map +0 -1
  14. package/dist/__tests__/public-api-surface.js +0 -38
  15. package/dist/__tests__/public-api-surface.js.map +0 -1
  16. package/dist/__tests__/timeframeBoundary.test.js +0 -452
  17. package/dist/__tests__/timeframeBoundary.test.js.map +0 -1
  18. package/dist/api/DrawingManager.js +0 -190
  19. package/dist/api/DrawingManager.js.map +0 -1
  20. package/dist/api/EventBus.js +0 -44
  21. package/dist/api/EventBus.js.map +0 -1
  22. package/dist/api/IndicatorDAG.js +0 -316
  23. package/dist/api/IndicatorDAG.js.map +0 -1
  24. package/dist/api/IndicatorRegistry.js +0 -39
  25. package/dist/api/IndicatorRegistry.js.map +0 -1
  26. package/dist/api/LayoutManager.js +0 -51
  27. package/dist/api/LayoutManager.js.map +0 -1
  28. package/dist/api/PaneManager.js +0 -119
  29. package/dist/api/PaneManager.js.map +0 -1
  30. package/dist/api/ReferenceAPI.js +0 -153
  31. package/dist/api/ReferenceAPI.js.map +0 -1
  32. package/dist/api/TChart.js +0 -765
  33. package/dist/api/TChart.js.map +0 -1
  34. package/dist/api/createChart.js +0 -42
  35. package/dist/api/createChart.js.map +0 -1
  36. package/dist/api/drawing tools/fib gann menu/fibRetracement.js +0 -22
  37. package/dist/api/drawing tools/fib gann menu/fibRetracement.js.map +0 -1
  38. package/dist/api/drawing tools/lines menu/crossLine.js +0 -16
  39. package/dist/api/drawing tools/lines menu/crossLine.js.map +0 -1
  40. package/dist/api/drawing tools/lines menu/disjointChannel.js +0 -59
  41. package/dist/api/drawing tools/lines menu/disjointChannel.js.map +0 -1
  42. package/dist/api/drawing tools/lines menu/extendedLine.js +0 -17
  43. package/dist/api/drawing tools/lines menu/extendedLine.js.map +0 -1
  44. package/dist/api/drawing tools/lines menu/flatTopBottom.js +0 -41
  45. package/dist/api/drawing tools/lines menu/flatTopBottom.js.map +0 -1
  46. package/dist/api/drawing tools/lines menu/horizontal.js +0 -19
  47. package/dist/api/drawing tools/lines menu/horizontal.js.map +0 -1
  48. package/dist/api/drawing tools/lines menu/horizontalRay.js +0 -20
  49. package/dist/api/drawing tools/lines menu/horizontalRay.js.map +0 -1
  50. package/dist/api/drawing tools/lines menu/infoLine.js +0 -107
  51. package/dist/api/drawing tools/lines menu/infoLine.js.map +0 -1
  52. package/dist/api/drawing tools/lines menu/insidePitchfork.js +0 -31
  53. package/dist/api/drawing tools/lines menu/insidePitchfork.js.map +0 -1
  54. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js +0 -15
  55. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js.map +0 -1
  56. package/dist/api/drawing tools/lines menu/parallelChannel.js +0 -43
  57. package/dist/api/drawing tools/lines menu/parallelChannel.js.map +0 -1
  58. package/dist/api/drawing tools/lines menu/pitchfork.js +0 -12
  59. package/dist/api/drawing tools/lines menu/pitchfork.js.map +0 -1
  60. package/dist/api/drawing tools/lines menu/ray.js +0 -23
  61. package/dist/api/drawing tools/lines menu/ray.js.map +0 -1
  62. package/dist/api/drawing tools/lines menu/regressionTrend.js +0 -127
  63. package/dist/api/drawing tools/lines menu/regressionTrend.js.map +0 -1
  64. package/dist/api/drawing tools/lines menu/schiffPitchfork.js +0 -15
  65. package/dist/api/drawing tools/lines menu/schiffPitchfork.js.map +0 -1
  66. package/dist/api/drawing tools/lines menu/trendAngle.js +0 -51
  67. package/dist/api/drawing tools/lines menu/trendAngle.js.map +0 -1
  68. package/dist/api/drawing tools/lines menu/trendline.js +0 -11
  69. package/dist/api/drawing tools/lines menu/trendline.js.map +0 -1
  70. package/dist/api/drawing tools/lines menu/vertical.js +0 -11
  71. package/dist/api/drawing tools/lines menu/vertical.js.map +0 -1
  72. package/dist/api/drawing tools/pointers menu/crosshair.js +0 -16
  73. package/dist/api/drawing tools/pointers menu/crosshair.js.map +0 -1
  74. package/dist/api/drawing tools/pointers menu/cursor.js +0 -15
  75. package/dist/api/drawing tools/pointers menu/cursor.js.map +0 -1
  76. package/dist/api/drawing tools/pointers menu/demonstration.js +0 -30
  77. package/dist/api/drawing tools/pointers menu/demonstration.js.map +0 -1
  78. package/dist/api/drawing tools/pointers menu/dot.js +0 -23
  79. package/dist/api/drawing tools/pointers menu/dot.js.map +0 -1
  80. package/dist/api/drawing tools/shapes menu/rectangle.js +0 -19
  81. package/dist/api/drawing tools/shapes menu/rectangle.js.map +0 -1
  82. package/dist/api/drawing tools/shapes menu/text.js +0 -25
  83. package/dist/api/drawing tools/shapes menu/text.js.map +0 -1
  84. package/dist/api/drawingUtils.js +0 -83
  85. package/dist/api/drawingUtils.js.map +0 -1
  86. package/dist/core/CanvasLayer.js +0 -56
  87. package/dist/core/CanvasLayer.js.map +0 -1
  88. package/dist/core/Chart.js +0 -839
  89. package/dist/core/Chart.js.map +0 -1
  90. package/dist/core/CoordTransform.js +0 -224
  91. package/dist/core/CoordTransform.js.map +0 -1
  92. package/dist/core/Crosshair.js +0 -186
  93. package/dist/core/Crosshair.js.map +0 -1
  94. package/dist/core/IndicatorEngine.js +0 -181
  95. package/dist/core/IndicatorEngine.js.map +0 -1
  96. package/dist/core/InteractionManager.js +0 -698
  97. package/dist/core/InteractionManager.js.map +0 -1
  98. package/dist/core/PriceScale.js +0 -113
  99. package/dist/core/PriceScale.js.map +0 -1
  100. package/dist/core/Series.js +0 -114
  101. package/dist/core/Series.js.map +0 -1
  102. package/dist/core/TimeScale.js +0 -150
  103. package/dist/core/TimeScale.js.map +0 -1
  104. package/dist/datafeed/DatafeedConnector.js +0 -268
  105. package/dist/datafeed/DatafeedConnector.js.map +0 -1
  106. package/dist/engine/CandleEngine.js +0 -318
  107. package/dist/engine/CandleEngine.js.map +0 -1
  108. package/dist/engine/__tests__/CandleEngine.test.js +0 -300
  109. package/dist/engine/__tests__/CandleEngine.test.js.map +0 -1
  110. package/dist/engine/candleInvariants.js +0 -134
  111. package/dist/engine/candleInvariants.js.map +0 -1
  112. package/dist/engine/mergeUtils.js +0 -64
  113. package/dist/engine/mergeUtils.js.map +0 -1
  114. package/dist/engine/timeframeUtils.js +0 -100
  115. package/dist/engine/timeframeUtils.js.map +0 -1
  116. package/dist/licensing/ChartRuntimeResolver.js +0 -310
  117. package/dist/licensing/ChartRuntimeResolver.js.map +0 -1
  118. package/dist/licensing/LicenseManager.js +0 -114
  119. package/dist/licensing/LicenseManager.js.map +0 -1
  120. package/dist/licensing/__tests__/ChartRuntimeResolver.test.js +0 -177
  121. package/dist/licensing/__tests__/ChartRuntimeResolver.test.js.map +0 -1
  122. package/dist/licensing/__tests__/LicenseManager.test.js +0 -153
  123. package/dist/licensing/__tests__/LicenseManager.test.js.map +0 -1
  124. package/dist/licensing/licenseTypes.js +0 -2
  125. package/dist/licensing/licenseTypes.js.map +0 -1
  126. package/dist/pine/PineCompiler.js +0 -44
  127. package/dist/pine/PineCompiler.js.map +0 -1
  128. package/dist/pine/diagnostics.js +0 -11
  129. package/dist/pine/diagnostics.js.map +0 -1
  130. package/dist/pine/index.js +0 -5
  131. package/dist/pine/index.js.map +0 -1
  132. package/dist/pine/pine-ast.js +0 -19
  133. package/dist/pine/pine-ast.js.map +0 -1
  134. package/dist/pine/pine-lexer.js +0 -249
  135. package/dist/pine/pine-lexer.js.map +0 -1
  136. package/dist/pine/pine-parser.js +0 -416
  137. package/dist/pine/pine-parser.js.map +0 -1
  138. package/dist/pine/pine-transpiler.js +0 -260
  139. package/dist/pine/pine-transpiler.js.map +0 -1
  140. package/dist/pixi/LayerName.js +0 -35
  141. package/dist/pixi/LayerName.js.map +0 -1
  142. package/dist/pixi/PixiCandlestickRenderer.js +0 -107
  143. package/dist/pixi/PixiCandlestickRenderer.js.map +0 -1
  144. package/dist/pixi/PixiChart.js +0 -367
  145. package/dist/pixi/PixiChart.js.map +0 -1
  146. package/dist/pixi/PixiCrosshairRenderer.js +0 -110
  147. package/dist/pixi/PixiCrosshairRenderer.js.map +0 -1
  148. package/dist/pixi/PixiDrawingRenderer.js +0 -111
  149. package/dist/pixi/PixiDrawingRenderer.js.map +0 -1
  150. package/dist/pixi/PixiGridRenderer.js +0 -114
  151. package/dist/pixi/PixiGridRenderer.js.map +0 -1
  152. package/dist/pixi/PixiLayerManager.js +0 -92
  153. package/dist/pixi/PixiLayerManager.js.map +0 -1
  154. package/dist/react/canvas/ChartCanvas.js +0 -604
  155. package/dist/react/canvas/ChartCanvas.js.map +0 -1
  156. package/dist/react/canvas/ChartContextMenu.js +0 -5
  157. package/dist/react/canvas/ChartContextMenu.js.map +0 -1
  158. package/dist/react/canvas/ChartSettingsDialog.js +0 -28
  159. package/dist/react/canvas/ChartSettingsDialog.js.map +0 -1
  160. package/dist/react/canvas/IndicatorLabel.js +0 -196
  161. package/dist/react/canvas/IndicatorLabel.js.map +0 -1
  162. package/dist/react/canvas/IndicatorPane.js +0 -395
  163. package/dist/react/canvas/IndicatorPane.js.map +0 -1
  164. package/dist/react/canvas/PointerOverlay.js +0 -61
  165. package/dist/react/canvas/PointerOverlay.js.map +0 -1
  166. package/dist/react/canvas/toolbars/LeftToolbar.js +0 -407
  167. package/dist/react/canvas/toolbars/LeftToolbar.js.map +0 -1
  168. package/dist/react/hooks/useChartCapabilities.js +0 -66
  169. package/dist/react/hooks/useChartCapabilities.js.map +0 -1
  170. package/dist/react/shell/ManagedAppShell.js +0 -440
  171. package/dist/react/shell/ManagedAppShell.js.map +0 -1
  172. package/dist/react/trading/TradingBridge.js +0 -73
  173. package/dist/react/trading/TradingBridge.js.map +0 -1
  174. package/dist/react/workspace/ChartWorkspace.js +0 -42
  175. package/dist/react/workspace/ChartWorkspace.js.map +0 -1
  176. package/dist/react/workspace/FloatingPanel.js +0 -82
  177. package/dist/react/workspace/FloatingPanel.js.map +0 -1
  178. package/dist/react/workspace/IndicatorsDialog.js +0 -121
  179. package/dist/react/workspace/IndicatorsDialog.js.map +0 -1
  180. package/dist/react/workspace/LayoutMenu.js +0 -113
  181. package/dist/react/workspace/LayoutMenu.js.map +0 -1
  182. package/dist/react/workspace/SymbolSearchDialog.js +0 -245
  183. package/dist/react/workspace/SymbolSearchDialog.js.map +0 -1
  184. package/dist/react/workspace/TabBar.js +0 -29
  185. package/dist/react/workspace/TabBar.js.map +0 -1
  186. package/dist/react/workspace/toolbars/BottomToolbar.js +0 -236
  187. package/dist/react/workspace/toolbars/BottomToolbar.js.map +0 -1
  188. package/dist/react/workspace/toolbars/RightToolbar.js +0 -18
  189. package/dist/react/workspace/toolbars/RightToolbar.js.map +0 -1
  190. package/dist/react/workspace/toolbars/TopToolbar.js +0 -82
  191. package/dist/react/workspace/toolbars/TopToolbar.js.map +0 -1
  192. package/dist/renderers/CandlestickRenderer.js +0 -98
  193. package/dist/renderers/CandlestickRenderer.js.map +0 -1
  194. package/dist/renderers/HistogramRenderer.js +0 -50
  195. package/dist/renderers/HistogramRenderer.js.map +0 -1
  196. package/dist/renderers/LineRenderer.js +0 -64
  197. package/dist/renderers/LineRenderer.js.map +0 -1
  198. package/dist/theme/colors.js +0 -19
  199. package/dist/theme/colors.js.map +0 -1
  200. package/dist/tools/barDivergenceCheck.js +0 -200
  201. package/dist/tools/barDivergenceCheck.js.map +0 -1
  202. package/dist/trading/TradingOverlayStore.js +0 -139
  203. package/dist/trading/TradingOverlayStore.js.map +0 -1
  204. package/dist/trading/UnmanagedIngestion.js +0 -114
  205. package/dist/trading/UnmanagedIngestion.js.map +0 -1
  206. package/dist/trading/__tests__/ManagedTradingController.test.js +0 -271
  207. package/dist/trading/__tests__/ManagedTradingController.test.js.map +0 -1
  208. package/dist/trading/__tests__/TradingOverlayStore.test.js +0 -267
  209. package/dist/trading/__tests__/TradingOverlayStore.test.js.map +0 -1
  210. package/dist/trading/__tests__/UnmanagedIngestion.test.js +0 -170
  211. package/dist/trading/__tests__/UnmanagedIngestion.test.js.map +0 -1
  212. package/dist/trading/managed/ManagedTradingController.js +0 -247
  213. package/dist/trading/managed/ManagedTradingController.js.map +0 -1
  214. package/dist/trading/managed/managedCapabilities.js +0 -79
  215. package/dist/trading/managed/managedCapabilities.js.map +0 -1
  216. package/dist/trading/managed/managedTypes.js +0 -13
  217. package/dist/trading/managed/managedTypes.js.map +0 -1
  218. package/dist/trading/tradingTypes.js +0 -8
  219. package/dist/trading/tradingTypes.js.map +0 -1
  220. package/dist/tscript/TScriptIndicator.js +0 -47
  221. package/dist/tscript/TScriptIndicator.js.map +0 -1
  222. package/dist/tscript/ast.js +0 -22
  223. package/dist/tscript/ast.js.map +0 -1
  224. package/dist/tscript/lexer.js +0 -187
  225. package/dist/tscript/lexer.js.map +0 -1
  226. package/dist/tscript/parser.js +0 -318
  227. package/dist/tscript/parser.js.map +0 -1
  228. package/dist/tscript/runtime.js +0 -475
  229. package/dist/tscript/runtime.js.map +0 -1
  230. package/dist/tscript/series.js +0 -79
  231. package/dist/tscript/series.js.map +0 -1
  232. package/dist/types/IChart.js +0 -2
  233. package/dist/types/IChart.js.map +0 -1
  234. package/dist/types/IRenderer.js +0 -2
  235. package/dist/types/IRenderer.js.map +0 -1
  236. package/dist/types/ISeries.js +0 -2
  237. package/dist/types/ISeries.js.map +0 -1
@@ -1,440 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * ManagedAppShell — stateful chart application shell.
4
- *
5
- * Owns all workspace state (tabs, symbol, timeframe, layout persistence, etc.)
6
- * and wires injected API clients to ChartWorkspace. App-specific drawers (script,
7
- * watchlist, trade) are passed as render-prop factories so this shell never
8
- * imports from the app layer.
9
- */
10
- import { useState, useEffect, useRef, useCallback, forwardRef, useImperativeHandle, } from 'react';
11
- import { ChartCanvas } from '../canvas/ChartCanvas';
12
- import { ChartWorkspace } from '../workspace/ChartWorkspace';
13
- import { DEFAULT_FAVORITES } from '../workspace/toolbars/TopToolbar';
14
- import { useChartCapabilities } from '../hooks/useChartCapabilities';
15
- import { LicenseManager } from '../../';
16
- // ─── Helpers ──────────────────────────────────────────────────────────────────
17
- function uid() { return Math.random().toString(36).slice(2, 10); }
18
- const DEFAULT_INDICATORS = [];
19
- // ─── License loaders ──────────────────────────────────────────────────────────
20
- /**
21
- * Fetches the license payload from the API and loads it into LicenseManager.
22
- *
23
- * @param apiUrl Optional base URL (defaults to current origin).
24
- * @param getAuthToken Optional async callback to obtain a Bearer token.
25
- */
26
- async function loadLicenseFromApi(apiUrl, getAuthToken) {
27
- try {
28
- const url = `${apiUrl ?? ''}/api/license`;
29
- const headers = {};
30
- if (getAuthToken) {
31
- try {
32
- const tok = await getAuthToken();
33
- if (tok)
34
- headers['Authorization'] = `Bearer ${tok}`;
35
- }
36
- catch { /* token fetch failed — continue unauthenticated */ }
37
- }
38
- const r = await fetch(url, { headers });
39
- const data = r.ok
40
- ? await r.json()
41
- : { licensePayload: null };
42
- if (data.licensePayload && typeof data.licensePayload === 'object') {
43
- LicenseManager.getInstance().loadLicense(data.licensePayload);
44
- }
45
- // If the endpoint returns no payload, leave LicenseManager in its current
46
- // state (unmanaged mode) rather than clearing a previously loaded license.
47
- }
48
- catch {
49
- // Network failure — leave LicenseManager in its current state.
50
- }
51
- }
52
- function makeTab(n) {
53
- return { id: uid(), label: `Chart ${n}`, symbol: 'BINANCE:BTCUSDT', timeframe: '1h', remountCount: 0 };
54
- }
55
- const DEFAULT_TAB = makeTab(1);
56
- const DEFAULT_WORKSPACE = {
57
- tabs: [{ id: DEFAULT_TAB.id, label: DEFAULT_TAB.label, symbol: DEFAULT_TAB.symbol, timeframe: DEFAULT_TAB.timeframe }],
58
- activeTabId: DEFAULT_TAB.id,
59
- autoSave: false,
60
- timezone: 'UTC',
61
- customTimeframes: [],
62
- favoriteTfs: DEFAULT_FAVORITES,
63
- session: 'regular',
64
- theme: 'dark',
65
- };
66
- function workspaceFromPrefs(raw) {
67
- if (!raw || typeof raw !== 'object')
68
- return DEFAULT_WORKSPACE;
69
- const p = raw;
70
- const tabs = Array.isArray(p['tabs']) && p['tabs'].length > 0
71
- ? p['tabs']
72
- : DEFAULT_WORKSPACE.tabs;
73
- const activeTabId = typeof p['activeTabId'] === 'string' && tabs.some((t) => t.id === p['activeTabId'])
74
- ? p['activeTabId']
75
- : tabs[0].id;
76
- return {
77
- tabs,
78
- activeTabId,
79
- autoSave: typeof p['autoSave'] === 'boolean' ? p['autoSave'] : false,
80
- timezone: typeof p['timezone'] === 'string' ? p['timezone'] : 'UTC',
81
- customTimeframes: Array.isArray(p['customTimeframes']) ? p['customTimeframes'] : [],
82
- favoriteTfs: Array.isArray(p['favoriteTfs']) && p['favoriteTfs'].length > 0
83
- ? p['favoriteTfs']
84
- : DEFAULT_FAVORITES,
85
- session: p['session'] === 'extended' ? 'extended' : 'regular',
86
- theme: p['theme'] === 'light' ? 'light' : 'dark',
87
- };
88
- }
89
- // ─── ManagedAppShell ──────────────────────────────────────────────────────────
90
- export const ManagedAppShell = forwardRef(function ManagedAppShell({ datafeed, layouts, preferences, symbolResolver, getExchangeLogoUrl, config, getAuthToken, apiUrl, tradingBridge, renderScriptDrawer, renderWatchlistDrawer, renderTradeDrawer }, ref) {
91
- const containerRef = useRef(null);
92
- const [theme, setTheme] = useState('dark');
93
- const [wsLoaded, setWsLoaded] = useState(false);
94
- const [timezone, setTimezone] = useState(DEFAULT_WORKSPACE.timezone);
95
- const [autoSave, setAutoSave] = useState(DEFAULT_WORKSPACE.autoSave);
96
- const [tabs, setTabs] = useState(() => DEFAULT_WORKSPACE.tabs.map((t) => ({ ...t, remountCount: 0 })));
97
- const [activeTabId, setActiveTabId] = useState(DEFAULT_WORKSPACE.activeTabId);
98
- const [customTimeframes, setCustomTimeframes] = useState(DEFAULT_WORKSPACE.customTimeframes);
99
- const [favoriteTfs, setFavoriteTfs] = useState(DEFAULT_WORKSPACE.favoriteTfs);
100
- const [session, setSession] = useState(DEFAULT_WORKSPACE.session);
101
- const [scriptDrawerOpen, setScriptDrawerOpen] = useState(false);
102
- const [watchlistOpen, setWatchlistOpen] = useState(false);
103
- const [tradeDrawerOpen, setTradeDrawerOpen] = useState(false);
104
- const [chartDirty, setChartDirty] = useState(0);
105
- const [isFullscreen, setIsFullscreen] = useState(false);
106
- const capabilities = useChartCapabilities(config);
107
- // ── Init warnings (dev only) ───────────────────────────────────────────────
108
- useEffect(() => {
109
- if (process.env.NODE_ENV === 'production')
110
- return;
111
- if ((capabilities.orderEntry || capabilities.draggableOrders || capabilities.renderManagedTradingControls) &&
112
- !renderTradeDrawer) {
113
- console.warn('[ManagedAppShell] Trading capabilities are active ' +
114
- '(orderEntry=%s, draggableOrders=%s, managedTrading=%s) but ' +
115
- 'renderTradeDrawer was not provided. Trading UI will be suppressed.', capabilities.orderEntry, capabilities.draggableOrders, capabilities.managedTrading);
116
- }
117
- // Warn once on mount and whenever trading caps or the slot presence changes.
118
- // eslint-disable-next-line react-hooks/exhaustive-deps
119
- }, [capabilities.orderEntry, capabilities.draggableOrders, capabilities.managedTrading]);
120
- const [isLicensed, setIsLicensed] = useState(() => LicenseManager.getInstance().getLicense() !== null);
121
- useEffect(() => LicenseManager.getInstance().subscribe(() => {
122
- setIsLicensed(LicenseManager.getInstance().getLicense() !== null);
123
- }), []);
124
- // Per-tab chart instance registry — all tabs remain mounted simultaneously
125
- const chartInstancesRef = useRef(new Map());
126
- const chartHandleRef = useRef(null);
127
- useImperativeHandle(ref, () => ({
128
- getActiveChartHandle: () => chartHandleRef.current,
129
- }));
130
- useEffect(() => { document.documentElement.dataset.theme = theme; }, [theme]);
131
- // ── Load workspace from DB on startup ──────────────────────────────────────
132
- useEffect(() => {
133
- preferences.get().then((data) => {
134
- const ws = workspaceFromPrefs(data);
135
- setTabs(ws.tabs.map((t) => ({ ...t, remountCount: 0 })));
136
- setActiveTabId(ws.activeTabId);
137
- setAutoSave(ws.autoSave);
138
- setTimezone(ws.timezone);
139
- setCustomTimeframes(ws.customTimeframes);
140
- setFavoriteTfs(ws.favoriteTfs);
141
- setSession(ws.session);
142
- setTheme(ws.theme);
143
- if (data['licensePayload'] && typeof data['licensePayload'] === 'object') {
144
- LicenseManager.getInstance().loadLicense(data['licensePayload']);
145
- }
146
- else {
147
- void loadLicenseFromApi(apiUrl, getAuthToken);
148
- }
149
- }).catch(() => {
150
- void loadLicenseFromApi(apiUrl, getAuthToken);
151
- }).finally(() => {
152
- setWsLoaded(true);
153
- });
154
- // eslint-disable-next-line react-hooks/exhaustive-deps
155
- }, []); // run once on mount
156
- // ── Debounced workspace save to DB ─────────────────────────────────────────
157
- const saveTimerRef = useRef(null);
158
- // Stable refs so the debounced callback always sees latest values
159
- const activeTabIdRef = useRef(activeTabId);
160
- const autoSaveRef = useRef(autoSave);
161
- const timezoneRef = useRef(timezone);
162
- const customTimeframesRef = useRef(customTimeframes);
163
- const favoriteTfsRef = useRef(favoriteTfs);
164
- const sessionRef = useRef(session);
165
- const themeRef = useRef(theme);
166
- activeTabIdRef.current = activeTabId;
167
- autoSaveRef.current = autoSave;
168
- timezoneRef.current = timezone;
169
- customTimeframesRef.current = customTimeframes;
170
- favoriteTfsRef.current = favoriteTfs;
171
- sessionRef.current = session;
172
- themeRef.current = theme;
173
- const saveWorkspace = useCallback(() => {
174
- if (!wsLoaded)
175
- return;
176
- if (saveTimerRef.current)
177
- clearTimeout(saveTimerRef.current);
178
- saveTimerRef.current = setTimeout(() => {
179
- const snap = chartHandleRef.current?.getLayoutSnapshot();
180
- setTabs((prev) => {
181
- const persisted = prev.map(({ remountCount: _r, ...rest }) => rest.id === activeTabIdRef.current && snap ? { ...rest, snapshot: snap } : rest);
182
- const ws = {
183
- tabs: persisted,
184
- activeTabId: activeTabIdRef.current,
185
- autoSave: autoSaveRef.current,
186
- timezone: timezoneRef.current,
187
- customTimeframes: customTimeframesRef.current,
188
- favoriteTfs: favoriteTfsRef.current,
189
- session: sessionRef.current,
190
- theme: themeRef.current,
191
- };
192
- const license = LicenseManager.getInstance().getLicense();
193
- preferences.put({ ...ws, ...(license ? { licensePayload: license } : {}) })
194
- .catch(() => { });
195
- return prev;
196
- });
197
- }, 1_500);
198
- }, [wsLoaded, preferences]);
199
- // Keep chartHandleRef in sync with active tab
200
- useEffect(() => {
201
- chartHandleRef.current = chartInstancesRef.current.get(activeTabId) ?? null;
202
- }, [activeTabId]);
203
- // Trigger save whenever workspace state changes
204
- useEffect(() => { saveWorkspace(); }, [tabs, activeTabId, autoSave, timezone, customTimeframes, favoriteTfs, session, theme, chartDirty, saveWorkspace]);
205
- // Track browser fullscreen changes
206
- useEffect(() => {
207
- const handler = () => setIsFullscreen(!!document.fullscreenElement);
208
- document.addEventListener('fullscreenchange', handler);
209
- return () => document.removeEventListener('fullscreenchange', handler);
210
- }, []);
211
- const handleFullscreen = useCallback(() => {
212
- if (!document.fullscreenElement) {
213
- containerRef.current?.requestFullscreen().catch(() => { });
214
- }
215
- else {
216
- document.exitFullscreen().catch(() => { });
217
- }
218
- }, []);
219
- const handleCopyScreenshot = useCallback(async () => {
220
- const url = await chartHandleRef.current?.captureScreenshot();
221
- if (!url)
222
- return;
223
- try {
224
- const resp = await fetch(url);
225
- const blob = await resp.blob();
226
- await navigator.clipboard.write([new ClipboardItem({ 'image/png': blob })]);
227
- }
228
- catch { /* Clipboard API unavailable */ }
229
- }, []);
230
- const handleDownloadScreenshot = useCallback(async () => {
231
- const url = await chartHandleRef.current?.captureScreenshot();
232
- if (!url)
233
- return;
234
- const a = document.createElement('a');
235
- a.href = url;
236
- a.download = `forgecharts-${Date.now()}.png`;
237
- a.click();
238
- }, []);
239
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
240
- const activeTab = (tabs.find((t) => t.id === activeTabId) ?? tabs[0]);
241
- const captureSnapshot = useCallback(() => chartHandleRef.current?.getLayoutSnapshot() ?? null, []);
242
- // ── Tab management ─────────────────────────────────────────────────────────
243
- const selectTab = useCallback((id) => {
244
- const snap = captureSnapshot();
245
- setTabs((prev) => prev.map((t) => t.id === activeTabId ? { ...t, ...(snap !== null ? { snapshot: snap } : {}) } : t));
246
- setActiveTabId(id);
247
- }, [activeTabId, captureSnapshot]);
248
- const addTab = useCallback(() => {
249
- const snap = captureSnapshot();
250
- setTabs((prev) => {
251
- const updated = prev.map((t) => t.id === activeTabId ? { ...t, ...(snap !== null ? { snapshot: snap } : {}) } : t);
252
- const newTab = makeTab(updated.length + 1);
253
- setActiveTabId(newTab.id);
254
- return [...updated, newTab];
255
- });
256
- }, [activeTabId, captureSnapshot]);
257
- const closeTab = useCallback((id) => {
258
- setTabs((prev) => {
259
- if (prev.length <= 1)
260
- return prev;
261
- const remaining = prev.filter((t) => t.id !== id);
262
- if (id === activeTabId) {
263
- const closedIdx = prev.findIndex((t) => t.id === id);
264
- const next = remaining[Math.min(closedIdx, remaining.length - 1)];
265
- if (next)
266
- setActiveTabId(next.id);
267
- }
268
- return remaining;
269
- });
270
- }, [activeTabId]);
271
- const renameTab = useCallback((id, label) => {
272
- setTabs((prev) => prev.map((t) => (t.id === id ? { ...t, label } : t)));
273
- }, []);
274
- // ── Symbol / timeframe ─────────────────────────────────────────────────────
275
- const handleSymbolChange = useCallback((symbol) => {
276
- setTabs((prev) => prev.map((t) => (t.id === activeTabId ? { ...t, symbol } : t)));
277
- }, [activeTabId]);
278
- const handleTimeframeChange = useCallback((timeframe) => {
279
- setTabs((prev) => prev.map((t) => (t.id === activeTabId ? { ...t, timeframe } : t)));
280
- }, [activeTabId]);
281
- const handleAddCustomTimeframe = useCallback((tf) => {
282
- setCustomTimeframes((prev) => prev.includes(tf) ? prev : [...prev, tf]);
283
- }, []);
284
- const handleAddIndicator = useCallback((config) => {
285
- chartHandleRef.current?.addIndicator(config);
286
- }, []);
287
- const toggleTheme = useCallback(() => setTheme((t) => (t === 'dark' ? 'light' : 'dark')), []);
288
- // ── Layout helpers ─────────────────────────────────────────────────────────
289
- const buildConfig = useCallback((snap) => ({
290
- chartLayout: snap,
291
- customTimeframes,
292
- timezone,
293
- }), [customTimeframes, timezone]);
294
- const applyConfig = useCallback((cfg) => {
295
- const chartLayout = (cfg['chartLayout'] != null ? cfg['chartLayout'] : cfg);
296
- if (Array.isArray(cfg['customTimeframes'])) {
297
- setCustomTimeframes(cfg['customTimeframes']);
298
- }
299
- if (typeof cfg['timezone'] === 'string') {
300
- setTimezone(cfg['timezone']);
301
- }
302
- return chartLayout;
303
- }, []);
304
- // ── Layout save ────────────────────────────────────────────────────────────
305
- const handleSaveLayout = useCallback(async (name) => {
306
- const snap = captureSnapshot();
307
- if (!snap)
308
- throw new Error('No chart snapshot available');
309
- const config = buildConfig(snap);
310
- if (activeTab.savedLayoutId) {
311
- await layouts.update(activeTab.savedLayoutId, {
312
- name, symbol: activeTab.symbol, timeframe: activeTab.timeframe, config,
313
- });
314
- setTabs((prev) => prev.map((t) => (t.id === activeTabId ? { ...t, label: name } : t)));
315
- }
316
- else {
317
- const record = await layouts.create({ name, symbol: activeTab.symbol, timeframe: activeTab.timeframe, config });
318
- setTabs((prev) => prev.map((t) => t.id === activeTabId ? { ...t, savedLayoutId: record.id, label: name } : t));
319
- }
320
- }, [activeTab, activeTabId, buildConfig, captureSnapshot, layouts]);
321
- // ── Layout load ────────────────────────────────────────────────────────────
322
- const handleLoadLayout = useCallback(async (layoutId) => {
323
- const record = await layouts.get(layoutId);
324
- const chartLayout = applyConfig(record.config);
325
- setTabs((prev) => prev.map((t) => t.id === activeTabId
326
- ? { ...t, symbol: record.symbol, timeframe: record.timeframe, snapshot: chartLayout, savedLayoutId: record.id, label: record.name, remountCount: t.remountCount + 1 }
327
- : t));
328
- }, [activeTabId, applyConfig, layouts]);
329
- // ── Layout rename ──────────────────────────────────────────────────────────
330
- const handleRenameLayout = useCallback(async (newName) => {
331
- if (!activeTab.savedLayoutId)
332
- throw new Error('Layout is not saved yet');
333
- await layouts.update(activeTab.savedLayoutId, { name: newName });
334
- setTabs((prev) => prev.map((t) => (t.id === activeTabId ? { ...t, label: newName } : t)));
335
- }, [activeTab.savedLayoutId, activeTabId, layouts]);
336
- // ── Layout copy ────────────────────────────────────────────────────────────
337
- const handleCopyLayout = useCallback(async (copyName) => {
338
- const snap = captureSnapshot();
339
- if (!snap)
340
- throw new Error('No chart snapshot available');
341
- const record = await layouts.create({
342
- name: copyName, symbol: activeTab.symbol, timeframe: activeTab.timeframe, config: buildConfig(snap),
343
- });
344
- const chartLayout = applyConfig(record.config);
345
- const newTab = {
346
- id: uid(), label: record.name, symbol: record.symbol, timeframe: record.timeframe,
347
- snapshot: chartLayout, savedLayoutId: record.id, remountCount: 0,
348
- };
349
- setTabs((prev) => [
350
- ...prev.map((t) => (t.id === activeTabId ? { ...t, snapshot: snap } : t)),
351
- newTab,
352
- ]);
353
- setActiveTabId(newTab.id);
354
- }, [activeTab, activeTabId, applyConfig, buildConfig, captureSnapshot, layouts]);
355
- // ── Layout delete ──────────────────────────────────────────────────────────
356
- const handleDeleteLayout = useCallback(async (layoutId) => {
357
- await layouts.remove(layoutId);
358
- setTabs((prev) => prev.map((t) => {
359
- if (t.savedLayoutId !== layoutId)
360
- return t;
361
- const { savedLayoutId: _removed, ...rest } = t;
362
- return rest;
363
- }));
364
- }, [layouts]);
365
- // ── Open layout in new tab ─────────────────────────────────────────────────
366
- const handleOpenLayoutInNewTab = useCallback(async (layoutId) => {
367
- const snap = captureSnapshot();
368
- const record = await layouts.get(layoutId);
369
- const chartLayout = applyConfig(record.config);
370
- const newTab = {
371
- id: uid(), label: record.name, symbol: record.symbol, timeframe: record.timeframe,
372
- snapshot: chartLayout, savedLayoutId: record.id, remountCount: 0,
373
- };
374
- setTabs((prev) => [
375
- ...prev.map((t) => (t.id === activeTabId && snap ? { ...t, snapshot: snap } : t)),
376
- newTab,
377
- ]);
378
- setActiveTabId(newTab.id);
379
- }, [activeTabId, applyConfig, captureSnapshot, layouts]);
380
- // ── Auto-save ──────────────────────────────────────────────────────────────
381
- const handleToggleAutoSave = useCallback((enabled) => { setAutoSave(enabled); }, []);
382
- const autoSaveFnRef = useRef(() => { });
383
- autoSaveFnRef.current = () => {
384
- if (!autoSave || !activeTab.savedLayoutId)
385
- return;
386
- const snap = chartHandleRef.current?.getLayoutSnapshot();
387
- if (!snap)
388
- return;
389
- layouts.update(activeTab.savedLayoutId, {
390
- name: activeTab.label, symbol: activeTab.symbol, timeframe: activeTab.timeframe, config: buildConfig(snap),
391
- }).catch(() => { });
392
- };
393
- useEffect(() => {
394
- if (!autoSave || !activeTab.savedLayoutId)
395
- return;
396
- const id = setInterval(() => autoSaveFnRef.current(), 5_000);
397
- return () => clearInterval(id);
398
- // eslint-disable-next-line react-hooks/exhaustive-deps
399
- }, [autoSave, activeTab.savedLayoutId, activeTab.id]);
400
- // ── Chart slot assembly ────────────────────────────────────────────────────
401
- const chartSlots = (_jsx(_Fragment, { children: tabs.map((tab) => (_jsx("div", { style: tab.id === activeTabId
402
- ? { position: 'absolute', inset: 0, display: 'flex' }
403
- : { position: 'absolute', inset: 0, visibility: 'hidden', pointerEvents: 'none' }, children: _jsx(ChartCanvas, { ref: (handle) => {
404
- if (handle) {
405
- chartInstancesRef.current.set(tab.id, handle);
406
- if (tab.id === activeTabId)
407
- chartHandleRef.current = handle;
408
- }
409
- else {
410
- chartInstancesRef.current.delete(tab.id);
411
- }
412
- }, symbol: tab.symbol, timeframe: tab.timeframe, theme: theme, timezone: timezone, datafeed: datafeed, initialIndicators: tab.snapshot ? [] : DEFAULT_INDICATORS, ...(tab.snapshot ? { layoutToRestore: tab.snapshot } : {}), ...(getExchangeLogoUrl ? { getExchangeLogoUrl } : {}), ...(tradingBridge ? { tradingBridge } : {}), onIndicatorsChanged: () => setChartDirty((d) => d + 1) }, `${tab.id}-${tab.remountCount}`) }, tab.id))) }));
413
- // ── Drawer assembly ────────────────────────────────────────────────────────
414
- const drawers = (_jsxs(_Fragment, { children: [scriptDrawerOpen && renderScriptDrawer?.({
415
- onClose: () => setScriptDrawerOpen(false),
416
- onAddIndicator: handleAddIndicator,
417
- }), watchlistOpen && renderWatchlistDrawer?.({
418
- onClose: () => setWatchlistOpen(false),
419
- onSelectSymbol: (sym) => { handleSymbolChange(sym); },
420
- })] }));
421
- // ── Render ─────────────────────────────────────────────────────────────────
422
- return (_jsxs("div", { ref: containerRef, style: { height: '100%' }, children: [tradeDrawerOpen && capabilities.renderManagedTradingControls && renderTradeDrawer?.({
423
- onClose: () => setTradeDrawerOpen(false),
424
- }), _jsx(ChartWorkspace
425
- // TabBar
426
- , {
427
- // TabBar
428
- tabs: tabs.map((t) => ({ id: t.id, label: t.label, isSaved: !!t.savedLayoutId })), activeTabId: activeTabId, onSelectTab: selectTab, onAddTab: addTab, onCloseTab: closeTab, onRenameTab: renameTab,
429
- // TopToolbar
430
- symbol: activeTab.symbol, timeframe: activeTab.timeframe, theme: theme, customTimeframes: customTimeframes, favoriteTfs: favoriteTfs, onSymbolChange: handleSymbolChange, onTimeframeChange: handleTimeframeChange, onAddCustomTimeframe: handleAddCustomTimeframe, onFavoriteTfsChange: setFavoriteTfs, onAddIndicator: handleAddIndicator, onToggleTheme: toggleTheme, onCopyScreenshot: handleCopyScreenshot, onDownloadScreenshot: handleDownloadScreenshot, onFullscreen: handleFullscreen, isFullscreen: isFullscreen, ...(activeTab.savedLayoutId ? { currentLayoutName: activeTab.label, currentLayoutId: activeTab.savedLayoutId } : {}), autoSave: autoSave, onFetchLayouts: () => layouts.list(), onSaveLayout: handleSaveLayout, onLoadLayout: handleLoadLayout, onRenameLayout: handleRenameLayout, onCopyLayout: handleCopyLayout, onToggleAutoSave: handleToggleAutoSave, onDeleteLayout: handleDeleteLayout, onOpenLayoutInNewTab: handleOpenLayoutInNewTab, symbolResolver: symbolResolver, showTradeButton: capabilities.renderManagedTradingControls, tradeDrawerOpen: tradeDrawerOpen, onToggleTradeDrawer: () => setTradeDrawerOpen((o) => !o),
431
- // RightToolbar
432
- watchlistOpen: watchlistOpen, onToggleWatchlist: () => setWatchlistOpen((o) => !o),
433
- // BottomToolbar
434
- activeSymbol: activeTab.symbol, timezone: timezone, onTimezoneChange: setTimezone, session: session, onSessionChange: setSession, scriptDrawerOpen: scriptDrawerOpen, onToggleScriptDrawer: () => setScriptDrawerOpen((o) => !o),
435
- // State
436
- isLicensed: isLicensed, wsLoaded: wsLoaded,
437
- // Slots
438
- chartSlots: chartSlots, drawers: drawers })] }));
439
- });
440
- //# sourceMappingURL=ManagedAppShell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ManagedAppShell.js","sourceRoot":"","sources":["../../../src/react/shell/ManagedAppShell.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AAEH,OAAc,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,EACN,WAAW,EACX,UAAU,EACV,mBAAmB,GACpB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AA0ExC,iFAAiF;AAEjF,SAAS,GAAG,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAElE,MAAM,kBAAkB,GAAsB,EAAE,CAAC;AAEjD,iFAAiF;AAEjF;;;;;GAKG;AACH,KAAK,UAAU,kBAAkB,CAC/B,MAAe,EACf,YAA6C;IAE7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,EAAE,cAAc,CAAC;QAC1C,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,YAAY,EAAE,CAAC;gBACjC,IAAI,GAAG;oBAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC,CAAC,mDAAmD,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE;YACf,CAAC,CAAE,MAAM,CAAC,CAAC,IAAI,EAAkC;YACjD,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YACnE,cAAc,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,cAAgC,CAAC,CAAC;QAClF,CAAC;QACD,0EAA0E;QAC1E,2EAA2E;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,+DAA+D;IACjE,CAAC;AACH,CAAC;AAcD,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AACzG,CAAC;AAiBD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAe,CAAC;AAC7C,MAAM,iBAAiB,GAAmB;IACxC,IAAI,EAAc,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC;IAClI,WAAW,EAAO,WAAW,CAAC,EAAE;IAChC,QAAQ,EAAU,KAAK;IACvB,QAAQ,EAAU,KAAK;IACvB,gBAAgB,EAAE,EAAE;IACpB,WAAW,EAAO,iBAAiB;IACnC,OAAO,EAAW,SAAS;IAC3B,KAAK,EAAa,MAAM;CACzB,CAAC;AAEF,SAAS,kBAAkB,CAAC,GAAY;IACtC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,iBAAiB,CAAC;IAC9D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;QAC3D,CAAC,CAAE,CAAC,CAAC,MAAM,CAAoB;QAC/B,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;QACrG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAClB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;IAChB,OAAO;QACL,IAAI;QACJ,WAAW;QACX,QAAQ,EAAU,OAAO,CAAC,CAAC,UAAU,CAAC,KAAa,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAS,CAAC,CAAC,KAAK;QAC5F,QAAQ,EAAU,OAAO,CAAC,CAAC,UAAU,CAAC,KAAa,QAAQ,CAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAS,CAAC,CAAC,KAAK;QAC5F,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1F,WAAW,EAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC;YAC5D,CAAC,CAAE,CAAC,CAAC,aAAa,CAAc;YAChC,CAAC,CAAC,iBAAiB;QACvC,OAAO,EAAW,CAAC,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACtE,KAAK,EAAa,CAAC,CAAC,OAAO,CAAC,KAAO,OAAO,CAAI,CAAC,CAAC,OAAO,CAAI,CAAC,CAAC,MAAM;KACpE,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CACzC,SAAS,eAAe,CACtB,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAC1E,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,EACrG,GAAG;IAEH,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAElD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAa,MAAM,CAAC,CAAC;IACvD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAQ,GAAG,EAAE,CAC3C,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAC/D,CAAC;IACF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9E,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAW,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACvG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAW,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACxF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAiB,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAElD,8EAA8E;IAC9E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;YAAE,OAAO;QAClD,IACE,CAAC,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,eAAe,IAAI,YAAY,CAAC,4BAA4B,CAAC;YACtG,CAAC,iBAAiB,EAClB,CAAC;YACD,OAAO,CAAC,IAAI,CACV,oDAAoD;gBACpD,6DAA6D;gBAC7D,oEAAoE,EACpE,YAAY,CAAC,UAAU,EACvB,YAAY,CAAC,eAAe,EAC5B,YAAY,CAAC,cAAc,CAC5B,CAAC;QACJ,CAAC;QACH,6EAA6E;QAC7E,uDAAuD;IACvD,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,eAAe,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;IAEzF,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;IACvG,SAAS,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;QAC1D,aAAa,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAER,2EAA2E;IAC3E,MAAM,iBAAiB,GAAG,MAAM,CAAiC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5E,MAAM,cAAc,GAAM,MAAM,CAA2B,IAAI,CAAC,CAAC;IAEjE,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,oBAAoB,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO;KACnD,CAAC,CAAC,CAAC;IAEJ,SAAS,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAE9E,8EAA8E;IAC9E,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,GAAG,EAA2B,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACvD,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzD,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAC/B,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACzB,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACzB,mBAAmB,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;YACzC,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAC/B,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;YACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACnB,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACzE,cAAc,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAmB,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,KAAK,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,KAAK,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACd,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB;IAE5B,8EAA8E;IAC9E,MAAM,YAAY,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAExE,kEAAkE;IAClE,MAAM,cAAc,GAAQ,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,WAAW,GAAW,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAW,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACrD,MAAM,cAAc,GAAQ,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,UAAU,GAAY,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAc,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,cAAc,CAAC,OAAO,GAAQ,WAAW,CAAC;IAC1C,WAAW,CAAC,OAAO,GAAW,QAAQ,CAAC;IACvC,WAAW,CAAC,OAAO,GAAW,QAAQ,CAAC;IACvC,mBAAmB,CAAC,OAAO,GAAG,gBAAgB,CAAC;IAC/C,cAAc,CAAC,OAAO,GAAQ,WAAW,CAAC;IAC1C,UAAU,CAAC,OAAO,GAAY,OAAO,CAAC;IACtC,QAAQ,CAAC,OAAO,GAAc,KAAK,CAAC;IAEpC,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,IAAI,YAAY,CAAC,OAAO;YAAE,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC7D,YAAY,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACrC,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC;YACzD,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACf,MAAM,SAAS,GAAmB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAC3E,IAAI,CAAC,EAAE,KAAK,cAAc,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAChF,CAAC;gBACF,MAAM,EAAE,GAAmB;oBACzB,IAAI,EAAc,SAAS;oBAC3B,WAAW,EAAO,cAAc,CAAC,OAAO;oBACxC,QAAQ,EAAU,WAAW,CAAC,OAAO;oBACrC,QAAQ,EAAU,WAAW,CAAC,OAAO;oBACrC,gBAAgB,EAAE,mBAAmB,CAAC,OAAO;oBAC7C,WAAW,EAAO,cAAc,CAAC,OAAO;oBACxC,OAAO,EAAW,UAAU,CAAC,OAAO;oBACpC,KAAK,EAAa,QAAQ,CAAC,OAAO;iBACnC,CAAC;gBACF,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,CAAC;gBAC1D,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAwC,CAAC;qBAC9G,KAAK,CAAC,GAAG,EAAE,GAA4B,CAAC,CAAC,CAAC;gBAC7C,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAE5B,8CAA8C;IAC9C,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;IAC9E,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,gDAAgD;IAChD,SAAS,CAAC,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IAEzJ,mCAAmC;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACpE,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YAChC,YAAY,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC9D,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC;QAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;IAC7C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,wBAAwB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACtD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC9D,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;QACb,CAAC,CAAC,QAAQ,GAAG,eAAe,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QAC7C,CAAC,CAAC,KAAK,EAAE,CAAC;IACZ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,oEAAoE;IACpE,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC;IAEvE,MAAM,eAAe,GAAG,WAAW,CAAC,GAAuB,EAAE,CAC3D,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,IAAI,EACrD,EAAE,CAAC,CAAC;IAEJ,8EAA8E;IAE9E,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACf,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACxG,CAAC;QACF,cAAc,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,OAAO,GAAU,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAO,EAAE,CACzC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAClF,CAAC;YACF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3C,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAC1C,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBACrD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClE,IAAI,IAAI;oBAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,KAAa,EAAE,EAAE;QAC1D,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,8EAA8E;IAE9E,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,MAAc,EAAE,EAAE;QACxD,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,SAAiB,EAAE,EAAE;QAC9D,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,wBAAwB,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAC1D,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,MAAuB,EAAE,EAAE;QACjE,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9F,8EAA8E;IAE9E,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,IAAiB,EAA2B,EAAE,CAAC,CAAC;QAC/C,WAAW,EAAE,IAA0C;QACvD,gBAAgB;QAChB,QAAQ;KACT,CAAC,EACF,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAC7B,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,GAA4B,EAAE,EAAE;QAC/D,MAAM,WAAW,GAAG,CAClB,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAC5B,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;YAC3C,mBAAmB,CAAC,GAAG,CAAC,kBAAkB,CAAa,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ,EAAE,CAAC;YACxC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,8EAA8E;IAE9E,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC1D,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YAC5B,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE;gBAC5C,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM;aACvE,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YAChH,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAC3E,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpE,8EAA8E;IAE9E,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,EAAE,KAAK,WAAW;YAClB,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC,EAAE;YACrK,CAAC,CAAC,CAAC,CACN,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAExC,8EAA8E;IAE9E,MAAM,kBAAkB,GAAG,WAAW,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAC/D,IAAI,CAAC,SAAS,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzE,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpD,8EAA8E;IAE9E,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QAC9D,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;YAClC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC;SACpG,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAQ;YAClB,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS;YACjF,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC;SACjE,CAAC;QACF,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM;SACP,CAAC,CAAC;QACH,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAEjF,8EAA8E;IAE9E,MAAM,kBAAkB,GAAG,WAAW,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QAChE,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/B,IAAI,CAAC,CAAC,aAAa,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC;YAC3C,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/C,OAAO,IAAW,CAAC;QACrB,CAAC,CAAC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,8EAA8E;IAE9E,MAAM,wBAAwB,GAAG,WAAW,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QACtE,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAQ;YAClB,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS;YACjF,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC;SACjE,CAAC;QACF,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,MAAM;SACP,CAAC,CAAC;QACH,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzD,8EAA8E;IAE9E,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,OAAgB,EAAE,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9F,MAAM,aAAa,GAAG,MAAM,CAAa,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnD,aAAa,CAAC,OAAO,GAAG,GAAG,EAAE;QAC3B,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,aAAa;YAAE,OAAO;QAClD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC;QACzD,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE;YACtC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC;SAC3G,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAgB,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,aAAa;YAAE,OAAO;QAClD,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC/B,uDAAuD;IACzD,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtD,8EAA8E;IAE9E,MAAM,UAAU,GAAG,CACjB,4BACG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,cAEE,KAAK,EACH,GAAG,CAAC,EAAE,KAAK,WAAW;gBACpB,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE;gBACrD,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,YAGrF,KAAC,WAAW,IAEV,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;oBACd,IAAI,MAAM,EAAE,CAAC;wBACX,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;wBAC9C,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW;4BAAE,cAAc,CAAC,OAAO,GAAG,MAAM,CAAC;oBAC9D,CAAC;yBAAM,CAAC;wBACN,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC,EACD,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,SAAS,EAAE,GAAG,CAAC,SAAS,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,KACrD,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACvD,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClD,CAAC,aAAa,CAAM,CAAC,CAAC,EAAE,aAAa,EAAE,CAAM,CAAC,CAAC,EAAE,CAAC,EACtD,mBAAmB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAlBjD,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,YAAY,EAAE,CAmBpC,IA3BG,GAAG,CAAC,EAAE,CA4BP,CACP,CAAC,GACD,CACJ,CAAC;IAEF,8EAA8E;IAE9E,MAAM,OAAO,GAAG,CACd,8BACG,gBAAgB,IAAI,kBAAkB,EAAE,CAAC;gBACxC,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBACzC,cAAc,EAAE,kBAAkB;aACnC,CAAC,EACD,aAAa,IAAI,qBAAqB,EAAE,CAAC;gBACxC,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC;gBACtC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACtD,CAAC,IACD,CACJ,CAAC;IAEF,8EAA8E;IAE9E,OAAO,CACL,eAAK,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAC9C,eAAe,IAAI,YAAY,CAAC,4BAA4B,IAAI,iBAAiB,EAAE,CAAC;gBACnF,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;aACzC,CAAC,EACF,KAAC,cAAc;YACb,SAAS;;gBAAT,SAAS;gBACT,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,EACjF,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,SAAS,EACtB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,QAAQ,EACpB,WAAW,EAAE,SAAS;gBACtB,aAAa;gBACb,MAAM,EAAE,SAAS,CAAC,MAAM,EACxB,SAAS,EAAE,SAAS,CAAC,SAAS,EAC9B,KAAK,EAAE,KAAK,EACZ,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,kBAAkB,EAClC,iBAAiB,EAAE,qBAAqB,EACxC,oBAAoB,EAAE,wBAAwB,EAC9C,mBAAmB,EAAE,cAAc,EACnC,cAAc,EAAE,kBAAkB,EAClC,aAAa,EAAE,WAAW,EAC1B,gBAAgB,EAAE,oBAAoB,EACtC,oBAAoB,EAAE,wBAAwB,EAC9C,YAAY,EAAE,gBAAgB,EAC9B,YAAY,EAAE,YAAY,KACtB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACrH,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EACpC,YAAY,EAAE,gBAAgB,EAC9B,YAAY,EAAE,gBAAgB,EAC9B,cAAc,EAAE,kBAAkB,EAClC,YAAY,EAAE,gBAAgB,EAC9B,gBAAgB,EAAE,oBAAoB,EACtC,cAAc,EAAE,kBAAkB,EAClC,oBAAoB,EAAE,wBAAwB,EAC9C,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,YAAY,CAAC,4BAA4B,EAC1D,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxD,eAAe;gBACf,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,gBAAgB;gBAChB,YAAY,EAAE,SAAS,CAAC,MAAM,EAC9B,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,WAAW,EAC7B,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,UAAU,EAC3B,gBAAgB,EAAE,gBAAgB,EAClC,oBAAoB,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1D,QAAQ;gBACR,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ;gBAClB,QAAQ;gBACR,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,GAChB,IACE,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -1,73 +0,0 @@
1
- /**
2
- * TradingBridge — host-side trading callback contract for Unmanaged mode.
3
- *
4
- * When a chart user performs a trading action (drag-to-place, cancel, bracket
5
- * adjust, etc.) the chart emits a typed Intent and defers all confirmation to
6
- * the host. The chart NEVER self-confirms order state. The host must push
7
- * the resulting confirmed ChartOrder back via TradingOverlayStore.
8
- *
9
- * Usage (consumer / host app):
10
- *
11
- * ```tsx
12
- * import type { TradingBridgeCallbacks } from '@forgecharts/sdk/react';
13
- *
14
- * const bridge: TradingBridgeCallbacks = {
15
- * onPlaceOrderIntent: (intent) => myBroker.placeOrder(intent),
16
- * onModifyOrderIntent: (intent) => myBroker.modifyOrder(intent),
17
- * onCancelOrderIntent: (intent) => myBroker.cancelOrder(intent),
18
- * onBracketAdjustIntent: (intent) => myBroker.adjustBracket(intent),
19
- * };
20
- *
21
- * <ChartCanvas
22
- * symbol="BTCUSDT"
23
- * timeframe="1h"
24
- * tradingBridge={bridge}
25
- * />
26
- * ```
27
- *
28
- * Debug logging:
29
- * Wrap your callbacks with `createTradingBridgeLogger` to get structured
30
- * console output in development:
31
- *
32
- * ```ts
33
- * tradingBridge={createTradingBridgeLogger(bridge, 'MyChart')}
34
- * ```
35
- */
36
- // ─── Debug logger ─────────────────────────────────────────────────────────────
37
- /**
38
- * Wraps a `TradingBridgeCallbacks` object and logs all emitted intents to the
39
- * console. Only active when `process.env.NODE_ENV !== 'production'`.
40
- *
41
- * @param callbacks The real callbacks to delegate to after logging.
42
- * @param label Optional label prepended to log messages (e.g. chart id or symbol).
43
- * @returns A new `TradingBridgeCallbacks` that logs then delegates.
44
- *
45
- * @example
46
- * ```ts
47
- * tradingBridge={createTradingBridgeLogger(bridge, 'BTCUSDT')}
48
- * ```
49
- */
50
- export function createTradingBridgeLogger(callbacks, label) {
51
- if (process.env.NODE_ENV === 'production')
52
- return callbacks;
53
- const tag = label ? `[TradingBridge:${label}]` : '[TradingBridge]';
54
- return {
55
- onPlaceOrderIntent: (intent) => {
56
- console.debug(`${tag} PLACE side=%s type=%s qty=%s price=%s stopPrice=%s correlationId=%s`, intent.side, intent.orderType, intent.qty, intent.limitPrice ?? '—', intent.stopPrice ?? '—', intent.correlationId, intent);
57
- return callbacks.onPlaceOrderIntent?.(intent);
58
- },
59
- onModifyOrderIntent: (intent) => {
60
- console.debug(`${tag} MODIFY orderId=%s limitPrice=%s stopPrice=%s qty=%s`, intent.orderId, intent.limitPrice ?? '—', intent.stopPrice ?? '—', intent.qty ?? '—', intent);
61
- return callbacks.onModifyOrderIntent?.(intent);
62
- },
63
- onCancelOrderIntent: (intent) => {
64
- console.debug(`${tag} CANCEL orderId=%s symbol=%s`, intent.orderId, intent.symbol, intent);
65
- return callbacks.onCancelOrderIntent?.(intent);
66
- },
67
- onBracketAdjustIntent: (intent) => {
68
- console.debug(`${tag} BRACKET_ADJUST entry=%s sl=%s tp=%s`, intent.entryOrderId, intent.stopLossPrice ?? '—', intent.takeProfitPrice ?? '—', intent);
69
- return callbacks.onBracketAdjustIntent?.(intent);
70
- },
71
- };
72
- }
73
- //# sourceMappingURL=TradingBridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TradingBridge.js","sourceRoot":"","sources":["../../../src/react/trading/TradingBridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAkDH,iFAAiF;AAEjF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAAiC,EACjC,KAAc;IAEd,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IAE5D,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,kBAAkB,KAAK,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAEnE,OAAO;QACL,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,OAAO,CAAC,KAAK,CACX,GAAG,GAAG,uEAAuE,EAC7E,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,UAAU,IAAI,GAAG,EACxB,MAAM,CAAC,SAAS,IAAK,GAAG,EACxB,MAAM,CAAC,aAAa,EACpB,MAAM,CACP,CAAC;YACF,OAAO,SAAS,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC9B,OAAO,CAAC,KAAK,CACX,GAAG,GAAG,sDAAsD,EAC5D,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,UAAU,IAAI,GAAG,EACxB,MAAM,CAAC,SAAS,IAAK,GAAG,EACxB,MAAM,CAAC,GAAG,IAAW,GAAG,EACxB,MAAM,CACP,CAAC;YACF,OAAO,SAAS,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC9B,OAAO,CAAC,KAAK,CACX,GAAG,GAAG,8BAA8B,EACpC,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,EACb,MAAM,CACP,CAAC;YACF,OAAO,SAAS,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,qBAAqB,EAAE,CAAC,MAAM,EAAE,EAAE;YAChC,OAAO,CAAC,KAAK,CACX,GAAG,GAAG,sCAAsC,EAC5C,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,aAAa,IAAO,GAAG,EAC9B,MAAM,CAAC,eAAe,IAAK,GAAG,EAC9B,MAAM,CACP,CAAC;YACF,OAAO,SAAS,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,42 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { TabBar } from './TabBar';
3
- import { TopToolbar } from './toolbars/TopToolbar';
4
- import { RightToolbar } from './toolbars/RightToolbar';
5
- import { BottomToolbar } from './toolbars/BottomToolbar';
6
- export function ChartWorkspace({
7
- // TabBar
8
- tabs, activeTabId, onSelectTab, onAddTab, onCloseTab, onRenameTab,
9
- // TopToolbar
10
- symbol, timeframe, theme, customTimeframes, favoriteTfs, onSymbolChange, onTimeframeChange, onAddCustomTimeframe, onFavoriteTfsChange, onAddIndicator, onToggleTheme, onCopyScreenshot, onDownloadScreenshot, onFullscreen, isFullscreen, currentLayoutName, currentLayoutId, autoSave, onFetchLayouts, onSaveLayout, onLoadLayout, onRenameLayout, onCopyLayout, onToggleAutoSave, onDeleteLayout, onOpenLayoutInNewTab, showTradeButton, tradeDrawerOpen, onToggleTradeDrawer, symbolResolver,
11
- // RightToolbar
12
- watchlistOpen, onToggleWatchlist,
13
- // BottomToolbar
14
- activeSymbol, timezone, onTimezoneChange, session, onSessionChange, scriptDrawerOpen, onToggleScriptDrawer,
15
- // Chart + state
16
- chartSlots, isLicensed, wsLoaded, drawers, }) {
17
- const tabItems = tabs.map((t) => ({
18
- id: t.id,
19
- label: t.label,
20
- ...(t.isSaved !== undefined ? { isSaved: t.isSaved } : {}),
21
- }));
22
- return (_jsxs("div", { style: {
23
- display: 'flex',
24
- flexDirection: 'column',
25
- height: '100%',
26
- background: 'var(--shelf-bg)',
27
- padding: 6,
28
- gap: 4,
29
- }, children: [!wsLoaded && (_jsxs("div", { style: {
30
- position: 'absolute', inset: 0, display: 'flex',
31
- alignItems: 'center', justifyContent: 'center',
32
- background: 'var(--bg)', zIndex: 1000,
33
- }, children: [_jsxs("svg", { width: "32", height: "32", viewBox: "0 0 32 32", style: { animation: 'spin 0.9s linear infinite' }, children: [_jsx("circle", { cx: "16", cy: "16", r: "12", fill: "none", stroke: "var(--border)", strokeWidth: "3" }), _jsx("path", { d: "M16 4 A12 12 0 0 1 28 16", fill: "none", stroke: "var(--primary)", strokeWidth: "3", strokeLinecap: "round" })] }), _jsx("style", { children: `@keyframes spin { to { transform: rotate(360deg); } }` })] })), _jsx(TabBar, { tabs: tabItems, activeId: activeTabId, onSelect: onSelectTab, onAdd: onAddTab, onClose: onCloseTab, onRename: onRenameTab }), _jsx(TopToolbar, { symbol: symbol, timeframe: timeframe, theme: theme, customTimeframes: customTimeframes, favorites: favoriteTfs, onSymbolChange: onSymbolChange, onTimeframeChange: onTimeframeChange, onAddCustomTimeframe: onAddCustomTimeframe, onFavoritesChange: onFavoriteTfsChange, onAddIndicator: onAddIndicator, onToggleTheme: onToggleTheme, onCopyScreenshot: onCopyScreenshot, onDownloadScreenshot: onDownloadScreenshot, onFullscreen: onFullscreen, isFullscreen: isFullscreen, currentLayoutName: currentLayoutName, currentLayoutId: currentLayoutId, autoSave: autoSave, onFetchLayouts: onFetchLayouts, onSaveLayout: onSaveLayout, onLoadLayout: onLoadLayout, onRenameLayout: onRenameLayout, onCopyLayout: onCopyLayout, onToggleAutoSave: onToggleAutoSave, onDeleteLayout: onDeleteLayout, onOpenLayoutInNewTab: onOpenLayoutInNewTab, symbolResolver: symbolResolver, ...(showTradeButton !== undefined ? { showTradeButton } : {}), ...(tradeDrawerOpen !== undefined ? { tradeDrawerOpen } : {}), ...(onToggleTradeDrawer !== undefined ? { onToggleTradeDrawer } : {}) }), _jsxs("div", { style: { flex: 1, display: 'flex', gap: 8, minHeight: 0, overflow: 'hidden' }, children: [_jsxs("div", { style: { position: 'relative', flex: 1, display: 'flex', gap: 8, minWidth: 0, minHeight: 0 }, children: [!isLicensed && (_jsxs("div", { style: {
34
- position: 'absolute', inset: 0, zIndex: 100,
35
- background: 'rgba(0,0,0,0.6)',
36
- backdropFilter: 'blur(4px)',
37
- display: 'flex', flexDirection: 'column',
38
- alignItems: 'center', justifyContent: 'center',
39
- gap: 12,
40
- }, children: [_jsxs("svg", { viewBox: "0 0 24 24", width: "40", height: "40", fill: "none", stroke: "rgba(255,255,255,0.7)", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2" }), _jsx("path", { d: "M7 11V7a5 5 0 0110 0v4" })] }), _jsx("div", { style: { color: '#fff', fontWeight: 700, fontSize: 18, letterSpacing: '0.01em' }, children: "Unlicensed" }), _jsx("div", { style: { color: 'rgba(255,255,255,0.65)', fontSize: 13 }, children: "Please activate your license in the admin studio" })] })), _jsx("div", { style: { position: 'relative', flex: 1, minWidth: 0, minHeight: 0 }, children: chartSlots }), _jsx(RightToolbar, { watchlistOpen: watchlistOpen, onToggleWatchlist: onToggleWatchlist })] }), drawers] }), _jsx(BottomToolbar, { symbol: activeSymbol, timezone: timezone, onTimezoneChange: onTimezoneChange, session: session, onSessionChange: onSessionChange, onToggleScriptDrawer: onToggleScriptDrawer, scriptDrawerOpen: scriptDrawerOpen })] }));
41
- }
42
- //# sourceMappingURL=ChartWorkspace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChartWorkspace.js","sourceRoot":"","sources":["../../../src/react/workspace/ChartWorkspace.tsx"],"names":[],"mappings":"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"}