{"version":3,"file":"forex.553aa7e2.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/forex/actions/forexActionCreators.ts","webpack://@finviz/website/./js/app/forex/barChart.tsx","webpack://@finviz/website/./js/app/forex/components/ChartMenu.tsx","webpack://@finviz/website/./js/app/forex/components/redesign/Tile.tsx","webpack://@finviz/website/./js/app/forex/components/redesign/Layout.tsx","webpack://@finviz/website/./js/app/forex/types.ts","webpack://@finviz/website/./js/app/forex/components/redesign/Menu.tsx","webpack://@finviz/website/./js/app/forex/forex.tsx","webpack://@finviz/website/./js/app/forex/index.tsx","webpack://@finviz/website/./js/app/shared/components/ForexCryptoTile.tsx"],"sourcesContent":["import { CancelablePromise, apiRequest } from '../../../main/services/api'\r\nimport { ActionTypes } from '../../futures/constants/constants'\r\nimport AppDispatcher from '../../futures/dispatcher/appDispatcher'\r\nimport RowsStore from '../../futures/stores/rowsStore'\r\nimport { ForexTileMap } from '../types'\r\n\r\nvar getForexUrl = function () {\r\n var timeframe = RowsStore.getTimeframe()\r\n return '/api/forex_all.ashx?timeframe=' + timeframe\r\n}\r\n\r\nlet _lastRequest: CancelablePromise | null = null\r\n\r\nconst actions = {\r\n initTiles(tiles: ForexTileMap) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.INIT_TILES,\r\n tiles,\r\n })\r\n },\r\n\r\n async update(data: any) {\r\n if (data) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.UPDATE_DATA,\r\n tiles: data,\r\n })\r\n return\r\n }\r\n\r\n _lastRequest?.cancel?.()\r\n _lastRequest = apiRequest(getForexUrl())\r\n const tiles = await _lastRequest\r\n if (tiles) {\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.UPDATE_DATA,\r\n tiles,\r\n })\r\n }\r\n },\r\n\r\n async changeTimeframe(timeframe: string) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.CHANGE_TIMEFRAME_STARTED,\r\n period: timeframe,\r\n })\r\n\r\n _lastRequest?.cancel?.()\r\n _lastRequest = apiRequest(getForexUrl())\r\n const data = await _lastRequest\r\n if (data) {\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.UPDATE_DATA,\r\n tiles: data,\r\n })\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.CHANGE_TIMEFRAME_COMPLETED,\r\n })\r\n }\r\n },\r\n}\r\n\r\nexport default actions\r\n","import * as d3 from 'd3'\r\nimport { CSSProperties, Component, MouseEvent } from 'react'\r\n\r\nimport { forexDomains } from '../futures/utils'\r\nimport { generateColorScale as gcs } from '../futures/utils'\r\nimport { GradientDefinition } from '../shared/gradients'\r\n\r\nvar generateColorScale = gcs.bind(null, forexDomains)\r\nconst redesignEnabled = !!FinvizSettings.hasRedesignEnabled\r\n\r\nvar hexToRgba = (color: string, opacity: number) => {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(color) as string[],\r\n r = parseInt(result[1], 16),\r\n g = parseInt(result[2], 16),\r\n b = parseInt(result[3], 16)\r\n return `rgba(${r}, ${g}, ${b}, ${opacity})`\r\n}\r\n\r\ninterface Bar {\r\n label: string\r\n value: number\r\n link?: string\r\n}\r\n\r\ninterface BarChartProps {\r\n width: number\r\n period: 'd' | 'w' | 'm' | 'mtd' | 'q' | 'hy' | 'y' | 'ytd'\r\n data: Bar[]\r\n onClick?: (bar: Bar) => void\r\n gradient?: GradientDefinition\r\n}\r\n\r\nclass BarChart extends Component {\r\n render() {\r\n var bars = this.props.data\r\n var labels = bars.map(function (d) {\r\n return d.label\r\n })\r\n\r\n var barWidth = 65,\r\n labelHeight = 20,\r\n gap = 1,\r\n width = (barWidth + gap * 2) * bars.length,\r\n height = 220,\r\n halfHeight = (220 - labelHeight) / 2\r\n\r\n var y = d3\r\n .scaleLinear()\r\n .domain([0, Math.ceil(d3.max(bars, (d: any) => Math.abs(d.value))!)])\r\n .range([0, halfHeight])\r\n .nice(6)\r\n\r\n var yAxisTicks = y.ticks(6).filter((tick: any) => tick > 0)\r\n\r\n var x = d3\r\n .scaleBand()\r\n .domain(labels)\r\n .range([0, (barWidth + 2 * gap) * bars.length])\r\n\r\n var colorScale = generateColorScale(this.props.period, this.props.gradient)\r\n\r\n // so React won't reorder our elements\r\n bars = bars.slice().sort(function (a: Bar, b: Bar) {\r\n if (a.label < b.label) {\r\n return -1\r\n }\r\n if (a.label > b.label) {\r\n return 1\r\n }\r\n return 0\r\n })\r\n\r\n var header =\r\n {\r\n d: '1 Day',\r\n w: '1 Week',\r\n m: '1 Month',\r\n mtd: 'Month to date',\r\n q: '3 Month',\r\n hy: 'Half year',\r\n y: '1 Year',\r\n ytd: 'Year to Date',\r\n }[this.props.period] + ' Relative Performance'\r\n\r\n return (\r\n \r\n

{header}  [USD]

\r\n
\r\n {yAxisTicks.map((tick: any) => (\r\n \r\n
{tick.toFixed(2)}%
\r\n
\r\n ))}\r\n\r\n {yAxisTicks.map((tick: any) => (\r\n \r\n
-{tick.toFixed(2)}%
\r\n \r\n ))}\r\n\r\n {bars.map((bar) => {\r\n var height = Math.round(y(Math.abs(bar.value)))\r\n var color = colorScale(bar.value)\r\n var style: CSSProperties = {\r\n position: 'absolute',\r\n top: bar.value >= 0 ? halfHeight - height : halfHeight + labelHeight,\r\n left: x(bar.label),\r\n height: height,\r\n width: barWidth,\r\n background: hexToRgba(color, 0.2),\r\n ...(redesignEnabled && {\r\n borderTopRightRadius: bar.value >= 0 ? 2 : 0,\r\n borderTopLeftRadius: bar.value >= 0 ? 2 : 0,\r\n borderBottomRightRadius: bar.value >= 0 ? 0 : 2,\r\n borderBottomLeftRadius: bar.value >= 0 ? 0 : 2,\r\n }),\r\n }\r\n var valueStyle = {\r\n top: bar.value > 0 ? -14 : 'auto',\r\n bottom: bar.value < 0 ? -14 : 'auto',\r\n ...(!redesignEnabled && {\r\n color,\r\n }),\r\n }\r\n var labelStyle = {\r\n background: color,\r\n bottom: bar.value >= 0 ? -labelHeight : height,\r\n ...(redesignEnabled && {\r\n borderTopRightRadius: bar.value >= 0 ? 0 : 2,\r\n borderTopLeftRadius: bar.value >= 0 ? 0 : 2,\r\n borderBottomRightRadius: bar.value >= 0 ? 2 : 0,\r\n borderBottomLeftRadius: bar.value >= 0 ? 2 : 0,\r\n ...(bar.value === 0 && {\r\n borderRadius: 2,\r\n }),\r\n }),\r\n }\r\n return (\r\n \r\n
\r\n {bar.value.toFixed(2)}%\r\n
\r\n
\r\n {bar.label}\r\n
\r\n \r\n )\r\n })}\r\n \r\n
\r\n
\r\n \r\n )\r\n }\r\n\r\n _onClick = (row: Bar, e: MouseEvent) => {\r\n e.preventDefault()\r\n this.props.onClick && this.props.onClick(row)\r\n }\r\n}\r\n\r\nexport default BarChart\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport TilesStore from '../../futures/stores/tilesStore'\r\nimport { FuturesTile } from '../../futures/types'\r\nimport { encodeQueryString } from '../../queryString'\r\nimport { ForexFuturesCryptoSettings } from '../../shared/components/ForexFuturesCryptoSettings'\r\nimport Sparkline from '../../shared/components/Sparkline'\r\n\r\nconst TILES_ORDER = ['EURUSD', 'GBPUSD', 'USDJPY', 'USDCAD', 'USDCHF', 'AUDUSD', 'NZDUSD', 'EURGBP', 'GBPJPY', 'BTCUSD']\r\n\r\nfunction getTilesInOrder(tiles: Record) {\r\n return TILES_ORDER.map((key) => tiles[key])\r\n}\r\n\r\ninterface ChartMenuProps {\r\n activeTile: string\r\n activeTimeframe: string\r\n activeRange: string\r\n type: string\r\n showChartControls?: boolean\r\n isRedesignEnabled?: boolean\r\n}\r\n\r\nexport default function ChartMenu({\r\n activeTile,\r\n activeTimeframe,\r\n activeRange,\r\n type,\r\n showChartControls,\r\n isRedesignEnabled,\r\n}: ChartMenuProps) {\r\n const isInteractiveActive = type === '1'\r\n const [tiles, setTiles] = React.useState(getTilesInOrder(TilesStore.getTiles()))\r\n\r\n React.useEffect(() => {\r\n const onStoreChange = () => setTiles(getTilesInOrder(TilesStore.getTiles()))\r\n\r\n TilesStore.addChangeListener(onStoreChange)\r\n\r\n return () => TilesStore.removeChangeListener(onStoreChange)\r\n }, [])\r\n\r\n const interactiveUrl = FinvizSettings.hasUserPremium\r\n ? `/forex_charts.ashx?${encodeQueryString({\r\n t: activeTile,\r\n p: activeTimeframe,\r\n ty: 1,\r\n })}`\r\n : `/elite.ashx?${encodeQueryString({\r\n utm_source: 'finviz',\r\n utm_medium: 'banner',\r\n utm_campaign: 'forex-interactive-chart',\r\n })}`\r\n\r\n const getTileHref = (ticker: string) =>\r\n `/forex_charts.ashx?${encodeQueryString({\r\n t: ticker,\r\n p: activeTimeframe,\r\n ty: isRedesignEnabled && isInteractiveActive ? undefined : type,\r\n r: activeRange,\r\n })}`\r\n\r\n return (\r\n
\r\n {showChartControls && (\r\n \r\n )}\r\n
\r\n {tiles.map((tile) => (\r\n \r\n {tile.label}\r\n \r\n \r\n ))}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Instrument } from '../../../../main/types'\r\nimport TilesStore from '../../../futures/stores/tilesStore'\r\nimport { forexDomains, generateColorScale } from '../../../futures/utils'\r\nimport ForexCryptoTile from '../../../shared/components/ForexCryptoTile'\r\nimport { redGreenGradient } from '../../../shared/gradients'\r\nimport * as hoverChart from '../../../shared/hover-chart'\r\n\r\ninterface TileProps {\r\n ticker: string\r\n hoverOffsetX: number\r\n hoverOffsetY: number\r\n}\r\n\r\nconst getTileState = (ticker: string) => {\r\n var tile = TilesStore.getTile(ticker)\r\n\r\n return {\r\n ...tile,\r\n }\r\n}\r\n\r\nconst colorScale = generateColorScale(forexDomains, 'd', redGreenGradient)\r\n\r\nexport default class Tile extends React.Component {\r\n state = getTileState(this.props.ticker)\r\n\r\n componentDidMount() {\r\n TilesStore.addChangeListener(this._onChange)\r\n }\r\n\r\n componentWillUnmount() {\r\n TilesStore.removeChangeListener(this._onChange)\r\n }\r\n\r\n _onChange = () => {\r\n this.setState(getTileState(this.props.ticker))\r\n }\r\n\r\n render() {\r\n const { label, last, prevClose, change, high, low, sparkline, sparklineDateChanges } = this.state\r\n const { ticker, hoverOffsetX, hoverOffsetY } = this.props\r\n\r\n const format = (n: number) => (n >= 0 ? '+' : '') + n.toFixed(2) + '%'\r\n const places = last > 6 ? 2 : 4\r\n const round = (n: number) => (+(Math.round(Number(n + 'e+' + places)) + 'e-' + places)).toFixed(places)\r\n\r\n const range = (high - low) * 0.1\r\n const highlightHigh = last > high - range\r\n const highlightLow = last < low + range\r\n\r\n const instrument = ticker.length === 6 ? Instrument.Forex : Instrument.Futures\r\n const link =\r\n instrument === Instrument.Forex ? '/forex_charts.ashx?p=d1&t=' + ticker : '/futures_charts.ashx?p=d1&t=' + ticker\r\n\r\n const chartImage = hoverChart.getHoverChartImg(\r\n '@' + ticker.toLowerCase(),\r\n false,\r\n Instrument.Forex ? FinvizSettings.hoverCharts?.forex?.timeframe : FinvizSettings.hoverCharts?.futures?.timeframe,\r\n Instrument.Forex ? FinvizSettings.hoverCharts?.forex?.dateRange : FinvizSettings.hoverCharts?.futures?.dateRange\r\n )\r\n\r\n const boxover = `cssbody=[hoverchart] cssheader=[tabchrthdr] body=[${chartImage.img}] offsetx=[${hoverOffsetX}] offsety=[${hoverOffsetY}] delay=[100]`\r\n\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import Tile from './Tile'\r\n\r\nconst LAYOUT = [\r\n ['EURUSD', 'GBPUSD', 'USDJPY', 'CL'],\r\n ['USDCAD', 'USDCHF', 'AUDUSD', 'GC'],\r\n ['NZDUSD', 'EURGBP', 'GBPJPY', 'BTCUSD'],\r\n]\r\n\r\nexport default function Layout() {\r\n return (\r\n
\r\n {LAYOUT.map((row, ri) => (\r\n
\r\n {row.map((ticker) => (\r\n \r\n ))}\r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n","import { MouseEvent } from 'react'\r\n\r\nexport type ForexTileTicker =\r\n | 'AUDUSD'\r\n | 'BTCUSD'\r\n | 'EURGBP'\r\n | 'EURUSD'\r\n | 'GBPJPY'\r\n | 'GBPUSD'\r\n | 'NZDUSD'\r\n | 'USDCAD'\r\n | 'USDCHF'\r\n | 'USDJPY'\r\n | 'SI'\r\n | 'GC'\r\n | 'CL'\r\n\r\nexport enum PageType {\r\n Quotes = 'quotes',\r\n Performance = 'performance',\r\n Charts = 'charts',\r\n}\r\n\r\nexport interface ForexTile {\r\n label: string\r\n ticker: string\r\n last: number\r\n change: number\r\n prevClose: number\r\n high: number\r\n low: number\r\n sparkline: number[]\r\n sparklineDateChanges: Record\r\n}\r\n\r\nexport type ForexTileMap = Record\r\n\r\nexport interface TimeFrame {\r\n key: string\r\n value: string\r\n title?: string\r\n}\r\n\r\nexport interface TimeFrames {\r\n active: string\r\n link: (timeFrame: Key) => string\r\n onClick: (timeFrame: Key, e: MouseEvent) => void\r\n timeframes: TimeFrame[]\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Button } from '../../../../main/components/button'\r\nimport { SpecificChartFunctionality, TIMEFRAME } from '../../../../main/constants'\r\nimport { Instrument } from '../../../../main/types'\r\nimport { FuturesForexCryptoTimeframeBar } from '../../../shared/components/FuturesForexCryptoTimeframeBar'\r\nimport { PageType } from '../../types'\r\n\r\ninterface MenuProps {\r\n isDetailOpen?: boolean\r\n activePage: PageType\r\n timeframes: {\r\n active: string\r\n link?: (timeframe: string) => string\r\n onClick: (timeframe: string, e: React.MouseEvent) => void\r\n timeframes: Array<{ key: string; title?: string; value: React.ReactNode }>\r\n }\r\n company?: string\r\n onTimeframeChange?: (timeframe: TIMEFRAME) => void\r\n onDateRangeChange?: (dateRange: string | undefined) => void\r\n}\r\n\r\nexport default function Menu({\r\n isDetailOpen,\r\n activePage,\r\n timeframes,\r\n company,\r\n onTimeframeChange,\r\n onDateRangeChange,\r\n}: MenuProps) {\r\n return (\r\n
\r\n
\r\n \r\n \r\n Performance\r\n \r\n \r\n
\r\n
\r\n {activePage === PageType.Charts ? (\r\n \r\n ) : (\r\n timeframes.timeframes.map((timeframe) => (\r\n ) => timeframes.onClick?.(timeframe.key, ev)}\r\n title={timeframe.title}\r\n >\r\n {timeframe.value}\r\n \r\n ))\r\n )}\r\n
\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { Component, MouseEvent } from 'react'\r\nimport ReactDOM from 'react-dom/client'\r\n\r\nimport { TIMEFRAME } from '../../main/constants'\r\nimport { apiRequest } from '../../main/services/api'\r\nimport { Instrument } from '../../main/types'\r\nimport FuturesSparkline from '../futures/components/CanvasSparkline'\r\nimport RowsStore from '../futures/stores/rowsStore'\r\nimport TilesStore from '../futures/stores/tilesStore'\r\nimport { FuturesTimeframe } from '../futures/types'\r\nimport { forexDomains } from '../futures/utils'\r\nimport { generateColorScale } from '../futures/utils'\r\nimport { decodeQueryString, encodeQueryString } from '../queryString'\r\nimport { redGreenGradient } from '../shared/gradients'\r\nimport * as hoverChart from '../shared/hover-chart'\r\nimport ForexActionCreators from './actions/forexActionCreators'\r\nimport BarChart from './barChart'\r\nimport ChartMenu from './components/ChartMenu'\r\nimport LayoutNew from './components/redesign/Layout'\r\nimport MenuNew from './components/redesign/Menu'\r\nimport { ForexTileMap, ForexTileTicker, PageType, TimeFrames } from './types'\r\n\r\nconst colorScale = generateColorScale(forexDomains, 'd')\r\n\r\ninterface MenuProps {\r\n isDetailOpen?: boolean\r\n activePage: string\r\n timeframes: TimeFrames\r\n company?: string\r\n}\r\n\r\nclass Menu extends Component> {\r\n render() {\r\n var { activePage } = this.props\r\n var timeframesMenu = this.props.timeframes\r\n\r\n return (\r\n
\r\n \r\n\r\n
    \r\n {timeframesMenu.timeframes.map((timeframe) => (\r\n
  • \r\n \r\n {timeframe.value}\r\n \r\n
  • \r\n ))}\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\ninterface TileProps {\r\n ticker: string\r\n hoverOffsetX: string\r\n hoverOffsetY: string\r\n width: number\r\n}\r\n\r\nfunction getTileState(props: TileProps) {\r\n return TilesStore.getTile(props.ticker)\r\n}\r\n\r\nclass Tile extends Component {\r\n state = getTileState(this.props)\r\n\r\n componentDidMount() {\r\n TilesStore.addChangeListener(this._onChange)\r\n }\r\n\r\n componentWillUnmount() {\r\n TilesStore.removeChangeListener(this._onChange)\r\n }\r\n\r\n _onChange = () => {\r\n this.setState(getTileState(this.props))\r\n }\r\n\r\n render() {\r\n var { ticker, label, last, prevClose, change, high, low, sparkline, sparklineDateChanges } = this.state\r\n var { hoverOffsetX, hoverOffsetY } = this.props\r\n var instrument = ticker.length === 6 ? Instrument.Forex : Instrument.Futures\r\n\r\n var format = (n: number) => (n >= 0 ? '+' : '') + n.toFixed(2) + '%'\r\n var places = last > 6 ? 2 : 4\r\n var round = (n: number) => (+(Math.round(Number(n + 'e+' + places)) + 'e-' + places)).toFixed(places)\r\n\r\n var link = instrument === 'forex' ? '/forex_charts.ashx?p=d1&t=' + ticker : '/futures_charts.ashx?p=d1&t=' + ticker\r\n\r\n const chartImage = hoverChart.getHoverChartImg(\r\n '@' + ticker.toLowerCase(),\r\n false,\r\n instrument === 'forex'\r\n ? FinvizSettings.hoverCharts?.forex?.timeframe\r\n : FinvizSettings.hoverCharts?.futures?.timeframe,\r\n instrument === 'forex'\r\n ? FinvizSettings.hoverCharts?.forex?.dateRange\r\n : FinvizSettings.hoverCharts?.futures?.dateRange\r\n )\r\n\r\n const boxover = `cssbody=[hoverchart] cssheader=[tabchrthdr] body=[${chartImage.img}] offsetx=[${hoverOffsetX}] offsety=[${hoverOffsetY}] delay=[100]`\r\n\r\n var color = colorScale(change)\r\n\r\n var range = (high - low) * 0.1\r\n var highlightHigh = last > high - range\r\n var highlightLow = last < low + range\r\n var highlightStyle = {\r\n background: '#fbdb19',\r\n color: '#3e424f',\r\n }\r\n\r\n var opacityChange = Math.min(Math.abs(change), 1)\r\n var textOpacity = 0.5 + (0.2 / 1) * opacityChange\r\n var highLowStyle = { color: `rgba(255, 255, 255, ${textOpacity})` }\r\n\r\n return (\r\n \r\n
\r\n {label}\r\n {round(last)}\r\n \r\n {format(change)}\r\n \r\n {round(last - prevClose).replace('-', '')}\r\n \r\n
\r\n
\r\n H {round(high)}\r\n
\r\n
\r\n L {round(low)}\r\n
\r\n
\r\n \r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nclass Layout extends Component {\r\n render() {\r\n var layout = [\r\n ['EURUSD', 'GBPUSD', 'USDJPY', 'CL'],\r\n ['USDCAD', 'USDCHF', 'AUDUSD', 'GC'],\r\n ['NZDUSD', 'EURGBP', 'GBPJPY', 'BTCUSD'],\r\n ]\r\n\r\n var tileWidth = 240\r\n var width = layout[0].length * tileWidth + 16\r\n\r\n return (\r\n
\r\n {layout.map((row, ri) => (\r\n
\r\n {row.map((ticker) => (\r\n \r\n ))}\r\n
\r\n
\r\n ))}\r\n
\r\n )\r\n }\r\n}\r\n\r\nfunction getForexState() {\r\n return {\r\n tiles: TilesStore.getTiles(),\r\n }\r\n}\r\n\r\nclass Forex extends Component {\r\n state = getForexState()\r\n\r\n componentDidMount() {\r\n TilesStore.addChangeListener(this._onChange)\r\n }\r\n\r\n componentWillUnmount() {\r\n TilesStore.removeChangeListener(this._onChange)\r\n }\r\n\r\n _onChange = () => {\r\n this.setState(getForexState())\r\n }\r\n\r\n render() {\r\n var timeframes = {\r\n link: () => '#',\r\n onClick: (timeframe: string, e: MouseEvent) => {\r\n e.preventDefault()\r\n ForexActionCreators.changeTimeframe(timeframe)\r\n },\r\n active: RowsStore.getTimeframe(),\r\n timeframes: [\r\n { key: 'i5', value: '5M' },\r\n { key: 'h', value: 'H' },\r\n { key: 'd', value: 'D' },\r\n { key: 'w', value: 'W' },\r\n { key: 'm', value: 'M' },\r\n ],\r\n }\r\n\r\n // TODO bud spravit special API alebo preratavat\r\n var tiles = this.state.tiles as ForexTileMap\r\n\r\n var relativePerf = { USD: 0 }\r\n Object.keys(tiles).forEach((ticker) => {\r\n var tile = tiles[ticker as ForexTileTicker]\r\n if (ticker.indexOf('USD') === -1 || ticker.indexOf('BTC') !== -1) {\r\n return\r\n }\r\n var inverse = ticker.substring(0, 3) === 'USD'\r\n // @ts-ignore\r\n relativePerf[ticker.replace('USD', '')] =\r\n (inverse ? tile.prevClose / tile.last - 1 : tile.last / tile.prevClose - 1) * 100 // todo round\r\n })\r\n\r\n var rows = Object.keys(relativePerf)\r\n .map((key) => ({\r\n label: key,\r\n // @ts-ignore\r\n value: relativePerf[key],\r\n }))\r\n .sort((a, b) => b.value - a.value)\r\n\r\n const isRedesignEnabled = FinvizSettings.hasRedesignEnabled\r\n const MenuComponent = isRedesignEnabled ? MenuNew : Menu\r\n const LayoutComponent = isRedesignEnabled ? LayoutNew : Layout\r\n //\r\n return (\r\n
\r\n \r\n \r\n {!isRedesignEnabled && (\r\n <>\r\n
\r\n
\r\n \r\n )}\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\ninterface ForexPerformanceProps {\r\n rows: Record\r\n}\r\n\r\nclass ForexPerformance extends Component {\r\n declare refreshInterval: number\r\n\r\n state = {\r\n rows: this.props.rows,\r\n }\r\n\r\n componentDidMount() {\r\n this.refreshInterval = window.setInterval(async () => {\r\n const data = await apiRequest(`/api/forex_perf.ashx${window.location.search}`)\r\n if (data) {\r\n this.setState({ rows: data })\r\n }\r\n }, 30 * 1000)\r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this.refreshInterval)\r\n }\r\n\r\n render() {\r\n var view = decodeQueryString()['v'] || '1'\r\n var kv = { d: 1, w: 2, m: 3, mtd: 8, q: 4, hy: 5, y: 6, ytd: 7 }\r\n var vk: Record = {}\r\n Object.keys(kv).forEach((key: any) => {\r\n vk[kv[key as keyof typeof kv].toString()] = key\r\n })\r\n\r\n var timeframes = {\r\n link: (key: string) => '/forex_performance.ashx?v=' + kv[key as keyof typeof kv],\r\n onClick: () => {},\r\n active: vk[view],\r\n timeframes: [\r\n { key: 'd', value: 'D', title: 'Day' },\r\n { key: 'w', value: 'W', title: 'Week' },\r\n { key: 'm', value: 'M', title: 'Month' },\r\n { key: 'mtd', value: 'MTD', title: 'Month to Date' },\r\n { key: 'q', value: 'Q', title: 'Quarter' },\r\n { key: 'hy', value: 'HY', title: 'Half Year' },\r\n { key: 'y', value: 'Y', title: 'Year' },\r\n { key: 'ytd', value: 'YTD', title: 'Year To Date' },\r\n ],\r\n }\r\n\r\n var rows = Object.keys(this.state.rows)\r\n .map((key) => ({\r\n label: key,\r\n value: this.state.rows[key as ForexTileTicker],\r\n }))\r\n .filter((row) => row.label !== 'BTC')\r\n .sort((a, b) => b.value - a.value)\r\n\r\n const isRedesignEnabled = FinvizSettings.hasRedesignEnabled\r\n const MenuComponent = isRedesignEnabled ? MenuNew : Menu\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {}}\r\n period={vk[view]}\r\n {...(isRedesignEnabled && { gradient: redGreenGradient })}\r\n />\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\ninterface ChartsState {\r\n timeframe: TIMEFRAME\r\n dateRange: string\r\n ticker: string\r\n type: string\r\n isGroupOpen: boolean\r\n activeGroup: string\r\n}\r\n\r\nfunction getChartsState(override: Partial = {}) {\r\n var queryString = decodeQueryString()\r\n var timeframe = queryString['p'] as TIMEFRAME\r\n if (!Object.values(TIMEFRAME).includes(timeframe)) {\r\n timeframe = TIMEFRAME.d\r\n }\r\n var ticker = (queryString['t'] || 'ALL').toUpperCase()\r\n var type = queryString['ty']\r\n\r\n return {\r\n timeframe,\r\n dateRange: queryString['r'],\r\n ticker,\r\n type,\r\n ...override,\r\n }\r\n}\r\n\r\nexport class ForexCharts extends Component {\r\n state = getChartsState()\r\n\r\n _onTimeframeChange = async (timeframe: TIMEFRAME) => {\r\n ForexActionCreators.changeTimeframe(timeframe)\r\n this.setState(getChartsState({ timeframe }))\r\n }\r\n\r\n render() {\r\n const { timeframe, ticker, type, dateRange } = this.state\r\n const isDetailOpen = ticker !== 'ALL'\r\n\r\n var timeframes = {\r\n link: (key: string) => `/forex_charts.ashx?${encodeQueryString({ t: ticker, p: key, ty: type, r: dateRange })}`,\r\n onClick: () => {},\r\n active: timeframe,\r\n timeframes: [\r\n { key: FuturesTimeframe.Minute5, value: '5M' },\r\n { key: FuturesTimeframe.Hourly, value: 'H' },\r\n { key: FuturesTimeframe.Daily, value: 'D' },\r\n { key: FuturesTimeframe.Weekly, value: 'W' },\r\n { key: FuturesTimeframe.Monthly, value: 'M' },\r\n ],\r\n }\r\n\r\n const isRedesignEnabled = FinvizSettings.hasRedesignEnabled\r\n const MenuComponent = isRedesignEnabled ? MenuNew : Menu\r\n\r\n return (\r\n \r\n \r\n \r\n this.setState(getChartsState({ dateRange }))}\r\n />\r\n \r\n \r\n\r\n {isDetailOpen && (\r\n \r\n )}\r\n \r\n )\r\n }\r\n}\r\n\r\nwindow['FinvizInitForex'] = function (tiles: ForexTileMap) {\r\n ForexActionCreators.initTiles(tiles)\r\n const rootEl = document.getElementById('forex')\r\n const root = ReactDOM.createRoot(rootEl!)\r\n root.render()\r\n\r\n setInterval(ForexActionCreators.update, 30 * 1000)\r\n}\r\n\r\nwindow['FinvizInitForexPerformance'] = function (rows: Record) {\r\n const rootEl = document.getElementById('futures')\r\n const root = ReactDOM.createRoot(rootEl!)\r\n root.render()\r\n}\r\n","import { CHART_ELEMENT_ID } from 'finviz-charts/app/constants/common'\r\nimport { Suspense } from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport ReactDOMClient from 'react-dom/client'\r\nimport { BrowserRouter } from 'react-router-dom'\r\n\r\nimport { NotificationWrapper } from '../../main/components/notification'\r\nimport { SpecificChartFunctionality } from '../../main/constants'\r\nimport { ResizableChartLayoutWithGlobalState } from '../shared/components/ResizableChartLayoutWithGlobalState'\r\nimport { ready } from '../shared/ready'\r\nimport { parseInitData } from '../shared/utils'\r\nimport ForexActionCreators from './actions/forexActionCreators'\r\nimport './forex'\r\nimport { ForexCharts } from './forex'\r\nimport { ForexTileMap } from './types'\r\n\r\nwindow['FinvizInitForexCharts'] = function () {\r\n const forexEl = document.getElementById('forex')\r\n const dataEl = document.getElementById('forex-init-data')\r\n if (!forexEl || !dataEl) return\r\n\r\n try {\r\n const initData = parseInitData('forex-init-data')\r\n ForexActionCreators.update(initData)\r\n } catch {\r\n return\r\n }\r\n\r\n const root = ReactDOMClient.createRoot(forexEl)\r\n root.render(\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nready(function () {\r\n const forexEl = document.getElementById('forex')\r\n const chartEl = document.getElementById(CHART_ELEMENT_ID)\r\n const dataEl = document.getElementById('forex-init-data')\r\n if (!forexEl || !chartEl || !dataEl || !window.globalChartConfig) return\r\n\r\n try {\r\n const initData = parseInitData('forex-init-data')\r\n ForexActionCreators.update(initData)\r\n } catch {\r\n return\r\n }\r\n\r\n const root = ReactDOMClient.createRoot(chartEl)\r\n root.render(\r\n \r\n \r\n {ReactDOM.createPortal(, forexEl)}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n})\r\n","import classnames from 'classnames'\r\nimport throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nimport { useResizeObserver } from '../../../main/hooks/use-resize-observer'\r\nimport Sparkline from '../../futures/components/CanvasSparkline'\r\n\r\ninterface TileProps {\r\n sparklineDateChanges: Record\r\n sparkline: number[]\r\n label: string\r\n link: string\r\n boxover: string\r\n backgroundColor: string\r\n last: string\r\n high: string\r\n low: string\r\n change: string\r\n sparklineChange: number\r\n lastChange: string\r\n highlightHigh: boolean\r\n highlightLow: boolean\r\n extraMargin?: boolean\r\n}\r\n\r\nexport default function ForexCryptoTile({\r\n link,\r\n boxover,\r\n extraMargin,\r\n change,\r\n lastChange,\r\n label,\r\n highlightLow,\r\n highlightHigh,\r\n last,\r\n high,\r\n low,\r\n sparkline,\r\n sparklineChange,\r\n sparklineDateChanges,\r\n backgroundColor,\r\n}: TileProps) {\r\n const [width, setWidth] = React.useState(0)\r\n const containerRef = React.useRef(null)\r\n const ResizeObserver = useResizeObserver()\r\n const observerRef = React.useRef()\r\n\r\n React.useEffect(() => {\r\n const container = containerRef.current\r\n if (container && ResizeObserver) {\r\n setWidth(container.getBoundingClientRect().width)\r\n observerRef.current = new ResizeObserver(\r\n throttle(([entry]: ResizeObserverEntry[]) => {\r\n setWidth(entry.contentRect.width)\r\n }, 100)\r\n )\r\n observerRef.current.observe(container)\r\n }\r\n\r\n return () => {\r\n observerRef.current?.disconnect()\r\n }\r\n }, [ResizeObserver])\r\n\r\n return (\r\n \r\n
\r\n
\r\n
{label}
\r\n
\r\n {change}\r\n \r\n {lastChange}\r\n
\r\n
\r\n\r\n
\r\n
{last}
\r\n
\r\n \r\n \r\n H\r\n \r\n {high}\r\n
\r\n \r\n \r\n L\r\n \r\n {low}\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\n"],"names":["getForexUrl","RowsStore","getTimeframe","_lastRequest","initTiles","tiles","AppDispatcher","handleViewAction","type","ActionTypes","INIT_TILES","update","data","_lastRequest2","_lastRequest2$cancel","UPDATE_DATA","cancel","call","apiRequest","handleServerAction","changeTimeframe","timeframe","_lastRequest3","_lastRequest3$cancel","CHANGE_TIMEFRAME_STARTED","period","CHANGE_TIMEFRAME_COMPLETED","generateColorScale","gcs","bind","forexDomains","redesignEnabled","FinvizSettings","hasRedesignEnabled","hexToRgba","color","opacity","result","exec","parseInt","BarChart","Component","constructor","arguments","_defineProperty","row","e","preventDefault","this","props","onClick","render","bars","labels","map","d","label","width","length","halfHeight","y","d3","domain","Math","ceil","abs","value","range","nice","yAxisTicks","ticks","filter","tick","x","colorScale","gradient","slice","sort","a","b","header","w","m","mtd","q","hy","ytd","_jsxs","className","style","margin","undefined","children","position","height","_jsx","left","top","round","toFixed","bar","background","borderTopRightRadius","borderTopLeftRadius","borderBottomRightRadius","borderBottomLeftRadius","valueStyle","bottom","labelStyle","borderRadius","link","_onClick","TILES_ORDER","getTilesInOrder","key","ChartMenu","_ref","activeTile","activeTimeframe","activeRange","showChartControls","isRedesignEnabled","isInteractiveActive","setTiles","React","TilesStore","getTiles","onStoreChange","addChangeListener","removeChangeListener","interactiveUrl","hasUserPremium","encodeQueryString","t","p","ty","utm_source","utm_medium","utm_campaign","classnames","href","r","ForexFuturesCryptoSettings","isPremium","tile","ticker","Sparkline","sparkline","getTileState","getTile","redGreenGradient","Tile","setState","componentDidMount","_onChange","componentWillUnmount","_FinvizSettings$hover","_FinvizSettings$hover2","_FinvizSettings$hover3","_FinvizSettings$hover4","last","prevClose","change","high","low","sparklineDateChanges","state","hoverOffsetX","hoverOffsetY","places","n","Number","highlightHigh","highlightLow","Instrument","Forex","Futures","boxover","hoverChart","toLowerCase","hoverCharts","forex","futures","dateRange","img","ForexCryptoTile","backgroundColor","extraMargin","lastChange","replace","sparklineChange","LAYOUT","Layout","ri","PageType","Menu","isDetailOpen","activePage","timeframes","company","onTimeframeChange","onDateRangeChange","Button","as","active","Quotes","theme","Performance","Charts","FuturesForexCryptoTimeframeBar","isDetail","title","group","specificChartFunctionality","SpecificChartFunctionality","forexPage","instrument","_timeframes$link","padding","ev","_timeframes$onClick","timeframesMenu","highlightStyle","highLowStyle","min","marginLeft","FuturesSparkline","dateChanges","changeDomain","layout","getForexState","ForexActionCreators","relativePerf","USD","Object","keys","forEach","indexOf","inverse","substring","rows","MenuComponent","MenuNew","LayoutComponent","LayoutNew","_Fragment","ForexPerformance","refreshInterval","window","setInterval","async","location","search","clearInterval","view","decodeQueryString","kv","vk","toString","getChartsState","override","queryString","values","TIMEFRAME","includes","toUpperCase","ForexCharts","_TilesStore$getTile","FuturesTimeframe","Minute5","Hourly","Daily","Weekly","Monthly","_onTimeframeChange","rootEl","document","getElementById","ReactDOM","forexEl","dataEl","initData","parseInitData","ReactDOMClient","BrowserRouter","ready","chartEl","CHART_ELEMENT_ID","globalChartConfig","NotificationWrapper","Suspense","fallback","ResizableChartLayoutWithGlobalState","config","setWidth","containerRef","ResizeObserver","useResizeObserver","observerRef","container","current","getBoundingClientRect","throttle","_ref2","entry","contentRect","observe","_observerRef$current","disconnect","ref","changeOpacity"],"sourceRoot":""}