{"version":3,"file":"quote.0755f3b7.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/backtest/utils.tsx","webpack://@finviz/website/./js/app/bubbles/selects.ts","webpack://@finviz/website/./js/app/bubbles/utils.ts","webpack://@finviz/website/./js/app/quote/utils.ts","webpack://@finviz/website/./js/app/quote/QuoteContext.tsx","webpack://@finviz/website/./js/app/quote/components/Portal.tsx","webpack://@finviz/website/./js/main/hooks/useToggleStaticElement.ts","webpack://@finviz/website/./js/app/quote/components/Navigation/QuoteLinksWrapper.tsx","webpack://@finviz/website/./js/app/quote/hooks/use-chart-timeframe-path-watch.ts","webpack://@finviz/website/./js/app/quote/components/Navigation/QuoteLinkComponent.tsx","webpack://@finviz/website/./js/app/quote/components/Navigation/CreateAlertLink.tsx","webpack://@finviz/website/./js/app/quote/components/Navigation/SaveToPortfolioLink.tsx","webpack://@finviz/website/./js/app/quote/Navigation.tsx","webpack://@finviz/website/./js/app/quote/QuoteChart.tsx","webpack://@finviz/website/./js/app/quote/components/ComparePerformance.tsx","webpack://@finviz/website/../node_modules/recharts/es6/cartesian/CartesianGrid.js","webpack://@finviz/website/./js/app/quote/components/InsiderTradingChart/constants.ts","webpack://@finviz/website/./js/app/quote/components/InsiderTradingChart/ChartTooltip.tsx","webpack://@finviz/website/./js/app/quote/components/InsiderTradingChart/InsiderVolumeBar.tsx","webpack://@finviz/website/./js/app/quote/components/InsiderTradingChart/InsiderTradingVolumeChart.tsx","webpack://@finviz/website/./js/app/quote/components/InsiderTradingChart/utils.ts","webpack://@finviz/website/./js/main/components/QuotePrice.tsx","webpack://@finviz/website/./js/app/quote/components/Price/hooks.ts","webpack://@finviz/website/./js/app/quote/components/Price/QuoteHeader.tsx","webpack://@finviz/website/../node_modules/date-fns/esm/isBefore/index.js","webpack://@finviz/website/./js/app/quote/components/barChart.tsx","webpack://@finviz/website/./js/app/quote/components/Statements/constants.ts","webpack://@finviz/website/./js/app/quote/components/Statements/statements.tsx","webpack://@finviz/website/./js/app/quote/components/StaticChartHeader.tsx","webpack://@finviz/website/./js/app/quote/components/fundamentalCharts.tsx","webpack://@finviz/website/./js/app/quote/hooks/use-stock-detail-updater.tsx","webpack://@finviz/website/./js/app/quote/modules/etf-holdings/async-modules.ts","webpack://@finviz/website/./js/app/quote/modules/etf-holdings/index.tsx","webpack://@finviz/website/./js/app/quote/index.tsx","webpack://@finviz/website/./js/app/quote/types.ts","webpack://@finviz/website/./js/app/shared/chartLayoutConfig.ts","webpack://@finviz/website/./js/app/shared/components/Ads.tsx","webpack://@finviz/website/./js/main/components/ChipSwitch.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/FinancialsTableStickyColumnWrapper.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/hooks/use-check-non-idea-chart-missing-config.ts","webpack://@finviz/website/./js/main/modules/charts/util.ts","webpack://@finviz/website/../node_modules/recharts/es6/cartesian/Area.js","webpack://@finviz/website/../node_modules/recharts/es6/cartesian/ZAxis.js","webpack://@finviz/website/../node_modules/recharts/es6/util/ScatterUtils.js","webpack://@finviz/website/../node_modules/recharts/es6/cartesian/Scatter.js","webpack://@finviz/website/../node_modules/recharts/es6/chart/ComposedChart.js","webpack://@finviz/website/../node_modules/recharts/es6/component/ResponsiveContainer.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","import { SelectItem } from '../../main/components'\r\n\r\nexport type BubbleSelectOption = SelectItem & { format?: string }\r\n\r\nexport const ETF_MARKET_CAP_LABEL = 'Assets under management'\r\nexport const MARKET_CAP_VALUE = 'marketCap'\r\nexport const ETF_SECTOR_VALUE = 'financial'\r\nexport const ETF_INDUSTRY_IDS = [\r\n 'exchangetradedfund',\r\n 'closedendfunddebt',\r\n 'closedendfundequity',\r\n 'closedendfundforeign',\r\n]\r\n\r\nvar xys = [\r\n { value: 'sector', label: 'Sector' },\r\n { value: 'ticker', label: 'Ticker' },\r\n { value: 'order', label: 'Order' },\r\n { value: MARKET_CAP_VALUE, label: 'Market Capitalization' },\r\n { value: 'dividendYield', label: 'Dividend Yield', format: '%' },\r\n { value: 'payoutRatio', label: 'Payout Ratio', format: '%' },\r\n { value: 'employees', label: 'Employees' },\r\n { value: 'income', label: 'Income' },\r\n { value: 'sales', label: 'Sales' },\r\n { value: 'epsQoQ', label: 'EPS growth Q/Q', format: '%' },\r\n { value: 'epsYoY', label: 'EPS growth this Y/Y', format: '%' },\r\n { value: 'epsYoY1', label: 'EPS growth next Y/Y', format: '%' },\r\n { value: 'eps5Years', label: 'EPS growth past 5 years', format: '%' },\r\n { value: 'estLTGrowth', label: 'EPS growth long term est.', format: '%' },\r\n { value: 'salesQoQ', label: 'Sales growth Q/Q', format: '%' },\r\n { value: 'sales5Years', label: 'Sales growth past 5 years', format: '%' },\r\n { value: 'PE', label: 'P/E' },\r\n { value: 'forwardPE', label: 'Forward P/E' },\r\n { value: 'PEG', label: 'PEG' },\r\n { value: 'PS', label: 'P/S' },\r\n { value: 'PB', label: 'P/B' },\r\n { value: 'PC', label: 'P/C' },\r\n { value: 'PFCF', label: 'P/FCF' },\r\n { value: 'roi', label: 'ROI' },\r\n { value: 'roe', label: 'ROE' },\r\n { value: 'roa', label: 'ROA' },\r\n { value: 'grossMargin', label: 'Gross Margin', format: '%' },\r\n { value: 'operMargin', label: 'Operating Margin', format: '%' },\r\n { value: 'netMargin', label: 'Profit Margin', format: '%' },\r\n { value: 'curRatio', label: 'Current Ratio' },\r\n { value: 'quickRatio', label: 'Quick Ratio' },\r\n { value: 'ltdebtEq', label: 'Long Term Debt to Equity' },\r\n { value: 'debtEq', label: 'Total Debt to Equity' },\r\n { value: 'lastChange', label: 'Change', format: '%' },\r\n { value: 'changeOpen', label: 'Change from Open', format: '%' },\r\n { value: 'gap', label: 'Gap', format: '%' },\r\n { value: 'lastVolume', label: 'Volume' },\r\n { value: 'lastVolumeUsd', label: 'Volume USD' },\r\n { value: 'averageVolume', label: 'Average Volume' },\r\n { value: 'averageVolumeUsd', label: 'Average Volume USD' },\r\n { value: 'relativeVolume', label: 'Relative Volume' },\r\n { value: 'perf1w', label: '1 Week Performance', format: '%' },\r\n { value: 'perf4w', label: '1 Month Performance', format: '%' },\r\n { value: 'perf13w', label: '3 Month Performance', format: '%' },\r\n { value: 'perf26w', label: '6 Month Performance', format: '%' },\r\n { value: 'perf52w', label: '1 Year Performance', format: '%' },\r\n { value: 'perfYtd', label: 'Year To Date Performance', format: '%' },\r\n { value: 'volatility1w', label: 'Weekly Volatility', format: '%' },\r\n { value: 'volatility4w', label: 'Monthly Volatlity', format: '%' },\r\n { value: 'beta', label: 'Beta' },\r\n { value: 'low52w', label: '52-Week Low', format: '%' },\r\n { value: 'high52w', label: '52-Week High', format: '%' },\r\n { value: 'sma20', label: 'Simple Moving Average 20', format: '%' },\r\n { value: 'sma50', label: 'Simple Moving Average 50', format: '%' },\r\n { value: 'sma200', label: 'Simple Moving Average 200', format: '%' },\r\n { value: 'rsi', label: 'Relative Strength Index 14' },\r\n { value: 'insiderOwn', label: 'Insider Ownership', format: '%' },\r\n { value: 'insiderTrans', label: 'Insider Transactions', format: '%' },\r\n { value: 'instOwn', label: 'Institutional Ownership', format: '%' },\r\n { value: 'instTrans', label: 'Institutional Transactions', format: '%' },\r\n { value: 'shortInterestShare', label: 'Short Interest Share', format: '%' },\r\n { value: 'shortInterestRatio', label: 'Short Interest Ratio' },\r\n { value: 'consRecom', label: 'Analyst Recommendation' },\r\n { value: 'targetPrice', label: 'Target Price', format: '%' },\r\n]\r\n\r\nvar sizes = [\r\n { value: 'const', label: 'Constant' },\r\n { value: 'marketCap', label: 'Market Capitalization' },\r\n { value: 'lastVolume', label: 'Volume' },\r\n { value: 'lastVolumeUsd', label: 'Volume USD' },\r\n { value: 'averageVolume', label: 'Average Volume' },\r\n { value: 'averageVolumeUsd', label: 'Average Volume USD' },\r\n { value: 'relativeVolume', label: 'Relative Volume' },\r\n]\r\n\r\nvar colors = [\r\n { value: 'const', label: 'Constant' },\r\n { value: 'sector', label: 'Sector' },\r\n { value: 'industry', label: 'Industry' },\r\n { value: 'country', label: 'Country' },\r\n { value: 'marketCap', label: 'Market Capitalization' },\r\n { value: 'lastChange', label: 'Change', format: '%' },\r\n { value: 'perf1w', label: '1 Week Performance', format: '%' },\r\n { value: 'perf4w', label: '1 Month Performance', format: '%' },\r\n { value: 'perf13w', label: '3 Month Performance', format: '%' },\r\n { value: 'perf26w', label: '6 Month Performance', format: '%' },\r\n { value: 'perf52w', label: '1 Year Performance', format: '%' },\r\n { value: 'perfYtd', label: 'Year To Date Performance', format: '%' },\r\n { value: 'lastVolume', label: 'Volume' },\r\n { value: 'lastVolumeUsd', label: 'Volume USD' },\r\n { value: 'averageVolume', label: 'Average Volume' },\r\n { value: 'averageVolumeUsd', label: 'Average Volume USD' },\r\n { value: 'relativeVolume', label: 'Relative Volume' },\r\n { value: 'consRecom', label: 'Analyst Recommendation' },\r\n]\r\n\r\nvar indexes = [\r\n { value: 'any', label: 'Any' },\r\n { value: 'sp500', label: 'S&P 500' },\r\n { value: 'ndx', label: 'NASDAQ 100' },\r\n { value: 'dji', label: 'DJIA' },\r\n { value: 'rut', label: 'RUSSELL 2000' },\r\n]\r\n\r\nvar sectors = [\r\n { value: '', label: 'Any' },\r\n { value: 'basicmaterials', label: 'Basic Materials' },\r\n { value: 'communicationservices', label: 'Communication Services' },\r\n { value: 'consumercyclical', label: 'Consumer Cyclical' },\r\n { value: 'consumerdefensive', label: 'Consumer Defensive' },\r\n { value: 'energy', label: 'Energy' },\r\n { value: ETF_SECTOR_VALUE, label: 'Financial' },\r\n { value: 'healthcare', label: 'Healthcare' },\r\n { value: 'industrials', label: 'Industrials' },\r\n { value: 'realestate', label: 'Real Estate' },\r\n { value: 'technology', label: 'Technology' },\r\n { value: 'utilities', label: 'Utilities' },\r\n]\r\n\r\nvar industries = [\r\n { value: '', label: 'Any' },\r\n { value: 'stocksonly', label: 'Stocks only (ex-Funds)' },\r\n { value: 'exchangetradedfund', label: 'Exchange Traded Fund' },\r\n { value: 'advertisingagencies', label: 'Advertising Agencies' },\r\n { value: 'aerospacedefense', label: 'Aerospace & Defense' },\r\n { value: 'agriculturalinputs', label: 'Agricultural Inputs' },\r\n { value: 'airlines', label: 'Airlines' },\r\n { value: 'airportsairservices', label: 'Airports & Air Services' },\r\n { value: 'aluminum', label: 'Aluminum' },\r\n { value: 'apparelmanufacturing', label: 'Apparel Manufacturing' },\r\n { value: 'apparelretail', label: 'Apparel Retail' },\r\n { value: 'assetmanagement', label: 'Asset Management' },\r\n { value: 'automanufacturers', label: 'Auto Manufacturers' },\r\n { value: 'autoparts', label: 'Auto Parts' },\r\n { value: 'autotruckdealerships', label: 'Auto & Truck Dealerships' },\r\n { value: 'banksdiversified', label: 'Banks - Diversified' },\r\n { value: 'banksregional', label: 'Banks - Regional' },\r\n { value: 'beveragesbrewers', label: 'Beverages - Brewers' },\r\n { value: 'beveragesnonalcoholic', label: 'Beverages - Non-Alcoholic' },\r\n { value: 'beverageswineriesdistilleries', label: 'Beverages - Wineries & Distilleries' },\r\n { value: 'biotechnology', label: 'Biotechnology' },\r\n { value: 'broadcasting', label: 'Broadcasting' },\r\n { value: 'buildingmaterials', label: 'Building Materials' },\r\n { value: 'buildingproductsequipment', label: 'Building Products & Equipment' },\r\n { value: 'businessequipmentsupplies', label: 'Business Equipment & Supplies' },\r\n { value: 'capitalmarkets', label: 'Capital Markets' },\r\n { value: 'chemicals', label: 'Chemicals' },\r\n { value: 'closedendfunddebt', label: 'Closed-End Fund - Debt' },\r\n { value: 'closedendfundequity', label: 'Closed-End Fund - Equity' },\r\n { value: 'closedendfundforeign', label: 'Closed-End Fund - Foreign' },\r\n { value: 'cokingcoal', label: 'Coking Coal' },\r\n { value: 'communicationequipment', label: 'Communication Equipment' },\r\n { value: 'computerhardware', label: 'Computer Hardware' },\r\n { value: 'confectioners', label: 'Confectioners' },\r\n { value: 'conglomerates', label: 'Conglomerates' },\r\n { value: 'consultingservices', label: 'Consulting Services' },\r\n { value: 'consumerelectronics', label: 'Consumer Electronics' },\r\n { value: 'copper', label: 'Copper' },\r\n { value: 'creditservices', label: 'Credit Services' },\r\n { value: 'departmentstores', label: 'Department Stores' },\r\n { value: 'diagnosticsresearch', label: 'Diagnostics & Research' },\r\n { value: 'discountstores', label: 'Discount Stores' },\r\n { value: 'drugmanufacturersgeneral', label: 'Drug Manufacturers - General' },\r\n { value: 'drugmanufacturersspecialtygeneric', label: 'Drug Manufacturers - Specialty & Generic' },\r\n { value: 'educationtrainingservices', label: 'Education & Training Services' },\r\n { value: 'electricalequipmentparts', label: 'Electrical Equipment & Parts' },\r\n { value: 'electroniccomponents', label: 'Electronic Components' },\r\n { value: 'electronicgamingmultimedia', label: 'Electronic Gaming & Multimedia' },\r\n { value: 'electronicscomputerdistribution', label: 'Electronics & Computer Distribution' },\r\n { value: 'engineeringconstruction', label: 'Engineering & Construction' },\r\n { value: 'entertainment', label: 'Entertainment' },\r\n { value: 'farmheavyconstructionmachinery', label: 'Farm & Heavy Construction Machinery' },\r\n { value: 'farmproducts', label: 'Farm Products' },\r\n { value: 'financialconglomerates', label: 'Financial Conglomerates' },\r\n { value: 'financialdatastockexchanges', label: 'Financial Data & Stock Exchanges' },\r\n { value: 'fooddistribution', label: 'Food Distribution' },\r\n { value: 'footwearaccessories', label: 'Footwear & Accessories' },\r\n { value: 'furnishingsfixturesappliances', label: 'Furnishings, Fixtures & Appliances' },\r\n { value: 'gambling', label: 'Gambling' },\r\n { value: 'gold', label: 'Gold' },\r\n { value: 'grocerystores', label: 'Grocery Stores' },\r\n { value: 'healthcareplans', label: 'Healthcare Plans' },\r\n { value: 'healthinformationservices', label: 'Health Information Services' },\r\n { value: 'homeimprovementretail', label: 'Home Improvement Retail' },\r\n { value: 'householdpersonalproducts', label: 'Household & Personal Products' },\r\n { value: 'industrialdistribution', label: 'Industrial Distribution' },\r\n { value: 'informationtechnologyservices', label: 'Information Technology Services' },\r\n { value: 'infrastructureoperations', label: 'Infrastructure Operations' },\r\n { value: 'insurancebrokers', label: 'Insurance Brokers' },\r\n { value: 'insurancediversified', label: 'Insurance - Diversified' },\r\n { value: 'insurancelife', label: 'Insurance - Life' },\r\n { value: 'insurancepropertycasualty', label: 'Insurance - Property & Casualty' },\r\n { value: 'insurancereinsurance', label: 'Insurance - Reinsurance' },\r\n { value: 'insurancespecialty', label: 'Insurance - Specialty' },\r\n { value: 'integratedfreightlogistics', label: 'Integrated Freight & Logistics' },\r\n { value: 'internetcontentinformation', label: 'Internet Content & Information' },\r\n { value: 'internetretail', label: 'Internet Retail' },\r\n { value: 'leisure', label: 'Leisure' },\r\n { value: 'lodging', label: 'Lodging' },\r\n { value: 'lumberwoodproduction', label: 'Lumber & Wood Production' },\r\n { value: 'luxurygoods', label: 'Luxury Goods' },\r\n { value: 'marineshipping', label: 'Marine Shipping' },\r\n { value: 'medicalcarefacilities', label: 'Medical Care Facilities' },\r\n { value: 'medicaldevices', label: 'Medical Devices' },\r\n { value: 'medicaldistribution', label: 'Medical Distribution' },\r\n { value: 'medicalinstrumentssupplies', label: 'Medical Instruments & Supplies' },\r\n { value: 'metalfabrication', label: 'Metal Fabrication' },\r\n { value: 'mortgagefinance', label: 'Mortgage Finance' },\r\n { value: 'oilgasdrilling', label: 'Oil & Gas Drilling' },\r\n { value: 'oilgasep', label: 'Oil & Gas E&P' },\r\n { value: 'oilgasequipmentservices', label: 'Oil & Gas Equipment & Services' },\r\n { value: 'oilgasintegrated', label: 'Oil & Gas Integrated' },\r\n { value: 'oilgasmidstream', label: 'Oil & Gas Midstream' },\r\n { value: 'oilgasrefiningmarketing', label: 'Oil & Gas Refining & Marketing' },\r\n { value: 'otherindustrialmetalsmining', label: 'Other Industrial Metals & Mining' },\r\n { value: 'otherpreciousmetalsmining', label: 'Other Precious Metals & Mining' },\r\n { value: 'packagedfoods', label: 'Packaged Foods' },\r\n { value: 'packagingcontainers', label: 'Packaging & Containers' },\r\n { value: 'paperpaperproducts', label: 'Paper & Paper Products' },\r\n { value: 'personalservices', label: 'Personal Services' },\r\n { value: 'pharmaceuticalretailers', label: 'Pharmaceutical Retailers' },\r\n { value: 'pollutiontreatmentcontrols', label: 'Pollution & Treatment Controls' },\r\n { value: 'publishing', label: 'Publishing' },\r\n { value: 'railroads', label: 'Railroads' },\r\n { value: 'realestatedevelopment', label: 'Real Estate - Development' },\r\n { value: 'realestatediversified', label: 'Real Estate - Diversified' },\r\n { value: 'realestateservices', label: 'Real Estate Services' },\r\n { value: 'recreationalvehicles', label: 'Recreational Vehicles' },\r\n { value: 'reitdiversified', label: 'REIT - Diversified' },\r\n { value: 'reithealthcarefacilities', label: 'REIT - Healthcare Facilities' },\r\n { value: 'reithotelmotel', label: 'REIT - Hotel & Motel' },\r\n { value: 'reitindustrial', label: 'REIT - Industrial' },\r\n { value: 'reitmortgage', label: 'REIT - Mortgage' },\r\n { value: 'reitoffice', label: 'REIT - Office' },\r\n { value: 'reitresidential', label: 'REIT - Residential' },\r\n { value: 'reitretail', label: 'REIT - Retail' },\r\n { value: 'reitspecialty', label: 'REIT - Specialty' },\r\n { value: 'rentalleasingservices', label: 'Rental & Leasing Services' },\r\n { value: 'residentialconstruction', label: 'Residential Construction' },\r\n { value: 'resortscasinos', label: 'Resorts & Casinos' },\r\n { value: 'restaurants', label: 'Restaurants' },\r\n { value: 'scientifictechnicalinstruments', label: 'Scientific & Technical Instruments' },\r\n { value: 'securityprotectionservices', label: 'Security & Protection Services' },\r\n { value: 'semiconductorequipmentmaterials', label: 'Semiconductor Equipment & Materials' },\r\n { value: 'semiconductors', label: 'Semiconductors' },\r\n { value: 'shellcompanies', label: 'Shell Companies' },\r\n { value: 'silver', label: 'Silver' },\r\n { value: 'softwareapplication', label: 'Software - Application' },\r\n { value: 'softwareinfrastructure', label: 'Software - Infrastructure' },\r\n { value: 'solar', label: 'Solar' },\r\n { value: 'specialtybusinessservices', label: 'Specialty Business Services' },\r\n { value: 'specialtychemicals', label: 'Specialty Chemicals' },\r\n { value: 'specialtyindustrialmachinery', label: 'Specialty Industrial Machinery' },\r\n { value: 'specialtyretail', label: 'Specialty Retail' },\r\n { value: 'staffingemploymentservices', label: 'Staffing & Employment Services' },\r\n { value: 'steel', label: 'Steel' },\r\n { value: 'telecomservices', label: 'Telecom Services' },\r\n { value: 'textilemanufacturing', label: 'Textile Manufacturing' },\r\n { value: 'thermalcoal', label: 'Thermal Coal' },\r\n { value: 'tobacco', label: 'Tobacco' },\r\n { value: 'toolsaccessories', label: 'Tools & Accessories' },\r\n { value: 'travelservices', label: 'Travel Services' },\r\n { value: 'trucking', label: 'Trucking' },\r\n { value: 'uranium', label: 'Uranium' },\r\n { value: 'utilitiesdiversified', label: 'Utilities - Diversified' },\r\n { value: 'utilitiesindependentpowerproducers', label: 'Utilities - Independent Power Producers' },\r\n { value: 'utilitiesregulatedelectric', label: 'Utilities - Regulated Electric' },\r\n { value: 'utilitiesregulatedgas', label: 'Utilities - Regulated Gas' },\r\n { value: 'utilitiesregulatedwater', label: 'Utilities - Regulated Water' },\r\n { value: 'utilitiesrenewable', label: 'Utilities - Renewable' },\r\n { value: 'wastemanagement', label: 'Waste Management' },\r\n]\r\n\r\nvar marketCaps = [\r\n { value: '', label: 'Any' },\r\n { value: 'mega', label: 'Mega ($200bln and more)' },\r\n { value: 'large', label: 'Large ($10bln to $200bln)' },\r\n { value: 'mid', label: 'Mid ($2bln to $10bln)' },\r\n { value: 'small', label: 'Small ($300mln to $2bln)' },\r\n { value: 'micro', label: 'Micro ($50mln to $300mln)' },\r\n { value: 'nano', label: 'Nano (under $50mln)' },\r\n { value: 'largeover', label: '+Large (over $10bln)' },\r\n { value: 'midover', label: '+Mid (over $2bln)' },\r\n { value: 'smallover', label: '+Small (over $300mln)' },\r\n { value: 'microover', label: '+Micro (over $50mln)' },\r\n { value: 'largeunder', label: '-Large (under $200bln)' },\r\n { value: 'midunder', label: '-Mid (under $10bln)' },\r\n { value: 'smallunder', label: '-Small (under $2bln)' },\r\n { value: 'microunder', label: '-Micro (under $300mln)' },\r\n]\r\n\r\nvar averageVolumes = [\r\n { value: '', label: 'Any' },\r\n { value: 'u50', label: 'Under 50K' },\r\n { value: 'u100', label: 'Under 100K' },\r\n { value: 'u500', label: 'Under 500K' },\r\n { value: 'u750', label: 'Under 750K' },\r\n { value: 'u1000', label: 'Under 1M' },\r\n { value: 'o50', label: 'Over 50K' },\r\n { value: 'o100', label: 'Over 100K' },\r\n { value: 'o200', label: 'Over 200K' },\r\n { value: 'o300', label: 'Over 300K' },\r\n { value: 'o400', label: 'Over 400K' },\r\n { value: 'o500', label: 'Over 500K' },\r\n { value: 'o750', label: 'Over 750K' },\r\n { value: 'o1000', label: 'Over 1M' },\r\n { value: 'o2000', label: 'Over 2M' },\r\n { value: '100to500', label: '100K to 500K' },\r\n { value: '100to1000', label: '100K to 1M' },\r\n { value: '500to1000', label: '500K to 1M' },\r\n { value: '500to10000', label: '500K to 10M' },\r\n]\r\n\r\nexport { xys, sizes, colors, indexes, sectors, industries, marketCaps, averageVolumes }\r\n","import * as d3 from 'd3'\r\n\r\nimport { ScaleId } from '../maps/types'\r\nimport { decodeQueryString as decode, encodeQueryString } from '../queryString'\r\nimport { GradientDefinition, bubbleGradients } from '../shared/gradients'\r\nimport {\r\n BubbleSelectOption,\r\n averageVolumes,\r\n colors,\r\n indexes,\r\n industries,\r\n marketCaps,\r\n sectors,\r\n sizes,\r\n xys,\r\n} from './selects'\r\nimport { BubbleNode } from './types'\r\n\r\nconst DEFAULT_COLOR_SCALE = [\r\n '#ff4146',\r\n '#ea580c',\r\n '#ff9300',\r\n '#84cc16',\r\n '#34aa00',\r\n '#00d16d',\r\n '#14b8a6',\r\n '#18a3e0',\r\n '#5963d1',\r\n '#4f46e5',\r\n '#9425c2',\r\n '#c026d3',\r\n '#ff80ff',\r\n '#ff5888',\r\n '#ffe100',\r\n]\r\n\r\nfunction getValueWithFallback(values: BubbleSelectOption[], value: string | undefined, fallback: string) {\r\n const v = values.find((v) => v.value === value)\r\n\r\n return v?.value ?? fallback\r\n}\r\n\r\nfunction getDefaultValues(query: Record = {}, extendedFilters: boolean = false) {\r\n let state: Record = {\r\n x: getValueWithFallback(xys, query.x, 'sector'),\r\n y: getValueWithFallback(xys, query.y, 'lastChange'),\r\n size: getValueWithFallback(sizes, query.size, 'marketCap'),\r\n color: getValueWithFallback(colors, query.color, 'sector'),\r\n idx: getValueWithFallback(indexes, query.idx, 'sp500'),\r\n rangeX: query.rangeX ?? '',\r\n rangeY: query.rangeY ?? '',\r\n }\r\n\r\n if (extendedFilters) {\r\n state = {\r\n ...state,\r\n sec: getValueWithFallback(sectors, query.sec, ''),\r\n ind: getValueWithFallback(industries, query.ind, ''),\r\n cap: getValueWithFallback(marketCaps, query.cap, ''),\r\n sh_avgvol: getValueWithFallback(averageVolumes, query.sh_avgvol, ''),\r\n tickers: query.tickers ?? '',\r\n excludeTickers: query.excludeTickers ?? '',\r\n }\r\n }\r\n\r\n return state\r\n}\r\n\r\nfunction decodeQueryString(extendedFilters?: boolean) {\r\n return getDefaultValues(decode(), extendedFilters)\r\n}\r\n\r\nvar percentile = function (arr: number[], excelPercentile: number) {\r\n var sequence = arr.concat().sort(function (a, b) {\r\n return a - b\r\n })\r\n var N = sequence.length\r\n var n = (N - 1) * excelPercentile + 1\r\n\r\n if (n === 1) {\r\n return sequence[0]\r\n } else if (n === N) {\r\n return sequence[N - 1]\r\n } else {\r\n var k = ~~n\r\n var d = n - k\r\n return sequence[k - 1] + d * (sequence[k] - sequence[k - 1])\r\n }\r\n}\r\n\r\nvar getXScale = function (data: BubbleNode[], width: number) {\r\n var x = d3\r\n .scaleLinear()\r\n .range([0, width])\r\n .domain(d3.extent(data, (d: BubbleNode) => d.x) as [number, number])\r\n .nice(10)\r\n if (data.length === 1) {\r\n x.domain([x.domain()[0] * 0.9, x.domain()[0] * 1.1]).nice(10)\r\n }\r\n return x\r\n}\r\n\r\nvar getYScale = function (data: BubbleNode[], height: number) {\r\n var y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain(d3.extent(data, (d: BubbleNode) => d.y) as [number, number])\r\n .nice(10)\r\n if (data.length === 1) {\r\n y.domain([y.domain()[0] * 0.9, y.domain()[0] * 1.1]).nice(10)\r\n }\r\n return y\r\n}\r\n\r\nvar _colorScales: Record = {}\r\nfunction getColorScale(data: BubbleNode[], colorOption: string, colorScale = DEFAULT_COLOR_SCALE) {\r\n if (_colorScales[colorOption]) {\r\n return _colorScales[colorOption]\r\n }\r\n\r\n let c: any\r\n let colors: number[]\r\n let min: number\r\n let max: number\r\n let gradient: GradientDefinition\r\n let linearScale: d3.ScaleLinear\r\n switch (colorOption) {\r\n case 'exchange':\r\n case 'sector':\r\n case 'industry':\r\n case 'country':\r\n c = d3.scaleOrdinal().range(colorScale)\r\n break\r\n case 'marketCap':\r\n case 'averageVolume':\r\n case 'relativeVolume':\r\n case 'lastVolume':\r\n case 'averageVolumeUsd':\r\n case 'lastVolumeUsd':\r\n colors = data.map((d) => Number(d.color)).filter(Number.isFinite)\r\n min = percentile(colors, 0.05)\r\n max = percentile(colors, 0.95)\r\n gradient = bubbleGradients['_relvol']\r\n linearScale = d3\r\n .scaleLinear()\r\n .domain([min, max])\r\n .range([0, gradient.colors.length - 1])\r\n c = (d?: number) => {\r\n if (typeof d === 'undefined' || d === null) {\r\n return gradient.nullColor\r\n }\r\n if (d > max) d = max\r\n if (d < min) d = min\r\n var i = Math.round(linearScale(d))\r\n return gradient.colors[i]\r\n }\r\n c.domain = () => [min, max]\r\n break\r\n case 'lastChange':\r\n case 'perf1w':\r\n case 'perf4w':\r\n case 'perf13w':\r\n case 'perf26w':\r\n case 'perf52w':\r\n case 'perfYtd':\r\n colors = data.map((d) => Number(d.color)).filter(Number.isFinite)\r\n\r\n min = percentile(colors, 0.05)\r\n max = percentile(colors, 0.95)\r\n max = Math.max(Math.abs(min), Math.abs(max))\r\n min = -max\r\n\r\n gradient = bubbleGradients[ScaleId.DayPerf]\r\n linearScale = d3\r\n .scaleLinear()\r\n .domain([min, max])\r\n .range([0, gradient.colors.length - 1])\r\n c = (d?: number) => {\r\n if (typeof d === 'undefined' || d === null) {\r\n return gradient.nullColor\r\n }\r\n if (d > max) d = max\r\n if (d < min) d = min\r\n var i = Math.round(linearScale(d))\r\n return gradient.colors[i]\r\n }\r\n c.domain = () => [min, max]\r\n break\r\n case 'consRecom':\r\n min = 5\r\n max = 1\r\n gradient = bubbleGradients[ScaleId.DayPerf]\r\n linearScale = d3\r\n .scaleLinear()\r\n .domain([min, max])\r\n .range([0, gradient.colors.length - 1])\r\n c = (d?: number) => {\r\n if (typeof d === 'undefined' || d === null) {\r\n return gradient.nullColor\r\n }\r\n if (d < max) d = max\r\n if (d > min) d = min\r\n var i = Math.round(linearScale(d))\r\n return gradient.colors[i]\r\n }\r\n c.domain = () => [min, max]\r\n break\r\n case 'const':\r\n default:\r\n c = function () {\r\n return '#18a3e0'\r\n }\r\n c.domain = () => ['Constant']\r\n break\r\n }\r\n\r\n if (data.length > 0) {\r\n _colorScales[colorOption] = c\r\n }\r\n return c\r\n}\r\n\r\nvar getSizeScale = function (data: BubbleNode[]) {\r\n var r = d3\r\n .scaleSqrt()\r\n .range([0, 40])\r\n .domain(d3.extent(data, (d: BubbleNode) => d.size) as [number, number])\r\n .nice(10)\r\n\r\n if (r.domain()[0] === 1 && r.domain()[1] === 1) {\r\n r.domain([0, 50])\r\n }\r\n return r\r\n}\r\n\r\nvar getScales = function (\r\n data: BubbleNode[],\r\n width: number,\r\n height: number,\r\n colorOption: string,\r\n colorScale?: string[]\r\n) {\r\n return {\r\n x: getXScale(data, width),\r\n y: getYScale(data, height),\r\n r: getSizeScale(data),\r\n c: getColorScale(data, colorOption, colorScale),\r\n }\r\n}\r\n\r\nfunction generatePresetUrl(presetConfig: Record, baseQuery?: URLSearchParams) {\r\n const query = encodeQueryString({ ...Object.fromEntries(baseQuery ?? []), ...presetConfig })\r\n\r\n return `${window.location.pathname}?${query}`\r\n}\r\n\r\nfunction formatValue(value: number | string, format?: string, finiteFormatting?: boolean) {\r\n if (finiteFormatting && !Number.isFinite(value)) {\r\n return '—'\r\n }\r\n\r\n if (typeof value === 'number') {\r\n const absValue = Math.abs(value)\r\n\r\n if (absValue < 1000) {\r\n value = value.toFixed(2)\r\n } else if (absValue < 1000 * 1000) {\r\n value = (value / 1000).toFixed(2) + 'K'\r\n } else if (absValue < 1000 * 1000 * 1000) {\r\n value = (value / 1000000).toFixed(2) + 'M'\r\n } else {\r\n value = (value / 1000000000).toFixed(2) + 'B'\r\n }\r\n }\r\n\r\n if (format === '%') {\r\n value += '%'\r\n }\r\n\r\n return value\r\n}\r\n\r\nexport {\r\n getDefaultValues,\r\n encodeQueryString,\r\n decodeQueryString,\r\n percentile,\r\n getXScale,\r\n getYScale,\r\n getColorScale,\r\n getSizeScale,\r\n getScales,\r\n generatePresetUrl,\r\n formatValue,\r\n}\r\n","import { QuoteSubview, QuoteView } from './types'\r\n\r\n// Keep in sync with FullViewUrlQuery.cs\r\nexport function getQuoteSubview(type: QuoteSubview | QuoteView) {\r\n return Object.values(QuoteSubview).find((value) => value === type) ?? null\r\n}\r\n\r\n// Keep in sync with FullViewUrlQuery.cs\r\nexport function getQuoteView(type: QuoteView | QuoteSubview) {\r\n switch (getQuoteSubview(type)) {\r\n case QuoteSubview.Dividends:\r\n case QuoteSubview.Eearnings:\r\n case QuoteSubview.Revenue:\r\n return QuoteView.Financials\r\n case QuoteSubview.OptionsChain:\r\n case QuoteSubview.OptionsVolatility:\r\n return QuoteView.Options\r\n case null:\r\n return QuoteView.ChartDetail // No subview is active == chart detail\r\n default:\r\n return null // Eg. Short interest doesn’t belong to any parent group\r\n }\r\n}\r\n","import * as React from 'react'\r\nimport { useSearchParams } from 'react-router-dom'\r\n\r\nimport { TIMEFRAME } from '../charts-lib'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from './types'\r\nimport { getQuoteSubview, getQuoteView } from './utils'\r\n\r\nexport const QuoteContext = React.createContext<{\r\n index: number\r\n ticker: string\r\n period: TIMEFRAME\r\n view: QuoteView | null\r\n subview: QuoteSubview | null\r\n}>({ index: -1, ticker: '', period: TIMEFRAME.d, view: null, subview: null })\r\n\r\nexport function QuoteContextProvider({\r\n ticker,\r\n index,\r\n children,\r\n}: React.PropsWithChildren<{ ticker: string; index: number }>) {\r\n const [query] = useSearchParams()\r\n const type = query.get(QuoteQuery.Type) as QuoteView | QuoteSubview\r\n const period = query.get(QuoteQuery.Period) as TIMEFRAME\r\n const contextValue = React.useMemo(\r\n () => ({ index, ticker, period, view: getQuoteView(type), subview: getQuoteSubview(type) }),\r\n [index, period, ticker, type]\r\n )\r\n\r\n return {children}\r\n}\r\n","import * as React from 'react'\r\nimport * as ReactDOM from 'react-dom'\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\n\r\nimport { useToggleStaticElements } from '../../../main/hooks/useToggleStaticElement'\r\nimport { QuoteContext } from '../QuoteContext'\r\n\r\ntype AnyElement = Element | Element[] | NodeListOf\r\n\r\ninterface PortalContextProps {\r\n /**\r\n * The root element this component will get rendered into\r\n */\r\n rootElement?: HTMLElement\r\n\r\n /**\r\n * Static (server rendered) element associated with this component.\r\n * Hide this element when the component gets rendered\r\n */\r\n staticElement?: HTMLElement\r\n\r\n toggleStaticElement: () => void\r\n}\r\n\r\nexport const QuotePortalContext = React.createContext({\r\n rootElement: undefined,\r\n staticElement: undefined,\r\n toggleStaticElement: () => {},\r\n})\r\n\r\n/**\r\n * Portal component props\r\n */\r\ninterface QuotePortalProps {\r\n /**\r\n * Override the ticker index from context if you need to skip the first ticker\r\n */\r\n index?: number\r\n\r\n /**\r\n * Server rendered elements to replace with react components\r\n */\r\n staticElements?: AnyElement\r\n\r\n /**\r\n * Immediately replace the static element with react children.\r\n * Turn this off if the child component is suspended\r\n *\r\n * @default true (if root exists)\r\n */\r\n toggleStaticElement?: boolean\r\n\r\n /**\r\n * Elements to render the react components into\r\n */\r\n roots: AnyElement\r\n\r\n /**\r\n * Intentionally restricted to JSX element so that we don’t have to check children is valid react element\r\n */\r\n children: JSX.Element\r\n}\r\n\r\nexport function QuotePortal({ index, toggleStaticElement, staticElements, roots, children }: QuotePortalProps) {\r\n // We might need to offset the index if we want to skip the first ticker (eg. static image chart)\r\n const context = React.useContext(QuoteContext)\r\n const elementIndex = index ?? context.index\r\n\r\n // Get the root and associated static html element, get them by index if array\r\n const staticElement =\r\n staticElements instanceof NodeList || Array.isArray(staticElements) ? staticElements[elementIndex] : staticElements\r\n const rootElement = roots instanceof NodeList || Array.isArray(roots) ? roots[elementIndex] : roots\r\n\r\n /**\r\n * Set up element switching. We might want to hold off if we’re passing a suspendable component.\r\n * We can’t catch the promise here, it might have already been caught down the tree\r\n * and we want to avoid hiding the server-rendered element before the react content is ready\r\n */\r\n const [isEnabled, setIsEnabled] = React.useState(toggleStaticElement ?? (!!staticElement && !!rootElement))\r\n useToggleStaticElements(staticElement, rootElement, isEnabled)\r\n\r\n const portalContextValue = React.useMemo(\r\n () => ({\r\n // Cast here to make it easier to pass any `Element`s as props\r\n rootElement: rootElement as HTMLElement,\r\n staticElement: staticElement as HTMLElement,\r\n // A way to get notified when children get rendered, because they could be suspended and waiting for requests\r\n toggleStaticElement: () => setIsEnabled(true),\r\n }),\r\n [rootElement, staticElement]\r\n )\r\n\r\n if (!rootElement) return null\r\n\r\n return (\r\n setIsEnabled(false)}>\r\n \r\n {ReactDOM.createPortal(children, rootElement)}\r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\ntype QuerySelectorReturn = Element | null\r\ntype AnyElement = QuerySelectorReturn | QuerySelectorReturn[] | NodeListOf\r\n\r\nexport function useToggleStaticElements(elementToHide?: AnyElement, elementToShow: AnyElement = [], enabled = true) {\r\n React.useEffect(() => {\r\n if (!elementToHide) return\r\n\r\n const hideElement = (element?: QuerySelectorReturn) => element?.classList.add('hidden')\r\n const showElement = (element?: QuerySelectorReturn) => element?.classList.remove('hidden')\r\n const toggleElements = (element: AnyElement | undefined, toggleFn: typeof hideElement) => {\r\n if (element instanceof NodeList || Array.isArray(element)) {\r\n element.forEach(toggleFn)\r\n } else {\r\n toggleFn(element)\r\n }\r\n }\r\n\r\n toggleElements(elementToHide, enabled ? hideElement : showElement)\r\n toggleElements(elementToShow, enabled ? showElement : hideElement)\r\n\r\n return () => {\r\n toggleElements(elementToHide, showElement)\r\n toggleElements(elementToShow, hideElement)\r\n }\r\n }, [elementToHide, elementToShow, enabled])\r\n}\r\n","import React from 'react'\r\n\r\nimport { useChartTimeframePathWatch } from '../../hooks/use-chart-timeframe-path-watch'\r\nimport { QuotePortalContext } from '../Portal'\r\n\r\nexport type QuoteLinksContextType = ReturnType\r\n\r\nfunction getDefaultContextValue() {\r\n const urlObject = new URL(window.location.href)\r\n\r\n return {\r\n chartLayoutModel: null,\r\n location: urlObject,\r\n }\r\n}\r\n\r\nexport const QuoteLinksContext = React.createContext(getDefaultContextValue())\r\n\r\nexport function QuoteLinksWrapper({ children }: React.PropsWithChildren) {\r\n const { toggleStaticElement } = React.useContext(QuotePortalContext)\r\n const info = useChartTimeframePathWatch()\r\n\r\n React.useEffect(() => toggleStaticElement(), [toggleStaticElement])\r\n\r\n return {children}\r\n}\r\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)\r\n return {\r\n location: new URL(`${window.location.pathname}${window.location.search}`, window.location.origin),\r\n chartLayoutModel,\r\n }\r\n\r\n const location = generateChartLayoutRouterPath({\r\n ticker: chartModel?.ticker,\r\n timeframe: chartModel?.timeframe,\r\n dateRange: chartModel?.dateRange,\r\n })\r\n\r\n return { location: new URL(`${location.pathname}${location.search}`, window.location.origin), chartLayoutModel }\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\nimport { Link, LinkProps, To } from 'react-router-dom'\r\n\r\nimport { getElitePageLink, getNavigationLinkUrl } from '../../../../main/util'\r\nimport { QuoteContext } from '../../QuoteContext'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from '../../types'\r\nimport { QuoteLinksContext, QuoteLinksContextType } from './QuoteLinksWrapper'\r\n\r\nconst isPremium = FinvizSettings.hasUserPremium\r\n\r\ninterface SharedNavigationLinkProps {\r\n /**\r\n * Mark as only available to elite users. When se to `true`, free users will be\r\n * redirected to elite landing when clicking the link\r\n */\r\n isEliteOnly?: boolean\r\n\r\n /**\r\n * Used together with isEliteOnly to set the correct utm campaign param\r\n */\r\n utmCampaign?: string\r\n}\r\n\r\ninterface NavigationLinkProps extends SharedNavigationLinkProps, Omit {\r\n /**\r\n * Keys to preserve from the current URL query. Runs first when manipulating the URL\r\n *\r\n * @default [Ticker, Type, Period, DateRange]\r\n */\r\n preserveQueryKeys?: Array\r\n\r\n /**\r\n * Keys to omit from the current URL query. Runs after `preserveQueryKeys`\r\n */\r\n removeQueryKeys?: Array\r\n\r\n /**\r\n * Additional values to set to the URL query after preserving/removing\r\n *\r\n * @default { Type: props.view }\r\n */\r\n additionalQueryValues?: Partial>\r\n\r\n /**\r\n * The view the component links to\r\n */\r\n view: QuoteView | QuoteSubview\r\n\r\n getLink?: never\r\n}\r\n\r\ninterface CustomNavigationLinkProps extends SharedNavigationLinkProps, Omit {\r\n view?: never\r\n preserveQueryKeys?: never\r\n removeQueryKeys?: never\r\n additionalQueryValues?: never\r\n\r\n /**\r\n * Custom function to get the link\r\n */\r\n getLink: (context: QuoteLinksContextType) => To\r\n}\r\n\r\nexport function NavigationLink({\r\n isEliteOnly,\r\n utmCampaign,\r\n view,\r\n getLink,\r\n reloadDocument = true,\r\n preserveQueryKeys = [QuoteQuery.Ticker, QuoteQuery.Type, QuoteQuery.Period, QuoteQuery.DateRange],\r\n removeQueryKeys,\r\n additionalQueryValues,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const quoteContext = React.useContext(QuoteContext)\r\n const linkContext = React.useContext(QuoteLinksContext)\r\n\r\n const linkUrl = React.useMemo(() => {\r\n if (isEliteOnly && !isPremium) return getElitePageLink(utmCampaign)\r\n if (typeof getLink === 'function') return getLink(linkContext)\r\n\r\n return getNavigationLinkUrl(\r\n linkContext.location,\r\n preserveQueryKeys,\r\n removeQueryKeys,\r\n additionalQueryValues ?? { [QuoteQuery.Type]: view }\r\n ).toString()\r\n }, [isEliteOnly, utmCampaign, getLink, linkContext, preserveQueryKeys, removeQueryKeys, additionalQueryValues, view])\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n","import * as 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 { QuoteContext } from '../../QuoteContext'\r\nimport { createAlertAsyncModule } from '../../modules/create-alert/async-modules'\r\nimport { NavigationLink } from './QuoteLinkComponent'\r\n\r\nexport function CreateAlertLink() {\r\n const { ticker } = React.useContext(QuoteContext)\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 `/create_alert.ashx?t=${ticker}`}\r\n onClick={(e) => {\r\n if (!FinvizSettings.hasUserPremium) return\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 Set 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 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 { QuoteContext } from '../../QuoteContext'\r\nimport { saveToPortfolioAsyncModule } from '../../modules/save-to-portfolio/async-modules'\r\nimport { NavigationLink } from './QuoteLinkComponent'\r\n\r\nexport function SaveToPortfolioLink() {\r\n const { ticker } = React.useContext(QuoteContext)\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 `/save_to_portfolio.ashx?t=${ticker}`}\r\n onClick={(e) => {\r\n if (!FinvizSettings.email.length) return\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 Add 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 * as React from 'react'\r\n\r\nimport { CreateAlertLink } from './components/Navigation/CreateAlertLink'\r\nimport { NavigationLink } from './components/Navigation/QuoteLinkComponent'\r\nimport { QuoteLinksWrapper } from './components/Navigation/QuoteLinksWrapper'\r\nimport { SaveToPortfolioLink } from './components/Navigation/SaveToPortfolioLink'\r\nimport { QuotePortalContext } from './components/Portal'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from './types'\r\n\r\nexport function QuoteNavigation() {\r\n const { rootElement } = React.useContext(QuotePortalContext)\r\n const hasShortInterest = rootElement!.dataset.shortinterest === 'true'\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n Chart\r\n Stock Detail\r\n \r\n •\r\n\r\n \r\n Compare Perf.\r\n \r\n •\r\n\r\n {hasShortInterest && (\r\n <>\r\n Short Interest\r\n •\r\n \r\n )}\r\n\r\n Financials\r\n •\r\n\r\n {FinvizSettings.hasTrafficPageEnabled && (\r\n <>\r\n Traffic\r\n •\r\n \r\n )}\r\n\r\n \r\n Options\r\n \r\n •\r\n\r\n \r\n Latest Filings\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","import { CHART_ELEMENT_ID } from 'finviz-charts/app/constants/common'\r\nimport ReactDOM from 'react-dom'\r\n\r\nimport { SpecificChartFunctionality, TIMEFRAME } from '../../main/constants'\r\nimport { ChartLayoutWithGlobalState, FREE_DATE_RANGES, Theme } from '../charts-lib'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { getChartLayoutSizeConfig, useChartLayoutWidthWatch } from './hooks/use-chart-layout-width-watch'\r\n\r\nexport function QuoteChart() {\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","/* global FinvizQuoteTickers */\r\nimport classnames from 'classnames'\r\nimport * as dateFns from 'date-fns'\r\nimport React, { ChangeEvent, Component, FormEvent } from 'react'\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\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","var _excluded = [\"x1\", \"y1\", \"x2\", \"y2\", \"key\"],\n _excluded2 = [\"offset\"];\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Cartesian Grid\n */\nimport React, { PureComponent } from 'react';\nimport isFunction from 'lodash/isFunction';\nimport { isNumber } from '../util/DataUtils';\nimport { filterProps } from '../util/ReactUtils';\nexport var CartesianGrid = /*#__PURE__*/function (_PureComponent) {\n _inherits(CartesianGrid, _PureComponent);\n var _super = _createSuper(CartesianGrid);\n function CartesianGrid() {\n _classCallCheck(this, CartesianGrid);\n return _super.apply(this, arguments);\n }\n _createClass(CartesianGrid, [{\n key: \"renderHorizontal\",\n value:\n /**\n * Draw the horizontal grid lines\n * @param {Array} horizontalPoints either passed in as props or generated from function\n * @return {Group} Horizontal lines\n */\n function renderHorizontal(horizontalPoints) {\n var _this = this;\n var _this$props = this.props,\n x = _this$props.x,\n width = _this$props.width,\n horizontal = _this$props.horizontal;\n if (!horizontalPoints || !horizontalPoints.length) {\n return null;\n }\n var items = horizontalPoints.map(function (entry, i) {\n var props = _objectSpread(_objectSpread({}, _this.props), {}, {\n x1: x,\n y1: entry,\n x2: x + width,\n y2: entry,\n key: \"line-\".concat(i),\n index: i\n });\n return CartesianGrid.renderLineItem(horizontal, props);\n });\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-grid-horizontal\"\n }, items);\n }\n\n /**\n * Draw vertical grid lines\n * @param {Array} verticalPoints either passed in as props or generated from function\n * @return {Group} Vertical lines\n */\n }, {\n key: \"renderVertical\",\n value: function renderVertical(verticalPoints) {\n var _this2 = this;\n var _this$props2 = this.props,\n y = _this$props2.y,\n height = _this$props2.height,\n vertical = _this$props2.vertical;\n if (!verticalPoints || !verticalPoints.length) {\n return null;\n }\n var items = verticalPoints.map(function (entry, i) {\n var props = _objectSpread(_objectSpread({}, _this2.props), {}, {\n x1: entry,\n y1: y,\n x2: entry,\n y2: y + height,\n key: \"line-\".concat(i),\n index: i\n });\n return CartesianGrid.renderLineItem(vertical, props);\n });\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-grid-vertical\"\n }, items);\n }\n\n /**\n * Draw vertical grid stripes filled by colors\n * @param {Array} verticalPoints either passed in as props or generated from function\n * @return {Group} Vertical stripes\n */\n }, {\n key: \"renderVerticalStripes\",\n value: function renderVerticalStripes(verticalPoints) {\n var verticalFill = this.props.verticalFill;\n if (!verticalFill || !verticalFill.length) {\n return null;\n }\n var _this$props3 = this.props,\n fillOpacity = _this$props3.fillOpacity,\n x = _this$props3.x,\n y = _this$props3.y,\n width = _this$props3.width,\n height = _this$props3.height;\n var roundedSortedVerticalPoints = verticalPoints.map(function (e) {\n return Math.round(e + x - x);\n }).sort(function (a, b) {\n return a - b;\n });\n if (x !== roundedSortedVerticalPoints[0]) {\n roundedSortedVerticalPoints.unshift(0);\n }\n var items = roundedSortedVerticalPoints.map(function (entry, i) {\n var lastStripe = !roundedSortedVerticalPoints[i + 1];\n var lineWidth = lastStripe ? x + width - entry : roundedSortedVerticalPoints[i + 1] - entry;\n if (lineWidth <= 0) {\n return null;\n }\n var colorIndex = i % verticalFill.length;\n return /*#__PURE__*/React.createElement(\"rect\", {\n key: \"react-\".concat(i) // eslint-disable-line react/no-array-index-key\n ,\n x: entry,\n y: y,\n width: lineWidth,\n height: height,\n stroke: \"none\",\n fill: verticalFill[colorIndex],\n fillOpacity: fillOpacity,\n className: \"recharts-cartesian-grid-bg\"\n });\n });\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-gridstripes-vertical\"\n }, items);\n }\n\n /**\n * Draw horizontal grid stripes filled by colors\n * @param {Array} horizontalPoints either passed in as props or generated from function\n * @return {Group} Horizontal stripes\n */\n }, {\n key: \"renderHorizontalStripes\",\n value: function renderHorizontalStripes(horizontalPoints) {\n var horizontalFill = this.props.horizontalFill;\n if (!horizontalFill || !horizontalFill.length) {\n return null;\n }\n var _this$props4 = this.props,\n fillOpacity = _this$props4.fillOpacity,\n x = _this$props4.x,\n y = _this$props4.y,\n width = _this$props4.width,\n height = _this$props4.height;\n var roundedSortedHorizontalPoints = horizontalPoints.map(function (e) {\n return Math.round(e + y - y);\n }).sort(function (a, b) {\n return a - b;\n });\n if (y !== roundedSortedHorizontalPoints[0]) {\n roundedSortedHorizontalPoints.unshift(0);\n }\n var items = roundedSortedHorizontalPoints.map(function (entry, i) {\n var lastStripe = !roundedSortedHorizontalPoints[i + 1];\n var lineHeight = lastStripe ? y + height - entry : roundedSortedHorizontalPoints[i + 1] - entry;\n if (lineHeight <= 0) {\n return null;\n }\n var colorIndex = i % horizontalFill.length;\n return /*#__PURE__*/React.createElement(\"rect\", {\n key: \"react-\".concat(i) // eslint-disable-line react/no-array-index-key\n ,\n y: entry,\n x: x,\n height: lineHeight,\n width: width,\n stroke: \"none\",\n fill: horizontalFill[colorIndex],\n fillOpacity: fillOpacity,\n className: \"recharts-cartesian-grid-bg\"\n });\n });\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-gridstripes-horizontal\"\n }, items);\n }\n }, {\n key: \"renderBackground\",\n value: function renderBackground() {\n var fill = this.props.fill;\n if (!fill || fill === 'none') {\n return null;\n }\n var _this$props5 = this.props,\n fillOpacity = _this$props5.fillOpacity,\n x = _this$props5.x,\n y = _this$props5.y,\n width = _this$props5.width,\n height = _this$props5.height;\n return /*#__PURE__*/React.createElement(\"rect\", {\n x: x,\n y: y,\n width: width,\n height: height,\n stroke: \"none\",\n fill: fill,\n fillOpacity: fillOpacity,\n className: \"recharts-cartesian-grid-bg\"\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props6 = this.props,\n x = _this$props6.x,\n y = _this$props6.y,\n width = _this$props6.width,\n height = _this$props6.height,\n horizontal = _this$props6.horizontal,\n vertical = _this$props6.vertical,\n horizontalCoordinatesGenerator = _this$props6.horizontalCoordinatesGenerator,\n verticalCoordinatesGenerator = _this$props6.verticalCoordinatesGenerator,\n xAxis = _this$props6.xAxis,\n yAxis = _this$props6.yAxis,\n offset = _this$props6.offset,\n chartWidth = _this$props6.chartWidth,\n chartHeight = _this$props6.chartHeight,\n syncWithTicks = _this$props6.syncWithTicks,\n horizontalValues = _this$props6.horizontalValues,\n verticalValues = _this$props6.verticalValues;\n if (!isNumber(width) || width <= 0 || !isNumber(height) || height <= 0 || !isNumber(x) || x !== +x || !isNumber(y) || y !== +y) {\n return null;\n }\n var _this$props7 = this.props,\n horizontalPoints = _this$props7.horizontalPoints,\n verticalPoints = _this$props7.verticalPoints;\n\n // No horizontal points are specified\n if ((!horizontalPoints || !horizontalPoints.length) && isFunction(horizontalCoordinatesGenerator)) {\n var isHorizontalValues = horizontalValues && horizontalValues.length;\n horizontalPoints = horizontalCoordinatesGenerator({\n yAxis: yAxis ? _objectSpread(_objectSpread({}, yAxis), {}, {\n ticks: isHorizontalValues ? horizontalValues : yAxis.ticks\n }) : undefined,\n width: chartWidth,\n height: chartHeight,\n offset: offset\n }, isHorizontalValues ? true : syncWithTicks);\n }\n\n // No vertical points are specified\n if ((!verticalPoints || !verticalPoints.length) && isFunction(verticalCoordinatesGenerator)) {\n var isVerticalValues = verticalValues && verticalValues.length;\n verticalPoints = verticalCoordinatesGenerator({\n xAxis: xAxis ? _objectSpread(_objectSpread({}, xAxis), {}, {\n ticks: isVerticalValues ? verticalValues : xAxis.ticks\n }) : undefined,\n width: chartWidth,\n height: chartHeight,\n offset: offset\n }, isVerticalValues ? true : syncWithTicks);\n }\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-grid\"\n }, this.renderBackground(), horizontal && this.renderHorizontal(horizontalPoints), vertical && this.renderVertical(verticalPoints), horizontal && this.renderHorizontalStripes(horizontalPoints), vertical && this.renderVerticalStripes(verticalPoints));\n }\n }], [{\n key: \"renderLineItem\",\n value: function renderLineItem(option, props) {\n var lineItem;\n if ( /*#__PURE__*/React.isValidElement(option)) {\n lineItem = /*#__PURE__*/React.cloneElement(option, props);\n } else if (isFunction(option)) {\n lineItem = option(props);\n } else {\n var x1 = props.x1,\n y1 = props.y1,\n x2 = props.x2,\n y2 = props.y2,\n key = props.key,\n others = _objectWithoutProperties(props, _excluded);\n var _filterProps = filterProps(others),\n __ = _filterProps.offset,\n restOfFilteredProps = _objectWithoutProperties(_filterProps, _excluded2);\n lineItem = /*#__PURE__*/React.createElement(\"line\", _extends({}, restOfFilteredProps, {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n fill: \"none\",\n key: key\n }));\n }\n return lineItem;\n }\n }]);\n return CartesianGrid;\n}(PureComponent);\n_defineProperty(CartesianGrid, \"displayName\", 'CartesianGrid');\n_defineProperty(CartesianGrid, \"defaultProps\", {\n horizontal: true,\n vertical: true,\n // The ordinates of horizontal grid lines\n horizontalPoints: [],\n // The abscissas of vertical grid lines\n verticalPoints: [],\n stroke: '#ccc',\n fill: 'none',\n // The fill of colors of grid lines\n verticalFill: [],\n horizontalFill: []\n});","import colors from '../../../../../../config/colors'\r\n\r\nexport const CHART_HEIGHT = 300\r\nexport const BAR_WIDTH = 8\r\nexport const BAR_BORDER_RADIUS: [number, number, number, number] = [2, 2, 0, 0]\r\nexport const STROKE_COLOR = FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[100]\r\nexport const LINE_COLOR = FinvizSettings.hasDarkTheme ? colors.blue[400] : colors.blue[400]\r\nexport const SALE_BAR_COLOR = colors.red[400]\r\nexport const BUY_BAR_COLOR = colors.green[400]\r\nexport const Y_TICK_STYLE = {\r\n fontSize: 10,\r\n fontWeight: 500,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[300] : colors.gray[500],\r\n}\r\nexport const X_TICK_STYLE = {\r\n fontSize: 10,\r\n fontWeight: 400,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[300] : colors.gray[500],\r\n}\r\nexport const TOOLTIP_WRAPPER_STYLE = { outline: 'none', zIndex: 10 }\r\nexport const CURSOR_STYLE = {\r\n border: 0,\r\n stroke: 0,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[50],\r\n opacity: 0.65,\r\n}\r\nexport const TRANSPARENT_CURSOR = { opacity: 0 }\r\n\r\nexport enum BarType {\r\n Buy = 'Buy',\r\n Sale = 'Sale',\r\n}\r\n\r\nexport const BarColorMap: Record = {\r\n [BarType.Buy]: BUY_BAR_COLOR,\r\n [BarType.Sale]: SALE_BAR_COLOR,\r\n}\r\n\r\nexport const BarLabelMap: Record = {\r\n [BarType.Buy]: 'Insider Buy Volume',\r\n [BarType.Sale]: 'Insider Sells Volume',\r\n}\r\n","import classNames from 'classnames'\r\nimport { endOfMonth, startOfMonth } from 'date-fns'\r\n\r\nimport { formatValue } from '../../../bubbles/utils'\r\nimport { BarColorMap, BarLabelMap, BarType } from './constants'\r\nimport { ChartData, VolumeChartDataPerTimeframe } from './types'\r\n\r\ntype ChartTooltipProps = {\r\n label?: number\r\n isActive?: boolean\r\n payload?: Array<{ payload?: ChartData }>\r\n activeKey: BarType | null\r\n}\r\n\r\nfunction formatDateTitle(date: number) {\r\n const startDate = startOfMonth(date)\r\n const endDate = endOfMonth(startDate)\r\n\r\n const month = startDate.toLocaleString('en-US', { month: 'short' })\r\n const startDay = startDate.getDate()\r\n const year = startDate.getFullYear()\r\n const endDay = endDate.getDate()\r\n return `${month} ${startDay}-${endDay}, ${year}`\r\n}\r\n\r\nfunction formatDataValue(barType: BarType, payload: Partial = {}) {\r\n const tradeCount = barType === BarType.Buy ? payload.buyTransactionCount : payload.saleTransactionCount\r\n const value = barType === BarType.Buy ? payload.buyAggregated : payload.saleAggregated\r\n return `${formatValue(value ?? 0)} (${tradeCount ?? 0} Trade${tradeCount === 1 ? '' : 's'})`\r\n}\r\n\r\nfunction BarTooltipLabel({\r\n activeKey,\r\n barType,\r\n payload,\r\n}: {\r\n activeKey: BarType | null\r\n barType: BarType\r\n payload?: VolumeChartDataPerTimeframe\r\n}) {\r\n return (\r\n \r\n {BarLabelMap[barType]}\r\n \r\n {formatDataValue(barType, payload)}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default function ChartTooltip({ isActive, activeKey, payload, label }: ChartTooltipProps) {\r\n const cursorPayload = payload?.[0]?.payload?.insider\r\n\r\n if (!isActive) return null\r\n\r\n return (\r\n \r\n {label && (\r\n
\r\n {formatDateTitle(label)}\r\n
\r\n )}\r\n \r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { Rectangle } from 'recharts'\r\n\r\nimport { BAR_WIDTH, BarType } from './constants'\r\n\r\nexport function InsiderVolumeBar({ x, width, ...props }: any) {\r\n let newX = x\r\n const value = props.payload[props.dataKey]\r\n const isCenteredBar = props.payload.saleAggregated === 0 || props.payload.buyAggregated === 0\r\n if (isCenteredBar) {\r\n if (props.name === BarType.Sale) newX += width / 2\r\n else newX -= width / 2\r\n }\r\n\r\n if (value === 0 || !Number.isFinite(value)) {\r\n // Needs to return an element, so return an empty node\r\n return \r\n }\r\n\r\n return (\r\n \r\n \r\n {props.name === BarType.Sale && (\r\n \r\n )}\r\n {props.name === BarType.Buy && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { endOfMonth, format, startOfMonth } from 'date-fns'\r\nimport { getInstrument } from 'finviz-charts/app/utils/chart'\r\nimport * as React from 'react'\r\nimport {\r\n Bar,\r\n CartesianGrid,\r\n ComposedChart,\r\n Line,\r\n Rectangle,\r\n RectangleProps,\r\n ResponsiveContainer,\r\n Tooltip,\r\n XAxis,\r\n YAxis,\r\n} from 'recharts'\r\n\r\nimport { parseRouteInitData } from '../../../../main/util'\r\nimport { formatValue } from '../../../bubbles/utils'\r\nimport { Quote, TIMEFRAME } from '../../../charts-lib'\r\nimport { getDate } from '../../../header/utils'\r\nimport { decodeQueryString } from '../../../queryString'\r\nimport { QuoteContext } from '../../QuoteContext'\r\nimport ChartTooltip from './ChartTooltip'\r\nimport { InsiderVolumeBar } from './InsiderVolumeBar'\r\nimport {\r\n BAR_BORDER_RADIUS,\r\n BUY_BAR_COLOR,\r\n BarType,\r\n CHART_HEIGHT,\r\n CURSOR_STYLE,\r\n LINE_COLOR,\r\n SALE_BAR_COLOR,\r\n STROKE_COLOR,\r\n TOOLTIP_WRAPPER_STYLE,\r\n TRANSPARENT_CURSOR,\r\n X_TICK_STYLE,\r\n Y_TICK_STYLE,\r\n} from './constants'\r\nimport { ChartData, TradingVolumeChartInit } from './types'\r\nimport { filterDataForChart } from './utils'\r\n\r\ninterface InsiderTradingVolumeChartProps {\r\n className?: string\r\n}\r\n\r\ninterface CustomCursorProps extends Partial> {\r\n numberOfDatapoints: number\r\n isActive: boolean\r\n points?: [{ x: number; y: number }]\r\n}\r\n\r\nfunction CustomCursor({ numberOfDatapoints, points, ...props }: CustomCursorProps) {\r\n const cursorWidth = props.width! / numberOfDatapoints\r\n const x = points![0].x - cursorWidth / 2\r\n const y = points![0].y\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction xAxisTickFormatter(value: any) {\r\n if (!Number.isFinite(value)) return ''\r\n\r\n const date = getDate(value)\r\n return date.getMonth() === 0 ? date.getFullYear().toString() : format(date, 'MMM')\r\n}\r\n\r\nexport function InsiderTradingVolumeChart({ className }: InsiderTradingVolumeChartProps) {\r\n const { index } = React.useContext(QuoteContext)\r\n const [isActive, setIsActive] = React.useState(false)\r\n const [chartData, setChartData] = React.useState([])\r\n const [activeKey, setActiveKey] = React.useState(null)\r\n\r\n const initData = React.useMemo(() => {\r\n const data = parseRouteInitData({\r\n elementId: `insider-init-data-${index}`,\r\n removeElement: false,\r\n })\r\n\r\n return {\r\n data,\r\n domain: data?.length\r\n ? [\r\n getDate(startOfMonth(getDate(data[0].date))).getTime(),\r\n getDate(endOfMonth(getDate(data[data.length - 1].date))).getTime(),\r\n ]\r\n : [],\r\n }\r\n }, [index])\r\n\r\n const hasInsiderTradingHistory = React.useMemo(\r\n () => initData.data?.some((x) => x.saleTransactionCount > 0 || x.buyTransactionCount > 0),\r\n [initData]\r\n )\r\n\r\n React.useEffect(() => {\r\n const { t: urlTicker } = decodeQueryString()\r\n const ticker = urlTicker.split(',')[index]\r\n async function fetchQuoteData() {\r\n if (!initData.data?.length) return\r\n const quote = await Quote.get({ ticker, instrument: getInstrument(ticker), timeframe: TIMEFRAME.d })\r\n const dateFrom = initData.data[0].date\r\n const dateTo = initData.data[initData.data.length - 1]!.date\r\n const data = filterDataForChart(quote, dateFrom, dateTo)\r\n setChartData(data.map((row, index) => ({ ...row, insider: initData.data?.[index] })))\r\n }\r\n\r\n if (hasInsiderTradingHistory) fetchQuoteData()\r\n }, [initData, hasInsiderTradingHistory, index])\r\n\r\n const commonProps = React.useMemo(\r\n () => ({\r\n bar: {\r\n yAxisId: 'yAxisVolume',\r\n activeBar: false,\r\n shape: InsiderVolumeBar,\r\n radius: BAR_BORDER_RADIUS,\r\n isAnimationActive: false,\r\n onMouseLeave: () => setActiveKey(null),\r\n },\r\n xAxis: {\r\n dataKey: 'date',\r\n scale: 'time' as const,\r\n type: 'number' as const,\r\n dy: 5,\r\n tick: X_TICK_STYLE,\r\n tickLine: false,\r\n axisLine: false,\r\n domain: initData.domain,\r\n tickFormatter: xAxisTickFormatter,\r\n },\r\n yAxis: {\r\n tick: Y_TICK_STYLE,\r\n tickLine: false,\r\n axisLine: false,\r\n tickFormatter: (value: number) => formatValue(value),\r\n },\r\n }),\r\n [initData.domain]\r\n )\r\n\r\n if (!initData.data?.length || !hasInsiderTradingHistory) return null\r\n\r\n return (\r\n
\r\n
\r\n \r\n Insider Trading Volume\r\n \r\n
\r\n setIsActive(true)}\r\n onMouseLeave={() => setIsActive(false)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n content={}\r\n />\r\n \r\n setActiveKey(BarType.Sale)}\r\n />\r\n setActiveKey(BarType.Buy)}\r\n />\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n","import { endOfMonth, startOfMonth } from 'date-fns'\r\nimport { type Quote } from 'finviz-charts/server/offScreenCanvasRender'\r\n\r\nimport { getDate } from '../../../header/utils'\r\nimport { ChartBaseData } from './types'\r\n\r\n/**\r\n * Only get data between from/to range\r\n */\r\nexport function filterDataForChart(quote: Quote, fromDate: number, toDate: number) {\r\n const monthlyData: ChartBaseData[] = []\r\n\r\n const fromTimestamp = getDate(startOfMonth(getDate(fromDate))).getTime()\r\n const toTimestamp = getDate(endOfMonth(getDate(toDate))).getTime()\r\n for (let index = 0; index < quote.date.length; index++) {\r\n const currentTimestamp = quote.date[index] * 1000\r\n const currentClose = quote.close[quote.barToDataIndex[index]]\r\n\r\n if (fromTimestamp > currentTimestamp || currentTimestamp > toTimestamp) continue\r\n\r\n monthlyData.push({ date: currentTimestamp, close: currentClose })\r\n }\r\n\r\n return monthlyData\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","import { useModelState } from '../../../charts-lib'\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 {\r\n Quote,\r\n useChartLayoutGlobalModelAsync,\r\n withCompleteLayoutModelInit,\r\n withQuotePolling,\r\n} from '../../../charts-lib'\r\nimport { formatDate, getDate } from '../../../header/utils'\r\nimport { QuotePortalContext } from '../Portal'\r\nimport { HeaderPricesContext, useChartContextPrices } from './hooks'\r\n\r\nexport function ChartContextQuoteHeader() {\r\n const { toggleStaticElement } = React.useContext(QuotePortalContext)\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const data = useChartContextPrices(chartLayoutModel)\r\n\r\n React.useEffect(() => toggleStaticElement(), [toggleStaticElement])\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 { toggleStaticElement } = React.useContext(QuotePortalContext)\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 toggleStaticElement()\r\n }\r\n\r\n fetchAndMapInitialQuote()\r\n }, [chartLayoutModel, config.charts, toggleStaticElement])\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 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 * 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","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 './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 && !data.error && Object.keys(data).length > 0\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 classNames from 'classnames'\r\nimport { isRedesignEnabled } from 'finviz-charts/app/utils'\r\nimport React from 'react'\r\n\r\nimport { Button } from '../../../main/components'\r\nimport { SpecificChartFunctionality } from '../../../main/constants'\r\nimport { ChartTypesSelect, StockDetailTimeframeBar } from '../../charts-lib'\r\nimport { QuoteContext } from '../QuoteContext'\r\n\r\ninterface Props {\r\n isStockDetailUpdating: boolean\r\n}\r\n\r\nconst hasRedesign = isRedesignEnabled()\r\nconst isPremium = window.FinvizSettings.hasUserPremium\r\n\r\nexport function StaticChartHeader({ isStockDetailUpdating }: Props) {\r\n const { index, ticker, period } = React.useContext(QuoteContext)\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 Share\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { parseRouteInitData } from '../../../main/util'\r\nimport { round } from '../../backtest/utils'\r\nimport { QuoteContext } from '../QuoteContext'\r\nimport BarChart, { Bar } from './barChart'\r\n\r\nfunction convertData(endYear: number, values: any[]) {\r\n return values.map((value, index) => ({ name: endYear - index, value })).reverse() as unknown as Bar[]\r\n}\r\n\r\ninterface FAChartProps {\r\n year: number\r\n data: number[]\r\n title: string\r\n smallRoundPlaces?: number\r\n largeRoundPlaces?: number\r\n smallScale?: number\r\n largeScale?: number\r\n smallTitleSufix?: string\r\n largeTitleSufix?: string\r\n}\r\n\r\nfunction FAChart({\r\n year,\r\n data,\r\n title,\r\n smallRoundPlaces = 2,\r\n largeRoundPlaces = 0,\r\n smallScale = 1,\r\n largeScale = 1,\r\n smallTitleSufix = '',\r\n largeTitleSufix = '',\r\n}: FAChartProps) {\r\n const range = Math.max(...data.map((value) => Math.abs(value)).filter(Number))\r\n const isLarge = Math.abs(range) >= 1000\r\n const scale = isLarge ? largeScale : smallScale\r\n const values = data.map((value) => {\r\n const rounded = round(scale * value, isLarge ? largeRoundPlaces : smallRoundPlaces)\r\n return value == null || Number.isNaN(rounded) ? null : rounded\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 const { index } = React.useContext(QuoteContext)\r\n\r\n const routeData = React.useMemo(\r\n () =>\r\n parseRouteInitData<{ year: number; values: Array }>({\r\n elementId: `fa-init-data-${index}`,\r\n removeElement: false,\r\n }),\r\n [index]\r\n )\r\n\r\n if (!routeData) return null\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 \r\n )\r\n}\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","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 React from 'react'\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 { useCheckNonIdeaChartMissingConfig } from '../../main/hooks/use-check-non-idea-chart-missing-config'\r\nimport { initIdeaQuotes } from '../../main/modules/charts/util'\r\nimport { Quote } from '../charts-lib'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { getInitChartConfig } from '../shared/getInitChartConfig'\r\nimport { ready } from '../shared/ready'\r\nimport { QuoteNavigation } from './Navigation'\r\nimport { QuoteChart } from './QuoteChart'\r\nimport { QuoteContext, QuoteContextProvider } from './QuoteContext'\r\nimport { Perf } from './components/ComparePerformance'\r\nimport { InsiderTradingVolumeChart } from './components/InsiderTradingChart'\r\nimport { QuotePortal } from './components/Portal'\r\nimport { ChartContextQuoteHeader, ManualInitQuoteHeader } from './components/Price'\r\nimport Statements from './components/Statements/statements'\r\nimport { StaticChartHeader } from './components/StaticChartHeader'\r\nimport FundamentalCharts from './components/fundamentalCharts'\r\nimport { useStockDetailUpdater } from './hooks/use-stock-detail-updater'\r\nimport EtfHoldings from './modules/etf-holdings'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from './types'\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 PRICE_STATIC = document.querySelectorAll('.js-quote-price-static')\r\nconst PRICE_ROOTS = document.querySelectorAll('.js-quote-price-root')\r\n\r\nconst NAVIGATION_STATIC = document.querySelectorAll('.js-quote-navigation-static')\r\nconst NAVIGATION_ROOTS = document.querySelectorAll('.js-quote-navigation-root')\r\n\r\nconst ETF_HOLDINGS_STATIC = document.querySelectorAll('.js-etf-holdings-static')\r\nconst ETF_HOLDINGS_ROOTS = document.querySelectorAll('.js-etf-holdings-root')\r\nconst isETF = !!ETF_HOLDINGS_ROOTS.length\r\n\r\nconst STATIC_CHART_HEADER_ROOTS = document.querySelectorAll('.quote-menu')\r\n\r\nconst FUNDAMENTAL_CHARTS_ROOTS = document.querySelectorAll('.js-quote-fa')\r\n\r\nconst STATEMENTS_ROOTS = document.querySelectorAll('#statements')\r\n\r\nconst INSIDER_CHART_ROOTS = document.querySelectorAll('.insider-trading-chart')\r\n\r\nfunction ReactComponentsContainer({ isStockDetailUpdating }: { isStockDetailUpdating: boolean }) {\r\n const context = React.useContext(QuoteContext)\r\n\r\n return (\r\n <>\r\n \r\n \r\n {context.view === QuoteView.ChartDetail ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n {context.view === QuoteView.ChartDetail && (\r\n \r\n {context.index === 0 && }\r\n\r\n {context.index > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n\r\n {context.subview === QuoteSubview.ComparePerf && window.FinvizQuoteTickers && context.index === 0 && }\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 )\r\n}\r\n\r\nfunction QuoteTickerComponents() {\r\n useCheckNonIdeaChartMissingConfig()\r\n\r\n const query = decodeQueryString()\r\n const tickers = query[QuoteQuery.Ticker].split(',')\r\n const { isStockDetailUpdating } = useStockDetailUpdater()\r\n\r\n return tickers.map((ticker, index) => (\r\n \r\n \r\n \r\n ))\r\n}\r\n\r\nready(() => {\r\n const reactRootElement = document.getElementById('react-root')\r\n\r\n if (!reactRootElement) return\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 if (window.globalChartConfig?.ideaQuotes) {\r\n initIdeaQuotes(window.globalChartConfig.ideaQuotes, window.globalChartConfig)\r\n }\r\n }\r\n\r\n ReactDOMClient.createRoot(reactRootElement).render(\r\n \r\n \r\n \r\n \r\n \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","export enum QuoteQuery {\r\n Ticker = 't',\r\n Type = 'ty',\r\n Period = 'p',\r\n DateRange = 'r',\r\n}\r\n\r\n// Keep in sync with FullViewUrlQuery.cs\r\nexport enum QuoteView {\r\n // Default subviews for views\r\n ChartDetail = 'c',\r\n Financials = 'dv',\r\n Options = 'oc',\r\n}\r\n\r\n// Keep in sync with FullViewUrlQuery.cs\r\nexport enum QuoteSubview {\r\n ComparePerf = 'p',\r\n OptionsChain = 'oc',\r\n OptionsVolatility = 'ocv',\r\n Dividends = 'dv',\r\n Eearnings = 'ea',\r\n Revenue = 'rv',\r\n ShortInterest = 'si',\r\n Traffic = 'tr',\r\n LatestFilings = 'lf',\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 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\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, labelElement, labelColumnClassName, 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 classnames from 'classnames'\r\nimport 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 isTableFixed?: boolean\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 isTableFixed = true,\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 classNames from 'classnames'\r\nimport throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n children: React.ReactElement\r\n numOfTableRows: number\r\n className?: string\r\n}\r\n\r\nenum ShadowPosition {\r\n none,\r\n left,\r\n right,\r\n leftAndRight,\r\n}\r\n\r\ninterface TableScrollShadowProps {\r\n side: ShadowPosition.left | ShadowPosition.right\r\n position: { top?: number; left?: number; right?: number }\r\n height: number\r\n className?: string\r\n isVisible: boolean\r\n}\r\n\r\nfunction TableScrollShadow({ className, side, position, height, isVisible }: TableScrollShadowProps) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nconst TABLE_SHADOW_MARGIN = 1 // margins to prevent covering borders with the shadow\r\n\r\nexport function FinancialsTableStickyColumnWrapper({ children, className, numOfTableRows }: Props) {\r\n const stickyRef = React.useRef(null)\r\n const [shadowPosition, setShadowPosition] = React.useState(ShadowPosition.none)\r\n const [shadowDimensions, setShadowDimensions] = React.useState({ left: 0, top: 0, height: 0 })\r\n\r\n React.useEffect(() => {\r\n const stickyElement = stickyRef.current\r\n if (!stickyElement) return\r\n\r\n const onScroll = throttle(function () {\r\n const stickyElement = stickyRef.current\r\n if (!stickyElement) return\r\n\r\n const stickyElementScrollLeft = Math.ceil(stickyElement.scrollLeft)\r\n\r\n let newShadowPosition = ShadowPosition.none\r\n const hasScrollSpaceToLeft = stickyElementScrollLeft > 0\r\n const hasScrollSpaceToRight =\r\n Math.ceil(stickyElement.offsetWidth) + stickyElementScrollLeft < stickyElement.scrollWidth\r\n if (hasScrollSpaceToLeft && hasScrollSpaceToRight) {\r\n newShadowPosition = ShadowPosition.leftAndRight\r\n } else if (hasScrollSpaceToLeft) {\r\n newShadowPosition = ShadowPosition.left\r\n } else if (hasScrollSpaceToRight) {\r\n newShadowPosition = ShadowPosition.right\r\n }\r\n\r\n setShadowPosition(newShadowPosition)\r\n }, 100)\r\n\r\n onScroll()\r\n\r\n stickyElement.scrollTo({\r\n left: stickyElement.scrollWidth,\r\n })\r\n\r\n stickyElement.addEventListener('scroll', onScroll)\r\n window.addEventListener('resize', onScroll)\r\n\r\n return () => {\r\n stickyElement.removeEventListener('scroll', onScroll)\r\n window.removeEventListener('resize', onScroll)\r\n }\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n const financialsTable = stickyRef.current?.querySelector('table.financials-table')\r\n const headHeight = financialsTable?.querySelector('thead')?.clientHeight ?? 0\r\n const firstColumnWidth = financialsTable?.querySelector('tr > td')?.clientWidth ?? 0\r\n\r\n setShadowDimensions({\r\n left: Math.ceil(firstColumnWidth),\r\n top: headHeight + TABLE_SHADOW_MARGIN,\r\n height: (financialsTable?.clientHeight ?? 0) - headHeight - 2 * TABLE_SHADOW_MARGIN,\r\n })\r\n }, [numOfTableRows])\r\n\r\n const { radiusCropFillerStyle, shadowLeftStyle, shadowRightStyle } = React.useMemo(\r\n () => ({\r\n radiusCropFillerStyle: {\r\n top: shadowDimensions.top - TABLE_SHADOW_MARGIN,\r\n height: shadowDimensions.height + 2 * TABLE_SHADOW_MARGIN,\r\n },\r\n shadowLeftStyle: {\r\n top: shadowDimensions.top,\r\n left: shadowDimensions.left,\r\n },\r\n shadowRightStyle: {\r\n top: shadowDimensions.top,\r\n right: 0,\r\n },\r\n }),\r\n [shadowDimensions]\r\n )\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {children}\r\n
\r\n \r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport FinancialsTable from './FinancialsTable'\r\nimport { FinancialsTableStickyColumnWrapper } from './FinancialsTableStickyColumnWrapper'\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 hasStickyColumnWrapper?: boolean\r\n stickyColumnWrapperClassName?: string\r\n subColumns?: Record[]>\r\n isTableFixed?: boolean\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 stickyColumnWrapperClassName,\r\n subColumns,\r\n header,\r\n data,\r\n isTableFixed,\r\n hasStickyColumnWrapper,\r\n onVisibilityChange,\r\n}: FinancialsWidgetProps) {\r\n const financialsTable = (\r\n \r\n )\r\n return (\r\n
\r\n
\r\n {header}\r\n {children}\r\n
\r\n {hasStickyColumnWrapper ? (\r\n \r\n {financialsTable}\r\n \r\n ) : (\r\n financialsTable\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 sortedData = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n return sortedData.reduce<{\r\n change: Record\r\n changePct: Record\r\n }>(\r\n (acc, { year, value }, i) => {\r\n const prev = sortedData[i - 1]?.value ?? null\r\n let change: number | null = null\r\n let changePct: number | null = null\r\n\r\n if (value !== null && prev !== null && value !== 0 && prev !== 0) {\r\n change = value - prev\r\n changePct = ((value - prev) / Math.abs(prev)) * 100\r\n }\r\n\r\n return {\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 },\r\n { change: {}, changePct: {} }\r\n )\r\n}\r\n\r\nexport function getMoMPercentageData(data: T[]) {\r\n const sortedData = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n return sortedData.reduce>((acc, { year, value }, i) => {\r\n const prev = sortedData[i - 1]?.value ?? null\r\n let changePct: number | null = null\r\n\r\n if (value !== null && prev !== null && value !== 0 && prev !== 0) {\r\n changePct = ((value - prev) / Math.abs(prev)) * 100\r\n }\r\n\r\n return {\r\n ...acc,\r\n [year]: changePct,\r\n }\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\r\nexport function getHeatmapClassNames(value: number | null = null) {\r\n if (value === null || value === 0) return 'bg-neutral text-neutral'\r\n\r\n // Negative\r\n if (value < -80) return 'bg-danger-5 text-danger-5'\r\n if (value < -60) return 'bg-danger-4 text-danger-4'\r\n if (value < -40) return 'bg-danger-3 text-danger-3'\r\n if (value < -20) return 'bg-danger-2 text-danger-2'\r\n if (value < 0) return 'bg-danger-1 text-danger-1'\r\n\r\n // Positive\r\n if (value > 80) return 'bg-success-5 text-success-5'\r\n if (value > 60) return 'bg-success-4 text-success-4'\r\n if (value > 40) return 'bg-success-3 text-success-3'\r\n if (value > 20) return 'bg-success-2 text-success-2'\r\n if (value > 0) return 'bg-success-1 text-success-1'\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","var _excluded = [\"layout\", \"type\", \"stroke\", \"connectNulls\", \"isRange\", \"ref\"];\nvar _class;\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Area\n */\nimport React, { PureComponent } from 'react';\nimport clsx from 'clsx';\nimport Animate from 'react-smooth';\nimport isFunction from 'lodash/isFunction';\nimport max from 'lodash/max';\nimport isNil from 'lodash/isNil';\nimport isNan from 'lodash/isNaN';\nimport isEqual from 'lodash/isEqual';\nimport { Curve } from '../shape/Curve';\nimport { Dot } from '../shape/Dot';\nimport { Layer } from '../container/Layer';\nimport { LabelList } from '../component/LabelList';\nimport { Global } from '../util/Global';\nimport { isNumber, uniqueId, interpolateNumber } from '../util/DataUtils';\nimport { getCateCoordinateOfLine, getValueByDataKey } from '../util/ChartUtils';\nimport { filterProps, isDotProps } from '../util/ReactUtils';\nexport var Area = /*#__PURE__*/function (_PureComponent) {\n _inherits(Area, _PureComponent);\n var _super = _createSuper(Area);\n function Area() {\n var _this;\n _classCallCheck(this, Area);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n isAnimationFinished: true\n });\n _defineProperty(_assertThisInitialized(_this), \"id\", uniqueId('recharts-area-'));\n _defineProperty(_assertThisInitialized(_this), \"handleAnimationEnd\", function () {\n var onAnimationEnd = _this.props.onAnimationEnd;\n _this.setState({\n isAnimationFinished: true\n });\n if (isFunction(onAnimationEnd)) {\n onAnimationEnd();\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleAnimationStart\", function () {\n var onAnimationStart = _this.props.onAnimationStart;\n _this.setState({\n isAnimationFinished: false\n });\n if (isFunction(onAnimationStart)) {\n onAnimationStart();\n }\n });\n return _this;\n }\n _createClass(Area, [{\n key: \"renderDots\",\n value: function renderDots(needClip, clipDot, clipPathId) {\n var isAnimationActive = this.props.isAnimationActive;\n var isAnimationFinished = this.state.isAnimationFinished;\n if (isAnimationActive && !isAnimationFinished) {\n return null;\n }\n var _this$props = this.props,\n dot = _this$props.dot,\n points = _this$props.points,\n dataKey = _this$props.dataKey;\n var areaProps = filterProps(this.props);\n var customDotProps = filterProps(dot, true);\n var dots = points.map(function (entry, i) {\n var dotProps = _objectSpread(_objectSpread(_objectSpread({\n key: \"dot-\".concat(i),\n r: 3\n }, areaProps), customDotProps), {}, {\n dataKey: dataKey,\n cx: entry.x,\n cy: entry.y,\n index: i,\n value: entry.value,\n payload: entry.payload\n });\n return Area.renderDotItem(dot, dotProps);\n });\n var dotsProps = {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipDot ? '' : 'dots-').concat(clipPathId, \")\") : null\n };\n return /*#__PURE__*/React.createElement(Layer, _extends({\n className: \"recharts-area-dots\"\n }, dotsProps), dots);\n }\n }, {\n key: \"renderHorizontalRect\",\n value: function renderHorizontalRect(alpha) {\n var _this$props2 = this.props,\n baseLine = _this$props2.baseLine,\n points = _this$props2.points,\n strokeWidth = _this$props2.strokeWidth;\n var startX = points[0].x;\n var endX = points[points.length - 1].x;\n var width = alpha * Math.abs(startX - endX);\n var maxY = max(points.map(function (entry) {\n return entry.y || 0;\n }));\n if (isNumber(baseLine) && typeof baseLine === 'number') {\n maxY = Math.max(baseLine, maxY);\n } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {\n maxY = Math.max(max(baseLine.map(function (entry) {\n return entry.y || 0;\n })), maxY);\n }\n if (isNumber(maxY)) {\n return /*#__PURE__*/React.createElement(\"rect\", {\n x: startX < endX ? startX : startX - width,\n y: 0,\n width: width,\n height: Math.floor(maxY + (strokeWidth ? parseInt(\"\".concat(strokeWidth), 10) : 1))\n });\n }\n return null;\n }\n }, {\n key: \"renderVerticalRect\",\n value: function renderVerticalRect(alpha) {\n var _this$props3 = this.props,\n baseLine = _this$props3.baseLine,\n points = _this$props3.points,\n strokeWidth = _this$props3.strokeWidth;\n var startY = points[0].y;\n var endY = points[points.length - 1].y;\n var height = alpha * Math.abs(startY - endY);\n var maxX = max(points.map(function (entry) {\n return entry.x || 0;\n }));\n if (isNumber(baseLine) && typeof baseLine === 'number') {\n maxX = Math.max(baseLine, maxX);\n } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {\n maxX = Math.max(max(baseLine.map(function (entry) {\n return entry.x || 0;\n })), maxX);\n }\n if (isNumber(maxX)) {\n return /*#__PURE__*/React.createElement(\"rect\", {\n x: 0,\n y: startY < endY ? startY : startY - height,\n width: maxX + (strokeWidth ? parseInt(\"\".concat(strokeWidth), 10) : 1),\n height: Math.floor(height)\n });\n }\n return null;\n }\n }, {\n key: \"renderClipRect\",\n value: function renderClipRect(alpha) {\n var layout = this.props.layout;\n if (layout === 'vertical') {\n return this.renderVerticalRect(alpha);\n }\n return this.renderHorizontalRect(alpha);\n }\n }, {\n key: \"renderAreaStatically\",\n value: function renderAreaStatically(points, baseLine, needClip, clipPathId) {\n var _this$props4 = this.props,\n layout = _this$props4.layout,\n type = _this$props4.type,\n stroke = _this$props4.stroke,\n connectNulls = _this$props4.connectNulls,\n isRange = _this$props4.isRange,\n ref = _this$props4.ref,\n others = _objectWithoutProperties(_this$props4, _excluded);\n return /*#__PURE__*/React.createElement(Layer, {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : null\n }, /*#__PURE__*/React.createElement(Curve, _extends({}, filterProps(others, true), {\n points: points,\n connectNulls: connectNulls,\n type: type,\n baseLine: baseLine,\n layout: layout,\n stroke: \"none\",\n className: \"recharts-area-area\"\n })), stroke !== 'none' && /*#__PURE__*/React.createElement(Curve, _extends({}, filterProps(this.props), {\n className: \"recharts-area-curve\",\n layout: layout,\n type: type,\n connectNulls: connectNulls,\n fill: \"none\",\n points: points\n })), stroke !== 'none' && isRange && /*#__PURE__*/React.createElement(Curve, _extends({}, filterProps(this.props), {\n className: \"recharts-area-curve\",\n layout: layout,\n type: type,\n connectNulls: connectNulls,\n fill: \"none\",\n points: baseLine\n })));\n }\n }, {\n key: \"renderAreaWithAnimation\",\n value: function renderAreaWithAnimation(needClip, clipPathId) {\n var _this2 = this;\n var _this$props5 = this.props,\n points = _this$props5.points,\n baseLine = _this$props5.baseLine,\n isAnimationActive = _this$props5.isAnimationActive,\n animationBegin = _this$props5.animationBegin,\n animationDuration = _this$props5.animationDuration,\n animationEasing = _this$props5.animationEasing,\n animationId = _this$props5.animationId;\n var _this$state = this.state,\n prevPoints = _this$state.prevPoints,\n prevBaseLine = _this$state.prevBaseLine;\n // const clipPathId = isNil(id) ? this.id : id;\n\n return /*#__PURE__*/React.createElement(Animate, {\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing,\n from: {\n t: 0\n },\n to: {\n t: 1\n },\n key: \"area-\".concat(animationId),\n onAnimationEnd: this.handleAnimationEnd,\n onAnimationStart: this.handleAnimationStart\n }, function (_ref) {\n var t = _ref.t;\n if (prevPoints) {\n var prevPointsDiffFactor = prevPoints.length / points.length;\n // update animtaion\n var stepPoints = points.map(function (entry, index) {\n var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n if (prevPoints[prevPointIndex]) {\n var prev = prevPoints[prevPointIndex];\n var interpolatorX = interpolateNumber(prev.x, entry.x);\n var interpolatorY = interpolateNumber(prev.y, entry.y);\n return _objectSpread(_objectSpread({}, entry), {}, {\n x: interpolatorX(t),\n y: interpolatorY(t)\n });\n }\n return entry;\n });\n var stepBaseLine;\n if (isNumber(baseLine) && typeof baseLine === 'number') {\n var interpolator = interpolateNumber(prevBaseLine, baseLine);\n stepBaseLine = interpolator(t);\n } else if (isNil(baseLine) || isNan(baseLine)) {\n var _interpolator = interpolateNumber(prevBaseLine, 0);\n stepBaseLine = _interpolator(t);\n } else {\n stepBaseLine = baseLine.map(function (entry, index) {\n var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n if (prevBaseLine[prevPointIndex]) {\n var prev = prevBaseLine[prevPointIndex];\n var interpolatorX = interpolateNumber(prev.x, entry.x);\n var interpolatorY = interpolateNumber(prev.y, entry.y);\n return _objectSpread(_objectSpread({}, entry), {}, {\n x: interpolatorX(t),\n y: interpolatorY(t)\n });\n }\n return entry;\n });\n }\n return _this2.renderAreaStatically(stepPoints, stepBaseLine, needClip, clipPathId);\n }\n return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"animationClipPath-\".concat(clipPathId)\n }, _this2.renderClipRect(t))), /*#__PURE__*/React.createElement(Layer, {\n clipPath: \"url(#animationClipPath-\".concat(clipPathId, \")\")\n }, _this2.renderAreaStatically(points, baseLine, needClip, clipPathId)));\n });\n }\n }, {\n key: \"renderArea\",\n value: function renderArea(needClip, clipPathId) {\n var _this$props6 = this.props,\n points = _this$props6.points,\n baseLine = _this$props6.baseLine,\n isAnimationActive = _this$props6.isAnimationActive;\n var _this$state2 = this.state,\n prevPoints = _this$state2.prevPoints,\n prevBaseLine = _this$state2.prevBaseLine,\n totalLength = _this$state2.totalLength;\n if (isAnimationActive && points && points.length && (!prevPoints && totalLength > 0 || !isEqual(prevPoints, points) || !isEqual(prevBaseLine, baseLine))) {\n return this.renderAreaWithAnimation(needClip, clipPathId);\n }\n return this.renderAreaStatically(points, baseLine, needClip, clipPathId);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _filterProps;\n var _this$props7 = this.props,\n hide = _this$props7.hide,\n dot = _this$props7.dot,\n points = _this$props7.points,\n className = _this$props7.className,\n top = _this$props7.top,\n left = _this$props7.left,\n xAxis = _this$props7.xAxis,\n yAxis = _this$props7.yAxis,\n width = _this$props7.width,\n height = _this$props7.height,\n isAnimationActive = _this$props7.isAnimationActive,\n id = _this$props7.id;\n if (hide || !points || !points.length) {\n return null;\n }\n var isAnimationFinished = this.state.isAnimationFinished;\n var hasSinglePoint = points.length === 1;\n var layerClass = clsx('recharts-area', className);\n var needClipX = xAxis && xAxis.allowDataOverflow;\n var needClipY = yAxis && yAxis.allowDataOverflow;\n var needClip = needClipX || needClipY;\n var clipPathId = isNil(id) ? this.id : id;\n var _ref2 = (_filterProps = filterProps(dot)) !== null && _filterProps !== void 0 ? _filterProps : {\n r: 3,\n strokeWidth: 2\n },\n _ref2$r = _ref2.r,\n r = _ref2$r === void 0 ? 3 : _ref2$r,\n _ref2$strokeWidth = _ref2.strokeWidth,\n strokeWidth = _ref2$strokeWidth === void 0 ? 2 : _ref2$strokeWidth;\n var _ref3 = isDotProps(dot) ? dot : {},\n _ref3$clipDot = _ref3.clipDot,\n clipDot = _ref3$clipDot === void 0 ? true : _ref3$clipDot;\n var dotSize = r * 2 + strokeWidth;\n return /*#__PURE__*/React.createElement(Layer, {\n className: layerClass\n }, needClipX || needClipY ? /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clipPath-\".concat(clipPathId)\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: needClipX ? left : left - width / 2,\n y: needClipY ? top : top - height / 2,\n width: needClipX ? width : width * 2,\n height: needClipY ? height : height * 2\n })), !clipDot && /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clipPath-dots-\".concat(clipPathId)\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: left - dotSize / 2,\n y: top - dotSize / 2,\n width: width + dotSize,\n height: height + dotSize\n }))) : null, !hasSinglePoint ? this.renderArea(needClip, clipPathId) : null, (dot || hasSinglePoint) && this.renderDots(needClip, clipDot, clipPathId), (!isAnimationActive || isAnimationFinished) && LabelList.renderCallByParent(this.props, points));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.animationId !== prevState.prevAnimationId) {\n return {\n prevAnimationId: nextProps.animationId,\n curPoints: nextProps.points,\n curBaseLine: nextProps.baseLine,\n prevPoints: prevState.curPoints,\n prevBaseLine: prevState.curBaseLine\n };\n }\n if (nextProps.points !== prevState.curPoints || nextProps.baseLine !== prevState.curBaseLine) {\n return {\n curPoints: nextProps.points,\n curBaseLine: nextProps.baseLine\n };\n }\n return null;\n }\n }]);\n return Area;\n}(PureComponent);\n_class = Area;\n_defineProperty(Area, \"displayName\", 'Area');\n_defineProperty(Area, \"defaultProps\", {\n stroke: '#3182bd',\n fill: '#3182bd',\n fillOpacity: 0.6,\n xAxisId: 0,\n yAxisId: 0,\n legendType: 'line',\n connectNulls: false,\n // points of area\n points: [],\n dot: false,\n activeDot: true,\n hide: false,\n isAnimationActive: !Global.isSsr,\n animationBegin: 0,\n animationDuration: 1500,\n animationEasing: 'ease'\n});\n_defineProperty(Area, \"getBaseValue\", function (props, item, xAxis, yAxis) {\n var layout = props.layout,\n chartBaseValue = props.baseValue;\n var itemBaseValue = item.props.baseValue;\n\n // The baseValue can be defined both on the AreaChart as well as on the Area.\n // The value for the item takes precedence.\n var baseValue = itemBaseValue !== null && itemBaseValue !== void 0 ? itemBaseValue : chartBaseValue;\n if (isNumber(baseValue) && typeof baseValue === 'number') {\n return baseValue;\n }\n var numericAxis = layout === 'horizontal' ? yAxis : xAxis;\n var domain = numericAxis.scale.domain();\n if (numericAxis.type === 'number') {\n var domainMax = Math.max(domain[0], domain[1]);\n var domainMin = Math.min(domain[0], domain[1]);\n if (baseValue === 'dataMin') {\n return domainMin;\n }\n if (baseValue === 'dataMax') {\n return domainMax;\n }\n return domainMax < 0 ? domainMax : Math.max(Math.min(domain[0], domain[1]), 0);\n }\n if (baseValue === 'dataMin') {\n return domain[0];\n }\n if (baseValue === 'dataMax') {\n return domain[1];\n }\n return domain[0];\n});\n_defineProperty(Area, \"getComposedData\", function (_ref4) {\n var props = _ref4.props,\n item = _ref4.item,\n xAxis = _ref4.xAxis,\n yAxis = _ref4.yAxis,\n xAxisTicks = _ref4.xAxisTicks,\n yAxisTicks = _ref4.yAxisTicks,\n bandSize = _ref4.bandSize,\n dataKey = _ref4.dataKey,\n stackedData = _ref4.stackedData,\n dataStartIndex = _ref4.dataStartIndex,\n displayedData = _ref4.displayedData,\n offset = _ref4.offset;\n var layout = props.layout;\n var hasStack = stackedData && stackedData.length;\n var baseValue = _class.getBaseValue(props, item, xAxis, yAxis);\n var isHorizontalLayout = layout === 'horizontal';\n var isRange = false;\n var points = displayedData.map(function (entry, index) {\n var value;\n if (hasStack) {\n value = stackedData[dataStartIndex + index];\n } else {\n value = getValueByDataKey(entry, dataKey);\n if (!Array.isArray(value)) {\n value = [baseValue, value];\n } else {\n isRange = true;\n }\n }\n var isBreakPoint = value[1] == null || hasStack && getValueByDataKey(entry, dataKey) == null;\n if (isHorizontalLayout) {\n return {\n x: getCateCoordinateOfLine({\n axis: xAxis,\n ticks: xAxisTicks,\n bandSize: bandSize,\n entry: entry,\n index: index\n }),\n y: isBreakPoint ? null : yAxis.scale(value[1]),\n value: value,\n payload: entry\n };\n }\n return {\n x: isBreakPoint ? null : xAxis.scale(value[1]),\n y: getCateCoordinateOfLine({\n axis: yAxis,\n ticks: yAxisTicks,\n bandSize: bandSize,\n entry: entry,\n index: index\n }),\n value: value,\n payload: entry\n };\n });\n var baseLine;\n if (hasStack || isRange) {\n baseLine = points.map(function (entry) {\n var x = Array.isArray(entry.value) ? entry.value[0] : null;\n if (isHorizontalLayout) {\n return {\n x: entry.x,\n y: x != null && entry.y != null ? yAxis.scale(x) : null\n };\n }\n return {\n x: x != null ? xAxis.scale(x) : null,\n y: entry.y\n };\n });\n } else {\n baseLine = isHorizontalLayout ? yAxis.scale(baseValue) : xAxis.scale(baseValue);\n }\n return _objectSpread({\n points: points,\n baseLine: baseLine,\n layout: layout,\n isRange: isRange\n }, offset);\n});\n_defineProperty(Area, \"renderDotItem\", function (option, props) {\n var dotItem;\n if ( /*#__PURE__*/React.isValidElement(option)) {\n dotItem = /*#__PURE__*/React.cloneElement(option, props);\n } else if (isFunction(option)) {\n dotItem = option(props);\n } else {\n dotItem = /*#__PURE__*/React.createElement(Dot, _extends({}, props, {\n className: \"recharts-area-dot\"\n }));\n }\n return dotItem;\n});","/**\n * @fileOverview Z Axis\n */\n\nexport var ZAxis = function ZAxis() {\n return null;\n};\nZAxis.displayName = 'ZAxis';\nZAxis.defaultProps = {\n zAxisId: 0,\n range: [64, 64],\n scale: 'auto',\n type: 'number'\n};","var _excluded = [\"option\", \"isActive\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport { Symbols } from '../shape/Symbols';\nimport { Shape } from './ActiveShapeUtils';\nexport function ScatterSymbol(_ref) {\n var option = _ref.option,\n isActive = _ref.isActive,\n props = _objectWithoutProperties(_ref, _excluded);\n if (typeof option === 'string') {\n return /*#__PURE__*/React.createElement(Shape, _extends({\n option: /*#__PURE__*/React.createElement(Symbols, _extends({\n type: option\n }, props)),\n isActive: isActive,\n shapeType: \"symbols\"\n }, props));\n }\n return /*#__PURE__*/React.createElement(Shape, _extends({\n option: option,\n isActive: isActive,\n shapeType: \"symbols\"\n }, props));\n}","var _class;\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Render a group of scatters\n */\nimport React, { PureComponent } from 'react';\nimport Animate from 'react-smooth';\nimport isNil from 'lodash/isNil';\nimport isEqual from 'lodash/isEqual';\nimport isFunction from 'lodash/isFunction';\nimport clsx from 'clsx';\nimport { Layer } from '../container/Layer';\nimport { LabelList } from '../component/LabelList';\nimport { findAllByType, filterProps } from '../util/ReactUtils';\nimport { Global } from '../util/Global';\nimport { ZAxis } from './ZAxis';\nimport { Curve } from '../shape/Curve';\nimport { ErrorBar } from './ErrorBar';\nimport { Cell } from '../component/Cell';\nimport { uniqueId, interpolateNumber, getLinearRegression } from '../util/DataUtils';\nimport { getValueByDataKey, getCateCoordinateOfLine } from '../util/ChartUtils';\nimport { adaptEventsOfChild } from '../util/types';\nimport { ScatterSymbol } from '../util/ScatterUtils';\nexport var Scatter = /*#__PURE__*/function (_PureComponent) {\n _inherits(Scatter, _PureComponent);\n var _super = _createSuper(Scatter);\n function Scatter() {\n var _this;\n _classCallCheck(this, Scatter);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n isAnimationFinished: false\n });\n _defineProperty(_assertThisInitialized(_this), \"handleAnimationEnd\", function () {\n _this.setState({\n isAnimationFinished: true\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"handleAnimationStart\", function () {\n _this.setState({\n isAnimationFinished: false\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"id\", uniqueId('recharts-scatter-'));\n return _this;\n }\n _createClass(Scatter, [{\n key: \"renderSymbolsStatically\",\n value: function renderSymbolsStatically(points) {\n var _this2 = this;\n var _this$props = this.props,\n shape = _this$props.shape,\n activeShape = _this$props.activeShape,\n activeIndex = _this$props.activeIndex;\n var baseProps = filterProps(this.props);\n return points.map(function (entry, i) {\n var isActive = activeIndex === i;\n var option = isActive ? activeShape : shape;\n var props = _objectSpread(_objectSpread({\n key: \"symbol-\".concat(i)\n }, baseProps), entry);\n return /*#__PURE__*/React.createElement(Layer, _extends({\n className: \"recharts-scatter-symbol\"\n }, adaptEventsOfChild(_this2.props, entry, i), {\n key: \"symbol-\".concat(entry === null || entry === void 0 ? void 0 : entry.cx, \"-\").concat(entry === null || entry === void 0 ? void 0 : entry.cy, \"-\").concat(entry === null || entry === void 0 ? void 0 : entry.size),\n role: \"img\"\n }), /*#__PURE__*/React.createElement(ScatterSymbol, _extends({\n option: option,\n isActive: isActive\n }, props)));\n });\n }\n }, {\n key: \"renderSymbolsWithAnimation\",\n value: function renderSymbolsWithAnimation() {\n var _this3 = this;\n var _this$props2 = this.props,\n points = _this$props2.points,\n isAnimationActive = _this$props2.isAnimationActive,\n animationBegin = _this$props2.animationBegin,\n animationDuration = _this$props2.animationDuration,\n animationEasing = _this$props2.animationEasing,\n animationId = _this$props2.animationId;\n var prevPoints = this.state.prevPoints;\n return /*#__PURE__*/React.createElement(Animate, {\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing,\n from: {\n t: 0\n },\n to: {\n t: 1\n },\n key: \"pie-\".concat(animationId),\n onAnimationEnd: this.handleAnimationEnd,\n onAnimationStart: this.handleAnimationStart\n }, function (_ref) {\n var t = _ref.t;\n var stepData = points.map(function (entry, index) {\n var prev = prevPoints && prevPoints[index];\n if (prev) {\n var interpolatorCx = interpolateNumber(prev.cx, entry.cx);\n var interpolatorCy = interpolateNumber(prev.cy, entry.cy);\n var interpolatorSize = interpolateNumber(prev.size, entry.size);\n return _objectSpread(_objectSpread({}, entry), {}, {\n cx: interpolatorCx(t),\n cy: interpolatorCy(t),\n size: interpolatorSize(t)\n });\n }\n var interpolator = interpolateNumber(0, entry.size);\n return _objectSpread(_objectSpread({}, entry), {}, {\n size: interpolator(t)\n });\n });\n return /*#__PURE__*/React.createElement(Layer, null, _this3.renderSymbolsStatically(stepData));\n });\n }\n }, {\n key: \"renderSymbols\",\n value: function renderSymbols() {\n var _this$props3 = this.props,\n points = _this$props3.points,\n isAnimationActive = _this$props3.isAnimationActive;\n var prevPoints = this.state.prevPoints;\n if (isAnimationActive && points && points.length && (!prevPoints || !isEqual(prevPoints, points))) {\n return this.renderSymbolsWithAnimation();\n }\n return this.renderSymbolsStatically(points);\n }\n }, {\n key: \"renderErrorBar\",\n value: function renderErrorBar() {\n var isAnimationActive = this.props.isAnimationActive;\n if (isAnimationActive && !this.state.isAnimationFinished) {\n return null;\n }\n var _this$props4 = this.props,\n points = _this$props4.points,\n xAxis = _this$props4.xAxis,\n yAxis = _this$props4.yAxis,\n children = _this$props4.children;\n var errorBarItems = findAllByType(children, ErrorBar);\n if (!errorBarItems) {\n return null;\n }\n return errorBarItems.map(function (item, i) {\n var _item$props = item.props,\n direction = _item$props.direction,\n errorDataKey = _item$props.dataKey;\n return /*#__PURE__*/React.cloneElement(item, {\n key: \"\".concat(direction, \"-\").concat(errorDataKey, \"-\").concat(points[i]),\n data: points,\n xAxis: xAxis,\n yAxis: yAxis,\n layout: direction === 'x' ? 'vertical' : 'horizontal',\n dataPointFormatter: function dataPointFormatter(dataPoint, dataKey) {\n return {\n x: dataPoint.cx,\n y: dataPoint.cy,\n value: direction === 'x' ? +dataPoint.node.x : +dataPoint.node.y,\n errorVal: getValueByDataKey(dataPoint, dataKey)\n };\n }\n });\n });\n }\n }, {\n key: \"renderLine\",\n value: function renderLine() {\n var _this$props5 = this.props,\n points = _this$props5.points,\n line = _this$props5.line,\n lineType = _this$props5.lineType,\n lineJointType = _this$props5.lineJointType;\n var scatterProps = filterProps(this.props);\n var customLineProps = filterProps(line);\n var linePoints, lineItem;\n if (lineType === 'joint') {\n linePoints = points.map(function (entry) {\n return {\n x: entry.cx,\n y: entry.cy\n };\n });\n } else if (lineType === 'fitting') {\n var _getLinearRegression = getLinearRegression(points),\n xmin = _getLinearRegression.xmin,\n xmax = _getLinearRegression.xmax,\n a = _getLinearRegression.a,\n b = _getLinearRegression.b;\n var linearExp = function linearExp(x) {\n return a * x + b;\n };\n linePoints = [{\n x: xmin,\n y: linearExp(xmin)\n }, {\n x: xmax,\n y: linearExp(xmax)\n }];\n }\n var lineProps = _objectSpread(_objectSpread(_objectSpread({}, scatterProps), {}, {\n fill: 'none',\n stroke: scatterProps && scatterProps.fill\n }, customLineProps), {}, {\n points: linePoints\n });\n if ( /*#__PURE__*/React.isValidElement(line)) {\n lineItem = /*#__PURE__*/React.cloneElement(line, lineProps);\n } else if (isFunction(line)) {\n lineItem = line(lineProps);\n } else {\n lineItem = /*#__PURE__*/React.createElement(Curve, _extends({}, lineProps, {\n type: lineJointType\n }));\n }\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-scatter-line\",\n key: \"recharts-scatter-line\"\n }, lineItem);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props6 = this.props,\n hide = _this$props6.hide,\n points = _this$props6.points,\n line = _this$props6.line,\n className = _this$props6.className,\n xAxis = _this$props6.xAxis,\n yAxis = _this$props6.yAxis,\n left = _this$props6.left,\n top = _this$props6.top,\n width = _this$props6.width,\n height = _this$props6.height,\n id = _this$props6.id,\n isAnimationActive = _this$props6.isAnimationActive;\n if (hide || !points || !points.length) {\n return null;\n }\n var isAnimationFinished = this.state.isAnimationFinished;\n var layerClass = clsx('recharts-scatter', className);\n var needClipX = xAxis && xAxis.allowDataOverflow;\n var needClipY = yAxis && yAxis.allowDataOverflow;\n var needClip = needClipX || needClipY;\n var clipPathId = isNil(id) ? this.id : id;\n return /*#__PURE__*/React.createElement(Layer, {\n className: layerClass,\n clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : null\n }, needClipX || needClipY ? /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clipPath-\".concat(clipPathId)\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: needClipX ? left : left - width / 2,\n y: needClipY ? top : top - height / 2,\n width: needClipX ? width : width * 2,\n height: needClipY ? height : height * 2\n }))) : null, line && this.renderLine(), this.renderErrorBar(), /*#__PURE__*/React.createElement(Layer, {\n key: \"recharts-scatter-symbols\"\n }, this.renderSymbols()), (!isAnimationActive || isAnimationFinished) && LabelList.renderCallByParent(this.props, points));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.animationId !== prevState.prevAnimationId) {\n return {\n prevAnimationId: nextProps.animationId,\n curPoints: nextProps.points,\n prevPoints: prevState.curPoints\n };\n }\n if (nextProps.points !== prevState.curPoints) {\n return {\n curPoints: nextProps.points\n };\n }\n return null;\n }\n }]);\n return Scatter;\n}(PureComponent);\n_class = Scatter;\n_defineProperty(Scatter, \"displayName\", 'Scatter');\n_defineProperty(Scatter, \"defaultProps\", {\n xAxisId: 0,\n yAxisId: 0,\n zAxisId: 0,\n legendType: 'circle',\n lineType: 'joint',\n lineJointType: 'linear',\n data: [],\n shape: 'circle',\n hide: false,\n isAnimationActive: !Global.isSsr,\n animationBegin: 0,\n animationDuration: 400,\n animationEasing: 'linear'\n});\n/**\n * Compose the data of each group\n * @param {Object} xAxis The configuration of x-axis\n * @param {Object} yAxis The configuration of y-axis\n * @param {String} dataKey The unique key of a group\n * @return {Array} Composed data\n */\n_defineProperty(Scatter, \"getComposedData\", function (_ref2) {\n var xAxis = _ref2.xAxis,\n yAxis = _ref2.yAxis,\n zAxis = _ref2.zAxis,\n item = _ref2.item,\n displayedData = _ref2.displayedData,\n xAxisTicks = _ref2.xAxisTicks,\n yAxisTicks = _ref2.yAxisTicks,\n offset = _ref2.offset;\n var tooltipType = item.props.tooltipType;\n var cells = findAllByType(item.props.children, Cell);\n var xAxisDataKey = isNil(xAxis.dataKey) ? item.props.dataKey : xAxis.dataKey;\n var yAxisDataKey = isNil(yAxis.dataKey) ? item.props.dataKey : yAxis.dataKey;\n var zAxisDataKey = zAxis && zAxis.dataKey;\n var defaultRangeZ = zAxis ? zAxis.range : ZAxis.defaultProps.range;\n var defaultZ = defaultRangeZ && defaultRangeZ[0];\n var xBandSize = xAxis.scale.bandwidth ? xAxis.scale.bandwidth() : 0;\n var yBandSize = yAxis.scale.bandwidth ? yAxis.scale.bandwidth() : 0;\n var points = displayedData.map(function (entry, index) {\n var x = getValueByDataKey(entry, xAxisDataKey);\n var y = getValueByDataKey(entry, yAxisDataKey);\n var z = !isNil(zAxisDataKey) && getValueByDataKey(entry, zAxisDataKey) || '-';\n var tooltipPayload = [{\n name: isNil(xAxis.dataKey) ? item.props.name : xAxis.name || xAxis.dataKey,\n unit: xAxis.unit || '',\n value: x,\n payload: entry,\n dataKey: xAxisDataKey,\n type: tooltipType\n }, {\n name: isNil(yAxis.dataKey) ? item.props.name : yAxis.name || yAxis.dataKey,\n unit: yAxis.unit || '',\n value: y,\n payload: entry,\n dataKey: yAxisDataKey,\n type: tooltipType\n }];\n if (z !== '-') {\n tooltipPayload.push({\n name: zAxis.name || zAxis.dataKey,\n unit: zAxis.unit || '',\n value: z,\n payload: entry,\n dataKey: zAxisDataKey,\n type: tooltipType\n });\n }\n var cx = getCateCoordinateOfLine({\n axis: xAxis,\n ticks: xAxisTicks,\n bandSize: xBandSize,\n entry: entry,\n index: index,\n dataKey: xAxisDataKey\n });\n var cy = getCateCoordinateOfLine({\n axis: yAxis,\n ticks: yAxisTicks,\n bandSize: yBandSize,\n entry: entry,\n index: index,\n dataKey: yAxisDataKey\n });\n var size = z !== '-' ? zAxis.scale(z) : defaultZ;\n var radius = Math.sqrt(Math.max(size, 0) / Math.PI);\n return _objectSpread(_objectSpread({}, entry), {}, {\n cx: cx,\n cy: cy,\n x: cx - radius,\n y: cy - radius,\n xAxis: xAxis,\n yAxis: yAxis,\n zAxis: zAxis,\n width: 2 * radius,\n height: 2 * radius,\n size: size,\n node: {\n x: x,\n y: y,\n z: z\n },\n tooltipPayload: tooltipPayload,\n tooltipPosition: {\n x: cx,\n y: cy\n },\n payload: entry\n }, cells && cells[index] && cells[index].props);\n });\n return _objectSpread({\n points: points\n }, offset);\n});","/**\n * @fileOverview Composed Chart\n */\nimport { generateCategoricalChart } from './generateCategoricalChart';\nimport { Area } from '../cartesian/Area';\nimport { Bar } from '../cartesian/Bar';\nimport { Line } from '../cartesian/Line';\nimport { Scatter } from '../cartesian/Scatter';\nimport { XAxis } from '../cartesian/XAxis';\nimport { YAxis } from '../cartesian/YAxis';\nimport { ZAxis } from '../cartesian/ZAxis';\nimport { formatAxisMap } from '../util/CartesianUtils';\nexport var ComposedChart = generateCategoricalChart({\n chartName: 'ComposedChart',\n GraphicalChild: [Line, Area, Bar, Scatter],\n axisComponents: [{\n axisType: 'xAxis',\n AxisComp: XAxis\n }, {\n axisType: 'yAxis',\n AxisComp: YAxis\n }, {\n axisType: 'zAxis',\n AxisComp: ZAxis\n }],\n formatAxisMap: formatAxisMap\n});","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * @fileOverview Wrapper component to make charts adapt to the size of parent * DOM\n */\nimport clsx from 'clsx';\nimport React, { forwardRef, cloneElement, useState, useImperativeHandle, useRef, useEffect, useMemo, useCallback } from 'react';\nimport throttle from 'lodash/throttle';\nimport { isElement } from 'react-is';\nimport { isPercent } from '../util/DataUtils';\nimport { warn } from '../util/LogUtils';\nimport { getDisplayName } from '../util/ReactUtils';\nexport var ResponsiveContainer = /*#__PURE__*/forwardRef(function (_ref, ref) {\n var aspect = _ref.aspect,\n _ref$initialDimension = _ref.initialDimension,\n initialDimension = _ref$initialDimension === void 0 ? {\n width: -1,\n height: -1\n } : _ref$initialDimension,\n _ref$width = _ref.width,\n width = _ref$width === void 0 ? '100%' : _ref$width,\n _ref$height = _ref.height,\n height = _ref$height === void 0 ? '100%' : _ref$height,\n _ref$minWidth = _ref.minWidth,\n minWidth = _ref$minWidth === void 0 ? 0 : _ref$minWidth,\n minHeight = _ref.minHeight,\n maxHeight = _ref.maxHeight,\n children = _ref.children,\n _ref$debounce = _ref.debounce,\n debounce = _ref$debounce === void 0 ? 0 : _ref$debounce,\n id = _ref.id,\n className = _ref.className,\n onResize = _ref.onResize,\n _ref$style = _ref.style,\n style = _ref$style === void 0 ? {} : _ref$style;\n var containerRef = useRef(null);\n var onResizeRef = useRef();\n onResizeRef.current = onResize;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n useImperativeHandle(ref, function () {\n return containerRef;\n });\n var _useState = useState({\n containerWidth: initialDimension.width,\n containerHeight: initialDimension.height\n }),\n _useState2 = _slicedToArray(_useState, 2),\n sizes = _useState2[0],\n setSizes = _useState2[1];\n var setContainerSize = useCallback(function (newWidth, newHeight) {\n setSizes(function (prevState) {\n var roundedWidth = Math.round(newWidth);\n var roundedHeight = Math.round(newHeight);\n if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {\n return prevState;\n }\n return {\n containerWidth: roundedWidth,\n containerHeight: roundedHeight\n };\n });\n }, []);\n useEffect(function () {\n var callback = function callback(entries) {\n var _onResizeRef$current;\n var _entries$0$contentRec = entries[0].contentRect,\n containerWidth = _entries$0$contentRec.width,\n containerHeight = _entries$0$contentRec.height;\n setContainerSize(containerWidth, containerHeight);\n (_onResizeRef$current = onResizeRef.current) === null || _onResizeRef$current === void 0 || _onResizeRef$current.call(onResizeRef, containerWidth, containerHeight);\n };\n if (debounce > 0) {\n callback = throttle(callback, debounce, {\n trailing: true,\n leading: false\n });\n }\n var observer = new ResizeObserver(callback);\n var _containerRef$current = containerRef.current.getBoundingClientRect(),\n containerWidth = _containerRef$current.width,\n containerHeight = _containerRef$current.height;\n setContainerSize(containerWidth, containerHeight);\n observer.observe(containerRef.current);\n return function () {\n observer.disconnect();\n };\n }, [setContainerSize, debounce]);\n var chartContent = useMemo(function () {\n var containerWidth = sizes.containerWidth,\n containerHeight = sizes.containerHeight;\n if (containerWidth < 0 || containerHeight < 0) {\n return null;\n }\n warn(isPercent(width) || isPercent(height), \"The width(%s) and height(%s) are both fixed numbers,\\n maybe you don't need to use a ResponsiveContainer.\", width, height);\n warn(!aspect || aspect > 0, 'The aspect(%s) must be greater than zero.', aspect);\n var calculatedWidth = isPercent(width) ? containerWidth : width;\n var calculatedHeight = isPercent(height) ? containerHeight : height;\n if (aspect && aspect > 0) {\n // Preserve the desired aspect ratio\n if (calculatedWidth) {\n // Will default to using width for aspect ratio\n calculatedHeight = calculatedWidth / aspect;\n } else if (calculatedHeight) {\n // But we should also take height into consideration\n calculatedWidth = calculatedHeight * aspect;\n }\n\n // if maxHeight is set, overwrite if calculatedHeight is greater than maxHeight\n if (maxHeight && calculatedHeight > maxHeight) {\n calculatedHeight = maxHeight;\n }\n }\n warn(calculatedWidth > 0 || calculatedHeight > 0, \"The width(%s) and height(%s) of chart should be greater than 0,\\n please check the style of container, or the props width(%s) and height(%s),\\n or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\\n height and width.\", calculatedWidth, calculatedHeight, width, height, minWidth, minHeight, aspect);\n var isCharts = !Array.isArray(children) && isElement(children) && getDisplayName(children.type).endsWith('Chart');\n return React.Children.map(children, function (child) {\n if (isElement(child)) {\n return /*#__PURE__*/cloneElement(child, _objectSpread({\n width: calculatedWidth,\n height: calculatedHeight\n }, isCharts ? {\n style: _objectSpread({\n height: '100%',\n width: '100%',\n maxHeight: calculatedHeight,\n maxWidth: calculatedWidth\n }, child.props.style)\n } : {}));\n }\n return child;\n });\n }, [aspect, children, height, maxHeight, minHeight, minWidth, sizes, width]);\n return /*#__PURE__*/React.createElement(\"div\", {\n id: id ? \"\".concat(id) : undefined,\n className: clsx('recharts-responsive-container', className),\n style: _objectSpread(_objectSpread({}, style), {}, {\n width: width,\n height: height,\n minWidth: minWidth,\n minHeight: minHeight,\n maxHeight: maxHeight\n }),\n ref: containerRef\n }, chartContent);\n});"],"names":["round","n","places","arguments","length","undefined","Math","Number","toFixed","format","totalReturn","maxDrawdown","sharpeRatio","calmarRatio","CAGR","cagr","volatility","numberOfTrades","positiveDays","negativeDays","bestMonth","worstMonth","figureSpace","BACKTEST_MIN_MAX_DATES","Object","freeze","min","Date","max","ETF_MARKET_CAP_LABEL","MARKET_CAP_VALUE","ETF_SECTOR_VALUE","ETF_INDUSTRY_IDS","xys","value","label","sizes","colors","indexes","sectors","industries","marketCaps","averageVolumes","DEFAULT_COLOR_SCALE","getValueWithFallback","values","fallback","_v$value","v","find","getDefaultValues","_query$rangeX","_query$rangeY","query","extendedFilters","state","x","y","size","color","idx","rangeX","rangeY","_query$tickers","_query$excludeTickers","sec","ind","cap","sh_avgvol","tickers","excludeTickers","decodeQueryString","decode","percentile","arr","excelPercentile","sequence","concat","sort","a","b","N","k","d","getXScale","data","width","d3","range","domain","nice","getYScale","height","_colorScales","getColorScale","colorOption","c","gradient","linearScale","colorScale","map","filter","isFinite","bubbleGradients","nullColor","i","abs","ScaleId","DayPerf","getSizeScale","r","getScales","generatePresetUrl","presetConfig","baseQuery","encodeQueryString","fromEntries","window","location","pathname","formatValue","finiteFormatting","absValue","getQuoteSubview","type","_Object$values$find","QuoteSubview","getQuoteView","Dividends","Eearnings","Revenue","QuoteView","Financials","OptionsChain","OptionsVolatility","Options","ChartDetail","QuoteContext","React","index","ticker","period","TIMEFRAME","view","subview","QuoteContextProvider","_ref","children","useSearchParams","get","QuoteQuery","Type","Period","contextValue","_jsx","Provider","QuotePortalContext","rootElement","staticElement","toggleStaticElement","QuotePortal","staticElements","roots","context","elementIndex","NodeList","Array","isArray","isEnabled","setIsEnabled","elementToHide","elementToShow","enabled","hideElement","element","classList","add","showElement","remove","toggleElements","toggleFn","forEach","useToggleStaticElements","portalContextValue","ErrorBoundary","onError","ReactDOM","QuoteLinksContext","chartLayoutModel","URL","href","QuoteLinksWrapper","info","_chartLayoutModel$act","isPremium","FinvizSettings","hasUserPremium","useChartLayoutGlobalModelAsync","chartModel","useModelState","activeChart","watchProperties","generateChartLayoutRouterPath","useChartModelCustomDateRangeValues","search","origin","timeframe","dateRange","useChartTimeframePathWatch","NavigationLink","isEliteOnly","utmCampaign","getLink","reloadDocument","preserveQueryKeys","Ticker","DateRange","removeQueryKeys","additionalQueryValues","props","quoteContext","linkContext","linkUrl","getElitePageLink","getNavigationLinkUrl","toString","Link","to","className","classNames","CreateAlertLink","dialog","useDialogState","isVisible","useState","createAlertModule","useAsyncModule","createAlertAsyncModule","shouldLoadModule","CreateAlert","_jsxs","_Fragment","onClick","e","_window$gtag","_window","gtag","call","event_category","ctrlKey","metaKey","preventDefault","show","Dialog","Spinner","SaveToPortfolioLink","saveToPortfolioModule","saveToPortfolioAsyncModule","SaveToPortfolio","email","QuoteNavigation","hasShortInterest","dataset","shortinterest","ComparePerf","ShortInterest","hasTrafficPageEnabled","Traffic","LatestFilings","QuoteChart","useChartLayoutWidthWatch","chartEl","document","getElementById","CHART_ELEMENT_ID","chartConfig","globalChartConfig","theme","hasDarkTheme","Theme","dark","light","p","defaultPeriod","ChartLayoutWithGlobalState","config","getChartLayoutSizeConfig","specificChartFunctionality","SpecificChartFunctionality","quotePage","charts","chart","_chart$dateRange","FREE_DATE_RANGES","includes","parentElement","redesignEnabled","hasRedesignEnabled","colorScaleClass","monthNames","Chart","Component","constructor","_defineProperty","shouldComponentUpdate","nextProps","arr1","arr2","arraysEqual","this","render","_tickerQuote$0$ticker","_tickerQuote$","tickerQuote","Quote","select","q","close","getStaticChartConfig","paneElements","ChartElementType","PerfChart","fromDate","fromDay","toDate","toDay","overlays","refreshData","quotePerf","ref","containerRef","id","style","opacity","ChartLayout","Table","months","rows","groupsCount","ceil","slice","tdClasses","classnames","trs","g","push","splice","month","row","col","monthIndex","parseFloat","total","cellPadding","cellSpacing","border","Perf","_this","super","_fetch","dailyQuotes","o","h","l","date","Utils","dateFromUnixTimestamp","open","high","low","volume","clearCachedData","updateAttributes","forceUpdate","async","isRefetch","t","setState","loading","all","quote","fetchData","fetchType","QuoteFetchType","Refetch","NewerData","updateQuoteData","destroy","instrument","Instrument","Stock","m","getAll","tickersInput","getSanitizedTicker","split","target","formattedDate","formatDateToStringUS","now","year","getFullYear","getMonth","padStart","substring","FinvizQuoteTickers","join","fromMonth","toMonth","minDate","dateFns","years","maxDate","minHeight","from","monthsToShow","quotesPerf","obj","perf","cols","isNaN","onSubmit","_onSubmit","padding","onChange","position","top","right","fontSize","display","DatePicker","newValue","_onDatePickerChange","readOnly","_onMonthChange","bind","fontWeight","option","componentDidMount","addEventListener","refetchQuotes","componentWillUnmount","unbind","removeEventListener","_excluded","_excluded2","_typeof","Symbol","iterator","prototype","_extends","assign","source","key","hasOwnProperty","apply","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","ownKeys","getOwnPropertyDescriptor","enumerable","_objectSpread","getOwnPropertyDescriptors","defineProperties","defineProperty","_defineProperties","descriptor","configurable","writable","_setPrototypeOf","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","result","Super","_getPrototypeOf","NewTarget","self","TypeError","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","getPrototypeOf","arg","input","hint","prim","toPrimitive","res","String","CartesianGrid","_PureComponent","subClass","superClass","create","_inherits","Constructor","protoProps","staticProps","_super","instance","_classCallCheck","lineItem","x1","y1","x2","y2","others","_filterProps","restOfFilteredProps","offset","fill","horizontalPoints","_this$props","horizontal","items","entry","renderLineItem","verticalPoints","_this2","_this$props2","vertical","verticalFill","_this$props3","fillOpacity","roundedSortedVerticalPoints","unshift","lineWidth","colorIndex","stroke","horizontalFill","_this$props4","roundedSortedHorizontalPoints","lineHeight","_this$props5","_this$props6","horizontalCoordinatesGenerator","verticalCoordinatesGenerator","xAxis","yAxis","chartWidth","chartHeight","syncWithTicks","horizontalValues","verticalValues","_this$props7","isHorizontalValues","ticks","isVerticalValues","renderBackground","renderHorizontal","renderVertical","renderHorizontalStripes","renderVerticalStripes","PureComponent","CHART_HEIGHT","BAR_WIDTH","BAR_BORDER_RADIUS","STROKE_COLOR","LINE_COLOR","SALE_BAR_COLOR","BUY_BAR_COLOR","Y_TICK_STYLE","X_TICK_STYLE","TOOLTIP_WRAPPER_STYLE","outline","zIndex","CURSOR_STYLE","TRANSPARENT_CURSOR","BarType","BarColorMap","Buy","Sale","BarLabelMap","formatDateTitle","startDate","startOfMonth","endDate","endOfMonth","toLocaleString","startDay","getDate","endDay","formatDataValue","barType","payload","tradeCount","buyTransactionCount","saleTransactionCount","buyAggregated","saleAggregated","BarTooltipLabel","activeKey","ChartTooltip","_ref2","_payload$","isActive","cursorPayload","insider","invisible","willChange","InsiderVolumeBar","newX","dataKey","isCenteredBar","name","Rectangle","background","CustomCursor","numberOfDatapoints","points","cursorWidth","xAxisTickFormatter","InsiderTradingVolumeChart","_initData$data4","setIsActive","chartData","setChartData","setActiveKey","initData","parseRouteInitData","elementId","removeElement","getTime","hasInsiderTradingHistory","_initData$data","some","urlTicker","_initData$data2","monthlyData","fromTimestamp","toTimestamp","currentTimestamp","currentClose","barToDataIndex","filterDataForChart","getInstrument","_initData$data3","fetchQuoteData","commonProps","bar","yAxisId","activeBar","shape","radius","isAnimationActive","onMouseLeave","scale","dy","tick","tickLine","axisLine","tickFormatter","onMouseEnter","ResponsiveContainer","ComposedChart","barGap","barCategoryGap","strokeDasharray","XAxis","xAxisId","hide","YAxis","orientation","Tooltip","wrapperStyle","cursor","content","Line","dot","activeDot","Bar","QuotePrice","title","dateLabel","price","changeUsd","changePct","fractions","hasValue","formatDate","formatNumber","defaultValue","RedGreenMultiline","RedGreenText","showPlusSign","rightContent","CHANGE_UPATE_EVENTS","QUOTE_MODEL_CHANGE_EVENTS","useChartContextPrices","_chartModel$quote","first","listenOnEvents","quoteModel","prevClose","lastClose","lastTime","lastDate","afterClose","afterTime","ChartContextQuoteHeader","QuoteHeaderContent","ManualInitQuoteHeader","withCompleteLayoutModelInit","withQuotePolling","modelProperties","chart_layout","panes","options","maxBars","fetchAndMapInitialQuote","isChange","isAfterChange","afterDate","afterhoursTitle","dirtyDate","dirtyDateToCompare","requiredArgs","dateToCompare","BarChart","createRef","renderChart","componentDidUpdate","_FinvizSettings","_prevData","svgRef","current","innerHTML","xAxisRotate","margin","marginRight","totalWidth","totalHeight","rangeRound","yFormat","valueFormatter","tickFormat","svg","property","append","attr","tickSize","tickSizeOuter","selectAll","text","getHeight","_d$value","isOutside","enter","bandwidth","outside","StatementsDataEnum","StatementsTimeframeEnum","DEFAULT_SETTINGS","yoyChange","yoyChangePct","statementsTimeframe","annual","unknown","bars","transition","exit","EliteHoverAd","Icon","BarChartWrapper","hover","Ariakit","placement","showTimeout","disabled","portal","BarChartBig","DEFAULT_SOURCE","_getDefaultSource","getValue","getTimeframeFromStatementsSettingsTimeframe","quarterly","StatementsComponent","settings","useFinancialsTableContext","pageRef","getInvestingChannelPage","sheet","currency","hasData","error","_pageRef$current","_pageRef$current2","response","fetch","json","_renderSheetLink","paddingLeft","setValue","align","StatementsSettingsSection","StatementsTable","setSettings","toggleSetting","yoyGrowthLabel","ChipSwitch","rounding","isRedesignEnabled","ChipSwitchButton","active","isChartable","isHighlightRow","_FinvizSettings2","skipFirst","parsedData","parsed","parsedValue","replace","parseData","yoyData","entries","reduce","acc","lastValue","reverse","_ref3","isValidValue","change","reversedYoyData","_ref4","_ref5","cellClass","adRowIndexStart","rowIndex","hasYoYData","_yoyData$key$change$c","_yoyData$key","_yoyData$key$changePc","_yoyData$key2","_yoyChangePctValue$to","changeIndex","yoyChangeValue","yoyChangePctValue","rowSpan","colSpan","AdTag","shortFormatNumber","FinancialsTableContextProvider","defaultSettings","cookieKey","hasRedesign","StaticChartHeader","isStockDetailUpdating","ChartTypesSelect","specificFunctionality","StockDetailTimeframeBar","chartIndex","isDateRangeAvailable","isLoadingOverride","isScrollIntoViewEnabled","Button","leftContent","convertData","endYear","FAChart","smallRoundPlaces","largeRoundPlaces","smallScale","largeScale","smallTitleSufix","largeTitleSufix","isLarge","rounded","FundamentalCharts","routeData","CORRELATION_LINKS_CONTAINER_SELECTOR","MULTITICKER_CHART_ELEMENT_SELECTOR","SET_SEARCH_EXT_SELECTOR","etfHoldingsAsyncModule","importFn","cacheKey","LoadingFallback","_","withNotificationContext","etfHoldingsModule","errorSeverity","ETFHoldingsComponent","ETFHoldings","then","RenderRecentQuotes","PRICE_STATIC","querySelectorAll","PRICE_ROOTS","NAVIGATION_STATIC","NAVIGATION_ROOTS","ETF_HOLDINGS_STATIC","ETF_HOLDINGS_ROOTS","isETF","STATIC_CHART_HEADER_ROOTS","FUNDAMENTAL_CHARTS_ROOTS","STATEMENTS_ROOTS","INSIDER_CHART_ROOTS","ReactComponentsContainer","EtfHoldings","Statements","QuoteTickerComponents","useCheckNonIdeaChartMissingConfig","useLocation","ty","isInitializedRef","setIsStockDetailUpdating","multiTickerElements","getElementsByClassName","correlationElements","abortController","AbortController","signal","virtualDOM","DOMParser","parseFromString","multiTickerHtmlElements","newMultiTickerHtmlElements","onload","src","correlationLinksTableCellHtmlElements","newCorrelationLinksTableCellHtmlElements","newsearchFunctionWrapperElement","setSearchExtArgument","quoteSearchExt","catch","err","Sentry","captureException","abort","useStockDetailUpdater","ready","reactRootElement","_window$globalChartCo","quoteData","idea","getInitChartConfig","ideaQuotes","initIdeaQuotes","ReactDOMClient","BrowserRouter","NotificationWrapper","revealRatingButtonsCollection","revealRatingButton","onclick","ratingsRowWithTable","previousElementSibling","rating","contains","default","colorsOverride","getCustomColorsFromCookies","layout","LayoutType","barWidth","barMargin","scrollable","editable","premarket","aftermarket","ScaleType","Linear","leftOffset","stretch","elements","JSON","parse","getParsedCookies","IC_PUBLISHER_ID","AdTagName","tagDefinition","IC_TickerInContent","placements","IC_MapsLeftRail","IC_Statements","IC_Groups","hasInvestingChannelAds","tracking","InvestingChannel","page","_window$InvestingChan","InvestingChannelQueue","_window$FINVIZ_IC_UAT","_window$InvestingChan2","UAT","Run","console","_window$InvestingChan3","_page","useInvestingChannelAds","deps","tagName","tagProps","placementName","Paragraph","child","_child$props$theme","FinancialsTableContext","scrollInfo","setScrollInfo","cookieValue","decodeURIComponent","getCookie","yPosition","scrollY","setCookieRequest","stringify","FinancialsTableRow","columns","subColumns","onVisibilityChange","isFirst","isLast","labelElement","labelColumnClassName","isSelected","subData","TableBody","onMouseDown","TableRow","TableCell","hasLeading","TableAlign","Left","Checkbox","checked","column","_column$getColumnClas","getColumnClassName","renderColumn","item","array","FinancialsTable","tableHead","tableFooter","isTableFixed","_row$id","ShadowPosition","TableScrollShadow","side","left","TABLE_SHADOW_MARGIN","FinancialsTableStickyColumnWrapper","numOfTableRows","stickyRef","shadowPosition","setShadowPosition","none","shadowDimensions","setShadowDimensions","stickyElement","onScroll","throttle","stickyElementScrollLeft","scrollLeft","newShadowPosition","hasScrollSpaceToLeft","hasScrollSpaceToRight","offsetWidth","scrollWidth","leftAndRight","scrollTo","_stickyRef$current","_financialsTable$quer","_financialsTable$quer2","_financialsTable$quer3","_financialsTable$quer4","_financialsTable$clie","financialsTable","querySelector","headHeight","clientHeight","firstColumnWidth","clientWidth","radiusCropFillerStyle","shadowLeftStyle","shadowRightStyle","FinancialsWidget","_data$0$values$length","_data$","stickyColumnWrapperClassName","header","hasStickyColumnWrapper","getYoYData","sortedData","parseInt","_sortedData$value","_sortedData","prev","getMoMPercentageData","_sortedData$value2","_sortedData2","getIsCompact","numOfCols","innerWidth","getHeatmapClassNames","isIdeaNotFoundPage","reload","PADDING","getChartsDimensions","chartElementId","_box$width","_box$height","containerElement","box","getBoundingClientRect","getChartConfig","chartsDimensions","FinvizChartsSettings","ideaChart","editors","newCharts","alignChartsToRight","periods","ranges","taConfig","getInstrumentForTicker","hasChartEvents","convertTa","quotes","hasPatterns","drawMinutesPerDay","marketStartMinutes","premarketLengthMinutes","aftermarketLengthMinutes","ideaID","_class","_toPropertyKey","_toPrimitive","Area","_len","args","_key","isAnimationFinished","onAnimationEnd","onAnimationStart","prevState","animationId","prevAnimationId","curPoints","curBaseLine","baseLine","prevPoints","prevBaseLine","needClip","clipDot","clipPathId","areaProps","customDotProps","dots","dotProps","cx","cy","renderDotItem","dotsProps","clipPath","Layer","alpha","strokeWidth","startX","endX","maxY","floor","startY","endY","maxX","renderVerticalRect","renderHorizontalRect","connectNulls","isRange","Curve","animationBegin","animationDuration","animationEasing","_this$state","begin","duration","easing","handleAnimationEnd","handleAnimationStart","stepBaseLine","prevPointsDiffFactor","stepPoints","prevPointIndex","interpolatorX","interpolatorY","interpolator","_interpolator","renderAreaStatically","renderClipRect","_this$state2","totalLength","renderAreaWithAnimation","hasSinglePoint","layerClass","clsx","needClipX","allowDataOverflow","needClipY","_ref2$r","_ref2$strokeWidth","_ref3$clipDot","dotSize","renderArea","renderDots","LabelList","renderCallByParent","legendType","Global","isSsr","chartBaseValue","baseValue","itemBaseValue","numericAxis","domainMax","domainMin","xAxisTicks","yAxisTicks","bandSize","stackedData","dataStartIndex","displayedData","hasStack","getBaseValue","isHorizontalLayout","isBreakPoint","axis","Dot","ZAxis","displayName","defaultProps","zAxisId","ScatterSymbol","Symbols","shapeType","Scatter","activeShape","activeIndex","baseProps","role","_this3","stepData","interpolatorCx","interpolatorCy","interpolatorSize","renderSymbolsStatically","renderSymbolsWithAnimation","errorBarItems","ErrorBar","_item$props","direction","errorDataKey","dataPointFormatter","dataPoint","node","errorVal","linePoints","line","lineType","lineJointType","scatterProps","customLineProps","_getLinearRegression","xmin","xmax","linearExp","lineProps","renderLine","renderErrorBar","renderSymbols","zAxis","tooltipType","cells","Cell","xAxisDataKey","yAxisDataKey","zAxisDataKey","defaultRangeZ","defaultZ","xBandSize","yBandSize","z","tooltipPayload","unit","sqrt","PI","tooltipPosition","generateCategoricalChart","chartName","GraphicalChild","axisComponents","axisType","AxisComp","formatAxisMap","_slicedToArray","_arrayWithHoles","u","f","next","done","_iterableToArrayLimit","minLen","_arrayLikeToArray","test","_unsupportedIterableToArray","_nonIterableRest","len","forwardRef","aspect","_ref$initialDimension","initialDimension","_ref$width","_ref$height","_ref$minWidth","minWidth","maxHeight","_ref$debounce","debounce","onResize","_ref$style","useRef","onResizeRef","useImperativeHandle","_useState2","containerWidth","containerHeight","setSizes","setContainerSize","useCallback","newWidth","newHeight","roundedWidth","roundedHeight","useEffect","callback","_onResizeRef$current","_entries$0$contentRec","contentRect","trailing","leading","observer","ResizeObserver","_containerRef$current","observe","disconnect","chartContent","useMemo","calculatedWidth","calculatedHeight","isCharts","isElement","endsWith","cloneElement","maxWidth"],"sourceRoot":""}