{"version":3,"file":"libs_init.d943e8d6.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/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/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/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/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/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-right.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/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/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/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/minus.tsx","webpack://@finviz/website/./js/main/components/icon/close.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/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/settings-wheel.tsx","webpack://@finviz/website/./js/main/components/icon/gesture.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/share.tsx","webpack://@finviz/website/./js/main/components/icon/sign-out.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/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/palette.tsx","webpack://@finviz/website/./js/main/components/icon/arrow-forward.tsx","webpack://@finviz/website/./js/main/components/icon/trending-up.tsx","webpack://@finviz/website/./js/main/components/icon/trending-down.tsx","webpack://@finviz/website/./js/main/components/icon/trash-can.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/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/notification.tsx","webpack://@finviz/website/./js/main/components/notification/with-notification-context.tsx","webpack://@finviz/website/./js/main/components/popover/popover.tsx","webpack://@finviz/website/./js/main/hooks/use-window-size.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/util.ts","webpack://@finviz/website/./js/main/components/search/search-item.tsx","webpack://@finviz/website/./js/main/components/search/search-list.tsx","webpack://@finviz/website/./js/main/components/search/search.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/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-is-mounted.ts","webpack://@finviz/website/./js/main/hooks/use-element-measure.ts","webpack://@finviz/website/./js/main/hooks/use-resize-observer.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/tooltip-input.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/libs-init.ts","webpack://@finviz/website/./js/main/hooks/use-sync-local-storage.ts","webpack://@finviz/website/./js/main/services/api.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.ts"],"sourcesContent":["import classnames from 'classnames'\r\n\r\nimport { isAftermarket, isHoliday, isPremarket } from './utils'\r\n\r\nexport enum MarketBadgeType {\r\n None,\r\n Open,\r\n Closed,\r\n Premarket,\r\n Aftermarket,\r\n}\r\n\r\nexport function getMarketBadgeText(type: MarketBadgeType, _date?: Date) {\r\n switch (type) {\r\n case MarketBadgeType.Open:\r\n return {\r\n label: 'Markets Open',\r\n }\r\n case MarketBadgeType.Closed:\r\n // const holiday = getHoliday(date)\r\n\r\n return {\r\n label: 'Markets Closed',\r\n // description: holiday && (\r\n // <>\r\n // The markets observe U.S. holidays and are closed on\r\n //
\r\n // {holiday.label}\r\n // \r\n // ),\r\n }\r\n case MarketBadgeType.Premarket:\r\n return {\r\n label: 'Premarket',\r\n // description: (\r\n // <>\r\n // An additional time window when trading is possible.\r\n //
\r\n // We report it as the time between 8: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 5: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","/**\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) {\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) {\r\n return date.toLocaleDateString('en-US', { month: 'short' }).toUpperCase()\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 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.timeOnly:\r\n return getTime(date)\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\r\n if (\r\n isPremium &&\r\n dayOfWeek !== 0 &&\r\n dayOfWeek !== 6 &&\r\n (date.getHours() === 8 || (date.getHours() === 9 && min < 30))\r\n ) {\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 && 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 function getParsedCookies(cookieName: string) {\r\n const parseCookies = document.cookie\r\n .split(';')\r\n .map((cookieString) => cookieString.split('='))\r\n .reduce((acc, v) => {\r\n acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim())\r\n return acc\r\n }, {} as Record)\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\n\r\nexport function getHoverChartUrl(\r\n ticker: string,\r\n escaped: boolean = false,\r\n timeframe = FinvizSettings.stocksHoverChartTimeframe\r\n): string {\r\n let imgUrl = `${FinvizSettings.nodeChartsDomain}/chart.ashx?cs=m&t=${ticker}&tf=${timeframe ?? 'd'}&ct=candle_stick`\r\n if (FinvizSettings.hasUserPremium && FinvizSettings.stocksHoverChartPatterns) {\r\n imgUrl +=\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\n if (document.documentElement.classList.contains('dark')) {\r\n imgUrl += '&tm=d'\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.stocksHoverChartTimeframe) {\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.stocksHoverChartPatterns) 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.stocksHoverChartTimeframe,\r\n size?: { width: number; height: number },\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)\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 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","function getSanitizedSingleTicker(rawTicker: string) {\r\n return rawTicker\r\n .replace(/\\.+/gi, '-')\r\n .split('-')\r\n .map((x) => x.replace(/([^a-z0-9@-])+/gi, ''))\r\n .filter((x) => !!x)\r\n .join('-')\r\n .toUpperCase()\r\n}\r\n\r\nexport function getSanitizedTicker(rawTicker: string, isMulti = false) {\r\n if (isMulti) {\r\n return rawTicker\r\n .replace(/ /g, ',')\r\n .split(',')\r\n .map(getSanitizedSingleTicker)\r\n .filter((x) => !!x)\r\n .join(',')\r\n }\r\n\r\n return getSanitizedSingleTicker(rawTicker)\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","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 = 'flex items-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 px-2', // 24px height\r\n regular = 'text-2xs h-7 px-2', // 28px height\r\n medium = 'text-sm h-8 px-3', // 32px height\r\n large = 'text-sm h-9 px-4', // 36px height\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 dark,\r\n blue,\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 'active:bg-gray-200 disabled:bg-gray-50 disabled:text-gray-400', // Light\r\n 'dark:active:bg-gray-500 dark:disabled:bg-gray-700 dark:disabled:text-gray-300', // Dark\r\n {\r\n 'bg-gray-50 hover:bg-gray-100 dark:bg-gray-700 dark:hover:bg-gray-600': !active,\r\n 'bg-gray-200 dark:bg-gray-500': active,\r\n }\r\n ),\r\n }\r\n }\r\n case ButtonTheme.dark: {\r\n return {\r\n button: classnames('text-gray-50 active:bg-gray-500 disabled:bg-gray-700 disabled:text-gray-300', {\r\n 'bg-gray-700 hover:bg-gray-600': !active,\r\n 'bg-gray-500': active,\r\n }),\r\n }\r\n }\r\n case ButtonTheme.blue: {\r\n return {\r\n button: classnames(\r\n 'text-white hover:text-white active:bg-blue-600 disabled:bg-blue-200 dark:disabled: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.blueHover: {\r\n return {\r\n button: classnames(\r\n 'active:bg-blue-600 disabled:bg-blue-200 disabled:text-gray-400 dark:disabled: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('text-white active:bg-red-600 disabled:bg-red-200 disabled:text-gray-300', {\r\n 'bg-red-400 hover:bg-red-500': !active,\r\n 'bg-red-600': active,\r\n }),\r\n }\r\n }\r\n case ButtonTheme.headerItem: {\r\n return {\r\n button: classnames(\r\n 'bg-gray-800 text-gray-300 hover:bg-gray-900 hover:text-white disabled: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 'hover:bg-gray-50 disabled:text-gray-400 dark:hover:bg-gray-700': !active,\r\n 'bg-gray-50 dark:bg-gray-700': active,\r\n }),\r\n }\r\n }\r\n case ButtonTheme.menuItemDark: {\r\n return {\r\n button: classnames('text-white', {\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('disabled:opacity-50 dark:text-gray-400', {\r\n 'opacity-70 hover:opacity-100': !active,\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',\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',\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', {\r\n 'border-transparent bg-gray-50 hover:bg-gray-100 dark:bg-gray-700 dark:hover:bg-gray-600': !active,\r\n 'border-blue-500 bg-blue-50 text-gray-900 dark:border-blue-400 dark:bg-gray-700 dark:text-white': active,\r\n }),\r\n }\r\n case ButtonTheme.chipTransparent:\r\n return {\r\n button: classnames(\r\n 'border', // Base styles\r\n {\r\n 'border-transparent text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200':\r\n !active,\r\n 'border-blue-400 bg-blue-50 text-gray-900 dark:bg-gray-700 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'>\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 * 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 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 buttonSize = isSquare ? ButtonSquareSize[size] : ButtonSize[size]\r\n const buttonRounding = ButtonRounding[rounding]\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 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 {isValidIconName(leftContent) ? (\r\n \r\n ) : (\r\n leftContent\r\n )}\r\n {children && !isSquare ? (\r\n \r\n {children}\r\n \r\n ) : (\r\n children\r\n )}\r\n {isValidIconName(rightContent) ? (\r\n \r\n ) : (\r\n rightContent\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}\r\n\r\nfunction CheckboxComponent(\r\n { className, label, 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 } 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\r\nexport function DatePicker({ children, ...props }: DatePickerProps) {\r\n const popover = usePopoverState()\r\n\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 \r\n \r\n \r\n \r\n \r\n }\r\n >\r\n ) => {\r\n popover.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","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","/**\r\n * The backdrop of the dialog, closes the dialog on click\r\n */\r\nexport function DialogOverlay(props: { onClick: () => void }) {\r\n return
props.onClick()} />\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 { 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 * 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\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 isBackdropDisabled = false,\r\n type = 'modal',\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\r\n React.useEffect(() => {\r\n const 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(DIALOG_BACKDROP_WIDTH_CSS_VAR, `${document.documentElement.clientWidth}px`)\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 }, [])\r\n\r\n const DialogWrapper = state.modal ? React.Fragment : Portal\r\n\r\n return (\r\n \r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...innerProps }) => {\r\n if (isFullyClosed) return null\r\n\r\n return (\r\n \r\n \r\n {!isBackdropDisabled && }\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}\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 } 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}\r\n\r\nexport function ConfirmationDialog(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/**\r\n * Component which renders title and a close button\r\n */\r\nexport function DialogHeader({ onCloseClick, children, className }: React.PropsWithChildren) {\r\n const dialogDrag = React.useContext(DialogDragContext)\r\n\r\n return (\r\n \r\n {children && (\r\n \r\n {children}\r\n \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 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 { 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 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 \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\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 ...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 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 { IconArrowForward } from './arrow-forward'\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 { IconCaretRight } from './caret-right'\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 { 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 { 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 { 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 calendar: IconCalendar,\r\n candleBarBasic: IconCandleBarBasic,\r\n candleBarHeikinAshi: IconCandleBarHeikinAshi,\r\n candleBarHollow: IconCandleBarHollow,\r\n caretDown: IconCaretDown,\r\n caretRight: IconCaretRight,\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 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 gift: IconGift,\r\n hamburger: IconHamburger,\r\n help: IconHelp,\r\n idea: IconIdea,\r\n ideaLoad: IconIdeaLoad,\r\n ideaSave: IconIdeaSave,\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 minus: IconMinus,\r\n menuClose: IconClose,\r\n more: IconMore,\r\n note: IconNote,\r\n ohlcChartType: IconOhlcChartType,\r\n profile: IconProfile,\r\n publish: IconPublish,\r\n refresh: IconRefresh,\r\n remove: IconRemove,\r\n restore: IconRestore,\r\n settingsWheel: IconSettingsWheel,\r\n gesture: IconGesture,\r\n search: IconSearch,\r\n settings: IconSettings,\r\n share: IconShare,\r\n signOut: IconSignOut,\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 triangle: IconTriangle,\r\n triangleOutlineDown: IconTriangleOutlineDown,\r\n triangleOutlineUp: IconTriangleOutlineUp,\r\n warning: IconWarning,\r\n palette: IconPalette,\r\n arrowForward: IconArrowForward,\r\n trendingUp: IconTrendingUp,\r\n trendingDown: IconTrendingDown,\r\n trashCan: IconTrashCan,\r\n star: IconStar,\r\n starOutlined: IconStarOutlined,\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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 { 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 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 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 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 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 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 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 { 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}\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 disabled:border-gray-700': !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 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 disabled:hover:border-gray-100 dark:border-gray-600 dark:hover:border-gray-400 dark: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 * 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 * 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\nexport type InputHTMLProps = OmitNativeProps\r\n\r\nexport type InputComponentProps = InputProps & InputHTMLProps\r\n\r\nfunction InputComponent(\r\n {\r\n label,\r\n size = 'regular',\r\n theme = 'light',\r\n rounding = 'regular',\r\n leftContent,\r\n rightContent,\r\n inputClass,\r\n error,\r\n caption,\r\n className,\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 justify-center items-center ml-px': 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 throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\nimport { Dialog, useDialogState } from 'reakit/Dialog'\r\nimport { Portal } from 'reakit/Portal'\r\n\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\nfunction getViewport(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 }\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] = React.useState(getViewport(window.visualViewport))\r\n\r\n React.useEffect(() => {\r\n if (!notification) return\r\n\r\n const handleResize = throttle((ev: Event) => {\r\n const viewport = ev.currentTarget as VisualViewport\r\n if (viewport) {\r\n setViewport(() => getViewport(viewport))\r\n }\r\n }, 50)\r\n\r\n window.visualViewport?.addEventListener('resize', handleResize)\r\n window.visualViewport?.addEventListener('scroll', handleResize)\r\n\r\n return () => {\r\n window.visualViewport?.removeEventListener('resize', handleResize)\r\n window.visualViewport?.removeEventListener('scroll', handleResize)\r\n }\r\n }, [notification])\r\n\r\n const context = React.useRef({\r\n show: (element: JSX.Element, options: Partial = {}) => {\r\n setViewport(() => getViewport(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 \r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...innerProps }) => {\r\n if (isFullyClosed) return null\r\n\r\n return (\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 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 actions?: JSX.Element\r\n timeoutInMs?: number\r\n}\r\n\r\nexport function Notification(props: React.PropsWithChildren) {\r\n const notification = useNotification()\r\n\r\n React.useEffect(() => {\r\n let timeoutId: NodeJS.Timeout\r\n if (props.timeoutInMs) {\r\n timeoutId = setTimeout(() => {\r\n notification.hide()\r\n }, props.timeoutInMs)\r\n }\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n }\r\n }\r\n }, [notification, props.timeoutInMs])\r\n\r\n return (\r\n \r\n
{props.children}
\r\n
{props.actions ?? }
\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\nimport * as Reakit from 'reakit/Popover'\r\nimport { Portal } from 'reakit/Portal'\r\n\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\nconst POPOVER_HEIGHT_LIMIT_STYLE = {\r\n maxHeight: 'calc(var(--popover-max-height) - env(safe-area-inset-bottom))',\r\n}\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 { innerHeight } = useWindowSize()\r\n const zIndex = useZIndex()\r\n const { isFullyClosed } = getExtendedDialogState(state)\r\n\r\n const buttonElement = state.unstable_referenceRef.current\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 // Limit popover height to be always be in viewport if `hasViewportHeightLimit` set\r\n if (hasViewportHeightLimit) {\r\n const [, offsetY] = state.offsets\r\n\r\n let elementMaxHeight = 'auto'\r\n if (state.placement.startsWith('bottom')) {\r\n const height = innerHeight - buttonRect.bottom - offsetY * 2\r\n elementMaxHeight = `${Math.min(height, popoverMaxHeight)}px`\r\n } else {\r\n const height = buttonRect.top - offsetY * 2\r\n elementMaxHeight = `${Math.min(height, popoverMaxHeight)}px`\r\n }\r\n\r\n popoverWrapper?.style.setProperty('--popover-max-height', `${elementMaxHeight}`)\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 return (\r\n \r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...innerProps }) => {\r\n if (isFullyClosed) return null\r\n\r\n return (\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}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n throttleWaitInMs?: number\r\n}\r\n\r\nexport function useWindowSize({ throttleWaitInMs = 300 }: 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 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])\r\n\r\n return size\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 { 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 & Partial\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\nexport function ComboBox({\r\n state,\r\n children,\r\n inputProps,\r\n popoverProps,\r\n onChange,\r\n 'aria-label': ariaLabel,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const zIndex = useZIndex()\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 />\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(child as React.ReactElement>, {\r\n state,\r\n onMouseUp: () => {\r\n onChange(child.props.value)\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","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 { getSanitizedTicker } from '../../../app/shared/ticker-sanitizer'\r\nimport { link } from '../../services/routing'\r\nimport { Instrument } from '../../types'\r\nimport { getInstrumentForTicker } from '../../util'\r\n\r\nexport function getRedirectForTicker(tickerRaw: string) {\r\n const ticker = getSanitizedTicker(tickerRaw, true)\r\n const type = getInstrumentForTicker(ticker)\r\n\r\n switch (Instrument[type]) {\r\n case Instrument.stock:\r\n return link.toQuote(ticker)\r\n case Instrument.forex:\r\n return link.toForexChartDetail(ticker)\r\n case Instrument.futures:\r\n return link.toFuturesChartDetail(ticker)\r\n case Instrument.crypto:\r\n return link.toCryptoChartDetail(ticker)\r\n default:\r\n // Not used right now, all instruments are `stock` by default\r\n return link.toSearch(ticker)\r\n }\r\n}\r\n","import { SearchApiResult } from '../../services/api'\r\nimport { ComboBoxItem, ComboBoxItemProps } from '../combo-box'\r\nimport { Highlight } from '../highlight'\r\nimport { getRedirectForTicker } from './util'\r\n\r\ninterface SearchItemProps extends Pick {\r\n item: SearchApiResult\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 { useQuery } from '@tanstack/react-query'\r\nimport * as Reakit from 'reakit/Combobox'\r\n\r\nimport { searchApiRequest } from '../../services/api'\r\nimport { link } from '../../services/routing'\r\nimport { InstrumentType } from '../../types'\r\nimport { Button } from '../button'\r\nimport { Centered } from '../centered'\r\nimport { Icon } from '../icon'\r\nimport { Spinner } from '../spinner'\r\nimport { Heading, Paragraph } from '../typography'\r\nimport { SearchItem } from './search-item'\r\n\r\ninterface SearchListProps {\r\n state: Reakit.unstable_ComboboxStateReturn\r\n instrument?: InstrumentType\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\r\n if (isLoading) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n if (!data?.length) {\r\n return (\r\n \r\n \r\n \r\n We couldn’t find any results\r\n \r\n \r\n Try refining your search and try again.\r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {data.map((item) => (\r\n \r\n ))}\r\n
\r\n \r\n Show all results\r\n \r\n
\r\n )\r\n}\r\n","import { useQueryErrorResetBoundary } from '@tanstack/react-query'\r\nimport * as React from 'react'\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\n\r\nimport { ComboBox, useComboBoxState } from '../combo-box'\r\nimport { getExtendedDialogState } from '../dialog'\r\nimport { 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 theme?: keyof typeof InputTheme\r\n}\r\n\r\nexport function Search(props: SearchProps) {\r\n const { reset } = useQueryErrorResetBoundary()\r\n const state = useComboBoxState({ minValueLength: 1, inputValue: props.defaultValue, placement: 'bottom-end' })\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 const redirectUri = getRedirectForTicker(value)\r\n window.location.href = redirectUri\r\n }}\r\n >\r\n
\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 {(state.visible || state.animating) && (\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) 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 (!selectedItem.href || !selectedItem.reloadDocument) {\r\n onChange(selectedItem)\r\n if (closeOnSelect) closePopover.current()\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 { Icon } from '../icon'\r\nimport { PopoverStateReturn, PopoverTrigger } from '../popover'\r\n\r\nfunction getButtonProps(theme: ButtonTheme, active: boolean): ButtonProps & ButtonHTMLProps {\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 pr-1 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 ),\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 pr-1 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 ),\r\n }\r\n default:\r\n return {}\r\n }\r\n}\r\n\r\ninterface 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 state: PopoverStateReturn\r\n}\r\n\r\nexport function SelectButton({ state, theme = 'light', ...props }: SelectButtonProps) {\r\n const themeProps = React.useMemo(() => getButtonProps(ButtonTheme[theme], state.visible), [theme, state.visible])\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\nimport { useInRouterContext } from 'react-router-dom'\r\nimport * as Reakit from 'reakit/Popover'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { ButtonHTMLProps, ButtonProps } from '../button'\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 } 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 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 * 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 * 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\nexport function Select, Name = never>({\r\n children,\r\n popoverStateSettings,\r\n ...props\r\n}: SelectProps) {\r\n const popoverState = usePopoverState(popoverStateSettings)\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 value,\r\n items = [],\r\n onChange,\r\n labelClassName,\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 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\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}\r\n\r\nexport const SelectOption = ListItem\r\n","import * as React from 'react'\r\n\r\nimport { usePopoverState } from '../popover'\r\nimport { Tooltip, TooltipTrigger, useTooltipState } from '../tooltip'\r\nimport { Paragraph } from '../typography'\r\nimport { SelectProps, StatelessSelect } from './select'\r\nimport { SelectItem } from './types'\r\n\r\nexport interface SelectWithTooltipProps extends SelectProps {\r\n /**\r\n * Labels which renders in tooltip on hover\r\n */\r\n tooltipLabel?: string\r\n}\r\n\r\nexport function SelectWithTooltip, Name = never>({\r\n children,\r\n tooltipLabel,\r\n popoverStateSettings,\r\n isNativeMobileSelect = false,\r\n ...props\r\n}: SelectWithTooltipProps) {\r\n const popoverState = usePopoverState(popoverStateSettings)\r\n const tooltip = useTooltipState({ placement: 'bottom', unstable_timeout: 300 })\r\n const isTooltipIgnored = React.useRef(false)\r\n\r\n /**\r\n * Ignore focus re-trigger (do not show tooltip) when page visibility/focus state changes\r\n * - some browsers re-trigger focus on `activeElement` when document becomes visible\r\n */\r\n React.useEffect(() => {\r\n const onChange = () => {\r\n if (\r\n document.visibilityState === 'visible' &&\r\n document.activeElement === popoverState.unstable_referenceRef.current\r\n ) {\r\n isTooltipIgnored.current = true\r\n tooltip.hide()\r\n }\r\n }\r\n\r\n document.addEventListener('visibilitychange', onChange)\r\n window.addEventListener('blur', onChange)\r\n return () => {\r\n document.removeEventListener('visibilitychange', onChange)\r\n window.removeEventListener('blur', onChange)\r\n }\r\n // Changing this to `tooltip` dependency will run this effect on every render\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [popoverState.unstable_referenceRef, tooltip.hide])\r\n\r\n // hide tooltip when select dropdown opens\r\n React.useEffect(() => {\r\n if (popoverState.visible) {\r\n isTooltipIgnored.current = true\r\n tooltip.hide()\r\n }\r\n }, [popoverState.visible, tooltip])\r\n\r\n const onSelectFocus = React.useRef(() => {\r\n if (!isTooltipIgnored.current) tooltip.show()\r\n })\r\n\r\n // Make sure the tooltip doesn’t reopen when the select is closed until focused again\r\n const onSelectBlur = React.useRef(() => {\r\n isTooltipIgnored.current = popoverState.visible\r\n if (!isTooltipIgnored.current) tooltip.hide()\r\n })\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useNavigate } from 'react-router-dom'\r\n\r\nimport { SelectItem } from './types'\r\n\r\ninterface NativeSelectProps extends Omit, 'onChange'> {\r\n items: ItemType[]\r\n onChange: (itemIndex: number) => void\r\n}\r\n\r\nexport function NativeSelect>({\r\n items,\r\n onChange,\r\n placeholder = 'Select value',\r\n ...props\r\n}: NativeSelectProps) {\r\n const showPlaceholder = props.value === -1\r\n const handleNativeSelectChange = React.useCallback(\r\n (e: React.ChangeEvent) => {\r\n const itemIndex = e.target.selectedIndex + (showPlaceholder ? -1 : 0)\r\n const selectedItem = items[itemIndex]\r\n\r\n if (!selectedItem.href || !selectedItem.reloadDocument) {\r\n onChange(itemIndex)\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, showPlaceholder]\r\n )\r\n\r\n return (\r\n \r\n {showPlaceholder && }\r\n {items.map((item, i) => (\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\nexport function NativeSelectInRouterContext>(props: NativeSelectProps) {\r\n const navigate = useNavigate()\r\n\r\n const onChangeWithNavigate = React.useCallback(\r\n (itemIndex: number) => {\r\n const selectedItem = props.items[itemIndex]\r\n props.onChange(itemIndex)\r\n\r\n if (selectedItem.href) navigate(selectedItem.href)\r\n },\r\n // We don’t need the whole props here, just onChange and items\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [navigate, props.onChange, props.items]\r\n )\r\n\r\n return \r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { List, useListState } from '../list'\r\nimport { Popover, PopoverProps } from '../popover'\r\n\r\nexport interface SelectListProps extends Omit {\r\n /**\r\n * The index of selected item\r\n */\r\n selectedIndex?: number\r\n\r\n /**\r\n * Handler called when selected item in list changes\r\n */\r\n onChange: (item: number) => void\r\n}\r\n\r\nexport function SelectList({\r\n selectedIndex,\r\n onChange,\r\n 'aria-label': ariaLabel,\r\n children,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const listState = useListState({ currentId: null })\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\n\r\ninterface SpinnerProps {\r\n /**\r\n * Spinner as progress bar\r\n * @default false\r\n */\r\n isProgressBar?: boolean\r\n\r\n /**\r\n * Progress number in percent\r\n * @default 0\r\n */\r\n progress?: number\r\n\r\n /**\r\n * Spinner box width\r\n *\r\n * @default 28\r\n */\r\n width?: number\r\n}\r\n\r\nexport function Spinner({ isProgressBar = false, progress = 0, width = 28 }: SpinnerProps) {\r\n const radius = (3 * width) / 7\r\n const strokeWidth = radius / 3\r\n const circleXY = radius + strokeWidth / 2\r\n const circumference = radius * 2 * Math.PI\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { Link, Path } from 'react-router-dom'\r\n\r\nimport { BoxRounding } from '../box'\r\nimport { ButtonHTMLProps, ButtonProps, ButtonSizeType } from '../button'\r\nimport { DropdownSeparator } from '../dropdown'\r\nimport { Icon } from '../icon'\r\nimport { SelectOption, SelectWithTooltip } from '../select'\r\nimport { SelectItem } from '../select/types'\r\n\r\nexport interface DateRangeBaseOption extends SelectItem {\r\n timeframe: string\r\n href?: Path\r\n}\r\n\r\ninterface Props {\r\n chartIndex: number\r\n dateRangeGroups: Array<{ label: string; dateRanges: DateRange[] }>\r\n selectedDateRange: string | null\r\n onDateRangeSelect: (value: DateRange) => void\r\n rounding: keyof typeof BoxRounding\r\n size?: ButtonSizeType\r\n}\r\n\r\nconst DATERANGE_TOOLTIP = 'Range'\r\n\r\nexport function DateRangeSelect({\r\n size,\r\n chartIndex,\r\n dateRangeGroups,\r\n selectedDateRange,\r\n onDateRangeSelect,\r\n rounding,\r\n}: Props) {\r\n const flatDateRanges = React.useMemo(() => dateRangeGroups.flatMap(({ dateRanges }) => dateRanges), [dateRangeGroups])\r\n\r\n const buttonProps = React.useMemo(\r\n () => ({\r\n size,\r\n rounding,\r\n className: '',\r\n rightContent: undefined,\r\n appearance: 'square',\r\n theme: 'chip',\r\n }),\r\n [size, rounding]\r\n )\r\n\r\n const selectWithTooltipListProps = React.useMemo(() => ({ rounding }), [rounding])\r\n\r\n return (\r\n }\r\n tooltipLabel={DATERANGE_TOOLTIP}\r\n active={!!selectedDateRange}\r\n hasPopoverViewportHeightLimit\r\n isNativeMobileSelect={false}\r\n hasPopoverButtonWidthLimit={false}\r\n listProps={selectWithTooltipListProps}\r\n >\r\n {dateRangeGroups.flatMap(({ label, dateRanges }, index) => [\r\n {label},\r\n ...dateRanges.map(({ href, value, label }) => (\r\n \r\n {label}\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 { Delayed } from '../delayed'\r\nimport { Spinner } from '../spinner'\r\n\r\ninterface Props {\r\n label: React.ReactNode\r\n isLoading: boolean\r\n}\r\n\r\nexport function LabelWithDelayedSpinner({ label, isLoading }: Props) {\r\n return (\r\n <>\r\n {label}\r\n {isLoading && (\r\n
\r\n {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, To } from 'react-router-dom'\r\n\r\nimport { BoxRounding } from '../box'\r\nimport { Button, ButtonHTMLProps, ButtonProps, ButtonSizeType } from '../button'\r\nimport { DropdownSeparator } from '../dropdown'\r\nimport { Icon } from '../icon'\r\nimport { SelectItem, SelectOption, SelectWithTooltip } from '../select'\r\nimport { LabelWithDelayedSpinner } from './label-with-delayed-spinner'\r\n\r\nexport type TimeframeBaseOption = SelectItem & {\r\n labelShort: string\r\n labelPageTitle?: string\r\n href?: To\r\n}\r\n\r\ninterface Props {\r\n chartIndex: number\r\n isCompactView: boolean\r\n timeFrameGroups: Array<{ label: string; timeframes: TimeFrame[] }>\r\n selectedTimeframe: string\r\n onTimeframeSelect: (value: TimeFrame) => void\r\n favoriteTimeframes: string[]\r\n onFavoriteTimeframeToggle: (value: TimeFrame) => void\r\n rounding: keyof typeof BoxRounding\r\n size?: ButtonSizeType\r\n isLoading?: boolean\r\n}\r\n\r\nconst TIMEFRAME_TOOLTIP = 'Interval'\r\n\r\nexport function TimeframeSelect({\r\n size,\r\n chartIndex,\r\n timeFrameGroups,\r\n selectedTimeframe,\r\n favoriteTimeframes,\r\n isLoading = false,\r\n isCompactView,\r\n onTimeframeSelect,\r\n onFavoriteTimeframeToggle,\r\n rounding,\r\n}: Props) {\r\n const flatTimeframes = React.useMemo(() => timeFrameGroups.flatMap(({ timeframes }) => timeframes), [timeFrameGroups])\r\n\r\n const buttonProps = React.useMemo(\r\n () => ({\r\n size,\r\n rounding,\r\n rightContent: undefined,\r\n className: '',\r\n theme: 'chip',\r\n appearance: !isCompactView ? 'square' : undefined,\r\n }),\r\n [size, isCompactView, rounding]\r\n )\r\n\r\n const selectWithTooltipListProps = React.useMemo(() => ({ rounding }), [rounding])\r\n\r\n return (\r\n \r\n } isLoading={isLoading && isCompactView} />\r\n
\r\n }\r\n buttonContent={isCompactView ? flatTimeframes.find(({ value }) => value === selectedTimeframe)?.labelShort : ''}\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 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 }\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, 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}\r\n\r\nfunction getTimeframeChipElementId({ timeframe, chartIndex }: { timeframe: string; chartIndex: number }) {\r\n return `${chartIndex}-${timeframe}`\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}: 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 const isStockDetailTimeframeBar = rounding === 'none' && size === 'regular'\r\n\r\n const timeframesInExpandedPanel = React.useMemo(\r\n () => flatTimeframes.filter(({ value }) => value === selectedTimeframe || favoriteTimeframes.includes(value)),\r\n [flatTimeframes, selectedTimeframe, favoriteTimeframes]\r\n )\r\n\r\n const isCompactView = 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 scrollWrapperElement.offsetWidth + scrollWrapperElement.scrollLeft >= 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 timeframeElement?.scrollIntoView({ inline: 'center', block: 'nearest' })\r\n }\r\n }, [isCompactView, chartIndex, selectedTimeframe, elementWidth, isScrollIntoViewEnabled])\r\n\r\n return (\r\n \r\n {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
\r\n {timeframesInExpandedPanel.map((timeframe) => (\r\n onTimeframeSelect(timeframe)}\r\n rounding={rounding}\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 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 * The trigger button component which handles ref & focus return, etc.\r\n */\r\nexport const TooltipTrigger = React.forwardRef(\r\n ({ state, ...props }: TooltipButtonProps, ref: React.ForwardedRef) => (\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}\r\n\r\nexport function Label({ title, 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","// 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 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","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\nimport { usePopper } from 'react-popper'\r\n\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\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 * 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, 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: [5, 5],\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 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}\r\n\r\nfunction ContextMenuInner(\r\n { label, items, state, isStatic }: ContextMenuInnerProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const innerState = useDropdownState({ placement: 'right-start' })\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 >\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}\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})\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 = ({ direction, isWrapped, theme }: IToolbarContext): React.HTMLProps => {\r\n switch (isWrapped) {\r\n case true:\r\n return {\r\n className: classnames('flex shrink-0 items-center bg-white dark:bg-gray-800', {\r\n 'flex-wrap justify-between': direction === ToolbarDirection.vertical,\r\n 'border border-gray-100 dark:border-gray-700 p-1 gap-1 border-box rounded-md':\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': direction === ToolbarDirection.horizontal && FinvizSettings.hasRedesignEnabled,\r\n 'flex-col space-y-2 overflow-hidden overflow-y-auto [--inset-l:0.5rem] landscape-primary:pl-inset-left':\r\n direction === ToolbarDirection.vertical,\r\n 'pb-inset-bottom [--inset-b:0.5rem]': theme !== ToolbarTheme.alternative,\r\n 'w-screen space-x-2 overflow-hidden overflow-x-auto':\r\n direction === ToolbarDirection.horizontal && theme !== ToolbarTheme.alternative,\r\n 'overflow-x-hidden': theme === ToolbarTheme.alternative,\r\n }),\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarProps {\r\n /**\r\n * Toolbar direction\r\n *\r\n * @default vertical\r\n */\r\n direction?: ToolbarDirectionType\r\n\r\n /**\r\n * Toolbar buttons theme\r\n *\r\n * @default light\r\n */\r\n theme?: ToolbarThemeType\r\n}\r\n\r\nexport function Toolbar({\r\n direction = 'vertical',\r\n theme = 'chipTransparent',\r\n children,\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 }),\r\n [direction, theme]\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 { 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 'rounded disabled:bg-white dark:border-transparent disabled:text-gray-300 disabled:hover:text-gray-300 dark:disabled:bg-gray-800 dark:disabled:text-gray-500':\r\n true,\r\n 'border border-white text-gray-500 dark:text-gray-400 hover:border-gray-50 hover:bg-gray-50 hover:text-gray-900 dark:hover:text-gray-200 dark:hover:border-gray-700 dark:hover:bg-gray-700':\r\n !isActive,\r\n 'border text-gray-800 dark:border-blue-500 border-blue-400 bg-blue-50 dark:text-white dark:bg-gray-700':\r\n isActive,\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: 'transparent',\r\n rounding: 'none',\r\n size: isStretched || includeRedesign ? undefined : 'none',\r\n }\r\n default:\r\n return {\r\n className: classnames(\r\n 'dark:disabled:bg-gray-800 dark:disabled:text-gray-600 disabled:text-gray-300 disabled:bg-white',\r\n { 'animate-pulse': isInAction }\r\n ),\r\n theme: 'chipTransparent',\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}\r\n\r\nexport function ToolbarButton({\r\n item,\r\n disabledTooltip,\r\n isInAction: isInActionProp,\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 {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","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 * 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) => void\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 groupItems,\r\n groupTitle,\r\n onChange,\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 useMobileNativeSelect = isMobile()\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)\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)\r\n }}\r\n >\r\n \r\n \r\n \r\n\r\n {useMobileNativeSelect ? (\r\n ({ value: item.id, label: item.title }))}\r\n onChange={select.onItemChange}\r\n onClick={() => onChange(selectedItem.id)}\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 isActive,\r\n isInAction,\r\n groupItems,\r\n groupTitle,\r\n onChange,\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)\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\nexport function ToolbarDivider() {\r\n const { direction, theme } = useToolbarContext()\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Input, InputHTMLProps, InputProps } from './input'\r\nimport { Tooltip, TooltipTrigger, useTooltipState } from './tooltip'\r\n\r\nexport interface TooltipInputProps {\r\n /**\r\n * Tooltip text content\r\n */\r\n tooltipContent?: React.ReactNode\r\n}\r\n\r\nfunction TooltipInputComponent(\r\n { tooltipContent, ...props }: TooltipInputProps & InputProps & InputHTMLProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const tooltip = useTooltipState({ placement: 'bottom' })\r\n\r\n return (\r\n <>\r\n ev.preventDefault()}\r\n onMouseLeave={(ev) => ev.preventDefault()}\r\n >\r\n \r\n \r\n \r\n {tooltipContent}\r\n \r\n \r\n )\r\n}\r\n\r\nexport const TooltipInput = React.forwardRef(TooltipInputComponent)\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 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),\r\n text: 'Exit',\r\n },\r\n index > 0 && {\r\n action: tour.back,\r\n classes: classnames(buttonClasses, getButtonTheme(ButtonTheme.light).button),\r\n text: step.backButton ?? 'Back',\r\n },\r\n {\r\n classes: classnames(buttonClasses, getButtonTheme(ButtonTheme.blue).button),\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 * 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 ...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","/**\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 * as ReactRouterDOM from 'react-router-dom'\r\n\r\nimport { getFormattedDateString } from '../app/header/utils'\r\nimport { decodeQueryString, encodeQueryString } from '../app/queryString'\r\nimport logo from '../app/shared/assets/logo.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 { useSyncLocalStorage } from './hooks/use-sync-local-storage'\r\n\r\ndeclare const FLibs: any\r\n\r\nFLibs.ReactRouterDOM = ReactRouterDOM\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.getIsDrawingEnabledOnQuotePage = getIsDrawingEnabledOnQuotePage\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}\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 Sentry from '@sentry/browser'\r\n\r\nimport { InstrumentType } from '../types'\r\n\r\nexport enum ContentType {\r\n ApplicationJson = 'application/json',\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.FormUrlEncoded:\r\n return JSON.parse(response)\r\n default:\r\n return response\r\n }\r\n}\r\n\r\nexport class ThrowableError extends Error {\r\n status: number\r\n isServerError = false\r\n extra: Record = {}\r\n\r\n constructor(status: number, message = 'ThrowableError', extra: Record = {}) {\r\n super(`${status} ${message}`)\r\n this.status = status\r\n this.isServerError = status >= 500\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 reponseContentType: ContentType = (response.headers.get('Content-Type') as any) ?? ContentType.Html\r\n if (!response.ok || response.status >= 500) {\r\n throw new ThrowableError(response.status, response.statusText, { rayId: response.headers.get('cf-ray') })\r\n }\r\n try {\r\n return parseResponseForContentType(textResponse, reponseContentType)\r\n } catch (error: any) {\r\n throw new ThrowableError(500, error.message, { rayId: response.headers.get('cf-ray') })\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?: InstrumentType) {\r\n return apiRequest('/api/suggestions.ashx', { query: { input, instrument } }, true)\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 * 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 market_sentiment = 'market_sentiment',\r\n group = 'group',\r\n}\r\n\r\nexport type InstrumentType = keyof typeof Instrument\r\n\r\nexport type RecordType = Record\r\n\r\nexport type PartialBy = Omit & Partial>\r\n","import isPlainObject from 'lodash.isplainobject'\r\nimport { ComponentType, LazyExoticComponent, lazy } from 'react'\r\n\r\nimport { getCookie } from '../app/shared/cookie'\r\nimport { CRYPTO_TICKERS } from './constants'\r\nimport { Instrument, InstrumentType } 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): InstrumentType {\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"],"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","concat","findMatchingBreakpoint","compareWidth","breakpoints","_matchingBreakpoints$","filter","breakpoint","pop","getCurrentWidth","mode","element","_element$clientWidth","window","innerWidth","clientWidth","Time","breakpointMode","ResizeObserver","useResizeObserver","rootRef","React","setState","currentBreakpoint","setBreakpoint","interval","setInterval","clearInterval","current","currentWidth","handleResize","throttle","foundBreakpoint","observer","entries","requestAnimationFrame","Array","isArray","observe","addEventListener","disconnect","removeEventListener","ref","getFormattedDateString","seed","date","Date","dateAsNY","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","isDst","dayNumber","monthIndex","getMonth","previousSunday","getDay","getIsDstInNy","setUTCHours","getWeekDay","toLocaleDateString","weekday","month","toUpperCase","toString","padStart","getTime","toLocaleString","hour","minute","hour12","TimeFormat","format","long","getFullYear","short","timeOnly","isPremium","dayOfWeek","min","getMinutes","getHours","HOLIDAY_DATES","test","day","hours","getHoliday","find","holiday","decodeQueryString","search","location","vars","substring","split","obj","forEach","pair","delimiterPos","indexOf","key","decodeURIComponent","value","encodeQueryString","values","whitelistedValues","Object","keys","reduce","prev","encodeURIComponent","getParsedCookies","cookieName","parseCookies","document","cookie","map","cookieString","acc","v","trim","getCookie","name","re","RegExp","replace","setCookie","expires","toUTCString","hostname","getHoverChartUrl","ticker","escaped","timeframe","stocksHoverChartTimeframe","imgUrl","nodeChartsDomain","stocksHoverChartPatterns","documentElement","classList","contains","timeframeToDeprecatedTimeframe","timeframeString","getOldChartsUrl","instrument","oldPeriod","Instrument","cleanTicker","toLowerCase","getHoverChartDimensions","width","height","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","isIpad","isSafariDesktop","getSanitizedSingleTicker","rawTicker","x","join","getSanitizedTicker","isMulti","formatDateToStringUS","year","DRAWING_QUOTE_PAGE_COOKIE_NAME","getIsDrawingEnabledOnQuotePage","async","setIsDrawingEnabledOnQuotePage","isEnabled","fetch","catch","then","res","ok","setMonth","setIsDrawingEnabledOnQuotePageCookieViaJS","i","idea","rest","reload","parseInitData","elementId","initDataElement","getElementById","JSON","parse","textContent","e","Sentry","captureException","BoxRounding","BoxTheme","Box","rounding","theme","GroupTheme","ButtonGroup","hasDivider","hasBorder","childComponent","buttonRounding","ButtonRounding","groupTheme","dark","wrapper","divider","getGroupTheme","role","border","child","index","_child$props$rounding","_child$props$theme","Button","Boolean","BUTTON_DEFAULT_ELEMENT","BUTTON_BASE_CLASS","BUTTON_SQUARE_BASE_CLASS","BUTTON_FOCUS_STYLES","ButtonSize","ButtonSquareSize","ButtonTheme","getButtonTheme","active","light","button","blue","blueHover","red","headerItem","icon","menuItem","menuItemDark","opacity","outline","chip","chipTransparent","ButtonComponent","as","asComponent","size","focusRing","appearance","contentClass","leftContent","rightContent","isSquare","buttonTheme","buttonSize","isValidIconName","Icon","CheckboxComponent","_props$checked","checked","defaultChecked","disabled","Checkbox","forwardRef","clamp","num","max","isTouch","event","getRelativePosition","node","rect","getBoundingClientRect","pointer","touches","left","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","r","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","push","some","getHSVAFromColor","stringifyHSVAColor","output","canSelectAlpha","getLumaFromRGBA","getIsColorTooLightOrTransparent","getHEXWithSpecificAplha","getRGBAValueFromValidColorString","Alpha","onChange","changeLightness","pos","gradientPreview","useMemo","gradientFrom","gradientTo","backgroundImage","DEFAULT_COLORS","title","ColorPalette","colors","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","outputFormat","onPaletteItemClick","cachedColor","hsvaColor","setColor","currentColor","newColor","onChangeCallback","stringColor","onSetCustomCodeClick","_prompt","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","DatePicker","popover","triggerProps","ZIndexContext","fallback","Spinner","locale","minDetail","ev","_props$onChange","call","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","_dialogDrag$handleRef","_dialogDrag$handleRef2","_dialogDrag$handleRef3","bottom","right","clientHeight","prevPosition","_dialogDrag$handleRef4","_dialogDrag$handleRef5","_dialogDrag$handleRef6","dialogBoxStyle","transform","DialogOverlay","getExtendedDialogState","isFullyOpened","animating","isFullyClosed","DialogType","DIALOG_BACKDROP_WIDTH_CSS_VAR","Dialog","finalFocusRef","onHide","hideOnEsc","isDraggable","isBackdropDisabled","ariaLabel","setProperty","DialogWrapper","modal","Portal","unstable_finalFocusRef","onTransitionEnd","onAnimationEnd","innerProps","drawer","Provider","DialogBody","hasPadding","scrollDivRef","scrollBox","disableBodyScroll","enableBodyScroll","ConfirmationDialog","Paragraph","actions","DialogTrigger","dropdownContext","DropdownContext","_props$onClick","root","DialogFooter","padding","DialogHeader","onCloseClick","useDropdownState","context","loop","unstable_virtual","unstable_offset","DropdownComponent","isNested","isStatic","zIndex","dropdownState","ContainerElement","buttonProps","_label$props$active","_context$root","parent","orientation","Dropdown","NestedDropdownWrapper","parentState","itemProps","DropdownBar","DropdownItemComponent","subtitle","closeOnClick","hasSubmenu","iconTheme","_itemProps$onClick","DropdownItem","DropdownSeparator","MoreButtonDropdown","Component","iconList","add","SVG","viewBox","d","calendar","candleBarBasic","candleBarHeikinAshi","candleBarHollow","caretDown","caretRight","caretVertical","chartBar","chartBubble","cx","cy","chartPie","chartTable","fillRule","chartTreemap","chevronDown","_props$viewBox","chevronRight","close","darkMode","diamondOutlined","done","draw","clipRule","drawingActionDelete","drawingSettingAutosaveOff","drawingSettingAutosaveOn","drawingSettingAutosaveSaving","drawingSettingDrawingMode","drawingSettingDrawingModeActive","drawingSettingHide","drawingSettingLock","drawingSettingPreserveDrawings","drawingSettingPreserveDrawingsActive","drawingSettingShow","drawingSettingUnlock","empty","exitFullscreen","flash","fullscreen","gift","hamburger","help","ideaLoad","ideaSave","layout1h1v","layout1h2v","layout1h3v","layout1l2r","layout1t2b","layout2h1v","layout2h2v","layout3h1v","layout3h2v","lightMode","lineChartType","minus","menuClose","more","note","ohlcChartType","profile","publish","refresh","remove","restore","settingsWheel","gesture","share","signOut","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","triangle","triangleOutlineDown","triangleOutlineUp","warning","palette","arrowForward","trendingUp","trendingDown","trashCan","star","starOutlined","xmlns","InputTheme","InputRounding","InputSize","getInputTheme","isError","none","input","InputComponent","error","caption","inputTheme","isLeftStringIcon","isRightStringIcon","inputSize","commonSideContentClassnames","Label","small","regular","medium","large","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","getViewport","visualViewport","_visualViewport$width","_visualViewport$heigh","_visualViewport$scale","_visualViewport$offse","_visualViewport$offse2","innerHeight","scale","offsetTop","offsetLeft","NotificationWrapper","notification","setNotification","viewport","setViewport","_window$visualViewpor","_window$visualViewpor2","_window$visualViewpor3","_window$visualViewpor4","positionClass","_notification$options","BottomLeft","TopLeft","TopRight","BottomRight","WrapperComponent","inline","unstable_autoFocusOnShow","willChange","Notification","_props$actions","timeoutId","timeoutInMs","withNotificationContext","WrappedComponent","_WrappedComponent$dis","displayName","WithNotificationContext","notificationContext","POPOVER_HEIGHT_LIMIT_STYLE","maxHeight","focusOnHide","hasArrow","hasBackdrop","popoverWrapperStyle","popoverMaxHeight","MAX_SAFE_INTEGER","hasViewportHeightLimit","hasButtonWidthLimit","throttleWaitInMs","setSize","cancel","useWindowSize","buttonElement","unstable_referenceRef","buttonRect","popoverId","getAttribute","popoverWrapper","offsetY","offsets","elementMaxHeight","unstable_autoFocusOnHide","TooltipArrow","DEFAULT_OFFSET","_settings$unstable_of","_settings$placement","useHoverPopover","showTimeout","hideTimeout","clearTimeouts","showPopover","hidePopover","onMouseOver","onMouseOut","ComboBoxItem","selected","currentId","ComboBox","inputProps","popoverProps","_inputProps$onKeyDown","inputValue","INSTRUMENT_CATEGORIES","Centered","SearchError","href","link","resetErrorBoundary","Highlight","highlight","processedText","before","after","getRedirectForTicker","tickerRaw","getInstrumentForTicker","SearchItem","company","exchange","SearchList","data","isLoading","useQuery","searchApiRequest","keepPreviousData","cacheTime","staleTime","Search","reset","useQueryErrorResetBoundary","minValueLength","defaultValue","listState","category","setCategory","changeCategory","first","onInputKeyDown","stopPropagation","autoFocus","placeholder","autoComplete","autoCorrect","autoCapitalize","redirectUri","ErrorBoundary","FallbackComponent","onReset","resetKeys","currentValue","getSelectedItemIndex","useSelect","setSelectedIndex","closePopover","newIndex","onItemChange","_selectedItem$href$se","_selectedItem$href$ha","selectedItem","reloadDocument","newUrl","URL","pathname","hash","SelectButton","_props$active","_themeProps$theme","themeProps","getButtonProps","Select","popoverStateSettings","StatelessSelect","_items","labelClassName","buttonContent","listProps","isNativeMobileSelect","hasPopoverViewportHeightLimit","hasPopoverButtonWidthLimit","showMobileSelect","NativeSelectComponent","useInRouterContext","NativeSelectInRouterContext","NativeSelect","relative","SelectList","SelectOption","SelectWithTooltip","tooltipLabel","tooltip","unstable_timeout","isTooltipIgnored","visibilityState","activeElement","onSelectFocus","onSelectBlur","onFocus","onBlur","showPlaceholder","handleNativeSelectChange","itemIndex","target","hidden","navigate","useNavigate","onChangeWithNavigate","isProgressBar","progress","radius","strokeWidth","circleXY","circumference","PI","strokeDasharray","strokeDashoffset","strokeLinecap","DATERANGE_TOOLTIP","DateRangeSelect","chartIndex","dateRangeGroups","selectedDateRange","onDateRangeSelect","flatDateRanges","flatMap","dateRanges","selectWithTooltipListProps","Link","to","LabelWithDelayedSpinner","invisible","TIMEFRAME_TOOLTIP","TimeframeSelect","_flatTimeframes$find","timeFrameGroups","selectedTimeframe","favoriteTimeframes","isCompactView","onTimeframeSelect","onFavoriteTimeframeToggle","flatTimeframes","timeframes","_createElement","labelShort","groupIndex","isIconButtonActive","classNames","getTimeframeChipElementId","TimeframeBar","compactViewMaxBreakpointPx","loadingTimeframe","isDateRangeAvailable","containerElement","isFavoritesEnabled","isScrollIntoViewEnabled","scrollWrapperElement","setScrollWrapperElement","timeframeButtonsScrollLocation","setTimeframeButtonsScrollLocation","isOnLeftEdge","isOnRightEdge","elementWidth","isStockDetailTimeframeBar","timeframesInExpandedPanel","checkTimeframeWrapperScrollPosition","scrollLeft","offsetWidth","scrollWidth","timeframeElement","scrollIntoView","block","onScroll","onWheel","absDx","deltaX","deltaY","TooltipBox","tooltipColor","TooltipColor","tooltipProps","transformMap","auto","positionMain","arrowColor","getHeadingElement","CRYPTO_TICKERS","TIMEFRAME","useIsMounted","isMountedRef","getIsMounted","_elementRef$offsetWid","_elementRef$offsetHei","elementOverride","elementRef","setElementWidth","setElementHeight","offsetHeight","measureElement","newElementWidth","newElementHeight","measureElementDebounced","debounce","resizeObserver","controller","AbortController","setResizeObserver","loadResizeObserverPolyfill","polyfill","_controller$current","signal","aborted","_controller$current2","abort","ContextMenu","popperElement","setPopperElement","virtualRef","toJSON","getVirtualRef","hasBeenOpen","styles","attributes","usePopper","modifiers","offset","popper","ContextMenuDropdown","ContextMenuInner","innerState","_item$onClick","_window$gtag","_window","gtag","assign","menu_option","ChartGridCell","gridArea","GridLayout","columns","rows","gridTemplateColumns","gridTemplateRows","ChartGrid","defaultValueAccessor","InnerState","valueKey","changeKey","valueAccessor","handleChange","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","_props$appearance","_buttonSettings$size","_props$children","disabledTooltip","isInAction","isInActionProp","iconAction","buttonSettings","isActive","includeRedesign","grow","getButtonThemeSettings","getMainIcon","iconActive","titleActive","ToolbarGroup","_groupItems$map","defaultItem","groupItems","groupTitle","setSelectedItem","groupId","toLocaleLowerCase","useMobileNativeSelect","isAlternativeTheme","option","ToolbarItem","isItemActive","ToolbarDivider","TooltipInputComponent","tooltipContent","onMouseEnter","onMouseLeave","TooltipInput","StepContent","shepherdLibrary","loadShepherdLibrary","setLoading","shepherdPromise","default","buttonClasses","getStepButtons","tour","arr","_step$backButton","_step$nextButton","action","complete","classes","back","backButton","next","nextButton","processSteps","steps","_step$placement","_step$offset","_step$overlayRadius","_step$overlayPadding","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","_controller$current3","setComplete","tourUtils","_definition$initialTo","Tour","from","removeStep","processedSteps","addSteps","start","event_label","win","components","buttonGroup","checkbox","colorPicker","contextMenu","copyToClipboard","delayed","dialog","datePicker","dropdown","grid","list","range","spinner","timeframeBar","toolbar","tooltipInput","typography","FLibs","ReactRouterDOM","useSyncLocalStorage","storageKey","storage","subscription","unsubscribe","valueGetter","d3","nice","scaleLinear","scaleSymlog","DateFns","addBusinessDays","differenceInCalendarDays","eachDayOfInterval","endOfDay","intervalToDuration","isSameMonth","isSameWeek","isWeekend","isWithinInterval","startOfDay","startOfYear","sub","subMonths","subYears","assets","logo","ContentType","parseResponseForContentType","response","contentType","ApplicationJson","FormUrlEncoded","ThrowableError","constructor","status","message","extra","super","_defineProperty","this","isServerError","apiRequest","_ContentType","query","headers","throwOnAllErrors","requestUrl","URLSearchParams","requestOptions","request","cancelableRequest","textResponse","reponseContentType","get","Html","statusText","rayId","scope","setContext","emitter","subscribeToChanges","changeCallback","EventEmitter","newValue","getValue","setValue","onStorageChange","addListener","_emitter","removeListener","parsedValue","emit","_emitter2","valueToStore","Function","stringify","compilePath","path","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"],"sourceRoot":""}