{"version":3,"file":"quote.b3fa74c4.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/backtest/utils.tsx","webpack://@finviz/website/./js/app/quote/etf-holdings/async-modules.ts","webpack://@finviz/website/./js/app/quote/etf-holdings/index.tsx","webpack://@finviz/website/./js/app/quote/barChart.tsx","webpack://@finviz/website/./js/app/quote/fundamentalCharts.tsx","webpack://@finviz/website/./js/app/quote/quote.tsx","webpack://@finviz/website/./js/main/components/QuotePrice.tsx","webpack://@finviz/website/./js/app/quote/quote-header/constants.ts","webpack://@finviz/website/./js/app/quote/quote-header/hooks.ts","webpack://@finviz/website/./js/app/quote/quote-header/QuoteHeader.tsx","webpack://@finviz/website/../node_modules/date-fns/esm/isBefore/index.js","webpack://@finviz/website/./js/app/quote/use-chart-timeframe-path-watch.ts","webpack://@finviz/website/./js/app/quote/quote-links/ComparePerfLink.tsx","webpack://@finviz/website/./js/app/quote/quote-links/FinancialsLink.tsx","webpack://@finviz/website/./js/app/quote/quote-links/OptionsChainLink.tsx","webpack://@finviz/website/./js/app/quote/quote-links/ShortInterestLink.tsx","webpack://@finviz/website/./js/app/quote/quote-links/StockDetailLink.tsx","webpack://@finviz/website/./js/app/quote/chart-type-select/utils.ts","webpack://@finviz/website/./js/app/quote/chart-type-select/chart-type-select.tsx","webpack://@finviz/website/./js/app/quote/chart-type-select/use-chart-type.tsx","webpack://@finviz/website/./js/app/quote/quote-menu/quote-menu.tsx","webpack://@finviz/website/./js/app/quote/statements-constants.ts","webpack://@finviz/website/./js/app/quote/statements.tsx","webpack://@finviz/website/./js/app/quote/use-stock-detail-updater.tsx","webpack://@finviz/website/./js/app/quote/index.tsx","webpack://@finviz/website/./js/app/quote/quote-links/SaveToPortfolioLink.tsx","webpack://@finviz/website/./js/app/quote/quote-links/CreateAlertLink.tsx","webpack://@finviz/website/./js/app/quote/use-chart-layout-width-watch.ts","webpack://@finviz/website/./js/main/hooks/use-window-size.tsx","webpack://@finviz/website/./js/app/shared/chartLayoutConfig.ts","webpack://@finviz/website/./js/app/shared/components/Ads.tsx","webpack://@finviz/website/./js/app/shared/getInitChartConfig.ts","webpack://@finviz/website/./js/app/stats/types.ts","webpack://@finviz/website/./js/main/components/ChipSwitch.tsx","webpack://@finviz/website/./js/main/components/delayed.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableContext.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableRow.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTable.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsWidget.tsx","webpack://@finviz/website/./js/main/components/financials-table/utils.ts","webpack://@finviz/website/./js/main/components/notification/hooks.ts","webpack://@finviz/website/./js/main/components/notification/notification-wrapper.tsx","webpack://@finviz/website/./js/main/components/notification/with-notification-context.tsx","webpack://@finviz/website/./js/main/components/notification/notification.tsx","webpack://@finviz/website/./js/main/hooks/use-check-non-idea-chart-missing-config.ts","webpack://@finviz/website/./js/main/hooks/useVisualViewport.ts","webpack://@finviz/website/./js/main/modules/charts/util.ts","webpack://@finviz/website/../node_modules/react-router-dom/dist/index.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/5KB2YIDT.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/JJ3MV4KB.js"],"sourcesContent":["export function round(n: number, places: number = 2) {\r\n return (+(Math.round(Number(n + 'e+' + places)) + 'e-' + places)).toFixed(places)\r\n}\r\n\r\nexport const format = {\r\n totalReturn: (totalReturn: number | string) => round(Number(totalReturn) * 100) + '%',\r\n maxDrawdown: (maxDrawdown: number | string) => round(Number(maxDrawdown) * 100) + '%',\r\n sharpeRatio: (sharpeRatio: number) => round(sharpeRatio),\r\n calmarRatio: (calmarRatio: number) => round(calmarRatio),\r\n CAGR: (CAGR: number) => round(CAGR * 100) + '%',\r\n cagr: (CAGR: number) => round(CAGR * 100) + '%',\r\n volatility: (volatility: number) => round(volatility * 100) + '%',\r\n numberOfTrades: (numberOfTrades: any) => numberOfTrades,\r\n positiveDays: (positiveDays: any) => positiveDays,\r\n negativeDays: (negativeDays: any) => negativeDays,\r\n bestMonth: (bestMonth: number) => round(bestMonth * 100) + '%',\r\n worstMonth: (worstMonth: number) => round(worstMonth * 100) + '%',\r\n}\r\n\r\nexport const figureSpace = ' '\r\n\r\nexport const BACKTEST_MIN_MAX_DATES = Object.freeze({\r\n min: new Date(1996, 5, 3),\r\n max: new Date(2023, 0, 31),\r\n})\r\n","export const etfHoldingsAsyncModule = {\r\n importFn: () => import(/* webpackChunkName: \"etf-holdings-widget\" */ './module-entry'),\r\n cacheKey: 'etf-holdings-widget',\r\n}\r\n","import { withNotificationContext } from '../../../main/components/notification'\r\nimport { Spinner } from '../../../main/components/spinner'\r\nimport { useAsyncModule } from '../../../main/services/async-modules-utils'\r\nimport { etfHoldingsAsyncModule } from './async-modules'\r\n\r\nfunction LoadingFallback() {\r\n const widgetClass =\r\n 'ml-3 mt-3 flex max-h-85 min-h-85 min-w-152 max-w-175 shrink grow basis-0 rounded-md border border-primary justify-center items-center'\r\n return (\r\n
\r\n {Array.from(Array(2)).map((_, index) => (\r\n
\r\n \r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n\r\nfunction ETFHoldings() {\r\n const [etfHoldingsModule] = useAsyncModule({\r\n ...etfHoldingsAsyncModule,\r\n shouldLoadModule: true,\r\n errorSeverity: 'high',\r\n })\r\n const ETFHoldingsComponent = etfHoldingsModule?.ETFHoldings\r\n return ETFHoldingsComponent ? : \r\n}\r\n\r\nexport default withNotificationContext(ETFHoldings)\r\n","import * as d3 from 'd3'\r\nimport { Component, RefObject, createRef } from 'react'\r\n\r\nexport interface Bar {\r\n name: string\r\n value: number\r\n}\r\n\r\ninterface BarChartProps {\r\n title?: string\r\n data: Bar[]\r\n width?: number\r\n height?: number\r\n valueFormatter?: (value: number) => string\r\n xAxisRotate?: boolean\r\n marginRight?: number\r\n className?: string\r\n}\r\n\r\nexport default class BarChart extends Component {\r\n svgRef: RefObject = createRef()\r\n\r\n // @ts-ignore\r\n _prevData: Bar[]\r\n\r\n componentDidMount() {\r\n this.renderChart()\r\n }\r\n\r\n componentDidUpdate() {\r\n this.renderChart()\r\n }\r\n\r\n renderChart() {\r\n const { data, title } = this.props\r\n if (data === this._prevData) {\r\n return\r\n }\r\n this._prevData = data\r\n this.svgRef.current!.innerHTML = ''\r\n\r\n const xAxisRotate = this.props.xAxisRotate === true\r\n\r\n var margin = { top: title ? 20 : 10, right: this.props.marginRight || 60, bottom: xAxisRotate ? 70 : 20, left: 15 }\r\n const totalWidth = this.props.width || 440\r\n const totalHeight = this.props.height || 330\r\n var width = totalWidth - margin.left - margin.right\r\n var height = totalHeight - margin.top - margin.bottom\r\n\r\n const x = d3\r\n .scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .rangeRound([0, width])\r\n .padding(0.1)\r\n\r\n let min = d3.min(data, (d: Bar) => d.value)!\r\n if (min < 0) {\r\n min = d3.min(data, (d: Bar) => Math.min(d.value, -d.value))!\r\n } else {\r\n min = 0\r\n }\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain([min, d3.max(data, (d: Bar) => Math.abs(d.value))!])\r\n .nice()\r\n const yFormat = this.props.valueFormatter ? this.props.valueFormatter : y.tickFormat()\r\n\r\n const svg = d3\r\n .select(this.svgRef.current)\r\n .property('value', [])\r\n .append('g')\r\n .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')\r\n\r\n var xAxis = d3.axisBottom(x)\r\n var yAxis = d3.axisRight(y).ticks(height > 200 ? 10 : 5)\r\n\r\n const makeYLines = () => d3.axisLeft(y)\r\n // @ts-ignore - tickFormat arg can be any string\r\n svg.append('g').attr('class', 'grid').call(makeYLines().tickSize(-width).tickSizeOuter(0).tickFormat(''))\r\n\r\n svg\r\n .append('g')\r\n .attr('class', 'x-axis axis')\r\n .attr('transform', 'translate(0,' + height + ')')\r\n .call(xAxis)\r\n\r\n svg\r\n .selectAll('.x-axis text')\r\n .style('text-anchor', xAxisRotate ? 'end' : 'middle')\r\n .attr('dx', xAxisRotate ? '-.8em' : 0)\r\n .attr('dy', xAxisRotate ? '.15em' : '0.8em')\r\n .attr('transform', 'rotate(' + (xAxisRotate ? -65 : 0) + ')')\r\n\r\n svg\r\n .append('g')\r\n .attr('class', 'y-axis axis')\r\n .attr('transform', 'translate(' + width + ', 0)')\r\n .call(yAxis)\r\n\r\n if (title) {\r\n svg\r\n .append('text')\r\n .attr('class', 'bar-chart-title')\r\n .attr('x', 4)\r\n .attr('y', -5)\r\n .attr('text-anchor', 'start')\r\n .text(title)\r\n }\r\n\r\n const getHeight = (d: Bar) => {\r\n let height = Math.abs(y(d.value ?? 0) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n }\r\n const isOutside = (height: number) => height < 14\r\n let bars = svg.selectAll('.bar').data(data)\r\n bars\r\n .enter()\r\n .append('rect')\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', (d: Bar) => x(d.name)!)\r\n .attr('y', (d: Bar) => y(Math.max(0, d.value)))\r\n .attr('height', getHeight)\r\n .attr('width', x.bandwidth())\r\n .attr('ry', FinvizSettings?.hasRedesignEnabled ? 2 : 0)\r\n\r\n svg\r\n .selectAll('.bar-label')\r\n .data(data)\r\n .enter()\r\n .append('text')\r\n .attr('class', 'divergence')\r\n .attr('x', (d: Bar) => x(d.name)! + x.bandwidth() / 2)\r\n .attr('y', (d: Bar) => {\r\n const height = getHeight(d)\r\n const outside = isOutside(height)\r\n if (d.value < 0) {\r\n return y(Math.max(0, d.value)) + height + (outside ? 12 : -4)\r\n }\r\n return y(Math.max(0, d.value)) + (outside ? -4 : 12)\r\n })\r\n .attr('fill', (d: Bar) => (!FinvizSettings.hasDarkTheme && isOutside(getHeight(d)) ? 'black' : 'white'))\r\n .attr('text-anchor', 'middle')\r\n .attr('font-size', '10px')\r\n .text((d: Bar) => (d.value !== null ? yFormat(d.value) : ''))\r\n\r\n this.svgRef.current!.style.width = totalWidth + 'px'\r\n this.svgRef.current!.style.height = totalHeight + 'px'\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import { round } from '../backtest/utils'\r\nimport BarChart, { Bar } from './barChart'\r\n\r\nfunction convertData(endYear: number, values: any[]) {\r\n return values\r\n .map((value, index) => ({\r\n name: endYear - index,\r\n value,\r\n }))\r\n .reverse() as unknown as Bar[]\r\n}\r\n\r\ninterface FAChartProps {\r\n id: string\r\n largeRoundPlaces: number\r\n largeScale: number\r\n largeTitleSufix: string\r\n smallRoundPlaces: number\r\n smallScale: number\r\n smallTitleSufix: string\r\n title: string\r\n}\r\n\r\nfunction FAChart({\r\n id,\r\n title,\r\n smallRoundPlaces,\r\n largeRoundPlaces,\r\n smallScale,\r\n largeScale,\r\n smallTitleSufix,\r\n largeTitleSufix,\r\n}: FAChartProps) {\r\n const data: number[] = FinvizFA[id]\r\n\r\n const min = Math.min(...data)\r\n const max = Math.max(...data)\r\n const range = max > -min ? max : -min\r\n\r\n const isLarge = Math.abs(range) >= 1000\r\n\r\n const scale = isLarge ? largeScale : smallScale\r\n const values = data.map((value) =>\r\n value == null ? null : round(scale * value, isLarge ? largeRoundPlaces : smallRoundPlaces)\r\n )\r\n\r\n return (\r\n round(value, isLarge ? largeRoundPlaces : smallRoundPlaces)}\r\n width={280}\r\n height={150}\r\n marginRight={37}\r\n className=\"is-fa\"\r\n />\r\n )\r\n}\r\n\r\nexport default function FundamentalCharts() {\r\n return (\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","/* global FinvizQuoteTickers */\r\nimport classnames from 'classnames'\r\nimport * as dateFns from 'date-fns'\r\nimport React, { ChangeEvent, Component, FormEvent } from 'react'\r\nimport { BrowserRouter } from 'react-router-dom'\r\n\r\nimport { DatePicker } from '../../main/components/date-picker'\r\nimport { SpecificChartFunctionality } from '../../main/constants'\r\nimport {\r\n ChartElementType,\r\n ChartLayout,\r\n Instrument,\r\n Quote,\r\n QuoteFetchType,\r\n TIMEFRAME,\r\n Theme,\r\n Utils,\r\n} from '../charts-lib'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { getStaticChartConfig } from '../shared/chartLayoutConfig'\r\nimport { getSanitizedTicker } from '../shared/ticker-sanitizer'\r\nimport { formatDateToStringUS } from '../shared/utils'\r\n\r\nconst redesignEnabled = !!FinvizSettings.hasRedesignEnabled\r\n\r\nvar colorScaleClass = function (value: number) {\r\n if (value < 0) {\r\n return 'color-text is-negative'\r\n } else if (value > 0) {\r\n return 'color-text is-positive'\r\n }\r\n return ''\r\n}\r\n\r\nvar monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n\r\nvar arraysEqual = function (arr1: unknown[], arr2: unknown[]) {\r\n if (arr1.length !== arr2.length) {\r\n return false\r\n }\r\n for (var i = 0; i < arr1.length; i++) {\r\n if (arr1[i] !== arr2[i]) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\ninterface ChartProps {\r\n tickers: string[]\r\n fromDay: string\r\n toDay: string\r\n}\r\n\r\nclass Chart extends Component {\r\n containerRef = React.createRef()\r\n\r\n shouldComponentUpdate(nextProps: ChartProps) {\r\n return !arraysEqual(this.props.tickers, nextProps.tickers)\r\n }\r\n\r\n render() {\r\n const theme = FinvizSettings.hasDarkTheme ? Theme.dark : Theme.light\r\n const tickerQuote = Quote.select((q) => q.close.length > 0 && this.props.tickers.includes(q.ticker))\r\n const chartConfig = getStaticChartConfig({\r\n ticker: tickerQuote[0]?.ticker ?? '',\r\n timeframe: TIMEFRAME.d,\r\n paneElements: [\r\n {\r\n type: ChartElementType.PerfChart,\r\n tickers: this.props.tickers,\r\n fromDate: this.props.fromDay,\r\n toDate: this.props.toDay,\r\n overlays: [],\r\n },\r\n ],\r\n width: 1000,\r\n height: 450,\r\n refreshData: false,\r\n specificChartFunctionality: SpecificChartFunctionality.quotePerf,\r\n theme,\r\n })\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\ninterface TableProps {\r\n months: string[]\r\n rows: Array<{\r\n ticker: string\r\n months: string[]\r\n total: string\r\n }>\r\n}\r\n\r\n// mozno vyfarbovat tabulku?\r\nclass Table extends Component {\r\n render() {\r\n var { months, rows } = this.props,\r\n groupsCount = Math.ceil(months.length / 12)\r\n rows = rows.slice()\r\n const tdClasses = classnames('text-center', {\r\n 'body-table-nw font-bold': !redesignEnabled,\r\n })\r\n\r\n var trs = []\r\n for (let g = 0; g < groupsCount; g++) {\r\n trs.push(\r\n \r\n \r\n {months.splice(0, 12).map((month) => (\r\n \r\n {month}\r\n \r\n ))}\r\n {g === groupsCount - 1 && Total}\r\n \r\n )\r\n rows.forEach((row, i) => {\r\n trs.push(\r\n \r\n {row.ticker}\r\n {row.months.splice(0, 12).map((col, monthIndex) => (\r\n \r\n {col}\r\n \r\n ))}\r\n {g === groupsCount - 1 && (\r\n \r\n {row.total}\r\n \r\n )}\r\n \r\n )\r\n })\r\n }\r\n\r\n return (\r\n \r\n {trs}\r\n \r\n )\r\n }\r\n}\r\n\r\ninterface PerfState {\r\n tickersInput: string\r\n tickers: string[]\r\n months: Array<{\r\n value: string\r\n label: string\r\n }>\r\n fromMonth: {\r\n value: string\r\n label: string\r\n }\r\n toMonth: {\r\n value: string\r\n label: string\r\n }\r\n minDate: string\r\n maxDate: string\r\n fromDay: string\r\n toDay: string\r\n loading: boolean\r\n}\r\n\r\nexport class Perf extends Component {\r\n constructor(props: any) {\r\n super(props)\r\n var now = new Date(),\r\n months = []\r\n const startYear = new Date().getFullYear() - 36 // We have 37.25 years of data in DB, so leaving some offset\r\n for (var year = startYear; year <= now.getFullYear(); year++) {\r\n for (var month = 1; month <= 12; month++) {\r\n if (year === now.getFullYear() && month > now.getMonth() + 1) {\r\n break\r\n }\r\n months.push({\r\n value: month.toString().padStart(2, '0') + '/01/' + year,\r\n label: monthNames[month - 1] + ' ' + year.toString().substring(2),\r\n })\r\n }\r\n }\r\n\r\n this.state = {\r\n tickersInput: FinvizQuoteTickers.join(','),\r\n tickers: FinvizQuoteTickers,\r\n months: months,\r\n fromMonth: months[months.length - 12],\r\n toMonth: months[months.length - 1],\r\n /**\r\n * DB_BARS_LIMIT - code below is dependent on amount of data we store for specific timeframes\r\n * Search DB_BARS_LIMIT in the project to find other places with such code.\r\n */\r\n // 2510 bars = ±10 years\r\n minDate: formatDateToStringUS(dateFns.sub(new Date(), { years: 9, months: 11 })),\r\n maxDate: formatDateToStringUS(new Date()),\r\n fromDay: formatDateToStringUS(dateFns.subYears(new Date(), 1)),\r\n toDay: formatDateToStringUS(new Date()),\r\n loading: true,\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.loading) {\r\n return (\r\n \r\n Loading...\r\n \r\n )\r\n }\r\n\r\n var from = new Date(this.state.fromMonth.value)\r\n var to = new Date(this.state.toMonth.value)\r\n var monthsToShow = this.state.months\r\n .map((month) => month.value)\r\n .filter((month) => new Date(month) >= from && new Date(month) <= to)\r\n\r\n var quotes = Quote.select((q: any) => q.timeframe === 'm')\r\n var quotesPerf = quotes.map((q: any) => {\r\n var obj: { ticker: string; perf: Record } = { ticker: q.ticker, perf: {} }\r\n q.date.forEach((d: any, i: number) => {\r\n if (i === 0) {\r\n return\r\n }\r\n var date = Utils.dateFromUnixTimestamp(d)\r\n var perf = (q.close[i] * 100) / q.close[i - 1] - 100\r\n obj.perf[(date.getMonth() + 1).toString().padStart(2, '0') + '/01/' + date.getFullYear()] = perf\r\n })\r\n return obj\r\n })\r\n\r\n var months = monthsToShow.map(\r\n (month) => monthNames[new Date(month).getMonth()] + ' ' + new Date(month).getFullYear().toString().substring(2)\r\n )\r\n var rows = quotesPerf.map((quote: any) => {\r\n var cols: string[] = []\r\n var total = 1\r\n monthsToShow.forEach((month) => {\r\n var perf = Math.round(quote.perf[month] * 100) / 100\r\n if (!isNaN(perf)) {\r\n total *= quote.perf[month] / 100 + 1\r\n cols.push((perf > 0 ? '+' : '') + perf.toFixed(2) + '%')\r\n } else {\r\n cols.push('N/A')\r\n }\r\n })\r\n total = (total - 1) * 100\r\n return { ticker: quote.ticker, months: cols, total: (total > 0 ? '+' : '') + total.toFixed(2) + '%' }\r\n })\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Tickers:\r\n {\r\n this.setState({ tickersInput: e.target.value })\r\n }}\r\n style={{ width: '100%' }}\r\n data-testid=\"quote-compare-perf-tickers-input\"\r\n />\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n {\r\n this._onDatePickerChange('from', formatDateToStringUS(newValue))\r\n }}\r\n >\r\n \r\n \r\n
\r\n {' - '}\r\n
\r\n {\r\n this._onDatePickerChange('to', formatDateToStringUS(newValue))\r\n }}\r\n >\r\n \r\n \r\n
\r\n \r\n\r\n

\r\n Monthly performance from  \r\n \r\n {this.state.months.map((option) => (\r\n \r\n ))}\r\n \r\n   to  \r\n \r\n {this.state.months.map((option) => (\r\n \r\n ))}\r\n \r\n

\r\n \r\n\r\n
\r\n \r\n )\r\n }\r\n\r\n refetchQuotes = () => {\r\n this._fetch(this.state.tickers, false)\r\n }\r\n\r\n componentDidMount() {\r\n this._fetch(this.state.tickers)\r\n\r\n // We have to listen to these events to synchrnously update quote data, if we do after awaiting Quote.getAll in _fetch\r\n // there's a visual glitch because it rerenders with new data from the server (there's a complete refetch after 15 requests with no new data)\r\n // and then it rerenders again after updateQuoteData\r\n Quote.bind('refetch newerData', this.updateQuoteData)\r\n document.addEventListener('quoteFetchEvent', this.refetchQuotes)\r\n }\r\n\r\n componentWillUnmount() {\r\n Quote.unbind('refetch newerData', this.updateQuoteData)\r\n document.removeEventListener('quoteFetchEvent', this.refetchQuotes)\r\n }\r\n\r\n updateQuoteData = () => {\r\n const { fromDay, toDay } = this.state\r\n\r\n if (!fromDay || !toDay) {\r\n return\r\n }\r\n\r\n const dailyQuotes = Quote.select((q: any) => q.timeframe === 'd')\r\n const fromDate = new Date(fromDay + ' 00:00')\r\n const toDate = new Date(toDay + ' 23:59')\r\n dailyQuotes.forEach((q: any) => {\r\n const o = [],\r\n h = [],\r\n l = [],\r\n c = [],\r\n d = [],\r\n v = []\r\n for (let i = 0; i < q.close.length; i++) {\r\n const date = Utils.dateFromUnixTimestamp(q.date[i])\r\n if (fromDate <= date && date <= toDate) {\r\n o.push(q.open[i])\r\n h.push(q.high[i])\r\n l.push(q.low[i])\r\n c.push(q.close[i])\r\n d.push(q.date[i])\r\n v.push(q.volume[i])\r\n }\r\n }\r\n // Clear cache so we'll recalculate values after updating quote data on next line\r\n // Cache invalidates only on quote.fetchedAt change and in this case we mutate quote values and don't change fetchedAt (which is correct)\r\n // Updating quote this way should be an edge case and that's why we have to clear the cache manually\r\n q.clearCachedData()\r\n q.updateAttributes({\r\n open: o,\r\n high: h,\r\n low: l,\r\n close: c,\r\n date: d,\r\n volume: v,\r\n })\r\n })\r\n\r\n // This is to rerender perf table on quote update\r\n this.forceUpdate()\r\n }\r\n\r\n _fetch = async (tickers: string[], isRefetch = true) => {\r\n const { t } = decodeQueryString<{ t: string; p?: TIMEFRAME }>()\r\n if (isRefetch) {\r\n this.setState({ loading: true })\r\n }\r\n\r\n Quote.all().forEach(async (quote) => {\r\n if (quote.ticker === t && quote.timeframe === 'd' && !isRefetch) {\r\n // We don't want to trigger main ticker quote newer data fetch because it's done in withQuotePolling which also triggers this function\r\n // by emmiting quoteFetchEvent\r\n return\r\n }\r\n if (tickers.includes(quote.ticker)) {\r\n await quote.fetchData({ fetchType: isRefetch ? QuoteFetchType.Refetch : QuoteFetchType.NewerData })\r\n this.updateQuoteData()\r\n } else {\r\n quote.destroy()\r\n }\r\n })\r\n\r\n if (isRefetch) {\r\n var d = tickers.map((ticker) => ({ ticker: ticker, timeframe: TIMEFRAME.d, instrument: Instrument.Stock }))\r\n var m = tickers.map((ticker) => ({ ticker: ticker, timeframe: TIMEFRAME.m, instrument: Instrument.Stock }))\r\n await Quote.getAll(d.concat(m))\r\n\r\n this.setState({ loading: false })\r\n }\r\n\r\n this.updateQuoteData()\r\n }\r\n\r\n _onSubmit = (e: FormEvent) => {\r\n e.preventDefault()\r\n const tickersInput = getSanitizedTicker(this.state.tickersInput, true)\r\n const tickers = tickersInput.split(',')\r\n this.setState({ tickers, tickersInput }, () => {\r\n this._fetch(tickers)\r\n })\r\n }\r\n\r\n _onMonthChange = (type: string, e: ChangeEvent) => {\r\n var state: any = {}\r\n state[type + 'Month'] = this.state.months.filter((m) => m.value === e.target.value)[0]\r\n this.setState(state)\r\n }\r\n\r\n _onDatePickerChange = (type: string, date: any) => {\r\n var formattedDate = formatDateToStringUS(new Date(date))\r\n\r\n var state: any = {}\r\n state[type + 'Day'] = formattedDate\r\n state[type + 'DatePickerOpen'] = false\r\n this.setState(state, () => {\r\n this._fetch(this.state.tickers)\r\n })\r\n }\r\n}\r\n","import classnames from 'classnames'\r\n\r\nimport { formatDate } from '../../app/header/utils'\r\nimport { formatNumber } from '../util'\r\nimport { RedGreenMultiline, RedGreenText } from './RedGreenText'\r\n\r\nexport interface QuotePriceProps {\r\n title?: string\r\n date?: Date | null\r\n dateLabel?: string | null\r\n price: number\r\n changeUsd: number\r\n changePct: number\r\n}\r\n\r\nexport function QuotePrice({ title, date, dateLabel, price, changeUsd, changePct }: QuotePriceProps) {\r\n const fractions = !isNaN(price) && price < 1 ? 4 : 2\r\n const hasValue = changeUsd && Number.isFinite(changeUsd)\r\n\r\n return (\r\n
\r\n {title &&
{title}
}\r\n\r\n {(date || dateLabel) && (\r\n \r\n {dateLabel ?? formatDate(date, '', 'MMM dd')}\r\n {date && (\r\n <>\r\n {' '}\r\n • {formatDate(date, '', 'hh:mmaa')} ET\r\n \r\n )}\r\n \r\n )}\r\n\r\n
\r\n {formatNumber(price, { defaultValue: '—', fractions })}\r\n
\r\n \r\n \r\n
Dollar change
\r\n {formatNumber(changeUsd, { showPlusSign: true, fractions })}\r\n
\r\n %}\r\n >\r\n
Percentage change
\r\n {formatNumber(changePct)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","export const QUOTE_HEADER_ROOT = 'js-quote-header-prices'\r\nexport const STATIC_PRICE_SELECTOR = '.js-is-static-price'\r\n","import * as React from 'react'\r\n\r\nimport { useModelState } from '../../charts-lib'\r\nimport { QUOTE_HEADER_ROOT, STATIC_PRICE_SELECTOR } from './constants'\r\n\r\nfunction toggleStaticheader(isReactHeader: boolean) {\r\n if (isReactHeader) {\r\n document.querySelector(STATIC_PRICE_SELECTOR)?.classList.add('hidden')\r\n document.getElementById(QUOTE_HEADER_ROOT)?.classList.remove('hidden')\r\n } else {\r\n document.querySelector(STATIC_PRICE_SELECTOR)?.classList.remove('hidden')\r\n document.getElementById(QUOTE_HEADER_ROOT)?.classList.add('hidden')\r\n }\r\n}\r\n\r\nexport function useReplaceStaticHeader(isLoaded: boolean) {\r\n React.useEffect(() => {\r\n toggleStaticheader(isLoaded)\r\n }, [isLoaded])\r\n}\r\n\r\nconst CHANGE_UPATE_EVENTS = ['change', 'update']\r\nconst QUOTE_MODEL_CHANGE_EVENTS = [...CHANGE_UPATE_EVENTS, 'refetch', 'newerData']\r\n\r\nexport interface HeaderPricesContext {\r\n prevClose: number\r\n lastClose: number\r\n lastTime: number\r\n lastDate?: number\r\n afterClose: number\r\n afterTime: number\r\n}\r\n\r\nexport function useChartContextPrices(chartLayoutModel: any): HeaderPricesContext | null {\r\n const chartModel = useModelState(chartLayoutModel?.charts().first(), {\r\n watchProperties: ['quote'],\r\n listenOnEvents: CHANGE_UPATE_EVENTS,\r\n })\r\n const quoteModel = useModelState(chartModel?.quote() ?? null, {\r\n watchProperties: ['lastClose', 'prevClose', 'afterClose', 'afterTime'],\r\n listenOnEvents: QUOTE_MODEL_CHANGE_EVENTS,\r\n })\r\n\r\n if (!quoteModel) return null\r\n\r\n return {\r\n prevClose: quoteModel.prevClose,\r\n lastClose: quoteModel.lastClose,\r\n lastTime: quoteModel.lastTime,\r\n lastDate: quoteModel.lastDate,\r\n afterClose: quoteModel.afterClose,\r\n afterTime: quoteModel.afterTime,\r\n }\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { QuotePrice } from '../../../main/components/QuotePrice'\r\nimport { Quote, useChartLayoutGlobalModelAsync, withCompleteLayoutModelInit, withQuotePolling } from '../../charts-lib'\r\nimport { formatDate, getDate } from '../../header/utils'\r\nimport { HeaderPricesContext, useChartContextPrices, useReplaceStaticHeader } from './hooks'\r\n\r\nexport function ChartContextQuoteHeader() {\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const data = useChartContextPrices(chartLayoutModel)\r\n\r\n return \r\n}\r\n\r\ninterface QuoteHeaderWithManualInitProps {\r\n chartLayoutModel: any\r\n config: any\r\n}\r\n\r\nfunction ManualInitQuoteHeaderComponent({ chartLayoutModel, config }: QuoteHeaderWithManualInitProps) {\r\n const data = useChartContextPrices(chartLayoutModel)\r\n\r\n /**\r\n * We need to instantiate layout model in order to use quote refetch on page\r\n * without an actual chart (options.) We also need to manually create a chart model\r\n *\r\n * It is then correctly caught in `useChartContextPrices`\r\n */\r\n React.useEffect(() => {\r\n async function fetchAndMapInitialQuote() {\r\n for (const chartConfig of config.charts) {\r\n const modelProperties = Object.assign({}, chartConfig)\r\n\r\n modelProperties.chart_layout = chartLayoutModel\r\n delete modelProperties.panes\r\n if (modelProperties.refreshData == null) {\r\n modelProperties.refreshData = true\r\n }\r\n chartLayoutModel.charts().create(modelProperties)\r\n }\r\n\r\n const chart = chartLayoutModel.charts().first()\r\n\r\n const quote = await Quote.get({\r\n ticker: chart.ticker,\r\n instrument: chart.instrument,\r\n timeframe: chart.timeframe,\r\n options: { maxBars: 0 },\r\n })\r\n\r\n chart.updateAttributes({ quote })\r\n }\r\n\r\n fetchAndMapInitialQuote()\r\n }, [chartLayoutModel, config.charts])\r\n\r\n return \r\n}\r\n\r\nexport const ManualInitQuoteHeader = withCompleteLayoutModelInit(withQuotePolling(ManualInitQuoteHeaderComponent))\r\n\r\nexport function QuoteHeaderContent({ data }: { data: HeaderPricesContext | null }) {\r\n /**\r\n * Replace static HTML with our react component\r\n */\r\n useReplaceStaticHeader(!!data)\r\n\r\n if (!data) return null\r\n\r\n const isChange = Number.isFinite(data.prevClose)\r\n const isAfterChange = Number.isFinite(data.afterClose) && data.afterClose !== data.lastClose\r\n const lastTime = data.lastTime ? getDate(data.lastTime * 1000) : null\r\n const lastDate = !lastTime && data.lastDate ? formatDate(data.lastDate, 'yyyyMMdd', 'MMM dd, yyyy') : null\r\n const afterDate = data.afterTime ? getDate(data.afterTime * 1000) : null\r\n\r\n let afterhoursTitle\r\n if (lastTime && afterDate) {\r\n if (dateFns.isBefore(afterDate, lastTime)) afterhoursTitle = 'Premarket'\r\n else afterhoursTitle = 'Aftermarket'\r\n }\r\n\r\n return (\r\n <>\r\n {isChange && (\r\n \r\n )}\r\n {isAfterChange && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","import { useChartModelCustomDateRangeValues } from 'finviz-charts/app/controllers/chart-controls/use-chart-model-custom-date-range-values'\r\nimport { useChartLayoutGlobalModelAsync, useModelState } from 'finviz-charts/app/lib-export'\r\n\r\nexport function useChartTimeframePathWatch() {\r\n const isPremium = window.FinvizSettings.hasUserPremium\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const chartModel = useModelState(chartLayoutModel?.activeChart ?? null, {\r\n watchProperties: ['timeframe', 'dateRange'],\r\n })\r\n const { generateChartLayoutRouterPath } = useChartModelCustomDateRangeValues({\r\n chartModel,\r\n isPremium,\r\n })\r\n\r\n if (!chartModel) return null\r\n\r\n const { pathname, search } = generateChartLayoutRouterPath({\r\n ticker: chartModel?.ticker,\r\n timeframe: chartModel?.timeframe,\r\n dateRange: chartModel?.dateRange,\r\n })\r\n\r\n return `${pathname}${search}`\r\n}\r\n","import { QuoteRoutes } from '../../../main/constants'\r\nimport { StatsQuery } from '../../stats/types'\r\nimport { useChartTimeframePathWatch } from '../use-chart-timeframe-path-watch'\r\n\r\nconst originalElement = document.querySelector('.js-compare-perf-link a')\r\n\r\nexport default function ComparePerfLink() {\r\n const isPremium = window.FinvizSettings.hasUserPremium\r\n const currentTimeframePath = useChartTimeframePathWatch()\r\n if (!currentTimeframePath)\r\n return (\r\n \r\n Compare Perf.\r\n \r\n )\r\n\r\n const newURL = new URL(currentTimeframePath, window.location.origin)\r\n newURL.searchParams.set(StatsQuery.ChartType, QuoteRoutes.Performance)\r\n\r\n return (\r\n \r\n Compare Perf.\r\n \r\n )\r\n}\r\n","import { QuoteRoutes } from '../../../main/constants'\r\nimport { StatsQuery } from '../../stats/types'\r\nimport { useChartTimeframePathWatch } from '../use-chart-timeframe-path-watch'\r\n\r\nconst originalElement = document.querySelector('.js-financials-link a')\r\n\r\nexport default function FinancialsLink() {\r\n const currentTimeframePath = useChartTimeframePathWatch()\r\n if (!currentTimeframePath)\r\n return (\r\n \r\n Financials\r\n \r\n )\r\n\r\n const newURL = new URL(currentTimeframePath, window.location.origin)\r\n newURL.searchParams.set(StatsQuery.ChartType, QuoteRoutes.Dividends)\r\n\r\n return (\r\n \r\n Financials\r\n \r\n )\r\n}\r\n","import { QuoteRoutes } from '../../../main/constants'\r\nimport { StatsQuery } from '../../stats/types'\r\nimport { useChartTimeframePathWatch } from '../use-chart-timeframe-path-watch'\r\n\r\nconst originalElement = document.querySelector('.js-options-chain-link a')\r\n\r\nexport default function OptionsChainLink() {\r\n const currentTimeframePath = useChartTimeframePathWatch()\r\n\r\n const label = 'Options'\r\n\r\n if (!currentTimeframePath)\r\n return (\r\n \r\n {label}\r\n \r\n )\r\n\r\n const newURL = new URL(currentTimeframePath, window.location.origin)\r\n newURL.searchParams.set(StatsQuery.ChartType, QuoteRoutes.OptionsChain)\r\n\r\n return (\r\n \r\n {label}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { useChartLayoutGlobalModelAsync } from 'finviz-charts/app/utils/useChartLayoutGlobalModelAsync'\r\n\r\nimport { QuoteRoutes, SpecificChartFunctionality } from '../../../main/constants'\r\nimport { StatsQuery } from '../../stats/types'\r\nimport { useChartTimeframePathWatch } from '../use-chart-timeframe-path-watch'\r\n\r\nconst originalElement = document.querySelector('.js-short-interest-link a')\r\n\r\nexport default function ShortInterestLink() {\r\n const currentTimeframePath = useChartTimeframePathWatch()\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const isQuoteFinancials = chartLayoutModel?.specificChartFunctionality === SpecificChartFunctionality.quoteFinancials\r\n const isQuoteOrQuoteFinancials =\r\n isQuoteFinancials || chartLayoutModel?.specificChartFunctionality === SpecificChartFunctionality.quotePage\r\n\r\n if (!currentTimeframePath || !isQuoteOrQuoteFinancials)\r\n return (\r\n \r\n Short Interest\r\n \r\n )\r\n\r\n const newURL = new URL(currentTimeframePath, window.location.origin)\r\n newURL.searchParams.set(StatsQuery.ChartType, QuoteRoutes.ShortInterest)\r\n\r\n return (\r\n \r\n Short Interest\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { useChartLayoutGlobalModelAsync } from 'finviz-charts/app/utils/useChartLayoutGlobalModelAsync'\r\n\r\nimport { SpecificChartFunctionality } from '../../../main/constants'\r\nimport { StatsQuery } from '../../stats/types'\r\nimport { useChartTimeframePathWatch } from '../use-chart-timeframe-path-watch'\r\n\r\nconst originalElement = document.querySelector('.js-stock-detail-link a')\r\n\r\nexport default function StockDetailLink() {\r\n const currentTimeframePath = useChartTimeframePathWatch()\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const isQuotePage = chartLayoutModel?.specificChartFunctionality === SpecificChartFunctionality.quotePage\r\n const isQuoteOrQuoteFinancials =\r\n isQuotePage || chartLayoutModel?.specificChartFunctionality === SpecificChartFunctionality.quoteFinancials\r\n\r\n const label = (\r\n <>\r\n Chart\r\n Stock Detail\r\n \r\n )\r\n\r\n if (!currentTimeframePath || !isQuoteOrQuoteFinancials)\r\n return (\r\n \r\n {label}\r\n \r\n )\r\n\r\n const newURL = new URL(currentTimeframePath, window.location.origin)\r\n newURL.searchParams.delete(StatsQuery.ChartType)\r\n\r\n return (\r\n \r\n {label}\r\n \r\n )\r\n}\r\n","import { SelectItem } from '../../../main/components'\r\nimport { IconNameType } from '../../../main/components/icon'\r\n\r\nexport enum QuoteNodeChartTypes {\r\n candlesticksimple = 'candlesticksimple',\r\n candlestick = 'candlestick',\r\n line = 'line',\r\n ohlc = 'ohlc',\r\n heikinashi = 'heikinashi',\r\n hollowcandlestick = 'hollowcandlestick',\r\n}\r\n\r\nexport enum QuoteUrlChartTypes {\r\n cs = 'cs',\r\n c = 'c',\r\n l = 'l',\r\n o = 'o',\r\n ha = 'ha',\r\n hc = 'hc',\r\n}\r\n\r\nexport const QuoteShortToLongType = {\r\n [QuoteUrlChartTypes.cs]: QuoteNodeChartTypes.candlesticksimple,\r\n [QuoteUrlChartTypes.c]: QuoteNodeChartTypes.candlestick,\r\n [QuoteUrlChartTypes.l]: QuoteNodeChartTypes.line,\r\n [QuoteUrlChartTypes.o]: QuoteNodeChartTypes.ohlc,\r\n [QuoteUrlChartTypes.ha]: QuoteNodeChartTypes.heikinashi,\r\n [QuoteUrlChartTypes.hc]: QuoteNodeChartTypes.hollowcandlestick,\r\n} as const\r\n\r\nexport const QuoteLongToShortType = {\r\n [QuoteNodeChartTypes.candlesticksimple]: QuoteUrlChartTypes.cs,\r\n [QuoteNodeChartTypes.candlestick]: QuoteUrlChartTypes.c,\r\n [QuoteNodeChartTypes.line]: QuoteUrlChartTypes.l,\r\n [QuoteNodeChartTypes.ohlc]: QuoteUrlChartTypes.o,\r\n [QuoteNodeChartTypes.heikinashi]: QuoteUrlChartTypes.ha,\r\n [QuoteNodeChartTypes.hollowcandlestick]: QuoteUrlChartTypes.hc,\r\n} as const\r\n\r\nexport const FREE_TYPES = ['candlesticksimple', 'candlestick', 'line']\r\n\r\nexport const DEFAULT_TYPES = [\r\n { icon: 'candleBarBasic', value: QuoteNodeChartTypes.candlestick, label: 'Candle' },\r\n { icon: 'lineChartType', value: QuoteNodeChartTypes.line, label: 'Line' },\r\n { icon: 'ohlcChartType', value: QuoteNodeChartTypes.ohlc, label: 'OHLC' },\r\n { icon: 'candleBarHollow', value: QuoteNodeChartTypes.hollowcandlestick, label: 'Hollow Candle' },\r\n { icon: 'candleBarHeikinAshi', value: QuoteNodeChartTypes.heikinashi, label: 'Heikin Ashi' },\r\n]\r\n\r\nexport type TypeBaseOption = SelectItem & {\r\n icon: IconNameType\r\n href: string\r\n}\r\n","import { Select } from '../../../main/components'\r\nimport { Icon } from '../../../main/components/icon'\r\nimport { useChartTypes } from './use-chart-type'\r\n\r\nconst hasRedesign = FinvizSettings.hasRedesignEnabled\r\n\r\nexport function ChartTypesSelect({ isPremium }: { isPremium: boolean }) {\r\n const { chartTypes, currentType, setSelectedChartTypeOverwrite } = useChartTypes({ isPremium })\r\n\r\n return (\r\n : undefined}\r\n rounding={hasRedesign ? undefined : 'none'}\r\n onChange={({ value }) => setSelectedChartTypeOverwrite(value)}\r\n items={chartTypes}\r\n />\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport { decodeQueryString, encodeQueryString } from '../../queryString'\r\nimport {\r\n DEFAULT_TYPES,\r\n FREE_TYPES,\r\n QuoteLongToShortType,\r\n QuoteNodeChartTypes,\r\n QuoteShortToLongType,\r\n QuoteUrlChartTypes,\r\n TypeBaseOption,\r\n} from './utils'\r\n\r\nexport function useChartTypes({ isPremium }: { isPremium: boolean }) {\r\n const location = useLocation()\r\n const { b, t, ta, ty, p = 'd', r } = decodeQueryString(location.search)\r\n const taInt = ta ? Number.parseInt(ta) : 1\r\n const [selectedChartTypeOverwrite, setSelectedChartTypeOverwrite] = React.useState()\r\n\r\n const generateRouterPath = React.useCallback(\r\n (type: QuoteNodeChartTypes) => {\r\n if (isPremium || FREE_TYPES.includes(type)) {\r\n return `/quote.ashx?${encodeQueryString({\r\n b,\r\n t,\r\n r,\r\n ty:\r\n type === QuoteNodeChartTypes.candlesticksimple\r\n ? QuoteLongToShortType.candlestick\r\n : QuoteLongToShortType[type],\r\n ta: type === QuoteNodeChartTypes.candlestick ? '1' : '0',\r\n p,\r\n })}`\r\n }\r\n return `/elite.ashx?${encodeQueryString({\r\n utm_source: 'finviz',\r\n utm_medium: 'banner',\r\n utm_campaign: 'quote-chart-type-select',\r\n })}`\r\n },\r\n [isPremium, b, t, r, p]\r\n )\r\n\r\n const chartTypes = React.useMemo(\r\n () =>\r\n (\r\n [\r\n !isPremium ? { icon: 'candleBarBasic', value: 'candlesticksimple', label: 'Candle - simple' } : null,\r\n ...DEFAULT_TYPES.map((type) =>\r\n !isPremium && type.value === 'candlestick' ? { ...type, label: 'Candle - advanced' } : type\r\n ),\r\n ].filter(Boolean) as TypeBaseOption[]\r\n ).map((item) => ({\r\n ...item,\r\n href: generateRouterPath(item.value as QuoteNodeChartTypes),\r\n reloadDocument: !isPremium,\r\n })),\r\n [generateRouterPath, isPremium]\r\n )\r\n\r\n const currentType = React.useMemo(\r\n () =>\r\n chartTypes.find((type) => {\r\n if (selectedChartTypeOverwrite) {\r\n return type.value === selectedChartTypeOverwrite\r\n }\r\n\r\n const defaultType =\r\n ((ty as QuoteUrlChartTypes | undefined) && QuoteShortToLongType[ty as QuoteUrlChartTypes]) ??\r\n (FinvizQuoteTypeCurrent as QuoteNodeChartTypes)\r\n\r\n return !isPremium && defaultType === QuoteNodeChartTypes.candlestick && taInt === 0\r\n ? type.value === QuoteNodeChartTypes.candlesticksimple\r\n : type.value === defaultType\r\n }),\r\n [chartTypes, selectedChartTypeOverwrite, ty, isPremium, taInt]\r\n )\r\n\r\n return { currentType, chartTypes, setSelectedChartTypeOverwrite }\r\n}\r\n","import classnames from 'classnames'\r\n\r\nimport { Button } from '../../../main/components/button'\r\nimport { NotificationWrapper } from '../../../main/components/notification'\r\nimport { StockDetailTimeframeBar } from '../../charts-lib'\r\nimport { decodeQueryString } from '../../queryString'\r\nimport { ChartTypesSelect } from '../chart-type-select'\r\n\r\ninterface Props {\r\n index: number\r\n isInteractiveChart: boolean\r\n isStockDetailUpdating: boolean\r\n}\r\n\r\nconst hasRedesign = FinvizSettings.hasRedesignEnabled\r\n\r\nexport function QuoteMenu({ index, isInteractiveChart, isStockDetailUpdating }: Props) {\r\n const { t, ty, p } = decodeQueryString()\r\n const urlTickers = t.split(',')\r\n const isPremium = FinvizSettings.hasUserPremium\r\n\r\n return (\r\n \r\n
\r\n {ty !== 'p' && ty !== 'oc' && (\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 {ty !== 'p' && ty !== 'oc' ? (\r\n \r\n Share\r\n \r\n ) : null}\r\n
\r\n
\r\n )\r\n}\r\n","export enum StatementsDataEnum {\r\n yoyChange = 'yoyChange',\r\n yoyChangePct = 'yoyChangePct',\r\n}\r\n\r\nexport enum StatementsTimeframeEnum {\r\n annual = 'annual',\r\n quarterly = 'quarterly',\r\n}\r\n\r\nexport const SETTINGS_COOKIE_KEY = 'quoteStatementsTableSettings'\r\n\r\nexport const DEFAULT_SETTINGS = {\r\n [StatementsDataEnum.yoyChange]: false,\r\n [StatementsDataEnum.yoyChangePct]: false,\r\n statementsTimeframe: StatementsTimeframeEnum.annual,\r\n}\r\n\r\nexport type StatementsType = {\r\n [StatementsDataEnum.yoyChange]: boolean\r\n [StatementsDataEnum.yoyChangePct]: boolean\r\n statementsTimeframe: StatementsTimeframeEnum\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as d3 from 'd3'\r\nimport { isRedesignEnabled } from 'finviz-charts/app/utils'\r\nimport * as React from 'react'\r\nimport { Component, RefObject, createRef } from 'react'\r\n\r\nimport { ChipSwitch, ChipSwitchButton } from '../../main/components/ChipSwitch'\r\nimport { RedGreenText } from '../../main/components/RedGreenText'\r\nimport { FinancialsTableContextProvider, useFinancialsTableContext } from '../../main/components/financials-table'\r\nimport { Icon } from '../../main/components/icon'\r\nimport { getValue, setValue } from '../../main/services/local-storage'\r\nimport { shortFormatNumber } from '../../main/util'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { AdTag, getInvestingChannelPage } from '../shared/components/Ads'\r\nimport BarChartBig from './barChart'\r\nimport {\r\n DEFAULT_SETTINGS,\r\n SETTINGS_COOKIE_KEY,\r\n StatementsDataEnum,\r\n StatementsTimeframeEnum,\r\n StatementsType,\r\n} from './statements-constants'\r\n\r\ninterface Bar {\r\n name: string\r\n value: number\r\n}\r\n\r\ninterface BarChartProps {\r\n data: Bar[]\r\n}\r\n\r\nclass BarChart extends Component {\r\n svgRef: RefObject\r\n\r\n constructor(props: BarChartProps) {\r\n super(props)\r\n this.svgRef = createRef()\r\n }\r\n\r\n componentDidMount() {\r\n this.renderChart()\r\n }\r\n\r\n componentDidUpdate() {\r\n this.renderChart()\r\n }\r\n\r\n renderChart() {\r\n const data = this.props.data\r\n\r\n const barWidth = 3\r\n const width = data.length * (barWidth + 1)\r\n const height = 16\r\n\r\n const x = d3\r\n .scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .range([0, width])\r\n\r\n let min = d3.min(data, (d: Bar) => d.value)!\r\n if (min < 0) {\r\n min = d3.min(data, (d: Bar) => Math.min(d.value, -d.value))!\r\n } else {\r\n min = 0\r\n }\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain([min, d3.max(data, (d: Bar) => Math.abs(d.value))] as [number, number])\r\n .nice()\r\n .unknown(height / 2)\r\n\r\n const svg = d3.select(this.svgRef.current).property('value', [])\r\n\r\n let bars = svg.selectAll('.bar').data(data)\r\n bars\r\n .enter()\r\n .append('rect')\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', function (d: Bar) {\r\n return x(d.name)!\r\n })\r\n .attr('y', function (d: Bar) {\r\n return y(Math.max(0, d.value))\r\n })\r\n .attr('height', function (d: Bar) {\r\n let height = Math.abs(y(d.value) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n })\r\n .attr('width', barWidth)\r\n bars\r\n .transition()\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', function (d: Bar) {\r\n return x(d.name)!\r\n })\r\n .attr('y', function (d: Bar) {\r\n return y(Math.max(0, d.value))\r\n })\r\n .attr('height', function (d: Bar) {\r\n let height = Math.abs(y(d.value) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n })\r\n .attr('width', barWidth)\r\n bars.exit().remove()\r\n\r\n this.svgRef.current!.style.width = width + 'px'\r\n this.svgRef.current!.style.height = height + 'px'\r\n }\r\n\r\n render() {\r\n return \r\n }\r\n}\r\n\r\nfunction EliteHoverAd() {\r\n return (\r\n
\r\n
\r\n \r\n

Upgrade your FINVIZ experience

\r\n

\r\n Join thousands of traders who make more informed decisions with our premium features. Real-time\r\n quotes, advanced visualizations, historical statements, and much more.\r\n

\r\n \r\n Learn more\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\ninterface BarChartWrapperProps {\r\n data: Bar[]\r\n}\r\n\r\nclass BarChartWrapper extends Component {\r\n state = {\r\n hover: false,\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n x.value !== null)}>\r\n \r\n \r\n \r\n {FinvizSettings.hasUserPremium ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst DEFAULT_SOURCE = 'F'\r\n\r\nconst _getDefaultSource = (): 'F' | 'R' => {\r\n if (!FinvizSettings.hasUserPremium) {\r\n return DEFAULT_SOURCE\r\n }\r\n\r\n return getValue('statements-source', DEFAULT_SOURCE) === 'R' ? 'R' : 'F'\r\n}\r\n\r\nconst getTimeframeFromStatementsSettingsTimeframe = (statementsTimeframe: StatementsTimeframeEnum) => {\r\n if (statementsTimeframe === StatementsTimeframeEnum.quarterly) {\r\n return 'Q'\r\n }\r\n\r\n // statementsTimeframe === StatementsTimeframeEnum.annual or fallback\r\n return 'A'\r\n}\r\n\r\ninterface StatementsState {\r\n source: 'F' | 'R'\r\n sheet: string\r\n currency: string | null\r\n data: Record | null\r\n}\r\n\r\nfunction StatementsComponent() {\r\n const { settings } = useFinancialsTableContext()\r\n const pageRef = React.useRef(getInvestingChannelPage())\r\n\r\n const [state, setState] = React.useState({\r\n source: _getDefaultSource(),\r\n sheet: 'I',\r\n currency: null,\r\n data: null,\r\n })\r\n\r\n const timeframe = getTimeframeFromStatementsSettingsTimeframe(settings.statementsTimeframe)\r\n\r\n const { data } = state\r\n const hasData = !data?.error\r\n const hasRedesignEnabled = FinvizSettings?.hasRedesignEnabled\r\n\r\n const _fetch = async () => {\r\n const { source, sheet } = state\r\n const { t } = decodeQueryString()\r\n\r\n try {\r\n const response = await fetch(`/api/statement.ashx?t=${t}&so=${source}&s=${sheet}${timeframe}`)\r\n const json = await response.json()\r\n\r\n setState({\r\n ...state,\r\n currency: json.currency,\r\n data: json.error ? json : json.data,\r\n })\r\n } catch {}\r\n }\r\n\r\n React.useEffect(() => {\r\n pageRef.current = getInvestingChannelPage()\r\n pageRef.current?.create()\r\n\r\n return () => {\r\n pageRef.current?.destroy()\r\n }\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n _fetch()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.sheet, state.source, timeframe])\r\n\r\n const _renderSheetLink = (id: string, text: string) => (\r\n {\r\n e.preventDefault()\r\n setState({\r\n ...state,\r\n sheet: id,\r\n })\r\n }}\r\n >\r\n {text}\r\n \r\n )\r\n\r\n if (data === null) {\r\n return null\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {FinvizSettings.hasUserPremium && (\r\n // TODO fix classname when css mixins removal is merged\r\n {\r\n e.preventDefault()\r\n const source = e.target.value === 'R' ? 'R' : 'F'\r\n setState({\r\n ...state,\r\n source: source,\r\n })\r\n setValue('statements-source', source, DEFAULT_SOURCE, false)\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n {FinvizSettings.hasUserPremium && <>   }\r\n\r\n \r\n {_renderSheetLink('I', 'Income Statement')} •{' '}\r\n {_renderSheetLink('B', 'Balance Sheet')} •{' '}\r\n {_renderSheetLink('C', 'Cash Flow')}\r\n \r\n \r\n \r\n
\r\n {hasData && }\r\n {!hasData && (\r\n \r\n \r\n \r\n \r\n The statement is not available. Try switching between FactSet-Reuters source.\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nfunction Statements() {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nfunction StatementsSettingsSection() {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof StatementsType, value: StatementsType[keyof StatementsType]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n const yoyGrowthLabel = React.useMemo(() => {\r\n const isQuarterlyTimeframe = settings.statementsTimeframe === StatementsTimeframeEnum.quarterly\r\n\r\n if (isQuarterlyTimeframe) {\r\n return 'QoQ Growth'\r\n }\r\n\r\n return 'YoY Growth'\r\n }, [settings.statementsTimeframe])\r\n\r\n return (\r\n
\r\n \r\n {\r\n toggleSetting(StatementsDataEnum.yoyChange, !settings[StatementsDataEnum.yoyChange])\r\n }}\r\n >\r\n {yoyGrowthLabel}\r\n \r\n {\r\n toggleSetting(StatementsDataEnum.yoyChangePct, !settings[StatementsDataEnum.yoyChangePct])\r\n }}\r\n >\r\n {`${yoyGrowthLabel} %`}\r\n \r\n \r\n\r\n \r\n {\r\n toggleSetting('statementsTimeframe', StatementsTimeframeEnum.annual)\r\n }}\r\n >\r\n Annual\r\n \r\n {\r\n toggleSetting('statementsTimeframe', StatementsTimeframeEnum.quarterly)\r\n }}\r\n >\r\n Quarterly\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nfunction isChartable(label: string) {\r\n switch (label) {\r\n case 'Period End Date':\r\n case 'Period Length':\r\n return false\r\n }\r\n\r\n return true\r\n}\r\n\r\nfunction parseData(data: Record, skipFirst: boolean) {\r\n let parsed: any = {}\r\n Object.keys(data).forEach((key) => {\r\n parsed[key] = data[key]\r\n .map((value, index) => {\r\n if (isChartable(key)) {\r\n let parsedValue\r\n if (value === '') {\r\n parsedValue = null\r\n } else {\r\n parsedValue = parseFloat(value.replace(/,/g, ''))\r\n }\r\n return {\r\n name: data['Period End Date'][index],\r\n value: parsedValue,\r\n }\r\n }\r\n return null\r\n })\r\n .slice(skipFirst ? 1 : 0)\r\n })\r\n\r\n return parsed as Record>\r\n}\r\n\r\nfunction isHighlightRow(label: string) {\r\n switch (label) {\r\n case 'Period End Date':\r\n case 'Total Revenue':\r\n case 'Total Premiums Earned':\r\n case 'Interest Income':\r\n case 'Gross Profit':\r\n case 'Total Operating Expense':\r\n case 'Operating Income':\r\n case 'Net Income Before Taxes':\r\n case 'Net Income':\r\n case 'Total Current Assets':\r\n case 'Total Assets':\r\n case 'Total Current Liabilities':\r\n case 'Total Liabilities':\r\n case 'Total Equity':\r\n case 'Total Liabilities and Equity':\r\n case 'Cash from Operating Activities':\r\n case 'Cash from Investing Activities':\r\n case 'Cash from Financing Activities':\r\n case 'Net Change in Cash':\r\n case 'Price To Earnings Ratio':\r\n case 'Price to Book Ratio':\r\n case 'Price to Free Cash Flow':\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n\r\ntype StatementsTableProps = Pick\r\n\r\nfunction StatementsTable({ data, currency }: StatementsTableProps) {\r\n const { settings } = useFinancialsTableContext()\r\n const skipFirst = data?.['Period End Date'][0] === 'TTM'\r\n const parsedData = data ? parseData(data, skipFirst) : null\r\n\r\n const yoyData = React.useMemo(\r\n () =>\r\n parsedData\r\n ? Object.entries(parsedData).reduce<\r\n Record<\r\n string,\r\n {\r\n change: Array\r\n changePct: Array\r\n }\r\n >\r\n >((acc, [key, values]) => {\r\n if (!isChartable(key)) {\r\n return acc\r\n }\r\n const yoyData: Array<{ change: number | null; changePct: number | null }> = []\r\n let lastValue: number | null = null\r\n\r\n // values are in DESC order\r\n const reversedValues = [...values].reverse()\r\n\r\n reversedValues.forEach(({ value }) => {\r\n const isValidValue = typeof value === 'number'\r\n if (!isValidValue || lastValue === null || lastValue === 0) {\r\n yoyData.push({ change: null, changePct: null })\r\n } else {\r\n const change = value - lastValue\r\n yoyData.push({ change, changePct: (change / Math.abs(lastValue)) * 100 })\r\n }\r\n\r\n if (isValidValue) lastValue = value\r\n })\r\n\r\n const reversedYoyData = [...yoyData].reverse()\r\n return {\r\n ...acc,\r\n [key]: {\r\n change: reversedYoyData.map(({ change }) => change),\r\n changePct: reversedYoyData.map(({ changePct }) => changePct),\r\n },\r\n }\r\n }, {})\r\n : {},\r\n [parsedData]\r\n )\r\n\r\n const yoyGrowthLabel = React.useMemo(() => {\r\n const isQuarterlyTimeframe = settings.statementsTimeframe === StatementsTimeframeEnum.quarterly\r\n\r\n if (isQuarterlyTimeframe) {\r\n return 'QoQ Growth'\r\n }\r\n\r\n return 'YoY Growth'\r\n }, [settings.statementsTimeframe])\r\n\r\n if (!data || !parsedData) return null\r\n\r\n const hasRedesignEnabled = FinvizSettings?.hasRedesignEnabled\r\n const cellClass = classnames('align-top', {\r\n 'snapshot-td2 h-6 !leading-4 !pt-[4px]': !hasRedesignEnabled,\r\n })\r\n const adRowIndexStart = !hasRedesignEnabled && data['Period Length'] ? 2 : 1\r\n\r\n return (\r\n <>\r\n \r\n \r\n {Object.keys(data).map((key, rowIndex) => {\r\n const hasYoYData = !!yoyData[key] && data[key].some((value) => value)\r\n return (\r\n \r\n \r\n {key}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChange] && (\r\n <>\r\n
\r\n {yoyGrowthLabel}\r\n \r\n )}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChangePct] && (\r\n <>\r\n
\r\n {`${yoyGrowthLabel} %`}\r\n \r\n )}\r\n \r\n \r\n {isChartable(key) && }\r\n \r\n {data[key].map((value, index) => {\r\n const changeIndex = skipFirst ? index - 1 : index\r\n const yoyChangeValue = yoyData[key]?.change[changeIndex] ?? null\r\n const yoyChangePctValue = yoyData[key]?.changePct[changeIndex] ?? null\r\n if (!FinvizSettings.hasUserPremium) {\r\n if (rowIndex === adRowIndexStart && index === 3) {\r\n return (\r\n \r\n \r\n \r\n

Upgrade your FINVIZ experience

\r\n

\r\n Join thousands of traders who make more informed decisions with our premium\r\n features. Real-time quotes, advanced visualizations, historical statements, and much\r\n more.\r\n

\r\n \r\n Learn more\r\n \r\n \r\n )\r\n }\r\n if (\r\n index > 2 &&\r\n ((hasRedesignEnabled && key !== 'Period End Date') ||\r\n (key !== 'Period End Date' && key !== 'Period Length'))\r\n ) {\r\n return null\r\n }\r\n }\r\n\r\n return (\r\n \r\n {value}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChange] && (\r\n <>\r\n
\r\n \r\n {shortFormatNumber(yoyChangeValue, { defaultValue: '—' })}\r\n \r\n \r\n )}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChangePct] && (\r\n <>\r\n
\r\n \r\n {yoyChangePctValue?.toFixed(2) ?? '—'}\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\n \r\n \r\n
values in Millions, {currency}
\r\n \r\n )\r\n}\r\n\r\nexport default Statements\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport { decodeQueryString } from '../queryString'\r\n\r\nconst CORRELATION_LINKS_CONTAINER_SELECTOR = 'js-quote-correlation-links-container'\r\nconst MULTITICKER_CHART_ELEMENT_SELECTOR = 'js-multi-ticker-chart'\r\nconst SET_SEARCH_EXT_SELECTOR = 'js-set-search-ext-argument'\r\n\r\nexport function useStockDetailUpdater() {\r\n const location = useLocation()\r\n const { p, ty } = decodeQueryString(location.search)\r\n const isInitializedRef = React.useRef(false)\r\n const [isStockDetailUpdating, setIsStockDetailUpdating] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const multiTickerElements = document.getElementsByClassName(MULTITICKER_CHART_ELEMENT_SELECTOR)\r\n const correlationElements = document.getElementsByClassName(CORRELATION_LINKS_CONTAINER_SELECTOR)\r\n const abortController = new AbortController()\r\n\r\n if (isInitializedRef.current) {\r\n if (multiTickerElements.length > 0) setIsStockDetailUpdating(true)\r\n\r\n fetch(location.pathname + location.search, { signal: abortController.signal })\r\n .then((response) => response.text())\r\n .then((text) => {\r\n const virtualDOM = new DOMParser().parseFromString(text, 'text/html')\r\n\r\n // Multiticker update\r\n if (multiTickerElements.length > 0) {\r\n const multiTickerHtmlElements = Array.from(multiTickerElements) as HTMLImageElement[]\r\n const newMultiTickerHtmlElements = Array.from(\r\n virtualDOM.getElementsByClassName(MULTITICKER_CHART_ELEMENT_SELECTOR)\r\n ) as HTMLImageElement[]\r\n\r\n if (newMultiTickerHtmlElements?.length === multiTickerHtmlElements.length) {\r\n multiTickerHtmlElements.forEach((element, index) => {\r\n element.onload = () => setIsStockDetailUpdating(false)\r\n element.src = newMultiTickerHtmlElements[index].src\r\n })\r\n } else {\r\n setIsStockDetailUpdating(false)\r\n }\r\n }\r\n\r\n // Correlation update\r\n const correlationLinksTableCellHtmlElements = Array.from(correlationElements) as HTMLTableCellElement[]\r\n const newCorrelationLinksTableCellHtmlElements = Array.from(\r\n virtualDOM.getElementsByClassName(CORRELATION_LINKS_CONTAINER_SELECTOR)\r\n ) as HTMLTableCellElement[]\r\n\r\n if (newCorrelationLinksTableCellHtmlElements?.length === correlationLinksTableCellHtmlElements.length) {\r\n correlationLinksTableCellHtmlElements.forEach((element, index) => {\r\n element.innerHTML = newCorrelationLinksTableCellHtmlElements[index].innerHTML\r\n })\r\n }\r\n\r\n // Search function update\r\n const newsearchFunctionWrapperElement = virtualDOM.getElementById(SET_SEARCH_EXT_SELECTOR) as HTMLDivElement\r\n if (newsearchFunctionWrapperElement?.dataset.setSearchExtArgument) {\r\n FinvizSettings.quoteSearchExt = newsearchFunctionWrapperElement.dataset.setSearchExtArgument\r\n }\r\n })\r\n .catch((err) => {\r\n setIsStockDetailUpdating(false)\r\n if (err.name !== 'AbortError') {\r\n Sentry.captureException(err)\r\n }\r\n })\r\n }\r\n isInitializedRef.current = true\r\n return () => {\r\n abortController.abort()\r\n }\r\n // We don't want to trigger effect on any location change just if period or type change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [p, ty])\r\n\r\n return { isStockDetailUpdating }\r\n}\r\n","import { CHART_ELEMENT_ID } from 'finviz-charts/app/constants/common'\r\nimport React, { 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, TIMEFRAME } from '../../main/constants'\r\nimport { useCheckNonIdeaChartMissingConfig } from '../../main/hooks/use-check-non-idea-chart-missing-config'\r\nimport { initIdeaQuotes } from '../../main/modules/charts/util'\r\nimport { ChartLayoutWithGlobalState, FREE_DATE_RANGES, Quote, Theme } from '../charts-lib'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { getInitChartConfig } from '../shared/getInitChartConfig'\r\nimport { ready } from '../shared/ready'\r\nimport ETFHoldings from './etf-holdings'\r\nimport FundamentalCharts from './fundamentalCharts'\r\nimport { Perf } from './quote'\r\nimport { ChartContextQuoteHeader, ManualInitQuoteHeader } from './quote-header'\r\nimport { QUOTE_HEADER_ROOT } from './quote-header/constants'\r\nimport ComparePerfLink from './quote-links/ComparePerfLink'\r\nimport CreateAlertLink from './quote-links/CreateAlertLink'\r\nimport FinancialsLink from './quote-links/FinancialsLink'\r\nimport OptionsChainLink from './quote-links/OptionsChainLink'\r\nimport SaveToPortfolioLink from './quote-links/SaveToPortfolioLink'\r\nimport ShortInterestLink from './quote-links/ShortInterestLink'\r\nimport StockDetailLink from './quote-links/StockDetailLink'\r\nimport { QuoteMenu } from './quote-menu'\r\nimport Statements from './statements'\r\nimport { getChartLayoutSizeConfig, useChartLayoutWidthWatch } from './use-chart-layout-width-watch'\r\nimport { useStockDetailUpdater } from './use-stock-detail-updater'\r\n\r\nif (FinvizSettings.hasUserPremium || FinvizSettings.hasRedesignEnabled) {\r\n import(/* webpackChunkName: \"recent_quotes\" */ '../shared/recent_quotes').then(({ RenderRecentQuotes }) => {\r\n RenderRecentQuotes()\r\n })\r\n}\r\n\r\nconst QuoteMenuPortal = ({ isStockDetailUpdating }: { isStockDetailUpdating: boolean }) => {\r\n const quoteMenuElements = document.getElementsByClassName('quote-menu')\r\n const quoteMenuHtmlElements = Array.from(quoteMenuElements).filter((el) => el instanceof HTMLElement) as HTMLElement[]\r\n\r\n if (quoteMenuHtmlElements.length > 0) {\r\n return (\r\n <>\r\n {quoteMenuHtmlElements.map((quoteMenuElement: HTMLElement, quoteMenuIndex: number) => {\r\n const menuIndex = quoteMenuIndex + 1\r\n return ReactDOM.createPortal(\r\n ,\r\n quoteMenuElement\r\n )\r\n })}\r\n \r\n )\r\n }\r\n return null\r\n}\r\n\r\nconst MENU_LINKS = [\r\n {\r\n selector: 'js-stock-detail-link',\r\n LinkComponent: StockDetailLink,\r\n },\r\n {\r\n selector: 'js-compare-perf-link',\r\n LinkComponent: ComparePerfLink,\r\n },\r\n {\r\n selector: 'js-short-interest-link',\r\n LinkComponent: ShortInterestLink,\r\n },\r\n {\r\n selector: 'js-financials-link',\r\n LinkComponent: FinancialsLink,\r\n },\r\n {\r\n selector: 'js-options-chain-link',\r\n LinkComponent: OptionsChainLink,\r\n },\r\n {\r\n selector: 'js-save-to-portfolio-link',\r\n LinkComponent: SaveToPortfolioLink,\r\n },\r\n {\r\n selector: 'js-create-alert-link',\r\n LinkComponent: CreateAlertLink,\r\n },\r\n]\r\n\r\nconst RenderMenuLinks = () => {\r\n MENU_LINKS.forEach(({ selector, LinkComponent }) => {\r\n const linkElements = document.getElementsByClassName(selector)\r\n const linkHtmlElements = Array.from(linkElements).filter((el) => el instanceof HTMLElement) as HTMLElement[]\r\n\r\n linkHtmlElements.forEach((linkElement, index) => {\r\n const root = ReactDOMClient.createRoot(linkElement)\r\n root.render(\r\n \r\n \r\n \r\n )\r\n })\r\n })\r\n}\r\n\r\nconst ChartLayoutPortal = () => {\r\n useChartLayoutWidthWatch()\r\n const chartEl = document.getElementById(CHART_ELEMENT_ID)\r\n const chartConfig = window.globalChartConfig\r\n const theme = FinvizSettings.hasDarkTheme ? Theme.dark : Theme.light\r\n\r\n if (chartEl && chartConfig) {\r\n const { p = FinvizSettings.defaultPeriod as TIMEFRAME } = decodeQueryString<{ p?: TIMEFRAME }>()\r\n return ReactDOM.createPortal(\r\n ({\r\n ...chart,\r\n dateRange:\r\n FinvizSettings.hasUserPremium || FREE_DATE_RANGES.includes(chart.dateRange ?? '')\r\n ? chart.dateRange\r\n : null,\r\n })),\r\n theme,\r\n }}\r\n parentElement={chartEl}\r\n />,\r\n chartEl\r\n )\r\n }\r\n return null\r\n}\r\n\r\nenum QuotePageType {\r\n StockDetail = 'stockDetail',\r\n Idea = 'idea',\r\n Perf = 'perf',\r\n Options = 'options',\r\n}\r\n\r\nfunction getQuotePageType() {\r\n const { ty, i } = decodeQueryString()\r\n\r\n if (ty === 'p') {\r\n return QuotePageType.Perf\r\n }\r\n if (ty === 'oc') {\r\n return QuotePageType.Options\r\n }\r\n if (i) {\r\n return QuotePageType.Idea\r\n }\r\n\r\n return QuotePageType.StockDetail\r\n}\r\n\r\nfunction getQuoteHeaderElement() {\r\n const quotePageType = getQuotePageType()\r\n\r\n if ([QuotePageType.StockDetail, QuotePageType.Idea].includes(quotePageType)) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n const config = window.globalChartConfig\r\n if (config) {\r\n return \r\n }\r\n\r\n return null\r\n}\r\n\r\nconst ReactComponentsContainer = () => {\r\n const { isStockDetailUpdating } = useStockDetailUpdater()\r\n const quotePageType = getQuotePageType()\r\n const isPerfQuotePage = quotePageType === QuotePageType.Perf\r\n const isOptionsQuotePage = quotePageType === QuotePageType.Options\r\n const hasConfig = window.globalChartConfig\r\n\r\n useCheckNonIdeaChartMissingConfig()\r\n\r\n return (\r\n \r\n {hasConfig || isPerfQuotePage || isOptionsQuotePage ? (\r\n \r\n \r\n \r\n ) : null}\r\n {hasConfig && !isOptionsQuotePage && !isPerfQuotePage && (\r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nready(() => {\r\n const statementsEl = document.getElementById('statements')\r\n if (statementsEl && window['fetch']) {\r\n const root = ReactDOMClient.createRoot(statementsEl)\r\n root.render()\r\n }\r\n\r\n const etfHoldingsEl = document.getElementById('js-etf-holdings')\r\n if (etfHoldingsEl) {\r\n const root = ReactDOMClient.createRoot(etfHoldingsEl)\r\n root.render(\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n const faEl = document.getElementById('js-quote-fa')\r\n if (faEl) {\r\n const root = ReactDOMClient.createRoot(faEl)\r\n root.render()\r\n }\r\n\r\n const reactRootElement = document.getElementById('react-root')\r\n const quoteHeaderRoot = document.getElementById(QUOTE_HEADER_ROOT)\r\n\r\n if (FinvizSettings.quoteData) {\r\n Quote.create(FinvizSettings.quoteData)\r\n }\r\n\r\n if (window.globalChartConfig && !window.globalChartConfig.idea) {\r\n window.globalChartConfig = getInitChartConfig()\r\n }\r\n\r\n if (reactRootElement) {\r\n if (window.globalChartConfig?.ideaQuotes) {\r\n initIdeaQuotes(window.globalChartConfig.ideaQuotes, window.globalChartConfig)\r\n }\r\n\r\n const root = ReactDOMClient.createRoot(reactRootElement)\r\n\r\n root.render(\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n if (quoteHeaderRoot) {\r\n const quoteHeaderElement = getQuoteHeaderElement()\r\n if (quoteHeaderElement) {\r\n const root = ReactDOMClient.createRoot(quoteHeaderRoot)\r\n root.render(quoteHeaderElement)\r\n }\r\n }\r\n\r\n RenderMenuLinks()\r\n\r\n if (document.getElementById('app') && window['FinvizQuoteTickers']) {\r\n const appEl = document.getElementById('app')\r\n const root = ReactDOMClient.createRoot(appEl!)\r\n root.render()\r\n }\r\n})\r\n\r\nconst revealRatingButtonsCollection = document.getElementsByClassName('js-reveal-ratings-button')\r\nconst revealRatingButtons = Array.from(revealRatingButtonsCollection) as HTMLButtonElement[]\r\nrevealRatingButtons.forEach((revealRatingButton) => {\r\n revealRatingButton.onclick = (e) => {\r\n e.preventDefault()\r\n const ratingsRowWithTable = revealRatingButton.previousElementSibling\r\n\r\n ratingsRowWithTable?.querySelectorAll('table tr').forEach((rating, index, rows) => {\r\n if (rating.classList.contains('is-last')) {\r\n rating.classList.remove('is-last')\r\n }\r\n\r\n rating.classList.remove('hidden')\r\n\r\n if (index === rows.length - 1) {\r\n rating.classList.add('is-last')\r\n }\r\n })\r\n\r\n revealRatingButton.classList.add('hidden')\r\n window.gtag && window.gtag('event', 'click', { event_category: 'reveal-ratings' })\r\n }\r\n})\r\n","import React from 'react'\r\n\r\nimport { Dialog, useDialogState } from '../../../main/components/dialog'\r\nimport { Spinner } from '../../../main/components/spinner'\r\nimport { useAsyncModule } from '../../../main/services/async-modules-utils'\r\nimport { decodeQueryString } from '../../queryString'\r\nimport { saveToPortfolioAsyncModule } from '../save-to-portfolio/async-modules'\r\n\r\ntype SaveToPortfolioLinkProps = {\r\n index: number\r\n}\r\n\r\nexport default function SaveToPortfolioLink({ index }: SaveToPortfolioLinkProps) {\r\n const { t } = decodeQueryString()\r\n const urlTicker = t.split(',')[index]\r\n const dialog = useDialogState()\r\n const isVisible = dialog.useState('open')\r\n\r\n const [saveToPortfolioModule] = useAsyncModule({\r\n ...saveToPortfolioAsyncModule,\r\n shouldLoadModule: isVisible,\r\n })\r\n const SaveToPortfolio = saveToPortfolioModule?.SaveToPortfolio\r\n\r\n return (\r\n <>\r\n {\r\n window.gtag?.('event', 'click', { event_category: 'save-to-portfolio' })\r\n if (e.ctrlKey || e.metaKey) return\r\n e.preventDefault() // needed to prevent opening parent link\r\n dialog.show()\r\n }}\r\n >\r\n Save to Portfolio\r\n \r\n \r\n {SaveToPortfolio ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Dialog, useDialogState } from '../../../main/components/dialog'\r\nimport { Spinner } from '../../../main/components/spinner'\r\nimport { useAsyncModule } from '../../../main/services/async-modules-utils'\r\nimport { decodeQueryString } from '../../queryString'\r\nimport { createAlertAsyncModule } from '../create-alert/async-modules'\r\n\r\ntype CreateAlertLinkProps = {\r\n index: number\r\n}\r\n\r\nexport default function CreateAlertLink({ index }: CreateAlertLinkProps) {\r\n const { t } = decodeQueryString()\r\n const urlTicker = t.split(',')[index]\r\n const dialog = useDialogState()\r\n const isVisible = dialog.useState('open')\r\n\r\n const [createAlertModule] = useAsyncModule({\r\n ...createAlertAsyncModule,\r\n shouldLoadModule: isVisible,\r\n })\r\n const CreateAlert = createAlertModule?.CreateAlert\r\n\r\n return (\r\n <>\r\n {\r\n window.gtag?.('event', 'click', { event_category: 'create-alert' })\r\n if (e.ctrlKey || e.metaKey) return\r\n e.preventDefault() // needed to prevent opening parent link\r\n dialog.show()\r\n }}\r\n >\r\n Create Alert\r\n \r\n \r\n {CreateAlert ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import { isForexFuturesCryptoPage } from 'finviz-charts/app/utils/chart'\r\nimport * as React from 'react'\r\n\r\nimport { TIMEFRAME } from '../../main/constants'\r\nimport { useWindowSize } from '../../main/hooks/use-window-size'\r\nimport { getIntradayChartConfig, useChartLayoutGlobalModelAsync, useModelState } from '../charts-lib'\r\n\r\nexport function getChartLayoutSizeConfig(\r\n layoutConfig: Pick<\r\n typeof window.globalChartConfig,\r\n 'idea' | 'barWidth' | 'barMargin' | 'charts' | 'specificChartFunctionality'\r\n >,\r\n p = TIMEFRAME.d\r\n) {\r\n const { clientWidth } = document.body\r\n const { premarket, aftermarket, dateRange } = layoutConfig.charts[0]\r\n const maxChartWidth = clientWidth - 40 // 40px left right chart padding = (19px * 2 for margin left/right) + (1px * 2 for border)\r\n let width = 990\r\n let barWidth = 3\r\n let barMargin = 1\r\n let timeframeMinutes = 0\r\n const isForexFuturesCrypto =\r\n layoutConfig.specificChartFunctionality && isForexFuturesCryptoPage(layoutConfig.specificChartFunctionality)\r\n\r\n switch (p) {\r\n case TIMEFRAME.i1:\r\n timeframeMinutes = 1\r\n barWidth = 1\r\n if (premarket || aftermarket || clientWidth < 1650) {\r\n barMargin = 0\r\n }\r\n break\r\n case TIMEFRAME.i2:\r\n timeframeMinutes = 2\r\n break\r\n case TIMEFRAME.i3:\r\n timeframeMinutes = 3\r\n if (premarket && aftermarket && clientWidth <= 1505) {\r\n barWidth = 2\r\n }\r\n break\r\n case TIMEFRAME.i5:\r\n timeframeMinutes = 5\r\n barWidth = 5\r\n barMargin = clientWidth >= 1100 ? 2 : 1\r\n break\r\n case TIMEFRAME.i10:\r\n width = 1058 // 39bars per day * 5days * 5px per bar + 35px left offset + 48px right offset\r\n barMargin = 0\r\n break\r\n case TIMEFRAME.i15:\r\n case TIMEFRAME.i30:\r\n width = 1019\r\n break\r\n case TIMEFRAME.h:\r\n width = 1008\r\n break\r\n case TIMEFRAME.h2:\r\n case TIMEFRAME.h4:\r\n width = 1020\r\n break\r\n case TIMEFRAME.d:\r\n width = 1282\r\n break\r\n case TIMEFRAME.w:\r\n case TIMEFRAME.m:\r\n width = 994\r\n break\r\n }\r\n\r\n switch (p) {\r\n case TIMEFRAME.i1:\r\n case TIMEFRAME.i2:\r\n case TIMEFRAME.i3:\r\n case TIMEFRAME.i5:\r\n const commonProps = {\r\n timeframeMinutes,\r\n barWidthWithMargin: barWidth + 2 + barMargin,\r\n hasAftermarket: aftermarket,\r\n hasPremarket: premarket,\r\n }\r\n width = getIntradayChartConfig({\r\n ...commonProps,\r\n maxWidth: maxChartWidth,\r\n canCropChart: !dateRange,\r\n }).chartWidthWithOffset\r\n break\r\n }\r\n\r\n // If FFC chart use DAILY type width\r\n if (isForexFuturesCrypto) width = 1282\r\n\r\n // If chart is wider than available space in vieport override width\r\n if (maxChartWidth <= width) {\r\n width = Math.max(994, maxChartWidth)\r\n if (p === TIMEFRAME.d) {\r\n barWidth = 2\r\n barMargin = 0\r\n width = 991\r\n }\r\n }\r\n\r\n // If idea chart or FFC chart use bar configs from layout\r\n if (layoutConfig.idea || isForexFuturesCrypto) {\r\n barWidth = layoutConfig.barWidth\r\n barMargin = layoutConfig.barMargin\r\n }\r\n\r\n return {\r\n width,\r\n barWidth,\r\n barMargin,\r\n }\r\n}\r\n\r\nexport function useChartLayoutWidthWatch() {\r\n const { innerWidth } = useWindowSize()\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const unwatchedFirstChart = React.useMemo(() => chartLayoutModel?.charts().all()[0] ?? null, [chartLayoutModel])\r\n const chartModel = useModelState(unwatchedFirstChart, { watchProperties: ['quote'] })\r\n const quote = useModelState(chartModel?.quote() ?? null, { watchProperties: ['ticker', 'timeframe', 'isFetching'] })\r\n const ideaId = chartLayoutModel?.idea?.id\r\n\r\n React.useEffect(() => {\r\n const settings = !ideaId ? chartLayoutModel?.settings : null\r\n const timeframe = quote?.timeframe\r\n if (chartLayoutModel && timeframe && settings) {\r\n const { width, barWidth, barMargin } = getChartLayoutSizeConfig(chartLayoutModel.toConfig(), timeframe)\r\n const newSettings = JSON.parse(JSON.stringify(settings))\r\n newSettings.ChartSettings.center.barWidth = barWidth\r\n newSettings.IndicatorSettings.center.barWidth = barWidth\r\n newSettings.ChartSettings.center.barMargin = barMargin\r\n newSettings.IndicatorSettings.center.barMargin = barMargin\r\n chartLayoutModel.updateAttributes({ width, settings: newSettings })\r\n }\r\n // We don't want to trigger this effect on any chartLayoutModel change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [quote?.premarket, quote?.aftermarket, quote?.timeframe, ideaId, innerWidth])\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n throttleWaitInMs?: number\r\n isWatching?: boolean\r\n}\r\n\r\nexport function useWindowSize({ throttleWaitInMs = 300, isWatching = true }: Props = {}) {\r\n const [size, setSize] = React.useState({\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!isWatching) return\r\n\r\n const handleResize = throttle(() => {\r\n setSize({\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n }, throttleWaitInMs)\r\n\r\n window.addEventListener('resize', handleResize)\r\n\r\n return () => {\r\n handleResize.cancel()\r\n window.removeEventListener('resize', handleResize)\r\n }\r\n }, [throttleWaitInMs, isWatching])\r\n\r\n return size\r\n}\r\n","import { SpecificChartFunctionality } from '../../main/constants'\r\nimport { ChartConfigChartPaneElement, Instrument, LayoutType, ScaleType, TIMEFRAME, Theme } from '../charts-lib'\r\nimport { getParsedCookies } from './cookie'\r\n\r\ninterface PaneElementProps extends ChartConfigChartPaneElement {\r\n label?: string\r\n fromDate?: string\r\n toDate?: string\r\n min?: number\r\n tickers: string[]\r\n}\r\n\r\ninterface StaticChartConfigProps {\r\n width?: number\r\n height?: number\r\n ticker: string\r\n timeframe: TIMEFRAME\r\n paneElements: PaneElementProps[]\r\n specificChartFunctionality?: SpecificChartFunctionality\r\n colorsOverride?: Array\r\n theme?: Theme\r\n colors?: ReturnType\r\n refreshData?: boolean\r\n}\r\n\r\nexport function getStaticChartConfig({\r\n width = 800,\r\n height = 400,\r\n ticker,\r\n timeframe,\r\n paneElements,\r\n specificChartFunctionality = SpecificChartFunctionality.default,\r\n colorsOverride,\r\n theme,\r\n colors = getCustomColorsFromCookies(),\r\n refreshData = false,\r\n}: StaticChartConfigProps) {\r\n return {\r\n layout: LayoutType['1h1v'],\r\n width,\r\n height,\r\n barWidth: 1,\r\n barMargin: 0,\r\n scrollable: false,\r\n editable: false,\r\n specificChartFunctionality,\r\n colorsOverride,\r\n theme,\r\n colors,\r\n charts: [\r\n {\r\n width: 0,\r\n premarket: false,\r\n aftermarket: false,\r\n dateRange: null,\r\n height,\r\n timeframe,\r\n scale: ScaleType.Linear,\r\n ticker: ticker,\r\n leftOffset: 0,\r\n instrument: Instrument.Stock,\r\n refreshData,\r\n stretch: true,\r\n panes: [\r\n {\r\n height,\r\n elements: paneElements,\r\n },\r\n ],\r\n },\r\n ],\r\n }\r\n}\r\n\r\nexport function getCustomColorsFromCookies() {\r\n try {\r\n return JSON.parse(getParsedCookies('customColors') as string)\r\n } catch {\r\n return undefined\r\n }\r\n}\r\n","import * as React from 'react'\r\n\r\nimport * as tracking from '../tracking'\r\n\r\nexport const IC_PUBLISHER_ID = 'df0d0d52-cc7f-11e8-82a5-0abbb61c4a6a'\r\n\r\nenum AdTagName {\r\n IC_TickerInContent = 'IC_D_3x3',\r\n IC_MapsLeftRail = 'IC_D_125x125',\r\n IC_Statements = 'IC_D_300x60',\r\n IC_Groups = 'IC_D_300x250',\r\n}\r\n\r\nconst tagDefinition = {\r\n [AdTagName.IC_TickerInContent]: { placements: 3, style: { width: 970, minHeight: 250 } },\r\n [AdTagName.IC_MapsLeftRail]: { placements: 2, style: { width: 125, minHeight: 125 } },\r\n [AdTagName.IC_Statements]: { placements: 1, style: { width: 300, minHeight: 60 } },\r\n [AdTagName.IC_Groups]: { placements: 1, style: { width: 336, minHeight: 280 } },\r\n}\r\n\r\nconst hasInvestingChannelAds = tracking.getAdsProvider() === tracking.AdsProvider.InvestingChannel\r\n\r\n/**\r\n * Get create/destroy methods to control ads insertion\r\n */\r\nexport function getInvestingChannelPage() {\r\n var page: ICPageReturn\r\n\r\n function create() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n let config = window['FINVIZ_IC_UAT_CONFIG'] ?? {}\r\n page = window.InvestingChannel?.UAT.Run(IC_PUBLISHER_ID, config)\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n function destroy() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n page?.destroy()\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n return { create, destroy }\r\n}\r\n\r\n/**\r\n * Hook which recreates ads on deps change (SPA navigation,…)\r\n */\r\nexport function useInvestingChannelAds(deps: unknown[] = []) {\r\n React.useLayoutEffect(() => {\r\n const page = getInvestingChannelPage()\r\n\r\n page.create()\r\n\r\n return () => page.destroy()\r\n // eslint cannot statically check the dependencies and complains about it\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, deps)\r\n\r\n return hasInvestingChannelAds\r\n}\r\n\r\ninterface AdTagProps extends Omit, 'name'> {\r\n /**\r\n * Name of the ad tag\r\n */\r\n name: keyof typeof AdTagName\r\n\r\n /**\r\n * Manually set the placement position for this tag\r\n *\r\n * @default 1\r\n */\r\n position?: number\r\n\r\n /**\r\n * Additional class names for the wrapper div\r\n */\r\n className?: string\r\n}\r\n\r\nexport function AdTag({ name, position = 1, ...props }: AdTagProps) {\r\n const tagName = AdTagName[name]\r\n const tagProps = tagDefinition[tagName]\r\n const placementName = `${tagName}_${Math.min(Math.max(position, 1), tagProps.placements)}`\r\n\r\n if (!hasInvestingChannelAds) return null\r\n\r\n return
\r\n}\r\n","import { ShrtflConfig } from 'finviz-charts/app/indicators/configs/shrtfl'\r\nimport { ShrtraConfig } from 'finviz-charts/app/indicators/configs/shrtra'\r\nimport { Position } from 'finviz-charts/types/shared'\r\n\r\nimport { QuoteRoutes } from '../../main/constants'\r\nimport { Utils, convertTa } from '../charts-lib'\r\nimport { decodeQueryString } from '../queryString'\r\n\r\nexport function getInitChartConfig() {\r\n const { ty } = decodeQueryString<{ ty?: string }>()\r\n window.globalChartConfig.scrollable = false\r\n if (FinvizSettings.hasUserPremium) {\r\n window.globalChartConfig.scrollable = window.globalChartConfig.editable || !Utils.isMobile()\r\n }\r\n\r\n if (FinvizSettings.TA) {\r\n let finvizSettingsTa = FinvizSettings.TA\r\n const COTs = FinvizSettings.COTs\r\n if (ty === QuoteRoutes.ShortInterest) {\r\n finvizSettingsTa = {\r\n ...finvizSettingsTa,\r\n overlays: [],\r\n indicators: [\r\n {\r\n name: ShrtflConfig.abbreviation,\r\n parameters: '',\r\n position: Position.Below,\r\n },\r\n {\r\n name: ShrtraConfig.abbreviation,\r\n parameters: '',\r\n position: Position.Below,\r\n },\r\n ],\r\n }\r\n }\r\n convertTa.mergeChartAndTAConfig(window.globalChartConfig, finvizSettingsTa, COTs ? { COTs } : undefined)\r\n }\r\n\r\n return window.globalChartConfig\r\n}\r\n","export enum StatsQuery {\r\n Weighting = 'w',\r\n ChartType = 'ty',\r\n}\r\n\r\nexport enum StatsWeight {\r\n Count = 'c',\r\n MarketCap = 'm',\r\n}\r\n\r\nexport enum StatsChartType {\r\n Pie = 'p',\r\n Bar = 'b',\r\n Table = 't',\r\n}\r\n\r\nexport interface StatsDataRow {\r\n label: string\r\n value: number\r\n}\r\n\r\nexport interface StatsGroup {\r\n [StatsWeight.Count]: StatsDataRow[]\r\n [StatsWeight.MarketCap]: StatsDataRow[]\r\n}\r\n\r\nexport interface StatsData {\r\n sectors: StatsGroup\r\n marketCap: StatsGroup\r\n countries: StatsGroup\r\n industries: StatsGroup\r\n}\r\n\r\nexport type StatsRounding = 'regular' | 'none'\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonComponentProps, ButtonProps } from './button'\r\nimport { Paragraph } from './typography'\r\n\r\ninterface Props {\r\n children: (React.ReactElement | null)[]\r\n label: string\r\n size?: ButtonProps['size']\r\n rounding?: ButtonProps['rounding']\r\n}\r\n\r\nexport function ChipSwitch({ children, label, size, rounding }: Props) {\r\n return (\r\n
\r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n\r\n {React.Children.map(children, (child: React.ReactElement | null) => {\r\n if (React.isValidElement(child) && child.type === Button) {\r\n return React.cloneElement(child, {\r\n size,\r\n rounding,\r\n theme: child.props.theme ?? 'chipTransparent',\r\n className: classnames(child.props.className, {\r\n // @todo - these style should be applied globally onto all chipTransparent buttons\r\n '!text-gray-600 dark:!text-gray-400': !child.props.active,\r\n '!text-gray-800 dark:!text-white': child.props.active,\r\n }),\r\n })\r\n }\r\n\r\n return child\r\n })}\r\n
\r\n )\r\n}\r\n\r\nexport const ChipSwitchButton = Button\r\n","import * as React from 'react'\r\n\r\nexport interface DelayedProps {\r\n /**\r\n * The delay in milliseconds before the component is rendered.\r\n *\r\n * @default 300\r\n */\r\n delay?: number\r\n\r\n /**\r\n * Delay in milliseconds before rendering timeout state.\r\n */\r\n timeout?: number\r\n\r\n /**\r\n * Throw on timeout (suspense)\r\n */\r\n throwOnTimeout?: boolean\r\n\r\n /**\r\n * Component visible during the delay.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n delayComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when timeout is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n timeoutComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when delay is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n children?: React.ReactNode\r\n}\r\n\r\nexport function Delayed({\r\n delay = 300,\r\n timeout = 0,\r\n throwOnTimeout = false,\r\n delayComponent,\r\n timeoutComponent,\r\n children,\r\n}: DelayedProps) {\r\n const [visible, setVisible] = React.useState(false)\r\n const [hasTimedOut, setHasTimedOut] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const visibilityTimeout = window.setTimeout(() => setVisible(true), delay)\r\n\r\n let failedTimeout: number\r\n if (timeout > 0) {\r\n failedTimeout = window.setTimeout(() => {\r\n setHasTimedOut(true)\r\n if (throwOnTimeout) throw new Error()\r\n }, timeout)\r\n }\r\n\r\n return () => {\r\n clearTimeout(visibilityTimeout)\r\n clearTimeout(failedTimeout)\r\n }\r\n }, [delay, timeout, throwOnTimeout])\r\n\r\n if (!visible) return <>{delayComponent}\r\n\r\n if (hasTimedOut) {\r\n return <>{timeoutComponent}\r\n }\r\n\r\n return <>{children}\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { getCookie } from '../../../app/shared/cookie'\r\nimport { setCookieRequest } from '../../services/api'\r\n\r\n/*\r\n * Context.\r\n */\r\nexport type FinancialsTableSettingsType = Record\r\n\r\nexport type FinancialsTableScrollInfo = {\r\n yPosition: number\r\n}\r\n\r\nexport interface FinancialsTableContextProps {\r\n settings: T\r\n setSettings: (settings: T) => void\r\n scrollInfo?: FinancialsTableScrollInfo\r\n}\r\n\r\nexport const FinancialsTableContext = React.createContext>({\r\n settings: {},\r\n setSettings: () => null,\r\n scrollInfo: undefined,\r\n})\r\n\r\n/*\r\n * Hook.\r\n */\r\n\r\nexport function useFinancialsTableContext() {\r\n return React.useContext(FinancialsTableContext) as FinancialsTableContextProps\r\n}\r\n\r\n/*\r\n * Component.\r\n */\r\n\r\ninterface Props {\r\n children: React.ReactNode\r\n defaultSettings: FinancialsTableSettingsType\r\n cookieKey: string\r\n}\r\n\r\nexport const FinancialsTableContextProvider = ({ children, cookieKey, defaultSettings }: Props) => {\r\n const [scrollInfo, setScrollInfo] = React.useState()\r\n const [settings, setSettings] = React.useState(() => {\r\n const cookieValue = decodeURIComponent(getCookie(cookieKey))\r\n if (cookieValue.length === 0) return defaultSettings\r\n\r\n try {\r\n return { ...defaultSettings, ...JSON.parse(cookieValue) } as FinancialsTableSettingsType\r\n } catch (_) {\r\n return defaultSettings\r\n }\r\n })\r\n\r\n const handleSetSettingsChange = (settings: FinancialsTableSettingsType) => {\r\n setScrollInfo({ yPosition: window.scrollY })\r\n setSettings(settings)\r\n setCookieRequest(cookieKey, JSON.stringify(settings))\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\n\r\nimport { TableAlign, TableBody, TableCell, TableRow } from '../Table'\r\nimport { Checkbox } from '../checkbox'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsTableRowProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n data: RowDataType\r\n columns: ColumnDefinition[]\r\n subColumns: Record[]>\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n isFirst: boolean\r\n isLast: boolean\r\n}\r\n\r\nexport default function FinancialsTableRow<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n data,\r\n columns,\r\n subColumns,\r\n onVisibilityChange,\r\n isFirst,\r\n isLast,\r\n}: FinancialsTableRowProps) {\r\n const { id, label, isSelected, color, subData } = data\r\n\r\n return (\r\n {\r\n onVisibilityChange(id, !isSelected)\r\n }}\r\n >\r\n \r\n \r\n {label}}\r\n className=\"cursor-pointer\"\r\n color={color}\r\n size=\"none\"\r\n />\r\n \r\n\r\n {columns.map((column) => (\r\n \r\n {column.renderColumn(data)}\r\n \r\n ))}\r\n \r\n {subData.map((item, index, array) => (\r\n \r\n \r\n {item.label}\r\n \r\n {subColumns[item.id].map((column) => (\r\n \r\n {column.renderColumn(item as SubColumnDefinition)}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Table } from '../Table'\r\nimport FinancialsTableRow from './FinancialsTableRow'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsTableProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n tableHead?: React.ReactNode\r\n tableFooter?: React.ReactNode\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n subColumns: Record[]>\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n}\r\n\r\nexport default function FinancialsTable<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n tableHead,\r\n tableFooter,\r\n columns,\r\n subColumns,\r\n data,\r\n onVisibilityChange,\r\n}: FinancialsTableProps) {\r\n return (\r\n \r\n {tableHead}\r\n {data.map((row, index) => (\r\n \r\n ))}\r\n {tableFooter}\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport FinancialsTable from './FinancialsTable'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsWidgetProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n children: React.ReactNode\r\n header?: React.ReactNode\r\n tableHead?: React.ReactNode\r\n tableFooter?: React.ReactNode\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n subColumns: Record[]>\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n}\r\n\r\nexport function FinancialsWidget<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n children,\r\n tableHead,\r\n tableFooter,\r\n columns,\r\n subColumns,\r\n header,\r\n data,\r\n onVisibilityChange,\r\n}: FinancialsWidgetProps) {\r\n return (\r\n
\r\n
\r\n {header}\r\n {children}\r\n
\r\n \r\n
\r\n )\r\n}\r\n","import { FinancialsRowValue } from './types'\r\n\r\nexport function getYoYData(data: T[]) {\r\n const yoyData: Array<{ year: string; change: number | null; changePct: number | null }> = []\r\n const valuesHelpArray: number[] = []\r\n\r\n const valuesArray = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n\r\n valuesArray.forEach(({ year, value }, i) => {\r\n if (typeof value !== 'number') return\r\n valuesHelpArray.push(value)\r\n\r\n const prev = valuesHelpArray[i - 1]\r\n if (prev === undefined || value === 0 || prev === 0) {\r\n yoyData.push({ year, change: null, changePct: null })\r\n } else {\r\n yoyData.push({ year, change: value - prev, changePct: ((value - prev) / Math.abs(prev)) * 100 })\r\n }\r\n })\r\n\r\n return yoyData.reduce<{\r\n change: Record\r\n changePct: Record\r\n }>(\r\n (acc, { year, change, changePct }) => ({\r\n change: {\r\n ...acc.change,\r\n [year]: change,\r\n },\r\n changePct: {\r\n ...acc.changePct,\r\n [year]: changePct,\r\n },\r\n }),\r\n { change: {}, changePct: {} }\r\n )\r\n}\r\n\r\nexport function getIsCompact(numOfCols: number, barWidth: number) {\r\n // ~1400 is max container width\r\n const maxContainerWidth = Math.min(window.innerWidth, 1400)\r\n\r\n const barsWindowWidthRatio = (barWidth * numOfCols) / maxContainerWidth\r\n return barsWindowWidthRatio > 0.65\r\n}\r\n","import * as React from 'react'\r\n\r\nexport type NotificationContextType = ReturnType\r\n\r\nexport enum NotificationPosition {\r\n TopLeft,\r\n TopRight,\r\n BottomLeft,\r\n BottomRight,\r\n}\r\n\r\nexport interface NotificationOptions {\r\n position?: NotificationPosition\r\n inline?: boolean\r\n}\r\n\r\nexport const NotificationContext = React.createContext<{\r\n show: (element: JSX.Element, options?: NotificationOptions) => void\r\n hide: () => void\r\n}>({\r\n show: () => {},\r\n hide: () => {},\r\n})\r\n\r\nexport function useNotification() {\r\n return React.useContext(NotificationContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { getVisualViewport, useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { NotificationContext, NotificationOptions, NotificationPosition } from './hooks'\r\n\r\ninterface NotificationState {\r\n element: JSX.Element\r\n options: Partial\r\n}\r\n\r\nexport function NotificationWrapper(props: React.PropsWithChildren) {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [notification, setNotification] = React.useState(null)\r\n const { viewport, setViewport } = useVisualViewport({ enabled: !!notification })\r\n\r\n const context = React.useRef({\r\n show: (element: JSX.Element, options: Partial = {}) => {\r\n setViewport(() => getVisualViewport(window.visualViewport))\r\n setNotification({ element, options })\r\n setIsOpen(true)\r\n },\r\n hide: () => setIsOpen(false),\r\n })\r\n\r\n const positionClass = React.useMemo(() => {\r\n const { position = NotificationPosition.BottomLeft } = notification?.options ?? {}\r\n return {\r\n '[--inset-t:1rem] items-start pt-inset-top': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.TopRight,\r\n ].includes(position),\r\n '[--inset-r:1rem] justify-end landscape-secondary:pr-inset-right': [\r\n NotificationPosition.TopRight,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-b:1rem] items-end pb-inset-bottom': [\r\n NotificationPosition.BottomLeft,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-l:1rem] justify-start landscape-primary:pl-inset-left': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.BottomLeft,\r\n ].includes(position),\r\n }\r\n }, [notification?.options])\r\n\r\n const WrapperComponent = React.useMemo(\r\n () => (notification?.options.inline ? React.Fragment : Ariakit.Portal),\r\n [notification?.options.inline]\r\n )\r\n\r\n return (\r\n \r\n {props.children}\r\n {isOpen && (\r\n \r\n \r\n {notification?.element}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { NotificationContextType, useNotification } from './hooks'\r\n\r\nexport function withNotificationContext(\r\n WrappedComponent: React.ComponentType\r\n) {\r\n const displayName = WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\r\n const WithNotificationContext = (props: Omit) => {\r\n const notification = useNotification()\r\n return \r\n }\r\n\r\n WithNotificationContext.displayName = `withNotificationContext(${displayName})`\r\n\r\n return WithNotificationContext\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { useNotification } from './hooks'\r\n\r\ninterface NotificationProps {\r\n className?: string\r\n /**\r\n * Default button text\r\n * @default Close\r\n */\r\n closeText?: string\r\n\r\n /**\r\n * Custom buttons. Overrides `closeText`\r\n */\r\n actions?: JSX.Element\r\n\r\n /**\r\n * When set, the notification will automatically close\r\n */\r\n timeoutInMs?: number\r\n}\r\n\r\nexport function Notification({\r\n className,\r\n closeText = 'Close',\r\n actions,\r\n timeoutInMs,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const notification = useNotification()\r\n\r\n React.useEffect(() => {\r\n let timeoutId: number\r\n if (timeoutInMs) {\r\n timeoutId = window.setTimeout(() => {\r\n notification.hide()\r\n }, timeoutInMs)\r\n }\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n }\r\n }\r\n }, [notification, timeoutInMs])\r\n\r\n return (\r\n \r\n
{children}
\r\n
\r\n {actions ?? (\r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport { decodeQueryString } from '../../app/queryString'\r\n\r\nexport function useCheckNonIdeaChartMissingConfig() {\r\n const location = useLocation()\r\n\r\n React.useEffect(() => {\r\n // Navigation (back/forward) from nonexisting idea page doesn't fully reload the page\r\n // So if we're on non idea page and have still isIdeaNotFoundPage flag we want to reload the page\r\n const { i } = decodeQueryString(location.search)\r\n if (!i && window.isIdeaNotFoundPage) {\r\n window.location.reload()\r\n }\r\n }, [location.search])\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nexport function getVisualViewport(visualViewport: VisualViewport | null) {\r\n const width = visualViewport?.width ?? window.innerWidth\r\n const height = visualViewport?.height ?? window.innerHeight\r\n const scale = visualViewport?.scale ?? 1\r\n\r\n return {\r\n top: visualViewport?.offsetTop ?? 0,\r\n left: visualViewport?.offsetLeft ?? 0,\r\n scale: Math.round((1 / scale) * 100) / 100,\r\n width: Math.round(width * scale),\r\n height: Math.round(height * scale),\r\n unscaledWidth: width,\r\n unscaledHeight: height,\r\n }\r\n}\r\n\r\nexport function useVisualViewport({ enabled = true, onScroll = true }: { enabled?: boolean; onScroll?: boolean } = {}) {\r\n const [viewport, setViewport] = React.useState(getVisualViewport(window.visualViewport))\r\n\r\n React.useEffect(() => {\r\n if (!enabled) return\r\n\r\n const handleChange = throttle((ev: Event) => {\r\n const viewport = ev.currentTarget as VisualViewport\r\n if (viewport) {\r\n setViewport(() => getVisualViewport(viewport))\r\n }\r\n }, 50)\r\n\r\n window.visualViewport?.addEventListener('resize', handleChange)\r\n if (onScroll) window.visualViewport?.addEventListener('scroll', handleChange)\r\n handleChange({ currentTarget: window.visualViewport } as Event)\r\n\r\n return () => {\r\n window.visualViewport?.removeEventListener('resize', handleChange)\r\n window.visualViewport?.removeEventListener('scroll', handleChange)\r\n }\r\n }, [enabled, onScroll])\r\n\r\n return React.useMemo(() => ({ viewport, setViewport }), [viewport])\r\n}\r\n","import Quote from 'finviz-charts/app/models/quote'\r\n\r\nimport { convertTa } from '../../../app/charts-lib'\r\nimport { ObjectHash } from '../../components/types'\r\nimport { getInstrumentForTicker } from '../../util'\r\n\r\nconst PADDING = 2 // Border widths\r\n\r\nexport function getChartsDimensions(chartElementId: string) {\r\n const containerElement = document.getElementById(chartElementId)\r\n\r\n const box = containerElement?.getBoundingClientRect()\r\n\r\n return {\r\n width: Math.max((box?.width ?? 0) - PADDING, 0),\r\n height: Math.max((box?.height ?? 0) - PADDING, 0),\r\n }\r\n}\r\n\r\nexport function getChartConfig(idea: any, chartElementId: string) {\r\n const chartsDimensions = getChartsDimensions(chartElementId)\r\n\r\n if (idea) {\r\n const chartConfig = Object.assign({}, FinvizChartsSettings.ideaChart, {\r\n colors: FinvizChartsSettings.colors,\r\n width: chartsDimensions.width,\r\n height: chartsDimensions.height,\r\n scrollable: true,\r\n editors: ['layout', 'settings', 'publish', 'tools'],\r\n })\r\n for (let i = 0; i < chartConfig.charts.length; i++) {\r\n if (!chartConfig.charts[i].instrument) {\r\n chartConfig.charts[i].instrument = 'stock'\r\n }\r\n }\r\n\r\n return chartConfig\r\n }\r\n\r\n return {\r\n newCharts: true,\r\n width: chartsDimensions.width,\r\n height: chartsDimensions.height,\r\n barWidth: 3,\r\n barMargin: 1,\r\n scrollable: true,\r\n alignChartsToRight: true,\r\n theme: FinvizChartsSettings.theme,\r\n colors: FinvizChartsSettings.colors,\r\n editors: ['layout', 'settings', 'publish', 'tools'],\r\n layout: FinvizChartsSettings.layout,\r\n charts: FinvizChartsSettings.tickers.map(function (ticker: string, index: number) {\r\n return {\r\n timeframe: FinvizChartsSettings.periods[index],\r\n dateRange: FinvizChartsSettings.ranges[index],\r\n scale: FinvizChartsSettings.taConfig.scale || 'linear',\r\n ticker: ticker,\r\n instrument: getInstrumentForTicker(ticker),\r\n premarket: FinvizChartsSettings.taConfig.premarket,\r\n aftermarket: FinvizChartsSettings.taConfig.aftermarket,\r\n hasChartEvents: FinvizChartsSettings.taConfig.hasChartEvents,\r\n refreshData: true,\r\n panes: convertTa.getPanes(FinvizChartsSettings.taConfig),\r\n }\r\n }),\r\n }\r\n}\r\n\r\nexport const initIdeaQuotes = (quotes: Array, ideaChart: ObjectHash) => {\r\n const hasPatterns = JSON.stringify(ideaChart).includes('patterns')\r\n\r\n for (let i = 0; i < quotes.length; i++) {\r\n const quote = quotes[i]\r\n\r\n if (quote.timeframe === 'i1' || quote.timeframe === 'i3' || quote.timeframe === 'i5' || quote.timeframe === 'i15') {\r\n if (!quote.hasOwnProperty('drawMinutesPerDay')) {\r\n quote.drawMinutesPerDay = quote.timeframe === 'i15' ? 390 : 420\r\n }\r\n\r\n if (!quote.hasOwnProperty('marketStartMinutes')) {\r\n quote.marketStartMinutes = quote.timeframe === 'i15' ? 570 : 540\r\n }\r\n\r\n if (!quote.hasOwnProperty('premarketLengthMinutes')) {\r\n quote.premarketLengthMinutes = quote.timeframe === 'i15' ? 0 : 30\r\n }\r\n\r\n if (!quote.hasOwnProperty('aftermarketLengthMinutes')) {\r\n quote.aftermarketLengthMinutes = 0\r\n }\r\n }\r\n\r\n if (!quote.hasOwnProperty('hasPatterns')) {\r\n quote.hasPatterns = hasPatterns\r\n }\r\n\r\n quote.ideaID = ideaChart.idea.id\r\n\r\n Quote.create(quote)\r\n }\r\n}\r\n","/**\n * React Router DOM v6.26.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nexport { UNSAFE_ErrorResponseImpl } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && (\n // Ignore everything but left clicks\n !target || target === \"_self\") &&\n // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0);\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `
`/`` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\"Cannot submit a