@hrforte/react-pivottable 2.1.2 → 2.2.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/PivotTableUI.jsx"],"names":["DraggableAttribute","Dropdown","ConditionalFormattingUI","CellFormattingUI","PivotLoadingOverlay","AGG_KEY_RADIX","AGG_KEY_OFFSET","AGG_KEY_LENGTH","props","name","addValuesToFilter","removeValuesFromFilter","attrValues","valueFilter","moveFilterBoxToTop","sorter","menuLimit","zIndex","open","setOpen","filterText","setFilterText","toggleValue","value","matchesFilter","x","toLowerCase","trim","includes","selectOnly","e","stopPropagation","setValuesInFilter","Object","keys","filter","y","toggleFilterBox","getFilterBox","showMenu","length","values","shown","sort","display","cursor","target","map","filtered","defaultProps","propTypes","PropTypes","string","isRequired","func","objectOf","number","bool","toggle","current","r","setValue","getConditionalFormatting","tableOptions","conditionalFormatting","rules","updateConditionalFormatting","currentTableOptions","assign","onChange","$set","addRule","cf","newRule","condition","type","style","backgroundColor","slice","concat","removeRule","newRules","_","i","index","updateRule","field","startsWith","conditionField","replace","newCondition","styleField","newStyle","moveToTop","conditionTypes","label","needsValue","marginTop","minWidth","position","fontStyle","color","rule","border","padding","marginBottom","justifyContent","fontSize","newType","cfNow","width","ct","val","numVal","isNaN","parseFloat","fontWeight","object","getCellFormatting","cellFormatting","updateCellFormatting","format","thousandsSep","decimalSep","decimalPlaces","prefix","suffix","formatField","newFormat","parseInt","alignItems","showOriginal","checked","marginRight","pivotWorkerInstanceCounter","progress","percent","total","Math","min","round","processed","phaseLabels","materialize","aggregate","phaseLabel","phase","PivotTableUI","unusedOrder","setUnusedOrder","zIndices","setZIndices","maxZIndex","setMaxZIndex","openDropdown","setOpenDropdown","setAttrValues","materializedInput","setMaterializedInput","lastDataRef","undefined","enabled","enableWorker","threshold","workerThreshold","isProcessing","setIsProcessing","setProgress","precomputed","setPrecomputed","computeError","setComputeError","precomputedRef","unmountedRef","activeRequestRef","dataVersionRef","versionedDataRef","instanceIdRef","workerEligible","data","computeSignature","rows","cols","aggregatorName","aggregations","vals","sorters","rowOrder","colOrder","rowSorts","colSorts","materializeInput","nextData","materialized","derivedAttributes","workerDebug","lastGoodViewRef","signature","workerUrl","DEFAULT_WORKER_URL","timer","setTimeout","requestId","dataKey","then","result","catch","error","message","WORKER_DEBOUNCE_MS","clearTimeout","sendPropUpdate","command","propUpdater","key","hasExternalAggregations","Array","isArray","numInputsForAggregator","aggregators","instance","numInputs","getAttributeOptions","hiddenAttributes","hiddenFromAggregators","defaultValsForAggregator","currentVals","required","options","next","getCurrentAggregations","fallbackAggregator","fallbackVals","aggregationsProvided","defaultAggregations","source","agg","idx","baseVals","generateAggregationKey","timestamp","Date","now","toString","randomPart","random","updateAggregations","nextAggregations","sanitized","primary","setAggregationAggregator","setAggregationVal","valIndex","setAggregationDisplayMode","allowedModes","normalizedMode","mode","aggregationDisplayMode","addAggregationRow","defaultAggregator","push","removeAggregationRow","splice","attribute","reduce","v","$unset","nextMax","prevMax","prevZ","handleColSort","attr","sortDir","handleRowSort","isOpen","dropdown","setAxisFromDrag","listKey","order","uniqueOrder","from","Set","otherKey","otherList","overlap","$apply","makeDnDCell","items","classes","group","ghostClass","preventOnFilter","primaryAggregation","aggregatorCellOutlet","outlet","rendererName","renderers","rendererCell","sortIcons","key_a_to_z","rowSymbol","colSymbol","value_a_to_z","value_z_to_a","attributeOptions","aggregatorCell","aggDropdownKey","numValsAllowed","fill","n","valDropdownKey","unusedAttrs","hiddenFromDragDrop","unusedLength","horizUnused","unusedOrientationCutoff","unusedAttrsCell","colAttrs","colAttrsCell","rowAttrs","rowAttrsCell","showProcessing","isShowProcessing","staleView","outputContent","precomputedData","overlayProgress","outputCell","PivotTable","arrayOf","oneOf","DEFAULT_WORKER_THRESHOLD"],"mappings":"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","file":"PivotTableUI.js","sourcesContent":["/* eslint-disable no-magic-numbers */\n/* eslint-disable no-undefined */\nimport React, {useState, useEffect, useMemo, useRef} from 'react';\nimport PropTypes from 'prop-types';\nimport update from 'immutability-helper';\nimport {sortAs, getSort} from './Utilities';\nimport {\n canComputeInWorker,\n createComputeSignature,\n createWorkerConfig,\n materializeData,\n DEFAULT_WORKER_THRESHOLD,\n WORKER_DEBOUNCE_MS,\n} from './pivotCompute';\nimport {\n computePivotWithFallback,\n configureWorkerUrl,\n setWorkerDebug,\n DEFAULT_WORKER_URL,\n} from './PivotDataWorker';\nimport PivotTable from './PivotTable';\nimport Sortable from 'react-sortablejs';\nimport Draggable from 'react-draggable';\n\nconst AGG_KEY_RADIX = 36;\nconst AGG_KEY_OFFSET = 2;\nconst AGG_KEY_LENGTH = 7;\n\n/* eslint-disable react/prop-types */\n// eslint can't see inherited propTypes!\n\nexport function DraggableAttribute(props) {\n const {\n name,\n addValuesToFilter,\n removeValuesFromFilter,\n attrValues,\n valueFilter,\n moveFilterBoxToTop,\n sorter,\n menuLimit,\n zIndex,\n } = props;\n\n const [open, setOpen] = useState(false);\n const [filterText, setFilterText] = useState('');\n\n const toggleValue = value => {\n if (value in valueFilter) {\n removeValuesFromFilter(name, [value]);\n } else {\n addValuesToFilter(name, [value]);\n }\n };\n\n const matchesFilter = x =>\n x\n .toLowerCase()\n .trim()\n .includes(filterText.toLowerCase().trim());\n\n const selectOnly = (e, value) => {\n e.stopPropagation();\n props.setValuesInFilter(\n name,\n Object.keys(attrValues).filter(y => y !== value)\n );\n };\n\n const toggleFilterBox = () => {\n setOpen(!open);\n moveFilterBoxToTop(name);\n };\n\n const getFilterBox = () => {\n const showMenu = Object.keys(attrValues).length < menuLimit;\n\n const values = Object.keys(attrValues);\n const shown = values.filter(matchesFilter).sort(sorter);\n\n return (\n <Draggable handle=\".pvtDragHandle\">\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: zIndex,\n }}\n onClick={() => moveFilterBoxToTop(name)}\n >\n <a onClick={() => setOpen(false)} className=\"pvtCloseX\">\n ×\n </a>\n <span className=\"pvtDragHandle\">☰</span>\n <h4>{name}</h4>\n\n {showMenu || <p>(too many values to show)</p>}\n\n {showMenu && (\n <p>\n <input\n type=\"text\"\n placeholder=\"Filter values\"\n className=\"pvtSearch\"\n value={filterText}\n onChange={e => setFilterText(e.target.value)}\n />\n <br />\n <a\n role=\"button\"\n className=\"pvtButton\"\n onClick={() =>\n removeValuesFromFilter(\n name,\n Object.keys(attrValues).filter(matchesFilter)\n )\n }\n >\n Select {values.length === shown.length ? 'All' : shown.length}\n </a>{' '}\n <a\n role=\"button\"\n className=\"pvtButton\"\n onClick={() =>\n addValuesToFilter(\n name,\n Object.keys(attrValues).filter(matchesFilter)\n )\n }\n >\n Deselect {values.length === shown.length ? 'All' : shown.length}\n </a>\n </p>\n )}\n\n {showMenu && (\n <div className=\"pvtCheckContainer\">\n {shown.map(x => (\n <p\n key={x}\n onClick={() => toggleValue(x)}\n className={x in valueFilter ? '' : 'selected'}\n >\n <a className=\"pvtOnly\" onClick={e => selectOnly(e, x)}>\n only\n </a>\n <a className=\"pvtOnlySpacer\">&nbsp;</a>\n\n {x === '' ? <em>null</em> : x}\n </p>\n ))}\n </div>\n )}\n </div>\n </Draggable>\n );\n };\n\n const filtered =\n Object.keys(valueFilter).length !== 0 ? 'pvtFilteredAttribute' : '';\n\n return (\n <li data-id={name}>\n <span className={'pvtAttr ' + filtered}>\n {name}\n <span className=\"pvtTriangle\" onClick={toggleFilterBox}>\n {' '}\n ▾\n </span>\n </span>\n\n {open ? getFilterBox() : null}\n </li>\n );\n}\n\nDraggableAttribute.defaultProps = {\n valueFilter: {},\n};\n\nDraggableAttribute.propTypes = {\n name: PropTypes.string.isRequired,\n addValuesToFilter: PropTypes.func.isRequired,\n removeValuesFromFilter: PropTypes.func.isRequired,\n attrValues: PropTypes.objectOf(PropTypes.number).isRequired,\n valueFilter: PropTypes.objectOf(PropTypes.bool),\n moveFilterBoxToTop: PropTypes.func.isRequired,\n sorter: PropTypes.func.isRequired,\n menuLimit: PropTypes.number,\n zIndex: PropTypes.number,\n};\n\nexport function Dropdown(props) {\n return (\n <div className=\"pvtDropdown\" style={{zIndex: props.zIndex}}>\n <div\n onClick={e => {\n e.stopPropagation();\n props.toggle();\n }}\n className={\n 'pvtDropdownValue pvtDropdownCurrent ' +\n (props.open ? 'pvtDropdownCurrentOpen' : '')\n }\n role=\"button\"\n >\n <div className=\"pvtDropdownIcon\">{props.open ? '×' : '▾'}</div>\n {props.current || <span>&nbsp;</span>}\n </div>\n\n {props.open && (\n <div className=\"pvtDropdownMenu\">\n {props.values.map(r => (\n <div\n key={r}\n role=\"button\"\n onClick={e => {\n e.stopPropagation();\n if (props.current === r) {\n props.toggle();\n } else {\n props.setValue(r);\n }\n }}\n className={\n 'pvtDropdownValue ' +\n (r === props.current ? 'pvtDropdownActiveValue' : '')\n }\n >\n {r}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function ConditionalFormattingUI(props) {\n const [open, setOpen] = useState(false);\n\n const getConditionalFormatting = () => {\n const tableOptions = props.tableOptions || {};\n return tableOptions.conditionalFormatting\n ? tableOptions.conditionalFormatting\n : {rules: []};\n };\n\n const updateConditionalFormatting = conditionalFormatting => {\n const currentTableOptions = props.tableOptions || {};\n const tableOptions = Object.assign({}, currentTableOptions, {\n conditionalFormatting,\n });\n props.onChange({\n tableOptions: {$set: tableOptions},\n });\n };\n\n const addRule = () => {\n const cf = getConditionalFormatting();\n const newRule = {\n condition: {\n type: 'greaterThan',\n value: 0,\n },\n style: {\n backgroundColor: '#FFFFE0',\n },\n };\n updateConditionalFormatting({\n rules: cf.rules.slice().concat([newRule]),\n });\n };\n\n const removeRule = index => {\n const cf = getConditionalFormatting();\n const newRules = cf.rules.filter((_, i) => i !== index);\n updateConditionalFormatting({\n rules: newRules,\n });\n };\n\n const updateRule = (index, field, value) => {\n const cf = getConditionalFormatting();\n const newRules = cf.rules.slice();\n if (field.startsWith('condition.')) {\n const conditionField = field.replace('condition.', '');\n const newCondition = Object.assign({}, newRules[index].condition);\n if (value === null) {\n delete newCondition[conditionField];\n } else {\n newCondition[conditionField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n condition: newCondition,\n });\n } else if (field.startsWith('style.')) {\n const styleField = field.replace('style.', '');\n const newStyle = Object.assign({}, newRules[index].style || {});\n if (value === null || value === '') {\n delete newStyle[styleField];\n } else {\n newStyle[styleField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n style: newStyle,\n });\n }\n updateConditionalFormatting({\n rules: newRules,\n });\n };\n\n const toggle = () => {\n setOpen(!open);\n if (props.moveToTop) {\n props.moveToTop();\n }\n };\n\n const cf = getConditionalFormatting();\n const conditionTypes = [\n {value: 'greaterThan', label: 'Greater Than'},\n {value: 'lessThan', label: 'Less Than'},\n {value: 'greaterThanOrEqual', label: 'Greater Than Or Equal'},\n {value: 'lessThanOrEqual', label: 'Less Than Or Equal'},\n {value: 'equal', label: 'Equal'},\n {value: 'notEqual', label: 'Not Equal'},\n {value: 'empty', label: 'Empty'},\n {value: 'notEmpty', label: 'Not Empty'},\n {value: 'contains', label: 'Contains'},\n {value: 'notContains', label: 'Not Contains'},\n ];\n\n const needsValue = type => {\n return !['empty', 'notEmpty'].includes(type);\n };\n\n return (\n <div>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n toggle();\n }}\n style={{marginTop: '5px'}}\n >\n {open ? '▼' : '▶'} Conditional Formatting\n </button>\n\n {open && (\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: props.zIndex,\n marginTop: '5px',\n minWidth: '400px',\n position: 'relative',\n }}\n onClick={() => props.moveToTop && props.moveToTop()}\n >\n <a onClick={() => setOpen(false)} className=\"pvtCloseX\">\n ×\n </a>\n <h4>Conditional Formatting Rules</h4>\n\n {cf.rules.length === 0 && (\n <p style={{fontStyle: 'italic', color: '#666'}}>\n No rules defined. Add a rule to format cells based on conditions.\n </p>\n )}\n\n {cf.rules.map((rule, index) => (\n <div\n key={index}\n style={{\n border: '1px solid #c8d4e3',\n padding: '10px',\n marginBottom: '10px',\n backgroundColor: '#f9f9f9',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <strong>Rule {index + 1}</strong>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n removeRule(index);\n }}\n style={{fontSize: '10px', padding: '2px 6px'}}\n >\n Remove\n </button>\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Condition Type:\n </label>\n <select\n value={rule.condition.type || 'greaterThan'}\n onChange={e => {\n e.stopPropagation();\n const newType = e.target.value;\n const cfNow = getConditionalFormatting();\n const newRules = cfNow.rules.slice();\n const newCondition = Object.assign(\n {},\n newRules[index].condition,\n {\n type: newType,\n }\n );\n // Remove value field if condition type doesn't need it\n if (!needsValue(newType)) {\n delete newCondition.value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n condition: newCondition,\n });\n updateConditionalFormatting({\n rules: newRules,\n });\n }}\n style={{width: '100%', padding: '4px'}}\n >\n {conditionTypes.map(ct => (\n <option key={ct.value} value={ct.value}>\n {ct.label}\n </option>\n ))}\n </select>\n </div>\n\n {needsValue(rule.condition.type) && (\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Condition Value:\n </label>\n <input\n type=\"text\"\n value={\n typeof rule.condition.value !== 'undefined' &&\n rule.condition.value !== null\n ? rule.condition.value\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n const val = e.target.value;\n // Try to parse as number, otherwise use as string\n const numVal =\n val === '' ? null : isNaN(val) ? val : parseFloat(val);\n updateRule(index, 'condition.value', numVal);\n }}\n placeholder=\"Enter value\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n )}\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Background Color:\n </label>\n <input\n type=\"color\"\n value={\n rule.style && rule.style.backgroundColor\n ? rule.style.backgroundColor\n : '#FFFFFF'\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'style.backgroundColor', e.target.value);\n }}\n style={{width: '100%', padding: '2px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Text Color:\n </label>\n <input\n type=\"color\"\n value={\n rule.style && rule.style.color\n ? rule.style.color\n : '#000000'\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'style.color', e.target.value);\n }}\n style={{width: '100%', padding: '2px'}}\n />\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Font Weight:\n </label>\n <select\n value={\n rule.style && rule.style.fontWeight\n ? rule.style.fontWeight\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(\n index,\n 'style.fontWeight',\n e.target.value || null\n );\n }}\n style={{width: '100%', padding: '4px'}}\n >\n <option value=\"\">Normal</option>\n <option value=\"bold\">Bold</option>\n <option value=\"lighter\">Lighter</option>\n </select>\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Font Style:\n </label>\n <select\n value={\n rule.style && rule.style.fontStyle\n ? rule.style.fontStyle\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(\n index,\n 'style.fontStyle',\n e.target.value || null\n );\n }}\n style={{width: '100%', padding: '4px'}}\n >\n <option value=\"\">Normal</option>\n <option value=\"italic\">Italic</option>\n <option value=\"oblique\">Oblique</option>\n </select>\n </div>\n </div>\n ))}\n\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n addRule();\n }}\n style={{width: '100%', marginTop: '10px'}}\n >\n + Add Rule\n </button>\n </div>\n )}\n </div>\n );\n}\n\nConditionalFormattingUI.propTypes = {\n tableOptions: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n moveToTop: PropTypes.func,\n zIndex: PropTypes.number,\n};\n\nConditionalFormattingUI.defaultProps = {\n tableOptions: {},\n moveToTop: () => {},\n zIndex: 1,\n};\n\nexport function CellFormattingUI(props) {\n const [open, setOpen] = useState(false);\n\n const getCellFormatting = () => {\n const tableOptions = props.tableOptions || {};\n return tableOptions.cellFormatting\n ? tableOptions.cellFormatting\n : {rules: []};\n };\n\n const updateCellFormatting = cellFormatting => {\n const currentTableOptions = props.tableOptions || {};\n const tableOptions = Object.assign({}, currentTableOptions, {\n cellFormatting,\n });\n props.onChange({\n tableOptions: {$set: tableOptions},\n });\n };\n\n const addRule = () => {\n const cf = getCellFormatting();\n const newRule = {\n format: {\n thousandsSep: ',',\n decimalSep: '.',\n decimalPlaces: 2,\n prefix: '',\n suffix: '',\n },\n };\n updateCellFormatting({\n rules: cf.rules.slice().concat([newRule]),\n });\n };\n\n const removeRule = index => {\n const cf = getCellFormatting();\n const newRules = cf.rules.filter((_, i) => i !== index);\n updateCellFormatting({\n rules: newRules,\n });\n };\n\n const updateRule = (index, field, value) => {\n const cf = getCellFormatting();\n const newRules = cf.rules.slice();\n if (field.startsWith('format.')) {\n const formatField = field.replace('format.', '');\n const newFormat = Object.assign({}, newRules[index].format || {});\n if (value === null || value === '') {\n delete newFormat[formatField];\n } else {\n newFormat[formatField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n format: newFormat,\n });\n } else {\n newRules[index] = Object.assign({}, newRules[index], {\n [field]: value,\n });\n }\n updateCellFormatting({\n rules: newRules,\n });\n };\n\n const toggle = () => {\n setOpen(!open);\n if (props.moveToTop) {\n props.moveToTop();\n }\n };\n\n const cf = getCellFormatting();\n\n return (\n <div>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n toggle();\n }}\n style={{marginTop: '5px'}}\n >\n {open ? '▼' : '▶'} Cell Formatting\n </button>\n\n {open && (\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: props.zIndex,\n marginTop: '5px',\n minWidth: '400px',\n position: 'relative',\n }}\n onClick={() => props.moveToTop && props.moveToTop()}\n >\n <a onClick={() => setOpen(false)} className=\"pvtCloseX\">\n ×\n </a>\n <h4>Cell Formatting Rules</h4>\n\n {cf.rules.length === 0 && (\n <p style={{fontStyle: 'italic', color: '#666'}}>\n No rules defined. Add a rule to format cell values.\n </p>\n )}\n\n {cf.rules.map((rule, index) => (\n <div\n key={index}\n style={{\n border: '1px solid #c8d4e3',\n padding: '10px',\n marginBottom: '10px',\n backgroundColor: '#f9f9f9',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <strong>Rule {index + 1}</strong>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n removeRule(index);\n }}\n style={{fontSize: '10px', padding: '2px 6px'}}\n >\n Remove\n </button>\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Thousand Separator (empty = no separator, decimal formatting\n still applies):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'thousandsSep' in rule.format\n ? rule.format.thousandsSep\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.thousandsSep', e.target.value);\n }}\n placeholder=\",\"\n maxLength=\"1\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Decimal Separator:\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'decimalSep' in rule.format\n ? rule.format.decimalSep\n : '.'\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.decimalSep', e.target.value);\n }}\n placeholder=\".\"\n maxLength=\"1\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Decimal Places:\n </label>\n <input\n type=\"number\"\n min=\"0\"\n max=\"9\"\n value={\n rule.format && 'decimalPlaces' in rule.format\n ? rule.format.decimalPlaces\n : 2\n }\n onChange={e => {\n e.stopPropagation();\n const val = parseInt(e.target.value, 10);\n updateRule(\n index,\n 'format.decimalPlaces',\n isNaN(val) ? 2 : val\n );\n }}\n placeholder=\"2\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Prefix (e.g., $, €):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'prefix' in rule.format\n ? rule.format.prefix\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.prefix', e.target.value);\n }}\n placeholder=\"\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Suffix (e.g., %, units):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'suffix' in rule.format\n ? rule.format.suffix\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.suffix', e.target.value);\n }}\n placeholder=\"\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'flex',\n alignItems: 'center',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n <input\n type=\"checkbox\"\n checked={\n rule.format && 'showOriginal' in rule.format\n ? rule.format.showOriginal\n : false\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(\n index,\n 'format.showOriginal',\n e.target.checked\n );\n }}\n style={{marginRight: '6px'}}\n />\n Show Original Value (no formatting)\n </label>\n </div>\n </div>\n ))}\n\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n addRule();\n }}\n style={{width: '100%', marginTop: '10px'}}\n >\n + Add Rule\n </button>\n </div>\n )}\n </div>\n );\n}\n\nCellFormattingUI.propTypes = {\n tableOptions: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n moveToTop: PropTypes.func,\n zIndex: PropTypes.number,\n};\n\nCellFormattingUI.defaultProps = {\n tableOptions: {},\n moveToTop: () => {},\n zIndex: 1,\n};\n\n// Used to namespace worker-side cached datasets when multiple PivotTableUI\n// instances share the same Web Worker.\nlet pivotWorkerInstanceCounter = 0;\n\nexport function PivotLoadingOverlay(props) {\n const progress = props.progress || {};\n const percent =\n progress.total > 0\n ? Math.min(100, Math.round((progress.processed / progress.total) * 100))\n : null;\n const phaseLabels = {\n materialize: 'Reading data',\n aggregate: 'Aggregating data',\n };\n const phaseLabel = phaseLabels[progress.phase] || 'Processing';\n return (\n <div className=\"pvtLoadingOverlay\" role=\"status\">\n <div className=\"pvtLoadingSpinner\" aria-hidden=\"true\" />\n <div className=\"pvtLoadingText\">{phaseLabel}…</div>\n {percent !== null ? (\n <div className=\"pvtLoadingBarWrap\">\n <div className=\"pvtLoadingBar\" style={{width: `${percent}%`}} />\n </div>\n ) : null}\n {percent !== null ? (\n <div className=\"pvtLoadingPercent\">{percent}%</div>\n ) : null}\n </div>\n );\n}\n\nPivotLoadingOverlay.propTypes = {\n progress: PropTypes.object,\n};\n\nfunction PivotTableUI(props) {\n const [unusedOrder, setUnusedOrder] = useState([]);\n const [zIndices, setZIndices] = useState({});\n const [maxZIndex, setMaxZIndex] = useState(1000);\n const [openDropdown, setOpenDropdown] = useState(false);\n const [attrValues, setAttrValues] = useState({});\n const [materializedInput, setMaterializedInput] = useState([]);\n\n // Tracks the last `data` prop that was materialized, mirroring the old\n // `this.state.data` check used to skip redundant work.\n const lastDataRef = useRef(undefined);\n\n // Worker orchestration state. `precomputed` holds the serialized pivot\n // state produced by the worker (or the synchronous fallback) together with\n // the exact compute signature it belongs to.\n const [isProcessing, setIsProcessing] = useState(() =>\n canComputeInWorker(props, {\n enabled: props.enableWorker,\n threshold: props.workerThreshold,\n })\n );\n const [progress, setProgress] = useState(null);\n const [precomputed, setPrecomputed] = useState(null);\n const [computeError, setComputeError] = useState(null);\n\n const precomputedRef = useRef(null);\n const unmountedRef = useRef(false);\n const activeRequestRef = useRef(0);\n const dataVersionRef = useRef(0);\n const versionedDataRef = useRef(undefined);\n const instanceIdRef = useRef(null);\n if (instanceIdRef.current === null) {\n instanceIdRef.current = `pvt-${pivotWorkerInstanceCounter++}`;\n }\n\n const workerEligible = useMemo(\n () =>\n canComputeInWorker(props, {\n enabled: props.enableWorker,\n threshold: props.workerThreshold,\n }),\n [\n props.data,\n props.enableWorker,\n props.workerThreshold,\n ]\n );\n\n const computeSignature = useMemo(() => createComputeSignature(props), [\n props.rows,\n props.cols,\n props.aggregatorName,\n props.aggregations,\n props.vals,\n props.valueFilter,\n props.sorters,\n props.rowOrder,\n props.colOrder,\n props.rowSorts,\n props.colSorts,\n ]);\n\n const materializeInput = nextData => {\n if (lastDataRef.current === nextData) {\n return;\n }\n lastDataRef.current = nextData;\n\n const materialized = materializeData(nextData, props.derivedAttributes);\n setAttrValues(materialized.attrValues);\n setMaterializedInput(materialized.materializedInput);\n };\n\n useEffect(() => {\n if (workerEligible) {\n // The worker (or its synchronous fallback) computes attrValues and the\n // materialized input; scanning 200k+ records here would block the\n // main thread again.\n return undefined;\n }\n materializeInput(props.data);\n return undefined;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.data, workerEligible]);\n\n useEffect(\n () => () => {\n unmountedRef.current = true;\n },\n []\n );\n\n // Forward the `workerDebug` prop to the worker client so the whole\n // worker pipeline can be traced from the browser console.\n useEffect(() => {\n setWorkerDebug(props.workerDebug);\n }, [props.workerDebug]);\n\n // Snapshot of the last consistently rendered pivot view: the props that\n // match the currently applied precomputed result. While a new computation\n // runs, this snapshot is rendered underneath the loading overlay so the\n // user still sees the previous table (dimmed) instead of a blank area.\n const lastGoodViewRef = useRef(null);\n\n useEffect(() => {\n if (!isProcessing && !computeError) {\n lastGoodViewRef.current = {\n props,\n materializedInput,\n precomputed: workerEligible && precomputed ? precomputed : null,\n };\n }\n });\n\n // Schedule an off-main-thread computation whenever the data or the pivot\n // configuration changes. Rapid consecutive changes are debounced and\n // stale responses are discarded.\n useEffect(() => {\n // Invalidate any in-flight request from a previous effect run so its\n // result is never applied to the new configuration or dataset.\n activeRequestRef.current += 1;\n\n\n if (!workerEligible) {\n setIsProcessing(false);\n return undefined;\n }\n\n if (versionedDataRef.current !== props.data) {\n versionedDataRef.current = props.data;\n dataVersionRef.current += 1;\n }\n\n const signature = `${computeSignature}#${dataVersionRef.current}`;\n if (\n precomputedRef.current &&\n precomputedRef.current.signature === signature\n ) {\n setIsProcessing(false);\n return undefined;\n }\n\n configureWorkerUrl(props.workerUrl || DEFAULT_WORKER_URL);\n setIsProcessing(true);\n setComputeError(null);\n setProgress({processed: 0, total: props.data.length, phase: 'queued'});\n \n const timer = setTimeout(() => {\n const requestId = activeRequestRef.current;\n const dataKey = `${instanceIdRef.current}-data-${dataVersionRef.current}`;\n computePivotWithFallback(\n props.data,\n dataKey,\n createWorkerConfig(props),\n (processed, total, phase) => {\n if (unmountedRef.current || requestId !== activeRequestRef.current) {\n return;\n }\n setProgress({processed, total, phase});\n }\n )\n .then(result => {\n if (unmountedRef.current || requestId !== activeRequestRef.current) {\n return;\n }\n precomputedRef.current = {signature, data: result};\n setPrecomputed(precomputedRef.current);\n setAttrValues(result.attrValues);\n setMaterializedInput(result.materializedInput);\n setComputeError(null);\n setIsProcessing(false);\n })\n .catch(error => {\n if (unmountedRef.current || requestId !== activeRequestRef.current) {\n return;\n }\n setComputeError(\n (error && error.message) || 'Failed to compute pivot table'\n );\n setIsProcessing(false);\n });\n }, WORKER_DEBOUNCE_MS);\n return () => {\n clearTimeout(timer);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.data, workerEligible, computeSignature]);\n\n const sendPropUpdate = command => {\n props.onChange(update(props, command));\n };\n\n const propUpdater = key => value => sendPropUpdate({[key]: {$set: value}});\n\n const hasExternalAggregations = () => Array.isArray(props.aggregations);\n\n const numInputsForAggregator = name => {\n if (!name || !(name in props.aggregators)) {\n return 0;\n }\n const instance = props.aggregators[name]([])();\n return instance.numInputs || 0;\n };\n\n const getAttributeOptions = () =>\n Object.keys(attrValues).filter(\n e =>\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromAggregators.includes(e)\n );\n\n const defaultValsForAggregator = (name, currentVals = []) => {\n const required = numInputsForAggregator(name);\n if (required === 0) {\n return [];\n }\n const options = getAttributeOptions();\n const next = currentVals.slice(0, required);\n for (let i = 0; i < required; i++) {\n if (!next[i]) {\n next[i] = options[i % options.length] || null;\n }\n }\n return next;\n };\n\n const getCurrentAggregations = () => {\n const fallbackAggregator =\n props.aggregatorName || Object.keys(props.aggregators)[0];\n const fallbackVals = Array.isArray(props.vals) ? props.vals.slice() : [];\n const aggregationsProvided = hasExternalAggregations();\n const defaultAggregations = [\n {\n key: 'agg-default',\n aggregatorName: fallbackAggregator,\n vals: fallbackVals,\n },\n ];\n const source = aggregationsProvided\n ? props.aggregations\n : defaultAggregations;\n return source.map((agg, idx) => {\n const aggregatorName = agg.aggregatorName || fallbackAggregator;\n const baseVals = Array.isArray(agg.vals)\n ? agg.vals.slice()\n : aggregationsProvided\n ? []\n : fallbackVals;\n return {\n key: agg.key || `agg-${idx}`,\n aggregatorName,\n vals: defaultValsForAggregator(aggregatorName, baseVals),\n };\n });\n };\n\n const generateAggregationKey = () => {\n const timestamp = Date.now().toString(AGG_KEY_RADIX);\n const randomPart = Math.random()\n .toString(AGG_KEY_RADIX)\n .slice(AGG_KEY_OFFSET, AGG_KEY_OFFSET + AGG_KEY_LENGTH);\n return `agg-${timestamp}-${randomPart}`;\n };\n\n const updateAggregations = nextAggregations => {\n if (!nextAggregations.length) {\n return;\n }\n const fallbackAggregator =\n props.aggregatorName || Object.keys(props.aggregators)[0];\n const sanitized = nextAggregations.map((agg, idx) => {\n const aggregatorName = agg.aggregatorName || fallbackAggregator;\n return {\n key: agg.key || `agg-${idx}`,\n aggregatorName,\n vals: defaultValsForAggregator(\n aggregatorName,\n Array.isArray(agg.vals) ? agg.vals.slice() : []\n ),\n };\n });\n const primary = sanitized[0];\n const command = {\n aggregations: {$set: sanitized},\n };\n if (!hasExternalAggregations()) {\n command.aggregatorName = {$set: primary.aggregatorName};\n command.vals = {$set: primary.vals};\n }\n sendPropUpdate(command);\n };\n\n const setAggregationAggregator = (index, aggregatorName) => {\n const aggregations = getCurrentAggregations();\n const next = Object.assign({}, aggregations[index], {\n aggregatorName,\n });\n next.vals = defaultValsForAggregator(aggregatorName, next.vals);\n aggregations[index] = next;\n updateAggregations(aggregations);\n };\n\n const setAggregationVal = (index, valIndex, value) => {\n const aggregations = getCurrentAggregations();\n const next = Object.assign({}, aggregations[index]);\n const vals = Array.isArray(next.vals) ? next.vals.slice() : [];\n vals[valIndex] = value;\n next.vals = vals;\n aggregations[index] = next;\n updateAggregations(aggregations);\n };\n\n const setAggregationDisplayMode = mode => {\n const allowedModes = ['row', 'column'];\n const normalizedMode = allowedModes.includes(mode) ? mode : 'row';\n const tableOptions = Object.assign({}, props.tableOptions || {}, {\n aggregationDisplayMode: normalizedMode,\n });\n sendPropUpdate({\n tableOptions: {$set: tableOptions},\n });\n };\n\n const addAggregationRow = () => {\n const aggregations = getCurrentAggregations();\n const defaultAggregator =\n props.aggregatorName || Object.keys(props.aggregators)[0];\n const key = generateAggregationKey();\n aggregations.push({\n key,\n aggregatorName: defaultAggregator,\n vals: defaultValsForAggregator(defaultAggregator),\n });\n updateAggregations(aggregations);\n };\n\n const removeAggregationRow = index => {\n const aggregations = getCurrentAggregations();\n if (aggregations.length === 1) {\n return;\n }\n aggregations.splice(index, 1);\n updateAggregations(aggregations);\n };\n\n const setValuesInFilter = (attribute, values) => {\n sendPropUpdate({\n valueFilter: {\n [attribute]: {\n $set: values.reduce((r, v) => {\n r[v] = true;\n return r;\n }, {}),\n },\n },\n });\n };\n\n const addValuesToFilter = (attribute, values) => {\n if (attribute in props.valueFilter) {\n sendPropUpdate({\n valueFilter: {\n [attribute]: values.reduce((r, v) => {\n r[v] = {$set: true};\n return r;\n }, {}),\n },\n });\n } else {\n setValuesInFilter(attribute, values);\n }\n };\n\n const removeValuesFromFilter = (attribute, values) => {\n sendPropUpdate({\n valueFilter: {[attribute]: {$unset: values}},\n });\n };\n\n const moveFilterBoxToTop = attribute => {\n setMaxZIndex(prevMax => {\n const nextMax = prevMax + 1;\n setZIndices(prevZ => Object.assign({}, prevZ, {[attribute]: nextMax}));\n return nextMax;\n });\n };\n\n const handleColSort = (attr, sortDir) => {\n // Only allow sorting 1 column at a time - clear all other column sorts\n const colSorts = {};\n if (sortDir !== null) {\n colSorts[attr] = sortDir;\n }\n sendPropUpdate({colSorts: {$set: colSorts}});\n };\n\n const handleRowSort = (attr, sortDir) => {\n // Only allow sorting 1 row at a time - clear all other row sorts\n const rowSorts = {};\n if (sortDir !== null) {\n rowSorts[attr] = sortDir;\n }\n sendPropUpdate({rowSorts: {$set: rowSorts}});\n };\n\n const isOpen = dropdown => openDropdown === dropdown;\n\n /*\n * Drag-and-drop updates must stay consistent even though SortableJS\n * manipulates the DOM directly (the dragged node can transiently exist in\n * two containers while React reconciles). Two guards are applied:\n * 1. duplicate entries delivered by onChange are dropped (first wins), and\n * 2. rows/cols are kept mutually exclusive: dragging a field into one\n * axis removes it from the other one ($apply keeps whatever order the\n * axis currently has, even if another update landed in the same batch).\n */\n const setAxisFromDrag = (listKey, order) => {\n const uniqueOrder = Array.from(new Set(order));\n const otherKey = listKey === 'rows' ? 'cols' : 'rows';\n const otherList = Array.from(new Set(props[otherKey] || []));\n const overlap = uniqueOrder.filter(name => otherList.includes(name));\n const command = {[listKey]: {$set: uniqueOrder}};\n if (overlap.length > 0) {\n command[otherKey] = {\n $apply: current =>\n Array.from(new Set(current || [])).filter(\n name => !overlap.includes(name)\n ),\n };\n }\n sendPropUpdate(command);\n };\n\n const makeDnDCell = (items, onChange, classes) => (\n <Sortable\n options={{\n group: 'shared',\n ghostClass: 'pvtPlaceholder',\n filter: '.pvtFilterBox',\n preventOnFilter: false,\n }}\n tag=\"td\"\n className={classes}\n onChange={order => onChange(Array.from(new Set(order)))}\n >\n {items.map(x => (\n <DraggableAttribute\n name={x}\n key={x}\n attrValues={attrValues[x]}\n valueFilter={props.valueFilter[x] || {}}\n sorter={getSort(props.sorters, x, attrValues[x])}\n menuLimit={props.menuLimit}\n setValuesInFilter={setValuesInFilter}\n addValuesToFilter={addValuesToFilter}\n moveFilterBoxToTop={moveFilterBoxToTop}\n removeValuesFromFilter={removeValuesFromFilter}\n zIndex={zIndices[x] || maxZIndex}\n />\n ))}\n </Sortable>\n );\n\n const aggregations = getCurrentAggregations();\n const primaryAggregation = aggregations[0];\n const tableOptions = props.tableOptions || {};\n const aggregationDisplayMode =\n tableOptions.aggregationDisplayMode === 'column' ? 'column' : 'row';\n const aggregatorCellOutlet =\n primaryAggregation &&\n props.aggregators[primaryAggregation.aggregatorName] &&\n props.aggregators[primaryAggregation.aggregatorName]([])().outlet;\n\n const rendererName =\n props.rendererName in props.renderers\n ? props.rendererName\n : Object.keys(props.renderers)[0];\n\n const rendererCell = (\n <td className=\"pvtRenderers\">\n <Dropdown\n current={rendererName}\n values={Object.keys(props.renderers)}\n open={isOpen('renderer')}\n zIndex={isOpen('renderer') ? maxZIndex + 1 : 1}\n toggle={() => setOpenDropdown(isOpen('renderer') ? false : 'renderer')}\n setValue={propUpdater('rendererName')}\n />\n </td>\n );\n\n const sortIcons = {\n key_a_to_z: {\n rowSymbol: '↕',\n colSymbol: '↔',\n next: 'value_a_to_z',\n },\n value_a_to_z: {\n rowSymbol: '↓',\n colSymbol: '→',\n next: 'value_z_to_a',\n },\n value_z_to_a: {rowSymbol: '↑', colSymbol: '←', next: 'key_a_to_z'},\n };\n\n const attributeOptions = getAttributeOptions();\n const aggregatorCell = (\n <td className=\"pvtVals\">\n {aggregations.map((agg, idx) => {\n const aggDropdownKey = `aggregation-${agg.key}-agg`;\n const numValsAllowed = numInputsForAggregator(agg.aggregatorName);\n const vals = defaultValsForAggregator(agg.aggregatorName, agg.vals);\n return (\n <div className=\"pvtAggregatorRow\" key={agg.key || idx}>\n <Dropdown\n current={agg.aggregatorName}\n values={Object.keys(props.aggregators)}\n open={isOpen(aggDropdownKey)}\n zIndex={isOpen(aggDropdownKey) ? maxZIndex + 1 : 1}\n toggle={() =>\n setOpenDropdown(isOpen(aggDropdownKey) ? false : aggDropdownKey)\n }\n setValue={value => setAggregationAggregator(idx, value)}\n />\n {numValsAllowed > 0 && (\n <div className=\"pvtAggregatorVals\">\n {new Array(numValsAllowed).fill().map((n, i) => {\n const valDropdownKey = `aggregation-${agg.key}-val-${i}`;\n return (\n <Dropdown\n key={`agg-val-${agg.key}-${i}`}\n current={vals[i]}\n values={attributeOptions}\n open={isOpen(valDropdownKey)}\n zIndex={isOpen(valDropdownKey) ? maxZIndex + 1 : 1}\n toggle={() =>\n setOpenDropdown(\n isOpen(valDropdownKey) ? false : valDropdownKey\n )\n }\n setValue={value => setAggregationVal(idx, i, value)}\n />\n );\n })}\n </div>\n )}\n {aggregations.length > 1 && (\n <button\n type=\"button\"\n className=\"pvtButton pvtRemoveAggregator\"\n onClick={e => {\n e.stopPropagation();\n removeAggregationRow(idx);\n }}\n >\n Remove\n </button>\n )}\n </div>\n );\n })}\n <div className=\"pvtAggregationModeToggle\">\n <label\n htmlFor=\"pvtAggregationMode\"\n style={{marginRight: '6px', fontSize: '12px'}}\n >\n Aggregation values on:\n </label>\n <select\n id=\"pvtAggregationMode\"\n value={aggregationDisplayMode}\n onChange={e => setAggregationDisplayMode(e.target.value)}\n >\n <option value=\"row\">Rows</option>\n <option value=\"column\">Columns</option>\n </select>\n </div>\n <button\n type=\"button\"\n className=\"pvtButton pvtAddAggregator\"\n onClick={e => {\n e.stopPropagation();\n addAggregationRow();\n }}\n >\n + Add Value\n </button>\n <a\n role=\"button\"\n className=\"pvtRowOrder\"\n onClick={() => propUpdater('rowOrder')(sortIcons[props.rowOrder].next)}\n >\n {sortIcons[props.rowOrder].rowSymbol}\n </a>\n <a\n role=\"button\"\n className=\"pvtColOrder\"\n onClick={() => propUpdater('colOrder')(sortIcons[props.colOrder].next)}\n >\n {sortIcons[props.colOrder].colSymbol}\n </a>\n {aggregatorCellOutlet && aggregatorCellOutlet(props.data)}\n <ConditionalFormattingUI\n tableOptions={tableOptions}\n onChange={sendPropUpdate}\n moveToTop={() => moveFilterBoxToTop('conditionalFormatting')}\n zIndex={zIndices.conditionalFormatting || maxZIndex}\n />\n <CellFormattingUI\n tableOptions={tableOptions}\n onChange={sendPropUpdate}\n moveToTop={() => moveFilterBoxToTop('cellFormatting')}\n zIndex={zIndices.cellFormatting || maxZIndex}\n />\n </td>\n );\n\n const unusedAttrs = Object.keys(attrValues)\n .filter(\n e =>\n !props.rows.includes(e) &&\n !props.cols.includes(e) &&\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromDragDrop.includes(e)\n )\n .sort(sortAs(unusedOrder));\n\n const unusedLength = unusedAttrs.reduce((r, e) => r + e.length, 0);\n const horizUnused = unusedLength < props.unusedOrientationCutoff;\n\n const unusedAttrsCell = makeDnDCell(\n unusedAttrs,\n order => setUnusedOrder(order),\n `pvtAxisContainer pvtUnused ${horizUnused ? 'pvtHorizList' : 'pvtVertList'}`\n );\n\n const colAttrs = Array.from(new Set(props.cols)).filter(\n e =>\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromDragDrop.includes(e)\n );\n\n const colAttrsCell = makeDnDCell(\n colAttrs,\n order => setAxisFromDrag('cols', order),\n 'pvtAxisContainer pvtHorizList pvtCols'\n );\n\n const rowAttrs = Array.from(new Set(props.rows)).filter(\n e =>\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromDragDrop.includes(e)\n );\n const rowAttrsCell = makeDnDCell(\n rowAttrs,\n order => setAxisFromDrag('rows', order),\n 'pvtAxisContainer pvtVertList pvtRows'\n );\n\n // `isShowProcessing` is a testing hook: when true it forces the loading\n // overlay on top of the table regardless of whether a worker computation\n // is actually running.\n const showProcessing =\n (isProcessing || props.isShowProcessing) && !computeError;\n // While recomputing, re-render the last valid table (old props matched to\n // their own precomputed result) so the overlay sits on top of real content.\n const staleView = showProcessing ? lastGoodViewRef.current : null;\n\n let outputContent;\n if (computeError) {\n outputContent = (\n <div className=\"pvtComputeError\">\n <p>\n <strong>PivotTable error: </strong>\n {computeError}\n </p>\n </div>\n );\n } else if (staleView) {\n outputContent = (\n <PivotTable\n {...staleView.props}\n data={staleView.materializedInput}\n precomputedData={\n staleView.precomputed ? staleView.precomputed.data : null\n }\n colSorts={staleView.props.colSorts || {}}\n rowSorts={staleView.props.rowSorts || {}}\n onColSort={handleColSort}\n onRowSort={handleRowSort}\n />\n );\n } else if (showProcessing) {\n // First computation: no previous table to keep visible yet.\n outputContent = <div className=\"pvtOutputPlaceholder\" />;\n } else {\n outputContent = (\n <PivotTable\n {...props}\n data={materializedInput}\n precomputedData={\n workerEligible && precomputed\n ? precomputed.data\n : props.precomputedData || null\n }\n colSorts={props.colSorts || {}}\n rowSorts={props.rowSorts || {}}\n onColSort={handleColSort}\n onRowSort={handleRowSort}\n />\n );\n }\n\n // With the `isShowProcessing` testing hook active and no real computation\n // running there is no progress to report, so feed the overlay a sample\n // value to exercise its progress-bar and percentage branch as well.\n const overlayProgress =\n props.isShowProcessing && !isProcessing\n ? progress || {processed: 60, total: 100, phase: 'aggregate'}\n : progress;\n\n const outputCell = (\n <td className=\"pvtOutput\">\n {outputContent}\n </td>\n );\n\n if (horizUnused) {\n return (\n <React.Fragment>\n {showProcessing ? (\n <PivotLoadingOverlay progress={overlayProgress} />\n ) : null}\n <table className=\"pvtUi\">\n <tbody onClick={() => setOpenDropdown(false)}>\n <tr>\n {rendererCell}\n {unusedAttrsCell}\n </tr>\n <tr>\n {aggregatorCell}\n {colAttrsCell}\n </tr>\n <tr>\n {rowAttrsCell}\n {outputCell}\n </tr>\n </tbody>\n </table>\n </React.Fragment>\n );\n }\n\n return (\n <table className=\"pvtUi\">\n <tbody onClick={() => setOpenDropdown(false)}>\n <tr>\n {rendererCell}\n {aggregatorCell}\n {colAttrsCell}\n </tr>\n <tr>\n {unusedAttrsCell}\n {rowAttrsCell}\n {outputCell}\n </tr>\n </tbody>\n </table>\n );\n}\n\nPivotTableUI.propTypes = Object.assign({}, PivotTable.propTypes, {\n onChange: PropTypes.func.isRequired,\n hiddenAttributes: PropTypes.arrayOf(PropTypes.string),\n hiddenFromAggregators: PropTypes.arrayOf(PropTypes.string),\n hiddenFromDragDrop: PropTypes.arrayOf(PropTypes.string),\n unusedOrientationCutoff: PropTypes.number,\n menuLimit: PropTypes.number,\n colSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n rowSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n enableWorker: PropTypes.bool,\n workerThreshold: PropTypes.number,\n workerUrl: PropTypes.string,\n workerDebug: PropTypes.bool,\n isShowProcessing: PropTypes.bool,\n});\n\nPivotTableUI.defaultProps = Object.assign({}, PivotTable.defaultProps, {\n hiddenAttributes: [],\n hiddenFromAggregators: [],\n hiddenFromDragDrop: [],\n unusedOrientationCutoff: 85,\n menuLimit: 500,\n colSorts: {},\n rowSorts: {},\n enableWorker: true,\n workerThreshold: DEFAULT_WORKER_THRESHOLD,\n workerUrl: DEFAULT_WORKER_URL,\n workerDebug: false,\n isShowProcessing: false,\n});\n\nexport default PivotTableUI;\n"]}
1
+ {"version":3,"sources":["../src/PivotTableUI.jsx"],"names":["DraggableAttribute","Dropdown","ConditionalFormattingUI","CellFormattingUI","PivotLoadingOverlay","AGG_KEY_RADIX","AGG_KEY_OFFSET","AGG_KEY_LENGTH","props","name","addValuesToFilter","removeValuesFromFilter","attrValues","valueFilter","moveFilterBoxToTop","sorter","menuLimit","zIndex","open","setOpen","filterText","setFilterText","toggleValue","value","matchesFilter","x","toLowerCase","trim","includes","selectOnly","e","stopPropagation","setValuesInFilter","Object","keys","filter","y","toggleFilterBox","getFilterBox","showMenu","length","values","shown","sort","display","cursor","target","map","filtered","defaultProps","propTypes","PropTypes","string","isRequired","func","objectOf","number","bool","toggle","current","r","setValue","getConditionalFormatting","tableOptions","conditionalFormatting","rules","updateConditionalFormatting","currentTableOptions","assign","onChange","$set","addRule","cf","newRule","condition","type","style","backgroundColor","slice","concat","removeRule","newRules","_","i","index","updateRule","field","startsWith","conditionField","replace","newCondition","styleField","newStyle","moveToTop","conditionTypes","label","needsValue","marginTop","minWidth","position","fontStyle","color","rule","border","padding","marginBottom","justifyContent","fontSize","newType","cfNow","width","ct","val","numVal","isNaN","parseFloat","fontWeight","object","getCellFormatting","cellFormatting","updateCellFormatting","format","thousandsSep","decimalSep","decimalPlaces","prefix","suffix","formatField","newFormat","parseInt","alignItems","showOriginal","checked","marginRight","pivotWorkerInstanceCounter","PivotTableUI","unusedOrder","setUnusedOrder","zIndices","setZIndices","maxZIndex","setMaxZIndex","openDropdown","setOpenDropdown","setAttrValues","materializedInput","setMaterializedInput","lastDataRef","undefined","enabled","enableWorker","threshold","workerThreshold","isProcessing","setIsProcessing","resultReady","setResultReady","precomputed","setPrecomputed","computeError","setComputeError","precomputedRef","unmountedRef","activeRequestRef","dataVersionRef","versionedDataRef","instanceIdRef","workerEligible","data","computeSignature","rows","cols","aggregatorName","aggregations","vals","sorters","rowOrder","colOrder","rowSorts","colSorts","materializeInput","nextData","materialized","derivedAttributes","workerDebug","lastGoodViewRef","signature","workerUrl","DEFAULT_WORKER_URL","timer","setTimeout","requestId","dataKey","then","result","catch","error","message","WORKER_DEBOUNCE_MS","clearTimeout","sendPropUpdate","command","propUpdater","key","hasExternalAggregations","Array","isArray","numInputsForAggregator","aggregators","instance","numInputs","getAttributeOptions","hiddenAttributes","hiddenFromAggregators","defaultValsForAggregator","currentVals","required","options","next","getCurrentAggregations","fallbackAggregator","fallbackVals","aggregationsProvided","defaultAggregations","source","agg","idx","baseVals","generateAggregationKey","timestamp","Date","now","toString","randomPart","Math","random","updateAggregations","nextAggregations","sanitized","primary","setAggregationAggregator","setAggregationVal","valIndex","setAggregationDisplayMode","allowedModes","normalizedMode","mode","aggregationDisplayMode","addAggregationRow","defaultAggregator","push","removeAggregationRow","splice","attribute","reduce","v","$unset","nextMax","prevMax","prevZ","handleColSort","attr","sortDir","handleRowSort","isOpen","dropdown","setAxisFromDrag","listKey","order","uniqueOrder","from","Set","otherKey","otherList","overlap","$apply","makeDnDCell","items","classes","group","ghostClass","preventOnFilter","primaryAggregation","aggregatorCellOutlet","outlet","rendererName","renderers","rendererCell","sortIcons","key_a_to_z","rowSymbol","colSymbol","value_a_to_z","value_z_to_a","attributeOptions","aggregatorCell","aggDropdownKey","numValsAllowed","fill","n","valDropdownKey","unusedAttrs","hiddenFromDragDrop","unusedLength","horizUnused","unusedOrientationCutoff","unusedAttrsCell","colAttrs","colAttrsCell","rowAttrs","rowAttrsCell","showProcessing","staleView","outputContent","precomputedData","outputCell","PivotTable","arrayOf","oneOf","DEFAULT_WORKER_THRESHOLD"],"mappings":"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","file":"PivotTableUI.js","sourcesContent":["/* eslint-disable no-magic-numbers */\n/* eslint-disable no-undefined */\nimport React, {\n useState,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport update from 'immutability-helper';\nimport {sortAs, getSort} from './Utilities';\nimport {\n canComputeInWorker,\n createComputeSignature,\n createWorkerConfig,\n materializeData,\n DEFAULT_WORKER_THRESHOLD,\n WORKER_DEBOUNCE_MS,\n} from './pivotCompute';\nimport {\n computePivotWithFallback,\n configureWorkerUrl,\n setWorkerDebug,\n DEFAULT_WORKER_URL,\n} from './PivotDataWorker';\nimport PivotTable from './PivotTable';\nimport Sortable from 'react-sortablejs';\nimport Draggable from 'react-draggable';\n\nconst AGG_KEY_RADIX = 36;\nconst AGG_KEY_OFFSET = 2;\nconst AGG_KEY_LENGTH = 7;\n\n/* eslint-disable react/prop-types */\n// eslint can't see inherited propTypes!\n\nexport function DraggableAttribute(props) {\n const {\n name,\n addValuesToFilter,\n removeValuesFromFilter,\n attrValues,\n valueFilter,\n moveFilterBoxToTop,\n sorter,\n menuLimit,\n zIndex,\n } = props;\n\n const [open, setOpen] = useState(false);\n const [filterText, setFilterText] = useState('');\n\n const toggleValue = value => {\n if (value in valueFilter) {\n removeValuesFromFilter(name, [value]);\n } else {\n addValuesToFilter(name, [value]);\n }\n };\n\n const matchesFilter = x =>\n x\n .toLowerCase()\n .trim()\n .includes(filterText.toLowerCase().trim());\n\n const selectOnly = (e, value) => {\n e.stopPropagation();\n props.setValuesInFilter(\n name,\n Object.keys(attrValues).filter(y => y !== value)\n );\n };\n\n const toggleFilterBox = () => {\n setOpen(!open);\n moveFilterBoxToTop(name);\n };\n\n const getFilterBox = () => {\n const showMenu = Object.keys(attrValues).length < menuLimit;\n\n const values = Object.keys(attrValues);\n const shown = values.filter(matchesFilter).sort(sorter);\n\n return (\n <Draggable handle=\".pvtDragHandle\">\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: zIndex,\n }}\n onClick={() => moveFilterBoxToTop(name)}\n >\n <a onClick={() => setOpen(false)} className=\"pvtCloseX\">\n ×\n </a>\n <span className=\"pvtDragHandle\">☰</span>\n <h4>{name}</h4>\n\n {showMenu || <p>(too many values to show)</p>}\n\n {showMenu && (\n <p>\n <input\n type=\"text\"\n placeholder=\"Filter values\"\n className=\"pvtSearch\"\n value={filterText}\n onChange={e => setFilterText(e.target.value)}\n />\n <br />\n <a\n role=\"button\"\n className=\"pvtButton\"\n onClick={() =>\n removeValuesFromFilter(\n name,\n Object.keys(attrValues).filter(matchesFilter)\n )\n }\n >\n Select {values.length === shown.length ? 'All' : shown.length}\n </a>{' '}\n <a\n role=\"button\"\n className=\"pvtButton\"\n onClick={() =>\n addValuesToFilter(\n name,\n Object.keys(attrValues).filter(matchesFilter)\n )\n }\n >\n Deselect {values.length === shown.length ? 'All' : shown.length}\n </a>\n </p>\n )}\n\n {showMenu && (\n <div className=\"pvtCheckContainer\">\n {shown.map(x => (\n <p\n key={x}\n onClick={() => toggleValue(x)}\n className={x in valueFilter ? '' : 'selected'}\n >\n <a className=\"pvtOnly\" onClick={e => selectOnly(e, x)}>\n only\n </a>\n <a className=\"pvtOnlySpacer\">&nbsp;</a>\n\n {x === '' ? <em>null</em> : x}\n </p>\n ))}\n </div>\n )}\n </div>\n </Draggable>\n );\n };\n\n const filtered =\n Object.keys(valueFilter).length !== 0 ? 'pvtFilteredAttribute' : '';\n\n return (\n <li data-id={name}>\n <span className={'pvtAttr ' + filtered}>\n {name}\n <span className=\"pvtTriangle\" onClick={toggleFilterBox}>\n {' '}\n ▾\n </span>\n </span>\n\n {open ? getFilterBox() : null}\n </li>\n );\n}\n\nDraggableAttribute.defaultProps = {\n valueFilter: {},\n};\n\nDraggableAttribute.propTypes = {\n name: PropTypes.string.isRequired,\n addValuesToFilter: PropTypes.func.isRequired,\n removeValuesFromFilter: PropTypes.func.isRequired,\n attrValues: PropTypes.objectOf(PropTypes.number).isRequired,\n valueFilter: PropTypes.objectOf(PropTypes.bool),\n moveFilterBoxToTop: PropTypes.func.isRequired,\n sorter: PropTypes.func.isRequired,\n menuLimit: PropTypes.number,\n zIndex: PropTypes.number,\n};\n\nexport function Dropdown(props) {\n return (\n <div className=\"pvtDropdown\" style={{zIndex: props.zIndex}}>\n <div\n onClick={e => {\n e.stopPropagation();\n props.toggle();\n }}\n className={\n 'pvtDropdownValue pvtDropdownCurrent ' +\n (props.open ? 'pvtDropdownCurrentOpen' : '')\n }\n role=\"button\"\n >\n <div className=\"pvtDropdownIcon\">{props.open ? '×' : '▾'}</div>\n {props.current || <span>&nbsp;</span>}\n </div>\n\n {props.open && (\n <div className=\"pvtDropdownMenu\">\n {props.values.map(r => (\n <div\n key={r}\n role=\"button\"\n onClick={e => {\n e.stopPropagation();\n if (props.current === r) {\n props.toggle();\n } else {\n props.setValue(r);\n }\n }}\n className={\n 'pvtDropdownValue ' +\n (r === props.current ? 'pvtDropdownActiveValue' : '')\n }\n >\n {r}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function ConditionalFormattingUI(props) {\n const [open, setOpen] = useState(false);\n\n const getConditionalFormatting = () => {\n const tableOptions = props.tableOptions || {};\n return tableOptions.conditionalFormatting\n ? tableOptions.conditionalFormatting\n : {rules: []};\n };\n\n const updateConditionalFormatting = conditionalFormatting => {\n const currentTableOptions = props.tableOptions || {};\n const tableOptions = Object.assign({}, currentTableOptions, {\n conditionalFormatting,\n });\n props.onChange({\n tableOptions: {$set: tableOptions},\n });\n };\n\n const addRule = () => {\n const cf = getConditionalFormatting();\n const newRule = {\n condition: {\n type: 'greaterThan',\n value: 0,\n },\n style: {\n backgroundColor: '#FFFFE0',\n },\n };\n updateConditionalFormatting({\n rules: cf.rules.slice().concat([newRule]),\n });\n };\n\n const removeRule = index => {\n const cf = getConditionalFormatting();\n const newRules = cf.rules.filter((_, i) => i !== index);\n updateConditionalFormatting({\n rules: newRules,\n });\n };\n\n const updateRule = (index, field, value) => {\n const cf = getConditionalFormatting();\n const newRules = cf.rules.slice();\n if (field.startsWith('condition.')) {\n const conditionField = field.replace('condition.', '');\n const newCondition = Object.assign({}, newRules[index].condition);\n if (value === null) {\n delete newCondition[conditionField];\n } else {\n newCondition[conditionField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n condition: newCondition,\n });\n } else if (field.startsWith('style.')) {\n const styleField = field.replace('style.', '');\n const newStyle = Object.assign({}, newRules[index].style || {});\n if (value === null || value === '') {\n delete newStyle[styleField];\n } else {\n newStyle[styleField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n style: newStyle,\n });\n }\n updateConditionalFormatting({\n rules: newRules,\n });\n };\n\n const toggle = () => {\n setOpen(!open);\n if (props.moveToTop) {\n props.moveToTop();\n }\n };\n\n const cf = getConditionalFormatting();\n const conditionTypes = [\n {value: 'greaterThan', label: 'Greater Than'},\n {value: 'lessThan', label: 'Less Than'},\n {value: 'greaterThanOrEqual', label: 'Greater Than Or Equal'},\n {value: 'lessThanOrEqual', label: 'Less Than Or Equal'},\n {value: 'equal', label: 'Equal'},\n {value: 'notEqual', label: 'Not Equal'},\n {value: 'empty', label: 'Empty'},\n {value: 'notEmpty', label: 'Not Empty'},\n {value: 'contains', label: 'Contains'},\n {value: 'notContains', label: 'Not Contains'},\n ];\n\n const needsValue = type => {\n return !['empty', 'notEmpty'].includes(type);\n };\n\n return (\n <div>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n toggle();\n }}\n style={{marginTop: '5px'}}\n >\n {open ? '▼' : '▶'} Conditional Formatting\n </button>\n\n {open && (\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: props.zIndex,\n marginTop: '5px',\n minWidth: '400px',\n position: 'relative',\n }}\n onClick={() => props.moveToTop && props.moveToTop()}\n >\n <a onClick={() => setOpen(false)} className=\"pvtCloseX\">\n ×\n </a>\n <h4>Conditional Formatting Rules</h4>\n\n {cf.rules.length === 0 && (\n <p style={{fontStyle: 'italic', color: '#666'}}>\n No rules defined. Add a rule to format cells based on conditions.\n </p>\n )}\n\n {cf.rules.map((rule, index) => (\n <div\n key={index}\n style={{\n border: '1px solid #c8d4e3',\n padding: '10px',\n marginBottom: '10px',\n backgroundColor: '#f9f9f9',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <strong>Rule {index + 1}</strong>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n removeRule(index);\n }}\n style={{fontSize: '10px', padding: '2px 6px'}}\n >\n Remove\n </button>\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Condition Type:\n </label>\n <select\n value={rule.condition.type || 'greaterThan'}\n onChange={e => {\n e.stopPropagation();\n const newType = e.target.value;\n const cfNow = getConditionalFormatting();\n const newRules = cfNow.rules.slice();\n const newCondition = Object.assign(\n {},\n newRules[index].condition,\n {\n type: newType,\n }\n );\n // Remove value field if condition type doesn't need it\n if (!needsValue(newType)) {\n delete newCondition.value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n condition: newCondition,\n });\n updateConditionalFormatting({\n rules: newRules,\n });\n }}\n style={{width: '100%', padding: '4px'}}\n >\n {conditionTypes.map(ct => (\n <option key={ct.value} value={ct.value}>\n {ct.label}\n </option>\n ))}\n </select>\n </div>\n\n {needsValue(rule.condition.type) && (\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Condition Value:\n </label>\n <input\n type=\"text\"\n value={\n typeof rule.condition.value !== 'undefined' &&\n rule.condition.value !== null\n ? rule.condition.value\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n const val = e.target.value;\n // Try to parse as number, otherwise use as string\n const numVal =\n val === '' ? null : isNaN(val) ? val : parseFloat(val);\n updateRule(index, 'condition.value', numVal);\n }}\n placeholder=\"Enter value\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n )}\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Background Color:\n </label>\n <input\n type=\"color\"\n value={\n rule.style && rule.style.backgroundColor\n ? rule.style.backgroundColor\n : '#FFFFFF'\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'style.backgroundColor', e.target.value);\n }}\n style={{width: '100%', padding: '2px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Text Color:\n </label>\n <input\n type=\"color\"\n value={\n rule.style && rule.style.color\n ? rule.style.color\n : '#000000'\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'style.color', e.target.value);\n }}\n style={{width: '100%', padding: '2px'}}\n />\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Font Weight:\n </label>\n <select\n value={\n rule.style && rule.style.fontWeight\n ? rule.style.fontWeight\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(\n index,\n 'style.fontWeight',\n e.target.value || null\n );\n }}\n style={{width: '100%', padding: '4px'}}\n >\n <option value=\"\">Normal</option>\n <option value=\"bold\">Bold</option>\n <option value=\"lighter\">Lighter</option>\n </select>\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Font Style:\n </label>\n <select\n value={\n rule.style && rule.style.fontStyle\n ? rule.style.fontStyle\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(\n index,\n 'style.fontStyle',\n e.target.value || null\n );\n }}\n style={{width: '100%', padding: '4px'}}\n >\n <option value=\"\">Normal</option>\n <option value=\"italic\">Italic</option>\n <option value=\"oblique\">Oblique</option>\n </select>\n </div>\n </div>\n ))}\n\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n addRule();\n }}\n style={{width: '100%', marginTop: '10px'}}\n >\n + Add Rule\n </button>\n </div>\n )}\n </div>\n );\n}\n\nConditionalFormattingUI.propTypes = {\n tableOptions: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n moveToTop: PropTypes.func,\n zIndex: PropTypes.number,\n};\n\nConditionalFormattingUI.defaultProps = {\n tableOptions: {},\n moveToTop: () => {},\n zIndex: 1,\n};\n\nexport function CellFormattingUI(props) {\n const [open, setOpen] = useState(false);\n\n const getCellFormatting = () => {\n const tableOptions = props.tableOptions || {};\n return tableOptions.cellFormatting\n ? tableOptions.cellFormatting\n : {rules: []};\n };\n\n const updateCellFormatting = cellFormatting => {\n const currentTableOptions = props.tableOptions || {};\n const tableOptions = Object.assign({}, currentTableOptions, {\n cellFormatting,\n });\n props.onChange({\n tableOptions: {$set: tableOptions},\n });\n };\n\n const addRule = () => {\n const cf = getCellFormatting();\n const newRule = {\n format: {\n thousandsSep: ',',\n decimalSep: '.',\n decimalPlaces: 2,\n prefix: '',\n suffix: '',\n },\n };\n updateCellFormatting({\n rules: cf.rules.slice().concat([newRule]),\n });\n };\n\n const removeRule = index => {\n const cf = getCellFormatting();\n const newRules = cf.rules.filter((_, i) => i !== index);\n updateCellFormatting({\n rules: newRules,\n });\n };\n\n const updateRule = (index, field, value) => {\n const cf = getCellFormatting();\n const newRules = cf.rules.slice();\n if (field.startsWith('format.')) {\n const formatField = field.replace('format.', '');\n const newFormat = Object.assign({}, newRules[index].format || {});\n if (value === null || value === '') {\n delete newFormat[formatField];\n } else {\n newFormat[formatField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n format: newFormat,\n });\n } else {\n newRules[index] = Object.assign({}, newRules[index], {\n [field]: value,\n });\n }\n updateCellFormatting({\n rules: newRules,\n });\n };\n\n const toggle = () => {\n setOpen(!open);\n if (props.moveToTop) {\n props.moveToTop();\n }\n };\n\n const cf = getCellFormatting();\n\n return (\n <div>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n toggle();\n }}\n style={{marginTop: '5px'}}\n >\n {open ? '▼' : '▶'} Cell Formatting\n </button>\n\n {open && (\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: props.zIndex,\n marginTop: '5px',\n minWidth: '400px',\n position: 'relative',\n }}\n onClick={() => props.moveToTop && props.moveToTop()}\n >\n <a onClick={() => setOpen(false)} className=\"pvtCloseX\">\n ×\n </a>\n <h4>Cell Formatting Rules</h4>\n\n {cf.rules.length === 0 && (\n <p style={{fontStyle: 'italic', color: '#666'}}>\n No rules defined. Add a rule to format cell values.\n </p>\n )}\n\n {cf.rules.map((rule, index) => (\n <div\n key={index}\n style={{\n border: '1px solid #c8d4e3',\n padding: '10px',\n marginBottom: '10px',\n backgroundColor: '#f9f9f9',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <strong>Rule {index + 1}</strong>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n removeRule(index);\n }}\n style={{fontSize: '10px', padding: '2px 6px'}}\n >\n Remove\n </button>\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Thousand Separator (empty = no separator, decimal formatting\n still applies):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'thousandsSep' in rule.format\n ? rule.format.thousandsSep\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.thousandsSep', e.target.value);\n }}\n placeholder=\",\"\n maxLength=\"1\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Decimal Separator:\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'decimalSep' in rule.format\n ? rule.format.decimalSep\n : '.'\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.decimalSep', e.target.value);\n }}\n placeholder=\".\"\n maxLength=\"1\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Decimal Places:\n </label>\n <input\n type=\"number\"\n min=\"0\"\n max=\"9\"\n value={\n rule.format && 'decimalPlaces' in rule.format\n ? rule.format.decimalPlaces\n : 2\n }\n onChange={e => {\n e.stopPropagation();\n const val = parseInt(e.target.value, 10);\n updateRule(\n index,\n 'format.decimalPlaces',\n isNaN(val) ? 2 : val\n );\n }}\n placeholder=\"2\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Prefix (e.g., $, €):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'prefix' in rule.format\n ? rule.format.prefix\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.prefix', e.target.value);\n }}\n placeholder=\"\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Suffix (e.g., %, units):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'suffix' in rule.format\n ? rule.format.suffix\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.suffix', e.target.value);\n }}\n placeholder=\"\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'flex',\n alignItems: 'center',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n <input\n type=\"checkbox\"\n checked={\n rule.format && 'showOriginal' in rule.format\n ? rule.format.showOriginal\n : false\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(\n index,\n 'format.showOriginal',\n e.target.checked\n );\n }}\n style={{marginRight: '6px'}}\n />\n Show Original Value (no formatting)\n </label>\n </div>\n </div>\n ))}\n\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n addRule();\n }}\n style={{width: '100%', marginTop: '10px'}}\n >\n + Add Rule\n </button>\n </div>\n )}\n </div>\n );\n}\n\nCellFormattingUI.propTypes = {\n tableOptions: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n moveToTop: PropTypes.func,\n zIndex: PropTypes.number,\n};\n\nCellFormattingUI.defaultProps = {\n tableOptions: {},\n moveToTop: () => {},\n zIndex: 1,\n};\n\n// Used to namespace worker-side cached datasets when multiple PivotTableUI\n// instances share the same Web Worker.\nlet pivotWorkerInstanceCounter = 0;\n\n// Loading overlay shown while a worker computation is running. It is removed\n// only when both conditions hold: the worker posted its `pivot:result` event\n// AND PivotTableUI has committed the freshly computed table to the DOM (see\n// the resultReady/useLayoutEffect handshake below), so content never appears\n// after the overlay disappears.\nexport function PivotLoadingOverlay() {\n return (\n <div className=\"pvtLoadingOverlay\" role=\"status\">\n <div className=\"pvtLoadingSpinner\" aria-hidden=\"true\" />\n <div className=\"pvtLoadingText\">Processing…</div>\n </div>\n );\n}\n\nfunction PivotTableUI(props) {\n const [unusedOrder, setUnusedOrder] = useState([]);\n const [zIndices, setZIndices] = useState({});\n const [maxZIndex, setMaxZIndex] = useState(1000);\n const [openDropdown, setOpenDropdown] = useState(false);\n const [attrValues, setAttrValues] = useState({});\n const [materializedInput, setMaterializedInput] = useState([]);\n\n // Tracks the last `data` prop that was materialized, mirroring the old\n // `this.state.data` check used to skip redundant work.\n const lastDataRef = useRef(undefined);\n\n // Worker orchestration state. `precomputed` holds the serialized pivot\n // state produced by the worker (or the synchronous fallback) together with\n // the exact compute signature it belongs to.\n const [isProcessing, setIsProcessing] = useState(() =>\n canComputeInWorker(props, {\n enabled: props.enableWorker,\n threshold: props.workerThreshold,\n })\n );\n // True once the worker result has been applied but the overlay is still\n // showing: the fresh table renders underneath first, then a layout effect\n // clears `isProcessing` before the browser paints.\n const [resultReady, setResultReady] = useState(false);\n const [precomputed, setPrecomputed] = useState(null);\n const [computeError, setComputeError] = useState(null);\n\n const precomputedRef = useRef(null);\n const unmountedRef = useRef(false);\n const activeRequestRef = useRef(0);\n const dataVersionRef = useRef(0);\n const versionedDataRef = useRef(undefined);\n const instanceIdRef = useRef(null);\n if (instanceIdRef.current === null) {\n instanceIdRef.current = `pvt-${pivotWorkerInstanceCounter++}`;\n }\n\n const workerEligible = useMemo(\n () =>\n canComputeInWorker(props, {\n enabled: props.enableWorker,\n threshold: props.workerThreshold,\n }),\n [props.data, props.enableWorker, props.workerThreshold]\n );\n\n const computeSignature = useMemo(() => createComputeSignature(props), [\n props.rows,\n props.cols,\n props.aggregatorName,\n props.aggregations,\n props.vals,\n props.valueFilter,\n props.sorters,\n props.rowOrder,\n props.colOrder,\n props.rowSorts,\n props.colSorts,\n ]);\n\n const materializeInput = nextData => {\n if (lastDataRef.current === nextData) {\n return;\n }\n lastDataRef.current = nextData;\n\n const materialized = materializeData(nextData, props.derivedAttributes);\n setAttrValues(materialized.attrValues);\n setMaterializedInput(materialized.materializedInput);\n };\n\n useEffect(() => {\n if (workerEligible) {\n // The worker (or its synchronous fallback) computes attrValues and the\n // materialized input; scanning 200k+ records here would block the\n // main thread again.\n return undefined;\n }\n materializeInput(props.data);\n return undefined;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.data, workerEligible]);\n\n useEffect(\n () => () => {\n unmountedRef.current = true;\n },\n []\n );\n\n // Forward the `workerDebug` prop to the worker client so the whole\n // worker pipeline can be traced from the browser console.\n useEffect(() => {\n setWorkerDebug(props.workerDebug);\n }, [props.workerDebug]);\n\n // Snapshot of the last consistently rendered pivot view: the props that\n // match the currently applied precomputed result. While a new computation\n // runs, this snapshot is rendered underneath the loading overlay so the\n // user still sees the previous table (dimmed) instead of a blank area.\n const lastGoodViewRef = useRef(null);\n\n useEffect(() => {\n if (!isProcessing && !computeError) {\n lastGoodViewRef.current = {\n props,\n materializedInput,\n precomputed: workerEligible && precomputed ? precomputed : null,\n };\n }\n });\n\n // The loading overlay may only be turned off once the new result has been\n // rendered: the worker's `.then` sets `resultReady` (which makes this\n // render output the fresh table underneath the still-visible overlay), and\n // this layout effect runs after that DOM commit but before the browser\n // paints - so the overlay disappears exactly when the table is on screen.\n useLayoutEffect(() => {\n if (resultReady && isProcessing) {\n setIsProcessing(false);\n }\n }, [resultReady, isProcessing]);\n\n // Schedule an off-main-thread computation whenever the data or the pivot\n // configuration changes. Rapid consecutive changes are debounced and\n // stale responses are discarded.\n useEffect(() => {\n // Invalidate any in-flight request from a previous effect run so its\n // result is never applied to the new configuration or dataset.\n activeRequestRef.current += 1;\n\n if (versionedDataRef.current !== props.data) {\n versionedDataRef.current = props.data;\n dataVersionRef.current += 1;\n }\n\n const signature = `${computeSignature}#${dataVersionRef.current}`;\n if (\n precomputedRef.current &&\n precomputedRef.current.signature === signature\n ) {\n setIsProcessing(false);\n return undefined;\n }\n\n configureWorkerUrl(props.workerUrl || DEFAULT_WORKER_URL);\n setIsProcessing(true);\n setResultReady(false);\n setComputeError(null);\n\n const timer = setTimeout(() => {\n const requestId = activeRequestRef.current;\n const dataKey = `${instanceIdRef.current}-data-${dataVersionRef.current}`;\n computePivotWithFallback(props.data, dataKey, createWorkerConfig(props))\n .then(result => {\n if (unmountedRef.current || requestId !== activeRequestRef.current) {\n return;\n }\n precomputedRef.current = {signature, data: result};\n setPrecomputed(precomputedRef.current);\n setAttrValues(result.attrValues);\n setMaterializedInput(result.materializedInput);\n setComputeError(null);\n // Keep the overlay up for one more render: `resultReady` makes the\n // fresh table render underneath, and the layout effect above turns\n // `isProcessing` off only after that render has been committed.\n setResultReady(true);\n })\n .catch(error => {\n if (unmountedRef.current || requestId !== activeRequestRef.current) {\n return;\n }\n setComputeError(\n (error && error.message) || 'Failed to compute pivot table'\n );\n setIsProcessing(false);\n });\n }, WORKER_DEBOUNCE_MS);\n return () => {\n clearTimeout(timer);\n };\n }, [props.data, computeSignature]);\n\n const sendPropUpdate = command => {\n props.onChange(update(props, command));\n };\n\n const propUpdater = key => value => sendPropUpdate({[key]: {$set: value}});\n\n const hasExternalAggregations = () => Array.isArray(props.aggregations);\n\n const numInputsForAggregator = name => {\n if (!name || !(name in props.aggregators)) {\n return 0;\n }\n const instance = props.aggregators[name]([])();\n return instance.numInputs || 0;\n };\n\n const getAttributeOptions = () =>\n Object.keys(attrValues).filter(\n e =>\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromAggregators.includes(e)\n );\n\n const defaultValsForAggregator = (name, currentVals = []) => {\n const required = numInputsForAggregator(name);\n if (required === 0) {\n return [];\n }\n const options = getAttributeOptions();\n const next = currentVals.slice(0, required);\n for (let i = 0; i < required; i++) {\n if (!next[i]) {\n next[i] = options[i % options.length] || null;\n }\n }\n return next;\n };\n\n const getCurrentAggregations = () => {\n const fallbackAggregator =\n props.aggregatorName || Object.keys(props.aggregators)[0];\n const fallbackVals = Array.isArray(props.vals) ? props.vals.slice() : [];\n const aggregationsProvided = hasExternalAggregations();\n const defaultAggregations = [\n {\n key: 'agg-default',\n aggregatorName: fallbackAggregator,\n vals: fallbackVals,\n },\n ];\n const source = aggregationsProvided\n ? props.aggregations\n : defaultAggregations;\n return source.map((agg, idx) => {\n const aggregatorName = agg.aggregatorName || fallbackAggregator;\n const baseVals = Array.isArray(agg.vals)\n ? agg.vals.slice()\n : aggregationsProvided\n ? []\n : fallbackVals;\n return {\n key: agg.key || `agg-${idx}`,\n aggregatorName,\n vals: defaultValsForAggregator(aggregatorName, baseVals),\n };\n });\n };\n\n const generateAggregationKey = () => {\n const timestamp = Date.now().toString(AGG_KEY_RADIX);\n const randomPart = Math.random()\n .toString(AGG_KEY_RADIX)\n .slice(AGG_KEY_OFFSET, AGG_KEY_OFFSET + AGG_KEY_LENGTH);\n return `agg-${timestamp}-${randomPart}`;\n };\n\n const updateAggregations = nextAggregations => {\n if (!nextAggregations.length) {\n return;\n }\n const fallbackAggregator =\n props.aggregatorName || Object.keys(props.aggregators)[0];\n const sanitized = nextAggregations.map((agg, idx) => {\n const aggregatorName = agg.aggregatorName || fallbackAggregator;\n return {\n key: agg.key || `agg-${idx}`,\n aggregatorName,\n vals: defaultValsForAggregator(\n aggregatorName,\n Array.isArray(agg.vals) ? agg.vals.slice() : []\n ),\n };\n });\n const primary = sanitized[0];\n const command = {\n aggregations: {$set: sanitized},\n };\n if (!hasExternalAggregations()) {\n command.aggregatorName = {$set: primary.aggregatorName};\n command.vals = {$set: primary.vals};\n }\n sendPropUpdate(command);\n };\n\n const setAggregationAggregator = (index, aggregatorName) => {\n const aggregations = getCurrentAggregations();\n const next = Object.assign({}, aggregations[index], {\n aggregatorName,\n });\n next.vals = defaultValsForAggregator(aggregatorName, next.vals);\n aggregations[index] = next;\n updateAggregations(aggregations);\n };\n\n const setAggregationVal = (index, valIndex, value) => {\n const aggregations = getCurrentAggregations();\n const next = Object.assign({}, aggregations[index]);\n const vals = Array.isArray(next.vals) ? next.vals.slice() : [];\n vals[valIndex] = value;\n next.vals = vals;\n aggregations[index] = next;\n updateAggregations(aggregations);\n };\n\n const setAggregationDisplayMode = mode => {\n const allowedModes = ['row', 'column'];\n const normalizedMode = allowedModes.includes(mode) ? mode : 'row';\n const tableOptions = Object.assign({}, props.tableOptions || {}, {\n aggregationDisplayMode: normalizedMode,\n });\n sendPropUpdate({\n tableOptions: {$set: tableOptions},\n });\n };\n\n const addAggregationRow = () => {\n const aggregations = getCurrentAggregations();\n const defaultAggregator =\n props.aggregatorName || Object.keys(props.aggregators)[0];\n const key = generateAggregationKey();\n aggregations.push({\n key,\n aggregatorName: defaultAggregator,\n vals: defaultValsForAggregator(defaultAggregator),\n });\n updateAggregations(aggregations);\n };\n\n const removeAggregationRow = index => {\n const aggregations = getCurrentAggregations();\n if (aggregations.length === 1) {\n return;\n }\n aggregations.splice(index, 1);\n updateAggregations(aggregations);\n };\n\n const setValuesInFilter = (attribute, values) => {\n sendPropUpdate({\n valueFilter: {\n [attribute]: {\n $set: values.reduce((r, v) => {\n r[v] = true;\n return r;\n }, {}),\n },\n },\n });\n };\n\n const addValuesToFilter = (attribute, values) => {\n if (attribute in props.valueFilter) {\n sendPropUpdate({\n valueFilter: {\n [attribute]: values.reduce((r, v) => {\n r[v] = {$set: true};\n return r;\n }, {}),\n },\n });\n } else {\n setValuesInFilter(attribute, values);\n }\n };\n\n const removeValuesFromFilter = (attribute, values) => {\n sendPropUpdate({\n valueFilter: {[attribute]: {$unset: values}},\n });\n };\n\n const moveFilterBoxToTop = attribute => {\n setMaxZIndex(prevMax => {\n const nextMax = prevMax + 1;\n setZIndices(prevZ => Object.assign({}, prevZ, {[attribute]: nextMax}));\n return nextMax;\n });\n };\n\n const handleColSort = (attr, sortDir) => {\n // Only allow sorting 1 column at a time - clear all other column sorts\n const colSorts = {};\n if (sortDir !== null) {\n colSorts[attr] = sortDir;\n }\n sendPropUpdate({colSorts: {$set: colSorts}});\n };\n\n const handleRowSort = (attr, sortDir) => {\n // Only allow sorting 1 row at a time - clear all other row sorts\n const rowSorts = {};\n if (sortDir !== null) {\n rowSorts[attr] = sortDir;\n }\n sendPropUpdate({rowSorts: {$set: rowSorts}});\n };\n\n const isOpen = dropdown => openDropdown === dropdown;\n\n /*\n * Drag-and-drop updates must stay consistent even though SortableJS\n * manipulates the DOM directly (the dragged node can transiently exist in\n * two containers while React reconciles). Two guards are applied:\n * 1. duplicate entries delivered by onChange are dropped (first wins), and\n * 2. rows/cols are kept mutually exclusive: dragging a field into one\n * axis removes it from the other one ($apply keeps whatever order the\n * axis currently has, even if another update landed in the same batch).\n */\n const setAxisFromDrag = (listKey, order) => {\n const uniqueOrder = Array.from(new Set(order));\n const otherKey = listKey === 'rows' ? 'cols' : 'rows';\n const otherList = Array.from(new Set(props[otherKey] || []));\n const overlap = uniqueOrder.filter(name => otherList.includes(name));\n const command = {[listKey]: {$set: uniqueOrder}};\n if (overlap.length > 0) {\n command[otherKey] = {\n $apply: current =>\n Array.from(new Set(current || [])).filter(\n name => !overlap.includes(name)\n ),\n };\n }\n sendPropUpdate(command);\n };\n\n const makeDnDCell = (items, onChange, classes) => (\n <Sortable\n options={{\n group: 'shared',\n ghostClass: 'pvtPlaceholder',\n filter: '.pvtFilterBox',\n preventOnFilter: false,\n }}\n tag=\"td\"\n className={classes}\n onChange={order => onChange(Array.from(new Set(order)))}\n >\n {items.map(x => (\n <DraggableAttribute\n name={x}\n key={x}\n attrValues={attrValues[x]}\n valueFilter={props.valueFilter[x] || {}}\n sorter={getSort(props.sorters, x, attrValues[x])}\n menuLimit={props.menuLimit}\n setValuesInFilter={setValuesInFilter}\n addValuesToFilter={addValuesToFilter}\n moveFilterBoxToTop={moveFilterBoxToTop}\n removeValuesFromFilter={removeValuesFromFilter}\n zIndex={zIndices[x] || maxZIndex}\n />\n ))}\n </Sortable>\n );\n\n const aggregations = getCurrentAggregations();\n const primaryAggregation = aggregations[0];\n const tableOptions = props.tableOptions || {};\n const aggregationDisplayMode =\n tableOptions.aggregationDisplayMode === 'column' ? 'column' : 'row';\n const aggregatorCellOutlet =\n primaryAggregation &&\n props.aggregators[primaryAggregation.aggregatorName] &&\n props.aggregators[primaryAggregation.aggregatorName]([])().outlet;\n\n const rendererName =\n props.rendererName in props.renderers\n ? props.rendererName\n : Object.keys(props.renderers)[0];\n\n const rendererCell = (\n <td className=\"pvtRenderers\">\n <Dropdown\n current={rendererName}\n values={Object.keys(props.renderers)}\n open={isOpen('renderer')}\n zIndex={isOpen('renderer') ? maxZIndex + 1 : 1}\n toggle={() => setOpenDropdown(isOpen('renderer') ? false : 'renderer')}\n setValue={propUpdater('rendererName')}\n />\n </td>\n );\n\n const sortIcons = {\n key_a_to_z: {\n rowSymbol: '↕',\n colSymbol: '↔',\n next: 'value_a_to_z',\n },\n value_a_to_z: {\n rowSymbol: '↓',\n colSymbol: '→',\n next: 'value_z_to_a',\n },\n value_z_to_a: {rowSymbol: '↑', colSymbol: '←', next: 'key_a_to_z'},\n };\n\n const attributeOptions = getAttributeOptions();\n const aggregatorCell = (\n <td className=\"pvtVals\">\n {aggregations.map((agg, idx) => {\n const aggDropdownKey = `aggregation-${agg.key}-agg`;\n const numValsAllowed = numInputsForAggregator(agg.aggregatorName);\n const vals = defaultValsForAggregator(agg.aggregatorName, agg.vals);\n return (\n <div className=\"pvtAggregatorRow\" key={agg.key || idx}>\n <Dropdown\n current={agg.aggregatorName}\n values={Object.keys(props.aggregators)}\n open={isOpen(aggDropdownKey)}\n zIndex={isOpen(aggDropdownKey) ? maxZIndex + 1 : 1}\n toggle={() =>\n setOpenDropdown(isOpen(aggDropdownKey) ? false : aggDropdownKey)\n }\n setValue={value => setAggregationAggregator(idx, value)}\n />\n {numValsAllowed > 0 && (\n <div className=\"pvtAggregatorVals\">\n {new Array(numValsAllowed).fill().map((n, i) => {\n const valDropdownKey = `aggregation-${agg.key}-val-${i}`;\n return (\n <Dropdown\n key={`agg-val-${agg.key}-${i}`}\n current={vals[i]}\n values={attributeOptions}\n open={isOpen(valDropdownKey)}\n zIndex={isOpen(valDropdownKey) ? maxZIndex + 1 : 1}\n toggle={() =>\n setOpenDropdown(\n isOpen(valDropdownKey) ? false : valDropdownKey\n )\n }\n setValue={value => setAggregationVal(idx, i, value)}\n />\n );\n })}\n </div>\n )}\n {aggregations.length > 1 && (\n <button\n type=\"button\"\n className=\"pvtButton pvtRemoveAggregator\"\n onClick={e => {\n e.stopPropagation();\n removeAggregationRow(idx);\n }}\n >\n Remove\n </button>\n )}\n </div>\n );\n })}\n <div className=\"pvtAggregationModeToggle\">\n <label\n htmlFor=\"pvtAggregationMode\"\n style={{marginRight: '6px', fontSize: '12px'}}\n >\n Aggregation values on:\n </label>\n <select\n id=\"pvtAggregationMode\"\n value={aggregationDisplayMode}\n onChange={e => setAggregationDisplayMode(e.target.value)}\n >\n <option value=\"row\">Rows</option>\n <option value=\"column\">Columns</option>\n </select>\n </div>\n <button\n type=\"button\"\n className=\"pvtButton pvtAddAggregator\"\n onClick={e => {\n e.stopPropagation();\n addAggregationRow();\n }}\n >\n + Add Value\n </button>\n <a\n role=\"button\"\n className=\"pvtRowOrder\"\n onClick={() => propUpdater('rowOrder')(sortIcons[props.rowOrder].next)}\n >\n {sortIcons[props.rowOrder].rowSymbol}\n </a>\n <a\n role=\"button\"\n className=\"pvtColOrder\"\n onClick={() => propUpdater('colOrder')(sortIcons[props.colOrder].next)}\n >\n {sortIcons[props.colOrder].colSymbol}\n </a>\n {aggregatorCellOutlet && aggregatorCellOutlet(props.data)}\n <ConditionalFormattingUI\n tableOptions={tableOptions}\n onChange={sendPropUpdate}\n moveToTop={() => moveFilterBoxToTop('conditionalFormatting')}\n zIndex={zIndices.conditionalFormatting || maxZIndex}\n />\n <CellFormattingUI\n tableOptions={tableOptions}\n onChange={sendPropUpdate}\n moveToTop={() => moveFilterBoxToTop('cellFormatting')}\n zIndex={zIndices.cellFormatting || maxZIndex}\n />\n </td>\n );\n\n const unusedAttrs = Object.keys(attrValues)\n .filter(\n e =>\n !props.rows.includes(e) &&\n !props.cols.includes(e) &&\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromDragDrop.includes(e)\n )\n .sort(sortAs(unusedOrder));\n\n const unusedLength = unusedAttrs.reduce((r, e) => r + e.length, 0);\n const horizUnused = unusedLength < props.unusedOrientationCutoff;\n\n const unusedAttrsCell = makeDnDCell(\n unusedAttrs,\n order => setUnusedOrder(order),\n `pvtAxisContainer pvtUnused ${horizUnused ? 'pvtHorizList' : 'pvtVertList'}`\n );\n\n const colAttrs = Array.from(new Set(props.cols)).filter(\n e =>\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromDragDrop.includes(e)\n );\n\n const colAttrsCell = makeDnDCell(\n colAttrs,\n order => setAxisFromDrag('cols', order),\n 'pvtAxisContainer pvtHorizList pvtCols'\n );\n\n const rowAttrs = Array.from(new Set(props.rows)).filter(\n e =>\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromDragDrop.includes(e)\n );\n const rowAttrsCell = makeDnDCell(\n rowAttrs,\n order => setAxisFromDrag('rows', order),\n 'pvtAxisContainer pvtVertList pvtRows'\n );\n\n // `showProcessing` is a testing hook: when true it forces the loading\n // overlay on top of the table regardless of whether a worker computation\n // is actually running.\n const showProcessing =\n (isProcessing || props.showProcessing) && !computeError;\n // While recomputing, re-render the last valid table (old props matched to\n // their own precomputed result) so the overlay sits on top of real content.\n const staleView =\n showProcessing && !resultReady ? lastGoodViewRef.current : null;\n\n let outputContent;\n if (computeError) {\n outputContent = (\n <div className=\"pvtComputeError\">\n <p>\n <strong>PivotTable error: </strong>\n {computeError}\n </p>\n </div>\n );\n } else if (staleView) {\n outputContent = (\n <PivotTable\n {...staleView.props}\n data={staleView.materializedInput}\n precomputedData={\n staleView.precomputed ? staleView.precomputed.data : null\n }\n colSorts={staleView.props.colSorts || {}}\n rowSorts={staleView.props.rowSorts || {}}\n onColSort={handleColSort}\n onRowSort={handleRowSort}\n />\n );\n } else if (showProcessing && !resultReady) {\n // First computation: no previous table to keep visible yet.\n outputContent = <div className=\"pvtOutputPlaceholder\" />;\n } else {\n outputContent = (\n <PivotTable\n {...props}\n data={materializedInput}\n precomputedData={\n workerEligible && precomputed\n ? precomputed.data\n : props.precomputedData || null\n }\n colSorts={props.colSorts || {}}\n rowSorts={props.rowSorts || {}}\n onColSort={handleColSort}\n onRowSort={handleRowSort}\n />\n );\n }\n\n const outputCell = <td className=\"pvtOutput\">{outputContent}</td>;\n\n if (horizUnused) {\n return (\n <React.Fragment>\n {showProcessing ? <PivotLoadingOverlay /> : null}\n <table className=\"pvtUi\">\n <tbody onClick={() => setOpenDropdown(false)}>\n <tr>\n {rendererCell}\n {unusedAttrsCell}\n </tr>\n <tr>\n {aggregatorCell}\n {colAttrsCell}\n </tr>\n <tr>\n {rowAttrsCell}\n {outputCell}\n </tr>\n </tbody>\n </table>\n </React.Fragment>\n );\n }\n\n return (\n <React.Fragment>\n {showProcessing ? <PivotLoadingOverlay /> : null}\n <table className=\"pvtUi\">\n <tbody onClick={() => setOpenDropdown(false)}>\n <tr>\n {rendererCell}\n {aggregatorCell}\n {colAttrsCell}\n </tr>\n <tr>\n {unusedAttrsCell}\n {rowAttrsCell}\n {outputCell}\n </tr>\n </tbody>\n </table>\n </React.Fragment>\n );\n}\n\nPivotTableUI.propTypes = Object.assign({}, PivotTable.propTypes, {\n onChange: PropTypes.func.isRequired,\n hiddenAttributes: PropTypes.arrayOf(PropTypes.string),\n hiddenFromAggregators: PropTypes.arrayOf(PropTypes.string),\n hiddenFromDragDrop: PropTypes.arrayOf(PropTypes.string),\n unusedOrientationCutoff: PropTypes.number,\n menuLimit: PropTypes.number,\n colSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n rowSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n enableWorker: PropTypes.bool,\n workerThreshold: PropTypes.number,\n workerUrl: PropTypes.string,\n workerDebug: PropTypes.bool,\n showProcessing: PropTypes.bool,\n});\n\nPivotTableUI.defaultProps = Object.assign({}, PivotTable.defaultProps, {\n hiddenAttributes: [],\n hiddenFromAggregators: [],\n hiddenFromDragDrop: [],\n unusedOrientationCutoff: 85,\n menuLimit: 500,\n colSorts: {},\n rowSorts: {},\n enableWorker: true,\n workerThreshold: DEFAULT_WORKER_THRESHOLD,\n workerUrl: DEFAULT_WORKER_URL,\n workerDebug: false,\n showProcessing: false,\n});\n\nexport default PivotTableUI;\n"]}
@@ -38,7 +38,6 @@ var CHART_WIDTH_RATIO = 1.5; // Ratio to scale down from full window width
38
38
  var CHART_HEIGHT_RATIO = 1.4; // Ratio to scale down from full window height
39
39
  var CHART_HEIGHT_OFFSET = 50; // Fixed offset to subtract from height calculation
40
40
 
41
-
42
41
  // ============================================================================
43
42
  // Helper Functions
44
43
  // ============================================================================
@@ -559,7 +558,6 @@ function createCategoryDataTraces(pivotData, aggregations, categoryKeys, datumKe
559
558
  };
560
559
 
561
560
  if (plotlyOptions && plotlyOptions.displayText) {
562
-
563
561
  if (traceOptions.type === 'bar') {
564
562
  trace.textposition = traceOptions.orientation === 'h' ? 'middle right' : 'outside';
565
563
  traceOptions.mode = 'text';
@@ -814,9 +812,15 @@ function createPlotlyRenderers(PlotlyComponent) {
814
812
  'Multiple Pie Chart': makeRenderer(PlotlyComponent, { type: 'pie', scalegroup: 1, hoverinfo: 'label+value', textinfo: 'none' }, {}, true),
815
813
  'Grouped Bars by Type': makeGroupedRenderer(PlotlyComponent, { type: 'bar', orientation: 'h' }, { barmode: 'group' }),
816
814
  'Grouped Columns by Type': makeGroupedRenderer(PlotlyComponent, { type: 'bar' }, { barmode: 'group' }),
817
- 'Grouped Lines by Type': makeGroupedRenderer(PlotlyComponent, { mode: 'lines+markers' }),
818
- 'Grouped Areas by Type': makeGroupedRenderer(PlotlyComponent, { stackgroup: 1 }),
819
- 'Grouped Scatters by Type': makeGroupedRenderer(PlotlyComponent, { mode: 'markers' }),
815
+ 'Grouped Lines by Type': makeGroupedRenderer(PlotlyComponent, {
816
+ mode: 'lines+markers'
817
+ }),
818
+ 'Grouped Areas by Type': makeGroupedRenderer(PlotlyComponent, {
819
+ stackgroup: 1
820
+ }),
821
+ 'Grouped Scatters by Type': makeGroupedRenderer(PlotlyComponent, {
822
+ mode: 'markers'
823
+ }),
820
824
  'Grouped Pies by Type': makeGroupedRenderer(PlotlyComponent, { type: 'pie' })
821
825
  };
822
826
  }