{"version":3,"file":"screener.379c844c.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/screener/filter-modal/currentvolume-filter.tsx","webpack://@finviz/website/./js/app/screener/date-range.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/daterange-filter.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/default-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/main/components/checkbox.tsx","webpack://@finviz/website/./js/main/components/color-picker/draggable.tsx","webpack://@finviz/website/./js/main/components/color-picker/pointer.tsx","webpack://@finviz/website/./js/main/components/color-picker/util.ts","webpack://@finviz/website/./js/main/components/color-picker/alpha.tsx","webpack://@finviz/website/./js/main/components/color-picker/color-palette.tsx","webpack://@finviz/website/./js/main/components/color-picker/hue-saturation.tsx","webpack://@finviz/website/./js/main/components/color-picker/lightness.tsx","webpack://@finviz/website/./js/main/components/color-picker/color-preview.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker-input.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker-button.tsx","webpack://@finviz/website/./js/main/components/copy-to-clipboard/copy-to-clipboard.tsx","webpack://@finviz/website/./js/main/components/delayed.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown-item.tsx","webpack://@finviz/website/./js/main/components/dropdown/hooks.ts","webpack://@finviz/website/./js/main/components/context-menu/context-menu.tsx","webpack://@finviz/website/./js/main/components/grid/grid.tsx","webpack://@finviz/website/./js/main/components/inner-state/inner-state.tsx","webpack://@finviz/website/./js/main/components/range.tsx","webpack://@finviz/website/./js/main/components/toolbar/interfaces.ts","webpack://@finviz/website/./js/main/components/toolbar/hooks.ts","webpack://@finviz/website/./js/main/components/toolbar/toolbar.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-button.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-group.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-item.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-divider.tsx","webpack://@finviz/website/./js/main/components/tour/step-content.tsx","webpack://@finviz/website/./js/main/components/tour/utils.ts","webpack://@finviz/website/./js/main/components/tour/hooks.tsx","webpack://@finviz/website/./js/main/components/tabs/tab.tsx","webpack://@finviz/website/./js/main/components/tabs/tab-list.tsx","webpack://@finviz/website/./js/main/components/tabs/tab-panel.tsx","webpack://@finviz/website/./js/main/components/tabs/tabs.tsx","webpack://@finviz/website/./js/main/components/badge.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/components/tooltip-input.tsx","webpack://@finviz/website/./js/main/hooks/useVisualViewport.ts","webpack://@finviz/website/../node_modules/react-router-dom/dist/index.js","webpack://@finviz/website/../node_modules/core-js/modules/es.string.replace-all.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/5KB2YIDT.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/JJ3MV4KB.js"],"sourcesContent":["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 { 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 DateRangeFilter({ 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 { 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 { 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 DateRangeFilter from './daterange-filter'\r\nimport DefaultFilter from './default-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 case 'news_date':\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 getDefaultDateRangeAnchorDate,\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: getDefaultDateRangeAnchorDate(),\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: getDefaultDateRangeAnchorDate(),\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/client'\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\nlet timeframeRoot: ReactDOM.Root\r\nconst screenerTimeframeReactMount = () => {\r\n const timeframeContainer = document.getElementById(SCREENER_TIMEFRAME_REACT_ROOT_ID)\r\n if (timeframeContainer) {\r\n timeframeRoot = ReactDOM.createRoot(timeframeContainer)\r\n\r\n timeframeRoot.render(\r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nconst screenerTimeframeReactUnmount = () => {\r\n timeframeRoot?.unmount()\r\n}\r\n\r\nready(() => {\r\n const screener = document.getElementById('screener-react')\r\n if (screener && FinvizSettings.hasUserPremium) {\r\n const root = ReactDOM.createRoot(screener)\r\n\r\n root.render()\r\n }\r\n screenerTimeframeReactMount()\r\n})\r\n\r\nwindow.ScreenerTimeframeReactMount = screenerTimeframeReactMount\r\nwindow.ScreenerTimeframeReactUnmount = screenerTimeframeReactUnmount\r\n","import classnames from 'classnames'\r\nimport { ForwardedRef, HTMLProps, PropsWithChildren, ReactNode, forwardRef } from 'react'\r\n\r\nimport { Icon } from './icon'\r\n\r\nexport enum ColorVariant {\r\n violet = 'violet',\r\n emerald = 'emerald',\r\n orange = 'orange',\r\n teal = 'teal',\r\n pink = 'pink',\r\n lime = 'lime',\r\n purple = 'purple',\r\n green = 'green',\r\n yellow = 'yellow',\r\n blue = 'blue',\r\n red = 'red',\r\n gray = 'gray',\r\n default = 'default',\r\n dark = 'dark',\r\n}\r\n\r\nexport enum CheckboxSize {\r\n none = '', // Do not set fixed size\r\n small = 'min-h-6 text-2xs', // 24px\r\n regular = 'min-h-7 text-sm', // 28px\r\n}\r\nexport type CheckboxSizeType = keyof typeof CheckboxSize\r\n\r\ninterface CheckboxProps extends Omit, 'label' | 'size'> {\r\n /**\r\n * Text that gets displayed on the right side of the checkbox\r\n */\r\n label?: ReactNode\r\n\r\n checked: boolean\r\n\r\n /**\r\n * Size of the checkbox\r\n *\r\n * @default \"regular\"\r\n */\r\n size?: CheckboxSizeType\r\n\r\n /**\r\n * Color of the checkbox\r\n *\r\n * @default \"default\"\r\n */\r\n color?: ColorVariant\r\n}\r\n\r\nfunction CheckboxComponent(\r\n {\r\n className,\r\n label,\r\n size = 'regular',\r\n color = ColorVariant.default,\r\n children,\r\n ...props\r\n }: PropsWithChildren,\r\n ref: ForwardedRef\r\n) {\r\n const checked = props.checked ?? props.defaultChecked\r\n\r\n return (\r\n \r\n
\r\n \r\n {checked && (\r\n \r\n )}\r\n
\r\n {label ?? children}\r\n \r\n )\r\n}\r\n\r\nexport const Checkbox = forwardRef(CheckboxComponent)\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, PropsWithChildren, memo, useCallback, useLayoutEffect, useRef, useState } from 'react'\r\n\r\nexport interface Interaction {\r\n left: number\r\n top: number\r\n}\r\n\r\n/**\r\n * Clamp value between two bounds\r\n */\r\nfunction clamp(num: number, min = 0, max = 1) {\r\n return num > max ? max : num < min ? min : num\r\n}\r\n\r\n/**\r\n * Check if an event was triggered by touch\r\n */\r\nfunction isTouch(event: MouseEvent | TouchEvent): event is TouchEvent {\r\n return 'touches' in event\r\n}\r\n\r\n/**\r\n * Returns a relative position of the pointer inside the node's bounding box\r\n */\r\nfunction getRelativePosition(node: HTMLDivElement, event: MouseEvent | TouchEvent): Interaction {\r\n const rect = node.getBoundingClientRect()\r\n\r\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\r\n const pointer = isTouch(event) ? event.touches[0] : (event as MouseEvent)\r\n\r\n return {\r\n left: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),\r\n top: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height),\r\n }\r\n}\r\n\r\n/**\r\n * Browsers introduced an intervention, making touch events passive by default.\r\n * This workaround removes `preventDefault` call from the touch handlers.\r\n * @see https://github.com/facebook/react/issues/19651\r\n */\r\nfunction preventDefaultMove(event: MouseEvent | TouchEvent) {\r\n !isTouch(event) && event.preventDefault()\r\n}\r\n\r\ninterface Props {\r\n onMove: (interaction: Interaction) => void\r\n onKey: (offset: Interaction) => void\r\n}\r\n\r\nfunction DraggablePickerComponent({\r\n onMove,\r\n onKey,\r\n className,\r\n ...props\r\n}: PropsWithChildren & HTMLProps) {\r\n const container = useRef(null)\r\n const hasTouched = useRef(false)\r\n const [isDragging, setDragging] = useState(false)\r\n\r\n /**\r\n * Prevent mobile browsers from handling mouse events (conflicting with touch ones).\r\n * If we detected a touch interaction before, we prefer reacting to touch events only.\r\n */\r\n const isValid = useRef((event: MouseEvent | TouchEvent): boolean => {\r\n if (hasTouched.current && !isTouch(event)) return false\r\n if (!hasTouched.current) hasTouched.current = isTouch(event)\r\n return true\r\n })\r\n\r\n const handleMove = useCallback(\r\n (event: MouseEvent | TouchEvent) => {\r\n preventDefaultMove(event)\r\n\r\n // If user moves the pointer outside of the window or iframe bounds and release it there,\r\n // `mouseup`/`touchend` won't be fired. In order to stop the picker from following the cursor\r\n // after the user has moved the mouse/finger back to the document, we check `event.buttons`\r\n // and `event.touches`. It allows us to detect that the user is just moving his pointer\r\n // without pressing it down\r\n const isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0\r\n\r\n if (isDown && container.current) {\r\n onMove(getRelativePosition(container.current, event))\r\n } else {\r\n setDragging(false)\r\n }\r\n },\r\n [onMove]\r\n )\r\n\r\n const handleMoveStart = useCallback(\r\n ({ nativeEvent }: React.MouseEvent | React.TouchEvent) => {\r\n preventDefaultMove(nativeEvent)\r\n\r\n if (!isValid.current(nativeEvent)) return\r\n\r\n // The node/ref must actually exist when user start an interaction.\r\n // We won't suppress the ESLint warning though, as it should probably be something to be aware of.\r\n onMove(getRelativePosition(container.current!, nativeEvent))\r\n setDragging(true)\r\n },\r\n [onMove]\r\n )\r\n\r\n const handleKeyDown = useCallback(\r\n (event: React.KeyboardEvent) => {\r\n const keyCode = event.which || event.keyCode\r\n\r\n // Ignore all keys except arrow ones\r\n if (keyCode < 37 || keyCode > 40) return\r\n // Do not scroll page by arrow keys when document is focused on the element\r\n event.preventDefault()\r\n // Send relative offset to the parent component.\r\n // We use codes (37←, 38↑, 39→, 40↓) instead of keys ('ArrowRight', 'ArrowDown', etc)\r\n // to reduce the size of the library\r\n onKey({\r\n left: keyCode === 39 ? 0.05 : keyCode === 37 ? -0.05 : 0,\r\n top: keyCode === 40 ? 0.05 : keyCode === 38 ? -0.05 : 0,\r\n })\r\n },\r\n [onKey]\r\n )\r\n\r\n const handleMoveEnd = useCallback(() => setDragging(false), [])\r\n\r\n const toggleDocumentEvents = useCallback(\r\n (state: boolean) => {\r\n // add or remove additional pointer event listeners\r\n const toggleEvent = state ? window.addEventListener : window.removeEventListener\r\n toggleEvent(hasTouched.current ? 'touchmove' : 'mousemove', handleMove)\r\n toggleEvent(hasTouched.current ? 'touchend' : 'mouseup', handleMoveEnd)\r\n },\r\n [handleMove, handleMoveEnd]\r\n )\r\n\r\n useLayoutEffect(() => {\r\n toggleDocumentEvents(isDragging)\r\n return () => {\r\n isDragging && toggleDocumentEvents(false)\r\n }\r\n }, [isDragging, toggleDocumentEvents])\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const DraggablePicker = memo(DraggablePickerComponent)\r\n","interface PointerProps {\r\n className?: string\r\n top?: number\r\n left: number\r\n color: string\r\n}\r\n\r\nexport function Pointer({ color, left, top = 0.5 }: PointerProps) {\r\n return (\r\n \r\n
\r\n
\r\n )\r\n}\r\n","/**\r\n * Keep this file in sync with `app/utils/colors.ts` in charts repo\r\n * */\r\n\r\nexport interface RGBA {\r\n r: number\r\n g: number\r\n b: number\r\n a: number\r\n}\r\n\r\nexport interface HSVA {\r\n h: number\r\n s: number\r\n v: number\r\n a: number\r\n}\r\n\r\nexport interface HSLA {\r\n h: number\r\n s: number\r\n l: number\r\n a: number\r\n}\r\n\r\n/**\r\n * Convert Hex string to RGBA object.\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hexStringToRGBA(hexString: string): RGBA {\r\n const hexColor = removeHashSymbol(hexString)\r\n let r: string | number = 0\r\n let g: string | number = 0\r\n let b: string | number = 0\r\n let a: string | number = 255\r\n\r\n // 3 digits\r\n if (hexColor.length === 3 || hexColor.length === 4) {\r\n r = '0x' + hexColor[0] + hexColor[0]\r\n g = '0x' + hexColor[1] + hexColor[1]\r\n b = '0x' + hexColor[2] + hexColor[2]\r\n // Get channel if defined\r\n a = hexColor.length === 4 ? '0x' + hexColor[3] + hexColor[3] : a\r\n\r\n // 6 digits\r\n } else if (hexColor.length === 6 || hexColor.length === 8) {\r\n r = '0x' + hexColor[0] + hexColor[1]\r\n g = '0x' + hexColor[2] + hexColor[3]\r\n b = '0x' + hexColor[4] + hexColor[5]\r\n // Get channel if defined\r\n a = hexColor.length === 8 ? '0x' + hexColor[6] + hexColor[7] : a\r\n }\r\n\r\n return { r: Number(r), g: Number(g), b: Number(b), a: Math.min(Math.round((Number(a) / 255) * 100) / 100, 1) }\r\n}\r\n\r\n/**\r\n * Convert HEX string to HSVA color representation.\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n */\r\nexport function hexStringToHSVA(hexString: string) {\r\n return rgbaToHSVA(hexStringToRGBA(hexString))\r\n}\r\n\r\n/**\r\n * Convert HEX string to HSLA color representation.\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n */\r\nexport function hexStringToHSLA(hexString: string) {\r\n return rgbaToHSLA(hexStringToRGBA(hexString))\r\n}\r\n\r\n/**\r\n * Convert alpha value to hex value\r\n *\r\n * Input: [0,1]\r\n *\r\n * Output: alpha in HEX format\r\n */\r\nexport function alphaToHex(alpha: number) {\r\n return Math.max(Math.min(Math.round(alpha * 255), 255), 0)\r\n .toString(16)\r\n .padStart(2, '0')\r\n}\r\n\r\n/**\r\n * Convert RGBA color to HEX string.\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: color in hex6 or hex8 depending on whether or not alpha is enabled\r\n */\r\nexport function rgbaToHexString(color: RGBA, alpha = false) {\r\n const r = color.r.toString(16)\r\n const g = color.g.toString(16)\r\n const b = color.b.toString(16)\r\n const hexString = '#' + r.padStart(2, '0') + g.padStart(2, '0') + b.padStart(2, '0')\r\n\r\n if (!alpha || color.a === 1) {\r\n return hexString\r\n }\r\n\r\n return `${hexString}${alphaToHex(color.a)}`\r\n}\r\n\r\n/**\r\n * Convert HSVA object to HEX string\r\n *\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hsvaToHEXString(color: HSVA, alpha = false) {\r\n const rgbaColor = hsvaToRGBA(color)\r\n\r\n return rgbaToHexString(rgbaColor, alpha)\r\n}\r\n\r\n/**\r\n * Convert HSLA object to HEX string\r\n *\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hslaToHexString(color: HSLA, alpha = false) {\r\n const rgbaColor = hslaToRGBA(color)\r\n\r\n return rgbaToHexString(rgbaColor, alpha)\r\n}\r\n\r\n/**\r\n * Convert RGBA color to HSVA\r\n * @see https://stackoverflow.com/a/54070620/6662683\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n */\r\nexport function rgbaToHSVA(color: RGBA): HSVA {\r\n const r = color.r / 255\r\n const g = color.g / 255\r\n const b = color.b / 255\r\n\r\n const v = Math.max(r, g, b)\r\n const c = v - Math.min(r, g, b)\r\n const h = c && (v === r ? (g - b) / c : v === g ? 2 + (b - r) / c : 4 + (r - g) / c)\r\n\r\n return {\r\n h: 60 * (h < 0 ? h + 6 : h),\r\n s: v ? c / v : 0,\r\n v: v,\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert RGBA to HSLA\r\n * @see https://stackoverflow.com/a/54071699/6662683\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n */\r\nexport function rgbaToHSLA(color: RGBA): HSLA {\r\n const r = color.r / 255\r\n const g = color.g / 255\r\n const b = color.b / 255\r\n\r\n const v = Math.max(r, g, b)\r\n const c = v - Math.min(r, g, b)\r\n const f = 1 - Math.abs(v + v - c - 1)\r\n const h = c && (v === r ? (g - b) / c : v === g ? 2 + (b - r) / c : 4 + (r - g) / c)\r\n\r\n return {\r\n h: 60 * (h < 0 ? h + 6 : h),\r\n s: f ? c / f : 0,\r\n l: (v + v - c) / 2,\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSVA color to RGBA\r\n * @see https://stackoverflow.com/a/54024653/6662683\r\n *\r\n * Input: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hsvaToRGBA(color: HSVA): RGBA {\r\n const f = (n: number, k = (n + color.h / 60) % 6) => color.v - color.v * color.s * Math.max(Math.min(k, 4 - k, 1), 0)\r\n\r\n return {\r\n r: Math.round(f(5) * 255),\r\n g: Math.round(f(3) * 255),\r\n b: Math.round(f(1) * 255),\r\n a: Math.round(color.a * 100) / 100,\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSLA color to RGBA\r\n * @see https://stackoverflow.com/a/54014428/6662683\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hslaToRGBA(color: HSLA): RGBA {\r\n const a = color.s * Math.min(color.l, 1 - color.l)\r\n const f = (n: number, k = (n + color.h / 30) % 12) => color.l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\r\n\r\n return {\r\n r: Math.round(f(0) * 255),\r\n g: Math.round(f(8) * 255),\r\n b: Math.round(f(4) * 255),\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert RGBA color to rgba() string\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: rgba(r, g, b, a)\r\n */\r\nexport function rgbaToRGBAString(color: RGBA) {\r\n return `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`\r\n}\r\n\r\n/**\r\n * Convert rgba() string to RGBA color\r\n *\r\n * Input: rgba(r, g, b, a)\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function rgbaStringToObject(color: string) {\r\n const colorParts = /^rgba?\\(([0-9]{1,3})[ ,]+([0-9]{1,3})[ ,]+([0-9]{1,3})[ ,]*([01].?[0-9]*)?\\)$/.exec(color)\r\n const [red, green, blue, alpha = '1'] = colorParts?.slice(1) || [0, 0, 0, 1].map(String)\r\n return {\r\n r: Number.parseInt(red),\r\n g: Number.parseInt(green),\r\n b: Number.parseInt(blue),\r\n a: Number.parseFloat(alpha),\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSLA color to hsla() string\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: hsla(h, s, l, a)\r\n */\r\nexport function hslaToHSLAString(color: HSLA) {\r\n return `hsla(${Math.round(color.h)}, ${Math.round(color.s * 10000) / 100}%, ${Math.round(color.l * 10000) / 100}%, ${\r\n color.a\r\n })`\r\n}\r\n\r\nexport function removeHashSymbol(strColor: string) {\r\n return strColor.replace(/#/g, '')\r\n}\r\n\r\n/**\r\n * Check if the param is a valid color by setting it as style\r\n */\r\nexport function isValidColor(strColor: string) {\r\n const isRgb = strColor.startsWith('rgba')\r\n const s = new Option().style\r\n\r\n s.color = isRgb ? strColor : `#${removeHashSymbol(strColor)}`\r\n\r\n return s.color !== ''\r\n}\r\n\r\n/**\r\n * Normalize color to be a hex value\r\n */\r\nexport function convertColorToHEX(strColor: string) {\r\n const isRgb = getIsRgb(strColor)\r\n\r\n if (isRgb) {\r\n return rgbaToHexString(rgbaStringToObject(strColor), true)\r\n }\r\n\r\n return strColor\r\n}\r\n\r\n/**\r\n * Returns true if color is rgb or rgba\r\n */\r\nexport function getIsRgb(strColor: string, isAlphaAllowed = true) {\r\n const rgbKeys = ['rgb']\r\n if (isAlphaAllowed) {\r\n rgbKeys.push('rgba')\r\n }\r\n return rgbKeys.some((startsWith) => strColor.startsWith(startsWith))\r\n}\r\n\r\n/**\r\n * Convert any color format to HSVA (internal color picker representation)\r\n */\r\nexport function getHSVAFromColor(strColor: string) {\r\n if (getIsRgb(strColor)) {\r\n return rgbaToHSVA(rgbaStringToObject(strColor))\r\n }\r\n\r\n return hexStringToHSVA(strColor)\r\n}\r\n\r\n/**\r\n * Stringify HSVA color representation into a output format\r\n */\r\nexport function stringifyHSVAColor(color: HSVA, output: 'rgba' | 'hex', canSelectAlpha?: boolean) {\r\n switch (output) {\r\n case 'rgba':\r\n return rgbaToRGBAString(hsvaToRGBA(color))\r\n default:\r\n return hsvaToHEXString(color, canSelectAlpha)\r\n }\r\n}\r\n\r\n/**\r\n * Get luma value from RGBA color using the Rec. 709 coefficients\r\n * @see https://en.wikipedia.org/wiki/Luma_%28video%29\r\n *\r\n * If luma is >= 165 the foreground color should be dark\r\n */\r\nexport function getLumaFromRGBA(color: RGBA) {\r\n return 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b\r\n}\r\n\r\n/**\r\n * Checks if luma is >= 165 or alpha < 0.3\r\n */\r\nexport function getIsColorTooLightOrTransparent(color: RGBA) {\r\n return getLumaFromRGBA(color) >= 165 || color.a < 0.5\r\n}\r\n\r\n/**\r\n * Set specific alpha for a hex color\r\n */\r\nexport function getHEXWithSpecificAplha(color: string, alpha = 1) {\r\n const rgbaColor = hexStringToRGBA(color)\r\n return rgbaToHexString({ ...rgbaColor, a: alpha }, true)\r\n}\r\n\r\n/**\r\n * Get rgba from valid color string\r\n */\r\nexport function getRGBAValueFromValidColorString(value: string) {\r\n if (getIsRgb(value)) return rgbaToRGBAString(rgbaStringToObject(value))\r\n return rgbaToRGBAString(hexStringToRGBA(value))\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface LightnessProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nexport function Alpha({ color, onChange }: LightnessProps) {\r\n const changeLightness = useCallback((pos: Interaction) => onChange({ ...color, a: 1 - pos.left }), [onChange, color])\r\n\r\n const gradientPreview = useMemo(() => {\r\n const gradientFrom = hsvaToHEXString({ ...color, a: 1 })\r\n const gradientTo = hsvaToHEXString({ ...color, a: 0 }, true)\r\n\r\n return `linear-gradient(90deg, ${gradientFrom}, ${gradientTo})`\r\n // Don’t recalculate when alpha changes\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [color.h, color.s, color.v])\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\n","import { Icon } from '../icon'\r\nimport { HSVA, hexStringToHSVA } from './util'\r\n\r\nconst DEFAULT_COLORS = [\r\n { title: 'Rose', value: '#f43f5e' },\r\n { title: 'Pink', value: '#db2777' },\r\n { title: 'Fuchsia', value: '#c026d3' },\r\n { title: 'Purple', value: '#9333ea' },\r\n { title: 'Violet', value: '#7c3aed' },\r\n { title: 'Indigo', value: '#4f46e5' },\r\n { title: 'Blue', value: '#2563eb' },\r\n { title: 'Light Blue', value: '#0284c7' },\r\n { title: 'Cyan', value: '#0891b2' },\r\n { title: 'Teal', value: '#0d9488' },\r\n { title: 'Emerald', value: '#059669' },\r\n { title: 'Green', value: '#16a34a' },\r\n { title: 'Lime', value: '#65a30d' },\r\n { title: 'Yellow', value: '#eab308' },\r\n { title: 'Amber', value: '#d97706' },\r\n { title: 'Red', value: '#dc2626' },\r\n]\r\n\r\ninterface ColorItem {\r\n /**\r\n * Name of the color\r\n */\r\n title: string\r\n\r\n /**\r\n * Hex value\r\n */\r\n value: string\r\n}\r\n\r\ninterface ColorPaletteProps {\r\n /**\r\n * Current selected color in HEX format (supports HEX8 for alpha)\r\n */\r\n color: string\r\n\r\n /**\r\n * List of colors to display in the palette\r\n *\r\n * @default DEFAULT_COLORS\r\n */\r\n colors?: ColorItem[]\r\n\r\n /**\r\n * Callback when user picks a color\r\n */\r\n onChange: (color: string, originalColor: HSVA) => void\r\n}\r\n\r\nexport function ColorPalette({ color, colors = DEFAULT_COLORS, onChange }: ColorPaletteProps) {\r\n const lowerCaseColor = color.toLowerCase()\r\n\r\n return (\r\n
\r\n {colors.map((colorObj) => {\r\n const isSelected = lowerCaseColor.startsWith(colorObj.value)\r\n return (\r\n onChange(colorObj.value, hexStringToHSVA(colorObj.value))}\r\n >\r\n {isSelected && }\r\n
\r\n )\r\n })}\r\n
\r\n )\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface HueSaturationProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nfunction getPositionFromHSLA(color: HSVA) {\r\n return {\r\n left: color.h / 360,\r\n top: 1 - color.s,\r\n }\r\n}\r\n\r\nexport function HueSaturation({ color, onChange }: HueSaturationProps) {\r\n const position = useMemo(() => getPositionFromHSLA(color), [color])\r\n\r\n const colorPreview = useMemo(() => hsvaToHEXString({ h: color.h, s: color.s, v: 1, a: 1 }), [color.h, color.s])\r\n\r\n const changeSaturation = useCallback(\r\n (pos: Interaction) =>\r\n onChange({\r\n h: Math.round(pos.left * 360),\r\n s: 1 - pos.top,\r\n v: 1,\r\n a: color.a,\r\n }),\r\n [color.a, onChange]\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","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface LightnessProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nexport function Lightness({ color, onChange }: LightnessProps) {\r\n const changeLightness = useCallback((pos: Interaction) => onChange({ ...color, v: 1 - pos.left }), [onChange, color])\r\n\r\n const colorPreview = useMemo(\r\n () => hsvaToHEXString({ h: color.h, s: color.s, v: color.v, a: 1 }),\r\n [color.h, color.s, color.v]\r\n )\r\n\r\n const gradientPreview = useMemo(() => {\r\n const gradientFrom = hsvaToHEXString({ h: color.h, s: color.s, v: 1, a: 1 })\r\n const gradientTo = hsvaToHEXString({ h: color.h, s: color.s, v: 0, a: 1 })\r\n\r\n return `linear-gradient(90deg, ${gradientFrom}, ${gradientTo})`\r\n }, [color.h, color.s])\r\n\r\n return (\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 { Icon, IconNameType, isValidIconName } from '../icon'\r\nimport { getIsColorTooLightOrTransparent, hexStringToRGBA } from './util'\r\n\r\ninterface ColorPreviewProps {\r\n /**\r\n * Name of an icon or JSX.Element\r\n */\r\n icon?: JSX.Element | IconNameType\r\n\r\n /**\r\n * One or more colors to show in the preview\r\n */\r\n color: string | string[]\r\n\r\n /**\r\n * Wrapper classname\r\n */\r\n className?: string\r\n}\r\n\r\nexport function ColorPreview({ icon, color, className }: ColorPreviewProps) {\r\n const colors = Array.isArray(color) ? color : [color]\r\n const isTooLight = getIsColorTooLightOrTransparent(hexStringToRGBA(colors[0]))\r\n return (\r\n \r\n {icon && (\r\n
\r\n {isValidIconName(icon) ? (\r\n \r\n ) : (\r\n icon\r\n )}\r\n
\r\n )}\r\n {colors.map((color, index) => (\r\n //   has to be there because of a bug on safari which ignores h-full when empty element\r\n
\r\n  \r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React, { ForwardedRef, useCallback, useEffect, useState } from 'react'\r\n\r\nimport { Input, InputComponentProps } from '../input'\r\nimport { ColorPreview } from './color-preview'\r\nimport { ColorPickerProps } from './picker'\r\nimport * as colorUtil from './util'\r\n\r\ninterface PickerInputProps extends Omit {\r\n color: ColorPickerProps['color']\r\n onChange: ColorPickerProps['onChange']\r\n\r\n /*\r\n * Is color preview square visible\r\n *\r\n * @default true\r\n * */\r\n hasColorPreview?: boolean\r\n}\r\nexport const PickerInput = React.forwardRef(\r\n (\r\n { color, inputClass, hasColorPreview = true, onChange, ...props }: PickerInputProps,\r\n ref: ForwardedRef\r\n ) => {\r\n const [colorInput, setColorInput] = useState(colorUtil.removeHashSymbol(color))\r\n const isRgba = colorUtil.getIsRgb(colorInput)\r\n\r\n useEffect(() => {\r\n setColorInput(colorUtil.removeHashSymbol(color))\r\n }, [color])\r\n\r\n const handleColorInputChange = useCallback(\r\n (event: React.KeyboardEvent) => {\r\n const value = colorUtil.removeHashSymbol(event.currentTarget.value)\r\n const isRgba = value.startsWith('rgba')\r\n const colorValue = isRgba ? value : `#${value}`\r\n\r\n setColorInput(value)\r\n if ((value.length >= 6 || (isRgba && value.length >= 16)) && colorUtil.isValidColor(colorValue)) {\r\n onChange(colorValue, colorUtil.hexStringToHSVA(colorValue))\r\n }\r\n },\r\n [onChange]\r\n )\r\n return (\r\n \r\n {hasColorPreview && (\r\n
\r\n \r\n
\r\n )}\r\n {!isRgba && #}\r\n
\r\n }\r\n onChange={handleColorInputChange}\r\n />\r\n )\r\n }\r\n)\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport React, { ReactNode, useCallback, useEffect, useRef, useState } from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { Button } from '../button'\r\nimport { Popover, PopoverTrigger, usePopoverState } from '../popover'\r\nimport { Alpha } from './alpha'\r\nimport { ColorPalette } from './color-palette'\r\nimport { HueSaturation } from './hue-saturation'\r\nimport { Lightness } from './lightness'\r\nimport { PickerInput } from './picker-input'\r\nimport * as colorUtil from './util'\r\n\r\nexport interface ColorPickerProps {\r\n /**\r\n * The selected color in HEX format (supports HEX8 for alpha)\r\n */\r\n color: string\r\n\r\n /**\r\n * Whether or not the user is able to select custom color\r\n *\r\n * @default true\r\n */\r\n canSelectCustom?: boolean\r\n\r\n /**\r\n * Whether or not the user is able to change alpha channel. Only applicable\r\n * when `canSelectCustom` is true\r\n *\r\n * @default true\r\n */\r\n canSelectAlpha?: boolean\r\n\r\n /**\r\n * Sets the output format for the color picker\r\n *\r\n * @default 'hex'\r\n */\r\n outputFormat?: 'hex' | 'rgba'\r\n\r\n /**\r\n * Callback when user changes color. Use the second parameter to do color space\r\n * conversions otherwise the color could differ due to rounding\r\n */\r\n onChange: (color: string, originalColor: colorUtil.HSVA) => void\r\n\r\n /**\r\n * Callback when user clicks on a palette item. Used to close popover\r\n */\r\n onPaletteItemClick?: () => void\r\n}\r\n\r\nexport function ColorPicker({\r\n color,\r\n canSelectCustom = true,\r\n canSelectAlpha = true,\r\n outputFormat = 'hex',\r\n onChange,\r\n onPaletteItemClick,\r\n}: ColorPickerProps) {\r\n const cachedColor = useRef(color)\r\n const [hsvaColor, setColor] = useState(colorUtil.getHSVAFromColor(color))\r\n const popover = Ariakit.usePopoverContext()\r\n const input = popover?.useState('disclosureElement')\r\n\r\n /**\r\n * Update state if the color from outside changed\r\n */\r\n useEffect(() => {\r\n const currentColor = colorUtil.removeHashSymbol(cachedColor.current)\r\n const newColor = colorUtil.removeHashSymbol(color)\r\n\r\n if (currentColor === newColor || !colorUtil.isValidColor(newColor)) return\r\n\r\n cachedColor.current = color\r\n setColor(colorUtil.getHSVAFromColor(color))\r\n }, [color])\r\n\r\n /**\r\n * Handle color change\r\n * 1. update cache so we can correctly check when outside color updates\r\n * 2. Update internal color representation\r\n * 3. call onChange with string color\r\n */\r\n const onChangeCallback = useCallback(\r\n (color: colorUtil.HSVA) => {\r\n const stringColor = colorUtil.stringifyHSVAColor(color, outputFormat, canSelectAlpha)\r\n cachedColor.current = stringColor\r\n onChange(stringColor, color)\r\n setColor(color)\r\n },\r\n [onChange, canSelectAlpha, outputFormat]\r\n )\r\n\r\n const onSetCustomCodeClick = useCallback(() => {\r\n const value = prompt('Enter a color code')?.trim()\r\n\r\n if (!value) return\r\n\r\n const isValid = colorUtil.isValidColor(value)\r\n\r\n if (!isValid) {\r\n return alert('The code is not a valid color')\r\n }\r\n\r\n onChangeCallback(colorUtil.getHSVAFromColor(value))\r\n }, [onChangeCallback])\r\n\r\n return (\r\n
\r\n {canSelectCustom && (\r\n <>\r\n {isMobile() && (\r\n \r\n )}\r\n \r\n \r\n\r\n {canSelectAlpha && }\r\n \r\n )}\r\n\r\n \r\n {\r\n input?.focus({ preventScroll: true })\r\n onPaletteItemClick?.()\r\n onChangeCallback({ ...orignalColor, a: hsvaColor.a })\r\n }}\r\n />\r\n
\r\n \r\n )\r\n}\r\n\r\ninterface InputColorPickerProps extends ColorPickerProps {\r\n /**\r\n * Label for the input\r\n */\r\n label?: ReactNode\r\n inputDataTestId?: string\r\n}\r\n\r\nexport function InputColorPicker({ label, inputDataTestId, onChange, ...props }: InputColorPickerProps) {\r\n const popoverState = usePopoverState()\r\n const canSelectCustom = props.canSelectCustom !== false\r\n const isMobileDevice = isMobile()\r\n\r\n return (\r\n <>\r\n \r\n }\r\n />\r\n \r\n \r\n {\r\n if (canSelectCustom) return\r\n popoverState.hide()\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 { isMobile } from '../../../app/shared/isMobile'\r\nimport { Button, ButtonComponentProps, ButtonRounding, ButtonSizeType } from '../button'\r\nimport { ButtonGroup } from '../button-group'\r\nimport { IconNameType } from '../icon'\r\nimport { Popover, PopoverTrigger, usePopoverState } from '../popover'\r\nimport { ColorPreview } from './color-preview'\r\nimport { ColorPicker, ColorPickerProps } from './picker'\r\nimport { PickerInput } from './picker-input'\r\nimport * as colorUtil from './util'\r\n\r\ninterface MultiColorPickerProps extends ColorPickerProps {\r\n /**\r\n * Label for color text input\r\n *\r\n * @default undefined\r\n */\r\n colorInputLabel?: string\r\n}\r\n\r\nexport function MultiColorPicker({\r\n colorInputLabel,\r\n onChange,\r\n canSelectCustom = true,\r\n ...props\r\n}: MultiColorPickerProps) {\r\n const isMobileDevice = isMobile()\r\n\r\n return (\r\n <>\r\n {canSelectCustom && !isMobileDevice && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n {}} />\r\n \r\n \r\n )\r\n}\r\n\r\ninterface ColorTabButtonProps extends ButtonComponentProps {\r\n /*\r\n * Preview color\r\n * */\r\n color: string\r\n}\r\n\r\nexport function ColorTabButton({ color, children, ...props }: ColorTabButtonProps) {\r\n return (\r\n }\r\n {...props}\r\n >\r\n {children}\r\n \r\n )\r\n}\r\n\r\ntype ButtonColorProperties = { color: string; label: string }\r\n\r\ninterface ButtonColorPickerProps\r\n extends Omit {\r\n /**\r\n * Temporary prop to enable/disable multi picker funcionality,\r\n * in the future we'll only use secondaryColor prop to decide if the picker is multi picker or not\r\n *\r\n * @default undefined\r\n */\r\n isMultiPicker?: boolean\r\n\r\n /**\r\n * Button classname\r\n */\r\n className?: string\r\n\r\n /**\r\n * Array of objects with color and value\r\n */\r\n colors: ColorType[]\r\n\r\n /**\r\n * Color onchange callback\r\n */\r\n onChange: (colors: ColorType[], originalColor: colorUtil.HSVA) => void\r\n\r\n /**\r\n * Button size\r\n *\r\n * @default undefined\r\n */\r\n size?: ButtonSizeType\r\n /**\r\n * Label for color text input\r\n *\r\n * @default undefined\r\n */\r\n colorInputLabel?: string\r\n\r\n /**\r\n * Name of an icon or JSX.Element\r\n */\r\n icon?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Identifier for e2e testing\r\n *\r\n * @default undefined\r\n */\r\n buttonPickerDataTestId?: string\r\n}\r\n\r\nexport function ButtonColorPicker({\r\n size,\r\n icon,\r\n colors,\r\n className,\r\n onChange,\r\n buttonPickerDataTestId,\r\n ...props\r\n}: ButtonColorPickerProps) {\r\n const popoverState = usePopoverState()\r\n const isOpen = popoverState.useState('open')\r\n const isMultiPicker = !!props.isMultiPicker && colors.length > 1\r\n const [activeColorIndex, setActiveColorIndex] = React.useState(0)\r\n const handleColorChange = React.useCallback(\r\n (color: string, originalColor: colorUtil.HSVA) => {\r\n onChange(\r\n colors.map((colorObject, index) => (index === activeColorIndex ? { ...colorObject, color } : colorObject)),\r\n originalColor\r\n )\r\n },\r\n [activeColorIndex, colors, onChange]\r\n )\r\n return (\r\n <>\r\n \r\n color)}\r\n className={classnames('h-full w-full', ButtonRounding.small)}\r\n />\r\n \r\n \r\n {isMultiPicker && (\r\n
\r\n \r\n {colors.map(({ color, label }, index) => (\r\n setActiveColorIndex(index)}\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","import copy from 'copy-to-clipboard'\r\nimport React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { InputProps, Textarea } from '../input'\r\n\r\ninterface Props extends Pick {\r\n className?: string\r\n text: string\r\n bottomLeftContent?: React.ReactNode\r\n}\r\n\r\nexport const CopyToClipboard: React.FC = ({ className, label, text, bottomLeftContent }) => {\r\n const [isCopied, setIsCopied] = React.useState(false)\r\n\r\n const handleCopyToClipboard = React.useCallback(() => {\r\n setIsCopied(true)\r\n copy(text)\r\n }, [text])\r\n\r\n React.useEffect(() => {\r\n let timeout: number\r\n const resetTimer = () => {\r\n if (!timeout) return\r\n clearTimeout(timeout)\r\n }\r\n if (isCopied) {\r\n resetTimer()\r\n timeout = window.setTimeout(() => {\r\n setIsCopied(false)\r\n }, 2000)\r\n }\r\n\r\n return () => {\r\n resetTimer()\r\n }\r\n }, [isCopied])\r\n\r\n return (\r\n
\r\n e.currentTarget.select()}\r\n inputClass=\"h-12\"\r\n data-testid=\"copy-to-clipboard-textarea\"\r\n value={text}\r\n />\r\n
\r\n {bottomLeftContent &&
{bottomLeftContent}
}\r\n \r\n {isCopied ? 'Copied' : 'Copy'}\r\n \r\n
\r\n
\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 Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { usePrevious } from '../../hooks/use-previous'\r\nimport { usePopoverPlacement } from '../../hooks/usePopoverPlacement'\r\nimport { blurWithoutScroll, focusWithoutScroll, preventDefault } from '../../util'\r\n\r\nenum DropdownRounding {\r\n none = '',\r\n regular = 'rounded-lg',\r\n}\r\n\r\nenum DropdownTheme {\r\n none = '',\r\n default = 'border border-primary bg-primary',\r\n}\r\n\r\ninterface StatelessDropdownProps\r\n extends Omit, 'ref'>,\r\n Pick {\r\n /**\r\n * Trigger button for the dropdown\r\n */\r\n trigger: JSX.Element | null\r\n\r\n /**\r\n * Disable interaction with other page elements when the dropdown is open\r\n *\r\n * @default true\r\n */\r\n modal?: boolean\r\n\r\n /**\r\n * When true, the dropdown will show when dropdown is hovered. Combine with\r\n * `backdrop={false}` to make the popover hide on mouse out\r\n */\r\n showOnHover?: boolean\r\n\r\n /**\r\n * Placement of the dropdown\r\n *\r\n */\r\n placement?: Ariakit.MenuProviderProps['placement']\r\n\r\n /**\r\n * Orientation in which the items are laid out. Changes which arrows control next/prev item\r\n *\r\n * @default vertical\r\n */\r\n orientation?: 'vertical' | 'horizontal'\r\n\r\n /**\r\n * Set rounding for the dropdown list\r\n *\r\n * @default regular\r\n */\r\n rounding?: keyof typeof DropdownRounding\r\n\r\n /**\r\n * Dropdown theme\r\n *\r\n * @default default\r\n */\r\n theme?: keyof typeof DropdownTheme\r\n\r\n /**\r\n * The amount of space between button and its popover\r\n *\r\n * @default 4\r\n */\r\n gutter?: number\r\n\r\n /**\r\n * Show backdrop on the dialog. Provide your own element if you want to add background or animation\r\n *\r\n */\r\n backdrop?: false | JSX.Element\r\n\r\n /**\r\n * Do not render the items when the popover is not visible\r\n *\r\n * @default true\r\n */\r\n unmountOnHide?: boolean\r\n\r\n /**\r\n * If true, the dropdown will overlay the trigger if necessary instead of going\r\n * out of bounds and overflowing\r\n */\r\n overlap?: boolean\r\n\r\n /**\r\n * Callback before the menu starts hiding. Event can be prevented which keeps the menu open\r\n * This callback isn’t called on backdrop click. Use `backdrop={
}` to react on backdrop clicks\r\n */\r\n onClose?: (ev: Event) => void\r\n\r\n /**\r\n * Used to provide virtual anchor, useful for context menu, etc\r\n */\r\n getAnchorRect?: () => { x: number; y: number }\r\n\r\n /**\r\n * Set which element gets focus when the dialog visibility changes. If `false`, the focus stays on the previous element.\r\n * Defaults to focusing without scrolling the page or keeping the focus on trigger if input-like.\r\n */\r\n autoFocusOnShow?: false | ((element: HTMLElement) => boolean)\r\n\r\n /**\r\n * Set which element gets focus when the dialog visibility changes. If `false`, the focus stays on the previous element.\r\n * Defaults to focusing without scrolling the page or keeping the focus on trigger if input-like.\r\n */\r\n autoFocusOnHide?: false | ((element: HTMLElement) => boolean)\r\n\r\n /**\r\n * Callback which is called when the dialog opens and all animations complete\r\n */\r\n onFullyOpen?: () => void\r\n\r\n /**\r\n * Callback which is called when the dialog closes and all animations complete\r\n */\r\n onFullyClosed?: () => void\r\n}\r\n\r\nexport const StatelessDropdown = React.forwardRef(function DropdownComponent(\r\n {\r\n trigger,\r\n modal = true,\r\n rounding = 'regular',\r\n theme = 'default',\r\n gutter,\r\n unmountOnHide = true,\r\n children,\r\n backdrop,\r\n showOnHover,\r\n hideOnInteractOutside,\r\n autoFocusOnShow,\r\n autoFocusOnHide,\r\n onFullyOpen,\r\n onFullyClosed,\r\n ...props\r\n }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const store = Ariakit.useMenuContext()\r\n const { placement, zIndex, updatePosition } = usePopoverPlacement(store)\r\n const isOpen = store?.useState('open')\r\n const [isFullyOpen, setIsFullyOpen] = React.useState(false)\r\n const isMounted = store?.useState('mounted')\r\n const wasMounted = usePrevious(isMounted)\r\n const menuGutter = gutter ?? (store?.parent ? 6 : 4)\r\n\r\n React.useEffect(() => {\r\n if (wasMounted && !isMounted) {\r\n onFullyClosed?.()\r\n }\r\n // We want to call it only on isMounted change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isMounted])\r\n\r\n return (\r\n <>\r\n {trigger && (\r\n \r\n )}\r\n }\r\n // Update zIndex when popover position changes\r\n updatePosition={updatePosition}\r\n // E2E tests don’t wait for transitions to complete and it could lead to bugs with other popover components (ResizeObserver loop exceeded)\r\n // or visual diffs due a screenshot being captured while the dropdown still in transition\r\n // If you encounter this problem, just do `cy.get('[data-fully-open=true]').should('exist')` before continuing to wait for the dropdown\r\n data-fully-open={isFullyOpen}\r\n className={classNames(\r\n props.className,\r\n zIndex,\r\n DropdownRounding[rounding],\r\n DropdownTheme[theme],\r\n 'custom-scrollbar absolute flex flex-col overflow-hidden shadow-modal outline-none dark:shadow-modal-dark',\r\n // These are set by popper, we just need to make sure we don’t encroach on the safe insets\r\n 'min-w-[--popover-anchor-width] max-w-[--popover-available-width]',\r\n // Animations\r\n 'opacity-0 transition duration-[250ms] data-[enter]:translate-y-0 data-[enter]:opacity-100',\r\n {\r\n // When in combobox mode, the padding is smaller so we can render a gradient under the combobox input.\r\n // Change the custom scrollbar offset so the top of the first item fits the top of our scrollbar\r\n '[--scrollbar-radius:0]': DropdownRounding[rounding] === DropdownRounding.none,\r\n // Direction based styles\r\n 'max-h-[calc(var(--popover-available-height)-env(safe-area-inset-bottom))] motion-safe:-translate-y-1':\r\n placement?.startsWith('bottom'),\r\n 'max-h-[calc(var(--popover-available-height)-env(safe-area-inset-top))] motion-safe:translate-y-1':\r\n placement?.startsWith('top'),\r\n }\r\n )}\r\n onTransitionEnd={(ev) => {\r\n if (ev.target === ev.currentTarget && isOpen) {\r\n setIsFullyOpen(true)\r\n onFullyOpen?.()\r\n }\r\n }}\r\n >\r\n \r\n {children}\r\n
\r\n \r\n \r\n )\r\n})\r\n\r\nexport interface DropdownProps extends StatelessDropdownProps {\r\n state?: Ariakit.MenuStore\r\n}\r\n\r\nexport const Dropdown = React.forwardRef(\r\n (\r\n { state, placement, orientation = 'vertical', ...props }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n ) => (\r\n \r\n \r\n \r\n )\r\n)\r\n","import * as Ariakit from '@ariakit/react'\r\nimport * as React from 'react'\r\n\r\nimport { OptionButton, OptionButtonProps } from '../OptionButton'\r\nimport { BUTTON_DEFAULT_ELEMENT } from '../button'\r\nimport { PropsWithAs } from '../types'\r\n\r\ninterface DropdownItemProps extends OptionButtonProps {\r\n store?: Ariakit.MenuStore\r\n\r\n subtitle?: React.ReactNode\r\n\r\n /**\r\n * Whether clicking the item should also close the dropdown. Only applies to\r\n * items without a submenu\r\n *\r\n * @default true\r\n */\r\n hideOnClick?: boolean\r\n}\r\n\r\nfunction DropdownItemComponent(\r\n { as: asComponent, ...props }: PropsWithAs & DropdownItemProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return } />\r\n}\r\n\r\n/**\r\n * We need to forward ref to the function, but typescript looses the type of the\r\n * props param so we need to typecast to get suggestions to work\r\n */\r\nexport const DropdownItem = React.forwardRef(DropdownItemComponent) as <\r\n TagType extends React.ElementType = typeof BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n props: PropsWithAs & DropdownItemProps & { ref?: React.ForwardedRef }\r\n) => ReturnType\r\n","import * as Ariakit from '@ariakit/react'\r\n\r\nexport const useDropdownState = Ariakit.useMenuStore\r\n","import * as React from 'react'\r\n\r\nimport { PartialBy } from '../../types'\r\nimport { MenuGroup } from '../MenuGroup'\r\nimport { Dropdown, DropdownItem, DropdownProps } from '../dropdown'\r\nimport { ObjectHash } from '../types'\r\n\r\nexport interface IContextMenuOption {\r\n type?: never\r\n id: string\r\n label: React.ReactNode\r\n onClick?: () => void\r\n options?: ContextMenuItem[]\r\n gtag?: ObjectHash\r\n}\r\n\r\ninterface IContextMenuDivider {\r\n type: 'divider'\r\n label?: React.ReactNode\r\n}\r\n\r\nexport type ContextMenuItem = IContextMenuOption | IContextMenuDivider\r\n\r\ninterface ContextMenuInnerProps extends PartialBy {\r\n /**\r\n * Items visible in the menu\r\n */\r\n items: ContextMenuItem[]\r\n}\r\n\r\nexport function ContextMenuInner(\r\n { trigger, items, onClose, ...props }: ContextMenuInnerProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return (\r\n ev.preventDefault()}\r\n >\r\n {items?.map((item, index) => {\r\n if (item.type === 'divider') {\r\n return \r\n }\r\n\r\n if (item?.options !== undefined) {\r\n return (\r\n \r\n {item.label}\r\n \r\n }\r\n />\r\n )\r\n }\r\n\r\n return (\r\n {\r\n item.onClick?.()\r\n window.gtag?.('event', 'context-menu', Object.assign({ menu_option: item.id }, item.gtag))\r\n }}\r\n data-testid={`dropdown-menu-${item.id}`}\r\n >\r\n {item.label}\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n\r\nexport const ContextMenu = React.forwardRef(ContextMenuInner)\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\ninterface GridLayoutProps extends React.HTMLProps {\r\n /**\r\n * Number of columns\r\n */\r\n columns?: number\r\n\r\n /**\r\n * Number of rows\r\n */\r\n rows?: number\r\n\r\n /**\r\n * Whether or not a border is rendered between and around items. eg. charts\r\n * on HP won’t have a border\r\n *\r\n * @default false\r\n */\r\n border?: boolean\r\n}\r\n\r\nexport const ChartGridCell = React.forwardRef(\r\n ({ children, gridArea, className, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n )\r\n)\r\n\r\ninterface ChartGridCellProps extends React.HTMLProps {\r\n /**\r\n * Css grid-area value\r\n */\r\n gridArea?: string\r\n}\r\n\r\nexport function GridLayout({ columns = 1, rows = 1, border = false, children, className, ...props }: GridLayoutProps) {\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\ninterface ChartGridProps extends GridLayoutProps {\r\n isResizable?: boolean\r\n}\r\n\r\nexport const ChartGrid: React.FC = (props) => \r\n","import * as React from 'react'\r\n\r\nimport { PropsWithAs, RequireByKey } from '../types'\r\n\r\nconst defaultValueAccessor: ValueAccessor = (data) => data\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst DEFAULT_VALUE_KEY = 'value'\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst DEFAULT_CHANGE_KEY = 'onChange'\r\n\r\ntype ValueAccessor<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps = typeof DEFAULT_VALUE_KEY,\r\n ChangeKey extends keyof React.ComponentProps = typeof DEFAULT_CHANGE_KEY,\r\n> = (...args: Parameters[ChangeKey]>) => React.ComponentProps[ValueKey]\r\n\r\nexport type InnerStateProps<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps,\r\n ChangeKey extends keyof React.ComponentProps,\r\n> = RequireByKey, 'as'> & {\r\n valueKey?: ValueKey\r\n changeKey?: ChangeKey\r\n valueAccessor?: ValueAccessor\r\n}\r\n\r\nexport function InnerState<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps = typeof DEFAULT_VALUE_KEY,\r\n ChangeKey extends keyof React.ComponentProps = typeof DEFAULT_CHANGE_KEY,\r\n>({\r\n as: asComponent,\r\n valueKey = 'value' as ValueKey,\r\n changeKey = 'onChange' as ChangeKey,\r\n valueAccessor = defaultValueAccessor,\r\n ...props\r\n}: InnerStateProps) {\r\n const { [valueKey]: value, [changeKey]: onChange } = props\r\n const [state, setState] = React.useState[ValueKey]>(value)\r\n\r\n const handleChange = React.useCallback>(\r\n (...args) => {\r\n setState(valueAccessor(...args))\r\n onChange(...args)\r\n },\r\n [onChange, valueAccessor]\r\n )\r\n\r\n return React.createElement(asComponent, {\r\n ...props,\r\n [valueKey]: state,\r\n [changeKey]: handleChange,\r\n })\r\n}\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, ReactNode, useEffect, useMemo, useRef, useState } from 'react'\r\n\r\nimport { Label } from './typography'\r\n\r\nexport enum RangeSize {\r\n small = 'sm:h-6', // 24px height\r\n regular = 'sm:h-7', // 28px height\r\n medium = 'sm:h-8', // 32px height\r\n large = 'sm:h-9', // 36px height\r\n}\r\n\r\ntype InputProps = HTMLProps\r\n\r\ninterface RangeSliderProps extends Omit {\r\n /**\r\n * Label which is rendered above the select\r\n */\r\n label?: ReactNode\r\n\r\n /**\r\n * Range size. All inputs have forced height on mobile to avoid zoom\r\n *\r\n * @default regular\r\n */\r\n size?: keyof typeof RangeSize\r\n\r\n /**\r\n * Element which will be rendered on the left side of the slider\r\n */\r\n leftContent?: ReactNode\r\n\r\n /**\r\n * Element which will be rendered on the right side of the slider\r\n */\r\n rightContent?: ReactNode\r\n\r\n /**\r\n * Class name for the wrapper element\r\n */\r\n className?: string\r\n\r\n /**\r\n * Class name for the input element\r\n */\r\n inputClassName?: string\r\n\r\n /**\r\n * Min value for the input\r\n *\r\n * @default 0\r\n */\r\n min?: number\r\n\r\n /**\r\n * Max value for the input\r\n *\r\n * @default 100\r\n */\r\n max?: number\r\n\r\n /**\r\n * Step value for the input\r\n *\r\n * @default 1\r\n */\r\n step?: number\r\n\r\n /**\r\n * Current value\r\n */\r\n value: number\r\n\r\n /**\r\n * Callback when value changes\r\n */\r\n onChange: InputProps['onChange']\r\n}\r\n\r\nexport function RangeSlider({\r\n label,\r\n size = 'regular',\r\n leftContent,\r\n rightContent,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n className,\r\n inputClassName,\r\n ...props\r\n}: RangeSliderProps) {\r\n const [hasTrack, setHasTrack] = useState(false)\r\n const trackRef = useRef(null)\r\n const thumbRef = useRef(null)\r\n\r\n useEffect(() => {\r\n setHasTrack(Boolean(trackRef.current && thumbRef.current))\r\n }, [])\r\n\r\n const thumbLeft = useMemo(() => {\r\n const track = trackRef.current\r\n const thumb = thumbRef.current\r\n const valuePercent = (props.value - min) / (max - min)\r\n\r\n if (!hasTrack || !track || !thumb) return\r\n\r\n const trackBox = track.getBoundingClientRect()\r\n const thumbBox = thumb.getBoundingClientRect()\r\n\r\n return ((valuePercent * (trackBox.width - thumbBox.width)) / trackBox.width) * 100\r\n }, [min, max, props.value, hasTrack])\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { ButtonRoundingType, ButtonThemeType } from '../button'\r\nimport { IconNameType } from '../icon'\r\n\r\nexport enum ToolbarTheme {\r\n chipTransparent, // (default)\r\n alternative,\r\n}\r\n\r\nexport enum ToolbarDirection {\r\n vertical,\r\n horizontal,\r\n}\r\n\r\nexport type ToolbarDirectionType = keyof typeof ToolbarDirection\r\n\r\nexport interface IButtonThemeSettings {\r\n className?: string\r\n theme: ButtonThemeType\r\n rounding: ButtonRoundingType\r\n}\r\n\r\nexport interface IToolbarItem {\r\n id: string\r\n icon: IconNameType\r\n iconActive?: IconNameType\r\n iconAction?: IconNameType\r\n title: string\r\n titleActive?: string\r\n titleAction?: string\r\n}\r\n\r\nexport type ToolbarThemeType = keyof typeof ToolbarTheme\r\n","import * as React from 'react'\r\n\r\nimport { ToolbarDirection, ToolbarTheme } from './interfaces'\r\n\r\nexport interface IToolbarContext {\r\n direction: ToolbarDirection\r\n theme: ToolbarTheme\r\n isWrapped: boolean\r\n isStretched: boolean\r\n isMobile: boolean\r\n}\r\n\r\nexport const ToolbarContext = React.createContext({\r\n direction: ToolbarDirection.vertical,\r\n theme: ToolbarTheme.chipTransparent,\r\n isWrapped: false,\r\n isStretched: false,\r\n isMobile: false,\r\n})\r\n\r\nexport function useToolbarContext() {\r\n return React.useContext(ToolbarContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport throttle from 'lodash.throttle'\r\nimport React from 'react'\r\n\r\nimport { isSafariDesktop } from '../../../app/shared/isMobile'\r\nimport { StatelessDropdown } from '../dropdown'\r\nimport { IToolbarContext, ToolbarContext } from './hooks'\r\nimport { ToolbarDirection, ToolbarDirectionType, ToolbarTheme, ToolbarThemeType } from './interfaces'\r\n\r\nconst getToolbarSettings = ({\r\n direction,\r\n isWrapped,\r\n isMobile,\r\n theme,\r\n}: IToolbarContext): React.HTMLProps => {\r\n switch (isWrapped) {\r\n case true:\r\n return {\r\n className: classnames('shrink-0 items-center bg-white dark:bg-gray-800', {\r\n 'flex flex-wrap justify-between': direction === ToolbarDirection.vertical,\r\n 'grid border border-gray-100 dark:border-gray-600 p-1.5 gap-1 border-box rounded-md grid-cols-2':\r\n FinvizSettings.hasRedesignEnabled,\r\n }),\r\n }\r\n\r\n default:\r\n return {\r\n className: classnames('flex shrink-0 items-center bg-white dark:bg-gray-800', {\r\n 'p-1.5': !isMobile,\r\n 'space-x-1.5 px-1.5': direction === ToolbarDirection.horizontal && FinvizSettings.hasRedesignEnabled,\r\n 'flex-col overflow-hidden overflow-y-auto [--inset-l:0.5rem] landscape-primary:pl-inset-left':\r\n direction === ToolbarDirection.vertical,\r\n 'space-y-2': direction === ToolbarDirection.vertical && !isMobile,\r\n 'pb-inset-bottom [--inset-b:0.5rem]': theme !== ToolbarTheme.alternative && !isMobile,\r\n 'w-screen space-x-2 overflow-hidden overflow-x-auto':\r\n direction === ToolbarDirection.horizontal && theme !== ToolbarTheme.alternative,\r\n 'overflow-x-hidden': theme === ToolbarTheme.alternative,\r\n }),\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarProps {\r\n /**\r\n * Toolbar direction\r\n *\r\n * @default vertical\r\n */\r\n direction?: ToolbarDirectionType\r\n\r\n /**\r\n * Toolbar buttons theme\r\n *\r\n * @default light\r\n */\r\n theme?: ToolbarThemeType\r\n\r\n /**\r\n * Charts mobile design\r\n *\r\n * @default false\r\n */\r\n isMobile?: boolean\r\n\r\n className?: string\r\n}\r\n\r\nexport function Toolbar({\r\n direction = 'vertical',\r\n theme = 'chipTransparent',\r\n isMobile = false,\r\n children,\r\n className,\r\n}: React.PropsWithChildren) {\r\n const hasFocusRings = React.useRef(false)\r\n const toolbarRef = React.useRef(null)\r\n const contextProviderValue = React.useMemo(\r\n () => ({\r\n direction: ToolbarDirection[direction],\r\n theme: ToolbarTheme[theme],\r\n isWrapped:\r\n ToolbarDirection[direction] === ToolbarDirection.vertical && ToolbarTheme[theme] === ToolbarTheme.alternative,\r\n isStretched:\r\n ToolbarDirection[direction] === ToolbarDirection.horizontal && ToolbarTheme[theme] === ToolbarTheme.alternative,\r\n isMobile,\r\n }),\r\n [direction, theme, isMobile]\r\n )\r\n const toolbarSettings = getToolbarSettings(contextProviderValue)\r\n\r\n React.useLayoutEffect(() => {\r\n // Workaround for Safari scrollbar bug https://github.com/finvizhq/charts/issues/1038\r\n // Safari injects scrollbar after layout render and doesn't trigger reflow\r\n if (ToolbarTheme[theme] !== ToolbarTheme.alternative && isSafariDesktop()) {\r\n const forceReflow = throttle(() => {\r\n if (toolbarRef.current !== null) {\r\n const originalWidth = toolbarRef.current.style.width\r\n toolbarRef.current.style.width = '0'\r\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n toolbarRef.current.offsetWidth\r\n toolbarRef.current.style.width = originalWidth\r\n }\r\n }, 200)\r\n\r\n forceReflow()\r\n window.addEventListener('resize', forceReflow)\r\n\r\n return () => {\r\n window.removeEventListener('resize', forceReflow)\r\n }\r\n }\r\n }, [theme])\r\n\r\n return (\r\n \r\n \r\n {children}\r\n {\r\n hasFocusRings.current = !!document.querySelector('[data-focus-visible]')\r\n return true\r\n }}\r\n autoFocusOnHide={(el: HTMLElement) => {\r\n // Only call focus when we previously had focus rings to prevent sticky focus rings\r\n if (hasFocusRings.current) el.focus({ preventScroll: true })\r\n hasFocusRings.current = false\r\n return false\r\n }}\r\n />\r\n \r\n \r\n )\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, ButtonHTMLProps, ButtonProps } from '../button'\r\nimport { Delayed } from '../delayed'\r\nimport { Icon } from '../icon'\r\nimport { Spinner } from '../spinner'\r\nimport { PropsWithAs } from '../types'\r\nimport { useToolbarContext } from './hooks'\r\nimport { IToolbarItem, ToolbarTheme } from './interfaces'\r\n\r\nfunction getButtonThemeSettings({\r\n className,\r\n theme,\r\n isActive,\r\n isStretched,\r\n isInAction,\r\n}: {\r\n className: string\r\n theme: ToolbarTheme\r\n isStretched: boolean\r\n isActive?: boolean\r\n isInAction?: boolean\r\n}): Omit & ButtonProps {\r\n const includeRedesign = FinvizSettings.hasRedesignEnabled\r\n switch (theme) {\r\n case ToolbarTheme.alternative:\r\n return {\r\n className: classnames(\r\n className,\r\n {\r\n grow: isStretched,\r\n 'h-10 w-10': !isStretched && !includeRedesign,\r\n 'animate-pulse': isInAction,\r\n },\r\n\r\n !includeRedesign && {\r\n 'active:bg-white disabled:bg-white disabled:text-gray-300 disabled:hover:text-gray-300': true,\r\n 'border border-white text-gray-500 hover:border-gray-100 hover:text-gray-900': !isActive,\r\n 'border border-gray-900 text-gray-900': isActive,\r\n }\r\n ),\r\n theme: includeRedesign ? 'chipTransparent' : 'transparent',\r\n rounding: includeRedesign ? undefined : 'none',\r\n size: isStretched || includeRedesign ? undefined : 'none',\r\n }\r\n default:\r\n return {\r\n className: classnames(\r\n className,\r\n 'border dark:disabled:bg-gray-800 dark:disabled:text-gray-600 disabled:text-gray-300 disabled:bg-white dark:disabled:hover:bg-gray-800 dark:disabled:hover:text-gray-600 disabled:hover:text-gray-300 disabled:hover:bg-white',\r\n {\r\n 'animate-pulse': isInAction,\r\n 'border-transparent text-gray-500 hover:bg-gray-200/30 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-500/30 dark:hover:text-gray-200':\r\n !isActive,\r\n 'border-blue-400 bg-blue-50 text-gray-900 dark:bg-gray-700 dark:text-white': isActive,\r\n }\r\n ),\r\n theme: 'transparent',\r\n rounding: 'small',\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarButtonProps extends Omit {\r\n rowId?: number\r\n item: IToolbarItem\r\n disabledTooltip?: string\r\n isInAction?: boolean\r\n isLoading?: boolean\r\n}\r\n\r\nexport const ToolbarButton = React.forwardRef(function ToolbarButton(\r\n { item, disabledTooltip, isInAction: isInActionProp, isLoading, ...props }: PropsWithAs & ToolbarButtonProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const context = Ariakit.useMenuContext()\r\n const { theme, isStretched } = useToolbarContext()\r\n const isInAction = isInActionProp && item.iconAction !== undefined\r\n const buttonSettings = getButtonThemeSettings({\r\n className: props.className,\r\n theme,\r\n isStretched,\r\n isActive: props.active,\r\n isInAction: isInAction,\r\n })\r\n\r\n const getMainIcon = () => (\r\n \r\n )\r\n\r\n return (\r\n }\r\n store={context?.menubar || undefined}\r\n blurOnHoverEnd\r\n render={\r\n \r\n {isLoading ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n {props.children ??\r\n (isInAction ? (\r\n \r\n \r\n \r\n ) : (\r\n getMainIcon()\r\n ))}\r\n \r\n )}\r\n \r\n }\r\n />\r\n )\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 { isMobile } from '../../../app/shared/isMobile'\r\nimport { DropdownItem } from '../dropdown'\r\nimport { Icon } from '../icon'\r\nimport { NativeSelect } from '../select/NativeSelect'\r\nimport { useToolbarContext } from './hooks'\r\nimport { IToolbarItem, ToolbarTheme } from './interfaces'\r\nimport { ToolbarButton } from './toolbar-button'\r\n\r\nconst isMobileBrowser = isMobile()\r\n\r\nexport interface ToolbarGroupProps {\r\n /**\r\n * Main button item\r\n */\r\n defaultItem: IToolbarItem\r\n\r\n /**\r\n * Shows spinner instead of icon\r\n */\r\n isLoading?: boolean\r\n\r\n /**\r\n * Current selected item id\r\n */\r\n isActive: boolean\r\n\r\n /**\r\n * Should indicate some action in progress\r\n */\r\n isInAction?: boolean\r\n\r\n /**\r\n * Array of items\r\n */\r\n groupItems: IToolbarItem[]\r\n\r\n /**\r\n * Expand group button label\r\n */\r\n groupTitle?: string\r\n\r\n /**\r\n * On item select callback\r\n */\r\n onChange: (id: string, trigger: 'button' | 'select' | 'group') => void\r\n\r\n /**\r\n * Use native select for mobile devices\r\n *\r\n * @default true\r\n */\r\n useNativeSelect?: boolean\r\n\r\n /**\r\n * Is item disabled\r\n */\r\n disabled?: boolean\r\n\r\n /**\r\n * Tooltip message if item is disabled\r\n */\r\n disabledTooltip?: string\r\n\r\n rowId?: number\r\n}\r\n\r\nexport const ToolbarGroup = React.forwardRef(function ToolbarGroup(\r\n {\r\n defaultItem,\r\n isActive,\r\n isLoading,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect = isMobileBrowser,\r\n disabled,\r\n disabledTooltip,\r\n rowId,\r\n }: ToolbarGroupProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const { theme, isStretched } = useToolbarContext()\r\n const [selectedItem, setSelectedItem] = React.useState(defaultItem)\r\n const groupId = groupTitle?.replace(/\\s/g, '-').toLocaleLowerCase()\r\n const isAlternativeTheme = theme === ToolbarTheme.alternative\r\n\r\n // Setup states, pass Menubar context to this menu so we can control the shared menu\r\n const context = Ariakit.useMenuContext()\r\n const menu = Ariakit.useMenuStore({ store: context })\r\n\r\n // We have multiple menu triggers but just one shared menu so we need a way to know which button has been hovered\r\n const [menuButton, setMenuButton] = React.useState(null)\r\n const open = menu.useState((state) => state.mounted && state.anchorElement === menuButton)\r\n\r\n // Find the element to render the menu into using Portal\r\n const parentMenu = menu.useState('contentElement')\r\n const menuContentElement = React.useMemo(() => parentMenu?.querySelector('div'), [parentMenu])\r\n\r\n /**\r\n * Charts prevent bubling mouseover so we need to hide the menu manually\r\n */\r\n const hideMenu = menu.hide\r\n React.useEffect(() => {\r\n const onMouseLeave = () => hideMenu()\r\n\r\n parentMenu?.addEventListener('mouseleave', onMouseLeave)\r\n return () => parentMenu?.removeEventListener('mouseleave', onMouseLeave)\r\n }, [hideMenu, parentMenu])\r\n\r\n const showMenu = menu.show\r\n const handleMenuOpen = React.useCallback(\r\n (ev: React.SyntheticEvent) => {\r\n menu.setDisclosureElement(ev.currentTarget)\r\n menu.setAnchorElement(ev.currentTarget)\r\n showMenu()\r\n },\r\n [menu, showMenu]\r\n )\r\n\r\n const trigger = (\r\n \r\n \r\n \r\n \r\n )\r\n\r\n if (useNativeSelect) {\r\n return (\r\n \r\n {trigger}\r\n ({ value: item.id, label: item.title }))}\r\n onChange={(option) => {\r\n setSelectedItem(groupItems![groupItems!.findIndex((item) => item.id === option.value)])\r\n onChange(option.value, 'select')\r\n }}\r\n onClick={() => onChange(selectedItem.id, 'select')}\r\n />\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n ) => {\r\n // Preventing this means the dropdown will only open on hover not by a click\r\n ev.preventDefault()\r\n }}\r\n onPointerDown={(ev: React.PointerEvent) => {\r\n // Finally, pre-select the current group tool\r\n onChange(selectedItem.id, 'group')\r\n handleMenuOpen(ev)\r\n }}\r\n />\r\n {open && (\r\n // Render this menu's contents into the parent menu.\r\n }>\r\n {groupItems.map((item) => (\r\n }\r\n data-testid={`toolbar-group-${groupId}-${item.id}`}\r\n rounding={theme === ToolbarTheme.alternative && !FinvizSettings.hasRedesignEnabled ? 'none' : undefined}\r\n onPointerDown={() => {\r\n setSelectedItem(item)\r\n onChange(item.id, 'select')\r\n }}\r\n >\r\n {item.title}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n )\r\n})\r\n","import { PartialBy } from '../../types'\r\nimport { ToolbarButton } from './toolbar-button'\r\nimport { ToolbarGroup, ToolbarGroupProps } from './toolbar-group'\r\n\r\nexport function ToolbarItem({\r\n defaultItem,\r\n isLoading,\r\n isActive,\r\n isInAction,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect,\r\n disabled,\r\n disabledTooltip,\r\n rowId,\r\n}: PartialBy) {\r\n const isItemActive = isActive && !disabled\r\n\r\n if (!!groupItems?.length) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n {\r\n onChange(defaultItem.id, 'button')\r\n }}\r\n />\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { useToolbarContext } from './hooks'\r\nimport { ToolbarDirection, ToolbarTheme } from './interfaces'\r\n\r\ntype ToolbarDividerProps = {\r\n className?: string\r\n}\r\n\r\nexport function ToolbarDivider({ className }: ToolbarDividerProps) {\r\n const { direction, theme } = useToolbarContext()\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { Box } from '../box'\r\nimport { Heading, Paragraph } from '../typography'\r\nimport { TourStep } from './types'\r\n\r\nexport function StepContent({ step }: { step: TourStep }) {\r\n return (\r\n \r\n {step.title && (\r\n \r\n {step.title}\r\n \r\n )}\r\n {step.body && {step.body}}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as ReactDOM from 'react-dom/server'\r\nimport Shepherd from 'shepherd.js'\r\n\r\nimport {\r\n BUTTON_BASE_CLASS,\r\n BUTTON_FOCUS_STYLES,\r\n ButtonPadding,\r\n ButtonRounding,\r\n ButtonSize,\r\n ButtonTheme,\r\n getButtonTheme,\r\n} from '../button'\r\nimport { StepContent } from './step-content'\r\nimport { TourDefinition, TourStep } from './types'\r\n\r\ntype ExcludesFalse = (x: T | false) => x is T\r\n\r\n/**\r\n * Async load Shepherd module when we need it\r\n */\r\nlet shepherdLibrary: typeof Shepherd\r\nexport async function loadShepherdLibrary(setLoading: (state: boolean) => void) {\r\n if (shepherdLibrary) return shepherdLibrary\r\n\r\n try {\r\n setLoading(true)\r\n const shepherdPromise = await import('shepherd.js')\r\n shepherdLibrary = shepherdPromise.default\r\n setLoading(false)\r\n\r\n return shepherdLibrary\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Get buttons based on index in the step array\r\n */\r\nconst buttonClasses = classnames(BUTTON_BASE_CLASS, BUTTON_FOCUS_STYLES, ButtonSize.regular, ButtonRounding.regular)\r\nfunction getStepButtons(tour: Shepherd.Tour, step: TourStep, index: number, arr: TourStep[]) {\r\n return [\r\n {\r\n action: tour.complete,\r\n classes: classnames(buttonClasses, 'mr-auto', getButtonTheme(ButtonTheme.light).button, ButtonPadding.regular),\r\n text: 'Exit',\r\n },\r\n index > 0 && {\r\n action: tour.back,\r\n classes: classnames(buttonClasses, getButtonTheme(ButtonTheme.light).button, ButtonPadding.regular),\r\n text: step.backButton ?? 'Back',\r\n },\r\n {\r\n classes: classnames(buttonClasses, getButtonTheme(ButtonTheme.blue).button, ButtonPadding.regular),\r\n action: tour.next,\r\n text: step.nextButton ?? (index === arr.length - 1 ? 'Finish' : 'Next'),\r\n },\r\n ].filter(Boolean as unknown as ExcludesFalse)\r\n}\r\n\r\n/**\r\n * Convert tour steps to Shepherd steps\r\n */\r\nexport function processSteps(tour: Shepherd.Tour, steps: TourStep[]): Shepherd.Step.StepOptions[] {\r\n return steps.map((step, index) => ({\r\n attachTo: { element: step.target, on: step.placement ?? 'auto' },\r\n classes: 'z-dialog',\r\n // Add offset\r\n popperOptions: {\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset: step.offset ?? [0, 10],\r\n },\r\n },\r\n ],\r\n },\r\n // Render the body\r\n text: ReactDOM.renderToString(React.createElement(StepContent, { step })),\r\n // Add buttons\r\n buttons: getStepButtons(tour, step, index, steps),\r\n modalOverlayOpeningRadius: step.overlayRadius ?? 8,\r\n modalOverlayOpeningPadding: step.overlayPadding ?? 0,\r\n }))\r\n}\r\n\r\nexport function getTourKey() {\r\n return `tour${window.location.pathname.replace(/[/.]/g, '-')}`\r\n}\r\n\r\nexport function getStepsForUser(tours: TourDefinition[]) {\r\n const lastFinishedTour = localStorage?.getItem(getTourKey())\r\n const lastTourIndex = tours.findIndex((tour) => tour.id === lastFinishedTour)\r\n const allToursViewed = lastTourIndex === tours.length - 1 || tours.slice(lastTourIndex + 1).every((item) => item.skip)\r\n const toursToView = allToursViewed ? tours : tours.slice(lastTourIndex + 1)\r\n const userTour = toursToView.reduce(\r\n (acc, current) =>\r\n current.skip\r\n ? acc\r\n : {\r\n ...acc,\r\n id: current.id,\r\n steps: [...acc.steps, ...current.steps],\r\n },\r\n { id: 'tour', steps: [], initialTour: toursToView[0].id }\r\n )\r\n\r\n return { hasNewTours: !allToursViewed, tour: userTour }\r\n}\r\n\r\nexport function completeTour(key: string) {\r\n localStorage?.setItem(getTourKey(), key)\r\n}\r\n","import * as React from 'react'\r\nimport Shepherd from 'shepherd.js'\r\n\r\nimport { TourDefinition } from './types'\r\nimport * as tourUtils from './utils'\r\n\r\nexport const DEFAULT_OPTIONS = {\r\n exitOnEsc: true,\r\n useModalOverlay: true,\r\n}\r\n\r\n/**\r\n * Hook which controls shepherd.js. The library is lazy-loaded when the tour starts\r\n *\r\n * Returns:\r\n * - `isLoading`: state of the library loading\r\n * - `currentTour`: tour object, only defined after library has loaded\r\n * - `startTour`: load the library and start tour. Returns `currentTour`\r\n * - `getStepsForUser`: returns a list of tour steps based on tours the user finished\r\n * - `completeTour`: persists the last finished tour to local storage\r\n */\r\nexport function useTour(options?: Shepherd.Tour.TourOptions) {\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [currentTour, setTour] = React.useState(null)\r\n\r\n /**\r\n * We’re loading shepherd asynchronously and want to have loading state so we use\r\n * AbortController to check if the component is still mounted.\r\n */\r\n const controller = React.useRef('AbortController' in window ? new AbortController() : undefined)\r\n const loadingSetter = React.useRef((state: boolean) => {\r\n if (controller.current?.signal.aborted) return\r\n\r\n setIsLoading(state)\r\n })\r\n // Cleanup effect to abort the controller\r\n React.useEffect(() => () => controller.current?.abort(), [])\r\n\r\n const startTour = React.useCallback(\r\n async (definition: TourDefinition, setComplete = true) => {\r\n const shepherdLibrary = await tourUtils.loadShepherdLibrary(loadingSetter.current)\r\n\r\n if (shepherdLibrary && !controller.current?.signal.aborted) {\r\n const tour = currentTour ?? new shepherdLibrary.Tour({ ...DEFAULT_OPTIONS, ...options })\r\n\r\n if (!currentTour) setTour(tour)\r\n\r\n // Reset the tour steps in case they were updated\r\n Array.from(tour.steps).forEach((step) => tour.removeStep(step.id))\r\n\r\n const processedSteps = tourUtils.processSteps(tour, definition.steps)\r\n tour.addSteps(processedSteps)\r\n\r\n if (setComplete) {\r\n tourUtils.completeTour(definition.id)\r\n }\r\n\r\n tour.start()\r\n window.gtag?.('event', 'tour-start', { event_label: definition.initialTour ?? definition.id })\r\n\r\n return tour\r\n }\r\n },\r\n [currentTour, options]\r\n )\r\n\r\n return {\r\n isLoading,\r\n currentTour,\r\n startTour,\r\n getStepsForUser: tourUtils.getStepsForUser,\r\n completeTour: tourUtils.completeTour,\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-duplicate-enum-values */\r\nimport * as Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { BUTTON_DEFAULT_ELEMENT, Button, ButtonComponentProps } from '../button'\r\nimport { Icon, IconNameType, isValidIconName } from '../icon'\r\n\r\n// Must have the same keys as ButtonSize\r\nexport enum TabSpacing {\r\n xxsmall = 'space-x-0.5', // 2px spacing\r\n xsmall = 'space-x-1', // 4px spacing\r\n none = 'space-x-1.5', // 6px spacing\r\n small = 'space-x-1.5', // 6px spacing\r\n regular = 'space-x-1.5', // 6px spacing\r\n medium = 'space-x-2', // 8px spacing\r\n large = 'space-x-2', // 8px spacing\r\n}\r\n\r\nfunction getRightContent(content: JSX.Element | IconNameType | undefined, isActive: boolean) {\r\n if (isValidIconName(content)) return \r\n else if (React.isValidElement(content))\r\n return React.cloneElement(content as React.ReactElement<{ active: boolean }>, {\r\n active: isActive,\r\n })\r\n else return content\r\n}\r\n\r\nconst InternalTab = React.forwardRef(function InternalTab<\r\n TagType extends React.ElementType = typeof BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n {\r\n rounding = 'none',\r\n theme = 'tab',\r\n size = 'medium',\r\n 'aria-selected': ariaSelected,\r\n children,\r\n ...props\r\n }: Omit, 'theme'>,\r\n ref: React.ForwardedRef\r\n) {\r\n const spacing = TabSpacing[size]\r\n const active = Boolean(ariaSelected)\r\n const rightContent = getRightContent(props.rightContent, active)\r\n\r\n return (\r\n )}\r\n ref={ref}\r\n active={active}\r\n theme={theme}\r\n size={size}\r\n rounding={rounding}\r\n rightContent={undefined}\r\n className={classNames('group/badge', props.className)}\r\n contentClass={classNames(spacing, 'flex', props.contentClass)}\r\n >\r\n {children}\r\n {rightContent}\r\n \r\n )\r\n})\r\n\r\nexport function Tab(\r\n props: React.PropsWithChildren>\r\n) {\r\n return } />\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\n\r\nexport function TabList(props: Ariakit.TabListProps) {\r\n return (\r\n \r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport React from 'react'\r\n\r\nexport function TabPanel(props: Ariakit.TabPanelProps) {\r\n return \r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport React from 'react'\r\n\r\nexport function Tabs({ children }: React.PropsWithChildren) {\r\n return (\r\n \r\n
{children}
\r\n
\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nenum BadgeSize {\r\n small = 'h-4 min-w-4', // 16px height\r\n medium = 'h-5 min-w-5', // 20px height\r\n}\r\ntype BadgeSizeType = keyof typeof BadgeSize\r\n\r\nenum BadgePadding {\r\n small = 'px-[5px] py-0', // 16px height\r\n medium = 'px-1.5 py-0.5', // 20px height\r\n}\r\ntype BadgePaddingType = keyof typeof BadgePadding\r\n\r\ntype BadgeProps = {\r\n size?: BadgeSizeType\r\n padding?: BadgePaddingType\r\n active?: boolean\r\n}\r\n\r\nexport function Badge({ size = 'medium', padding = size, active, children }: React.PropsWithChildren) {\r\n const badgePadding = BadgePadding[padding]\r\n const badgeSize = BadgeSize[size]\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\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 Ariakit from '@ariakit/react'\r\nimport * as React from 'react'\r\n\r\nimport { Input, InputComponentProps } from './input'\r\nimport { Tooltip, TooltipColor, TooltipProps, TooltipTrigger } from './tooltip'\r\n\r\ninterface TooltipSettingsProps\r\n extends Pick,\r\n Pick {\r\n color?: keyof typeof TooltipColor\r\n}\r\n\r\ninterface TooltipInputProps extends InputComponentProps {\r\n /**\r\n * Optimization to turn off the tooltip functionality if the input isn’t visible on screen\r\n *\r\n * @default true\r\n */\r\n isInteractive?: boolean\r\n\r\n /**\r\n * Settings for Tooltip component and useTooltipStore\r\n */\r\n tooltipSettings?: TooltipSettingsProps\r\n}\r\n\r\nfunction TooltipInputComponent(\r\n { tooltipSettings, isInteractive = true, name, children, ...props }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const { color, gutter, placement = 'bottom', isPointerEventsEnabled } = tooltipSettings ?? {}\r\n\r\n const input = \r\n\r\n if (!isInteractive || !children) {\r\n return input\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n )\r\n}\r\n\r\nexport const TooltipInput = React.forwardRef(TooltipInputComponent)\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","/**\n * React Router DOM v6.26.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nexport { UNSAFE_ErrorResponseImpl } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && (\n // Ignore everything but left clicks\n !target || target === \"_self\") &&\n // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0);\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `
`/`` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\"Cannot submit a