{"version":3,"file":"home.ac822a34.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/home/market_sentiment.tsx","webpack://@finviz/website/./js/app/home/refresh.ts","webpack://@finviz/website/./js/app/home/indices-data.ts","webpack://@finviz/website/./js/app/home/signals-switch/types.ts","webpack://@finviz/website/./js/app/home/signals-switch/EliteSwitch.tsx","webpack://@finviz/website/./js/app/home/signals-switch/FreeSwitch.tsx","webpack://@finviz/website/./js/app/home/signals-switch/index.tsx","webpack://@finviz/website/./js/app/home/index.tsx","webpack://@finviz/website/./js/app/maps/services/api.ts","webpack://@finviz/website/./js/app/maps/store/action-creators.ts","webpack://@finviz/website/./js/app/maps/store/appDispatcher.ts","webpack://@finviz/website/./js/app/maps/store/constants.ts","webpack://@finviz/website/./js/app/maps/store/store.ts","webpack://@finviz/website/./js/app/maps/store/mapStore.ts","webpack://@finviz/website/./js/app/shared/chartLayoutConfig.ts","webpack://@finviz/website/./js/app/shared/parseJSONFromScript.ts","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/copy-to-clipboard/copy-to-clipboard.tsx","webpack://@finviz/website/./js/main/components/delayed.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown-item.tsx","webpack://@finviz/website/./js/main/components/dropdown/hooks.ts","webpack://@finviz/website/./js/main/components/context-menu/context-menu.tsx","webpack://@finviz/website/./js/main/components/grid/grid.tsx","webpack://@finviz/website/./js/main/components/inner-state/inner-state.tsx","webpack://@finviz/website/./js/main/components/range.tsx","webpack://@finviz/website/./js/main/components/toolbar/interfaces.ts","webpack://@finviz/website/./js/main/components/toolbar/hooks.ts","webpack://@finviz/website/./js/main/components/toolbar/toolbar.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-button.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-group.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-item.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-divider.tsx","webpack://@finviz/website/./js/main/components/tour/step-content.tsx","webpack://@finviz/website/./js/main/components/tour/utils.ts","webpack://@finviz/website/./js/main/components/tour/hooks.tsx","webpack://@finviz/website/./js/main/components/tabs/tab.tsx","webpack://@finviz/website/./js/main/components/tabs/tab-list.tsx","webpack://@finviz/website/./js/main/components/tabs/tab-panel.tsx","webpack://@finviz/website/./js/main/components/tabs/tabs.tsx","webpack://@finviz/website/./js/main/components/badge.tsx","webpack://@finviz/website/./js/main/components/tag.tsx","webpack://@finviz/website/./js/main/components/notification/hooks.ts","webpack://@finviz/website/./js/main/components/notification/notification-wrapper.tsx","webpack://@finviz/website/./js/main/components/notification/with-notification-context.tsx","webpack://@finviz/website/./js/main/components/notification/notification.tsx","webpack://@finviz/website/./js/main/components/tooltip-input.tsx","webpack://@finviz/website/./js/main/hooks/useVisualViewport.ts","webpack://@finviz/website/../node_modules/flux/index.js","webpack://@finviz/website/../node_modules/flux/lib/Dispatcher.js","webpack://@finviz/website/../node_modules/flux/lib/invariant.js","webpack://@finviz/website/../node_modules/keymirror/index.js","webpack://@finviz/website/../node_modules/react-router-dom/dist/index.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/5KB2YIDT.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/JJ3MV4KB.js"],"sourcesContent":["import { Component, MouseEvent } from 'react'\r\nimport ReactDOM from 'react-dom/client'\r\n\r\nimport { CancelablePromise, apiRequest } from '../../main/services/api'\r\nimport { Instrument } from '../../main/types'\r\nimport {\r\n ChartElementType,\r\n ChartLayout,\r\n LayoutType,\r\n Quote,\r\n RootChartConfigObject,\r\n ScaleType,\r\n TIMEFRAME,\r\n Theme,\r\n} from '../charts-lib'\r\n\r\nconst ticker = 'market_sentiment'\r\n\r\nconst MARKET_SENTIMENT_WIDTH_PX = 160\r\nconst MARKET_SENTIMENT_HEIGHT_PX = 40\r\nconst marketSentimentChartConfig: RootChartConfigObject = {\r\n layout: LayoutType['1h1v'],\r\n theme: FinvizSettings.hasDarkTheme ? Theme.dark : Theme.light,\r\n width: MARKET_SENTIMENT_WIDTH_PX,\r\n height: MARKET_SENTIMENT_HEIGHT_PX,\r\n scrollable: false,\r\n editable: false,\r\n cross: false,\r\n charts: [\r\n {\r\n width: MARKET_SENTIMENT_WIDTH_PX,\r\n height: MARKET_SENTIMENT_HEIGHT_PX,\r\n timeframe: TIMEFRAME.i3,\r\n scale: ScaleType.Linear,\r\n ticker: ticker,\r\n instrument: Instrument.MarketSentiment,\r\n refreshData: false,\r\n premarket: false,\r\n aftermarket: false,\r\n dateRange: null,\r\n stretch: true,\r\n panes: [\r\n {\r\n height: MARKET_SENTIMENT_HEIGHT_PX,\r\n elements: [\r\n {\r\n type: ChartElementType.MarketSentiment,\r\n overlays: [],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n}\r\n\r\ninterface MarketSentimentState {\r\n loading: boolean\r\n enabled: boolean\r\n chartConfig: RootChartConfigObject | null\r\n}\r\n\r\nclass MarketSentiment extends Component {\r\n state: MarketSentimentState = {\r\n loading: true,\r\n enabled: false,\r\n chartConfig: null,\r\n }\r\n\r\n _timer: number | null = null\r\n _lastRequest: CancelablePromise | null = null\r\n\r\n componentDidMount() {\r\n this._fetchData('', () => {\r\n this.setState({ chartConfig: marketSentimentChartConfig })\r\n })\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._timer !== null) {\r\n this._lastRequest?.cancel?.()\r\n clearTimeout(this._timer)\r\n }\r\n }\r\n\r\n render() {\r\n const { loading, enabled, chartConfig } = this.state\r\n\r\n return (\r\n \r\n \r\n \r\n Click BULL for positive market sentiment
Click BEAR for negative market sentiment] offsetx=[-200] offsety=[20] delay=[100]\">\r\n {chartConfig && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n \r\n this._vote(e, 'bull')}\r\n >\r\n Bull\r\n \r\n \r\n this._vote(e, 'bear')}\r\n >\r\n Bear\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n _vote(e: MouseEvent, sentiment: string) {\r\n e.preventDefault()\r\n this.setState({ enabled: false })\r\n this._fetchData('?b=' + sentiment, undefined, false)\r\n }\r\n\r\n _fetchData = async (urlQuery = '', callback?: () => void, setTimer = true) => {\r\n if (setTimer && this._timer !== null) clearTimeout(this._timer)\r\n\r\n if (document.hidden) {\r\n // console.log(`${+new Date()} Document is hidden, canceling refresh`)\r\n if (setTimer) this._timer = window.setTimeout(() => this._fetchData(urlQuery, callback), 1000)\r\n return\r\n }\r\n\r\n // console.log(`${+new Date()} Document is visible, refreshing`)\r\n\r\n this._lastRequest = apiRequest(`/api/market_sentiment.ashx${urlQuery}`)\r\n const json = await this._lastRequest\r\n if (json) {\r\n const quoteData = getData(json)\r\n const quote = Quote.findByAttribute('ticker', ticker)\r\n if (quote) {\r\n Quote.findByAttribute('ticker', ticker)!.updateAttributes(getData(json))\r\n } else {\r\n Quote.create(quoteData).save()\r\n }\r\n callback?.()\r\n\r\n this.setState({\r\n loading: false,\r\n enabled: json.enabled,\r\n })\r\n }\r\n\r\n if (setTimer) {\r\n this._timer = window.setTimeout(() => this._fetchData(urlQuery, callback), (json?.refresh ?? 30) * 1000)\r\n }\r\n }\r\n}\r\n\r\ninterface QuoteData {\r\n refresh: number\r\n enabled: boolean\r\n sum: number[]\r\n weight: number[]\r\n time: string\r\n visibleMinutes: number\r\n}\r\n\r\nfunction getData(data: QuoteData) {\r\n return {\r\n close: data.sum,\r\n volume: data.weight,\r\n date: Array.from('1'.repeat(data.sum.length)).map((x) => parseInt(x, 10)),\r\n ticker: ticker,\r\n timeframe: 'i3',\r\n instrument: 'market_sentiment',\r\n premarket: false,\r\n aftermarket: false,\r\n afterChange: null,\r\n afterClose: null,\r\n drawMinutesPerDay: data.visibleMinutes,\r\n marketStartMinutes: 570,\r\n premarketLengthMinutes: 0,\r\n aftermarketLengthMinutes: 0,\r\n }\r\n}\r\n\r\nlet root: ReactDOM.Root\r\nfunction mount() {\r\n const rootEl = document.getElementById('js-market-sentiment')\r\n root = ReactDOM.createRoot(rootEl!)\r\n root.render()\r\n}\r\n\r\nfunction unmount() {\r\n root.unmount?.()\r\n}\r\n\r\nmount()\r\n\r\nexport { mount, unmount }\r\n","import { ContentType, apiRequest } from '../../main/services/api'\r\nimport { mapPerf } from '../maps/services/api'\r\nimport mapActionCreators from '../maps/store/action-creators'\r\nimport { MapSubtypeId, MapTypeId } from '../maps/types'\r\nimport { getMapsRefreshInterval } from '../maps/utils'\r\nimport { intervalCallbackOnWindowVisible } from '../shared/documentVisibility'\r\nimport { isStockFastRefreshAvailable } from '../shared/isStockFastRefreshAvailable'\r\nimport { parseJSONFromScript } from '../shared/parseJSONFromScript'\r\nimport { Indices, updateIndices } from './indices-data'\r\n\r\ninterface RefreshInfo {\r\n userId: string\r\n version: number\r\n interval: number\r\n hasGeoMaps: boolean\r\n}\r\n\r\nconst refreshInfo = parseJSONFromScript('refresh-init')\r\n\r\nfunction refreshPage(newDocument: Document) {\r\n // Replace market stats\r\n const oldMarketStats = document.getElementsByClassName('market-stats')\r\n const newMarketStats = newDocument.getElementsByClassName('market-stats')\r\n if (oldMarketStats.length === newMarketStats.length) {\r\n Array.from(oldMarketStats).forEach((_, index) => {\r\n const oldElement = oldMarketStats.item(index)\r\n const newElement = newMarketStats.item(index)\r\n if (oldElement && newElement) {\r\n oldElement.innerHTML = newElement.innerHTML\r\n }\r\n })\r\n }\r\n\r\n replaceSignalTables(newDocument)\r\n\r\n // Replace bottom\r\n const oldHomepageBottom = document.getElementById('js-homepage_bottom')\r\n const newHomepageBottom = newDocument.getElementById('js-homepage_bottom')\r\n if (oldHomepageBottom && newHomepageBottom) {\r\n oldHomepageBottom.innerHTML = newHomepageBottom.innerHTML\r\n }\r\n\r\n if (FinvizSettings.hasUserPremium || FinvizSettings.hasRedesignEnabled) {\r\n import(/* webpackChunkName: \"recent_quotes\" */ '../shared/recent_quotes').then(({ RenderRecentQuotes }) => {\r\n RenderRecentQuotes()\r\n })\r\n }\r\n\r\n // Send refresh event to google analytics\r\n window.gtag?.('event', 'refresh', { event_category: 'page' })\r\n // Refresh any ads that might be on the page\r\n if (window.finvizBannersLoaded === true) {\r\n window.initFinvizBanners?.()\r\n } else if (typeof window.refreshAds === 'function') {\r\n window.refreshAds('#js-homepage_bottom [id*=IC_D_]')\r\n }\r\n}\r\n\r\nexport function replaceSignalTables(newDocument: Document) {\r\n // Replace left signals table\r\n const oldSignalsLeft = document.getElementById('js-signals_1')\r\n const newSignalsLeft = newDocument.getElementById('js-signals_1')\r\n if (oldSignalsLeft && newSignalsLeft) {\r\n oldSignalsLeft.innerHTML = newSignalsLeft.innerHTML\r\n }\r\n\r\n // Replace right signals table\r\n const oldSignalsRight = document.getElementById('js-signals_2')\r\n const newSignalsRight = newDocument.getElementById('js-signals_2')\r\n if (oldSignalsRight && newSignalsRight) {\r\n oldSignalsRight.innerHTML = newSignalsRight.innerHTML\r\n }\r\n}\r\n\r\nexport async function getRefreshData() {\r\n const data = await apiRequest(window.location.pathname, {\r\n headers: {\r\n 'Content-Type': ContentType.Html,\r\n 'X-Is-Ajax-Request': 'true',\r\n 'X-Theme': FinvizSettings.hasDarkTheme ? 'dark' : FinvizSettings.hasRedesignEnabled ? 'light' : 'legacy',\r\n },\r\n })\r\n\r\n if (!data) return undefined\r\n\r\n const newDocument = new DOMParser().parseFromString(data, 'text/html')\r\n const newRefreshInfo = parseJSONFromScript('refresh-init', newDocument)\r\n\r\n if (!refreshInfo || !newRefreshInfo || refreshInfo.userId !== newRefreshInfo.userId) return undefined\r\n\r\n if (refreshInfo.version !== newRefreshInfo.version) {\r\n window.location.reload()\r\n }\r\n\r\n return newDocument\r\n}\r\n\r\nfunction initRefresh(interval: number) {\r\n intervalCallbackOnWindowVisible({ interval }, async function handleRefresh() {\r\n const newDocument = await getRefreshData()\r\n\r\n if (newDocument) {\r\n refreshPage(newDocument)\r\n }\r\n })\r\n}\r\n\r\nenum IndicesPollingIntervalInMs {\r\n Default = 3000,\r\n Reduced = 60000,\r\n Free = 180000,\r\n}\r\n\r\nif (refreshInfo?.interval) {\r\n initRefresh(refreshInfo.interval * 1000)\r\n\r\n function getIndicesRefreshInterval() {\r\n if (!FinvizSettings.hasUserPremium) {\r\n return IndicesPollingIntervalInMs.Free\r\n }\r\n if (!isStockFastRefreshAvailable(false, false)) {\r\n return IndicesPollingIntervalInMs.Reduced\r\n }\r\n\r\n return IndicesPollingIntervalInMs.Default\r\n }\r\n\r\n intervalCallbackOnWindowVisible({ interval: getIndicesRefreshInterval }, async function handleRefresh() {\r\n const newIndicesData = await apiRequest('/api/indices_data.ashx')\r\n\r\n if (newIndicesData) {\r\n updateIndices(newIndicesData)\r\n }\r\n })\r\n\r\n intervalCallbackOnWindowVisible({ interval: getMapsRefreshInterval }, async function handleRefresh() {\r\n const perfDataSecReq = mapPerf(MapTypeId.Sector, MapSubtypeId.DayPerf)\r\n const perfDataGeoReq = refreshInfo.hasGeoMaps ? mapPerf(MapTypeId.World, MapSubtypeId.DayPerf) : null\r\n\r\n const [perfDataSec, perfDataGeo] = await Promise.all([perfDataSecReq, perfDataGeoReq])\r\n\r\n try {\r\n if (perfDataSec) {\r\n if (window.FinvizIndexSecMap.version !== perfDataSec.version) {\r\n window.location.reload()\r\n }\r\n mapActionCreators.updatePerfData(window.FinvizIndexSecMap, perfDataSec)\r\n }\r\n\r\n if (perfDataGeo) {\r\n if (window.FinvizIndexGeoMap.version !== perfDataGeo.version) {\r\n window.location.reload()\r\n }\r\n mapActionCreators.updatePerfData(window.FinvizIndexGeoMap, perfDataGeo)\r\n }\r\n } catch {}\r\n })\r\n}\r\n","import { Quote } from '../charts-lib'\r\nimport './market_sentiment'\r\nimport './refresh'\r\n\r\ninterface Index {\r\n ticker: string\r\n timeframe: string\r\n volume: number[]\r\n date: number[]\r\n open: number[]\r\n high: number[]\r\n low: number[]\r\n close: number[]\r\n lastOpen: null\r\n lastHigh: null\r\n lastLow: null\r\n lastClose: number\r\n lastVolume: null\r\n lastDate: number\r\n prevClose: number\r\n afterClose: null\r\n afterChange: null\r\n relativeVolume: number\r\n}\r\n\r\nexport type Indices = Record\r\n\r\nexport function getData(index: string, ticker: string, indices: Indices) {\r\n return {\r\n ...indices[index],\r\n ticker: ticker, // use text?\r\n timeframe: 'i10',\r\n instrument: 'stock',\r\n premarket: false,\r\n aftermarket: false,\r\n hasChartEvents: false,\r\n afterChange: null,\r\n afterClose: null,\r\n drawMinutesPerDay: 390,\r\n marketStartMinutes: 570,\r\n premarketLengthMinutes: 0,\r\n aftermarketLengthMinutes: 0,\r\n }\r\n}\r\n\r\nexport function updateIndices(indices: Indices) {\r\n const dowQ = Quote.findByAttribute('ticker', 'DOW')\r\n if (dowQ) dowQ.updateAttributes(getData('^DJI', 'DOW', indices))\r\n\r\n const nasdaqQ = Quote.findByAttribute('ticker', 'NASDAQ')\r\n if (nasdaqQ) nasdaqQ.updateAttributes(getData('^IXIC', 'NASDAQ', indices))\r\n\r\n const sap500Q = Quote.findByAttribute('ticker', 'S&P 500')\r\n if (sap500Q) sap500Q.updateAttributes(getData('^GSPC', 'S&P 500', indices))\r\n\r\n const rutQ = Quote.findByAttribute('ticker', 'RUSSELL 2000')\r\n if (rutQ) rutQ.updateAttributes(getData('^RUT', 'RUSSELL 2000', indices))\r\n\r\n if (!dowQ || !nasdaqQ || !sap500Q || !rutQ) {\r\n // Temporary code below\r\n // additional info gaining for https://finvizcom.sentry.io/issues/3963831382/?project=33153&referrer=issue-stream&statsPeriod=14d&stream_index=0\r\n window.Sentry?.captureMessage('indices-data.ts updateIndices', {\r\n extra: {\r\n allAvailableTickers: Quote.all()\r\n .reduce((acc: string[], cur: { ticker: string }) => {\r\n acc.push(cur.ticker)\r\n return acc\r\n }, [])\r\n .join(','),\r\n },\r\n })\r\n }\r\n}\r\n","export enum HPSignalInterval {\r\n intraday = 'intraday',\r\n daily = 'daily',\r\n}\r\n\r\nexport const HP_SIGNAL_LABELS: Record = {\r\n [HPSignalInterval.intraday]: 'Intraday',\r\n [HPSignalInterval.daily]: 'Daily',\r\n}\r\nexport const HP_SIGNAL_COOKIE = 'signalsInterval'\r\nexport const HP_SIGNAL_SWITCH_RENDER_SELECTOR = 'js-switches-root'\r\n","import classNames from 'classnames'\r\n\r\nimport { Icon, Select, SelectOption } from '../../../main/components'\r\nimport { HPSignalInterval, HP_SIGNAL_LABELS } from './types'\r\n\r\nconst IS_REDESIGN = FinvizSettings.hasRedesignEnabled\r\nconst OPTIONS = Object.entries(HP_SIGNAL_LABELS).map(([value, label]) => ({ value: value as HPSignalInterval, label }))\r\nconst ROUNDING = IS_REDESIGN ? undefined : 'none'\r\n\r\ntype EliteSwitchProps = {\r\n isLoading: boolean\r\n signal: HPSignalInterval\r\n onSignalChange: (signals: HPSignalInterval) => void\r\n}\r\n\r\nexport default function EliteSwitch({ isLoading, signal, onSignalChange }: EliteSwitchProps) {\r\n return (\r\n option.value === signal)}\r\n rightContent={}\r\n onChange={({ value }) => {\r\n onSignalChange(value)\r\n }}\r\n placement=\"bottom-end\"\r\n orientation=\"horizontal\"\r\n isLoading={isLoading}\r\n disabled={isLoading}\r\n gutter={IS_REDESIGN ? 0 : 1}\r\n // override height defined by button to not stretch old hp signal tables\r\n style={IS_REDESIGN ? undefined : { height: 'auto' }}\r\n >\r\n {OPTIONS.map((item) => (\r\n \r\n {item.label}\r\n \r\n ))}\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Button, Icon, Paragraph } from '../../../main/components'\r\nimport { Popover, PopoverTrigger, usePopoverState } from '../../../main/components/popover'\r\nimport { HPSignalInterval, HP_SIGNAL_LABELS } from './types'\r\n\r\nconst IS_REDESIGN = FinvizSettings.hasRedesignEnabled\r\n\r\nexport default function FreeSwitch() {\r\n const state = usePopoverState({ placement: 'bottom-end' })\r\n const isOpen = state.useState('open')\r\n\r\n return (\r\n <>\r\n {IS_REDESIGN ? (\r\n \r\n {HP_SIGNAL_LABELS[HPSignalInterval.daily]}\r\n \r\n ) : (\r\n \r\n {HP_SIGNAL_LABELS[HPSignalInterval.daily]}\r\n \r\n \r\n )}\r\n \r\n
\r\n \r\n Get access to intraday data with Finviz*Elite.\r\n \r\n \r\n Subscribe\r\n \r\n
\r\n \r\n \r\n )\r\n}\r\n","import React from 'react'\r\nimport * as ReactDOM from 'react-dom'\r\n\r\nimport { setCookieRequest } from '../../../main/services/api'\r\nimport { getCookie } from '../../shared/cookie'\r\nimport { getRefreshData, replaceSignalTables } from '../refresh'\r\nimport EliteSwitch from './EliteSwitch'\r\nimport FreeSwitch from './FreeSwitch'\r\nimport { HPSignalInterval, HP_SIGNAL_COOKIE } from './types'\r\n\r\nconst HEADER_SWITCH_SELECTOR = '.js-signal-switch'\r\nconst SWITCH_BUTTON_SELECTOR = '.js-signal-switch-button'\r\nconst signalSwitchesElements = Array.from(document.querySelectorAll(HEADER_SWITCH_SELECTOR))\r\n\r\nfunction getSignalsCookie() {\r\n const value = getCookie(HP_SIGNAL_COOKIE)\r\n let signal = HPSignalInterval.daily\r\n const castedValue = value as HPSignalInterval\r\n\r\n if (FinvizSettings.hasUserPremium && !!castedValue) signal = castedValue\r\n return signal\r\n}\r\n\r\nasync function handleSignalIntervalChange() {\r\n const newDocument = await getRefreshData()\r\n if (newDocument) {\r\n replaceSignalTables(newDocument)\r\n } else {\r\n document.location.reload()\r\n }\r\n}\r\n\r\nexport default function HomepageSignals() {\r\n const [signal, setSignal] = React.useState(getSignalsCookie())\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n // remove inlined buttons from html template\r\n document.querySelectorAll(SWITCH_BUTTON_SELECTOR).forEach((element) => {\r\n element.remove()\r\n })\r\n }, [])\r\n\r\n const handleSignalChange = async (changedSignal: HPSignalInterval) => {\r\n if (changedSignal !== signal) {\r\n setSignal(changedSignal)\r\n setIsLoading(true)\r\n try {\r\n await setCookieRequest(HP_SIGNAL_COOKIE, changedSignal)\r\n await handleSignalIntervalChange().catch()\r\n } catch {\r\n setSignal(signal)\r\n }\r\n setIsLoading(false)\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {signalSwitchesElements.map((element) =>\r\n ReactDOM.createPortal(\r\n FinvizSettings.hasUserPremium ? (\r\n \r\n ) : (\r\n \r\n ),\r\n element\r\n )\r\n )}\r\n \r\n )\r\n}\r\n","import ReactDOMClient from 'react-dom/client'\r\n\r\nimport { SpecificChartFunctionality } from '../../main/constants'\r\nimport {\r\n ChartElementType,\r\n ChartLayout,\r\n Instrument,\r\n LayoutType,\r\n Quote,\r\n ScaleType,\r\n TIMEFRAME,\r\n Theme,\r\n} from '../charts-lib'\r\nimport { getCustomColorsFromCookies } from '../shared/chartLayoutConfig'\r\nimport { parseJSONFromScript } from '../shared/parseJSONFromScript'\r\nimport { ready } from '../shared/ready'\r\nimport type { Indices } from './indices-data'\r\nimport { getData } from './indices-data'\r\nimport './market_sentiment'\r\nimport './refresh'\r\nimport SignalIntervalSwitch from './signals-switch'\r\nimport { HP_SIGNAL_SWITCH_RENDER_SELECTOR } from './signals-switch/types'\r\n\r\nif (FinvizSettings.hasUserPremium || FinvizSettings.hasRedesignEnabled) {\r\n import(/* webpackChunkName: \"recent_quotes\" */ '../shared/recent_quotes').then(({ RenderRecentQuotes }) => {\r\n RenderRecentQuotes()\r\n })\r\n}\r\n\r\nfunction getChartConfig(ticker: string) {\r\n return {\r\n layout: LayoutType['1h1v'],\r\n width: 320,\r\n height: 190,\r\n barWidth: 3,\r\n barMargin: 1,\r\n scrollable: false,\r\n editable: false,\r\n cross: false,\r\n colors: getCustomColorsFromCookies(),\r\n specificChartFunctionality: SpecificChartFunctionality.smallIndex,\r\n theme: FinvizSettings.hasDarkTheme ? Theme.dark : Theme.light,\r\n charts: [\r\n {\r\n width: 0,\r\n premarket: false,\r\n aftermarket: false,\r\n dateRange: null,\r\n height: 190,\r\n timeframe: TIMEFRAME.i10,\r\n scale: ScaleType.Linear,\r\n ticker: ticker,\r\n // leftOffset: 0,\r\n instrument: Instrument.Stock,\r\n refreshData: false,\r\n // stretch: true,\r\n panes: [\r\n {\r\n height: 190,\r\n elements: [\r\n {\r\n type: ChartElementType.CandleStick,\r\n overlays: [],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n }\r\n}\r\n\r\nfunction renderSignalIntervalSwitch() {\r\n const signalSwitches = document.getElementById(HP_SIGNAL_SWITCH_RENDER_SELECTOR)\r\n\r\n if (signalSwitches) {\r\n const root = ReactDOMClient.createRoot(signalSwitches)\r\n root.render()\r\n }\r\n}\r\n\r\nready(function () {\r\n const indices = parseJSONFromScript('js-indices')!\r\n const root = ReactDOMClient.createRoot(document.getElementById('home_indexes')!)\r\n\r\n Quote.create(getData('^DJI', 'DOW', indices)).save()\r\n Quote.create(getData('^IXIC', 'NASDAQ', indices)).save()\r\n Quote.create(getData('^GSPC', 'S&P 500', indices)).save()\r\n Quote.create(getData('^RUT', 'RUSSELL 2000', indices)).save()\r\n\r\n root.render(\r\n <>\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n )\r\n\r\n renderSignalIntervalSwitch()\r\n})\r\n","import { ContentType, apiRequest } from '../../../main/services/api'\r\nimport { MapSubtypeId, MapTypeId, PerfData } from '../types'\r\n\r\nexport function mapPerf(type: MapTypeId, subtype: MapSubtypeId) {\r\n return apiRequest(`/api/map_perf.ashx`, { query: { t: type, st: subtype } })\r\n}\r\n\r\nexport function mapPerfScreener(query = window.location.search) {\r\n return apiRequest(`/api/map_perf_screener.ashx${query}`)\r\n}\r\n\r\nexport interface UploadMapResponse {\r\n imgUrl: string\r\n shareUrl: string\r\n}\r\n\r\nexport function uploadMap({ type, subtype, data }: { type: MapTypeId; subtype: MapSubtypeId; data: string }) {\r\n return apiRequest(`/publish_map_submit.ashx`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': ContentType.FormUrlEncoded,\r\n },\r\n body: new URLSearchParams({\r\n file: data.replace('data:image/png;base64,', ''),\r\n type,\r\n subtype,\r\n }),\r\n })\r\n}\r\n","import debounce from 'lodash.debounce'\r\n\r\nimport { CancelablePromise, apiRequest } from '../../../main/services/api'\r\nimport Treemap from '../treemap'\r\nimport { MapData, MapDataNode, MapTypeId, PerfData, Scale } from '../types'\r\nimport { getVisibleTooltipNodes } from '../utils'\r\nimport AppDispatcher from './appDispatcher'\r\nimport { ActionTypes } from './constants'\r\nimport mapStore from './mapStore'\r\n\r\nvar _targetScale = 1\r\nfunction zoomIn(treemap: Treemap, scale: number, tx: number, ty: number) {\r\n _targetScale = scale\r\n animate()\r\n function animate() {\r\n treemap.zoom.scale(+(treemap.zoom.scale() + 0.05).toFixed(2), { x: tx, y: ty })\r\n AppDispatcher.handleViewAction({ type: ActionTypes.RENDER_TREEMAP })\r\n if (treemap.zoom.scale() + 0.05 < _targetScale + 0.00001) {\r\n requestAnimationFrame(animate)\r\n }\r\n }\r\n}\r\n\r\nfunction zoomOut(treemap: Treemap, scale: number, tx: number, ty: number) {\r\n _targetScale = scale\r\n animate()\r\n function animate() {\r\n treemap.zoom.scale(+(treemap.zoom.scale() - 0.05).toFixed(2), { x: tx, y: ty })\r\n AppDispatcher.handleViewAction({ type: ActionTypes.RENDER_TREEMAP })\r\n if (treemap.zoom.scale() - 0.05 > _targetScale - 0.00001) {\r\n requestAnimationFrame(animate)\r\n }\r\n }\r\n}\r\n\r\nfunction updateVisibleSparklines(treemap: Treemap) {\r\n const hoveredNode = mapStore.getHoveredNode(treemap.mapNodeId)\r\n const visibleNodes = getVisibleTooltipNodes(hoveredNode)\r\n\r\n if (!visibleNodes.length) return\r\n\r\n const tickersToLoad = visibleNodes.map((node) => node!.name)\r\n if (hoveredNode && !tickersToLoad.includes(hoveredNode?.name)) {\r\n tickersToLoad.push(hoveredNode.name)\r\n }\r\n\r\n debouncedLoadSparklines(tickersToLoad, treemap.type)\r\n}\r\n\r\nlet _lastSparklinesRequest: CancelablePromise | null = null\r\nasync function loadSparklines(tickers: string[], mapType: string) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.LOAD_SPARKLINES_STARTED,\r\n })\r\n _lastSparklinesRequest?.cancel?.()\r\n _lastSparklinesRequest = apiRequest(\r\n '/api/map_sparklines.ashx',\r\n { query: { t: tickers.join(','), ty: mapType } },\r\n true\r\n )\r\n\r\n try {\r\n const data = await _lastSparklinesRequest\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.LOAD_SPARKLINES_COMPLETED,\r\n data: data,\r\n })\r\n } catch (error) {\r\n // This just means we canceled the previous request\r\n if (_lastSparklinesRequest.aborted) return\r\n\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.LOAD_SPARKLINES_FAILED,\r\n error,\r\n })\r\n }\r\n}\r\n\r\nconst debouncedLoadSparklines = debounce(loadSparklines, 200, { trailing: true })\r\n\r\nconst actions = {\r\n setHoveredNode(mapNodeId: string, node: MapDataNode | undefined) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.SET_HOVERED_NODE,\r\n node,\r\n mapNodeId,\r\n })\r\n },\r\n\r\n loadSparklineData(tickers: string[], mapType: MapTypeId) {\r\n if (tickers.length > 0) {\r\n debouncedLoadSparklines(tickers, mapType)\r\n }\r\n },\r\n\r\n loadSparklinesCancel() {\r\n _lastSparklinesRequest?.cancel?.()\r\n },\r\n\r\n resetSparklineData() {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.RESET_SPARKLINE_DATA,\r\n })\r\n },\r\n\r\n changeTranslate(treemap: Treemap, tx: number, ty: number) {\r\n treemap.zoom.translate([tx, ty])\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.CHANGE_TRANSLATE,\r\n })\r\n },\r\n\r\n zoom(treemap: Treemap, direction: number, offsetX: number, offsetY: number) {\r\n if (direction > 0) {\r\n const zoomLevel = treemap.getNextZoomLevel()\r\n if (zoomLevel !== treemap.zoom.scale()) {\r\n zoomIn(treemap, zoomLevel, offsetX, offsetY)\r\n }\r\n } else {\r\n const zoomLevel = treemap.getPreviousZoomLevel()\r\n if (zoomLevel !== treemap.zoom.scale()) {\r\n zoomOut(treemap, zoomLevel, offsetX, offsetY)\r\n }\r\n }\r\n },\r\n\r\n render() {\r\n AppDispatcher.handleViewAction({ type: ActionTypes.RENDER_TREEMAP })\r\n },\r\n\r\n zoomAndTranslate(treemap: Treemap, scale: number, tx: number, ty: number) {\r\n treemap.zoom.scale(1, { x: tx, y: ty })\r\n treemap.zoom.scale(scale, { x: tx, y: ty })\r\n AppDispatcher.handleViewAction({ type: ActionTypes.RENDER_TREEMAP })\r\n },\r\n\r\n updateLayout(\r\n treemap: Treemap,\r\n props: { width: number; height: number; data: MapData; scale: Scale; dataHash: string }\r\n ) {\r\n treemap.updateData(props)\r\n treemap.zoom.updateDimensions(props)\r\n AppDispatcher.handleViewAction({ type: ActionTypes.RENDER_TREEMAP })\r\n\r\n // Update hovered node if any\r\n const hoveredNode = mapStore.getHoveredNode(treemap.mapNodeId)\r\n if (hoveredNode) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.SET_HOVERED_NODE,\r\n node: treemap.nodes.find((node) => node.name === hoveredNode.name),\r\n mapNodeId: treemap.mapNodeId,\r\n })\r\n updateVisibleSparklines(treemap)\r\n }\r\n },\r\n\r\n updatePerfData(treemap?: Treemap, data?: PerfData) {\r\n if (!treemap || !data) return\r\n\r\n treemap.updatePerf(data)\r\n AppDispatcher.handleServerAction({ type: ActionTypes.UPDATE_DATA, version: data.version })\r\n\r\n updateVisibleSparklines(treemap)\r\n },\r\n\r\n _setOnPublish(getPublishCanvas: () => HTMLCanvasElement) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.SET_PUBLISH_CANVAS,\r\n getPublishCanvas,\r\n })\r\n },\r\n\r\n setupWidget() {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.SET_WIDGET,\r\n isWidget: true,\r\n })\r\n },\r\n}\r\n\r\nexport default actions\r\n","import { Dispatcher } from 'flux'\r\n\r\nimport { PayloadSources } from './constants'\r\n\r\nclass AppDispatcher extends Dispatcher {\r\n handleServerAction(action: any) {\r\n var payload = {\r\n source: PayloadSources.SERVER_ACTION,\r\n action: action,\r\n }\r\n //console.log(action, payload);\r\n this.dispatch(payload)\r\n }\r\n\r\n handleViewAction(action: any) {\r\n var payload = {\r\n source: PayloadSources.VIEW_ACTION,\r\n action: action,\r\n }\r\n //console.log(action, payload);\r\n this.dispatch(payload)\r\n }\r\n}\r\n\r\nconst dispatcher = new AppDispatcher()\r\nexport default dispatcher\r\n","import keyMirror from 'keymirror'\r\n\r\nconst ActionTypes = keyMirror({\r\n RENDER_TREEMAP: null,\r\n CHANGE_TRANSLATE: null,\r\n SET_HOVERED_NODE: null,\r\n\r\n LOAD_SPARKLINES_STARTED: null,\r\n LOAD_SPARKLINES_COMPLETED: null,\r\n LOAD_SPARKLINES_FAILED: null,\r\n RESET_SPARKLINE_DATA: null,\r\n\r\n INIT_STARTED: null,\r\n INIT_FAILED: null,\r\n\r\n UPDATE_DATA: null,\r\n\r\n SET_PUBLISH_CANVAS: null,\r\n\r\n SET_WIDGET: null,\r\n})\r\n\r\nconst PayloadSources = keyMirror({\r\n SERVER_ACTION: null,\r\n VIEW_ACTION: null,\r\n})\r\n\r\nexport { ActionTypes, PayloadSources }\r\n","import { EventEmitter } from 'events'\r\n\r\nclass Store extends EventEmitter {\r\n static CHANGE_EVENT = 'change'\r\n\r\n emitChange() {\r\n this.emit(Store.CHANGE_EVENT)\r\n }\r\n\r\n addChangeListener(callback: (...args: any[]) => void) {\r\n this.on(Store.CHANGE_EVENT, callback)\r\n }\r\n\r\n removeChangeListener(callback: (...args: any[]) => void) {\r\n this.removeListener(Store.CHANGE_EVENT, callback)\r\n }\r\n}\r\n\r\nexport default Store\r\n","import { MapDataNode } from '../types'\r\nimport AppDispatcher from './appDispatcher'\r\nimport { ActionTypes } from './constants'\r\nimport Store from './store'\r\n\r\nlet _hoveredNode: MapDataNode\r\nlet _mapNodeId: string\r\nlet _sparklinesData: Record = {}\r\nlet _dataVersion: number\r\nlet _isWidget = false\r\nlet _getPublishCanvas: () => HTMLCanvasElement\r\n\r\nclass MapStore extends Store {\r\n getHoveredNode(mapNodeId: string) {\r\n if (mapNodeId === _mapNodeId) return _hoveredNode\r\n return undefined\r\n }\r\n\r\n getSparklines() {\r\n return _sparklinesData\r\n }\r\n\r\n getDataVersion() {\r\n return _dataVersion\r\n }\r\n\r\n isWidget() {\r\n return _isWidget\r\n }\r\n\r\n getPublishCanvas() {\r\n return _getPublishCanvas()\r\n }\r\n}\r\n\r\nvar mapStore = new MapStore()\r\n\r\n// @ts-ignore\r\nmapStore.dispatchToken = AppDispatcher.register(function (payload: any) {\r\n var action = payload.action\r\n\r\n switch (action.type) {\r\n case ActionTypes.RENDER_TREEMAP:\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.SET_HOVERED_NODE:\r\n if (action.node !== _hoveredNode) {\r\n _hoveredNode = action.node\r\n _mapNodeId = action.mapNodeId\r\n mapStore.emitChange()\r\n }\r\n break\r\n\r\n case ActionTypes.CHANGE_TRANSLATE:\r\n // @ts-ignore\r\n _hoveredNode = undefined\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.LOAD_SPARKLINES_STARTED:\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.LOAD_SPARKLINES_COMPLETED:\r\n _sparklinesData = { ..._sparklinesData, ...action.data }\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.RESET_SPARKLINE_DATA:\r\n case ActionTypes.LOAD_SPARKLINES_FAILED:\r\n _sparklinesData = {}\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.UPDATE_DATA:\r\n _dataVersion = action.version\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.SET_PUBLISH_CANVAS:\r\n _getPublishCanvas = action.getPublishCanvas\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.SET_WIDGET:\r\n _isWidget = action.isWidget\r\n mapStore.emitChange()\r\n break\r\n }\r\n})\r\n\r\nexport default mapStore\r\n","import { SpecificChartFunctionality } from '../../main/constants'\r\nimport { ChartConfigChartPaneElement, Instrument, LayoutType, ScaleType, TIMEFRAME, Theme } from '../charts-lib'\r\nimport { getParsedCookies } from './cookie'\r\n\r\ninterface PaneElementProps extends ChartConfigChartPaneElement {\r\n label?: string\r\n fromDate?: string\r\n toDate?: string\r\n min?: number\r\n tickers: string[]\r\n}\r\n\r\ninterface StaticChartConfigProps {\r\n width?: number\r\n height?: number\r\n ticker: string\r\n timeframe: TIMEFRAME\r\n paneElements: PaneElementProps[]\r\n specificChartFunctionality?: SpecificChartFunctionality\r\n colorsOverride?: Array\r\n theme?: Theme\r\n colors?: ReturnType\r\n refreshData?: boolean\r\n}\r\n\r\nexport function getStaticChartConfig({\r\n width = 800,\r\n height = 400,\r\n ticker,\r\n timeframe,\r\n paneElements,\r\n specificChartFunctionality = SpecificChartFunctionality.default,\r\n colorsOverride,\r\n theme,\r\n colors = getCustomColorsFromCookies(),\r\n refreshData = false,\r\n}: StaticChartConfigProps) {\r\n return {\r\n layout: LayoutType['1h1v'],\r\n width,\r\n height,\r\n barWidth: 1,\r\n barMargin: 0,\r\n scrollable: false,\r\n editable: false,\r\n specificChartFunctionality,\r\n colorsOverride,\r\n theme,\r\n colors,\r\n charts: [\r\n {\r\n width: 0,\r\n premarket: false,\r\n aftermarket: false,\r\n dateRange: null,\r\n height,\r\n timeframe,\r\n scale: ScaleType.Linear,\r\n ticker: ticker,\r\n leftOffset: 0,\r\n instrument: Instrument.Stock,\r\n refreshData,\r\n stretch: true,\r\n panes: [\r\n {\r\n height,\r\n elements: paneElements,\r\n },\r\n ],\r\n },\r\n ],\r\n }\r\n}\r\n\r\nexport function getCustomColorsFromCookies() {\r\n try {\r\n return JSON.parse(getParsedCookies('customColors') as string)\r\n } catch {\r\n return undefined\r\n }\r\n}\r\n","export function parseJSONFromScript(id: string, doc: Document = document): T | null {\r\n const el = doc.getElementById(id)\r\n const isValidElement = el && el.tagName === 'SCRIPT' && el.getAttribute('type') === 'application/json'\r\n\r\n if (!isValidElement) {\r\n window.Sentry?.captureMessage('parseJSONFromScript', {\r\n extra: {\r\n el: el ? 'yes' : 'no',\r\n tagName: el?.tagName,\r\n type: el?.getAttribute('type'),\r\n },\r\n })\r\n }\r\n\r\n if (!isValidElement) return null\r\n\r\n try {\r\n return JSON.parse(el.textContent!)\r\n } catch (e) {\r\n Sentry.captureException(e)\r\n return null\r\n }\r\n}\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\nexport enum ColorVariant {\r\n violet = 'violet',\r\n emerald = 'emerald',\r\n orange = 'orange',\r\n teal = 'teal',\r\n pink = 'pink',\r\n lime = 'lime',\r\n purple = 'purple',\r\n green = 'green',\r\n yellow = 'yellow',\r\n blue = 'blue',\r\n red = 'red',\r\n gray = 'gray',\r\n default = 'default',\r\n dark = 'dark',\r\n}\r\n\r\nexport enum CheckboxSize {\r\n none = '', // Do not set fixed size\r\n small = 'min-h-6 text-2xs', // 24px\r\n regular = 'min-h-7 text-sm', // 28px\r\n}\r\nexport type CheckboxSizeType = keyof typeof CheckboxSize\r\n\r\ninterface CheckboxProps extends Omit, 'label' | 'size'> {\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\n * Size of the checkbox\r\n *\r\n * @default \"regular\"\r\n */\r\n size?: CheckboxSizeType\r\n\r\n /**\r\n * Color of the checkbox\r\n *\r\n * @default \"default\"\r\n */\r\n color?: ColorVariant\r\n}\r\n\r\nfunction CheckboxComponent(\r\n {\r\n className,\r\n label,\r\n size = 'regular',\r\n color = ColorVariant.default,\r\n children,\r\n ...props\r\n }: 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 )}\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: boolean) => {\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: React.KeyboardEvent) => {\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 * as Ariakit from '@ariakit/react'\r\nimport 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 const popover = Ariakit.usePopoverContext()\r\n const input = popover?.useState('disclosureElement')\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 input?.focus({ preventScroll: true })\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 \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, 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 * 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 ...props\r\n}: ButtonColorPickerProps) {\r\n const popoverState = usePopoverState()\r\n const isOpen = popoverState.useState('open')\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","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: number\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 = window.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\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 Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { usePrevious } from '../../hooks/use-previous'\r\nimport { usePopoverPlacement } from '../../hooks/usePopoverPlacement'\r\nimport { blurWithoutScroll, focusWithoutScroll, preventDefault } from '../../util'\r\n\r\nenum DropdownRounding {\r\n none = '',\r\n regular = 'rounded-lg',\r\n}\r\n\r\nenum DropdownTheme {\r\n none = '',\r\n default = 'border border-primary bg-primary',\r\n}\r\n\r\ninterface StatelessDropdownProps\r\n extends Omit, 'ref'>,\r\n Pick {\r\n /**\r\n * Trigger button for the dropdown\r\n */\r\n trigger: JSX.Element | null\r\n\r\n /**\r\n * Disable interaction with other page elements when the dropdown is open\r\n *\r\n * @default true\r\n */\r\n modal?: boolean\r\n\r\n /**\r\n * When true, the dropdown will show when dropdown is hovered. Combine with\r\n * `backdrop={false}` to make the popover hide on mouse out\r\n */\r\n showOnHover?: boolean\r\n\r\n /**\r\n * Placement of the dropdown\r\n *\r\n */\r\n placement?: Ariakit.MenuProviderProps['placement']\r\n\r\n /**\r\n * Orientation in which the items are laid out. Changes which arrows control next/prev item\r\n *\r\n * @default vertical\r\n */\r\n orientation?: 'vertical' | 'horizontal'\r\n\r\n /**\r\n * Set rounding for the dropdown list\r\n *\r\n * @default regular\r\n */\r\n rounding?: keyof typeof DropdownRounding\r\n\r\n /**\r\n * Dropdown theme\r\n *\r\n * @default default\r\n */\r\n theme?: keyof typeof DropdownTheme\r\n\r\n /**\r\n * The amount of space between button and its popover\r\n *\r\n * @default 4\r\n */\r\n gutter?: number\r\n\r\n /**\r\n * Show backdrop on the dialog. Provide your own element if you want to add background or animation\r\n *\r\n */\r\n backdrop?: false | JSX.Element\r\n\r\n /**\r\n * Do not render the items when the popover is not visible\r\n *\r\n * @default true\r\n */\r\n unmountOnHide?: boolean\r\n\r\n /**\r\n * If true, the dropdown will overlay the trigger if necessary instead of going\r\n * out of bounds and overflowing\r\n */\r\n overlap?: boolean\r\n\r\n /**\r\n * Callback before the menu starts hiding. Event can be prevented which keeps the menu open\r\n * This callback isn’t called on backdrop click. Use `backdrop={
}` to react on backdrop clicks\r\n */\r\n onClose?: (ev: Event) => void\r\n\r\n /**\r\n * Used to provide virtual anchor, useful for context menu, etc\r\n */\r\n getAnchorRect?: () => { x: number; y: number }\r\n\r\n /**\r\n * Set which element gets focus when the dialog visibility changes. If `false`, the focus stays on the previous element.\r\n * Defaults to focusing without scrolling the page or keeping the focus on trigger if input-like.\r\n */\r\n autoFocusOnShow?: false | ((element: HTMLElement) => boolean)\r\n\r\n /**\r\n * Set which element gets focus when the dialog visibility changes. If `false`, the focus stays on the previous element.\r\n * Defaults to focusing without scrolling the page or keeping the focus on trigger if input-like.\r\n */\r\n autoFocusOnHide?: false | ((element: HTMLElement) => boolean)\r\n\r\n /**\r\n * Callback which is called when the dialog opens and all animations complete\r\n */\r\n onFullyOpen?: () => void\r\n\r\n /**\r\n * Callback which is called when the dialog closes and all animations complete\r\n */\r\n onFullyClosed?: () => void\r\n}\r\n\r\nexport const StatelessDropdown = React.forwardRef(function DropdownComponent(\r\n {\r\n trigger,\r\n modal = true,\r\n rounding = 'regular',\r\n theme = 'default',\r\n gutter,\r\n unmountOnHide = true,\r\n children,\r\n backdrop,\r\n showOnHover,\r\n hideOnInteractOutside,\r\n autoFocusOnShow,\r\n autoFocusOnHide,\r\n onFullyOpen,\r\n onFullyClosed,\r\n ...props\r\n }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const store = Ariakit.useMenuContext()\r\n const { placement, zIndex, updatePosition } = usePopoverPlacement(store)\r\n const isOpen = store?.useState('open')\r\n const [isFullyOpen, setIsFullyOpen] = React.useState(false)\r\n const isMounted = store?.useState('mounted')\r\n const wasMounted = usePrevious(isMounted)\r\n const menuGutter = gutter ?? (store?.parent ? 6 : 4)\r\n\r\n React.useEffect(() => {\r\n if (wasMounted && !isMounted) {\r\n onFullyClosed?.()\r\n }\r\n // We want to call it only on isMounted change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isMounted])\r\n\r\n return (\r\n <>\r\n {trigger && (\r\n \r\n )}\r\n }\r\n // Update zIndex when popover position changes\r\n updatePosition={updatePosition}\r\n // E2E tests don’t wait for transitions to complete and it could lead to bugs with other popover components (ResizeObserver loop exceeded)\r\n // or visual diffs due a screenshot being captured while the dropdown still in transition\r\n // If you encounter this problem, just do `cy.get('[data-fully-open=true]').should('exist')` before continuing to wait for the dropdown\r\n data-fully-open={isFullyOpen}\r\n className={classNames(\r\n props.className,\r\n zIndex,\r\n DropdownRounding[rounding],\r\n DropdownTheme[theme],\r\n 'custom-scrollbar absolute flex flex-col overflow-hidden shadow-modal outline-none dark:shadow-modal-dark',\r\n // These are set by popper, we just need to make sure we don’t encroach on the safe insets\r\n 'min-w-[--popover-anchor-width] max-w-[--popover-available-width]',\r\n // Animations\r\n 'opacity-0 transition duration-[250ms] data-[enter]:translate-y-0 data-[enter]:opacity-100',\r\n {\r\n // When in combobox mode, the padding is smaller so we can render a gradient under the combobox input.\r\n // Change the custom scrollbar offset so the top of the first item fits the top of our scrollbar\r\n '[--scrollbar-radius:0]': DropdownRounding[rounding] === DropdownRounding.none,\r\n // Direction based styles\r\n 'max-h-[calc(var(--popover-available-height)-env(safe-area-inset-bottom))] motion-safe:-translate-y-1':\r\n placement?.startsWith('bottom'),\r\n 'max-h-[calc(var(--popover-available-height)-env(safe-area-inset-top))] motion-safe:translate-y-1':\r\n placement?.startsWith('top'),\r\n }\r\n )}\r\n onTransitionEnd={(ev) => {\r\n if (ev.target === ev.currentTarget && isOpen) {\r\n setIsFullyOpen(true)\r\n onFullyOpen?.()\r\n }\r\n }}\r\n >\r\n \r\n {children}\r\n
\r\n \r\n \r\n )\r\n})\r\n\r\nexport interface DropdownProps extends StatelessDropdownProps {\r\n state?: Ariakit.MenuStore\r\n}\r\n\r\nexport const Dropdown = React.forwardRef(\r\n (\r\n { state, placement, orientation = 'vertical', ...props }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n ) => (\r\n \r\n \r\n \r\n )\r\n)\r\n","import * as Ariakit from '@ariakit/react'\r\nimport * as React from 'react'\r\n\r\nimport { OptionButton, OptionButtonProps } from '../OptionButton'\r\nimport { BUTTON_DEFAULT_ELEMENT } from '../button'\r\nimport { PropsWithAs } from '../types'\r\n\r\ninterface DropdownItemProps extends OptionButtonProps {\r\n store?: Ariakit.MenuStore\r\n\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 hideOnClick?: boolean\r\n}\r\n\r\nfunction DropdownItemComponent(\r\n { as: asComponent, ...props }: PropsWithAs & DropdownItemProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return } />\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 BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n props: PropsWithAs & DropdownItemProps & { ref?: React.ForwardedRef }\r\n) => ReturnType\r\n","import * as Ariakit from '@ariakit/react'\r\n\r\nexport const useDropdownState = Ariakit.useMenuStore\r\n","import * as React from 'react'\r\n\r\nimport { PartialBy } from '../../types'\r\nimport { MenuGroup } from '../MenuGroup'\r\nimport { Dropdown, DropdownItem, DropdownProps } from '../dropdown'\r\nimport { ObjectHash } from '../types'\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 ContextMenuInnerProps extends PartialBy {\r\n /**\r\n * Items visible in the menu\r\n */\r\n items: ContextMenuItem[]\r\n}\r\n\r\nexport function ContextMenuInner(\r\n { trigger, items, onClose, ...props }: ContextMenuInnerProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return (\r\n ev.preventDefault()}\r\n >\r\n {items?.map((item, index) => {\r\n if (item.type === 'divider') {\r\n return \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 />\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\nexport const ContextMenu = 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\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst DEFAULT_VALUE_KEY = 'value'\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst DEFAULT_CHANGE_KEY = 'onChange'\r\n\r\ntype ValueAccessor<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps = typeof DEFAULT_VALUE_KEY,\r\n ChangeKey extends keyof React.ComponentProps = typeof DEFAULT_CHANGE_KEY,\r\n> = (...args: Parameters[ChangeKey]>) => React.ComponentProps[ValueKey]\r\n\r\nexport type InnerStateProps<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps,\r\n ChangeKey extends keyof React.ComponentProps,\r\n> = RequireByKey, 'as'> & {\r\n valueKey?: ValueKey\r\n changeKey?: ChangeKey\r\n valueAccessor?: ValueAccessor\r\n}\r\n\r\nexport function InnerState<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps = typeof DEFAULT_VALUE_KEY,\r\n ChangeKey extends keyof React.ComponentProps = typeof DEFAULT_CHANGE_KEY,\r\n>({\r\n as: asComponent,\r\n valueKey = 'value' as ValueKey,\r\n changeKey = 'onChange' as ChangeKey,\r\n valueAccessor = defaultValueAccessor,\r\n ...props\r\n}: InnerStateProps) {\r\n const { [valueKey]: value, [changeKey]: onChange } = props\r\n const [state, setState] = React.useState[ValueKey]>(value)\r\n\r\n const handleChange = React.useCallback>(\r\n (...args) => {\r\n setState(valueAccessor(...args))\r\n onChange(...args)\r\n },\r\n [onChange, valueAccessor]\r\n )\r\n\r\n return React.createElement(asComponent, {\r\n ...props,\r\n [valueKey]: state,\r\n [changeKey]: handleChange,\r\n })\r\n}\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, ReactNode, useEffect, useMemo, useRef, useState } from 'react'\r\n\r\nimport { Label } from './typography'\r\n\r\nexport enum RangeSize {\r\n small = 'sm:h-6', // 24px height\r\n regular = 'sm:h-7', // 28px height\r\n medium = 'sm:h-8', // 32px height\r\n large = 'sm:h-9', // 36px height\r\n}\r\n\r\ntype InputProps = HTMLProps\r\n\r\ninterface RangeSliderProps extends Omit {\r\n /**\r\n * Label which is rendered above the select\r\n */\r\n label?: ReactNode\r\n\r\n /**\r\n * Range size. All inputs have forced height on mobile to avoid zoom\r\n *\r\n * @default regular\r\n */\r\n size?: keyof typeof RangeSize\r\n\r\n /**\r\n * Element which will be rendered on the left side of the slider\r\n */\r\n leftContent?: ReactNode\r\n\r\n /**\r\n * Element which will be rendered on the right side of the slider\r\n */\r\n rightContent?: ReactNode\r\n\r\n /**\r\n * Class name for the wrapper element\r\n */\r\n className?: string\r\n\r\n /**\r\n * Class name for the input element\r\n */\r\n inputClassName?: string\r\n\r\n /**\r\n * Min value for the input\r\n *\r\n * @default 0\r\n */\r\n min?: number\r\n\r\n /**\r\n * Max value for the input\r\n *\r\n * @default 100\r\n */\r\n max?: number\r\n\r\n /**\r\n * Step value for the input\r\n *\r\n * @default 1\r\n */\r\n step?: number\r\n\r\n /**\r\n * Current value\r\n */\r\n value: number\r\n\r\n /**\r\n * Callback when value changes\r\n */\r\n onChange: InputProps['onChange']\r\n}\r\n\r\nexport function RangeSlider({\r\n label,\r\n size = 'regular',\r\n leftContent,\r\n rightContent,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n className,\r\n inputClassName,\r\n ...props\r\n}: RangeSliderProps) {\r\n const [hasTrack, setHasTrack] = useState(false)\r\n const trackRef = useRef(null)\r\n const thumbRef = useRef(null)\r\n\r\n useEffect(() => {\r\n setHasTrack(Boolean(trackRef.current && thumbRef.current))\r\n }, [])\r\n\r\n const thumbLeft = useMemo(() => {\r\n const track = trackRef.current\r\n const thumb = thumbRef.current\r\n const valuePercent = (props.value - min) / (max - min)\r\n\r\n if (!hasTrack || !track || !thumb) return\r\n\r\n const trackBox = track.getBoundingClientRect()\r\n const thumbBox = thumb.getBoundingClientRect()\r\n\r\n return ((valuePercent * (trackBox.width - thumbBox.width)) / trackBox.width) * 100\r\n }, [min, max, props.value, hasTrack])\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { ButtonRoundingType, ButtonThemeType } from '../button'\r\nimport { IconNameType } from '../icon'\r\n\r\nexport enum ToolbarTheme {\r\n chipTransparent, // (default)\r\n alternative,\r\n}\r\n\r\nexport enum ToolbarDirection {\r\n vertical,\r\n horizontal,\r\n}\r\n\r\nexport type ToolbarDirectionType = keyof typeof ToolbarDirection\r\n\r\nexport interface IButtonThemeSettings {\r\n className?: string\r\n theme: ButtonThemeType\r\n rounding: ButtonRoundingType\r\n}\r\n\r\nexport interface IToolbarItem {\r\n id: string\r\n icon: IconNameType\r\n iconActive?: IconNameType\r\n iconAction?: IconNameType\r\n title: string\r\n titleActive?: string\r\n titleAction?: string\r\n}\r\n\r\nexport type ToolbarThemeType = keyof typeof ToolbarTheme\r\n","import * as React from 'react'\r\n\r\nimport { ToolbarDirection, ToolbarTheme } from './interfaces'\r\n\r\nexport interface IToolbarContext {\r\n direction: ToolbarDirection\r\n theme: ToolbarTheme\r\n isWrapped: boolean\r\n isStretched: boolean\r\n isMobile: boolean\r\n}\r\n\r\nexport const ToolbarContext = React.createContext({\r\n direction: ToolbarDirection.vertical,\r\n theme: ToolbarTheme.chipTransparent,\r\n isWrapped: false,\r\n isStretched: false,\r\n isMobile: false,\r\n})\r\n\r\nexport function useToolbarContext() {\r\n return React.useContext(ToolbarContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport 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 { StatelessDropdown } from '../dropdown'\r\nimport { IToolbarContext, ToolbarContext } from './hooks'\r\nimport { ToolbarDirection, ToolbarDirectionType, ToolbarTheme, ToolbarThemeType } from './interfaces'\r\n\r\nconst getToolbarSettings = ({\r\n direction,\r\n isWrapped,\r\n isMobile,\r\n theme,\r\n}: IToolbarContext): React.HTMLProps => {\r\n switch (isWrapped) {\r\n case true:\r\n return {\r\n className: classnames('shrink-0 items-center bg-white dark:bg-gray-800', {\r\n 'flex flex-wrap justify-between': direction === ToolbarDirection.vertical,\r\n 'grid border border-gray-100 dark:border-gray-600 p-1.5 gap-1 border-box rounded-md grid-cols-2':\r\n FinvizSettings.hasRedesignEnabled,\r\n }),\r\n }\r\n\r\n default:\r\n return {\r\n className: classnames('flex shrink-0 items-center bg-white dark:bg-gray-800', {\r\n 'p-1.5': !isMobile,\r\n 'space-x-1.5 px-1.5': direction === ToolbarDirection.horizontal && FinvizSettings.hasRedesignEnabled,\r\n 'flex-col overflow-hidden overflow-y-auto [--inset-l:0.5rem] landscape-primary:pl-inset-left':\r\n direction === ToolbarDirection.vertical,\r\n 'space-y-2': direction === ToolbarDirection.vertical && !isMobile,\r\n 'pb-inset-bottom [--inset-b:0.5rem]': theme !== ToolbarTheme.alternative && !isMobile,\r\n 'w-screen space-x-2 overflow-hidden overflow-x-auto':\r\n direction === ToolbarDirection.horizontal && theme !== ToolbarTheme.alternative,\r\n 'overflow-x-hidden': theme === ToolbarTheme.alternative,\r\n }),\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarProps {\r\n /**\r\n * Toolbar direction\r\n *\r\n * @default vertical\r\n */\r\n direction?: ToolbarDirectionType\r\n\r\n /**\r\n * Toolbar buttons theme\r\n *\r\n * @default light\r\n */\r\n theme?: ToolbarThemeType\r\n\r\n /**\r\n * Charts mobile design\r\n *\r\n * @default false\r\n */\r\n isMobile?: boolean\r\n\r\n className?: string\r\n}\r\n\r\nexport function Toolbar({\r\n direction = 'vertical',\r\n theme = 'chipTransparent',\r\n isMobile = false,\r\n children,\r\n className,\r\n}: React.PropsWithChildren) {\r\n const hasFocusRings = React.useRef(false)\r\n const toolbarRef = React.useRef(null)\r\n const contextProviderValue = React.useMemo(\r\n () => ({\r\n direction: ToolbarDirection[direction],\r\n theme: ToolbarTheme[theme],\r\n isWrapped:\r\n ToolbarDirection[direction] === ToolbarDirection.vertical && ToolbarTheme[theme] === ToolbarTheme.alternative,\r\n isStretched:\r\n ToolbarDirection[direction] === ToolbarDirection.horizontal && ToolbarTheme[theme] === ToolbarTheme.alternative,\r\n isMobile,\r\n }),\r\n [direction, theme, isMobile]\r\n )\r\n const toolbarSettings = getToolbarSettings(contextProviderValue)\r\n\r\n React.useLayoutEffect(() => {\r\n // Workaround for Safari scrollbar bug https://github.com/finvizhq/charts/issues/1038\r\n // Safari injects scrollbar after layout render and doesn't trigger reflow\r\n if (ToolbarTheme[theme] !== ToolbarTheme.alternative && isSafariDesktop()) {\r\n const forceReflow = throttle(() => {\r\n if (toolbarRef.current !== null) {\r\n const originalWidth = toolbarRef.current.style.width\r\n toolbarRef.current.style.width = '0'\r\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n toolbarRef.current.offsetWidth\r\n toolbarRef.current.style.width = originalWidth\r\n }\r\n }, 200)\r\n\r\n forceReflow()\r\n window.addEventListener('resize', forceReflow)\r\n\r\n return () => {\r\n window.removeEventListener('resize', forceReflow)\r\n }\r\n }\r\n }, [theme])\r\n\r\n return (\r\n \r\n \r\n {children}\r\n {\r\n hasFocusRings.current = !!document.querySelector('[data-focus-visible]')\r\n return true\r\n }}\r\n autoFocusOnHide={(el: HTMLElement) => {\r\n // Only call focus when we previously had focus rings to prevent sticky focus rings\r\n if (hasFocusRings.current) el.focus({ preventScroll: true })\r\n hasFocusRings.current = false\r\n return false\r\n }}\r\n />\r\n \r\n \r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonHTMLProps, ButtonProps } from '../button'\r\nimport { Delayed } from '../delayed'\r\nimport { Icon } from '../icon'\r\nimport { Spinner } from '../spinner'\r\nimport { PropsWithAs } from '../types'\r\nimport { useToolbarContext } from './hooks'\r\nimport { IToolbarItem, ToolbarTheme } from './interfaces'\r\n\r\nfunction getButtonThemeSettings({\r\n className,\r\n theme,\r\n isActive,\r\n isStretched,\r\n isInAction,\r\n}: {\r\n className: string\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 className,\r\n {\r\n grow: isStretched,\r\n 'h-10 w-10': !isStretched && !includeRedesign,\r\n 'animate-pulse': isInAction,\r\n },\r\n\r\n !includeRedesign && {\r\n 'active:bg-white disabled:bg-white disabled:text-gray-300 disabled:hover:text-gray-300': true,\r\n 'border border-white text-gray-500 hover:border-gray-100 hover:text-gray-900': !isActive,\r\n 'border border-gray-900 text-gray-900': isActive,\r\n }\r\n ),\r\n theme: includeRedesign ? 'chipTransparent' : 'transparent',\r\n rounding: includeRedesign ? undefined : 'none',\r\n size: isStretched || includeRedesign ? undefined : 'none',\r\n }\r\n default:\r\n return {\r\n className: classnames(\r\n className,\r\n 'border dark:disabled:bg-gray-800 dark:disabled:text-gray-600 disabled:text-gray-300 disabled:bg-white dark:disabled:hover:bg-gray-800 dark:disabled:hover:text-gray-600 disabled:hover:text-gray-300 disabled:hover:bg-white',\r\n {\r\n 'animate-pulse': isInAction,\r\n 'border-transparent text-gray-500 hover:bg-gray-200/30 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-500/30 dark:hover:text-gray-200':\r\n !isActive,\r\n 'border-blue-400 bg-blue-50 text-gray-900 dark:bg-gray-700 dark:text-white': isActive,\r\n }\r\n ),\r\n theme: 'transparent',\r\n rounding: 'small',\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarButtonProps extends Omit {\r\n rowId?: number\r\n item: IToolbarItem\r\n disabledTooltip?: string\r\n isInAction?: boolean\r\n isLoading?: boolean\r\n}\r\n\r\nexport const ToolbarButton = React.forwardRef(function ToolbarButton(\r\n { item, disabledTooltip, isInAction: isInActionProp, isLoading, ...props }: PropsWithAs & ToolbarButtonProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const context = Ariakit.useMenuContext()\r\n const { theme, isStretched } = useToolbarContext()\r\n const isInAction = isInActionProp && item.iconAction !== undefined\r\n const buttonSettings = getButtonThemeSettings({\r\n className: props.className,\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 }\r\n store={context?.menubar || undefined}\r\n blurOnHoverEnd\r\n render={\r\n \r\n {isLoading ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n {props.children ??\r\n (isInAction ? (\r\n \r\n \r\n \r\n ) : (\r\n getMainIcon()\r\n ))}\r\n \r\n )}\r\n \r\n }\r\n />\r\n )\r\n})\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { DropdownItem } from '../dropdown'\r\nimport { Icon } from '../icon'\r\nimport { NativeSelect } from '../select/NativeSelect'\r\nimport { useToolbarContext } from './hooks'\r\nimport { IToolbarItem, ToolbarTheme } from './interfaces'\r\nimport { ToolbarButton } from './toolbar-button'\r\n\r\nconst isMobileBrowser = isMobile()\r\n\r\nexport interface ToolbarGroupProps {\r\n /**\r\n * Main button item\r\n */\r\n defaultItem: IToolbarItem\r\n\r\n /**\r\n * Shows spinner instead of icon\r\n */\r\n isLoading?: boolean\r\n\r\n /**\r\n * Current selected item id\r\n */\r\n isActive: boolean\r\n\r\n /**\r\n * Should indicate some action in progress\r\n */\r\n isInAction?: boolean\r\n\r\n /**\r\n * Array of items\r\n */\r\n groupItems: IToolbarItem[]\r\n\r\n /**\r\n * Expand group button label\r\n */\r\n groupTitle?: string\r\n\r\n /**\r\n * On item select callback\r\n */\r\n onChange: (id: string, trigger: 'button' | 'select' | 'group') => void\r\n\r\n /**\r\n * Use native select for mobile devices\r\n *\r\n * @default true\r\n */\r\n useNativeSelect?: boolean\r\n\r\n /**\r\n * Is item disabled\r\n */\r\n disabled?: boolean\r\n\r\n /**\r\n * Tooltip message if item is disabled\r\n */\r\n disabledTooltip?: string\r\n\r\n rowId?: number\r\n}\r\n\r\nexport const ToolbarGroup = React.forwardRef(function ToolbarGroup(\r\n {\r\n defaultItem,\r\n isActive,\r\n isLoading,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect = isMobileBrowser,\r\n disabled,\r\n disabledTooltip,\r\n rowId,\r\n }: ToolbarGroupProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const { theme, isStretched } = useToolbarContext()\r\n const [selectedItem, setSelectedItem] = React.useState(defaultItem)\r\n const groupId = groupTitle?.replace(/\\s/g, '-').toLocaleLowerCase()\r\n const isAlternativeTheme = theme === ToolbarTheme.alternative\r\n\r\n // Setup states, pass Menubar context to this menu so we can control the shared menu\r\n const context = Ariakit.useMenuContext()\r\n const menu = Ariakit.useMenuStore({ store: context })\r\n\r\n // We have multiple menu triggers but just one shared menu so we need a way to know which button has been hovered\r\n const [menuButton, setMenuButton] = React.useState(null)\r\n const open = menu.useState((state) => state.mounted && state.anchorElement === menuButton)\r\n\r\n // Find the element to render the menu into using Portal\r\n const parentMenu = menu.useState('contentElement')\r\n const menuContentElement = React.useMemo(() => parentMenu?.querySelector('div'), [parentMenu])\r\n\r\n /**\r\n * Charts prevent bubling mouseover so we need to hide the menu manually\r\n */\r\n const hideMenu = menu.hide\r\n React.useEffect(() => {\r\n const onMouseLeave = () => hideMenu()\r\n\r\n parentMenu?.addEventListener('mouseleave', onMouseLeave)\r\n return () => parentMenu?.removeEventListener('mouseleave', onMouseLeave)\r\n }, [hideMenu, parentMenu])\r\n\r\n const showMenu = menu.show\r\n const handleMenuOpen = React.useCallback(\r\n (ev: React.SyntheticEvent) => {\r\n menu.setDisclosureElement(ev.currentTarget)\r\n menu.setAnchorElement(ev.currentTarget)\r\n showMenu()\r\n },\r\n [menu, showMenu]\r\n )\r\n\r\n const trigger = (\r\n \r\n \r\n \r\n \r\n )\r\n\r\n if (useNativeSelect) {\r\n return (\r\n \r\n {trigger}\r\n ({ value: item.id, label: item.title }))}\r\n onChange={(option) => {\r\n setSelectedItem(groupItems![groupItems!.findIndex((item) => item.id === option.value)])\r\n onChange(option.value, 'select')\r\n }}\r\n onClick={() => onChange(selectedItem.id, 'select')}\r\n />\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n ) => {\r\n // Preventing this means the dropdown will only open on hover not by a click\r\n ev.preventDefault()\r\n }}\r\n onPointerDown={(ev: React.PointerEvent) => {\r\n // Finally, pre-select the current group tool\r\n onChange(selectedItem.id, 'group')\r\n handleMenuOpen(ev)\r\n }}\r\n />\r\n {open && (\r\n // Render this menu's contents into the parent menu.\r\n }>\r\n {groupItems.map((item) => (\r\n }\r\n data-testid={`toolbar-group-${groupId}-${item.id}`}\r\n rounding={theme === ToolbarTheme.alternative && !FinvizSettings.hasRedesignEnabled ? 'none' : undefined}\r\n onPointerDown={() => {\r\n setSelectedItem(item)\r\n onChange(item.id, 'select')\r\n }}\r\n >\r\n {item.title}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n )\r\n})\r\n","import { PartialBy } from '../../types'\r\nimport { ToolbarButton } from './toolbar-button'\r\nimport { ToolbarGroup, ToolbarGroupProps } from './toolbar-group'\r\n\r\nexport function ToolbarItem({\r\n defaultItem,\r\n isLoading,\r\n isActive,\r\n isInAction,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect,\r\n disabled,\r\n disabledTooltip,\r\n rowId,\r\n}: PartialBy) {\r\n const isItemActive = isActive && !disabled\r\n\r\n if (!!groupItems?.length) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n {\r\n onChange(defaultItem.id, 'button')\r\n }}\r\n />\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { useToolbarContext } from './hooks'\r\nimport { ToolbarDirection, ToolbarTheme } from './interfaces'\r\n\r\ntype ToolbarDividerProps = {\r\n className?: string\r\n}\r\n\r\nexport function ToolbarDivider({ className }: ToolbarDividerProps) {\r\n const { direction, theme } = useToolbarContext()\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { Box } from '../box'\r\nimport { Heading, Paragraph } from '../typography'\r\nimport { TourStep } from './types'\r\n\r\nexport function StepContent({ step }: { step: TourStep }) {\r\n return (\r\n \r\n {step.title && (\r\n \r\n {step.title}\r\n \r\n )}\r\n {step.body && {step.body}}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as ReactDOM from 'react-dom/server'\r\nimport Shepherd from 'shepherd.js'\r\n\r\nimport {\r\n BUTTON_BASE_CLASS,\r\n BUTTON_FOCUS_STYLES,\r\n ButtonPadding,\r\n ButtonRounding,\r\n ButtonSize,\r\n ButtonTheme,\r\n getButtonTheme,\r\n} from '../button'\r\nimport { StepContent } from './step-content'\r\nimport { TourDefinition, TourStep } from './types'\r\n\r\ntype ExcludesFalse = (x: T | false) => x is T\r\n\r\n/**\r\n * Async load Shepherd module when we need it\r\n */\r\nlet shepherdLibrary: typeof Shepherd\r\nexport async function loadShepherdLibrary(setLoading: (state: boolean) => void) {\r\n if (shepherdLibrary) return shepherdLibrary\r\n\r\n try {\r\n setLoading(true)\r\n const shepherdPromise = await import('shepherd.js')\r\n shepherdLibrary = shepherdPromise.default\r\n setLoading(false)\r\n\r\n return shepherdLibrary\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Get buttons based on index in the step array\r\n */\r\nconst buttonClasses = classnames(BUTTON_BASE_CLASS, BUTTON_FOCUS_STYLES, ButtonSize.regular, ButtonRounding.regular)\r\nfunction getStepButtons(tour: Shepherd.Tour, step: TourStep, index: number, arr: TourStep[]) {\r\n return [\r\n {\r\n action: tour.complete,\r\n classes: classnames(buttonClasses, 'mr-auto', getButtonTheme(ButtonTheme.light).button, ButtonPadding.regular),\r\n text: 'Exit',\r\n },\r\n index > 0 && {\r\n action: tour.back,\r\n classes: classnames(buttonClasses, getButtonTheme(ButtonTheme.light).button, ButtonPadding.regular),\r\n text: step.backButton ?? 'Back',\r\n },\r\n {\r\n classes: classnames(buttonClasses, getButtonTheme(ButtonTheme.blue).button, ButtonPadding.regular),\r\n action: tour.next,\r\n text: step.nextButton ?? (index === arr.length - 1 ? 'Finish' : 'Next'),\r\n },\r\n ].filter(Boolean as unknown as ExcludesFalse)\r\n}\r\n\r\n/**\r\n * Convert tour steps to Shepherd steps\r\n */\r\nexport function processSteps(tour: Shepherd.Tour, steps: TourStep[]): Shepherd.Step.StepOptions[] {\r\n return steps.map((step, index) => ({\r\n attachTo: { element: step.target, on: step.placement ?? 'auto' },\r\n classes: 'z-dialog',\r\n // Add offset\r\n popperOptions: {\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset: step.offset ?? [0, 10],\r\n },\r\n },\r\n ],\r\n },\r\n // Render the body\r\n text: ReactDOM.renderToString(React.createElement(StepContent, { step })),\r\n // Add buttons\r\n buttons: getStepButtons(tour, step, index, steps),\r\n modalOverlayOpeningRadius: step.overlayRadius ?? 8,\r\n modalOverlayOpeningPadding: step.overlayPadding ?? 0,\r\n }))\r\n}\r\n\r\nexport function getTourKey() {\r\n return `tour${window.location.pathname.replace(/[/.]/g, '-')}`\r\n}\r\n\r\nexport function getStepsForUser(tours: TourDefinition[]) {\r\n const lastFinishedTour = localStorage?.getItem(getTourKey())\r\n const lastTourIndex = tours.findIndex((tour) => tour.id === lastFinishedTour)\r\n const allToursViewed = lastTourIndex === tours.length - 1 || tours.slice(lastTourIndex + 1).every((item) => item.skip)\r\n const toursToView = allToursViewed ? tours : tours.slice(lastTourIndex + 1)\r\n const userTour = toursToView.reduce(\r\n (acc, current) =>\r\n current.skip\r\n ? acc\r\n : {\r\n ...acc,\r\n id: current.id,\r\n steps: [...acc.steps, ...current.steps],\r\n },\r\n { id: 'tour', steps: [], initialTour: toursToView[0].id }\r\n )\r\n\r\n return { hasNewTours: !allToursViewed, tour: userTour }\r\n}\r\n\r\nexport function completeTour(key: string) {\r\n localStorage?.setItem(getTourKey(), key)\r\n}\r\n","import * as React from 'react'\r\nimport Shepherd from 'shepherd.js'\r\n\r\nimport { TourDefinition } from './types'\r\nimport * as tourUtils from './utils'\r\n\r\nexport const DEFAULT_OPTIONS = {\r\n exitOnEsc: true,\r\n useModalOverlay: true,\r\n}\r\n\r\n/**\r\n * Hook which controls shepherd.js. The library is lazy-loaded when the tour starts\r\n *\r\n * Returns:\r\n * - `isLoading`: state of the library loading\r\n * - `currentTour`: tour object, only defined after library has loaded\r\n * - `startTour`: load the library and start tour. Returns `currentTour`\r\n * - `getStepsForUser`: returns a list of tour steps based on tours the user finished\r\n * - `completeTour`: persists the last finished tour to local storage\r\n */\r\nexport function useTour(options?: Shepherd.Tour.TourOptions) {\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [currentTour, setTour] = React.useState(null)\r\n\r\n /**\r\n * We’re loading shepherd asynchronously and want to have loading state so we use\r\n * AbortController to check if the component is still mounted.\r\n */\r\n const controller = React.useRef('AbortController' in window ? new AbortController() : undefined)\r\n const loadingSetter = React.useRef((state: boolean) => {\r\n if (controller.current?.signal.aborted) return\r\n\r\n setIsLoading(state)\r\n })\r\n // Cleanup effect to abort the controller\r\n React.useEffect(() => () => controller.current?.abort(), [])\r\n\r\n const startTour = React.useCallback(\r\n async (definition: TourDefinition, setComplete = true) => {\r\n const shepherdLibrary = await tourUtils.loadShepherdLibrary(loadingSetter.current)\r\n\r\n if (shepherdLibrary && !controller.current?.signal.aborted) {\r\n const tour = currentTour ?? new shepherdLibrary.Tour({ ...DEFAULT_OPTIONS, ...options })\r\n\r\n if (!currentTour) setTour(tour)\r\n\r\n // Reset the tour steps in case they were updated\r\n Array.from(tour.steps).forEach((step) => tour.removeStep(step.id))\r\n\r\n const processedSteps = tourUtils.processSteps(tour, definition.steps)\r\n tour.addSteps(processedSteps)\r\n\r\n if (setComplete) {\r\n tourUtils.completeTour(definition.id)\r\n }\r\n\r\n tour.start()\r\n window.gtag?.('event', 'tour-start', { event_label: definition.initialTour ?? definition.id })\r\n\r\n return tour\r\n }\r\n },\r\n [currentTour, options]\r\n )\r\n\r\n return {\r\n isLoading,\r\n currentTour,\r\n startTour,\r\n getStepsForUser: tourUtils.getStepsForUser,\r\n completeTour: tourUtils.completeTour,\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-duplicate-enum-values */\r\nimport * as Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { BUTTON_DEFAULT_ELEMENT, Button, ButtonComponentProps } from '../button'\r\nimport { Icon, IconNameType, isValidIconName } from '../icon'\r\n\r\n// Must have the same keys as ButtonSize\r\nexport enum TabSpacing {\r\n xxsmall = 'space-x-0.5', // 2px spacing\r\n xsmall = 'space-x-1', // 4px spacing\r\n none = 'space-x-1.5', // 6px spacing\r\n small = 'space-x-1.5', // 6px spacing\r\n regular = 'space-x-1.5', // 6px spacing\r\n medium = 'space-x-2', // 8px spacing\r\n large = 'space-x-2', // 8px spacing\r\n}\r\n\r\nfunction getRightContent(content: JSX.Element | IconNameType | undefined, isActive: boolean) {\r\n if (isValidIconName(content)) return \r\n else if (React.isValidElement(content))\r\n return React.cloneElement(content as React.ReactElement<{ active: boolean }>, {\r\n active: isActive,\r\n })\r\n else return content\r\n}\r\n\r\nconst InternalTab = React.forwardRef(function InternalTab<\r\n TagType extends React.ElementType = typeof BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n {\r\n rounding = 'none',\r\n theme = 'tab',\r\n size = 'medium',\r\n 'aria-selected': ariaSelected,\r\n children,\r\n ...props\r\n }: Omit, 'theme'>,\r\n ref: React.ForwardedRef\r\n) {\r\n const spacing = TabSpacing[size]\r\n const active = Boolean(ariaSelected)\r\n const rightContent = getRightContent(props.rightContent, active)\r\n\r\n return (\r\n )}\r\n ref={ref}\r\n active={active}\r\n theme={theme}\r\n size={size}\r\n rounding={rounding}\r\n rightContent={undefined}\r\n className={classNames('group/badge', props.className)}\r\n contentClass={classNames(spacing, 'flex', props.contentClass)}\r\n >\r\n {children}\r\n {rightContent}\r\n \r\n )\r\n})\r\n\r\nexport function Tab(\r\n props: React.PropsWithChildren>\r\n) {\r\n return } />\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\n\r\nexport function TabList(props: Ariakit.TabListProps) {\r\n return (\r\n \r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport React from 'react'\r\n\r\nexport function TabPanel(props: Ariakit.TabPanelProps) {\r\n return \r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport React from 'react'\r\n\r\nexport function Tabs({ children }: React.PropsWithChildren) {\r\n return (\r\n \r\n
{children}
\r\n
\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nenum BadgeSize {\r\n small = 'h-4 min-w-4', // 16px height\r\n medium = 'h-5 min-w-5', // 20px height\r\n}\r\ntype BadgeSizeType = keyof typeof BadgeSize\r\n\r\nenum BadgePadding {\r\n small = 'px-[5px] py-0', // 16px height\r\n medium = 'px-1.5 py-0.5', // 20px height\r\n}\r\ntype BadgePaddingType = keyof typeof BadgePadding\r\n\r\ntype BadgeProps = {\r\n size?: BadgeSizeType\r\n padding?: BadgePaddingType\r\n active?: boolean\r\n}\r\n\r\nexport function Badge({ size = 'medium', padding = size, active, children }: React.PropsWithChildren) {\r\n const badgePadding = BadgePadding[padding]\r\n const badgeSize = BadgeSize[size]\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nenum TagSize {\r\n small = 'h-4 min-w-4', // 16px height\r\n medium = 'h-5 min-w-5', // 20px height\r\n}\r\ntype TagSizeType = keyof typeof TagSize\r\n\r\nenum TagPadding {\r\n small = 'px-[5px] py-0', // 16px height\r\n medium = 'px-1.5 py-0.5', // 20px height\r\n}\r\ntype TagPaddingType = keyof typeof TagPadding\r\n\r\nenum TagFont {\r\n small = 'text-3xs leading-3', // 10px/12px\r\n medium = 'text-2xs leading-4', // 12px/16px\r\n}\r\n\r\ntype TagProps = {\r\n size?: TagSizeType\r\n padding?: TagPaddingType\r\n}\r\n\r\nexport function Tag({ size = 'medium', padding = size, children }: React.PropsWithChildren) {\r\n const tagPadding = TagPadding[padding]\r\n const tagSize = TagSize[size]\r\n const tagFont = TagFont[size]\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nexport type NotificationContextType = ReturnType\r\n\r\nexport enum NotificationPosition {\r\n TopLeft,\r\n TopRight,\r\n BottomLeft,\r\n BottomRight,\r\n}\r\n\r\nexport interface NotificationOptions {\r\n position?: NotificationPosition\r\n inline?: boolean\r\n}\r\n\r\nexport const NotificationContext = React.createContext<{\r\n show: (element: JSX.Element, options?: NotificationOptions) => void\r\n hide: () => void\r\n}>({\r\n show: () => {},\r\n hide: () => {},\r\n})\r\n\r\nexport function useNotification() {\r\n return React.useContext(NotificationContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { getVisualViewport, useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { NotificationContext, NotificationOptions, NotificationPosition } from './hooks'\r\n\r\ninterface NotificationState {\r\n element: JSX.Element\r\n options: Partial\r\n}\r\n\r\nexport function NotificationWrapper(props: React.PropsWithChildren) {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [notification, setNotification] = React.useState(null)\r\n const { viewport, setViewport } = useVisualViewport({ enabled: !!notification })\r\n\r\n const context = React.useRef({\r\n show: (element: JSX.Element, options: Partial = {}) => {\r\n setViewport(() => getVisualViewport(window.visualViewport))\r\n setNotification({ element, options })\r\n setIsOpen(true)\r\n },\r\n hide: () => setIsOpen(false),\r\n })\r\n\r\n const positionClass = React.useMemo(() => {\r\n const { position = NotificationPosition.BottomLeft } = notification?.options ?? {}\r\n return {\r\n '[--inset-t:1rem] items-start pt-inset-top': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.TopRight,\r\n ].includes(position),\r\n '[--inset-r:1rem] justify-end landscape-secondary:pr-inset-right': [\r\n NotificationPosition.TopRight,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-b:1rem] items-end pb-inset-bottom': [\r\n NotificationPosition.BottomLeft,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-l:1rem] justify-start landscape-primary:pl-inset-left': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.BottomLeft,\r\n ].includes(position),\r\n }\r\n }, [notification?.options])\r\n\r\n const WrapperComponent = React.useMemo(\r\n () => (notification?.options.inline ? React.Fragment : Ariakit.Portal),\r\n [notification?.options.inline]\r\n )\r\n\r\n return (\r\n \r\n {props.children}\r\n {isOpen && (\r\n \r\n \r\n {notification?.element}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { NotificationContextType, useNotification } from './hooks'\r\n\r\nexport function withNotificationContext(\r\n WrappedComponent: React.ComponentType\r\n) {\r\n const displayName = WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\r\n const WithNotificationContext = (props: Omit) => {\r\n const notification = useNotification()\r\n return \r\n }\r\n\r\n WithNotificationContext.displayName = `withNotificationContext(${displayName})`\r\n\r\n return WithNotificationContext\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { useNotification } from './hooks'\r\n\r\ninterface NotificationProps {\r\n className?: string\r\n /**\r\n * Default button text\r\n * @default Close\r\n */\r\n closeText?: string\r\n\r\n /**\r\n * Custom buttons. Overrides `closeText`\r\n */\r\n actions?: JSX.Element\r\n\r\n /**\r\n * When set, the notification will automatically close\r\n */\r\n timeoutInMs?: number\r\n}\r\n\r\nexport function Notification({\r\n className,\r\n closeText = 'Close',\r\n actions,\r\n timeoutInMs,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const notification = useNotification()\r\n\r\n React.useEffect(() => {\r\n let timeoutId: number\r\n if (timeoutInMs) {\r\n timeoutId = window.setTimeout(() => {\r\n notification.hide()\r\n }, timeoutInMs)\r\n }\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n }\r\n }\r\n }, [notification, timeoutInMs])\r\n\r\n return (\r\n \r\n
{children}
\r\n
\r\n {actions ?? (\r\n \r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport * as React from 'react'\r\n\r\nimport { Input, InputComponentProps } from './input'\r\nimport { Tooltip, TooltipColor, TooltipProps, TooltipTrigger } from './tooltip'\r\n\r\ninterface TooltipSettingsProps\r\n extends Pick,\r\n Pick {\r\n color?: keyof typeof TooltipColor\r\n}\r\n\r\ninterface TooltipInputProps extends InputComponentProps {\r\n /**\r\n * Optimization to turn off the tooltip functionality if the input isn’t visible on screen\r\n *\r\n * @default true\r\n */\r\n isInteractive?: boolean\r\n\r\n /**\r\n * Settings for Tooltip component and useTooltipStore\r\n */\r\n tooltipSettings?: TooltipSettingsProps\r\n}\r\n\r\nfunction TooltipInputComponent(\r\n { tooltipSettings, isInteractive = true, name, children, ...props }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const { color, gutter, placement = 'bottom', isPointerEventsEnabled } = tooltipSettings ?? {}\r\n\r\n const input = \r\n\r\n if (!isInteractive || !children) {\r\n return input\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n )\r\n}\r\n\r\nexport const TooltipInput = React.forwardRef(TooltipInputComponent)\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nexport function getVisualViewport(visualViewport: VisualViewport | null) {\r\n const width = visualViewport?.width ?? window.innerWidth\r\n const height = visualViewport?.height ?? window.innerHeight\r\n const scale = visualViewport?.scale ?? 1\r\n\r\n return {\r\n top: visualViewport?.offsetTop ?? 0,\r\n left: visualViewport?.offsetLeft ?? 0,\r\n scale: Math.round((1 / scale) * 100) / 100,\r\n width: Math.round(width * scale),\r\n height: Math.round(height * scale),\r\n unscaledWidth: width,\r\n unscaledHeight: height,\r\n }\r\n}\r\n\r\nexport function useVisualViewport({ enabled = true, onScroll = true }: { enabled?: boolean; onScroll?: boolean } = {}) {\r\n const [viewport, setViewport] = React.useState(getVisualViewport(window.visualViewport))\r\n\r\n React.useEffect(() => {\r\n if (!enabled) return\r\n\r\n const handleChange = throttle((ev: Event) => {\r\n const viewport = ev.currentTarget as VisualViewport\r\n if (viewport) {\r\n setViewport(() => getVisualViewport(viewport))\r\n }\r\n }, 50)\r\n\r\n window.visualViewport?.addEventListener('resize', handleChange)\r\n if (onScroll) window.visualViewport?.addEventListener('scroll', handleChange)\r\n handleChange({ currentTarget: window.visualViewport } as Event)\r\n\r\n return () => {\r\n window.visualViewport?.removeEventListener('resize', handleChange)\r\n window.visualViewport?.removeEventListener('scroll', handleChange)\r\n }\r\n }, [enabled, onScroll])\r\n\r\n return React.useMemo(() => ({ viewport, setViewport }), [viewport])\r\n}\r\n","/**\n * Copyright (c) 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\nmodule.exports.Dispatcher = require('./lib/Dispatcher')\n","/*\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Dispatcher\n * @typechecks\n */\n\n\"use strict\";\n\nvar invariant = require('./invariant');\n\nvar _lastID = 1;\nvar _prefix = 'ID_';\n\n/**\n * Dispatcher is used to broadcast payloads to registered callbacks. This is\n * different from generic pub-sub systems in two ways:\n *\n * 1) Callbacks are not subscribed to particular events. Every payload is\n * dispatched to every registered callback.\n * 2) Callbacks can be deferred in whole or part until other callbacks have\n * been executed.\n *\n * For example, consider this hypothetical flight destination form, which\n * selects a default city when a country is selected:\n *\n * var flightDispatcher = new Dispatcher();\n *\n * // Keeps track of which country is selected\n * var CountryStore = {country: null};\n *\n * // Keeps track of which city is selected\n * var CityStore = {city: null};\n *\n * // Keeps track of the base flight price of the selected city\n * var FlightPriceStore = {price: null}\n *\n * When a user changes the selected city, we dispatch the payload:\n *\n * flightDispatcher.dispatch({\n * actionType: 'city-update',\n * selectedCity: 'paris'\n * });\n *\n * This payload is digested by `CityStore`:\n *\n * flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'city-update') {\n * CityStore.city = payload.selectedCity;\n * }\n * });\n *\n * When the user selects a country, we dispatch the payload:\n *\n * flightDispatcher.dispatch({\n * actionType: 'country-update',\n * selectedCountry: 'australia'\n * });\n *\n * This payload is digested by both stores:\n *\n * CountryStore.dispatchToken = flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'country-update') {\n * CountryStore.country = payload.selectedCountry;\n * }\n * });\n *\n * When the callback to update `CountryStore` is registered, we save a reference\n * to the returned token. Using this token with `waitFor()`, we can guarantee\n * that `CountryStore` is updated before the callback that updates `CityStore`\n * needs to query its data.\n *\n * CityStore.dispatchToken = flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'country-update') {\n * // `CountryStore.country` may not be updated.\n * flightDispatcher.waitFor([CountryStore.dispatchToken]);\n * // `CountryStore.country` is now guaranteed to be updated.\n *\n * // Select the default city for the new country\n * CityStore.city = getDefaultCityForCountry(CountryStore.country);\n * }\n * });\n *\n * The usage of `waitFor()` can be chained, for example:\n *\n * FlightPriceStore.dispatchToken =\n * flightDispatcher.register(function(payload) {\n * switch (payload.actionType) {\n * case 'country-update':\n * flightDispatcher.waitFor([CityStore.dispatchToken]);\n * FlightPriceStore.price =\n * getFlightPriceStore(CountryStore.country, CityStore.city);\n * break;\n *\n * case 'city-update':\n * FlightPriceStore.price =\n * FlightPriceStore(CountryStore.country, CityStore.city);\n * break;\n * }\n * });\n *\n * The `country-update` payload will be guaranteed to invoke the stores'\n * registered callbacks in order: `CountryStore`, `CityStore`, then\n * `FlightPriceStore`.\n */\n\n function Dispatcher() {\n this.$Dispatcher_callbacks = {};\n this.$Dispatcher_isPending = {};\n this.$Dispatcher_isHandled = {};\n this.$Dispatcher_isDispatching = false;\n this.$Dispatcher_pendingPayload = null;\n }\n\n /**\n * Registers a callback to be invoked with every dispatched payload. Returns\n * a token that can be used with `waitFor()`.\n *\n * @param {function} callback\n * @return {string}\n */\n Dispatcher.prototype.register=function(callback) {\n var id = _prefix + _lastID++;\n this.$Dispatcher_callbacks[id] = callback;\n return id;\n };\n\n /**\n * Removes a callback based on its token.\n *\n * @param {string} id\n */\n Dispatcher.prototype.unregister=function(id) {\n invariant(\n this.$Dispatcher_callbacks[id],\n 'Dispatcher.unregister(...): `%s` does not map to a registered callback.',\n id\n );\n delete this.$Dispatcher_callbacks[id];\n };\n\n /**\n * Waits for the callbacks specified to be invoked before continuing execution\n * of the current callback. This method should only be used by a callback in\n * response to a dispatched payload.\n *\n * @param {array} ids\n */\n Dispatcher.prototype.waitFor=function(ids) {\n invariant(\n this.$Dispatcher_isDispatching,\n 'Dispatcher.waitFor(...): Must be invoked while dispatching.'\n );\n for (var ii = 0; ii < ids.length; ii++) {\n var id = ids[ii];\n if (this.$Dispatcher_isPending[id]) {\n invariant(\n this.$Dispatcher_isHandled[id],\n 'Dispatcher.waitFor(...): Circular dependency detected while ' +\n 'waiting for `%s`.',\n id\n );\n continue;\n }\n invariant(\n this.$Dispatcher_callbacks[id],\n 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.',\n id\n );\n this.$Dispatcher_invokeCallback(id);\n }\n };\n\n /**\n * Dispatches a payload to all registered callbacks.\n *\n * @param {object} payload\n */\n Dispatcher.prototype.dispatch=function(payload) {\n invariant(\n !this.$Dispatcher_isDispatching,\n 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.'\n );\n this.$Dispatcher_startDispatching(payload);\n try {\n for (var id in this.$Dispatcher_callbacks) {\n if (this.$Dispatcher_isPending[id]) {\n continue;\n }\n this.$Dispatcher_invokeCallback(id);\n }\n } finally {\n this.$Dispatcher_stopDispatching();\n }\n };\n\n /**\n * Is this Dispatcher currently dispatching.\n *\n * @return {boolean}\n */\n Dispatcher.prototype.isDispatching=function() {\n return this.$Dispatcher_isDispatching;\n };\n\n /**\n * Call the callback stored with the given id. Also do some internal\n * bookkeeping.\n *\n * @param {string} id\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_invokeCallback=function(id) {\n this.$Dispatcher_isPending[id] = true;\n this.$Dispatcher_callbacks[id](this.$Dispatcher_pendingPayload);\n this.$Dispatcher_isHandled[id] = true;\n };\n\n /**\n * Set up bookkeeping needed when dispatching.\n *\n * @param {object} payload\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_startDispatching=function(payload) {\n for (var id in this.$Dispatcher_callbacks) {\n this.$Dispatcher_isPending[id] = false;\n this.$Dispatcher_isHandled[id] = false;\n }\n this.$Dispatcher_pendingPayload = payload;\n this.$Dispatcher_isDispatching = true;\n };\n\n /**\n * Clear bookkeeping used for dispatching.\n *\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_stopDispatching=function() {\n this.$Dispatcher_pendingPayload = null;\n this.$Dispatcher_isDispatching = false;\n };\n\n\nmodule.exports = Dispatcher;\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n\"use strict\";\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (false) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n 'Invariant Violation: ' +\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","/**\n * Copyright 2013-2014 Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n\"use strict\";\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n * var COLORS = keyMirror({blue: null, red: null});\n * var myColor = COLORS.blue;\n * var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n * Input: {key1: val1, key2: val2}\n * Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function(obj) {\n var ret = {};\n var key;\n if (!(obj instanceof Object && !Array.isArray(obj))) {\n throw new Error('keyMirror(...): Argument must be an object.');\n }\n for (key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n ret[key] = key;\n }\n return ret;\n};\n\nmodule.exports = keyMirror;\n","/**\n * React Router DOM v6.26.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nexport { UNSAFE_ErrorResponseImpl } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && (\n // Ignore everything but left clicks\n !target || target === \"_self\") &&\n // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0);\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `
`/`` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\"Cannot submit a