{"version":3,"file":"main.421d21c6.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 '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-[11px] 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 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.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 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}\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","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\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\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\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?: Record,\r\n options?: pathToRegexp.ParseOptions & pathToRegexp.TokensToFunctionOptions\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 }, { validate: false }),\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) => compilePath(path.backtestDetail, { 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}\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","/**\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