{"version":3,"file":"main.cf1ba6da.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/queryString.ts","webpack://@finviz/website/./js/app/shared/cookie.ts","webpack://@finviz/website/./js/app/shared/sentry/constants.ts","webpack://@finviz/website/./js/app/shared/sentry/init.ts","webpack://@finviz/website/./js/app/shared/utils.ts","webpack://@finviz/website/./js/main/components/button.tsx","webpack://@finviz/website/./js/main/components/delayed.tsx","webpack://@finviz/website/./js/main/components/error-view.tsx","webpack://@finviz/website/./js/main/components/icon/icon.tsx","webpack://@finviz/website/./js/main/components/icon/index.tsx","webpack://@finviz/website/./js/main/components/loading.tsx","webpack://@finviz/website/./js/main/components/notification/hooks.ts","webpack://@finviz/website/./js/main/components/notification/notification-wrapper.tsx","webpack://@finviz/website/./js/main/components/notification/with-notification-context.tsx","webpack://@finviz/website/./js/main/components/notification/notification.tsx","webpack://@finviz/website/./js/main/components/spinner.tsx","webpack://@finviz/website/./js/main/components/typography.tsx","webpack://@finviz/website/./js/main/constants.ts","webpack://@finviz/website/./js/main/context.ts","webpack://@finviz/website/./js/main/hooks/useCachedLoaderData.tsx","webpack://@finviz/website/./js/main/hooks/useVisualViewport.ts","webpack://@finviz/website/./js/main/QuoteRoutesSwitch.tsx","webpack://@finviz/website/./js/main/index.tsx","webpack://@finviz/website/./js/main/services/api.ts","webpack://@finviz/website/./js/main/services/routing.ts","webpack://@finviz/website/./js/main/types.ts","webpack://@finviz/website/./js/main/util.tsx","webpack://@finviz/website/../node_modules/react-router-dom/dist/index.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/5KB2YIDT.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/JJ3MV4KB.js"],"sourcesContent":["export type ObjectHash = Record\r\n\r\nexport const decodeQueryString = function = ObjectHash>(\r\n search = window.location.search\r\n): T {\r\n const vars = search.substring(1).split('&')\r\n const obj: ObjectHash = {}\r\n vars.forEach((pair) => {\r\n const delimiterPos = pair.indexOf('='),\r\n key = decodeURIComponent(pair.substring(0, delimiterPos)),\r\n value = decodeURIComponent(pair.substring(delimiterPos + 1))\r\n obj[key] = value\r\n })\r\n return obj as T\r\n}\r\n\r\nexport const encodeQueryString = function (values: ObjectHash, whitelistedValues: string[] = []) {\r\n return Object.keys(values).reduce((prev, key) => {\r\n const value = values[key]\r\n if (!['', null, undefined].includes(value) || whitelistedValues.includes(value)) {\r\n return prev + (prev.length > 0 ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value)\r\n }\r\n return prev\r\n }, '')\r\n}\r\n","export function getParsedCookies(cookieName: string) {\r\n const parseCookies = document.cookie\r\n .split(';')\r\n .map((cookieString) => cookieString.split('='))\r\n .reduce(\r\n (acc, v) => {\r\n acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim())\r\n return acc\r\n },\r\n {} as Record\r\n )\r\n\r\n return cookieName ? parseCookies[cookieName] : parseCookies\r\n}\r\n\r\nexport function getCookie(name: string) {\r\n var re = new RegExp('(?:(?:^|.*;\\\\s*)' + name + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$')\r\n return document.cookie.replace(re, '$1')\r\n}\r\n\r\nexport function setCookie(name: string, value: string, expires: Date) {\r\n var cookie = name + '=' + value + '; expires=' + expires.toUTCString()\r\n if (/\\bfinviz\\b/.test(document.location.hostname)) {\r\n cookie += '; domain=.finviz.com'\r\n }\r\n document.cookie = cookie\r\n}\r\n","import {\r\n dedupeIntegration,\r\n extraErrorDataIntegration,\r\n httpClientIntegration,\r\n thirdPartyErrorFilterIntegration,\r\n} from '@sentry/browser'\r\n\r\nexport const sentryOptions = {\r\n dsn: 'https://11de51e753454212a2845e5899a38cae@sentry.io/33153',\r\n allowUrls: [/finviz\\.com/, /www\\.finviz\\.com/, /elite\\.finviz\\.com/],\r\n release: typeof window !== 'undefined' && 'FinvizSentrySettings' in window ? FinvizSentrySettings.release : undefined,\r\n sendDefaultPii: true,\r\n integrations: [\r\n dedupeIntegration(),\r\n extraErrorDataIntegration(),\r\n httpClientIntegration(),\r\n thirdPartyErrorFilterIntegration({\r\n filterKeys: ['finviz'], //NOTE: same application keys as specified in Sentry bundle plugin `webpack.config.js` -> `sentryWebpackPlugin`\r\n behaviour: 'apply-tag-if-exclusively-contains-third-party-frames',\r\n }),\r\n ],\r\n ignoreErrors: [\r\n 'TypeError: Failed to fetch',\r\n 'TypeError: NetworkError when attempting to fetch resource.',\r\n 'ChunkLoadError: Loading chunk',\r\n 'Error: Loading CSS chunk',\r\n /^TypeError: Load failed$/,\r\n ],\r\n}\r\n","import * as Sentry from '@sentry/browser'\r\n\r\nimport { ThrowableError } from '../../../main/services/api'\r\nimport { sentryOptions } from './constants'\r\n\r\nif ('FinvizSentrySettings' in window && !('sentryDisabled' in window)) {\r\n Sentry.init({\r\n ...sentryOptions,\r\n beforeSend(event: Sentry.ErrorEvent, hint: Sentry.EventHint) {\r\n const error = hint.originalException as Error\r\n\r\n // Track throwable errors as `info` if the status is 520+\r\n if (error instanceof ThrowableError && error.status >= 520) {\r\n // Completely ignore 524 errors\r\n if (error.status === 524) return null\r\n return { ...event, level: 'info' } satisfies Sentry.ErrorEvent\r\n }\r\n\r\n if (error?.stack?.includes('cmp2.js') && error.message.match(/(AbortError|NetworkError|aborted|network)/i)) {\r\n return null\r\n }\r\n\r\n return event\r\n },\r\n })\r\n\r\n if (FinvizSentrySettings.id > 0) {\r\n Sentry.setUser({ id: String(FinvizSentrySettings.id) })\r\n }\r\n\r\n try {\r\n Sentry.setTags({\r\n dpr: window.devicePixelRatio,\r\n redesign: window.FinvizSettings?.hasRedesignEnabled,\r\n dark: window.FinvizSettings?.hasDarkTheme,\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n } catch {}\r\n}\r\n\r\nwindow['Sentry'] = {\r\n captureException: Sentry.captureException,\r\n captureMessage: Sentry.captureMessage,\r\n withScope: Sentry.withScope,\r\n}\r\n","import { setCookieRequest } from '../../main/services/api'\r\nimport { decodeQueryString, encodeQueryString } from '../queryString'\r\nimport { getCookie, setCookie } from './cookie'\r\n\r\nexport const formatDateToStringUS = (date: Date) =>\r\n date.toLocaleDateString('en-US', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n })\r\n\r\nconst DRAWING_QUOTE_PAGE_COOKIE_NAME = 'charts-draw'\r\nexport function getIsDrawingEnabledOnQuotePage() {\r\n return getCookie(DRAWING_QUOTE_PAGE_COOKIE_NAME) === 'on'\r\n}\r\n\r\nexport async function setIsDrawingEnabledOnQuotePage(isEnabled: boolean) {\r\n return setCookieRequest(DRAWING_QUOTE_PAGE_COOKIE_NAME, isEnabled ? 'on' : 'off')\r\n .catch(() => {\r\n // fallback to JS otherwise draw toggle won't work if API doesn't work\r\n setIsDrawingEnabledOnQuotePageCookieViaJS(isEnabled)\r\n })\r\n .finally(() => {\r\n const { i: idea, ...rest } = decodeQueryString()\r\n if (idea) {\r\n document.location = `quote.ashx?${encodeQueryString(rest)}`\r\n } else {\r\n document.location.reload()\r\n }\r\n })\r\n}\r\n\r\nfunction setIsDrawingEnabledOnQuotePageCookieViaJS(isEnabled: boolean) {\r\n const expires = new Date()\r\n expires.setMonth(expires.getMonth() + 1)\r\n setCookie(DRAWING_QUOTE_PAGE_COOKIE_NAME, isEnabled ? 'on' : 'off', expires)\r\n}\r\n\r\nexport function parseInitData(elementId: string): T | undefined {\r\n try {\r\n const initDataElement = document.getElementById(elementId)!\r\n return JSON.parse(initDataElement.textContent!)\r\n } catch (e) {\r\n Sentry.captureException(e)\r\n return\r\n }\r\n}\r\n\r\nexport function getSidebarFromCookie() {\r\n const chartsUrl = getCookie('chartsUrl')\r\n const decodedCookie = chartsUrl ? decodeQueryString<{ sidebar?: string }>(chartsUrl) : null\r\n return decodedCookie?.sidebar || undefined\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Icon, IconNameType, isValidIconName } from './icon'\r\nimport { PropsWithAs } from './types'\r\n\r\nexport const BUTTON_DEFAULT_ELEMENT = 'button'\r\n\r\nexport const BUTTON_BASE_CLASS =\r\n 'group/button flex shrink-0 items-center justify-center font-medium whitespace-nowrap focus:outline-none'\r\nexport const BUTTON_SQUARE_BASE_CLASS = 'shrink-0 justify-center'\r\nexport const BUTTON_FOCUS_STYLES = 'focus-visible:ring-2 ring-gray-200 dark:ring-gray-500'\r\n\r\nexport enum ButtonSize {\r\n none = '', // Do not set fixed dimensions\r\n xxsmall = 'text-info h-4 min-w-4', // 16px height\r\n xsmall = 'text-2xs h-5 min-w-5', // 20px height\r\n small = 'text-2xs h-6 min-w-6', // 24px height\r\n regular = 'text-2xs h-7 min-w-7', // 28px height\r\n medium = 'text-sm h-8 min-w-8', // 32px height\r\n large = 'text-sm h-9 min-w-9', // 36px height\r\n}\r\n\r\n// Must have the same keys as ButtonSize\r\nexport enum ButtonPadding {\r\n none = '',\r\n xxsmall = 'px-0.5', // 2px padding\r\n xsmall = 'px-1', // 4px padding\r\n small = 'px-1.5', // 6px padding\r\n regular = 'px-2', // 8px padding\r\n medium = 'px-2.5', // 10px padding\r\n large = 'px-3', // 12px padding\r\n}\r\n\r\nexport enum ButtonAlign {\r\n none = '',\r\n left = 'text-left',\r\n center = 'text-center',\r\n right = 'text-right',\r\n}\r\n\r\nexport type ButtonSizeType = keyof typeof ButtonSize\r\n\r\nexport enum ButtonSquareSize {\r\n none = '', // Do not set fixed dimensions\r\n xxsmall = 'h-4 w-4', // 16x16px\r\n xsmall = 'h-5 w-5', // 20x20px\r\n small = 'h-6 w-6', // 24x24px\r\n regular = 'h-7 w-7', // 28x28px\r\n medium = 'h-8 w-8', // 32x32px\r\n large = 'h-9 w-9', // 36x36px\r\n}\r\n\r\nexport enum ButtonRounding {\r\n none = '',\r\n small = 'rounded', // 4px\r\n regular = 'rounded-md', // 6px\r\n full = 'rounded-full', // 9999px\r\n}\r\n\r\nexport type ButtonRoundingType = keyof typeof ButtonRounding\r\n\r\nexport enum ButtonTheme {\r\n transparent, // Only basic shape is rendered\r\n light,\r\n lightTransparent,\r\n dark,\r\n blue,\r\n violet,\r\n blueHover,\r\n red,\r\n headerItem,\r\n menuItem,\r\n menuItemTransparent,\r\n menuItemDark,\r\n opacity,\r\n outline,\r\n chipTransparent,\r\n chip,\r\n link,\r\n linkText,\r\n tab,\r\n}\r\n\r\nexport type ButtonThemeType = keyof typeof ButtonTheme\r\n\r\n/**\r\n * Get button theme\r\n */\r\nexport function getButtonTheme(theme: ButtonTheme, active = false) {\r\n switch (theme) {\r\n case ButtonTheme.light: {\r\n return {\r\n button: classnames(\r\n 'border border-transparent active:bg-gray-200/90 disabled:bg-gray-200/30 disabled:text-gray-400 disabled:hover:bg-gray-200/30 disabled:hover:text-gray-400', // Light\r\n 'dark:active:bg-gray-500/90 dark:disabled:bg-gray-500/30 dark:disabled:text-gray-300 dark:disabled:hover:bg-gray-500/30 dark:disabled:hover:text-gray-300', // Dark\r\n {\r\n 'bg-gray-200/30 hover:bg-gray-200/50 dark:bg-gray-500/30 dark:hover:bg-gray-500/50': !active,\r\n 'bg-gray-200/90 dark:bg-gray-500/90': active,\r\n }\r\n ),\r\n }\r\n }\r\n case ButtonTheme.lightTransparent: {\r\n return {\r\n button: classnames(\r\n 'border border-transparent active:bg-gray-200/90 disabled:bg-transparent disabled:text-gray-400 disabled:hover:bg-transparent disabled:hover:text-gray-400', // Light\r\n 'dark:active:bg-gray-500/90 dark:disabled:bg-gray-500/30 dark:disabled:text-gray-300 dark:disabled:hover:bg-gray-500/30 dark:disabled:hover:text-gray-300', // Dark\r\n {\r\n 'bg-transparent hover:bg-gray-200/50 dark:bg-gray-500/30 dark:hover:bg-gray-500/50': !active,\r\n 'bg-gray-200/90 dark:bg-gray-500/90': active,\r\n }\r\n ),\r\n }\r\n }\r\n case ButtonTheme.dark: {\r\n return {\r\n button: classnames(\r\n 'border border-transparent text-gray-50 active:bg-gray-500/90 disabled:bg-gray-500/30 disabled:text-gray-300 disabled:hover:bg-gray-500/30 disabled:hover:text-gray-300',\r\n {\r\n 'bg-gray-500/30 hover:bg-gray-500/50': !active,\r\n 'bg-gray-500/90': active,\r\n }\r\n ),\r\n }\r\n }\r\n case ButtonTheme.blue: {\r\n return {\r\n button: classnames(\r\n 'border border-transparent text-white hover:text-white active:bg-blue-600 disabled:bg-blue-200 dark:disabled:text-gray-300 disabled:hover:bg-blue-200 dark:disabled:hover:text-gray-300',\r\n {\r\n 'bg-blue-400 hover:bg-blue-500': !active,\r\n 'bg-blue-600': active,\r\n }\r\n ),\r\n }\r\n }\r\n case ButtonTheme.violet: {\r\n return {\r\n button: classnames(\r\n 'text-white hover:text-white focus:text-white disabled:bg-violet-200 dark:disabled:text-gray-300 disabled:hover:bg-violet-200 dark:disabled:hover:text-gray-300',\r\n {\r\n 'bg-violet-400 hover:bg-violet-500': !active,\r\n 'bg-violet-600': active,\r\n }\r\n ),\r\n }\r\n }\r\n case ButtonTheme.blueHover: {\r\n return {\r\n button: classnames(\r\n 'border border-transparent active:bg-blue-600 disabled:bg-blue-200 disabled:text-gray-400 dark:disabled:text-gray-300 disabled:hover:bg-blue-200 disabled:hover:text-gray-400 dark:disabled:hover:text-gray-300',\r\n {\r\n 'text-blue-600 hover:bg-blue-400 hover:text-white dark:text-blue-500 dark:hover:text-white': !active,\r\n 'bg-blue-400 text-white': active,\r\n }\r\n ),\r\n }\r\n }\r\n case ButtonTheme.red: {\r\n return {\r\n button: classnames(\r\n 'border border-transparent text-white active:bg-red-600 disabled:bg-red-200 disabled:text-gray-300 disabled:hover:bg-red-200 disabled:hover:text-gray-300',\r\n {\r\n 'bg-red-400 hover:bg-red-500': !active,\r\n 'bg-red-600': active,\r\n }\r\n ),\r\n }\r\n }\r\n case ButtonTheme.headerItem: {\r\n return {\r\n button: classnames(\r\n 'border border-transparent bg-gray-800 text-gray-300 hover:bg-gray-900 hover:text-white disabled:hover:text-gray-300 disabled:bg-gray-700 disabled:hover:bg-gray-700' // Base\r\n ),\r\n icon: 'text-white',\r\n }\r\n }\r\n case ButtonTheme.menuItem: {\r\n return {\r\n button: classnames(\r\n 'border border-transparent dark:disabled:hover:bg-transparent disabled:hover:bg-transparent',\r\n {\r\n 'hover:bg-gray-200/30 disabled:text-gray-400 disabled:hover:text-gray-400 dark:hover:bg-gray-500/30':\r\n !active,\r\n 'bg-gray-200/30 dark:bg-gray-500/30': active,\r\n }\r\n ),\r\n }\r\n }\r\n case ButtonTheme.menuItemTransparent: {\r\n return {\r\n button: 'border border-transparent',\r\n }\r\n }\r\n case ButtonTheme.menuItemDark: {\r\n return {\r\n button: classnames('border border-transparent text-white dark:disabled:hover:bg-transparent', {\r\n 'hover:bg-gray-700': !active,\r\n 'bg-gray-700': active,\r\n }),\r\n }\r\n }\r\n case ButtonTheme.opacity:\r\n return {\r\n button: classnames(\r\n 'border border-transparent disabled:opacity-50 disabled:hover:opacity-50 dark:text-gray-400',\r\n {\r\n 'opacity-70 hover:opacity-100': !active,\r\n }\r\n ),\r\n }\r\n case ButtonTheme.outline:\r\n return {\r\n button: classnames(\r\n // Base styles\r\n 'bg-primary border disabled:border-gray-100 disabled:bg-gray-50 disabled:text-gray-500 disabled:hover:border-gray-100 disabled:hover:bg-gray-50 disabled:hover:text-gray-500',\r\n // Dark styles\r\n 'dark:bg-gray-800 dark:text-gray-50 dark:disabled:border-transparent dark:disabled:bg-gray-700 dark:disabled:text-gray-400 dark:disabled:hover:border-transparent dark:disabled:hover:bg-gray-700 dark:disabled:hover:text-gray-400',\r\n {\r\n 'border-blue-400 dark:border-blue-400': active,\r\n 'border-gray-100 hover:border-gray-300 dark:hover:border-gray-400 dark:border-gray-600': !active,\r\n }\r\n ),\r\n }\r\n case ButtonTheme.chip:\r\n return {\r\n button: classnames('border dark:disabled:hover:bg-gray-700 disabled:hover:bg-gray-50', {\r\n 'border-transparent bg-gray-200/30 hover:bg-gray-200/30 dark:bg-gray-700 dark:hover:bg-gray-500/30': !active,\r\n 'border-blue-400 bg-blue-50 text-gray-900 dark:border-blue-400 dark:bg-gray-500/30 dark:text-white': active,\r\n }),\r\n }\r\n case ButtonTheme.chipTransparent:\r\n return {\r\n button: classnames(\r\n 'border dark:disabled:hover:bg-transparent disabled:hover:bg-transparent dark:disabled:hover:text-gray-400 disabled:hover:text-gray-500', // Base styles\r\n {\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 !active,\r\n 'border-blue-400 bg-blue-50 text-gray-900 dark:bg-gray-500/30 dark:text-white': active,\r\n }\r\n ),\r\n }\r\n case ButtonTheme.link: {\r\n return {\r\n button: classnames(\r\n 'border border-transparent disabled:text-blue-500/50 disabled:hover:text-blue-500/50', // Light\r\n 'dark:disabled:text-blue-300/50 dark:disabled:hover:text-blue-300/50', // Dark\r\n {\r\n 'text-blue-500 hover:text-blue-600 dark:text-blue-300 dark:hover:text-blue-200': !active,\r\n 'bg-blue-50 text-blue-600 dark:bg-blue-700 dark:text-white': active,\r\n }\r\n ),\r\n }\r\n }\r\n case ButtonTheme.linkText: {\r\n return {\r\n button:\r\n 'text-inherit font-normal hover:text-blue-600 dark:hover:text-blue-200 no-underline hover:underline disabled:opacity-50 disabled:hover:opacity-50',\r\n }\r\n }\r\n case ButtonTheme.tab: {\r\n return {\r\n button: classnames('border-b', {\r\n 'border-b-gray-100 text-default dark:border-b-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 dark:hover:border-b-gray-600':\r\n !active,\r\n 'text-blue-500 border-b-blue-400 shadow-blue-400 shadow-[inset_0_-1px_0] dark:text-blue-300': active,\r\n }),\r\n }\r\n }\r\n default:\r\n return {}\r\n }\r\n}\r\n\r\n/**\r\n * Export Button html props type so we don’t always have to omit\r\n */\r\nexport type ButtonHTMLProps = Omit<\r\n React.HTMLProps,\r\n 'ref' | 'type' | 'size' | 'content' | 'align' | 'as'\r\n>\r\n\r\nexport interface ButtonProps {\r\n /**\r\n * Visual appearance of the button\r\n */\r\n theme?: ButtonThemeType\r\n\r\n /**\r\n * Sets if button is square or normal.\r\n *\r\n * @default 'regular'\r\n */\r\n appearance?: 'regular' | 'square'\r\n\r\n /**\r\n * Size of the button\r\n *\r\n * @default \"regular\"\r\n */\r\n size?: ButtonSizeType\r\n\r\n /**\r\n * Override align of the text for a button\r\n *\r\n * @default center, left when `leftContent` or `rightContent` are defined\r\n */\r\n align?: keyof typeof ButtonAlign\r\n\r\n /**\r\n * Override button padding\r\n *\r\n * @default undefined\r\n */\r\n padding?: keyof typeof ButtonPadding\r\n\r\n /**\r\n * Render button in an active state (darker background, etc.)\r\n */\r\n active?: boolean\r\n\r\n /**\r\n * Sets if the button has focus ring\r\n *\r\n * @default true\r\n */\r\n focusRing?: boolean\r\n\r\n /**\r\n * Sets rounded corners for the button\r\n *\r\n * @default regular\r\n */\r\n rounding?: ButtonRoundingType\r\n\r\n /**\r\n * Class for the content wrapper\r\n */\r\n contentClass?: string\r\n\r\n /**\r\n * Name of left icon\r\n */\r\n leftContent?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Name of right icon\r\n */\r\n rightContent?: JSX.Element | IconNameType\r\n}\r\n\r\nexport type ButtonComponentProps =\r\n PropsWithAs & ButtonProps\r\n\r\nfunction ButtonComponent(\r\n {\r\n as: asComponent,\r\n theme = 'light',\r\n size = 'regular',\r\n rounding = 'regular',\r\n focusRing = true,\r\n appearance = 'regular',\r\n align,\r\n padding = size, // same as size\r\n active,\r\n contentClass,\r\n leftContent,\r\n rightContent,\r\n className,\r\n children,\r\n ...props\r\n }: ButtonComponentProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const isSquare = appearance === 'square'\r\n const buttonTheme = React.useMemo(() => getButtonTheme(ButtonTheme[theme], active), [theme, active])\r\n const buttonPadding = React.useMemo(() => (isSquare ? null : ButtonPadding[padding]), [isSquare, padding])\r\n const buttonSize = isSquare ? ButtonSquareSize[size] : ButtonSize[size]\r\n const buttonRounding = ButtonRounding[rounding]\r\n const hasIcons = leftContent || rightContent\r\n\r\n return React.createElement(\r\n asComponent ?? BUTTON_DEFAULT_ELEMENT,\r\n {\r\n ...props,\r\n ref,\r\n className: classnames(\r\n BUTTON_BASE_CLASS,\r\n buttonTheme.button,\r\n buttonPadding,\r\n buttonSize,\r\n buttonRounding,\r\n {\r\n [BUTTON_SQUARE_BASE_CLASS]: isSquare,\r\n [BUTTON_FOCUS_STYLES]: focusRing,\r\n },\r\n className\r\n ),\r\n },\r\n <>\r\n {leftContent && (\r\n
\r\n {isValidIconName(leftContent) ? : leftContent}\r\n
\r\n )}\r\n {children && !isSquare ? (\r\n \r\n {children}\r\n \r\n ) : (\r\n children\r\n )}\r\n {rightContent && (\r\n
\r\n {isValidIconName(rightContent) ? : rightContent}\r\n
\r\n )}\r\n \r\n )\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 Button = React.forwardRef(ButtonComponent) 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","import * as React from 'react'\r\n\r\nexport interface DelayedProps {\r\n /**\r\n * The delay in milliseconds before the component is rendered.\r\n *\r\n * @default 300\r\n */\r\n delay?: number\r\n\r\n /**\r\n * Delay in milliseconds before rendering timeout state.\r\n */\r\n timeout?: number\r\n\r\n /**\r\n * Throw on timeout (suspense)\r\n */\r\n throwOnTimeout?: boolean\r\n\r\n /**\r\n * Component visible during the delay.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n delayComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when timeout is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n timeoutComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when delay is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n children?: React.ReactNode\r\n}\r\n\r\nexport function Delayed({\r\n delay = 300,\r\n timeout = 0,\r\n throwOnTimeout = false,\r\n delayComponent,\r\n timeoutComponent,\r\n children,\r\n}: DelayedProps) {\r\n const [visible, setVisible] = React.useState(false)\r\n const [hasTimedOut, setHasTimedOut] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const visibilityTimeout = window.setTimeout(() => setVisible(true), delay)\r\n\r\n let failedTimeout: number\r\n if (timeout > 0) {\r\n failedTimeout = window.setTimeout(() => {\r\n setHasTimedOut(true)\r\n if (throwOnTimeout) throw new Error()\r\n }, timeout)\r\n }\r\n\r\n return () => {\r\n clearTimeout(visibilityTimeout)\r\n clearTimeout(failedTimeout)\r\n }\r\n }, [delay, timeout, throwOnTimeout])\r\n\r\n if (!visible) return <>{delayComponent}\r\n\r\n if (hasTimedOut) {\r\n return <>{timeoutComponent}\r\n }\r\n\r\n return <>{children}\r\n}\r\n","import * as Sentry from '@sentry/browser'\r\nimport { ReactNode, useEffect } from 'react'\r\nimport { FallbackProps } from 'react-error-boundary'\r\nimport { useRouteError } from 'react-router-dom'\r\n\r\nimport { link } from '../services/routing'\r\nimport { Button } from './button'\r\nimport { Heading, Paragraph } from './typography'\r\n\r\ninterface ErrorViewProps {\r\n /**\r\n * Title of the message\r\n */\r\n title?: ReactNode\r\n\r\n /**\r\n * Body text\r\n */\r\n message?: ReactNode\r\n\r\n /**\r\n * Show contact support text under the message\r\n *\r\n * @default true\r\n */\r\n showContact?: boolean\r\n\r\n /**\r\n * Show refresh page button under the text\r\n *\r\n * @default true\r\n */\r\n showRefresh?: boolean\r\n}\r\n\r\nexport function ErrorView({ title, message, showContact = true, showRefresh = true }: ErrorViewProps) {\r\n return (\r\n
\r\n {title}\r\n {message}\r\n\r\n {showContact && (\r\n \r\n Our development team has been notified of this. If the error persists, please{' '}\r\n \r\n contact support\r\n \r\n .\r\n \r\n )}\r\n\r\n {showRefresh && (\r\n \r\n Refresh page\r\n \r\n )}\r\n
\r\n )\r\n}\r\n\r\nexport function DefaultErrorBoundary({\r\n error,\r\n title = 'Application error',\r\n message = 'We’re sorry but an unknown error occured.',\r\n ...props\r\n}: Partial) {\r\n useEffect(() => {\r\n // Ignore webpack chunk loading errors\r\n if (error?.name === 'ChunkLoadError') return\r\n // Otherwise log to Sentry\r\n Sentry.captureException(error, { level: 'fatal' })\r\n // so we can see error in logs\r\n console.error('ErrorBoundary:', JSON.stringify(error))\r\n }, [error])\r\n\r\n return \r\n}\r\n\r\nexport function RouterErrorElement() {\r\n const error = useRouteError() as Error\r\n return \r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { IconNameType, iconList } from '.'\r\nimport { SVGProps } from './svg'\r\n\r\nexport interface IconProps extends SVGProps {\r\n /**\r\n * Icon name\r\n */\r\n name?: IconNameType\r\n\r\n /**\r\n * Alternative way to pass icon to render if you want to render a custom component\r\n * or use `iconList` object lookup\r\n */\r\n as?: React.FC\r\n}\r\n\r\nexport function Icon({ name, as: asComponent, className, width = 16, height = width, ...props }: IconProps) {\r\n if (name && asComponent) {\r\n throw new Error('Specifying both \"name\" and \"as\" on Icon component is not supported')\r\n }\r\n\r\n if (!name && !asComponent) {\r\n throw new Error('No icon specified')\r\n }\r\n\r\n if (name) {\r\n if (iconList[name] === undefined) {\r\n throw new Error('Icon not found')\r\n }\r\n\r\n const fileName = ['icons', iconList[name]].filter(Boolean).join('_')\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n const Component = asComponent!\r\n return \r\n}\r\n","// Export the Icon component itself\r\nexport * from './icon'\r\n\r\nexport function isValidIconName(name?: unknown): name is IconNameType {\r\n if (!name || typeof name !== 'string') return false\r\n\r\n return iconList[name as IconNameType] !== undefined\r\n}\r\n\r\nexport type IconNameType = keyof typeof iconList\r\n\r\nconst root = ''\r\nconst chartLayouts = 'chart-layouts'\r\nconst chartTools = 'chart-tools'\r\nconst chartTypes = 'chart-types'\r\n\r\n// Export list of icon components\r\nexport const iconList = {\r\n // Main icons\r\n add: root,\r\n arrowDownShort: root,\r\n arrowForward: root,\r\n arrowUpShort: root,\r\n briefcase: root,\r\n calendar: root,\r\n caretDown: root,\r\n caretLeft: root,\r\n caretRight: root,\r\n caretUp: root,\r\n caretVertical: root,\r\n chartBar: root,\r\n chartBubble: root,\r\n chartPie: root,\r\n chartTable: root,\r\n chartTreemap: root,\r\n chevronDown: root,\r\n chevronRight: root,\r\n close: root,\r\n darkMode: root,\r\n diamondOutlined: root,\r\n done: root,\r\n drag: root,\r\n draw: root,\r\n empty: root,\r\n exitFullscreen: root,\r\n flash: root,\r\n fullscreen: root,\r\n gesture: root,\r\n gift: root,\r\n hamburger: root,\r\n help: root,\r\n idea: root,\r\n ideaLoad: root,\r\n ideaSave: root,\r\n info: root,\r\n interval: root,\r\n lightMode: root,\r\n lock: root,\r\n lockOpened: root,\r\n menuClose: root,\r\n minus: root,\r\n more: root,\r\n note: root,\r\n openInNew: root,\r\n palette: root,\r\n profile: root,\r\n publish: root,\r\n refresh: root,\r\n remove: root,\r\n restore: root,\r\n search: root,\r\n settings: root,\r\n settingsWheel: root,\r\n share: root,\r\n signOut: root,\r\n star: root,\r\n starOutlined: root,\r\n switchHorizontal: root,\r\n switchVertical: root,\r\n tabKey: root,\r\n template: root,\r\n trashCan: root,\r\n trendingDown: root,\r\n trendingUp: root,\r\n triangle: root,\r\n triangleOutlineDown: root,\r\n triangleOutlineUp: root,\r\n warning: root,\r\n\r\n // Chart layouts\r\n layout1h1v: chartLayouts,\r\n layout1h2v: chartLayouts,\r\n layout1h3v: chartLayouts,\r\n layout1l2r: chartLayouts,\r\n layout1t2b: chartLayouts,\r\n layout2h1v: chartLayouts,\r\n layout2h2v: chartLayouts,\r\n layout3h1v: chartLayouts,\r\n layout3h2v: chartLayouts,\r\n\r\n // Chart tools\r\n drawingActionDelete: chartTools,\r\n drawingSettingAutosaveOff: chartTools,\r\n drawingSettingAutosaveOn: chartTools,\r\n drawingSettingAutosaveSaving: chartTools,\r\n drawingSettingDrawingMode: chartTools,\r\n drawingSettingDrawingModeActive: chartTools,\r\n drawingSettingHide: chartTools,\r\n drawingSettingLock: chartTools,\r\n drawingSettingPreserveDrawings: chartTools,\r\n drawingSettingPreserveDrawingsActive: chartTools,\r\n drawingSettingShow: chartTools,\r\n drawingSettingUnlock: chartTools,\r\n toolArrow: chartTools,\r\n toolBrush: chartTools,\r\n toolCallout: chartTools,\r\n toolCurve: chartTools,\r\n toolElliottWave: chartTools,\r\n toolEllipse: chartTools,\r\n toolExpand: chartTools,\r\n toolFibonacci: chartTools,\r\n toolLine: chartTools,\r\n toolMeasure: chartTools,\r\n toolMidLineH: chartTools,\r\n toolMidLineV: chartTools,\r\n toolMouse: chartTools,\r\n toolPitchfork: chartTools,\r\n toolPolygon: chartTools,\r\n toolPosition: chartTools,\r\n toolRect: chartTools,\r\n toolRectRotated: chartTools,\r\n toolText: chartTools,\r\n toolTriangle: chartTools,\r\n toolXABCD: chartTools,\r\n\r\n // Chart types\r\n candleBarBasic: chartTypes,\r\n candleBarHeikinAshi: chartTypes,\r\n candleBarHollow: chartTypes,\r\n lineChartType: chartTypes,\r\n ohlcChartType: chartTypes,\r\n}\r\n","import { link } from '../services/routing'\r\nimport { Delayed, DelayedProps } from './delayed'\r\nimport { ErrorView } from './error-view'\r\nimport { Spinner } from './spinner'\r\n\r\ntype LoadingProps = Pick\r\n\r\nexport function Loading({ delay, timeout, throwOnTimeout }: LoadingProps) {\r\n return (\r\n \r\n There’s been an error loading the application.\r\n
\r\n Please make sure your internet connection is stable and refresh the page. If the error persists, please{' '}\r\n \r\n contact support\r\n \r\n .\r\n \r\n }\r\n />\r\n }\r\n >\r\n \r\n \r\n )\r\n}\r\n\r\nexport function LoadingScreen(props: LoadingProps) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nexport type NotificationContextType = ReturnType\r\n\r\nexport enum NotificationPosition {\r\n TopLeft,\r\n TopRight,\r\n BottomLeft,\r\n BottomRight,\r\n}\r\n\r\nexport interface NotificationOptions {\r\n position?: NotificationPosition\r\n inline?: boolean\r\n}\r\n\r\nexport const NotificationContext = React.createContext<{\r\n show: (element: JSX.Element, options?: NotificationOptions) => void\r\n hide: () => void\r\n}>({\r\n show: () => {},\r\n hide: () => {},\r\n})\r\n\r\nexport function useNotification() {\r\n return React.useContext(NotificationContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { getVisualViewport, useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { NotificationContext, NotificationOptions, NotificationPosition } from './hooks'\r\n\r\ninterface NotificationState {\r\n element: JSX.Element\r\n options: Partial\r\n}\r\n\r\nexport function NotificationWrapper(props: React.PropsWithChildren) {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [notification, setNotification] = React.useState(null)\r\n const { viewport, setViewport } = useVisualViewport({ enabled: !!notification })\r\n\r\n const context = React.useRef({\r\n show: (element: JSX.Element, options: Partial = {}) => {\r\n setViewport(() => getVisualViewport(window.visualViewport))\r\n setNotification({ element, options })\r\n setIsOpen(true)\r\n },\r\n hide: () => setIsOpen(false),\r\n })\r\n\r\n const positionClass = React.useMemo(() => {\r\n const { position = NotificationPosition.BottomLeft } = notification?.options ?? {}\r\n return {\r\n '[--inset-t:1rem] items-start pt-inset-top': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.TopRight,\r\n ].includes(position),\r\n '[--inset-r:1rem] justify-end landscape-secondary:pr-inset-right': [\r\n NotificationPosition.TopRight,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-b:1rem] items-end pb-inset-bottom': [\r\n NotificationPosition.BottomLeft,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-l:1rem] justify-start landscape-primary:pl-inset-left': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.BottomLeft,\r\n ].includes(position),\r\n }\r\n }, [notification?.options])\r\n\r\n const WrapperComponent = React.useMemo(\r\n () => (notification?.options.inline ? React.Fragment : Ariakit.Portal),\r\n [notification?.options.inline]\r\n )\r\n\r\n return (\r\n \r\n {props.children}\r\n {isOpen && (\r\n \r\n \r\n {notification?.element}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { NotificationContextType, useNotification } from './hooks'\r\n\r\nexport function withNotificationContext(\r\n WrappedComponent: React.ComponentType\r\n) {\r\n const displayName = WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\r\n const WithNotificationContext = (props: Omit) => {\r\n const notification = useNotification()\r\n return \r\n }\r\n\r\n WithNotificationContext.displayName = `withNotificationContext(${displayName})`\r\n\r\n return WithNotificationContext\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { useNotification } from './hooks'\r\n\r\ninterface NotificationProps {\r\n className?: string\r\n /**\r\n * Default button text\r\n * @default Close\r\n */\r\n closeText?: string\r\n\r\n /**\r\n * Custom buttons. Overrides `closeText`\r\n */\r\n actions?: JSX.Element\r\n\r\n /**\r\n * When set, the notification will automatically close\r\n */\r\n timeoutInMs?: number\r\n}\r\n\r\nexport function Notification({\r\n className,\r\n closeText = 'Close',\r\n actions,\r\n timeoutInMs,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const notification = useNotification()\r\n\r\n React.useEffect(() => {\r\n let timeoutId: number\r\n if (timeoutInMs) {\r\n timeoutId = window.setTimeout(() => {\r\n notification.hide()\r\n }, timeoutInMs)\r\n }\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n }\r\n }\r\n }, [notification, timeoutInMs])\r\n\r\n return (\r\n \r\n
{children}
\r\n
\r\n {actions ?? (\r\n \r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\n\r\ninterface SpinnerProps {\r\n /**\r\n * Spinner as progress bar\r\n * @default false\r\n */\r\n isProgressBar?: boolean\r\n\r\n /**\r\n * Progress number in percent\r\n * @default 0\r\n */\r\n progress?: number\r\n\r\n /**\r\n * Spinner box width\r\n *\r\n * @default 28\r\n */\r\n width?: number\r\n}\r\n\r\nexport function Spinner({ isProgressBar = false, progress = 0, width = 28 }: SpinnerProps) {\r\n const radius = (3 * width) / 7\r\n const strokeWidth = radius / 3\r\n const circleXY = radius + strokeWidth / 2\r\n const circumference = radius * 2 * Math.PI\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, { ComponentProps, ElementType, HTMLProps, PropsWithChildren, ReactNode } from 'react'\r\n\r\ntype HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6\r\n\r\ninterface HeadingProps extends HTMLProps {\r\n /**\r\n * Heading level\r\n */\r\n level: HeadingLevel\r\n}\r\n\r\nfunction getHeadingElement(level: HeadingLevel) {\r\n switch (level) {\r\n case 1:\r\n return 'h1'\r\n case 2:\r\n return 'h2'\r\n case 3:\r\n return 'h3'\r\n case 4:\r\n return 'h4'\r\n case 5:\r\n return 'h5'\r\n default:\r\n return 'h6'\r\n }\r\n}\r\n\r\nexport function Heading({ level, children, ...props }: PropsWithChildren) {\r\n return React.createElement(\r\n getHeadingElement(level),\r\n {\r\n ...props,\r\n className: classnames(props.className, 'font-bold', {\r\n 'text-3xl': level === 1,\r\n 'text-2xl': level === 2,\r\n 'text-xl': level === 3,\r\n // We don't want to set any specific fontsize because it's used e.g. in DialogHeader\r\n // where it uses font-size: inherit; and is different on old/redesign versions\r\n '': level === 4,\r\n 'text-sm': level === 5,\r\n 'text-2xs': level === 6,\r\n }),\r\n },\r\n children\r\n )\r\n}\r\n\r\ninterface ParagraphProps extends Omit>, 'size' | 'as'> {\r\n /**\r\n * Determines which element the text should render to\r\n *\r\n * @default p\r\n */\r\n as?: ElementType\r\n\r\n /**\r\n * Font size for the paragraph\r\n * - tiny - 10px\r\n * - small - 12px\r\n * - default - 14px\r\n * - medium - 16px\r\n * - large - 18px\r\n *\r\n * @default default\r\n */\r\n size?: 'tiny' | 'small' | 'default' | 'medium' | 'large'\r\n\r\n /**\r\n * Paragraph font weight\r\n */\r\n medium?: boolean\r\n}\r\n\r\nexport function Paragraph({\r\n as = 'p',\r\n size = 'default',\r\n medium,\r\n children,\r\n ...props\r\n}: PropsWithChildren>) {\r\n return React.createElement(\r\n as,\r\n {\r\n ...props,\r\n className: classnames(props.className, {\r\n 'font-medium': medium,\r\n 'text-lg': size === 'large',\r\n 'text-sm': size === 'default',\r\n 'text-2xs': size === 'small',\r\n 'text-3xs': size === 'tiny',\r\n }),\r\n },\r\n children\r\n )\r\n}\r\n\r\ninterface LabelProps extends Omit, 'title'> {\r\n title?: ReactNode\r\n titleClassName?: string\r\n isHorizontal?: boolean\r\n}\r\n\r\nexport function Label({ title, titleClassName, isHorizontal, children, ...props }: PropsWithChildren) {\r\n return (\r\n \r\n )\r\n}\r\n","export const CRYPTO_TICKERS = [\r\n 'BTCUSD',\r\n 'LTCUSD',\r\n 'ETHUSD',\r\n 'XRPUSD',\r\n 'BCHUSD',\r\n 'BTCEUR',\r\n 'LTCEUR',\r\n 'ETHEUR',\r\n 'XRPEUR',\r\n 'BCHEUR',\r\n 'LTCBTC',\r\n 'ETHBTC',\r\n 'XRPBTC',\r\n 'BCHBTC',\r\n]\r\n\r\n// Keep in sync with the copy in Charts repo - app/constants/common.ts\r\nexport enum TIMEFRAME {\r\n i1 = 'i1',\r\n i2 = 'i2',\r\n i3 = 'i3',\r\n i5 = 'i5',\r\n i10 = 'i10',\r\n i15 = 'i15',\r\n i30 = 'i30',\r\n h = 'h',\r\n h2 = 'h2',\r\n h4 = 'h4',\r\n d = 'd',\r\n w = 'w',\r\n m = 'm',\r\n}\r\n\r\nexport enum SpecificChartFunctionality {\r\n default = 'default',\r\n quotePage = 'quotePage',\r\n quotePerf = 'quotePerf',\r\n quoteFinancials = 'quoteFinancials',\r\n chartPage = 'chartPage',\r\n smallIndex = 'smallIndex',\r\n offScreen = 'offScreen',\r\n forexPage = 'forexPage',\r\n futuresPage = 'futuresPage',\r\n cryptoPage = 'cryptoPage',\r\n}\r\n\r\nexport enum QuoteRoutes {\r\n OptionsChain = 'oc',\r\n OptionsVolatility = 'ocv',\r\n Revenue = 'rv',\r\n Dividends = 'dv',\r\n Earnings = 'ea',\r\n Performance = 'p',\r\n ShortInterest = 'si',\r\n Traffic = 'tr',\r\n}\r\n\r\nexport const FINANCIALS_SECTION_LABELS = {\r\n [QuoteRoutes.Revenue]: 'Revenue',\r\n [QuoteRoutes.Dividends]: 'Dividends',\r\n [QuoteRoutes.Earnings]: 'Earnings',\r\n}\r\n\r\nexport const OPTIONS_SECTION_LABELS = {\r\n [QuoteRoutes.OptionsChain]: 'Prices',\r\n [QuoteRoutes.OptionsVolatility]: 'Volatility & Greeks',\r\n}\r\n\r\n// @TODO: Reuse across the app (website & charts)\r\nexport const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n","import { createContext, useContext } from 'react'\r\n\r\nexport const SETTINGS_CONTEXT_DEFAULT = {\r\n versionImages: 0,\r\n nodeChartsDomain: '',\r\n hasUserPremium: false,\r\n name: '',\r\n email: '',\r\n hasDarkTheme: false,\r\n}\r\n\r\nexport const SettingsContext = createContext(SETTINGS_CONTEXT_DEFAULT)\r\n\r\nexport function useSettings() {\r\n return useContext(SettingsContext)\r\n}\r\n","import * as React from 'react'\r\nimport { ReactNode } from 'react'\r\nimport { useLoaderData } from 'react-router-dom'\r\n\r\nexport type CachedLoaderDataContextType = ReturnType\r\n\r\nexport const CachedLoaderDataContext = React.createContext<{\r\n data: any\r\n isCached: boolean\r\n} | null>(null)\r\n\r\nexport function useCachedLoaderData() {\r\n const context = React.useContext<{ data: DataType; isCached: boolean } | null>(CachedLoaderDataContext)\r\n\r\n if (context === null) {\r\n throw new Error(\r\n 'Error! Extracting context without wrapping your component with the CachedLoaderDataContextProvider'\r\n )\r\n }\r\n\r\n return context\r\n}\r\n\r\ninterface CachedLoaderDataContextProviderProps {\r\n children: ReactNode\r\n isNullValidData?: boolean\r\n}\r\nexport function CachedLoaderDataContextProvider({\r\n children,\r\n isNullValidData = false,\r\n}: CachedLoaderDataContextProviderProps) {\r\n const loaderData = useLoaderData() as DataType\r\n const dataCacheRef = React.useRef(loaderData)\r\n\r\n const value = React.useMemo(() => {\r\n if (loaderData !== undefined && (loaderData !== null || isNullValidData)) {\r\n dataCacheRef.current = loaderData\r\n }\r\n return { data: dataCacheRef.current, isCached: !loaderData }\r\n }, [loaderData, isNullValidData])\r\n\r\n return {children}\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nexport function getVisualViewport(visualViewport: VisualViewport | null) {\r\n const width = visualViewport?.width ?? window.innerWidth\r\n const height = visualViewport?.height ?? window.innerHeight\r\n const scale = visualViewport?.scale ?? 1\r\n\r\n return {\r\n top: visualViewport?.offsetTop ?? 0,\r\n left: visualViewport?.offsetLeft ?? 0,\r\n scale: Math.round((1 / scale) * 100) / 100,\r\n width: Math.round(width * scale),\r\n height: Math.round(height * scale),\r\n unscaledWidth: width,\r\n unscaledHeight: height,\r\n }\r\n}\r\n\r\nexport function useVisualViewport({ enabled = true, onScroll = true }: { enabled?: boolean; onScroll?: boolean } = {}) {\r\n const [viewport, setViewport] = React.useState(getVisualViewport(window.visualViewport))\r\n\r\n React.useEffect(() => {\r\n if (!enabled) return\r\n\r\n const handleChange = throttle((ev: Event) => {\r\n const viewport = ev.currentTarget as VisualViewport\r\n if (viewport) {\r\n setViewport(() => getVisualViewport(viewport))\r\n }\r\n }, 50)\r\n\r\n window.visualViewport?.addEventListener('resize', handleChange)\r\n if (onScroll) window.visualViewport?.addEventListener('scroll', handleChange)\r\n handleChange({ currentTarget: window.visualViewport } as Event)\r\n\r\n return () => {\r\n window.visualViewport?.removeEventListener('resize', handleChange)\r\n window.visualViewport?.removeEventListener('scroll', handleChange)\r\n }\r\n }, [enabled, onScroll])\r\n\r\n return React.useMemo(() => ({ viewport, setViewport }), [viewport])\r\n}\r\n","import React from 'react'\r\nimport { LoaderFunctionArgs, ShouldRevalidateFunction } from 'react-router-dom'\r\n\r\nimport { QuoteRoutes } from './constants'\r\nimport { lazyLoadComponent, shouldRevalidateOnQueryChange } from './util'\r\n\r\nconst getOptionsBundle = () => import(/* webpackChunkName: \"options\" */ './modules/options')\r\nconst OptionsRoute = lazyLoadComponent({\r\n chunkName: 'options',\r\n load: getOptionsBundle,\r\n})\r\nconst getRevenueBundle = () => import(/* webpackChunkName: \"revenue\" */ './modules/revenue')\r\nconst RevenueRoute = lazyLoadComponent({\r\n chunkName: 'revenue',\r\n load: getRevenueBundle,\r\n})\r\nconst getDividendsBundle = () => import(/* webpackChunkName: \"dividends\" */ './modules/dividends')\r\nconst DividendsRoute = lazyLoadComponent({\r\n chunkName: 'dividends',\r\n load: getDividendsBundle,\r\n})\r\nconst getEarningsBundle = () => import(/* webpackChunkName: \"earnings\" */ './modules/earnings')\r\nconst EarningsRoute = lazyLoadComponent({\r\n chunkName: 'earnings',\r\n load: getEarningsBundle,\r\n})\r\nconst getShortInterestBundle = () => import(/* webpackChunkName: \"short-interest\" */ './modules/short-interest')\r\nconst ShortInterestRoute = lazyLoadComponent({\r\n chunkName: 'short-interest',\r\n load: getShortInterestBundle,\r\n})\r\nconst getTrafficBundle = () => import(/* webpackChunkName: \"traffic\" */ './modules/traffic')\r\nconst TrafficRoute = lazyLoadComponent({\r\n chunkName: 'traffic',\r\n load: getTrafficBundle,\r\n})\r\n\r\nexport function getQuoteRouteLoader(args: LoaderFunctionArgs) {\r\n const params = new URLSearchParams(args.request.url)\r\n const route = params.get('ty') as QuoteRoutes\r\n\r\n switch (route) {\r\n case QuoteRoutes.OptionsChain:\r\n case QuoteRoutes.OptionsVolatility:\r\n return getOptionsBundle().then((value) => value.loader(args))\r\n case QuoteRoutes.Revenue:\r\n return getRevenueBundle().then((value) => value.loader())\r\n case QuoteRoutes.Dividends:\r\n return getDividendsBundle().then((value) => value.loader())\r\n case QuoteRoutes.Earnings:\r\n return getEarningsBundle().then((value) => value.loader())\r\n case QuoteRoutes.ShortInterest:\r\n return getShortInterestBundle().then((value) => value.loader())\r\n case QuoteRoutes.Traffic:\r\n return getTrafficBundle().then((value) => value.loader())\r\n\r\n default:\r\n return () => {}\r\n }\r\n}\r\n\r\nexport function getShouldRevalidateQuoteRoute(): ShouldRevalidateFunction {\r\n return (args) => {\r\n const route = args.currentUrl.searchParams.get('ty') as QuoteRoutes\r\n\r\n switch (route) {\r\n case QuoteRoutes.OptionsChain:\r\n case QuoteRoutes.OptionsVolatility:\r\n return shouldRevalidateOnQueryChange(args, ['e', 's', 'ov'])\r\n\r\n default:\r\n return false\r\n }\r\n }\r\n}\r\n\r\nconst quoteRouteSearchParams = new URLSearchParams(window.location.search)\r\nconst quoteRouteType = quoteRouteSearchParams.get('ty') as QuoteRoutes\r\n\r\nexport default function QuoteRoutesSwitch() {\r\n switch (quoteRouteType) {\r\n case QuoteRoutes.OptionsChain:\r\n case QuoteRoutes.OptionsVolatility:\r\n return \r\n case QuoteRoutes.Revenue:\r\n return \r\n case QuoteRoutes.Dividends:\r\n return \r\n case QuoteRoutes.Earnings:\r\n return \r\n case QuoteRoutes.ShortInterest:\r\n return \r\n case QuoteRoutes.Traffic:\r\n return \r\n\r\n default:\r\n return null\r\n }\r\n}\r\n","import '../app/shared/sentry/init'\r\n\r\nimport { Suspense } from 'react'\r\nimport ReactDOM from 'react-dom/client'\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\nimport { Outlet, RouterProvider, ScrollRestoration, createBrowserRouter } from 'react-router-dom'\r\n\r\nimport '../../styles/charts.css'\r\nimport '../../styles/modal.css'\r\nimport '../../styles/tailwind.css'\r\nimport '../../styles/timeframe-bar.css'\r\nimport QuoteRouteSwitch, { getQuoteRouteLoader, getShouldRevalidateQuoteRoute } from './QuoteRoutesSwitch'\r\nimport { DefaultErrorBoundary, RouterErrorElement } from './components/error-view'\r\nimport { LoadingScreen } from './components/loading'\r\nimport { NotificationWrapper } from './components/notification'\r\nimport { SettingsContext } from './context'\r\nimport { CachedLoaderDataContextProvider } from './hooks/useCachedLoaderData'\r\nimport { lazyLoadComponent, revalidateOnQueryChange } from './util'\r\n\r\nconst ChartsRoute = lazyLoadComponent({\r\n chunkName: 'charts',\r\n load: () => import(/* webpackChunkName: \"charts\" */ './modules/charts'),\r\n})\r\n\r\nconst getPortfolioBundle = () => import(/* webpackChunkName: \"portfolio\" */ './modules/portfolio')\r\nconst PortfolioViewRoute = lazyLoadComponent({\r\n chunkName: 'portfolio',\r\n load: () => getPortfolioBundle().then((mod) => mod.portfolioView),\r\n})\r\nconst PortfolioCreateRoute = lazyLoadComponent({\r\n chunkName: 'portfolio',\r\n load: () => getPortfolioBundle().then((mod) => mod.portfolioEmpty),\r\n})\r\n\r\nconst getPortfolioEditBundle = () =>\r\n import(/* webpackChunkName: \"portfolio-edit\" */ './modules/portfolio/routes/PortfolioBulkEdit')\r\nconst PortfolioEditRoute = lazyLoadComponent({\r\n chunkName: 'portfolio-edit',\r\n load: getPortfolioEditBundle,\r\n})\r\n\r\nconst getSaveToPortfolioBundle = () => import(/* webpackChunkName: \"save-to-portfolio\" */ './modules/save-to-portfolio')\r\nconst SaveToPortfolioRoute = lazyLoadComponent({\r\n chunkName: 'save-to-portfolio',\r\n load: getSaveToPortfolioBundle,\r\n})\r\n\r\nconst getCreateAlertBundle = () => import(/* webpackChunkName: \"create-alert\" */ './modules/create-alert')\r\nconst CreateAlertRoute = lazyLoadComponent({\r\n chunkName: 'create-alert',\r\n load: getCreateAlertBundle,\r\n})\r\n\r\nconst router = createBrowserRouter([\r\n {\r\n path: '/',\r\n element: ,\r\n errorElement: ,\r\n children: [\r\n {\r\n path: '/charts',\r\n element: (\r\n }>\r\n \r\n \r\n ),\r\n },\r\n {\r\n path: '/portfolio.ashx',\r\n loader: (args) => getPortfolioBundle().then((value) => value.portfolioView.loader(args)),\r\n action: (args) => getPortfolioBundle().then((value) => value.portfolioView.action(args)),\r\n shouldRevalidate: revalidateOnQueryChange(['pid']),\r\n element: (\r\n }>\r\n \r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n path: '/create_new_portfolio.ashx',\r\n loader: () => getPortfolioBundle().then((value) => value.portfolioEmpty.loader()),\r\n action: (args) => getPortfolioBundle().then((value) => value.portfolioEmpty.action(args)),\r\n element: (\r\n }>\r\n \r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n path: '/portfolio_edit.ashx',\r\n loader: (args) => getPortfolioEditBundle().then((value) => value.loader(args)),\r\n action: (args) => getPortfolioEditBundle().then((value) => value.action(args)),\r\n element: (\r\n }>\r\n \r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n path: '/quote.ashx',\r\n loader: getQuoteRouteLoader,\r\n shouldRevalidate: getShouldRevalidateQuoteRoute(),\r\n element: (\r\n }>\r\n \r\n \r\n \r\n {/**\r\n * We precompute the element height on the backend so that the content under\r\n * options doesn’t jump when options render, so we can put restore scroll here.\r\n */}\r\n \r\n \r\n ),\r\n },\r\n {\r\n path: '/save_to_portfolio.ashx',\r\n loader: () => getSaveToPortfolioBundle(),\r\n element: (\r\n }>\r\n \r\n \r\n ),\r\n },\r\n {\r\n path: '/create_alert.ashx',\r\n loader: () => getCreateAlertBundle(),\r\n element: (\r\n }>\r\n \r\n \r\n ),\r\n },\r\n ],\r\n },\r\n])\r\n\r\nconst rootEl = document.getElementById('root')\r\nconst root = ReactDOM.createRoot(rootEl!)\r\n\r\nroot.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n","import * as Sentry from '@sentry/browser'\r\n\r\nimport { PortfolioDefinition } from '../modules/portfolio/types'\r\n\r\n// Keep in sync with ContentType in https://github.com/finvizhq/charts/blob/master/app/utils/fetch_api.ts\r\n// START\r\nexport enum ContentType {\r\n ApplicationJson = 'application/json',\r\n ApplicationJsonUTF = 'application/json; charset=utf-8', // WriteAsJsonAsync\r\n FormUrlEncoded = 'application/x-www-form-urlencoded',\r\n Html = 'text/html; charset=utf-8',\r\n}\r\n\r\nfunction parseResponseForContentType(response: string, contentType: ContentType) {\r\n switch (contentType) {\r\n case ContentType.ApplicationJson:\r\n case ContentType.ApplicationJsonUTF:\r\n case ContentType.FormUrlEncoded:\r\n return JSON.parse(response)\r\n default:\r\n return response\r\n }\r\n}\r\n// END\r\n\r\nexport class ThrowableError extends Error {\r\n status: number\r\n isServerError = false\r\n body: unknown\r\n extra: Record = {}\r\n\r\n constructor(status: number, message = 'ThrowableError', body = '', extra: Record = {}) {\r\n super(`${status} ${message}`)\r\n this.status = status\r\n this.isServerError = status >= 500\r\n this.body = body\r\n this.extra = extra\r\n }\r\n}\r\n\r\nexport interface CancelablePromise extends Promise {\r\n aborted?: boolean\r\n cancel?: () => void\r\n}\r\n\r\n/**\r\n * General api fetch utility which returns a cancelable promise\r\n */\r\nexport function apiRequest(\r\n url: string,\r\n { query, headers = {}, ...options }: RequestInit & { query?: Record } = {},\r\n throwOnAllErrors = false\r\n): CancelablePromise {\r\n const controller = 'AbortController' in window ? new AbortController() : undefined\r\n const requestUrl = query ? `${url}?${new URLSearchParams(query)}` : url\r\n const contentType: ContentType = (headers as any)['Content-Type'] ?? ContentType.ApplicationJson\r\n\r\n const requestOptions = {\r\n ...options,\r\n headers: {\r\n 'Content-Type': contentType,\r\n ...headers,\r\n },\r\n }\r\n const request = fetch(requestUrl, { ...requestOptions, signal: controller?.signal })\r\n\r\n const cancelableRequest: CancelablePromise = request\r\n .then(async (response) => {\r\n const textResponse = await response.text()\r\n const responseContentType: ContentType = (response.headers.get('Content-Type') as any) ?? ContentType.Html\r\n\r\n try {\r\n const parsedResponse = parseResponseForContentType(textResponse, responseContentType)\r\n if (!response.ok || response.status >= 500) {\r\n throw new ThrowableError(response.status, response.statusText, parsedResponse, {\r\n rayId: response.headers.get('cf-ray'),\r\n })\r\n }\r\n\r\n return parsedResponse\r\n } catch (error: any) {\r\n if (error instanceof ThrowableError) {\r\n throw error\r\n }\r\n throw new ThrowableError(response.status, error.message, textResponse, {\r\n rayId: response.headers.get('cf-ray'),\r\n })\r\n }\r\n })\r\n .catch((error: ThrowableError) => {\r\n if (error.status >= 500) {\r\n Sentry.withScope((scope) => {\r\n scope.setContext('Cloudflare', error.extra)\r\n\r\n if (error.status === 500) {\r\n Sentry.captureException(error)\r\n } else {\r\n Sentry.captureMessage(`${error.status} ${error.message}`)\r\n }\r\n })\r\n }\r\n if (throwOnAllErrors) {\r\n throw error\r\n }\r\n })\r\n\r\n if (controller) {\r\n cancelableRequest.cancel = () => {\r\n controller.abort()\r\n cancelableRequest.aborted = true\r\n }\r\n }\r\n\r\n return cancelableRequest\r\n}\r\n\r\nexport interface SearchApiResult {\r\n ticker: string\r\n company: string\r\n exchange: string\r\n}\r\n\r\nexport function searchApiRequest(input = '') {\r\n return apiRequest('/api/suggestions.ashx', { query: { input } }, true)\r\n}\r\n\r\nexport function portfoliosRequest() {\r\n return apiRequest<{ portfolios: PortfolioDefinition[] }>('/api/portfolio_data.ashx', {\r\n query: {\r\n fields: 'portfolios',\r\n },\r\n })\r\n}\r\n\r\nexport function lastCloseRequest(ticker: string) {\r\n return apiRequest('/request_quote.ashx', {\r\n query: {\r\n t: ticker,\r\n },\r\n })\r\n}\r\n\r\ninterface PortfolioLimitResult {\r\n transactions: number\r\n limitTransactions: number\r\n}\r\n\r\nexport function portfolioLimitRequest(portfolioId: number) {\r\n return apiRequest('/api/portfolio_data.ashx', {\r\n query: {\r\n pid: portfolioId,\r\n fields: 'transactions,limitTransactions',\r\n },\r\n })\r\n}\r\n\r\nexport function setCookieRequest(name: string, value?: unknown) {\r\n return apiRequest(\r\n '/api/set_cookie.ashx',\r\n {\r\n query: {\r\n cookie: name,\r\n ...(value !== undefined && {\r\n value: value,\r\n }),\r\n },\r\n },\r\n true\r\n )\r\n}\r\n","import * as pathToRegexp from 'path-to-regexp'\r\n\r\nimport { cleanTicker } from '../util'\r\n\r\n/**\r\n * Compile route path by applying parameters to it\r\n *\r\n * @example\r\n * // Outputs /route/1?query=foo\r\n * compilePath('/route/:id?query=:query', { id: 1, query: 'foo' })\r\n */\r\nfunction compilePath(\r\n path: string,\r\n params?: pathToRegexp.ParamData,\r\n options?: pathToRegexp.ParseOptions & pathToRegexp.CompileOptions\r\n) {\r\n return pathToRegexp.compile(path, options)(params)\r\n}\r\n\r\nexport const path = {\r\n home: '/',\r\n news: '/news.ashx',\r\n screener: '/screener.ashx',\r\n charts: '/charts',\r\n groups: '/groups.ashx',\r\n portfolio: '/portfolio.ashx',\r\n insider: '/insidertrading.ashx',\r\n elite: '/elite.ashx',\r\n search: '/search.ashx\\\\?p=:ticker',\r\n quote: '/quote.ashx\\\\?t=:ticker',\r\n contact: '/contact.ashx',\r\n\r\n alerts: '/alerts.ashx',\r\n help: '/help/screener.ashx',\r\n account: '/myaccount.ashx',\r\n login: '/login.ashx',\r\n logout: '/logout.ashx',\r\n\r\n // Maps\r\n maps: '/map.ashx',\r\n bubbles: '/bubbles.ashx',\r\n\r\n // Futures\r\n futures: '/futures.ashx',\r\n futuresPerf: '/futures_performance.ashx',\r\n futuresCharts: '/futures_charts.ashx',\r\n futuresChartDetail: '/futures_charts.ashx\\\\?t=:ticker',\r\n\r\n // Forex\r\n forex: '/forex.ashx',\r\n forexPerf: '/forex_performance.ashx',\r\n forexCharts: '/forex_charts.ashx',\r\n forexChartDetail: '/forex_charts.ashx\\\\?t=:ticker',\r\n\r\n // Crypto\r\n crypto: '/crypto.ashx',\r\n cryptoPerf: '/crypto_performance.ashx',\r\n cryptoCharts: '/crypto_charts.ashx',\r\n cryptoChartDetail: '/crypto_charts.ashx\\\\?t=:ticker',\r\n\r\n // Backtsest\r\n backtests: '/backtests.ashx',\r\n backtestCreate: '/backtest_create.ashx',\r\n backtestDetail: '/backtest_detail.ashx\\\\?id=:backtestId',\r\n backtestPresets: 'backtests.ashx\\\\?presets=1',\r\n}\r\n\r\nexport const link = {\r\n toHome: () => path.home,\r\n toNews: () => path.news,\r\n toScreener: () => path.screener,\r\n toCharts: () => path.charts,\r\n toGroups: () => path.groups,\r\n toPortfolio: () => path.portfolio,\r\n toInsider: () => path.insider,\r\n toElite: () => path.elite,\r\n toSearch: (ticker: string) => compilePath(path.search, { ticker }),\r\n toQuote: (ticker: string) => compilePath(path.quote, { ticker }),\r\n toContact: () => path.contact,\r\n\r\n toAlerts: () => path.alerts,\r\n toHelp: () => path.help,\r\n toAccount: () => path.account,\r\n toLogin: () => path.login,\r\n toLogout: () => path.logout,\r\n\r\n toMaps: () => path.maps,\r\n toBubbles: () => path.bubbles,\r\n\r\n toFutures: () => path.futures,\r\n toFuturesPerf: () => path.futuresPerf,\r\n toFuturesCharts: () => path.futuresCharts,\r\n toFuturesChartDetail: (ticker: string) => compilePath(path.futuresChartDetail, { ticker: cleanTicker(ticker) }),\r\n\r\n toForex: () => path.forex,\r\n toForexPerf: () => path.forexPerf,\r\n toForexCharts: () => path.forexCharts,\r\n toForexChartDetail: (ticker: string) => compilePath(path.forexChartDetail, { ticker: cleanTicker(ticker) }),\r\n\r\n toCrypto: () => path.crypto,\r\n toCryptoPerf: () => path.cryptoPerf,\r\n toCryptoCharts: () => path.cryptoCharts,\r\n toCryptoChartDetail: (ticker: string) => compilePath(path.cryptoChartDetail, { ticker: cleanTicker(ticker) }),\r\n\r\n toBacktests: () => path.backtests,\r\n toBacktestCreate: () => path.backtestCreate,\r\n toBacktestDetail: (backtestId: string | number) =>\r\n compilePath(path.backtestDetail, { backtestId: String(backtestId) }),\r\n toBacktestPresets: () => path.backtestPresets,\r\n}\r\n","export enum Instrument {\r\n Stock = 'stock',\r\n Forex = 'forex',\r\n Crypto = 'crypto',\r\n Futures = 'futures',\r\n MarketSentiment = 'market_sentiment',\r\n Group = 'group',\r\n}\r\n\r\nexport type RecordType = Record\r\n\r\nexport type PartialBy = Omit & Partial>\r\n\r\nexport type NullableNumbers = { [K in keyof Obj]: Obj[K] extends number ? number | null : Obj[K] }\r\n\r\nexport enum DateRangeType {\r\n d1 = 'd1',\r\n d5 = 'd5',\r\n m1 = 'm1',\r\n m3 = 'm3',\r\n m6 = 'm6',\r\n ytd = 'ytd',\r\n y1 = 'y1',\r\n y2 = 'y2',\r\n y5 = 'y5',\r\n max = 'max',\r\n}\r\n\r\nexport type SortableValue = string | null | number | Date\r\nexport type SortDirectionValue = 1 | -1\r\n\r\nexport enum FeatureFlag {\r\n RedesignedPages = 'redesign',\r\n PortfolioRedesign = 'redesignpfo',\r\n OptionsGreeks = 'greeks',\r\n TrafficPage = 'trafficPage',\r\n}\r\n","import isPlainObject from 'lodash.isplainobject'\r\nimport { ComponentType, LazyExoticComponent, lazy } from 'react'\r\nimport { ShouldRevalidateFunction, ShouldRevalidateFunctionArgs } from 'react-router-dom'\r\n\r\nimport { getCookie } from '../app/shared/cookie'\r\nimport { parseInitData } from '../app/shared/utils'\r\nimport { CRYPTO_TICKERS } from './constants'\r\nimport { FeatureFlag, Instrument, SortDirectionValue, SortableValue } from './types'\r\nimport { RecordType } from './types'\r\n\r\n/**\r\n * Function which wraps React.lazy and checks whether a chunk is preloaded\r\n * from async-manifest. If yes, kick in the promise resolve early so we can\r\n * instantly render the component\r\n */\r\nexport function lazyLoadComponent({\r\n chunkName,\r\n load,\r\n}: {\r\n chunkName: string\r\n load: () => Promise<{ default: ComponentType }>\r\n}): LazyExoticComponent> {\r\n // Resolve earlier if prefetch element is present\r\n const hasPreloadElement = document.querySelector(`[data-chunk-id=${chunkName}]`)\r\n\r\n if (hasPreloadElement) {\r\n const componentLoader = load()\r\n\r\n return lazy(() => componentLoader)\r\n }\r\n\r\n return lazy(load)\r\n}\r\n\r\nconst isObject = (value: any): value is RecordType => isPlainObject(value)\r\n\r\n/**\r\n * Parse text as JSON\r\n */\r\nexport function parseAsJSON(value: unknown | Shape): Shape | undefined {\r\n if (isObject(value)) {\r\n return value as Shape\r\n }\r\n\r\n let parsedValue\r\n try {\r\n if (typeof value === 'string') {\r\n parsedValue = JSON.parse(value)\r\n }\r\n } catch {\r\n return\r\n }\r\n return parsedValue\r\n}\r\n\r\n/**\r\n * remove @ symbol from a ticker\r\n */\r\nexport function cleanTicker(ticker: string) {\r\n return ticker.startsWith('@') ? ticker.substring(1) : ticker\r\n}\r\n\r\n/**\r\n * Get instrument for a ticker.\r\n *\r\n * - If ticker doesn’t start with `@` - stock\r\n * - Otherwise\r\n * - one of `CRYPTO_TICKERS` - crypto\r\n * - has length of 6 - forex\r\n * - none of above - future\r\n *\r\n * NOTE: counterpart in charts 'charts/app/utils/chart.js'\r\n */\r\n\r\nexport function getInstrumentForTicker(ticker: string): Instrument {\r\n if (!ticker?.startsWith('@')) return Instrument.Stock\r\n\r\n const cleanedTicker = cleanTicker(ticker)\r\n\r\n if (CRYPTO_TICKERS.includes(cleanedTicker.toUpperCase())) return Instrument.Crypto\r\n if (cleanedTicker.length === 6) return Instrument.Forex\r\n\r\n return Instrument.Futures\r\n}\r\n\r\n/**\r\n * Async load Resize observer polyfill when we need it\r\n */\r\nlet resizeObserverPolyfill: typeof window.ResizeObserver\r\nexport async function loadResizeObserverPolyfill() {\r\n if (typeof window.ResizeObserver === 'undefined') {\r\n const polyfill = await import('resize-observer-polyfill')\r\n resizeObserverPolyfill = polyfill.default\r\n window.ResizeObserver = resizeObserverPolyfill\r\n return resizeObserverPolyfill as typeof window.ResizeObserver\r\n }\r\n}\r\n\r\nexport async function getIsBrave() {\r\n return (navigator.brave && (await navigator.brave.isBrave())) || false\r\n}\r\n\r\nexport function deserializeFeatureFlags(): Partial> | undefined {\r\n try {\r\n const cookie = decodeURIComponent(getCookie('featureFlags'))\r\n const flags = cookie.split('_').map((value) => {\r\n const [key, val] = value.split(':')\r\n return [key, val === '1']\r\n })\r\n\r\n return Object.fromEntries(flags)\r\n } catch {\r\n return\r\n }\r\n}\r\n\r\nexport function serializeFeatureFlags(flags: Partial>) {\r\n return Object.entries(flags)\r\n .map(([key, val]) => `${key}:${Number(val)}`)\r\n .join('_')\r\n}\r\n\r\nexport enum ChildPosition {\r\n topLeft,\r\n topRight,\r\n bottomLeft,\r\n bottomRight,\r\n center,\r\n topCenter,\r\n rightCenter,\r\n bottomCenter,\r\n leftCenter,\r\n}\r\n\r\nexport function getFlexAlignClasses(position: ChildPosition) {\r\n return {\r\n 'justify-start': [ChildPosition.topLeft, ChildPosition.bottomLeft, ChildPosition.leftCenter].includes(position),\r\n 'justify-center': [ChildPosition.center, ChildPosition.topCenter, ChildPosition.bottomCenter].includes(position),\r\n 'justify-end': [ChildPosition.topRight, ChildPosition.bottomRight, ChildPosition.rightCenter].includes(position),\r\n 'items-start': [ChildPosition.topLeft, ChildPosition.topRight, ChildPosition.topCenter].includes(position),\r\n 'items-center': [ChildPosition.center, ChildPosition.rightCenter, ChildPosition.leftCenter].includes(position),\r\n 'items-end': [ChildPosition.bottomLeft, ChildPosition.bottomRight, ChildPosition.bottomCenter].includes(position),\r\n }\r\n}\r\n\r\ninterface NumberFormatOptions {\r\n fractions: number\r\n multiply: number\r\n showPlusSign: boolean\r\n defaultValue: string\r\n}\r\n\r\nconst intlCache: { [key: number]: Intl.NumberFormat } = {}\r\nfunction getIntl(fractions: number) {\r\n if (!intlCache[fractions])\r\n intlCache[fractions] = new Intl.NumberFormat('en-US', {\r\n minimumFractionDigits: fractions,\r\n maximumFractionDigits: fractions,\r\n })\r\n return intlCache[fractions]\r\n}\r\n\r\nexport function shortFormatNumber(\r\n value: number | null | undefined,\r\n { fractions = 2, showPlusSign = false, defaultValue = '-', multiply = 1 }: Partial = {}\r\n) {\r\n let num = value\r\n if (num === undefined || num === null || !Number.isFinite(num)) return defaultValue\r\n\r\n num *= multiply\r\n\r\n let suffix = ''\r\n const absValue = Math.abs(num)\r\n if (absValue >= 1e9) {\r\n num /= 1e9\r\n suffix = 'B'\r\n } else if (absValue >= 1e6) {\r\n num /= 1e6\r\n suffix = 'M'\r\n } else if (absValue >= 1000) {\r\n num /= 1000\r\n suffix = 'K'\r\n }\r\n\r\n const formatted = getIntl(fractions).format(num)\r\n\r\n return (showPlusSign && num > 0 ? '+' : '') + formatted + suffix\r\n}\r\n\r\nexport function formatNumber(\r\n value: number | null | undefined,\r\n { fractions = 2, showPlusSign = false, defaultValue = '-' }: Partial = {}\r\n) {\r\n if (value === undefined || value === null) return defaultValue\r\n\r\n const fixedValue = value.toFixed(fractions)\r\n const prefix = showPlusSign && value > 0 ? '+' : ''\r\n\r\n if (parseFloat(fixedValue) === 0 && value !== 0) {\r\n return {prefix + fixedValue}\r\n }\r\n\r\n const formatted = getIntl(fractions).format(value)\r\n\r\n return prefix + formatted\r\n}\r\n\r\nexport interface SortByColumnOptions {\r\n /**\r\n * Change order of `null` values.\r\n * - `false` Force sort null as first (asc) and last (desc)\r\n * - `true` Always sort null as last regardless of order\r\n * @default false\r\n */\r\n sortNullAsLast?: boolean\r\n\r\n /**\r\n * When true, null values will not be treated as special values\r\n * @default false\r\n */\r\n ignoreNullForComparison?: boolean\r\n}\r\n\r\nexport function sortByColumn(\r\n options: SortByColumnOptions & {\r\n a: ItemType\r\n b: ItemType\r\n direction: SortDirectionValue\r\n valueGetter?: (row: ItemType) => SortableValue\r\n }\r\n) {\r\n const valueA = options.valueGetter?.(options.a)\r\n const valueB = options.valueGetter?.(options.b)\r\n // Compare as strings\r\n if (typeof valueA === 'string' && typeof valueB === 'string') return valueA.localeCompare(valueB) * options.direction\r\n\r\n // Always sort null last if enabled\r\n if (options.sortNullAsLast && valueA === null) return Infinity\r\n if (options.sortNullAsLast && valueB === null) return -Infinity\r\n\r\n // Sort null first/last depending on direction\r\n if (!options.ignoreNullForComparison && valueA === null) return -options.direction\r\n if (!options.ignoreNullForComparison && valueB === null) return options.direction\r\n\r\n // Compare as numbers\r\n return (Number(valueA) - Number(valueB)) * options.direction\r\n}\r\n\r\nexport function moveItemInArray(arr: ItemType[], sourceIndex: number, destinationIndex: number) {\r\n // make sure sourceIndex and destinationIndex are inside of arr\r\n const from = Math.max(0, Math.min(sourceIndex, arr.length - 1))\r\n const to = Math.min(arr.length - 1, Math.max(destinationIndex, 0))\r\n\r\n const items = [...arr]\r\n const [removed] = items.splice(from, 1)\r\n items.splice(to, 0, removed)\r\n\r\n return items\r\n}\r\n\r\nexport function randomUUID() {\r\n return `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, (substring) => {\r\n const c = Number(substring)\r\n return (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)\r\n })\r\n}\r\n\r\nexport function getUuid() {\r\n return window.crypto?.randomUUID?.() ?? randomUUID()\r\n}\r\n\r\n/**\r\n * This fn creates a revalidator rule which always revalidates loader when the\r\n * specified keys change but ignores changes to other keys. It also allows\r\n * `revalidator.revalidate` to work even if the query didn’t\r\n */\r\nexport function revalidateOnQueryChange(keys: string[]): ShouldRevalidateFunction {\r\n return (args) => {\r\n const prevParams = args.currentUrl.searchParams\r\n const nextParams = args.nextUrl.searchParams\r\n const requiredChanged = keys.some((key) => prevParams.get(key) !== nextParams.get(key))\r\n const otherQueryKeys = [...prevParams.keys(), ...nextParams.keys()].filter(\r\n (key, index, arr) => !keys.includes(key) && arr.indexOf(key) === index\r\n )\r\n const otherChanged = otherQueryKeys.some((key) => prevParams.get(key) !== nextParams.get(key))\r\n\r\n if (!requiredChanged && otherChanged) {\r\n return false\r\n }\r\n\r\n return args.defaultShouldRevalidate\r\n }\r\n}\r\n\r\n/**\r\n * This fn does the same as `revalidateOnQueryChange`\r\n * except you need to provide `ShouldRevalidateFunctionArgs` manually\r\n */\r\nexport function shouldRevalidateOnQueryChange(args: ShouldRevalidateFunctionArgs, keys: string[]) {\r\n return revalidateOnQueryChange(keys)(args)\r\n}\r\n\r\nexport function parseRouteInitData({\r\n elementId = 'route-init-data',\r\n fallback,\r\n removeElement = true,\r\n}: { elementId?: string; fallback?: DataType; removeElement?: boolean } = {}): DataType | null {\r\n const element = document.getElementById(elementId)\r\n let initialData = fallback\r\n\r\n if (!element) return fallback ?? null\r\n\r\n try {\r\n const parsedData = parseInitData(elementId)\r\n if (removeElement) element.remove()\r\n\r\n if (parsedData) initialData = parsedData\r\n } catch {\r\n initialData = fallback\r\n }\r\n\r\n return initialData ?? null\r\n}\r\n\r\n/**\r\n * Used as a callback to autoFocusOnShow/autoFocusOnHide to make sure the page\r\n * doesn’t jump when focusing the element\r\n */\r\nexport function focusWithoutScroll(element: HTMLElement | null) {\r\n requestAnimationFrame(() => {\r\n element?.focus({ preventScroll: element.ariaHasPopup !== null })\r\n })\r\n\r\n return !element\r\n}\r\n\r\nexport function blurWithoutScroll(element: HTMLElement | null) {\r\n element?.focus({ preventScroll: true })\r\n\r\n return !element\r\n}\r\n\r\n/**\r\n * Can be used as a callback for events if you just need to prevent the default action\r\n */\r\nexport function preventDefault(ev: React.MouseEvent) {\r\n ev.preventDefault()\r\n}\r\n\r\nexport function getNavigationLinkUrl(\r\n url: URL,\r\n preservedKeys?: string[],\r\n removeQueryKeys?: string[],\r\n additionalQueryValues: Record = {}\r\n) {\r\n const newUrl = new URL(url)\r\n\r\n if (preservedKeys?.length) {\r\n for (const key of newUrl.searchParams.keys()) {\r\n if (!preservedKeys.includes(key)) newUrl.searchParams.delete(key)\r\n }\r\n }\r\n\r\n removeQueryKeys?.forEach((key) => {\r\n newUrl.searchParams.delete(key)\r\n })\r\n\r\n Object.entries(additionalQueryValues).forEach(([key, value]) => {\r\n newUrl.searchParams.set(key, value as string)\r\n })\r\n\r\n return newUrl\r\n}\r\n","/**\n * React Router DOM v6.26.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nexport { UNSAFE_ErrorResponseImpl } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && (\n // Ignore everything but left clicks\n !target || target === \"_self\") &&\n // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0);\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `
`/`` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\"Cannot submit a