{"version":3,"file":"libs_init.422e4b7e.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/header/market-badge.tsx","webpack://@finviz/website/./js/app/header/time.tsx","webpack://@finviz/website/./js/app/header/utils.ts","webpack://@finviz/website/./js/app/queryString.ts","webpack://@finviz/website/./js/app/quote/create-alert/async-modules.ts","webpack://@finviz/website/./js/app/quote/save-to-portfolio/async-modules.ts","webpack://@finviz/website/./js/app/shared/chartLayoutConfig.ts","webpack://@finviz/website/./js/app/shared/cookie.ts","webpack://@finviz/website/./js/app/shared/hover-chart.ts","webpack://@finviz/website/./js/app/shared/isMobile.ts","webpack://@finviz/website/./js/app/shared/ticker-sanitizer.ts","webpack://@finviz/website/./js/app/shared/tracking.ts","webpack://@finviz/website/./js/app/shared/utils.ts","webpack://@finviz/website/./js/main/components/box.tsx","webpack://@finviz/website/./js/main/components/button-group/button-group.tsx","webpack://@finviz/website/./js/main/components/button.tsx","webpack://@finviz/website/./js/main/components/checkbox.tsx","webpack://@finviz/website/./js/main/components/color-picker/draggable.tsx","webpack://@finviz/website/./js/main/components/color-picker/pointer.tsx","webpack://@finviz/website/./js/main/components/color-picker/util.ts","webpack://@finviz/website/./js/main/components/color-picker/alpha.tsx","webpack://@finviz/website/./js/main/components/color-picker/color-palette.tsx","webpack://@finviz/website/./js/main/components/color-picker/hue-saturation.tsx","webpack://@finviz/website/./js/main/components/color-picker/lightness.tsx","webpack://@finviz/website/./js/main/components/color-picker/color-preview.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker-input.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker-button.tsx","webpack://@finviz/website/./js/main/components/constants.ts","webpack://@finviz/website/./js/main/components/copy-to-clipboard/copy-to-clipboard.tsx","webpack://@finviz/website/./js/main/components/date-picker/index.tsx","webpack://@finviz/website/./js/main/components/delayed.tsx","webpack://@finviz/website/./js/main/components/dialog/hooks.ts","webpack://@finviz/website/./js/main/components/dialog/dialog-box.tsx","webpack://@finviz/website/./js/main/components/dialog/dialog-overlay.tsx","webpack://@finviz/website/./js/main/components/dialog/utils.ts","webpack://@finviz/website/./js/main/components/dialog/dialog.tsx","webpack://@finviz/website/./js/main/hooks/use-screen-size.ts","webpack://@finviz/website/./js/main/components/dialog/dialog-body.tsx","webpack://@finviz/website/./js/main/components/dialog/confirmation-dialog.tsx","webpack://@finviz/website/./js/main/components/dialog/dialog-trigger.tsx","webpack://@finviz/website/./js/main/components/dialog/dialog-footer.tsx","webpack://@finviz/website/./js/main/components/dialog/dialog-header.tsx","webpack://@finviz/website/./js/main/components/dropdown/hooks.ts","webpack://@finviz/website/./js/main/components/dropdown/dropdown.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown-bar.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown-item.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown-separator.tsx","webpack://@finviz/website/./js/main/components/dropdown/more-button.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/icon/add.tsx","webpack://@finviz/website/./js/main/components/icon/arrow-down-short.tsx","webpack://@finviz/website/./js/main/components/icon/arrow-forward.tsx","webpack://@finviz/website/./js/main/components/icon/arrow-up-short.tsx","webpack://@finviz/website/./js/main/components/icon/briefcase.tsx","webpack://@finviz/website/./js/main/components/icon/calendar.tsx","webpack://@finviz/website/./js/main/components/icon/candle-bar-basic.tsx","webpack://@finviz/website/./js/main/components/icon/candle-bar-heikin-ashi.tsx","webpack://@finviz/website/./js/main/components/icon/candle-bar-hollow.tsx","webpack://@finviz/website/./js/main/components/icon/caret-down.tsx","webpack://@finviz/website/./js/main/components/icon/caret-left.tsx","webpack://@finviz/website/./js/main/components/icon/caret-right.tsx","webpack://@finviz/website/./js/main/components/icon/caret-up.tsx","webpack://@finviz/website/./js/main/components/icon/caretVertical.tsx","webpack://@finviz/website/./js/main/components/icon/chart-bar.tsx","webpack://@finviz/website/./js/main/components/icon/chart-bubble.tsx","webpack://@finviz/website/./js/main/components/icon/chart-pie.tsx","webpack://@finviz/website/./js/main/components/icon/chart-table.tsx","webpack://@finviz/website/./js/main/components/icon/chart-treemap.tsx","webpack://@finviz/website/./js/main/components/icon/chevron-down.tsx","webpack://@finviz/website/./js/main/components/icon/chevron-right.tsx","webpack://@finviz/website/./js/main/components/icon/menu-close.tsx","webpack://@finviz/website/./js/main/components/icon/dark-mode.tsx","webpack://@finviz/website/./js/main/components/icon/diamond-outlined.tsx","webpack://@finviz/website/./js/main/components/icon/done.tsx","webpack://@finviz/website/./js/main/components/icon/drag.tsx","webpack://@finviz/website/./js/main/components/icon/draw.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-action-delete.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-autosave-off.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-autosave-on.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-autosave-saving.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-drawing-mode.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-drawing-mode-active.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-hide.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-lock.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-preserve-drawings.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-preserve-drawings-active.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-show.tsx","webpack://@finviz/website/./js/main/components/icon/drawing-setting-unlock.tsx","webpack://@finviz/website/./js/main/components/icon/exit-fullscreen.tsx","webpack://@finviz/website/./js/main/components/icon/flash.tsx","webpack://@finviz/website/./js/main/components/icon/fullscreen.tsx","webpack://@finviz/website/./js/main/components/icon/gesture.tsx","webpack://@finviz/website/./js/main/components/icon/gift.tsx","webpack://@finviz/website/./js/main/components/icon/hamburger.tsx","webpack://@finviz/website/./js/main/components/icon/help.tsx","webpack://@finviz/website/./js/main/components/icon/idea.tsx","webpack://@finviz/website/./js/main/components/icon/idea-load.tsx","webpack://@finviz/website/./js/main/components/icon/idea-save.tsx","webpack://@finviz/website/./js/main/components/icon/info.tsx","webpack://@finviz/website/./js/main/components/icon/interval.tsx","webpack://@finviz/website/./js/main/components/icon/layout-1h1v.tsx","webpack://@finviz/website/./js/main/components/icon/layout-1h2v.tsx","webpack://@finviz/website/./js/main/components/icon/layout-1h3v.tsx","webpack://@finviz/website/./js/main/components/icon/layout-1l2r.tsx","webpack://@finviz/website/./js/main/components/icon/layout-1t2b.tsx","webpack://@finviz/website/./js/main/components/icon/layout-2h1v.tsx","webpack://@finviz/website/./js/main/components/icon/layout-2h2v.tsx","webpack://@finviz/website/./js/main/components/icon/layout-3h1v.tsx","webpack://@finviz/website/./js/main/components/icon/layout-3h2v.tsx","webpack://@finviz/website/./js/main/components/icon/light-mode.tsx","webpack://@finviz/website/./js/main/components/icon/line-chart-type.tsx","webpack://@finviz/website/./js/main/components/icon/lock.tsx","webpack://@finviz/website/./js/main/components/icon/close.tsx","webpack://@finviz/website/./js/main/components/icon/minus.tsx","webpack://@finviz/website/./js/main/components/icon/more.tsx","webpack://@finviz/website/./js/main/components/icon/note.tsx","webpack://@finviz/website/./js/main/components/icon/ohlc-chart-type.tsx","webpack://@finviz/website/./js/main/components/icon/palette.tsx","webpack://@finviz/website/./js/main/components/icon/profile.tsx","webpack://@finviz/website/./js/main/components/icon/publish.tsx","webpack://@finviz/website/./js/main/components/icon/refresh.tsx","webpack://@finviz/website/./js/main/components/icon/remove.tsx","webpack://@finviz/website/./js/main/components/icon/restore.tsx","webpack://@finviz/website/./js/main/components/icon/search.tsx","webpack://@finviz/website/./js/main/components/icon/settings.tsx","webpack://@finviz/website/./js/main/components/icon/settings-wheel.tsx","webpack://@finviz/website/./js/main/components/icon/share.tsx","webpack://@finviz/website/./js/main/components/icon/sign-out.tsx","webpack://@finviz/website/./js/main/components/icon/star.tsx","webpack://@finviz/website/./js/main/components/icon/star-outlined.tsx","webpack://@finviz/website/./js/main/components/icon/switch-horizontal.tsx","webpack://@finviz/website/./js/main/components/icon/switch-vertical.tsx","webpack://@finviz/website/./js/main/components/icon/tab-key.tsx","webpack://@finviz/website/./js/main/components/icon/template.tsx","webpack://@finviz/website/./js/main/components/icon/tool-arrow.tsx","webpack://@finviz/website/./js/main/components/icon/tool-brush.tsx","webpack://@finviz/website/./js/main/components/icon/tool-callout.tsx","webpack://@finviz/website/./js/main/components/icon/tool-curve.tsx","webpack://@finviz/website/./js/main/components/icon/tool-elliott-wave.tsx","webpack://@finviz/website/./js/main/components/icon/tool-ellipse.tsx","webpack://@finviz/website/./js/main/components/icon/tool-expand.tsx","webpack://@finviz/website/./js/main/components/icon/tool-fibonacci.tsx","webpack://@finviz/website/./js/main/components/icon/tool-line.tsx","webpack://@finviz/website/./js/main/components/icon/tool-measure.tsx","webpack://@finviz/website/./js/main/components/icon/tool-midline-h.tsx","webpack://@finviz/website/./js/main/components/icon/tool-midline-v.tsx","webpack://@finviz/website/./js/main/components/icon/tool-mouse.tsx","webpack://@finviz/website/./js/main/components/icon/tool-pitchfork.tsx","webpack://@finviz/website/./js/main/components/icon/tool-polygon.tsx","webpack://@finviz/website/./js/main/components/icon/tool-position.tsx","webpack://@finviz/website/./js/main/components/icon/tool-rect.tsx","webpack://@finviz/website/./js/main/components/icon/tool-rect-rotated.tsx","webpack://@finviz/website/./js/main/components/icon/tool-text.tsx","webpack://@finviz/website/./js/main/components/icon/tool-triangle.tsx","webpack://@finviz/website/./js/main/components/icon/tool-xabcd.tsx","webpack://@finviz/website/./js/main/components/icon/trash-can.tsx","webpack://@finviz/website/./js/main/components/icon/trending-down.tsx","webpack://@finviz/website/./js/main/components/icon/trending-up.tsx","webpack://@finviz/website/./js/main/components/icon/triangle.tsx","webpack://@finviz/website/./js/main/components/icon/triangle-outline-down.tsx","webpack://@finviz/website/./js/main/components/icon/triangle-outline-up.tsx","webpack://@finviz/website/./js/main/components/icon/warning.tsx","webpack://@finviz/website/./js/main/components/icon/svg.tsx","webpack://@finviz/website/./js/main/components/input.tsx","webpack://@finviz/website/./js/main/components/list/hooks.tsx","webpack://@finviz/website/./js/main/components/list/list-item.tsx","webpack://@finviz/website/./js/main/components/list/list.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/popover/popover.tsx","webpack://@finviz/website/./js/main/components/popover/hooks.ts","webpack://@finviz/website/./js/main/components/popover/popover-trigger.tsx","webpack://@finviz/website/./js/main/components/combo-box/combo-box-item.tsx","webpack://@finviz/website/./js/main/components/combo-box/combo-box.tsx","webpack://@finviz/website/./js/main/components/search/constants.ts","webpack://@finviz/website/./js/main/components/centered.tsx","webpack://@finviz/website/./js/main/components/search/search-error.tsx","webpack://@finviz/website/./js/main/components/highlight.tsx","webpack://@finviz/website/./js/main/components/search/search-item.tsx","webpack://@finviz/website/./js/main/components/search/util.ts","webpack://@finviz/website/./js/main/components/search/search-list.tsx","webpack://@finviz/website/./js/main/components/search/search.tsx","webpack://@finviz/website/./js/main/components/combo-box/hooks.ts","webpack://@finviz/website/./js/main/components/select/hooks.ts","webpack://@finviz/website/./js/main/components/select/select-button.tsx","webpack://@finviz/website/./js/main/components/select/select.tsx","webpack://@finviz/website/./js/main/components/select/select-with-tooltip.tsx","webpack://@finviz/website/./js/main/components/select/native-select.tsx","webpack://@finviz/website/./js/main/components/select/select-list.tsx","webpack://@finviz/website/./js/main/components/spinner.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/daterange-select.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/label-with-delayed-spinner.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/timeframe-select.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/timeframe-bar.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/utils.ts","webpack://@finviz/website/./js/main/components/timeframe-bar/custom-date-range-utils.ts","webpack://@finviz/website/./js/main/components/timeframe-bar/custom-date-range.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/use-custom-date-range-dialog.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/use-favorite-timeframes.tsx","webpack://@finviz/website/./js/main/components/tooltip-input.tsx","webpack://@finviz/website/./js/main/components/tooltip/tooltip-box.tsx","webpack://@finviz/website/./js/main/components/tooltip/tooltip.tsx","webpack://@finviz/website/./js/main/components/tooltip/tooltip-trigger.tsx","webpack://@finviz/website/./js/main/components/tooltip/hooks.ts","webpack://@finviz/website/./js/main/components/tooltip/tooltip-arrow.tsx","webpack://@finviz/website/./js/main/components/tooltip/types.ts","webpack://@finviz/website/./js/main/components/typography.tsx","webpack://@finviz/website/./js/main/constants.ts","webpack://@finviz/website/./js/main/hooks/use-element-measure.ts","webpack://@finviz/website/./js/main/hooks/use-is-mounted.ts","webpack://@finviz/website/./js/main/hooks/use-popover-maxHeight.ts","webpack://@finviz/website/./js/main/hooks/use-resize-observer.ts","webpack://@finviz/website/./js/main/hooks/use-sync-local-storage.ts","webpack://@finviz/website/./js/main/hooks/use-track-pageview.ts","webpack://@finviz/website/./js/main/hooks/use-window-size.tsx","webpack://@finviz/website/./js/main/hooks/useVisualViewport.ts","webpack://@finviz/website/./js/main/components/context-menu/context-menu.tsx","webpack://@finviz/website/./js/main/components/grid/grid.tsx","webpack://@finviz/website/./js/main/components/inner-state/inner-state.tsx","webpack://@finviz/website/./js/main/components/range.tsx","webpack://@finviz/website/./js/main/components/toolbar/interfaces.ts","webpack://@finviz/website/./js/main/components/toolbar/hooks.ts","webpack://@finviz/website/./js/main/components/toolbar/toolbar.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-button.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-group.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-item.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-divider.tsx","webpack://@finviz/website/./js/main/components/tour/step-content.tsx","webpack://@finviz/website/./js/main/components/tour/utils.ts","webpack://@finviz/website/./js/main/components/tour/hooks.tsx","webpack://@finviz/website/./js/main/components/index.ts","webpack://@finviz/website/./js/main/components/portfolio/async-modules.ts","webpack://@finviz/website/./js/main/libs-init.ts","webpack://@finviz/website/./js/main/services/api.ts","webpack://@finviz/website/./js/main/services/async-modules-utils.tsx","webpack://@finviz/website/./js/main/services/import-with-retry.ts","webpack://@finviz/website/./js/main/services/local-storage.ts","webpack://@finviz/website/./js/main/services/routing.ts","webpack://@finviz/website/./js/main/types.ts","webpack://@finviz/website/./js/main/util.tsx"],"sourcesContent":["import classnames from 'classnames'\r\n\r\nimport { isAftermarket, isHoliday, isPremarket } from './utils'\r\n\r\nexport enum MarketBadgeType {\r\n None,\r\n Open,\r\n Closed,\r\n Premarket,\r\n Aftermarket,\r\n}\r\n\r\nexport function getMarketBadgeText(type: MarketBadgeType, _date?: Date) {\r\n switch (type) {\r\n case MarketBadgeType.Open:\r\n return {\r\n label: 'Markets Open',\r\n }\r\n case MarketBadgeType.Closed:\r\n // const holiday = getHoliday(date)\r\n\r\n return {\r\n label: 'Markets Closed',\r\n // description: holiday && (\r\n // <>\r\n // The markets observe U.S. holidays and are closed on\r\n //
\r\n // {holiday.label}\r\n // \r\n // ),\r\n }\r\n case MarketBadgeType.Premarket:\r\n return {\r\n label: 'Premarket',\r\n // description: (\r\n // <>\r\n // An additional time window when trading is possible.\r\n //
\r\n // We report it as the time between 7:00 AM and 9:30 AM\r\n // \r\n // ),\r\n }\r\n case MarketBadgeType.Aftermarket:\r\n return {\r\n label: 'Aftermarket',\r\n // description: (\r\n // <>\r\n // An additional time window when trading is still possible.\r\n //
\r\n // We report it as the time between 4:00 PM and 6:30 PM\r\n // \r\n // ),\r\n }\r\n }\r\n}\r\n\r\nexport function getMarketBadgeType(time: Date, hasUserPremium?: boolean) {\r\n if (isHoliday(time)) return MarketBadgeType.Closed\r\n if (isPremarket(time, hasUserPremium)) return MarketBadgeType.Premarket\r\n if (isAftermarket(time, hasUserPremium)) return MarketBadgeType.Aftermarket\r\n // if (isMarketOpen(time, hasUserPremium)) return MarketBadgeType.Open\r\n\r\n return MarketBadgeType.None\r\n}\r\n\r\nexport interface MarketBadgeProps {\r\n badge: MarketBadgeType\r\n className?: string\r\n}\r\n\r\nexport function MarketBadge({ badge, className }: MarketBadgeProps) {\r\n if (badge === MarketBadgeType.None) return null\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nimport { Tooltip, TooltipTrigger, useTooltipState } from '../../main/components/tooltip'\r\nimport { Heading } from '../../main/components/typography'\r\nimport { useResizeObserver } from '../../main/hooks/use-resize-observer'\r\nimport { MarketBadge, MarketBadgeProps, getMarketBadgeText, getMarketBadgeType } from './market-badge'\r\nimport { TimeFormatType, getDate, getFormattedDateString } from './utils'\r\n\r\nconst UPDATE_INTERVAL = 10000\r\n\r\nenum TimeBreakpointMode {\r\n container,\r\n window,\r\n}\r\n\r\nexport interface TimeBreakpoint {\r\n minWidth: number\r\n marketBadgeText: boolean\r\n timeFormat: TimeFormatType\r\n}\r\n\r\nconst BREAKPOINTS: TimeBreakpoint[] = [\r\n { minWidth: -Infinity, marketBadgeText: false, timeFormat: 'timeOnly' },\r\n { minWidth: 140, marketBadgeText: false, timeFormat: 'short' },\r\n { minWidth: 180, marketBadgeText: false, timeFormat: 'long' },\r\n { minWidth: 255, marketBadgeText: true, timeFormat: 'long' },\r\n]\r\n\r\nfunction getTimeState(fixedTime?: string | Date, hasUserPremium: boolean = FinvizSettings.hasUserPremium) {\r\n const time = getDate(fixedTime)\r\n const badge = getMarketBadgeType(time, hasUserPremium)\r\n\r\n return { time, badge }\r\n}\r\n\r\nfunction TooltipBadge(props: MarketBadgeProps & { time: Date }) {\r\n const state = useTooltipState({ placement: 'bottom' })\r\n const badge = getMarketBadgeText(props.badge, props.time)\r\n\r\n if (!badge) return null\r\n\r\n return (\r\n <>\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {badge.label}\r\n \r\n {/* {badge.description && {badge.description}} */}\r\n \r\n \r\n )\r\n}\r\n\r\nfunction StaticBadge(props: MarketBadgeProps & { time: Date }) {\r\n const badge = getMarketBadgeText(props.badge, props.time)\r\n\r\n if (!badge) return null\r\n\r\n return (\r\n <>\r\n \r\n {`${badge.label} · `}\r\n \r\n )\r\n}\r\n\r\n/**\r\n * Find matching breakpoint or return the last (largest) one\r\n */\r\nfunction findMatchingBreakpoint(compareWidth: number | undefined, breakpoints: TimeBreakpoint[]) {\r\n if (typeof compareWidth !== 'number') return breakpoints[breakpoints.length - 1]\r\n\r\n const matchingBreakpoints = breakpoints.filter((breakpoint) => compareWidth >= breakpoint.minWidth)\r\n\r\n return matchingBreakpoints.pop() ?? breakpoints[breakpoints.length - 1]\r\n}\r\n\r\nfunction getCurrentWidth(mode: TimeBreakpointMode, element: HTMLElement | null) {\r\n return mode === TimeBreakpointMode.window ? window.innerWidth : element?.clientWidth ?? 0\r\n}\r\n\r\ninterface TimeProps extends React.HTMLProps {\r\n /**\r\n * Set custom time to display\r\n */\r\n fixedTime?: string | Date\r\n\r\n /**\r\n * What to measure the breakpoints to\r\n * - `container` parent element\r\n * - `window` window\r\n *\r\n * @default \"container\"\r\n */\r\n breakpointMode?: keyof typeof TimeBreakpointMode\r\n\r\n /**\r\n * Defines what information is visible at which breakpoint. Local mode measures\r\n * the component wrapper div and global mode measures window width. The definitions\r\n * must be ascending in width\r\n */\r\n breakpoints?: TimeBreakpoint[]\r\n}\r\n\r\nexport function Time({\r\n className,\r\n fixedTime,\r\n breakpointMode = 'container',\r\n breakpoints = BREAKPOINTS,\r\n ...props\r\n}: TimeProps) {\r\n const ResizeObserver = useResizeObserver()\r\n const rootRef = React.useRef(null)\r\n const [state, setState] = React.useState(getTimeState(fixedTime))\r\n const [currentBreakpoint, setBreakpoint] = React.useState(null)\r\n\r\n React.useEffect(() => {\r\n const interval = setInterval(() => setState(getTimeState(fixedTime)), UPDATE_INTERVAL)\r\n return () => clearInterval(interval)\r\n }, [fixedTime])\r\n\r\n React.useEffect(() => {\r\n if (!ResizeObserver || !rootRef.current) return\r\n\r\n if (!currentBreakpoint) {\r\n const currentWidth = getCurrentWidth(TimeBreakpointMode[breakpointMode], rootRef.current)\r\n setBreakpoint(findMatchingBreakpoint(currentWidth, breakpoints))\r\n }\r\n\r\n const handleResize = throttle(() => {\r\n const currentWidth = getCurrentWidth(TimeBreakpointMode[breakpointMode], rootRef.current)\r\n const foundBreakpoint = findMatchingBreakpoint(currentWidth, breakpoints)\r\n\r\n if (foundBreakpoint !== currentBreakpoint) setBreakpoint(foundBreakpoint)\r\n }, 150)\r\n\r\n const observer = new ResizeObserver((entries) => {\r\n window.requestAnimationFrame(() => {\r\n if (Array.isArray(entries) && entries.length > 0) handleResize()\r\n })\r\n })\r\n\r\n observer.observe(rootRef.current)\r\n window.addEventListener('resize', handleResize)\r\n\r\n return () => {\r\n observer.disconnect()\r\n window.removeEventListener('resize', handleResize)\r\n }\r\n }, [ResizeObserver, currentBreakpoint, breakpoints, breakpointMode])\r\n\r\n return (\r\n
\r\n {currentBreakpoint && (\r\n
\r\n {currentBreakpoint.marketBadgeText ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {getFormattedDateString(state.time, currentBreakpoint.timeFormat)}\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n","import * as dateFns from 'date-fns'\r\n\r\n/**\r\n * Check if a given date is DST in the US\r\n * - begins on the second Sunday in March\r\n * - ends on the first Sunday in November\r\n *\r\n * Keep in sync with https://github.com/finvizhq/charts/blob/master/app/utils.ts\r\n */\r\nexport function getIsDstInNy(date: Date) {\r\n const dayNumber = date.getDate()\r\n const monthIndex = date.getMonth()\r\n const dayOfWeek = date.getDay()\r\n const previousSunday = dayNumber - dayOfWeek\r\n if (monthIndex < 2 || monthIndex > 10) {\r\n return false\r\n }\r\n if (monthIndex > 2 && monthIndex < 10) {\r\n return true\r\n }\r\n return monthIndex === 2 ? previousSunday >= 8 : previousSunday <= 0\r\n}\r\n\r\nexport function getDate(seed?: string | number | Date | null) {\r\n var date = seed != null ? new Date(seed) : new Date()\r\n const dateAsNY = new Date(\r\n date.getUTCFullYear(),\r\n date.getUTCMonth(),\r\n date.getUTCDate(),\r\n date.getUTCHours() - 5,\r\n date.getUTCMinutes(),\r\n date.getUTCSeconds()\r\n )\r\n const isDst = getIsDstInNy(dateAsNY)\r\n\r\n if (isDst) {\r\n dateAsNY.setUTCHours(dateAsNY.getUTCHours() + 1)\r\n }\r\n\r\n return dateAsNY\r\n}\r\n\r\nfunction getWeekDay(date: Date) {\r\n return date.toLocaleDateString('en-US', { weekday: 'short' })\r\n}\r\n\r\nfunction getMonth(date: Date, uppercase = true) {\r\n const name = date.toLocaleDateString('en-US', { month: 'short' })\r\n return uppercase ? name.toUpperCase() : name\r\n}\r\n\r\nfunction getDay(date: Date) {\r\n return date.getDate().toString().padStart(2, '0')\r\n}\r\n\r\nfunction getTime(date: Date) {\r\n return date.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })\r\n}\r\n\r\nenum TimeFormat {\r\n long,\r\n short,\r\n dateOnly,\r\n timeOnly,\r\n}\r\n\r\nexport type TimeFormatType = keyof typeof TimeFormat\r\n\r\nexport function getFormattedDateString(date: Date = getDate(), format: TimeFormatType = 'long') {\r\n switch (TimeFormat[format]) {\r\n case TimeFormat.long:\r\n return `${getWeekDay(date)} ${getMonth(date)} ${getDay(date)} ${date.getFullYear()} ${getTime(date)} ET`\r\n case TimeFormat.short:\r\n return `${getWeekDay(date)} ${getMonth(date)} ${getDay(date)} ${getTime(date)}`\r\n case TimeFormat.dateOnly:\r\n return `${getMonth(date, false)} ${getDay(date)}`\r\n case TimeFormat.timeOnly:\r\n return getTime(date)\r\n }\r\n}\r\n\r\nexport function formatDate(value: Date | unknown, inputOrOutputFormat: string, outputFormat?: string): string {\r\n return dateFns.format(\r\n dateFns.isDate(value) ? (value as Date) : dateFns.parse(`${value}`, inputOrOutputFormat, new Date()),\r\n outputFormat ?? inputOrOutputFormat\r\n )\r\n}\r\n\r\nexport function isPremarket(date: Date = getDate(), isPremium = FinvizSettings.hasUserPremium) {\r\n const dayOfWeek = date.getDay()\r\n const min = date.getMinutes()\r\n const hours = date.getHours()\r\n\r\n if (isPremium && dayOfWeek !== 0 && dayOfWeek !== 6 && (hours === 7 || hours === 8 || (hours === 9 && min < 30))) {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nexport function isAftermarket(date: Date = getDate(), isPremium = FinvizSettings.hasUserPremium) {\r\n const dayOfWeek = date.getDay()\r\n const min = date.getMinutes()\r\n\r\n if (\r\n isPremium &&\r\n dayOfWeek !== 0 &&\r\n dayOfWeek !== 6 &&\r\n (date.getHours() === 16 || date.getHours() === 17 || (date.getHours() === 18 && min < 30))\r\n ) {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * https://www.nyse.com/markets/hours-calendars\r\n */\r\nconst HOLIDAY_DATES = [\r\n {\r\n label: \"New Year's Day\",\r\n test: (day: number, month: number) => month === 1 && day === 2,\r\n },\r\n {\r\n label: 'Martin Luther King, Jr. Day',\r\n test: (day: number, month: number) => month === 1 && day === 16,\r\n },\r\n {\r\n label: 'Presidents Day',\r\n test: (day: number, month: number) => month === 2 && day === 20,\r\n },\r\n {\r\n label: 'Good Friday',\r\n test: (day: number, month: number) => month === 4 && day === 7,\r\n },\r\n {\r\n label: 'Memorial Day',\r\n test: (day: number, month: number) => month === 5 && day === 29,\r\n },\r\n {\r\n label: 'Juneteenth Holiday',\r\n test: (day: number, month: number) => month === 6 && day === 19,\r\n },\r\n {\r\n label: 'Early Close',\r\n test: (day: number, month: number, hours: number) => month === 7 && day === 3 && hours >= 13,\r\n },\r\n {\r\n label: 'Independence Day',\r\n test: (day: number, month: number) => month === 7 && day === 4,\r\n },\r\n {\r\n label: 'Labor Day',\r\n test: (day: number, month: number) => month === 9 && day === 4,\r\n },\r\n {\r\n label: 'Thanksgiving Day',\r\n test: (day: number, month: number) => month === 11 && day === 23,\r\n },\r\n {\r\n label: 'Day after Thanksgiving (closed from 1 PM)',\r\n test: (day: number, month: number, hours: number) => month === 11 && day === 24 && hours >= 13,\r\n },\r\n {\r\n label: 'Christmas Day',\r\n test: (day: number, month: number) => month === 12 && day === 25,\r\n },\r\n]\r\n\r\nexport function getHoliday(date: Date = getDate()) {\r\n var day = date.getDate()\r\n var month = date.getMonth() + 1\r\n var hours = date.getHours()\r\n\r\n return HOLIDAY_DATES.find((holiday) => holiday.test(day, month, hours))\r\n}\r\n\r\nexport function isHoliday(date: Date = getDate()) {\r\n return !!getHoliday(date)\r\n}\r\n\r\nexport function isMarketOpen(date: Date = getDate(), isPremium = FinvizSettings.hasUserPremium) {\r\n if (isPremarket(date, isPremium) || isAftermarket(date, isPremium) || isHoliday(date)) {\r\n return false\r\n }\r\n\r\n const dayOfWeek = date.getDay()\r\n const hour = date.getHours()\r\n const minute = date.getMinutes()\r\n\r\n const isWeekend = dayOfWeek === 0 || dayOfWeek === 6\r\n // Day starts at 9:30\r\n const dayStarted = hour === 9 ? minute >= 30 : hour >= 10\r\n // Ends at 16:00\r\n const dayEnded = hour >= 16\r\n\r\n return !isWeekend && dayStarted && !dayEnded\r\n}\r\n","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 const createAlertAsyncModule = {\r\n importFn: () => import(/* webpackChunkName: \"create-alert\" */ './module-entry'),\r\n cacheKey: 'create-alert',\r\n}\r\n","export const saveToPortfolioAsyncModule = {\r\n importFn: () => import(/* webpackChunkName: \"save-to-portfolio\" */ './module-entry'),\r\n cacheKey: 'save-to-portfolio',\r\n}\r\n","import { getParsedCookies } from './cookie'\r\n\r\ninterface PaneElementProps {\r\n type: string\r\n label?: string\r\n fromDate?: string\r\n toDate?: string\r\n min?: number\r\n tickers: string[]\r\n overlays: string[]\r\n}\r\n\r\nexport enum SpecificChartFunctionality {\r\n default = 'default',\r\n quotePage = 'quotePage',\r\n quotePerf = 'quotePerf',\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\ninterface StaticChartConfigProps {\r\n width?: number\r\n height?: number\r\n ticker: string\r\n timeframe: string\r\n paneElements: PaneElementProps[]\r\n specificChartFunctionality?: SpecificChartFunctionality\r\n colorsOverride?: Array\r\n theme?: 'dark' | 'light'\r\n colors?: ReturnType\r\n refreshData?: boolean\r\n}\r\n\r\nexport function getStaticChartConfig({\r\n width = 800,\r\n height = 400,\r\n ticker,\r\n timeframe,\r\n paneElements,\r\n specificChartFunctionality = SpecificChartFunctionality.default,\r\n colorsOverride,\r\n theme,\r\n colors = getCustomColorsFromCookies(),\r\n refreshData = false,\r\n}: StaticChartConfigProps) {\r\n return {\r\n layout: '1h1v',\r\n width,\r\n height,\r\n barWidth: 1,\r\n barMargin: 0,\r\n scrollable: false,\r\n editable: false,\r\n specificChartFunctionality,\r\n colorsOverride,\r\n theme,\r\n colors,\r\n charts: [\r\n {\r\n height,\r\n timeframe,\r\n scale: 'linear',\r\n ticker: ticker,\r\n leftOffset: 0,\r\n instrument: 'stock',\r\n refreshData,\r\n stretch: true,\r\n panes: [\r\n {\r\n height,\r\n elements: paneElements,\r\n },\r\n ],\r\n },\r\n ],\r\n }\r\n}\r\n\r\nexport function getCustomColorsFromCookies() {\r\n try {\r\n return JSON.parse(getParsedCookies('customColors') as string)\r\n } catch {\r\n return undefined\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 { HTMLAttributeReferrerPolicy } from 'react'\r\n\r\nimport { Instrument } from '../../main/types'\r\nimport { cleanTicker } from '../../main/util'\r\nimport { encodeQueryString } from '../queryString'\r\n\r\nconst DEFAULT_OVERLAYS =\r\n '&o[0][ot]=sma&o[0][op]=50&o[0][oc]=FF8F33C6&o[1][ot]=sma&o[1][op]=200&o[1][oc]=DCB3326D&o[2][ot]=patterns&o[2][op]=&o[2][oc]=000'\r\n\r\nexport function getHoverChartUrl(\r\n ticker: string,\r\n escaped: boolean = false,\r\n timeframe = FinvizSettings.hoverCharts?.stock?.timeframe,\r\n dateRange = FinvizSettings.hoverCharts?.stock?.dateRange\r\n): string {\r\n const theme = document.documentElement.classList.contains('dark') ? 'd' : undefined\r\n const overlays = FinvizSettings.hasUserPremium && FinvizSettings.hoverCharts?.stock?.patterns ? DEFAULT_OVERLAYS : ''\r\n const query = encodeQueryString({\r\n cs: 'm',\r\n t: ticker,\r\n tf: timeframe ?? 'd',\r\n ct: 'candle_stick',\r\n r: dateRange,\r\n tm: theme,\r\n })\r\n\r\n let imgUrl = `${FinvizSettings.nodeChartsDomain}/chart.ashx?${query}${overlays}`\r\n\r\n if (escaped) {\r\n // \"Escaping\" [ and ] because of how boxover.js works\r\n imgUrl = imgUrl.replace(/\\[/g, '[[').replace(/]/g, ']]')\r\n }\r\n return imgUrl\r\n}\r\n\r\nfunction timeframeToDeprecatedTimeframe(timeframeString: string) {\r\n switch (timeframeString) {\r\n case 'i1':\r\n case 'i2':\r\n return 'm1'\r\n case 'i3':\r\n return 'm3'\r\n case 'i5':\r\n return 'm5'\r\n case 'i10':\r\n case 'i15':\r\n return 'm15'\r\n case 'i30':\r\n return 'm30'\r\n case 'h':\r\n case 'h2':\r\n case 'h4':\r\n return 'h1'\r\n case 'w':\r\n return 'w1'\r\n case 'm':\r\n return 'mo'\r\n default:\r\n case 'd':\r\n return 'd1'\r\n }\r\n}\r\n\r\nfunction getOldChartsUrl(ticker: string, timeframe: string = 'd1', instrument: Instrument) {\r\n const oldPeriod = timeframeToDeprecatedTimeframe(timeframe)\r\n\r\n switch (instrument) {\r\n case Instrument.Crypto:\r\n case Instrument.Forex:\r\n return `/fx_image.ashx?${cleanTicker(ticker).toLowerCase()}_${oldPeriod}_s.png`\r\n default:\r\n case Instrument.Futures:\r\n return `/fut_image.ashx?${cleanTicker(ticker).toLowerCase()}_${oldPeriod}_s.png`\r\n }\r\n}\r\n\r\nexport function getHoverChartDimensions() {\r\n switch (FinvizSettings.hoverCharts?.stock?.timeframe) {\r\n case 'i3':\r\n case 'i15':\r\n return { width: 584, height: 180 }\r\n case 'i5':\r\n return { width: 376, height: 180 }\r\n case 'd':\r\n if (FinvizSettings.hoverCharts?.stock?.patterns) return { width: 464, height: 230 }\r\n return { width: 324, height: 180 }\r\n default:\r\n return { width: 324, height: 180 }\r\n }\r\n}\r\n\r\nexport function getReferrerPolicy(): HTMLAttributeReferrerPolicy {\r\n return 'no-referrer-when-downgrade'\r\n}\r\n\r\nexport function getHoverChartImg(\r\n ticker: string,\r\n escaped: boolean = false,\r\n timeframe = FinvizSettings.hoverCharts?.stock?.timeframe,\r\n dateRange?: string,\r\n instrument: Instrument = Instrument.Stock\r\n) {\r\n const useOldCharts = !FinvizSettings.hasForexFuturesCryptoNodeCharts && instrument !== Instrument.Stock\r\n const chartSize = useOldCharts ? { width: 320, height: 180 } : getHoverChartDimensions()\r\n const referrerPolicy = getReferrerPolicy()\r\n const url = useOldCharts\r\n ? getOldChartsUrl(ticker, timeframe, instrument)\r\n : getHoverChartUrl(ticker, escaped, timeframe, dateRange)\r\n const srcSet = useOldCharts ? '' : getSrcSet(url)\r\n const srcsetString = srcSet?.length ? ` srcset='${srcSet}'` : ''\r\n\r\n return {\r\n img: ``,\r\n ...chartSize,\r\n }\r\n}\r\n\r\nexport function getSrcSet(url: string) {\r\n // You must keep a space after , for refresh to work\r\n return FinvizSettings.hasUserRetinaNodeCharts ? `${url} 1x, ${url}&sf=2 2x` : undefined\r\n}\r\n","const matchesAndroid = navigator.userAgent.match(/Android/i)\r\nconst matchesWebOS = navigator.userAgent.match(/webOS/i)\r\nconst matchesIPhone = navigator.userAgent.match(/iPhone/i)\r\nconst matchesiPad = navigator.userAgent.match(/iPad/i)\r\nconst matchesIPod = navigator.userAgent.match(/iPod/i)\r\nconst matchesBlackBerry = navigator.userAgent.match(/BlackBerry/i)\r\nconst matchesWindowsPhone = navigator.userAgent.match(/Windows Phone/i)\r\nconst matchesIOSLike = navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints > 0\r\n\r\nconst isMobileDevice =\r\n matchesAndroid ||\r\n matchesWebOS ||\r\n matchesIPhone ||\r\n matchesiPad ||\r\n matchesIPod ||\r\n matchesBlackBerry ||\r\n matchesWindowsPhone ||\r\n matchesIOSLike\r\n\r\nexport function isMobile() {\r\n return !!isMobileDevice\r\n}\r\n\r\nexport function isIphone() {\r\n return !!(matchesIPhone && !matchesiPad)\r\n}\r\n\r\nexport function isIpad() {\r\n return (matchesIOSLike && !matchesIPhone && !matchesIPod) || matchesiPad\r\n}\r\n\r\nexport function isSafariDesktop() {\r\n return /^((?!chrome|android).)*safari/i.test(navigator.userAgent) && navigator.maxTouchPoints === 0\r\n}\r\n\r\nexport function isIos() {\r\n return matchesIOSLike && !isSafariDesktop()\r\n}\r\n","function getSanitizedSingleTicker(rawTicker: string, specialTickers: string[] = []) {\r\n return rawTicker\r\n .replace(/\\.+/gi, '-')\r\n .split('-')\r\n .map((x) => {\r\n if (specialTickers.includes(x.toUpperCase())) return x\r\n return x.replace(/([^a-z0-9@-])+/gi, '')\r\n })\r\n .filter((x) => !!x)\r\n .join('-')\r\n .toUpperCase()\r\n}\r\n\r\nexport function getSanitizedTicker(rawTicker: string, isMulti = false, specialTickers: string[] = []) {\r\n if (isMulti) {\r\n return rawTicker\r\n .replace(/ /g, ',')\r\n .split(',')\r\n .map((x) => getSanitizedSingleTicker(x, specialTickers))\r\n .filter((x) => !!x)\r\n .join(',')\r\n }\r\n\r\n return getSanitizedSingleTicker(rawTicker, specialTickers)\r\n}\r\n","export enum AdsProvider {\r\n None,\r\n InvestingChannel,\r\n Freestar,\r\n}\r\n\r\nexport function getAdsProvider() {\r\n if (FinvizSettings.hasUserPremium) return AdsProvider.None\r\n\r\n if (FinvizSettings.adsProvider === 2) {\r\n return AdsProvider.Freestar\r\n }\r\n\r\n return AdsProvider.InvestingChannel\r\n}\r\n\r\n/**\r\n * Tracks virtual page views to google analytics and freestar\r\n */\r\nexport function trackPageView(props: { pathname?: string; query?: string; freestarPageView?: boolean }) {\r\n const { pathname = window.location.pathname, query = window.location.search, freestarPageView = true } = props\r\n\r\n window.gtag?.('set', 'page_path', `${pathname}${query.length ? '?' : ''}${query.replace(/^\\?/, '')}`)\r\n window.gtag?.('event', 'page_view')\r\n\r\n if (freestarPageView && getAdsProvider() === AdsProvider.Freestar) {\r\n window.freestar?.queue.push(() => freestar.trackPageview())\r\n }\r\n}\r\n","import { 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 fetch('/api/set_cookie.ashx?cookie=' + DRAWING_QUOTE_PAGE_COOKIE_NAME + '&value=' + (isEnabled ? 'on' : 'off'))\r\n .catch(() => {})\r\n .then((res) => {\r\n if (!res?.ok) {\r\n // fallback to JS otherwise draw toggle won't work if API don't work\r\n setIsDrawingEnabledOnQuotePageCookieViaJS(isEnabled)\r\n }\r\n\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\nexport enum BoxRounding {\r\n none = '',\r\n regular = 'rounded-md', // 6px\r\n}\r\n\r\nexport enum BoxTheme {\r\n none = '',\r\n light = 'bg-white dark:bg-gray-800 border border-gray-100 dark:border-gray-600',\r\n dark = 'bg-gray-800 border border-gray-600',\r\n}\r\n\r\nexport interface BoxProps extends Omit, 'ref'> {\r\n rounding?: keyof typeof BoxRounding\r\n theme?: keyof typeof BoxTheme\r\n}\r\n\r\nexport const Box = React.forwardRef(function Box(\r\n { rounding = 'regular', theme = 'light', ...props }: BoxProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n})\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonRounding, ButtonRoundingType } from '../button'\r\n\r\nexport enum GroupTheme {\r\n light,\r\n dark,\r\n}\r\n\r\nexport interface ButtonGroupProps {\r\n children: React.ReactNode\r\n\r\n /**\r\n * Border radius of entire group wrapper\r\n *\r\n * @default \"regular\"\r\n */\r\n rounding?: ButtonRoundingType\r\n\r\n className?: string\r\n\r\n /**\r\n * If a pipe divider between buttons should be rendered\r\n *\r\n * @default true\r\n */\r\n hasDivider?: boolean\r\n\r\n /**\r\n * If group wrapper has a border\r\n *\r\n * @default true\r\n */\r\n hasBorder?: boolean\r\n\r\n /**\r\n * Group color theme\r\n *\r\n * @default \"light\"\r\n */\r\n theme?: keyof typeof GroupTheme\r\n\r\n /**\r\n * Custom button component which extends Button\r\n *\r\n * @default undefined\r\n */\r\n childComponent?: string | React.JSXElementConstructor\r\n}\r\n\r\nfunction getGroupTheme(theme: GroupTheme) {\r\n switch (theme) {\r\n case GroupTheme.dark:\r\n return {\r\n wrapper: 'bg-gray-800 border-gray-600',\r\n divider: 'bg-gray-600',\r\n }\r\n default:\r\n return {\r\n wrapper: 'bg-white dark:bg-gray-800 border-gray-100 dark:border-gray-600',\r\n divider: 'bg-gray-100 dark:bg-gray-600',\r\n }\r\n }\r\n}\r\n\r\nexport function ButtonGroup({\r\n className,\r\n children,\r\n theme = 'light',\r\n hasDivider = true,\r\n hasBorder = true,\r\n rounding = 'regular',\r\n childComponent,\r\n}: ButtonGroupProps) {\r\n const buttonRounding = ButtonRounding[rounding]\r\n const groupTheme = React.useMemo(() => getGroupTheme(GroupTheme[theme]), [theme])\r\n return (\r\n \r\n {React.Children.map(children, (child, index) => {\r\n if (!React.isValidElement(child) || ![Button, childComponent].filter(Boolean).includes(child.type)) {\r\n return child\r\n }\r\n\r\n return (\r\n \r\n {hasDivider && index > 0 &&
}\r\n {React.cloneElement(child as React.ReactElement>, {\r\n rounding: child.props.rounding ?? 'none',\r\n theme: child.props.theme ?? (GroupTheme[theme] === GroupTheme.dark ? 'menuItemDark' : 'menuItem'),\r\n })}\r\n \r\n )\r\n })}\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { 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 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 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 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 menuItemDark,\r\n opacity,\r\n outline,\r\n chipTransparent,\r\n chip,\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 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.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 'border border-gray-100 active:border-blue-400 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:border-gray-600 dark:bg-gray-800 dark:text-gray-50 dark:active:border-blue-400 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 'hover:border-gray-300 dark:hover:border-gray-400': !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 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, 'ref' | 'type' | 'size' | 'content' | 'align'>\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 classnames from 'classnames'\r\nimport { ForwardedRef, HTMLProps, PropsWithChildren, ReactNode, forwardRef } from 'react'\r\n\r\nimport { Icon } from './icon'\r\n\r\ninterface CheckboxProps extends Omit, 'label'> {\r\n /**\r\n * Text that gets displayed on the right side of the checkbox\r\n */\r\n label?: ReactNode\r\n\r\n checked: boolean\r\n isSmall?: boolean\r\n}\r\n\r\nfunction CheckboxComponent(\r\n { className, label, isSmall, children, ...props }: PropsWithChildren,\r\n ref: ForwardedRef\r\n) {\r\n const checked = props.checked ?? props.defaultChecked\r\n\r\n return (\r\n \r\n
\r\n \r\n {checked && }\r\n
\r\n {label ?? children}\r\n \r\n )\r\n}\r\n\r\nexport const Checkbox = forwardRef(CheckboxComponent)\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, PropsWithChildren, memo, useCallback, useLayoutEffect, useRef, useState } from 'react'\r\n\r\nexport interface Interaction {\r\n left: number\r\n top: number\r\n}\r\n\r\n/**\r\n * Clamp value between two bounds\r\n */\r\nfunction clamp(num: number, min = 0, max = 1) {\r\n return num > max ? max : num < min ? min : num\r\n}\r\n\r\n/**\r\n * Check if an event was triggered by touch\r\n */\r\nfunction isTouch(event: MouseEvent | TouchEvent): event is TouchEvent {\r\n return 'touches' in event\r\n}\r\n\r\n/**\r\n * Returns a relative position of the pointer inside the node's bounding box\r\n */\r\nfunction getRelativePosition(node: HTMLDivElement, event: MouseEvent | TouchEvent): Interaction {\r\n const rect = node.getBoundingClientRect()\r\n\r\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\r\n const pointer = isTouch(event) ? event.touches[0] : (event as MouseEvent)\r\n\r\n return {\r\n left: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),\r\n top: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height),\r\n }\r\n}\r\n\r\n/**\r\n * Browsers introduced an intervention, making touch events passive by default.\r\n * This workaround removes `preventDefault` call from the touch handlers.\r\n * @see https://github.com/facebook/react/issues/19651\r\n */\r\nfunction preventDefaultMove(event: MouseEvent | TouchEvent) {\r\n !isTouch(event) && event.preventDefault()\r\n}\r\n\r\ninterface Props {\r\n onMove: (interaction: Interaction) => void\r\n onKey: (offset: Interaction) => void\r\n}\r\n\r\nfunction DraggablePickerComponent({\r\n onMove,\r\n onKey,\r\n className,\r\n ...props\r\n}: PropsWithChildren & HTMLProps) {\r\n const container = useRef(null)\r\n const hasTouched = useRef(false)\r\n const [isDragging, setDragging] = useState(false)\r\n\r\n /**\r\n * Prevent mobile browsers from handling mouse events (conflicting with touch ones).\r\n * If we detected a touch interaction before, we prefer reacting to touch events only.\r\n */\r\n const isValid = useRef((event: MouseEvent | TouchEvent): boolean => {\r\n if (hasTouched.current && !isTouch(event)) return false\r\n if (!hasTouched.current) hasTouched.current = isTouch(event)\r\n return true\r\n })\r\n\r\n const handleMove = useCallback(\r\n (event: MouseEvent | TouchEvent) => {\r\n preventDefaultMove(event)\r\n\r\n // If user moves the pointer outside of the window or iframe bounds and release it there,\r\n // `mouseup`/`touchend` won't be fired. In order to stop the picker from following the cursor\r\n // after the user has moved the mouse/finger back to the document, we check `event.buttons`\r\n // and `event.touches`. It allows us to detect that the user is just moving his pointer\r\n // without pressing it down\r\n const isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0\r\n\r\n if (isDown && container.current) {\r\n onMove(getRelativePosition(container.current, event))\r\n } else {\r\n setDragging(false)\r\n }\r\n },\r\n [onMove]\r\n )\r\n\r\n const handleMoveStart = useCallback(\r\n ({ nativeEvent }: React.MouseEvent | React.TouchEvent) => {\r\n preventDefaultMove(nativeEvent)\r\n\r\n if (!isValid.current(nativeEvent)) return\r\n\r\n // The node/ref must actually exist when user start an interaction.\r\n // We won't suppress the ESLint warning though, as it should probably be something to be aware of.\r\n onMove(getRelativePosition(container.current!, nativeEvent))\r\n setDragging(true)\r\n },\r\n [onMove]\r\n )\r\n\r\n const handleKeyDown = useCallback(\r\n (event: React.KeyboardEvent) => {\r\n const keyCode = event.which || event.keyCode\r\n\r\n // Ignore all keys except arrow ones\r\n if (keyCode < 37 || keyCode > 40) return\r\n // Do not scroll page by arrow keys when document is focused on the element\r\n event.preventDefault()\r\n // Send relative offset to the parent component.\r\n // We use codes (37←, 38↑, 39→, 40↓) instead of keys ('ArrowRight', 'ArrowDown', etc)\r\n // to reduce the size of the library\r\n onKey({\r\n left: keyCode === 39 ? 0.05 : keyCode === 37 ? -0.05 : 0,\r\n top: keyCode === 40 ? 0.05 : keyCode === 38 ? -0.05 : 0,\r\n })\r\n },\r\n [onKey]\r\n )\r\n\r\n const handleMoveEnd = useCallback(() => setDragging(false), [])\r\n\r\n const toggleDocumentEvents = useCallback(\r\n (state) => {\r\n // add or remove additional pointer event listeners\r\n const toggleEvent = state ? window.addEventListener : window.removeEventListener\r\n toggleEvent(hasTouched.current ? 'touchmove' : 'mousemove', handleMove)\r\n toggleEvent(hasTouched.current ? 'touchend' : 'mouseup', handleMoveEnd)\r\n },\r\n [handleMove, handleMoveEnd]\r\n )\r\n\r\n useLayoutEffect(() => {\r\n toggleDocumentEvents(isDragging)\r\n return () => {\r\n isDragging && toggleDocumentEvents(false)\r\n }\r\n }, [isDragging, toggleDocumentEvents])\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const DraggablePicker = memo(DraggablePickerComponent)\r\n","interface PointerProps {\r\n className?: string\r\n top?: number\r\n left: number\r\n color: string\r\n}\r\n\r\nexport function Pointer({ color, left, top = 0.5 }: PointerProps) {\r\n return (\r\n \r\n
\r\n
\r\n )\r\n}\r\n","/**\r\n * Keep this file in sync with `app/utils/colors.ts` in charts repo\r\n * */\r\n\r\nexport interface RGBA {\r\n r: number\r\n g: number\r\n b: number\r\n a: number\r\n}\r\n\r\nexport interface HSVA {\r\n h: number\r\n s: number\r\n v: number\r\n a: number\r\n}\r\n\r\nexport interface HSLA {\r\n h: number\r\n s: number\r\n l: number\r\n a: number\r\n}\r\n\r\n/**\r\n * Convert Hex string to RGBA object.\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hexStringToRGBA(hexString: string): RGBA {\r\n const hexColor = removeHashSymbol(hexString)\r\n let r: string | number = 0\r\n let g: string | number = 0\r\n let b: string | number = 0\r\n let a: string | number = 255\r\n\r\n // 3 digits\r\n if (hexColor.length === 3 || hexColor.length === 4) {\r\n r = '0x' + hexColor[0] + hexColor[0]\r\n g = '0x' + hexColor[1] + hexColor[1]\r\n b = '0x' + hexColor[2] + hexColor[2]\r\n // Get channel if defined\r\n a = hexColor.length === 4 ? '0x' + hexColor[3] + hexColor[3] : a\r\n\r\n // 6 digits\r\n } else if (hexColor.length === 6 || hexColor.length === 8) {\r\n r = '0x' + hexColor[0] + hexColor[1]\r\n g = '0x' + hexColor[2] + hexColor[3]\r\n b = '0x' + hexColor[4] + hexColor[5]\r\n // Get channel if defined\r\n a = hexColor.length === 8 ? '0x' + hexColor[6] + hexColor[7] : a\r\n }\r\n\r\n return { r: Number(r), g: Number(g), b: Number(b), a: Math.min(Math.round((Number(a) / 255) * 100) / 100, 1) }\r\n}\r\n\r\n/**\r\n * Convert HEX string to HSVA color representation.\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n */\r\nexport function hexStringToHSVA(hexString: string) {\r\n return rgbaToHSVA(hexStringToRGBA(hexString))\r\n}\r\n\r\n/**\r\n * Convert HEX string to HSLA color representation.\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n */\r\nexport function hexStringToHSLA(hexString: string) {\r\n return rgbaToHSLA(hexStringToRGBA(hexString))\r\n}\r\n\r\n/**\r\n * Convert alpha value to hex value\r\n *\r\n * Input: [0,1]\r\n *\r\n * Output: alpha in HEX format\r\n */\r\nexport function alphaToHex(alpha: number) {\r\n return Math.max(Math.min(Math.round(alpha * 255), 255), 0)\r\n .toString(16)\r\n .padStart(2, '0')\r\n}\r\n\r\n/**\r\n * Convert RGBA color to HEX string.\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: color in hex6 or hex8 depending on whether or not alpha is enabled\r\n */\r\nexport function rgbaToHexString(color: RGBA, alpha = false) {\r\n const r = color.r.toString(16)\r\n const g = color.g.toString(16)\r\n const b = color.b.toString(16)\r\n const hexString = '#' + r.padStart(2, '0') + g.padStart(2, '0') + b.padStart(2, '0')\r\n\r\n if (!alpha || color.a === 1) {\r\n return hexString\r\n }\r\n\r\n return `${hexString}${alphaToHex(color.a)}`\r\n}\r\n\r\n/**\r\n * Convert HSVA object to HEX string\r\n *\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hsvaToHEXString(color: HSVA, alpha = false) {\r\n const rgbaColor = hsvaToRGBA(color)\r\n\r\n return rgbaToHexString(rgbaColor, alpha)\r\n}\r\n\r\n/**\r\n * Convert HSLA object to HEX string\r\n *\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hslaToHexString(color: HSLA, alpha = false) {\r\n const rgbaColor = hslaToRGBA(color)\r\n\r\n return rgbaToHexString(rgbaColor, alpha)\r\n}\r\n\r\n/**\r\n * Convert RGBA color to HSVA\r\n * @see https://stackoverflow.com/a/54070620/6662683\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n */\r\nexport function rgbaToHSVA(color: RGBA): HSVA {\r\n const r = color.r / 255\r\n const g = color.g / 255\r\n const b = color.b / 255\r\n\r\n const v = Math.max(r, g, b)\r\n const c = v - Math.min(r, g, b)\r\n const h = c && (v === r ? (g - b) / c : v === g ? 2 + (b - r) / c : 4 + (r - g) / c)\r\n\r\n return {\r\n h: 60 * (h < 0 ? h + 6 : h),\r\n s: v ? c / v : 0,\r\n v: v,\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert RGBA to HSLA\r\n * @see https://stackoverflow.com/a/54071699/6662683\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n */\r\nexport function rgbaToHSLA(color: RGBA): HSLA {\r\n const r = color.r / 255\r\n const g = color.g / 255\r\n const b = color.b / 255\r\n\r\n const v = Math.max(r, g, b)\r\n const c = v - Math.min(r, g, b)\r\n const f = 1 - Math.abs(v + v - c - 1)\r\n const h = c && (v === r ? (g - b) / c : v === g ? 2 + (b - r) / c : 4 + (r - g) / c)\r\n\r\n return {\r\n h: 60 * (h < 0 ? h + 6 : h),\r\n s: f ? c / f : 0,\r\n l: (v + v - c) / 2,\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSVA color to RGBA\r\n * @see https://stackoverflow.com/a/54024653/6662683\r\n *\r\n * Input: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hsvaToRGBA(color: HSVA): RGBA {\r\n const f = (n: number, k = (n + color.h / 60) % 6) => color.v - color.v * color.s * Math.max(Math.min(k, 4 - k, 1), 0)\r\n\r\n return {\r\n r: Math.round(f(5) * 255),\r\n g: Math.round(f(3) * 255),\r\n b: Math.round(f(1) * 255),\r\n a: Math.round(color.a * 100) / 100,\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSLA color to RGBA\r\n * @see https://stackoverflow.com/a/54014428/6662683\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hslaToRGBA(color: HSLA): RGBA {\r\n const a = color.s * Math.min(color.l, 1 - color.l)\r\n const f = (n: number, k = (n + color.h / 30) % 12) => color.l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\r\n\r\n return {\r\n r: Math.round(f(0) * 255),\r\n g: Math.round(f(8) * 255),\r\n b: Math.round(f(4) * 255),\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert RGBA color to rgba() string\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: rgba(r, g, b, a)\r\n */\r\nexport function rgbaToRGBAString(color: RGBA) {\r\n return `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`\r\n}\r\n\r\n/**\r\n * Convert rgba() string to RGBA color\r\n *\r\n * Input: rgba(r, g, b, a)\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function rgbaStringToObject(color: string) {\r\n const colorParts = /^rgba?\\(([0-9]{1,3})[ ,]+([0-9]{1,3})[ ,]+([0-9]{1,3})[ ,]*([01].?[0-9]*)?\\)$/.exec(color)\r\n const [red, green, blue, alpha = '1'] = colorParts?.slice(1) || [0, 0, 0, 1].map(String)\r\n return {\r\n r: Number.parseInt(red),\r\n g: Number.parseInt(green),\r\n b: Number.parseInt(blue),\r\n a: Number.parseFloat(alpha),\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSLA color to hsla() string\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: hsla(h, s, l, a)\r\n */\r\nexport function hslaToHSLAString(color: HSLA) {\r\n return `hsla(${Math.round(color.h)}, ${Math.round(color.s * 10000) / 100}%, ${Math.round(color.l * 10000) / 100}%, ${\r\n color.a\r\n })`\r\n}\r\n\r\nexport function removeHashSymbol(strColor: string) {\r\n return strColor.replace(/#/g, '')\r\n}\r\n\r\n/**\r\n * Check if the param is a valid color by setting it as style\r\n */\r\nexport function isValidColor(strColor: string) {\r\n const isRgb = strColor.startsWith('rgba')\r\n const s = new Option().style\r\n\r\n s.color = isRgb ? strColor : `#${removeHashSymbol(strColor)}`\r\n\r\n return s.color !== ''\r\n}\r\n\r\n/**\r\n * Normalize color to be a hex value\r\n */\r\nexport function convertColorToHEX(strColor: string) {\r\n const isRgb = getIsRgb(strColor)\r\n\r\n if (isRgb) {\r\n return rgbaToHexString(rgbaStringToObject(strColor), true)\r\n }\r\n\r\n return strColor\r\n}\r\n\r\n/**\r\n * Returns true if color is rgb or rgba\r\n */\r\nexport function getIsRgb(strColor: string, isAlphaAllowed = true) {\r\n const rgbKeys = ['rgb']\r\n if (isAlphaAllowed) {\r\n rgbKeys.push('rgba')\r\n }\r\n return rgbKeys.some((startsWith) => strColor.startsWith(startsWith))\r\n}\r\n\r\n/**\r\n * Convert any color format to HSVA (internal color picker representation)\r\n */\r\nexport function getHSVAFromColor(strColor: string) {\r\n if (getIsRgb(strColor)) {\r\n return rgbaToHSVA(rgbaStringToObject(strColor))\r\n }\r\n\r\n return hexStringToHSVA(strColor)\r\n}\r\n\r\n/**\r\n * Stringify HSVA color representation into a output format\r\n */\r\nexport function stringifyHSVAColor(color: HSVA, output: 'rgba' | 'hex', canSelectAlpha?: boolean) {\r\n switch (output) {\r\n case 'rgba':\r\n return rgbaToRGBAString(hsvaToRGBA(color))\r\n default:\r\n return hsvaToHEXString(color, canSelectAlpha)\r\n }\r\n}\r\n\r\n/**\r\n * Get luma value from RGBA color using the Rec. 709 coefficients\r\n * @see https://en.wikipedia.org/wiki/Luma_%28video%29\r\n *\r\n * If luma is >= 165 the foreground color should be dark\r\n */\r\nexport function getLumaFromRGBA(color: RGBA) {\r\n return 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b\r\n}\r\n\r\n/**\r\n * Checks if luma is >= 165 or alpha < 0.3\r\n */\r\nexport function getIsColorTooLightOrTransparent(color: RGBA) {\r\n return getLumaFromRGBA(color) >= 165 || color.a < 0.5\r\n}\r\n\r\n/**\r\n * Set specific alpha for a hex color\r\n */\r\nexport function getHEXWithSpecificAplha(color: string, alpha = 1) {\r\n const rgbaColor = hexStringToRGBA(color)\r\n return rgbaToHexString({ ...rgbaColor, a: alpha }, true)\r\n}\r\n\r\n/**\r\n * Get rgba from valid color string\r\n */\r\nexport function getRGBAValueFromValidColorString(value: string) {\r\n if (getIsRgb(value)) return rgbaToRGBAString(rgbaStringToObject(value))\r\n return rgbaToRGBAString(hexStringToRGBA(value))\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface LightnessProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nexport function Alpha({ color, onChange }: LightnessProps) {\r\n const changeLightness = useCallback((pos: Interaction) => onChange({ ...color, a: 1 - pos.left }), [onChange, color])\r\n\r\n const gradientPreview = useMemo(() => {\r\n const gradientFrom = hsvaToHEXString({ ...color, a: 1 })\r\n const gradientTo = hsvaToHEXString({ ...color, a: 0 }, true)\r\n\r\n return `linear-gradient(90deg, ${gradientFrom}, ${gradientTo})`\r\n // Don’t recalculate when alpha changes\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [color.h, color.s, color.v])\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\n","import { Icon } from '../icon'\r\nimport { HSVA, hexStringToHSVA } from './util'\r\n\r\nconst DEFAULT_COLORS = [\r\n { title: 'Rose', value: '#f43f5e' },\r\n { title: 'Pink', value: '#db2777' },\r\n { title: 'Fuchsia', value: '#c026d3' },\r\n { title: 'Purple', value: '#9333ea' },\r\n { title: 'Violet', value: '#7c3aed' },\r\n { title: 'Indigo', value: '#4f46e5' },\r\n { title: 'Blue', value: '#2563eb' },\r\n { title: 'Light Blue', value: '#0284c7' },\r\n { title: 'Cyan', value: '#0891b2' },\r\n { title: 'Teal', value: '#0d9488' },\r\n { title: 'Emerald', value: '#059669' },\r\n { title: 'Green', value: '#16a34a' },\r\n { title: 'Lime', value: '#65a30d' },\r\n { title: 'Yellow', value: '#eab308' },\r\n { title: 'Amber', value: '#d97706' },\r\n { title: 'Red', value: '#dc2626' },\r\n]\r\n\r\ninterface ColorItem {\r\n /**\r\n * Name of the color\r\n */\r\n title: string\r\n\r\n /**\r\n * Hex value\r\n */\r\n value: string\r\n}\r\n\r\ninterface ColorPaletteProps {\r\n /**\r\n * Current selected color in HEX format (supports HEX8 for alpha)\r\n */\r\n color: string\r\n\r\n /**\r\n * List of colors to display in the palette\r\n *\r\n * @default DEFAULT_COLORS\r\n */\r\n colors?: ColorItem[]\r\n\r\n /**\r\n * Callback when user picks a color\r\n */\r\n onChange: (color: string, originalColor: HSVA) => void\r\n}\r\n\r\nexport function ColorPalette({ color, colors = DEFAULT_COLORS, onChange }: ColorPaletteProps) {\r\n const lowerCaseColor = color.toLowerCase()\r\n\r\n return (\r\n
\r\n {colors.map((colorObj) => {\r\n const isSelected = lowerCaseColor.startsWith(colorObj.value)\r\n return (\r\n onChange(colorObj.value, hexStringToHSVA(colorObj.value))}\r\n >\r\n {isSelected && }\r\n
\r\n )\r\n })}\r\n
\r\n )\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface HueSaturationProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nfunction getPositionFromHSLA(color: HSVA) {\r\n return {\r\n left: color.h / 360,\r\n top: 1 - color.s,\r\n }\r\n}\r\n\r\nexport function HueSaturation({ color, onChange }: HueSaturationProps) {\r\n const position = useMemo(() => getPositionFromHSLA(color), [color])\r\n\r\n const colorPreview = useMemo(() => hsvaToHEXString({ h: color.h, s: color.s, v: 1, a: 1 }), [color.h, color.s])\r\n\r\n const changeSaturation = useCallback(\r\n (pos: Interaction) =>\r\n onChange({\r\n h: Math.round(pos.left * 360),\r\n s: 1 - pos.top,\r\n v: 1,\r\n a: color.a,\r\n }),\r\n [color.a, onChange]\r\n )\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface LightnessProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nexport function Lightness({ color, onChange }: LightnessProps) {\r\n const changeLightness = useCallback((pos: Interaction) => onChange({ ...color, v: 1 - pos.left }), [onChange, color])\r\n\r\n const colorPreview = useMemo(\r\n () => hsvaToHEXString({ h: color.h, s: color.s, v: color.v, a: 1 }),\r\n [color.h, color.s, color.v]\r\n )\r\n\r\n const gradientPreview = useMemo(() => {\r\n const gradientFrom = hsvaToHEXString({ h: color.h, s: color.s, v: 1, a: 1 })\r\n const gradientTo = hsvaToHEXString({ h: color.h, s: color.s, v: 0, a: 1 })\r\n\r\n return `linear-gradient(90deg, ${gradientFrom}, ${gradientTo})`\r\n }, [color.h, color.s])\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { Icon, IconNameType, isValidIconName } from '../icon'\r\nimport { getIsColorTooLightOrTransparent, hexStringToRGBA } from './util'\r\n\r\ninterface ColorPreviewProps {\r\n /**\r\n * Name of an icon or JSX.Element\r\n */\r\n icon?: JSX.Element | IconNameType\r\n\r\n /**\r\n * One or more colors to show in the preview\r\n */\r\n color: string | string[]\r\n\r\n /**\r\n * Wrapper classname\r\n */\r\n className?: string\r\n}\r\n\r\nexport function ColorPreview({ icon, color, className }: ColorPreviewProps) {\r\n const colors = Array.isArray(color) ? color : [color]\r\n const isTooLight = getIsColorTooLightOrTransparent(hexStringToRGBA(colors[0]))\r\n return (\r\n \r\n {icon && (\r\n
\r\n {isValidIconName(icon) ? (\r\n \r\n ) : (\r\n icon\r\n )}\r\n
\r\n )}\r\n {colors.map((color, index) => (\r\n //   has to be there because of a bug on safari which ignores h-full when empty element\r\n
\r\n  \r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React, { ForwardedRef, useCallback, useEffect, useState } from 'react'\r\n\r\nimport { Input, InputComponentProps } from '../input'\r\nimport { ColorPreview } from './color-preview'\r\nimport { ColorPickerProps } from './picker'\r\nimport * as colorUtil from './util'\r\n\r\ninterface PickerInputProps extends Omit {\r\n color: ColorPickerProps['color']\r\n onChange: ColorPickerProps['onChange']\r\n\r\n /*\r\n * Is color preview square visible\r\n *\r\n * @default true\r\n * */\r\n hasColorPreview?: boolean\r\n}\r\nexport const PickerInput = React.forwardRef(\r\n (\r\n { color, inputClass, hasColorPreview = true, onChange, ...props }: PickerInputProps,\r\n ref: ForwardedRef\r\n ) => {\r\n const [colorInput, setColorInput] = useState(colorUtil.removeHashSymbol(color))\r\n const isRgba = colorUtil.getIsRgb(colorInput)\r\n\r\n useEffect(() => {\r\n setColorInput(colorUtil.removeHashSymbol(color))\r\n }, [color])\r\n\r\n const handleColorInputChange = useCallback(\r\n (event) => {\r\n const value = colorUtil.removeHashSymbol(event.currentTarget.value)\r\n const isRgba = value.startsWith('rgba')\r\n const colorValue = isRgba ? value : `#${value}`\r\n\r\n setColorInput(value)\r\n if ((value.length >= 6 || (isRgba && value.length >= 16)) && colorUtil.isValidColor(colorValue)) {\r\n onChange(colorValue, colorUtil.hexStringToHSVA(colorValue))\r\n }\r\n },\r\n [onChange]\r\n )\r\n return (\r\n \r\n {hasColorPreview && (\r\n
\r\n \r\n
\r\n )}\r\n {!isRgba && #}\r\n
\r\n }\r\n onChange={handleColorInputChange}\r\n />\r\n )\r\n }\r\n)\r\n","import classnames from 'classnames'\r\nimport React, { ReactNode, useCallback, useEffect, useRef, useState } from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { Button } from '../button'\r\nimport { Popover, PopoverTrigger, usePopoverState } from '../popover'\r\nimport { Alpha } from './alpha'\r\nimport { ColorPalette } from './color-palette'\r\nimport { HueSaturation } from './hue-saturation'\r\nimport { Lightness } from './lightness'\r\nimport { PickerInput } from './picker-input'\r\nimport * as colorUtil from './util'\r\n\r\nexport interface ColorPickerProps {\r\n /**\r\n * The selected color in HEX format (supports HEX8 for alpha)\r\n */\r\n color: string\r\n\r\n /**\r\n * Whether or not the user is able to select custom color\r\n *\r\n * @default true\r\n */\r\n canSelectCustom?: boolean\r\n\r\n /**\r\n * Whether or not the user is able to change alpha channel. Only applicable\r\n * when `canSelectCustom` is true\r\n *\r\n * @default true\r\n */\r\n canSelectAlpha?: boolean\r\n\r\n /**\r\n * Sets the output format for the color picker\r\n *\r\n * @default 'hex'\r\n */\r\n outputFormat?: 'hex' | 'rgba'\r\n\r\n /**\r\n * Callback when user changes color. Use the second parameter to do color space\r\n * conversions otherwise the color could differ due to rounding\r\n */\r\n onChange: (color: string, originalColor: colorUtil.HSVA) => void\r\n\r\n /**\r\n * Callback when user clicks on a palette item. Used to close popover\r\n */\r\n onPaletteItemClick?: () => void\r\n}\r\n\r\nexport function ColorPicker({\r\n color,\r\n canSelectCustom = true,\r\n canSelectAlpha = true,\r\n outputFormat = 'hex',\r\n onChange,\r\n onPaletteItemClick,\r\n}: ColorPickerProps) {\r\n const cachedColor = useRef(color)\r\n const [hsvaColor, setColor] = useState(colorUtil.getHSVAFromColor(color))\r\n\r\n /**\r\n * Update state if the color from outside changed\r\n */\r\n useEffect(() => {\r\n const currentColor = colorUtil.removeHashSymbol(cachedColor.current)\r\n const newColor = colorUtil.removeHashSymbol(color)\r\n\r\n if (currentColor === newColor || !colorUtil.isValidColor(newColor)) return\r\n\r\n cachedColor.current = color\r\n setColor(colorUtil.getHSVAFromColor(color))\r\n }, [color])\r\n\r\n /**\r\n * Handle color change\r\n * 1. update cache so we can correctly check when outside color updates\r\n * 2. Update internal color representation\r\n * 3. call onChange with string color\r\n */\r\n const onChangeCallback = useCallback(\r\n (color: colorUtil.HSVA) => {\r\n const stringColor = colorUtil.stringifyHSVAColor(color, outputFormat, canSelectAlpha)\r\n cachedColor.current = stringColor\r\n onChange(stringColor, color)\r\n setColor(color)\r\n },\r\n [onChange, canSelectAlpha, outputFormat]\r\n )\r\n\r\n const onSetCustomCodeClick = useCallback(() => {\r\n const value = prompt('Enter a color code')?.trim()\r\n\r\n if (!value) return\r\n\r\n const isValid = colorUtil.isValidColor(value)\r\n\r\n if (!isValid) {\r\n return alert('The code is not a valid color')\r\n }\r\n\r\n onChangeCallback(colorUtil.getHSVAFromColor(value))\r\n }, [onChangeCallback])\r\n\r\n return (\r\n
\r\n {canSelectCustom && (\r\n <>\r\n {isMobile() && (\r\n \r\n )}\r\n \r\n \r\n\r\n {canSelectAlpha && }\r\n \r\n )}\r\n\r\n \r\n {\r\n onPaletteItemClick?.()\r\n onChangeCallback({ ...orignalColor, a: hsvaColor.a })\r\n }}\r\n />\r\n
\r\n \r\n )\r\n}\r\n\r\ninterface InputColorPickerProps extends ColorPickerProps {\r\n /**\r\n * Label for the input\r\n */\r\n label?: ReactNode\r\n inputDataTestId?: string\r\n}\r\n\r\nexport function InputColorPicker({ label, inputDataTestId, onChange, ...props }: InputColorPickerProps) {\r\n const popoverState = usePopoverState()\r\n const canSelectCustom = props.canSelectCustom !== false\r\n const isMobileDevice = isMobile()\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {\r\n if (canSelectCustom) return\r\n popoverState.hide()\r\n }}\r\n />\r\n \r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { Button, ButtonComponentProps, ButtonRounding, ButtonSizeType } from '../button'\r\nimport { ButtonGroup } from '../button-group'\r\nimport { IconNameType } from '../icon'\r\nimport { Popover, PopoverProps, PopoverTrigger, usePopoverState } from '../popover'\r\nimport { ColorPreview } from './color-preview'\r\nimport { ColorPicker, ColorPickerProps } from './picker'\r\nimport { PickerInput } from './picker-input'\r\nimport * as colorUtil from './util'\r\n\r\ninterface MultiColorPickerProps extends ColorPickerProps {\r\n /**\r\n * Label for color text input\r\n *\r\n * @default undefined\r\n */\r\n colorInputLabel?: string\r\n}\r\n\r\nexport function MultiColorPicker({\r\n colorInputLabel,\r\n onChange,\r\n canSelectCustom = true,\r\n ...props\r\n}: MultiColorPickerProps) {\r\n const isMobileDevice = isMobile()\r\n\r\n return (\r\n <>\r\n {canSelectCustom && !isMobileDevice && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n {}} />\r\n \r\n \r\n )\r\n}\r\n\r\ninterface ColorTabButtonProps extends ButtonComponentProps {\r\n /*\r\n * Preview color\r\n * */\r\n color: string\r\n}\r\n\r\nexport function ColorTabButton({ color, children, ...props }: ColorTabButtonProps) {\r\n return (\r\n }\r\n {...props}\r\n >\r\n {children}\r\n \r\n )\r\n}\r\n\r\ntype ButtonColorProperties = { color: string; label: string }\r\n\r\ninterface ButtonColorPickerProps\r\n extends Omit {\r\n /**\r\n * Temporary prop to enable/disable multi picker funcionality,\r\n * in the future we'll only use secondaryColor prop to decide if the picker is multi picker or not\r\n *\r\n * @default undefined\r\n */\r\n isMultiPicker?: boolean\r\n\r\n /**\r\n * Button classname\r\n */\r\n className?: string\r\n\r\n /**\r\n * Array of objects with color and value\r\n */\r\n colors: ColorType[]\r\n\r\n /**\r\n * Color onchange callback\r\n */\r\n onChange: (colors: ColorType[], originalColor: colorUtil.HSVA) => void\r\n\r\n /**\r\n * Button size\r\n *\r\n * @default undefined\r\n */\r\n size?: ButtonSizeType\r\n /**\r\n * Label for color text input\r\n *\r\n * @default undefined\r\n */\r\n colorInputLabel?: string\r\n\r\n /**\r\n * Name of an icon or JSX.Element\r\n */\r\n icon?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Hides color picker when clicked outside of popover,\r\n * works with changing focus from the trigger component to another one\r\n *\r\n * @default true\r\n */\r\n hideOnClickOutside: PopoverProps['hideOnClickOutside']\r\n\r\n /**\r\n * Popover overlay click callback, if nothing's provided it calls hide when clicked outside of popover on its overlay\r\n * If false is provided, overlay click calls hide func on popover state object\r\n *\r\n * @default undefined\r\n */\r\n onOverlayClick?: (() => void) | false\r\n\r\n /**\r\n * Identifier for e2e testing\r\n *\r\n * @default undefined\r\n */\r\n buttonPickerDataTestId?: string\r\n}\r\n\r\nexport function ButtonColorPicker({\r\n size,\r\n icon,\r\n colors,\r\n className,\r\n onChange,\r\n buttonPickerDataTestId,\r\n hideOnClickOutside = true,\r\n onOverlayClick,\r\n ...props\r\n}: ButtonColorPickerProps) {\r\n const popoverState = usePopoverState()\r\n const isMultiPicker = !!props.isMultiPicker && colors.length > 1\r\n const [activeColorIndex, setActiveColorIndex] = React.useState(0)\r\n const handleColorChange = React.useCallback(\r\n (color: string, originalColor: colorUtil.HSVA) => {\r\n onChange(\r\n colors.map((colorObject, index) => (index === activeColorIndex ? { ...colorObject, color } : colorObject)),\r\n originalColor\r\n )\r\n },\r\n [activeColorIndex, colors, onChange]\r\n )\r\n return (\r\n <>\r\n \r\n color)}\r\n className={classnames('h-full w-full', ButtonRounding.small)}\r\n />\r\n \r\n \r\n {isMultiPicker && (\r\n
\r\n \r\n {colors.map(({ color, label }, index) => (\r\n setActiveColorIndex(index)}\r\n >\r\n {label}\r\n \r\n ))}\r\n \r\n
\r\n )}\r\n \r\n \r\n \r\n )\r\n}\r\n","/**\r\n * Used for reakit as the duration of a open/close animation. The animation itself is done using css\r\n */\r\nexport const COMPONENT_ANIMATION_DURATION = 250\r\n","import copy from 'copy-to-clipboard'\r\nimport React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { InputProps, Textarea } from '../input'\r\n\r\ninterface Props extends Pick {\r\n className?: string\r\n text: string\r\n bottomLeftContent?: React.ReactNode\r\n}\r\n\r\nexport const CopyToClipboard: React.FC = ({ className, label, text, bottomLeftContent }) => {\r\n const [isCopied, setIsCopied] = React.useState(false)\r\n\r\n const handleCopyToClipboard = React.useCallback(() => {\r\n setIsCopied(true)\r\n copy(text)\r\n }, [text])\r\n\r\n React.useEffect(() => {\r\n let timeout: NodeJS.Timeout\r\n const resetTimer = () => {\r\n if (!timeout) return\r\n clearTimeout(timeout)\r\n }\r\n if (isCopied) {\r\n resetTimer()\r\n timeout = setTimeout(() => {\r\n setIsCopied(false)\r\n }, 2000)\r\n }\r\n\r\n return () => {\r\n resetTimer()\r\n }\r\n }, [isCopied])\r\n\r\n return (\r\n
\r\n e.currentTarget.select()}\r\n inputClass=\"h-12\"\r\n data-testid=\"copy-to-clipboard-textarea\"\r\n value={text}\r\n />\r\n
\r\n {bottomLeftContent &&
{bottomLeftContent}
}\r\n \r\n {isCopied ? 'Copied' : 'Copy'}\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { CalendarProps } from 'react-calendar'\r\n\r\nimport { Box } from '../box'\r\nimport { ZIndexContext, getExtendedDialogState } from '../dialog'\r\nimport { Popover, PopoverTrigger, usePopoverState } from '../popover'\r\nimport { Spinner } from '../spinner'\r\n\r\nconst DatePickerComponent = React.lazy(() => import('./picker'))\r\n\r\ntype RangePickerCallback = (value: [Date, Date], ev: React.ChangeEvent) => void\r\ntype PickerCallback = (value: Date, ev: React.ChangeEvent) => void\r\n\r\ninterface DatePickerProps extends Omit {\r\n /**\r\n * Trigger element for the picker\r\n */\r\n children: JSX.Element\r\n\r\n onChange: PickerCallback | RangePickerCallback\r\n\r\n zIndex?: string\r\n}\r\n\r\nexport function StatelessDatePicker({\r\n state,\r\n children,\r\n zIndex,\r\n ...props\r\n}: DatePickerProps & { state: ReturnType; zIndex?: string }) {\r\n const { isFullyClosed } = getExtendedDialogState(state)\r\n return (\r\n <>\r\n \r\n {(triggerProps: React.HTMLProps) =>\r\n React.Children.map(children, (child) => {\r\n if (React.isValidElement(child))\r\n return React.cloneElement(child, { ...triggerProps, ...(child.props as any) })\r\n })\r\n }\r\n \r\n {!isFullyClosed && (\r\n \r\n \r\n \r\n \r\n \r\n }\r\n >\r\n ) => {\r\n state.hide()\r\n props.onChange?.(value, ev)\r\n }}\r\n />\r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport function DatePicker(props: DatePickerProps) {\r\n const popover = usePopoverState()\r\n\r\n return \r\n}\r\n","import * as React from 'react'\r\n\r\nexport interface DelayedProps {\r\n /**\r\n * The delay in milliseconds before the component is rendered.\r\n *\r\n * @default 300\r\n */\r\n delay?: number\r\n\r\n /**\r\n * Delay in milliseconds before rendering timeout state.\r\n */\r\n timeout?: number\r\n\r\n /**\r\n * Throw on timeout (suspense)\r\n */\r\n throwOnTimeout?: boolean\r\n\r\n /**\r\n * Component visible during the delay.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n delayComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when timeout is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n timeoutComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when delay is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n children?: React.ReactNode\r\n}\r\n\r\nexport function Delayed({\r\n delay = 300,\r\n timeout = 0,\r\n throwOnTimeout = false,\r\n delayComponent,\r\n timeoutComponent,\r\n children,\r\n}: DelayedProps) {\r\n const [visible, setVisible] = React.useState(false)\r\n const [hasTimedOut, setHasTimedOut] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const visibilityTimeout = window.setTimeout(() => setVisible(true), delay)\r\n\r\n let failedTimeout: number\r\n if (timeout > 0) {\r\n failedTimeout = window.setTimeout(() => {\r\n setHasTimedOut(true)\r\n if (throwOnTimeout) throw new Error()\r\n }, timeout)\r\n }\r\n\r\n return () => {\r\n clearTimeout(visibilityTimeout)\r\n clearTimeout(failedTimeout)\r\n }\r\n }, [delay, timeout, throwOnTimeout])\r\n\r\n if (!visible) return <>{delayComponent}\r\n\r\n if (hasTimedOut) {\r\n return <>{timeoutComponent}\r\n }\r\n\r\n return <>{children}\r\n}\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Dialog'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { COMPONENT_ANIMATION_DURATION } from '../constants'\r\n\r\nexport const ZIndexContext = React.createContext('z-50')\r\n\r\nexport function useZIndex() {\r\n return React.useContext(ZIndexContext)\r\n}\r\n\r\nexport type DialogStateReturn = ReturnType\r\n/**\r\n * Hook which provides state to dialogs\r\n */\r\nexport function useDialogState(settings?: Reakit.DialogInitialState) {\r\n return Reakit.useDialogState({ ...settings, animated: COMPONENT_ANIMATION_DURATION })\r\n}\r\n\r\nexport const DialogDragContext = React.createContext<{\r\n enabled?: boolean\r\n handleRef?: React.RefObject\r\n boxPosition: { x: number; y: number }\r\n resetBoxPosition: () => void\r\n setBoxPosition: React.Dispatch>\r\n}>({\r\n enabled: false,\r\n handleRef: undefined,\r\n boxPosition: { x: 0, y: 0 },\r\n resetBoxPosition: () => {},\r\n setBoxPosition: () => {},\r\n})\r\n\r\n/**\r\n * Hook which allows an element on the page to become draggable\r\n */\r\nexport function useDrag(enabled?: boolean) {\r\n const dragging = React.useRef(false)\r\n const handleRef = React.useRef(null)\r\n const handleElement = handleRef.current\r\n\r\n /**\r\n * Set box position in both state for the component to re-render and as a ref\r\n * so that we don’t have to re-run the whole effect on every change\r\n */\r\n const [boxPosition, setBoxPosition] = React.useState({ x: 0, y: 0 })\r\n const boxPositionRef = React.useRef({ x: 0, y: 0 })\r\n const dragDiff = React.useRef({ x: 0, y: 0 })\r\n\r\n const { current: resetBoxPosition } = React.useRef(() => {\r\n setBoxPosition({ x: 0, y: 0 })\r\n })\r\n\r\n React.useEffect(() => {\r\n boxPositionRef.current = { ...boxPosition }\r\n }, [boxPosition])\r\n\r\n React.useEffect(() => {\r\n if (!enabled || !handleElement || isMobile()) return\r\n\r\n const onMouseDown = (ev: MouseEvent) => {\r\n dragging.current = true\r\n\r\n dragDiff.current = {\r\n x: ev.pageX - boxPositionRef.current.x - window.scrollX,\r\n y: ev.pageY - boxPositionRef.current.y - window.scrollY,\r\n }\r\n }\r\n\r\n const onMouseUp = () => {\r\n dragging.current = false\r\n }\r\n\r\n const onMouseMove = (ev: MouseEvent) => {\r\n if (!dragging.current) return\r\n\r\n const x = ev.pageX - dragDiff.current.x - window.scrollX\r\n const y = ev.pageY - dragDiff.current.y - window.scrollY\r\n\r\n setBoxPosition({ x, y })\r\n }\r\n\r\n handleElement.addEventListener('pointerdown', onMouseDown)\r\n handleElement.addEventListener('dblclick', resetBoxPosition)\r\n window.addEventListener('pointerup', onMouseUp)\r\n document.body.addEventListener('pointermove', onMouseMove)\r\n\r\n return () => {\r\n handleElement.removeEventListener('pointerdown', onMouseDown)\r\n handleElement.removeEventListener('dblclick', resetBoxPosition)\r\n window.removeEventListener('pointerup', onMouseUp)\r\n document.body.removeEventListener('pointermove', onMouseMove)\r\n }\r\n }, [enabled, handleElement, resetBoxPosition])\r\n\r\n return {\r\n enabled,\r\n handleRef,\r\n boxPosition,\r\n setBoxPosition,\r\n resetBoxPosition,\r\n }\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { useElementMeasure } from '../../hooks/use-element-measure'\r\nimport { Box, BoxProps } from '../box'\r\nimport { DialogDragContext } from './hooks'\r\n\r\n/**\r\n * Public props for the component\r\n */\r\nexport type DialogBoxProps = BoxProps\r\n\r\ninterface DialogBoxOwnProps extends DialogBoxProps {\r\n /**\r\n * This callback serves as a way to account for the time between dialog close\r\n * and animation finish. The box isn’t rendered when the dialog closes but we still\r\n * want to display content when the dialog is closing\r\n */\r\n onUnmount?: () => void\r\n}\r\n\r\n/**\r\n * Dialog content container\r\n */\r\nexport function DialogBox({ onUnmount, style, ...props }: React.PropsWithChildren) {\r\n const wrapperRef = React.useRef(null)\r\n const { setElementRef, elementHeight } = useElementMeasure()\r\n const dialogDrag = React.useContext(DialogDragContext)\r\n\r\n React.useEffect(() => {\r\n const onResize = () => {\r\n const { top = 0, bottom = 0, left = 0, right = 0 } = dialogDrag.handleRef?.current?.getBoundingClientRect() ?? {}\r\n const { clientHeight, clientWidth } = window.document.documentElement\r\n if (top < 0 || bottom > clientHeight || left < 0 || right > clientWidth) {\r\n dialogDrag.resetBoxPosition()\r\n }\r\n }\r\n\r\n window.addEventListener('resize', onResize)\r\n onResize()\r\n\r\n return () => {\r\n window.removeEventListener('resize', onResize)\r\n onUnmount?.()\r\n }\r\n // Set up an effect which only calls resetBoxPosition which is ref fn with state setter call and the unmount callback\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n setElementRef(wrapperRef.current)\r\n }, [setElementRef])\r\n\r\n React.useEffect(() => {\r\n dialogDrag.setBoxPosition((prevPosition) => {\r\n const { top = 0 } = dialogDrag.handleRef?.current?.getBoundingClientRect() ?? {}\r\n return { ...prevPosition, y: prevPosition.y - Math.min(top, 0) }\r\n })\r\n // We want to call it only on elementHeight change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [elementHeight])\r\n\r\n const dialogBoxStyle = React.useMemo(() => {\r\n if (dialogDrag.enabled) {\r\n return { ...style, transform: `translate3d(${dialogDrag.boxPosition.x}px, ${dialogDrag.boxPosition.y}px, 0)` }\r\n }\r\n return style\r\n }, [style, dialogDrag])\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\n/**\r\n * The backdrop of the dialog, closes the dialog on click\r\n */\r\nexport function DialogOverlay(props: React.HTMLProps) {\r\n return (\r\n \r\n )\r\n}\r\n","export function getExtendedDialogState(state: { visible: boolean; animating: boolean }) {\r\n return {\r\n isFullyOpened: state.visible && !state.animating,\r\n isFullyClosed: !state.visible && !state.animating,\r\n }\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Dialog'\r\nimport { Portal } from 'reakit/Portal'\r\n\r\nimport { isIpad, isMobile } from '../../../app/shared/isMobile'\r\nimport { useScreenSize } from '../../hooks/use-screen-size'\r\nimport { useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { ChildPosition, getFlexAlignClasses } from '../../util'\r\nimport { DialogBox, DialogBoxProps } from './dialog-box'\r\nimport { DialogOverlay } from './dialog-overlay'\r\nimport { DialogDragContext, DialogStateReturn, ZIndexContext, useDrag } from './hooks'\r\nimport { getExtendedDialogState } from './utils'\r\n\r\nexport enum DialogType {\r\n modal,\r\n drawer,\r\n}\r\n\r\nexport interface DialogProps extends DialogBoxProps, Pick {\r\n /**\r\n * The returned object from `useDialogState`\r\n */\r\n state: DialogStateReturn\r\n\r\n /**\r\n * Any additional props to the Reakit Dialog component\r\n */\r\n finalFocusRef?: React.RefObject\r\n\r\n /**\r\n * Callback which is called when the dialog closes and all animations complete\r\n */\r\n onHide?: () => void\r\n\r\n /**\r\n * Callback which is called when the dialog overlay is clicked\r\n * default behavior (closing the dialog) will be overridden so it has to be called manually\r\n */\r\n onOverlayClick?: () => void\r\n\r\n /**\r\n * Sets if the dialog can be dragged across the screen\r\n *\r\n * @default false\r\n */\r\n isDraggable?: boolean\r\n\r\n /**\r\n * Type of dialog\r\n *\r\n * @default modal\r\n */\r\n type?: keyof typeof DialogType\r\n\r\n /**\r\n * Dialog position on the screen\r\n *\r\n * @default center\r\n */\r\n position?: keyof typeof ChildPosition\r\n\r\n overlayClass?: string\r\n\r\n /**\r\n * Sets if backdrop overlay prevents interaction with rest of page, onOverlayClick will have no effect if isBackdropDisabled is true\r\n *\r\n * @default false\r\n */\r\n isBackdropDisabled?: boolean\r\n}\r\n\r\nconst DIALOG_BACKDROP_WIDTH_CSS_VAR = '--dialog-backgrop-width'\r\n\r\nconst onResize = () => {\r\n // Save to css var because it can change and that could make modal dialog jump on open\r\n document.body.style.setProperty(\r\n DIALOG_BACKDROP_WIDTH_CSS_VAR,\r\n `${Math.max(document.documentElement.clientWidth, window.innerWidth)}px`\r\n )\r\n}\r\n\r\n/**\r\n * The actual dialog component which renders overlay, box and handles all the\r\n * functionality like focus trapping, etc.\r\n */\r\nexport function Dialog({\r\n state,\r\n finalFocusRef,\r\n onHide,\r\n onOverlayClick,\r\n children,\r\n hide,\r\n hideOnEsc,\r\n isDraggable = false,\r\n position = 'center',\r\n isBackdropDisabled = false,\r\n type = 'modal',\r\n overlayClass,\r\n 'aria-label': ariaLabel,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const dialogDrag = useDrag(isDraggable)\r\n const { isFullyClosed } = getExtendedDialogState(state)\r\n const { viewport } = useVisualViewport({ enabled: !isFullyClosed, onScroll: false })\r\n const screenSize = useScreenSize()\r\n\r\n const dialogStyle = React.useMemo(() => {\r\n if (isMobile() && !isIpad() && viewport.scale !== 1) {\r\n return {\r\n left: viewport.left,\r\n top: viewport.top,\r\n width: viewport.unscaledWidth,\r\n height: viewport.unscaledHeight,\r\n minWidth: screenSize.width,\r\n minHeight: screenSize.width,\r\n willChange: 'auto',\r\n }\r\n }\r\n\r\n return { width: `var(${DIALOG_BACKDROP_WIDTH_CSS_VAR})` }\r\n }, [screenSize.width, viewport.left, viewport.scale, viewport.top, viewport.unscaledHeight, viewport.unscaledWidth])\r\n\r\n React.useEffect(() => {\r\n if (isFullyClosed) {\r\n return\r\n }\r\n\r\n window.addEventListener('resize', onResize)\r\n onResize()\r\n\r\n return () => {\r\n window.removeEventListener('resize', onResize)\r\n }\r\n }, [isFullyClosed])\r\n\r\n if (isFullyClosed) {\r\n return null\r\n }\r\n\r\n const DialogWrapper = state.modal ? React.Fragment : Portal\r\n return (\r\n \r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...innerProps }) => (\r\n \r\n \r\n {!isBackdropDisabled && (\r\n \r\n )}\r\n \r\n \r\n {\r\n onHide?.()\r\n dialogDrag.resetBoxPosition()\r\n }}\r\n >\r\n {children}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\n","import { isMobile } from '../../app/shared/isMobile'\r\n\r\nexport function useScreenSize() {\r\n return {\r\n width: isMobile() ? window.screen.width : window.innerWidth,\r\n height: isMobile() ? window.screen.height : window.innerHeight,\r\n }\r\n}\r\n","import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\n\r\ninterface DialogBodyProps extends React.HTMLProps {\r\n /**\r\n * Whether or not the dialog body will have padding\r\n *\r\n * @default true\r\n */\r\n hasPadding?: boolean\r\n}\r\n\r\n/**\r\n * Content wrapper which handles scrolling on mobile\r\n */\r\nexport function DialogBody({ hasPadding = true, ...props }: React.PropsWithChildren) {\r\n const scrollDivRef = React.useRef(null)\r\n\r\n React.useEffect(() => {\r\n const scrollBox = scrollDivRef.current\r\n\r\n if (isMobile() && scrollBox) {\r\n disableBodyScroll(scrollBox)\r\n\r\n return () => enableBodyScroll(scrollBox)\r\n }\r\n }, [])\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Heading, Paragraph } from '../typography'\r\nimport { Dialog, DialogProps } from './dialog'\r\nimport { DialogBody } from './dialog-body'\r\nimport { DialogStateReturn } from './hooks'\r\n\r\ninterface ConfirmationDialogProps {\r\n state: DialogStateReturn\r\n title: React.ReactNode\r\n actions: React.ReactNode\r\n 'aria-label': string\r\n position?: DialogProps['position']\r\n}\r\n\r\nexport function ConfirmationDialog({ position, ...props }: React.PropsWithChildren) {\r\n return (\r\n \r\n \r\n \r\n {props.title}\r\n \r\n {props.children}\r\n
{props.actions}
\r\n
\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Dialog'\r\n\r\nimport { DropdownContext } from '../dropdown'\r\nimport { DialogStateReturn } from './hooks'\r\n\r\ninterface DialogButtonProps extends Reakit.DialogDisclosureHTMLProps {\r\n state: DialogStateReturn\r\n}\r\n/**\r\n * The trigger button component which handles ref & focus return, etc.\r\n */\r\nexport const DialogTrigger = React.forwardRef(\r\n ({ state, ...props }: DialogButtonProps, ref: React.ForwardedRef) => {\r\n const dropdownContext = React.useContext(DropdownContext)\r\n\r\n return (\r\n ) => {\r\n // Close dropdown if we’re inside one\r\n dropdownContext?.root.hide()\r\n props.onClick?.(ev)\r\n }}\r\n >\r\n {props.children}\r\n \r\n )\r\n }\r\n)\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\ninterface DialogFooterProps extends React.HTMLProps {\r\n padding?: boolean\r\n}\r\n\r\n/**\r\n * Footer container which renders border and aligns items to right\r\n */\r\nexport function DialogFooter({ padding = true, ...props }: React.PropsWithChildren) {\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { Icon } from '../icon'\r\nimport { Heading } from '../typography'\r\nimport { DialogDragContext } from './hooks'\r\n\r\ninterface DialogHeaderProps {\r\n /**\r\n * Callback when user clicks on close button. The button will be hidden if not set\r\n */\r\n onCloseClick?: () => void\r\n\r\n /**\r\n * Additional class names for the component\r\n */\r\n className?: string\r\n\r\n /**\r\n * Whether or not the dialog header will have default horizontal padding\r\n *\r\n * @default true\r\n */\r\n hasHorizontalPadding?: boolean\r\n\r\n /**\r\n * Whether or not the dialog header will have default min height\r\n *\r\n * @default true\r\n */\r\n hasMinHeight?: boolean\r\n\r\n /**\r\n * Whether or not the dialog header children should be rendered as Heading\r\n *\r\n * @default true\r\n */\r\n asHeading?: boolean\r\n}\r\n\r\n/**\r\n * Component which renders title and a close button\r\n */\r\nexport function DialogHeader({\r\n onCloseClick,\r\n children,\r\n className,\r\n hasHorizontalPadding = true,\r\n hasMinHeight = true,\r\n asHeading = true,\r\n}: React.PropsWithChildren) {\r\n const dialogDrag = React.useContext(DialogDragContext)\r\n\r\n return (\r\n \r\n {children &&\r\n (asHeading ? (\r\n \r\n {children}\r\n \r\n ) : (\r\n children\r\n ))}\r\n {onCloseClick && (\r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Menu'\r\n\r\nimport { COMPONENT_ANIMATION_DURATION } from '../constants'\r\n\r\nexport type DropdownStateReturn = ReturnType\r\n\r\nexport const DropdownContext = React.createContext<{\r\n parent: Reakit.MenuStateReturn\r\n root: Reakit.MenuStateReturn\r\n} | null>(null)\r\n\r\nexport function useDropdownState(settings?: Reakit.MenuInitialState) {\r\n const context = React.useContext(DropdownContext)\r\n\r\n return Reakit.useMenuState({\r\n ...settings,\r\n loop: true,\r\n animated: COMPONENT_ANIMATION_DURATION,\r\n unstable_virtual: true,\r\n unstable_offset: context?.root ? [-5, 4] : [0, 5],\r\n modal: false,\r\n })\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Menu'\r\nimport { Portal } from 'reakit/Portal'\r\n\r\nimport { Box, BoxProps, BoxRounding } from '../box'\r\nimport { getExtendedDialogState, useZIndex } from '../dialog'\r\nimport { DropdownContext, useDropdownState } from './hooks'\r\n\r\ninterface DropdownBaseProps extends Omit {\r\n /**\r\n * Trigger button for the dropdown\r\n */\r\n label: JSX.Element\r\n\r\n /**\r\n * @private\r\n * Any additional props to the trigger button. Used by nested dropdown wrapper\r\n */\r\n triggerProps?: Reakit.MenuButtonHTMLProps\r\n\r\n /**\r\n * Rounding of all trigger button, dropdown wrapper and dropdown items\r\n */\r\n rounding?: keyof typeof BoxRounding\r\n}\r\n\r\ninterface RootDropdownProps {\r\n /**\r\n * The returned object from `useDropdownState`. For nested dropdowns use the `isNested` prop\r\n */\r\n state: Reakit.MenuStateReturn\r\n isNested?: never\r\n /**\r\n * When set to true the dropdown will not render in Portal and will not use position absolute + transform.\r\n */\r\n isStatic?: boolean\r\n}\r\n\r\ninterface NestedDropdownProps {\r\n state?: never\r\n /**\r\n * When set to true the dropdown will compute its own state. Only usable with\r\n * nested dropdowns\r\n */\r\n isNested: true\r\n\r\n isStatic?: never\r\n}\r\n\r\ntype DropdownProps = DropdownBaseProps & (RootDropdownProps | NestedDropdownProps)\r\n\r\nfunction DropdownComponent(\r\n {\r\n label,\r\n triggerProps,\r\n state,\r\n 'aria-label': ariaLabel,\r\n children,\r\n isNested,\r\n rounding,\r\n isStatic,\r\n ...props\r\n }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const zIndex = useZIndex()\r\n const context = React.useContext(DropdownContext)\r\n // Required due to the way conditional props work\r\n const dropdownState = state!\r\n const { isFullyClosed } = getExtendedDialogState(state ?? { visible: false, animating: false })\r\n\r\n if (!isNested && !dropdownState) {\r\n throw new Error('Dropdowns require either `state` or `isNested` prop defined!')\r\n }\r\n\r\n const ContainerElement = React.useRef(isNested || isStatic ? React.Fragment : Portal).current\r\n\r\n return (\r\n <>\r\n \r\n {(buttonProps) =>\r\n React.cloneElement(label, {\r\n ...buttonProps,\r\n ...label.props,\r\n rounding,\r\n active: label.props.active ?? dropdownState.visible,\r\n })\r\n }\r\n \r\n {!isFullyClosed && (\r\n \r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...innerProps }) => (\r\n \r\n \r\n \r\n {React.Children.map(children, (child) => {\r\n if (!React.isValidElement(child)) return child\r\n\r\n if (child.type === Dropdown) {\r\n return {child}\r\n }\r\n\r\n return React.cloneElement(child, {\r\n ...child.props,\r\n rounding,\r\n })\r\n })}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport const Dropdown = React.forwardRef(DropdownComponent)\r\n\r\ninterface NestedDropdownWrapperProps {\r\n /**\r\n * State of parrent dropdown to be passed to MenuItem for correct navigation\r\n * handling\r\n */\r\n parentState: Reakit.MenuStateReturn\r\n\r\n /**\r\n * Nested dropdown element\r\n */\r\n children: JSX.Element\r\n}\r\n\r\n/**\r\n * The `useDropdownState` requires parent context to be defined in order to work\r\n * with nested Dropdowns. So we need to create a wrapper to be able to get to the\r\n * parent context\r\n */\r\nfunction NestedDropdownWrapper({ parentState, children }: NestedDropdownWrapperProps) {\r\n const state = useDropdownState()\r\n\r\n return (\r\n \r\n {(itemProps) => React.cloneElement(children, { ...children.props, triggerProps: itemProps, state })}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Menu'\r\n\r\n/**\r\n * When rendering multiple dropdowns, wrap them in `DropdownBar` so they can be\r\n * navigated between\r\n */\r\nexport function DropdownBar({ children, ...props }: Partial) {\r\n const state = Reakit.useMenuBarState()\r\n\r\n return (\r\n \r\n {React.Children.map(children, (child) => {\r\n if (!React.isValidElement(child)) return child\r\n\r\n return (\r\n \r\n {(itemProps) => React.cloneElement(child, itemProps)}\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Menu'\r\n\r\nimport { Button, ButtonProps } from '../button'\r\nimport { Icon, isValidIconName } from '../icon'\r\nimport { PropsWithAs } from '../types'\r\nimport { DropdownContext } from './hooks'\r\n\r\nconst DEFAULT_ELEMENT = 'button'\r\n\r\ninterface DropdownItemProps extends ButtonProps {\r\n subtitle?: React.ReactNode\r\n\r\n /**\r\n * Whether clicking the item should also close the dropdown. Only applies to\r\n * items without a submenu\r\n *\r\n * @default true\r\n */\r\n closeOnClick?: boolean\r\n}\r\n\r\nfunction DropdownItemComponent(\r\n {\r\n as: asComponent,\r\n state,\r\n subtitle,\r\n closeOnClick = true,\r\n children,\r\n rounding,\r\n size,\r\n ...props\r\n }: PropsWithAs & DropdownItemProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const context = React.useContext(DropdownContext)\r\n\r\n return (\r\n \r\n {(itemProps) => {\r\n const active = itemProps['aria-selected'] && !context?.parent.animating\r\n const hasSubmenu = Boolean(itemProps['aria-haspopup'])\r\n\r\n const iconTheme = {\r\n 'text-gray-300': !active,\r\n 'text-gray-white dark:text-white': active,\r\n }\r\n\r\n return (\r\n \r\n ) : (\r\n props.leftContent\r\n )\r\n }\r\n rightContent={\r\n isValidIconName(props.rightContent) ? (\r\n \r\n ) : (\r\n props.rightContent\r\n )\r\n }\r\n onClick={(ev: React.MouseEvent) => {\r\n // Close if we clicked on an item which doesn’t have a submenu\r\n if (closeOnClick && !hasSubmenu) {\r\n context?.root.hide()\r\n }\r\n\r\n itemProps.onClick?.(ev)\r\n }}\r\n >\r\n {children}\r\n {subtitle &&
{subtitle}
}\r\n \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 DropdownItem = React.forwardRef(DropdownItemComponent) as <\r\n TagType extends React.ElementType = typeof DEFAULT_ELEMENT,\r\n>(\r\n props: PropsWithAs & DropdownItemProps & { ref?: React.ForwardedRef }\r\n) => ReturnType\r\n","import * as Reakit from 'reakit/Menu'\r\n\r\nimport { Paragraph } from '../typography'\r\n\r\nexport function DropdownSeparator(props: Partial) {\r\n return (\r\n \r\n
\r\n {props.children && (\r\n \r\n {props.children}\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Button, ButtonProps } from '../button'\r\nimport { ButtonGroup } from '../button-group'\r\nimport { Icon } from '../icon'\r\nimport { Dropdown } from './dropdown'\r\nimport { useDropdownState } from './hooks'\r\n\r\ninterface MoreButtonDropdownProps extends ButtonProps {\r\n /**\r\n * Children of the button\r\n */\r\n label?: React.ReactNode\r\n\r\n /**\r\n * Additional handler when user clicks on the button\r\n */\r\n onClick?: (event: React.MouseEvent) => void\r\n\r\n /**\r\n * Accessibility label for the dropdown component\r\n */\r\n 'aria-label': string\r\n}\r\n\r\nexport function MoreButtonDropdown({\r\n label,\r\n children,\r\n onClick,\r\n 'aria-label': ariaLabel,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const state = useDropdownState({ placement: 'bottom-end' })\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n }\r\n >\r\n {children}\r\n \r\n \r\n )\r\n}\r\n","import * as 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 }, [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 * 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, ...props }: IconProps) {\r\n const Component = name && iconList[name] ? iconList[name] : asComponent\r\n\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 (!Component) {\r\n throw new Error('No icon to render!')\r\n }\r\n\r\n return \r\n}\r\n","import { IconAdd } from './add'\r\nimport { IconArrowDownShort } from './arrow-down-short'\r\nimport { IconArrowForward } from './arrow-forward'\r\nimport { IconArrowUpShort } from './arrow-up-short'\r\nimport { IconBriefcase } from './briefcase'\r\nimport { IconCalendar } from './calendar'\r\nimport { IconCandleBarBasic } from './candle-bar-basic'\r\nimport { IconCandleBarHeikinAshi } from './candle-bar-heikin-ashi'\r\nimport { IconCandleBarHollow } from './candle-bar-hollow'\r\nimport { IconCaretDown } from './caret-down'\r\nimport { IconCaretLeft } from './caret-left'\r\nimport { IconCaretRight } from './caret-right'\r\nimport { IconCaretUp } from './caret-up'\r\nimport { IconCaretVertical } from './caretVertical'\r\nimport { IconChartBar } from './chart-bar'\r\nimport { IconChartBubble } from './chart-bubble'\r\nimport { IconChartPie } from './chart-pie'\r\nimport { IconChartTable } from './chart-table'\r\nimport { IconChartTreemap } from './chart-treemap'\r\nimport { IconChevronDown } from './chevron-down'\r\nimport { IconChevronRight } from './chevron-right'\r\nimport { IconClose } from './close'\r\nimport { IconDarkMode } from './dark-mode'\r\nimport { IconDiamondOutlined } from './diamond-outlined'\r\nimport { IconDone } from './done'\r\nimport { IconDrag } from './drag'\r\nimport { IconDraw } from './draw'\r\nimport { IconDrawingActionDelete } from './drawing-action-delete'\r\nimport { IconDrawingSettingAutosaveOff } from './drawing-setting-autosave-off'\r\nimport { IconDrawingSettingAutosaveOn } from './drawing-setting-autosave-on'\r\nimport { IconDrawingSettingAutosaveSaving } from './drawing-setting-autosave-saving'\r\nimport { IconDrawingSettingDrawingMode } from './drawing-setting-drawing-mode'\r\nimport { IconDrawingSettingDrawingModeActive } from './drawing-setting-drawing-mode-active'\r\nimport { IconDrawingSettingHide } from './drawing-setting-hide'\r\nimport { IconDrawingSettingLock } from './drawing-setting-lock'\r\nimport { IconDrawingSettingPreserveDrawings } from './drawing-setting-preserve-drawings'\r\nimport { IconDrawingSettingPreserveDrawingsActive } from './drawing-setting-preserve-drawings-active'\r\nimport { IconDrawingSettingShow } from './drawing-setting-show'\r\nimport { IconDrawingSettingUnlock } from './drawing-setting-unlock'\r\nimport { IconExitFullscreen } from './exit-fullscreen'\r\nimport { IconFlash } from './flash'\r\nimport { IconFullscreen } from './fullscreen'\r\nimport { IconGesture } from './gesture'\r\nimport { IconGift } from './gift'\r\nimport { IconHamburger } from './hamburger'\r\nimport { IconHelp } from './help'\r\nimport { IconIdea } from './idea'\r\nimport { IconIdeaLoad } from './idea-load'\r\nimport { IconIdeaSave } from './idea-save'\r\nimport { IconInfo } from './info'\r\nimport { IconInterval } from './interval'\r\nimport { IconLayout1h1v } from './layout-1h1v'\r\nimport { IconLayout1h2v } from './layout-1h2v'\r\nimport { IconLayout1h3v } from './layout-1h3v'\r\nimport { IconLayout1l2r } from './layout-1l2r'\r\nimport { IconLayout1t2b } from './layout-1t2b'\r\nimport { IconLayout2h1v } from './layout-2h1v'\r\nimport { IconLayout2h2v } from './layout-2h2v'\r\nimport { IconLayout3h1v } from './layout-3h1v'\r\nimport { IconLayout3h2v } from './layout-3h2v'\r\nimport { IconLightMode } from './light-mode'\r\nimport { IconLineChartType } from './line-chart-type'\r\nimport { IconLock } from './lock'\r\nimport { IconMenuClose } from './menu-close'\r\nimport { IconMinus } from './minus'\r\nimport { IconMore } from './more'\r\nimport { IconNote } from './note'\r\nimport { IconOhlcChartType } from './ohlc-chart-type'\r\nimport { IconPalette } from './palette'\r\nimport { IconProfile } from './profile'\r\nimport { IconPublish } from './publish'\r\nimport { IconRefresh } from './refresh'\r\nimport { IconRemove } from './remove'\r\nimport { IconRestore } from './restore'\r\nimport { IconSearch } from './search'\r\nimport { IconSettings } from './settings'\r\nimport { IconSettingsWheel } from './settings-wheel'\r\nimport { IconShare } from './share'\r\nimport { IconSignOut } from './sign-out'\r\nimport { IconStar } from './star'\r\nimport { IconStarOutlined } from './star-outlined'\r\nimport { SVG, SVGProps } from './svg'\r\nimport { IconSwitchHorizontal } from './switch-horizontal'\r\nimport { IconSwitchVertical } from './switch-vertical'\r\nimport { IconTabKey } from './tab-key'\r\nimport { IconTemplate } from './template'\r\nimport { IconToolArrow } from './tool-arrow'\r\nimport { IconToolBrush } from './tool-brush'\r\nimport { IconToolCallout } from './tool-callout'\r\nimport { IconToolCurve } from './tool-curve'\r\nimport { IconToolElliottWave } from './tool-elliott-wave'\r\nimport { IconToolEllipse } from './tool-ellipse'\r\nimport { IconToolExpand } from './tool-expand'\r\nimport { IconToolFibonacci } from './tool-fibonacci'\r\nimport { IconToolLine } from './tool-line'\r\nimport { IconToolMeasure } from './tool-measure'\r\nimport { IconToolMidlineH } from './tool-midline-h'\r\nimport { IconToolMidlineV } from './tool-midline-v'\r\nimport { IconToolMouse } from './tool-mouse'\r\nimport { IconToolPitchFork } from './tool-pitchfork'\r\nimport { IconToolPolygon } from './tool-polygon'\r\nimport { IconToolPosition } from './tool-position'\r\nimport { IconToolRect } from './tool-rect'\r\nimport { IconToolRectRotated } from './tool-rect-rotated'\r\nimport { IconToolText } from './tool-text'\r\nimport { IconToolTriangle } from './tool-triangle'\r\nimport { IconToolXABCD } from './tool-xabcd'\r\nimport { IconTrashCan } from './trash-can'\r\nimport { IconTrendingDown } from './trending-down'\r\nimport { IconTrendingUp } from './trending-up'\r\nimport { IconTriangle } from './triangle'\r\nimport { IconTriangleOutlineDown } from './triangle-outline-down'\r\nimport { IconTriangleOutlineUp } from './triangle-outline-up'\r\nimport { IconWarning } from './warning'\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]\r\n}\r\n\r\nexport type IconNameType = keyof typeof iconList\r\n\r\n// Export list of icon components\r\nexport const iconList = {\r\n add: IconAdd,\r\n arrowDownShort: IconArrowDownShort,\r\n arrowForward: IconArrowForward,\r\n arrowUpShort: IconArrowUpShort,\r\n briefcase: IconBriefcase,\r\n calendar: IconCalendar,\r\n candleBarBasic: IconCandleBarBasic,\r\n candleBarHeikinAshi: IconCandleBarHeikinAshi,\r\n candleBarHollow: IconCandleBarHollow,\r\n caretDown: IconCaretDown,\r\n caretLeft: IconCaretLeft,\r\n caretRight: IconCaretRight,\r\n caretUp: IconCaretUp,\r\n caretVertical: IconCaretVertical,\r\n chartBar: IconChartBar,\r\n chartBubble: IconChartBubble,\r\n chartPie: IconChartPie,\r\n chartTable: IconChartTable,\r\n chartTreemap: IconChartTreemap,\r\n chevronDown: IconChevronDown,\r\n chevronRight: IconChevronRight,\r\n close: IconMenuClose,\r\n darkMode: IconDarkMode,\r\n diamondOutlined: IconDiamondOutlined,\r\n done: IconDone,\r\n drag: IconDrag,\r\n draw: IconDraw,\r\n drawingActionDelete: IconDrawingActionDelete,\r\n drawingSettingAutosaveOff: IconDrawingSettingAutosaveOff,\r\n drawingSettingAutosaveOn: IconDrawingSettingAutosaveOn,\r\n drawingSettingAutosaveSaving: IconDrawingSettingAutosaveSaving,\r\n drawingSettingDrawingMode: IconDrawingSettingDrawingMode,\r\n drawingSettingDrawingModeActive: IconDrawingSettingDrawingModeActive,\r\n drawingSettingHide: IconDrawingSettingHide,\r\n drawingSettingLock: IconDrawingSettingLock,\r\n drawingSettingPreserveDrawings: IconDrawingSettingPreserveDrawings,\r\n drawingSettingPreserveDrawingsActive: IconDrawingSettingPreserveDrawingsActive,\r\n drawingSettingShow: IconDrawingSettingShow,\r\n drawingSettingUnlock: IconDrawingSettingUnlock,\r\n empty: (props: SVGProps) => ,\r\n exitFullscreen: IconExitFullscreen,\r\n flash: IconFlash,\r\n fullscreen: IconFullscreen,\r\n gesture: IconGesture,\r\n gift: IconGift,\r\n hamburger: IconHamburger,\r\n help: IconHelp,\r\n idea: IconIdea,\r\n ideaLoad: IconIdeaLoad,\r\n ideaSave: IconIdeaSave,\r\n info: IconInfo,\r\n interval: IconInterval,\r\n layout1h1v: IconLayout1h1v,\r\n layout1h2v: IconLayout1h2v,\r\n layout1h3v: IconLayout1h3v,\r\n layout1l2r: IconLayout1l2r,\r\n layout1t2b: IconLayout1t2b,\r\n layout2h1v: IconLayout2h1v,\r\n layout2h2v: IconLayout2h2v,\r\n layout3h1v: IconLayout3h1v,\r\n layout3h2v: IconLayout3h2v,\r\n lightMode: IconLightMode,\r\n lineChartType: IconLineChartType,\r\n lock: IconLock,\r\n menuClose: IconClose,\r\n minus: IconMinus,\r\n more: IconMore,\r\n note: IconNote,\r\n ohlcChartType: IconOhlcChartType,\r\n palette: IconPalette,\r\n profile: IconProfile,\r\n publish: IconPublish,\r\n refresh: IconRefresh,\r\n remove: IconRemove,\r\n restore: IconRestore,\r\n search: IconSearch,\r\n settings: IconSettings,\r\n settingsWheel: IconSettingsWheel,\r\n share: IconShare,\r\n signOut: IconSignOut,\r\n star: IconStar,\r\n starOutlined: IconStarOutlined,\r\n switchHorizontal: IconSwitchHorizontal,\r\n switchVertical: IconSwitchVertical,\r\n tabKey: IconTabKey,\r\n template: IconTemplate,\r\n toolArrow: IconToolArrow,\r\n toolBrush: IconToolBrush,\r\n toolCallout: IconToolCallout,\r\n toolCurve: IconToolCurve,\r\n toolElliottWave: IconToolElliottWave,\r\n toolEllipse: IconToolEllipse,\r\n toolExpand: IconToolExpand,\r\n toolFibonacci: IconToolFibonacci,\r\n toolLine: IconToolLine,\r\n toolMeasure: IconToolMeasure,\r\n toolMidLineH: IconToolMidlineH,\r\n toolMidLineV: IconToolMidlineV,\r\n toolMouse: IconToolMouse,\r\n toolPitchfork: IconToolPitchFork,\r\n toolPolygon: IconToolPolygon,\r\n toolPosition: IconToolPosition,\r\n toolRect: IconToolRect,\r\n toolRectRotated: IconToolRectRotated,\r\n toolText: IconToolText,\r\n toolTriangle: IconToolTriangle,\r\n toolXABCD: IconToolXABCD,\r\n trashCan: IconTrashCan,\r\n trendingDown: IconTrendingDown,\r\n trendingUp: IconTrendingUp,\r\n triangle: IconTriangle,\r\n triangleOutlineDown: IconTriangleOutlineDown,\r\n triangleOutlineUp: IconTriangleOutlineUp,\r\n warning: IconWarning,\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconAdd(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconArrowDownShort(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconArrowForward(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconArrowUpShort(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconBriefcase(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconCalendar(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconCandleBarBasic(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconCandleBarHeikinAshi(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconCandleBarHollow(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconCaretDown(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconCaretLeft(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconCaretRight(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconCaretUp(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconCaretVertical(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconChartBar(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconChartBubble(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconChartPie(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconChartTable(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconChartTreemap(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconChevronDown(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconChevronRight(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconMenuClose(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDarkMode(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDiamondOutlined(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDone(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrag(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDraw(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingActionDelete(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingAutosaveOff(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingAutosaveOn(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingAutosaveSaving(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingDrawingMode(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingDrawingModeActive(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingHide(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingLock(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingPreserveDrawings(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingPreserveDrawingsActive(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingShow(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconDrawingSettingUnlock(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconExitFullscreen(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconFlash(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconFullscreen(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconGesture(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconGift(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconHamburger(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconHelp(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconIdea(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconIdeaLoad(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconIdeaSave(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconInfo(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconInterval(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLayout1h1v(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLayout1h2v(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLayout1h3v(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLayout1l2r(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLayout1t2b(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLayout2h1v(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLayout2h2v(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLayout3h1v(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLayout3h2v(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLightMode(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLineChartType(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconLock(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconClose(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconMinus(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconMore(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconNote(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconOhlcChartType(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconPalette(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconProfile(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconPublish(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconRefresh(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconRemove(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconRestore(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconSearch(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconSettings(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconSettingsWheel(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconShare(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconSignOut(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconStar(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconStarOutlined(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconSwitchHorizontal(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconSwitchVertical(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconTabKey(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconTemplate(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolArrow(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolBrush(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolCallout(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolCurve(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolElliottWave(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolEllipse(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolExpand(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolFibonacci(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolLine(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolMeasure(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolMidlineH(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolMidlineV(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolMouse(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolPitchFork(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolPolygon(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolPosition(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolRect(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolRectRotated(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolText(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolTriangle(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconToolXABCD(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconTrashCan(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconTrendingDown(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconTrendingUp(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconTriangle(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconTriangleOutlineDown(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconTriangleOutlineUp(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import { SVG, SVGProps } from './svg'\r\n\r\nexport function IconWarning(props: SVGProps) {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nexport type SVGProps = React.SVGProps\r\n\r\nexport function SVG({ className, width = 16, height = width, ...props }: SVGProps) {\r\n return (\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { ForwardedRef, HTMLProps, PropsWithChildren, ReactNode, forwardRef, useMemo } from 'react'\r\n\r\nimport { ButtonPadding } from './button'\r\nimport { Icon, IconNameType, isValidIconName } from './icon'\r\nimport { Label } from './typography'\r\n\r\nexport enum InputTheme {\r\n none,\r\n light,\r\n dark,\r\n navigationBar,\r\n}\r\n\r\nexport enum InputRounding {\r\n none = '',\r\n regular = 'rounded-md',\r\n}\r\n\r\n/**\r\n * Enum for input size. Only set size on larger viewports to avoid page zooming\r\n */\r\nexport enum InputSize {\r\n small = 'h-6 text-2xs', // 24px height\r\n regular = 'h-7 text-2xs', // 28px height\r\n medium = 'h-8 text-sm', // 32px height\r\n large = 'h-9 text-sm', // 36px height\r\n}\r\n\r\nfunction getInputTheme(theme: InputTheme, isError = false) {\r\n switch (theme) {\r\n case InputTheme.none:\r\n return {}\r\n case InputTheme.dark:\r\n return {\r\n input: classnames('border bg-gray-800 text-gray-50 disabled:bg-gray-700 disabled:text-gray-400', {\r\n 'border-gray-600 hover:border-gray-400 focus:border-blue-400 focus:hover:border-blue-400 disabled:border-gray-700':\r\n !isError,\r\n 'border-red-400': isError,\r\n }),\r\n icon: classnames({\r\n 'text-gray-500 group-focus-within:text-blue-400': !isError,\r\n 'text-red-400': isError,\r\n }),\r\n }\r\n case InputTheme.navigationBar:\r\n return {\r\n input: classnames(\r\n 'border bg-transparent disabled:border-gray-700 disabled:bg-gray-700 disabled:text-gray-400',\r\n {\r\n 'border-gray-100 dark:border-gray-600 text-gray-750 dark:text-gray-50':\r\n !isError && !FinvizSettings.hasUserPremium,\r\n 'border-gray-600 text-gray-50': !isError && FinvizSettings.hasUserPremium,\r\n 'border-red-400': isError,\r\n }\r\n ),\r\n icon: classnames({\r\n 'text-gray-500': !isError,\r\n 'text-red-400': isError,\r\n }),\r\n }\r\n default:\r\n return {\r\n input: classnames(\r\n 'border', // Base styles\r\n 'bg-white disabled:bg-gray-50 disabled:text-gray-500', // Light\r\n 'dark:bg-gray-800 dark:disabled:bg-gray-700 dark:disabled:text-gray-400', // Dark\r\n {\r\n 'border-gray-100 hover:border-gray-300 focus:border-blue-400 hover:focus:border-blue-400 disabled:hover:border-gray-100 dark:border-gray-600 dark:hover:border-gray-400 dark:focus:border-blue-400 dark:hover:focus:border-blue-400 dark:disabled:border-gray-700':\r\n !isError,\r\n 'border-red-400': isError,\r\n }\r\n ),\r\n icon: classnames({\r\n 'text-gray-300 group-focus-within:text-blue-400 dark:text-gray-500': !isError,\r\n 'text-red-400': isError,\r\n }),\r\n }\r\n }\r\n}\r\n\r\ntype OmitNativeProps = Omit, 'label' | 'size'>\r\n\r\nexport interface InputProps {\r\n /**\r\n * Label which is rendered above the input\r\n */\r\n label?: ReactNode\r\n\r\n /**\r\n * Optional label layout switch\r\n */\r\n isHorizontalLabel?: boolean\r\n\r\n /**\r\n * Optional label className override\r\n */\r\n labelClassName?: string\r\n\r\n /**\r\n * Theme for the input\r\n *\r\n * @default light\r\n */\r\n theme?: keyof typeof InputTheme\r\n\r\n /**\r\n * Input size. This setting is ignored on mobile to avoid zoom\r\n *\r\n * @default regular\r\n */\r\n size?: keyof typeof InputSize\r\n\r\n /**\r\n * Border radius of the input\r\n *\r\n * @default regular\r\n */\r\n rounding?: keyof typeof InputRounding\r\n\r\n /**\r\n * Hide value stepper for number inputs\r\n */\r\n showNumberStepper?: boolean\r\n\r\n /**\r\n * Element to display on left the side of the input or name of the icon\r\n */\r\n leftContent?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Element to display on right the side of the input or name of the icon\r\n */\r\n rightContent?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Additional class names for the input\r\n */\r\n inputClass?: string\r\n\r\n /**\r\n * Error label to display under the input\r\n */\r\n error?: ReactNode\r\n\r\n /**\r\n * Additional info to display under the input\r\n */\r\n caption?: ReactNode\r\n\r\n /**\r\n * Disables setting text size to 16px on mobile. Only use for pages which aren’t\r\n * responsive\r\n */\r\n isMobileStyleEnabled?: boolean\r\n}\r\n\r\nexport type InputHTMLProps = OmitNativeProps\r\n\r\nexport type InputComponentProps = InputProps & InputHTMLProps\r\n\r\nfunction InputComponent(\r\n {\r\n label,\r\n isHorizontalLabel,\r\n labelClassName,\r\n size = 'regular',\r\n theme = 'light',\r\n rounding = 'regular',\r\n type,\r\n showNumberStepper = type === 'number',\r\n leftContent,\r\n rightContent,\r\n inputClass,\r\n error,\r\n caption,\r\n className,\r\n isMobileStyleEnabled = true,\r\n ...props\r\n }: InputComponentProps,\r\n ref: ForwardedRef\r\n) {\r\n const inputTheme = useMemo(() => getInputTheme(InputTheme[theme], !!error), [theme, error])\r\n const isLeftStringIcon = isValidIconName(leftContent)\r\n const isRightStringIcon = isValidIconName(rightContent)\r\n const inputSize = InputSize[size]\r\n\r\n const commonSideContentClassnames = useMemo(\r\n () => ({\r\n 'flex absolute w-3 items-center justify-center': true,\r\n 'text-gray-500 dark:text-gray-600': theme === 'light',\r\n 'text-gray-600': theme === 'dark',\r\n }),\r\n [theme]\r\n )\r\n\r\n return (\r\n
\r\n
\r\n \r\n {caption && typeof caption !== 'boolean' && (\r\n {caption}\r\n )}\r\n {error && typeof error !== 'boolean' && {error}}\r\n
\r\n )\r\n}\r\n\r\ninterface InputCaptionProps extends Omit, 'size'> {\r\n size?: keyof typeof InputSize\r\n}\r\n\r\nfunction InputCaption({ size = 'regular', ...props }: PropsWithChildren) {\r\n return (\r\n \r\n )\r\n}\r\n\r\ntype TextareaProps = Omit & OmitNativeProps\r\n\r\nfunction TextareaComponent(\r\n { label, theme = 'light', rounding = 'regular', inputClass, error, caption, className, ...props }: TextareaProps,\r\n ref: ForwardedRef\r\n) {\r\n const textareaTheme = useMemo(() => getInputTheme(InputTheme[theme], !!error), [theme, error])\r\n\r\n return (\r\n
\r\n \r\n {caption && typeof caption !== 'boolean' && (\r\n {caption}\r\n )}\r\n {error && typeof error !== 'boolean' && {error}}\r\n
\r\n )\r\n}\r\n\r\nexport const Input = forwardRef(InputComponent)\r\nexport const Textarea = forwardRef(TextareaComponent)\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Composite'\r\n\r\nexport const ListContext = React.createContext(null)\r\n\r\nexport function useListState(options?: Reakit.CompositeInitialState) {\r\n return Reakit.useCompositeState({ ...options, loop: true, unstable_virtual: true })\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Composite'\r\n\r\nimport { BUTTON_DEFAULT_ELEMENT, Button, ButtonComponentProps, ButtonTheme } from '../button'\r\nimport { ListContext } from './hooks'\r\n\r\nexport interface ListItemProps {\r\n /**\r\n * Theme when the button is selected\r\n */\r\n activeTheme?: keyof typeof ButtonTheme\r\n\r\n /**\r\n * Close parent popover when the item is clicked\r\n */\r\n closeOnSelect?: boolean\r\n\r\n /**\r\n * OnChange callback when item is clicked or navigated to\r\n * @private\r\n */\r\n onSelectItem?: (item: string, closeOnSelect?: boolean) => void\r\n}\r\n\r\nexport function ListItem({\r\n as,\r\n activeTheme = 'blue',\r\n onSelectItem,\r\n onClick,\r\n onKeyPress,\r\n className,\r\n closeOnSelect = true,\r\n children,\r\n ...props\r\n}: React.PropsWithChildren & ButtonComponentProps) {\r\n const state = React.useContext(ListContext)\r\n\r\n return (\r\n {\r\n onClick?.(ev)\r\n onSelectItem?.(ev.currentTarget.id, closeOnSelect)\r\n }}\r\n onKeyPress={(ev) => {\r\n onKeyPress?.(ev)\r\n onSelectItem?.(ev.currentTarget.id, closeOnSelect)\r\n }}\r\n >\r\n {(itemProps: ButtonComponentProps) => {\r\n const active = Boolean(itemProps['aria-selected'])\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n }}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Composite'\r\n\r\nimport { ListContext } from './hooks'\r\nimport { ListItem } from './list-item'\r\n\r\ninterface ListProps extends Omit {\r\n /**\r\n * The returned object from `useListState`\r\n */\r\n state: Reakit.CompositeStateReturn\r\n\r\n /**\r\n * The selected option\r\n */\r\n selectedIndex?: number\r\n\r\n /**\r\n * Callback when selected option index changes\r\n */\r\n onChange?: (selectedIndex: number, closeParent?: boolean) => void\r\n\r\n /**\r\n * Whether or not default styles should be included for the list\r\n * @default true\r\n */\r\n includeBaseStyles?: boolean\r\n}\r\n\r\nexport function List({ state, selectedIndex, includeBaseStyles = true, onChange, children, ...props }: ListProps) {\r\n const prevSelected = React.useRef(null)\r\n\r\n // Select option when `selectedIndex` changes\r\n React.useEffect(() => {\r\n if (\r\n selectedIndex !== undefined &&\r\n selectedIndex >= 0 &&\r\n prevSelected.current !== selectedIndex &&\r\n state.items.length > selectedIndex\r\n ) {\r\n state.move(state.items[selectedIndex].id)\r\n prevSelected.current = selectedIndex\r\n }\r\n }, [selectedIndex, state, state.items.length])\r\n\r\n const onSelectItem = React.useCallback(\r\n (id: string, closeParent: boolean) => {\r\n onChange?.(\r\n state.items.findIndex((item) => item.id === id),\r\n closeParent\r\n )\r\n },\r\n [onChange, state.items]\r\n )\r\n\r\n return (\r\n \r\n \r\n {React.Children.map(children, (child) => {\r\n if (!React.isValidElement(child)) return child\r\n\r\n if (child.type === ListItem) {\r\n return React.cloneElement(child, { ...child.props, onSelectItem: onSelectItem })\r\n }\r\n\r\n return child\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 classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport { Dialog, useDialogState } from 'reakit/Dialog'\r\nimport { Portal } from 'reakit/Portal'\r\n\r\nimport { getVisualViewport, useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { COMPONENT_ANIMATION_DURATION } from '../constants'\r\nimport { getExtendedDialogState } from '../dialog'\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 state = useDialogState({ modal: false, animated: COMPONENT_ANIMATION_DURATION })\r\n const [notification, setNotification] = React.useState(null)\r\n const { isFullyClosed, isFullyOpened } = getExtendedDialogState(state)\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 state.show()\r\n },\r\n hide: state.hide,\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 : Portal),\r\n [notification?.options.inline]\r\n )\r\n\r\n return (\r\n \r\n {props.children}\r\n {!isFullyClosed && (\r\n \r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...innerProps }) => (\r\n \r\n \r\n {notification?.element}\r\n \r\n \r\n )}\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 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: NodeJS.Timeout\r\n if (timeoutInMs) {\r\n timeoutId = 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\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Popover'\r\nimport { Portal } from 'reakit/Portal'\r\n\r\nimport { usePopoverMaxHeight } from '../../hooks/use-popover-maxHeight'\r\nimport { useWindowSize } from '../../hooks/use-window-size'\r\nimport { Box, BoxProps, BoxTheme } from '../box'\r\nimport { getExtendedDialogState, useZIndex } from '../dialog'\r\nimport { TooltipArrow } from '../tooltip/tooltip-arrow'\r\nimport { PopoverStateReturn } from './hooks'\r\n\r\nexport interface PopoverProps extends BoxProps, Pick {\r\n /**\r\n * The returned object from `usePopoverState`\r\n */\r\n state: PopoverStateReturn\r\n\r\n /**\r\n * Focus the popover when it opens\r\n *\r\n * @default true\r\n */\r\n focusOnShow?: Reakit.PopoverProps['unstable_autoFocusOnShow']\r\n\r\n /**\r\n * Focus the anchor element when it closes\r\n *\r\n * @default true\r\n */\r\n focusOnHide?: Reakit.PopoverProps['unstable_autoFocusOnHide']\r\n\r\n /**\r\n * Focus the anchor element when it closes\r\n *\r\n * @default undefined\r\n */\r\n finalFocusRef?: Reakit.PopoverProps['unstable_finalFocusRef']\r\n\r\n /**\r\n * Hides when clicked outside of popover, works with changing focus from the trigger component to another one\r\n *\r\n * @default true\r\n */\r\n hideOnClickOutside?: Reakit.PopoverProps['hideOnClickOutside']\r\n\r\n /**\r\n * Overlay click callback or if false is provided, overlay click calls hide func on popover state object\r\n *\r\n * @default undefined\r\n */\r\n onOverlayClick?: (() => void) | false\r\n\r\n /**\r\n * Popover wrapper css style object\r\n *\r\n * @default undefined\r\n */\r\n popoverWrapperStyle?: React.CSSProperties\r\n\r\n /**\r\n * Show popover arrow\r\n *\r\n * @default false\r\n */\r\n hasArrow?: boolean\r\n\r\n /**\r\n * Enable or disable backdrop click events\r\n *\r\n * @default true\r\n */\r\n hasBackdrop?: boolean\r\n\r\n /**\r\n * Set the popover to height to be limited by the viewport instead of having full height\r\n *\r\n * @default false\r\n */\r\n hasViewportHeightLimit?: boolean\r\n\r\n /**\r\n * Set the popover max-width to be limited by the trigger button\r\n */\r\n hasButtonWidthLimit?: boolean\r\n\r\n /**\r\n * Can be used together with `hasViewportHeightLimit` to limit the height of the popover\r\n *\r\n * @default undefined\r\n */\r\n popoverMaxHeight?: number\r\n}\r\n\r\nexport function Popover({\r\n state,\r\n children,\r\n focusOnShow = true,\r\n focusOnHide = true,\r\n finalFocusRef,\r\n 'aria-label': ariaLabel,\r\n hide,\r\n hideOnClickOutside = true,\r\n hasArrow = false,\r\n hasBackdrop = true,\r\n onOverlayClick,\r\n popoverWrapperStyle,\r\n popoverMaxHeight = Number.MAX_SAFE_INTEGER,\r\n theme = 'light',\r\n hasViewportHeightLimit = false,\r\n hasButtonWidthLimit = false,\r\n ...props\r\n}: PopoverProps) {\r\n const zIndex = useZIndex()\r\n const { isFullyClosed } = getExtendedDialogState(state)\r\n const { innerHeight } = useWindowSize({ isWatching: !isFullyClosed })\r\n\r\n const buttonElement = state.unstable_referenceRef.current\r\n const maxHeightStyle = usePopoverMaxHeight({\r\n maxHeightLimit: popoverMaxHeight,\r\n hasViewportHeightLimit,\r\n offsets: state.offsets,\r\n state,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!buttonElement || !state.visible || !(hasViewportHeightLimit || hasButtonWidthLimit)) return\r\n\r\n const buttonRect = buttonElement.getBoundingClientRect()\r\n const popoverId = buttonElement.getAttribute('aria-controls')\r\n const popoverWrapper = popoverId ? document.getElementById(popoverId) : null\r\n\r\n // Limit popover max-width to be width of the trigger button\r\n if (hasButtonWidthLimit) {\r\n popoverWrapper?.style.setProperty('max-width', `${buttonRect.width}px`)\r\n }\r\n }, [\r\n state.visible,\r\n state.offsets,\r\n buttonElement,\r\n hasViewportHeightLimit,\r\n hasButtonWidthLimit,\r\n innerHeight,\r\n state.placement,\r\n popoverMaxHeight,\r\n ])\r\n\r\n if (isFullyClosed) return null\r\n\r\n return (\r\n \r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...innerProps }) => (\r\n <>\r\n {\r\n // prevents from page scroll when clicked outside of popover\r\n event.preventDefault()\r\n }}\r\n />\r\n \r\n \r\n {hasArrow && (\r\n \r\n \r\n \r\n )}\r\n {children}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Popover'\r\n\r\nimport { COMPONENT_ANIMATION_DURATION } from '../constants'\r\n\r\nexport type PopoverStateReturn = ReturnType\r\n\r\nconst DEFAULT_OFFSET: [number, number] = [0, 5]\r\nconst HOVER_TIMEOUT = 150\r\n\r\nconst preventDefault = (ev: React.MouseEvent) => {\r\n ev.preventDefault()\r\n}\r\n\r\n/**\r\n * Hook which provides state to dialogs\r\n */\r\nexport function usePopoverState(settings?: Reakit.PopoverInitialState) {\r\n const offsets = (settings?.unstable_offset ?? DEFAULT_OFFSET) as [number, number]\r\n const popover = Reakit.usePopoverState({\r\n ...settings,\r\n placement: settings?.placement ?? 'bottom-start',\r\n unstable_offset: offsets,\r\n animated: COMPONENT_ANIMATION_DURATION,\r\n modal: false,\r\n })\r\n\r\n return { ...popover, offsets }\r\n}\r\n\r\nexport function useHoverPopover(settings?: Reakit.PopoverInitialState) {\r\n const popover = usePopoverState(settings)\r\n const showTimeout = React.useRef(null)\r\n const hideTimeout = React.useRef(null)\r\n\r\n const clearTimeouts = React.useRef(() => {\r\n if (showTimeout.current !== null) {\r\n window.clearTimeout(showTimeout.current)\r\n }\r\n if (hideTimeout.current !== null) {\r\n window.clearTimeout(hideTimeout.current)\r\n }\r\n })\r\n\r\n const showPopover = React.useRef(() => {\r\n clearTimeouts.current()\r\n showTimeout.current = window.setTimeout(() => {\r\n popover.show()\r\n }, HOVER_TIMEOUT)\r\n })\r\n\r\n const hidePopover = React.useRef(() => {\r\n clearTimeouts.current()\r\n hideTimeout.current = window.setTimeout(() => {\r\n popover.hide()\r\n }, HOVER_TIMEOUT)\r\n })\r\n\r\n // Unmount cleanup\r\n React.useEffect(() => () => clearTimeouts.current(), [])\r\n\r\n return {\r\n ...popover,\r\n show: showPopover.current,\r\n hide: hidePopover.current,\r\n onMouseOver: showPopover.current,\r\n onMouseOut: hidePopover.current,\r\n onMouseDown: preventDefault,\r\n }\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Popover'\r\n\r\nimport { useZIndex } from '../dialog'\r\n\r\ninterface PopoverButtonProps extends Reakit.PopoverDisclosureHTMLProps {\r\n state: Reakit.PopoverStateReturn\r\n}\r\n/**\r\n * The trigger button component which handles ref & focus return, etc.\r\n */\r\nexport const PopoverTrigger = React.forwardRef(\r\n ({ state, ...props }: PopoverButtonProps, ref: React.ForwardedRef) => {\r\n const zIndex = useZIndex()\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n }\r\n)\r\n","// Disable rule as the component is external\r\n\r\n/* eslint-disable react/jsx-pascal-case */\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Combobox'\r\n\r\nimport { Button, ButtonProps } from '../button'\r\nimport { PropsWithAs } from '../types'\r\n\r\nconst DEFAULT_ELEMENT = 'button'\r\n\r\nexport interface ComboBoxItemProps extends ButtonProps {\r\n /**\r\n * The returned object from `useComboBoxState`\r\n */\r\n state?: Reakit.unstable_ComboboxStateReturn\r\n\r\n /**\r\n * Value for the combo box item\r\n */\r\n value: string\r\n}\r\n\r\nexport function ComboBoxItem({\r\n as: asComponent,\r\n state,\r\n children,\r\n ...props\r\n}: PropsWithAs & ComboBoxItemProps) {\r\n return (\r\n \r\n {(itemProps) => {\r\n const selected = state?.currentId === itemProps.id\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n }}\r\n \r\n )\r\n}\r\n","// Disable rule as the component is external\r\n\r\n/* eslint-disable react/jsx-pascal-case */\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Combobox'\r\nimport { Portal } from 'reakit/Portal'\r\n\r\nimport { Box, BoxProps } from '../box'\r\nimport { getExtendedDialogState, useZIndex } from '../dialog'\r\nimport { Input, InputProps } from '../input'\r\nimport { ComboBoxItem } from './combo-box-item'\r\n\r\ninterface ComboBoxProps extends Omit {\r\n /**\r\n * The returned object from `useComboBoxState`\r\n */\r\n state: Reakit.unstable_ComboboxStateReturn\r\n\r\n /**\r\n * Additional props for the input\r\n */\r\n inputProps?: Partial & Omit, 'size'>\r\n\r\n /**\r\n * Additional props for the popover\r\n */\r\n popoverProps?: Partial\r\n\r\n /**\r\n * Callback when user presses enter\r\n */\r\n onChange: (value: string) => void\r\n\r\n /**\r\n * Id for testing purposes\r\n */\r\n inputTestId?: string\r\n}\r\n\r\nexport function ComboBox({\r\n state,\r\n children,\r\n inputProps,\r\n popoverProps,\r\n onChange,\r\n inputTestId,\r\n 'aria-label': ariaLabel,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const { isFullyClosed } = getExtendedDialogState(state)\r\n const zIndex = useZIndex()\r\n\r\n React.useEffect(() => {\r\n if (inputProps?.autoFocus) {\r\n state.unstable_referenceRef.current?.focus({ preventScroll: true })\r\n }\r\n // Only focus input on mount\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return (\r\n <>\r\n {\r\n if (ev.key === 'Enter') {\r\n onChange(state.inputValue)\r\n }\r\n inputProps?.onKeyDown?.(ev)\r\n }}\r\n data-testid={inputTestId}\r\n />\r\n {!isFullyClosed && (\r\n \r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...innerProps }) => (\r\n
\r\n \r\n {React.Children.map(children, (child) => {\r\n if (!React.isValidElement(child)) return child\r\n\r\n if (child.type === ComboBoxItem) {\r\n return React.cloneElement(\r\n child as React.ReactElement>,\r\n {\r\n state,\r\n onMouseUp: () => {\r\n onChange(child.props.value)\r\n },\r\n }\r\n )\r\n }\r\n\r\n return child\r\n })}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n )}\r\n \r\n )\r\n}\r\n","import { Instrument } from '../../types'\r\n\r\nexport const INSTRUMENT_CATEGORIES = [\r\n { name: 'All', instrument: undefined },\r\n { name: 'Stocks', instrument: Instrument.Stock },\r\n { name: 'Futures', instrument: Instrument.Futures },\r\n { name: 'Forex', instrument: Instrument.Forex },\r\n { name: 'Crypto', instrument: Instrument.Crypto },\r\n]\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, PropsWithChildren } from 'react'\r\n\r\nexport function Centered(props: PropsWithChildren>) {\r\n return
\r\n}\r\n","import { FallbackProps } from 'react-error-boundary'\r\n\r\nimport { link } from '../../services/routing'\r\nimport { Button } from '../button'\r\nimport { Centered } from '../centered'\r\nimport { Icon } from '../icon'\r\nimport { Heading, Paragraph } from '../typography'\r\n\r\nexport function SearchError(props: FallbackProps) {\r\n return (\r\n \r\n \r\n \r\n Error fetching the results\r\n \r\n \r\n There’s been an error fetching your results. Please try again or{' '}\r\n \r\n contact support\r\n \r\n .\r\n \r\n \r\n \r\n )\r\n}\r\n","import { useMemo } from 'react'\r\n\r\ninterface HighlightProps {\r\n /**\r\n * Search string that will be highlighted\r\n */\r\n highlight: string\r\n /**\r\n * Text to be highlighted\r\n */\r\n text: string\r\n}\r\n\r\nexport function Highlight({ highlight, text }: HighlightProps) {\r\n const index = text.toLowerCase().indexOf(highlight.toLowerCase())\r\n\r\n const processedText = useMemo(\r\n () => ({\r\n before: text.substring(0, index),\r\n highlight: text.substring(index, index + highlight.length),\r\n after: text.substring(index + highlight.length),\r\n }),\r\n [highlight.length, index, text]\r\n )\r\n\r\n if (index < 0 || highlight.length < 1) return {text}\r\n\r\n return (\r\n <>\r\n {processedText.before}\r\n {!!processedText.highlight.length && (\r\n \r\n {processedText.highlight}\r\n \r\n )}\r\n {processedText.after}\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { SearchApiResult } from '../../services/api'\r\nimport { ComboBoxItem, ComboBoxItemProps } from '../combo-box'\r\nimport { Highlight } from '../highlight'\r\nimport { PropsWithAs } from '../types'\r\n\r\ninterface SearchItemProps extends Pick {\r\n item: SearchApiResult\r\n chartIndex?: number\r\n itemProps: Partial>\r\n}\r\n\r\nexport function SearchItem(props: SearchItemProps) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.item.exchange}\r\n \r\n )\r\n}\r\n","import { getSanitizedTicker } from '../../../app/shared/ticker-sanitizer'\r\nimport { link } from '../../services/routing'\r\nimport { Instrument } from '../../types'\r\nimport { cleanTicker, getInstrumentForTicker } from '../../util'\r\n\r\nexport function getRedirectForTicker(tickerRaw: string) {\r\n const ticker = getSanitizedTicker(tickerRaw, true)\r\n const instrument = cleanTicker(ticker) ? getInstrumentForTicker(ticker) : null\r\n let redirectLink = ''\r\n\r\n switch (instrument) {\r\n case Instrument.Stock:\r\n redirectLink = link.toQuote(ticker)\r\n break\r\n case Instrument.Forex:\r\n redirectLink = link.toForexChartDetail(ticker)\r\n break\r\n case Instrument.Futures:\r\n redirectLink = link.toFuturesChartDetail(ticker)\r\n break\r\n case Instrument.Crypto:\r\n redirectLink = link.toCryptoChartDetail(ticker)\r\n break\r\n default:\r\n return link.toSearch(ticker)\r\n }\r\n\r\n return redirectLink + (FinvizSettings.quoteSearchExt ?? '')\r\n}\r\n","import { useQuery } from '@tanstack/react-query'\r\nimport React from 'react'\r\nimport * as Reakit from 'reakit/Combobox'\r\n\r\nimport { searchApiRequest } from '../../services/api'\r\nimport { link } from '../../services/routing'\r\nimport { Instrument } from '../../types'\r\nimport { Button } from '../button'\r\nimport { Centered } from '../centered'\r\nimport { COMPONENT_ANIMATION_DURATION } from '../constants'\r\nimport { Spinner } from '../spinner'\r\nimport { SearchItem } from './search-item'\r\nimport { getRedirectForTicker } from './util'\r\n\r\ninterface SearchListProps {\r\n state: Reakit.unstable_ComboboxStateReturn\r\n instrument?: Instrument\r\n chartIndex?: number\r\n isShowAllVisible: boolean\r\n isSearchItemLink: boolean\r\n onTickerSelected?: (ticker: string) => void\r\n}\r\n\r\nexport function SearchList(props: SearchListProps) {\r\n const { data, isLoading } = useQuery(\r\n ['search', props.state.inputValue, props.instrument],\r\n () => searchApiRequest(props.state.inputValue, props.instrument),\r\n { enabled: props.state.inputValue.length > 0, keepPreviousData: true, cacheTime: Infinity, staleTime: Infinity }\r\n )\r\n const { setAnimated, hide, animated } = props.state\r\n\r\n React.useEffect(() => {\r\n if (!isLoading && !data?.length && !props.isShowAllVisible) {\r\n setAnimated(1)\r\n hide()\r\n } else if (animated !== COMPONENT_ANIMATION_DURATION) {\r\n setAnimated(COMPONENT_ANIMATION_DURATION)\r\n }\r\n }, [isLoading, data, setAnimated, hide, props.isShowAllVisible, animated])\r\n\r\n if (isLoading) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n
\r\n {data && data.length !== 0 && (\r\n
\r\n {data.map((item) => (\r\n ) => {\r\n ev.preventDefault()\r\n props.onTickerSelected?.(item.ticker)\r\n props.state?.setInputValue('')\r\n },\r\n }\r\n }\r\n />\r\n ))}\r\n
\r\n )}\r\n {props.isShowAllVisible && (\r\n \r\n Show All Results\r\n \r\n )}\r\n
\r\n )\r\n}\r\n","import { Placement } from '@popperjs/core'\r\nimport { useQueryErrorResetBoundary } from '@tanstack/react-query'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\n\r\nimport { getSanitizedTicker } from '../../../app/shared/ticker-sanitizer'\r\nimport { ComboBox, useComboBoxState } from '../combo-box'\r\nimport { getExtendedDialogState } from '../dialog'\r\nimport { IconNameType } from '../icon'\r\nimport { InputSize, InputTheme } from '../input'\r\nimport { List, ListItem, useListState } from '../list'\r\nimport { INSTRUMENT_CATEGORIES } from './constants'\r\nimport { SearchError } from './search-error'\r\nimport { SearchList } from './search-list'\r\nimport { getRedirectForTicker } from './util'\r\n\r\ninterface SearchProps {\r\n autoFocus?: boolean\r\n defaultValue?: string\r\n defaultPlacement?: Placement\r\n placeholder?: string\r\n theme?: keyof typeof InputTheme\r\n size?: keyof typeof InputSize\r\n allowCategorySwitching?: boolean\r\n inputClass?: string\r\n popoverClass?: string\r\n chartIndex?: number\r\n isMatchInputAndBoxWidth?: boolean\r\n isSearchIcon?: boolean\r\n isShowAllVisible?: boolean\r\n isSearchItemLink?: boolean\r\n rightContent?: JSX.Element | IconNameType\r\n onTickerSelected?: (ticker: string) => void\r\n}\r\n\r\nexport function Search({\r\n isSearchIcon = true,\r\n isShowAllVisible = true,\r\n isSearchItemLink = true,\r\n ...props\r\n}: SearchProps) {\r\n const { reset } = useQueryErrorResetBoundary()\r\n const state = useComboBoxState({\r\n minValueLength: 1,\r\n inputValue: props.defaultValue,\r\n placement: props.defaultPlacement ?? 'bottom-start',\r\n })\r\n const { isFullyClosed } = getExtendedDialogState(state)\r\n const listState = useListState({ orientation: 'vertical' })\r\n const [category, setCategory] = React.useState(0)\r\n\r\n const changeCategory = React.useRef((ev: React.KeyboardEvent) => {\r\n switch (ev.key) {\r\n case 'ArrowRight':\r\n state.first()\r\n break\r\n case 'ArrowUp':\r\n setCategory((state) => (state - 1 + INSTRUMENT_CATEGORIES.length) % INSTRUMENT_CATEGORIES.length)\r\n break\r\n case 'ArrowDown':\r\n setCategory((state) => (state + 1) % INSTRUMENT_CATEGORIES.length)\r\n break\r\n }\r\n })\r\n\r\n /**\r\n * The search box can be child of a modal/dialog so we need to handle ESC\r\n * otherwise it would close both the combobox and the parent.\r\n */\r\n const onInputKeyDown = React.useCallback(\r\n (ev: React.KeyboardEvent) => {\r\n if (ev.key === 'Escape' && state.visible) {\r\n ev.stopPropagation()\r\n state.hide()\r\n }\r\n },\r\n // We only use `visible` and `hide` and don’t need the full state\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.visible, state.hide]\r\n )\r\n\r\n /**\r\n * Reset to category \"All\" when the combobox closes\r\n */\r\n React.useEffect(() => {\r\n if (isFullyClosed) {\r\n setCategory(0)\r\n }\r\n }, [isFullyClosed])\r\n\r\n return (\r\n {\r\n // prevent combobox from setting input value on input blur\r\n e.preventDefault()\r\n },\r\n inputClass: props.inputClass,\r\n rightContent: props.rightContent,\r\n ...(isSearchIcon && { leftContent: 'search' }),\r\n }}\r\n popoverProps={{\r\n className: classnames(props.popoverClass, 'sm:px-0 z-dialog', {\r\n 'w-full sm:w-110 px-2': !props.isMatchInputAndBoxWidth,\r\n 'min-w-[340px]': props.isMatchInputAndBoxWidth,\r\n }),\r\n style: {\r\n width: props.isMatchInputAndBoxWidth\r\n ? state.unstable_referenceRef.current?.getBoundingClientRect().width ?? 340\r\n : undefined,\r\n maxWidth: '100vw',\r\n },\r\n }}\r\n onChange={(value) => {\r\n if (isSearchItemLink) {\r\n window.location.href = getRedirectForTicker(value)\r\n } else {\r\n props.onTickerSelected?.(getSanitizedTicker(value))\r\n state.setInputValue('')\r\n }\r\n }}\r\n {...(props.chartIndex !== undefined && { inputTestId: `chart-${props.chartIndex}-settings-search-input` })}\r\n >\r\n
\r\n {props.allowCategorySwitching && (\r\n setCategory(index)}\r\n onKeyDown={changeCategory.current}\r\n >\r\n {INSTRUMENT_CATEGORIES.map((category) => (\r\n {category.name}\r\n ))}\r\n \r\n )}\r\n {!isFullyClosed && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import * as Reakit from 'reakit/Combobox'\r\n\r\nimport { COMPONENT_ANIMATION_DURATION } from '../constants'\r\n\r\nexport function useComboBoxState(options?: Reakit.unstable_ComboboxInitialState) {\r\n return Reakit.unstable_useComboboxState({\r\n ...options,\r\n animated: COMPONENT_ANIMATION_DURATION,\r\n modal: false,\r\n inline: true,\r\n unstable_offset: [0, 5],\r\n })\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { PopoverStateReturn } from '../popover'\r\nimport { SelectItem } from './types'\r\n\r\nfunction getSelectedItemIndex(items: SelectItem[], value: unknown) {\r\n if (!value && value !== 0) return -1\r\n\r\n return items.findIndex((item) => item.value === value)\r\n}\r\n\r\n/**\r\n * Hook which handles select state and returns onChange handler\r\n */\r\nexport function useSelect>(\r\n state: PopoverStateReturn,\r\n defaultValue: ValueType | undefined,\r\n items: ItemType[],\r\n onChange: (item: ItemType) => void\r\n) {\r\n const [selectedIndex, setSelectedIndex] = React.useState(getSelectedItemIndex(items, defaultValue))\r\n const closePopover = React.useRef(() => state.hide())\r\n\r\n // Update select value on change from outside\r\n React.useEffect(() => {\r\n const newIndex = getSelectedItemIndex(items, defaultValue)\r\n setSelectedIndex(newIndex)\r\n }, [items, selectedIndex, defaultValue])\r\n\r\n const onItemChange = React.useCallback(\r\n (index: number, closeOnSelect = true) => {\r\n const selectedItem = items[index]\r\n setSelectedIndex(index)\r\n\r\n if (closeOnSelect) closePopover.current()\r\n onChange(selectedItem)\r\n\r\n if (!selectedItem.href || !selectedItem.reloadDocument) {\r\n return\r\n }\r\n\r\n if (typeof selectedItem.href === 'string') {\r\n window.location.href = selectedItem.href\r\n return\r\n }\r\n\r\n const newUrl = new URL(selectedItem.href.pathname!, window.location.href)\r\n newUrl.search = selectedItem.href.search ?? ''\r\n newUrl.hash = selectedItem.href.hash ?? ''\r\n\r\n window.location.href = newUrl.toString()\r\n },\r\n [items, onChange, setSelectedIndex]\r\n )\r\n\r\n return { selectedIndex, onItemChange }\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonHTMLProps, ButtonProps, ButtonTheme, ButtonThemeType } from '../button'\r\nimport { Delayed } from '../delayed'\r\nimport { Icon } from '../icon'\r\nimport { PopoverStateReturn, PopoverTrigger } from '../popover'\r\nimport { Spinner } from '../spinner'\r\n\r\nfunction getButtonProps(theme: ButtonTheme, active: boolean): Omit {\r\n switch (theme) {\r\n case ButtonTheme.light:\r\n return {\r\n theme: 'transparent',\r\n contentClass: 'font-normal truncate',\r\n className: classnames(\r\n 'border bg-white disabled:border-gray-100 disabled:bg-gray-50 disabled:text-gray-500 dark:bg-gray-800',\r\n {\r\n 'border-gray-100 hover:border-gray-300 disabled:hover:border-gray-100 dark:border-gray-600 dark:hover:border-gray-400 dark:disabled:border-gray-700':\r\n !active,\r\n 'border-blue-400 dark:border-blue-400': active,\r\n }\r\n ),\r\n rightContent: ,\r\n }\r\n case ButtonTheme.dark:\r\n return {\r\n theme: 'transparent',\r\n contentClass: 'font-normal truncate',\r\n className: classnames('border bg-gray-800 text-gray-50 disabled:border-gray-700 disabled:text-gray-500', {\r\n 'border-gray-600 hover:border-gray-400': !active,\r\n 'border-blue-400': active,\r\n }),\r\n rightContent: ,\r\n }\r\n default:\r\n return {}\r\n }\r\n}\r\n\r\nexport interface SelectButtonProps extends ButtonProps, ButtonHTMLProps {\r\n /**\r\n * Theme for the button\r\n *\r\n * @default light\r\n */\r\n theme?: ButtonThemeType\r\n\r\n isLoading?: boolean\r\n\r\n state?: PopoverStateReturn\r\n\r\n isPopoverTrigger?: boolean\r\n}\r\n\r\nexport function SelectButton({\r\n state,\r\n theme = 'light',\r\n isPopoverTrigger = true,\r\n isLoading,\r\n ...props\r\n}: SelectButtonProps) {\r\n const themeProps = React.useMemo(() => getButtonProps(ButtonTheme[theme], !!props.active), [theme, props.active])\r\n\r\n return (\r\n \r\n \r\n \r\n ) : (\r\n props.rightContent ?? themeProps.rightContent\r\n )\r\n }\r\n >\r\n {props.children}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport { useInRouterContext } from 'react-router-dom'\r\nimport * as Reakit from 'reakit/Popover'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { getExtendedDialogState } from '../dialog'\r\nimport { ListItem } from '../list'\r\nimport { PopoverStateReturn, usePopoverState } from '../popover'\r\nimport { Label } from '../typography'\r\nimport { useSelect } from './hooks'\r\nimport { NativeSelect, NativeSelectInRouterContext } from './native-select'\r\nimport { SelectButton, SelectButtonProps } from './select-button'\r\nimport { SelectList, SelectListProps } from './select-list'\r\nimport { SelectItem } from './types'\r\n\r\n/**\r\n * All non-select props get passed to the button element, these are the supported props\r\n */\r\ntype ButtonPassthroughProps = Omit\r\n\r\nexport interface SelectProps extends ButtonPassthroughProps {\r\n /**\r\n * Optional popover state settings\r\n */\r\n popoverStateSettings?: Reakit.PopoverInitialState\r\n\r\n /**\r\n * Name of the select, will be included in `onChange` event\r\n */\r\n name?: Name\r\n\r\n /**\r\n * Current selected value\r\n */\r\n value?: ValueType\r\n\r\n /**\r\n * List of items to display in the select\r\n */\r\n items: ItemType[]\r\n\r\n /**\r\n * Callback when selected item changes\r\n */\r\n onChange?: (item: ItemType, name: Name) => void\r\n\r\n /**\r\n * Label to display above the select\r\n */\r\n label?: React.ReactNode\r\n\r\n /**\r\n * Text for the button (usually the selected value). Falls back to placeholder if not set\r\n */\r\n buttonContent?: React.ReactNode\r\n\r\n /**\r\n * Placeholder when no value is selected\r\n */\r\n placeholder?: string\r\n\r\n /**\r\n * Additional props to the popover list\r\n */\r\n listProps?: Omit\r\n\r\n /**\r\n * Optional label className override\r\n */\r\n labelClassName?: string\r\n\r\n /**\r\n * Optional label layout switch\r\n */\r\n isHorizontalLabel?: boolean\r\n\r\n /**\r\n * Optional label title className override\r\n */\r\n labelTitleClassName?: string\r\n\r\n /**\r\n * Should use native select element on mobile devices\r\n *\r\n * @default true\r\n */\r\n isNativeMobileSelect?: boolean\r\n\r\n /**\r\n * Should use native select element\r\n *\r\n * @default false\r\n */\r\n isAlwaysNativeSelect?: boolean\r\n\r\n /**\r\n * Set the popover to height to be limited by the viewport instead of having full height\r\n *\r\n * @default false\r\n */\r\n hasPopoverViewportHeightLimit?: boolean\r\n\r\n /**\r\n * Set the popover max-width to be limited by the trigger button\r\n */\r\n hasPopoverButtonWidthLimit?: boolean\r\n\r\n /**\r\n * Triggered when popover state visibility/animating changes\r\n */\r\n onIsInteractingChange?: (isInteracting: boolean) => void\r\n}\r\n\r\nexport function Select, Name = never>({\r\n children,\r\n popoverStateSettings,\r\n onIsInteractingChange,\r\n ...props\r\n}: SelectProps) {\r\n const popoverState = usePopoverState(popoverStateSettings)\r\n const { isFullyClosed } = getExtendedDialogState(popoverState)\r\n\r\n React.useEffect(() => {\r\n onIsInteractingChange?.(!isFullyClosed)\r\n }, [onIsInteractingChange, isFullyClosed])\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport interface StatelessSelectProps extends SelectProps {\r\n /**\r\n * Popover state for handling list in popover\r\n */\r\n popoverState: PopoverStateReturn\r\n}\r\n\r\nexport function StatelessSelect, Name = never>({\r\n // Select\r\n name,\r\n label,\r\n isHorizontalLabel,\r\n value,\r\n items = [],\r\n onChange,\r\n labelClassName,\r\n labelTitleClassName,\r\n 'aria-label': ariaLabel,\r\n // Button\r\n theme,\r\n buttonContent,\r\n placeholder = 'Select value',\r\n // Popover\r\n popoverState,\r\n listProps,\r\n isNativeMobileSelect = true,\r\n isAlwaysNativeSelect = false,\r\n hasPopoverViewportHeightLimit = false,\r\n hasPopoverButtonWidthLimit = true,\r\n children,\r\n ...props\r\n}: StatelessSelectProps) {\r\n const { selectedIndex, onItemChange } = useSelect(popoverState, value, items, (item) => onChange?.(item, name!))\r\n const showMobileSelect = isNativeMobileSelect && isMobile()\r\n const isNativeSelect = isAlwaysNativeSelect || showMobileSelect\r\n\r\n /** Items can have `href` and be router Links. We need a way to account for this in native select */\r\n const isInRouterContext = useInRouterContext()\r\n const NativeSelectComponent = isInRouterContext ? NativeSelectInRouterContext : NativeSelect\r\n\r\n return (\r\n \r\n \r\n {buttonContent ?? items[selectedIndex!]?.label ?? placeholder}\r\n \r\n {isNativeSelect ? (\r\n
\r\n }\r\n buttonContent={getSelectedTimeframeLabel()}\r\n data-testid={`chart-${chartIndex}-timeframes-select`}\r\n hasPopoverViewportHeightLimit\r\n isNativeMobileSelect={false}\r\n hasPopoverButtonWidthLimit={false}\r\n listProps={selectWithTooltipListProps}\r\n >\r\n {timeFrameGroups.flatMap(({ timeframes }, groupIndex) => [\r\n ,\r\n ...timeframes.map((item) => {\r\n const isIconButtonActive = favoriteTimeframes.includes(item.value)\r\n let linkProps = {}\r\n if (item.href) {\r\n linkProps = {\r\n as: Link,\r\n to: item.href,\r\n reloadDocument: !!item.withReload,\r\n }\r\n }\r\n return (\r\n ) => {\r\n ev.stopPropagation()\r\n ev.preventDefault()\r\n onFavoriteTimeframeToggle(item)\r\n }}\r\n className={classNames('group -mr-2', {\r\n 'text-gray-300': !isIconButtonActive,\r\n 'text-yellow-200': isIconButtonActive,\r\n })}\r\n >\r\n \r\n \r\n \r\n ) : undefined\r\n }\r\n >\r\n {item.label}\r\n \r\n )\r\n }),\r\n ])}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nimport { useElementMeasure } from '../../hooks/use-element-measure'\r\nimport { BoxRounding } from '../box'\r\nimport { Button, ButtonPadding, ButtonProps, ButtonSize, ButtonSizeType } from '../button'\r\nimport { DateRangeBaseOption, DateRangeSelect } from './daterange-select'\r\nimport { LabelWithDelayedSpinner } from './label-with-delayed-spinner'\r\nimport { TimeframeBaseOption, TimeframeSelect } from './timeframe-select'\r\n\r\ninterface Props {\r\n isPremium?: boolean\r\n chartIndex?: number\r\n compactViewMaxBreakpointPx?: number\r\n timeFrameGroups: Array<{ label: string; timeframes: TimeFrame[] }>\r\n dateRangeGroups: Array<{ label?: string; dateRanges: DateRange[] }>\r\n selectedTimeframe: string\r\n selectedDateRange: string | null\r\n onTimeframeSelect: (value: TimeFrame) => void\r\n onDateRangeSelect: (value: DateRange) => void\r\n favoriteTimeframes: string[]\r\n onFavoriteTimeframeToggle: (value: TimeFrame) => void\r\n size?: ButtonSizeType\r\n loadingTimeframe?: string\r\n rounding?: keyof typeof BoxRounding\r\n isDateRangeAvailable?: boolean\r\n containerElement?: HTMLElement\r\n className?: string\r\n isFavoritesEnabled?: boolean\r\n isScrollIntoViewEnabled?: boolean\r\n isTimeframeSelectEnabled?: boolean\r\n isCompactOnly?: boolean\r\n theme?: ButtonProps['theme']\r\n}\r\n\r\nfunction getTimeframeChipElementId({ timeframe, chartIndex }: { timeframe: string; chartIndex: number }) {\r\n return `${chartIndex}-${timeframe}`\r\n}\r\n\r\nfunction getButtonPadding(size: ButtonSize): keyof typeof ButtonPadding {\r\n switch (size) {\r\n case ButtonSize.small:\r\n case ButtonSize.regular:\r\n return 'small'\r\n case ButtonSize.medium:\r\n return 'regular'\r\n case ButtonSize.large:\r\n return 'medium'\r\n case ButtonSize.none:\r\n return 'none'\r\n }\r\n}\r\n\r\nexport function TimeframeBar({\r\n isPremium = FinvizSettings.hasUserPremium,\r\n chartIndex = 0,\r\n compactViewMaxBreakpointPx = 400,\r\n timeFrameGroups,\r\n dateRangeGroups,\r\n selectedTimeframe,\r\n selectedDateRange,\r\n favoriteTimeframes,\r\n loadingTimeframe,\r\n onTimeframeSelect,\r\n onDateRangeSelect,\r\n onFavoriteTimeframeToggle,\r\n size,\r\n rounding = 'regular',\r\n isDateRangeAvailable = true,\r\n containerElement,\r\n className,\r\n isFavoritesEnabled = true,\r\n isScrollIntoViewEnabled = true,\r\n isTimeframeSelectEnabled,\r\n isCompactOnly = false,\r\n theme,\r\n}: Props) {\r\n const [scrollWrapperElement, setScrollWrapperElement] = React.useState(null)\r\n const [timeframeButtonsScrollLocation, setTimeframeButtonsScrollLocation] = React.useState({\r\n isOnLeftEdge: true,\r\n isOnRightEdge: true,\r\n })\r\n const { setElementRef, elementWidth } = useElementMeasure(containerElement)\r\n const flatTimeframes = React.useMemo(() => timeFrameGroups.flatMap(({ timeframes }) => timeframes), [timeFrameGroups])\r\n\r\n const timeframesInExpandedPanel = React.useMemo(\r\n () =>\r\n isFavoritesEnabled\r\n ? flatTimeframes.filter(({ value }) => value === selectedTimeframe || favoriteTimeframes.includes(value))\r\n : flatTimeframes,\r\n [flatTimeframes, selectedTimeframe, favoriteTimeframes, isFavoritesEnabled]\r\n )\r\n\r\n const isCompactView =\r\n isCompactOnly || elementWidth < compactViewMaxBreakpointPx || timeframesInExpandedPanel.length <= 1\r\n const checkTimeframeWrapperScrollPosition = React.useCallback(() => {\r\n if (scrollWrapperElement) {\r\n const isOnLeftEdge = scrollWrapperElement.scrollLeft === 0\r\n const isOnRightEdge =\r\n Math.ceil(scrollWrapperElement.offsetWidth + scrollWrapperElement.scrollLeft) >=\r\n scrollWrapperElement.scrollWidth\r\n\r\n if (\r\n timeframeButtonsScrollLocation.isOnLeftEdge !== isOnLeftEdge ||\r\n timeframeButtonsScrollLocation.isOnRightEdge !== isOnRightEdge\r\n ) {\r\n setTimeframeButtonsScrollLocation({ isOnLeftEdge, isOnRightEdge })\r\n }\r\n }\r\n }, [timeframeButtonsScrollLocation, scrollWrapperElement])\r\n\r\n React.useEffect(() => {\r\n checkTimeframeWrapperScrollPosition()\r\n }, [checkTimeframeWrapperScrollPosition, scrollWrapperElement, elementWidth])\r\n\r\n React.useEffect(() => {\r\n if (!isCompactView && isScrollIntoViewEnabled) {\r\n const timeframeElement = document.getElementById(\r\n getTimeframeChipElementId({ chartIndex, timeframe: selectedTimeframe })\r\n )\r\n\r\n if (timeframeElement && scrollWrapperElement) {\r\n const leftOffset =\r\n timeframeElement.offsetLeft + timeframeElement.clientWidth / 2 - scrollWrapperElement.clientWidth / 2\r\n\r\n scrollWrapperElement.scrollTo(Math.max(0, Math.min(leftOffset, scrollWrapperElement.scrollWidth)), 0)\r\n }\r\n }\r\n }, [isCompactView, chartIndex, selectedTimeframe, elementWidth, isScrollIntoViewEnabled, scrollWrapperElement])\r\n\r\n return (\r\n \r\n {(isTimeframeSelectEnabled ?? isFavoritesEnabled) && (\r\n
\r\n \r\n
\r\n )}\r\n {!isCompactView && (\r\n
\r\n \r\n {\r\n /*\r\n * Vertical scrolling doesn't scroll horizontally by default (it's possible when holding shift)\r\n * When using touchpad we may get values in both delatX and deltaY, so if someone's scrolling horizontally we don't want to do anything\r\n * but if they are scrolling vertically (deltaY > deltaX) we want to scroll horizontally the value they would nativally scroll in vertical direction\r\n * */\r\n const absDx = Math.abs(event.deltaX)\r\n const absDy = Math.abs(event.deltaY)\r\n if (absDy > absDx) {\r\n event.currentTarget.scrollLeft += event.deltaY\r\n }\r\n }}\r\n >\r\n {timeframesInExpandedPanel.map((timeframe) => {\r\n let linkProps = {}\r\n if (timeframe.href) {\r\n linkProps = {\r\n as: Link,\r\n to: timeframe.href,\r\n reloadDocument: timeframe.withReload ?? !isPremium,\r\n onClick: () => onTimeframeSelect(timeframe),\r\n }\r\n } else {\r\n linkProps = {\r\n onClick: (ev: React.MouseEvent) => {\r\n ev.preventDefault()\r\n onTimeframeSelect(timeframe)\r\n },\r\n }\r\n }\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n
\r\n \r\n \r\n )}\r\n {isDateRangeAvailable && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n )\r\n}\r\n","import { type To } from 'react-router-dom'\r\n\r\nimport { decodeQueryString, encodeQueryString } from '../../../app/queryString'\r\nimport { SpecificChartFunctionality } from '../../../app/shared/chartLayoutConfig'\r\nimport { TIMEFRAME } from '../../constants'\r\nimport { DateRangeType, Instrument } from '../../types'\r\nimport { CUSTOM_DATE_RANGE, CustomDateRangePrefixEnum, DATE_RANGE_PREFIX_DELMITER } from './custom-date-range-utils'\r\n\r\ninterface ITimeFrame {\r\n value: TIMEFRAME | 'intraday'\r\n label: string\r\n labelShort: string\r\n labelPageTitle?: string\r\n}\r\n\r\nexport interface ITimeframeGroup {\r\n label: string\r\n timeframes: ITimeFrame[]\r\n}\r\n\r\ninterface IDateRange {\r\n value: string\r\n label: string\r\n timeframe?: TIMEFRAME\r\n}\r\n\r\nexport interface IRangeGroup {\r\n label?: string\r\n dateRanges: IDateRange[]\r\n}\r\n\r\nexport const generateTimeframeGroups = (isPremium = true): ITimeframeGroup[] => {\r\n const premiumTimeframes: ITimeframeGroup[] = [\r\n {\r\n label: '',\r\n timeframes: [\r\n { value: TIMEFRAME.i1, label: '1 Minute', labelShort: '1M' },\r\n { value: TIMEFRAME.i2, label: '2 Minutes', labelShort: '2M' },\r\n { value: TIMEFRAME.i3, label: '3 Minutes', labelShort: '3M' },\r\n { value: TIMEFRAME.i5, label: '5 Minutes', labelShort: '5M' },\r\n { value: TIMEFRAME.i10, label: '10 Minutes', labelShort: '10M' },\r\n { value: TIMEFRAME.i15, label: '15 Minutes', labelShort: '15M' },\r\n { value: TIMEFRAME.i30, label: '30 Minutes', labelShort: '30M' },\r\n ],\r\n },\r\n {\r\n label: '',\r\n timeframes: [\r\n { value: TIMEFRAME.h, label: '1 Hour', labelShort: '1H', labelPageTitle: 'Hourly' },\r\n { value: TIMEFRAME.h2, label: '2 Hours', labelShort: '2H' },\r\n { value: TIMEFRAME.h4, label: '4 Hours', labelShort: '4H' },\r\n ],\r\n },\r\n {\r\n label: '',\r\n timeframes: [\r\n { value: TIMEFRAME.d, label: '1 Day', labelShort: 'D', labelPageTitle: 'Daily' },\r\n { value: TIMEFRAME.w, label: '1 Week', labelShort: 'W', labelPageTitle: 'Weekly' },\r\n { value: TIMEFRAME.m, label: '1 Month', labelShort: 'M', labelPageTitle: 'Monthly' },\r\n ],\r\n },\r\n ]\r\n\r\n const freeTimeframes = [\r\n {\r\n // intradayTimeframe is only for non premium users used as redirect to elite subscription\r\n label: '',\r\n timeframes: [{ value: 'intraday' as const, label: 'Intraday', labelShort: 'Intraday' }],\r\n },\r\n {\r\n label: '',\r\n timeframes: [\r\n { value: TIMEFRAME.d, label: '1 Day', labelShort: 'Daily' },\r\n { value: TIMEFRAME.w, label: '1 Week', labelShort: 'Weekly' },\r\n { value: TIMEFRAME.m, label: '1 Month', labelShort: 'Monthly' },\r\n ],\r\n },\r\n ]\r\n\r\n return isPremium ? premiumTimeframes : freeTimeframes\r\n}\r\n\r\nexport function getTimeframeGroups(isPremium: boolean) {\r\n return generateTimeframeGroups(isPremium)\r\n}\r\n\r\nexport const generateDateRangeGroups = ({\r\n isPremium,\r\n instrument,\r\n}: {\r\n isPremium: boolean\r\n instrument: Instrument\r\n}): IRangeGroup[] => {\r\n const isStock = instrument === Instrument.Stock\r\n const rangeGroups: Array<{ label?: string; dateRanges: IDateRange[] }> = [\r\n {\r\n label: 'Days',\r\n dateRanges: [\r\n { value: DateRangeType.d1, label: '1 Day', timeframe: isStock ? TIMEFRAME.i1 : TIMEFRAME.i5 },\r\n { value: DateRangeType.d5, label: '5 Days', timeframe: isStock ? TIMEFRAME.i5 : TIMEFRAME.i30 },\r\n ],\r\n },\r\n {\r\n label: 'Months',\r\n dateRanges: [\r\n { value: DateRangeType.m1, label: '1 Month', timeframe: TIMEFRAME.d },\r\n { value: DateRangeType.m3, label: '3 Months', timeframe: TIMEFRAME.d },\r\n { value: DateRangeType.m6, label: '6 Months', timeframe: TIMEFRAME.d },\r\n ],\r\n },\r\n {\r\n label: 'Years',\r\n dateRanges: [\r\n { value: DateRangeType.ytd, label: 'Year to Date', timeframe: TIMEFRAME.d },\r\n { value: DateRangeType.y1, label: '1 Year', timeframe: TIMEFRAME.d },\r\n { value: DateRangeType.y2, label: '2 Years', timeframe: TIMEFRAME.w },\r\n { value: DateRangeType.y5, label: '5 Years', timeframe: isPremium ? TIMEFRAME.w : TIMEFRAME.m },\r\n { value: DateRangeType.max, label: 'Max', timeframe: TIMEFRAME.m },\r\n ],\r\n },\r\n ]\r\n\r\n return rangeGroups\r\n}\r\n\r\nexport function getDateRangeGroups({\r\n isPremium,\r\n customRange,\r\n isCustomAvailable = true,\r\n instrument,\r\n}: {\r\n isPremium: boolean\r\n customRange?: string\r\n isCustomAvailable?: boolean\r\n instrument: Instrument\r\n}) {\r\n const rangeGroups = generateDateRangeGroups({ isPremium, instrument })\r\n\r\n if (isPremium && isCustomAvailable !== false) {\r\n const [dateRangePrefix] = customRange?.split(DATE_RANGE_PREFIX_DELMITER) ?? []\r\n rangeGroups.push({\r\n dateRanges: [\r\n {\r\n value:\r\n customRange && Object.values(CustomDateRangePrefixEnum).includes(dateRangePrefix)\r\n ? customRange\r\n : CUSTOM_DATE_RANGE,\r\n label: 'Custom',\r\n },\r\n ],\r\n })\r\n }\r\n\r\n return rangeGroups\r\n}\r\n\r\nexport function getDateRangeGroupsWithHref({\r\n isPremium,\r\n customRange,\r\n generatePath,\r\n withReload,\r\n isCustomAvailable,\r\n instrument,\r\n}: {\r\n isPremium: boolean\r\n isCustomAvailable?: boolean\r\n customRange?: string\r\n withReload?: boolean\r\n instrument: Instrument\r\n generatePath: (dateRange: IDateRange) => To\r\n}) {\r\n return getDateRangeGroups({\r\n isPremium,\r\n isCustomAvailable,\r\n customRange,\r\n instrument,\r\n }).map((dateRangeGroup: IRangeGroup) => ({\r\n label: dateRangeGroup.label,\r\n dateRanges: dateRangeGroup.dateRanges.map((dateRange) => ({\r\n ...dateRange,\r\n href:\r\n !isPremium || Object.values(DateRangeType).includes(dateRange.value as DateRangeType)\r\n ? generatePath(dateRange)\r\n : undefined,\r\n withReload: withReload ?? !isPremium,\r\n })),\r\n }))\r\n}\r\n\r\nconst FREE_PERIODS_STOCK = ['d', 'w', 'm']\r\n\r\nexport function generatePathForTimeframeDateRange({\r\n isPremium,\r\n pathname,\r\n timeframe,\r\n dateRange,\r\n utmCampaign,\r\n freeTimeframes = FREE_PERIODS_STOCK,\r\n dateRangeQueryKey = 'r',\r\n}: {\r\n isPremium: boolean\r\n pathname: string\r\n timeframe: TIMEFRAME | 'intraday'\r\n dateRange?: string | null\r\n utmCampaign?: string\r\n freeTimeframes?: string[]\r\n dateRangeQueryKey?: string\r\n}) {\r\n if (isPremium || freeTimeframes.includes(timeframe)) {\r\n return {\r\n pathname,\r\n search: `?${encodeQueryString({\r\n ...decodeQueryString(),\r\n i: undefined,\r\n p: timeframe,\r\n [dateRangeQueryKey]: dateRange ?? undefined,\r\n })}`,\r\n }\r\n }\r\n\r\n return {\r\n pathname: '/elite.ashx',\r\n search: `?${encodeQueryString({\r\n utm_source: 'finviz',\r\n utm_medium: 'banner',\r\n utm_campaign: utmCampaign || window.location.pathname,\r\n })}`,\r\n }\r\n}\r\n\r\nexport const timeframeUtm: Partial> = {\r\n [SpecificChartFunctionality.quotePage]: 'quote-timeframe',\r\n [SpecificChartFunctionality.futuresPage]: 'futures-timeframe',\r\n [SpecificChartFunctionality.forexPage]: 'forex-timeframe',\r\n [SpecificChartFunctionality.cryptoPage]: 'crypto-timeframe',\r\n}\r\n\r\nexport const daterangeUtm: Partial> = {\r\n [SpecificChartFunctionality.futuresPage]: 'futures-timeframe-daterange',\r\n [SpecificChartFunctionality.forexPage]: 'forex-timeframe-daterange',\r\n [SpecificChartFunctionality.cryptoPage]: 'crypto-timeframe-daterange',\r\n}\r\n","import * as dateFns from 'date-fns'\r\n\r\nimport { formatDateToStringUS } from '../../../app/shared/utils'\r\nimport { TIMEFRAME } from '../../constants'\r\nimport { Instrument } from '../../types'\r\nimport { generateDateRangeGroups } from './utils'\r\n\r\n// **************START**************\r\n// Functions from here until END have to be in sync with\r\n// charts: app/utils/chart-date-range-utils.ts\r\n// *********************************\r\n\r\nexport enum CustomDateRangePrefixEnum {\r\n Range = 'range',\r\n Prev = 'prev',\r\n}\r\n\r\nexport const CUSTOM_DATE_RANGE = 'custom'\r\nexport const DATE_RANGE_PREFIX_DELMITER = '_'\r\nconst CUSTOM_DATE_RANGE_DELIMITER = 'x'\r\nconst CUSTOM_PREV_RANGE_DELIMITER = '-'\r\n\r\nexport function getParsedDateRange(dateRange?: string) {\r\n return dateRange?.split(DATE_RANGE_PREFIX_DELMITER) ?? []\r\n}\r\n\r\nexport function parseCustomDateRangeUrlParam({ dateRange, anchorDate }: { dateRange: string; anchorDate: Date }) {\r\n const [dateRangePrefix, dateRangeValue] = getParsedDateRange(dateRange)\r\n\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Range) {\r\n const [dateFromString, dateToString] = dateRangeValue.replace(/-/g, '/').split(CUSTOM_DATE_RANGE_DELIMITER)\r\n const dateFrom = dateFromString ? new Date(dateFromString) : null\r\n const dateTo = dateToString ? new Date(dateToString) : null\r\n return {\r\n start: dateFrom && !Number.isNaN(dateFrom.getTime()) ? dateFrom : null,\r\n end: dateTo && !Number.isNaN(dateTo.getTime()) ? dateFns.endOfDay(dateTo) : null,\r\n }\r\n }\r\n\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Prev) {\r\n const [years, months, days] = dateRangeValue.split(CUSTOM_PREV_RANGE_DELIMITER).map(Number)\r\n\r\n if ([years, months, days].some(Number.isNaN)) {\r\n return { start: null, end: null }\r\n }\r\n\r\n return {\r\n start: dateFns.startOfDay(dateFns.sub(anchorDate, { years, months, days: days - 1 })),\r\n end: anchorDate,\r\n }\r\n }\r\n\r\n return { start: null, end: anchorDate }\r\n}\r\n\r\n// **************END**************\r\n// Functions below don't need to be\r\n// in sync with Website repository\r\n// *******************************\r\n\r\nconst DAYS_IN_YEAR = 365\r\n\r\nexport function getCustomStartEndDateRangeUrlParam({ start, end }: { start: Date | null; end: Date | null }) {\r\n const startString = start ? formatDateToStringUS(start) : ''\r\n const endString = end ? formatDateToStringUS(end) : ''\r\n\r\n const stringParts = [\r\n CustomDateRangePrefixEnum.Range,\r\n DATE_RANGE_PREFIX_DELMITER,\r\n startString,\r\n CUSTOM_DATE_RANGE_DELIMITER,\r\n endString,\r\n ]\r\n\r\n return stringParts.join('').replace(/\\//g, '-')\r\n}\r\n\r\nexport function getPrevPeriodDateRangeUrlParam({\r\n years,\r\n months,\r\n days,\r\n}: {\r\n years: number\r\n months: number\r\n days: number\r\n}) {\r\n const stringParts = [\r\n CustomDateRangePrefixEnum.Prev,\r\n DATE_RANGE_PREFIX_DELMITER,\r\n years,\r\n CUSTOM_PREV_RANGE_DELIMITER,\r\n months,\r\n CUSTOM_PREV_RANGE_DELIMITER,\r\n days,\r\n ]\r\n\r\n return stringParts.join('')\r\n}\r\n\r\nexport function getTimeframeForDateRangeType({\r\n dateRange,\r\n isPremium = true,\r\n instrument,\r\n}: {\r\n dateRange: string\r\n isPremium?: boolean\r\n instrument: Instrument\r\n}) {\r\n const dateRanges = generateDateRangeGroups({ isPremium, instrument }).flatMap(({ dateRanges }) => dateRanges)\r\n return dateRanges.find(({ value }) => value === dateRange)?.timeframe ?? null\r\n}\r\n\r\nexport function getTimeframeFromDateRange({\r\n dateRange,\r\n anchorDate,\r\n instrument,\r\n isPremium,\r\n}: {\r\n dateRange: string\r\n anchorDate: Date\r\n instrument: Instrument\r\n isPremium: boolean\r\n}) {\r\n const dateRangeTimeframe = getTimeframeForDateRangeType({ dateRange, instrument })\r\n if (dateRangeTimeframe) {\r\n return dateRangeTimeframe\r\n }\r\n const { start, end } = parseCustomDateRangeUrlParam({ dateRange, anchorDate })\r\n const startNyTime = start ?? new Date(0)\r\n const startToReferenceDateNumOfDays = dateFns.differenceInCalendarDays(anchorDate, startNyTime) + 1\r\n const rangeNumOfDays = dateFns.differenceInCalendarDays(end ?? anchorDate, startNyTime) + 1\r\n /**\r\n * DB_BARS_LIMIT - code below is dependent on amount of data we store for specific timeframes\r\n * Search DB_BARS_LIMIT in the project to find other places with such code.\r\n */\r\n if (rangeNumOfDays > 6 * DAYS_IN_YEAR) {\r\n return TIMEFRAME.m\r\n }\r\n\r\n if (rangeNumOfDays > 4 * DAYS_IN_YEAR) {\r\n return isPremium ? TIMEFRAME.w : TIMEFRAME.m\r\n }\r\n\r\n if (rangeNumOfDays > 1.5 * DAYS_IN_YEAR) {\r\n return TIMEFRAME.w\r\n }\r\n\r\n // Keep these values in sync with values in FetchQuoteIntraday in quote.cs\r\n if (instrument === Instrument.Stock) {\r\n if (rangeNumOfDays <= 1 && startToReferenceDateNumOfDays <= 11) {\r\n return TIMEFRAME.i1\r\n }\r\n\r\n if (rangeNumOfDays <= 5 && startToReferenceDateNumOfDays <= 16) {\r\n return TIMEFRAME.i5\r\n }\r\n\r\n if (rangeNumOfDays <= 7 && startToReferenceDateNumOfDays <= 200) {\r\n return TIMEFRAME.i30\r\n }\r\n } else {\r\n if (startToReferenceDateNumOfDays <= 2) {\r\n return TIMEFRAME.i5\r\n }\r\n if (startToReferenceDateNumOfDays <= 7) {\r\n return TIMEFRAME.i30\r\n }\r\n }\r\n\r\n return TIMEFRAME.d\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport * as React from 'react'\r\n\r\nimport { formatDateToStringUS } from '../../../app/shared/utils'\r\nimport { Button } from '../button'\r\nimport { ButtonGroup } from '../button-group'\r\nimport { DatePicker } from '../date-picker'\r\nimport { Delayed } from '../delayed'\r\nimport { Dialog, DialogBody, DialogFooter, DialogHeader } from '../dialog'\r\nimport { Input } from '../input'\r\nimport { Spinner } from '../spinner'\r\nimport {\r\n CustomDateRangePrefixEnum,\r\n getCustomStartEndDateRangeUrlParam,\r\n getParsedDateRange,\r\n getPrevPeriodDateRangeUrlParam,\r\n parseCustomDateRangeUrlParam,\r\n} from './custom-date-range-utils'\r\n\r\nconst DATA_YEAR_START = 1980\r\nconst DATE_PICKER_MIN_DATE = new Date(`01/01/${DATA_YEAR_START}`)\r\nconst YEARS_MAX_VALUE = new Date().getFullYear() - DATA_YEAR_START\r\n\r\nconst TAB_BUTTON_COMMON_PROPS = { type: 'button', className: 'flex-1', contentClass: 'text-center' } as const\r\n\r\nexport enum CustomRangeType {\r\n StartEnd,\r\n Manual,\r\n}\r\n\r\ninterface StartEndRange {\r\n kind: CustomRangeType.StartEnd\r\n start: Date | null\r\n end: Date | null\r\n}\r\n\r\ninterface ManualRange {\r\n kind: CustomRangeType.Manual\r\n days?: number\r\n months?: number\r\n years?: number\r\n}\r\n\r\nexport type CustomDateRangeType = StartEndRange | ManualRange\r\n\r\ninterface DialogContentProps {\r\n /**\r\n * Dialog state\r\n */\r\n dialogState: any\r\n dateRange?: string\r\n anchorDate: Date\r\n onDialogSubmit: (args: { dateRange: string | null }) => void\r\n isFetching?: boolean\r\n}\r\n\r\nconst DEFAULT_MANUAL_RANGE: ManualRange = {\r\n kind: CustomRangeType.Manual,\r\n days: 0,\r\n months: 0,\r\n years: 0,\r\n}\r\n\r\nconst DEFAULT_START_END_RANGE: StartEndRange = {\r\n kind: CustomRangeType.StartEnd,\r\n start: null,\r\n end: null,\r\n}\r\n\r\nfunction isValidManualRangeState({ years = 0, months = 0, days = 0 }: ManualRange) {\r\n return years + months + days > 0\r\n}\r\n\r\nfunction isValidStartEndRangeState({ start, end }: StartEndRange) {\r\n return !!(start || end)\r\n}\r\n\r\nfunction getDefaultSelectedTab(dateRange?: string) {\r\n if (dateRange) {\r\n const [dateRangePrefix] = getParsedDateRange(dateRange)\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Range) {\r\n return CustomRangeType.StartEnd\r\n }\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Prev) {\r\n return CustomRangeType.Manual\r\n }\r\n }\r\n return CustomRangeType.StartEnd\r\n}\r\n\r\nfunction getDefaultSelectedDate({\r\n dateRange,\r\n anchorDate,\r\n}: {\r\n dateRange?: string\r\n anchorDate: Date\r\n}): CustomDateRangeType {\r\n if (dateRange) {\r\n const [dateRangePrefix] = getParsedDateRange(dateRange)\r\n const { start, end } = parseCustomDateRangeUrlParam({ dateRange, anchorDate })\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Range) {\r\n return { kind: CustomRangeType.StartEnd, start, end }\r\n }\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Prev && start && end) {\r\n const { years, months, days } = dateFns.intervalToDuration({\r\n start: dateFns.sub(start, { days: 1 }),\r\n end,\r\n })\r\n return { kind: CustomRangeType.Manual, years, months, days }\r\n }\r\n }\r\n\r\n return DEFAULT_START_END_RANGE\r\n}\r\n\r\nexport function CustomDateRange({\r\n dialogState,\r\n dateRange,\r\n anchorDate,\r\n onDialogSubmit,\r\n isFetching,\r\n}: DialogContentProps) {\r\n const [selectedTab, setSelectedTab] = React.useState(getDefaultSelectedTab(dateRange))\r\n\r\n const [state, setState] = React.useState(getDefaultSelectedDate({ dateRange, anchorDate }))\r\n\r\n const { current: onChange } = React.useRef((kind: CustomRangeType, newValue: Partial) => {\r\n setState((prevState) => {\r\n if (kind === CustomRangeType.Manual) {\r\n const defaults = prevState?.kind === CustomRangeType.Manual ? prevState : DEFAULT_MANUAL_RANGE\r\n return { ...defaults, ...newValue } as ManualRange\r\n }\r\n if (kind === CustomRangeType.StartEnd) {\r\n const defaults = prevState?.kind === CustomRangeType.StartEnd ? prevState : DEFAULT_START_END_RANGE\r\n\r\n const newState = { ...defaults, ...newValue }\r\n if (newState.start && newState.end && newState.start.getTime() > newState.end.getTime()) {\r\n const newEnd = new Date(newState.start.getTime())\r\n newState.start = newState.end\r\n newState.end = newEnd\r\n }\r\n return newState\r\n }\r\n return prevState\r\n })\r\n })\r\n\r\n const handleSubmit = (ev: React.FormEvent) => {\r\n ev.preventDefault()\r\n\r\n let dateRange = null\r\n\r\n if (state?.kind === CustomRangeType.StartEnd && isValidStartEndRangeState(state)) {\r\n dateRange = getCustomStartEndDateRangeUrlParam({ start: state.start, end: state.end })\r\n } else if (state?.kind === CustomRangeType.Manual && isValidManualRangeState(state)) {\r\n dateRange = getPrevPeriodDateRangeUrlParam({\r\n days: state.days ?? 0,\r\n months: state.months ?? 0,\r\n years: state.years ?? 0,\r\n })\r\n }\r\n\r\n onDialogSubmit({ dateRange })\r\n }\r\n\r\n const isAbsolute = state?.kind === CustomRangeType.StartEnd\r\n const fromDate = isAbsolute ? state.start : DEFAULT_START_END_RANGE.start\r\n const toDate = isAbsolute ? state.end : DEFAULT_START_END_RANGE.end\r\n\r\n const manualRange = {\r\n ...DEFAULT_MANUAL_RANGE,\r\n ...(state?.kind === CustomRangeType.Manual ? state : {}),\r\n }\r\n\r\n return (\r\n \r\n \r\n Custom Date Range\r\n \r\n
\r\n \r\n \r\n setSelectedTab(CustomRangeType.StartEnd)}\r\n >\r\n Start / End\r\n \r\n setSelectedTab(CustomRangeType.Manual)}\r\n >\r\n Range\r\n \r\n \r\n\r\n {selectedTab === CustomRangeType.StartEnd ? (\r\n
\r\n onChange(CustomRangeType.StartEnd, { start })}\r\n >\r\n \r\n \r\n onChange(CustomRangeType.StartEnd, { end })}\r\n >\r\n \r\n \r\n
\r\n ) : (\r\n
\r\n ) =>\r\n onChange(CustomRangeType.Manual, { years: Number.parseInt(ev.currentTarget.value) })\r\n }\r\n />\r\n ) =>\r\n onChange(CustomRangeType.Manual, { months: Number.parseInt(ev.currentTarget.value) })\r\n }\r\n />\r\n ) =>\r\n onChange(CustomRangeType.Manual, { days: Number.parseInt(ev.currentTarget.value) })\r\n }\r\n />\r\n
\r\n )}\r\n
\r\n \r\n
\r\n \r\n setState(state.kind === CustomRangeType.Manual ? DEFAULT_MANUAL_RANGE : DEFAULT_START_END_RANGE)\r\n }\r\n >\r\n Reset\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\nimport { To, useNavigate } from 'react-router-dom'\r\n\r\nimport { TIMEFRAME } from '../../constants'\r\nimport { Instrument } from '../../types'\r\nimport { useDialogState } from '../dialog'\r\nimport { getTimeframeFromDateRange } from './custom-date-range-utils'\r\n\r\ninterface IPathForTimeframeDateRangeProps {\r\n timeframe: TIMEFRAME | 'intraday'\r\n dateRange?: string | null\r\n ticker?: string\r\n}\r\n\r\ninterface IUseCustomDateRangeDialogSubmitProps {\r\n anchorDate?: Date\r\n instrument?: Instrument\r\n shouldReloadOnNavigate?: boolean\r\n pathGenerator?: ({ ticker, timeframe, dateRange }: IPathForTimeframeDateRangeProps) => {\r\n pathname: string\r\n search: string\r\n }\r\n}\r\n\r\nexport function useCustomDateRangeDialog({\r\n anchorDate,\r\n instrument,\r\n pathGenerator,\r\n shouldReloadOnNavigate = false,\r\n}: IUseCustomDateRangeDialogSubmitProps) {\r\n const navigate = useNavigate()\r\n const customDateRangeDialogState = useDialogState()\r\n\r\n const isPremium = FinvizSettings.hasUserPremium\r\n\r\n const handleDateRangeSelect = React.useCallback(\r\n (\r\n { value, timeframe, href }: { value: string; timeframe?: TIMEFRAME; href?: To },\r\n callback?: ({ value, timeframe, href }: { value: string; timeframe: TIMEFRAME; href?: To }) => void\r\n ) => {\r\n if (!timeframe) {\r\n if (isPremium) {\r\n customDateRangeDialogState.show()\r\n }\r\n return\r\n }\r\n\r\n if (!href && pathGenerator) {\r\n const path = pathGenerator({ timeframe, dateRange: value })\r\n if (shouldReloadOnNavigate) {\r\n window.location.href = `${path.pathname}?${path.search}`\r\n } else {\r\n navigate(path)\r\n }\r\n }\r\n\r\n callback?.({ value, timeframe, href })\r\n },\r\n [navigate, customDateRangeDialogState, isPremium, pathGenerator, shouldReloadOnNavigate]\r\n )\r\n\r\n const getDateRangeTimeframe = React.useCallback(\r\n (dateRange: string | null) => {\r\n if (!anchorDate || !instrument || !dateRange) return null\r\n\r\n return {\r\n value: dateRange,\r\n timeframe: getTimeframeFromDateRange({\r\n dateRange: dateRange!,\r\n anchorDate,\r\n isPremium,\r\n instrument,\r\n }),\r\n }\r\n },\r\n [anchorDate, instrument, isPremium]\r\n )\r\n\r\n const onDialogSubmit = React.useCallback(\r\n ({ value: dateRange, timeframe: newTimeframe }: { value: string; timeframe: TIMEFRAME }) => {\r\n handleDateRangeSelect({\r\n value: dateRange,\r\n timeframe: newTimeframe,\r\n })\r\n customDateRangeDialogState.hide()\r\n },\r\n // We only want `customDateRangeDialogState.hide`, not the whole dialog\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [customDateRangeDialogState.hide, handleDateRangeSelect]\r\n )\r\n\r\n return { onDialogSubmit, customDateRangeDialogState, handleDateRangeSelect, getDateRangeTimeframe }\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { TIMEFRAME } from '../../constants'\r\nimport { useSyncLocalStorage } from '../../hooks/use-sync-local-storage'\r\n\r\ntype FavoriteTimeframesMap = { [K in TIMEFRAME | 'intraday']?: boolean }\r\n\r\nexport const TIMEFRAME_FAVORITE_DEFAULTS = {\r\n [TIMEFRAME.i1]: true,\r\n [TIMEFRAME.i2]: false,\r\n [TIMEFRAME.i3]: true,\r\n [TIMEFRAME.i5]: true,\r\n [TIMEFRAME.i10]: false,\r\n [TIMEFRAME.i15]: true,\r\n [TIMEFRAME.i30]: true,\r\n [TIMEFRAME.h]: true,\r\n [TIMEFRAME.h2]: false,\r\n [TIMEFRAME.h4]: false,\r\n [TIMEFRAME.d]: true,\r\n [TIMEFRAME.w]: true,\r\n [TIMEFRAME.m]: true,\r\n}\r\n\r\nexport const TIMEFRAME_FAVORITE_DEFAULTS_FREE = {\r\n ...TIMEFRAME_FAVORITE_DEFAULTS,\r\n intraday: true,\r\n}\r\n\r\nconst LOCAL_STORAGE_KEY = 'favoriteTimeframesMap'\r\n\r\nexport function useFavoriteTimeframes(isPremium = true) {\r\n const { state, setState } = useSyncLocalStorage(\r\n LOCAL_STORAGE_KEY,\r\n isPremium ? TIMEFRAME_FAVORITE_DEFAULTS : TIMEFRAME_FAVORITE_DEFAULTS_FREE\r\n )\r\n\r\n const toggleFavoriteTimeframe = React.useCallback(\r\n (timeframe: TIMEFRAME) => {\r\n setState((prevState) => ({\r\n ...prevState,\r\n [timeframe]: !prevState[timeframe],\r\n }))\r\n },\r\n [setState]\r\n )\r\n\r\n const favoriteTimeframes = React.useMemo(\r\n () => Object.keys(state).filter((key) => state[key as keyof FavoriteTimeframesMap]),\r\n [state]\r\n )\r\n\r\n return {\r\n favoriteTimeframes: isPremium ? favoriteTimeframes : Object.keys(TIMEFRAME_FAVORITE_DEFAULTS_FREE),\r\n toggleFavoriteTimeframe,\r\n }\r\n}\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Tooltip'\r\n\r\nimport { getExtendedDialogState } from './dialog'\r\nimport { Input, InputHTMLProps, InputProps } from './input'\r\nimport { Tooltip, TooltipColor, TooltipTrigger, useTooltipState } from './tooltip'\r\n\r\ntype TooltipInputProps = InputProps & InputHTMLProps & { isInteractive?: boolean }\r\n\r\nexport interface TooltipInputWrapperProps extends Pick {\r\n children: React.ReactElement\r\n /**\r\n * Tooltip text content\r\n */\r\n tooltipContent?: React.ReactNode\r\n tooltipColor?: keyof typeof TooltipColor\r\n tooltipSettings?: Reakit.TooltipInitialState\r\n}\r\n\r\nfunction TooltipInputWrapper({\r\n children,\r\n tooltipContent,\r\n tooltipColor,\r\n tooltipSettings,\r\n name,\r\n}: TooltipInputWrapperProps) {\r\n const tooltip = useTooltipState({ placement: 'bottom', ...tooltipSettings })\r\n const { isFullyClosed } = getExtendedDialogState(tooltip)\r\n\r\n return (\r\n <>\r\n \r\n {children}\r\n \r\n {tooltipContent && !isFullyClosed && (\r\n \r\n {tooltipContent}\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nfunction TooltipInputComponent(\r\n {\r\n tooltipContent,\r\n tooltipColor,\r\n tooltipSettings,\r\n isInteractive = true,\r\n ...props\r\n }: TooltipInputProps & Omit,\r\n ref: React.ForwardedRef\r\n) {\r\n const input = \r\n\r\n if (!isInteractive) {\r\n return input\r\n }\r\n\r\n return (\r\n \r\n {input}\r\n \r\n )\r\n}\r\n\r\nexport const TooltipInput = React.forwardRef(TooltipInputComponent)\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { TooltipColor } from './types'\r\n\r\nexport interface TooltipBoxProps extends Omit, 'ref'> {\r\n /**\r\n * Color of the tooltip. If se to `none`, the tooltip will have default color\r\n * based on light/dark theme\r\n *\r\n * @default 'none'\r\n */\r\n color?: keyof typeof TooltipColor\r\n}\r\n\r\nexport const TooltipBox = React.forwardRef(function TooltipBox(\r\n { color = 'none', ...props }: TooltipBoxProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const tooltipColor = TooltipColor[color]\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n})\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Tooltip'\r\n\r\nimport { TooltipArrow } from './tooltip-arrow'\r\nimport { TooltipBox, TooltipBoxProps } from './tooltip-box'\r\n\r\ninterface TooltipProps extends TooltipBoxProps {\r\n /**\r\n * The returned object from `useTooltipState`\r\n */\r\n state: Reakit.TooltipStateReturn\r\n}\r\n\r\nexport function Tooltip({ state, children, color = 'none', ...props }: React.PropsWithChildren) {\r\n return (\r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...tooltipProps }) => (\r\n
\r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n
\r\n )}\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Tooltip'\r\n\r\ninterface TooltipButtonProps extends Reakit.TooltipReferenceHTMLProps {\r\n state: Reakit.TooltipStateReturn\r\n\r\n /**\r\n * Whether or not should trigger element call blur to return focus back to body after click\r\n *\r\n * @default false\r\n */\r\n isBlurAfterClick?: boolean\r\n\r\n /**\r\n * Whether to ignore default mouse enter/leave tooltip trigger interactions\r\n * and hide tooltip only after clicking outside of the trigger element\r\n *\r\n * @default false\r\n */\r\n isHideOnClickOutside?: boolean\r\n}\r\n/**\r\n * The trigger button component which handles ref & focus return, etc.\r\n */\r\nexport const TooltipTrigger = React.forwardRef(\r\n (\r\n {\r\n state,\r\n isBlurAfterClick,\r\n isHideOnClickOutside,\r\n onClick,\r\n onMouseEnter,\r\n onMouseLeave,\r\n ...props\r\n }: TooltipButtonProps,\r\n ref: React.ForwardedRef\r\n ) => (\r\n {\r\n if (isBlurAfterClick && document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur()\r\n }\r\n onClick?.(e)\r\n }}\r\n onMouseEnter={(e) => {\r\n if (isHideOnClickOutside) e.preventDefault()\r\n onMouseEnter?.(e)\r\n }}\r\n onMouseLeave={(e) => {\r\n if (isHideOnClickOutside) e.preventDefault()\r\n onMouseLeave?.(e)\r\n }}\r\n {...props}\r\n {...state}\r\n >\r\n {props.children}\r\n \r\n )\r\n)\r\n","import * as Reakit from 'reakit/Tooltip'\r\n\r\nimport { COMPONENT_ANIMATION_DURATION } from '../constants'\r\n\r\n/**\r\n * Hook which provides state to tooltips\r\n */\r\nexport function useTooltipState(settings?: Reakit.TooltipInitialState) {\r\n return Reakit.useTooltipState({\r\n ...settings,\r\n animated: COMPONENT_ANIMATION_DURATION,\r\n })\r\n}\r\n","import classnames from 'classnames'\r\n\r\nimport { TooltipColor } from './types'\r\n\r\ntype PositionMain = 'auto' | 'top' | 'bottom' | 'left' | 'right'\r\ntype PositionSecondary = 'start' | 'end'\r\ntype Placement = PositionMain | `${PositionMain}-${PositionSecondary}`\r\n\r\nconst transformMap: Record = {\r\n auto: '',\r\n top: 'rotateZ(180deg)',\r\n right: 'rotateZ(-90deg)',\r\n bottom: 'rotateZ(360deg)',\r\n left: 'rotateZ(90deg)',\r\n}\r\n\r\ninterface TooltipArrowProps {\r\n color?: keyof typeof TooltipColor\r\n placement: Placement\r\n className?: string\r\n}\r\n\r\n/**\r\n * Custom arrow for the dropdown\r\n */\r\nexport function TooltipArrow({ placement, color = 'none', className }: TooltipArrowProps) {\r\n const positionMain = placement.split('-')[0] as PositionMain\r\n const arrowColor = TooltipColor[color]\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","export enum TooltipColor {\r\n none,\r\n green,\r\n red,\r\n orange,\r\n blue,\r\n dark,\r\n}\r\n","import classnames from 'classnames'\r\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 '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","import debounce from 'lodash.debounce'\r\nimport * as React from 'react'\r\n\r\nimport { useIsMounted } from './use-is-mounted'\r\nimport { useResizeObserver } from './use-resize-observer'\r\n\r\nexport function useElementMeasure(elementOverride: HTMLElement | null = null) {\r\n const ResizeObserver = useResizeObserver()\r\n const getIsMounted = useIsMounted()\r\n const [elementRef, setElementRef] = React.useState(elementOverride)\r\n const [elementWidth, setElementWidth] = React.useState(elementRef?.offsetWidth ?? 0)\r\n const [elementHeight, setElementHeight] = React.useState(elementRef?.offsetHeight ?? 0)\r\n\r\n React.useEffect(() => {\r\n if (!ResizeObserver) {\r\n return\r\n }\r\n\r\n const measureElement = () => {\r\n if (!getIsMounted()) {\r\n return\r\n }\r\n const newElementWidth = elementRef?.offsetWidth\r\n const newElementHeight = elementRef?.offsetHeight\r\n if (newElementWidth !== elementWidth) {\r\n setElementWidth(newElementWidth ?? 0)\r\n }\r\n if (newElementHeight !== elementHeight) {\r\n setElementHeight(newElementHeight ?? 0)\r\n }\r\n }\r\n const measureElementDebounced = debounce(measureElement, 200)\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n /**\r\n * the reason for requestAnimationFrame is described here https://github.com/quasarframework/quasar/issues/2233\r\n * their approach was mostly to intercept and silence the error but I managed to avoid the error using requestAnimationFrame\r\n * */\r\n window.requestAnimationFrame(() => {\r\n if (Array.isArray(entries) && entries.length > 0) {\r\n measureElementDebounced()\r\n }\r\n })\r\n })\r\n\r\n if (elementRef) {\r\n resizeObserver.observe(elementRef)\r\n }\r\n\r\n measureElement()\r\n\r\n return () => {\r\n measureElementDebounced.cancel()\r\n resizeObserver?.disconnect()\r\n }\r\n }, [ResizeObserver, elementWidth, elementRef, elementHeight, getIsMounted])\r\n\r\n return { setElementRef: elementOverride ? () => {} : setElementRef, elementWidth, elementHeight }\r\n}\r\n","// Copy if this file is in charts repo in app/utils/ folder\r\nimport * as React from 'react'\r\n\r\nexport function useIsMounted() {\r\n const isMountedRef = React.useRef(false)\r\n const getIsMounted = React.useCallback(() => isMountedRef.current, [])\r\n\r\n React.useEffect(() => {\r\n isMountedRef.current = true\r\n return () => {\r\n isMountedRef.current = false\r\n }\r\n }, [])\r\n\r\n return getIsMounted\r\n}\r\n","import React from 'react'\r\n\r\nimport { DropdownStateReturn } from '../components/dropdown'\r\nimport { PopoverStateReturn } from '../components/popover'\r\nimport { useWindowSize } from './use-window-size'\r\n\r\ntype Props = {\r\n maxHeightLimit: number\r\n hasViewportHeightLimit: boolean\r\n offsets: [number, number]\r\n state: PopoverStateReturn | DropdownStateReturn\r\n}\r\n\r\nconst MAX_HEIGHT_PROPERTY = '--popover-max-height'\r\nconst POPOVER_HEIGHT_LIMIT_STYLE = {\r\n maxHeight: `calc(var(${MAX_HEIGHT_PROPERTY}) - env(safe-area-inset-bottom))`,\r\n}\r\n\r\n/**\r\n * Limit popover height to be always in viewport is `hasViewportHeightLimit` is true\r\n */\r\nexport function usePopoverMaxHeight({ maxHeightLimit, hasViewportHeightLimit, offsets, state }: Props) {\r\n const { innerHeight } = useWindowSize({ isWatching: state.visible || state.animating })\r\n const buttonElement = state.unstable_referenceRef.current\r\n\r\n React.useEffect(() => {\r\n if (!buttonElement || !state.visible || !hasViewportHeightLimit) return\r\n\r\n // calculate height\r\n const buttonRect = buttonElement.getBoundingClientRect()\r\n const [, offsetY] = offsets\r\n let elementMaxHeight = 'auto'\r\n if (state.placement.startsWith('bottom')) {\r\n let height = innerHeight - buttonRect.bottom - offsetY * 2\r\n // when used on pages where is scrollable content, buttonRect.bottom is sometimes negative\r\n // in that case we need to subtract window.scrollY\r\n if (buttonRect.bottom < 0) height -= window.scrollY\r\n elementMaxHeight = `${Math.min(height, maxHeightLimit)}px`\r\n } else {\r\n const height = buttonRect.top - offsetY * 2\r\n elementMaxHeight = `${Math.min(height, maxHeightLimit)}px`\r\n }\r\n\r\n // set height\r\n const popoverId = buttonElement.getAttribute('aria-controls')\r\n const popoverWrapper = popoverId ? document.getElementById(popoverId) : null\r\n popoverWrapper?.style.setProperty(MAX_HEIGHT_PROPERTY, elementMaxHeight)\r\n }, [buttonElement, innerHeight, maxHeightLimit, hasViewportHeightLimit, offsets, state.placement, state.visible])\r\n\r\n return hasViewportHeightLimit ? POPOVER_HEIGHT_LIMIT_STYLE : undefined\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { loadResizeObserverPolyfill } from '../util'\r\n\r\nexport function useResizeObserver() {\r\n const controller = React.useRef('AbortController' in window ? new AbortController() : undefined)\r\n const [ResizeObserver, setResizeObserver] = React.useState(\r\n () => window.ResizeObserver\r\n )\r\n\r\n React.useEffect(() => {\r\n if (typeof ResizeObserver === 'undefined') {\r\n loadResizeObserverPolyfill().then((polyfill) => {\r\n if (!controller.current?.signal.aborted) {\r\n setResizeObserver(() => polyfill)\r\n }\r\n })\r\n }\r\n }, [ResizeObserver])\r\n\r\n // Cleanup effect to abort the controller\r\n React.useEffect(() => () => controller.current?.abort(), [])\r\n\r\n return ResizeObserver\r\n}\r\n","import * as React from 'react'\r\n\r\nimport * as storage from '../services/local-storage'\r\n\r\n/**\r\n * Hook to synchronize localStorage.setItem across all components on the page on all open tabs\r\n */\r\nexport function useSyncLocalStorage(storageKey: string, defaultValue: ValueType) {\r\n const [state, setState] = React.useState(storage.getValue(storageKey, defaultValue))\r\n\r\n React.useEffect(() => {\r\n const subscription = storage.subscribeToChanges(storageKey, defaultValue, setState)\r\n\r\n return () => {\r\n subscription.unsubscribe()\r\n }\r\n }, [storageKey, defaultValue])\r\n\r\n const setValue = React.useCallback(\r\n (valueGetter: React.SetStateAction) => storage.setValue(storageKey, valueGetter, defaultValue),\r\n [defaultValue, storageKey]\r\n )\r\n\r\n return {\r\n state,\r\n setState: setValue,\r\n }\r\n}\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport * as tracking from '../../app/shared/tracking'\r\n\r\nexport function useTrackPageView(props?: { trackInitial?: boolean; trackAutomatically?: boolean }) {\r\n const { trackInitial = false, trackAutomatically = true } = props ?? {}\r\n const initialRender = React.useRef(trackInitial)\r\n const location = useLocation()\r\n\r\n const handleTrackView = React.useCallback(() => {\r\n tracking.trackPageView({ pathname: location.pathname, query: location.search })\r\n }, [location.pathname, location.search])\r\n\r\n React.useEffect(() => {\r\n if (!trackAutomatically) return\r\n if (initialRender.current) handleTrackView()\r\n initialRender.current = true\r\n }, [trackAutomatically, handleTrackView, trackInitial])\r\n\r\n return handleTrackView\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n throttleWaitInMs?: number\r\n isWatching?: boolean\r\n}\r\n\r\nexport function useWindowSize({ throttleWaitInMs = 300, isWatching = true }: Props = {}) {\r\n const [size, setSize] = React.useState({\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!isWatching) return\r\n\r\n const handleResize = throttle(() => {\r\n setSize({\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n }, throttleWaitInMs)\r\n\r\n window.addEventListener('resize', handleResize)\r\n\r\n return () => {\r\n handleResize.cancel()\r\n window.removeEventListener('resize', handleResize)\r\n }\r\n }, [throttleWaitInMs, isWatching])\r\n\r\n return size\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 * as React from 'react'\r\nimport { usePopper } from 'react-popper'\r\n\r\nimport { usePopoverMaxHeight } from '../../hooks/use-popover-maxHeight'\r\nimport { Button } from '../button'\r\nimport { getExtendedDialogState } from '../dialog'\r\nimport { Dropdown, DropdownItem, DropdownSeparator, useDropdownState } from '../dropdown'\r\nimport { ObjectHash } from '../types'\r\n\r\nconst DEFAULT_OFFSETS: [number, number] = [5, 5]\r\n\r\nfunction getVirtualRef(top: number, left: number) {\r\n return {\r\n getBoundingClientRect(): DOMRect {\r\n const rect = {\r\n top: top - window.scrollY,\r\n x: top - window.scrollY,\r\n left: left - window.scrollX,\r\n y: left - window.scrollX,\r\n bottom: top,\r\n right: left,\r\n width: 0,\r\n height: 0,\r\n }\r\n\r\n return {\r\n ...rect,\r\n toJSON: () => rect,\r\n }\r\n },\r\n }\r\n}\r\n\r\nexport interface IContextMenuOption {\r\n type?: never\r\n id: string\r\n label: React.ReactNode\r\n onClick?: () => void\r\n options?: ContextMenuItem[]\r\n gtag?: ObjectHash\r\n}\r\n\r\ninterface IContextMenuDivider {\r\n type: 'divider'\r\n label?: React.ReactNode\r\n}\r\n\r\nexport type ContextMenuItem = IContextMenuOption | IContextMenuDivider\r\n\r\ninterface ContextMenuProps {\r\n /**\r\n * Top coordinate of the click\r\n */\r\n top: number\r\n\r\n /**\r\n * Left coordinate of the click\r\n */\r\n left: number\r\n\r\n /**\r\n * Can limit the max height of the menu\r\n *\r\n * @default undefined\r\n */\r\n menuMaxHeight?: number\r\n\r\n /**\r\n * Items visible in the menu\r\n */\r\n items: ContextMenuItem[]\r\n\r\n /**\r\n * Callback to hide the menu\r\n */\r\n hide: () => void\r\n}\r\n\r\nexport function ContextMenu({ top, left, menuMaxHeight, hide, items }: ContextMenuProps) {\r\n const [popperElement, setPopperElement] = React.useState(null)\r\n const virtualRef = React.useMemo(() => getVirtualRef(top, left), [left, top])\r\n const dropdownState = useDropdownState({ placement: 'bottom-start' })\r\n const { isFullyClosed } = getExtendedDialogState(dropdownState)\r\n const hasBeenOpen = React.useRef(false)\r\n\r\n const { styles, attributes } = usePopper(virtualRef, popperElement, {\r\n placement: 'auto-end',\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset: DEFAULT_OFFSETS,\r\n },\r\n },\r\n ],\r\n })\r\n\r\n /**\r\n * This effect handles closing the context menu (parent element) itself\r\n */\r\n React.useEffect(() => {\r\n if (isFullyClosed && hasBeenOpen.current) hide()\r\n }, [isFullyClosed, hide])\r\n\r\n /**\r\n * This effect handles opening/closing the inner dropdown\r\n */\r\n React.useEffect(() => {\r\n dropdownState.show()\r\n hasBeenOpen.current = true // This acts as a way to differentiate the first render\r\n\r\n return () => dropdownState.hide()\r\n // This needs to run only on mount/unmount for obvious reasons\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return (\r\n \r\n }\r\n menuMaxHeight={menuMaxHeight}\r\n state={dropdownState}\r\n items={items}\r\n isStatic\r\n />\r\n \r\n )\r\n}\r\n\r\ninterface ContextMenuInnerProps {\r\n label: JSX.Element\r\n items: ContextMenuItem[]\r\n state: ReturnType\r\n isStatic?: boolean\r\n menuMaxHeight?: number\r\n}\r\n\r\nfunction ContextMenuInner(\r\n { label, items, state, isStatic, menuMaxHeight = Number.MAX_SAFE_INTEGER }: ContextMenuInnerProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const innerState = useDropdownState({ placement: 'right-start' })\r\n const maxHeightStyle = usePopoverMaxHeight({\r\n maxHeightLimit: menuMaxHeight,\r\n hasViewportHeightLimit: true,\r\n offsets: DEFAULT_OFFSETS,\r\n state,\r\n })\r\n\r\n return (\r\n \r\n {items.map((item, index) => {\r\n if (item.type === 'divider') {\r\n return {item.label}\r\n }\r\n\r\n if (item?.options !== undefined) {\r\n return (\r\n \r\n {item.label}\r\n \r\n }\r\n items={item.options}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n {\r\n item.onClick?.()\r\n window.gtag?.('event', 'context-menu', Object.assign({ menu_option: item.id }, item.gtag))\r\n }}\r\n data-testid={`dropdown-menu-${item.id}`}\r\n className=\"shrink-0\"\r\n >\r\n {item.label}\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n\r\nconst ContextMenuDropdown = React.forwardRef(ContextMenuInner)\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\ninterface GridLayoutProps extends React.HTMLProps {\r\n /**\r\n * Number of columns\r\n */\r\n columns?: number\r\n\r\n /**\r\n * Number of rows\r\n */\r\n rows?: number\r\n\r\n /**\r\n * Whether or not a border is rendered between and around items. eg. charts\r\n * on HP won’t have a border\r\n *\r\n * @default false\r\n */\r\n border?: boolean\r\n}\r\n\r\nexport const ChartGridCell = React.forwardRef(\r\n ({ children, gridArea, className, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n )\r\n)\r\n\r\ninterface ChartGridCellProps extends React.HTMLProps {\r\n /**\r\n * Css grid-area value\r\n */\r\n gridArea?: string\r\n}\r\n\r\nexport function GridLayout({ columns = 1, rows = 1, border = false, children, className, ...props }: GridLayoutProps) {\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\ninterface ChartGridProps extends GridLayoutProps {\r\n isResizable?: boolean\r\n}\r\n\r\nexport const ChartGrid: React.FC = (props) => \r\n","import * as React from 'react'\r\n\r\nimport { PropsWithAs, RequireByKey } from '../types'\r\n\r\nconst defaultValueAccessor: ValueAccessor = (data) => data\r\n\r\nconst DEFAULT_VALUE_KEY = 'value'\r\nconst DEFAULT_CHANGE_KEY = 'onChange'\r\n\r\ntype ValueAccessor<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps = typeof DEFAULT_VALUE_KEY,\r\n ChangeKey extends keyof React.ComponentProps = typeof DEFAULT_CHANGE_KEY,\r\n> = (...args: Parameters[ChangeKey]>) => React.ComponentProps[ValueKey]\r\n\r\nexport type InnerStateProps<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps,\r\n ChangeKey extends keyof React.ComponentProps,\r\n> = RequireByKey, 'as'> & {\r\n valueKey?: ValueKey\r\n changeKey?: ChangeKey\r\n valueAccessor?: ValueAccessor\r\n}\r\n\r\nexport function InnerState<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps = typeof DEFAULT_VALUE_KEY,\r\n ChangeKey extends keyof React.ComponentProps = typeof DEFAULT_CHANGE_KEY,\r\n>({\r\n as: asComponent,\r\n valueKey = 'value' as ValueKey,\r\n changeKey = 'onChange' as ChangeKey,\r\n valueAccessor = defaultValueAccessor,\r\n ...props\r\n}: InnerStateProps) {\r\n const { [valueKey]: value, [changeKey]: onChange } = props\r\n const [state, setState] = React.useState[ValueKey]>(value)\r\n\r\n const handleChange = React.useCallback>(\r\n (...args) => {\r\n setState(valueAccessor(...args))\r\n onChange(...args)\r\n },\r\n [onChange, valueAccessor]\r\n )\r\n\r\n return React.createElement(asComponent, {\r\n ...props,\r\n [valueKey]: state,\r\n [changeKey]: handleChange,\r\n })\r\n}\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, ReactNode, useEffect, useMemo, useRef, useState } from 'react'\r\n\r\nimport { Label } from './typography'\r\n\r\nexport enum RangeSize {\r\n small = 'sm:h-6', // 24px height\r\n regular = 'sm:h-7', // 28px height\r\n medium = 'sm:h-8', // 32px height\r\n large = 'sm:h-9', // 36px height\r\n}\r\n\r\ntype InputProps = HTMLProps\r\n\r\ninterface RangeSliderProps extends Omit {\r\n /**\r\n * Label which is rendered above the select\r\n */\r\n label?: ReactNode\r\n\r\n /**\r\n * Range size. All inputs have forced height on mobile to avoid zoom\r\n *\r\n * @default regular\r\n */\r\n size?: keyof typeof RangeSize\r\n\r\n /**\r\n * Element which will be rendered on the left side of the slider\r\n */\r\n leftContent?: ReactNode\r\n\r\n /**\r\n * Element which will be rendered on the right side of the slider\r\n */\r\n rightContent?: ReactNode\r\n\r\n /**\r\n * Class name for the wrapper element\r\n */\r\n className?: string\r\n\r\n /**\r\n * Class name for the input element\r\n */\r\n inputClassName?: string\r\n\r\n /**\r\n * Min value for the input\r\n *\r\n * @default 0\r\n */\r\n min?: number\r\n\r\n /**\r\n * Max value for the input\r\n *\r\n * @default 100\r\n */\r\n max?: number\r\n\r\n /**\r\n * Step value for the input\r\n *\r\n * @default 1\r\n */\r\n step?: number\r\n\r\n /**\r\n * Current value\r\n */\r\n value: number\r\n\r\n /**\r\n * Callback when value changes\r\n */\r\n onChange: InputProps['onChange']\r\n}\r\n\r\nexport function RangeSlider({\r\n label,\r\n size = 'regular',\r\n leftContent,\r\n rightContent,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n className,\r\n inputClassName,\r\n ...props\r\n}: RangeSliderProps) {\r\n const [hasTrack, setHasTrack] = useState(false)\r\n const trackRef = useRef(null)\r\n const thumbRef = useRef(null)\r\n\r\n useEffect(() => {\r\n setHasTrack(Boolean(trackRef.current && thumbRef.current))\r\n }, [])\r\n\r\n const thumbLeft = useMemo(() => {\r\n const track = trackRef.current\r\n const thumb = thumbRef.current\r\n const valuePercent = (props.value - min) / (max - min)\r\n\r\n if (!hasTrack || !track || !thumb) return\r\n\r\n const trackBox = track.getBoundingClientRect()\r\n const thumbBox = thumb.getBoundingClientRect()\r\n\r\n return ((valuePercent * (trackBox.width - thumbBox.width)) / trackBox.width) * 100\r\n }, [min, max, props.value, hasTrack])\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { ButtonRoundingType, ButtonThemeType } from '../button'\r\nimport { IconNameType } from '../icon'\r\n\r\nexport enum ToolbarTheme {\r\n chipTransparent, // (default)\r\n alternative,\r\n}\r\n\r\nexport enum ToolbarDirection {\r\n vertical,\r\n horizontal,\r\n}\r\n\r\nexport type ToolbarDirectionType = keyof typeof ToolbarDirection\r\n\r\nexport interface IButtonThemeSettings {\r\n className?: string\r\n theme: ButtonThemeType\r\n rounding: ButtonRoundingType\r\n}\r\n\r\nexport interface IToolbarItem {\r\n id: string\r\n icon: IconNameType\r\n iconActive?: IconNameType\r\n iconAction?: IconNameType\r\n title: string\r\n titleActive?: string\r\n titleAction?: string\r\n}\r\n\r\nexport type ToolbarThemeType = keyof typeof ToolbarTheme\r\n","import * as React from 'react'\r\n\r\nimport { ToolbarDirection, ToolbarTheme } from './interfaces'\r\n\r\nexport interface IToolbarContext {\r\n direction: ToolbarDirection\r\n theme: ToolbarTheme\r\n isWrapped: boolean\r\n isStretched: boolean\r\n isMobile: boolean\r\n}\r\n\r\nexport const ToolbarContext = React.createContext({\r\n direction: ToolbarDirection.vertical,\r\n theme: ToolbarTheme.chipTransparent,\r\n isWrapped: false,\r\n isStretched: false,\r\n isMobile: false,\r\n})\r\n\r\nexport function useToolbarContext() {\r\n return React.useContext(ToolbarContext)\r\n}\r\n","import classnames from 'classnames'\r\nimport throttle from 'lodash.throttle'\r\nimport React from 'react'\r\n\r\nimport { isSafariDesktop } from '../../../app/shared/isMobile'\r\nimport { IToolbarContext, ToolbarContext } from './hooks'\r\nimport { ToolbarDirection, ToolbarDirectionType, ToolbarTheme, ToolbarThemeType } from './interfaces'\r\n\r\nconst getToolbarSettings = ({\r\n direction,\r\n isWrapped,\r\n isMobile,\r\n theme,\r\n}: IToolbarContext): React.HTMLProps => {\r\n switch (isWrapped) {\r\n case true:\r\n return {\r\n className: classnames('shrink-0 items-center bg-white dark:bg-gray-800', {\r\n 'flex flex-wrap justify-between': direction === ToolbarDirection.vertical,\r\n 'grid border border-gray-100 dark:border-gray-600 p-1.5 gap-1 border-box rounded-md grid-cols-2':\r\n FinvizSettings.hasRedesignEnabled,\r\n }),\r\n }\r\n\r\n default:\r\n return {\r\n className: classnames('flex shrink-0 items-center p-1.5 bg-white dark:bg-gray-800', {\r\n 'space-x-1.5 px-1.5': direction === ToolbarDirection.horizontal && FinvizSettings.hasRedesignEnabled,\r\n 'flex-col overflow-hidden overflow-y-auto [--inset-l:0.5rem] landscape-primary:pl-inset-left':\r\n direction === ToolbarDirection.vertical,\r\n 'space-y-2': direction === ToolbarDirection.vertical && !isMobile,\r\n 'pb-inset-bottom [--inset-b:0.5rem]': theme !== ToolbarTheme.alternative && !isMobile,\r\n 'w-screen space-x-2 overflow-hidden overflow-x-auto':\r\n direction === ToolbarDirection.horizontal && theme !== ToolbarTheme.alternative,\r\n 'overflow-x-hidden': theme === ToolbarTheme.alternative,\r\n 'relative z-10 rounded-md border border-gray-100 dark:border-gray-600': isMobile,\r\n }),\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarProps {\r\n /**\r\n * Toolbar direction\r\n *\r\n * @default vertical\r\n */\r\n direction?: ToolbarDirectionType\r\n\r\n /**\r\n * Toolbar buttons theme\r\n *\r\n * @default light\r\n */\r\n theme?: ToolbarThemeType\r\n\r\n /**\r\n * Charts mobile design\r\n *\r\n * @default false\r\n */\r\n isMobile?: boolean\r\n\r\n className?: string\r\n}\r\n\r\nexport function Toolbar({\r\n direction = 'vertical',\r\n theme = 'chipTransparent',\r\n isMobile = false,\r\n children,\r\n className,\r\n}: React.PropsWithChildren) {\r\n const toolbarRef = React.useRef(null)\r\n const contextProviderValue = React.useMemo(\r\n () => ({\r\n direction: ToolbarDirection[direction],\r\n theme: ToolbarTheme[theme],\r\n isWrapped:\r\n ToolbarDirection[direction] === ToolbarDirection.vertical && ToolbarTheme[theme] === ToolbarTheme.alternative,\r\n isStretched:\r\n ToolbarDirection[direction] === ToolbarDirection.horizontal && ToolbarTheme[theme] === ToolbarTheme.alternative,\r\n isMobile,\r\n }),\r\n [direction, theme, isMobile]\r\n )\r\n const toolbarSettings = getToolbarSettings(contextProviderValue)\r\n\r\n React.useLayoutEffect(() => {\r\n // Workaround for Safari scrollbar bug https://github.com/finvizhq/charts/issues/1038\r\n // Safari injects scrollbar after layout render and doesn't trigger reflow\r\n if (ToolbarTheme[theme] !== ToolbarTheme.alternative && isSafariDesktop()) {\r\n const forceReflow = throttle(() => {\r\n if (toolbarRef.current !== null) {\r\n const originalWidth = toolbarRef.current.style.width\r\n toolbarRef.current.style.width = '0'\r\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n toolbarRef.current.offsetWidth\r\n toolbarRef.current.style.width = originalWidth\r\n }\r\n }, 200)\r\n\r\n forceReflow()\r\n window.addEventListener('resize', forceReflow)\r\n\r\n return () => {\r\n window.removeEventListener('resize', forceReflow)\r\n }\r\n }\r\n }, [theme])\r\n\r\n // reason for key is that popover is sealing initial state, description in\r\n // https://github.com/finvizhq/Finviz-Website/pull/402\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonHTMLProps, ButtonProps } from '../button'\r\nimport { Delayed } from '../delayed'\r\nimport { Icon } from '../icon'\r\nimport { Spinner } from '../spinner'\r\nimport { PropsWithAs } from '../types'\r\nimport { useToolbarContext } from './hooks'\r\nimport { IToolbarItem, ToolbarTheme } from './interfaces'\r\n\r\nfunction getButtonThemeSettings({\r\n theme,\r\n isActive,\r\n isStretched,\r\n isInAction,\r\n}: {\r\n theme: ToolbarTheme\r\n isStretched: boolean\r\n isActive?: boolean\r\n isInAction?: boolean\r\n}): Omit & ButtonProps {\r\n const includeRedesign = FinvizSettings.hasRedesignEnabled\r\n switch (theme) {\r\n case ToolbarTheme.alternative:\r\n return {\r\n className: classnames(\r\n {\r\n grow: isStretched,\r\n 'h-10 w-10': !isStretched && !includeRedesign,\r\n 'animate-pulse': isInAction,\r\n },\r\n\r\n !includeRedesign && {\r\n 'active:bg-white disabled:bg-white disabled:text-gray-300 disabled:hover:text-gray-300': true,\r\n 'border border-white text-gray-500 hover:border-gray-100 hover:text-gray-900': !isActive,\r\n 'border border-gray-900 text-gray-900': isActive,\r\n }\r\n ),\r\n theme: includeRedesign ? 'chipTransparent' : 'transparent',\r\n rounding: includeRedesign ? undefined : 'none',\r\n size: isStretched || includeRedesign ? undefined : 'none',\r\n }\r\n default:\r\n return {\r\n className: classnames(\r\n 'border dark:disabled:bg-gray-800 dark:disabled:text-gray-600 disabled:text-gray-300 disabled:bg-white dark:disabled:hover:bg-gray-800 dark:disabled:hover:text-gray-600 disabled:hover:text-gray-300 disabled:hover:bg-white',\r\n {\r\n 'animate-pulse': isInAction,\r\n 'border-transparent text-gray-500 hover:bg-gray-200/30 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-500/30 dark:hover:text-gray-200':\r\n !isActive,\r\n 'border-blue-400 bg-blue-50 text-gray-900 dark:bg-gray-700 dark:text-white': isActive,\r\n }\r\n ),\r\n theme: 'transparent',\r\n rounding: 'small',\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarButtonProps extends Omit {\r\n item: IToolbarItem\r\n disabledTooltip?: string\r\n isInAction?: boolean\r\n isLoading?: boolean\r\n}\r\n\r\nexport function ToolbarButton({\r\n item,\r\n disabledTooltip,\r\n isInAction: isInActionProp,\r\n isLoading,\r\n ...props\r\n}: PropsWithAs & ToolbarButtonProps) {\r\n const { theme, isStretched } = useToolbarContext()\r\n const isInAction = isInActionProp && item.iconAction !== undefined\r\n const buttonSettings = getButtonThemeSettings({\r\n theme,\r\n isStretched,\r\n isActive: props.active,\r\n isInAction: isInAction,\r\n })\r\n\r\n const getMainIcon = () => (\r\n \r\n )\r\n\r\n return (\r\n & ToolbarButtonProps)}\r\n appearance={props.appearance ?? 'square'}\r\n title={props.disabled && disabledTooltip ? disabledTooltip : (props.active && item.titleActive) || item.title}\r\n size={\r\n buttonSettings.size ??\r\n (theme === ToolbarTheme.chipTransparent || FinvizSettings.hasRedesignEnabled ? 'medium' : 'large')\r\n }\r\n >\r\n {isLoading ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n {props.children ??\r\n (isInAction ? (\r\n \r\n \r\n \r\n ) : (\r\n getMainIcon()\r\n ))}\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { Icon } from '../icon'\r\nimport { PopoverTrigger, useHoverPopover } from '../popover'\r\nimport { SelectOption } from '../select'\r\nimport { useSelect } from '../select/hooks'\r\nimport { NativeSelect } from '../select/native-select'\r\nimport { SelectList } from '../select/select-list'\r\nimport { useToolbarContext } from './hooks'\r\nimport { IToolbarItem, ToolbarTheme } from './interfaces'\r\nimport { ToolbarButton } from './toolbar-button'\r\n\r\nexport interface ToolbarGroupProps {\r\n /**\r\n * Main button item\r\n */\r\n defaultItem: IToolbarItem\r\n\r\n /**\r\n * Shows spinner instead of icon\r\n */\r\n isLoading?: boolean\r\n\r\n /**\r\n * Current selected item id\r\n */\r\n isActive: boolean\r\n\r\n /**\r\n * Should indicate some action in progress\r\n */\r\n isInAction?: boolean\r\n\r\n /**\r\n * Array of items\r\n */\r\n groupItems: IToolbarItem[]\r\n\r\n /**\r\n * Expand group button label\r\n */\r\n groupTitle?: string\r\n\r\n /**\r\n * On item select callback\r\n */\r\n onChange: (id: string, trigger: 'button' | 'select' | 'group') => void\r\n\r\n /**\r\n * Use native select for mobile devices\r\n *\r\n * @default true\r\n */\r\n useNativeSelect?: boolean\r\n\r\n /**\r\n * Is item disabled\r\n */\r\n disabled?: boolean\r\n\r\n /**\r\n * Tooltip message if item is disabled\r\n */\r\n disabledTooltip?: string\r\n}\r\n\r\nexport function ToolbarGroup({\r\n defaultItem,\r\n isActive,\r\n isLoading,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect = isMobile(),\r\n disabled,\r\n disabledTooltip,\r\n}: ToolbarGroupProps) {\r\n const { theme, isStretched } = useToolbarContext()\r\n const [selectedItem, setSelectedItem] = React.useState(defaultItem)\r\n const groupId = groupTitle?.replace(/\\s/g, '-').toLocaleLowerCase()\r\n const isAlternativeTheme = theme === ToolbarTheme.alternative\r\n const popoverState = useHoverPopover({\r\n placement: isAlternativeTheme && isStretched ? 'bottom' : 'right-start',\r\n })\r\n const select = useSelect(\r\n popoverState,\r\n selectedItem.id,\r\n groupItems?.map((i) => ({ value: i.id, label: i.title })) ?? [],\r\n (option) => {\r\n setSelectedItem(groupItems![groupItems!.findIndex((item) => item.id === option.value)])\r\n onChange(option.value, 'select')\r\n }\r\n )\r\n\r\n return (\r\n \r\n ) => {\r\n ev.preventDefault()\r\n ev.stopPropagation()\r\n onChange(selectedItem.id, 'group')\r\n }}\r\n >\r\n \r\n \r\n \r\n\r\n {useNativeSelect ? (\r\n ({ value: item.id, label: item.title }))}\r\n onChange={select.onItemChange}\r\n onClick={() => onChange(selectedItem.id, 'select')}\r\n />\r\n ) : (\r\n \r\n {groupItems.map((item) => (\r\n }\r\n data-testid={`toolbar-group-${groupId}-${item.id}`}\r\n >\r\n {item.title}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import { PartialBy } from '../../types'\r\nimport { ToolbarButton } from './toolbar-button'\r\nimport { ToolbarGroup, ToolbarGroupProps } from './toolbar-group'\r\n\r\nexport function ToolbarItem({\r\n defaultItem,\r\n isLoading,\r\n isActive,\r\n isInAction,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect,\r\n disabled,\r\n disabledTooltip,\r\n}: PartialBy) {\r\n const isItemActive = isActive && !disabled\r\n\r\n if (!!groupItems?.length) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n {\r\n onChange(defaultItem.id, 'button')\r\n }}\r\n />\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { useToolbarContext } from './hooks'\r\nimport { ToolbarDirection, ToolbarTheme } from './interfaces'\r\n\r\ntype ToolbarDividerProps = {\r\n className?: string\r\n}\r\n\r\nexport function ToolbarDivider({ className }: ToolbarDividerProps) {\r\n const { direction, theme } = useToolbarContext()\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { Box } from '../box'\r\nimport { Heading, Paragraph } from '../typography'\r\nimport { TourStep } from './types'\r\n\r\nexport function StepContent({ step }: { step: TourStep }) {\r\n return (\r\n \r\n {step.title && (\r\n \r\n {step.title}\r\n \r\n )}\r\n {step.body && {step.body}}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as ReactDOM from 'react-dom/server'\r\nimport Shepherd from 'shepherd.js'\r\n\r\nimport {\r\n BUTTON_BASE_CLASS,\r\n BUTTON_FOCUS_STYLES,\r\n ButtonPadding,\r\n ButtonRounding,\r\n ButtonSize,\r\n ButtonTheme,\r\n getButtonTheme,\r\n} from '../button'\r\nimport { StepContent } from './step-content'\r\nimport { TourDefinition, TourStep } from './types'\r\n\r\ntype ExcludesFalse = (x: T | false) => x is T\r\n\r\n/**\r\n * Async load Shepherd module when we need it\r\n */\r\nlet shepherdLibrary: typeof Shepherd\r\nexport async function loadShepherdLibrary(setLoading: (state: boolean) => void) {\r\n if (shepherdLibrary) return shepherdLibrary\r\n\r\n try {\r\n setLoading(true)\r\n const shepherdPromise = await import('shepherd.js')\r\n shepherdLibrary = shepherdPromise.default\r\n setLoading(false)\r\n\r\n return shepherdLibrary\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Get buttons based on index in the step array\r\n */\r\nconst buttonClasses = classnames(BUTTON_BASE_CLASS, BUTTON_FOCUS_STYLES, ButtonSize.regular, ButtonRounding.regular)\r\nfunction getStepButtons(tour: Shepherd.Tour, step: TourStep, index: number, arr: TourStep[]) {\r\n return [\r\n {\r\n action: tour.complete,\r\n classes: classnames(buttonClasses, 'mr-auto', getButtonTheme(ButtonTheme.light).button, ButtonPadding.regular),\r\n text: 'Exit',\r\n },\r\n index > 0 && {\r\n action: tour.back,\r\n classes: classnames(buttonClasses, getButtonTheme(ButtonTheme.light).button, ButtonPadding.regular),\r\n text: step.backButton ?? 'Back',\r\n },\r\n {\r\n classes: classnames(buttonClasses, getButtonTheme(ButtonTheme.blue).button, ButtonPadding.regular),\r\n action: tour.next,\r\n text: step.nextButton ?? (index === arr.length - 1 ? 'Finish' : 'Next'),\r\n },\r\n ].filter(Boolean as unknown as ExcludesFalse)\r\n}\r\n\r\n/**\r\n * Convert tour steps to Shepherd steps\r\n */\r\nexport function processSteps(tour: Shepherd.Tour, steps: TourStep[]): Shepherd.Step.StepOptions[] {\r\n return steps.map((step, index) => ({\r\n attachTo: { element: step.target, on: step.placement ?? 'auto' },\r\n classes: 'z-dialog',\r\n // Add offset\r\n popperOptions: {\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset: step.offset ?? [0, 10],\r\n },\r\n },\r\n ],\r\n },\r\n // Render the body\r\n text: ReactDOM.renderToString(React.createElement(StepContent, { step })),\r\n // Add buttons\r\n buttons: getStepButtons(tour, step, index, steps),\r\n modalOverlayOpeningRadius: step.overlayRadius ?? 8,\r\n modalOverlayOpeningPadding: step.overlayPadding ?? 0,\r\n }))\r\n}\r\n\r\nexport function getTourKey() {\r\n return `tour${window.location.pathname.replace(/[/.]/g, '-')}`\r\n}\r\n\r\nexport function getStepsForUser(tours: TourDefinition[]) {\r\n const lastFinishedTour = localStorage.getItem(getTourKey())\r\n const lastTourIndex = tours.findIndex((tour) => tour.id === lastFinishedTour)\r\n const allToursViewed = lastTourIndex === tours.length - 1 || tours.slice(lastTourIndex + 1).every((item) => item.skip)\r\n const toursToView = allToursViewed ? tours : tours.slice(lastTourIndex + 1)\r\n const userTour = toursToView.reduce(\r\n (acc, current) =>\r\n current.skip\r\n ? acc\r\n : {\r\n ...acc,\r\n id: current.id,\r\n steps: [...acc.steps, ...current.steps],\r\n },\r\n { id: 'tour', steps: [], initialTour: toursToView[0].id }\r\n )\r\n\r\n return { hasNewTours: !allToursViewed, tour: userTour }\r\n}\r\n\r\nexport function completeTour(key: string) {\r\n localStorage.setItem(getTourKey(), key)\r\n}\r\n","import * as React from 'react'\r\nimport Shepherd from 'shepherd.js'\r\n\r\nimport { TourDefinition } from './types'\r\nimport * as tourUtils from './utils'\r\n\r\nexport const DEFAULT_OPTIONS = {\r\n exitOnEsc: true,\r\n useModalOverlay: true,\r\n}\r\n\r\n/**\r\n * Hook which controls shepherd.js. The library is lazy-loaded when the tour starts\r\n *\r\n * Returns:\r\n * - `isLoading`: state of the library loading\r\n * - `currentTour`: tour object, only defined after library has loaded\r\n * - `startTour`: load the library and start tour. Returns `currentTour`\r\n * - `getStepsForUser`: returns a list of tour steps based on tours the user finished\r\n * - `completeTour`: persists the last finished tour to local storage\r\n */\r\nexport function useTour(options?: Shepherd.Tour.TourOptions) {\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [currentTour, setTour] = React.useState(null)\r\n\r\n /**\r\n * We’re loading shepherd asynchronously and want to have loading state so we use\r\n * AbortController to check if the component is still mounted.\r\n */\r\n const controller = React.useRef('AbortController' in window ? new AbortController() : undefined)\r\n const loadingSetter = React.useRef((state: boolean) => {\r\n if (controller.current?.signal.aborted) return\r\n\r\n setIsLoading(state)\r\n })\r\n // Cleanup effect to abort the controller\r\n React.useEffect(() => () => controller.current?.abort(), [])\r\n\r\n const startTour = React.useCallback(\r\n async (definition: TourDefinition, setComplete = true) => {\r\n const shepherdLibrary = await tourUtils.loadShepherdLibrary(loadingSetter.current)\r\n\r\n if (shepherdLibrary && !controller.current?.signal.aborted) {\r\n const tour = currentTour ?? new shepherdLibrary.Tour({ ...DEFAULT_OPTIONS, ...options })\r\n\r\n if (!currentTour) setTour(tour)\r\n\r\n // Reset the tour steps in case they were updated\r\n Array.from(tour.steps).forEach((step) => tour.removeStep(step.id))\r\n\r\n const processedSteps = tourUtils.processSteps(tour, definition.steps)\r\n tour.addSteps(processedSteps)\r\n\r\n if (setComplete) {\r\n tourUtils.completeTour(definition.id)\r\n }\r\n\r\n tour.start()\r\n window.gtag?.('event', 'tour-start', { event_label: definition.initialTour ?? definition.id })\r\n\r\n return tour\r\n }\r\n },\r\n [currentTour, options]\r\n )\r\n\r\n return {\r\n isLoading,\r\n currentTour,\r\n startTour,\r\n getStepsForUser: tourUtils.getStepsForUser,\r\n completeTour: tourUtils.completeTour,\r\n }\r\n}\r\n","import * as time from '../../app/header/time'\r\nimport * as button from './button'\r\nimport * as buttonGroup from './button-group'\r\nimport * as checkbox from './checkbox'\r\nimport * as colorPicker from './color-picker'\r\nimport * as contextMenu from './context-menu'\r\nimport * as copyToClipboard from './copy-to-clipboard'\r\nimport * as datePicker from './date-picker'\r\nimport * as delayed from './delayed'\r\nimport * as dialog from './dialog'\r\nimport * as dropdown from './dropdown'\r\nimport { DefaultErrorBoundary, ErrorView } from './error-view'\r\nimport * as grid from './grid'\r\nimport * as icon from './icon'\r\nimport * as innerState from './inner-state'\r\nimport * as input from './input'\r\nimport * as list from './list'\r\nimport * as notification from './notification'\r\nimport * as popover from './popover'\r\nimport * as range from './range'\r\nimport * as search from './search'\r\nimport * as select from './select'\r\nimport * as spinner from './spinner'\r\nimport * as timeframeBar from './timeframe-bar'\r\nimport * as toolbar from './toolbar'\r\nimport * as tooltip from './tooltip'\r\nimport * as tooltipInput from './tooltip-input'\r\nimport * as tour from './tour'\r\nimport * as typography from './typography'\r\n\r\nfunction exportAsGlobal(win: any, key: string) {\r\n if (!(key in win)) win[key] = {}\r\n\r\n win[key].components = {\r\n ...button,\r\n ...buttonGroup,\r\n ...checkbox,\r\n ...colorPicker,\r\n ...contextMenu,\r\n ...copyToClipboard,\r\n ...delayed,\r\n ...dialog,\r\n ...datePicker,\r\n ...dropdown,\r\n DefaultErrorBoundary,\r\n ErrorView,\r\n ...grid,\r\n ...icon,\r\n ...innerState,\r\n ...input,\r\n ...list,\r\n ...notification,\r\n ...popover,\r\n ...range,\r\n ...search,\r\n ...select,\r\n ...spinner,\r\n ...time,\r\n ...timeframeBar,\r\n ...toolbar,\r\n ...tooltip,\r\n ...tooltipInput,\r\n ...tour,\r\n ...typography,\r\n }\r\n}\r\n\r\nexportAsGlobal(window, 'FLibs')\r\n","export const portfolioWatchlistTableAsyncModule = {\r\n importFn: () => import(/* webpackChunkName: \"portfolio-watchlist-table\" */ './PortfolioWatchlistTable'),\r\n cacheKey: 'portfolio-watchlist-table',\r\n}\r\n","/**\r\n * Expose loader doesn’t map these to window.FLibs until we import them somewhere.\r\n * Until we figure out a better way, this file needs to be included on the charts page\r\n */\r\n// eslint-disable-next-line react/no-typos\r\nimport 'classnames'\r\nimport { max, nice, scaleLinear, scaleSymlog } from 'd3'\r\nimport {\r\n add,\r\n addBusinessDays,\r\n differenceInCalendarDays,\r\n eachDayOfInterval,\r\n endOfDay,\r\n intervalToDuration,\r\n isSameMonth,\r\n isSameWeek,\r\n isWeekend,\r\n isWithinInterval,\r\n startOfDay,\r\n startOfYear,\r\n sub,\r\n subMonths,\r\n subYears,\r\n} from 'date-fns'\r\nimport 'hammerjs'\r\n// eslint-disable-next-line react/no-typos\r\nimport 'react'\r\nimport 'react-dom'\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\nimport * as ReactRouterDOM from 'react-router-dom'\r\n\r\nimport { getFormattedDateString } from '../app/header/utils'\r\nimport { decodeQueryString, encodeQueryString } from '../app/queryString'\r\nimport { createAlertAsyncModule } from '../app/quote/create-alert/async-modules'\r\nimport { saveToPortfolioAsyncModule } from '../app/quote/save-to-portfolio/async-modules'\r\nimport logo from '../app/shared/assets/logo.png'\r\nimport logo_light from '../app/shared/assets/logo_light.png'\r\nimport { getHoverChartImg } from '../app/shared/hover-chart'\r\nimport { getSanitizedTicker } from '../app/shared/ticker-sanitizer'\r\nimport { formatDateToStringUS, getIsDrawingEnabledOnQuotePage } from '../app/shared/utils'\r\nimport './components/index'\r\nimport { portfolioWatchlistTableAsyncModule } from './components/portfolio/async-modules'\r\nimport { useSyncLocalStorage } from './hooks/use-sync-local-storage'\r\nimport { useTrackPageView } from './hooks/use-track-pageview'\r\nimport { useAsyncModule, withSuspense } from './services/async-modules-utils'\r\nimport { importWithRetry } from './services/import-with-retry'\r\nimport * as localStorage from './services/local-storage'\r\n\r\ndeclare const FLibs: any\r\n\r\nFLibs.saveToPortfolioAsyncModule = saveToPortfolioAsyncModule\r\nFLibs.createAlertAsyncModule = createAlertAsyncModule\r\nFLibs.ReactRouterDOM = ReactRouterDOM\r\nFLibs.ReactErrorBoundary = { ErrorBoundary }\r\nFLibs.getHoverChartImg = getHoverChartImg\r\nFLibs.getSanitizedTicker = getSanitizedTicker\r\nFLibs.decodeQueryString = decodeQueryString\r\nFLibs.encodeQueryString = encodeQueryString\r\nFLibs.getFormattedDateString = getFormattedDateString\r\nFLibs.formatDateToStringUS = formatDateToStringUS\r\nFLibs.useSyncLocalStorage = useSyncLocalStorage\r\nFLibs.useTrackPageView = useTrackPageView\r\nFLibs.getIsDrawingEnabledOnQuotePage = getIsDrawingEnabledOnQuotePage\r\nFLibs.localStorage = localStorage\r\nFLibs.portfolioWatchlistTableAsyncModule = portfolioWatchlistTableAsyncModule\r\nFLibs.useAsyncModule = useAsyncModule\r\nFLibs.withSuspense = withSuspense\r\nFLibs.importWithRetry = importWithRetry\r\nFLibs.d3 = { max, nice, scaleLinear, scaleSymlog }\r\nFLibs.DateFns = {\r\n add,\r\n addBusinessDays,\r\n differenceInCalendarDays,\r\n eachDayOfInterval,\r\n endOfDay,\r\n intervalToDuration,\r\n isSameMonth,\r\n isSameWeek,\r\n isWeekend,\r\n isWithinInterval,\r\n startOfDay,\r\n startOfYear,\r\n sub,\r\n subMonths,\r\n subYears,\r\n}\r\nFLibs.assets = {\r\n logo,\r\n logo_light,\r\n}\r\n","import * as Sentry from '@sentry/browser'\r\n\r\nimport { PortfolioDefinition } from '../modules/portfolio/types'\r\nimport { Instrument } from '../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 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 = () => controller.abort()\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 = '', instrument?: Instrument) {\r\n return apiRequest('/api/suggestions.ashx', { query: { input, instrument } }, 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","import * as React from 'react'\r\n\r\nimport { Notification, useNotification } from '../components/notification'\r\nimport { Paragraph } from '../components/typography'\r\nimport { useIsMounted } from '../hooks/use-is-mounted'\r\nimport { importWithRetry } from './import-with-retry'\r\n\r\nconst cache: any = {}\r\nconst errorsCache: any = {}\r\n\r\nenum ErrorSeverity {\r\n medium,\r\n high,\r\n}\r\n\r\nfunction defaultCaptureException(exception: Error, captureContext?: { extra: Record }) {\r\n if (process.env.NODE_ENV === 'development') {\r\n console.error(exception)\r\n } else {\r\n window.Sentry.captureException(exception, captureContext)\r\n }\r\n}\r\n\r\n/**\r\n * Hook used to asynchronously load a module\r\n *\r\n * Usage: [wiki](https://github.com/finvizhq/Finviz-Website/wiki/Loading-modules-asynchronously#useasyncmodule)\r\n */\r\nexport function useAsyncModule({\r\n importFn,\r\n onError,\r\n errorSeverity,\r\n cacheKey,\r\n captureException = defaultCaptureException,\r\n shouldLoadModule = false,\r\n isSuspenseMode = false as SuspenseMode,\r\n}: {\r\n importFn: () => Promise\r\n onError?: () => void\r\n cacheKey: string\r\n errorSeverity?: keyof typeof ErrorSeverity\r\n shouldLoadModule?: boolean\r\n captureException?: typeof defaultCaptureException\r\n isSuspenseMode?: SuspenseMode\r\n}) {\r\n const notificationContext = useNotification()\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [isError, setIsError] = React.useState(false)\r\n const getIsMounted = useIsMounted()\r\n\r\n const handleError = () => {\r\n onError?.()\r\n setIsError(true)\r\n\r\n if (errorSeverity === undefined) {\r\n return\r\n }\r\n\r\n if (ErrorSeverity[errorSeverity] === ErrorSeverity.high) {\r\n window.handleScriptNotLoaded()\r\n window.renderScriptNotLoaded()\r\n }\r\n\r\n if (ErrorSeverity[errorSeverity] === ErrorSeverity.medium) {\r\n notificationContext.show(\r\n \r\n \r\n One or more of the required application components couldn’t be loaded.
Please try to repeat the\r\n action or{' '}\r\n window.location.reload()}>\r\n refresh the page\r\n {' '}\r\n if the problem persists.\r\n
\r\n
\r\n )\r\n }\r\n }\r\n\r\n const loadModule = async () => {\r\n if (cache[cacheKey]) {\r\n return cache[cacheKey]\r\n }\r\n\r\n setIsLoading(true)\r\n\r\n try {\r\n cache[cacheKey] = await importWithRetry(importFn)\r\n } catch (error) {\r\n captureException(error as Error)\r\n handleError()\r\n } finally {\r\n if (getIsMounted()) {\r\n setIsLoading(false)\r\n }\r\n }\r\n\r\n return cache[cacheKey]\r\n }\r\n\r\n React.useEffect(() => {\r\n if (shouldLoadModule) {\r\n loadModule()\r\n }\r\n // We want to run it only on shouldLoadModule change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [shouldLoadModule])\r\n\r\n const cachedModule = cache[cacheKey]\r\n if (isSuspenseMode) {\r\n if (errorsCache[cacheKey]) throw errorsCache[cacheKey]\r\n if (!cachedModule) {\r\n throw importFn()\r\n .then((mod) => (cache[cacheKey] = mod))\r\n .catch((err) => {\r\n handleError()\r\n errorsCache[cacheKey] = err\r\n })\r\n }\r\n }\r\n\r\n return [cachedModule ?? null, { isLoading, loadModule, isError }] as [\r\n SuspenseMode extends true ? T : T | null,\r\n { isLoading: boolean; loadModule: () => Promise; isError: boolean },\r\n ]\r\n}\r\n\r\n/**\r\n * HOC which wraps component in React.Suspense\r\n *\r\n * Usage: [wiki](https://github.com/finvizhq/Finviz-Website/wiki/Loading-modules-asynchronously#withsuspense)\r\n */\r\nexport function withSuspense

>(\r\n Component: React.ComponentType

,\r\n fallback: React.ReactNode = null\r\n) {\r\n return function WrappedComponent(props: P) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n","const NUM_OF_RETRIES = 3\r\n\r\nexport function importWithRetry(importFn: () => Promise, retries = 0) {\r\n const result = importFn().catch(async (err) => {\r\n if (retries > NUM_OF_RETRIES) {\r\n throw err\r\n }\r\n\r\n await new Promise((r) => setTimeout(r, 1000 * retries))\r\n\r\n return importWithRetry(importFn, retries + 1)\r\n }) as Promise\r\n\r\n return result\r\n}\r\n","import { EventEmitter } from 'events'\r\nimport * as React from 'react'\r\n\r\nlet emitter: EventEmitter | undefined\r\n\r\n/**\r\n * Get the emitter which is used to sync components across the page, subscibe to\r\n * changes and attach event which handles changes across windows\r\n */\r\nexport function subscribeToChanges(\r\n key: string,\r\n defaultValue: ValueType,\r\n changeCallback?: (value: React.SetStateAction) => void\r\n) {\r\n if (!emitter) emitter = new EventEmitter()\r\n\r\n const onChange = (value: React.SetStateAction) => {\r\n const newValue = value ?? getValue(key, defaultValue)\r\n setValue(key, newValue, defaultValue, false)\r\n changeCallback?.(newValue)\r\n }\r\n\r\n const onStorageChange = (ev: StorageEvent) => {\r\n if (ev.key === key) {\r\n try {\r\n const value = ev.newValue ? JSON.parse(ev.newValue) : null\r\n onChange(value ?? defaultValue)\r\n } catch {\r\n onChange(defaultValue)\r\n }\r\n }\r\n }\r\n\r\n emitter.addListener(key, onChange)\r\n window.addEventListener('storage', onStorageChange)\r\n\r\n return {\r\n emitter,\r\n unsubscribe: () => {\r\n emitter?.removeListener(key, onChange)\r\n window.removeEventListener('storage', onStorageChange)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * Get value from local storage or fall back to `defaultValue`\r\n */\r\nexport function getValue(key: string, defaultValue: ValueType): ValueType {\r\n try {\r\n const value = localStorage.getItem(key)\r\n const parsedValue = value ? JSON.parse(value) : null\r\n return parsedValue ?? defaultValue\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\n/**\r\n * Set value to local storage. Optionally emits the change to all other components\r\n * which are subscribed with the same `key`\r\n */\r\nexport function setValue(\r\n key: string,\r\n valueGetter: React.SetStateAction,\r\n defaultValue: ValueType,\r\n emit = true\r\n) {\r\n try {\r\n const state = getValue(key, defaultValue)\r\n const valueToStore = valueGetter instanceof Function ? valueGetter(state) : valueGetter\r\n\r\n localStorage.setItem(key, JSON.stringify(valueToStore))\r\n if (emit) emitter?.emit(key, valueToStore)\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Removes value from local storage. Optionally emits the change to all other components\r\n * which are subscribed with the same `key`\r\n */\r\nexport function removeValue(key: string, emit = true) {\r\n try {\r\n localStorage.removeItem(key)\r\n if (emit) emitter?.emit(key, undefined)\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Helper function to migrate old value type to new one (eg. boolean to object)\r\n */\r\nexport function migrateValue(\r\n key: string,\r\n /**\r\n * The migrate function might get called multiple times on the page, so `oldValue` in the callback\r\n * can actually be the already migrated value. Make sure to add a condition to only migrate once.\r\n */\r\n transformValue: NewValue | ((oldValue: PrevValue | NewValue) => NewValue),\r\n defaultValue: NewValue\r\n) {\r\n try {\r\n const oldValue = getValue(key, undefined)\r\n if (typeof oldValue === 'undefined') return\r\n const migratedValue = transformValue instanceof Function ? transformValue(oldValue) : transformValue\r\n setValue(key, migratedValue, defaultValue, false) // don’t emit to other components\r\n } catch {}\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","import isPlainObject from 'lodash.isplainobject'\r\nimport { ComponentType, LazyExoticComponent, lazy } from 'react'\r\nimport { ShouldRevalidateFunction } 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 { 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 (e) {\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 hasDarkModeFeature() {\r\n const ff = getCookie('featureFlags')\r\n return ff.includes('dark:1')\r\n}\r\n\r\nexport function hasRedesignFeature() {\r\n const ff = getCookie('featureFlags')\r\n return ff.includes('redesign:1')\r\n}\r\n\r\nexport function isRedesignFeatureEnabled() {\r\n return hasRedesignFeature() || hasDarkModeFeature()\r\n}\r\n\r\nexport function isDarkModeFeatureEnabled() {\r\n const theme = getCookie('chartsTheme')\r\n return isRedesignFeatureEnabled() && theme.includes('dark')\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 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 = '-' }: Partial = {}\r\n) {\r\n let num = value\r\n if (num === undefined || num === null || !Number.isFinite(num)) return defaultValue\r\n\r\n let suffix = ''\r\n if (num >= 1e9) {\r\n num /= 1e9\r\n suffix = 'B'\r\n } else if (num >= 1e6) {\r\n num /= 1e6\r\n suffix = 'M'\r\n } else if (num >= 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\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"],"names":["MarketBadgeType","getMarketBadgeText","type","_date","Open","label","Closed","Premarket","Aftermarket","getMarketBadgeType","time","hasUserPremium","isHoliday","isPremarket","isAftermarket","None","MarketBadge","_ref","badge","className","_jsx","classnames","includes","TimeBreakpointMode","BREAKPOINTS","minWidth","Infinity","marketBadgeText","timeFormat","getTimeState","fixedTime","arguments","length","undefined","FinvizSettings","getDate","TooltipBadge","props","state","useTooltipState","placement","_jsxs","_Fragment","children","TooltipTrigger","Tooltip","Heading","level","StaticBadge","findMatchingBreakpoint","compareWidth","breakpoints","filter","breakpoint","pop","getCurrentWidth","mode","element","window","innerWidth","clientWidth","Time","breakpointMode","ResizeObserver","useResizeObserver","rootRef","React","setState","currentBreakpoint","setBreakpoint","interval","setInterval","clearInterval","current","currentWidth","handleResize","throttle","foundBreakpoint","observer","entries","requestAnimationFrame","Array","isArray","observe","addEventListener","disconnect","removeEventListener","ref","getFormattedDateString","seed","date","Date","dateAsNY","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","isDst","dayNumber","monthIndex","getMonth","previousSunday","getDay","getIsDstInNy","setUTCHours","getWeekDay","toLocaleDateString","weekday","uppercase","name","month","toUpperCase","toString","padStart","getTime","toLocaleString","hour","minute","hour12","TimeFormat","format","long","getFullYear","short","dateOnly","timeOnly","formatDate","value","inputOrOutputFormat","outputFormat","dateFns","isPremium","dayOfWeek","min","getMinutes","hours","getHours","HOLIDAY_DATES","test","day","getHoliday","find","holiday","decodeQueryString","search","location","vars","substring","split","obj","forEach","pair","delimiterPos","indexOf","key","decodeURIComponent","encodeQueryString","values","whitelistedValues","Object","keys","reduce","prev","encodeURIComponent","createAlertAsyncModule","importFn","cacheKey","saveToPortfolioAsyncModule","SpecificChartFunctionality","getStaticChartConfig","width","height","ticker","timeframe","paneElements","specificChartFunctionality","default","colorsOverride","theme","colors","getCustomColorsFromCookies","refreshData","layout","barWidth","barMargin","scrollable","editable","charts","scale","leftOffset","instrument","stretch","panes","elements","JSON","parse","getParsedCookies","cookieName","parseCookies","document","cookie","map","cookieString","acc","v","trim","getCookie","re","RegExp","replace","DEFAULT_OVERLAYS","getHoverChartUrl","escaped","hoverCharts","stock","dateRange","documentElement","classList","contains","overlays","patterns","query","cs","t","tf","ct","r","tm","imgUrl","nodeChartsDomain","timeframeToDeprecatedTimeframe","timeframeString","getOldChartsUrl","oldPeriod","Instrument","cleanTicker","toLowerCase","getHoverChartDimensions","getReferrerPolicy","getHoverChartImg","useOldCharts","hasForexFuturesCryptoNodeCharts","chartSize","referrerPolicy","url","srcSet","getSrcSet","srcsetString","img","hasUserRetinaNodeCharts","matchesAndroid","navigator","userAgent","match","matchesWebOS","matchesIPhone","matchesiPad","matchesIPod","matchesBlackBerry","matchesWindowsPhone","matchesIOSLike","maxTouchPoints","isMobileDevice","isMobile","isIphone","isIpad","isSafariDesktop","isIos","getSanitizedSingleTicker","rawTicker","specialTickers","x","join","getSanitizedTicker","isMulti","AdsProvider","getAdsProvider","adsProvider","Freestar","InvestingChannel","trackPageView","pathname","freestarPageView","gtag","freestar","queue","push","trackPageview","formatDateToStringUS","year","DRAWING_QUOTE_PAGE_COOKIE_NAME","getIsDrawingEnabledOnQuotePage","parseInitData","elementId","initDataElement","getElementById","textContent","e","Sentry","captureException","getSidebarFromCookie","chartsUrl","sidebar","BoxRounding","BoxTheme","Box","rounding","GroupTheme","ButtonGroup","hasDivider","hasBorder","childComponent","buttonRounding","ButtonRounding","groupTheme","dark","wrapper","divider","getGroupTheme","role","border","child","index","Button","Boolean","BUTTON_DEFAULT_ELEMENT","BUTTON_BASE_CLASS","BUTTON_SQUARE_BASE_CLASS","BUTTON_FOCUS_STYLES","ButtonSize","ButtonPadding","ButtonAlign","ButtonSquareSize","ButtonTheme","getButtonTheme","active","light","button","lightTransparent","blue","violet","blueHover","red","headerItem","icon","menuItem","menuItemDark","opacity","outline","chip","chipTransparent","ButtonComponent","as","asComponent","size","focusRing","appearance","align","padding","contentClass","leftContent","rightContent","isSquare","buttonTheme","buttonPadding","buttonSize","hasIcons","isValidIconName","Icon","left","center","none","small","regular","medium","large","CheckboxComponent","isSmall","checked","defaultChecked","disabled","Checkbox","forwardRef","clamp","num","max","isTouch","event","getRelativePosition","node","rect","getBoundingClientRect","pointer","touches","pageX","pageXOffset","top","pageY","pageYOffset","preventDefaultMove","preventDefault","DraggablePickerComponent","onMove","onKey","container","useRef","hasTouched","isDragging","setDragging","useState","isValid","handleMove","useCallback","buttons","handleMoveStart","_ref2","nativeEvent","handleKeyDown","keyCode","which","handleMoveEnd","toggleDocumentEvents","toggleEvent","useLayoutEffect","onTouchStart","onMouseDown","onKeyDown","tabIndex","DraggablePicker","memo","Pointer","color","style","backgroundColor","hexStringToRGBA","hexString","hexColor","removeHashSymbol","g","b","a","Number","Math","round","hexStringToHSVA","rgbaToHSVA","hexStringToHSLA","rgbaToHSLA","alphaToHex","alpha","rgbaToHexString","hsvaToHEXString","rgbaColor","hsvaToRGBA","hslaToHexString","hslaToRGBA","c","h","s","f","abs","l","n","k","rgbaToRGBAString","rgbaStringToObject","colorParts","exec","green","slice","String","parseInt","parseFloat","hslaToHSLAString","strColor","isValidColor","isRgb","startsWith","Option","convertColorToHEX","getIsRgb","isAlphaAllowed","rgbKeys","some","getHSVAFromColor","stringifyHSVAColor","output","canSelectAlpha","getLumaFromRGBA","getIsColorTooLightOrTransparent","getHEXWithSpecificAplha","getRGBAValueFromValidColorString","Alpha","onChange","changeLightness","pos","gradientPreview","useMemo","backgroundImage","DEFAULT_COLORS","title","ColorPalette","lowerCaseColor","colorObj","isSelected","onClick","HueSaturation","position","getPositionFromHSLA","colorPreview","changeSaturation","Lightness","ColorPreview","isTooLight","PickerInput","inputClass","hasColorPreview","colorInput","setColorInput","colorUtil","isRgba","useEffect","handleColorInputChange","currentTarget","colorValue","Input","ColorPicker","canSelectCustom","onPaletteItemClick","cachedColor","hsvaColor","setColor","currentColor","newColor","onChangeCallback","stringColor","onSetCustomCodeClick","prompt","alert","_hex","orignalColor","InputColorPicker","inputDataTestId","popoverState","usePopoverState","PopoverTrigger","Popover","focusOnShow","hide","MultiColorPicker","colorInputLabel","ColorTabButton","ButtonColorPicker","_ref3","buttonPickerDataTestId","hideOnClickOutside","onOverlayClick","isMultiPicker","activeColorIndex","setActiveColorIndex","handleColorChange","originalColor","colorObject","visible","_ref4","_ref5","COMPONENT_ANIMATION_DURATION","CopyToClipboard","text","bottomLeftContent","isCopied","setIsCopied","handleCopyToClipboard","copy","timeout","resetTimer","clearTimeout","setTimeout","Textarea","readOnly","select","DatePickerComponent","StatelessDatePicker","zIndex","isFullyClosed","getExtendedDialogState","triggerProps","ZIndexContext","fallback","Spinner","locale","minDetail","ev","DatePicker","popover","Delayed","delay","throwOnTimeout","delayComponent","timeoutComponent","setVisible","hasTimedOut","setHasTimedOut","visibilityTimeout","failedTimeout","Error","useZIndex","useDialogState","settings","Reakit","animated","DialogDragContext","enabled","handleRef","boxPosition","y","resetBoxPosition","setBoxPosition","useDrag","dragging","handleElement","boxPositionRef","dragDiff","scrollX","scrollY","onMouseUp","onMouseMove","body","DialogBox","onUnmount","wrapperRef","setElementRef","elementHeight","useElementMeasure","dialogDrag","onResize","bottom","right","clientHeight","prevPosition","dialogBoxStyle","transform","DialogOverlay","isFullyOpened","animating","DialogType","DIALOG_BACKDROP_WIDTH_CSS_VAR","setProperty","Dialog","finalFocusRef","onHide","hideOnEsc","isDraggable","isBackdropDisabled","overlayClass","ariaLabel","viewport","useVisualViewport","onScroll","screenSize","screen","innerHeight","dialogStyle","unscaledWidth","unscaledHeight","minHeight","willChange","DialogWrapper","modal","Portal","unstable_finalFocusRef","onTransitionEnd","onAnimationEnd","innerProps","drawer","getFlexAlignClasses","ChildPosition","Provider","DialogBody","hasPadding","scrollDivRef","scrollBox","disableBodyScroll","enableBodyScroll","ConfirmationDialog","Paragraph","actions","DialogTrigger","dropdownContext","DropdownContext","root","DialogFooter","DialogHeader","onCloseClick","hasHorizontalPadding","hasMinHeight","asHeading","useDropdownState","context","loop","unstable_virtual","unstable_offset","DropdownComponent","isNested","isStatic","dropdownState","ContainerElement","buttonProps","parent","orientation","Dropdown","NestedDropdownWrapper","parentState","itemProps","DropdownBar","DropdownItemComponent","subtitle","closeOnClick","hasSubmenu","iconTheme","DropdownItem","DropdownSeparator","MoreButtonDropdown","ErrorView","message","showContact","showRefresh","href","link","origin","DefaultErrorBoundary","error","RouterErrorElement","useRouteError","Component","iconList","add","SVG","viewBox","d","arrowDownShort","arrowForward","arrowUpShort","briefcase","fillRule","calendar","candleBarBasic","candleBarHeikinAshi","candleBarHollow","caretDown","caretLeft","caretRight","caretUp","caretVertical","chartBar","chartBubble","cx","cy","chartPie","chartTable","chartTreemap","chevronDown","chevronRight","close","darkMode","diamondOutlined","done","drag","draw","clipRule","drawingActionDelete","drawingSettingAutosaveOff","drawingSettingAutosaveOn","drawingSettingAutosaveSaving","drawingSettingDrawingMode","drawingSettingDrawingModeActive","drawingSettingHide","drawingSettingLock","drawingSettingPreserveDrawings","drawingSettingPreserveDrawingsActive","drawingSettingShow","drawingSettingUnlock","empty","exitFullscreen","flash","fullscreen","gesture","gift","hamburger","help","idea","ideaLoad","ideaSave","info","layout1h1v","layout1h2v","layout1h3v","layout1l2r","layout1t2b","layout2h1v","layout2h2v","layout3h1v","layout3h2v","lightMode","lineChartType","lock","menuClose","minus","more","note","ohlcChartType","palette","profile","publish","refresh","remove","restore","settingsWheel","share","signOut","star","starOutlined","switchHorizontal","switchVertical","tabKey","template","toolArrow","toolBrush","toolCallout","toolCurve","toolElliottWave","toolEllipse","toolExpand","toolFibonacci","toolLine","fill","stroke","toolMeasure","toolMidLineH","toolMidLineV","toolMouse","toolPitchfork","toolPolygon","toolPosition","toolRect","toolRectRotated","toolText","toolTriangle","toolXABCD","trashCan","trendingDown","trendingUp","triangle","triangleOutlineDown","triangleOutlineUp","warning","xmlns","InputTheme","InputRounding","InputSize","getInputTheme","isError","input","navigationBar","InputComponent","isHorizontalLabel","labelClassName","showNumberStepper","caption","isMobileStyleEnabled","inputTheme","isLeftStringIcon","isRightStringIcon","inputSize","commonSideContentClassnames","Label","isHorizontal","InputCaption","TextareaComponent","textareaTheme","ListContext","useListState","options","ListItem","activeTheme","onSelectItem","onKeyPress","closeOnSelect","id","List","selectedIndex","includeBaseStyles","prevSelected","items","move","closeParent","findIndex","item","NotificationPosition","NotificationContext","show","useNotification","NotificationWrapper","notification","setNotification","setViewport","getVisualViewport","visualViewport","positionClass","WrapperComponent","inline","unstable_autoFocusOnShow","withNotificationContext","WrappedComponent","displayName","WithNotificationContext","notificationContext","Notification","closeText","timeoutInMs","timeoutId","focusOnHide","hasArrow","hasBackdrop","popoverWrapperStyle","popoverMaxHeight","MAX_SAFE_INTEGER","hasViewportHeightLimit","hasButtonWidthLimit","useWindowSize","isWatching","buttonElement","unstable_referenceRef","maxHeightStyle","usePopoverMaxHeight","maxHeightLimit","offsets","buttonRect","popoverId","getAttribute","popoverWrapper","unstable_autoFocusOnHide","TooltipArrow","DEFAULT_OFFSET","useHoverPopover","showTimeout","hideTimeout","clearTimeouts","showPopover","hidePopover","onMouseOver","onMouseOut","ComboBoxItem","selected","currentId","ComboBox","inputProps","popoverProps","inputTestId","autoFocus","focus","preventScroll","inputValue","INSTRUMENT_CATEGORIES","Centered","SearchError","resetErrorBoundary","Highlight","highlight","processedText","before","after","SearchItem","chartIndex","company","exchange","getRedirectForTicker","tickerRaw","redirectLink","getInstrumentForTicker","quoteSearchExt","SearchList","data","isLoading","useQuery","searchApiRequest","keepPreviousData","cacheTime","staleTime","setAnimated","isShowAllVisible","isSearchItemLink","onTickerSelected","setInputValue","currentValue","Search","isSearchIcon","reset","useQueryErrorResetBoundary","minValueLength","defaultValue","defaultPlacement","listState","category","setCategory","changeCategory","first","onInputKeyDown","stopPropagation","placeholder","autoComplete","autoCorrect","autoCapitalize","maxLength","onBlur","popoverClass","isMatchInputAndBoxWidth","maxWidth","allowCategorySwitching","ErrorBoundary","FallbackComponent","onReset","resetKeys","getSelectedItemIndex","useSelect","setSelectedIndex","closePopover","newIndex","onItemChange","selectedItem","reloadDocument","newUrl","URL","hash","SelectButton","isPopoverTrigger","themeProps","getButtonProps","Select","popoverStateSettings","onIsInteractingChange","StatelessSelect","labelTitleClassName","buttonContent","listProps","isNativeMobileSelect","isAlwaysNativeSelect","hasPopoverViewportHeightLimit","hasPopoverButtonWidthLimit","showMobileSelect","isNativeSelect","NativeSelectComponent","useInRouterContext","NativeSelectInRouterContext","NativeSelect","titleClassName","relative","SelectList","SelectPlaceholder","SelectOption","SelectWithTooltip","tooltipLabel","tooltip","unstable_timeout","isTooltipIgnored","visibilityState","activeElement","onSelectFocus","onSelectBlur","onFocus","isBlurAfterClick","showPlaceholder","handleNativeSelectChange","itemIndex","target","hidden","i","navigate","useNavigate","onChangeWithNavigate","isProgressBar","progress","radius","strokeWidth","circleXY","circumference","PI","strokeDasharray","strokeDashoffset","strokeLinecap","DATERANGE_TOOLTIP","DateRangeSelect","dateRangeGroups","selectedDateRange","onDateRangeSelect","flatDateRanges","flatMap","dateRanges","selectWithTooltipListProps","withReload","linkProps","Link","to","_createElement","LabelWithDelayedSpinner","invisible","TIMEFRAME_TOOLTIP","TimeframeSelect","timeFrameGroups","selectedTimeframe","favoriteTimeframes","isCompactView","isCompactOnly","onTimeframeSelect","onFavoriteTimeframeToggle","isFavoritesEnabled","flatTimeframes","timeframes","getSelectedTimeframeLabel","selectedTimeframeItem","labelShort","groupIndex","isIconButtonActive","classNames","getTimeframeChipElementId","getButtonPadding","TimeframeBar","compactViewMaxBreakpointPx","loadingTimeframe","isDateRangeAvailable","containerElement","isScrollIntoViewEnabled","isTimeframeSelectEnabled","scrollWrapperElement","setScrollWrapperElement","timeframeButtonsScrollLocation","setTimeframeButtonsScrollLocation","isOnLeftEdge","isOnRightEdge","elementWidth","timeframesInExpandedPanel","checkTimeframeWrapperScrollPosition","scrollLeft","ceil","offsetWidth","scrollWidth","timeframeElement","offsetLeft","scrollTo","onWheel","absDx","deltaX","deltaY","generateTimeframeGroups","premiumTimeframes","TIMEFRAME","labelPageTitle","freeTimeframes","getTimeframeGroups","generateDateRangeGroups","isStock","DateRangeType","getDateRangeGroups","customRange","isCustomAvailable","rangeGroups","dateRangePrefix","DATE_RANGE_PREFIX_DELMITER","CustomDateRangePrefixEnum","CUSTOM_DATE_RANGE","getDateRangeGroupsWithHref","generatePath","dateRangeGroup","FREE_PERIODS_STOCK","generatePathForTimeframeDateRange","utmCampaign","dateRangeQueryKey","p","utm_source","utm_medium","utm_campaign","timeframeUtm","daterangeUtm","getParsedDateRange","parseCustomDateRangeUrlParam","anchorDate","dateRangeValue","Range","dateFromString","dateToString","dateFrom","dateTo","start","isNaN","end","Prev","years","months","days","getCustomStartEndDateRangeUrlParam","startString","endString","getPrevPeriodDateRangeUrlParam","getTimeframeForDateRangeType","_ref6","getTimeframeFromDateRange","_ref7","dateRangeTimeframe","startNyTime","startToReferenceDateNumOfDays","rangeNumOfDays","DATE_PICKER_MIN_DATE","YEARS_MAX_VALUE","TAB_BUTTON_COMMON_PROPS","CustomRangeType","DEFAULT_MANUAL_RANGE","kind","Manual","DEFAULT_START_END_RANGE","StartEnd","CustomDateRange","dialogState","onDialogSubmit","isFetching","selectedTab","setSelectedTab","getDefaultSelectedTab","getDefaultSelectedDate","newValue","prevState","newState","newEnd","isAbsolute","fromDate","toDate","manualRange","onSubmit","isValidStartEndRangeState","isValidManualRangeState","minDate","useCustomDateRangeDialog","pathGenerator","shouldReloadOnNavigate","customDateRangeDialogState","handleDateRangeSelect","callback","path","getDateRangeTimeframe","newTimeframe","TIMEFRAME_FAVORITE_DEFAULTS","TIMEFRAME_FAVORITE_DEFAULTS_FREE","intraday","LOCAL_STORAGE_KEY","useFavoriteTimeframes","useSyncLocalStorage","toggleFavoriteTimeframe","TooltipInputWrapper","tooltipContent","tooltipColor","tooltipSettings","isHideOnClickOutside","TooltipInputComponent","isInteractive","TooltipInput","TooltipBox","TooltipColor","tooltipProps","onMouseEnter","onMouseLeave","HTMLElement","blur","transformMap","auto","positionMain","arrowColor","getHeadingElement","CRYPTO_TICKERS","elementOverride","getIsMounted","useIsMounted","elementRef","setElementWidth","setElementHeight","offsetHeight","measureElement","newElementWidth","newElementHeight","measureElementDebounced","debounce","resizeObserver","cancel","isMountedRef","MAX_HEIGHT_PROPERTY","POPOVER_HEIGHT_LIMIT_STYLE","maxHeight","offsetY","elementMaxHeight","controller","AbortController","setResizeObserver","loadResizeObserverPolyfill","then","polyfill","signal","aborted","abort","storageKey","storage","subscription","unsubscribe","valueGetter","useTrackPageView","trackInitial","trackAutomatically","initialRender","useLocation","handleTrackView","tracking","throttleWaitInMs","setSize","offsetTop","handleChange","DEFAULT_OFFSETS","ContextMenu","menuMaxHeight","popperElement","setPopperElement","virtualRef","toJSON","getVirtualRef","hasBeenOpen","styles","attributes","usePopper","modifiers","offset","popper","ContextMenuDropdown","ContextMenuInner","innerState","assign","menu_option","ChartGridCell","gridArea","GridLayout","columns","rows","gridTemplateColumns","gridTemplateRows","ChartGrid","defaultValueAccessor","InnerState","valueKey","changeKey","valueAccessor","RangeSize","RangeSlider","step","inputClassName","hasTrack","setHasTrack","trackRef","thumbRef","thumbLeft","track","thumb","valuePercent","trackBox","thumbBox","ToolbarTheme","ToolbarDirection","ToolbarContext","direction","vertical","isWrapped","isStretched","useToolbarContext","Toolbar","toolbarRef","contextProviderValue","alternative","horizontal","toolbarSettings","hasRedesignEnabled","getToolbarSettings","forceReflow","originalWidth","ToolbarButton","disabledTooltip","isInAction","isInActionProp","iconAction","buttonSettings","isActive","includeRedesign","grow","getButtonThemeSettings","getMainIcon","iconActive","titleActive","ToolbarGroup","defaultItem","groupItems","groupTitle","useNativeSelect","setSelectedItem","groupId","toLocaleLowerCase","isAlternativeTheme","option","ToolbarItem","isItemActive","ToolbarDivider","StepContent","shepherdLibrary","async","loadShepherdLibrary","setLoading","shepherdPromise","buttonClasses","getStepButtons","tour","arr","action","complete","classes","back","backButton","next","nextButton","processSteps","steps","attachTo","on","popperOptions","ReactDOM","modalOverlayOpeningRadius","overlayRadius","modalOverlayOpeningPadding","overlayPadding","getTourKey","getStepsForUser","tours","lastFinishedTour","localStorage","getItem","lastTourIndex","allToursViewed","every","skip","toursToView","hasNewTours","initialTour","completeTour","setItem","DEFAULT_OPTIONS","exitOnEsc","useModalOverlay","useTour","setIsLoading","currentTour","setTour","loadingSetter","startTour","definition","setComplete","tourUtils","Tour","from","removeStep","processedSteps","addSteps","event_label","win","components","buttonGroup","checkbox","colorPicker","contextMenu","copyToClipboard","delayed","dialog","datePicker","dropdown","grid","list","range","spinner","timeframeBar","toolbar","tooltipInput","typography","portfolioWatchlistTableAsyncModule","FLibs","ReactRouterDOM","ReactErrorBoundary","useAsyncModule","withSuspense","importWithRetry","d3","nice","scaleLinear","scaleSymlog","DateFns","addBusinessDays","differenceInCalendarDays","eachDayOfInterval","endOfDay","intervalToDuration","isSameMonth","isSameWeek","isWeekend","isWithinInterval","startOfDay","startOfYear","sub","subMonths","subYears","assets","logo","logo_light","ContentType","parseResponseForContentType","response","contentType","ApplicationJson","ApplicationJsonUTF","FormUrlEncoded","ThrowableError","status","isServerError","extra","constructor","super","this","apiRequest","headers","throwOnAllErrors","requestUrl","URLSearchParams","requestOptions","request","fetch","cancelableRequest","textResponse","responseContentType","get","Html","parsedResponse","ok","statusText","rayId","catch","scope","setContext","portfoliosRequest","fields","lastCloseRequest","portfolioLimitRequest","portfolioId","pid","cache","errorsCache","ErrorSeverity","defaultCaptureException","exception","captureContext","onError","errorSeverity","shouldLoadModule","isSuspenseMode","setIsError","handleError","high","handleScriptNotLoaded","renderScriptNotLoaded","reload","loadModule","cachedModule","mod","err","retries","result","Promise","emitter","subscribeToChanges","changeCallback","EventEmitter","getValue","setValue","onStorageChange","addListener","removeListener","emit","valueToStore","Function","stringify","removeValue","removeItem","migrateValue","transformValue","oldValue","compilePath","params","pathToRegexp","toHome","toNews","toScreener","toCharts","toGroups","toPortfolio","toInsider","toElite","toSearch","validate","toQuote","toContact","toAlerts","toHelp","toAccount","toLogin","toLogout","toMaps","toBubbles","toFutures","toFuturesPerf","toFuturesCharts","toFuturesChartDetail","toForex","toForexPerf","toForexCharts","toForexChartDetail","toCrypto","toCryptoPerf","toCryptoCharts","toCryptoChartDetail","toBacktests","toBacktestCreate","toBacktestDetail","backtestId","toBacktestPresets","lazyLoadComponent","chunkName","load","querySelector","componentLoader","lazy","cleanedTicker","resizeObserverPolyfill","getIsBrave","brave","isBrave","topLeft","bottomLeft","leftCenter","topCenter","bottomCenter","topRight","bottomRight","rightCenter","intlCache","getIntl","fractions","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","shortFormatNumber","showPlusSign","isFinite","suffix","formatted","formatNumber","fixedValue","toFixed","prefix","sortByColumn","valueA","valueB","localeCompare","sortNullAsLast","ignoreNullForComparison","moveItemInArray","sourceIndex","destinationIndex","removed","splice","getUuid","crypto","randomUUID","getRandomValues","Uint8Array","revalidateOnQueryChange","args","prevParams","currentUrl","searchParams","nextParams","nextUrl","requiredChanged","otherChanged","defaultShouldRevalidate","parseRouteInitData","removeElement","initialData","parsedData"],"sourceRoot":""}