{"version":3,"file":"quote.125815ba.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/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.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/main/components/delayed.tsx","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/modules/charts/util.ts","webpack://@finviz/website/../node_modules/react-router-dom/dist/index.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 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 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 containerRef = React.createRef()\r\n\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 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(\r\n {\r\n loading: false,\r\n },\r\n () => {\r\n this.containerRef.current?.style.removeProperty('min-height')\r\n }\r\n )\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 _hideDatePicker = (type: string) => {\r\n var state: any = {}\r\n state[type + 'DatePickerOpen'] = false\r\n this.setState(state)\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\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 * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\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 { 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 { StockDetailTimeframeBar } from '../../../app/charts-lib'\r\nimport { Button } from '../../../main/components/button'\r\nimport { NotificationWrapper } from '../../../main/components/notification'\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","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as d3 from 'd3'\r\nimport * as React from 'react'\r\nimport { Component, RefObject, createRef } from 'react'\r\n\r\nimport { Icon } from '../../main/components/icon'\r\nimport { getValue, setValue } from '../../main/services/local-storage'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { AdTag, getInvestingChannelPage } from '../shared/components/Ads'\r\nimport BarChartBig from './barChart'\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\ninterface StatementsState {\r\n source: 'F' | 'R'\r\n sheet: string\r\n timeframe: string\r\n currency: string | null\r\n data: Record | null\r\n}\r\n\r\nconst DEFAULT_SOURCE = 'F'\r\n\r\nclass Statements extends Component {\r\n declare pageRef: ReturnType\r\n\r\n state: StatementsState = {\r\n source: this._getDefaultSource(),\r\n sheet: 'I',\r\n timeframe: 'A',\r\n currency: null,\r\n data: null,\r\n }\r\n\r\n componentDidMount() {\r\n this._fetch()\r\n this.pageRef = getInvestingChannelPage()\r\n this.pageRef.create()\r\n }\r\n\r\n componentWillUnmount() {\r\n this.pageRef?.destroy()\r\n }\r\n\r\n render() {\r\n const { data } = this.state\r\n\r\n if (data === null) {\r\n // || (data && data.error)) {\r\n return null\r\n }\r\n\r\n const hasData = !data.error\r\n const hasRedesignEnabled = FinvizSettings?.hasRedesignEnabled\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 this.setState(\r\n {\r\n source: source,\r\n },\r\n () => {\r\n this._fetch()\r\n }\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 {this._renderSheetLink('I', 'income statement')} | {this._renderSheetLink('B', 'balance sheet')} |{' '}\r\n {this._renderSheetLink('C', 'cash flow')}\r\n \r\n \r\n \r\n {this._renderTimeframeLink('A', 'annual')} | {this._renderTimeframeLink('Q', 'quarterly')}\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\n _renderSheetLink(id: string, text: string) {\r\n const { sheet } = this.state\r\n return (\r\n {\r\n e.preventDefault()\r\n this.setState(\r\n {\r\n sheet: id,\r\n },\r\n () => {\r\n this._fetch()\r\n }\r\n )\r\n }}\r\n >\r\n {text}\r\n \r\n )\r\n }\r\n\r\n _renderTimeframeLink(id: string, text: string) {\r\n const { timeframe } = this.state\r\n return (\r\n {\r\n e.preventDefault()\r\n this.setState(\r\n {\r\n timeframe: id,\r\n },\r\n () => {\r\n this._fetch()\r\n }\r\n )\r\n }}\r\n >\r\n {text}\r\n \r\n )\r\n }\r\n\r\n async _fetch() {\r\n const { source, sheet, timeframe } = this.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 this.setState({\r\n currency: json.currency,\r\n data: json.error ? json : json.data,\r\n })\r\n } catch {}\r\n }\r\n\r\n _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\n\r\nfunction StatementsTable({ data, currency }: StatementsState) {\r\n if (!data) return null\r\n\r\n function 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\n function 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\n function 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\n const hasRedesignEnabled = FinvizSettings?.hasRedesignEnabled\r\n const cellClass = hasRedesignEnabled ? '' : 'snapshot-td2'\r\n\r\n const skipFirst = data['Period End Date'][0] === 'TTM'\r\n const parsedData = parseData(data, skipFirst)\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 \r\n {key}\r\n \r\n {isChartable(key) && }\r\n \r\n {data[key].map((value, index) => {\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 \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\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 CreateAlertLink from './quote-links/CreateAlertLink'\r\nimport SaveToPortfolioLink from './quote-links/SaveToPortfolioLink'\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-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\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 { Utils, convertTa } from '../charts-lib'\r\n\r\nexport function getInitChartConfig() {\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 const COTs = FinvizSettings.COTs\r\n convertTa.mergeChartAndTAConfig(window.globalChartConfig, FinvizSettings.TA, COTs ? { COTs } : undefined)\r\n }\r\n\r\n return window.globalChartConfig\r\n}\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\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 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.16.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 { UNSAFE_mapRouteProperties, Router, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, UNSAFE_DataRouterStateContext, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, unstable_useBlocker, UNSAFE_DataRouterContext } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, RouterProvider, 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, resolvePath, unstable_useBlocker, useActionData, useAsyncError, useAsyncValue, 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 } 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