{"version":3,"file":"screener.d4689927.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/screener/filter-modal/currentvolume-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/default-filter.tsx","webpack://@finviz/website/./js/app/screener/date-range.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/earningsdate-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/epsrev-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/float-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/highlow-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/ipodate-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/options-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/period-range-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/sma-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/targetprice-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/volatility-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/filter-dialog.tsx","webpack://@finviz/website/./js/app/screener/use-custom-range-controller.tsx","webpack://@finviz/website/./js/app/screener/use-hide-custom-controller.tsx","webpack://@finviz/website/./js/app/screener/use-tickers-input-controller.tsx","webpack://@finviz/website/./js/app/screener/screener-premium.tsx","webpack://@finviz/website/./js/app/screener/screener-timeframe-bar.tsx","webpack://@finviz/website/./js/app/screener/index.tsx","webpack://@finviz/website/./js/app/screener/utils.ts","webpack://@finviz/website/./js/main/components/Table/Table.tsx","webpack://@finviz/website/./js/main/components/Table/types.ts","webpack://@finviz/website/./js/main/components/Table/TableCell.tsx","webpack://@finviz/website/./js/main/components/Table/TableHeader.tsx","webpack://@finviz/website/./js/main/components/Table/TableRow.tsx","webpack://@finviz/website/./js/main/components/Table/hooks.ts","webpack://@finviz/website/./js/main/components/delayed.tsx","webpack://@finviz/website/./js/main/components/notification/hooks.ts","webpack://@finviz/website/./js/main/components/notification/notification-wrapper.tsx","webpack://@finviz/website/./js/main/components/notification/with-notification-context.tsx","webpack://@finviz/website/./js/main/components/notification/notification.tsx","webpack://@finviz/website/./js/main/hooks/use-sort-data.ts","webpack://@finviz/website/./js/main/hooks/useVisualViewport.ts"],"sourcesContent":["import React from 'react'\r\n\r\nimport { Table, TableBody } from '../../../main/components/Table'\r\nimport { Button } from '../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Input } from '../../../main/components/input'\r\nimport { Heading } from '../../../main/components/typography'\r\nimport { rangesToFilter } from '../utils'\r\nimport { FilterProps } from './types'\r\n\r\nconst DELIMITER = 'x'\r\nconst DEFAULT_RANGE = { from: '', to: '' }\r\n\r\nexport default function CurrentVolumeFilter({ config, onSubmit }: FilterProps) {\r\n const [sharesRange, setSharesRange] = React.useState(DEFAULT_RANGE)\r\n const [usdRange, setUsdRange] = React.useState(DEFAULT_RANGE)\r\n\r\n React.useEffect(() => {\r\n const filter = config.selectedValues[0]\r\n if (filter) {\r\n const parts = filter.split(DELIMITER)\r\n const [sharesRangeFrom = '', sharesRangeTo = ''] = parts[0].includes('to') ? parts[0].split('to') : []\r\n setSharesRange({ from: sharesRangeFrom, to: sharesRangeTo })\r\n\r\n if (parts.length === 2) {\r\n const [usdRangeFrom = '', usdRangeTo = ''] = parts[1].includes('to') ? parts[1].split('to') : []\r\n setUsdRange({\r\n from: usdRangeFrom && (Number(usdRangeFrom) / 1000).toFixed(2).replace('.00', ''),\r\n to: usdRangeTo && (Number(usdRangeTo) / 1000).toFixed(2).replace('.00', ''),\r\n })\r\n }\r\n }\r\n }, [config])\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n onSubmit([\r\n rangesToFilter([\r\n sharesRange,\r\n {\r\n from: usdRange.from && (Number(usdRange.from) * 1000).toFixed(2).replace('.00', ''),\r\n to: usdRange.to && (Number(usdRange.to) * 1000).toFixed(2).replace('.00', ''),\r\n },\r\n ]),\r\n ])\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n Match all of the following:\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\n \r\n \r\n
Shares\r\n {\r\n setSharesRange({ ...sharesRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n -\r\n {\r\n setSharesRange({ ...sharesRange, to: e.currentTarget.value })\r\n }}\r\n />\r\n K
USD volume\r\n {\r\n setUsdRange({ ...usdRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n -\r\n {\r\n setUsdRange({ ...usdRange, to: e.currentTarget.value })\r\n }}\r\n />\r\n M
\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 { Button } from '../../../main/components/button'\r\nimport { Checkbox } from '../../../main/components/checkbox'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Heading } from '../../../main/components/typography'\r\nimport { getIsOptionDateRange } from '../utils'\r\nimport { FilterProps } from './types'\r\n\r\nexport default function DefaultFilter({ config, onSubmit }: FilterProps) {\r\n const [state, setState] = React.useState([])\r\n\r\n React.useEffect(() => {\r\n setState(config.selectedValues)\r\n }, [config])\r\n\r\n const handleSelectAll = () => {\r\n setState(config.options.map(({ value }) => value).filter((item) => item !== 'stocksonly'))\r\n }\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n const filters = [...state.filter((value) => !getIsOptionDateRange(value))]\r\n\r\n onSubmit(filters)\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n Match any of the following:\r\n \r\n
\r\n
\r\n {config.options.map(({ label, value }) => {\r\n const isChecked = state.includes(value)\r\n return (\r\n
\r\n \r\n setState(isChecked ? state.filter((selectedValue) => value !== selectedValue) : [...state, value])\r\n }\r\n >\r\n {label}\r\n \r\n
\r\n )\r\n })}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Button } from '../../main/components/button'\r\nimport { DatePicker } from '../../main/components/date-picker'\r\nimport { Icon } from '../../main/components/icon'\r\nimport { Input } from '../../main/components/input'\r\nimport { formatDateToStringUS } from '../shared/utils'\r\n\r\ninterface DateRangeProps {\r\n from?: string\r\n to?: string\r\n onChangeFrom: (from: string | undefined) => void\r\n onChangeTo: (to: string | undefined) => void\r\n}\r\n\r\nconst MIN_DATE = new Date('01/01/1900')\r\n\r\nexport function DateRange({ from, to, onChangeFrom, onChangeTo }: DateRangeProps) {\r\n return (\r\n
\r\n
\r\n {\r\n onChangeFrom(formatDateToStringUS(newFrom))\r\n }}\r\n >\r\n {\r\n onChangeFrom(undefined)\r\n }}\r\n >\r\n \r\n \r\n ) : undefined\r\n }\r\n value={from ?? ''}\r\n />\r\n \r\n
\r\n
\r\n {\r\n onChangeTo(formatDateToStringUS(newTo))\r\n }}\r\n >\r\n {\r\n onChangeTo(undefined)\r\n }}\r\n >\r\n \r\n \r\n ) : undefined\r\n }\r\n value={to ?? ''}\r\n />\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Button } from '../../../main/components/button'\r\nimport { Checkbox } from '../../../main/components/checkbox'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Heading } from '../../../main/components/typography'\r\nimport { formatDateToStringUS } from '../../shared/utils'\r\nimport { DateRange } from '../date-range'\r\nimport { dateRangeToFilterString, getInitialDateFromSelectedValues, getIsOptionDateRange } from '../utils'\r\nimport { FilterProps } from './types'\r\n\r\nexport default function EarningDateFilter({ config, onSubmit }: FilterProps) {\r\n const [state, setState] = React.useState([])\r\n const [dateRange, setDateRange] = React.useState<{ from?: string; to?: string }>({})\r\n\r\n React.useEffect(() => {\r\n const initialDate = getInitialDateFromSelectedValues(config.selectedValues)\r\n\r\n if (initialDate) {\r\n setDateRange({ from: initialDate[0], to: initialDate[1] })\r\n }\r\n setState(config.selectedValues)\r\n }, [config])\r\n\r\n const handleSelectAll = () => {\r\n setState(config.options.map(({ value }) => value))\r\n }\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n const dateRangeStr = dateRangeToFilterString(dateRange)\r\n const filters = [...state.filter((value) => !getIsOptionDateRange(value)), dateRangeStr]\r\n\r\n onSubmit(filters)\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n Match any of the following:\r\n \r\n
\r\n
\r\n {config.options.map(({ label, value }) => {\r\n const isChecked = state.includes(value)\r\n return (\r\n
\r\n \r\n setState(isChecked ? state.filter((selectedValue) => value !== selectedValue) : [...state, value])\r\n }\r\n >\r\n {label}\r\n \r\n
\r\n )\r\n })}\r\n
\r\n
\r\n \r\n Custom date range:\r\n \r\n {\r\n setDateRange({ ...dateRange, from })\r\n }}\r\n onChangeTo={(to) => {\r\n setDateRange({ ...dateRange, to })\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 React from 'react'\r\n\r\nimport { Button } from '../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Input } from '../../../main/components/input'\r\nimport { Heading } from '../../../main/components/typography'\r\nimport { rangesToFilter } from '../utils'\r\nimport { FilterProps } from './types'\r\n\r\nconst DELIMITER = 'x'\r\nconst DEFAULT_RANGE = { from: '', to: '' }\r\n\r\nexport default function EarningsAndRevenueFilter({ config, onSubmit }: FilterProps) {\r\n const [earningsRange, setEarningsRange] = React.useState(DEFAULT_RANGE)\r\n const [revenueRange, setRevenueRange] = React.useState(DEFAULT_RANGE)\r\n\r\n React.useEffect(() => {\r\n const filter = config.selectedValues[0]\r\n if (filter) {\r\n const parts = filter.split(DELIMITER)\r\n\r\n if (parts.length === 2) {\r\n const [eFrom = '', eTo = ''] = parts[0].includes('to') ? parts[0].split('to') : []\r\n const [rFrom = '', rTo = ''] = parts[1].includes('to') ? parts[1].split('to') : []\r\n\r\n setEarningsRange({ from: eFrom, to: eTo })\r\n setRevenueRange({ from: rFrom, to: rTo })\r\n }\r\n }\r\n }, [config])\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n onSubmit([rangesToFilter([earningsRange, revenueRange])])\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n Match all of the following:\r\n \r\n
\r\n
\r\n
\r\n

EPS Surprise

\r\n
\r\n
\r\n {\r\n setEarningsRange({ ...earningsRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n {\r\n setEarningsRange({ ...earningsRange, to: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n

Revenue Surprise

\r\n
\r\n
\r\n {\r\n setRevenueRange({ ...revenueRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n {\r\n setRevenueRange({ ...revenueRange, to: e.currentTarget.value })\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 React from 'react'\r\n\r\nimport { Button } from '../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Input } from '../../../main/components/input'\r\nimport { Heading } from '../../../main/components/typography'\r\nimport { rangesToFilter } from '../utils'\r\nimport { FilterProps } from './types'\r\n\r\nconst DELIMITER = 'x'\r\nconst DEFAULT_RANGE = { from: '', to: '' }\r\n\r\nexport default function FloatFilter({ config, onSubmit }: FilterProps) {\r\n const [sharesRange, setSharesRange] = React.useState(DEFAULT_RANGE)\r\n const [pctRange, setPctRange] = React.useState(DEFAULT_RANGE)\r\n\r\n React.useEffect(() => {\r\n const filter = config.selectedValues[0]\r\n if (filter) {\r\n const parts = filter.split(DELIMITER)\r\n\r\n const [aFrom = '', aTo = ''] = parts[0].includes('to') ? parts[0].split('to') : []\r\n const [bFrom = '', bTo = ''] = parts[1]?.includes('to') ? parts[1].split('to') : []\r\n\r\n setSharesRange({ from: aFrom, to: aTo })\r\n setPctRange({ from: bFrom, to: bTo })\r\n }\r\n }, [config])\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n onSubmit([rangesToFilter([sharesRange, pctRange])])\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n Match any of the following:\r\n \r\n
\r\n
\r\n {\r\n setSharesRange({ ...sharesRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n {\r\n setSharesRange({ ...sharesRange, to: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n\r\n
\r\n {\r\n setPctRange({ ...pctRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n {\r\n setPctRange({ ...pctRange, to: e.currentTarget.value })\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 React from 'react'\r\n\r\nimport { Select } from '../../../main/components'\r\nimport { Button } from '../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Input } from '../../../main/components/input'\r\nimport { Heading } from '../../../main/components/typography'\r\nimport { rangesToFilter } from '../utils'\r\nimport { FilterProps } from './types'\r\n\r\nconst DELIMITER = 'x'\r\nconst SETTINGS_DELIMITER = '-'\r\nconst DEFAULT_RANGE = { from: '', to: '' }\r\nconst PRICE_OPTIONS = [\r\n { value: 'a', label: 'Above' },\r\n { value: 'b', label: 'Below' },\r\n]\r\nconst EXTREMA_OPTIONS = [\r\n { value: 'h', label: 'High' },\r\n { value: 'l', label: 'Low' },\r\n]\r\n\r\nconst parseData = (filterValue: string): [{ from: string; to: string }, string, string] | undefined => {\r\n if (filterValue.indexOf(SETTINGS_DELIMITER) > 0) {\r\n const rangeAndOptions = filterValue.split(SETTINGS_DELIMITER)\r\n if (\r\n rangeAndOptions[1].length === 2 &&\r\n PRICE_OPTIONS.some(({ value }) => value === rangeAndOptions[1][0]) &&\r\n EXTREMA_OPTIONS.some(({ value }) => value === rangeAndOptions[1][1])\r\n ) {\r\n const [from = '', to = ''] = rangeAndOptions[0].includes('to') ? rangeAndOptions[0].split('to') : []\r\n\r\n return [{ from, to }, rangeAndOptions[1][0], rangeAndOptions[1][1]]\r\n }\r\n }\r\n}\r\n\r\nexport default function HighLowFilter({ config, onSubmit }: FilterProps) {\r\n const [price1, setPrice1] = React.useState(PRICE_OPTIONS[1].value)\r\n const [price2, setPrice2] = React.useState(PRICE_OPTIONS[0].value)\r\n const [extreme1, setExtreme1] = React.useState(EXTREMA_OPTIONS[0].value)\r\n const [extreme2, setExtreme2] = React.useState(EXTREMA_OPTIONS[1].value)\r\n const [range1, setRange1] = React.useState(DEFAULT_RANGE)\r\n const [range2, setRange2] = React.useState(DEFAULT_RANGE)\r\n\r\n React.useEffect(() => {\r\n const filter = config.selectedValues[0]\r\n if (filter) {\r\n const parts = filter.split(DELIMITER)\r\n if (parts.length !== 2) {\r\n return\r\n }\r\n\r\n // Parse 1. part containing range, price and extreme\r\n const parsedData1 = parseData(parts[0])\r\n if (parsedData1 !== undefined) {\r\n const [{ from, to }, price, extreme] = parsedData1\r\n setRange1({ from, to })\r\n setPrice1(price)\r\n setExtreme1(extreme)\r\n }\r\n\r\n // Parse 2. part containing range, price and extreme\r\n const parsedData2 = parseData(parts[1])\r\n if (parsedData2 !== undefined) {\r\n const [{ from, to }, price, extreme] = parsedData2\r\n setRange2({ from, to })\r\n setPrice2(price)\r\n setExtreme2(extreme)\r\n }\r\n }\r\n }, [config])\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n onSubmit([\r\n rangesToFilter(\r\n [range1, range2],\r\n [`${SETTINGS_DELIMITER}${price1}${extreme1}`, `${SETTINGS_DELIMITER}${price2}${extreme2}`]\r\n ),\r\n ])\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n Match any of the following:\r\n \r\n
\r\n
\r\n {\r\n setRange1({ ...range1, from: e.currentTarget.value })\r\n }}\r\n />\r\n {\r\n setRange1({ ...range1, to: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n {\r\n setPrice1(item.value)\r\n }}\r\n />\r\n
\r\n
\r\n {\r\n setExtreme1(item.value)\r\n }}\r\n />\r\n
\r\n {\r\n setRange2({ ...range2, from: e.currentTarget.value })\r\n }}\r\n />\r\n {\r\n setRange2({ ...range2, to: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n {\r\n setPrice2(item.value)\r\n }}\r\n />\r\n
\r\n
\r\n {\r\n setExtreme2(item.value)\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 React from 'react'\r\n\r\nimport { Button } from '../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { formatDateToStringUS } from '../../shared/utils'\r\nimport { DateRange } from '../date-range'\r\nimport { dateRangeToFilterString, getInitialDateFromSelectedValues } from '../utils'\r\nimport { FilterProps } from './types'\r\n\r\nexport default function IpoDateFilter({ config, onSubmit }: FilterProps) {\r\n const [dateRange, setDateRange] = React.useState<{ from?: string; to?: string }>({})\r\n\r\n React.useEffect(() => {\r\n const initialDate = getInitialDateFromSelectedValues(config.selectedValues)\r\n if (initialDate) {\r\n setDateRange({ from: initialDate[0], to: initialDate[1] })\r\n }\r\n }, [config])\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n const dateRangeStr = dateRangeToFilterString(dateRange)\r\n\r\n onSubmit([dateRangeStr])\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {\r\n setDateRange({ ...dateRange, from })\r\n }}\r\n onChangeTo={(to) => {\r\n setDateRange({ ...dateRange, to })\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 React from 'react'\r\n\r\nimport { Select } from '../../../main/components'\r\nimport { Button } from '../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Label } from '../../../main/components/typography'\r\nimport { FilterProps } from './types'\r\n\r\nconst ARRAY_DELIMITER = '|'\r\nconst OPTIONS = [\r\n { value: 'any', label: 'Any' },\r\n { value: 'yes', label: 'Yes' },\r\n { value: 'no', label: 'No' },\r\n]\r\n\r\nconst PRESETS_MAP: { [key: string]: string } = {\r\n 'option|short': 'optionshort',\r\n 'option|notshort': 'optionnotshort',\r\n 'notoption|short': 'notoptionshort',\r\n 'notoption|notshort': 'notoptionnotshort',\r\n}\r\n\r\nexport default function OptionsFilter({ onSubmit, config }: FilterProps) {\r\n const [optionable, setOptionable] = React.useState(OPTIONS[0].value)\r\n const [shortable, setShortable] = React.useState(OPTIONS[0].value)\r\n const [shortsalerestricted, setShortSaleRestricted] = React.useState(OPTIONS[0].value)\r\n const [halted, setHalted] = React.useState(OPTIONS[0].value)\r\n\r\n const setValues = React.useCallback((item: string) => {\r\n const getYesNo = (value: string) => (value.includes('not') ? 'no' : 'yes')\r\n switch (item) {\r\n case 'option':\r\n case 'notoption':\r\n setOptionable(getYesNo(item))\r\n break\r\n case 'short':\r\n case 'notshort':\r\n setShortable(getYesNo(item))\r\n break\r\n case 'shortsalerestricted':\r\n case 'notshortsalerestricted':\r\n setShortSaleRestricted(getYesNo(item))\r\n break\r\n case 'halted':\r\n case 'nothalted':\r\n setHalted(getYesNo(item))\r\n break\r\n case 'optionshort':\r\n setOptionable('yes')\r\n setShortable('yes')\r\n break\r\n case 'optionnotshort':\r\n setOptionable('yes')\r\n setShortable('no')\r\n break\r\n case 'notoptionshort':\r\n setOptionable('no')\r\n setShortable('yes')\r\n break\r\n case 'notoptionnotshort':\r\n setOptionable('no')\r\n setShortable('no')\r\n break\r\n }\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n config.selectedValues.forEach((item) => {\r\n setValues(item)\r\n })\r\n }, [config, setValues])\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n const str = [\r\n { option: optionable },\r\n { short: shortable },\r\n { shortsalerestricted: shortsalerestricted },\r\n { halted: halted },\r\n ]\r\n .filter((item) => Object.values(item).every((value) => value !== 'any'))\r\n .map((item) => Object.entries(item).map(([key, value]) => `${value === 'yes' ? '' : 'not'}${key}`))\r\n .join(ARRAY_DELIMITER)\r\n\r\n onSubmit([PRESETS_MAP[str] ?? str])\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
\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 { Select } from '../../../main/components'\r\nimport { Button } from '../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Input } from '../../../main/components/input'\r\nimport { Label } from '../../../main/components/typography'\r\nimport { rangesToFilter } from '../utils'\r\nimport { FilterProps } from './types'\r\n\r\nconst DEFAULT_RANGE = { from: '', to: '' }\r\n\r\ntype PeriodRangeFilterProps = {\r\n periodOptions: { value: string; label: string }[]\r\n useOverUnderLabels?: boolean\r\n} & FilterProps\r\n\r\nexport default function PeriodRangeFilter({\r\n onSubmit,\r\n config,\r\n periodOptions,\r\n useOverUnderLabels,\r\n}: PeriodRangeFilterProps) {\r\n const [selectedPeriod, setSelectedPeriod] = React.useState()\r\n const [periodRange, setPeriodRange] = React.useState(DEFAULT_RANGE)\r\n\r\n React.useEffect(() => {\r\n const filter = config.selectedValues[0]\r\n if (filter) {\r\n const delimiterIndex = filter.lastIndexOf('-')\r\n const period = filter.substring(delimiterIndex + 1)\r\n const range = filter.substring(0, delimiterIndex)\r\n\r\n if (!periodOptions.some(({ value }) => value === period)) {\r\n return\r\n }\r\n setSelectedPeriod(period)\r\n\r\n if (range) {\r\n const [from, to] = range.split('to')\r\n setPeriodRange({ from, to })\r\n }\r\n }\r\n }, [config, periodOptions])\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n onSubmit([selectedPeriod ? rangesToFilter([periodRange], [`-${selectedPeriod}`]) : 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 setPeriodRange({ ...periodRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n
\r\n {\r\n setPeriodRange({ ...periodRange, to: e.currentTarget.value })\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 React from 'react'\r\n\r\nimport { Select } from '../../../main/components'\r\nimport { Button } from '../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Input } from '../../../main/components/input'\r\nimport { rangesToFilter } from '../utils'\r\nimport { FilterProps } from './types'\r\n\r\nconst DELIMITER = '-'\r\nconst DEFAULT_RANGE = { from: '', to: '' }\r\nconst OPTIONS = [\r\n { value: 'a', label: 'Above' },\r\n { value: 'b', label: 'Below' },\r\n]\r\n\r\nexport default function SMAFilter({ onSubmit, config }: FilterProps) {\r\n const [option, setOption] = React.useState(OPTIONS[0].value)\r\n const [range, setRange] = React.useState(DEFAULT_RANGE)\r\n\r\n React.useEffect(() => {\r\n const filter = config.selectedValues[0]\r\n if (filter) {\r\n const [filterRange, filterOption] = filter.split(DELIMITER)\r\n\r\n if (!OPTIONS.some(({ value }) => value === filterOption)) {\r\n return\r\n }\r\n setOption(filterOption)\r\n\r\n if (filterRange) {\r\n const [from, to] = filterRange.split('to')\r\n setRange({ from, to })\r\n }\r\n }\r\n }, [config])\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n onSubmit([rangesToFilter([range], [`${DELIMITER}${option}`])])\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
\r\n {\r\n setRange({ ...range, from: e.currentTarget.value })\r\n }}\r\n />\r\n {\r\n setRange({ ...range, to: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n {\r\n setOption(item.value)\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n

{config.filter.substring(3).toUpperCase()}

\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 React from 'react'\r\n\r\nimport { Button } from '../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Input } from '../../../main/components/input'\r\nimport { Heading } from '../../../main/components/typography'\r\nimport { rangesToFilter } from '../utils'\r\nimport { FilterProps } from './types'\r\n\r\nconst DELIMITER = 'x'\r\nconst DEFAULT_RANGE = { from: '', to: '' }\r\n\r\nexport default function TargetPriceFilter({ config, onSubmit }: FilterProps) {\r\n const [aboveRange, setAboveRange] = React.useState(DEFAULT_RANGE)\r\n const [belowRange, setBelowRange] = React.useState(DEFAULT_RANGE)\r\n\r\n React.useEffect(() => {\r\n const filter = config.selectedValues[0]\r\n if (filter) {\r\n const parts = filter.split(DELIMITER)\r\n\r\n if (parts.length === 2) {\r\n const [aFrom = '', aTo = ''] = parts[0].includes('to') ? parts[0].split('to') : []\r\n const [bFrom = '', bTo = ''] = parts[1].includes('to') ? parts[1].split('to') : []\r\n\r\n setAboveRange({ from: aFrom, to: aTo })\r\n setBelowRange({ from: bFrom, to: bTo })\r\n }\r\n }\r\n }, [config])\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n onSubmit([rangesToFilter([aboveRange, belowRange])])\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n Match any of the following:\r\n \r\n
\r\n
\r\n
\r\n {\r\n setAboveRange({ ...aboveRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n {\r\n setAboveRange({ ...aboveRange, to: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n
\r\n

Above Price

\r\n
\r\n
\r\n\r\n
\r\n
\r\n {\r\n setBelowRange({ ...belowRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n {\r\n setBelowRange({ ...belowRange, to: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n
\r\n

Below Price

\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 React from 'react'\r\n\r\nimport { Button } from '../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../main/components/dialog'\r\nimport { Input } from '../../../main/components/input'\r\nimport { FilterProps } from './types'\r\n\r\nconst WEEK_MONTH_DELIMITER = 'x'\r\nconst DEFAULT_RANGE = { from: '', to: '' }\r\n\r\nexport default function VolatilityFilter({ config, onSubmit }: FilterProps) {\r\n const [weekRange, setWeekRange] = React.useState(DEFAULT_RANGE)\r\n const [monthRange, setMonthRange] = React.useState(DEFAULT_RANGE)\r\n\r\n React.useEffect(() => {\r\n const filter = config.selectedValues[0]\r\n if (filter) {\r\n const parts = filter.split(WEEK_MONTH_DELIMITER)\r\n\r\n if (parts.length === 2) {\r\n const [wFrom = '', wTo = ''] = parts[0].includes('to') ? parts[0].split('to') : []\r\n const [mFrom = '', mTo = ''] = parts[1].includes('to') ? parts[1].split('to') : []\r\n\r\n setWeekRange({ from: wFrom, to: wTo })\r\n setMonthRange({ from: mFrom, to: mTo })\r\n }\r\n }\r\n }, [config])\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n const { from: wMin, to: wMax } = weekRange\r\n const { from: mMin, to: mMax } = monthRange\r\n const weekRangeStr = wMin || wMax ? `${wMin}to${wMax}` : null\r\n const monthRangeStr = mMin || mMax ? `${mMin}to${mMax}` : null\r\n\r\n let volatilityFilter = ''\r\n if (weekRangeStr) volatilityFilter += weekRangeStr\r\n if (weekRangeStr || monthRangeStr) volatilityFilter += WEEK_MONTH_DELIMITER\r\n if (monthRangeStr) volatilityFilter += monthRangeStr\r\n\r\n onSubmit([volatilityFilter])\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
\r\n

Week

\r\n
\r\n
\r\n {\r\n setWeekRange({ ...weekRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n
\r\n {\r\n setWeekRange({ ...weekRange, to: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n\r\n
\r\n

Month

\r\n
\r\n
\r\n {\r\n setMonthRange({ ...monthRange, from: e.currentTarget.value })\r\n }}\r\n />\r\n
\r\n
\r\n {\r\n setMonthRange({ ...monthRange, to: e.currentTarget.value })\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 React from 'react'\r\n\r\nimport { Dialog, DialogHeader, DialogProps } from '../../../main/components/dialog'\r\nimport { decodeQueryString, encodeQueryString } from '../../queryString'\r\nimport { parseScreenerFilters, stringifyScreenerFilters } from '../utils'\r\nimport CurrentVolumeFilter from './currentvolume-filter'\r\nimport DefaultFilter from './default-filter'\r\nimport EarningDateFilter from './earningsdate-filter'\r\nimport EarningsAndRevenueFilter from './epsrev-filter'\r\nimport FloatFilter from './float-filter'\r\nimport HighLowFilter from './highlow-filter'\r\nimport IpoDateFilter from './ipodate-filter'\r\nimport OptionsFilter from './options-filter'\r\nimport PeriodRangeFilter from './period-range-filter'\r\nimport SMAFilter from './sma-filter'\r\nimport TargetPriceFilter from './targetprice-filter'\r\nimport { ConfigType } from './types'\r\nimport VolatilityFilter from './volatility-filter'\r\n\r\nconst PERFORMANCE_OPTIONS = [\r\n { value: 'i1', label: '1 Minute' },\r\n { value: 'i2', label: '2 Minutes' },\r\n { value: 'i3', label: '3 Minutes' },\r\n { value: 'i5', label: '5 Minutes' },\r\n { value: 'i10', label: '10 Minutes' },\r\n { value: 'i15', label: '15 Minutes' },\r\n { value: 'i30', label: '30 Minutes' },\r\n { value: 'h', label: '1 Hour' },\r\n { value: 'h2', label: '2 Hours' },\r\n { value: 'h4', label: '4 Hours' },\r\n { value: 'd', label: 'Day' },\r\n { value: '1w', label: 'Week' },\r\n { value: '4w', label: 'Month' },\r\n { value: '13w', label: 'Quarter' },\r\n { value: '26w', label: 'Half' },\r\n { value: '52w', label: 'Year' },\r\n { value: 'ytd', label: 'YTD' },\r\n]\r\n\r\nconst NET_FLOWS_FILTER_OPTIONS = [\r\n { value: '1m', label: '1 Month' },\r\n { value: '3m', label: '3 Month' },\r\n { value: 'ytd', label: 'YTD' },\r\n { value: '1y', label: '1 Year' },\r\n]\r\n\r\nconst RETURN_FILTER_OPTIONS = [\r\n { value: '1y', label: '1 Year' },\r\n { value: '3y', label: '3 Year' },\r\n { value: '5y', label: '5 Year' },\r\n { value: '10y', label: '10 Year' },\r\n { value: 'si', label: 'Since Inception' },\r\n]\r\n\r\ninterface FilterDialogProps {\r\n config: ConfigType | null\r\n dialogState: DialogProps['state']\r\n dialogBodyClassName?: string\r\n}\r\n\r\nexport function FilterDialog({ config, dialogState }: FilterDialogProps) {\r\n const handleSubmit = React.useCallback(\r\n (values: (string | null)[]) => {\r\n if (config) {\r\n const { filter } = config\r\n const filters = {\r\n ...parseScreenerFilters(),\r\n [filter]: values.filter((value) => !!value) as string[],\r\n }\r\n const urlQueryObject = decodeQueryString()\r\n window.location.href =\r\n 'screener.ashx?' + encodeQueryString({ ...urlQueryObject, f: stringifyScreenerFilters(filters) })\r\n }\r\n },\r\n [config]\r\n )\r\n\r\n if (!config) return null\r\n\r\n const getDialogComponent = () => {\r\n switch (config.filter) {\r\n case 'ipodate':\r\n return \r\n case 'earningsdate':\r\n return \r\n case 'ta_perf':\r\n case 'ta_perf2':\r\n return \r\n case 'ta_volatility':\r\n return \r\n case 'targetprice':\r\n return \r\n case 'ta_sma20':\r\n case 'ta_sma50':\r\n case 'ta_sma200':\r\n return \r\n case 'ta_highlow20d':\r\n case 'ta_highlow50d':\r\n case 'ta_highlow52w':\r\n case 'ta_alltime':\r\n return \r\n case 'sh_float':\r\n return \r\n case 'sh_curvol':\r\n return \r\n case 'etf_fundflows':\r\n return (\r\n \r\n )\r\n case 'etf_return':\r\n return (\r\n \r\n )\r\n case 'sh_opt':\r\n return \r\n case 'fa_epsrev':\r\n return \r\n default:\r\n return \r\n }\r\n }\r\n\r\n return (\r\n \r\n {config.title}\r\n {getDialogComponent()}\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { eventListenerRegister } from './utils'\r\n\r\n// Don't break on number with plus in front (+5 -> 5)\r\nfunction ScreenerRemovePlus(value: string) {\r\n if (value && value[0] === '+') {\r\n return value.slice(1)\r\n }\r\n return value\r\n}\r\n\r\nfunction ScreenerValidateInputs(type: string, input1: HTMLInputElement, input2: HTMLInputElement) {\r\n const numberRegexp = type === 'range' ? /^([-+]?[0-9]+)$/ : /^([-+]?[0-9]*\\.?[0-9]+)$/\r\n const isMatchInput1 = numberRegexp.test(input1.value)\r\n const isMatchInput2 = numberRegexp.test(input2.value)\r\n\r\n if (input1.value !== '' && !isMatchInput1) {\r\n alert('Only ' + (type === 'range' ? 'whole ' : '') + 'numbers are allowed.')\r\n input1.focus()\r\n return false\r\n }\r\n if (input2.value !== '' && !isMatchInput2) {\r\n alert('Only ' + (type === 'range' ? 'whole ' : '') + 'numbers are allowed.')\r\n input2.focus()\r\n return false\r\n }\r\n\r\n if (isMatchInput1 && Math.abs(Number(input1.value)) > Number.MAX_SAFE_INTEGER) {\r\n alert('Number is too large.')\r\n input1.focus()\r\n return false\r\n }\r\n if (isMatchInput2 && Math.abs(Number(input2.value)) > Number.MAX_SAFE_INTEGER) {\r\n alert('Number is too large.')\r\n input2.focus()\r\n return false\r\n }\r\n\r\n return true\r\n}\r\n\r\nfunction ScreenerCustomRangeOnChange(this: HTMLElement) {\r\n const select = document.getElementById('fs_' + (this as HTMLElement).getAttribute('data-filter')) as HTMLInputElement,\r\n type = select.value,\r\n inputs = Array.from(this.parentNode!.parentNode!.parentNode!.querySelectorAll('input')),\r\n filter = select.getAttribute('data-filter'),\r\n query = select.getAttribute('data-url'),\r\n queryWithFilter = select.getAttribute('data-url-selected')!,\r\n regexp = new RegExp(filter + '_selected_filter')\r\n let q = query\r\n\r\n if (inputs[0].value !== '' || inputs[1].value !== '') {\r\n if (!ScreenerValidateInputs(type, inputs[0], inputs[1])) {\r\n return\r\n }\r\n const value = filter + '_' + ScreenerRemovePlus(inputs[0].value) + 'to' + ScreenerRemovePlus(inputs[1].value)\r\n q = queryWithFilter.replace(regexp, encodeURIComponent(value))\r\n }\r\n\r\n window.location.href = 'screener.ashx?' + q\r\n}\r\n\r\nexport function useCustomRangeController() {\r\n React.useEffect(() => {\r\n const inputs = Array.from(document.querySelectorAll('.js-custom-range input')) as HTMLElement[]\r\n const unregisterEventFuncs = [] as Array<() => void>\r\n for (let i = 0; i < inputs.length; i++) {\r\n const unregister = eventListenerRegister(inputs[i], 'change', ScreenerCustomRangeOnChange)\r\n unregisterEventFuncs.push(unregister)\r\n }\r\n\r\n return () => {\r\n unregisterEventFuncs.forEach((unregister) => {\r\n unregister()\r\n })\r\n }\r\n }, [])\r\n\r\n return null\r\n}\r\n","import React from 'react'\r\n\r\nimport { eventListenerRegister } from './utils'\r\n\r\nfunction HideCustom(this: HTMLElement) {\r\n const filter = this.getAttribute('data-filter')\r\n\r\n const el1 = document.getElementById('fsr_' + filter)\r\n const el2 = document.getElementById('fsm_' + filter)\r\n el1 && (el1.style.display = 'none')\r\n el2 && (el2.style.display = 'none')\r\n\r\n const select = document.getElementById('fs_' + filter) as HTMLSelectElement\r\n select.value = ''\r\n select.style.display = 'block'\r\n select.onchange?.(new Event('change'))\r\n\r\n return false\r\n}\r\n\r\nexport function useHideCustomControll() {\r\n React.useEffect(() => {\r\n const ranges = Array.from(document.getElementsByClassName('js-hide-custom-range')) as HTMLElement[]\r\n const unregisterEventFuncs = [] as Array<() => void>\r\n for (let i = 0; i < ranges.length; i++) {\r\n const unregister = eventListenerRegister(ranges[i], 'click', HideCustom)\r\n unregisterEventFuncs.push(unregister)\r\n }\r\n\r\n const hides = Array.from(document.getElementsByClassName('js-custom-modal-hide')) as HTMLElement[]\r\n for (let i = 0; i < hides.length; i++) {\r\n const unregister = eventListenerRegister(hides[i], 'click', HideCustom)\r\n unregisterEventFuncs.push(unregister)\r\n }\r\n\r\n return () => {\r\n unregisterEventFuncs.forEach((unregister) => {\r\n unregister()\r\n })\r\n }\r\n }, [])\r\n\r\n return null\r\n}\r\n","import { getSanitizedTicker } from 'finviz-charts/app/utils'\r\nimport React from 'react'\r\n\r\nimport { eventListenerRegister } from './utils'\r\n\r\nfunction ScreenerTickersInputOnChange(this: HTMLInputElement) {\r\n const inputValue = this.value,\r\n filter = this.getAttribute('data-filter'),\r\n query = this.getAttribute('data-url'),\r\n queryWithFilter = this.getAttribute('data-url-selected')!,\r\n regexp = new RegExp(filter + '_SELECTED-FILTER')\r\n let q = query\r\n\r\n if (inputValue !== '') {\r\n const sanitizedTickers = getSanitizedTicker(inputValue, true)\r\n\r\n if (sanitizedTickers === '') {\r\n alert('Separate multiple tickers by a comma, e.g.: SPY, QQQ, DIA.')\r\n return\r\n }\r\n\r\n const value = filter + '_' + sanitizedTickers.replaceAll(',', '|')\r\n q = queryWithFilter.replace(regexp, encodeURIComponent(value))\r\n }\r\n\r\n window.location.href = 'screener.ashx?' + q\r\n}\r\n\r\nexport function useTickersInputController() {\r\n React.useEffect(() => {\r\n const inputs = Array.from(document.querySelectorAll('.js-tickers-input')) as HTMLElement[]\r\n const unregisterEventFuncs = [] as Array<() => void>\r\n for (let i = 0; i < inputs.length; i++) {\r\n const unregister = eventListenerRegister(inputs[i], 'change', ScreenerTickersInputOnChange)\r\n unregisterEventFuncs.push(unregister)\r\n }\r\n\r\n return () => {\r\n unregisterEventFuncs.forEach((unregister) => {\r\n unregister()\r\n })\r\n }\r\n }, [])\r\n\r\n return null\r\n}\r\n","import React from 'react'\r\n\r\nimport { useDialogState } from '../../main/components/dialog'\r\nimport { FilterDialog } from './filter-modal/filter-dialog'\r\nimport { ConfigType } from './filter-modal/types'\r\nimport { useCustomRangeController } from './use-custom-range-controller'\r\nimport { useHideCustomControll } from './use-hide-custom-controller'\r\nimport { useTickersInputController } from './use-tickers-input-controller'\r\nimport {\r\n ScreenerRenderCustomModal,\r\n eventListenerRegister,\r\n getIsOptionDateRange,\r\n parseScreenerFilters,\r\n textContent,\r\n} from './utils'\r\n\r\nexport function ScreenerPremium() {\r\n useCustomRangeController()\r\n useTickersInputController()\r\n useHideCustomControll()\r\n const [activeSelectEl, setActiveSelectEl] = React.useState()\r\n const isInitRef = React.useRef(false)\r\n const dialogState = useDialogState({\r\n setOpen(open) {\r\n if (!open) {\r\n setActiveSelectEl(undefined)\r\n handleCancel()\r\n }\r\n },\r\n })\r\n\r\n const config = React.useMemo(() => {\r\n if (!activeSelectEl) {\r\n return null\r\n }\r\n const parentNode = activeSelectEl.parentNode! as HTMLElement\r\n const filter = activeSelectEl.getAttribute('data-filter')!\r\n const title = textContent(parentNode.previousElementSibling as HTMLElement)\r\n const selectedValues = parseScreenerFilters()[filter] ?? []\r\n const selectedOption = activeSelectEl.value\r\n const options = Array.from(activeSelectEl.options)\r\n .map((option) => ({ value: option.value, label: option.text }))\r\n .filter((opt) => {\r\n const isModal = opt.value.includes('modal')\r\n const isEmpty = opt.value === ''\r\n return !isModal && !isEmpty && !getIsOptionDateRange(opt.value)\r\n })\r\n\r\n return {\r\n selectedOption,\r\n filter,\r\n title,\r\n options,\r\n selectedValues,\r\n }\r\n }, [activeSelectEl])\r\n\r\n const handleCancel = React.useCallback(() => {\r\n const hiddenFsmElement = document.getElementById('fsm_' + config?.filter)\r\n if (activeSelectEl && (!hiddenFsmElement || hiddenFsmElement.style.display === 'none')) {\r\n activeSelectEl.value = activeSelectEl.getAttribute('data-selected')!\r\n activeSelectEl.onchange?.(new Event('change'))\r\n }\r\n }, [activeSelectEl, config])\r\n\r\n React.useEffect(() => {\r\n function ScreenerSelectOnChange(that: HTMLElement) {\r\n const filter = that.getAttribute('data-filter'),\r\n query = that.getAttribute('data-url'),\r\n queryWithFilter = that.getAttribute('data-url-selected'),\r\n el = document.getElementById('fs_' + filter) as HTMLInputElement,\r\n value = el.value\r\n let q = query\r\n\r\n if (value === 'range' || value === 'frange') {\r\n el.style.display = 'none'\r\n const customRange = document.getElementById('fsr_' + filter) as HTMLElement\r\n customRange.style.display = 'block'\r\n return\r\n } else if (value.includes('modal')) {\r\n ScreenerShowModal.call(document.getElementById('fs_' + filter))\r\n return\r\n } else if (value.length > 0) {\r\n const regexp = new RegExp(filter + '_selected_filter')\r\n q = queryWithFilter!.replace(regexp, filter + '_' + value)\r\n }\r\n window.location.href = 'screener.ashx?' + q\r\n }\r\n\r\n function ScreenerShowModal(this: any) {\r\n const filter = this.getAttribute('data-filter')\r\n const select = document.getElementById('fs_' + filter) as HTMLSelectElement\r\n setActiveSelectEl(select)\r\n dialogState.show()\r\n }\r\n\r\n const edits = Array.from(document.getElementsByClassName('js-custom-modal-edit')) as HTMLElement[]\r\n const unregisterEventFuncs = [] as Array<() => void>\r\n for (let i = 0; i < edits.length; i++) {\r\n const unregister = eventListenerRegister(edits[i], 'click', ScreenerShowModal)\r\n unregisterEventFuncs.push(unregister)\r\n }\r\n\r\n if (!isInitRef.current) {\r\n isInitRef.current = true\r\n const selects = Array.from(document.querySelectorAll('.filters-cells select, .screener-combo-text.is-selected'))\r\n for (let i = 0; i < selects.length; i++) {\r\n const select = selects[i] as HTMLSelectElement\r\n if (select.value === 'range' || select.value === 'frange') {\r\n ScreenerSelectOnChange(select)\r\n } else if (select.value === 'modal') {\r\n ScreenerRenderCustomModal(select)\r\n }\r\n }\r\n\r\n window.ScreenerSelectOnChange = ScreenerSelectOnChange\r\n }\r\n\r\n return () => {\r\n unregisterEventFuncs.forEach((unregister) => unregister())\r\n }\r\n }, [dialogState])\r\n\r\n return \r\n}\r\n","import React from 'react'\r\nimport { useSearchParams } from 'react-router-dom'\r\n\r\nimport {\r\n CustomDateRange,\r\n ITimeframeGroup,\r\n TimeframeBar,\r\n generatePathForTimeframeDateRange,\r\n getDateRangeGroupsWithHref,\r\n getTimeframeFromDateRange,\r\n getTimeframeGroups,\r\n useCustomDateRangeDialog,\r\n useFavoriteTimeframes,\r\n} from '../../main/components/timeframe-bar'\r\nimport { TIMEFRAME } from '../../main/constants'\r\nimport { Instrument } from '../../main/types'\r\n\r\nfunction getSelectedTimeframeAndDateRange(urlQuery: { p?: string; dr?: string }) {\r\n const selectedTimeframe = (urlQuery.p ?? FinvizSettings.screenerCurrentTimeframe?.timeframe) as TIMEFRAME\r\n let selectedDateRange = urlQuery.dr\r\n if (!selectedDateRange && !urlQuery.p) {\r\n selectedDateRange = FinvizSettings.screenerCurrentTimeframe?.dateRange || undefined\r\n }\r\n\r\n return { selectedTimeframe, selectedDateRange }\r\n}\r\n\r\nexport function ScreenerTimeframeBar() {\r\n const isPremium = FinvizSettings.hasUserPremium\r\n const [searchParams] = useSearchParams()\r\n const { favoriteTimeframes, toggleFavoriteTimeframe } = useFavoriteTimeframes(isPremium)\r\n const currentQuery = React.useMemo(\r\n () => Object.fromEntries(searchParams) as { p?: string; dr?: string },\r\n [searchParams]\r\n )\r\n const containerRef = React.useRef(document.getElementById('screener-fullview-links')!)\r\n const { selectedTimeframe, selectedDateRange } = getSelectedTimeframeAndDateRange(currentQuery)\r\n\r\n React.useEffect(() => {\r\n containerRef.current.style.visibility = 'unset'\r\n }, [])\r\n\r\n const timeFrameGroupsWithHref = getTimeframeGroups(isPremium).map((timeFrameGroup: ITimeframeGroup) => ({\r\n label: timeFrameGroup.label,\r\n timeframes: timeFrameGroup.timeframes.map((timeFrame) => ({\r\n ...timeFrame,\r\n href: generatePathForTimeframeDateRange({\r\n isPremium,\r\n pathname: window.location.pathname,\r\n timeframe: timeFrame.value,\r\n utmCampaign: 'screener-charts-intraday',\r\n dateRangeQueryKey: 'dr',\r\n }),\r\n withReload: true,\r\n })),\r\n }))\r\n\r\n const dateRangeGroupsWithHref = getDateRangeGroupsWithHref({\r\n isPremium: FinvizSettings.hasUserPremium,\r\n customRange: selectedDateRange,\r\n isCustomAvailable: true,\r\n withReload: true,\r\n instrument: Instrument.Stock,\r\n generatePath: (dateRange) =>\r\n generatePathForTimeframeDateRange({\r\n isPremium,\r\n pathname: window.location.pathname,\r\n timeframe: dateRange.timeframe!,\r\n dateRange: dateRange.value,\r\n utmCampaign: 'screener-charts-daterange',\r\n dateRangeQueryKey: 'dr',\r\n }),\r\n })\r\n const { onDialogSubmit, customDateRangeDialogState, handleDateRangeSelect } = useCustomDateRangeDialog({\r\n instrument: Instrument.Stock,\r\n anchorDate: new Date(),\r\n shouldReloadOnNavigate: true,\r\n pathGenerator: ({ dateRange, timeframe }) => ({\r\n pathname: window.location.pathname,\r\n search: new URLSearchParams({ ...currentQuery, p: timeframe, dr: dateRange ?? '' }).toString(),\r\n }),\r\n })\r\n\r\n return (\r\n <>\r\n {}}\r\n onDateRangeSelect={handleDateRangeSelect}\r\n onFavoriteTimeframeToggle={({ value }) => {\r\n toggleFavoriteTimeframe(value as TIMEFRAME)\r\n }}\r\n compactViewMaxBreakpointPx={0}\r\n isFavoritesEnabled={FinvizSettings.hasUserPremium}\r\n isTimeframeSelectEnabled={true}\r\n onCustomDateRangeClick={() => {\r\n if (isPremium) customDateRangeDialogState.show()\r\n }}\r\n />\r\n {\r\n const value = dateRange ?? ''\r\n const timeframe = getTimeframeFromDateRange({\r\n dateRange: value,\r\n instrument: Instrument.Stock,\r\n anchorDate: new Date(),\r\n isPremium: isPremium,\r\n })\r\n return onDialogSubmit({ value, timeframe: timeframe })\r\n }}\r\n />\r\n \r\n )\r\n}\r\n","import ReactDOM from 'react-dom'\r\nimport { BrowserRouter } from 'react-router-dom'\r\n\r\nimport { ready } from '../shared/ready'\r\nimport { ScreenerPremium } from './screener-premium'\r\nimport { ScreenerTimeframeBar } from './screener-timeframe-bar'\r\n\r\nconst SCREENER_TIMEFRAME_REACT_ROOT_ID = 'screener-timeframe-container'\r\n\r\nconst screenerTimeframeReactMount = () => {\r\n const timeframeContainer = document.getElementById(SCREENER_TIMEFRAME_REACT_ROOT_ID)\r\n if (timeframeContainer) {\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n timeframeContainer\r\n )\r\n }\r\n}\r\n\r\nconst screenerTimeframeReactUnmount = () => {\r\n const timeframeContainer = document.getElementById(SCREENER_TIMEFRAME_REACT_ROOT_ID)\r\n if (timeframeContainer) ReactDOM.unmountComponentAtNode(timeframeContainer)\r\n}\r\n\r\nready(() => {\r\n const screener = document.getElementById('screener-react')\r\n if (screener && FinvizSettings.hasUserPremium) {\r\n ReactDOM.render(, screener)\r\n }\r\n screenerTimeframeReactMount()\r\n})\r\n\r\nwindow.ScreenerTimeframeReactMount = screenerTimeframeReactMount\r\nwindow.ScreenerTimeframeReactUnmount = screenerTimeframeReactUnmount\r\n","export enum ScreenerQuery {\r\n View = 'v',\r\n Signal = 's',\r\n Order = 'o',\r\n Tickers = 't',\r\n Filters = 'f',\r\n FilterTab = 'ft',\r\n MapSubtype = 'st',\r\n}\r\n\r\nexport enum ScreenerFilter {\r\n MarketCap = 'cap',\r\n Index = 'idx',\r\n Sector = 'sec',\r\n Industry = 'ind',\r\n AverageVolume = 'sh_avgvol',\r\n}\r\n\r\nexport enum ScreenerAddtionalQuery {\r\n ShowEtf = 'show_etf',\r\n}\r\n\r\nexport enum ScreenerView {\r\n Overview = 11,\r\n Maps = 71,\r\n Bubbles = 72,\r\n}\r\n\r\nexport function eventListenerRegister(el: HTMLElement, eventName: string, handler: (...args: any[]) => any) {\r\n el.addEventListener(eventName, handler)\r\n\r\n return () => {\r\n el.removeEventListener(eventName, handler)\r\n }\r\n}\r\n\r\nexport function textContent(el: HTMLElement) {\r\n return el.textContent || el.innerText\r\n}\r\n\r\nexport function ScreenerGetOptionsList(select: HTMLSelectElement) {\r\n const options = select.getAttribute('data-selected')?.split('|') ?? [],\r\n result = []\r\n for (var i = 0, len = options.length; i < len; i++) {\r\n var option = options[i]\r\n for (var j = 0; j < select.children.length; j++) {\r\n var optionEl = select.children[j] as HTMLOptionElement\r\n if (optionEl.value === option) {\r\n result.push({\r\n key: option,\r\n value: textContent(optionEl),\r\n })\r\n }\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport function ScreenerRenderCustomModal(select: any) {\r\n const filter = select.getAttribute('data-filter')\r\n const customWrapper = document.getElementById('fsm_' + filter) as HTMLElement\r\n if (customWrapper) {\r\n select.style.display = 'none'\r\n customWrapper.style.display = 'block'\r\n const input = document.getElementById('fsmi_' + filter) as HTMLInputElement\r\n const options = ScreenerGetOptionsList(select)\r\n const arr = []\r\n for (let i = 0, len = options.length; i < len; i++) {\r\n arr.push(options[i].value)\r\n }\r\n input.value = arr.join(', ')\r\n }\r\n}\r\n\r\nconst DATE_REGEX = /^[0-9]{2}[-][0-9]{2}[-][0-9]{4}/\r\n\r\nexport function getIsOptionDateRange(option: string) {\r\n if (!option.includes('x')) return false\r\n\r\n const [from, to] = option.split('x')\r\n const [isValidFromDate, isValidToDate] = [from, to].map((value) => {\r\n if (DATE_REGEX.test(value)) {\r\n return !Number.isNaN(new Date(value.replace(/-/g, '/')).getTime())\r\n }\r\n return false\r\n })\r\n\r\n return isValidFromDate || isValidToDate\r\n}\r\n\r\nexport function getInitialDateFromSelectedValues(selectedValues: string[]) {\r\n const initialDate = selectedValues.find(getIsOptionDateRange)\r\n\r\n if (initialDate) {\r\n return initialDate.split('x').map((date) => (DATE_REGEX.test(date) ? date.replace(/-/g, '/') : undefined))\r\n }\r\n}\r\n\r\nexport function dateRangeToFilterString({ from, to }: { from?: string; to?: string }) {\r\n return from || to ? `${from ?? ''}x${to ?? ''}`.replace(/\\//g, '-') : null\r\n}\r\n\r\n/**\r\n * Creates link for given view & subview and ignores any additional query params\r\n */\r\nexport function getQueryForView(view?: ScreenerView, allowedParams: string[] = [], baseQuery = window.location.search) {\r\n const query = new URLSearchParams(baseQuery)\r\n const allowList = [...allowedParams, ...Object.values(ScreenerQuery)]\r\n\r\n /**\r\n * Seems like `query` is a live property, so we can’t use `query.forEach` to delete,\r\n * so we need to copy keys before looping.\r\n * https://stackoverflow.com/questions/60522437\r\n */\r\n const keys = Array.from(query.keys())\r\n\r\n keys.forEach((key) => {\r\n if (!allowList.includes(key)) {\r\n query.delete(key)\r\n }\r\n })\r\n\r\n const [, originalView, settings = 0] = query.get(ScreenerQuery.View)?.match(/(\\d{2})(\\d)/) ?? []\r\n\r\n if (view ?? originalView) {\r\n query.set(ScreenerQuery.View, `${view ?? originalView}${settings}`)\r\n }\r\n\r\n return query\r\n}\r\n\r\n/**\r\n * Parse screener `f` query param to object\r\n */\r\nexport function parseScreenerFilters(baseQuery = window.location.search) {\r\n const query = new URLSearchParams(baseQuery)\r\n const filtersString = query.get(ScreenerQuery.Filters)\r\n\r\n if (!filtersString) return {}\r\n\r\n return Object.fromEntries(\r\n filtersString.split(',').map((f) => {\r\n const lastUnderscore = f.lastIndexOf('_')\r\n const key = f.substring(0, lastUnderscore)\r\n const value = f.substring(lastUnderscore + 1)\r\n return [key, value.split('|')]\r\n })\r\n )\r\n}\r\n\r\n/**\r\n * Stringify screener `f` query param\r\n */\r\nexport function stringifyScreenerFilters(filters: Record) {\r\n return Object.entries(filters)\r\n .filter(([, value]) => String(value).length > 0)\r\n .map(([key, value]) => `${key}_${value.join('|')}`)\r\n .join(',')\r\n}\r\n\r\nexport function rangesToFilter(\r\n ranges: {\r\n from: string\r\n to: string\r\n }[],\r\n rangeSuffixes?: string[],\r\n delimiter = 'x',\r\n rangeDelimiter = 'to'\r\n) {\r\n return ranges.reduce((filter, range, index) => {\r\n const { from, to } = range\r\n const rangeStr = from || to ? `${from}${rangeDelimiter}${to}${rangeSuffixes?.[index] ?? ''}` : ''\r\n\r\n let currentFilter = filter\r\n if (index > 0) currentFilter += delimiter\r\n return currentFilter + rangeStr\r\n }, '')\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nexport const Table = React.forwardRef(\r\n (props: React.PropsWithChildren>, ref: React.ForwardedRef) => (\r\n \r\n )\r\n)\r\n\r\nexport function TableHead(props: React.PropsWithChildren>) {\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n\r\ninterface TableBodyProps extends React.HTMLProps {\r\n spacing?: 'regular' | 'large' | 'none'\r\n}\r\n\r\nexport const TableBody = React.forwardRef(\r\n (\r\n { spacing = 'none', ...props }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n ) => (\r\n \r\n )\r\n)\r\n\r\nexport function TableFooter(props: React.PropsWithChildren>) {\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n","export enum TableAlign {\r\n Left,\r\n Center,\r\n Right,\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { TableAlign } from './types'\r\n\r\nexport interface TableCellProps extends React.HTMLProps {\r\n isFirst?: boolean\r\n isLast?: boolean\r\n align?: TableAlign\r\n hasPadding?: boolean\r\n hasLeading?: boolean\r\n}\r\n\r\nexport function TableCell({\r\n isFirst,\r\n isLast,\r\n align = TableAlign.Left,\r\n hasPadding = true,\r\n hasLeading = true,\r\n className,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n return (\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Icon } from '../icon'\r\nimport { PropsWithAs } from '../types'\r\nimport { TableAlign } from './types'\r\n\r\nconst TABLE_HEADER_DEFAULT_ELEMENT = 'th'\r\n\r\ninterface SortProps {\r\n isActive: boolean\r\n direction: 1 | -1\r\n}\r\n\r\nfunction TableSortIndicator({ isActive, direction, className }: Partial & { className?: string }) {\r\n return (\r\n \r\n )\r\n}\r\n\r\ninterface TableHeaderProps extends Omit, 'as'> {\r\n isActive?: boolean\r\n align?: TableAlign\r\n hasPadding?: boolean\r\n hasHover?: boolean\r\n}\r\n\r\nexport function TableHeader({\r\n as: asComponent,\r\n align,\r\n children,\r\n isActive,\r\n hasPadding = true,\r\n hasHover,\r\n ...props\r\n}: Omit, 'align'> & TableHeaderProps) {\r\n const componentToRender = asComponent ?? TABLE_HEADER_DEFAULT_ELEMENT\r\n\r\n return React.createElement(\r\n componentToRender,\r\n {\r\n ...props,\r\n className: classnames(\r\n props.className,\r\n 'whitespace-nowrap font-normal h-5 hover:first:rounded-l-md hover:last:rounded-r-md',\r\n {\r\n 'cursor-pointer hover:select-none hover:bg-gray-200/30 dark:hover:bg-gray-500/30':\r\n hasHover && !props.disabled,\r\n 'text-gray-500 dark:text-gray-300': props.disabled,\r\n 'text-gray-600 dark:text-gray-200': !isActive && !props.disabled,\r\n 'font-medium text-gray-800 dark:text-gray-50': isActive,\r\n 'text-left': align === TableAlign.Left,\r\n 'text-center': align === TableAlign.Center,\r\n 'text-right': align === TableAlign.Right,\r\n 'px-1': hasPadding,\r\n 'p-0': !hasPadding,\r\n }\r\n ),\r\n },\r\n children\r\n )\r\n}\r\n\r\nexport function TableHeaderSortable({\r\n direction,\r\n ...props\r\n}: Omit, 'align'> & Partial & TableHeaderProps) {\r\n const isDisabled = props.disabled === true\r\n\r\n return (\r\n \r\n \r\n {props.align === TableAlign.Right && (\r\n \r\n )}\r\n {props.children}\r\n {props.align !== TableAlign.Right && (\r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\ninterface TableRowProps extends React.PropsWithChildren> {\r\n isFirst?: boolean\r\n isLast?: boolean\r\n isHoverable?: boolean\r\n isRounded?: boolean\r\n}\r\n\r\nexport const TableRow = React.forwardRef(\r\n (\r\n { isFirst, isLast, isHoverable = true, isRounded = false, ...props }: TableRowProps,\r\n ref: React.ForwardedRef\r\n ) => (\r\n \r\n )\r\n)\r\n","import * as React from 'react'\r\nimport { useSearchParams } from 'react-router-dom'\r\n\r\nimport { SortByShape, isSortByShape, useSortData } from '../../hooks/use-sort-data'\r\nimport { SortableValue } from '../../types'\r\nimport { SortByColumnOptions } from '../../util'\r\n\r\nexport enum SortDirection {\r\n Ascending = 1,\r\n Descending = -1,\r\n}\r\n\r\nexport interface TableSort {\r\n column: ColumnType\r\n direction: SortDirection\r\n}\r\n\r\n/**\r\n * Default sort getter which either gets column matching by `defaultSortId` or returns the first column\r\n */\r\nexport function getDefaultSort(\r\n columns: ColumnType[],\r\n defaultSort?: DefaultSort\r\n): TableSort {\r\n if (defaultSort === null) return { column: null as ColumnType, direction: SortDirection.Ascending }\r\n if (defaultSort && typeof defaultSort === 'object') return defaultSort as unknown as TableSort\r\n\r\n const foundColumn = columns.find((column) => isSortByShape(column) && column.id === defaultSort)\r\n\r\n return {\r\n column: foundColumn ?? (defaultSort as unknown as ColumnType | undefined) ?? columns[0],\r\n direction: SortDirection.Ascending,\r\n }\r\n}\r\n\r\n/**\r\n * Get default sorting from url when persisting sort\r\n */\r\nexport function getDefaultSortFromUrl, OrderType extends string | null>(\r\n columns: ColumnType[],\r\n order?: OrderType,\r\n idKey: keyof ColumnType = 'id'\r\n): TableSort {\r\n if (order === null) return { column: null as unknown as ColumnType, direction: SortDirection.Ascending }\r\n\r\n const isDesc = order?.startsWith('-')\r\n const queryParam = isDesc ? order?.substring(1) : order\r\n const column = columns.find((column) => column[idKey] === queryParam)\r\n\r\n if (column) {\r\n return { column, direction: isDesc ? SortDirection.Descending : SortDirection.Ascending }\r\n } else {\r\n return { column: columns[0], direction: SortDirection.Ascending }\r\n }\r\n}\r\n\r\nexport function saveSortToUrl>(\r\n prev: URLSearchParams,\r\n urlPersistKey: string,\r\n newSort: ColumnType | null,\r\n idKey: keyof ColumnType = 'id',\r\n defaultSort: unknown = null\r\n) {\r\n const newParams = new URLSearchParams(prev)\r\n const previousOrder = newParams.get(urlPersistKey) ?? defaultSort\r\n const isDescOrder = previousOrder?.toString().startsWith('-')\r\n\r\n if (newSort === null) {\r\n newParams.delete(urlPersistKey)\r\n } else {\r\n newParams.set(urlPersistKey, `${!isDescOrder && previousOrder === newSort[idKey] ? '-' : ''}${newSort[idKey]}`)\r\n }\r\n\r\n return newParams\r\n}\r\n\r\ninterface UseTableSortProps<\r\n IdType,\r\n DataType,\r\n ColumnType extends SortByShape,\r\n DefaultSort extends ColumnType['id'] | TableSort | null,\r\n> {\r\n data: DataType[]\r\n columns: ColumnType[]\r\n\r\n /**\r\n * You can either provide id of the column or whole shape\r\n * defaultSort: { column: columns[0], direction: -1 }\r\n * If your ids are constants (or enums), you will get name suggestions\r\n */\r\n defaultSort?: DefaultSort\r\n\r\n /**\r\n * Custom value getter. By default these can be defined on every column using `getValueForSort`\r\n */\r\n valueGetter?: (column: ColumnType) => (row: DataType) => SortableValue\r\n\r\n /**\r\n * Additional options for sorting, including ignoring null values or sorting null as last\r\n */\r\n options?: SortByColumnOptions\r\n}\r\n\r\n/**\r\n * This hook has multiple\r\n */\r\nexport function useTableSort<\r\n IdType,\r\n DataType,\r\n ColumnType extends SortByShape,\r\n DefaultSort extends ColumnType['id'] | TableSort | null,\r\n SortType extends DefaultSort extends null ? ColumnType | null : ColumnType,\r\n>({ data, columns, defaultSort, valueGetter, options }: UseTableSortProps) {\r\n const [sort, setSort] = React.useState(getDefaultSort(columns, defaultSort) as TableSort)\r\n\r\n const changeSort = React.useCallback((newSort: SortType, direction?: SortDirection) => {\r\n setSort((prevSort) => {\r\n if (newSort && direction) {\r\n return { column: newSort, direction }\r\n }\r\n\r\n if (newSort && prevSort.column?.id === newSort.id) {\r\n return { ...prevSort, direction: prevSort.direction * -1 }\r\n }\r\n\r\n return { column: newSort, direction: SortDirection.Ascending }\r\n })\r\n }, [])\r\n\r\n const sortedData = useSortData({ data, direction: sort.direction, sortBy: sort.column, valueGetter, options })\r\n\r\n return {\r\n data: sortedData,\r\n sort,\r\n changeSort,\r\n }\r\n}\r\n\r\ninterface UseTableSortWithUrlProps<\r\n IdType,\r\n DataType,\r\n ColumnType extends SortByShape,\r\n DefaultSort extends ColumnType['id'] | TableSort | null,\r\n> extends UseTableSortProps {\r\n /**\r\n * When set, the sorting will be persisted in the URL. Loading the\r\n *\r\n * @default undefined\r\n */\r\n urlPersistKey?: string\r\n\r\n /**\r\n * Key to get value of the URL sort from a column\r\n * @deafult \"id\"\r\n */\r\n idKey?: keyof ColumnType\r\n}\r\n\r\nexport function useTableSortWithUrl<\r\n IdType,\r\n DataType,\r\n ColumnType extends SortByShape,\r\n DefaultSort extends ColumnType['id'] | TableSort | null,\r\n SortType extends DefaultSort extends null ? ColumnType | null : ColumnType,\r\n>({\r\n data,\r\n columns,\r\n defaultSort,\r\n valueGetter,\r\n urlPersistKey,\r\n idKey = 'id',\r\n options,\r\n}: UseTableSortWithUrlProps) {\r\n const {\r\n data: sortedData,\r\n changeSort: changeSortState,\r\n sort,\r\n } = useTableSort({ data, columns, defaultSort, valueGetter, options })\r\n const [searchParams, setSearchParams] = useSearchParams()\r\n const defaultSortRef = React.useRef(\r\n urlPersistKey && typeof defaultSort === 'string'\r\n ? getDefaultSortFromUrl(columns, searchParams.get(urlPersistKey) ?? defaultSort, idKey)\r\n : getDefaultSort(columns, defaultSort)\r\n )\r\n\r\n const changeSort = React.useCallback(\r\n (newSort: SortType) => {\r\n if (urlPersistKey) {\r\n const defaultSort: ColumnType | null = defaultSortRef.current.column\r\n setSearchParams(\r\n (prev) =>\r\n saveSortToUrl(prev, urlPersistKey, newSort, idKey, defaultSort === null ? null : defaultSort[idKey]),\r\n {\r\n preventScrollReset: true,\r\n }\r\n )\r\n }\r\n\r\n changeSortState(newSort)\r\n },\r\n [idKey, setSearchParams, urlPersistKey, changeSortState]\r\n )\r\n\r\n /**\r\n * Update sort from url\r\n */\r\n React.useEffect(() => {\r\n if (!urlPersistKey) return\r\n\r\n const newSort = searchParams.get(urlPersistKey)\r\n if (newSort) {\r\n const sort = getDefaultSortFromUrl(columns, newSort, idKey)\r\n changeSortState(sort.column, sort.direction)\r\n }\r\n }, [columns, idKey, searchParams, urlPersistKey, changeSortState])\r\n\r\n return {\r\n data: sortedData,\r\n sort,\r\n changeSort,\r\n }\r\n}\r\n","import * as React from 'react'\r\n\r\nexport interface DelayedProps {\r\n /**\r\n * The delay in milliseconds before the component is rendered.\r\n *\r\n * @default 300\r\n */\r\n delay?: number\r\n\r\n /**\r\n * Delay in milliseconds before rendering timeout state.\r\n */\r\n timeout?: number\r\n\r\n /**\r\n * Throw on timeout (suspense)\r\n */\r\n throwOnTimeout?: boolean\r\n\r\n /**\r\n * Component visible during the delay.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n delayComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when timeout is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n timeoutComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when delay is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n children?: React.ReactNode\r\n}\r\n\r\nexport function Delayed({\r\n delay = 300,\r\n timeout = 0,\r\n throwOnTimeout = false,\r\n delayComponent,\r\n timeoutComponent,\r\n children,\r\n}: DelayedProps) {\r\n const [visible, setVisible] = React.useState(false)\r\n const [hasTimedOut, setHasTimedOut] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const visibilityTimeout = window.setTimeout(() => setVisible(true), delay)\r\n\r\n let failedTimeout: number\r\n if (timeout > 0) {\r\n failedTimeout = window.setTimeout(() => {\r\n setHasTimedOut(true)\r\n if (throwOnTimeout) throw new Error()\r\n }, timeout)\r\n }\r\n\r\n return () => {\r\n clearTimeout(visibilityTimeout)\r\n clearTimeout(failedTimeout)\r\n }\r\n }, [delay, timeout, throwOnTimeout])\r\n\r\n if (!visible) return <>{delayComponent}\r\n\r\n if (hasTimedOut) {\r\n return <>{timeoutComponent}\r\n }\r\n\r\n return <>{children}\r\n}\r\n","import * as React from 'react'\r\n\r\nexport type NotificationContextType = ReturnType\r\n\r\nexport enum NotificationPosition {\r\n TopLeft,\r\n TopRight,\r\n BottomLeft,\r\n BottomRight,\r\n}\r\n\r\nexport interface NotificationOptions {\r\n position?: NotificationPosition\r\n inline?: boolean\r\n}\r\n\r\nexport const NotificationContext = React.createContext<{\r\n show: (element: JSX.Element, options?: NotificationOptions) => void\r\n hide: () => void\r\n}>({\r\n show: () => {},\r\n hide: () => {},\r\n})\r\n\r\nexport function useNotification() {\r\n return React.useContext(NotificationContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { getVisualViewport, useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { NotificationContext, NotificationOptions, NotificationPosition } from './hooks'\r\n\r\ninterface NotificationState {\r\n element: JSX.Element\r\n options: Partial\r\n}\r\n\r\nexport function NotificationWrapper(props: React.PropsWithChildren) {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [notification, setNotification] = React.useState(null)\r\n const { viewport, setViewport } = useVisualViewport({ enabled: !!notification })\r\n\r\n const context = React.useRef({\r\n show: (element: JSX.Element, options: Partial = {}) => {\r\n setViewport(() => getVisualViewport(window.visualViewport))\r\n setNotification({ element, options })\r\n setIsOpen(true)\r\n },\r\n hide: () => setIsOpen(false),\r\n })\r\n\r\n const positionClass = React.useMemo(() => {\r\n const { position = NotificationPosition.BottomLeft } = notification?.options ?? {}\r\n return {\r\n '[--inset-t:1rem] items-start pt-inset-top': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.TopRight,\r\n ].includes(position),\r\n '[--inset-r:1rem] justify-end landscape-secondary:pr-inset-right': [\r\n NotificationPosition.TopRight,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-b:1rem] items-end pb-inset-bottom': [\r\n NotificationPosition.BottomLeft,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-l:1rem] justify-start landscape-primary:pl-inset-left': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.BottomLeft,\r\n ].includes(position),\r\n }\r\n }, [notification?.options])\r\n\r\n const WrapperComponent = React.useMemo(\r\n () => (notification?.options.inline ? React.Fragment : Ariakit.Portal),\r\n [notification?.options.inline]\r\n )\r\n\r\n return (\r\n \r\n {props.children}\r\n {isOpen && (\r\n \r\n \r\n {notification?.element}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { NotificationContextType, useNotification } from './hooks'\r\n\r\nexport function withNotificationContext(\r\n WrappedComponent: React.ComponentType\r\n) {\r\n const displayName = WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\r\n const WithNotificationContext = (props: Omit) => {\r\n const notification = useNotification()\r\n return \r\n }\r\n\r\n WithNotificationContext.displayName = `withNotificationContext(${displayName})`\r\n\r\n return WithNotificationContext\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { useNotification } from './hooks'\r\n\r\ninterface NotificationProps {\r\n className?: string\r\n /**\r\n * Default button text\r\n * @default Close\r\n */\r\n closeText?: string\r\n\r\n /**\r\n * Custom buttons. Overrides `closeText`\r\n */\r\n actions?: JSX.Element\r\n\r\n /**\r\n * When set, the notification will automatically close\r\n */\r\n timeoutInMs?: number\r\n}\r\n\r\nexport function Notification({\r\n className,\r\n closeText = 'Close',\r\n actions,\r\n timeoutInMs,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const notification = useNotification()\r\n\r\n React.useEffect(() => {\r\n let timeoutId: number\r\n if (timeoutInMs) {\r\n timeoutId = window.setTimeout(() => {\r\n notification.hide()\r\n }, timeoutInMs)\r\n }\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n }\r\n }\r\n }, [notification, timeoutInMs])\r\n\r\n return (\r\n \r\n
{children}
\r\n
\r\n {actions ?? (\r\n \r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { SortDirectionValue, SortableValue } from '../types'\r\nimport { SortByColumnOptions, sortByColumn } from '../util'\r\n\r\nexport interface SortByShape {\r\n id: IdType\r\n\r\n /**\r\n * Provide value calculation for sort when value is computed in column renderer\r\n */\r\n getValueForSort?: (row: DataType) => SortableValue\r\n}\r\n\r\nexport function isSortByShape(sortBy?: unknown): sortBy is SortByShape {\r\n return sortBy?.hasOwnProperty?.('id') === true\r\n}\r\n\r\n/**\r\n * Default value getter which gets row data by `getValueForSort` defined on the column\r\n * If no sort value getter is provided, it falls back to getting data by column.id or returns the whole row\r\n */\r\nexport function getDefaultValueGetter(column: SortBy) {\r\n return (row: DataType): SortableValue => {\r\n let value = null\r\n\r\n if (isSortByShape(column)) {\r\n if (typeof column.getValueForSort === 'function') value = column.getValueForSort(row)\r\n else if (typeof row === 'object') value = row?.[column.id as keyof typeof row]\r\n } else {\r\n value = row\r\n }\r\n\r\n return (value as SortableValue) ?? null\r\n }\r\n}\r\n\r\nexport function useSortData({\r\n data,\r\n sortBy,\r\n direction,\r\n valueGetter = getDefaultValueGetter,\r\n options,\r\n}: {\r\n data: DataType[]\r\n sortBy?: SortBy | null\r\n direction: SortDirectionValue\r\n valueGetter?: (sortBy: SortBy) => (row: DataType) => SortableValue\r\n options?: SortByColumnOptions\r\n}) {\r\n return React.useMemo(() => {\r\n if (!sortBy) return [...data]\r\n\r\n return [...data].sort((a, b) =>\r\n sortByColumn({\r\n ...options,\r\n a,\r\n b,\r\n direction,\r\n valueGetter: valueGetter(sortBy),\r\n })\r\n )\r\n }, [data, options, direction, valueGetter, sortBy])\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nexport function getVisualViewport(visualViewport: VisualViewport | null) {\r\n const width = visualViewport?.width ?? window.innerWidth\r\n const height = visualViewport?.height ?? window.innerHeight\r\n const scale = visualViewport?.scale ?? 1\r\n\r\n return {\r\n top: visualViewport?.offsetTop ?? 0,\r\n left: visualViewport?.offsetLeft ?? 0,\r\n scale: Math.round((1 / scale) * 100) / 100,\r\n width: Math.round(width * scale),\r\n height: Math.round(height * scale),\r\n unscaledWidth: width,\r\n unscaledHeight: height,\r\n }\r\n}\r\n\r\nexport function useVisualViewport({ enabled = true, onScroll = true }: { enabled?: boolean; onScroll?: boolean } = {}) {\r\n const [viewport, setViewport] = React.useState(getVisualViewport(window.visualViewport))\r\n\r\n React.useEffect(() => {\r\n if (!enabled) return\r\n\r\n const handleChange = throttle((ev: Event) => {\r\n const viewport = ev.currentTarget as VisualViewport\r\n if (viewport) {\r\n setViewport(() => getVisualViewport(viewport))\r\n }\r\n }, 50)\r\n\r\n window.visualViewport?.addEventListener('resize', handleChange)\r\n if (onScroll) window.visualViewport?.addEventListener('scroll', handleChange)\r\n handleChange({ currentTarget: window.visualViewport } as Event)\r\n\r\n return () => {\r\n window.visualViewport?.removeEventListener('resize', handleChange)\r\n window.visualViewport?.removeEventListener('scroll', handleChange)\r\n }\r\n }, [enabled, onScroll])\r\n\r\n return React.useMemo(() => ({ viewport, setViewport }), [viewport])\r\n}\r\n"],"names":["DELIMITER","DEFAULT_RANGE","from","to","CurrentVolumeFilter","_ref","config","onSubmit","sharesRange","setSharesRange","React","usdRange","setUsdRange","filter","selectedValues","parts","split","sharesRangeFrom","sharesRangeTo","includes","length","usdRangeFrom","usdRangeTo","Number","toFixed","replace","_jsxs","_Fragment","children","DialogBody","className","_jsx","Heading","level","id","e","preventDefault","rangesToFilter","Table","TableBody","Input","type","value","min","step","onChange","currentTarget","DialogFooter","Button","as","DialogDismiss","form","theme","DefaultFilter","state","setState","filters","getIsOptionDateRange","options","map","_ref3","label","isChecked","Checkbox","name","checked","selectedValue","onClick","handleSelectAll","_ref2","item","MIN_DATE","Date","DateRange","onChangeFrom","onChangeTo","DatePicker","minDate","undefined","newFrom","formatDateToStringUS","readOnly","rightContent","appearance","Icon","width","newTo","EarningDateFilter","dateRange","setDateRange","initialDate","getInitialDateFromSelectedValues","dateRangeStr","dateRangeToFilterString","EarningsAndRevenueFilter","earningsRange","setEarningsRange","revenueRange","setRevenueRange","eFrom","eTo","rFrom","rTo","FloatFilter","pctRange","setPctRange","_parts$","aFrom","aTo","bFrom","bTo","SETTINGS_DELIMITER","PRICE_OPTIONS","EXTREMA_OPTIONS","parseData","filterValue","indexOf","rangeAndOptions","some","HighLowFilter","price1","setPrice1","price2","setPrice2","extreme1","setExtreme1","extreme2","setExtreme2","range1","setRange1","range2","setRange2","parsedData1","price","extreme","parsedData2","concat","Select","items","IpoDateFilter","ARRAY_DELIMITER","OPTIONS","PRESETS_MAP","OptionsFilter","optionable","setOptionable","shortable","setShortable","shortsalerestricted","setShortSaleRestricted","halted","setHalted","setValues","getYesNo","forEach","_PRESETS_MAP$str","str","option","short","Object","values","every","entries","key","join","Label","title","PeriodRangeFilter","periodOptions","useOverUnderLabels","selectedPeriod","setSelectedPeriod","periodRange","setPeriodRange","delimiterIndex","lastIndexOf","period","substring","range","SMAFilter","setOption","setRange","filterRange","filterOption","toUpperCase","TargetPriceFilter","aboveRange","setAboveRange","belowRange","setBelowRange","WEEK_MONTH_DELIMITER","VolatilityFilter","weekRange","setWeekRange","monthRange","setMonthRange","wFrom","wTo","mFrom","mTo","wMin","wMax","mMin","mMax","weekRangeStr","monthRangeStr","volatilityFilter","PERFORMANCE_OPTIONS","NET_FLOWS_FILTER_OPTIONS","RETURN_FILTER_OPTIONS","FilterDialog","dialogState","handleSubmit","parseScreenerFilters","urlQueryObject","decodeQueryString","window","location","href","encodeQueryString","f","stringifyScreenerFilters","Dialog","DialogHeader","getDialogComponent","ScreenerRemovePlus","slice","ScreenerCustomRangeOnChange","select","document","getElementById","this","getAttribute","inputs","Array","parentNode","querySelectorAll","query","queryWithFilter","regexp","RegExp","q","input1","input2","numberRegexp","isMatchInput1","test","isMatchInput2","Math","abs","MAX_SAFE_INTEGER","alert","focus","ScreenerValidateInputs","encodeURIComponent","HideCustom","_select$onchange","el1","el2","style","display","onchange","call","Event","ScreenerTickersInputOnChange","inputValue","sanitizedTickers","getSanitizedTicker","replaceAll","ScreenerPremium","unregisterEventFuncs","i","unregister","eventListenerRegister","push","ranges","getElementsByClassName","hides","activeSelectEl","setActiveSelectEl","isInitRef","useDialogState","setOpen","open","handleCancel","_parseScreenerFilters","textContent","previousElementSibling","selectedOption","text","opt","isModal","isEmpty","hiddenFsmElement","_activeSelectEl$oncha","ScreenerSelectOnChange","that","el","ScreenerShowModal","show","edits","current","selects","ScreenerRenderCustomModal","ScreenerTimeframeBar","isPremium","FinvizSettings","hasUserPremium","searchParams","useSearchParams","favoriteTimeframes","toggleFavoriteTimeframe","useFavoriteTimeframes","currentQuery","fromEntries","containerRef","selectedTimeframe","selectedDateRange","urlQuery","_urlQuery$p","_FinvizSettings$scree","p","screenerCurrentTimeframe","timeframe","dr","_FinvizSettings$scree2","getSelectedTimeframeAndDateRange","visibility","timeFrameGroupsWithHref","getTimeframeGroups","timeFrameGroup","timeframes","timeFrame","generatePathForTimeframeDateRange","pathname","utmCampaign","dateRangeQueryKey","withReload","dateRangeGroupsWithHref","getDateRangeGroupsWithHref","customRange","isCustomAvailable","instrument","Instrument","Stock","generatePath","onDialogSubmit","customDateRangeDialogState","handleDateRangeSelect","useCustomDateRangeDialog","anchorDate","shouldReloadOnNavigate","pathGenerator","search","URLSearchParams","toString","TimeframeBar","size","rounding","hasRedesignEnabled","timeFrameGroups","dateRangeGroups","onTimeframeSelect","onDateRangeSelect","onFavoriteTimeframeToggle","compactViewMaxBreakpointPx","isFavoritesEnabled","isTimeframeSelectEnabled","onCustomDateRangeClick","CustomDateRange","getTimeframeFromDateRange","SCREENER_TIMEFRAME_REACT_ROOT_ID","screenerTimeframeReactMount","timeframeContainer","ReactDOM","BrowserRouter","ready","screener","ScreenerTimeframeReactMount","ScreenerTimeframeReactUnmount","screenerTimeframeReactUnmount","ScreenerQuery","ScreenerFilter","ScreenerAddtionalQuery","ScreenerView","eventName","handler","addEventListener","removeEventListener","innerText","customWrapper","input","_select$getAttribute$","_select$getAttribute","result","len","j","optionEl","ScreenerGetOptionsList","arr","DATE_REGEX","isValidFromDate","isValidToDate","isNaN","getTime","find","date","getQueryForView","view","_query$get$match","_query$get","allowedParams","arguments","baseQuery","allowList","keys","delete","originalView","settings","get","View","match","set","filtersString","Filters","lastUnderscore","String","rangeSuffixes","delimiter","rangeDelimiter","reduce","index","_rangeSuffixes$index","rangeStr","currentFilter","props","ref","_props$cellPadding","cellPadding","classnames","TableHead","spacing","TableFooter","TableAlign","TableCell","isFirst","isLast","align","Left","hasPadding","hasLeading","Center","Right","TABLE_HEADER_DEFAULT_ELEMENT","TableSortIndicator","isActive","direction","invisible","TableHeader","asComponent","hasHover","componentToRender","disabled","TableHeaderSortable","isDisabled","TableRow","isHoverable","isRounded","SortDirection","getDefaultSort","columns","defaultSort","column","Ascending","foundColumn","isSortByShape","getDefaultSortFromUrl","order","idKey","isDesc","startsWith","queryParam","Descending","useTableSort","data","valueGetter","sort","setSort","changeSort","newSort","prevSort","_prevSort$column","useSortData","sortBy","useTableSortWithUrl","_searchParams$get","urlPersistKey","sortedData","changeSortState","setSearchParams","defaultSortRef","prev","_newParams$get","newParams","previousOrder","isDescOrder","saveSortToUrl","preventScrollReset","Delayed","delay","timeout","throwOnTimeout","delayComponent","timeoutComponent","visible","setVisible","hasTimedOut","setHasTimedOut","visibilityTimeout","setTimeout","failedTimeout","Error","clearTimeout","NotificationPosition","NotificationContext","hide","useNotification","NotificationWrapper","isOpen","setIsOpen","notification","setNotification","viewport","setViewport","useVisualViewport","enabled","context","element","getVisualViewport","visualViewport","positionClass","_notification$options","position","BottomLeft","TopLeft","TopRight","BottomRight","WrapperComponent","inline","Ariakit","Provider","role","unmountOnHide","onClose","modal","backdrop","focusable","hideOnEscape","hideOnInteractOutside","autoFocusOnShow","autoFocusOnHide","height","transform","left","top","scale","willChange","withNotificationContext","WrappedComponent","_WrappedComponent$dis","displayName","WithNotificationContext","notificationContext","Notification","closeText","actions","timeoutInMs","timeoutId","_sortBy$hasOwnPropert","hasOwnProperty","getDefaultValueGetter","row","getValueForSort","a","b","sortByColumn","_visualViewport$width","_visualViewport$heigh","_visualViewport$scale","_visualViewport$offse","_visualViewport$offse2","innerWidth","innerHeight","offsetTop","offsetLeft","round","unscaledWidth","unscaledHeight","onScroll","_window$visualViewpor","_window$visualViewpor2","handleChange","throttle","ev","_window$visualViewpor3","_window$visualViewpor4"],"sourceRoot":""}