Skip to content

Integrations · TradingView · Patterns

Composed market pages

Three compositions that combine provider widgets into a page. The point is not the widgets — it is that the consumer owns the state that ties them together, not the provider.

Instrument detail

One selector drives four widgets. The selected symbol is React state in this page — @luc/ui ships no global symbol store, and no widget writes to it.

AdvancedChart

iframe

The price.

Minimum 400×500Market data by TradingView

SingleTicker

Web Component

The quote.

Minimum 250×100Market data by TradingView

TechnicalAnalysis

Web Component

The provider's read.

Minimum 300×300Market data by TradingViewReplaces embed-widget-technical-analysis.js

SymbolInfo

iframe

The facts.

Minimum 300×200Market data by TradingView

TopStories

iframe

The context.

Minimum 300×400Market data by TradingView

A fourth widget could sit under the chart — fundamental-data — at the cost of another iframe. The pattern is deliberately bounded: four to six embeds per page is a page; twelve is a network incident.

Crypto desk

A market-level composition: no single symbol, but the whole asset class.

CryptoHeatmap

iframe

The map.

Minimum 400×400Market data by TradingView

CryptocurrencyMarket

iframe

The table.

Minimum 400×400Market data by TradingView

AdvancedChart

iframe

BTC/USDT.

Minimum 400×500Market data by TradingView

TopStories

iframe

Feed.

Minimum 300×400Market data by TradingView

Macro panel

World equity performance, macro events and indicators — four widgets that would otherwise each need a data pipeline.

WorldMarketSummary

Web Component

Country performance.

Minimum 400×360Market data by TradingView

EconomicMap

Web Component

One indicator, worldwide.

Minimum 500×400Market data by TradingView

EconomicCalendar

iframe

What is coming.

Minimum 350×450Market data by TradingView

MarketOverview

Web Component

What is trading.

Minimum 320×300Market data by TradingViewReplaces embed-widget-market-overview.js

Mixing lanes on one page

A provider chart and a LUC table inside the same LUC card.

Provider chart, LUC frame

Both are iframes, so both keep their own typography and their own attribution line. The LUC card supplies the surface, the spacing and the grid; the provider supplies the content. That is the whole contract.

Usage

import { TradingViewAdvancedChart, TradingViewSingleTicker, TradingViewSymbolInfo, TradingViewTopStories } from "@luc/ui/tradingview";
"use client";

import {
  TradingViewAdvancedChart,
  TradingViewSingleTicker,
  TradingViewSymbolInfo,
  TradingViewTopStories,
} from "@luc/ui/tradingview";

export function InstrumentPage({ symbol }: { symbol: string }) {
  return (
    <div className="grid gap-4">
      <TradingViewSingleTicker symbol={symbol} height={114} />
      <TradingViewAdvancedChart symbol={symbol} preset="standard" height={520} />
      <TradingViewSymbolInfo symbol={symbol} height={282} />
      <TradingViewTopStories
        feedMode="symbol"
        symbol={symbol}
        displayMode="compact"
        height={282}
      />
    </div>
  );
}

A complete instrument page: React owns the selected symbol, while each provider widget owns its own content.

Configuration

Use one application-level symbol value, cap the number of provider embeds per page, and put layout in Luc UI's grid or cards. The widgets do not share a provider store or selected-symbol event.

Client and provider lifecycle

The page must be a Client Component. Keep the symbol stable during hydration, give every provider surface a bounded height, and expect each widget to load its own provider module independently.

Limitations

Every widget on a composed page depends on TradingView's network and data. The pattern is a layout composition, not a data integration: LUC receives no quotes, news or chart series from these wrappers.

Guidelines

Do

  • Use a composition when the provider's standard market views are the intended product experience.
  • Keep four to six embeds as a practical page budget and state which provider supplies each region.

Don't

  • Do not add a global provider symbol store; the selected instrument remains React state owned by the application.
  • Do not put every available widget on one page; network cost, loading states and competing chrome quickly dominate the reading.

Reference

Patterns composes public provider widgets. Their compiler-generated APIs are documented on the widget-family pages:

Luc UI v1.0Patternsdark theme