{"version":3,"file":"traffic.e0eae375.js","mappings":"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","sources":["webpack://@finviz/website/./js/main/components/chart/ManualGrid.tsx","webpack://@finviz/website/./js/main/components/external-link/external-link.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/ChartTooltip.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/constants.ts","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/utils.ts","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/BarChart.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/EmptyDataOverlayWrapper.tsx","webpack://@finviz/website/../node_modules/recharts/es6/chart/LineChart.js","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/LineChart.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/XAxis.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/LineStackedBarChart.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/types.ts","webpack://@finviz/website/./js/main/hooks/use-sticky-shadow.ts","webpack://@finviz/website/./js/main/hooks/use-window-size.tsx","webpack://@finviz/website/./js/main/modules/traffic/TrafficTableBottomContent.tsx","webpack://@finviz/website/./js/main/modules/traffic/TrafficTableHead.tsx","webpack://@finviz/website/./js/main/modules/traffic/types.ts","webpack://@finviz/website/./js/main/modules/traffic/WidgetDomainSettingsSection.tsx","webpack://@finviz/website/./js/main/modules/traffic/constants.ts","webpack://@finviz/website/./js/main/modules/traffic/useMonthlyDataControls.ts","webpack://@finviz/website/./js/main/modules/traffic/useTableColumns.tsx","webpack://@finviz/website/./js/main/modules/traffic/utils.ts","webpack://@finviz/website/./js/main/modules/traffic/Domain.tsx","webpack://@finviz/website/./js/main/modules/traffic/NoDataPlaceholder.tsx","webpack://@finviz/website/./js/main/modules/traffic/WidgetAppSettingsSection.tsx","webpack://@finviz/website/./js/main/modules/traffic/Apps.tsx","webpack://@finviz/website/./js/main/modules/traffic/TrafficDomainSelect.tsx","webpack://@finviz/website/./js/main/modules/traffic/TrafficHeader.tsx","webpack://@finviz/website/./js/main/modules/traffic/TrafficDomainSection.tsx","webpack://@finviz/website/./js/main/modules/traffic/index.tsx","webpack://@finviz/website/./js/main/services/IntersectionObserverContext.tsx","webpack://@finviz/website/../node_modules/recharts/es6/chart/BarChart.js","webpack://@finviz/website/../node_modules/core-js/internals/a-set.js","webpack://@finviz/website/../node_modules/core-js/internals/get-iterator-direct.js","webpack://@finviz/website/../node_modules/core-js/internals/get-set-record.js","webpack://@finviz/website/../node_modules/core-js/internals/iterate-simple.js","webpack://@finviz/website/../node_modules/core-js/internals/set-clone.js","webpack://@finviz/website/../node_modules/core-js/internals/set-difference.js","webpack://@finviz/website/../node_modules/core-js/internals/set-helpers.js","webpack://@finviz/website/../node_modules/core-js/internals/set-intersection.js","webpack://@finviz/website/../node_modules/core-js/internals/set-is-disjoint-from.js","webpack://@finviz/website/../node_modules/core-js/internals/set-is-subset-of.js","webpack://@finviz/website/../node_modules/core-js/internals/set-is-superset-of.js","webpack://@finviz/website/../node_modules/core-js/internals/set-iterate.js","webpack://@finviz/website/../node_modules/core-js/internals/set-method-accept-set-like.js","webpack://@finviz/website/../node_modules/core-js/internals/set-size.js","webpack://@finviz/website/../node_modules/core-js/internals/set-symmetric-difference.js","webpack://@finviz/website/../node_modules/core-js/internals/set-union.js","webpack://@finviz/website/../node_modules/core-js/modules/esnext.set.difference.v2.js","webpack://@finviz/website/../node_modules/core-js/modules/esnext.set.intersection.v2.js","webpack://@finviz/website/../node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js","webpack://@finviz/website/../node_modules/core-js/modules/esnext.set.is-subset-of.v2.js","webpack://@finviz/website/../node_modules/core-js/modules/esnext.set.is-superset-of.v2.js","webpack://@finviz/website/../node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js","webpack://@finviz/website/../node_modules/core-js/modules/esnext.set.union.v2.js"],"sourcesContent":["import classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\ninterface ManualGridProps extends React.HTMLProps {\r\n numberOfLines?: number\r\n visibleLeftAxes?: number\r\n estimateAreaWidth?: number\r\n rightOffset?: number\r\n}\r\n\r\nfunction ManualGridComponent(\r\n {\r\n numberOfLines = 5,\r\n visibleLeftAxes = 0,\r\n rightOffset = 32,\r\n estimateAreaWidth,\r\n children,\r\n ...props\r\n }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const lines = Array.from({ length: numberOfLines })\r\n\r\n return (\r\n
\r\n \r\n {lines.map((_, index) => (\r\n
\r\n ))}\r\n {!!estimateAreaWidth && (\r\n \r\n )}\r\n
\r\n\r\n {children}\r\n
\r\n )\r\n}\r\n\r\nexport const ManualGrid = React.forwardRef(ManualGridComponent)\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { Button, Icon } from '..'\r\n\r\ninterface Props {\r\n label?: string\r\n href: string | undefined\r\n isBold?: boolean\r\n className?: string\r\n}\r\n\r\nexport function ExternalLink({ label, href, isBold, className }: Props) {\r\n return (\r\n }\r\n size=\"none\"\r\n padding=\"xxsmall\"\r\n theme=\"linkText\"\r\n className={classnames('inline-flex text-2xs leading-none', className)}\r\n target=\"_blank\"\r\n rel=\"nofollow\"\r\n href={href}\r\n onMouseDown={(event: React.MouseEvent) => event.stopPropagation()}\r\n onClick={(event: React.MouseEvent) => event.stopPropagation()}\r\n >\r\n {label && {label}}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { NameType, Payload, ValueType } from 'recharts/types/component/DefaultTooltipContent'\r\n\r\nimport { shortFormatNumber } from '../../util'\r\nimport { TooltipInner, TooltipRow } from '../chart/Tooltip'\r\nimport { ChartItemColorType } from '../chart/constants'\r\nimport { LineChartTooltipSort } from './types'\r\n\r\ntype ChartTooltipProps = {\r\n activeKey?: string | null\r\n payload?: Payload[] | undefined\r\n isReversed?: boolean\r\n payloadSort?: keyof typeof LineChartTooltipSort\r\n valueFormatter?: (data: ValueType) => string\r\n}\r\nexport default function ChartTooltip({\r\n payload,\r\n payloadSort = 'default',\r\n isReversed = false,\r\n valueFormatter,\r\n}: ChartTooltipProps) {\r\n const items = React.useMemo(() => {\r\n if (!payload || payload.length === 0) return []\r\n\r\n if (LineChartTooltipSort[payloadSort] === LineChartTooltipSort.value) {\r\n return [...payload].sort((a, b) => Number(b.value ?? 0) - Number(a.value ?? 0))\r\n }\r\n return isReversed ? [...payload].reverse() : payload\r\n }, [payload, payloadSort, isReversed])\r\n\r\n const formatter = React.useCallback(\r\n (value: ValueType) => valueFormatter?.(value) ?? shortFormatNumber(value as number),\r\n [valueFormatter]\r\n )\r\n\r\n if (items.length === 0) return null\r\n\r\n return (\r\n \r\n {items.map((area) => (\r\n \r\n ))}\r\n \r\n )\r\n}\r\n","import colors from '../../../../../config/colors'\r\n\r\nexport const CHART_HEIGHT = 250\r\nexport const LABELS_WIDTH = 28\r\nexport const BAR_CHART_LABELS_MARGIN = 22\r\nexport const LINE_CHART_LABELS_MARGIN = 57\r\nexport const BAR_WIDTH = 72\r\nexport const BAR_GAP = 16\r\nexport const EXTRA_WIDTH = 44\r\nexport const BAR_CHART_MARGINS = { top: 0, right: 0, bottom: 0, left: 0 }\r\nexport const LINE_CHART_MARGINS = { top: 5, right: 35, bottom: 5, left: 55 }\r\nexport const TICK_STYLE = { fontSize: 10, fontWeight: 500, textAnchor: 'end' }\r\nexport const TOOLTIP_WRAPPER_STYLE = { outline: 'none', zIndex: 10 }\r\nexport const CURSOR_STYLE = { fill: FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[50], opacity: 0.65 }\r\nexport const TRANSPARENT_CURSOR = { opacity: 0 }\r\n","import { shortFormatNumber } from '../../util'\r\nimport { FinancialsRowDataType } from '../financials-table/types'\r\nimport { ChartData, View } from './types'\r\n\r\nexport function tickFormatter(value: any) {\r\n return shortFormatNumber(value, { fractions: 0 })\r\n}\r\n\r\nexport function getChartDataItemKey(item: Pick) {\r\n return item.id || item.label\r\n}\r\n\r\nexport function getChartData(data: FinancialsRowDataType[], yearKeys: string[], chartView: View) {\r\n /*\r\n * Bar chart renders segments from the bottom up, so the sorting of visible areas is correct here\r\n * assuming it's sorted by column values\r\n * */\r\n const visibleAreas = data.filter((item) => item.isSelected).map((item) => ({ ...item, color: item.color }))\r\n /*\r\n * Line chart has reverse order because we need to render lines from the end so they don't cover main lines\r\n * you can think about it as visibleAreas index === zIndex on the chart\r\n * */\r\n if (chartView === View.lines) visibleAreas.reverse()\r\n\r\n const chartData = yearKeys.map((year) => {\r\n const stackedBar = { year, topKey: '', bottomKey: '', total: 0 } as ChartData\r\n\r\n visibleAreas.forEach((item) => {\r\n const valueKey = getChartDataItemKey(item)\r\n const value = item.values.find((v) => v.year === year)?.value ?? null\r\n stackedBar[valueKey] = value\r\n stackedBar.total += value ?? 0\r\n\r\n if (item.isSelected && value !== 0) {\r\n // top key is the key of latest area which is visible and have some positive value\r\n // bottom key is the key of latest area which is visible and have some negative value\r\n stackedBar[value && value > 0 ? 'topKey' : 'bottomKey'] = valueKey\r\n }\r\n })\r\n\r\n return stackedBar\r\n })\r\n\r\n return { chartData, visibleAreas }\r\n}\r\n","import * as React from 'react'\r\nimport { Cell, BarChart as RechartsBarChart, ResponsiveContainer } from 'recharts'\r\n\r\nimport { Bar } from '../chart/Bar'\r\nimport { ChartContext } from '../chart/ChartWrapper'\r\nimport { CursorBar } from '../chart/Cursor'\r\nimport { Tooltip } from '../chart/Tooltip'\r\nimport { YAxis } from '../chart/YAxis'\r\nimport { ChartItemColorType } from '../chart/constants'\r\nimport ChartTooltip from './ChartTooltip'\r\nimport {\r\n BAR_CHART_LABELS_MARGIN,\r\n BAR_CHART_MARGINS,\r\n BAR_GAP,\r\n BAR_WIDTH,\r\n CHART_HEIGHT,\r\n EXTRA_WIDTH,\r\n LABELS_WIDTH,\r\n} from './constants'\r\nimport { ChartProps } from './types'\r\nimport { getChartDataItemKey, tickFormatter } from './utils'\r\n\r\nexport default function BarChart({ chartData, visibleAreas, columnsCount, isFullWidth }: ChartProps) {\r\n const chartWidth = columnsCount * BAR_WIDTH + (columnsCount - 1) * BAR_GAP + EXTRA_WIDTH\r\n const ChartWrapper = isFullWidth ? ResponsiveContainer : React.Fragment\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n } content={} />\r\n {/* Don't change the order of mapped items here, see getChartData */}\r\n {visibleAreas.map((area) => {\r\n const itemKey = getChartDataItemKey(area)\r\n return (\r\n \r\n {chartData.map((row, index) => (\r\n \r\n ))}\r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Heading } from '../typography'\r\nimport { LineStackedBarChartProps } from './types'\r\n\r\ninterface Props extends Pick {\r\n className: string\r\n children: React.ReactNode\r\n}\r\n\r\nexport function EmptyDataOverlayWrapper({ className, children, emptyMessage, isEmpty = false }: Props) {\r\n return (\r\n
\r\n
{children}
\r\n\r\n {isEmpty && (\r\n
\r\n {!!emptyMessage && (\r\n
\r\n \r\n {emptyMessage}\r\n \r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n","/**\n * @fileOverview Line Chart\n */\nimport { generateCategoricalChart } from './generateCategoricalChart';\nimport { Line } from '../cartesian/Line';\nimport { XAxis } from '../cartesian/XAxis';\nimport { YAxis } from '../cartesian/YAxis';\nimport { formatAxisMap } from '../util/CartesianUtils';\nexport var LineChart = generateCategoricalChart({\n chartName: 'LineChart',\n GraphicalChild: Line,\n axisComponents: [{\n axisType: 'xAxis',\n AxisComp: XAxis\n }, {\n axisType: 'yAxis',\n AxisComp: YAxis\n }],\n formatAxisMap: formatAxisMap\n});","import classNames from 'classnames'\r\nimport React from 'react'\r\nimport { LineChart as RechartsLineChart, ResponsiveContainer } from 'recharts'\r\n\r\nimport { ChartContext } from '../chart/ChartWrapper'\r\nimport { Line } from '../chart/Line'\r\nimport { LineDot } from '../chart/LineDot'\r\nimport { Tooltip } from '../chart/Tooltip'\r\nimport { YAxis } from '../chart/YAxis'\r\nimport { ChartItemColorType } from '../chart/constants'\r\nimport ChartTooltip from './ChartTooltip'\r\nimport {\r\n BAR_GAP,\r\n BAR_WIDTH,\r\n CHART_HEIGHT,\r\n EXTRA_WIDTH,\r\n LABELS_WIDTH,\r\n LINE_CHART_LABELS_MARGIN,\r\n LINE_CHART_MARGINS,\r\n} from './constants'\r\nimport { ChartProps, LineChartTooltipSort } from './types'\r\nimport { getChartDataItemKey, tickFormatter } from './utils'\r\n\r\ninterface Props extends ChartProps {\r\n tooltipSort?: keyof typeof LineChartTooltipSort\r\n}\r\n\r\nexport default function LineChart({\r\n chartData,\r\n visibleAreas,\r\n columnsCount,\r\n barWidth = BAR_WIDTH,\r\n tooltipSort,\r\n showTotal,\r\n isFullWidth,\r\n}: Props) {\r\n const chartWidth = columnsCount * barWidth + (columnsCount - 1) * BAR_GAP + EXTRA_WIDTH\r\n const ChartWrapper = isFullWidth ? ResponsiveContainer : React.Fragment\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n } />\r\n {showTotal && } dataKey=\"total\" color=\"gray\" />}\r\n {visibleAreas.map((area) => {\r\n const itemKey = getChartDataItemKey(area)\r\n return (\r\n }\r\n activeDot={\r\n \r\n }\r\n />\r\n )\r\n })}\r\n \r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { MONTHS } from '../../constants'\r\nimport { LABELS_WIDTH, LINE_CHART_MARGINS } from './constants'\r\nimport { LineStackedBarChartProps, View } from './types'\r\n\r\ninterface Props extends Pick {\r\n barWidth: number\r\n}\r\n\r\nexport function XAxis({ barWidth, yearKeys, chartView }: Props) {\r\n const rightOffset = chartView === View.lines ? LINE_CHART_MARGINS.right - barWidth / 2 : 0\r\n return (\r\n \r\n {yearKeys.map((value) => {\r\n const year = value.substring(0, 4)\r\n const month = Number.parseInt(value.substring(4, 6))\r\n\r\n return (\r\n \r\n {month === 1 ? year.substring(2, 4) : MONTHS[month - 1]}\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { ManualGrid } from '../chart/ManualGrid'\r\nimport BarChart from './BarChart'\r\nimport { EmptyDataOverlayWrapper } from './EmptyDataOverlayWrapper'\r\nimport LineChart from './LineChart'\r\nimport { XAxis } from './XAxis'\r\nimport { CHART_HEIGHT, LABELS_WIDTH } from './constants'\r\nimport { LineStackedBarChartProps, View } from './types'\r\nimport { getChartData } from './utils'\r\n\r\nexport function LineStackedBarChart({\r\n data,\r\n yearKeys,\r\n chartView,\r\n lineChartTooltipSort,\r\n emptyMessage,\r\n isEmpty,\r\n isFullWidth = false,\r\n hasXAxis = false,\r\n isShowAll = false,\r\n isInView = true,\r\n hasBeenInView = true,\r\n}: LineStackedBarChartProps) {\r\n const wrapperRef = React.useRef(null)\r\n const [barWidth, setBarWidth] = React.useState(0)\r\n const { chartData, visibleAreas } = React.useMemo(\r\n () => (hasBeenInView ? getChartData(data, yearKeys, chartView) : { chartData: [], visibleAreas: [] }),\r\n [data, yearKeys, hasBeenInView, chartView]\r\n )\r\n\r\n const columnsCount = yearKeys.length\r\n\r\n React.useEffect(() => {\r\n const wrapperWidth = wrapperRef.current?.clientWidth ?? 0\r\n setBarWidth((wrapperWidth - LABELS_WIDTH) / columnsCount)\r\n }, [columnsCount])\r\n\r\n return (\r\n \r\n \r\n {isInView && chartView === View.bars && (\r\n \r\n )}\r\n {isInView && chartView === View.lines && (\r\n \r\n )}\r\n\r\n {hasXAxis && }\r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { ColorVariant } from '../checkbox'\r\nimport { FinancialsRowDataType } from '../financials-table/types'\r\n\r\nexport enum View {\r\n bars,\r\n lines,\r\n}\r\n\r\nexport interface ChartProps {\r\n chartData: ChartData[]\r\n showTotal?: boolean\r\n visibleAreas: Array<\r\n Pick & {\r\n color: ColorVariant\r\n }\r\n >\r\n columnsCount: number\r\n barWidth?: number\r\n isFullWidth?: boolean\r\n}\r\n\r\nexport type ChartData = {\r\n year: string\r\n topKey: string\r\n bottomKey: string\r\n total: number\r\n} & Record\r\n\r\nexport enum LineChartTooltipSort {\r\n default = 'default',\r\n value = 'value',\r\n}\r\n\r\nexport type LineStackedBarChartProps = {\r\n data: FinancialsRowDataType[]\r\n yearKeys: string[]\r\n chartView: View\r\n isShowAll?: boolean\r\n isFullWidth?: boolean\r\n hasXAxis?: boolean\r\n isInView?: boolean\r\n hasBeenInView?: boolean\r\n lineChartTooltipSort?: keyof typeof LineChartTooltipSort\r\n emptyMessage?: React.ReactNode\r\n isEmpty?: boolean\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nexport function useStickyShadow() {\r\n const stickyRef = React.useRef(null)\r\n const [isSticky, setIsSticky] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n if (!stickyRef.current) return\r\n\r\n const onScroll = throttle(function () {\r\n const stickyElement = stickyRef.current\r\n if (!stickyElement) return\r\n\r\n const elementStickyTopOffset = parseFloat(getComputedStyle(stickyElement).top)\r\n const elementCurrentTopOffset = stickyElement.getBoundingClientRect().top\r\n\r\n setIsSticky(elementCurrentTopOffset === elementStickyTopOffset)\r\n }, 100)\r\n\r\n onScroll()\r\n document.addEventListener('scroll', onScroll)\r\n\r\n return () => {\r\n document.removeEventListener('scroll', onScroll)\r\n }\r\n }, [])\r\n\r\n return React.useMemo(\r\n () => ({\r\n stickyRef,\r\n isSticky,\r\n }),\r\n [isSticky]\r\n )\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n throttleWaitInMs?: number\r\n isWatching?: boolean\r\n}\r\n\r\nexport function useWindowSize({ throttleWaitInMs = 300, isWatching = true }: Props = {}) {\r\n const [size, setSize] = React.useState({\r\n clientWidth: document.documentElement.clientWidth,\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!isWatching) return\r\n\r\n const handleResize = throttle(() => {\r\n setSize({\r\n clientWidth: document.documentElement.clientWidth,\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n }, throttleWaitInMs)\r\n\r\n window.addEventListener('resize', handleResize)\r\n\r\n return () => {\r\n handleResize.cancel()\r\n window.removeEventListener('resize', handleResize)\r\n }\r\n }, [throttleWaitInMs, isWatching])\r\n\r\n return size\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, Icon } from '../../components'\r\nimport { usePrevious } from '../../hooks/use-previous'\r\n\r\ninterface Props {\r\n showMoreLabel: string\r\n showLessLabel: string\r\n isShowMore: boolean\r\n hasHiddenRows: boolean\r\n onShowMoreToggle: (isShowMore: boolean) => void\r\n}\r\n\r\n// Rating relevancy is going to be done in some follow up\r\nconst TEMP_HIDDEN_RATE_RELEVANCY = true\r\n\r\nexport function TrafficTableBottomContent({\r\n showMoreLabel,\r\n showLessLabel,\r\n isShowMore,\r\n hasHiddenRows,\r\n onShowMoreToggle,\r\n}: Props) {\r\n const wrapperRef = React.useRef(null)\r\n const previousExpandWrapperTopRef = React.useRef(0)\r\n const isShowMorePrevious = usePrevious(isShowMore)\r\n\r\n React.useEffect(() => {\r\n if (isShowMorePrevious && !isShowMore) {\r\n setTimeout(() => {\r\n const currentExpandWrapperTop = wrapperRef.current?.getBoundingClientRect().top ?? 0\r\n window.scrollTo({ top: window.scrollY - (previousExpandWrapperTopRef.current - currentExpandWrapperTop) })\r\n })\r\n }\r\n }, [isShowMorePrevious, isShowMore])\r\n\r\n return (\r\n
\r\n {hasHiddenRows ? (\r\n {\r\n previousExpandWrapperTopRef.current = wrapperRef.current?.getBoundingClientRect().top ?? 0\r\n onShowMoreToggle(!isShowMore)\r\n }}\r\n leftContent={}\r\n className=\"font-normal\"\r\n >\r\n {isShowMore ? showLessLabel : showMoreLabel}\r\n \r\n ) : (\r\n
\r\n )}\r\n\r\n
\r\n Data source: similarweb.com\r\n {!TEMP_HIDDEN_RATE_RELEVANCY && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { TableAlign, TableHead, TableHeader, TableHeaderSortable } from '../../components/Table'\r\nimport { FinancialsColumnDefinition } from '../../components/financials-table/types'\r\nimport { SortByShape } from '../../hooks/use-sort-data'\r\nimport { SortDirection } from '../../types'\r\nimport { TrafficSubRowDataType } from './types'\r\n\r\ntype Props = {\r\n columns: FinancialsColumnDefinition[]\r\n sort: SortByShape | null>\r\n stickyLabelWidthClassName?: string\r\n onSortChange: (column: FinancialsColumnDefinition) => void\r\n}\r\n\r\nexport function TrafficTableHead({ columns, sort, stickyLabelWidthClassName, onSortChange }: Props) {\r\n const handleChangeSort = (column: FinancialsColumnDefinition) => {\r\n const shouldRemoveOrder = sort.direction === SortDirection.Descending && column === sort.column\r\n if (shouldRemoveOrder) {\r\n onSortChange('order' as unknown as FinancialsColumnDefinition)\r\n } else {\r\n onSortChange(column)\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n {columns.map((column) => (\r\n handleChangeSort(column)}\r\n >\r\n {column.name}\r\n \r\n ))}\r\n \r\n )\r\n}\r\n","import { ColorVariant } from '../../components'\r\nimport { FinancialsSubRowDataType } from '../../components/financials-table/types'\r\nimport { View } from '../../components/line-stacked-bar-chart'\r\n\r\nexport enum TrafficDataViewEnum {\r\n visits = 'visits',\r\n momChangePct = 'momChangePct',\r\n}\r\n\r\nexport enum AppRegion {\r\n us = 'us',\r\n ww = 'ww',\r\n}\r\n\r\nexport enum AppPlatform {\r\n ios = 'ios',\r\n android = 'android',\r\n}\r\n\r\nexport type TrafficSettings = {\r\n trafficDataView: TrafficDataViewEnum\r\n chartView: View\r\n appRegions: AppRegion[]\r\n appPlatforms: AppPlatform[]\r\n}\r\n\r\nexport interface InitialTrafficData {\r\n trafficTickers: string[]\r\n companyName: string\r\n mainDomain?: string | null\r\n trafficsWithPeers: TrafficItem[]\r\n appsWithPeers: AppItem[]\r\n}\r\n\r\nexport interface ParsedTrafficData extends Omit {\r\n trafficsWithPeers: ParsedTrafficItem[]\r\n appsWithPeers: ParsedAppItem[]\r\n}\r\n\r\nexport interface TrafficItem {\r\n domain?: string | null\r\n industry?: string | null\r\n industryGroup?: string | null\r\n heatmapSector?: string | null\r\n heatmapSubSector?: string | null\r\n peers?: string | null\r\n sector?: string | null\r\n ticker: string | null\r\n trafficJson?: string | null\r\n}\r\n\r\nexport type ParsedTrafficItem = Omit & {\r\n traffic: {\r\n d: number[]\r\n v: number[]\r\n } | null\r\n}\r\n\r\nexport interface AppItem {\r\n domain?: string\r\n appId?: string | null\r\n appName?: string | null\r\n os?: string | null\r\n geo?: string | null\r\n mauJson?: string | null\r\n}\r\n\r\nexport type ParsedAppItem = Omit & {\r\n id: string\r\n os: AppPlatform | null\r\n geo: AppRegion | null\r\n mau: {\r\n d: number[]\r\n v: number[]\r\n } | null\r\n}\r\n\r\nexport type TrafficSubRowDataType = Omit & {\r\n values: Array<{ year: string; value: number | null; momValue?: number | null }>\r\n keyValueMap: Record\r\n momKeyValueMap: Record\r\n}\r\n\r\nexport type TrafficRowDataType = TrafficSubRowDataType & {\r\n isSelected: boolean\r\n isHighlighted: boolean\r\n color: ColorVariant\r\n}\r\n","import React from 'react'\r\n\r\nimport { Heading } from '../../components'\r\nimport { ChipSwitch, ChipSwitchButton } from '../../components/ChipSwitch'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { View } from '../../components/line-stacked-bar-chart'\r\nimport { TrafficDataViewEnum, TrafficSettings } from './types'\r\n\r\nexport function WidgetDomainSettingsSection() {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof TrafficSettings, value: TrafficSettings[typeof key]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n return (\r\n
\r\n \r\n Domains: Monthly Visits\r\n \r\n
\r\n \r\n {\r\n toggleSetting('trafficDataView', TrafficDataViewEnum.visits)\r\n }}\r\n >\r\n Visits\r\n \r\n {\r\n toggleSetting('trafficDataView', TrafficDataViewEnum.momChangePct)\r\n }}\r\n >\r\n MoM Growth %\r\n \r\n \r\n\r\n \r\n {\r\n toggleSetting('chartView', View.bars)\r\n }}\r\n />\r\n {\r\n toggleSetting('chartView', View.lines)\r\n }}\r\n />\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import { ColorVariant } from '../../components'\r\nimport { AppPlatform, AppRegion, TrafficDataViewEnum, TrafficSettings } from './types'\r\n\r\nexport const COOKIE_KEY = 'trafficSettings'\r\n\r\nexport const DEFAULT_SHOW_NUM_OF_APPS = 12\r\n\r\nexport const DEFAULT_SETTINGS: TrafficSettings = {\r\n trafficDataView: TrafficDataViewEnum.visits,\r\n chartView: 1,\r\n appPlatforms: [AppPlatform.android, AppPlatform.ios],\r\n appRegions: [AppRegion.us, AppRegion.ww],\r\n}\r\n\r\nexport const SEGMENT_COLORS = Object.keys(ColorVariant).filter(\r\n (c) => c !== ColorVariant.gray && c !== ColorVariant.default\r\n) as ColorVariant[]\r\n\r\nexport const AppPlatformLabels = {\r\n [AppPlatform.ios]: 'iOS',\r\n [AppPlatform.android]: 'Android',\r\n}\r\n\r\nexport const AppRegionLabels = {\r\n [AppRegion.us]: 'USA',\r\n [AppRegion.ww]: 'Worldwide',\r\n}\r\n\r\nexport const COMMON_COLUMN_CLASS_NAME = 'px-3.5 last:pr-11 w-17 min-w-17 max-w-17 last:w-24.5 relative'\r\n","import * as React from 'react'\r\n\r\nexport type MonthlyDataRowSelectionOverridesType = Record\r\n\r\ninterface Props {\r\n clearInactiveIdsBlacklist?: string[]\r\n}\r\n\r\nexport function useMonthlyDataControls({ clearInactiveIdsBlacklist }: Props) {\r\n const [isShowMore, setIsShowMore] = React.useState(false)\r\n const [monthlyDataRowSelectionOverrides, setMonthlyDataRowSelectionOverrides] =\r\n React.useState({})\r\n\r\n const toggleMonthlyDataRowSelection = React.useCallback((id: string, isSelected: boolean) => {\r\n setMonthlyDataRowSelectionOverrides((prevState) => ({\r\n ...prevState,\r\n [id]: isSelected,\r\n }))\r\n }, [])\r\n\r\n const clearInactiveMonthlyData = React.useCallback(() => {\r\n setMonthlyDataRowSelectionOverrides((prevState) =>\r\n Object.keys(prevState).reduce(\r\n (acc, id) =>\r\n clearInactiveIdsBlacklist?.includes(id)\r\n ? acc\r\n : {\r\n ...acc,\r\n [id]: prevState[id] ? true : undefined,\r\n },\r\n prevState\r\n )\r\n )\r\n }, [clearInactiveIdsBlacklist])\r\n\r\n const toggleIsShowMore = React.useCallback(\r\n (isShowMore: boolean) => {\r\n if (isShowMore) {\r\n clearInactiveMonthlyData()\r\n }\r\n setIsShowMore(isShowMore)\r\n },\r\n [clearInactiveMonthlyData]\r\n )\r\n\r\n return React.useMemo(\r\n () => ({\r\n monthlyDataRowSelectionOverrides,\r\n toggleMonthlyDataRowSelection,\r\n toggleIsShowMore,\r\n isShowMore,\r\n }),\r\n [monthlyDataRowSelectionOverrides, toggleMonthlyDataRowSelection, toggleIsShowMore, isShowMore]\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { format } from 'date-fns'\r\nimport * as React from 'react'\r\n\r\nimport { TableAlign } from '../../components/Table'\r\nimport { getHeatmapClassNames } from '../../components/financials-table'\r\nimport { FinancialsColumnDefinition } from '../../components/financials-table/types'\r\nimport { shortFormatNumber } from '../../util'\r\nimport { COMMON_COLUMN_CLASS_NAME } from './constants'\r\nimport { TrafficDataViewEnum, TrafficSubRowDataType } from './types'\r\n\r\nconst getColumnsAndValueGetter = (yearKeys: string[], trafficDataView: TrafficDataViewEnum) => {\r\n const isMomChangePct = trafficDataView === TrafficDataViewEnum.momChangePct\r\n const columns: FinancialsColumnDefinition[] = yearKeys.map((yearMonth) => {\r\n const year = yearMonth.slice(0, 4)\r\n const month = yearMonth.slice(4, 6)\r\n const monthIndex = Number.parseInt(month) - 1\r\n const date = new Date(Number.parseInt(year), monthIndex, 1)\r\n return {\r\n id: yearMonth,\r\n name: format(date, monthIndex === 0 ? 'yyyy' : 'MMM'),\r\n align: TableAlign.Right,\r\n className: classnames(COMMON_COLUMN_CLASS_NAME, {\r\n 'is-heatmap': isMomChangePct,\r\n }),\r\n getColumnClassName: (data) => (isMomChangePct ? getHeatmapClassNames(data.momKeyValueMap[yearMonth]) : null),\r\n renderColumn: (data) => {\r\n const value = data[isMomChangePct ? 'momKeyValueMap' : 'keyValueMap'][yearMonth] ?? null\r\n const hasValue = typeof value === 'number'\r\n const shouldShowDecimal = (value ?? 0) >= 1000 || isMomChangePct\r\n return (\r\n \r\n {shortFormatNumber(value, { fractions: shouldShowDecimal ? 1 : 0, defaultValue: '—' })}\r\n {isMomChangePct && hasValue ? '%' : ''}\r\n \r\n )\r\n },\r\n }\r\n })\r\n\r\n return {\r\n columns,\r\n valueGetter: (column: FinancialsColumnDefinition) => (data: TrafficSubRowDataType) =>\r\n data[isMomChangePct ? 'momKeyValueMap' : 'keyValueMap'][column.id] ?? null,\r\n }\r\n}\r\n\r\nconst EMPTY_ARRAY: FinancialsColumnDefinition[] = []\r\n\r\nexport function useTableColumns(yearKeys: string[], trafficDataView: TrafficDataViewEnum, hasBeenInView: boolean) {\r\n return React.useMemo(\r\n () =>\r\n hasBeenInView\r\n ? getColumnsAndValueGetter(yearKeys, trafficDataView)\r\n : { columns: EMPTY_ARRAY, valueGetter: () => () => null },\r\n [yearKeys, trafficDataView, hasBeenInView]\r\n )\r\n}\r\n","import {\r\n AppPlatform,\r\n AppRegion,\r\n InitialTrafficData,\r\n ParsedAppItem,\r\n ParsedTrafficData,\r\n ParsedTrafficItem,\r\n} from './types'\r\n\r\nexport function getParsedDataFromInitial(data: InitialTrafficData): ParsedTrafficData {\r\n const { mainDomain, trafficsWithPeers, appsWithPeers, companyName, trafficTickers } = data\r\n\r\n return {\r\n trafficTickers,\r\n companyName,\r\n mainDomain: trafficsWithPeers.find(({ domain }) => domain && mainDomain?.includes(domain))?.domain ?? null,\r\n trafficsWithPeers: trafficsWithPeers.map(({ trafficJson, ...item }) => ({\r\n ...item,\r\n traffic: trafficJson ? JSON.parse(trafficJson) : null,\r\n })),\r\n appsWithPeers: appsWithPeers.map(({ mauJson, ...item }) => {\r\n let geo: AppRegion | null = null\r\n let os: AppPlatform | null = null\r\n if (item.geo?.toLowerCase() === AppRegion.ww) {\r\n geo = AppRegion.ww\r\n } else if (item.geo?.toLowerCase() === AppRegion.us) {\r\n geo = AppRegion.us\r\n }\r\n if (item.os?.toLowerCase() === AppPlatform.ios) {\r\n os = AppPlatform.ios\r\n } else if (item.os?.toLowerCase() === AppPlatform.android) {\r\n os = AppPlatform.android\r\n }\r\n\r\n return {\r\n ...item,\r\n appName: item.appName ?? 'N/A',\r\n id: `${item.domain}-${item.appName}-${item.appId}-${item.os}-${item.geo}`,\r\n os,\r\n geo,\r\n mau: mauJson ? JSON.parse(mauJson) : null,\r\n }\r\n }),\r\n }\r\n}\r\n\r\nexport function getSortedTickerTrafficsWithPeers(parsedData: ParsedTrafficData) {\r\n const tickerTrafficsWithPeers = parsedData.trafficsWithPeers.filter(\r\n (trafficWithPeers) =>\r\n trafficWithPeers.domain &&\r\n parsedData.trafficTickers.some((ticker) => ticker.toLowerCase() === trafficWithPeers.ticker?.toLowerCase())\r\n )\r\n tickerTrafficsWithPeers.sort((a, b) => {\r\n if (a.domain === parsedData?.mainDomain) return -1\r\n if (b.domain === parsedData?.mainDomain) return 1\r\n const aLastValue = a.traffic?.v[a.traffic.v.length - 1] ?? 0\r\n const bLastValue = b.traffic?.v[b.traffic.v.length - 1] ?? 0\r\n if (aLastValue === bLastValue) return 0\r\n\r\n return aLastValue > bLastValue ? -1 : 1\r\n })\r\n return tickerTrafficsWithPeers\r\n}\r\n\r\nexport function getAppStoreLink(app: ParsedAppItem) {\r\n if (!app.appId) return undefined\r\n\r\n if (app.os === AppPlatform.android) {\r\n return `https://play.google.com/store/apps/details?id=${app.appId}`\r\n }\r\n\r\n return `https://apps.apple.com/app/${app.appId}`\r\n}\r\n\r\nexport function getDomainHref(item: ParsedTrafficItem) {\r\n if (item.domain) {\r\n return `https://${item.domain}`\r\n }\r\n return undefined\r\n}\r\n\r\ninterface GetSelectedAppsArrayProps {\r\n domainApps: ParsedAppItem[]\r\n peerApps: ParsedAppItem[]\r\n industryApps: ParsedAppItem[]\r\n appRegions: AppRegion[]\r\n appPlatforms: AppPlatform[]\r\n}\r\n\r\nexport function getSelectedAppsArray({\r\n domainApps,\r\n peerApps,\r\n industryApps,\r\n appPlatforms,\r\n appRegions,\r\n}: GetSelectedAppsArrayProps) {\r\n if (domainApps.length === 0) {\r\n return []\r\n }\r\n\r\n return [domainApps, peerApps, industryApps]\r\n .flat()\r\n .filter((app) => appPlatforms.includes(app.os!) && appRegions.includes(app.geo!))\r\n}\r\n\r\nexport function sortByMauLastValueDesc(apps: ParsedAppItem[]) {\r\n return [...apps].sort((a, b) => {\r\n const aLastValue = a.mau?.v[a.mau.v.length - 1] ?? 0\r\n const bLastValue = b.mau?.v[b.mau.v.length - 1] ?? 0\r\n if (aLastValue === bLastValue) return 0\r\n\r\n return aLastValue > bLastValue ? -1 : 1\r\n })\r\n}\r\n","import React from 'react'\r\n\r\nimport { useTableSort } from '../../components/Table'\r\nimport { ExternalLink } from '../../components/external-link'\r\nimport { FinancialsWidget, getMoMPercentageData, useFinancialsTableContext } from '../../components/financials-table'\r\nimport { LineStackedBarChart } from '../../components/line-stacked-bar-chart'\r\nimport { TrafficTableBottomContent } from './TrafficTableBottomContent'\r\nimport { TrafficTableHead } from './TrafficTableHead'\r\nimport { WidgetDomainSettingsSection } from './WidgetDomainSettingsSection'\r\nimport { SEGMENT_COLORS } from './constants'\r\nimport { TrafficRowDataType, TrafficSettings, TrafficSubRowDataType } from './types'\r\nimport { ParsedTrafficItem } from './types'\r\nimport { useMonthlyDataControls } from './useMonthlyDataControls'\r\nimport { useTableColumns } from './useTableColumns'\r\nimport { getDomainHref } from './utils'\r\n\r\ninterface MapDataProps {\r\n mainTraffic: ParsedTrafficItem\r\n peerTraffics: ParsedTrafficItem[]\r\n industryTraffics: ParsedTrafficItem[]\r\n isPlaceholder: boolean\r\n}\r\n\r\ninterface Props extends Omit {\r\n hasBeenInView: boolean\r\n isInView: boolean\r\n}\r\n\r\nfunction mapData({\r\n mainTraffic,\r\n peerTraffics,\r\n industryTraffics,\r\n yearKeys,\r\n isPlaceholder,\r\n}: MapDataProps & { yearKeys: number[] }): TrafficRowDataType[] {\r\n const allTraffics = [mainTraffic, ...peerTraffics, ...industryTraffics]\r\n const domainsArray = allTraffics.map((traffic, index) => {\r\n const values = !isPlaceholder\r\n ? yearKeys.map((date) => {\r\n const index = traffic.traffic?.d.findIndex((d) => d === date) ?? -1\r\n return {\r\n year: date.toString(),\r\n value: traffic.traffic?.v[index] ?? null,\r\n }\r\n })\r\n : []\r\n\r\n const valuesWithMomData: TrafficSubRowDataType['values'] = []\r\n const keyValueMap: TrafficSubRowDataType['keyValueMap'] = {}\r\n const momKeyValueMap: TrafficSubRowDataType['momKeyValueMap'] = {}\r\n\r\n if (!isPlaceholder) {\r\n const momData = getMoMPercentageData(values)\r\n values.forEach(({ year, value }) => {\r\n const momValue = momData[year] ?? null\r\n keyValueMap[year] = value\r\n momKeyValueMap[year] = momValue\r\n\r\n valuesWithMomData.push({\r\n year,\r\n value,\r\n momValue,\r\n })\r\n })\r\n }\r\n\r\n const isHighlighted = traffic.domain === mainTraffic.domain\r\n\r\n return {\r\n label: traffic.domain!,\r\n id: traffic.domain!,\r\n labelElement: ,\r\n labelColumnClassName: 'whitespace-nowrap',\r\n isLabelColumnSticky: true,\r\n color: SEGMENT_COLORS[index % SEGMENT_COLORS.length],\r\n isHighlighted,\r\n isSelected: traffic.domain === mainTraffic.domain || !!mainTraffic?.peers?.includes(traffic.domain!),\r\n values: valuesWithMomData,\r\n keyValueMap,\r\n momKeyValueMap,\r\n }\r\n })\r\n\r\n return domainsArray\r\n}\r\n\r\nexport function Domain({\r\n mainTraffic,\r\n peerTraffics,\r\n industryTraffics: industryTrafficsRaw,\r\n hasBeenInView,\r\n isInView,\r\n}: Props) {\r\n const { settings } = useFinancialsTableContext()\r\n const clearInactiveIdsBlacklist = React.useMemo(\r\n () => (mainTraffic ? [mainTraffic, ...peerTraffics].map(({ domain }) => domain ?? '') : ([] as string[])),\r\n [mainTraffic, peerTraffics]\r\n )\r\n const { monthlyDataRowSelectionOverrides, toggleMonthlyDataRowSelection, isShowMore, toggleIsShowMore } =\r\n useMonthlyDataControls({\r\n clearInactiveIdsBlacklist,\r\n })\r\n const industryTraffics = React.useMemo(() => {\r\n if (isShowMore) {\r\n return industryTrafficsRaw\r\n }\r\n return industryTrafficsRaw.filter(({ domain }) => domain && monthlyDataRowSelectionOverrides[domain] !== undefined)\r\n }, [industryTrafficsRaw, monthlyDataRowSelectionOverrides, isShowMore])\r\n\r\n const yearKeys = React.useMemo(() => {\r\n const allTraffics = [mainTraffic, ...peerTraffics, ...industryTraffics]\r\n return allTraffics\r\n .flatMap(({ traffic }) => traffic?.d)\r\n .filter((year, index, arr) => year !== undefined && arr.indexOf(year) === index)\r\n .sort((a, b) => a! - b!) as number[]\r\n }, [mainTraffic, peerTraffics, industryTraffics])\r\n const stringYearKeys = React.useMemo(() => yearKeys.map((y) => y.toString()), [yearKeys])\r\n const [monthlyData, setMonthlyData] = React.useState(() =>\r\n mapData({ peerTraffics, mainTraffic, industryTraffics, yearKeys, isPlaceholder: true })\r\n )\r\n const { columns, valueGetter } = useTableColumns(stringYearKeys, settings.trafficDataView, hasBeenInView)\r\n\r\n const {\r\n data: sortedData,\r\n sort,\r\n changeSort,\r\n } = useTableSort({\r\n data: monthlyData,\r\n columns,\r\n defaultSort: { column: columns[columns.length - 1], direction: -1 },\r\n key: hasBeenInView ? 1 : 0,\r\n valueGetter,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!hasBeenInView) {\r\n return\r\n }\r\n\r\n const newMonthlyData = mapData({\r\n peerTraffics,\r\n mainTraffic,\r\n industryTraffics,\r\n yearKeys,\r\n isPlaceholder: false,\r\n })\r\n setMonthlyData(\r\n newMonthlyData.map((data, index) => ({\r\n ...data,\r\n isSelected: monthlyDataRowSelectionOverrides[data.id] ?? index < [mainTraffic, ...peerTraffics].length,\r\n }))\r\n )\r\n }, [\r\n peerTraffics,\r\n mainTraffic,\r\n industryTraffics,\r\n yearKeys,\r\n monthlyDataRowSelectionOverrides,\r\n hasBeenInView,\r\n settings.trafficDataView,\r\n ])\r\n\r\n return (\r\n
\r\n }\r\n tableHead={}\r\n columns={columns}\r\n hasStickyColumnWrapper={hasBeenInView}\r\n isTableFixed={false}\r\n onVisibilityChange={toggleMonthlyDataRowSelection}\r\n >\r\n \r\n \r\n 0}\r\n isShowMore={isShowMore}\r\n onShowMoreToggle={toggleIsShowMore}\r\n />\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Heading, Paragraph } from '../../components/typography'\r\nimport { Domain } from './Domain'\r\n\r\nconst mainTraffic = {\r\n ticker: 'AAPL',\r\n domain: 'apple.com',\r\n sector: 'Information Technology',\r\n industryGroup: 'Technology Hardware & Equipment',\r\n industry: 'Electronic Equipment, Instruments & Components',\r\n heatmapSector: 'Retail & Ecommerce',\r\n heatmapSubSector: 'Electronics Retail',\r\n peers: 'bestbuy.com bhphotovideo.com dell.com newegg.com gopro.com',\r\n traffic: {\r\n d: [202309, 202310, 202311, 202312, 202401, 202402, 202403, 202404, 202405, 202406, 202407, 202408],\r\n v: [\r\n 540748750, 505229547, 487297621, 488173477, 491135108, 455089483, 469888439, 438799320, 466652151, 447602427,\r\n 460280112, 466004425,\r\n ],\r\n },\r\n}\r\n\r\nconst peerTraffics = [\r\n {\r\n ticker: null,\r\n domain: 'bhphotovideo.com',\r\n heatmapSector: 'Retail & Ecommerce',\r\n heatmapSubSector: 'Electronics Retail',\r\n peers: 'adorama.com bestbuy.com newegg.com crutchfield.com apple.com',\r\n traffic: {\r\n d: [202309, 202310, 202311, 202312, 202401, 202402, 202403, 202404, 202405, 202406, 202407, 202408],\r\n v: [\r\n 16882382, 15587001, 19360737, 17491439, 15626709, 14937833, 15778420, 14048463, 14447505, 13713870, 14458610,\r\n 13244665,\r\n ],\r\n },\r\n },\r\n {\r\n ticker: 'NEGG',\r\n domain: 'newegg.com',\r\n sector: 'Consumer Discretionary',\r\n industryGroup: 'Automobiles & Components',\r\n industry: 'Automobiles',\r\n heatmapSector: 'Retail & Ecommerce',\r\n heatmapSubSector: 'Electronics Retail',\r\n peers: 'bestbuy.com bhphotovideo.com microcenter.com monoprice.com adorama.com',\r\n traffic: {\r\n d: [202309, 202310, 202311, 202312, 202401, 202402, 202403, 202404, 202405, 202406, 202407, 202408],\r\n v: [\r\n 14655543, 14675084, 21299681, 17083935, 14989483, 12606841, 12744555, 11189424, 11204263, 10793083, 12361144,\r\n 10800396,\r\n ],\r\n },\r\n },\r\n {\r\n ticker: 'BBY',\r\n domain: 'bestbuy.com',\r\n sector: 'Consumer Discretionary',\r\n industryGroup: 'Retailing',\r\n industry: 'Specialty Retail',\r\n heatmapSector: 'Retail & Ecommerce',\r\n heatmapSubSector: 'Electronics Retail',\r\n peers: 'bhphotovideo.com newegg.com microcenter.com adorama.com crutchfield.com',\r\n traffic: {\r\n d: [202309, 202310, 202311, 202312, 202401, 202402, 202403, 202404, 202405, 202406, 202407, 202408],\r\n v: [\r\n 103083547, 109511672, 183001509, 145494317, 106208296, 91989808, 89471329, 82107190, 93211500, 95630411,\r\n 107767846, 108331167,\r\n ],\r\n },\r\n },\r\n {\r\n ticker: 'GPRO',\r\n domain: 'gopro.com',\r\n sector: 'Information Technology',\r\n industryGroup: 'Technology Hardware & Equipment',\r\n industry: 'Electronic Equipment, Instruments & Components',\r\n heatmapSector: 'Retail & Ecommerce',\r\n heatmapSubSector: 'Electronics Retail',\r\n peers: 'adorama.com bhphotovideo.com crutchfield.com bestbuy.com newegg.com',\r\n traffic: {\r\n d: [202309, 202310, 202311, 202312, 202401, 202402, 202403, 202404, 202405, 202406, 202407, 202408],\r\n v: [6691953, 5650591, 5848752, 5772722, 5387842, 4922998, 5067003, 4727655, 4848193, 5098999, 5130140, 4867626],\r\n },\r\n },\r\n {\r\n ticker: 'DELL',\r\n domain: 'dell.com',\r\n sector: 'Information Technology',\r\n industryGroup: 'Technology Hardware & Equipment',\r\n industry: 'Technology Hardware, Storage & Peripherals',\r\n heatmapSector: 'Retail & Ecommerce',\r\n heatmapSubSector: 'Electronics Retail',\r\n peers: 'bestbuy.com newegg.com bhphotovideo.com microcenter.com kabum.com.br',\r\n traffic: {\r\n d: [202309, 202310, 202311, 202312, 202401, 202402, 202403, 202404, 202405, 202406, 202407, 202408],\r\n v: [\r\n 45350663, 46275790, 54923594, 43819278, 47816519, 41098872, 45505450, 40775151, 40332786, 39203811, 45198644,\r\n 41075116,\r\n ],\r\n },\r\n },\r\n]\r\n\r\ninterface Props {\r\n companyName: string\r\n}\r\n\r\nexport function NoDataPlaceholder({ companyName }: Props) {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n Data Unavailable for {companyName}\r\n \r\n Currently, we do not have sufficient data to display the{' '}\r\n associated domains and smartphone apps for this company. As soon as the relevant\r\n information becomes available, this view will be updated to provide you with valuable insights.\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Heading } from '../../components'\r\nimport { ChipSwitch, ChipSwitchButton } from '../../components/ChipSwitch'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { View } from '../../components/line-stacked-bar-chart'\r\nimport { AppPlatformLabels, AppRegionLabels } from './constants'\r\nimport { AppPlatform, AppRegion, TrafficDataViewEnum, TrafficSettings } from './types'\r\n\r\nexport function WidgetAppSettingsSection() {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof TrafficSettings, value: TrafficSettings[typeof key]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n return (\r\n
\r\n \r\n Apps: Monthly Active Users\r\n \r\n
\r\n \r\n {[AppPlatform.ios, AppPlatform.android].map((key) => (\r\n {\r\n const has = settings.appPlatforms.includes(key)\r\n toggleSetting('appPlatforms', [\r\n ...settings.appPlatforms.filter((platform) => platform !== key),\r\n ...(has ? [] : [key]),\r\n ])\r\n }}\r\n >\r\n {AppPlatformLabels[key]}\r\n \r\n ))}\r\n \r\n\r\n \r\n {[AppRegion.ww, AppRegion.us].map((key) => (\r\n {\r\n const has = settings.appRegions.includes(key)\r\n toggleSetting('appRegions', [\r\n ...settings.appRegions.filter((platform) => platform !== key),\r\n ...(has ? [] : [key]),\r\n ])\r\n }}\r\n >\r\n {AppRegionLabels[key]}\r\n \r\n ))}\r\n \r\n\r\n \r\n {\r\n toggleSetting('trafficDataView', TrafficDataViewEnum.visits)\r\n }}\r\n >\r\n MAU\r\n \r\n {\r\n toggleSetting('trafficDataView', TrafficDataViewEnum.momChangePct)\r\n }}\r\n >\r\n MoM Growth %\r\n \r\n \r\n\r\n \r\n {\r\n toggleSetting('chartView', View.bars)\r\n }}\r\n />\r\n {\r\n toggleSetting('chartView', View.lines)\r\n }}\r\n />\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Tag } from '../../components'\r\nimport { useTableSort } from '../../components/Table'\r\nimport { ExternalLink } from '../../components/external-link'\r\nimport { FinancialsWidget, getMoMPercentageData, useFinancialsTableContext } from '../../components/financials-table'\r\nimport { LineStackedBarChart } from '../../components/line-stacked-bar-chart'\r\nimport { TrafficTableBottomContent } from './TrafficTableBottomContent'\r\nimport { TrafficTableHead } from './TrafficTableHead'\r\nimport { WidgetAppSettingsSection } from './WidgetAppSettingsSection'\r\nimport { AppPlatformLabels, AppRegionLabels, DEFAULT_SHOW_NUM_OF_APPS, SEGMENT_COLORS } from './constants'\r\nimport { ParsedAppItem, TrafficRowDataType, TrafficSettings, TrafficSubRowDataType } from './types'\r\nimport { MonthlyDataRowSelectionOverridesType, useMonthlyDataControls } from './useMonthlyDataControls'\r\nimport { useTableColumns } from './useTableColumns'\r\nimport { getAppStoreLink, getSelectedAppsArray } from './utils'\r\n\r\ninterface MapDataProps {\r\n domain: string | null\r\n selectedAppsArray: ParsedAppItem[]\r\n selectionOverrides?: MonthlyDataRowSelectionOverridesType\r\n yearKeys: number[]\r\n isPlaceholder: boolean\r\n}\r\n\r\nfunction mapData({\r\n domain,\r\n selectedAppsArray,\r\n selectionOverrides,\r\n yearKeys,\r\n isPlaceholder,\r\n}: MapDataProps): TrafficRowDataType[] {\r\n return selectedAppsArray.map((app, index) => {\r\n const appName = app.appName ?? 'N/A'\r\n const platformLabel = app.os ? AppPlatformLabels[app.os] : 'N/A'\r\n const geoLabel = app.geo ? AppRegionLabels[app.geo] : 'N/A'\r\n const values = !isPlaceholder\r\n ? yearKeys.map((date) => {\r\n const index = app.mau?.d.findIndex((d) => d === date) ?? -1\r\n return {\r\n year: date.toString(),\r\n value: app.mau?.v[index] ?? null,\r\n }\r\n })\r\n : []\r\n\r\n const valuesWithMomData: TrafficSubRowDataType['values'] = []\r\n const keyValueMap: TrafficSubRowDataType['keyValueMap'] = {}\r\n const momKeyValueMap: TrafficSubRowDataType['momKeyValueMap'] = {}\r\n\r\n if (!isPlaceholder) {\r\n const momData = getMoMPercentageData(values)\r\n values.forEach(({ year, value }) => {\r\n const momValue = momData[year] ?? null\r\n keyValueMap[year] = value\r\n momKeyValueMap[year] = momValue\r\n\r\n valuesWithMomData.push({\r\n year,\r\n value,\r\n momValue,\r\n })\r\n })\r\n }\r\n\r\n const isHighlighted = app.domain === domain\r\n\r\n return {\r\n id: app.id,\r\n label: [appName, platformLabel, geoLabel].join(' - '),\r\n labelColumnClassName: 'whitespace-nowrap',\r\n isLabelColumnSticky: true,\r\n labelElement: (\r\n
\r\n \r\n {platformLabel} {geoLabel}\r\n
\r\n ),\r\n isHighlighted,\r\n geo: app.geo,\r\n os: app.os,\r\n color: SEGMENT_COLORS[index % SEGMENT_COLORS.length],\r\n isSelected: selectionOverrides?.[app.id] ?? index < DEFAULT_SHOW_NUM_OF_APPS,\r\n values: valuesWithMomData,\r\n keyValueMap,\r\n momKeyValueMap,\r\n }\r\n })\r\n}\r\n\r\ninterface Props {\r\n domainApps: ParsedAppItem[]\r\n peerApps: ParsedAppItem[]\r\n industryApps: ParsedAppItem[]\r\n hasBeenInView: boolean\r\n isInView: boolean\r\n}\r\n\r\nexport function Apps({ domainApps, peerApps, industryApps, hasBeenInView, isInView }: Props) {\r\n const { settings } = useFinancialsTableContext()\r\n const { domain, yearKeys, stringYearKeys } = React.useMemo(() => {\r\n const domain = domainApps?.[0].domain ?? null\r\n const domainAppsYears = domainApps?.flatMap(({ mau }) => mau?.d) ?? []\r\n const peerAppsYears = peerApps?.flatMap(({ mau }) => mau?.d) ?? []\r\n const industryAppsYears = industryApps?.flatMap(({ mau }) => mau?.d) ?? []\r\n\r\n const yearKeys = (\r\n [...new Set([...domainAppsYears, ...peerAppsYears, ...industryAppsYears])].filter(Boolean) as number[]\r\n ).sort((a, b) => a - b)\r\n\r\n return {\r\n yearKeys,\r\n stringYearKeys: yearKeys.map((y) => y.toString()),\r\n domain,\r\n }\r\n }, [domainApps, peerApps, industryApps])\r\n\r\n const selectedAppsArray = React.useMemo(\r\n () =>\r\n getSelectedAppsArray({\r\n domainApps,\r\n peerApps,\r\n industryApps,\r\n appPlatforms: settings.appPlatforms,\r\n appRegions: settings.appRegions,\r\n }),\r\n [domainApps, peerApps, industryApps, settings.appRegions, settings.appPlatforms]\r\n )\r\n const clearInactiveIdsBlacklist = React.useMemo(\r\n () => selectedAppsArray.slice(0, DEFAULT_SHOW_NUM_OF_APPS).map(({ id }) => id),\r\n [selectedAppsArray]\r\n )\r\n const { monthlyDataRowSelectionOverrides, toggleMonthlyDataRowSelection, isShowMore, toggleIsShowMore } =\r\n useMonthlyDataControls({ clearInactiveIdsBlacklist })\r\n const [monthlyData, setMonthlyData] = React.useState(() =>\r\n mapData({\r\n domain,\r\n selectedAppsArray: selectedAppsArray.slice(0, DEFAULT_SHOW_NUM_OF_APPS),\r\n yearKeys,\r\n isPlaceholder: true,\r\n })\r\n )\r\n const { columns, valueGetter } = useTableColumns(stringYearKeys, settings.trafficDataView, hasBeenInView)\r\n\r\n const {\r\n data: sortedData,\r\n sort,\r\n changeSort,\r\n } = useTableSort({\r\n data: monthlyData,\r\n columns,\r\n defaultSort: { column: columns[columns.length - 1], direction: -1 },\r\n key: hasBeenInView ? 1 : 0,\r\n valueGetter,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!hasBeenInView) {\r\n return\r\n }\r\n\r\n const newMonthlyData = mapData({\r\n domain,\r\n selectedAppsArray: selectedAppsArray.filter(\r\n ({ id }, index) =>\r\n isShowMore || index < DEFAULT_SHOW_NUM_OF_APPS || monthlyDataRowSelectionOverrides[id] !== undefined\r\n ),\r\n yearKeys,\r\n selectionOverrides: monthlyDataRowSelectionOverrides,\r\n isPlaceholder: false,\r\n })\r\n\r\n setMonthlyData(newMonthlyData)\r\n }, [domain, selectedAppsArray, monthlyDataRowSelectionOverrides, yearKeys, isShowMore, hasBeenInView])\r\n\r\n const isEmpty = monthlyData.length === 0\r\n\r\n return (\r\n
\r\n }\r\n tableHead={\r\n isEmpty ? undefined : (\r\n \r\n )\r\n }\r\n columns={columns}\r\n hasStickyColumnWrapper={hasBeenInView}\r\n onVisibilityChange={toggleMonthlyDataRowSelection}\r\n >\r\n \r\n No matching Apps found.\r\n
\r\n Adjust your filters for more results.\r\n \r\n }\r\n isEmpty={isEmpty}\r\n isInView={isInView}\r\n hasBeenInView={hasBeenInView}\r\n isFullWidth\r\n hasXAxis\r\n />\r\n \r\n {!isEmpty && (\r\n DEFAULT_SHOW_NUM_OF_APPS}\r\n isShowMore={isShowMore}\r\n onShowMoreToggle={toggleIsShowMore}\r\n />\r\n )}\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Icon, Select, SelectItem } from '../../components'\r\n\r\ninterface Props {\r\n domain?: string | null\r\n domainItems: SelectItem[]\r\n isInteractive: boolean\r\n}\r\n\r\nconst TICKER_HEADER_CONTAINER_CLASS_NAME = 'js-ticker-header-container'\r\n\r\nexport default function TrafficDomainSelect({ domain, domainItems, isInteractive }: Props) {\r\n const handleDomainSelect = React.useCallback(({ value }: { value: string }) => {\r\n const tickerHeaderContainer = document.getElementsByClassName(TICKER_HEADER_CONTAINER_CLASS_NAME)?.[0]\r\n const fvHeaderHeightInPx =\r\n Number.parseFloat(window.getComputedStyle(document.body).getPropertyValue('--fv-header-height')) || 0\r\n const element = document.getElementById(value)\r\n const elementTopPosition = element?.getBoundingClientRect().top ?? 0\r\n window.scrollTo({\r\n left: 0,\r\n top: window.scrollY + elementTopPosition - tickerHeaderContainer.clientHeight - fvHeaderHeightInPx - 1, // -1 because if it's not there sticky shadow is applied on domain header\r\n behavior: 'smooth',\r\n })\r\n }, [])\r\n\r\n return (\r\n
\r\n }\r\n items={domainItems}\r\n isInteractive={isInteractive}\r\n onChange={handleDomainSelect}\r\n />\r\n
\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { Heading } from '../../components/typography'\r\nimport { useStickyShadow } from '../../hooks/use-sticky-shadow'\r\nimport { shortFormatNumber } from '../../util'\r\n\r\ninterface Props {\r\n domainElement: React.ReactElement | string\r\n sector?: string | null\r\n subSector?: string | null\r\n monthlyVisits: Array\r\n}\r\n\r\nexport default function TrafficHeader({ domainElement, sector, subSector, monthlyVisits }: Props) {\r\n const { stickyRef, isSticky } = useStickyShadow()\r\n\r\n const headerColumns = React.useMemo(() => {\r\n const lastMonthVisits = monthlyVisits[monthlyVisits.length - 1]\r\n const prevMonthVisits = monthlyVisits[monthlyVisits.length - 2]\r\n const visitsChangePercentage =\r\n typeof lastMonthVisits === 'number' && typeof prevMonthVisits === 'number'\r\n ? ((lastMonthVisits - prevMonthVisits) / Math.abs(prevMonthVisits)) * 100\r\n : null\r\n\r\n return [\r\n { label: 'Domain', value: domainElement },\r\n {\r\n label: 'Last Month Visits',\r\n value: `${shortFormatNumber(lastMonthVisits, { fractions: 2 })} ${visitsChangePercentage !== null ? `(${shortFormatNumber(visitsChangePercentage, { fractions: 2, showPlusSign: true })}%)` : ''}`,\r\n },\r\n // Used || intentionally in case sector/subSection is '' (empty string)\r\n { label: 'Sector', value: sector || '—' },\r\n { label: 'Sub Sector', value: subSector || '—' },\r\n ].map(({ label, value }, index) => (\r\n
\r\n {index === 0 && React.isValidElement(value) ? (\r\n value\r\n ) : (\r\n \r\n {value}\r\n \r\n )}\r\n {label}\r\n
\r\n ))\r\n }, [domainElement, monthlyVisits, sector, subSector])\r\n\r\n return (\r\n
\r\n \r\n
\r\n
{headerColumns}
\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { useIntersectionObserverContext } from '../../services/IntersectionObserverContext'\r\nimport { Apps } from './Apps'\r\nimport { Domain } from './Domain'\r\nimport TrafficDomainSelect from './TrafficDomainSelect'\r\nimport TrafficHeader from './TrafficHeader'\r\nimport { ParsedTrafficData } from './types'\r\nimport { ParsedTrafficItem } from './types'\r\nimport { sortByMauLastValueDesc } from './utils'\r\n\r\ninterface Props {\r\n parsedTrafficData: ParsedTrafficData\r\n domain: string\r\n index: number\r\n}\r\n\r\nexport function TrafficDomainSection({ parsedTrafficData, domain, index }: Props) {\r\n const { registerIntersectionObservedElement } = useIntersectionObserverContext()\r\n const domainApps = React.useMemo(\r\n () => sortByMauLastValueDesc(parsedTrafficData.appsWithPeers.filter((app) => app.domain === domain)),\r\n [parsedTrafficData, domain]\r\n )\r\n const [isInView, setIsInView] = React.useState(false)\r\n const [hasBeenInView, setHasBeenInView] = React.useState(false)\r\n const { mainTraffic, peerTraffics, industryTraffics, peerApps, industryApps } = React.useMemo(() => {\r\n const peerTraffics: ParsedTrafficItem[] = []\r\n const industryTraffics: ParsedTrafficItem[] = []\r\n\r\n const mainTraffic = parsedTrafficData.trafficsWithPeers.find((traffic) => traffic.domain === domain)!\r\n\r\n parsedTrafficData?.trafficsWithPeers.forEach((traffic) => {\r\n if (traffic.domain === domain) {\r\n return\r\n } else if (mainTraffic.peers?.includes(traffic.domain!)) {\r\n peerTraffics.push(traffic)\r\n } else if (\r\n mainTraffic.heatmapSector &&\r\n mainTraffic.heatmapSubSector &&\r\n mainTraffic.heatmapSector === traffic.heatmapSector &&\r\n mainTraffic.heatmapSubSector === traffic.heatmapSubSector\r\n ) {\r\n industryTraffics.push(traffic)\r\n }\r\n })\r\n\r\n const peerApps = sortByMauLastValueDesc(\r\n parsedTrafficData.appsWithPeers.filter((app) => peerTraffics.some((traffic) => app.domain === traffic.domain))\r\n )\r\n const industryApps = sortByMauLastValueDesc(\r\n parsedTrafficData.appsWithPeers.filter((app) => industryTraffics.some((traffic) => app.domain === traffic.domain))\r\n )\r\n\r\n return {\r\n mainTraffic,\r\n peerTraffics,\r\n industryTraffics,\r\n peerApps,\r\n industryApps,\r\n }\r\n }, [parsedTrafficData, domain])\r\n\r\n const domainItems = React.useMemo(\r\n () =>\r\n parsedTrafficData.trafficsWithPeers\r\n .filter(({ ticker, domain }) => domain && ticker === mainTraffic.ticker)\r\n .map(({ domain }) => ({ value: domain!, label: domain! })),\r\n [parsedTrafficData.trafficsWithPeers, mainTraffic.ticker]\r\n )\r\n\r\n React.useEffect(() => {\r\n if (isInView && !hasBeenInView) {\r\n setHasBeenInView(true)\r\n }\r\n }, [hasBeenInView, isInView])\r\n\r\n React.useEffect(() => {\r\n const unregister = registerIntersectionObservedElement(domain, setIsInView)\r\n\r\n return () => {\r\n unregister?.()\r\n }\r\n }, [domain, registerIntersectionObservedElement])\r\n\r\n return (\r\n
\r\n {index > 0 &&
}\r\n 1 ? (\r\n \r\n ) : (\r\n domain\r\n )\r\n }\r\n sector={mainTraffic.heatmapSector}\r\n subSector={mainTraffic.heatmapSubSector}\r\n monthlyVisits={mainTraffic.traffic?.v ?? []}\r\n />\r\n\r\n \r\n\r\n {domainApps.length > 0 && (\r\n \r\n )}\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { FinancialsTableContextProvider } from '../../components/financials-table'\r\nimport { useWindowSize } from '../../hooks/use-window-size'\r\nimport { useCachedLoaderData } from '../../hooks/useCachedLoaderData'\r\nimport { IntersectionObserverContextProvider } from '../../services/IntersectionObserverContext'\r\nimport { NoDataPlaceholder } from './NoDataPlaceholder'\r\nimport { TrafficDomainSection } from './TrafficDomainSection'\r\nimport { COOKIE_KEY, DEFAULT_SETTINGS } from './constants'\r\nimport { InitialTrafficData, ParsedTrafficData } from './types'\r\nimport { getParsedDataFromInitial, getSortedTickerTrafficsWithPeers } from './utils'\r\n\r\nfunction TrafficComponent() {\r\n const { clientWidth } = useWindowSize()\r\n const { data } = useCachedLoaderData()\r\n\r\n const parsedData = React.useMemo(() => {\r\n if (!data) return null\r\n\r\n return getParsedDataFromInitial(data)\r\n }, [data])\r\n\r\n const tickerTrafficsWithPeers = React.useMemo(() => {\r\n if (!parsedData) return []\r\n\r\n return getSortedTickerTrafficsWithPeers(parsedData)\r\n }, [parsedData])\r\n\r\n React.useEffect(() => {\r\n // Remove min-height from react root element which is set on BE because of CLS\r\n document.getElementById('root')?.style.removeProperty('min-height')\r\n }, [])\r\n\r\n if (!data || data.appsWithPeers.length === 0) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n
\r\n {tickerTrafficsWithPeers.map((trafficWithPeers, index) => (\r\n \r\n ))}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default function Traffic() {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { ObjectHash } from '../components/types'\r\n\r\ntype IntersectionObservedEntry = ObjectHash<(isIntersecting: boolean) => void>\r\n\r\n/*\r\n * Context.\r\n */\r\n\r\nexport interface IntersectionObserverContextProps {\r\n intersectionObservedElementsRef: React.MutableRefObject\r\n registerIntersectionObservedElement: (\r\n elementId: string,\r\n callback: (isObserving: boolean) => void\r\n ) => (() => void) | null\r\n}\r\n\r\nexport const IntersectionObserverContext = React.createContext({\r\n intersectionObservedElementsRef: { current: {} },\r\n registerIntersectionObservedElement: () => null,\r\n})\r\n\r\n/*\r\n * Hook.\r\n */\r\n\r\nexport function useIntersectionObserverContext(): IntersectionObserverContextProps {\r\n return React.useContext(IntersectionObserverContext)\r\n}\r\n\r\n/*\r\n * Component.\r\n */\r\n\r\ninterface IntersectionObserverContextProviderProps {\r\n children: React.ReactNode\r\n}\r\nexport const IntersectionObserverContextProvider = ({ children }: IntersectionObserverContextProviderProps) => {\r\n const intersectionObservedElementsRef = React.useRef({})\r\n const intersectionObserverRef = React.useRef(\r\n new IntersectionObserver((entries) => {\r\n entries.forEach((entry) => {\r\n const callback = intersectionObservedElementsRef.current[entry.target.id]\r\n callback?.(entry.isIntersecting)\r\n })\r\n })\r\n )\r\n\r\n React.useEffect(\r\n () => () => {\r\n intersectionObserverRef.current.disconnect()\r\n },\r\n []\r\n )\r\n\r\n const registerIntersectionObservedElement = React.useCallback(\r\n (elementId: string, callback: (isObserving: boolean) => void) => {\r\n const element = document.getElementById(elementId)\r\n if (!element) {\r\n return null\r\n }\r\n intersectionObserverRef.current.observe(element)\r\n intersectionObservedElementsRef.current[elementId] = callback\r\n\r\n return () => {\r\n intersectionObserverRef.current.unobserve(element)\r\n delete intersectionObservedElementsRef.current[elementId]\r\n }\r\n },\r\n []\r\n )\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","/**\n * @fileOverview Bar Chart\n */\nimport { generateCategoricalChart } from './generateCategoricalChart';\nimport { Bar } from '../cartesian/Bar';\nimport { XAxis } from '../cartesian/XAxis';\nimport { YAxis } from '../cartesian/YAxis';\nimport { formatAxisMap } from '../util/CartesianUtils';\nexport var BarChart = generateCategoricalChart({\n chartName: 'BarChart',\n GraphicalChild: Bar,\n defaultTooltipEventType: 'axis',\n validateTooltipEventTypes: ['axis', 'item'],\n axisComponents: [{\n axisType: 'xAxis',\n AxisComp: XAxis\n }, {\n axisType: 'yAxis',\n AxisComp: YAxis\n }],\n formatAxisMap: formatAxisMap\n});","'use strict';\nvar has = require('../internals/set-helpers').has;\n\n// Perform ? RequireInternalSlot(M, [[SetData]])\nmodule.exports = function (it) {\n has(it);\n return it;\n};\n","'use strict';\n// `GetIteratorDirect(obj)` abstract operation\n// https://tc39.es/proposal-iterator-helpers/#sec-getiteratordirect\nmodule.exports = function (obj) {\n return {\n iterator: obj,\n next: obj.next,\n done: false\n };\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar call = require('../internals/function-call');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\n\nvar INVALID_SIZE = 'Invalid size';\nvar $RangeError = RangeError;\nvar $TypeError = TypeError;\nvar max = Math.max;\n\nvar SetRecord = function (set, intSize) {\n this.set = set;\n this.size = max(intSize, 0);\n this.has = aCallable(set.has);\n this.keys = aCallable(set.keys);\n};\n\nSetRecord.prototype = {\n getIterator: function () {\n return getIteratorDirect(anObject(call(this.keys, this.set)));\n },\n includes: function (it) {\n return call(this.has, this.set, it);\n }\n};\n\n// `GetSetRecord` abstract operation\n// https://tc39.es/proposal-set-methods/#sec-getsetrecord\nmodule.exports = function (obj) {\n anObject(obj);\n var numSize = +obj.size;\n // NOTE: If size is undefined, then numSize will be NaN\n // eslint-disable-next-line no-self-compare -- NaN check\n if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);\n var intSize = toIntegerOrInfinity(numSize);\n if (intSize < 0) throw new $RangeError(INVALID_SIZE);\n return new SetRecord(obj, intSize);\n};\n","'use strict';\nvar call = require('../internals/function-call');\n\nmodule.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {\n var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;\n var next = record.next;\n var step, result;\n while (!(step = call(next, iterator)).done) {\n result = fn(step.value);\n if (result !== undefined) return result;\n }\n};\n","'use strict';\nvar SetHelpers = require('../internals/set-helpers');\nvar iterate = require('../internals/set-iterate');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\nmodule.exports = function (set) {\n var result = new Set();\n iterate(set, function (it) {\n add(result, it);\n });\n return result;\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function difference(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n var result = clone(O);\n if (size(O) <= otherRec.size) iterateSet(O, function (e) {\n if (otherRec.includes(e)) remove(result, e);\n });\n else iterateSimple(otherRec.getIterator(), function (e) {\n if (has(O, e)) remove(result, e);\n });\n return result;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// eslint-disable-next-line es/no-set -- safe\nvar SetPrototype = Set.prototype;\n\nmodule.exports = {\n // eslint-disable-next-line es/no-set -- safe\n Set: Set,\n add: uncurryThis(SetPrototype.add),\n has: uncurryThis(SetPrototype.has),\n remove: uncurryThis(SetPrototype['delete']),\n proto: SetPrototype\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function intersection(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n var result = new Set();\n\n if (size(O) > otherRec.size) {\n iterateSimple(otherRec.getIterator(), function (e) {\n if (has(O, e)) add(result, e);\n });\n } else {\n iterateSet(O, function (e) {\n if (otherRec.includes(e)) add(result, e);\n });\n }\n\n return result;\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom\nmodule.exports = function isDisjointFrom(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n if (size(O) <= otherRec.size) return iterateSet(O, function (e) {\n if (otherRec.includes(e)) return false;\n }, true) !== false;\n var iterator = otherRec.getIterator();\n return iterateSimple(iterator, function (e) {\n if (has(O, e)) return iteratorClose(iterator, 'normal', false);\n }) !== false;\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar size = require('../internals/set-size');\nvar iterate = require('../internals/set-iterate');\nvar getSetRecord = require('../internals/get-set-record');\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf\nmodule.exports = function isSubsetOf(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n if (size(O) > otherRec.size) return false;\n return iterate(O, function (e) {\n if (!otherRec.includes(e)) return false;\n }, true) !== false;\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf\nmodule.exports = function isSupersetOf(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n if (size(O) < otherRec.size) return false;\n var iterator = otherRec.getIterator();\n return iterateSimple(iterator, function (e) {\n if (!has(O, e)) return iteratorClose(iterator, 'normal', false);\n }) !== false;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar iterateSimple = require('../internals/iterate-simple');\nvar SetHelpers = require('../internals/set-helpers');\n\nvar Set = SetHelpers.Set;\nvar SetPrototype = SetHelpers.proto;\nvar forEach = uncurryThis(SetPrototype.forEach);\nvar keys = uncurryThis(SetPrototype.keys);\nvar next = keys(new Set()).next;\n\nmodule.exports = function (set, fn, interruptible) {\n return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn);\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nvar createSetLike = function (size) {\n return {\n size: size,\n has: function () {\n return false;\n },\n keys: function () {\n return {\n next: function () {\n return { done: true };\n }\n };\n }\n };\n};\n\nmodule.exports = function (name) {\n var Set = getBuiltIn('Set');\n try {\n new Set()[name](createSetLike(0));\n try {\n // late spec change, early WebKit ~ Safari 17.0 beta implementation does not pass it\n // https://github.com/tc39/proposal-set-methods/pull/88\n new Set()[name](createSetLike(-1));\n return false;\n } catch (error2) {\n return true;\n }\n } catch (error) {\n return false;\n }\n};\n","'use strict';\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar SetHelpers = require('../internals/set-helpers');\n\nmodule.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) {\n return set.size;\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function symmetricDifference(other) {\n var O = aSet(this);\n var keysIter = getSetRecord(other).getIterator();\n var result = clone(O);\n iterateSimple(keysIter, function (e) {\n if (has(O, e)) remove(result, e);\n else add(result, e);\n });\n return result;\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar add = require('../internals/set-helpers').add;\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function union(other) {\n var O = aSet(this);\n var keysIter = getSetRecord(other).getIterator();\n var result = clone(O);\n iterateSimple(keysIter, function (it) {\n add(result, it);\n });\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar difference = require('../internals/set-difference');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('difference') }, {\n difference: difference\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar intersection = require('../internals/set-intersection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () {\n // eslint-disable-next-line es/no-array-from, es/no-set -- testing\n return Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2]))) !== '3,2';\n});\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n intersection: intersection\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isDisjointFrom = require('../internals/set-is-disjoint-from');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isDisjointFrom` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isDisjointFrom') }, {\n isDisjointFrom: isDisjointFrom\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isSubsetOf = require('../internals/set-is-subset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isSubsetOf` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSubsetOf') }, {\n isSubsetOf: isSubsetOf\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isSupersetOf = require('../internals/set-is-superset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isSupersetOf` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSupersetOf') }, {\n isSupersetOf: isSupersetOf\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar symmetricDifference = require('../internals/set-symmetric-difference');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('symmetricDifference') }, {\n symmetricDifference: symmetricDifference\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar union = require('../internals/set-union');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('union') }, {\n union: union\n});\n"],"names":["ManualGridComponent","_ref","ref","numberOfLines","visibleLeftAxes","rightOffset","estimateAreaWidth","children","props","lines","Array","from","length","_jsxs","className","classNames","style","right","map","_","index","_jsx","width","ManualGrid","React","ExternalLink","label","href","isBold","Button","as","rightContent","Icon","name","size","padding","theme","classnames","target","rel","onMouseDown","event","stopPropagation","onClick","ChartTooltip","payload","payloadSort","isReversed","valueFormatter","items","LineChartTooltipSort","value","sort","a","b","_b$value","_a$value","Number","reverse","formatter","_valueFormatter","shortFormatNumber","TooltipInner","formatValue","area","TooltipRow","dataKey","indicator","color","labelClass","valueClass","CHART_HEIGHT","LABELS_WIDTH","BAR_CHART_LABELS_MARGIN","LINE_CHART_LABELS_MARGIN","BAR_WIDTH","BAR_GAP","EXTRA_WIDTH","BAR_CHART_MARGINS","top","bottom","left","LINE_CHART_MARGINS","FinvizSettings","hasDarkTheme","colors","tickFormatter","fractions","getChartDataItemKey","item","id","BarChart","chartData","visibleAreas","columnsCount","isFullWidth","chartWidth","ChartWrapper","ResponsiveContainer","ChartContext","height","RechartsBarChart","data","margin","barCategoryGap","stackOffset","YAxis","orientation","textAnchor","tickMargin","interval","Tooltip","cursor","CursorBar","numberOfDatapoints","content","itemKey","Bar","stackId","shape","undefined","fill","row","Cell","radius","topKey","bottomKey","includes","EmptyDataOverlayWrapper","emptyMessage","isEmpty","relative","Heading","level","LineChart","generateCategoricalChart","chartName","GraphicalChild","Line","axisComponents","axisType","AxisComp","XAxis","formatAxisMap","barWidth","tooltipSort","showTotal","RechartsLineChart","activeDot","LineDot","isActive","stroke","strokeWidth","isHighlighted","dot","yearKeys","chartView","View","paddingLeft","paddingRight","year","substring","month","parseInt","MONTHS","LineStackedBarChart","lineChartTooltipSort","hasXAxis","isShowAll","isInView","hasBeenInView","wrapperRef","setBarWidth","filter","isSelected","stackedBar","total","forEach","_item$values$find$val","_item$values$find","valueKey","values","find","v","getChartData","_wrapperRef$current$c","_wrapperRef$current","wrapperWidth","current","clientWidth","bars","useStickyShadow","stickyRef","isSticky","setIsSticky","onScroll","throttle","stickyElement","elementStickyTopOffset","parseFloat","getComputedStyle","elementCurrentTopOffset","getBoundingClientRect","document","addEventListener","removeEventListener","useWindowSize","throttleWaitInMs","isWatching","arguments","setSize","documentElement","innerWidth","window","innerHeight","handleResize","cancel","TEMP_HIDDEN_RATE_RELEVANCY","TrafficTableBottomContent","showMoreLabel","showLessLabel","isShowMore","hasHiddenRows","onShowMoreToggle","previousExpandWrapperTopRef","isShowMorePrevious","usePrevious","setTimeout","_wrapperRef$current$g","currentExpandWrapperTop","scrollTo","scrollY","type","_wrapperRef$current$g2","_wrapperRef$current2","leftContent","_Fragment","TrafficTableHead","columns","stickyLabelWidthClassName","onSortChange","TableHead","TableHeader","align","TableAlign","Left","column","_sort$column","TableHeaderSortable","direction","shouldRemoveOrder","SortDirection","Descending","handleChangeSort","TrafficDataViewEnum","AppRegion","AppPlatform","WidgetDomainSettingsSection","settings","setSettings","useFinancialsTableContext","toggleSetting","key","ChipSwitch","ChipSwitchButton","active","trafficDataView","visits","momChangePct","COOKIE_KEY","DEFAULT_SHOW_NUM_OF_APPS","DEFAULT_SETTINGS","appPlatforms","android","ios","appRegions","us","ww","SEGMENT_COLORS","Object","keys","ColorVariant","c","gray","default","AppPlatformLabels","AppRegionLabels","useMonthlyDataControls","clearInactiveIdsBlacklist","setIsShowMore","monthlyDataRowSelectionOverrides","setMonthlyDataRowSelectionOverrides","toggleMonthlyDataRowSelection","prevState","clearInactiveMonthlyData","reduce","acc","toggleIsShowMore","getColumnsAndValueGetter","isMomChangePct","yearMonth","slice","monthIndex","date","Date","format","Right","getColumnClassName","getHeatmapClassNames","momKeyValueMap","renderColumn","_data$yearMonth","hasValue","shouldShowDecimal","defaultValue","valueGetter","_data$column$id","EMPTY_ARRAY","useTableColumns","getAppStoreLink","app","appId","os","getDomainHref","domain","sortByMauLastValueDesc","apps","_a$mau$v","_a$mau","_b$mau$v","_b$mau","aLastValue","mau","bLastValue","mapData","mainTraffic","peerTraffics","industryTraffics","isPlaceholder","traffic","_mainTraffic$peers","_traffic$traffic$d$fi","_traffic$traffic","_traffic$traffic$v$in","_traffic$traffic2","d","findIndex","toString","valuesWithMomData","keyValueMap","momData","getMoMPercentageData","_ref2","_momData$year","momValue","push","labelElement","labelColumnClassName","isLabelColumnSticky","peers","Domain","_ref3","industryTrafficsRaw","_ref4","_ref5","flatMap","_ref6","arr","indexOf","stringYearKeys","y","monthlyData","setMonthlyData","sortedData","changeSort","useTableSort","defaultSort","newMonthlyData","_monthlyDataRowSelect","FinancialsWidget","header","tableHead","hasStickyColumnWrapper","isTableFixed","onVisibilityChange","ticker","sector","industryGroup","industry","heatmapSector","heatmapSubSector","NoDataPlaceholder","companyName","Paragraph","WidgetAppSettingsSection","has","platform","selectedAppsArray","selectionOverrides","_app$appName","_selectionOverrides$a","appName","platformLabel","geoLabel","geo","_app$mau$d$findIndex","_app$mau","_app$mau$v$index","_app$mau2","join","Tag","Apps","domainApps","peerApps","industryApps","_domainApps$0$domain","_domainApps$flatMap","_peerApps$flatMap","_industryApps$flatMap","domainAppsYears","peerAppsYears","industryAppsYears","Set","Boolean","flat","getSelectedAppsArray","_ref7","_ref8","TICKER_HEADER_CONTAINER_CLASS_NAME","TrafficDomainSelect","domainItems","isInteractive","handleDomainSelect","_document$getElements","_element$getBoundingC","tickerHeaderContainer","getElementsByClassName","fvHeaderHeightInPx","body","getPropertyValue","element","getElementById","elementTopPosition","clientHeight","behavior","Select","contentClass","focusRing","onChange","TrafficHeader","domainElement","subSector","monthlyVisits","headerColumns","lastMonthVisits","prevMonthVisits","visitsChangePercentage","Math","abs","showPlusSign","TrafficDomainSection","_mainTraffic$traffic$","_mainTraffic$traffic","parsedTrafficData","registerIntersectionObservedElement","useIntersectionObserverContext","appsWithPeers","setIsInView","setHasBeenInView","trafficsWithPeers","some","unregister","TrafficComponent","useCachedLoaderData","parsedData","_trafficsWithPeers$fi","_trafficsWithPeers$fi2","mainDomain","trafficTickers","trafficJson","JSON","parse","_item$geo","_item$geo2","_item$os","_item$os2","_item$appName","mauJson","toLowerCase","getParsedDataFromInitial","tickerTrafficsWithPeers","trafficWithPeers","_trafficWithPeers$tic","_a$traffic$v","_a$traffic","_b$traffic$v","_b$traffic","getSortedTickerTrafficsWithPeers","_parsedData$companyNa","_document$getElementB","removeProperty","IntersectionObserverContextProvider","maxWidth","max","Traffic","FinancialsTableContextProvider","defaultSettings","cookieKey","IntersectionObserverContext","intersectionObservedElementsRef","intersectionObserverRef","IntersectionObserver","entries","entry","callback","isIntersecting","disconnect","elementId","observe","unobserve","Provider","defaultTooltipEventType","validateTooltipEventTypes","module","exports","it","obj","iterator","next","done","aCallable","anObject","call","toIntegerOrInfinity","getIteratorDirect","INVALID_SIZE","$RangeError","RangeError","$TypeError","TypeError","SetRecord","set","intSize","this","prototype","getIterator","numSize","record","fn","ITERATOR_INSTEAD_OF_RECORD","step","result","SetHelpers","iterate","add","aSet","clone","getSetRecord","iterateSet","iterateSimple","remove","other","O","otherRec","e","uncurryThis","SetPrototype","proto","iteratorClose","interruptible","getBuiltIn","createSetLike","error2","error","uncurryThisAccessor","keysIter","$","difference","real","forced","setMethodAcceptSetLike","fails","intersection","isDisjointFrom","isSubsetOf","isSupersetOf","symmetricDifference","union"],"sourceRoot":""}