{"version":3,"file":"screener.3f1ea4c7.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/screener/filter-modal/compare-indicators/types.ts","webpack://@finviz/website/./js/app/screener/filter-modal/compare-indicators/constants.ts","webpack://@finviz/website/./js/app/screener/filter-modal/compare-indicators/compare-condition.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/compare-indicators/compare-source.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/compare-indicators/compare-target.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/compare-indicators/parse-json-util.ts","webpack://@finviz/website/./js/app/screener/filter-modal/compare-indicators/utils.ts","webpack://@finviz/website/./js/app/screener/filter-modal/compare-indicators/compare-indicators-component.tsx","webpack://@finviz/website/./js/app/screener/filter-modal/compare-indicators/select-source.tsx","webpack://@finviz/website/./js/app/screener/add-filter.tsx","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/filter-dialog-root.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/tag.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 { type TIMEFRAMES } from './constants'\r\nimport { IndicatorCalcValKey, IndicatorKey, IndicatorOptionKey } from './parse-json-util'\r\n\r\nexport enum InstrumentType {\r\n indicators = 'indicators',\r\n overlays = 'overlays',\r\n other = 'other',\r\n value = 'value',\r\n}\r\n\r\nexport enum IndicatorLabel {\r\n aro = 'AROON',\r\n bb = 'BB', //'Bollinger Bands',\r\n ema = 'EMA', //'Exponential Moving Avarage',\r\n fi = 'FI', //'Force Index',\r\n macd = 'MACD',\r\n price = 'Price',\r\n rsi = 'RSI', //'Relative Strength Index',\r\n sma = 'SMA', //'Simple Moving Avarage',\r\n trix = 'TRIX',\r\n vwap = 'VWAP',\r\n value = 'Value',\r\n}\r\n\r\nexport enum IndicatorCalculatedValueLabel {\r\n aroonUp = 'Aroon Up',\r\n aroonDown = 'Aroon Down',\r\n oscillator = 'Oscillator',\r\n fi = 'Force Index',\r\n macd = 'MACD',\r\n signal = 'Signal',\r\n histogram = 'Histogram',\r\n trix = 'TRIX',\r\n rsi = 'Relative Strength Index',\r\n sma = 'Simple Moving Avarage',\r\n stdDev = 'Standard Deviation',\r\n upperBand = 'Upper Band',\r\n lowerBand = 'Lower Band',\r\n ema = 'Exponential Moving Avarage',\r\n vwap = 'VWAP',\r\n open = 'Open',\r\n high = 'High',\r\n low = 'Low',\r\n close = 'Close',\r\n value = 'Value',\r\n}\r\n\r\nexport enum IndicatorOptionLabel {\r\n period = 'Period',\r\n deviations = 'Deviations',\r\n fastPeriod = 'Fast Period',\r\n signalPeriod = 'Signal Period',\r\n slowPeriod = 'Slow Period',\r\n}\r\n\r\nexport interface IIndicator {\r\n indicator: IndicatorKey\r\n indicatorPreset: IndicatorOptionKey\r\n indicatorCalcVal: IndicatorCalcValKey\r\n timeframe: ReturnType[number]['value']\r\n}\r\n\r\nexport interface IIndicators {\r\n indicators: IIndicator[]\r\n overlays: IIndicator[]\r\n other: IIndicator[]\r\n}\r\n\r\nexport type CompareTargetComponentValueType = {\r\n indicator: IIndicator['indicator']\r\n indicatorPreset: IIndicator['indicatorPreset']\r\n indicatorCalcVal: IIndicator['indicatorCalcVal']\r\n value: number | null\r\n timeframe: ReturnType[number]['value'] | null\r\n}\r\n\r\nexport type CompareTargetValueType = {\r\n indicator: IIndicator['indicator'] | null\r\n indicatorPreset: IIndicator['indicatorPreset'] | null\r\n indicatorCalcVal: IIndicator['indicatorCalcVal'] | null\r\n value: number | null\r\n timeframe: ReturnType[number]['value'] | null\r\n}\r\n\r\nexport enum EXTRADAY_TIMEFRAMES {\r\n d = 'd',\r\n w = 'w',\r\n m = 'm',\r\n}\r\n\r\nexport enum INTRADAY_TIMEFRAMES {\r\n i1 = 'i1',\r\n i2 = 'i2',\r\n i3 = 'i3',\r\n i5 = 'i5',\r\n i10 = 'i10',\r\n i15 = 'i15',\r\n i30 = 'i30',\r\n h = 'h',\r\n h2 = 'h2',\r\n h4 = 'h4',\r\n}\r\n\r\nexport enum INTRADAY_FREE_TIMEFRAME {\r\n intraday = 'intraday',\r\n}\r\n\r\nexport type TimeframesType = EXTRADAY_TIMEFRAMES | INTRADAY_TIMEFRAMES | INTRADAY_FREE_TIMEFRAME\r\n","import {\r\n type CompareTargetValueType,\r\n EXTRADAY_TIMEFRAMES,\r\n type IIndicator,\r\n INTRADAY_FREE_TIMEFRAME,\r\n INTRADAY_TIMEFRAMES,\r\n} from './types'\r\n\r\nexport const TIMEFRAMES = (isPremium: boolean) => [\r\n ...(isPremium\r\n ? [\r\n { value: INTRADAY_TIMEFRAMES.i1, label: '1 Minute' },\r\n { value: INTRADAY_TIMEFRAMES.i2, label: '2 Minutes' },\r\n { value: INTRADAY_TIMEFRAMES.i3, label: '3 Minutes' },\r\n { value: INTRADAY_TIMEFRAMES.i5, label: '5 Minutes' },\r\n { value: INTRADAY_TIMEFRAMES.i10, label: '10 Minutes' },\r\n { value: INTRADAY_TIMEFRAMES.i15, label: '15 Minutes' },\r\n { value: INTRADAY_TIMEFRAMES.i30, label: '30 Minutes' },\r\n { value: INTRADAY_TIMEFRAMES.h, label: '1 Hour' },\r\n { value: INTRADAY_TIMEFRAMES.h2, label: '2 Hours' },\r\n { value: INTRADAY_TIMEFRAMES.h4, label: '4 Hours' },\r\n ]\r\n : [\r\n {\r\n value: INTRADAY_FREE_TIMEFRAME.intraday,\r\n label: 'Intraday',\r\n subtitle: 'FINVIZ*Elite only',\r\n href: `/elite.ashx?utm_source=finviz&utm_medium=banner&utm_campaign=screener-${TECHNICAL_EXTRA_FILTER_PREFIX}-intraday`,\r\n },\r\n ]),\r\n { value: EXTRADAY_TIMEFRAMES.d, label: '1 Day' },\r\n { value: EXTRADAY_TIMEFRAMES.w, label: '1 Week' },\r\n { value: EXTRADAY_TIMEFRAMES.m, label: '1 Month' },\r\n]\r\n\r\nexport const PARAMS_DELIMITER = '|'\r\nexport const VALUE_DELIMITER = ':'\r\nexport const PRESET_VALUES_DELIMITER = ' '\r\n\r\nexport const TECHNICAL_EXTRA_FILTER_PREFIX = 'taxi'\r\n\r\nexport const DEFAULT_SOURCE: IIndicator = {\r\n indicator: 'sma',\r\n indicatorPreset: '20',\r\n indicatorCalcVal: 'sma',\r\n timeframe: EXTRADAY_TIMEFRAMES.d,\r\n}\r\n\r\nexport const EMPTY_TARGET: CompareTargetValueType = {\r\n indicator: null,\r\n indicatorPreset: null,\r\n indicatorCalcVal: null,\r\n timeframe: null,\r\n value: null,\r\n}\r\n\r\nexport const DEFAULT_TARGET: CompareTargetValueType = {\r\n ...EMPTY_TARGET,\r\n indicator: 'value',\r\n indicatorPreset: undefined,\r\n indicatorCalcVal: 'value',\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { IconNameType, Select, TooltipInput } from '../../../../main/components'\r\nimport { ChangeType } from './compare-indicators-component'\r\n\r\nexport enum CompareCondition {\r\n above = 'abv',\r\n aboveEqual = 'abveq',\r\n below = 'blw',\r\n belowEqual = 'blweq',\r\n crosses = 'cro',\r\n crossesUp = 'croup',\r\n crossesDown = 'crodwn',\r\n between = 'btwn',\r\n outside = 'out',\r\n equal = 'eq',\r\n abovePercent = 'abvpct',\r\n belowPercent = 'blwpct',\r\n}\r\n\r\nconst COMPARE_CONDITIONS: { value: CompareCondition; label: string; icon?: IconNameType }[] = [\r\n { value: CompareCondition.above, label: 'Above', icon: 'above' },\r\n { value: CompareCondition.aboveEqual, label: 'Above or Equal', icon: 'aboveEqual' },\r\n { value: CompareCondition.below, label: 'Below', icon: 'below' },\r\n { value: CompareCondition.belowEqual, label: 'Below or Equal', icon: 'belowEqual' },\r\n { value: CompareCondition.crosses, label: 'Crosses', icon: 'crosses' },\r\n { value: CompareCondition.crossesUp, label: 'Crosses Up', icon: 'crossesUp' },\r\n { value: CompareCondition.crossesDown, label: 'Crosses Down', icon: 'crossesDown' },\r\n { value: CompareCondition.between, label: 'Between', icon: 'between' },\r\n { value: CompareCondition.outside, label: 'Outside', icon: 'outside' },\r\n { value: CompareCondition.equal, label: 'Equal', icon: 'equal' },\r\n { value: CompareCondition.abovePercent, label: 'Above %', icon: 'abovePercent' },\r\n { value: CompareCondition.belowPercent, label: 'Below %', icon: 'belowPercent' },\r\n]\r\n\r\nenum CompareConditionSettings {\r\n condition,\r\n rangeFrom,\r\n rangeTo,\r\n}\r\n\r\nexport interface ICompareCondition {\r\n condition: CompareCondition\r\n rangeFrom: null | number\r\n rangeTo: null | number\r\n}\r\n\r\nexport const DEFAULT_CONDITION: ICompareCondition = {\r\n condition: CompareCondition.aboveEqual,\r\n rangeFrom: null,\r\n rangeTo: null,\r\n}\r\n\r\nfunction getHasConditionRangeInput(value: CompareCondition) {\r\n return [\r\n CompareCondition.abovePercent,\r\n CompareCondition.belowPercent,\r\n CompareCondition.between,\r\n CompareCondition.outside,\r\n ].includes(value)\r\n}\r\n\r\nexport function CompareComponent({\r\n handleSelect,\r\n selected,\r\n error,\r\n}: {\r\n handleSelect: (args: { type: ChangeType; value: ICompareCondition }) => void\r\n selected: ICompareCondition\r\n error?: boolean\r\n}) {\r\n const handleCompareConditionSettingsChange = (settingType: CompareConditionSettings, value: string) => {\r\n const newValue = { ...selected }\r\n\r\n if (settingType === CompareConditionSettings.condition) {\r\n newValue.condition = value as CompareCondition\r\n if (!getHasConditionRangeInput(newValue.condition)) {\r\n newValue.rangeFrom = null\r\n newValue.rangeTo = null\r\n }\r\n }\r\n\r\n if (settingType === CompareConditionSettings.rangeFrom) {\r\n newValue.rangeFrom = !value ? null : parseFloat(value)\r\n }\r\n\r\n if (settingType === CompareConditionSettings.rangeTo) {\r\n newValue.rangeTo = !value ? null : parseFloat(value)\r\n }\r\n\r\n handleSelect({ type: ChangeType.compareCondition, value: newValue })\r\n }\r\n\r\n return (\r\n <>\r\n item.value === selected.condition)?.icon}\r\n onChange={(item) => handleCompareConditionSettingsChange(CompareConditionSettings.condition, item.value)}\r\n />\r\n {getHasConditionRangeInput(selected.condition) && (\r\n <>\r\n {\r\n handleCompareConditionSettingsChange(CompareConditionSettings.rangeFrom, e.currentTarget.value)\r\n }}\r\n error={error}\r\n className={classNames('w-20', { 'is-error': error })}\r\n tooltipSettings={{ color: 'red' }}\r\n autoFocus={error}\r\n >\r\n {error && 'At least one value must be set.'}\r\n \r\n -\r\n {\r\n handleCompareConditionSettingsChange(CompareConditionSettings.rangeTo, e.currentTarget.value)\r\n }}\r\n error={error}\r\n className={classNames('w-20', { 'is-error': error })}\r\n tooltipSettings={{ color: 'red' }}\r\n autoFocus={error}\r\n >\r\n {error && 'At least one value must be set.'}\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 { ChangeType } from './compare-indicators-component'\r\nimport { TIMEFRAMES } from './constants'\r\nimport {\r\n IndicatorCalcValKey,\r\n IndicatorCalcValsType,\r\n IndicatorDefaultCalcValsType,\r\n IndicatorKey,\r\n IndicatorOptionKey,\r\n IndicatorOptionsType,\r\n IndicatorsType,\r\n} from './parse-json-util'\r\nimport { IIndicator, TimeframesType } from './types'\r\n\r\ninterface ICompareSourceProps {\r\n data: {\r\n indicators: IndicatorsType\r\n indicatorsOptions: IndicatorOptionsType\r\n indicatorsCalcVals: IndicatorCalcValsType\r\n defaultCalculatedValues: IndicatorDefaultCalcValsType\r\n }\r\n handleSelect: (args: { type: ChangeType; value: IIndicator }) => void\r\n selected: IIndicator\r\n}\r\n\r\nexport function CompareSource({ data, handleSelect, selected }: ICompareSourceProps) {\r\n const handleIndicatorSettingsChange = (settingType: string, value: string) => {\r\n const newValue = { ...selected }\r\n\r\n if (settingType === 'indicator') {\r\n newValue.indicator = value as IndicatorKey\r\n }\r\n\r\n if (settingType === 'indicatorPreset') {\r\n newValue.indicatorPreset = value as IndicatorOptionKey\r\n } else if (!data.indicatorsOptions[newValue.indicator].some((item) => item.value === newValue.indicatorPreset)) {\r\n newValue.indicatorPreset = data.indicatorsOptions[newValue.indicator][0]?.value\r\n }\r\n\r\n if (settingType === 'indicatorCalcVal') {\r\n newValue.indicatorCalcVal = value as IndicatorCalcValKey\r\n } else if (!data.indicatorsCalcVals[newValue.indicator].some((item) => item.value === newValue.indicatorCalcVal)) {\r\n newValue.indicatorCalcVal = data.defaultCalculatedValues[newValue.indicator]\r\n }\r\n\r\n if (settingType === 'timeframe') {\r\n newValue.timeframe = value as TimeframesType\r\n }\r\n\r\n handleSelect({ type: ChangeType.compareSource, value: newValue })\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n handleIndicatorSettingsChange('indicator', item.value)\r\n }}\r\n />\r\n {data.indicatorsOptions[selected.indicator].length > 0 && selected.indicatorPreset !== undefined && (\r\n {\r\n handleIndicatorSettingsChange('indicatorPreset', item.value)\r\n }}\r\n />\r\n )}\r\n {data.indicatorsCalcVals[selected.indicator].length > 1 && (\r\n {\r\n handleIndicatorSettingsChange('indicatorCalcVal', item.value)\r\n }}\r\n />\r\n )}\r\n {\r\n handleIndicatorSettingsChange('timeframe', item.value)\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 { Select, TooltipInput } from '../../../../main/components'\r\nimport { ChangeType } from './compare-indicators-component'\r\nimport { TIMEFRAMES } from './constants'\r\nimport {\r\n IndicatorCalcValKey,\r\n IndicatorCalcValsType,\r\n IndicatorDefaultCalcValsType,\r\n IndicatorKey,\r\n IndicatorOptionKey,\r\n IndicatorOptionsType,\r\n IndicatorsType,\r\n} from './parse-json-util'\r\nimport { CompareTargetComponentValueType, EXTRADAY_TIMEFRAMES, TimeframesType } from './types'\r\n\r\ninterface ICompareTargetProps {\r\n data: {\r\n indicators: IndicatorsType\r\n indicatorsOptions: IndicatorOptionsType\r\n indicatorsCalcVals: IndicatorCalcValsType\r\n defaultCalculatedValues: IndicatorDefaultCalcValsType\r\n }\r\n handleSelect: (args: { type: ChangeType; value: CompareTargetComponentValueType }) => void\r\n selected: CompareTargetComponentValueType\r\n error?: boolean\r\n}\r\n\r\nexport function CompareTarget({ data, handleSelect, selected, error }: ICompareTargetProps) {\r\n const handleTargetSettingsChange = (settingType: string, value: string) => {\r\n const newValue = { ...selected }\r\n\r\n if (settingType === 'indicator') {\r\n newValue.indicator = value as IndicatorKey\r\n }\r\n\r\n if (settingType === 'indicatorPreset') {\r\n newValue.indicatorPreset = value as IndicatorOptionKey\r\n } else if (!data.indicatorsOptions[newValue.indicator]?.some((item) => item.value === newValue.indicatorPreset)) {\r\n newValue.indicatorPreset = data.indicatorsOptions[newValue.indicator][0]?.value\r\n }\r\n\r\n if (settingType === 'indicatorCalcVal') {\r\n newValue.indicatorCalcVal = value as IndicatorCalcValKey\r\n } else if (!data.indicatorsCalcVals[newValue.indicator]?.some((item) => item.value === newValue.indicatorCalcVal)) {\r\n newValue.indicatorCalcVal = data.defaultCalculatedValues[newValue.indicator]\r\n }\r\n\r\n if (settingType === 'timeframe') {\r\n newValue.timeframe = value as TimeframesType\r\n } else if (newValue.indicator !== 'value' && !newValue.timeframe) {\r\n newValue.timeframe = EXTRADAY_TIMEFRAMES.d\r\n } else if (newValue.indicator === 'value') {\r\n newValue.timeframe = null\r\n }\r\n\r\n if (settingType === 'value') {\r\n newValue.value = !value ? null : parseFloat(value)\r\n } else if (newValue.indicator !== 'value') {\r\n newValue.value = null\r\n }\r\n\r\n handleSelect({ type: ChangeType.compareTarget, value: newValue })\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n handleTargetSettingsChange('indicator', item.value)\r\n }}\r\n />\r\n {data.indicatorsOptions[selected.indicator].length > 0 && selected.indicatorPreset !== undefined && (\r\n {\r\n handleTargetSettingsChange('indicatorPreset', item.value)\r\n }}\r\n />\r\n )}\r\n {data.indicatorsCalcVals[selected.indicator].length > 1 && (\r\n {\r\n handleTargetSettingsChange('indicatorCalcVal', item.value)\r\n }}\r\n />\r\n )}\r\n {selected.indicator !== 'value' ? (\r\n {\r\n handleTargetSettingsChange('timeframe', item.value)\r\n }}\r\n />\r\n ) : (\r\n {\r\n handleTargetSettingsChange('value', e.currentTarget.value)\r\n }}\r\n error={error}\r\n className={classNames('w-20', { 'is-error': error })}\r\n tooltipSettings={{ color: 'red' }}\r\n autoFocus={error}\r\n >\r\n {error ? 'Value must be a number' : undefined}\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import { PRESET_VALUES_DELIMITER } from './constants'\r\nimport config from './precalculate-indicators.json'\r\nimport { IndicatorLabel, InstrumentType } from './types'\r\n\r\nconst availableIndicators = Object.keys(config).map((key) => ({\r\n id: key as InstrumentType,\r\n label: key[0].toUpperCase() + key.slice(1),\r\n items: config[key as keyof typeof config].map((indicator) => {\r\n const name = indicator.name\r\n return { value: name, label: IndicatorLabel[name] }\r\n }),\r\n}))\r\n\r\nconst indicatorOptions = Object.fromEntries(\r\n (Object.values(config) as Array<(typeof config)[keyof typeof config]>).flatMap((arr) =>\r\n arr.map((indicator) => [\r\n indicator.name,\r\n indicator.optionSets.map((optSet) => ({\r\n value: optSet.map((item) => item).join(PRESET_VALUES_DELIMITER),\r\n label: optSet.map((item) => item).join(', '),\r\n })),\r\n ])\r\n )\r\n)\r\n\r\nconst indicatorCalculatedValues = Object.fromEntries(\r\n (Object.values(config) as Array<(typeof config)[keyof typeof config]>).flatMap((arr) =>\r\n arr.map((indicator) => [\r\n indicator.name,\r\n indicator.calculatedValues.map((calcVal) => ({\r\n value: calcVal.toLowerCase(),\r\n label: indicator.calculatedValuesLabels[calcVal],\r\n })),\r\n ])\r\n )\r\n)\r\n\r\nconst defaultCalculatedValues = Object.fromEntries(\r\n (Object.values(config) as Array<(typeof config)[keyof typeof config]>).flatMap((arr) =>\r\n arr.map((indicator) => [indicator.name, indicator.defaultCalculatedValueOption.toLowerCase()])\r\n )\r\n)\r\n\r\nexport const INDICATORS_CONFIG = Object.freeze({\r\n availableIndicators,\r\n indicatorOptions,\r\n indicatorCalculatedValues,\r\n defaultCalculatedValues,\r\n})\r\n\r\nexport type IndicatorsType = typeof availableIndicators\r\nexport type IndicatorOptionsType = typeof indicatorOptions\r\nexport type IndicatorCalcValsType = typeof indicatorCalculatedValues\r\nexport type IndicatorDefaultCalcValsType = typeof defaultCalculatedValues\r\n\r\nexport type IndicatorKey = IndicatorsType[number]['items'][number]['value']\r\nexport type IndicatorOptionKey = IndicatorOptionsType[string][number]['value'] | undefined | null\r\nexport type IndicatorCalcValKey = IndicatorCalcValsType[string][number]['value']\r\n","import { ConfigType } from '../types'\r\nimport { CompareCondition, DEFAULT_CONDITION, ICompareCondition } from './compare-condition'\r\nimport { DEFAULT_SOURCE, DEFAULT_TARGET, PARAMS_DELIMITER, VALUE_DELIMITER } from './constants'\r\nimport { INDICATORS_CONFIG } from './parse-json-util'\r\nimport { CompareTargetValueType, IIndicator, InstrumentType, TimeframesType } from './types'\r\n\r\nconst indicatorOptions = INDICATORS_CONFIG.availableIndicators.filter(({ id }) => id === InstrumentType.indicators)\r\nconst valueOptions = INDICATORS_CONFIG.availableIndicators.filter(({ id }) => id === InstrumentType.value)\r\nconst nonIndicatorOptions = INDICATORS_CONFIG.availableIndicators.filter(({ id }) => id !== InstrumentType.indicators)\r\n\r\nexport function getSecondaryIndicatorOptions(val: IIndicator) {\r\n const isCompareSourceIndicator = indicatorOptions[0].items.some((item) => item.value === val.indicator)\r\n let indicators\r\n\r\n if (isCompareSourceIndicator) {\r\n indicatorOptions[0].items = indicatorOptions[0].items.filter(({ value }) => value === val.indicator)\r\n indicators = [...valueOptions, ...indicatorOptions]\r\n } else {\r\n indicators = nonIndicatorOptions\r\n }\r\n return {\r\n indicators,\r\n indicatorsOptions: INDICATORS_CONFIG.indicatorOptions,\r\n indicatorsCalcVals: INDICATORS_CONFIG.indicatorCalculatedValues,\r\n defaultCalculatedValues: INDICATORS_CONFIG.defaultCalculatedValues,\r\n }\r\n}\r\n\r\nexport function getDefaultSelectedSource(config: ConfigType) {\r\n const compareSource = config.selectedValues[0]?.split(VALUE_DELIMITER)\r\n\r\n if (compareSource && compareSource.length === 4) {\r\n return {\r\n indicator: compareSource[0].toLowerCase() as IIndicator['indicator'],\r\n indicatorPreset: compareSource[1],\r\n indicatorCalcVal: compareSource[2].toLowerCase() as IIndicator['indicatorCalcVal'],\r\n timeframe: compareSource[3] as TimeframesType,\r\n }\r\n }\r\n\r\n return DEFAULT_SOURCE\r\n}\r\n\r\nexport function getDefaultSelectedCondition(config: ConfigType) {\r\n const compareCondition = config.selectedValues[1]?.split(VALUE_DELIMITER)\r\n const compareTarget = config.selectedValues[2]?.split(VALUE_DELIMITER)\r\n if (\r\n config.selectedValues?.length === 3 &&\r\n compareCondition &&\r\n compareTarget &&\r\n compareCondition.length === 3 &&\r\n compareTarget.length === 4\r\n ) {\r\n return {\r\n condition: compareCondition[0] as ICompareCondition['condition'],\r\n rangeFrom: compareCondition[1] !== '' ? parseFloat(compareCondition[1]) : null,\r\n rangeTo: compareCondition[2] !== '' ? parseFloat(compareCondition[2]) : null,\r\n }\r\n }\r\n\r\n return DEFAULT_CONDITION\r\n}\r\n\r\nexport function getDefaultSelectedTarget(config: ConfigType) {\r\n const compareCondition = config.selectedValues[1]?.split(VALUE_DELIMITER)\r\n const compareTarget = config.selectedValues[2]?.split(VALUE_DELIMITER)\r\n if (config.selectedValues?.length === 3 && compareCondition?.length === 3 && compareTarget?.length >= 4) {\r\n const [targetType, targetPreset, targetCalcVal, timeframeOrValue] = compareTarget\r\n const numberValue = parseFloat(timeframeOrValue)\r\n\r\n return {\r\n indicator: (targetType !== '' ? targetType.toLowerCase() : null) as CompareTargetValueType['indicator'],\r\n indicatorPreset: targetPreset !== '' ? targetPreset : null,\r\n indicatorCalcVal: (targetCalcVal !== ''\r\n ? targetCalcVal.toLowerCase()\r\n : null) as CompareTargetValueType['indicatorCalcVal'],\r\n timeframe: targetType !== 'value' ? (timeframeOrValue as TimeframesType) : null,\r\n value: targetType === 'value' && Number.isFinite(numberValue) ? numberValue : null,\r\n }\r\n }\r\n\r\n return DEFAULT_TARGET\r\n}\r\n\r\nexport function getPrimaryIndicatorOptions(filterOnlyIndicator?: string) {\r\n const indicators = INDICATORS_CONFIG.availableIndicators.filter(\r\n ({ id }) =>\r\n id !== InstrumentType.other &&\r\n id !== InstrumentType.value &&\r\n (filterOnlyIndicator !== undefined ? id === filterOnlyIndicator : true)\r\n )\r\n return {\r\n indicators,\r\n indicatorsOptions: INDICATORS_CONFIG.indicatorOptions,\r\n indicatorsCalcVals: INDICATORS_CONFIG.indicatorCalculatedValues,\r\n defaultCalculatedValues: INDICATORS_CONFIG.defaultCalculatedValues,\r\n }\r\n}\r\n\r\nexport function isFilterValid(selectedCondition: ICompareCondition, selectedTarget: CompareTargetValueType) {\r\n const isValid = { target: true, condition: true }\r\n\r\n if (\r\n [CompareCondition.between, CompareCondition.outside].includes(selectedCondition.condition) &&\r\n selectedCondition.rangeFrom === null &&\r\n selectedCondition.rangeTo === null\r\n ) {\r\n isValid.condition = false\r\n }\r\n if (selectedTarget.indicator === 'value' && selectedTarget.value === null) {\r\n isValid.target = false\r\n }\r\n\r\n return isValid\r\n}\r\n\r\nexport function stringifyFilter(\r\n selectedSource: IIndicator,\r\n selectedCondition: ICompareCondition,\r\n selectedTarget: CompareTargetValueType\r\n) {\r\n const sourceString = [\r\n selectedSource.indicator,\r\n selectedSource.indicatorPreset,\r\n selectedSource.indicatorCalcVal,\r\n selectedSource.timeframe,\r\n ].join(VALUE_DELIMITER) // bb.20 2.sma.d === indicatorName.indicatorPresetValue.incidatorCalculatedValue.timeframe\r\n const conditionString = [\r\n selectedCondition.condition,\r\n selectedCondition.rangeFrom ?? '',\r\n selectedCondition.rangeTo ?? '',\r\n ].join(VALUE_DELIMITER)\r\n const targetString =\r\n selectedTarget.indicator === 'value'\r\n ? [selectedTarget.indicator, null, null, selectedTarget.value].join(VALUE_DELIMITER)\r\n : [\r\n selectedTarget.indicator,\r\n selectedTarget.indicatorPreset,\r\n selectedTarget.indicatorCalcVal,\r\n selectedTarget.timeframe,\r\n ].join(VALUE_DELIMITER)\r\n\r\n return [sourceString, conditionString, targetString].join(PARAMS_DELIMITER)\r\n}\r\n","import React, { useTransition } from 'react'\r\n\r\nimport { Button } from '../../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../../main/components/dialog'\r\nimport { encodeQueryString } from '../../../queryString'\r\nimport { FilterProps } from '../types'\r\nimport { CompareComponent, CompareCondition, ICompareCondition } from './compare-condition'\r\nimport { CompareSource } from './compare-source'\r\nimport { CompareTarget } from './compare-target'\r\nimport { DEFAULT_TARGET, EMPTY_TARGET } from './constants'\r\nimport { CompareTargetComponentValueType, CompareTargetValueType, IIndicator, INTRADAY_FREE_TIMEFRAME } from './types'\r\nimport {\r\n getDefaultSelectedCondition,\r\n getDefaultSelectedSource,\r\n getDefaultSelectedTarget,\r\n getPrimaryIndicatorOptions,\r\n getSecondaryIndicatorOptions,\r\n isFilterValid,\r\n stringifyFilter,\r\n} from './utils'\r\n\r\nexport enum ChangeType {\r\n 'compareSource',\r\n 'compareCondition',\r\n 'compareTarget',\r\n}\r\n\r\nexport function CompareIndicatorsDialog({ onSubmit, config }: FilterProps) {\r\n const [isInProgress, startTransition] = useTransition()\r\n const [selectedSource, setSelectedSource] = React.useState(() => getDefaultSelectedSource(config))\r\n const [selectedCondition, setSelectedCondition] = React.useState(() => getDefaultSelectedCondition(config))\r\n const [selectedTarget, setSelectedTarget] = React.useState(() =>\r\n getDefaultSelectedTarget(config)\r\n )\r\n const [conditionError, setConditionError] = React.useState()\r\n const [targetError, setTargetError] = React.useState()\r\n\r\n const handleChange = ({\r\n type,\r\n value,\r\n }: {\r\n type: ChangeType\r\n value: IIndicator | ICompareCondition | CompareTargetValueType\r\n }) => {\r\n startTransition(() => {\r\n setConditionError(false)\r\n setTargetError(false)\r\n\r\n switch (type) {\r\n case ChangeType.compareSource:\r\n setSelectedSource(value as IIndicator)\r\n const availableTargets = getSecondaryIndicatorOptions(value as IIndicator)\r\n if (\r\n ![CompareCondition.between, CompareCondition.outside].includes(selectedCondition.condition) &&\r\n !availableTargets.indicators.some(({ items }) =>\r\n items.some(({ value }) => value === selectedTarget.indicator)\r\n )\r\n ) {\r\n setSelectedTarget(DEFAULT_TARGET)\r\n }\r\n break\r\n case ChangeType.compareCondition:\r\n setSelectedCondition(value as ICompareCondition)\r\n if ([CompareCondition.between, CompareCondition.outside].includes((value as ICompareCondition).condition)) {\r\n setSelectedTarget(EMPTY_TARGET)\r\n } else if (selectedTarget.indicator === null) {\r\n setSelectedTarget(DEFAULT_TARGET)\r\n }\r\n break\r\n case ChangeType.compareTarget:\r\n setSelectedTarget(value as CompareTargetValueType)\r\n break\r\n default:\r\n break\r\n }\r\n })\r\n }\r\n\r\n const handleSubmit = () => {\r\n const isValid = isFilterValid(selectedCondition, selectedTarget)\r\n\r\n setConditionError(!isValid.condition)\r\n setTargetError(!isValid.target)\r\n\r\n if (isInProgress || !isValid.condition || !isValid.target) return\r\n\r\n if ([selectedSource.timeframe, selectedTarget.timeframe].includes(INTRADAY_FREE_TIMEFRAME.intraday)) {\r\n document.location = `/elite.ashx?${encodeQueryString({\r\n utm_source: 'finviz',\r\n utm_medium: 'banner',\r\n utm_campaign: 'screener-custom-indicator-compare-filter-intraday',\r\n })}`\r\n return\r\n }\r\n\r\n const filterString = stringifyFilter(selectedSource, selectedCondition, selectedTarget)\r\n onSubmit([filterString])\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 {selectedTarget.indicator !== null && (\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 { Button } from '../../../../main/components/button'\r\nimport { DialogBody, DialogDismiss, DialogFooter } from '../../../../main/components/dialog'\r\nimport { encodeQueryString } from '../../../queryString'\r\nimport { ICompareCondition } from './compare-condition'\r\nimport { ChangeType } from './compare-indicators-component'\r\nimport { CompareSource } from './compare-source'\r\nimport { VALUE_DELIMITER } from './constants'\r\nimport { INDICATORS_CONFIG, IndicatorKey } from './parse-json-util'\r\nimport { CompareTargetValueType, EXTRADAY_TIMEFRAMES, IIndicator, INTRADAY_FREE_TIMEFRAME } from './types'\r\nimport { getPrimaryIndicatorOptions } from './utils'\r\n\r\nfunction getDefaultByIndicator(indicator: IndicatorKey): IIndicator {\r\n return {\r\n indicator,\r\n indicatorPreset: INDICATORS_CONFIG.indicatorOptions[indicator][0]?.value,\r\n indicatorCalcVal: INDICATORS_CONFIG.defaultCalculatedValues[indicator],\r\n timeframe: EXTRADAY_TIMEFRAMES.d,\r\n }\r\n}\r\n\r\nexport function SelectSourceDialog({\r\n data,\r\n onSubmit,\r\n selected,\r\n}: {\r\n data: ReturnType\r\n onSubmit: (values: string) => void\r\n selected: string\r\n}) {\r\n const [selectedSource, setSelectedSource] = React.useState(\r\n getDefaultByIndicator(selected as IndicatorKey)\r\n )\r\n\r\n const handleChange = ({\r\n type,\r\n value,\r\n }: {\r\n type: ChangeType\r\n value: IIndicator | ICompareCondition | CompareTargetValueType\r\n }) => {\r\n switch (type) {\r\n case ChangeType.compareSource:\r\n setSelectedSource(value as IIndicator)\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n\r\n const handleSubmit = () => {\r\n const sourceString = [\r\n selectedSource.indicator,\r\n selectedSource.indicatorPreset,\r\n selectedSource.indicatorCalcVal,\r\n selectedSource.timeframe,\r\n ].join(VALUE_DELIMITER) // bb.20 2.sma.d === indicatorName.indicatorPresetValue.incidatorCalculatedValue.timeframe\r\n\r\n if (selectedSource.timeframe === INTRADAY_FREE_TIMEFRAME.intraday) {\r\n document.location = `/elite.ashx?${encodeQueryString({\r\n utm_source: 'finviz',\r\n utm_medium: 'banner',\r\n utm_campaign: 'screener-add-filter-intraday',\r\n })}`\r\n } else {\r\n onSubmit(sourceString)\r\n }\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","import React from 'react'\r\n\r\nimport { Button } from '../../main/components'\r\nimport { Dialog, DialogHeader, useDialogState } from '../../main/components/dialog'\r\nimport { Select } from '../../main/components/select'\r\nimport { decodeQueryString, encodeQueryString } from '../queryString'\r\nimport { TECHNICAL_EXTRA_FILTER_PREFIX } from './filter-modal/compare-indicators/constants'\r\nimport { SelectSourceDialog } from './filter-modal/compare-indicators/select-source'\r\nimport { getPrimaryIndicatorOptions } from './filter-modal/compare-indicators/utils'\r\nimport { parseScreenerFilters, stringifyScreenerFilters } from './utils'\r\n\r\nconst INIT_DATA = getPrimaryIndicatorOptions()\r\nconst LIST_PROPS = { className: 'w-25' }\r\n\r\nexport function ScreenerAddFilter() {\r\n const [selected, setSelected] = React.useState('')\r\n const dialogState = useDialogState()\r\n\r\n const handleSubmit = (item: string) => {\r\n const urlQueryObject = decodeQueryString()\r\n\r\n let nextTaxiIndex = 0\r\n if (urlQueryObject.f) {\r\n const lastTaxiIndex = urlQueryObject.f\r\n .split(',')\r\n .filter((item) => item.startsWith(TECHNICAL_EXTRA_FILTER_PREFIX))\r\n .map((item) => Number.parseInt(item.split('_')[1]))\r\n .sort((a, b) => b - a)[0]\r\n nextTaxiIndex = lastTaxiIndex !== undefined ? lastTaxiIndex + 1 : 0\r\n }\r\n\r\n const filters = {\r\n ...parseScreenerFilters(),\r\n [`${TECHNICAL_EXTRA_FILTER_PREFIX}_${nextTaxiIndex}`]: [item],\r\n }\r\n\r\n window.location.href =\r\n 'screener.ashx?' + encodeQueryString({ ...urlQueryObject, f: stringifyScreenerFilters(filters) })\r\n }\r\n\r\n React.useEffect(() => {\r\n if (selected) {\r\n dialogState.show()\r\n }\r\n }, [selected, dialogState])\r\n\r\n return (\r\n <>\r\n \r\n + Filter\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n value={selected}\r\n onChange={(item) => setSelected(item.value)}\r\n />\r\n {selected && (\r\n setSelected('')}\r\n data-testid=\"screener-add-filter-dialog\"\r\n >\r\n Indicator Settings\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","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 { CompareIndicatorsDialog } from './compare-indicators'\r\nimport { TECHNICAL_EXTRA_FILTER_PREFIX } from './compare-indicators/constants'\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 if (config.filter.startsWith(TECHNICAL_EXTRA_FILTER_PREFIX))\r\n return \r\n\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 { TECHNICAL_EXTRA_FILTER_PREFIX } from './filter-modal/compare-indicators/constants'\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 FilterDialogRoot() {\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 (!FinvizSettings.hasUserPremium && !filter?.startsWith(TECHNICAL_EXTRA_FILTER_PREFIX)) {\r\n const eliteUrl = 'elite.ashx?utm_source=finviz&utm_medium=banner&utm_campaign=screener-select-'\r\n if (value === 'range' || value === 'frange' || value.indexOf('modal') > -1) {\r\n window.location.href = eliteUrl + 'custom-elite'\r\n return\r\n } else if (value === 'more' || value === 'restricted') {\r\n window.location.href = eliteUrl + value + '-elite'\r\n return\r\n }\r\n }\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 searchParams = new URLSearchParams(queryWithFilter!)\r\n const screenerFilterValue = searchParams.get('f')\r\n const filtersArray = screenerFilterValue\r\n ?.split(',')\r\n .map((item) => {\r\n if (item === `${filter}_selected_filter`) {\r\n return value === 'delete' ? '' : filter + '_' + value\r\n }\r\n return item\r\n })\r\n .filter((item) => item)\r\n if (filtersArray && filtersArray.length > 0) {\r\n searchParams.set('f', filtersArray!.join(','))\r\n }\r\n q = searchParams.toString()\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 { ScreenerAddFilter } from './add-filter'\r\nimport { FilterDialogRoot } from './filter-dialog-root'\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) {\r\n const root = ReactDOM.createRoot(screener)\r\n\r\n root.render()\r\n }\r\n screenerTimeframeReactMount()\r\n\r\n const screenerAddFilter = document.getElementById('screener_filter_addfilter_root')\r\n if (screenerAddFilter) {\r\n const root = ReactDOM.createRoot(screenerAddFilter)\r\n root.render()\r\n }\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 classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nenum TagSize {\r\n small = 'h-4 min-w-4', // 16px height\r\n medium = 'h-5 min-w-5', // 20px height\r\n}\r\ntype TagSizeType = keyof typeof TagSize\r\n\r\nenum TagPadding {\r\n small = 'px-[5px] py-0', // 16px height\r\n medium = 'px-1.5 py-0.5', // 20px height\r\n}\r\ntype TagPaddingType = keyof typeof TagPadding\r\n\r\nenum TagFont {\r\n small = 'text-3xs leading-3', // 10px/12px\r\n medium = 'text-2xs leading-4', // 12px/16px\r\n}\r\n\r\ntype TagProps = {\r\n size?: TagSizeType\r\n padding?: TagPaddingType\r\n}\r\n\r\nexport function Tag({ size = 'medium', padding = size, children }: React.PropsWithChildren) {\r\n const tagPadding = TagPadding[padding]\r\n const tagSize = TagSize[size]\r\n const tagFont = TagFont[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