| Chart stays blank | library_path must serve TradingView static files; container must be mounted before new widget(...). |
chartWidget is always null | Set chartWidget after create (or inside onChartReady if required). Use shallowRef for the TradingView instance. |
| Scan fails / 401 | Ensure the user signed in via the results iframe so iccandle_token is set in localStorage. Call handleResultIframeLoad on iframe load so parent-origin is posted before sign-in. |
| Date Range still in drawing toolbar | Blacklist it in drawings_access — the scanner owns the date_range selector (see Get started). |
| Replay bars do not appear | Wrap the datafeed with withPlayChart and register getCustomIndicators (both required). Match indicator theme to the chart. See withPlayChart / getCustomIndicators. |
| Unrevealed predicted bars show as solid blocks | Set chartMaskColors to the exact pane background (paneProperties.background). Defaults (#ffffff / #0F0F0F) only match TradingView’s default pane. Do not use a transparent color. See chartMaskColors. |
| Scanner actions disabled | Pass :iframe-loaded="true" once the results iframe has loaded, or omit the prop if you do not gate on load. |
| Results iframe never updates | Implement required submitCallback and set your iframe src from the URL it receives. |
| Theme looks wrong | Pass an explicit theme (light / dark) instead of system, and match getCustomIndicators(theme) to the chart theme. |
| Results iframe blank / CORS | Confirm the host can load https://embed-iccandle-app.iccandle.ai; check browser console for blocked frames or CSP frame-src rules. |
| Stripe return / billing stale | Call handleResultIframeLoad(iframe) on iframe @load so parent-origin / payment-success are posted. |
| Pricing modal never opens | Pass :result-iframe-ref as a { current } box pointing at the results iframe so the widget can post open-pricing. |
| Pattern tracker unavailable | User must be signed in (iccandle_token present). Open the tracker from the scanner popup after login. |
| News marks missing on the time axis | Optional: implement getTimescaleMarks on your datafeed and set supports_timescale_marks: true in onReady. See Get started → Step 6. |