{"version":3,"file":"9349.daadab94.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/header/market-badge.tsx","webpack://@finviz/website/./js/app/header/time.tsx","webpack://@finviz/website/./js/app/header/utils.ts","webpack://@finviz/website/./js/app/shared/isMobile.ts","webpack://@finviz/website/./js/main/components/TickerSearch/TickerSearchItem.tsx","webpack://@finviz/website/./js/main/components/TickerSearch/util.ts","webpack://@finviz/website/./js/main/components/TickerSearch/TickerSearch.tsx","webpack://@finviz/website/./js/main/components/box.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/combo-box/combo-box.tsx","webpack://@finviz/website/./js/main/components/combo-box/combo-box-item.tsx","webpack://@finviz/website/./js/main/components/combo-box/hooks.ts","webpack://@finviz/website/./js/main/components/copy-to-clipboard/copy-to-clipboard.tsx","webpack://@finviz/website/./js/main/components/dialog/hooks.ts","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/highlight.tsx","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/input.tsx","webpack://@finviz/website/./js/main/components/centered.tsx","webpack://@finviz/website/./js/main/components/search/search-error.tsx","webpack://@finviz/website/./js/main/components/search/search-item.tsx","webpack://@finviz/website/./js/main/components/search/search-list.tsx","webpack://@finviz/website/./js/main/components/search/search-navigation-wrapper.tsx","webpack://@finviz/website/./js/main/components/search/search.tsx","webpack://@finviz/website/./js/main/components/search/useSearchComboboxState.ts","webpack://@finviz/website/./js/main/components/tooltip-input.tsx","webpack://@finviz/website/./js/main/components/tooltip/types.ts","webpack://@finviz/website/./js/main/components/tooltip/tooltip-arrow.tsx","webpack://@finviz/website/./js/main/components/tooltip/tooltip-box.tsx","webpack://@finviz/website/./js/main/components/tooltip/tooltip.tsx","webpack://@finviz/website/./js/main/components/tooltip/tooltip-trigger.tsx","webpack://@finviz/website/./js/main/components/tooltip/TooltipProvider.tsx","webpack://@finviz/website/./js/main/components/tooltip/hooks.ts","webpack://@finviz/website/./js/main/hooks/use-resize-observer.ts","webpack://@finviz/website/./js/main/hooks/usePopoverPlacement.ts","webpack://@finviz/website/../charts/app/utils/ticker-sanitizer.ts"],"sourcesContent":["import classnames from 'classnames'\r\n\r\nimport { isAftermarket, isHoliday, isPremarket } from './utils'\r\n\r\nexport enum MarketBadgeType {\r\n None,\r\n Open,\r\n Closed,\r\n Premarket,\r\n Aftermarket,\r\n}\r\n\r\nexport function getMarketBadgeText(type: MarketBadgeType, _date?: Date) {\r\n switch (type) {\r\n case MarketBadgeType.Open:\r\n return {\r\n label: 'Markets Open',\r\n }\r\n case MarketBadgeType.Closed:\r\n // const holiday = getHoliday(date)\r\n\r\n return {\r\n label: 'Markets Closed',\r\n // description: holiday && (\r\n // <>\r\n // The markets observe U.S. holidays and are closed on\r\n //
\r\n // {holiday.label}\r\n // \r\n // ),\r\n }\r\n case MarketBadgeType.Premarket:\r\n return {\r\n label: 'Premarket',\r\n // description: (\r\n // <>\r\n // An additional time window when trading is possible.\r\n //
\r\n // We report it as the time between 7:00 AM and 9:30 AM\r\n // \r\n // ),\r\n }\r\n case MarketBadgeType.Aftermarket:\r\n return {\r\n label: 'Aftermarket',\r\n // description: (\r\n // <>\r\n // An additional time window when trading is still possible.\r\n //
\r\n // We report it as the time between 4:00 PM and 6:30 PM\r\n // \r\n // ),\r\n }\r\n }\r\n}\r\n\r\nexport function getMarketBadgeType(time: Date, hasUserPremium?: boolean) {\r\n if (isHoliday(time)) return MarketBadgeType.Closed\r\n if (isPremarket(time, hasUserPremium)) return MarketBadgeType.Premarket\r\n if (isAftermarket(time, hasUserPremium)) return MarketBadgeType.Aftermarket\r\n // if (isMarketOpen(time, hasUserPremium)) return MarketBadgeType.Open\r\n\r\n return MarketBadgeType.None\r\n}\r\n\r\nexport interface MarketBadgeProps {\r\n badge: MarketBadgeType\r\n className?: string\r\n}\r\n\r\nexport function MarketBadge({ badge, className }: MarketBadgeProps) {\r\n if (badge === MarketBadgeType.None) return null\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nimport { Tooltip, TooltipTrigger, useTooltipState } from '../../main/components/tooltip'\r\nimport { Heading } from '../../main/components/typography'\r\nimport { useResizeObserver } from '../../main/hooks/use-resize-observer'\r\nimport { MarketBadge, MarketBadgeProps, getMarketBadgeText, getMarketBadgeType } from './market-badge'\r\nimport { TimeFormatType, getDate, getFormattedDateString } from './utils'\r\n\r\nconst UPDATE_INTERVAL = 10000\r\n\r\nenum TimeBreakpointMode {\r\n container,\r\n window,\r\n}\r\n\r\nexport interface TimeBreakpoint {\r\n minWidth: number\r\n marketBadgeText: boolean\r\n timeFormat: TimeFormatType\r\n}\r\n\r\nconst BREAKPOINTS: TimeBreakpoint[] = [\r\n { minWidth: -Infinity, marketBadgeText: false, timeFormat: 'timeOnly' },\r\n { minWidth: 140, marketBadgeText: false, timeFormat: 'short' },\r\n { minWidth: 180, marketBadgeText: false, timeFormat: 'long' },\r\n { minWidth: 255, marketBadgeText: true, timeFormat: 'long' },\r\n]\r\n\r\nfunction getTimeState(fixedTime?: string | Date, hasUserPremium: boolean = FinvizSettings.hasUserPremium) {\r\n const time = getDate(fixedTime)\r\n const badge = getMarketBadgeType(time, hasUserPremium)\r\n\r\n return { time, badge }\r\n}\r\n\r\nfunction TooltipBadge(props: MarketBadgeProps & { time: Date }) {\r\n const state = useTooltipState({ placement: 'bottom' })\r\n const badge = getMarketBadgeText(props.badge, props.time)\r\n\r\n if (!badge) return null\r\n\r\n return (\r\n <>\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {badge.label}\r\n \r\n {/* {badge.description && {badge.description}} */}\r\n \r\n \r\n )\r\n}\r\n\r\nfunction StaticBadge(props: MarketBadgeProps & { time: Date }) {\r\n const badge = getMarketBadgeText(props.badge, props.time)\r\n\r\n if (!badge) return null\r\n\r\n return (\r\n <>\r\n \r\n {`${badge.label} · `}\r\n \r\n )\r\n}\r\n\r\n/**\r\n * Find matching breakpoint or return the last (largest) one\r\n */\r\nfunction findMatchingBreakpoint(compareWidth: number | undefined, breakpoints: TimeBreakpoint[]) {\r\n if (typeof compareWidth !== 'number') return breakpoints[breakpoints.length - 1]\r\n\r\n const matchingBreakpoints = breakpoints.filter((breakpoint) => compareWidth >= breakpoint.minWidth)\r\n\r\n return matchingBreakpoints.pop() ?? breakpoints[breakpoints.length - 1]\r\n}\r\n\r\nfunction getCurrentWidth(mode: TimeBreakpointMode, element: HTMLElement | null) {\r\n return mode === TimeBreakpointMode.window ? window.innerWidth : (element?.clientWidth ?? 0)\r\n}\r\n\r\ninterface TimeProps extends React.HTMLProps {\r\n /**\r\n * Set custom time to display\r\n */\r\n fixedTime?: string | Date\r\n\r\n /**\r\n * What to measure the breakpoints to\r\n * - `container` parent element\r\n * - `window` window\r\n *\r\n * @default \"container\"\r\n */\r\n breakpointMode?: keyof typeof TimeBreakpointMode\r\n\r\n /**\r\n * Defines what information is visible at which breakpoint. Local mode measures\r\n * the component wrapper div and global mode measures window width. The definitions\r\n * must be ascending in width\r\n */\r\n breakpoints?: TimeBreakpoint[]\r\n}\r\n\r\nexport function Time({\r\n className,\r\n fixedTime,\r\n breakpointMode = 'container',\r\n breakpoints = BREAKPOINTS,\r\n ...props\r\n}: TimeProps) {\r\n const ResizeObserver = useResizeObserver()\r\n const rootRef = React.useRef(null)\r\n const [state, setState] = React.useState(getTimeState(fixedTime))\r\n const [currentBreakpoint, setBreakpoint] = React.useState(null)\r\n\r\n React.useEffect(() => {\r\n const interval = setInterval(() => setState(getTimeState(fixedTime)), UPDATE_INTERVAL)\r\n return () => clearInterval(interval)\r\n }, [fixedTime])\r\n\r\n React.useEffect(() => {\r\n if (!ResizeObserver || !rootRef.current) return\r\n\r\n if (!currentBreakpoint) {\r\n const currentWidth = getCurrentWidth(TimeBreakpointMode[breakpointMode], rootRef.current)\r\n setBreakpoint(findMatchingBreakpoint(currentWidth, breakpoints))\r\n }\r\n\r\n const handleResize = throttle(() => {\r\n const currentWidth = getCurrentWidth(TimeBreakpointMode[breakpointMode], rootRef.current)\r\n const foundBreakpoint = findMatchingBreakpoint(currentWidth, breakpoints)\r\n\r\n if (foundBreakpoint !== currentBreakpoint) setBreakpoint(foundBreakpoint)\r\n }, 150)\r\n\r\n const observer = new ResizeObserver((entries) => {\r\n window.requestAnimationFrame(() => {\r\n if (Array.isArray(entries) && entries.length > 0) handleResize()\r\n })\r\n })\r\n\r\n observer.observe(rootRef.current)\r\n window.addEventListener('resize', handleResize)\r\n\r\n return () => {\r\n observer.disconnect()\r\n window.removeEventListener('resize', handleResize)\r\n }\r\n }, [ResizeObserver, currentBreakpoint, breakpoints, breakpointMode])\r\n\r\n return (\r\n
\r\n {currentBreakpoint && (\r\n
\r\n {currentBreakpoint.marketBadgeText ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {getFormattedDateString(state.time, currentBreakpoint.timeFormat)}\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n","import * as dateFns from 'date-fns'\r\n\r\n/**\r\n * Check if a given date is DST in the US\r\n * - begins on the second Sunday in March\r\n * - ends on the first Sunday in November\r\n *\r\n * Keep in sync with https://github.com/finvizhq/charts/blob/master/app/utils.ts\r\n */\r\nexport function getIsDstInNy(date: Date) {\r\n const dayNumber = date.getDate()\r\n const monthIndex = date.getMonth()\r\n const dayOfWeek = date.getDay()\r\n const previousSunday = dayNumber - dayOfWeek\r\n if (monthIndex < 2 || monthIndex > 10) {\r\n return false\r\n }\r\n if (monthIndex > 2 && monthIndex < 10) {\r\n return true\r\n }\r\n return monthIndex === 2 ? previousSunday >= 8 : previousSunday <= 0\r\n}\r\n\r\nexport function getDate(seed?: string | number | Date | null) {\r\n var date = seed != null ? new Date(seed) : new Date()\r\n const dateAsNY = new Date(\r\n date.getUTCFullYear(),\r\n date.getUTCMonth(),\r\n date.getUTCDate(),\r\n date.getUTCHours() - 5,\r\n date.getUTCMinutes(),\r\n date.getUTCSeconds()\r\n )\r\n const isDst = getIsDstInNy(dateAsNY)\r\n\r\n if (isDst) {\r\n dateAsNY.setUTCHours(dateAsNY.getUTCHours() + 1)\r\n }\r\n\r\n return dateAsNY\r\n}\r\n\r\nfunction getWeekDay(date: Date) {\r\n return date.toLocaleDateString('en-US', { weekday: 'short' })\r\n}\r\n\r\nfunction getMonth(date: Date, uppercase = true) {\r\n const name = date.toLocaleDateString('en-US', { month: 'short' })\r\n return uppercase ? name.toUpperCase() : name\r\n}\r\n\r\nfunction getDay(date: Date) {\r\n return date.getDate().toString().padStart(2, '0')\r\n}\r\n\r\nfunction getTime(date: Date) {\r\n return date.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })\r\n}\r\n\r\nenum TimeFormat {\r\n long,\r\n short,\r\n dateOnly,\r\n timeOnly,\r\n}\r\n\r\nexport type TimeFormatType = keyof typeof TimeFormat\r\n\r\nexport function getFormattedDateString(date: Date = getDate(), format: TimeFormatType = 'long') {\r\n switch (TimeFormat[format]) {\r\n case TimeFormat.long:\r\n return `${getWeekDay(date)} ${getMonth(date)} ${getDay(date)} ${date.getFullYear()} ${getTime(date)} ET`\r\n case TimeFormat.short:\r\n return `${getWeekDay(date)} ${getMonth(date)} ${getDay(date)} ${getTime(date)}`\r\n case TimeFormat.dateOnly:\r\n return `${getMonth(date, false)} ${getDay(date)}`\r\n case TimeFormat.timeOnly:\r\n return getTime(date)\r\n }\r\n}\r\n\r\nexport function formatDate(value: Date | unknown, inputOrOutputFormat: string, outputFormat?: string): string {\r\n return dateFns.format(\r\n dateFns.isDate(value) ? (value as Date) : dateFns.parse(`${value}`, inputOrOutputFormat, new Date()),\r\n outputFormat ?? inputOrOutputFormat\r\n )\r\n}\r\n\r\nexport function isPremarket(date: Date = getDate(), isPremium = FinvizSettings.hasUserPremium) {\r\n const dayOfWeek = date.getDay()\r\n const min = date.getMinutes()\r\n const hours = date.getHours()\r\n\r\n if (isPremium && dayOfWeek !== 0 && dayOfWeek !== 6 && (hours === 7 || hours === 8 || (hours === 9 && min < 30))) {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nexport function isAftermarket(date: Date = getDate(), isPremium = FinvizSettings.hasUserPremium) {\r\n const dayOfWeek = date.getDay()\r\n const min = date.getMinutes()\r\n\r\n if (\r\n isPremium &&\r\n dayOfWeek !== 0 &&\r\n dayOfWeek !== 6 &&\r\n (date.getHours() === 16 || date.getHours() === 17 || (date.getHours() === 18 && min < 30))\r\n ) {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * https://www.nyse.com/markets/hours-calendars\r\n */\r\nconst HOLIDAY_DATES = [\r\n {\r\n label: \"New Year's Day\",\r\n test: (day: number, month: number) => month === 1 && day === 1,\r\n },\r\n {\r\n label: 'Martin Luther King, Jr. Day',\r\n test: (day: number, month: number) => month === 1 && day === 15,\r\n },\r\n {\r\n label: 'Presidents Day',\r\n test: (day: number, month: number) => month === 2 && day === 19,\r\n },\r\n {\r\n label: 'Good Friday',\r\n test: (day: number, month: number) => month === 3 && day === 29,\r\n },\r\n {\r\n label: 'Memorial Day',\r\n test: (day: number, month: number) => month === 5 && day === 27,\r\n },\r\n {\r\n label: 'Juneteenth Holiday',\r\n test: (day: number, month: number) => month === 6 && day === 19,\r\n },\r\n {\r\n label: 'Early Close',\r\n test: (day: number, month: number, hours: number) => month === 7 && day === 3 && hours >= 13,\r\n },\r\n {\r\n label: 'Independence Day',\r\n test: (day: number, month: number) => month === 7 && day === 4,\r\n },\r\n {\r\n label: 'Labor Day',\r\n test: (day: number, month: number) => month === 9 && day === 2,\r\n },\r\n {\r\n label: 'Thanksgiving Day',\r\n test: (day: number, month: number) => month === 11 && day === 28,\r\n },\r\n {\r\n label: 'Day after Thanksgiving (closed from 1 PM)',\r\n test: (day: number, month: number, hours: number) => month === 11 && day === 29 && hours >= 13,\r\n },\r\n {\r\n label: 'Christmas Day',\r\n test: (day: number, month: number) => month === 12 && day === 25,\r\n },\r\n]\r\n\r\nexport function getHoliday(date: Date = getDate()) {\r\n var day = date.getDate()\r\n var month = date.getMonth() + 1\r\n var hours = date.getHours()\r\n\r\n return HOLIDAY_DATES.find((holiday) => holiday.test(day, month, hours))\r\n}\r\n\r\nexport function isHoliday(date: Date = getDate()) {\r\n return !!getHoliday(date)\r\n}\r\n\r\nexport function isMarketOpen(date: Date = getDate(), isPremium = FinvizSettings.hasUserPremium) {\r\n if (isPremarket(date, isPremium) || isAftermarket(date, isPremium) || isHoliday(date)) {\r\n return false\r\n }\r\n\r\n const dayOfWeek = date.getDay()\r\n const hour = date.getHours()\r\n const minute = date.getMinutes()\r\n\r\n const isWeekend = dayOfWeek === 0 || dayOfWeek === 6\r\n // Day starts at 9:30\r\n const dayStarted = hour === 9 ? minute >= 30 : hour >= 10\r\n // Ends at 16:00\r\n const dayEnded = hour >= 16\r\n\r\n return !isWeekend && dayStarted && !dayEnded\r\n}\r\n\r\n// duplicate from charts/app/utils/helpers.ts , will be refactored in next PR\r\nexport function getEarningsDateSuffix(date: Date) {\r\n const hours = date.getHours()\r\n\r\n if (hours <= 9) {\r\n return 'BMO'\r\n } else if (hours >= 16) {\r\n return 'AMC'\r\n }\r\n\r\n return ''\r\n}\r\n","// OS Matches\r\nconst matchesAndroid = navigator.userAgent.match(/Android/i)\r\nconst matchesWebOS = navigator.userAgent.match(/webOS/i)\r\nconst matchesIPhone = navigator.userAgent.match(/iPhone/i)\r\nconst matchesiPad = navigator.userAgent.match(/iPad/i)\r\nconst matchesIPod = navigator.userAgent.match(/iPod/i)\r\nconst matchesBlackBerry = navigator.userAgent.match(/BlackBerry/i)\r\nconst matchesWindowsPhone = navigator.userAgent.match(/Windows Phone/i)\r\nconst matchesIOSLike = navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints > 0\r\n\r\n// Browser Matches\r\nconst matchesFirefox = !!navigator.userAgent.match(/firefox/i)\r\nconst matchesSafariDesktopLike =\r\n /^((?!chrome|android).)*safari/i.test(navigator.userAgent) && navigator.maxTouchPoints === 0\r\n\r\nconst isMobileDevice =\r\n matchesAndroid ||\r\n matchesWebOS ||\r\n matchesIPhone ||\r\n matchesiPad ||\r\n matchesIPod ||\r\n matchesBlackBerry ||\r\n matchesWindowsPhone ||\r\n matchesIOSLike\r\n\r\nexport function isMobile() {\r\n return !!isMobileDevice\r\n}\r\n\r\nexport function isIphone() {\r\n return !!(matchesIPhone && !matchesiPad)\r\n}\r\n\r\nexport function isIpad() {\r\n return (matchesIOSLike && !matchesIPhone && !matchesIPod) || matchesiPad\r\n}\r\n\r\nexport function isSafariDesktop() {\r\n return matchesSafariDesktopLike\r\n}\r\n\r\nexport function isIos() {\r\n return !!matchesIOSLike && !isSafariDesktop()\r\n}\r\n\r\nexport function isFirefox() {\r\n return matchesFirefox\r\n}\r\n\r\nexport function isFirefoxDesktop() {\r\n return isFirefox() && !isMobile()\r\n}\r\n","import React from 'react'\r\n\r\nimport { SearchApiResult } from '../../services/api'\r\nimport { ComboBoxItem, ComboBoxItemProps } from '../combo-box'\r\nimport { Highlight } from '../highlight'\r\nimport { PropsWithAs } from '../types'\r\n\r\ninterface SearchItemProps extends Pick, Partial> {\r\n item: SearchApiResult\r\n dataTestId?: string\r\n}\r\n\r\nexport function TickerSearchItem({ item, dataTestId, ...props }: SearchItemProps) {\r\n const value = props.state!.useState('value')\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {item.exchange}\r\n \r\n )\r\n}\r\n","import { getSanitizedTicker } from '../../../app/shared/ticker-sanitizer'\r\nimport { link } from '../../services/routing'\r\nimport { Instrument } from '../../types'\r\nimport { cleanTicker, getInstrumentForTicker } from '../../util'\r\n\r\nexport function getRedirectForTicker(tickerRaw: string) {\r\n const ticker = getSanitizedTicker(tickerRaw, true)\r\n const instrument = cleanTicker(ticker) ? getInstrumentForTicker(ticker) : null\r\n let redirectLink = ''\r\n\r\n switch (instrument) {\r\n case Instrument.Stock:\r\n redirectLink = link.toQuote(ticker)\r\n break\r\n case Instrument.Forex:\r\n redirectLink = link.toForexChartDetail(ticker)\r\n break\r\n case Instrument.Futures:\r\n redirectLink = link.toFuturesChartDetail(ticker)\r\n break\r\n case Instrument.Crypto:\r\n redirectLink = link.toCryptoChartDetail(ticker)\r\n break\r\n default:\r\n return link.toSearch(ticker)\r\n }\r\n\r\n return redirectLink + (FinvizSettings.quoteSearchExt ?? '')\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport { useQuery } from '@tanstack/react-query'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { getSanitizedTicker } from '../../../app/shared/ticker-sanitizer'\r\nimport { searchApiRequest } from '../../services/api'\r\nimport { link } from '../../services/routing'\r\nimport { Button } from '../button'\r\nimport { IconNameType } from '../icon'\r\nimport { InputSize, InputTheme } from '../input'\r\nimport { Search, SearchProps, useSearchComboboxState } from '../search'\r\nimport { TickerSearchItem } from './TickerSearchItem'\r\nimport { getRedirectForTicker } from './util'\r\n\r\ninterface Props extends Omit {\r\n /**\r\n * Whether the input should automatically receive focus when mounted\r\n */\r\n autoFocus?: boolean\r\n\r\n /**\r\n * Initial value for the input field\r\n */\r\n defaultValue?: string\r\n\r\n /**\r\n * Default placement position of the combobox popover\r\n * Inherits placement options from Ariakit ComboboxStore\r\n */\r\n defaultPlacement?: Ariakit.ComboboxStoreProps['placement']\r\n\r\n /**\r\n * Placeholder text shown when the input is empty\r\n */\r\n placeholder?: string\r\n\r\n /**\r\n * Visual theme variant for the input\r\n * References predefined styles from InputTheme\r\n */\r\n theme?: keyof typeof InputTheme\r\n\r\n /**\r\n * Size variant for the input\r\n * References predefined sizes from InputSize\r\n */\r\n size?: keyof typeof InputSize\r\n\r\n /**\r\n * Additional CSS class name for the input element\r\n */\r\n inputClass?: string\r\n\r\n /**\r\n * ChartIndex used for data-testid\r\n */\r\n chartIndex?: number\r\n\r\n /**\r\n * Whether to show the \"Show All\" option\r\n *\r\n * @default true\r\n */\r\n isShowAllVisible?: boolean\r\n\r\n /**\r\n * Whether search items should be rendered as links\r\n *\r\n * @default true\r\n */\r\n isSearchItemLink?: boolean\r\n\r\n /**\r\n * Content to show on the right side of the input (icon or custom element)\r\n */\r\n rightContent?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Callback function triggered when a ticker is selected\r\n *\r\n * @param ticker - The selected ticker string\r\n */\r\n onTickerSelected?: (ticker: string) => void\r\n}\r\n\r\nexport function TickerSearch({ isShowAllVisible = true, isSearchItemLink = true, chartIndex, ...props }: Props) {\r\n const searchComboboxState = useSearchComboboxState({\r\n defaultValue: props.defaultValue,\r\n placement: props.defaultPlacement ?? 'bottom-start',\r\n setSelectedValue: (value) => {\r\n if (isSearchItemLink) {\r\n window.location.href = getRedirectForTicker(value as string)\r\n } else {\r\n props.onTickerSelected?.(getSanitizedTicker(value as string))\r\n // We have to reset the value (clear the input) in next tick otherwise it doesn't work\r\n setTimeout(() => searchComboboxState.setValue(''))\r\n }\r\n },\r\n })\r\n\r\n const value = searchComboboxState.useState('value')\r\n const activeValue = searchComboboxState.useState('activeValue')\r\n const { data, error, isLoading, refetch } = useQuery(['search', value], () => searchApiRequest(value), {\r\n enabled: value.length > 0,\r\n keepPreviousData: true,\r\n cacheTime: Infinity,\r\n staleTime: Infinity,\r\n })\r\n\r\n return (\r\n \r\n Show All Results\r\n \r\n ) : undefined\r\n }\r\n isLoading={isLoading}\r\n isError={!!error}\r\n onErrorRetry={refetch}\r\n {...props}\r\n >\r\n {data?.map((item) => (\r\n \r\n ))}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nexport enum BoxRounding {\r\n none = '',\r\n regular = 'rounded-md', // 6px\r\n}\r\n\r\nexport enum BoxTheme {\r\n none = '',\r\n light = 'bg-white dark:bg-gray-800 border border-gray-100 dark:border-gray-600',\r\n dark = 'bg-gray-800 border border-gray-600',\r\n}\r\n\r\nexport interface BoxProps extends Omit, 'ref'> {\r\n 'data-testid'?: string\r\n rounding?: keyof typeof BoxRounding\r\n theme?: keyof typeof BoxTheme\r\n}\r\n\r\nexport const Box = React.forwardRef(function Box(\r\n { rounding = 'regular', theme = 'light', ...props }: BoxProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n})\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 * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Box } from '../box'\r\nimport { Input, InputProps } from '../input'\r\n\r\nexport interface ComboBoxProps extends Partial> {\r\n /**\r\n * The returned object from `useComboBoxState`\r\n */\r\n state: Ariakit.ComboboxStore\r\n\r\n /**\r\n * Additional props for the input\r\n */\r\n inputProps?: Partial & Omit, 'size'>\r\n\r\n /**\r\n * Additional props for the popover\r\n */\r\n popoverProps?: Partial\r\n\r\n /**\r\n * Id for testing purposes\r\n */\r\n inputTestId?: string\r\n\r\n /**\r\n * Minimum num of chars in input to show the popover\r\n */\r\n minValueLength?: number\r\n\r\n /**\r\n * Inut value getter\r\n */\r\n getInputValue?: (activeValue: string | undefined, value: string) => string\r\n}\r\n\r\nexport function ComboBox({\r\n state,\r\n children,\r\n inputProps,\r\n popoverProps,\r\n inputTestId,\r\n 'aria-label': ariaLabel,\r\n minValueLength = 0,\r\n getInputValue,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const isMounted = state.useState('mounted')\r\n const value = state.useState('value')\r\n const activeValue = state.useState('activeValue')\r\n const placement = state.useState('currentPlacement')\r\n\r\n const inputValue = React.useMemo(() => {\r\n if (getInputValue) return getInputValue(activeValue, value)\r\n\r\n return activeValue || value\r\n }, [getInputValue, value, activeValue])\r\n\r\n return (\r\n <>\r\n ) => {\r\n if (ev.key === 'Enter') {\r\n state.setSelectedValue(value)\r\n }\r\n inputProps?.onKeyDown?.(ev)\r\n }}\r\n />\r\n }\r\n {...props}\r\n />\r\n {isMounted && value.length >= minValueLength && (\r\n }\r\n store={state}\r\n aria-label={ariaLabel}\r\n {...popoverProps}\r\n className={classnames(\r\n 'z-dialog flex flex-col items-stretch space-y-px p-2 opacity-0 outline-none transition duration-[250ms] will-change-transform data-[enter]:translate-x-0 data-[enter]:translate-y-0 data-[enter]:opacity-100 motion-safe:transform',\r\n {\r\n 'motion-safe:translate-y-1': placement.startsWith('top'),\r\n 'motion-safe:-translate-x-1': placement.startsWith('right'),\r\n 'motion-safe:-translate-y-1': placement.startsWith('bottom'),\r\n 'motion-safe:translate-x-1': placement.startsWith('left'),\r\n },\r\n popoverProps?.className\r\n )}\r\n >\r\n {children}\r\n \r\n )}\r\n \r\n )\r\n}\r\n","// Disable rule as the component is external\r\nimport * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { BUTTON_DEFAULT_ELEMENT, Button, ButtonProps } from '../button'\r\nimport { PropsWithAs } from '../types'\r\n\r\nconst DEFAULT_ELEMENT = 'button'\r\n\r\nexport interface ComboBoxItemProps extends ButtonProps {\r\n /**\r\n * The returned object from `useComboBoxState`\r\n */\r\n state?: Ariakit.ComboboxStore\r\n\r\n /**\r\n * Value for the combo box item\r\n */\r\n value: string\r\n}\r\n\r\nfunction ComboBoxItemButton(\r\n { as: asComponent, children, 'data-active-item': dataActiveItem, ...props }: PropsWithAs & ButtonProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport const ComboBoxItemButtonWithRef = React.forwardRef(ComboBoxItemButton) as <\r\n TagType extends React.ElementType = typeof BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n props: PropsWithAs & ButtonProps & { ref?: React.ForwardedRef }\r\n) => ReturnType\r\n\r\nexport function ComboBoxItem({\r\n as: asComponent,\r\n state,\r\n children,\r\n contentClass,\r\n ...props\r\n}: PropsWithAs & ComboBoxItemProps) {\r\n return (\r\n \r\n {children}\r\n \r\n }\r\n />\r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\n\r\nexport const useComboBoxState = Ariakit.useComboboxStore\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 Ariakit from '@ariakit/react'\r\nimport * as React from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\n\r\nexport const ZIndexContext = React.createContext(null)\r\n\r\nexport function useZIndex(defaultValue: string | null = 'z-50') {\r\n return React.useContext(ZIndexContext) ?? defaultValue\r\n}\r\n\r\nexport type DialogStateProps = Ariakit.DialogStoreProps\r\nexport type DialogStateReturn = ReturnType\r\n/**\r\n * Hook which provides state to dialogs\r\n */\r\nexport function useDialogState(settings?: DialogStateProps) {\r\n return Ariakit.useDialogStore(settings)\r\n}\r\n\r\nexport const DialogDragContext = React.createContext<{\r\n enabled?: boolean\r\n handleRef?: React.RefObject\r\n boxPosition: { x: number; y: number }\r\n resetBoxPosition: () => void\r\n setBoxPosition: React.Dispatch>\r\n}>({\r\n enabled: false,\r\n handleRef: undefined,\r\n boxPosition: { x: 0, y: 0 },\r\n resetBoxPosition: () => {},\r\n setBoxPosition: () => {},\r\n})\r\n\r\n/**\r\n * Hook which allows an element on the page to become draggable\r\n */\r\nexport function useDrag(enabled?: boolean) {\r\n const dragging = React.useRef(false)\r\n const handleRef = React.useRef(null)\r\n const handleElement = handleRef.current\r\n\r\n /**\r\n * Set box position in both state for the component to re-render and as a ref\r\n * so that we don’t have to re-run the whole effect on every change\r\n */\r\n const [boxPosition, setBoxPosition] = React.useState({ x: 0, y: 0 })\r\n const boxPositionRef = React.useRef({ x: 0, y: 0 })\r\n const dragDiff = React.useRef({ x: 0, y: 0 })\r\n\r\n const { current: resetBoxPosition } = React.useRef(() => {\r\n setBoxPosition({ x: 0, y: 0 })\r\n })\r\n\r\n React.useEffect(() => {\r\n boxPositionRef.current = { ...boxPosition }\r\n }, [boxPosition])\r\n\r\n React.useEffect(() => {\r\n if (!enabled || !handleElement || isMobile()) return\r\n\r\n const onMouseDown = (ev: MouseEvent) => {\r\n dragging.current = true\r\n\r\n dragDiff.current = {\r\n x: ev.pageX - boxPositionRef.current.x - window.scrollX,\r\n y: ev.pageY - boxPositionRef.current.y - window.scrollY,\r\n }\r\n }\r\n\r\n const onMouseUp = () => {\r\n dragging.current = false\r\n }\r\n\r\n const onMouseMove = (ev: MouseEvent) => {\r\n if (!dragging.current) return\r\n\r\n const x = ev.pageX - dragDiff.current.x - window.scrollX\r\n const y = ev.pageY - dragDiff.current.y - window.scrollY\r\n\r\n setBoxPosition({ x, y })\r\n }\r\n\r\n handleElement.addEventListener('pointerdown', onMouseDown)\r\n handleElement.addEventListener('dblclick', resetBoxPosition)\r\n window.addEventListener('pointerup', onMouseUp)\r\n document.body.addEventListener('pointermove', onMouseMove)\r\n\r\n return () => {\r\n handleElement.removeEventListener('pointerdown', onMouseDown)\r\n handleElement.removeEventListener('dblclick', resetBoxPosition)\r\n window.removeEventListener('pointerup', onMouseUp)\r\n document.body.removeEventListener('pointermove', onMouseMove)\r\n }\r\n }, [enabled, handleElement, resetBoxPosition])\r\n\r\n return {\r\n enabled,\r\n handleRef,\r\n boxPosition,\r\n setBoxPosition,\r\n resetBoxPosition,\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 { 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 { useMemo } from 'react'\r\n\r\ninterface HighlightProps {\r\n /**\r\n * Search string that will be highlighted\r\n */\r\n highlight: string\r\n /**\r\n * Text to be highlighted\r\n */\r\n text: string\r\n}\r\n\r\nexport function Highlight({ highlight, text }: HighlightProps) {\r\n const index = text.toLowerCase().indexOf(highlight.toLowerCase())\r\n\r\n const processedText = useMemo(\r\n () => ({\r\n before: text.substring(0, index),\r\n highlight: text.substring(index, index + highlight.length),\r\n after: text.substring(index + highlight.length),\r\n }),\r\n [highlight.length, index, text]\r\n )\r\n\r\n if (index < 0 || highlight.length < 1) return {text}\r\n\r\n return (\r\n <>\r\n {processedText.before}\r\n {!!processedText.highlight.length && (\r\n \r\n {processedText.highlight}\r\n \r\n )}\r\n {processedText.after}\r\n \r\n )\r\n}\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(\r\n buttonClasses,\r\n 'mr-auto',\r\n getButtonTheme({ theme: ButtonTheme.light }).button,\r\n ButtonPadding.regular\r\n ),\r\n text: 'Exit',\r\n },\r\n index > 0 && {\r\n action: tour.back,\r\n classes: classnames(buttonClasses, getButtonTheme({ theme: ButtonTheme.light }).button, ButtonPadding.regular),\r\n text: step.backButton ?? 'Back',\r\n },\r\n {\r\n classes: classnames(buttonClasses, getButtonTheme({ theme: 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 xlarge = '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 classnames from 'classnames'\r\nimport { ForwardedRef, HTMLProps, PropsWithChildren, ReactNode, forwardRef, useMemo } from 'react'\r\n\r\nimport { ButtonPadding } from './button'\r\nimport { Icon, IconNameType, isValidIconName } from './icon'\r\nimport { Label } from './typography'\r\n\r\nexport enum InputTheme {\r\n none,\r\n light,\r\n dark,\r\n navigationBar,\r\n}\r\n\r\nexport enum InputRounding {\r\n none = '',\r\n regular = 'rounded-md',\r\n}\r\n\r\n/**\r\n * Enum for input size. Only set size on larger viewports to avoid page zooming\r\n */\r\nexport enum InputSize {\r\n small = 'h-6 text-2xs', // 24px height\r\n regular = 'h-7 text-2xs', // 28px height\r\n medium = 'h-8 text-sm', // 32px height\r\n large = 'h-9 text-sm', // 36px height\r\n}\r\n\r\nfunction getInputTheme({\r\n theme,\r\n isError,\r\n hasFocusStyle,\r\n isSelected,\r\n}: {\r\n theme: InputTheme\r\n isError: boolean\r\n hasFocusStyle: boolean\r\n isSelected: boolean\r\n}) {\r\n switch (theme) {\r\n case InputTheme.none:\r\n return {}\r\n case InputTheme.dark:\r\n return {\r\n input: classnames('border bg-gray-800 text-gray-50 disabled:bg-gray-700 disabled:text-gray-400', {\r\n 'border-gray-600 hover:border-gray-400 disabled:border-gray-700': !isError,\r\n 'border-red-400': isError,\r\n 'focus:border-blue-400 focus:hover:border-blue-400': !isError && hasFocusStyle,\r\n }),\r\n icon: classnames({\r\n 'text-gray-500': !isError,\r\n 'text-red-400': isError,\r\n 'group-focus-within:text-blue-400': !isError && hasFocusStyle,\r\n }),\r\n }\r\n case InputTheme.navigationBar:\r\n return {\r\n input: classnames(\r\n 'border bg-transparent disabled:border-gray-700 disabled:bg-gray-700 disabled:text-gray-400',\r\n {\r\n 'border-gray-100 dark:border-gray-600 text-gray-750 dark:text-gray-50':\r\n !isError && !FinvizSettings.hasUserPremium,\r\n 'border-gray-600 text-gray-50': !isError && FinvizSettings.hasUserPremium,\r\n 'border-red-400': isError,\r\n }\r\n ),\r\n icon: classnames({\r\n 'text-gray-500': !isError,\r\n 'text-red-400': isError,\r\n }),\r\n }\r\n default:\r\n return {\r\n input: classnames(\r\n 'border', // Base styles\r\n 'disabled:bg-secondary disabled:text-gray-500', // Light\r\n 'dark:disabled:bg-gray-700 dark:disabled:text-gray-400', // Dark\r\n {\r\n 'bg-primary': !isSelected,\r\n 'border-primary hover:border-gray-300 disabled:hover:border-gray-100 dark:hover:border-gray-400 dark:disabled:border-gray-700':\r\n !isError && !isSelected,\r\n 'border-red-400': isError,\r\n 'focus:border-blue-400 hover:focus:border-blue-400 dark:focus:border-blue-400 dark:hover:focus:border-blue-400':\r\n !isError && !isSelected && hasFocusStyle,\r\n 'bg-blue-50 border-blue-400 dark:bg-blue-700': isSelected,\r\n }\r\n ),\r\n icon: classnames({\r\n 'text-gray-300 dark:text-gray-500': !isError && !isSelected,\r\n 'text-red-400': isError,\r\n 'group-focus-within:text-blue-400': !isError && !isSelected && hasFocusStyle,\r\n 'text-blue-400': isSelected,\r\n }),\r\n }\r\n }\r\n}\r\n\r\ntype OmitNativeProps = Omit, 'label' | 'size'>\r\n\r\nexport interface InputProps {\r\n /**\r\n * Label which is rendered above the input\r\n */\r\n label?: ReactNode\r\n\r\n /**\r\n * Optional label layout switch\r\n */\r\n isHorizontalLabel?: boolean\r\n\r\n /**\r\n * Optional label className override\r\n */\r\n labelClassName?: string\r\n\r\n /**\r\n * Theme for the input\r\n *\r\n * @default light\r\n */\r\n theme?: keyof typeof InputTheme\r\n\r\n /**\r\n * Input size. This setting is ignored on mobile to avoid zoom\r\n *\r\n * @default regular\r\n */\r\n size?: keyof typeof InputSize\r\n\r\n /**\r\n * Border radius of the input\r\n *\r\n * @default regular\r\n */\r\n rounding?: keyof typeof InputRounding\r\n\r\n /**\r\n * Hide value stepper for number inputs\r\n */\r\n showNumberStepper?: boolean\r\n\r\n /**\r\n * Element to display on left the side of the input or name of the icon\r\n */\r\n leftContent?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Element to display on right the side of the input or name of the icon\r\n */\r\n rightContent?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Additional class names for the input\r\n */\r\n inputClass?: string\r\n\r\n /**\r\n * Error label to display under the input\r\n */\r\n error?: ReactNode\r\n\r\n /**\r\n * Additional info to display under the input\r\n */\r\n caption?: ReactNode\r\n\r\n /**\r\n * Disables setting text size to 16px on mobile. Only use for pages which aren’t\r\n * responsive\r\n */\r\n isMobileStyleEnabled?: boolean\r\n\r\n /**\r\n * Toggle for component focus styles\r\n *\r\n * @default true\r\n */\r\n hasFocusStyle?: boolean\r\n\r\n /**\r\n * Toggle for selected styles\r\n *\r\n * @default true\r\n */\r\n isSelected?: boolean\r\n}\r\n\r\nexport type InputHTMLProps = OmitNativeProps\r\n\r\nexport type InputComponentProps = InputProps & InputHTMLProps\r\n\r\nfunction InputComponent(\r\n {\r\n label,\r\n isHorizontalLabel,\r\n labelClassName,\r\n size = 'regular',\r\n theme = 'light',\r\n rounding = 'regular',\r\n type,\r\n showNumberStepper = type === 'number',\r\n leftContent,\r\n rightContent,\r\n inputClass,\r\n error,\r\n caption,\r\n className,\r\n isMobileStyleEnabled = true,\r\n hasFocusStyle = true,\r\n isSelected = false,\r\n ...props\r\n }: InputComponentProps,\r\n ref: ForwardedRef\r\n) {\r\n const inputTheme = useMemo(\r\n () => getInputTheme({ theme: InputTheme[theme], isError: !!error, hasFocusStyle, isSelected }),\r\n [theme, error, hasFocusStyle, isSelected]\r\n )\r\n const isLeftStringIcon = isValidIconName(leftContent)\r\n const isRightStringIcon = isValidIconName(rightContent)\r\n const inputSize = InputSize[size]\r\n\r\n const commonSideContentClassnames = useMemo(\r\n () => ({\r\n 'flex absolute w-3 items-center justify-center': true,\r\n 'text-gray-500 dark:text-gray-600': theme === 'light',\r\n 'text-gray-600': theme === 'dark',\r\n }),\r\n [theme]\r\n )\r\n\r\n return (\r\n
\r\n
\r\n \r\n {caption && typeof caption !== 'boolean' && (\r\n {caption}\r\n )}\r\n {error && typeof error !== 'boolean' && {error}}\r\n \r\n )\r\n}\r\n\r\ninterface InputCaptionProps extends Omit, 'size'> {\r\n size?: keyof typeof InputSize\r\n}\r\n\r\nfunction InputCaption({ size = 'regular', ...props }: PropsWithChildren) {\r\n return (\r\n \r\n )\r\n}\r\n\r\ntype TextareaProps = Omit & OmitNativeProps\r\n\r\nfunction TextareaComponent(\r\n {\r\n label,\r\n theme = 'light',\r\n rounding = 'regular',\r\n inputClass,\r\n error,\r\n caption,\r\n className,\r\n hasFocusStyle = true,\r\n isSelected = false,\r\n ...props\r\n }: TextareaProps,\r\n ref: ForwardedRef\r\n) {\r\n const textareaTheme = useMemo(\r\n () => getInputTheme({ theme: InputTheme[theme], isError: !!error, hasFocusStyle, isSelected }),\r\n [theme, error, hasFocusStyle, isSelected]\r\n )\r\n\r\n return (\r\n
\r\n \r\n {caption && typeof caption !== 'boolean' && (\r\n {caption}\r\n )}\r\n {error && typeof error !== 'boolean' && {error}}\r\n
\r\n )\r\n}\r\n\r\nexport const Input = forwardRef(InputComponent)\r\nexport const Textarea = forwardRef(TextareaComponent)\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, PropsWithChildren } from 'react'\r\n\r\nexport function Centered(props: PropsWithChildren>) {\r\n return
\r\n}\r\n","import { link } from '../../services/routing'\r\nimport { Button } from '../button'\r\nimport { Centered } from '../centered'\r\nimport { Icon } from '../icon'\r\nimport { Heading, Paragraph } from '../typography'\r\n\r\ninterface Props {\r\n onRetry?: () => void\r\n}\r\n\r\nexport function SearchError({ onRetry }: Props) {\r\n return (\r\n \r\n \r\n \r\n Error fetching the results\r\n \r\n \r\n There’s been an error fetching your results. Please try again or{' '}\r\n \r\n contact support\r\n \r\n .\r\n \r\n {onRetry && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import React from 'react'\r\nimport { Link, useInRouterContext } from 'react-router-dom'\r\n\r\nimport { ComboBoxItem, ComboBoxProps } from '../combo-box'\r\nimport { Highlight } from '../highlight'\r\nimport { PropsWithAs } from '../types'\r\nimport { SearchListItem } from './constants'\r\n\r\ninterface SearchItemProps extends Pick, Partial> {\r\n item: SearchListItem\r\n}\r\n\r\nfunction getItemHrefProps(item: SearchListItem, inRouterContext?: boolean) {\r\n if (item.href) {\r\n if (inRouterContext) return { as: Link, to: item.href, reloadDocument: item.reloadDocument, target: item.target }\r\n else return { as: 'a' as React.ElementType, href: item.href, target: item.target }\r\n }\r\n\r\n return undefined\r\n}\r\n\r\nexport function SearchItem({ item, state, ...props }: SearchItemProps) {\r\n const value = state.useState('value')\r\n const isInRouterContext = useInRouterContext()\r\n\r\n const itemProps = getItemHrefProps(item, isInRouterContext)\r\n\r\n return (\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 { Centered } from '../centered'\r\nimport { Spinner } from '../spinner'\r\nimport { SearchListItem } from './constants'\r\nimport { SearchItem } from './search-item'\r\n\r\ninterface SearchListProps {\r\n /**\r\n * Ariakit combobox store for managing the search list state\r\n */\r\n state: Ariakit.ComboboxStore\r\n\r\n /**\r\n * Array of items to display in the search list\r\n */\r\n items?: SearchListItem[]\r\n\r\n /**\r\n * Custom footer content shown at the bottom of the search list\r\n */\r\n footer?: React.ReactNode\r\n\r\n /**\r\n * Whether the list is currently loading\r\n *\r\n * @default false\r\n */\r\n isLoading?: boolean\r\n}\r\n\r\nexport function SearchList({\r\n state,\r\n children,\r\n items,\r\n footer,\r\n isLoading = false,\r\n}: React.PropsWithChildren) {\r\n const isOpen = state.useState('open')\r\n const hasContent = React.Children.count(children) > 0 || (items?.length ?? 0) > 0 || !!footer || isLoading\r\n const { hide } = state\r\n\r\n React.useEffect(() => {\r\n if (!hasContent && isOpen) {\r\n hide()\r\n }\r\n }, [hide, hasContent, isOpen])\r\n\r\n if (isLoading) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {children ?? items?.map((item) => )}\r\n
\r\n {footer}\r\n
\r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport * as React from 'react'\r\nimport { useNavigate } from 'react-router-dom'\r\n\r\nimport { SearchProps } from './search'\r\n\r\ninterface Props extends Pick {\r\n children: React.ReactNode\r\n}\r\n\r\nfunction getSelectedItem({\r\n value,\r\n items,\r\n}: {\r\n value?: Ariakit.ComboboxStoreProps['selectedValue']\r\n items: SearchProps['items']\r\n}) {\r\n return items?.find((item) => item.value === value)\r\n}\r\n\r\nexport function SearchNavigationWrapperInRouterContext({ state, children, items }: Props) {\r\n const navigate = useNavigate()\r\n const selectedValue = state.useState('selectedValue')\r\n React.useEffect(() => {\r\n const { href, reloadDocument } = getSelectedItem({ value: selectedValue, items }) ?? {}\r\n if (href) {\r\n if (reloadDocument) {\r\n window.location.href = href\r\n } else {\r\n navigate(href)\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [selectedValue])\r\n\r\n return children\r\n}\r\n\r\nexport function SearchNavigationWrapperOutsideRouterContext({ state, children, items }: Props) {\r\n const selectedValue = state.useState('selectedValue')\r\n React.useEffect(() => {\r\n const href = getSelectedItem({ value: selectedValue, items })?.href\r\n\r\n if (href) {\r\n window.location.href = href\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [selectedValue])\r\n\r\n return children\r\n}\r\n","import * as React from 'react'\r\nimport { useInRouterContext } from 'react-router-dom'\r\n\r\nimport { ComboBox, ComboBoxProps } from '../combo-box'\r\nimport { IconNameType } from '../icon'\r\nimport { SearchListItem } from './constants'\r\nimport { SearchError } from './search-error'\r\nimport { SearchList } from './search-list'\r\nimport {\r\n SearchNavigationWrapperInRouterContext,\r\n SearchNavigationWrapperOutsideRouterContext,\r\n} from './search-navigation-wrapper'\r\n\r\nexport interface SearchProps\r\n extends Pick<\r\n ComboBoxProps,\r\n 'state' | 'autoFocus' | 'inputProps' | 'popoverProps' | 'aria-label' | 'inputTestId' | 'getInputValue'\r\n > {\r\n /**\r\n * Array of items to display in the search list\r\n */\r\n items?: SearchListItem[]\r\n\r\n /**\r\n * Minimum length of input value before showing results\r\n *\r\n * @default 1\r\n */\r\n minValueLength?: number\r\n\r\n /**\r\n * Placeholder text for the search input\r\n */\r\n placeholder?: string\r\n\r\n /**\r\n * Content to show on the right side of the input (icon or custom element)\r\n */\r\n rightContent?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Custom footer content shown at the bottom of the search results\r\n */\r\n footer?: React.ReactNode\r\n\r\n /**\r\n * Whether to show the search icon in the input\r\n *\r\n * @default true\r\n */\r\n hasSearchIcon?: boolean\r\n\r\n /**\r\n * Whether to match the width of the input and its dropdown box\r\n */\r\n isMatchInputAndBoxWidth?: boolean\r\n\r\n /**\r\n * Whether the search is currently loading results\r\n *\r\n * @default false\r\n */\r\n isLoading?: boolean\r\n\r\n /**\r\n * Whether there was an error loading the search results\r\n *\r\n * @default false\r\n */\r\n isError?: boolean\r\n\r\n /**\r\n * Callback function to retry when there's an error\r\n */\r\n onErrorRetry?: () => void\r\n}\r\n\r\nexport function Search({\r\n state,\r\n children,\r\n items,\r\n footer,\r\n 'aria-label': ariaLabel,\r\n inputProps,\r\n popoverProps,\r\n inputTestId,\r\n minValueLength = 1,\r\n hasSearchIcon = true,\r\n isLoading = false,\r\n isError = false,\r\n onErrorRetry,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const isInRouterContext = useInRouterContext()\r\n const isMounted = state.useState('mounted')\r\n\r\n const Wrapper = isInRouterContext\r\n ? SearchNavigationWrapperInRouterContext\r\n : SearchNavigationWrapperOutsideRouterContext\r\n\r\n return (\r\n \r\n {\r\n // prevent combobox from setting input value on input blur\r\n e.preventDefault()\r\n },\r\n leftContent: hasSearchIcon ? 'search' : undefined,\r\n ...inputProps,\r\n }}\r\n popoverProps={{\r\n sameWidth: props.isMatchInputAndBoxWidth,\r\n fitViewport: !props.isMatchInputAndBoxWidth,\r\n ...popoverProps,\r\n }}\r\n inputTestId={inputTestId}\r\n getInputValue={props.getInputValue}\r\n >\r\n
\r\n {isMounted &&\r\n (isError ? (\r\n \r\n ) : (\r\n \r\n {children}\r\n \r\n ))}\r\n
\r\n \r\n
\r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\n\r\nimport { useComboBoxState } from '../combo-box'\r\n\r\nexport function useSearchComboboxState(props: Ariakit.ComboboxStoreProps = {}) {\r\n return useComboBoxState({\r\n placement: 'bottom-start',\r\n defaultSelectedValue: '',\r\n ...props,\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","export enum TooltipColor {\r\n none,\r\n green,\r\n red,\r\n orange,\r\n blue,\r\n dark,\r\n}\r\n","import classnames from 'classnames'\r\n\r\nimport { PopoverPlacement } from '../popover'\r\nimport { TooltipColor } from './types'\r\n\r\ntype PositionMain = 'auto' | 'top' | 'bottom' | 'left' | 'right'\r\n\r\nconst transformMap: Record = {\r\n auto: '',\r\n top: 'rotateZ(180deg)',\r\n right: 'rotateZ(-90deg)',\r\n bottom: 'rotateZ(360deg)',\r\n left: 'rotateZ(90deg)',\r\n}\r\n\r\ninterface TooltipArrowProps {\r\n color?: keyof typeof TooltipColor\r\n placement?: PopoverPlacement\r\n className?: string\r\n}\r\n\r\n/**\r\n * Custom arrow for the dropdown\r\n */\r\nexport function TooltipArrow({ placement, color = 'none', className }: TooltipArrowProps) {\r\n const positionMain = (placement?.split('-')[0] as PositionMain) ?? 'auto'\r\n const arrowColor = TooltipColor[color]\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { TooltipColor } from './types'\r\n\r\nexport interface TooltipBoxProps extends Omit, 'ref'> {\r\n /**\r\n * Color of the tooltip. If se to `none`, the tooltip will have default color\r\n * based on light/dark theme\r\n *\r\n * @default 'none'\r\n */\r\n color?: keyof typeof TooltipColor\r\n}\r\n\r\nexport const TooltipBox = React.forwardRef(function TooltipBox(\r\n { color = 'none', ...props }: TooltipBoxProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const tooltipColor = TooltipColor[color]\r\n\r\n return (\r\n \r\n {props.children}\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 { isIos } from '../../../app/shared/isMobile'\r\nimport { usePopoverPlacement } from '../../hooks/usePopoverPlacement'\r\nimport { TooltipStateReturn } from './hooks'\r\nimport { TooltipArrow } from './tooltip-arrow'\r\nimport { TooltipBox, TooltipBoxProps } from './tooltip-box'\r\n\r\nconst isIosBrowser = isIos()\r\n\r\nconst TOOLTIP_WRAPPER_PROPS = {\r\n className: 'pointer-events-none',\r\n}\r\n\r\nexport interface TooltipProps\r\n extends TooltipBoxProps,\r\n Pick {\r\n // State is intentionally not marked as optional so you get error when you don’t provide it\r\n /**\r\n * Returned state from `useTooltipState`. Set `undefined` if you use a `PopoverProvider` wrapper (eg. TooltipInput)\r\n */\r\n state: TooltipStateReturn | undefined\r\n\r\n /**\r\n * Determines whether or not the tooltip receives mouse events\r\n *\r\n * @default true\r\n */\r\n isPointerEventsEnabled?: boolean\r\n}\r\n\r\nexport function Tooltip({\r\n state,\r\n children,\r\n gutter = 4,\r\n hideOnHoverOutside = true,\r\n isPointerEventsEnabled = true,\r\n color = 'none',\r\n onClose,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const context = Ariakit.useTooltipContext()\r\n const stateObject = state ?? context\r\n const { placement, zIndex, updatePosition } = usePopoverPlacement(stateObject)\r\n\r\n return (\r\n isn't always rendered and way of events\r\n // firing by iOS Safari\r\n unmountOnHide={!isIosBrowser}\r\n className={classnames(\r\n zIndex,\r\n 'cursor-default opacity-0 outline-none transition duration-[250ms] will-change-transform data-[enter]:translate-x-0 data-[enter]:translate-y-0 data-[enter]:opacity-100',\r\n {\r\n 'motion-safe:translate-y-1': placement?.startsWith('top'),\r\n 'motion-safe:-translate-x-1': placement?.startsWith('right'),\r\n 'motion-safe:-translate-y-1': placement?.startsWith('bottom'),\r\n 'motion-safe:translate-x-1': placement?.startsWith('left'),\r\n }\r\n )}\r\n // Update zIndex when popover position changes\r\n updatePosition={updatePosition}\r\n >\r\n \r\n \r\n \r\n \r\n {children}\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 { TooltipStateReturn } from './hooks'\r\n\r\ninterface TooltipButtonProps extends Omit {\r\n // State is intentionally not marked as optional so you get error when you don’t provide it\r\n /**\r\n * Returned state from `useTooltipState`. Set `undefined` if you use a `TooltipProvider` wrapper (eg. TooltipInput)\r\n */\r\n state: TooltipStateReturn | undefined\r\n\r\n /**\r\n * Hides tooltip on trigger click\r\n *\r\n * @default false\r\n */\r\n isHideOnClick?: boolean\r\n\r\n /**\r\n * Whether or not the tooltip should be visible when user hovers over the trigger element\r\n *\r\n * @default true\r\n */\r\n showOnHover?: boolean\r\n\r\n /**\r\n * Whether or not the tooltip should hide when the element is blurred\r\n */\r\n hideOnBlur?: boolean\r\n}\r\n/**\r\n * The trigger button component which handles ref & focus return, etc.\r\n */\r\nexport const TooltipTrigger = React.forwardRef(\r\n (\r\n {\r\n state,\r\n isHideOnClick,\r\n showOnHover = true,\r\n hideOnBlur,\r\n onClick,\r\n onMouseEnter,\r\n onMouseLeave,\r\n ...props\r\n }: TooltipButtonProps,\r\n ref: React.ForwardedRef\r\n ) => {\r\n const context = Ariakit.useTooltipContext()\r\n const stateObject = state ?? context\r\n\r\n return (\r\n {\r\n if (isHideOnClick) stateObject?.hide()\r\n onClick?.(ev)\r\n }}\r\n showOnHover={showOnHover}\r\n onMouseEnter={(ev) => {\r\n if (showOnHover === false) ev.preventDefault()\r\n onMouseEnter?.(ev)\r\n }}\r\n onMouseLeave={(ev) => {\r\n if (showOnHover === false) ev.preventDefault()\r\n onMouseLeave?.(ev)\r\n }}\r\n onBlur={() => {\r\n if (hideOnBlur) stateObject?.hide()\r\n }}\r\n {...props}\r\n >\r\n {props.children}\r\n \r\n )\r\n }\r\n)\r\n","import * as Ariakit from '@ariakit/react'\r\n\r\ninterface TooltipProviderProps extends Omit {\r\n state?: Ariakit.TooltipProviderProps['store']\r\n}\r\n\r\nexport function TooltipProvider({ state, ...props }: TooltipProviderProps) {\r\n return \r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\n\r\n/**\r\n * Hook which provides state to tooltips\r\n */\r\nexport function useTooltipState({ showTimeout = 0, hideTimeout = 0, ...settings }: Ariakit.TooltipStoreProps = {}) {\r\n return Ariakit.useTooltipStore({\r\n ...settings,\r\n showTimeout,\r\n hideTimeout,\r\n })\r\n}\r\n\r\nexport type TooltipStateReturn = ReturnType\r\n","import * as React from 'react'\r\n\r\nimport { loadResizeObserverPolyfill } from '../util'\r\n\r\nexport function useResizeObserver() {\r\n const controller = React.useRef('AbortController' in window ? new AbortController() : undefined)\r\n const [ResizeObserver, setResizeObserver] = React.useState(\r\n () => window.ResizeObserver\r\n )\r\n\r\n React.useEffect(() => {\r\n if (typeof ResizeObserver === 'undefined') {\r\n loadResizeObserverPolyfill().then((polyfill) => {\r\n if (!controller.current?.signal.aborted) {\r\n setResizeObserver(() => polyfill)\r\n }\r\n })\r\n }\r\n }, [ResizeObserver])\r\n\r\n // Cleanup effect to abort the controller\r\n React.useEffect(() => () => controller.current?.abort(), [])\r\n\r\n return ResizeObserver\r\n}\r\n","import React from 'react'\r\n\r\nimport { PopoverPlacement } from '../components'\r\nimport { useZIndex } from '../components/dialog/hooks'\r\n\r\nfunction getPlacementZIndex(placement: PopoverPlacement) {\r\n return placement!.startsWith('top') ? 'z-dialog' : 'z-50'\r\n}\r\n\r\nfunction changeZIndex(element: HTMLElement | null, placement: PopoverPlacement, computedZIndex = '') {\r\n if (!element) return\r\n element.style.removeProperty('z-index')\r\n element.classList.remove('z-50', 'z-dialog', computedZIndex)\r\n element.classList.add(getPlacementZIndex(placement))\r\n}\r\n\r\nexport function usePopoverPlacement(context: any) {\r\n const popoverElement: HTMLDivElement | null = context.useState('popoverElement')\r\n const placement: PopoverPlacement = context.useState('currentPlacement')\r\n const contextZIndex = useZIndex(null)\r\n const computedZIndex = getPlacementZIndex(placement)\r\n\r\n const updatePosition = React.useCallback(\r\n (props: { updatePosition: () => Promise }) => {\r\n if (!popoverElement) return\r\n\r\n const overlayElement = popoverElement?.previousElementSibling as HTMLElement | null\r\n\r\n if (!contextZIndex) {\r\n changeZIndex(popoverElement, placement, computedZIndex)\r\n if (overlayElement && overlayElement.dataset.backdrop) changeZIndex(overlayElement, placement, computedZIndex)\r\n }\r\n\r\n props.updatePosition()\r\n },\r\n [popoverElement, contextZIndex, computedZIndex, placement]\r\n )\r\n\r\n return {\r\n zIndex: contextZIndex ?? computedZIndex,\r\n placement,\r\n updatePosition,\r\n }\r\n}\r\n","function getSanitizedSingleTicker(rawTicker: string, specialTickers: string[] = []) {\r\n return rawTicker\r\n .replace(/\\.+/gi, '-')\r\n .split('-')\r\n .map((x) => {\r\n if (specialTickers.includes(x.toUpperCase())) return x\r\n return x.replace(/([^a-z0-9@-])+/gi, '')\r\n })\r\n .filter((x) => !!x)\r\n .join('-')\r\n .toUpperCase()\r\n}\r\n\r\nexport function getSanitizedTicker(rawTicker: string, isMulti = false, specialTickers: string[] = []) {\r\n if (isMulti) {\r\n return rawTicker\r\n .replace(/ /g, ',')\r\n .split(',')\r\n .map((x) => getSanitizedSingleTicker(x, specialTickers))\r\n .filter((x) => !!x)\r\n .join(',')\r\n }\r\n\r\n return getSanitizedSingleTicker(rawTicker, specialTickers)\r\n}\r\n"],"names":["MarketBadgeType","getMarketBadgeText","type","_date","Open","label","Closed","Premarket","Aftermarket","MarketBadge","_ref","badge","className","None","_jsx","classnames","includes","UPDATE_INTERVAL","TimeBreakpointMode","BREAKPOINTS","minWidth","Infinity","marketBadgeText","timeFormat","getTimeState","fixedTime","hasUserPremium","arguments","length","undefined","FinvizSettings","time","getDate","isHoliday","isPremarket","isAftermarket","getMarketBadgeType","TooltipBadge","props","state","useTooltipState","placement","_jsxs","_Fragment","children","TooltipTrigger","Tooltip","Heading","level","StaticBadge","findMatchingBreakpoint","compareWidth","breakpoints","_matchingBreakpoints$","filter","breakpoint","pop","getCurrentWidth","mode","element","_element$clientWidth","window","innerWidth","clientWidth","Time","breakpointMode","ResizeObserver","useResizeObserver","rootRef","React","setState","currentBreakpoint","setBreakpoint","interval","setInterval","clearInterval","current","currentWidth","handleResize","throttle","foundBreakpoint","observer","entries","requestAnimationFrame","Array","isArray","observe","addEventListener","disconnect","removeEventListener","ref","getFormattedDateString","seed","date","Date","dateAsNY","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","isDst","dayNumber","monthIndex","getMonth","previousSunday","getDay","getIsDstInNy","setUTCHours","getWeekDay","toLocaleDateString","weekday","uppercase","name","month","toUpperCase","toString","padStart","getTime","toLocaleString","hour","minute","hour12","TimeFormat","long","getFullYear","short","dateOnly","timeOnly","formatDate","value","inputOrOutputFormat","outputFormat","dateFns","isPremium","dayOfWeek","min","getMinutes","hours","getHours","HOLIDAY_DATES","test","day","find","holiday","getHoliday","getEarningsDateSuffix","matchesAndroid","navigator","userAgent","match","matchesWebOS","matchesIPhone","matchesiPad","matchesIPod","matchesBlackBerry","matchesWindowsPhone","matchesIOSLike","maxTouchPoints","matchesFirefox","matchesSafariDesktopLike","isMobileDevice","isMobile","isIphone","isIpad","isSafariDesktop","isIos","isFirefoxDesktop","TickerSearchItem","item","dataTestId","useState","ComboBoxItem","ticker","contentClass","Highlight","text","highlight","company","exchange","getRedirectForTicker","tickerRaw","_FinvizSettings$quote","getSanitizedTicker","redirectLink","cleanTicker","getInstrumentForTicker","Instrument","Stock","link","toQuote","Forex","toForexChartDetail","Futures","toFuturesChartDetail","Crypto","toCryptoChartDetail","toSearch","quoteSearchExt","TickerSearch","_props$defaultPlaceme","_props$placeholder","isShowAllVisible","isSearchItemLink","chartIndex","searchComboboxState","useSearchComboboxState","defaultValue","defaultPlacement","setSelectedValue","_props$onTickerSelect","location","href","onTickerSelected","call","setTimeout","setValue","activeValue","data","error","isLoading","refetch","useQuery","searchApiRequest","enabled","keepPreviousData","cacheTime","staleTime","Search","inputProps","theme","maxLength","hasFocusStyle","size","placeholder","inputClass","rightContent","popoverProps","isMatchInputAndBoxWidth","inputTestId","footer","Button","as","encodeURIComponent","isError","onErrorRetry","map","BoxRounding","BoxTheme","Box","rounding","ColorVariant","CheckboxSize","CheckboxComponent","_props$checked","color","default","checked","defaultChecked","disabled","violet","emerald","orange","teal","pink","lime","purple","green","yellow","blue","red","gray","dark","Icon","width","Checkbox","forwardRef","clamp","num","max","isTouch","event","getRelativePosition","node","rect","getBoundingClientRect","pointer","touches","left","pageX","pageXOffset","top","pageY","pageYOffset","height","preventDefaultMove","preventDefault","DraggablePickerComponent","onMove","onKey","container","useRef","hasTouched","isDragging","setDragging","isValid","handleMove","useCallback","buttons","handleMoveStart","_ref2","nativeEvent","handleKeyDown","keyCode","which","handleMoveEnd","toggleDocumentEvents","toggleEvent","useLayoutEffect","onTouchStart","onMouseDown","onKeyDown","tabIndex","DraggablePicker","memo","Pointer","style","backgroundColor","hexStringToRGBA","hexString","hexColor","removeHashSymbol","r","g","b","a","Number","Math","round","hexStringToHSVA","rgbaToHSVA","alphaToHex","alpha","rgbaToHexString","hsvaToHEXString","hsvaToRGBA","v","c","h","s","f","n","k","rgbaToRGBAString","rgbaStringToObject","colorParts","exec","slice","String","parseInt","parseFloat","strColor","replace","isValidColor","isRgb","startsWith","Option","convertColorToHEX","getIsRgb","rgbKeys","push","some","getHSVAFromColor","Alpha","onChange","changeLightness","pos","gradientPreview","useMemo","backgroundImage","DEFAULT_COLORS","title","ColorPalette","colors","lowerCaseColor","toLowerCase","colorObj","isSelected","onClick","HueSaturation","position","getPositionFromHSLA","colorPreview","changeSaturation","Lightness","ColorPreview","icon","isTooLight","getLumaFromRGBA","getIsColorTooLightOrTransparent","isValidIconName","index","PickerInput","hasColorPreview","colorInput","setColorInput","colorUtil","isRgba","useEffect","handleColorInputChange","currentTarget","colorValue","Input","leftContent","ColorPicker","canSelectCustom","canSelectAlpha","onPaletteItemClick","cachedColor","hsvaColor","setColor","popover","Ariakit","input","currentColor","newColor","onChangeCallback","stringColor","output","onSetCustomCodeClick","_prompt","prompt","trim","alert","_hex","orignalColor","focus","preventScroll","InputColorPicker","inputDataTestId","popoverState","usePopoverState","PopoverTrigger","render","Popover","hideOnInteractOutside","backdrop","hide","MultiColorPicker","colorInputLabel","ColorTabButton","ButtonRounding","small","ButtonColorPicker","_ref3","buttonPickerDataTestId","isOpen","isMultiPicker","activeColorIndex","setActiveColorIndex","handleColorChange","originalColor","colorObject","appearance","active","_ref4","ButtonGroup","childComponent","hasDivider","_ref5","ComboBox","_props$autoFocus","ariaLabel","minValueLength","getInputValue","isMounted","inputValue","store","autoFocus","ev","_inputProps$onKeyDown","key","portal","gutter","unmountOnHide","DEFAULT_ELEMENT","ComboBoxItemButton","asComponent","dataActiveItem","align","ComboBoxItemButtonWithRef","useComboBoxState","CopyToClipboard","bottomLeftContent","isCopied","setIsCopied","handleCopyToClipboard","copy","timeout","resetTimer","clearTimeout","Textarea","readOnly","e","select","ZIndexContext","useZIndex","_React$useContext","useDialogState","settings","DialogDragContext","handleRef","boxPosition","x","y","resetBoxPosition","setBoxPosition","useDrag","dragging","handleElement","boxPositionRef","dragDiff","scrollX","scrollY","onMouseUp","onMouseMove","document","body","DropdownRounding","DropdownTheme","StatelessDropdown","trigger","modal","showOnHover","autoFocusOnShow","autoFocusOnHide","onFullyOpen","onFullyClosed","zIndex","updatePosition","usePopoverPlacement","isFullyOpen","setIsFullyOpen","wasMounted","usePrevious","menuGutter","parent","focusable","hideOnHoverOutside","preventBodyScroll","focusWithoutScroll","blurWithoutScroll","classNames","none","onTransitionEnd","target","Dropdown","orientation","focusLoop","virtualFocus","DropdownItemComponent","OptionButton","DropdownItem","useDropdownState","indexOf","processedText","before","substring","after","ContextMenuInner","items","onClose","onContextMenu","MenuGroup","options","id","_item$onClick","_window$gtag","_window","gtag","Object","assign","menu_option","ContextMenu","ChartGridCell","gridArea","GridLayout","columns","rows","border","gridTemplateColumns","gridTemplateRows","ChartGrid","defaultValueAccessor","InnerState","valueKey","changeKey","valueAccessor","handleChange","RangeSize","RangeSlider","step","inputClassName","hasTrack","setHasTrack","trackRef","thumbRef","Boolean","thumbLeft","track","thumb","valuePercent","trackBox","thumbBox","Label","ToolbarTheme","ToolbarDirection","ToolbarContext","direction","vertical","chipTransparent","isWrapped","isStretched","useToolbarContext","getToolbarSettings","hasRedesignEnabled","horizontal","alternative","Toolbar","hasFocusRings","toolbarRef","contextProviderValue","toolbarSettings","forceReflow","originalWidth","offsetWidth","showTimeout","hideTimeout","Provider","querySelector","el","ToolbarButton","_props$appearance","_buttonSettings$size","_props$children","disabledTooltip","isInAction","isInActionProp","context","iconAction","buttonSettings","isActive","includeRedesign","grow","getButtonThemeSettings","getMainIcon","iconActive","menubar","blurOnHoverEnd","titleActive","Delayed","delay","delayComponent","Spinner","isMobileBrowser","ToolbarGroup","defaultItem","groupItems","groupTitle","useNativeSelect","rowId","selectedItem","setSelectedItem","groupId","toLocaleLowerCase","isAlternativeTheme","menu","menuButton","setMenuButton","open","mounted","anchorElement","parentMenu","menuContentElement","hideMenu","onMouseLeave","showMenu","show","handleMenuOpen","setDisclosureElement","setAnchorElement","NativeSelect","option","findIndex","onFocusVisible","onPointerDown","portalElement","ToolbarItem","isItemActive","ToolbarDivider","StepContent","Paragraph","shepherdLibrary","async","loadShepherdLibrary","setLoading","shepherdPromise","buttonClasses","BUTTON_BASE_CLASS","BUTTON_FOCUS_STYLES","ButtonSize","regular","getStepButtons","tour","arr","_step$backButton","_step$nextButton","action","complete","classes","getButtonTheme","ButtonTheme","light","button","ButtonPadding","back","backButton","next","nextButton","getTourKey","pathname","getStepsForUser","tours","_localStorage","lastFinishedTour","localStorage","getItem","lastTourIndex","allToursViewed","every","skip","toursToView","hasNewTours","reduce","acc","steps","initialTour","completeTour","_localStorage2","setItem","DEFAULT_OPTIONS","exitOnEsc","useModalOverlay","useTour","setIsLoading","currentTour","setTour","controller","AbortController","loadingSetter","_controller$current","signal","aborted","_controller$current2","abort","startTour","definition","_controller$current3","setComplete","tourUtils","_definition$initialTo","Tour","from","forEach","removeStep","processedSteps","_step$placement","_step$offset","_step$overlayRadius","_step$overlayPadding","attachTo","on","popperOptions","modifiers","offset","ReactDOM","modalOverlayOpeningRadius","overlayRadius","modalOverlayOpeningPadding","overlayPadding","addSteps","start","event_label","TabSpacing","InternalTab","ariaSelected","spacing","content","Tab","TabList","TabPanel","Tabs","BadgeSize","BadgePadding","Badge","padding","badgePadding","badgeSize","TagSize","TagPadding","TagFont","Tag","tagPadding","tagSize","tagFont","InputTheme","InputRounding","InputSize","getInputTheme","navigationBar","InputComponent","isHorizontalLabel","labelClassName","showNumberStepper","caption","isMobileStyleEnabled","inputTheme","isLeftStringIcon","isRightStringIcon","inputSize","commonSideContentClassnames","isHorizontal","medium","large","InputCaption","TextareaComponent","textareaTheme","Centered","SearchError","onRetry","toContact","SearchItem","itemProps","inRouterContext","Link","to","reloadDocument","getItemHrefProps","useInRouterContext","SearchList","_items$length","hasContent","count","getSelectedItem","SearchNavigationWrapperInRouterContext","navigate","useNavigate","selectedValue","_getSelectedItem","SearchNavigationWrapperOutsideRouterContext","_getSelectedItem2","hasSearchIcon","isInRouterContext","Wrapper","autoComplete","autoCorrect","autoCapitalize","onBlur","sameWidth","fitViewport","defaultSelectedValue","TooltipInputComponent","tooltipSettings","isInteractive","isPointerEventsEnabled","hideOnBlur","TooltipInput","TooltipColor","transformMap","auto","right","bottom","TooltipArrow","positionMain","split","arrowColor","xmlns","viewBox","transform","d","TooltipBox","tooltipColor","isIosBrowser","TOOLTIP_WRAPPER_PROPS","stateObject","wrapperProps","isHideOnClick","onMouseEnter","TooltipProvider","setResizeObserver","loadResizeObserverPolyfill","then","polyfill","getPlacementZIndex","changeZIndex","computedZIndex","removeProperty","classList","remove","add","popoverElement","contextZIndex","overlayElement","previousElementSibling","dataset","getSanitizedSingleTicker","rawTicker","specialTickers","join"],"sourceRoot":""}