{"version":3,"file":"8881.87e6381b.js","mappings":"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","sources":["webpack://@finviz/website/./js/main/components/button.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/spinner.tsx","webpack://@finviz/website/./js/main/components/typography.tsx","webpack://@finviz/website/./js/main/services/api.ts"],"sourcesContent":["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 xlarge = 'text-sm h-11 min-w-9', // 44px 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 xlarge = 'px-3.5', // 14px 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 xlarge = 'h-11 w-11', // 44x44px\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 chipOutline,\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({\r\n theme,\r\n active = false,\r\n size = 'regular',\r\n}: {\r\n theme: ButtonTheme\r\n active?: boolean\r\n size?: ButtonSizeType\r\n}) {\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 disabled:text-gray-400',\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.chipOutline:\r\n return {\r\n button: classnames(\r\n // Base styles\r\n 'border text-gray-600 disabled:text-gray-400 disabled:hover:border-gray-200 disabled:hover:bg-primary disabled:hover:text-gray-400',\r\n // Dark styles\r\n 'dark:text-gray-200 dark:disabled:text-gray-400 dark:disabled:hover:text-gray-400 dark:disabled:hover:border-gray-600 dark:disabled:hover:bg-primary',\r\n {\r\n 'bg-primary border-primary hover:text-default hover:border-gray-300 hover:bg-gray-50 dark:hover:text-default dark:hover:bg-gray-900 dark:hover:border-gray-400':\r\n !active,\r\n 'text-default border-blue-400 bg-blue-50 dark:bg-blue-700 dark:text-white': active,\r\n }\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 dark:text-blue-300': active,\r\n 'shadow-[inset_0_-1px_0]': active && size !== 'xlarge',\r\n 'shadow-[inset_0_-3px_0]': active && size === 'xlarge',\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(\r\n () => getButtonTheme({ theme: ButtonTheme[theme], active, size }),\r\n [theme, active, size]\r\n )\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 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\nconst screener = 'screener'\r\n\r\n// Export list of icon components\r\nexport const iconList = {\r\n // Main icons\r\n add: root,\r\n arrowBackward: 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 // Screener\r\n above: screener,\r\n aboveEqual: screener,\r\n abovePercent: screener,\r\n below: screener,\r\n belowEqual: screener,\r\n belowPercent: screener,\r\n between: screener,\r\n crosses: screener,\r\n crossesDown: screener,\r\n crossesUp: screener,\r\n equal: screener,\r\n outside: screener,\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","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"],"names":["BUTTON_BASE_CLASS","BUTTON_FOCUS_STYLES","ButtonSize","ButtonPadding","ButtonAlign","ButtonSquareSize","ButtonRounding","ButtonTheme","getButtonTheme","_ref","theme","active","size","light","button","classnames","lightTransparent","dark","blue","violet","blueHover","red","headerItem","icon","menuItem","menuItemTransparent","menuItemDark","opacity","outline","chip","chipOutline","chipTransparent","link","linkText","tab","ButtonComponent","_ref2","ref","as","asComponent","rounding","focusRing","appearance","align","padding","contentClass","leftContent","rightContent","className","children","props","isSquare","buttonTheme","React","buttonPadding","buttonSize","buttonRounding","hasIcons","_jsxs","_Fragment","_jsx","isValidIconName","Icon","name","left","center","xxsmall","xsmall","none","small","regular","includes","medium","large","xlarge","Button","width","height","Error","undefined","iconList","fileName","filter","Boolean","join","Number","isFinite","href","FinvizSettings","versionImages","Component","root","chartLayouts","chartTools","chartTypes","screener","add","arrowBackward","arrowDownShort","arrowForward","arrowUpShort","briefcase","calendar","caretDown","caretLeft","caretRight","caretUp","caretVertical","chartBar","chartBubble","chartPie","chartTable","chartTreemap","chevronDown","chevronRight","close","darkMode","diamondOutlined","done","drag","draw","empty","exitFullscreen","flash","fullscreen","gesture","gift","hamburger","help","idea","ideaLoad","ideaSave","info","interval","lightMode","lock","lockOpened","menuClose","minus","more","note","openInNew","palette","profile","publish","refresh","remove","restore","search","settings","settingsWheel","share","signOut","star","starOutlined","switchHorizontal","switchVertical","tabKey","template","trashCan","trendingDown","trendingUp","triangle","triangleOutlineDown","triangleOutlineUp","warning","layout1h1v","layout1h2v","layout1h3v","layout1l2r","layout1t2b","layout2h1v","layout2h2v","layout3h1v","layout3h2v","drawingActionDelete","drawingSettingAutosaveOff","drawingSettingAutosaveOn","drawingSettingAutosaveSaving","drawingSettingDrawingMode","drawingSettingDrawingModeActive","drawingSettingHide","drawingSettingLock","drawingSettingPreserveDrawings","drawingSettingPreserveDrawingsActive","drawingSettingShow","drawingSettingUnlock","toolArrow","toolBrush","toolCallout","toolCurve","toolElliottWave","toolEllipse","toolExpand","toolFibonacci","toolLine","toolMeasure","toolMidLineH","toolMidLineV","toolMouse","toolPitchfork","toolPolygon","toolPosition","toolRect","toolRectRotated","toolText","toolTriangle","toolXABCD","candleBarBasic","candleBarHeikinAshi","candleBarHollow","lineChartType","ohlcChartType","above","aboveEqual","abovePercent","below","belowEqual","belowPercent","between","crosses","crossesDown","crossesUp","equal","outside","Spinner","isProgressBar","progress","radius","strokeWidth","circleXY","circumference","Math","PI","viewBox","xmlns","style","cx","cy","r","strokeDasharray","strokeDashoffset","strokeLinecap","Heading","level","getHeadingElement","Paragraph","Label","_ref3","title","titleClassName","isHorizontal","ContentType","ThrowableError","constructor","status","body","arguments","length","extra","super","_defineProperty","this","isServerError","apiRequest","url","_ContentType","query","headers","options","throwOnAllErrors","controller","window","AbortController","requestUrl","URLSearchParams","requestOptions","ApplicationJson","cancelableRequest","fetch","signal","then","async","textResponse","response","text","responseContentType","get","Html","parsedResponse","contentType","ApplicationJsonUTF","FormUrlEncoded","JSON","parse","parseResponseForContentType","ok","statusText","rayId","error","message","catch","Sentry","scope","setContext","cancel","abort","aborted","searchApiRequest","input","portfoliosRequest","fields","lastCloseRequest","ticker","t","portfolioLimitRequest","portfolioId","pid","setCookieRequest","value","cookie"],"sourceRoot":""}