td-plots 1.7.2 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/BoxPlot.d.ts +32 -0
- package/dist/components/LegendUtils.d.ts +10 -0
- package/dist/components/LinePlot.d.ts +24 -0
- package/dist/components/PairedComparisonsBoxPlot.d.ts +22 -0
- package/dist/components/StatsDonut.d.ts +2 -1
- package/dist/components/SummaryComparisonPlot.d.ts +30 -0
- package/dist/components/Utils.d.ts +3 -0
- package/dist/index.d.ts +12 -3
- package/dist/index.esm.js +762 -10
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +766 -9
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatDecimal.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/exponent.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatGroup.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatNumerals.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatSpecifier.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTrim.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatRounded.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTypes.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/locale.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js","../src/components/Utils.ts","../src/components/Loading.tsx","../node_modules/.pnpm/@mui+icons-material@7.3.5_@mui+material@7.3.3_@emotion+react@11.14.0_@types+react@18.3.25_rea_ovnfkymtpqafu6lytbvs5lunri/node_modules/@mui/icons-material/esm/Add.js","../node_modules/.pnpm/@mui+icons-material@7.3.5_@mui+material@7.3.3_@emotion+react@11.14.0_@types+react@18.3.25_rea_ovnfkymtpqafu6lytbvs5lunri/node_modules/@mui/icons-material/esm/Remove.js","../src/components/PlusMinusControl.tsx","../node_modules/.pnpm/@mui+icons-material@7.3.5_@mui+material@7.3.3_@emotion+react@11.14.0_@types+react@18.3.25_rea_ovnfkymtpqafu6lytbvs5lunri/node_modules/@mui/icons-material/esm/Settings.js","../src/components/Histogram.tsx","../src/components/RadialHistogram.tsx","../src/components/StatsDonut.tsx","../src/components/TestPlot.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","// Utility functions for our components\nexport const ONEAVGMONTH = 2629800000; // Average month length in ms, copied from plotly constants in plotly.js/src/constants/numerical.js\nexport const ONEDAY = 86400000; // One day in milliseconds\nexport const ONEHOUR = 3600000; // One hour in milliseconds\nexport const ONEMINUTE = 60000; // One minute in milliseconds\n\n// Type guard to check if array contains only numbers\nexport const isNumberArray = (arr: unknown[]): arr is number[] => {\n return arr.every((item) => typeof item === \"number\" && !isNaN(item));\n};\n\n// Type guard to check if array contains only dates\nexport const isDateArray = (arr: unknown[]): arr is Date[] => {\n return arr.every((item) => item instanceof Date);\n};\n\n// Calculate the mean of an array of numbers or dates\nexport function calculateMean(arr: number[] | Date[]): number | undefined {\n if (arr.length === 0) return undefined;\n\n if (isNumberArray(arr)) {\n return arr.reduce((acc, num) => acc + num, 0) / arr.length;\n } else if (isDateArray(arr)) {\n const sum = arr.reduce((acc, date) => acc + date.getTime(), 0);\n return sum / arr.length;\n }\n}\n\n// Calculate standard deviation of an array of numbers or dates\nexport function calculateStandardDeviation(\n arr: number[] | Date[]\n): number | undefined {\n if (arr.length === 0) return undefined;\n\n const mean = calculateMean(arr);\n if (mean === undefined) return undefined;\n\n let sumOfSquares: number = 0;\n if (isNumberArray(arr)) {\n sumOfSquares = arr.reduce((acc, num) => acc + Math.pow(num - mean, 2), 0);\n } else if (isDateArray(arr)) {\n sumOfSquares = arr.reduce(\n (acc, date) => acc + Math.pow(date.getTime() - mean, 2),\n 0\n );\n } else {\n return undefined;\n }\n const variance = sumOfSquares / arr.length;\n return Math.sqrt(variance);\n}\n\n// Utility function to format date as mm/dd/yy\nexport const formatDateMDY = (timestamp: number): string => {\n const date = new Date(timestamp);\n const month = (date.getMonth() + 1).toString().padStart(2, \"0\");\n const day = date.getDate().toString().padStart(2, \"0\");\n const year = date.getFullYear().toString().slice(-2);\n return `${month}/${day}/${year}`;\n};\n\n// Utilities for rounding dates to the nearest day.\n// Helpful for making nice bins\nexport const roundToNextDay = (timestamp: number) => {\n const date = new Date(timestamp);\n date.setHours(23, 59, 59, 999); // End of day\n return date.toISOString();\n};\nexport const roundToPrevDay = (timestamp: number) => {\n const date = new Date(timestamp);\n date.setHours(0, 0, 0, 0); // Start of day\n return date.toISOString();\n};\n\n// Convert plotly M# string to number of milliseconds\n// According to the docs, plotly will use M# whenever the bin size is\n// larger than one average month. Even if the bin size is 2 years, plotly\n// will still use M24 instead of Y2 (plotly.js/src/plots/cartesian/axes.js).\nexport const plotlyMToMilliseconds = (mString: string): number => {\n const match = mString.match(/^M(\\d+)$/);\n if (match) {\n const months = parseInt(match[1], 10);\n return months * ONEAVGMONTH;\n } else {\n console.error(`plotlyMToMilliseconds: Invalid M# string: ${mString}`);\n }\n return 0;\n};\n\n// Convert a string specifying a day (with no time) to a timestamp\nexport const convertDateDescriptionToTimestamp = (\n startValue: string | number\n): number => {\n if (typeof startValue === \"number\") {\n // Then we're assuming it's already a timestamp\n return startValue;\n }\n\n if (typeof startValue === \"string\") {\n // Try to parse the date string.\n const date = new Date(startValue);\n\n // Sometimes the date will fail to be a proper Date if it does not\n // have a time component. Add a time stamp if necessary.\n if (isNaN(date.getTime())) {\n // Then date did not have a time and is just a day. Try adding a time.\n const dateWithTime = new Date(startValue + \"T00:00:00\");\n if (isNaN(dateWithTime.getTime())) {\n throw new Error(`Cannot parse date: ${startValue}`);\n }\n return dateWithTime.getTime();\n }\n return date.getTime();\n }\n\n throw new Error(`Unexpected type for start value: ${typeof startValue}`);\n};\n","import CircularProgress from '@mui/material/CircularProgress';\nimport './plotStyles.scss';\n\n// Loading component renders a circular spinner above an element (usually a plot)\nconst Loading = () => {\n return (\n <div className=\"loading-overlay\">\n <CircularProgress />\n </div>\n )\n}\n\nexport default Loading;","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z\"\n}), 'Add');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M19 13H5v-2h14z\"\n}), 'Remove');","import React, { useEffect } from \"react\";\nimport ButtonGroup from \"@mui/material/ButtonGroup\";\nimport Button from \"@mui/material/Button\";\nimport Tooltip from \"@mui/material/Tooltip\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport RemoveIcon from \"@mui/icons-material/Remove\";\n\nexport type PlusMinusControlProps = {\n value: number;\n onChange: (newValue: number) => void;\n steps: number[]; // Assumes the steps are sorted in ascending order\n ariaLabel?: string;\n disabled?: boolean;\n showValue?: boolean;\n title?: string;\n themeRole?: \"primary\" | \"secondary\";\n colorOverride?: string;\n valueLabelFormat?: (value: number) => string;\n titleStylingOverrides?: React.CSSProperties;\n disabledTooltipText?: string; // Tooltip text to show when disabled\n};\n\nconst PlusMinusControl: React.FC<PlusMinusControlProps> = ({\n value,\n onChange,\n steps = [1],\n ariaLabel = \"Plus Minus Control\",\n disabled = false,\n showValue = true,\n title = \"\",\n themeRole = \"primary\",\n colorOverride = undefined,\n valueLabelFormat,\n titleStylingOverrides = {},\n disabledTooltipText = \"Insufficient data\",\n}) => {\n const color = colorOverride || \"#111fbcff\";\n const [disablePlus, setDisablePlus] = React.useState<boolean>(false);\n const [disableMinus, setDisableMinus] = React.useState<boolean>(false);\n\n useEffect(() => {\n const stepIndex = steps.indexOf(value);\n if (stepIndex === -1) {\n setDisablePlus(true);\n setDisableMinus(true);\n } else {\n setDisablePlus(stepIndex === steps.length - 1);\n setDisableMinus(stepIndex === 0);\n }\n }, [value, steps]);\n\n const handleIncrement = () => {\n const stepIndex = steps.indexOf(value);\n const newValue =\n stepIndex === -1\n ? steps[0]\n : steps[Math.min(stepIndex + 1, steps.length - 1)];\n onChange(newValue);\n };\n\n const handleDecrement = () => {\n const stepIndex = steps.indexOf(value);\n const newValue =\n stepIndex === -1 ? steps[0] : steps[Math.max(stepIndex - 1, 0)];\n onChange(newValue);\n };\n\n const buttonGroupContent = (\n <ButtonGroup\n size={\"small\"}\n aria-label={ariaLabel}\n variant=\"text\"\n disabled={disabled}\n orientation=\"horizontal\"\n color={themeRole}\n sx={{\n backgroundColor: \"background.paper\",\n \"& .MuiButton-root:not(.Mui-disabled)\": {\n color: color,\n },\n \"& .MuiButton-root:not(.Mui-disabled) .MuiSvgIcon-root\": {\n color: color,\n },\n }}\n >\n <Button\n disabled\n aria-label={`${title}`}\n sx={{\n paddingRight: \"10px\",\n \"&.Mui-disabled\": disabled\n ? {}\n : {\n color: `${color} !important`,\n },\n \"& .MuiSvgIcon-root\": {\n color: color,\n backgroundColor: color,\n },\n ...titleStylingOverrides,\n }}\n >\n {title}\n </Button>\n {showValue && (\n <Button\n aria-label=\"current value\"\n sx={{\n pointerEvents: \"none\",\n fontWeight: \"600\",\n minHeight: \"32px\",\n maxHeight: \"32px\",\n height: \"32px\",\n }}\n >\n {valueLabelFormat ? valueLabelFormat(value) : value}\n </Button>\n )}\n <Button\n onClick={handleIncrement}\n aria-label=\"increment\"\n disabled={disablePlus}\n >\n <AddIcon />\n </Button>\n <Button\n onClick={handleDecrement}\n aria-label=\"decrement\"\n disabled={disableMinus}\n >\n <RemoveIcon />\n </Button>\n </ButtonGroup>\n );\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n }}\n >\n {disabled ? (\n <Tooltip title={disabledTooltipText} arrow>\n <span>{buttonGroupContent}</span>\n </Tooltip>\n ) : (\n buttonGroupContent\n )}\n </div>\n );\n};\n\nexport default PlusMinusControl;\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6\"\n}), 'Settings');","import React, {\n lazy,\n Suspense,\n useRef,\n useState,\n useMemo,\n useEffect,\n} from \"react\";\nimport { PlotParams } from \"react-plotly.js\";\nimport { format } from \"d3-format\";\nimport \"./plotStyles.scss\";\nimport {\n calculateMean,\n calculateStandardDeviation,\n isDateArray,\n isNumberArray,\n ONEAVGMONTH,\n ONEDAY,\n ONEHOUR,\n ONEMINUTE,\n plotlyMToMilliseconds,\n roundToNextDay,\n roundToPrevDay,\n} from \"./Utils\";\nimport Loading from \"./Loading\"; // Import custom loading component\nimport PlusMinusControl from \"./PlusMinusControl\";\nimport IconButton from \"@mui/material/IconButton\";\nimport SettingsIcon from \"@mui/icons-material/Settings\";\n\nconst Plot = lazy(() => import(\"react-plotly.js\"));\n\ntype MinMax = [number, number] | [Date, Date];\n\nexport type ShowBinSizeControls = \"always\" | \"onHover\" | \"never\";\n\nexport type HistogramStatsAnnotation = \"mean\" | \"stdev\";\n\nexport type HistogramPlotProps = {\n data: number[] | Date[]; // Main histogram data. Will be shown in the primary color barColor.\n unselectedData?: number[] | Date[]; // Any unselected data to plot. Will be drawn in unselectedBarColor\n title?: string;\n xAxisTitle?: string;\n barColor?: string; // Optional prop to set the color of the bars\n unselectedBarColor?: string; // Optional prop to set the color of unselected bars\n selectorsColor?: string; // Optional prop to set the color of elements within the selection box\n handleClickOrSelection?: (\n minValue: number | Date,\n maxValue: number | Date,\n shiftKeyPressed?: boolean\n ) => void; // Callback to run on both click and selection events. For example, update plot display based on a new selected/clicked range.\n containerStyleOverrides?: React.CSSProperties; // Optional style override for the container\n onDeselect?: () => void; // Handler for deselection events. Deselection occurs with a double click. Example use is for resetting unselected data.\n plotId?: string; // Optional unique identifier to prevent conflicts between multiple plots\n selectByBin?: boolean; // If true, dragging over at least half of a bar will select the entire bar. If false, the explicit values of the selected range are used.\n dateTickFormat?: string; // Optional format string for date ticks on the x-axis. For example, '%m/%d/%y' for 'MM/DD/YY'.\n binSizeOverride?: number | string; // Optional bin size. ONLY use for small datasets or where explicitly calculated for this dataset. In milliseconds for dates.\n statsAnnotations?: HistogramStatsAnnotation[]; // Optional list of statistics to annotate on the plot (e.g., 'mean', 'stdev').\n emptySelectedRange?: boolean; // If true, sets the selected range to be empty. Useful when the parent component wants to clear the selection.\n d3FormatValueString?: string; // Optional formatter for numeric values. Will modify tooltips, axes, and annotations.\n showBinSizeControls?: ShowBinSizeControls; // Shows or hides controls for the plot. Currently the controls only can adjust the bin sizes.\n onBinSizeCalculated?: (binSize: number | string) => void; // Callback fired when Plotly calculates the initial bin size. Useful for accessing the default bin size.\n onBinSizeChange?: (currentBinSize: number) => void; // Callback fired when the slider value changes.\n showBinSizeControlValue?: boolean; // Whether to show the current bin size value next to the control slider.\n isMobile?: boolean; // Whether the plot is being viewed on a mobile device.\n settingsTitleStylingOverrides?: React.CSSProperties; // Optional style overrides for the plot settings titles. Applies to all titles.\n};\n\nexport const HistogramPlot = (props: HistogramPlotProps) => {\n const {\n data,\n title,\n xAxisTitle,\n barColor = \"rgb(72, 72, 74)\",\n unselectedBarColor = \"rgba(203, 195, 195, 0.88)\",\n selectorsColor = \"black\",\n containerStyleOverrides,\n unselectedData = [],\n handleClickOrSelection = () => {},\n onDeselect = () => {},\n plotId,\n selectByBin = false,\n dateTickFormat,\n binSizeOverride,\n statsAnnotations = [\"mean\"],\n emptySelectedRange = false,\n d3FormatValueString = \".1f\",\n showBinSizeControls = \"always\",\n onBinSizeCalculated,\n onBinSizeChange,\n showBinSizeControlValue = true,\n isMobile = false,\n settingsTitleStylingOverrides = {},\n } = props;\n\n // Ref for plot container\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Track any selections made in this plot so we can style the selection box.\n const [selectedRange, setSelectedRange] = useState<MinMax[] | null>(null);\n\n // If the parent component wants to clear the selection, reset selectedRange to null.\n useEffect(() => {\n if (emptySelectedRange) {\n setSelectedRange(null);\n }\n }, [emptySelectedRange]);\n\n // Combine all data into one for later calculations\n const allData = [...data, ...unselectedData];\n\n // If all the data becomes selected, we should forget any old selections.\n useEffect(() => {\n if (unselectedData.length === 0) {\n setSelectedRange(null); // Clear selection box if all data is selected\n }\n }, [unselectedData]);\n\n // Set the bins based on the entire data set.\n const nBins =\n data.length + unselectedData.length >= 10\n ? Math.ceil(Math.sqrt(data.length + unselectedData.length))\n : 0;\n\n // Plotly determines \"nice\" bins which consequently means it internally decides the axis range. We need\n // to access that information once the plot has been initialized so that we can prevent the\n // axis range from changing during interaction. Dates use strings.\n const [fixedXAxisRange, setFixedXAxisRange] = useState<\n [number, number] | [string, string] | undefined\n >(undefined);\n\n // Set the default bin size (calculated by plotly), and the current bin size (may be adjusted by the user).\n const [defaultBinSize, setDefaultBinSize] = useState<\n number | string | undefined\n >(undefined);\n const [binSize, setBinSize] = useState<number | string | undefined>(\n undefined\n );\n const [isControlsExpanded, setIsControlsExpanded] = useState(false);\n // Set the top/left position on the axes relative to the plot container.\n const [plotAreaPosition, setPlotAreaPosition] = useState<{\n top: number;\n left: number;\n } | null>(null);\n\n // If binSizeOverride is provided, use it to set the bin size and range explicitly.\n // Plotly does a better job of setting bins and ending them at nice numbers, so only use\n // this prop when necessary. If the user has adjusted binSize via the slider, use that instead.\n const activeBinSize =\n binSizeOverride ||\n (showBinSizeControls !== \"never\" ? binSize : defaultBinSize);\n\n // Once the plot is drawn, record the initial axis range so we can keep it fixed.\n // Also record the initial bin size.\n // figure should be Readonly<Plotly.Figure> but react-plotly.js doesn't expose that type, so we use any.\n const handlePlotUpdate = (figure: any, graphDiv: Readonly<HTMLElement>) => {\n const currentLayout = (graphDiv as any)._fullLayout;\n\n // Get axis position for positioning plot controls\n if (currentLayout?.yaxis && currentLayout?.xaxis) {\n const yaxis = currentLayout.yaxis;\n const xaxis = currentLayout.xaxis;\n // _offset gives the top/left position of the plot area in pixels from container top\n const top = yaxis._offset || 0;\n const left = xaxis._offset || 0;\n\n if (\n !plotAreaPosition ||\n top !== plotAreaPosition.top ||\n left !== plotAreaPosition.left\n ) {\n setPlotAreaPosition({ top, left });\n }\n }\n\n if (!fixedXAxisRange) {\n if (currentLayout?.xaxis?.range) {\n const range = currentLayout.xaxis.range;\n\n // Skip temporary [-1, 1] range\n if (range[0] === -1 && range[1] === 1) {\n return;\n }\n\n setFixedXAxisRange(range);\n }\n }\n\n if (!binSize) {\n // Get the bin size from the first trace. Both traces should have the same bin size.\n if (\n figure &&\n figure.data &&\n figure.data.length > 0 &&\n figure.data[0].xbins &&\n figure.data[0].xbins.size\n ) {\n const calculatedBinSize = figure.data[0].xbins.size;\n setDefaultBinSize(calculatedBinSize);\n setBinSize(calculatedBinSize);\n onBinSizeCalculated?.(calculatedBinSize);\n }\n }\n };\n\n // Track shift key state\n const isShiftPressed = useRef(false);\n\n // Add keyboard event listeners to track shift key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Shift\") {\n isShiftPressed.current = true;\n }\n };\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e.key === \"Shift\") {\n isShiftPressed.current = false;\n }\n };\n\n // Add event listeners to document to catch shift key globally\n document.addEventListener(\"keydown\", handleKeyDown);\n document.addEventListener(\"keyup\", handleKeyUp);\n\n // Cleanup\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.removeEventListener(\"keyup\", handleKeyUp);\n };\n }, []);\n\n // Create handler for click event that can use event data to update the plot if desired.\n const handleClick = (event: Plotly.PlotMouseEvent) => {\n if (!event || !event.points || event.points.length === 0) {\n return;\n }\n\n // Use the bin number to determine which bar was clicked and determine the range of the clicked bar.\n if (\n \"binNumber\" in event.points[0] &&\n typeof event.points[0].binNumber === \"number\"\n ) {\n // Get the index of the clicked bar with respect to the trace. So if\n // my trace has only one bar (0, 1] but another trace has bars (-1, 0], (0, 1], (1, 2], etc.\n // then when I click on (0, 1] in my trace the index will be 0, even thought it would be\n // the second bar in the other trace. Because of this, we can't use data.xbins to\n // find the clicked bar, because its start and end values are based on all traces, not just the clicked trace.\n const clickedBinIndex: number = event.points[0].binNumber;\n\n // Handle dates and numbers separately\n // The minimum value of the the selected trace. May be different from the global minimum.\n let minTraceValue: number;\n // This is the start of the first bin out of all the traces. The global first bin.\n let globalFirstBinStart: number;\n if (isDateArray(data)) {\n // Date bins are represented as strings (sometimes). We'll need to convert whatever plotly gives us to timestamps.\n globalFirstBinStart = fixedXAxisRange\n ? new Date(fixedXAxisRange[0]).getTime()\n : new Date(event.points[0].data.xbins.start).getTime();\n minTraceValue =\n event.points[0].curveNumber === 0\n ? Math.min(...(data as Date[]).map((d) => d.getTime()))\n : Math.min(...(unselectedData as Date[]).map((d) => d.getTime()));\n } else {\n // Get the min value of the trace and the beginning of the first bin (globally)\n minTraceValue =\n event.points[0].curveNumber === 0\n ? Math.min(...(data as number[]))\n : Math.min(...(unselectedData as number[]));\n globalFirstBinStart = fixedXAxisRange\n ? (fixedXAxisRange[0] as number)\n : (event.points[0].data.xbins.start as number);\n }\n\n // Finally, we need to calculate the min and max values of the clicked bin.\n // If the bin size is a month or more, plotly records it in their \"mstring\" format like \"M3\" for 3 months.\n // We then must convert it back to milliseconds. Otherwise, it's always ms.\n const size = activeBinSize ?? event.points?.[0]?.data?.xbins?.size;\n const convertedBinSize =\n typeof size === \"string\"\n ? plotlyMToMilliseconds(size as string)\n : (size as number);\n\n // This minTraceValue is in the 0th bin of this trace. Find the index of this bin in the whole plot.\n const clickedBinGlobalIndex =\n clickedBinIndex +\n Math.floor((minTraceValue - globalFirstBinStart) / convertedBinSize);\n const [minBinValue, maxBinValue] = [\n globalFirstBinStart + clickedBinGlobalIndex * convertedBinSize,\n globalFirstBinStart + (clickedBinGlobalIndex + 1) * convertedBinSize,\n ];\n\n if (isDateArray(data)) {\n const minDate = new Date(minBinValue);\n const maxDate = new Date(maxBinValue);\n handleClickOrSelection(minDate, maxDate, isShiftPressed.current);\n const newMinMax = [minDate, maxDate] as [Date, Date];\n if (isShiftPressed.current && selectedRange) {\n setSelectedRange([...selectedRange, newMinMax]);\n } else {\n setSelectedRange([newMinMax]);\n }\n } else {\n handleClickOrSelection(\n minBinValue,\n maxBinValue,\n isShiftPressed.current\n );\n const newMinMax = [minBinValue, maxBinValue] as [number, number];\n if (isShiftPressed.current && selectedRange) {\n setSelectedRange([...selectedRange, newMinMax]);\n } else {\n setSelectedRange([newMinMax]);\n }\n }\n }\n };\n\n // Handle the selection event (click and drag across the plot)\n const handleSelection = (event: Plotly.PlotSelectionEvent) => {\n if (!event || !event.range || !event.range.x) {\n return;\n }\n\n let minValue: number | Date;\n let maxValue: number | Date;\n if (\n typeof event.range.x[0] === \"string\" &&\n typeof event.range.x[1] === \"string\"\n ) {\n // Then we are must be dealing with dates\n\n if (selectByBin) {\n // Set selected range to include the whole bin if at least half the bin is within the explicit range\n // Plotly already tells us which bins were selected based on this logic. These are the points in the event.\n if (event.points && event.points.length > 0) {\n // Means at least one bin has been selected\n const firstBinMidPoint = new Date(\n event.points[0].x as string\n ).getTime();\n const lastBinMidPoint = new Date(\n event.points[event.points.length - 1].x as string\n ).getTime();\n // If the bin size is a month or more, plotly records it in their \"mstring\" format like \"M3\" for 3 months.\n // We then must convert it back to milliseconds. Otherwise, it's always ms.\n const convertedBinSize =\n typeof activeBinSize === \"string\"\n ? plotlyMToMilliseconds(activeBinSize as string)\n : (activeBinSize as number);\n minValue = new Date(firstBinMidPoint - convertedBinSize / 2);\n maxValue = new Date(lastBinMidPoint + convertedBinSize / 2);\n } else {\n // No bins selected, so the range should be empty.\n minValue = new Date(event.range.x[0]);\n maxValue = minValue;\n }\n } else {\n // Set the range based on the explicit selection boundaries\n minValue = new Date(event.range.x[0]);\n maxValue = new Date(event.range.x[1]);\n }\n } else {\n // Handle selection for numbers\n if (selectByBin) {\n // Set the range based on the bins selected. Plotly will include a bin in event.points if\n // at least half of it is selected.\n if (event.points && event.points.length > 0) {\n // Find the max and min midpoints. They may be from curve 0 or 1.\n const firstBinMidPoint = Math.min(\n ...event.points.map((p) => p.x as number)\n );\n const lastBinMidPoint = Math.max(\n ...event.points.map((p) => p.x as number)\n );\n const convertedBinSize = activeBinSize as number;\n const roundedMinValue = firstBinMidPoint - convertedBinSize / 2;\n const roundedMaxValue = lastBinMidPoint + convertedBinSize / 2;\n minValue = roundedMinValue;\n maxValue = roundedMaxValue;\n } else {\n // No bins selected, so set the range to be empty.\n minValue = event.range.x[0];\n maxValue = minValue;\n }\n } else {\n // Set the range based on the explicit selection boundaries\n minValue = event.range.x[0];\n maxValue = event.range.x[1];\n }\n }\n\n if (minValue !== undefined && maxValue !== undefined) {\n // Update selected range. Have to be strict about types.\n if (typeof minValue === \"number\" && typeof maxValue === \"number\") {\n const newMinMax = [minValue, maxValue] as [number, number];\n if (isShiftPressed.current && selectedRange) {\n setSelectedRange([...selectedRange, newMinMax]);\n } else {\n setSelectedRange([newMinMax]);\n }\n } else if (minValue instanceof Date && maxValue instanceof Date) {\n const newMinMax = [minValue, maxValue] as [Date, Date];\n if (isShiftPressed.current && selectedRange) {\n setSelectedRange([...selectedRange, newMinMax]);\n } else {\n setSelectedRange([newMinMax]);\n }\n }\n handleClickOrSelection(minValue, maxValue, isShiftPressed.current);\n }\n };\n\n // Create the selected range box\n const selectedRangeBox: Partial<Plotly.Shape>[] = useMemo(() => {\n if (!selectedRange) return [];\n if (unselectedData.length === 0) return []; // Don't show the box if the entire dataset is selected.\n\n // Create a multiply-like effect by using a semi-transparent dark overlay\n const multiplyColor = \"rgba(29, 104, 185, 0.1)\";\n\n return selectedRange.map((maxMin) => ({\n type: \"rect\",\n x0: isDateArray(maxMin) ? maxMin[0].getTime() : maxMin[0],\n x1: isDateArray(maxMin) ? maxMin[1].getTime() : maxMin[1],\n y0: 0,\n y1: 1,\n yref: \"paper\",\n fillcolor: multiplyColor,\n line: {\n width: 1,\n color: multiplyColor,\n },\n layer: \"above\", // Ensure the selection box is above the bars\n }));\n }, [selectedRange, unselectedData]);\n\n // Calculate the mean of the selected data using normalized data\n const meanValue = calculateMean(data) ?? 0; // Default to 0 if no data\n const stdevValue = calculateStandardDeviation(data) ?? 0;\n\n const meanLineRadius = 0.01; // distance from the top of the y axis to the top/bottom end of the mean line\n\n const meanLine: Partial<Plotly.Shape>[] =\n statsAnnotations.includes(\"mean\") && data.length > 0\n ? [\n {\n type: \"line\",\n x0: meanValue,\n y0: 1 - meanLineRadius,\n x1: meanValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: barColor,\n width: 1.5,\n },\n },\n ]\n : [];\n\n // Draw mean line for all data\n const allDataMeanValue = calculateMean(allData as number[] | Date[]) ?? 0;\n const allDataMeanLine: Partial<Plotly.Shape>[] =\n statsAnnotations.includes(\"mean\") &&\n unselectedData.length > 0 &&\n data.length > 0\n ? [\n {\n type: \"line\",\n x0: allDataMeanValue,\n y0: 1 - meanLineRadius,\n x1: allDataMeanValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: unselectedBarColor,\n width: 1.5,\n },\n },\n ]\n : [];\n\n const stdevLines: Partial<Plotly.Shape>[] =\n statsAnnotations.includes(\"stdev\") && data.length > 0\n ? [\n {\n type: \"line\",\n x0: meanValue - stdevValue,\n y0: 1 - meanLineRadius,\n x1: meanValue - stdevValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: barColor,\n width: 1.5,\n dash: \"dot\",\n },\n },\n {\n type: \"line\",\n x0: meanValue + stdevValue,\n y0: 1 - meanLineRadius,\n x1: meanValue + stdevValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: barColor,\n width: 1.5,\n dash: \"dot\",\n },\n },\n ]\n : [];\n\n const allDataStdevValue =\n calculateStandardDeviation(allData as number[] | Date[]) ?? 0;\n const allDataStdevLines: Partial<Plotly.Shape>[] =\n statsAnnotations.includes(\"stdev\") &&\n unselectedData.length > 0 &&\n data.length > 0\n ? [\n {\n type: \"line\",\n x0: allDataMeanValue - allDataStdevValue,\n y0: 1 - meanLineRadius,\n x1: allDataMeanValue - allDataStdevValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: unselectedBarColor,\n width: 1.5,\n dash: \"dot\",\n },\n },\n {\n type: \"line\",\n x0: allDataMeanValue + allDataStdevValue,\n y0: 1 - meanLineRadius,\n x1: allDataMeanValue + allDataStdevValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: unselectedBarColor,\n width: 1.5,\n dash: \"dot\",\n },\n },\n ]\n : [];\n\n const xBins =\n activeBinSize && allData.length > 0\n ? isDateArray(allData)\n ? {\n start:\n fixedXAxisRange && fixedXAxisRange[0]\n ? fixedXAxisRange[0] // May be a string like 2025-09-03, and that's okay for dates.\n : roundToPrevDay(Math.min(...allData.map((d) => d.getTime()))), // Find a nice round number as a starting point.\n end: roundToNextDay(Math.max(...allData.map((d) => d.getTime()))),\n size: activeBinSize, // bin size in milliseconds or plotly's M string for months.\n }\n : isNumberArray(allData)\n ? {\n start:\n fixedXAxisRange && typeof fixedXAxisRange[0] === \"number\"\n ? fixedXAxisRange[0]\n : Math.floor(Math.min(...allData)),\n end: Math.ceil(Math.max(...allData)),\n size: activeBinSize,\n }\n : undefined\n : undefined;\n\n const unselectedTrace: PlotParams[\"data\"][number] = {\n x: unselectedData,\n type: \"histogram\",\n autobinx: false,\n xbins: xBins,\n // nbinsx is valid but not included in the type definition\n //@ts-ignore\n nbinsx: nBins, // Maximum number of bins. Plotly may adjust to make bins \"nicer\".\n marker: {\n color: unselectedBarColor,\n line: {\n color: \"white\",\n width: 0.5,\n },\n },\n hovertemplate: \"[%{x})<br>Count: %{y}<extra></extra>\",\n };\n\n const meanAnnotation: Partial<Plotly.Annotations>[] =\n statsAnnotations.includes(\"mean\") && meanLine && data.length > 0\n ? [\n {\n x: meanValue,\n y: 1 + meanLineRadius + 0.04, // Position above the mean line. Value set with respect to the paper coordinates.\n yref: \"paper\",\n text: `<span style=\"font-weight:300\">AVG </span><span style=\"font-weight:600\">${\n isDateArray(data)\n ? new Date(meanValue).toLocaleDateString(\"en-US\", {\n month: \"2-digit\",\n day: \"2-digit\",\n year: \"2-digit\",\n })\n : format(d3FormatValueString)(meanValue)\n }</span>`,\n xanchor: \"center\",\n yanchor: \"bottom\",\n showarrow: false,\n font: {\n color: barColor,\n size: 12,\n },\n },\n ]\n : [];\n\n const stdevAnnotation: Partial<Plotly.Annotations>[] =\n statsAnnotations.includes(\"stdev\") && stdevLines && data.length > 0\n ? [\n {\n x: meanValue, // Draw above the mean annotation\n y:\n 1 +\n meanLineRadius +\n (statsAnnotations.includes(\"mean\") ? 0.11 : 0.04),\n yref: \"paper\",\n text: `<span style=\"font-weight:300\">σ </span><span style=\"font-weight:600\">±${\n isDateArray(data)\n ? new Date(stdevValue).toLocaleDateString(\"en-US\", {\n month: \"2-digit\",\n day: \"2-digit\",\n year: \"2-digit\",\n })\n : format(d3FormatValueString)(stdevValue)\n }</span>`,\n xanchor: \"center\",\n yanchor: \"bottom\",\n showarrow: false,\n font: {\n color: barColor,\n size: 12,\n },\n },\n ]\n : [];\n\n const plotlyData: PlotParams[\"data\"] = [\n {\n x: data,\n type: \"histogram\",\n autobinx: false,\n xbins: xBins,\n // nbinsx is valid but not included in the type definition\n //@ts-ignore\n nbinsx: nBins, // Maximum number of bins. Plotly may adjust to make bins \"nicer\".\n marker: {\n color: barColor ?? \"blue\",\n line: {\n color: \"white\",\n width: 0.5,\n },\n },\n hovertemplate: \"[%{x})<br>Count: %{y}<extra></extra>\", // Custom hover text\n },\n unselectedTrace,\n ];\n\n // Need to determine if we should allow extra space at the edge for the bins.\n let displayXAxis = fixedXAxisRange;\n if (fixedXAxisRange && activeBinSize) {\n // First, do we need to do anything at all?\n const isDivisibleByBinSize = isDateArray(data)\n ? (new Date(fixedXAxisRange[1]).getTime() -\n new Date(fixedXAxisRange[0]).getTime()) %\n (typeof activeBinSize === \"number\"\n ? activeBinSize\n : plotlyMToMilliseconds(activeBinSize)) ===\n 0\n : ((fixedXAxisRange[1] as number) - (fixedXAxisRange[0] as number)) %\n (typeof activeBinSize === \"number\"\n ? activeBinSize\n : plotlyMToMilliseconds(activeBinSize)) ===\n 0;\n if (!isDivisibleByBinSize) {\n // Need to extend the axis range to the next bin edge.\n if (!isDateArray(data)) {\n const numberOfBins = Math.ceil(\n ((fixedXAxisRange[1] as number) - (fixedXAxisRange[0] as number)) /\n (activeBinSize as number)\n );\n displayXAxis = [\n fixedXAxisRange[0] as number,\n (fixedXAxisRange[0] as number) +\n numberOfBins * (activeBinSize as number),\n ];\n } else {\n const startTime = new Date(fixedXAxisRange[0]).getTime();\n const endTime = new Date(fixedXAxisRange[1]).getTime();\n const numberOfBins = Math.ceil(\n (endTime - startTime) / (activeBinSize as number)\n );\n displayXAxis = [\n startTime,\n startTime + numberOfBins * (activeBinSize as number),\n ];\n }\n }\n }\n\n const layout: PlotParams[\"layout\"] = {\n title: {\n text: title,\n },\n barmode: \"stack\", // Stack unselected bars on top of selected bars\n showlegend: false,\n autosize: true,\n width: undefined, // Let autosize handle width\n height: undefined, // Let autosize handle height\n margin: {\n l: 50,\n r: 35, // Balance between ensuring the mean annotation doesn't get cut off and having too much margin.\n t: 40 + (title ? 50 : 0), // Add extra top margin if there is a title\n b: 50,\n pad: 4,\n },\n xaxis: {\n title: {\n text: xAxisTitle,\n },\n range: displayXAxis, // Fixed range prevents axis shifting during interaction or data updates\n showgrid: true,\n zeroline: false,\n showline: true,\n mirror: \"ticks\",\n gridcolor: \"#efefef\",\n gridwidth: 0.2,\n zerolinecolor: \"#969696\",\n zerolinewidth: 1,\n linecolor: \"#bababa\",\n linewidth: 1,\n fixedrange: true, // Disable zooming\n ticklabelposition: \"outside\",\n tickformat: isDateArray(data) ? dateTickFormat : d3FormatValueString, // Format ticks for dates\n automargin: true, // Adjust margin if tick labels rotate\n hoverformat: isNumberArray(allData) ? d3FormatValueString : undefined,\n },\n yaxis: {\n title: {\n text: \"Count\",\n standoff: 12, // Add space between title and axis\n },\n automargin: true, // Required for standoff to work properly\n showgrid: true,\n zeroline: false,\n showline: true,\n mirror: \"ticks\",\n gridcolor: \"#efefef\",\n gridwidth: 0.2,\n zerolinecolor: \"#969696\",\n zerolinewidth: 1,\n linecolor: \"#bababa\",\n linewidth: 1,\n fixedrange: true, // Disable zooming\n ticksuffix: \" \", // Add space between y axis and ticks\n },\n bargap: 0.03, // Gap between bars\n dragmode: \"select\", // Enable drag to select\n selectdirection: \"h\", // User can select in horizontal direction only\n shapes: [\n ...allDataMeanLine,\n ...meanLine,\n ...selectedRangeBox,\n ...stdevLines,\n ...allDataStdevLines,\n ], // Add the mean line and selection box\n annotations: [...meanAnnotation, ...stdevAnnotation],\n };\n\n const config: PlotParams[\"config\"] = {\n responsive: true, // Make the plot responsive\n displayModeBar: false, // Hide the mode bar\n displaylogo: false, // Hide the Plotly logo\n scrollZoom: false, // Disable zooming with scroll\n staticPlot: false, // Enable interactivity\n };\n\n const containerStyles: React.CSSProperties = {\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n ...containerStyleOverrides,\n };\n\n // Calculate slider marks.\n const nMarks =\n typeof defaultBinSize === \"number\" ? (defaultBinSize > 99 ? 5 : 10) : 5;\n\n let binSliderMarks: { value: number; label: string }[] | undefined;\n let valueLabelFormat: ((value: number) => string) | undefined; // Used for adjusting how the values appear in the slider tooltip. Only necessary for dates.\n if (defaultBinSize && typeof defaultBinSize === \"number\") {\n if (isDateArray(data)) {\n // For dates, check if the bin size is in minutes, days, or months\n const [unitOfTime, conversionFactor] =\n defaultBinSize >= ONEAVGMONTH\n ? [\"month\", ONEAVGMONTH]\n : defaultBinSize >= ONEDAY\n ? [\"day\", ONEDAY]\n : defaultBinSize >= ONEHOUR\n ? [\"hr\", ONEHOUR]\n : [\"min\", ONEMINUTE];\n\n const binSliderMarkValues =\n unitOfTime === \"month\"\n ? [1, 2, 3, 6, 12]\n .map((n) => n * ONEAVGMONTH)\n .concat([defaultBinSize])\n : unitOfTime === \"day\"\n ? [1, 2, 3, 5, 7, 30].map((n) => n * ONEDAY).concat([defaultBinSize])\n : unitOfTime === \"hr\"\n ? [1, 2, 3, 6, 12, 24]\n .map((n) => n * ONEHOUR)\n .concat([defaultBinSize])\n : [1, 5, 10, 15, 30, 60]\n .map((n) => n * ONEMINUTE)\n .concat([defaultBinSize]);\n const uniqueMarks = [...new Set(binSliderMarkValues)];\n binSliderMarks = uniqueMarks\n .sort((a, b) => a - b)\n .map((val) => ({\n value: val,\n label: `${Math.round(val / conversionFactor)} ${unitOfTime}${\n Math.round(val / conversionFactor) > 1 ? \"s\" : \"\"\n }`,\n }));\n valueLabelFormat = (value: number) => {\n const valueLabel = `${Math.round(\n value / conversionFactor\n )} ${unitOfTime}${Math.round(value / conversionFactor) > 1 ? \"s\" : \"\"}`;\n return valueLabel;\n };\n } else {\n // The following could get ugly if plotly decides to have an ugly bin width. Will have to be more clever\n // if we see ugly defaultBinSizes in practice.\n const numTens = String(Math.floor(defaultBinSize)).length - 1;\n const binSliderMarkValues =\n defaultBinSize >= 1\n ? [\n ...Array.from(\n {\n length: nMarks,\n },\n (_, i) => (i + 1) * Math.pow(10, numTens)\n ),\n defaultBinSize,\n ]\n : [0.1, 0.5, 1];\n const uniqueMarks = [...new Set(binSliderMarkValues)];\n\n binSliderMarks = uniqueMarks\n .sort((a, b) => a - b)\n .map((val) => ({\n value: val,\n label: `${val}`,\n }));\n valueLabelFormat = (value: number) => {\n return value.toString();\n };\n }\n } else if (defaultBinSize && typeof defaultBinSize === \"string\") {\n // Then we have a non-numeric bin size. It's a plotly M string\n // So we know we're dealing with months.\n const binSliderMarkValues = [1, 2, 3, 6, 12]\n .map((n) => n * ONEAVGMONTH)\n .concat([plotlyMToMilliseconds(defaultBinSize)]);\n\n const uniqueMarks = [...new Set(binSliderMarkValues)];\n binSliderMarks = uniqueMarks\n .sort((a, b) => a - b)\n .map((val) => ({\n value: val,\n label: `${Math.round(val / ONEAVGMONTH)} month${\n Math.round(val / ONEAVGMONTH) > 1 ? \"s\" : \"\"\n }`,\n }));\n valueLabelFormat = (value: number) => {\n const valueLabel = `${Math.round(value / ONEAVGMONTH)} month${\n Math.round(value / ONEAVGMONTH) > 1 ? \"s\" : \"\"\n }`;\n return valueLabel;\n };\n }\n\n return (\n <div\n ref={containerRef}\n className={`plot-container ${plotId}`}\n style={\n {\n \"--selection-color\": selectorsColor,\n ...containerStyles,\n } as React.CSSProperties\n }\n >\n <Suspense fallback={<Loading />}>\n <div\n style={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n }}\n >\n {showBinSizeControls !== \"never\" && (\n <div\n className={`histogram-controls ${\n showBinSizeControls === \"onHover\"\n ? \"show-on-hover\"\n : \"show-always\"\n }`}\n style={{\n position: \"absolute\",\n top: plotAreaPosition\n ? `${plotAreaPosition.top + 5}px`\n : \"44px\",\n left: plotAreaPosition\n ? `${plotAreaPosition.left + 5}px`\n : \"65px\",\n zIndex: 1000,\n display: \"flex\",\n alignItems: isMobile ? \"flex-start\" : \"center\",\n gap: \"8px\",\n flexDirection: isMobile ? \"column\" : \"row\",\n }}\n >\n <IconButton\n onClick={() => setIsControlsExpanded(!isControlsExpanded)}\n size=\"small\"\n sx={{\n backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n color: barColor,\n borderRadius: \"4px\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.15)\",\n border: \"1px solid rgba(0, 0, 0, 0.12)\",\n width: \"32px\",\n height: \"32px\",\n \"&:hover\": {\n backgroundColor: \"rgba(255, 255, 255, 1)\",\n boxShadow: \"0 2px 10px rgba(0,0,0,0.2)\",\n },\n }}\n >\n <SettingsIcon fontSize=\"small\" />\n </IconButton>\n <div\n style={{\n backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n borderRadius: \"4px\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.15)\",\n border: \"1px solid rgba(0, 0, 0, 0.12)\",\n overflow: \"hidden\",\n maxWidth: isControlsExpanded ? \"fit-content\" : \"0\",\n opacity: isControlsExpanded ? 1 : 0,\n paddingLeft: \"6px\",\n transition: isMobile\n ? \"\"\n : \"max-width 0.15s ease-in-out, opacity 0.15s ease-in-out\",\n }}\n >\n <div>\n <PlusMinusControl\n aria-label=\"Bin Size Control\"\n disabled={allData.length < 10}\n value={\n activeBinSize\n ? typeof activeBinSize === \"number\"\n ? activeBinSize\n : plotlyMToMilliseconds(activeBinSize)\n : 0\n }\n steps={\n binSliderMarks\n ? binSliderMarks.map((mark) => mark.value)\n : [1]\n }\n title={isMobile ? \"Res\" : \"Resolution\"}\n showValue={showBinSizeControlValue}\n onChange={(newValue) => {\n const newBinSize = newValue as number;\n setBinSize(newBinSize);\n onBinSizeChange?.(newBinSize);\n }}\n colorOverride={barColor}\n valueLabelFormat={valueLabelFormat}\n titleStylingOverrides={settingsTitleStylingOverrides}\n disabledTooltipText=\"Requires 10 or more data points\"\n />\n </div>\n </div>\n </div>\n )}\n <Plot\n key={`histogram-${plotId || \"default\"}`}\n data={plotlyData}\n layout={layout}\n config={config}\n onSelected={handleSelection}\n onClick={handleClick}\n onDeselect={() => {\n onDeselect();\n setSelectedRange(null); // Remove selected box\n }}\n onUpdate={handlePlotUpdate}\n useResizeHandler={true}\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n transition: \"opacity 0.15s ease-in-out\",\n }}\n />\n </div>\n </Suspense>\n </div>\n );\n};\n\nexport default HistogramPlot;\n","import React, { lazy, Suspense, useRef } from 'react';\nimport { PlotParams } from 'react-plotly.js';\nimport './plotStyles.scss';\nimport { calculateMean } from './Utils';\nimport Loading from './Loading';\n\nconst Plot = lazy(() => import('react-plotly.js'));\n\nexport type RadialHistogramPlotProps = {\n data: number[];\n barColor?: string; // Optional prop to set the color of the bars\n unselectedBarColor?: string; // Optional prop to set the color of unselected bars\n selectorsColor?: string; // Optional prop to set the color of elements in the selection box\n onSelected?: (event: Plotly.PlotSelectionEvent) => void; // Optional handler for when a user clicks and drags to select an area\n onClick?: (event: Plotly.PlotMouseEvent) => void; // Optional handler for click events on the plot\n containerStyleOverrides?: React.CSSProperties; // Optional style override for the container\n barWidth?: number; // Optional bar width for radial histogram\n}\n\nexport const RadialHistogramPlot = (props: RadialHistogramPlotProps) => {\n const {\n data,\n barColor = 'rgb(72, 72, 74)',\n unselectedBarColor = 'rgba(203, 195, 195, 0.88)',\n selectorsColor = 'black',\n onSelected,\n onClick,\n containerStyleOverrides,\n barWidth = 20, // Default bar width in degrees\n } = props;\n\n // Simple ref for container\n const containerRef = useRef<HTMLDivElement>(null);\n\n // TEMPORARY Calculate histogram bins manually to get proper polar coordinates\n // This function should be extracted and used for both the regular and radial histograms.\n\n if (data.length === 0) {\n return null;\n }\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const numBins = Math.ceil(Math.sqrt(data.length)); // Default bin count\n const binWidth = (max - min) / numBins;\n \n // Create bins\n const binCounts = new Array(numBins).fill(0);\n const binCenters = [];\n \n for (let i = 0; i < numBins; i++) {\n binCenters.push(min + (i + 0.5) * binWidth);\n }\n \n // Count values in each bin\n data.forEach(value => {\n const binIndex = Math.min(Math.floor((value - min) / binWidth), numBins - 1);\n binCounts[binIndex]++;\n });\n\n\n const plotlyData: PlotParams['data'] = [\n {\n type: 'barpolar',\n theta: binCenters,\n r: binCounts,\n width: barWidth, // Width of each bar in degrees\n marker: {\n color: barColor,\n line: {\n color: \"white\",\n width: 0.5,\n },\n },\n // @ts-ignore - Not in the type but a valid property. See api https://plotly.com/javascript/reference/barpolar/#barpolar\n unselected: {\n marker: {\n color: unselectedBarColor,\n }\n },\n hovertemplate: '[%{x})<br>Count: %{y}<extra></extra>', // Custom hover text,\n }\n ];\n\n\n const layout: PlotParams['layout'] = {\n autosize: true,\n width: undefined,\n height: undefined,\n margin: {\n l: 50,\n r: 50,\n t: 30,\n b: 50,\n pad: 4\n },\n polar: {\n bgcolor: 'rgba(0,0,0,0)',\n sector: [90, -90],\n angularaxis: {\n tickmode: 'linear',\n tick0: 0,\n dtick: 45, // Show ticks every 45 degrees\n direction: \"counterclockwise\",\n rotation: 0,\n showgrid: true,\n gridcolor: '#efefef',\n gridwidth: 0.5,\n tickfont: {\n size: 10\n }\n },\n radialaxis: {\n title: {\n text: 'Count'\n },\n showgrid: true,\n gridcolor: '#efefef',\n gridwidth: 0.5,\n tickfont: {\n size: 10\n },\n angle: 90, // Position radial axis labels at top\n side: 'counterclockwise',\n }\n },\n dragmode: 'select',\n selectdirection: 'any',\n };\n\n const config: PlotParams['config'] = {\n responsive: true,\n displayModeBar: false,\n displaylogo: false,\n scrollZoom: false,\n staticPlot: false,\n };\n\n const containerStyles: React.CSSProperties = {\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n ...containerStyleOverrides,\n };\n\n return (\n <div \n ref={containerRef}\n className=\"plot-container radial-histogram-container\"\n style={{\n '--selection-color': selectorsColor,\n ...containerStyles\n } as React.CSSProperties}\n >\n <Suspense fallback={<Loading />}>\n <Plot \n data={plotlyData} \n layout={layout} \n config={config}\n onSelected={onSelected}\n onClick={onClick}\n useResizeHandler={true}\n style={{ \n width: \"100%\", \n height: \"100%\",\n display: \"block\"\n }}\n />\n </Suspense>\n </div>\n );\n};\n\nexport default RadialHistogramPlot;\n","import { lazy, Suspense } from \"react\";\nimport Loading from \"./Loading\";\n\nconst Plot = lazy(() => import(\"react-plotly.js\"));\n\nexport type StatsDonutProps = {\n // Define any props you want to pass to the StatsDonut component\n values: number[];\n labels: string[];\n hole: number;\n withCenterLabel?: boolean;\n centerLabel?: string;\n centerValue?: string;\n colors?: string[]; // Array of colors for each slice\n showLegend?: boolean; // Whether to show the legend\n legendPosition?: \"right\" | \"bottom\"; // Position of the legend\n containerStyle?: React.CSSProperties; // Optional style overrides for the container\n};\n\nexport const StatsDonut = (props: StatsDonutProps) => {\n const {\n withCenterLabel = false,\n centerLabel,\n centerValue,\n showLegend = true,\n legendPosition = \"right\",\n containerStyle = {},\n } = props;\n\n // Configure legend position based on prop\n const legendConfig =\n legendPosition === \"bottom\"\n ? {\n orientation: \"h\" as const,\n x: 0.5,\n xanchor: \"center\" as const,\n y: -0.15,\n yanchor: \"top\" as const,\n }\n : {\n orientation: \"v\" as const,\n x: 1.05,\n xanchor: \"left\" as const,\n y: 0.5,\n yanchor: \"middle\" as const,\n };\n\n const annotations = withCenterLabel\n ? [\n {\n text: centerLabel || \"\",\n x: 0.5,\n y: 0.55,\n xref: \"paper\" as const,\n yref: \"paper\" as const,\n showarrow: false,\n font: {\n size: 16,\n color: \"#666\",\n },\n },\n {\n text: centerValue || \"\",\n x: 0.5,\n y: 0.45,\n xref: \"paper\" as const,\n yref: \"paper\" as const,\n showarrow: false,\n font: {\n size: 24,\n weight: \"bold\" as const,\n color: \"#000\",\n },\n },\n ]\n : [];\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n minHeight: \"300px\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n ...containerStyle,\n }}\n >\n <Suspense fallback={<Loading />}>\n <Plot\n data={[\n {\n type: \"pie\",\n values: props.values,\n labels: props.labels,\n hole: props.hole,\n marker: {\n colors: props.colors,\n line: {\n color: \"#FFFFFF\",\n width: 2,\n },\n },\n },\n ]}\n layout={{\n showlegend: showLegend,\n annotations,\n autosize: true,\n legend: {\n ...legendConfig,\n font: {\n size: 14,\n },\n },\n margin:\n legendPosition === \"bottom\"\n ? { l: 20, r: 20, t: 20, b: 80 }\n : { l: 20, r: 100, t: 20, b: 20 },\n }}\n style={{\n width: \"100%\",\n height: \"100%\",\n }}\n config={{\n displayModeBar: false,\n responsive: true,\n }}\n useResizeHandler={true}\n />\n </Suspense>\n </div>\n );\n};\n","// A test bar plotly plot\nimport React, { lazy } from 'react';\nimport { PlotParams } from 'react-plotly.js';\n\nconst Plot = lazy(() => import('react-plotly.js'));\n\nexport type TestPlotProps = {\n yaxisTitle?: string;\n xaxisTitle?: string;\n}\nexport const TestPlot = (props: TestPlotProps) => {\n const data: PlotParams['data'] = [\n {\n x: [1, 2, 3, 4],\n y: [10, 15, 13, 17],\n type: 'bar' as const,\n marker: { color: 'blue' },\n },\n ];\n\n const layout = {\n title: {text: 'Test Bar Plot'},\n xaxis: { title: {text: props.xaxisTitle ?? 'X Axis'} },\n yaxis: { title: {text: props.yaxisTitle ?? 'Y Axis'} },\n };\n\n return <Plot data={data} layout={layout} />;\n};\n\nexport default TestPlot;\n"],"names":["_jsx","createSvgIcon","useEffect","_jsxs","Plot","lazy","useRef","useState","useMemo","Suspense"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,15,16,18]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatDecimal.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/exponent.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatGroup.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatNumerals.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatSpecifier.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTrim.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatRounded.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTypes.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/locale.js","../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js","../src/components/Utils.ts","../src/components/Loading.tsx","../node_modules/.pnpm/@mui+icons-material@7.3.5_@mui+material@7.3.3_@emotion+react@11.14.0_@types+react@18.3.25_rea_ovnfkymtpqafu6lytbvs5lunri/node_modules/@mui/icons-material/esm/Add.js","../node_modules/.pnpm/@mui+icons-material@7.3.5_@mui+material@7.3.3_@emotion+react@11.14.0_@types+react@18.3.25_rea_ovnfkymtpqafu6lytbvs5lunri/node_modules/@mui/icons-material/esm/Remove.js","../src/components/PlusMinusControl.tsx","../node_modules/.pnpm/@mui+icons-material@7.3.5_@mui+material@7.3.3_@emotion+react@11.14.0_@types+react@18.3.25_rea_ovnfkymtpqafu6lytbvs5lunri/node_modules/@mui/icons-material/esm/Settings.js","../src/components/Histogram.tsx","../src/components/RadialHistogram.tsx","../src/components/StatsDonut.tsx","../src/components/BoxPlot.tsx","../src/components/LegendUtils.tsx","../src/components/PairedComparisonsBoxPlot.tsx","../src/components/SummaryComparisonPlot.tsx","../src/components/LinePlot.tsx","../src/components/TestPlot.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","// Utility functions for our components\nexport const ONEAVGMONTH = 2629800000; // Average month length in ms, copied from plotly constants in plotly.js/src/constants/numerical.js\nexport const ONEDAY = 86400000; // One day in milliseconds\nexport const ONEHOUR = 3600000; // One hour in milliseconds\nexport const ONEMINUTE = 60000; // One minute in milliseconds\n\n// Type guard to check if array contains only numbers\nexport const isNumberArray = (arr: unknown[]): arr is number[] => {\n return arr.every((item) => typeof item === \"number\" && !isNaN(item));\n};\n\n// Type guard to check if array contains only dates\nexport const isDateArray = (arr: unknown[]): arr is Date[] => {\n return arr.every((item) => item instanceof Date);\n};\n\n// Calculate the mean of an array of numbers or dates\nexport function calculateMean(arr: number[] | Date[]): number | undefined {\n if (arr.length === 0) return undefined;\n\n if (isNumberArray(arr)) {\n return arr.reduce((acc, num) => acc + num, 0) / arr.length;\n } else if (isDateArray(arr)) {\n const sum = arr.reduce((acc, date) => acc + date.getTime(), 0);\n return sum / arr.length;\n }\n}\n\n// Calculate standard deviation of an array of numbers or dates\nexport function calculateStandardDeviation(\n arr: number[] | Date[],\n): number | undefined {\n if (arr.length === 0) return undefined;\n\n const mean = calculateMean(arr);\n if (mean === undefined) return undefined;\n\n let sumOfSquares: number = 0;\n if (isNumberArray(arr)) {\n sumOfSquares = arr.reduce((acc, num) => acc + Math.pow(num - mean, 2), 0);\n } else if (isDateArray(arr)) {\n sumOfSquares = arr.reduce(\n (acc, date) => acc + Math.pow(date.getTime() - mean, 2),\n 0,\n );\n } else {\n return undefined;\n }\n const variance = sumOfSquares / arr.length;\n return Math.sqrt(variance);\n}\n\n// Utility function to format date as mm/dd/yy\nexport const formatDateMDY = (timestamp: number): string => {\n const date = new Date(timestamp);\n const month = (date.getMonth() + 1).toString().padStart(2, \"0\");\n const day = date.getDate().toString().padStart(2, \"0\");\n const year = date.getFullYear().toString().slice(-2);\n return `${month}/${day}/${year}`;\n};\n\n// Utilities for rounding dates to the nearest day.\n// Helpful for making nice bins\nexport const roundToNextDay = (timestamp: number) => {\n const date = new Date(timestamp);\n date.setHours(23, 59, 59, 999); // End of day\n return date.toISOString();\n};\nexport const roundToPrevDay = (timestamp: number) => {\n const date = new Date(timestamp);\n date.setHours(0, 0, 0, 0); // Start of day\n return date.toISOString();\n};\n\n// Convert plotly M# string to number of milliseconds\n// According to the docs, plotly will use M# whenever the bin size is\n// larger than one average month. Even if the bin size is 2 years, plotly\n// will still use M24 instead of Y2 (plotly.js/src/plots/cartesian/axes.js).\nexport const plotlyMToMilliseconds = (mString: string): number => {\n const match = mString.match(/^M(\\d+)$/);\n if (match) {\n const months = parseInt(match[1], 10);\n return months * ONEAVGMONTH;\n } else {\n console.error(`plotlyMToMilliseconds: Invalid M# string: ${mString}`);\n }\n return 0;\n};\n\n// Convert a string specifying a day (with no time) to a timestamp\nexport const convertDateDescriptionToTimestamp = (\n startValue: string | number,\n): number => {\n if (typeof startValue === \"number\") {\n // Then we're assuming it's already a timestamp\n return startValue;\n }\n\n if (typeof startValue === \"string\") {\n // Try to parse the date string.\n const date = new Date(startValue);\n\n // Sometimes the date will fail to be a proper Date if it does not\n // have a time component. Add a time stamp if necessary.\n if (isNaN(date.getTime())) {\n // Then date did not have a time and is just a day. Try adding a time.\n const dateWithTime = new Date(startValue + \"T00:00:00\");\n if (isNaN(dateWithTime.getTime())) {\n throw new Error(`Cannot parse date: ${startValue}`);\n }\n return dateWithTime.getTime();\n }\n return date.getTime();\n }\n\n throw new Error(`Unexpected type for start value: ${typeof startValue}`);\n};\n\n// Helper function to convert color to rgba with specified opacity\nexport const colorToRGBA = (color: string, opacity: number): string => {\n // For named colors, create a temporary element to get computed rgb\n // This is a fallback that works in browser environments\n const temp = document.createElement(\"div\");\n temp.style.color = color;\n document.body.appendChild(temp);\n const computed = window.getComputedStyle(temp).color;\n document.body.removeChild(temp);\n\n const rgbMatch = computed.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (rgbMatch) {\n return `rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, ${opacity})`;\n }\n\n // Fallback: return original color\n return color;\n};\n\nexport const computeMedian = (data: number[]): number => {\n if (data.length === 0) {\n return 0;\n }\n const values = data.sort((a, b) => a - b);\n\n const mid = Math.floor(values.length / 2);\n return values.length % 2 !== 0\n ? values[mid]\n : (values[mid - 1] + values[mid]) / 2;\n};\n\nexport const computeQuartile = (\n data: number[],\n quartile: 1 | 2 | 3,\n): number => {\n if (data.length === 0) {\n return 0;\n }\n const values = data.sort((a, b) => a - b);\n const pos = (values.length - 1) * (quartile / 4);\n const base = Math.floor(pos);\n const rest = pos - base;\n if (values[base + 1] !== undefined) {\n return values[base] + rest * (values[base + 1] - values[base]);\n } else {\n return values[base];\n }\n};\n","import CircularProgress from '@mui/material/CircularProgress';\nimport './plotStyles.scss';\n\n// Loading component renders a circular spinner above an element (usually a plot)\nconst Loading = () => {\n return (\n <div className=\"loading-overlay\">\n <CircularProgress />\n </div>\n )\n}\n\nexport default Loading;","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z\"\n}), 'Add');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M19 13H5v-2h14z\"\n}), 'Remove');","import React, { useEffect } from \"react\";\nimport ButtonGroup from \"@mui/material/ButtonGroup\";\nimport Button from \"@mui/material/Button\";\nimport Tooltip from \"@mui/material/Tooltip\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport RemoveIcon from \"@mui/icons-material/Remove\";\n\nexport type PlusMinusControlProps = {\n value: number;\n onChange: (newValue: number) => void;\n steps: number[]; // Assumes the steps are sorted in ascending order\n ariaLabel?: string;\n disabled?: boolean;\n showValue?: boolean;\n title?: string;\n themeRole?: \"primary\" | \"secondary\";\n colorOverride?: string;\n valueLabelFormat?: (value: number) => string;\n titleStylingOverrides?: React.CSSProperties;\n disabledTooltipText?: string; // Tooltip text to show when disabled\n};\n\nconst PlusMinusControl: React.FC<PlusMinusControlProps> = ({\n value,\n onChange,\n steps = [1],\n ariaLabel = \"Plus Minus Control\",\n disabled = false,\n showValue = true,\n title = \"\",\n themeRole = \"primary\",\n colorOverride = undefined,\n valueLabelFormat,\n titleStylingOverrides = {},\n disabledTooltipText = \"Insufficient data\",\n}) => {\n const color = colorOverride || \"#111fbcff\";\n const [disablePlus, setDisablePlus] = React.useState<boolean>(false);\n const [disableMinus, setDisableMinus] = React.useState<boolean>(false);\n\n useEffect(() => {\n const stepIndex = steps.indexOf(value);\n if (stepIndex === -1) {\n setDisablePlus(true);\n setDisableMinus(true);\n } else {\n setDisablePlus(stepIndex === steps.length - 1);\n setDisableMinus(stepIndex === 0);\n }\n }, [value, steps]);\n\n const handleIncrement = () => {\n const stepIndex = steps.indexOf(value);\n const newValue =\n stepIndex === -1\n ? steps[0]\n : steps[Math.min(stepIndex + 1, steps.length - 1)];\n onChange(newValue);\n };\n\n const handleDecrement = () => {\n const stepIndex = steps.indexOf(value);\n const newValue =\n stepIndex === -1 ? steps[0] : steps[Math.max(stepIndex - 1, 0)];\n onChange(newValue);\n };\n\n const buttonGroupContent = (\n <ButtonGroup\n size={\"small\"}\n aria-label={ariaLabel}\n variant=\"text\"\n disabled={disabled}\n orientation=\"horizontal\"\n color={themeRole}\n sx={{\n backgroundColor: \"background.paper\",\n \"& .MuiButton-root:not(.Mui-disabled)\": {\n color: color,\n },\n \"& .MuiButton-root:not(.Mui-disabled) .MuiSvgIcon-root\": {\n color: color,\n },\n }}\n >\n <Button\n disabled\n aria-label={`${title}`}\n sx={{\n paddingRight: \"10px\",\n \"&.Mui-disabled\": disabled\n ? {}\n : {\n color: `${color} !important`,\n },\n \"& .MuiSvgIcon-root\": {\n color: color,\n backgroundColor: color,\n },\n ...titleStylingOverrides,\n }}\n >\n {title}\n </Button>\n {showValue && (\n <Button\n aria-label=\"current value\"\n sx={{\n pointerEvents: \"none\",\n fontWeight: \"600\",\n minHeight: \"32px\",\n maxHeight: \"32px\",\n height: \"32px\",\n }}\n >\n {valueLabelFormat ? valueLabelFormat(value) : value}\n </Button>\n )}\n <Button\n onClick={handleIncrement}\n aria-label=\"increment\"\n disabled={disablePlus}\n >\n <AddIcon />\n </Button>\n <Button\n onClick={handleDecrement}\n aria-label=\"decrement\"\n disabled={disableMinus}\n >\n <RemoveIcon />\n </Button>\n </ButtonGroup>\n );\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n }}\n >\n {disabled ? (\n <Tooltip title={disabledTooltipText} arrow>\n <span>{buttonGroupContent}</span>\n </Tooltip>\n ) : (\n buttonGroupContent\n )}\n </div>\n );\n};\n\nexport default PlusMinusControl;\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6\"\n}), 'Settings');","import React, {\n lazy,\n Suspense,\n useRef,\n useState,\n useMemo,\n useEffect,\n} from \"react\";\nimport { PlotParams } from \"react-plotly.js\";\nimport { format } from \"d3-format\";\nimport \"./plotStyles.scss\";\nimport {\n calculateMean,\n calculateStandardDeviation,\n isDateArray,\n isNumberArray,\n ONEAVGMONTH,\n ONEDAY,\n ONEHOUR,\n ONEMINUTE,\n plotlyMToMilliseconds,\n roundToNextDay,\n roundToPrevDay,\n} from \"./Utils\";\nimport Loading from \"./Loading\"; // Import custom loading component\nimport PlusMinusControl from \"./PlusMinusControl\";\nimport IconButton from \"@mui/material/IconButton\";\nimport SettingsIcon from \"@mui/icons-material/Settings\";\n\nconst Plot = lazy(() => import(\"react-plotly.js\"));\n\ntype MinMax = [number, number] | [Date, Date];\n\nexport type ShowBinSizeControls = \"always\" | \"onHover\" | \"never\";\n\nexport type HistogramStatsAnnotation = \"mean\" | \"stdev\";\n\nexport type HistogramPlotProps = {\n data: number[] | Date[]; // Main histogram data. Will be shown in the primary color barColor.\n unselectedData?: number[] | Date[]; // Any unselected data to plot. Will be drawn in unselectedBarColor\n title?: string;\n xAxisTitle?: string;\n barColor?: string; // Optional prop to set the color of the bars\n unselectedBarColor?: string; // Optional prop to set the color of unselected bars\n selectorsColor?: string; // Optional prop to set the color of elements within the selection box\n handleClickOrSelection?: (\n minValue: number | Date,\n maxValue: number | Date,\n shiftKeyPressed?: boolean,\n ) => void; // Callback to run on both click and selection events. For example, update plot display based on a new selected/clicked range.\n containerStyleOverrides?: React.CSSProperties; // Optional style override for the container\n onDeselect?: () => void; // Handler for deselection events. Deselection occurs with a double click. Example use is for resetting unselected data.\n plotId?: string; // Optional unique identifier to prevent conflicts between multiple plots\n selectByBin?: boolean; // If true, dragging over at least half of a bar will select the entire bar. If false, the explicit values of the selected range are used.\n dateTickFormat?: string; // Optional format string for date ticks on the x-axis. For example, '%m/%d/%y' for 'MM/DD/YY'.\n binSizeOverride?: number | string; // Optional bin size. ONLY use for small datasets or where explicitly calculated for this dataset. In milliseconds for dates.\n statsAnnotations?: HistogramStatsAnnotation[]; // Optional list of statistics to annotate on the plot (e.g., 'mean', 'stdev').\n emptySelectedRange?: boolean; // If true, sets the selected range to be empty. Useful when the parent component wants to clear the selection.\n d3FormatValueString?: string; // Optional formatter for numeric values. Will modify tooltips, axes, and annotations.\n showBinSizeControls?: ShowBinSizeControls; // Shows or hides controls for the plot. Currently the controls only can adjust the bin sizes.\n onBinSizeCalculated?: (binSize: number | string) => void; // Callback fired when Plotly calculates the initial bin size. Useful for accessing the default bin size.\n onBinSizeChange?: (currentBinSize: number) => void; // Callback fired when the slider value changes.\n showBinSizeControlValue?: boolean; // Whether to show the current bin size value next to the control slider.\n isMobile?: boolean; // Whether the plot is being viewed on a mobile device.\n settingsTitleStylingOverrides?: React.CSSProperties; // Optional style overrides for the plot settings titles. Applies to all titles.\n};\n\nexport const HistogramPlot = (props: HistogramPlotProps) => {\n const {\n data,\n title,\n xAxisTitle,\n barColor = \"rgb(72, 72, 74)\",\n unselectedBarColor = \"rgba(203, 195, 195, 0.88)\",\n selectorsColor = \"black\",\n containerStyleOverrides,\n unselectedData = [],\n handleClickOrSelection = () => {},\n onDeselect = () => {},\n plotId,\n selectByBin = false,\n dateTickFormat,\n binSizeOverride,\n statsAnnotations = [\"mean\"],\n emptySelectedRange = false,\n d3FormatValueString = \".1f\",\n showBinSizeControls = \"always\",\n onBinSizeCalculated,\n onBinSizeChange,\n showBinSizeControlValue = true,\n isMobile = false,\n settingsTitleStylingOverrides = {},\n } = props;\n\n // Ref for plot container\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Track any selections made in this plot so we can style the selection box.\n const [selectedRange, setSelectedRange] = useState<MinMax[] | null>(null);\n\n // If the parent component wants to clear the selection, reset selectedRange to null.\n useEffect(() => {\n if (emptySelectedRange) {\n setSelectedRange(null);\n }\n }, [emptySelectedRange]);\n\n // Combine all data into one for later calculations\n const allData = [...data, ...unselectedData];\n\n // If all the data becomes selected, we should forget any old selections.\n useEffect(() => {\n if (unselectedData.length === 0) {\n setSelectedRange(null); // Clear selection box if all data is selected\n }\n }, [unselectedData]);\n\n // Set the bins based on the entire data set.\n const nBins =\n data.length + unselectedData.length >= 10\n ? Math.ceil(Math.sqrt(data.length + unselectedData.length))\n : 0;\n\n // Plotly determines \"nice\" bins which consequently means it internally decides the axis range. We need\n // to access that information once the plot has been initialized so that we can prevent the\n // axis range from changing during interaction. Dates use strings.\n const [fixedXAxisRange, setFixedXAxisRange] = useState<\n [number, number] | [string, string] | undefined\n >(undefined);\n\n // Set the default bin size (calculated by plotly), and the current bin size (may be adjusted by the user).\n const [defaultBinSize, setDefaultBinSize] = useState<\n number | string | undefined\n >(undefined);\n const [binSize, setBinSize] = useState<number | string | undefined>(\n undefined,\n );\n const [isControlsExpanded, setIsControlsExpanded] = useState(false);\n // Set the top/left position on the axes relative to the plot container.\n const [plotAreaPosition, setPlotAreaPosition] = useState<{\n top: number;\n left: number;\n } | null>(null);\n\n // If binSizeOverride is provided, use it to set the bin size and range explicitly.\n // Plotly does a better job of setting bins and ending them at nice numbers, so only use\n // this prop when necessary. If the user has adjusted binSize via the slider, use that instead.\n const activeBinSize =\n binSizeOverride ||\n (showBinSizeControls !== \"never\" ? binSize : defaultBinSize);\n\n // Once the plot is drawn, record the initial axis range so we can keep it fixed.\n // Also record the initial bin size.\n // figure should be Readonly<Plotly.Figure> but react-plotly.js doesn't expose that type, so we use any.\n const handlePlotUpdate = (figure: any, graphDiv: Readonly<HTMLElement>) => {\n const currentLayout = (graphDiv as any)._fullLayout;\n\n // Get axis position for positioning plot controls\n if (currentLayout?.yaxis && currentLayout?.xaxis) {\n const yaxis = currentLayout.yaxis;\n const xaxis = currentLayout.xaxis;\n // _offset gives the top/left position of the plot area in pixels from container top\n const top = yaxis._offset || 0;\n const left = xaxis._offset || 0;\n\n if (\n !plotAreaPosition ||\n top !== plotAreaPosition.top ||\n left !== plotAreaPosition.left\n ) {\n setPlotAreaPosition({ top, left });\n }\n }\n\n if (!fixedXAxisRange) {\n if (currentLayout?.xaxis?.range) {\n const range = currentLayout.xaxis.range;\n\n // Skip temporary [-1, 1] range\n if (range[0] === -1 && range[1] === 1) {\n return;\n }\n\n setFixedXAxisRange(range);\n }\n }\n\n if (!binSize) {\n // Get the bin size from the first trace. Both traces should have the same bin size.\n if (\n figure &&\n figure.data &&\n figure.data.length > 0 &&\n figure.data[0].xbins &&\n figure.data[0].xbins.size\n ) {\n const calculatedBinSize = figure.data[0].xbins.size;\n setDefaultBinSize(calculatedBinSize);\n setBinSize(calculatedBinSize);\n onBinSizeCalculated?.(calculatedBinSize);\n }\n }\n };\n\n // Track shift key state\n const isShiftPressed = useRef(false);\n\n // Add keyboard event listeners to track shift key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Shift\") {\n isShiftPressed.current = true;\n }\n };\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e.key === \"Shift\") {\n isShiftPressed.current = false;\n }\n };\n\n // Add event listeners to document to catch shift key globally\n document.addEventListener(\"keydown\", handleKeyDown);\n document.addEventListener(\"keyup\", handleKeyUp);\n\n // Cleanup\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.removeEventListener(\"keyup\", handleKeyUp);\n };\n }, []);\n\n // Create handler for click event that can use event data to update the plot if desired.\n const handleClick = (event: Plotly.PlotMouseEvent) => {\n if (!event || !event.points || event.points.length === 0) {\n return;\n }\n\n // Use the bin number to determine which bar was clicked and determine the range of the clicked bar.\n if (\n \"binNumber\" in event.points[0] &&\n typeof event.points[0].binNumber === \"number\"\n ) {\n // Get the index of the clicked bar with respect to the trace. So if\n // my trace has only one bar (0, 1] but another trace has bars (-1, 0], (0, 1], (1, 2], etc.\n // then when I click on (0, 1] in my trace the index will be 0, even thought it would be\n // the second bar in the other trace. Because of this, we can't use data.xbins to\n // find the clicked bar, because its start and end values are based on all traces, not just the clicked trace.\n const clickedBinIndex: number = event.points[0].binNumber;\n\n // Handle dates and numbers separately\n // The minimum value of the the selected trace. May be different from the global minimum.\n let minTraceValue: number;\n // This is the start of the first bin out of all the traces. The global first bin.\n let globalFirstBinStart: number;\n if (isDateArray(data)) {\n // Date bins are represented as strings (sometimes). We'll need to convert whatever plotly gives us to timestamps.\n globalFirstBinStart = fixedXAxisRange\n ? new Date(fixedXAxisRange[0]).getTime()\n : new Date(event.points[0].data.xbins.start).getTime();\n minTraceValue =\n event.points[0].curveNumber === 0\n ? Math.min(...(data as Date[]).map((d) => d.getTime()))\n : Math.min(...(unselectedData as Date[]).map((d) => d.getTime()));\n } else {\n // Get the min value of the trace and the beginning of the first bin (globally)\n minTraceValue =\n event.points[0].curveNumber === 0\n ? Math.min(...(data as number[]))\n : Math.min(...(unselectedData as number[]));\n globalFirstBinStart = fixedXAxisRange\n ? (fixedXAxisRange[0] as number)\n : (event.points[0].data.xbins.start as number);\n }\n\n // Finally, we need to calculate the min and max values of the clicked bin.\n // If the bin size is a month or more, plotly records it in their \"mstring\" format like \"M3\" for 3 months.\n // We then must convert it back to milliseconds. Otherwise, it's always ms.\n const size = activeBinSize ?? event.points?.[0]?.data?.xbins?.size;\n const convertedBinSize =\n typeof size === \"string\"\n ? plotlyMToMilliseconds(size as string)\n : (size as number);\n\n // This minTraceValue is in the 0th bin of this trace. Find the index of this bin in the whole plot.\n const clickedBinGlobalIndex =\n clickedBinIndex +\n Math.floor((minTraceValue - globalFirstBinStart) / convertedBinSize);\n const [minBinValue, maxBinValue] = [\n globalFirstBinStart + clickedBinGlobalIndex * convertedBinSize,\n globalFirstBinStart + (clickedBinGlobalIndex + 1) * convertedBinSize,\n ];\n\n if (isDateArray(data)) {\n const minDate = new Date(minBinValue);\n const maxDate = new Date(maxBinValue);\n handleClickOrSelection(minDate, maxDate, isShiftPressed.current);\n const newMinMax = [minDate, maxDate] as [Date, Date];\n if (isShiftPressed.current && selectedRange) {\n setSelectedRange([...selectedRange, newMinMax]);\n } else {\n setSelectedRange([newMinMax]);\n }\n } else {\n handleClickOrSelection(\n minBinValue,\n maxBinValue,\n isShiftPressed.current,\n );\n const newMinMax = [minBinValue, maxBinValue] as [number, number];\n if (isShiftPressed.current && selectedRange) {\n setSelectedRange([...selectedRange, newMinMax]);\n } else {\n setSelectedRange([newMinMax]);\n }\n }\n }\n };\n\n // Handle the selection event (click and drag across the plot)\n const handleSelection = (event: Plotly.PlotSelectionEvent) => {\n if (!event || !event.range || !event.range.x) {\n return;\n }\n\n let minValue: number | Date;\n let maxValue: number | Date;\n if (\n typeof event.range.x[0] === \"string\" &&\n typeof event.range.x[1] === \"string\"\n ) {\n // Then we are must be dealing with dates\n\n if (selectByBin) {\n // Set selected range to include the whole bin if at least half the bin is within the explicit range\n // Plotly already tells us which bins were selected based on this logic. These are the points in the event.\n if (event.points && event.points.length > 0) {\n // Means at least one bin has been selected\n const firstBinMidPoint = new Date(\n event.points[0].x as string,\n ).getTime();\n const lastBinMidPoint = new Date(\n event.points[event.points.length - 1].x as string,\n ).getTime();\n // If the bin size is a month or more, plotly records it in their \"mstring\" format like \"M3\" for 3 months.\n // We then must convert it back to milliseconds. Otherwise, it's always ms.\n const convertedBinSize =\n typeof activeBinSize === \"string\"\n ? plotlyMToMilliseconds(activeBinSize as string)\n : (activeBinSize as number);\n minValue = new Date(firstBinMidPoint - convertedBinSize / 2);\n maxValue = new Date(lastBinMidPoint + convertedBinSize / 2);\n } else {\n // No bins selected, so the range should be empty.\n minValue = new Date(event.range.x[0]);\n maxValue = minValue;\n }\n } else {\n // Set the range based on the explicit selection boundaries\n minValue = new Date(event.range.x[0]);\n maxValue = new Date(event.range.x[1]);\n }\n } else {\n // Handle selection for numbers\n if (selectByBin) {\n // Set the range based on the bins selected. Plotly will include a bin in event.points if\n // at least half of it is selected.\n if (event.points && event.points.length > 0) {\n // Find the max and min midpoints. They may be from curve 0 or 1.\n const firstBinMidPoint = Math.min(\n ...event.points.map((p) => p.x as number),\n );\n const lastBinMidPoint = Math.max(\n ...event.points.map((p) => p.x as number),\n );\n const convertedBinSize = activeBinSize as number;\n const roundedMinValue = firstBinMidPoint - convertedBinSize / 2;\n const roundedMaxValue = lastBinMidPoint + convertedBinSize / 2;\n minValue = roundedMinValue;\n maxValue = roundedMaxValue;\n } else {\n // No bins selected, so set the range to be empty.\n minValue = event.range.x[0];\n maxValue = minValue;\n }\n } else {\n // Set the range based on the explicit selection boundaries\n minValue = event.range.x[0];\n maxValue = event.range.x[1];\n }\n }\n\n if (minValue !== undefined && maxValue !== undefined) {\n // Update selected range. Have to be strict about types.\n if (typeof minValue === \"number\" && typeof maxValue === \"number\") {\n const newMinMax = [minValue, maxValue] as [number, number];\n if (isShiftPressed.current && selectedRange) {\n setSelectedRange([...selectedRange, newMinMax]);\n } else {\n setSelectedRange([newMinMax]);\n }\n } else if (minValue instanceof Date && maxValue instanceof Date) {\n const newMinMax = [minValue, maxValue] as [Date, Date];\n if (isShiftPressed.current && selectedRange) {\n setSelectedRange([...selectedRange, newMinMax]);\n } else {\n setSelectedRange([newMinMax]);\n }\n }\n handleClickOrSelection(minValue, maxValue, isShiftPressed.current);\n }\n };\n\n // Create the selected range box\n const selectedRangeBox: Partial<Plotly.Shape>[] = useMemo(() => {\n if (!selectedRange) return [];\n if (unselectedData.length === 0) return []; // Don't show the box if the entire dataset is selected.\n\n // Create a multiply-like effect by using a semi-transparent dark overlay\n const multiplyColor = \"rgba(29, 104, 185, 0.1)\";\n\n return selectedRange.map((maxMin) => ({\n type: \"rect\",\n x0: isDateArray(maxMin) ? maxMin[0].getTime() : maxMin[0],\n x1: isDateArray(maxMin) ? maxMin[1].getTime() : maxMin[1],\n y0: 0,\n y1: 1,\n yref: \"paper\",\n fillcolor: multiplyColor,\n line: {\n width: 1,\n color: multiplyColor,\n },\n layer: \"above\", // Ensure the selection box is above the bars\n }));\n }, [selectedRange, unselectedData]);\n\n // Calculate the mean of the selected data using normalized data\n const meanValue = calculateMean(data) ?? 0; // Default to 0 if no data\n const stdevValue = calculateStandardDeviation(data) ?? 0;\n\n const meanLineRadius = 0.01; // distance from the top of the y axis to the top/bottom end of the mean line\n\n const meanLine: Partial<Plotly.Shape>[] =\n statsAnnotations.includes(\"mean\") && data.length > 0\n ? [\n {\n type: \"line\",\n x0: meanValue,\n y0: 1 - meanLineRadius,\n x1: meanValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: barColor,\n width: 1.5,\n },\n },\n ]\n : [];\n\n // Draw mean line for all data\n const allDataMeanValue = calculateMean(allData as number[] | Date[]) ?? 0;\n const allDataMeanLine: Partial<Plotly.Shape>[] =\n statsAnnotations.includes(\"mean\") &&\n unselectedData.length > 0 &&\n data.length > 0\n ? [\n {\n type: \"line\",\n x0: allDataMeanValue,\n y0: 1 - meanLineRadius,\n x1: allDataMeanValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: unselectedBarColor,\n width: 1.5,\n },\n },\n ]\n : [];\n\n const stdevLines: Partial<Plotly.Shape>[] =\n statsAnnotations.includes(\"stdev\") && data.length > 0\n ? [\n {\n type: \"line\",\n x0: meanValue - stdevValue,\n y0: 1 - meanLineRadius,\n x1: meanValue - stdevValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: barColor,\n width: 1.5,\n dash: \"dot\",\n },\n },\n {\n type: \"line\",\n x0: meanValue + stdevValue,\n y0: 1 - meanLineRadius,\n x1: meanValue + stdevValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: barColor,\n width: 1.5,\n dash: \"dot\",\n },\n },\n ]\n : [];\n\n const allDataStdevValue =\n calculateStandardDeviation(allData as number[] | Date[]) ?? 0;\n const allDataStdevLines: Partial<Plotly.Shape>[] =\n statsAnnotations.includes(\"stdev\") &&\n unselectedData.length > 0 &&\n data.length > 0\n ? [\n {\n type: \"line\",\n x0: allDataMeanValue - allDataStdevValue,\n y0: 1 - meanLineRadius,\n x1: allDataMeanValue - allDataStdevValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: unselectedBarColor,\n width: 1.5,\n dash: \"dot\",\n },\n },\n {\n type: \"line\",\n x0: allDataMeanValue + allDataStdevValue,\n y0: 1 - meanLineRadius,\n x1: allDataMeanValue + allDataStdevValue,\n yref: \"paper\",\n y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.\n line: {\n color: unselectedBarColor,\n width: 1.5,\n dash: \"dot\",\n },\n },\n ]\n : [];\n\n const xBins =\n activeBinSize && allData.length > 0\n ? isDateArray(allData)\n ? {\n start:\n fixedXAxisRange && fixedXAxisRange[0]\n ? fixedXAxisRange[0] // May be a string like 2025-09-03, and that's okay for dates.\n : roundToPrevDay(Math.min(...allData.map((d) => d.getTime()))), // Find a nice round number as a starting point.\n end: roundToNextDay(Math.max(...allData.map((d) => d.getTime()))),\n size: activeBinSize, // bin size in milliseconds or plotly's M string for months.\n }\n : isNumberArray(allData)\n ? {\n start:\n fixedXAxisRange && typeof fixedXAxisRange[0] === \"number\"\n ? fixedXAxisRange[0]\n : Math.floor(Math.min(...allData)),\n end: Math.ceil(Math.max(...allData)),\n size: activeBinSize,\n }\n : undefined\n : undefined;\n\n const unselectedTrace: PlotParams[\"data\"][number] = {\n x: unselectedData,\n type: \"histogram\",\n autobinx: false,\n xbins: xBins,\n // nbinsx is valid but not included in the type definition\n //@ts-ignore\n nbinsx: nBins, // Maximum number of bins. Plotly may adjust to make bins \"nicer\".\n marker: {\n color: unselectedBarColor,\n line: {\n color: \"white\",\n width: 0.5,\n },\n },\n hovertemplate: \"[%{x})<br>Count: %{y}<extra></extra>\",\n };\n\n const meanAnnotation: Partial<Plotly.Annotations>[] =\n statsAnnotations.includes(\"mean\") && meanLine && data.length > 0\n ? [\n {\n x: meanValue,\n y: 1 + meanLineRadius + 0.04, // Position above the mean line. Value set with respect to the paper coordinates.\n yref: \"paper\",\n text: `<span style=\"font-weight:300\">AVG </span><span style=\"font-weight:600\">${\n isDateArray(data)\n ? new Date(meanValue).toLocaleDateString(\"en-US\", {\n month: \"2-digit\",\n day: \"2-digit\",\n year: \"2-digit\",\n })\n : format(d3FormatValueString)(meanValue)\n }</span>`,\n xanchor: \"center\",\n yanchor: \"bottom\",\n showarrow: false,\n font: {\n color: barColor,\n size: 12,\n },\n },\n ]\n : [];\n\n const stdevAnnotation: Partial<Plotly.Annotations>[] =\n statsAnnotations.includes(\"stdev\") && stdevLines && data.length > 0\n ? [\n {\n x: meanValue, // Draw above the mean annotation\n y:\n 1 +\n meanLineRadius +\n (statsAnnotations.includes(\"mean\") ? 0.11 : 0.04),\n yref: \"paper\",\n text: `<span style=\"font-weight:300\">σ </span><span style=\"font-weight:600\">±${\n isDateArray(data)\n ? new Date(stdevValue).toLocaleDateString(\"en-US\", {\n month: \"2-digit\",\n day: \"2-digit\",\n year: \"2-digit\",\n })\n : format(d3FormatValueString)(stdevValue)\n }</span>`,\n xanchor: \"center\",\n yanchor: \"bottom\",\n showarrow: false,\n font: {\n color: barColor,\n size: 12,\n },\n },\n ]\n : [];\n\n const plotlyData: PlotParams[\"data\"] = [\n {\n x: data,\n type: \"histogram\",\n autobinx: false,\n xbins: xBins,\n // nbinsx is valid but not included in the type definition\n //@ts-ignore\n nbinsx: nBins, // Maximum number of bins. Plotly may adjust to make bins \"nicer\".\n marker: {\n color: barColor ?? \"blue\",\n line: {\n color: \"white\",\n width: 0.5,\n },\n },\n hovertemplate: \"[%{x})<br>Count: %{y}<extra></extra>\", // Custom hover text\n },\n unselectedTrace,\n ];\n\n // Need to determine if we should allow extra space at the edge for the bins.\n let displayXAxis = fixedXAxisRange;\n if (fixedXAxisRange && activeBinSize) {\n // First, do we need to do anything at all?\n const isDivisibleByBinSize = isDateArray(data)\n ? (new Date(fixedXAxisRange[1]).getTime() -\n new Date(fixedXAxisRange[0]).getTime()) %\n (typeof activeBinSize === \"number\"\n ? activeBinSize\n : plotlyMToMilliseconds(activeBinSize)) ===\n 0\n : ((fixedXAxisRange[1] as number) - (fixedXAxisRange[0] as number)) %\n (typeof activeBinSize === \"number\"\n ? activeBinSize\n : plotlyMToMilliseconds(activeBinSize)) ===\n 0;\n if (!isDivisibleByBinSize) {\n // Need to extend the axis range to the next bin edge.\n if (!isDateArray(data)) {\n const numberOfBins = Math.ceil(\n ((fixedXAxisRange[1] as number) - (fixedXAxisRange[0] as number)) /\n (activeBinSize as number),\n );\n displayXAxis = [\n fixedXAxisRange[0] as number,\n (fixedXAxisRange[0] as number) +\n numberOfBins * (activeBinSize as number),\n ];\n } else {\n const startTime = new Date(fixedXAxisRange[0]).getTime();\n const endTime = new Date(fixedXAxisRange[1]).getTime();\n const numberOfBins = Math.ceil(\n (endTime - startTime) / (activeBinSize as number),\n );\n displayXAxis = [\n startTime,\n startTime + numberOfBins * (activeBinSize as number),\n ];\n }\n }\n }\n\n const layout: PlotParams[\"layout\"] = {\n title: {\n text: title,\n },\n barmode: \"stack\", // Stack unselected bars on top of selected bars\n showlegend: false,\n autosize: true,\n width: undefined, // Let autosize handle width\n height: undefined, // Let autosize handle height\n margin: {\n l: 50,\n r: 35, // Balance between ensuring the mean annotation doesn't get cut off and having too much margin.\n t: 40 + (title ? 50 : 0), // Add extra top margin if there is a title\n b: 50,\n pad: 4,\n },\n xaxis: {\n title: {\n text: xAxisTitle,\n },\n range: displayXAxis, // Fixed range prevents axis shifting during interaction or data updates\n showgrid: true,\n zeroline: false,\n showline: true,\n mirror: \"ticks\",\n gridcolor: \"#efefef\",\n gridwidth: 0.2,\n zerolinecolor: \"#969696\",\n zerolinewidth: 1,\n linecolor: \"#bababa\",\n linewidth: 1,\n fixedrange: true, // Disable zooming\n ticklabelposition: \"outside\",\n tickformat: isDateArray(data) ? dateTickFormat : d3FormatValueString, // Format ticks for dates\n automargin: true, // Adjust margin if tick labels rotate\n hoverformat: isNumberArray(allData) ? d3FormatValueString : undefined,\n },\n yaxis: {\n title: {\n text: \"Count\",\n standoff: 12, // Add space between title and axis\n },\n automargin: true, // Required for standoff to work properly\n showgrid: true,\n zeroline: false,\n showline: true,\n mirror: \"ticks\",\n gridcolor: \"#efefef\",\n gridwidth: 0.2,\n zerolinecolor: \"#969696\",\n zerolinewidth: 1,\n linecolor: \"#bababa\",\n linewidth: 1,\n fixedrange: true, // Disable zooming\n ticksuffix: \" \", // Add space between y axis and ticks\n },\n bargap: 0.03, // Gap between bars\n dragmode: \"select\", // Enable drag to select\n selectdirection: \"h\", // User can select in horizontal direction only\n shapes: [\n ...allDataMeanLine,\n ...meanLine,\n ...selectedRangeBox,\n ...stdevLines,\n ...allDataStdevLines,\n ], // Add the mean line and selection box\n annotations: [...meanAnnotation, ...stdevAnnotation],\n };\n\n const config: PlotParams[\"config\"] = {\n responsive: true, // Make the plot responsive\n displayModeBar: false, // Hide the mode bar\n displaylogo: false, // Hide the Plotly logo\n scrollZoom: false, // Disable zooming with scroll\n staticPlot: false, // Enable interactivity\n };\n\n const containerStyles: React.CSSProperties = {\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n ...containerStyleOverrides,\n };\n\n // Calculate slider marks.\n const nMarks =\n typeof defaultBinSize === \"number\" ? (defaultBinSize > 99 ? 5 : 10) : 5;\n\n let binSliderMarks: { value: number; label: string }[] | undefined;\n let valueLabelFormat: ((value: number) => string) | undefined; // Used for adjusting how the values appear in the slider tooltip. Only necessary for dates.\n if (defaultBinSize && typeof defaultBinSize === \"number\") {\n if (isDateArray(data)) {\n // For dates, check if the bin size is in minutes, days, or months\n const [unitOfTime, conversionFactor] =\n defaultBinSize >= ONEAVGMONTH\n ? [\"month\", ONEAVGMONTH]\n : defaultBinSize >= ONEDAY\n ? [\"day\", ONEDAY]\n : defaultBinSize >= ONEHOUR\n ? [\"hr\", ONEHOUR]\n : [\"min\", ONEMINUTE];\n\n const binSliderMarkValues =\n unitOfTime === \"month\"\n ? [1, 2, 3, 6, 12]\n .map((n) => n * ONEAVGMONTH)\n .concat([defaultBinSize])\n : unitOfTime === \"day\"\n ? [1, 2, 3, 5, 7, 30]\n .map((n) => n * ONEDAY)\n .concat([defaultBinSize])\n : unitOfTime === \"hr\"\n ? [1, 2, 3, 6, 12, 24]\n .map((n) => n * ONEHOUR)\n .concat([defaultBinSize])\n : [1, 5, 10, 15, 30, 60]\n .map((n) => n * ONEMINUTE)\n .concat([defaultBinSize]);\n const uniqueMarks = [...new Set(binSliderMarkValues)];\n binSliderMarks = uniqueMarks\n .sort((a, b) => a - b)\n .map((val) => ({\n value: val,\n label: `${Math.round(val / conversionFactor)} ${unitOfTime}${\n Math.round(val / conversionFactor) > 1 ? \"s\" : \"\"\n }`,\n }));\n valueLabelFormat = (value: number) => {\n const valueLabel = `${Math.round(\n value / conversionFactor,\n )} ${unitOfTime}${Math.round(value / conversionFactor) > 1 ? \"s\" : \"\"}`;\n return valueLabel;\n };\n } else {\n // The following could get ugly if plotly decides to have an ugly bin width. Will have to be more clever\n // if we see ugly defaultBinSizes in practice.\n const numTens = String(Math.floor(defaultBinSize)).length - 1;\n const binSliderMarkValues =\n defaultBinSize >= 1\n ? [\n ...Array.from(\n {\n length: nMarks,\n },\n (_, i) => (i + 1) * Math.pow(10, numTens),\n ),\n defaultBinSize,\n ]\n : [0.1, 0.5, 1];\n const uniqueMarks = [...new Set(binSliderMarkValues)];\n\n binSliderMarks = uniqueMarks\n .sort((a, b) => a - b)\n .map((val) => ({\n value: val,\n label: `${val}`,\n }));\n valueLabelFormat = (value: number) => {\n return value.toString();\n };\n }\n } else if (defaultBinSize && typeof defaultBinSize === \"string\") {\n // Then we have a non-numeric bin size. It's a plotly M string\n // So we know we're dealing with months.\n const binSliderMarkValues = [1, 2, 3, 6, 12]\n .map((n) => n * ONEAVGMONTH)\n .concat([plotlyMToMilliseconds(defaultBinSize)]);\n\n const uniqueMarks = [...new Set(binSliderMarkValues)];\n binSliderMarks = uniqueMarks\n .sort((a, b) => a - b)\n .map((val) => ({\n value: val,\n label: `${Math.round(val / ONEAVGMONTH)} month${\n Math.round(val / ONEAVGMONTH) > 1 ? \"s\" : \"\"\n }`,\n }));\n valueLabelFormat = (value: number) => {\n const valueLabel = `${Math.round(value / ONEAVGMONTH)} month${\n Math.round(value / ONEAVGMONTH) > 1 ? \"s\" : \"\"\n }`;\n return valueLabel;\n };\n }\n\n return (\n <div\n ref={containerRef}\n className={`plot-container histogram ${plotId}`}\n style={\n {\n \"--selection-color\": selectorsColor,\n ...containerStyles,\n } as React.CSSProperties\n }\n >\n <Suspense fallback={<Loading />}>\n <div\n style={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n }}\n >\n {showBinSizeControls !== \"never\" && (\n <div\n className={`histogram-controls ${\n showBinSizeControls === \"onHover\"\n ? \"show-on-hover\"\n : \"show-always\"\n }`}\n style={{\n position: \"absolute\",\n top: plotAreaPosition\n ? `${plotAreaPosition.top + 5}px`\n : \"44px\",\n left: plotAreaPosition\n ? `${plotAreaPosition.left + 5}px`\n : \"65px\",\n zIndex: 1000,\n display: \"flex\",\n alignItems: isMobile ? \"flex-start\" : \"center\",\n gap: \"8px\",\n flexDirection: isMobile ? \"column\" : \"row\",\n }}\n >\n <IconButton\n onClick={() => setIsControlsExpanded(!isControlsExpanded)}\n size=\"small\"\n sx={{\n backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n color: barColor,\n borderRadius: \"4px\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.15)\",\n border: \"1px solid rgba(0, 0, 0, 0.12)\",\n width: \"32px\",\n height: \"32px\",\n \"&:hover\": {\n backgroundColor: \"rgba(255, 255, 255, 1)\",\n boxShadow: \"0 2px 10px rgba(0,0,0,0.2)\",\n },\n }}\n >\n <SettingsIcon fontSize=\"small\" />\n </IconButton>\n <div\n style={{\n backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n borderRadius: \"4px\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.15)\",\n border: \"1px solid rgba(0, 0, 0, 0.12)\",\n overflow: \"hidden\",\n maxWidth: isControlsExpanded ? \"fit-content\" : \"0\",\n opacity: isControlsExpanded ? 1 : 0,\n paddingLeft: \"6px\",\n transition: isMobile\n ? \"\"\n : \"max-width 0.15s ease-in-out, opacity 0.15s ease-in-out\",\n }}\n >\n <div>\n <PlusMinusControl\n aria-label=\"Bin Size Control\"\n disabled={allData.length < 10}\n value={\n activeBinSize\n ? typeof activeBinSize === \"number\"\n ? activeBinSize\n : plotlyMToMilliseconds(activeBinSize)\n : 0\n }\n steps={\n binSliderMarks\n ? binSliderMarks.map((mark) => mark.value)\n : [1]\n }\n title={isMobile ? \"Res\" : \"Resolution\"}\n showValue={showBinSizeControlValue}\n onChange={(newValue) => {\n const newBinSize = newValue as number;\n setBinSize(newBinSize);\n onBinSizeChange?.(newBinSize);\n }}\n colorOverride={barColor}\n valueLabelFormat={valueLabelFormat}\n titleStylingOverrides={settingsTitleStylingOverrides}\n disabledTooltipText=\"Requires 10 or more data points\"\n />\n </div>\n </div>\n </div>\n )}\n <Plot\n key={`histogram-${plotId || \"default\"}`}\n data={plotlyData}\n layout={layout}\n config={config}\n onSelected={handleSelection}\n onClick={handleClick}\n onDeselect={() => {\n onDeselect();\n setSelectedRange(null); // Remove selected box\n }}\n onUpdate={handlePlotUpdate}\n useResizeHandler={true}\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n transition: \"opacity 0.15s ease-in-out\",\n }}\n />\n </div>\n </Suspense>\n </div>\n );\n};\n\nexport default HistogramPlot;\n","import React, { lazy, Suspense, useRef } from 'react';\nimport { PlotParams } from 'react-plotly.js';\nimport './plotStyles.scss';\nimport { calculateMean } from './Utils';\nimport Loading from './Loading';\n\nconst Plot = lazy(() => import('react-plotly.js'));\n\nexport type RadialHistogramPlotProps = {\n data: number[];\n barColor?: string; // Optional prop to set the color of the bars\n unselectedBarColor?: string; // Optional prop to set the color of unselected bars\n selectorsColor?: string; // Optional prop to set the color of elements in the selection box\n onSelected?: (event: Plotly.PlotSelectionEvent) => void; // Optional handler for when a user clicks and drags to select an area\n onClick?: (event: Plotly.PlotMouseEvent) => void; // Optional handler for click events on the plot\n containerStyleOverrides?: React.CSSProperties; // Optional style override for the container\n barWidth?: number; // Optional bar width for radial histogram\n}\n\nexport const RadialHistogramPlot = (props: RadialHistogramPlotProps) => {\n const {\n data,\n barColor = 'rgb(72, 72, 74)',\n unselectedBarColor = 'rgba(203, 195, 195, 0.88)',\n selectorsColor = 'black',\n onSelected,\n onClick,\n containerStyleOverrides,\n barWidth = 20, // Default bar width in degrees\n } = props;\n\n // Simple ref for container\n const containerRef = useRef<HTMLDivElement>(null);\n\n // TEMPORARY Calculate histogram bins manually to get proper polar coordinates\n // This function should be extracted and used for both the regular and radial histograms.\n\n if (data.length === 0) {\n return null;\n }\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const numBins = Math.ceil(Math.sqrt(data.length)); // Default bin count\n const binWidth = (max - min) / numBins;\n \n // Create bins\n const binCounts = new Array(numBins).fill(0);\n const binCenters = [];\n \n for (let i = 0; i < numBins; i++) {\n binCenters.push(min + (i + 0.5) * binWidth);\n }\n \n // Count values in each bin\n data.forEach(value => {\n const binIndex = Math.min(Math.floor((value - min) / binWidth), numBins - 1);\n binCounts[binIndex]++;\n });\n\n\n const plotlyData: PlotParams['data'] = [\n {\n type: 'barpolar',\n theta: binCenters,\n r: binCounts,\n width: barWidth, // Width of each bar in degrees\n marker: {\n color: barColor,\n line: {\n color: \"white\",\n width: 0.5,\n },\n },\n // @ts-ignore - Not in the type but a valid property. See api https://plotly.com/javascript/reference/barpolar/#barpolar\n unselected: {\n marker: {\n color: unselectedBarColor,\n }\n },\n hovertemplate: '[%{x})<br>Count: %{y}<extra></extra>', // Custom hover text,\n }\n ];\n\n\n const layout: PlotParams['layout'] = {\n autosize: true,\n width: undefined,\n height: undefined,\n margin: {\n l: 50,\n r: 50,\n t: 30,\n b: 50,\n pad: 4\n },\n polar: {\n bgcolor: 'rgba(0,0,0,0)',\n sector: [90, -90],\n angularaxis: {\n tickmode: 'linear',\n tick0: 0,\n dtick: 45, // Show ticks every 45 degrees\n direction: \"counterclockwise\",\n rotation: 0,\n showgrid: true,\n gridcolor: '#efefef',\n gridwidth: 0.5,\n tickfont: {\n size: 10\n }\n },\n radialaxis: {\n title: {\n text: 'Count'\n },\n showgrid: true,\n gridcolor: '#efefef',\n gridwidth: 0.5,\n tickfont: {\n size: 10\n },\n angle: 90, // Position radial axis labels at top\n side: 'counterclockwise',\n }\n },\n dragmode: 'select',\n selectdirection: 'any',\n };\n\n const config: PlotParams['config'] = {\n responsive: true,\n displayModeBar: false,\n displaylogo: false,\n scrollZoom: false,\n staticPlot: false,\n };\n\n const containerStyles: React.CSSProperties = {\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n ...containerStyleOverrides,\n };\n\n return (\n <div \n ref={containerRef}\n className=\"plot-container radial-histogram-container\"\n style={{\n '--selection-color': selectorsColor,\n ...containerStyles\n } as React.CSSProperties}\n >\n <Suspense fallback={<Loading />}>\n <Plot \n data={plotlyData} \n layout={layout} \n config={config}\n onSelected={onSelected}\n onClick={onClick}\n useResizeHandler={true}\n style={{ \n width: \"100%\", \n height: \"100%\",\n display: \"block\"\n }}\n />\n </Suspense>\n </div>\n );\n};\n\nexport default RadialHistogramPlot;\n","import { lazy, Suspense } from \"react\";\nimport Loading from \"./Loading\";\n\nconst Plot = lazy(() => import(\"react-plotly.js\"));\n\nexport type StatsDonutProps = {\n // Define any props you want to pass to the StatsDonut component\n values: number[];\n labels: string[];\n hole: number;\n withCenterLabel?: boolean;\n centerLabel?: string;\n centerValue?: string;\n colors?: string[]; // Array of colors for each slice\n showLegend?: boolean; // Whether to show the legend\n legendPosition?: \"right\" | \"bottom\"; // Position of the legend\n containerStyle?: React.CSSProperties; // Optional style overrides for the container\n};\n\nconst StatsDonut = (props: StatsDonutProps) => {\n const {\n withCenterLabel = false,\n centerLabel,\n centerValue,\n showLegend = true,\n legendPosition = \"right\",\n containerStyle = {},\n } = props;\n\n // Configure legend position based on prop\n const legendConfig =\n legendPosition === \"bottom\"\n ? {\n orientation: \"h\" as const,\n x: 0.5,\n xanchor: \"center\" as const,\n y: -0.15,\n yanchor: \"top\" as const,\n }\n : {\n orientation: \"v\" as const,\n x: 1.05,\n xanchor: \"left\" as const,\n y: 0.5,\n yanchor: \"middle\" as const,\n };\n\n const annotations = withCenterLabel\n ? [\n {\n text: centerLabel || \"\",\n x: 0.5,\n y: 0.55,\n xref: \"paper\" as const,\n yref: \"paper\" as const,\n showarrow: false,\n font: {\n size: 16,\n color: \"#666\",\n },\n },\n {\n text: centerValue || \"\",\n x: 0.5,\n y: 0.45,\n xref: \"paper\" as const,\n yref: \"paper\" as const,\n showarrow: false,\n font: {\n size: 24,\n weight: \"bold\" as const,\n color: \"#000\",\n },\n },\n ]\n : [];\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n minHeight: \"300px\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n ...containerStyle,\n }}\n >\n <Suspense fallback={<Loading />}>\n <Plot\n data={[\n {\n type: \"pie\",\n values: props.values,\n labels: props.labels,\n hole: props.hole,\n marker: {\n colors: props.colors,\n line: {\n color: \"#FFFFFF\",\n width: 2,\n },\n },\n },\n ]}\n layout={{\n showlegend: showLegend,\n annotations,\n autosize: true,\n legend: {\n ...legendConfig,\n font: {\n size: 14,\n },\n },\n margin:\n legendPosition === \"bottom\"\n ? { l: 20, r: 20, t: 20, b: 80 }\n : { l: 20, r: 100, t: 20, b: 20 },\n }}\n style={{\n width: \"100%\",\n height: \"100%\",\n }}\n config={{\n displayModeBar: false,\n responsive: true,\n }}\n useResizeHandler={true}\n />\n </Suspense>\n </div>\n );\n};\n\nexport default StatsDonut;\n","import React, { lazy, Suspense, useRef, useState } from \"react\";\nimport { PlotParams } from \"react-plotly.js\";\nimport { format } from \"d3-format\";\nimport \"./plotStyles.scss\";\nimport Loading from \"./Loading\"; // Import custom loading component\n\nconst Plot = lazy(() => import(\"react-plotly.js\"));\n\ninterface BoxPlotDataSummary {\n lowerWhisker: number;\n q1: number;\n median: number;\n q3: number;\n upperWhisker: number;\n mean?: number; // Optional mean value for annotation\n}\n\nexport interface BoxPlotDataTrace {\n label: string;\n values: number[] | BoxPlotDataSummary; // Either raw values or the pre-computed box plot values (lower wisker, Q1, median, Q3, upper wisker)\n color?: string; // Colors the stroke of the box. The inside is automatically filed with a lighter version.\n fill?: \"auto\" | \"none\"; // Whether to fill the inside of the box with a lighter version of the stroke color. Defaults to 'auto', which means fill if color is provided.\n y?: number; // Optional y position for the box, used for grouped box plots\n}\n\nexport interface BoxPlotProps {\n data: BoxPlotDataTrace[]; // Array of data traces for the box plot\n width?: number;\n height?: number;\n title?: string;\n plotId?: string; // Unique identifier for the plot, used for caching and DOM element IDs\n xAxisTitle?: string;\n yAxisTitle?: string;\n containerStyleOverrides?: React.CSSProperties; // Optional style override for the container\n extraLayoutConfig?: Partial<PlotParams[\"layout\"]>; // Optional extra layout configuration to merge with defaults\n}\n\nconst BoxPlot = (props: BoxPlotProps) => {\n const {\n data,\n width = 600,\n height = 400,\n title = \"Box Plot\",\n xAxisTitle,\n yAxisTitle,\n containerStyleOverrides,\n plotId = \"boxplot\",\n extraLayoutConfig = {},\n } = props;\n\n // Ref for plot container\n const containerRef = useRef<HTMLDivElement>(null);\n\n // State for custom tooltip\n const [tooltip, setTooltip] = useState<{\n visible: boolean;\n x: number;\n y: number;\n content: string;\n color: string;\n }>({ visible: false, x: 0, y: 0, content: \"\", color: \"#1f77b4\" });\n\n const plotlyData: PlotParams[\"data\"] = data.map((trace) => {\n const boxDefinition = isBoxPlotDataSummary(trace.values)\n ? {\n y0: trace.y !== undefined ? trace.y : [trace.label], // Position the box at this y-value\n lowerfence: [trace.values.lowerWhisker],\n q1: [trace.values.q1],\n median: [trace.values.median],\n q3: [trace.values.q3],\n upperfence: [trace.values.upperWhisker],\n mean: trace.values.mean ? [trace.values.mean] : undefined,\n }\n : {\n x: trace.values,\n y0: trace.y !== undefined ? trace.y : undefined,\n }; // Values map to x because the boxplot is horizontal\n\n return {\n type: \"box\" as const,\n orientation: \"h\" as const,\n name: trace.label,\n fillcolor: trace.fill === \"none\" ? \"rgba(255, 255, 255, 0)\" : undefined,\n line: {\n color: trace.color || \"#1f77b4\", // Default to Plotly's default blue if no color provided\n },\n boxpoints: false, // Don't show individual points.\n hoverinfo: \"none\", // Disable default hover\n ...boxDefinition,\n } as any;\n });\n\n // Handler for hover events\n const handleHover = (event: any) => {\n console.log(\"Hover event:\", event); // Debugging log to inspect the event object\n if (!event.points || event.points.length === 0) return;\n\n const point = event.points[0];\n const traceIndex = point.curveNumber;\n const trace = data[traceIndex];\n\n if (!trace) return;\n\n let content = `<div style=\"font-weight: bold; margin-bottom: 8px;\">${trace.label}</div>`;\n\n // Note, plotly calculates whisker but then calls it a fence! So we need to tell the user it's a whisker\n if (isBoxPlotDataSummary(trace.values)) {\n content += `<div>Upper Whisker: ${point.upperfence ?? 0}</div>`;\n content += `<div>Third Quartile: ${point.q3 ?? 0}</div>`;\n content += `<div>Median: ${point.median ?? 0}</div>`;\n content += `<div>First Quartile: ${point.q1 ?? 0}</div>`;\n content += `<div>Lower Whisker: ${point.lowerfence ?? 0}</div>`;\n if (trace.values.mean !== undefined) {\n content += `<div>Mean: ${trace.values.mean}</div>`;\n }\n } else {\n content += `<div>Upper Whisker: ${event.points[4].x.toFixed(1) ?? 0}</div>`;\n content += `<div>Third Quartile: ${event.points[3].x.toFixed(1) ?? 0}</div>`;\n content += `<div>Median: ${event.points[2].x.toFixed(1) ?? 0}</div>`;\n content += `<div>First Quartile: ${event.points[1].x.toFixed(1) ?? 0}</div>`;\n content += `<div>Lower Whisker: ${event.points[0].x.toFixed(1) ?? 0}</div>`;\n }\n\n setTooltip({\n visible: true,\n x: event.event.clientX,\n y: event.event.clientY,\n content,\n color: trace.color || \"#1f77b4\",\n });\n };\n\n // Handler for unhover events\n const handleUnhover = () => {\n setTooltip({ visible: false, x: 0, y: 0, content: \"\", color: \"#1f77b4\" });\n };\n\n const layout: PlotParams[\"layout\"] = {\n ...extraLayoutConfig,\n title: {\n text: title,\n },\n showlegend: false,\n autosize: true,\n width: undefined, // Let autosize handle width\n height: undefined, // Let autosize handle height\n margin: {\n l: 50,\n r: 35, // Balance between ensuring the mean annotation doesn't get cut off and having too much margin.\n t: 50,\n b: 50,\n pad: 4,\n ...extraLayoutConfig.margin, // Merge in any extra margin config provided via props\n },\n xaxis: {\n title: {\n text: xAxisTitle,\n },\n // range: displayXAxis, // Fixed range prevents axis shifting during interaction or data updates\n showgrid: true,\n zeroline: false,\n showline: true,\n mirror: \"ticks\",\n gridcolor: \"#efefef\",\n gridwidth: 0.2,\n zerolinecolor: \"#969696\",\n zerolinewidth: 1,\n linecolor: \"#bababa\",\n linewidth: 1,\n fixedrange: true, // Disable zooming\n ticklabelposition: \"outside\",\n // tickformat: isDateArray(data) ? dateTickFormat : d3FormatValueString, // Format ticks for dates\n // automargin: true, // Adjust margin if tick labels rotate\n // hoverformat: isNumberArray(allData) ? d3FormatValueString : undefined,\n },\n yaxis: {\n title: {\n text: yAxisTitle || \"\", // Set default to empty string to prevent Plotly from adding its own default title\n standoff: 12, // Add space between title and axis\n },\n automargin: true, // Required for standoff to work properly\n showgrid: true,\n zeroline: false,\n showline: true,\n mirror: \"ticks\",\n gridcolor: \"#efefef\",\n gridwidth: 0.2,\n zerolinecolor: \"#969696\",\n zerolinewidth: 1,\n linecolor: \"#bababa\",\n linewidth: 1,\n fixedrange: true, // Disable zooming\n tickcolor: \"white\", // Hide default ticks since we're using them for group labels in the paired comparisons plot\n ticklen: 10, // Give ticks a length to push labels away from y axis.\n ticksuffix: \" \", // Add space between y axis and ticks\n ...extraLayoutConfig.yaxis, // Merge in any extra y-axis config provided via props\n },\n };\n\n const config: PlotParams[\"config\"] = {\n responsive: true, // Make the plot responsive\n displayModeBar: false, // Hide the mode bar\n displaylogo: false, // Hide the Plotly logo\n scrollZoom: false, // Disable zooming with scroll\n staticPlot: false, // Enable interactivity\n };\n\n const containerStyles: React.CSSProperties = {\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n ...containerStyleOverrides,\n };\n\n return (\n <div\n ref={containerRef}\n // className={`plot-container ${plotId}`}\n style={\n {\n ...containerStyles,\n } as React.CSSProperties\n }\n >\n <Suspense fallback={<Loading />}>\n <div\n style={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n }}\n >\n <Plot\n key={`boxplot-${plotId || \"default\"}`}\n data={plotlyData}\n layout={layout}\n config={config}\n useResizeHandler={true}\n // onHover={handleHover}\n // onUnhover={handleUnhover}\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n transition: \"opacity 0.15s ease-in-out\",\n }}\n />\n {tooltip.visible && (\n <div\n style={{\n position: \"fixed\",\n left: tooltip.x + 10,\n top: tooltip.y - 10,\n backgroundColor: \"white\",\n color: \"#333\",\n padding: \"8px 12px\",\n borderRadius: \"4px\",\n fontSize: \"13px\",\n lineHeight: \"1.5\",\n pointerEvents: \"none\",\n zIndex: 1000,\n whiteSpace: \"nowrap\",\n boxShadow: \"0 2px 4px rgba(0,0,0,0.2)\",\n border: `2px solid ${tooltip.color}`,\n fontFamily: '\"Open Sans\", verdana, arial, sans-serif',\n }}\n dangerouslySetInnerHTML={{ __html: tooltip.content }}\n />\n )}\n </div>\n </Suspense>\n </div>\n );\n};\n\nexport function isBoxPlotDataSummary(value: any): value is BoxPlotDataSummary {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof value.lowerWhisker === \"number\" &&\n typeof value.q1 === \"number\" &&\n typeof value.median === \"number\" &&\n typeof value.q3 === \"number\" &&\n typeof value.upperWhisker === \"number\" &&\n (value.mean === undefined || typeof value.mean === \"number\")\n );\n}\n\nexport default BoxPlot;\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\n\nexport type BoxProps = {\n color: string;\n boxStyle: \"filled\" | \"outlined\" | \"shaded\";\n};\n\nexport type LegendItemProps = {\n label: string;\n color: string;\n boxStyle: \"filled\" | \"outlined\" | \"shaded\";\n};\n\nconst BOX_SIZE = 15;\n\nconst SVGBoxWithLine = (props: BoxProps) => {\n const boxWidth = 35;\n const boxHeight = 15;\n const lineWidth = boxWidth * 2; // 90% width\n const lineY = boxHeight / 2; // Vertical center\n\n return (\n <svg\n width={lineWidth}\n height={boxHeight}\n viewBox={`0 0 ${lineWidth + 3} ${boxHeight + 3}`}\n >\n {/* The Horizontal Line (left half)*/}\n <line\n x1={0} // Start X (centered)\n y1={lineY} // Start Y (middle)\n x2={(lineWidth - boxWidth) / 2} // End at the left edge of the box\n y2={lineY} // End Y (middle)\n stroke={props.color}\n strokeWidth=\"2\"\n />\n {/* The Horizontal Line (right half)*/}\n <line\n x1={(lineWidth + boxWidth) / 2} // Start at the right edge of the box\n y1={lineY} // Start Y (middle)\n x2={lineWidth} // End X (centered)\n y2={lineY} // End Y (middle)\n stroke={props.color}\n strokeWidth=\"2\"\n />\n {/* End bits */}\n <line\n x1={0}\n y1={lineY - 5}\n x2={0}\n y2={lineY + 5}\n stroke={props.color}\n strokeWidth=\"2\"\n />\n <line\n x1={lineWidth}\n y1={lineY - 5}\n x2={lineWidth}\n y2={lineY + 5}\n stroke={props.color}\n strokeWidth=\"2\"\n />\n {/* The Box (Rectangle) */}\n <rect\n x={(lineWidth - boxWidth) / 2} // Center the box horizontally\n y=\"0\"\n width={boxWidth}\n height={boxHeight}\n fill={props.boxStyle !== \"outlined\" ? props.color : \"none\"}\n opacity={props.boxStyle === \"shaded\" ? 0.3 : 1}\n />\n {/* Box outline */}\n <rect\n x={(lineWidth - boxWidth) / 2} // Center the box horizontally\n y=\"0\"\n width={boxWidth}\n height={boxHeight}\n stroke={props.color}\n strokeWidth=\"2\"\n fill=\"none\"\n />\n {/* Fake median line */}\n <line\n x1={(lineWidth - boxWidth) / 2 + boxWidth * 0.5}\n y1={0}\n x2={(lineWidth - boxWidth) / 2 + boxWidth * 0.5}\n y2={boxHeight}\n stroke={props.color}\n strokeWidth=\"2\"\n />\n </svg>\n );\n};\n\n// export const OutlinedBox = (props: BoxProps) => {\n// return (\n// <Box\n// border={`2px solid ${props.color}`}\n// width={BOX_SIZE}\n// height={BOX_SIZE}\n// mr={1}\n// />\n// );\n// };\n\n// export const FilledBox = (props: BoxProps) => {\n// return (\n// <Box\n// width={BOX_SIZE}\n// height={BOX_SIZE}\n// sx={{\n// backgroundColor: props.color,\n// border: `2px solid ${props.color}`,\n// }}\n// mr={1}\n// />\n// );\n// };\n\n// export const ShadedBox = (props: BoxProps) => {\n// return (\n// <Box\n// width={BOX_SIZE}\n// height={BOX_SIZE}\n// sx={{\n// border: `2px solid ${props.color}`,\n// position: \"relative\",\n// \"&::before\": {\n// content: '\"\"',\n// position: \"absolute\",\n// top: 0,\n// left: 0,\n// right: 0,\n// bottom: 0,\n// backgroundColor: `${props.color}`,\n// opacity: 0.5,\n// },\n// }}\n// mr={1}\n// />\n// );\n// };\n\n// export const LegendItem = (props: LegendItemProps) => {\n// return (\n// <Box\n// key={props.label}\n// display=\"flex\"\n// alignItems=\"center\"\n// mr={1}\n// sx={{\n// fontFamily: \"Open Sans, verdana, arial, sans-serif\",\n// }}\n// >\n// {props.boxStyle === \"shaded\" ? (\n// <ShadedBox color={props.color} />\n// ) : props.boxStyle === \"outlined\" ? (\n// <OutlinedBox color={props.color} />\n// ) : (\n// <FilledBox color={props.color} />\n// )}\n// {props.label}\n// </Box>\n// );\n// };\n\nexport const LegendBoxPlotItem = (props: LegendItemProps) => {\n return (\n <Box\n key={props.label}\n display=\"flex\"\n alignItems=\"center\"\n mr={4}\n sx={{\n fontFamily: \"Open Sans, verdana, arial, sans-serif\",\n }}\n >\n <SVGBoxWithLine color={props.color} boxStyle={props.boxStyle} />\n {props.label}\n </Box>\n );\n};\n","import React, { lazy, Suspense, useRef } from \"react\";\nimport { PlotParams } from \"react-plotly.js\";\nimport \"./plotStyles.scss\";\nimport Loading from \"./Loading\"; // Import custom loading component\nimport BoxPlot, { BoxPlotDataTrace, isBoxPlotDataSummary } from \"./BoxPlot\";\nimport { Box } from \"@mui/material\";\nimport { LegendBoxPlotItem } from \"./LegendUtils\";\nimport { computeMedian, computeQuartile } from \"./Utils\";\nimport { isArray } from \"util\";\n\n// top level a group + color\n// Then each group has two (or more?) boxes.\nexport interface PairedComparisonsBoxPlotGroup {\n groupLabel: string; // Label for the group of boxes (e.g. \"Treatment A vs Treatment B\")\n boxes: BoxPlotDataTrace[]; // Array of box data traces for this group (e.g. one for Treatment A and one for Treatment B)\n color?: string; // Optional color to apply to all boxes in this group for visual consistency\n}\n\nexport interface PairedComparisonsBoxPlotProps {\n groups: PairedComparisonsBoxPlotGroup[]; // Array of groups to display in the plot\n pairLabels: string[]; // Labels for the pairs within each group (e.g. [\"Treatment A\", \"Treatment B\"])\n width?: number;\n height?: number;\n title?: string;\n xAxisTitle?: string;\n yAxisTitle?: string;\n containerStyleOverrides?: React.CSSProperties; // Optional style override for the container\n showLegend?: boolean; // Whether to show the legend\n plotId?: string; // Unique identifier for the plot, used for caching and DOM element IDs\n}\n\n// This component takes grouped data and transforms it for displaying with the BoxPlot component.\n// The highest level is the group (ex, rating bracket), and then within each group are individual boxes (ex, mine vs others' throws within that rating bracket)\n// Importantly, this component is currently optimized for two boxes per group. It could be extended in the future to allow for more within-group boxes if useful.\nconst PairedComparisonsBoxPlot = (props: PairedComparisonsBoxPlotProps) => {\n const {\n groups,\n pairLabels,\n width = 600,\n height = 400,\n title = \"\",\n xAxisTitle,\n yAxisTitle,\n containerStyleOverrides,\n showLegend = true,\n plotId = \"paired-comparisons-boxplot\",\n } = props;\n\n // Transform the grouped data into an array for BoxPlot\n const boxPlotData: BoxPlotDataTrace[] = groups.flatMap(\n (group, groupIndex) => {\n const groupYPosition = groupIndex; // Position the group on the y-axis based on its index\n const groupColor = group.color || \"orange\";\n return group.boxes.map((box, boxIndex) => ({\n ...box,\n // color: box.color || groupColor, // Use box color if provided, otherwise use group color\n color: \"#75757f\",\n fill: boxIndex % 2 === 0 ? \"none\" : \"auto\", // Alternate fill for visual distinction between pairs\n y: groupYPosition + 0.15 + (boxIndex - 1) * 0.3,\n }));\n },\n );\n\n // We have to construct nice ticks. We can position them with the group indices.\n const tickvals = groups.map((_, index) => index);\n const ticktext = groups.map((group) => group.groupLabel);\n\n // Draw some gray rectangles to live behind the boxes to help separate the groups\n const separatorShapes: Partial<Plotly.Shape>[] = groups.map(\n (group, groupIndex) => {\n return {\n type: \"rect\",\n x0: 0,\n x1: 1,\n xref: \"paper\",\n y0: groupIndex - 0.5,\n y1: groupIndex + 0.5,\n yref: \"y\",\n fillcolor: groupIndex % 2 === 0 ? \"#ffffff\" : \"#f8f8f8\",\n opacity: 0.05,\n layer: \"below\",\n line: {\n width: 0,\n },\n };\n },\n );\n\n const groupAnnotations: Partial<Plotly.Shape>[] = groups.map(\n (group, groupIndex) => ({\n type: \"line\",\n yref: \"y\",\n xref: \"paper\",\n x0: -0.01,\n x1: -0.01,\n y0: groupIndex - 0.4, // Align with the center of the group\n y1: groupIndex + 0.4,\n line: {\n color: group.color || \"orange\",\n width: 7,\n },\n }),\n );\n\n const differenceAnnotations: Partial<Plotly.Annotations>[] = [];\n const differenceBetweenMediansLines: Partial<Plotly.Shape>[] = [];\n\n groups.forEach((group, groupIndex) => {\n // console.log(group.boxes);\n if (\n (!isBoxPlotDataSummary(group.boxes[0].values) &&\n group.boxes[0].values.length == 0) ||\n (!isBoxPlotDataSummary(group.boxes[1].values) &&\n group.boxes[1].values.length == 0)\n ) {\n return; // Don't show an annotation if we don't have data for both boxes\n }\n const medianA = isBoxPlotDataSummary(group.boxes[0].values)\n ? group.boxes[0].values.median\n : computeMedian(group.boxes[0].values as number[]);\n const medianB = isBoxPlotDataSummary(group.boxes[1].values)\n ? group.boxes[1].values.median\n : computeMedian(group.boxes[1].values as number[]);\n const q1A = isBoxPlotDataSummary(group.boxes[0].values)\n ? group.boxes[0].values.q1\n : computeQuartile(group.boxes[0].values as number[], 1);\n const q3A = isBoxPlotDataSummary(group.boxes[0].values)\n ? group.boxes[0].values.q3\n : computeQuartile(group.boxes[0].values as number[], 3);\n const q1B = isBoxPlotDataSummary(group.boxes[1].values)\n ? group.boxes[1].values.q1\n : computeQuartile(group.boxes[1].values as number[], 1);\n const q3B = isBoxPlotDataSummary(group.boxes[1].values)\n ? group.boxes[1].values.q3\n : computeQuartile(group.boxes[1].values as number[], 3);\n\n const differenceBetweenMedians = medianB - medianA;\n // If we have the quartiles for the first box, we can determine if the second box's median is inside or outside the box\n const annotationColor = isBoxPlotDataSummary(group.boxes[0].values)\n ? q3B < q1A || q1B > q3A\n ? \"red\"\n : medianB < q1A || medianB > q3A\n ? \"orange\"\n : \"gray\"\n : \"gray\";\n if (annotationColor === \"gray\") {\n return; // Don't show an annotation if the medians are close enough that they overlap in the boxes\n }\n differenceAnnotations.push({\n yref: \"y\",\n xref: \"x\",\n x: medianB > medianA ? medianB : medianA, // Position the annotation at the larger median\n y: groupIndex, // Align with the center of the group\n text: ` ${differenceBetweenMedians.toFixed(1)}`,\n showarrow: false,\n xanchor: \"left\",\n align: \"left\",\n font: {\n size: 12,\n color: annotationColor,\n style: \"italic\",\n },\n });\n differenceBetweenMediansLines.push({\n type: \"line\",\n x0: medianA,\n x1: medianB,\n xref: \"x\",\n y0: groupIndex,\n y1: groupIndex,\n yref: \"y\",\n line: {\n color: annotationColor,\n width: 2,\n },\n });\n differenceBetweenMediansLines.push({\n type: \"line\",\n x0: medianA,\n x1: medianA,\n xref: \"x\",\n y0: groupIndex - 0.05,\n y1: groupIndex,\n yref: \"y\",\n line: {\n color: annotationColor,\n width: 2,\n },\n });\n differenceBetweenMediansLines.push({\n type: \"line\",\n x0: medianB,\n x1: medianB,\n xref: \"x\",\n y0: groupIndex,\n y1: groupIndex + 0.05,\n yref: \"y\",\n line: {\n color: annotationColor,\n width: 2,\n },\n });\n });\n\n const extraLayoutConfig: Partial<PlotParams[\"layout\"]> = {\n yaxis: {\n type: \"linear\", // Use linear axis for numeric positioning of boxes\n tickmode: \"array\",\n tickvals,\n ticktext,\n range: [-0.5, groups.length - 0.5], // Add some padding to the y-axis range to accommodate the boxes\n tickcolor: \"#ffffff\",\n showgrid: false,\n },\n margin: {\n t: 5,\n r: 50,\n },\n shapes: [\n ...separatorShapes,\n ...differenceBetweenMediansLines,\n ...groupAnnotations,\n ],\n annotations: differenceAnnotations,\n };\n\n const legendNode = (\n <Box display=\"flex\" justifyContent=\"flex-end\" mb={2}>\n {/* Show the box styles */}\n <LegendBoxPlotItem\n label={pairLabels[0]}\n color=\"#626280\"\n boxStyle=\"shaded\"\n />\n <LegendBoxPlotItem\n label={pairLabels[1]}\n color=\"#626280\"\n boxStyle=\"outlined\"\n />\n </Box>\n );\n\n const containerStyles: React.CSSProperties = {\n width: width,\n height: height,\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 0,\n ...containerStyleOverrides,\n };\n\n return (\n <div\n style={\n {\n ...containerStyles,\n } as React.CSSProperties\n }\n >\n {showLegend && legendNode}\n <BoxPlot\n data={boxPlotData}\n width={width}\n height={height}\n title={title}\n xAxisTitle={xAxisTitle}\n yAxisTitle={yAxisTitle}\n extraLayoutConfig={extraLayoutConfig}\n containerStyleOverrides={containerStyleOverrides}\n plotId={`${plotId}-boxplot`}\n />\n </div>\n );\n};\n\nexport default PairedComparisonsBoxPlot;\n","import { lazy, Suspense, useRef, useState } from \"react\";\nimport { PlotParams } from \"react-plotly.js\";\nimport Loading from \"./Loading\";\nimport { colorToRGBA } from \"./Utils\";\nimport Box from \"@mui/material/Box\";\n\nconst Plot = lazy(() => import(\"react-plotly.js\"));\n\ntype SummaryComparisonData = {\n comparedMedian?: number; // The mean value for the compared group, for example a player's average\n summarizedMin?: number; // The minimum value in the summarized data, for example q1 of all playeres in the same bracket\n summarizedMax?: number; // The maximum value in the summarized data, for example q3 of all players in the same bracket\n summarizedMean?: number; // The mean value in the summarized data, for example the average of all players in the same bracket\n};\n\ntype SummaryComparisonGroup = {\n groupLabel: string; // Label for the group (e.g. \"Rating 1500-1600\")\n data: SummaryComparisonData; // The data for this group\n color?: string; // Optional color for the group's box\n};\n\nexport type SummaryComparisonPlotProps = {\n groups: SummaryComparisonGroup[];\n width?: number;\n height?: number;\n title?: string;\n xAxisTitle?: string;\n yAxisTitle?: string;\n containerStyleOverrides?: React.CSSProperties; // Optional style override for the container\n plotId?: string; // Unique identifier for the plot, used for caching and DOM element IDs\n tooltipPosition?: \"left\" | \"right\"; // Optional prop to specify tooltip position relative to the line/marker\n startXAxisAtZero?: boolean; // Optional prop to specify whether the x-axis should start at zero. Default true.\n};\n\nconst SummaryComparisonPlot = (props: SummaryComparisonPlotProps) => {\n const {\n groups,\n height = 250,\n title = \"\",\n xAxisTitle,\n yAxisTitle,\n containerStyleOverrides,\n plotId = \"summary-comparison-plot\",\n tooltipPosition = \"right\",\n startXAxisAtZero = true,\n } = props;\n\n // Ref for plot container\n const containerRef = useRef<HTMLDivElement>(null);\n\n // State for custom tooltip\n const [tooltip, setTooltip] = useState<{\n visible: boolean;\n x: number;\n y: number;\n content: string;\n color: string;\n }>({\n visible: false,\n x: 0,\n y: 0,\n content: \"\",\n color: \"#1f77b4\",\n });\n\n const handleHover = (event: any) => {\n if (!event.points || event.points.length === 0) return;\n const point = event.points[0];\n const eventData = point.data;\n\n if (!eventData) return;\n\n // Use the name of the trace to identify the group, then find the corresponding data for that group to display in the tooltip\n // This way we don't have to worry if we hovered over the line or the marker, we can show the same tooltip content based on the group\n const groupName = eventData.name || \"Unknown Group\";\n const groupData = groups.find((g) => g.groupLabel === groupName)?.data;\n\n if (!groupData) return;\n let content = `<div style=\"margin-bottom: 8px;\">`;\n let contentColor = \"orange\";\n let tooltipX = event.event.clientX;\n let tooltipY = event.event.clientY;\n\n content += `<strong>${groupName}</strong><br/>`;\n const summarizedMinText = groupData.summarizedMin\n ? groupData.summarizedMin.toFixed(2)\n : \"NA\";\n const summarizedMaxText = groupData.summarizedMax\n ? groupData.summarizedMax.toFixed(2)\n : \"NA\";\n const comparedMedianText =\n groupData.comparedMedian !== undefined\n ? groupData.comparedMedian.toFixed(2)\n : \"NA\";\n content += `\n <table style=\"width: 100%; margin-top: 4px;\">\n <tr>\n <td style=\"text-align: left; padding: 2px 18px 2px 0;\">Population P25:</td>\n <td style=\"text-align: right; padding: 2px 0;\">${summarizedMinText}</td>\n </tr>\n <tr>\n <td style=\"text-align: left; padding: 2px 18px 2px 0;\">Population P75:</td>\n <td style=\"text-align: right; padding: 2px 0;\">${summarizedMaxText}</td>\n </tr>\n <tr>\n <td style=\"text-align: left; padding: 2px 18px 2px 0;\">My Median:</td>\n <td style=\"text-align: right; padding: 2px 0;\">${comparedMedianText}</td>\n </tr>\n </table>\n `;\n\n contentColor = eventData.line\n ? eventData.line.color\n : eventData.marker.color || contentColor;\n\n // Position tooltip at the end of the line (75th percentile)\n // Use the xaxis d2p method to convert data coordinate to pixel coordinate\n if (point.xaxis && typeof point.xaxis.d2p === \"function\") {\n const pixelX =\n tooltipPosition === \"right\"\n ? point.xaxis.d2p(groupData.summarizedMax)\n : point.xaxis.d2p(groupData.summarizedMin);\n const pixelY = point.yaxis.d2p(eventData.y[0]); // Use the y coordinate of the line for vertical positioning\n const containerRect = containerRef.current?.getBoundingClientRect();\n\n if (containerRect) {\n tooltipX = pixelX + point.xaxis._offset + containerRect.left; // Adjust for x-axis offset and container position\n tooltipY = pixelY + point.yaxis._offset + containerRect.top; // Adjust for y-axis offset and container position\n }\n }\n\n setTooltip({\n visible: true,\n x: tooltipX,\n y: tooltipY,\n content,\n color: contentColor,\n });\n };\n\n const handleUnhover = () => {\n setTooltip((prev) => ({ ...prev, visible: false }));\n };\n\n // Transform the data into a format suitable for a plotly scatterplot\n const plotlyData: PlotParams[\"data\"] = groups.flatMap((group, groupIndex) => {\n const traces: PlotParams[\"data\"] = [];\n\n if (\n group.data.summarizedMin !== undefined &&\n group.data.summarizedMax !== undefined\n ) {\n traces.push({\n type: \"scatter\" as const,\n mode: \"lines\" as const,\n name: group.groupLabel,\n x: [group.data.summarizedMin, group.data.summarizedMax],\n y: [0 + groupIndex * 0.1, 0 + groupIndex * 0.1],\n line: {\n color: colorToRGBA(group.color || \"orange\", 1),\n width: 2,\n },\n showlegend: false,\n hoverinfo: \"none\",\n });\n }\n\n if (group.data.comparedMedian !== undefined) {\n traces.push({\n type: \"scatter\" as const,\n mode: \"markers\" as const,\n name: group.groupLabel,\n x: [group.data.comparedMedian],\n y: [0 + groupIndex * 0.1],\n marker: {\n color: group.color || \"orange\",\n size: 10,\n symbol: \"circle\",\n line: {\n color: \"white\",\n width: 1,\n },\n },\n showlegend: false,\n hoverinfo: \"none\",\n });\n }\n\n return traces;\n });\n\n const xRangeMin = groups.reduce(\n (min, group) =>\n Math.min(\n min,\n group.data.summarizedMin ?? Infinity,\n group.data.comparedMedian ?? Infinity,\n ),\n 0,\n );\n const xRangeMax = groups.reduce(\n (max, group) =>\n Math.max(\n max,\n group.data.summarizedMax ?? -Infinity,\n group.data.comparedMedian ?? -Infinity,\n ),\n 0,\n );\n\n const layout: Partial<PlotParams[\"layout\"]> = {\n width: undefined,\n height: height,\n autosize: true,\n margin: {\n l: 130,\n r: 35, // Balance between ensuring the mean annotation doesn't get cut off and having too much margin.\n t: title ? 50 : 5,\n b: 50,\n pad: 4,\n // ...extraLayoutConfig.margin, // Merge in any extra margin config provided via props\n },\n title: {\n text: title,\n font: {\n size: 16,\n },\n xref: \"paper\",\n x: 0.5,\n xanchor: \"center\",\n },\n xaxis: {\n title: {\n text: xAxisTitle,\n font: {\n size: 14,\n },\n },\n showgrid: true,\n showline: true,\n fixedrange: true, // Disable zooming\n zeroline: false,\n range: [\n startXAxisAtZero ? 0 : xRangeMin - (xRangeMax - xRangeMin) * 0.3,\n xRangeMax + (xRangeMax - xRangeMin) * 0.3,\n ], // Add padding to the x-axis range\n mirror: true,\n gridcolor: \"#efefef\",\n gridwidth: 0.2,\n zerolinecolor: \"#969696\",\n zerolinewidth: 1,\n linecolor: \"#bababa\",\n linewidth: 1,\n },\n yaxis: {\n mirror: \"ticks\",\n gridcolor: \"#efefef\",\n gridwidth: 0.2,\n zerolinecolor: \"#969696\",\n zerolinewidth: 1,\n linecolor: \"#bababa\",\n linewidth: 1,\n showticklabels: true,\n showgrid: false,\n showline: true,\n zeroline: false,\n fixedrange: true, // Disable zooming and pan interactions\n tickmode: \"array\",\n tickvals: groups.map((_, index) => 0 + index * 0.1),\n ticktext: groups.map((group) => group.groupLabel),\n ticks: \"inside\",\n range: [-0.08, 0.08 + (groups.length - 1) * 0.1], // Add padding around the groups\n automargin: true,\n tickcolor: \"white\", // Hide default ticks since we're using them for group labels in the paired comparisons plot\n },\n hovermode: \"y\",\n };\n\n const containerStyles: React.CSSProperties = {\n width: \"100%\",\n height: height,\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 0,\n ...containerStyleOverrides,\n };\n\n const config: PlotParams[\"config\"] = {\n responsive: true, // Enable responsive mode for width\n displayModeBar: false, // Hide the mode bar\n displaylogo: false, // Hide the Plotly logo\n scrollZoom: false, // Disable zooming with scroll\n staticPlot: false, // Enable interactivity\n };\n\n return (\n <div\n ref={containerRef}\n // className={`plot-container ${plotId}`}\n style={\n {\n ...containerStyles,\n } as React.CSSProperties\n }\n >\n <Suspense fallback={<Loading />}>\n <div\n style={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n }}\n >\n <Plot\n key={`boxplot-${plotId || \"default\"}`}\n data={plotlyData}\n layout={layout}\n config={config}\n useResizeHandler={true}\n onHover={handleHover}\n onUnhover={handleUnhover}\n style={{\n width: \"100%\",\n height: `${height}px`,\n display: \"block\",\n transition: \"opacity 0.15s ease-in-out\",\n }}\n />\n {tooltip.visible && (\n <div\n style={{\n position: \"fixed\",\n left: tooltipPosition === \"right\" ? tooltip.x + 10 : undefined,\n right:\n tooltipPosition === \"left\"\n ? window.innerWidth - tooltip.x + 10 // Measured in pixels from the right edge of the screen\n : undefined,\n transform:\n tooltipPosition === \"right\" ? \"translateX(10px)\" : undefined,\n top: tooltip.y - 18,\n backgroundColor: \"rgba(255, 255, 255, 0.8)\",\n borderRadius: \"4px\",\n color: \"#333\",\n padding: \"8px 12px\",\n fontSize: \"13px\",\n lineHeight: \"1.5\",\n pointerEvents: \"none\",\n zIndex: 1000,\n whiteSpace: \"nowrap\",\n boxShadow: \"0 2px 4px rgba(0,0,0,0.2)\",\n borderLeft: `7px solid ${tooltip.color}`,\n fontFamily: '\"Open Sans\", verdana, arial, sans-serif',\n }}\n dangerouslySetInnerHTML={{ __html: tooltip.content }}\n />\n )}\n </div>\n </Suspense>\n </div>\n );\n};\n\nexport default SummaryComparisonPlot;\n\nexport const SummaryComparisonPlotLegend = ({\n comparedDataLabel,\n summarizedDataLabel,\n color = \"orange\",\n}: {\n comparedDataLabel: string;\n summarizedDataLabel: string;\n color?: string;\n}) => {\n return (\n <div\n style={{\n display: \"flex\",\n gap: \"20px\",\n alignItems: \"center\",\n flexDirection: \"row\",\n }}\n >\n <div style={{ display: \"flex\", gap: \"5px\", alignItems: \"center\" }}>\n <Box\n width={13}\n height={13}\n sx={{\n backgroundColor: color,\n borderRadius: \"20px\",\n }}\n />\n <span>{comparedDataLabel}</span>\n </div>\n <div style={{ display: \"flex\", gap: \"5px\", alignItems: \"center\" }}>\n <Box width={30} height={3} sx={{ backgroundColor: color }} />\n <span>{summarizedDataLabel}</span>\n </div>\n </div>\n );\n};\n","import React, { lazy, Suspense, useRef, useState } from \"react\";\nimport { PlotParams } from \"react-plotly.js\";\nimport \"./plotStyles.scss\";\nimport Loading from \"./Loading\"; // Import custom loading component\n\nconst Plot = lazy(() => import(\"react-plotly.js\"));\n\nexport interface LinePlotDataTrace {\n x: number[] | Date[]; // Either raw values or the pre-computed box plot values (lower wisker, Q1, median, Q3, upper wisker)\n y: number[]; // Optional y position for the box, used for grouped box plots\n label?: string;\n color?: string; // Colors the stroke of the box. The inside is automatically filed with a lighter version.\n}\n\nexport interface LinePlotProps {\n data: LinePlotDataTrace[]; // Array of data traces for the box plot\n width?: number;\n height?: number;\n title?: string;\n plotId?: string; // Unique identifier for the plot, used for caching and DOM element IDs\n xAxisTitle?: string;\n yAxisTitle?: string;\n containerStyleOverrides?: React.CSSProperties; // Optional style override for the container\n extraLayoutConfig?: Partial<PlotParams[\"layout\"]>; // Optional extra layout configuration to merge with defaults\n additionalContextTrace?: Partial<PlotParams[\"data\"]>[0]; // Optional additional trace to include in the plot. For example, a scatter trace to show individual data points. Must be fully formed except for the type (which is determined by the plot) and x and y values (which should be provided in the additionalTrace prop).\n additionalYAxis?: Partial<PlotParams[\"layout\"]>[\"yaxis2\"]; // Optional additional y-axis to include in the plot. For example, for a line trace that shows counts instead of density.\n}\n\nconst LinePlot = (props: LinePlotProps) => {\n const {\n data,\n width = 600,\n height = 400,\n title,\n xAxisTitle,\n yAxisTitle,\n containerStyleOverrides,\n plotId = \"boxplot\",\n extraLayoutConfig = {},\n additionalYAxis,\n additionalContextTrace,\n } = props;\n\n // Ref for plot container\n const containerRef = useRef<HTMLDivElement>(null);\n\n const plotlyData: PlotParams[\"data\"] = data.map((trace) => {\n return {\n type: \"scatter\" as const,\n mode: \"lines+markers\",\n x: trace.x,\n y: trace.y,\n name: trace.label,\n line: {\n color: trace.color || \"#1f77b4\", // Default to Plotly's default blue if no color provided\n },\n marker: {\n color: trace.color || \"#1f77b4\",\n size: 6,\n },\n zorder: 1, // Ensure lines are above any additional context traces (like scatter points)\n } as any;\n });\n\n const layout: PlotParams[\"layout\"] = {\n ...extraLayoutConfig,\n title: {\n text: title,\n },\n showlegend: false,\n autosize: true,\n width: undefined, // Let autosize handle width\n height: undefined, // Let autosize handle height\n hovermode: \"closest\", // Show hover info for the closest point\n margin: {\n l: 50,\n r: additionalContextTrace ? 80 : 35, // Balance between ensuring the mean annotation doesn't get cut off and having too much margin.\n t: title ? 50 : 20, // Adjust top margin based on whether a title is provided\n b: 50,\n pad: 4,\n },\n xaxis: {\n title: {\n text: xAxisTitle,\n },\n // range: displayXAxis, // Fixed range prevents axis shifting during interaction or data updates\n showgrid: true,\n zeroline: false,\n showline: true,\n mirror: \"ticks\",\n gridcolor: \"#efefef\",\n gridwidth: 0.2,\n zerolinecolor: \"#969696\",\n zerolinewidth: 1,\n linecolor: \"#bababa\",\n linewidth: 1,\n fixedrange: true, // Disable zooming\n ticklabelposition: \"outside\",\n },\n yaxis: {\n title: {\n text: yAxisTitle || \"\", // Set default to empty string to prevent Plotly from adding its own default title\n standoff: 12, // Add space between title and axis\n font: {\n color: data[0]?.color || \"#1f77b4\", // Match y-axis title color to line color\n },\n },\n automargin: true, // Required for standoff to work properly\n showgrid: true,\n zeroline: false,\n showline: true,\n mirror: \"ticks\",\n gridcolor: \"#efefef\",\n gridwidth: 0.2,\n zerolinecolor: \"#969696\",\n zerolinewidth: 1,\n linecolor: \"#bababa\",\n linewidth: 1,\n fixedrange: true, // Disable zooming\n tickfont: {\n color: data[0]?.color || \"#1f77b4\", // Match y-axis tick color to line color\n },\n tickcolor: \"white\", // Hide default ticks since we're using them for group labels in the paired comparisons plot\n ticklen: 10, // Give ticks a length to push labels away from y axis.\n // ticksuffix: \" \", // Add space between y axis and ticks\n },\n ...(additionalYAxis\n ? { yaxis2: { ...additionalYAxis, side: \"right\", overlaying: \"y\" } }\n : {}), // Add additional y-axis if provided\n };\n\n const config: PlotParams[\"config\"] = {\n responsive: true, // Make the plot responsive\n displayModeBar: false, // Hide the mode bar\n displaylogo: false, // Hide the Plotly logo\n scrollZoom: false, // Disable zooming with scroll\n staticPlot: false, // Enable interactivity\n };\n\n const containerStyles: React.CSSProperties = {\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n ...containerStyleOverrides,\n };\n\n return (\n <div\n ref={containerRef}\n style={\n {\n ...containerStyles,\n } as React.CSSProperties\n }\n >\n <Suspense fallback={<Loading />}>\n <div\n style={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n }}\n >\n <Plot\n key={`boxplot-${plotId || \"default\"}`}\n data={[\n ...(additionalContextTrace ? [additionalContextTrace] : []),\n ...plotlyData,\n ]}\n layout={layout}\n config={config}\n useResizeHandler={true}\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n transition: \"opacity 0.15s ease-in-out\",\n }}\n onHover={() => {\n console.log(\"hovering\");\n }}\n />\n </div>\n </Suspense>\n </div>\n );\n};\n\nexport default LinePlot;\n","// A test bar plotly plot\nimport React, { lazy } from 'react';\nimport { PlotParams } from 'react-plotly.js';\n\nconst Plot = lazy(() => import('react-plotly.js'));\n\nexport type TestPlotProps = {\n yaxisTitle?: string;\n xaxisTitle?: string;\n}\nexport const TestPlot = (props: TestPlotProps) => {\n const data: PlotParams['data'] = [\n {\n x: [1, 2, 3, 4],\n y: [10, 15, 13, 17],\n type: 'bar' as const,\n marker: { color: 'blue' },\n },\n ];\n\n const layout = {\n title: {text: 'Test Bar Plot'},\n xaxis: { title: {text: props.xaxisTitle ?? 'X Axis'} },\n yaxis: { title: {text: props.yaxisTitle ?? 'Y Axis'} },\n };\n\n return <Plot data={data} layout={layout} />;\n};\n\nexport default TestPlot;\n"],"names":["_jsx","createSvgIcon","useEffect","_jsxs","Plot","lazy","useRef","useState","useMemo","Suspense","Box"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,15,16,18]}
|