0byt3m1n1
Path:
C:
/
Program Files
/
R
/
R-4.2.2
/
library
/
reactable
/
htmlwidgets
/
[
Home
]
File: reactable.js.map
{"version":3,"file":"reactable.js","mappings":"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","sources":["webpack://Reactable/webpack/bootstrap","webpack://Reactable/webpack/runtime/compat get default export","webpack://Reactable/webpack/runtime/define property getters","webpack://Reactable/webpack/runtime/hasOwnProperty shorthand","webpack://Reactable/webpack/runtime/make namespace object","webpack://Reactable/external var \"window.React\"","webpack://Reactable/external var \"window.ReactDOM\"","webpack://Reactable/./srcjs/reactR.js","webpack://Reactable/./node_modules/react-table/src/publicUtils.js","webpack://Reactable/./node_modules/react-table/src/utils.js","webpack://Reactable/./node_modules/react-table/src/makeDefaultPluginHooks.js","webpack://Reactable/./node_modules/react-table/src/hooks/useColumnVisibility.js","webpack://Reactable/./node_modules/react-table/src/hooks/useTable.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/useExpanded.js","webpack://Reactable/./node_modules/react-table/src/filterTypes.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/useFilters.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/useGlobalFilter.js","webpack://Reactable/./node_modules/react-table/src/aggregations.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/useGroupBy.js","webpack://Reactable/./node_modules/react-table/src/sortTypes.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/useSortBy.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/usePagination.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/_UNSTABLE_usePivotColumns.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/useRowSelect.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/useRowState.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/useColumnOrder.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/useResizeColumns.js","webpack://Reactable/./node_modules/react-table/src/plugin-hooks/useGridLayout.js","webpack://Reactable/external var \"window.reactR\"","webpack://Reactable/./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","webpack://Reactable/./node_modules/stylis/src/Utility.js","webpack://Reactable/./node_modules/stylis/src/Tokenizer.js","webpack://Reactable/./node_modules/stylis/src/Enum.js","webpack://Reactable/./node_modules/stylis/src/Serializer.js","webpack://Reactable/./node_modules/stylis/src/Prefixer.js","webpack://Reactable/./node_modules/stylis/src/Parser.js","webpack://Reactable/./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","webpack://Reactable/./node_modules/stylis/src/Middleware.js","webpack://Reactable/./node_modules/@emotion/hash/dist/emotion-hash.esm.js","webpack://Reactable/./node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","webpack://Reactable/./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","webpack://Reactable/./node_modules/@emotion/serialize/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://Reactable/./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","webpack://Reactable/./node_modules/@emotion/css/create-instance/dist/emotion-css-create-instance.esm.js","webpack://Reactable/./srcjs/theme.js","webpack://Reactable/./srcjs/utils.js","webpack://Reactable/./srcjs/language.js","webpack://Reactable/./srcjs/Pagination.js","webpack://Reactable/./srcjs/WidgetContainer.js","webpack://Reactable/./srcjs/useFlexLayout.js","webpack://Reactable/./srcjs/useStickyColumns.js","webpack://Reactable/./srcjs/useGroupBy.js","webpack://Reactable/./srcjs/useResizeColumns.js","webpack://Reactable/./srcjs/useRowSelect.js","webpack://Reactable/./srcjs/usePagination.js","webpack://Reactable/./srcjs/aggregators.js","webpack://Reactable/./srcjs/columns.js","webpack://Reactable/./srcjs/Reactable.js","webpack://Reactable/./srcjs/useMeta.js","webpack://Reactable/./srcjs/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var __WEBPACK_NAMESPACE_OBJECT__ = window.React;","var __WEBPACK_NAMESPACE_OBJECT__ = window.ReactDOM;","/*\n * Adapted from reactR 0.4.4 (https://github.com/react-R/reactR/blob/v0.4.4/srcjs/widget.js)\n * Copyright 2018 Kent Russell\n * Licensed under MIT (https://github.com/react-R/reactR/blob/v0.4.4/LICENSE)\n */\n\nimport React from 'react'\nimport ReactDOM from 'react-dom'\n\n// Modified reactWidget() that additionally supports hydration of server-rendered markup.\nexport function reactWidget(name, type, components) {\n window.HTMLWidgets.widget({\n name: name,\n type: type,\n factory: function (el) {\n return {\n renderValue(value) {\n if (el.hasAttribute('data-react-ssr')) {\n ReactDOM.hydrate(hydrate(components, value.tag), el)\n } else {\n ReactDOM.render(hydrate(components, value.tag), el)\n }\n },\n resize() {\n // resize() is required, but unused\n }\n }\n }\n })\n}\n\n// Must be bundled because react-tools.js needs to be run in a browser context\n// and can't be sourced at runtime in V8.\nexport function hydrate(components, tag) {\n if (typeof tag === 'string') return tag\n if (tag.name[0] === tag.name[0].toUpperCase() && !components[tag.name]) {\n throw new Error('Unknown component: ' + tag.name)\n }\n const elem = components[tag.name] || tag.name\n const args = [elem, tag.attribs]\n for (let child of tag.children) {\n args.push(hydrate(components, child))\n }\n return React.createElement(...args)\n}\n","import React from 'react'\n\nlet renderErr = 'Renderer Error ☝️'\n\nexport const actions = {\n init: 'init',\n}\n\nexport const defaultRenderer = ({ value = '' }) => value;\nexport const emptyRenderer = () => <> </>;\n\nexport const defaultColumn = {\n Cell: defaultRenderer,\n width: 150,\n minWidth: 0,\n maxWidth: Number.MAX_SAFE_INTEGER,\n}\n\nfunction mergeProps(...propList) {\n return propList.reduce((props, next) => {\n const { style, className, ...rest } = next\n\n props = {\n ...props,\n ...rest,\n }\n\n if (style) {\n props.style = props.style\n ? { ...(props.style || {}), ...(style || {}) }\n : style\n }\n\n if (className) {\n props.className = props.className\n ? props.className + ' ' + className\n : className\n }\n\n if (props.className === '') {\n delete props.className\n }\n\n return props\n }, {})\n}\n\nfunction handlePropGetter(prevProps, userProps, meta) {\n // Handle a lambda, pass it the previous props\n if (typeof userProps === 'function') {\n return handlePropGetter({}, userProps(prevProps, meta))\n }\n\n // Handle an array, merge each item as separate props\n if (Array.isArray(userProps)) {\n return mergeProps(prevProps, ...userProps)\n }\n\n // Handle an object by default, merge the two objects\n return mergeProps(prevProps, userProps)\n}\n\nexport const makePropGetter = (hooks, meta = {}) => {\n return (userProps = {}) =>\n [...hooks, userProps].reduce(\n (prev, next) =>\n handlePropGetter(prev, next, {\n ...meta,\n userProps,\n }),\n {}\n )\n}\n\nexport const reduceHooks = (hooks, initial, meta = {}, allowUndefined) =>\n hooks.reduce((prev, next) => {\n const nextValue = next(prev, meta)\n if (process.env.NODE_ENV !== 'production') {\n if (!allowUndefined && typeof nextValue === 'undefined') {\n console.info(next)\n throw new Error(\n 'React Table: A reducer hook ☝️ just returned undefined! This is not allowed.'\n )\n }\n }\n return nextValue\n }, initial)\n\nexport const loopHooks = (hooks, context, meta = {}) =>\n hooks.forEach(hook => {\n const nextValue = hook(context, meta)\n if (process.env.NODE_ENV !== 'production') {\n if (typeof nextValue !== 'undefined') {\n console.info(hook, nextValue)\n throw new Error(\n 'React Table: A loop-type hook ☝️ just returned a value! This is not allowed.'\n )\n }\n }\n })\n\nexport function ensurePluginOrder(plugins, befores, pluginName, afters) {\n if (process.env.NODE_ENV !== 'production' && afters) {\n throw new Error(\n `Defining plugins in the \"after\" section of ensurePluginOrder is no longer supported (see plugin ${pluginName})`\n )\n }\n const pluginIndex = plugins.findIndex(\n plugin => plugin.pluginName === pluginName\n )\n\n if (pluginIndex === -1) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`The plugin \"${pluginName}\" was not found in the plugin list!\nThis usually means you need to need to name your plugin hook by setting the 'pluginName' property of the hook function, eg:\n\n ${pluginName}.pluginName = '${pluginName}'\n`)\n }\n }\n\n befores.forEach(before => {\n const beforeIndex = plugins.findIndex(\n plugin => plugin.pluginName === before\n )\n if (beforeIndex > -1 && beforeIndex > pluginIndex) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n `React Table: The ${pluginName} plugin hook must be placed after the ${before} plugin hook!`\n )\n }\n }\n })\n}\n\nexport function functionalUpdate(updater, old) {\n return typeof updater === 'function' ? updater(old) : updater\n}\n\nexport function useGetLatest(obj) {\n const ref = React.useRef()\n ref.current = obj\n\n return React.useCallback(() => ref.current, [])\n}\n\n// SSR has issues with useLayoutEffect still, so use useEffect during SSR\nexport const safeUseLayoutEffect =\n typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nexport function useMountedLayoutEffect(fn, deps) {\n const mountedRef = React.useRef(false)\n\n safeUseLayoutEffect(() => {\n if (mountedRef.current) {\n fn()\n }\n mountedRef.current = true\n // eslint-disable-next-line\n }, deps)\n}\n\nexport function useAsyncDebounce(defaultFn, defaultWait = 0) {\n const debounceRef = React.useRef({})\n\n const getDefaultFn = useGetLatest(defaultFn)\n const getDefaultWait = useGetLatest(defaultWait)\n\n return React.useCallback(\n async (...args) => {\n if (!debounceRef.current.promise) {\n debounceRef.current.promise = new Promise((resolve, reject) => {\n debounceRef.current.resolve = resolve\n debounceRef.current.reject = reject\n })\n }\n\n if (debounceRef.current.timeout) {\n clearTimeout(debounceRef.current.timeout)\n }\n\n debounceRef.current.timeout = setTimeout(async () => {\n delete debounceRef.current.timeout\n try {\n debounceRef.current.resolve(await getDefaultFn()(...args))\n } catch (err) {\n debounceRef.current.reject(err)\n } finally {\n delete debounceRef.current.promise\n }\n }, getDefaultWait())\n\n return debounceRef.current.promise\n },\n [getDefaultFn, getDefaultWait]\n )\n}\n\nexport function makeRenderer(instance, column, meta = {}) {\n return (type, userProps = {}) => {\n const Comp = typeof type === 'string' ? column[type] : type\n\n if (typeof Comp === 'undefined') {\n console.info(column)\n throw new Error(renderErr)\n }\n\n return flexRender(Comp, { ...instance, column, ...meta, ...userProps })\n }\n}\n\nexport function flexRender(Comp, props) {\n return isReactComponent(Comp) ? <Comp {...props} /> : Comp\n}\n\nfunction isReactComponent(component) {\n return (\n isClassComponent(component) ||\n typeof component === 'function' ||\n isExoticComponent(component)\n )\n}\n\nfunction isClassComponent(component) {\n return (\n typeof component === 'function' &&\n (() => {\n const proto = Object.getPrototypeOf(component)\n return proto.prototype && proto.prototype.isReactComponent\n })()\n )\n}\n\nfunction isExoticComponent(component) {\n return (\n typeof component === 'object' &&\n typeof component.$$typeof === 'symbol' &&\n ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description)\n )\n}\n","import { defaultColumn, emptyRenderer } from './publicUtils'\n\n// Find the depth of the columns\nexport function findMaxDepth(columns, depth = 0) {\n return columns.reduce((prev, curr) => {\n if (curr.columns) {\n return Math.max(prev, findMaxDepth(curr.columns, depth + 1))\n }\n return depth\n }, 0)\n}\n\n// Build the visible columns, headers and flat column list\nexport function linkColumnStructure(columns, parent, depth = 0) {\n return columns.map(column => {\n column = {\n ...column,\n parent,\n depth,\n }\n\n assignColumnAccessor(column)\n\n if (column.columns) {\n column.columns = linkColumnStructure(column.columns, column, depth + 1)\n }\n return column\n })\n}\n\nexport function flattenColumns(columns) {\n return flattenBy(columns, 'columns')\n}\n\nexport function assignColumnAccessor(column) {\n // First check for string accessor\n let { id, accessor, Header } = column\n\n if (typeof accessor === 'string') {\n id = id || accessor\n const accessorPath = accessor.split('.')\n accessor = row => getBy(row, accessorPath)\n }\n\n if (!id && typeof Header === 'string' && Header) {\n id = Header\n }\n\n if (!id && column.columns) {\n console.error(column)\n throw new Error('A column ID (or unique \"Header\" value) is required!')\n }\n\n if (!id) {\n console.error(column)\n throw new Error('A column ID (or string accessor) is required!')\n }\n\n Object.assign(column, {\n id,\n accessor,\n })\n\n return column\n}\n\nexport function decorateColumn(column, userDefaultColumn) {\n if (!userDefaultColumn) {\n throw new Error()\n }\n Object.assign(column, {\n // Make sure there is a fallback header, just in case\n Header: emptyRenderer,\n Footer: emptyRenderer,\n ...defaultColumn,\n ...userDefaultColumn,\n ...column,\n })\n\n Object.assign(column, {\n originalWidth: column.width,\n })\n\n return column\n}\n\n// Build the header groups from the bottom up\nexport function makeHeaderGroups(\n allColumns,\n defaultColumn,\n additionalHeaderProperties = () => ({})\n) {\n const headerGroups = []\n\n let scanColumns = allColumns\n\n let uid = 0\n const getUID = () => uid++\n\n while (scanColumns.length) {\n // The header group we are creating\n const headerGroup = {\n headers: [],\n }\n\n // The parent columns we're going to scan next\n const parentColumns = []\n\n const hasParents = scanColumns.some(d => d.parent)\n\n // Scan each column for parents\n scanColumns.forEach(column => {\n // What is the latest (last) parent column?\n let latestParentColumn = [...parentColumns].reverse()[0]\n\n let newParent\n\n if (hasParents) {\n // If the column has a parent, add it if necessary\n if (column.parent) {\n newParent = {\n ...column.parent,\n originalId: column.parent.id,\n id: `${column.parent.id}_${getUID()}`,\n headers: [column],\n ...additionalHeaderProperties(column),\n }\n } else {\n // If other columns have parents, we'll need to add a place holder if necessary\n const originalId = `${column.id}_placeholder`\n newParent = decorateColumn(\n {\n originalId,\n id: `${column.id}_placeholder_${getUID()}`,\n placeholderOf: column,\n headers: [column],\n ...additionalHeaderProperties(column),\n },\n defaultColumn\n )\n }\n\n // If the resulting parent columns are the same, just add\n // the column and increment the header span\n if (\n latestParentColumn &&\n latestParentColumn.originalId === newParent.originalId\n ) {\n latestParentColumn.headers.push(column)\n } else {\n parentColumns.push(newParent)\n }\n }\n\n headerGroup.headers.push(column)\n })\n\n headerGroups.push(headerGroup)\n\n // Start scanning the parent columns\n scanColumns = parentColumns\n }\n\n return headerGroups.reverse()\n}\n\nconst pathObjCache = new Map()\n\nexport function getBy(obj, path, def) {\n if (!path) {\n return obj\n }\n const cacheKey = typeof path === 'function' ? path : JSON.stringify(path)\n\n const pathObj =\n pathObjCache.get(cacheKey) ||\n (() => {\n const pathObj = makePathArray(path)\n pathObjCache.set(cacheKey, pathObj)\n return pathObj\n })()\n\n let val\n\n try {\n val = pathObj.reduce((cursor, pathPart) => cursor[pathPart], obj)\n } catch (e) {\n // continue regardless of error\n }\n return typeof val !== 'undefined' ? val : def\n}\n\nexport function getFirstDefined(...args) {\n for (let i = 0; i < args.length; i += 1) {\n if (typeof args[i] !== 'undefined') {\n return args[i]\n }\n }\n}\n\nexport function getElementDimensions(element) {\n const rect = element.getBoundingClientRect()\n const style = window.getComputedStyle(element)\n const margins = {\n left: parseInt(style.marginLeft),\n right: parseInt(style.marginRight),\n }\n const padding = {\n left: parseInt(style.paddingLeft),\n right: parseInt(style.paddingRight),\n }\n return {\n left: Math.ceil(rect.left),\n width: Math.ceil(rect.width),\n outerWidth: Math.ceil(\n rect.width + margins.left + margins.right + padding.left + padding.right\n ),\n marginLeft: margins.left,\n marginRight: margins.right,\n paddingLeft: padding.left,\n paddingRight: padding.right,\n scrollWidth: element.scrollWidth,\n }\n}\n\nexport function isFunction(a) {\n if (typeof a === 'function') {\n return a\n }\n}\n\nexport function flattenBy(arr, key) {\n const flat = []\n\n const recurse = arr => {\n arr.forEach(d => {\n if (!d[key]) {\n flat.push(d)\n } else {\n recurse(d[key])\n }\n })\n }\n\n recurse(arr)\n\n return flat\n}\n\nexport function expandRows(\n rows,\n { manualExpandedKey, expanded, expandSubRows = true }\n) {\n const expandedRows = []\n\n const handleRow = (row, addToExpandedRows = true) => {\n row.isExpanded =\n (row.original && row.original[manualExpandedKey]) || expanded[row.id]\n\n row.canExpand = row.subRows && !!row.subRows.length\n\n if (addToExpandedRows) {\n expandedRows.push(row)\n }\n\n if (row.subRows && row.subRows.length && row.isExpanded) {\n row.subRows.forEach(row => handleRow(row, expandSubRows))\n }\n }\n\n rows.forEach(row => handleRow(row))\n\n return expandedRows\n}\n\nexport function getFilterMethod(filter, userFilterTypes, filterTypes) {\n return (\n isFunction(filter) ||\n userFilterTypes[filter] ||\n filterTypes[filter] ||\n filterTypes.text\n )\n}\n\nexport function shouldAutoRemoveFilter(autoRemove, value, column) {\n return autoRemove ? autoRemove(value, column) : typeof value === 'undefined'\n}\n\nexport function unpreparedAccessWarning() {\n throw new Error(\n 'React-Table: You have not called prepareRow(row) one or more rows you are attempting to render.'\n )\n}\n\nlet passiveSupported = null\nexport function passiveEventSupported() {\n // memoize support to avoid adding multiple test events\n if (typeof passiveSupported === 'boolean') return passiveSupported\n\n let supported = false\n try {\n const options = {\n get passive() {\n supported = true\n return false\n },\n }\n\n window.addEventListener('test', null, options)\n window.removeEventListener('test', null, options)\n } catch (err) {\n supported = false\n }\n passiveSupported = supported\n return passiveSupported\n}\n\n//\n\nconst reOpenBracket = /\\[/g\nconst reCloseBracket = /\\]/g\n\nfunction makePathArray(obj) {\n return (\n flattenDeep(obj)\n // remove all periods in parts\n .map(d => String(d).replace('.', '_'))\n // join parts using period\n .join('.')\n // replace brackets with periods\n .replace(reOpenBracket, '.')\n .replace(reCloseBracket, '')\n // split it back out on periods\n .split('.')\n )\n}\n\nfunction flattenDeep(arr, newArr = []) {\n if (!Array.isArray(arr)) {\n newArr.push(arr)\n } else {\n for (let i = 0; i < arr.length; i += 1) {\n flattenDeep(arr[i], newArr)\n }\n }\n return newArr\n}\n","const defaultGetTableProps = props => ({\n role: 'table',\n ...props,\n})\n\nconst defaultGetTableBodyProps = props => ({\n role: 'rowgroup',\n ...props,\n})\n\nconst defaultGetHeaderProps = (props, { column }) => ({\n key: `header_${column.id}`,\n colSpan: column.totalVisibleHeaderCount,\n role: 'columnheader',\n ...props,\n})\n\nconst defaultGetFooterProps = (props, { column }) => ({\n key: `footer_${column.id}`,\n colSpan: column.totalVisibleHeaderCount,\n ...props,\n})\n\nconst defaultGetHeaderGroupProps = (props, { index }) => ({\n key: `headerGroup_${index}`,\n role: 'row',\n ...props,\n})\n\nconst defaultGetFooterGroupProps = (props, { index }) => ({\n key: `footerGroup_${index}`,\n ...props,\n})\n\nconst defaultGetRowProps = (props, { row }) => ({\n key: `row_${row.id}`,\n role: 'row',\n ...props,\n})\n\nconst defaultGetCellProps = (props, { cell }) => ({\n key: `cell_${cell.row.id}_${cell.column.id}`,\n role: 'cell',\n ...props,\n})\n\nexport default function makeDefaultPluginHooks() {\n return {\n useOptions: [],\n stateReducers: [],\n useControlledState: [],\n columns: [],\n columnsDeps: [],\n allColumns: [],\n allColumnsDeps: [],\n accessValue: [],\n materializedColumns: [],\n materializedColumnsDeps: [],\n useInstanceAfterData: [],\n visibleColumns: [],\n visibleColumnsDeps: [],\n headerGroups: [],\n headerGroupsDeps: [],\n useInstanceBeforeDimensions: [],\n useInstance: [],\n prepareRow: [],\n getTableProps: [defaultGetTableProps],\n getTableBodyProps: [defaultGetTableBodyProps],\n getHeaderGroupProps: [defaultGetHeaderGroupProps],\n getFooterGroupProps: [defaultGetFooterGroupProps],\n getHeaderProps: [defaultGetHeaderProps],\n getFooterProps: [defaultGetFooterProps],\n getRowProps: [defaultGetRowProps],\n getCellProps: [defaultGetCellProps],\n useFinalInstance: [],\n }\n}\n","import React from 'react'\n\nimport {\n actions,\n functionalUpdate,\n useGetLatest,\n makePropGetter,\n useMountedLayoutEffect,\n} from '../publicUtils'\n\nactions.resetHiddenColumns = 'resetHiddenColumns'\nactions.toggleHideColumn = 'toggleHideColumn'\nactions.setHiddenColumns = 'setHiddenColumns'\nactions.toggleHideAllColumns = 'toggleHideAllColumns'\n\nexport const useColumnVisibility = hooks => {\n hooks.getToggleHiddenProps = [defaultGetToggleHiddenProps]\n hooks.getToggleHideAllColumnsProps = [defaultGetToggleHideAllColumnsProps]\n\n hooks.stateReducers.push(reducer)\n hooks.useInstanceBeforeDimensions.push(useInstanceBeforeDimensions)\n hooks.headerGroupsDeps.push((deps, { instance }) => [\n ...deps,\n instance.state.hiddenColumns,\n ])\n hooks.useInstance.push(useInstance)\n}\n\nuseColumnVisibility.pluginName = 'useColumnVisibility'\n\nconst defaultGetToggleHiddenProps = (props, { column }) => [\n props,\n {\n onChange: e => {\n column.toggleHidden(!e.target.checked)\n },\n style: {\n cursor: 'pointer',\n },\n checked: column.isVisible,\n title: 'Toggle Column Visible',\n },\n]\n\nconst defaultGetToggleHideAllColumnsProps = (props, { instance }) => [\n props,\n {\n onChange: e => {\n instance.toggleHideAllColumns(!e.target.checked)\n },\n style: {\n cursor: 'pointer',\n },\n checked: !instance.allColumnsHidden && !instance.state.hiddenColumns.length,\n title: 'Toggle All Columns Hidden',\n indeterminate:\n !instance.allColumnsHidden && instance.state.hiddenColumns.length,\n },\n]\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n hiddenColumns: [],\n ...state,\n }\n }\n\n if (action.type === actions.resetHiddenColumns) {\n return {\n ...state,\n hiddenColumns: instance.initialState.hiddenColumns || [],\n }\n }\n\n if (action.type === actions.toggleHideColumn) {\n const should =\n typeof action.value !== 'undefined'\n ? action.value\n : !state.hiddenColumns.includes(action.columnId)\n\n const hiddenColumns = should\n ? [...state.hiddenColumns, action.columnId]\n : state.hiddenColumns.filter(d => d !== action.columnId)\n\n return {\n ...state,\n hiddenColumns,\n }\n }\n\n if (action.type === actions.setHiddenColumns) {\n return {\n ...state,\n hiddenColumns: functionalUpdate(action.value, state.hiddenColumns),\n }\n }\n\n if (action.type === actions.toggleHideAllColumns) {\n const shouldAll =\n typeof action.value !== 'undefined'\n ? action.value\n : !state.hiddenColumns.length\n\n return {\n ...state,\n hiddenColumns: shouldAll ? instance.allColumns.map(d => d.id) : [],\n }\n }\n}\n\nfunction useInstanceBeforeDimensions(instance) {\n const {\n headers,\n state: { hiddenColumns },\n } = instance\n\n const isMountedRef = React.useRef(false)\n\n if (!isMountedRef.current) {\n }\n\n const handleColumn = (column, parentVisible) => {\n column.isVisible = parentVisible && !hiddenColumns.includes(column.id)\n\n let totalVisibleHeaderCount = 0\n\n if (column.headers && column.headers.length) {\n column.headers.forEach(\n subColumn =>\n (totalVisibleHeaderCount += handleColumn(subColumn, column.isVisible))\n )\n } else {\n totalVisibleHeaderCount = column.isVisible ? 1 : 0\n }\n\n column.totalVisibleHeaderCount = totalVisibleHeaderCount\n\n return totalVisibleHeaderCount\n }\n\n let totalVisibleHeaderCount = 0\n\n headers.forEach(\n subHeader => (totalVisibleHeaderCount += handleColumn(subHeader, true))\n )\n}\n\nfunction useInstance(instance) {\n const {\n columns,\n flatHeaders,\n dispatch,\n allColumns,\n getHooks,\n state: { hiddenColumns },\n autoResetHiddenColumns = true,\n } = instance\n\n const getInstance = useGetLatest(instance)\n\n const allColumnsHidden = allColumns.length === hiddenColumns.length\n\n const toggleHideColumn = React.useCallback(\n (columnId, value) =>\n dispatch({ type: actions.toggleHideColumn, columnId, value }),\n [dispatch]\n )\n\n const setHiddenColumns = React.useCallback(\n value => dispatch({ type: actions.setHiddenColumns, value }),\n [dispatch]\n )\n\n const toggleHideAllColumns = React.useCallback(\n value => dispatch({ type: actions.toggleHideAllColumns, value }),\n [dispatch]\n )\n\n const getToggleHideAllColumnsProps = makePropGetter(\n getHooks().getToggleHideAllColumnsProps,\n { instance: getInstance() }\n )\n\n flatHeaders.forEach(column => {\n column.toggleHidden = value => {\n dispatch({\n type: actions.toggleHideColumn,\n columnId: column.id,\n value,\n })\n }\n\n column.getToggleHiddenProps = makePropGetter(\n getHooks().getToggleHiddenProps,\n {\n instance: getInstance(),\n column,\n }\n )\n })\n\n const getAutoResetHiddenColumns = useGetLatest(autoResetHiddenColumns)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetHiddenColumns()) {\n dispatch({ type: actions.resetHiddenColumns })\n }\n }, [dispatch, columns])\n\n Object.assign(instance, {\n allColumnsHidden,\n toggleHideColumn,\n setHiddenColumns,\n toggleHideAllColumns,\n getToggleHideAllColumnsProps,\n })\n}\n","import React from 'react'\n\n//\n\nimport {\n linkColumnStructure,\n flattenColumns,\n assignColumnAccessor,\n unpreparedAccessWarning,\n makeHeaderGroups,\n decorateColumn,\n} from '../utils'\n\nimport {\n useGetLatest,\n reduceHooks,\n actions,\n loopHooks,\n makePropGetter,\n makeRenderer,\n} from '../publicUtils'\n\nimport makeDefaultPluginHooks from '../makeDefaultPluginHooks'\n\nimport { useColumnVisibility } from './useColumnVisibility'\n\nconst defaultInitialState = {}\nconst defaultColumnInstance = {}\nconst defaultReducer = (state, action, prevState) => state\nconst defaultGetSubRows = (row, index) => row.subRows || []\nconst defaultGetRowId = (row, index, parent) =>\n `${parent ? [parent.id, index].join('.') : index}`\nconst defaultUseControlledState = d => d\n\nfunction applyDefaults(props) {\n const {\n initialState = defaultInitialState,\n defaultColumn = defaultColumnInstance,\n getSubRows = defaultGetSubRows,\n getRowId = defaultGetRowId,\n stateReducer = defaultReducer,\n useControlledState = defaultUseControlledState,\n ...rest\n } = props\n\n return {\n ...rest,\n initialState,\n defaultColumn,\n getSubRows,\n getRowId,\n stateReducer,\n useControlledState,\n }\n}\n\nexport const useTable = (props, ...plugins) => {\n // Apply default props\n props = applyDefaults(props)\n\n // Add core plugins\n plugins = [useColumnVisibility, ...plugins]\n\n // Create the table instance\n let instanceRef = React.useRef({})\n\n // Create a getter for the instance (helps avoid a lot of potential memory leaks)\n const getInstance = useGetLatest(instanceRef.current)\n\n // Assign the props, plugins and hooks to the instance\n Object.assign(getInstance(), {\n ...props,\n plugins,\n hooks: makeDefaultPluginHooks(),\n })\n\n // Allow plugins to register hooks as early as possible\n plugins.filter(Boolean).forEach(plugin => {\n plugin(getInstance().hooks)\n })\n\n // Consume all hooks and make a getter for them\n const getHooks = useGetLatest(getInstance().hooks)\n getInstance().getHooks = getHooks\n delete getInstance().hooks\n\n // Allow useOptions hooks to modify the options coming into the table\n Object.assign(\n getInstance(),\n reduceHooks(getHooks().useOptions, applyDefaults(props))\n )\n\n const {\n data,\n columns: userColumns,\n initialState,\n defaultColumn,\n getSubRows,\n getRowId,\n stateReducer,\n useControlledState,\n } = getInstance()\n\n // Setup user reducer ref\n const getStateReducer = useGetLatest(stateReducer)\n\n // Build the reducer\n const reducer = React.useCallback(\n (state, action) => {\n // Detect invalid actions\n if (!action.type) {\n console.info({ action })\n throw new Error('Unknown Action 👆')\n }\n\n // Reduce the state from all plugin reducers\n return [\n ...getHooks().stateReducers,\n // Allow the user to add their own state reducer(s)\n ...(Array.isArray(getStateReducer())\n ? getStateReducer()\n : [getStateReducer()]),\n ].reduce(\n (s, handler) => handler(s, action, state, getInstance()) || s,\n state\n )\n },\n [getHooks, getStateReducer, getInstance]\n )\n\n // Start the reducer\n const [reducerState, dispatch] = React.useReducer(reducer, undefined, () =>\n reducer(initialState, { type: actions.init })\n )\n\n // Allow the user to control the final state with hooks\n const state = reduceHooks(\n [...getHooks().useControlledState, useControlledState],\n reducerState,\n { instance: getInstance() }\n )\n\n Object.assign(getInstance(), {\n state,\n dispatch,\n })\n\n // Decorate All the columns\n const columns = React.useMemo(\n () =>\n linkColumnStructure(\n reduceHooks(getHooks().columns, userColumns, {\n instance: getInstance(),\n })\n ),\n [\n getHooks,\n getInstance,\n userColumns,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...reduceHooks(getHooks().columnsDeps, [], { instance: getInstance() }),\n ]\n )\n getInstance().columns = columns\n\n // Get the flat list of all columns and allow hooks to decorate\n // those columns (and trigger this memoization via deps)\n let allColumns = React.useMemo(\n () =>\n reduceHooks(getHooks().allColumns, flattenColumns(columns), {\n instance: getInstance(),\n }).map(assignColumnAccessor),\n [\n columns,\n getHooks,\n getInstance,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...reduceHooks(getHooks().allColumnsDeps, [], {\n instance: getInstance(),\n }),\n ]\n )\n getInstance().allColumns = allColumns\n\n // Access the row model using initial columns\n const [rows, flatRows, rowsById] = React.useMemo(() => {\n let rows = []\n let flatRows = []\n const rowsById = {}\n\n const allColumnsQueue = [...allColumns]\n\n while (allColumnsQueue.length) {\n const column = allColumnsQueue.shift()\n accessRowsForColumn({\n data,\n rows,\n flatRows,\n rowsById,\n column,\n getRowId,\n getSubRows,\n accessValueHooks: getHooks().accessValue,\n getInstance,\n })\n }\n\n return [rows, flatRows, rowsById]\n }, [allColumns, data, getRowId, getSubRows, getHooks, getInstance])\n\n Object.assign(getInstance(), {\n rows,\n initialRows: [...rows],\n flatRows,\n rowsById,\n // materializedColumns,\n })\n\n loopHooks(getHooks().useInstanceAfterData, getInstance())\n\n // Get the flat list of all columns AFTER the rows\n // have been access, and allow hooks to decorate\n // those columns (and trigger this memoization via deps)\n let visibleColumns = React.useMemo(\n () =>\n reduceHooks(getHooks().visibleColumns, allColumns, {\n instance: getInstance(),\n }).map(d => decorateColumn(d, defaultColumn)),\n [\n getHooks,\n allColumns,\n getInstance,\n defaultColumn,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...reduceHooks(getHooks().visibleColumnsDeps, [], {\n instance: getInstance(),\n }),\n ]\n )\n\n // Combine new visible columns with all columns\n allColumns = React.useMemo(() => {\n const columns = [...visibleColumns]\n\n allColumns.forEach(column => {\n if (!columns.find(d => d.id === column.id)) {\n columns.push(column)\n }\n })\n\n return columns\n }, [allColumns, visibleColumns])\n getInstance().allColumns = allColumns\n\n if (process.env.NODE_ENV !== 'production') {\n const duplicateColumns = allColumns.filter((column, i) => {\n return allColumns.findIndex(d => d.id === column.id) !== i\n })\n\n if (duplicateColumns.length) {\n console.info(allColumns)\n throw new Error(\n `Duplicate columns were found with ids: \"${duplicateColumns\n .map(d => d.id)\n .join(', ')}\" in the columns array above`\n )\n }\n }\n\n // Make the headerGroups\n const headerGroups = React.useMemo(\n () =>\n reduceHooks(\n getHooks().headerGroups,\n makeHeaderGroups(visibleColumns, defaultColumn),\n getInstance()\n ),\n [\n getHooks,\n visibleColumns,\n defaultColumn,\n getInstance,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...reduceHooks(getHooks().headerGroupsDeps, [], {\n instance: getInstance(),\n }),\n ]\n )\n getInstance().headerGroups = headerGroups\n\n // Get the first level of headers\n const headers = React.useMemo(\n () => (headerGroups.length ? headerGroups[0].headers : []),\n [headerGroups]\n )\n getInstance().headers = headers\n\n // Provide a flat header list for utilities\n getInstance().flatHeaders = headerGroups.reduce(\n (all, headerGroup) => [...all, ...headerGroup.headers],\n []\n )\n\n loopHooks(getHooks().useInstanceBeforeDimensions, getInstance())\n\n // Filter columns down to visible ones\n const visibleColumnsDep = visibleColumns\n .filter(d => d.isVisible)\n .map(d => d.id)\n .sort()\n .join('_')\n\n visibleColumns = React.useMemo(\n () => visibleColumns.filter(d => d.isVisible),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [visibleColumns, visibleColumnsDep]\n )\n getInstance().visibleColumns = visibleColumns\n\n // Header Visibility is needed by this point\n const [\n totalColumnsMinWidth,\n totalColumnsWidth,\n totalColumnsMaxWidth,\n ] = calculateHeaderWidths(headers)\n\n getInstance().totalColumnsMinWidth = totalColumnsMinWidth\n getInstance().totalColumnsWidth = totalColumnsWidth\n getInstance().totalColumnsMaxWidth = totalColumnsMaxWidth\n\n loopHooks(getHooks().useInstance, getInstance())\n\n // Each materialized header needs to be assigned a render function and other\n // prop getter properties here.\n ;[...getInstance().flatHeaders, ...getInstance().allColumns].forEach(\n column => {\n // Give columns/headers rendering power\n column.render = makeRenderer(getInstance(), column)\n\n // Give columns/headers a default getHeaderProps\n column.getHeaderProps = makePropGetter(getHooks().getHeaderProps, {\n instance: getInstance(),\n column,\n })\n\n // Give columns/headers a default getFooterProps\n column.getFooterProps = makePropGetter(getHooks().getFooterProps, {\n instance: getInstance(),\n column,\n })\n }\n )\n\n getInstance().headerGroups = React.useMemo(\n () =>\n headerGroups.filter((headerGroup, i) => {\n // Filter out any headers and headerGroups that don't have visible columns\n headerGroup.headers = headerGroup.headers.filter(column => {\n const recurse = headers =>\n headers.filter(column => {\n if (column.headers) {\n return recurse(column.headers)\n }\n return column.isVisible\n }).length\n if (column.headers) {\n return recurse(column.headers)\n }\n return column.isVisible\n })\n\n // Give headerGroups getRowProps\n if (headerGroup.headers.length) {\n headerGroup.getHeaderGroupProps = makePropGetter(\n getHooks().getHeaderGroupProps,\n { instance: getInstance(), headerGroup, index: i }\n )\n\n headerGroup.getFooterGroupProps = makePropGetter(\n getHooks().getFooterGroupProps,\n { instance: getInstance(), headerGroup, index: i }\n )\n\n return true\n }\n\n return false\n }),\n [headerGroups, getInstance, getHooks]\n )\n\n getInstance().footerGroups = [...getInstance().headerGroups].reverse()\n\n // The prepareRow function is absolutely necessary and MUST be called on\n // any rows the user wishes to be displayed.\n\n getInstance().prepareRow = React.useCallback(\n row => {\n row.getRowProps = makePropGetter(getHooks().getRowProps, {\n instance: getInstance(),\n row,\n })\n\n // Build the visible cells for each row\n row.allCells = allColumns.map(column => {\n const value = row.values[column.id]\n\n const cell = {\n column,\n row,\n value,\n }\n\n // Give each cell a getCellProps base\n cell.getCellProps = makePropGetter(getHooks().getCellProps, {\n instance: getInstance(),\n cell,\n })\n\n // Give each cell a renderer function (supports multiple renderers)\n cell.render = makeRenderer(getInstance(), column, {\n row,\n cell,\n value,\n })\n\n return cell\n })\n\n row.cells = visibleColumns.map(column =>\n row.allCells.find(cell => cell.column.id === column.id)\n )\n\n // need to apply any row specific hooks (useExpanded requires this)\n loopHooks(getHooks().prepareRow, row, { instance: getInstance() })\n },\n [getHooks, getInstance, allColumns, visibleColumns]\n )\n\n getInstance().getTableProps = makePropGetter(getHooks().getTableProps, {\n instance: getInstance(),\n })\n\n getInstance().getTableBodyProps = makePropGetter(\n getHooks().getTableBodyProps,\n {\n instance: getInstance(),\n }\n )\n\n loopHooks(getHooks().useFinalInstance, getInstance())\n\n return getInstance()\n}\n\nfunction calculateHeaderWidths(headers, left = 0) {\n let sumTotalMinWidth = 0\n let sumTotalWidth = 0\n let sumTotalMaxWidth = 0\n let sumTotalFlexWidth = 0\n\n headers.forEach(header => {\n let { headers: subHeaders } = header\n\n header.totalLeft = left\n\n if (subHeaders && subHeaders.length) {\n const [\n totalMinWidth,\n totalWidth,\n totalMaxWidth,\n totalFlexWidth,\n ] = calculateHeaderWidths(subHeaders, left)\n header.totalMinWidth = totalMinWidth\n header.totalWidth = totalWidth\n header.totalMaxWidth = totalMaxWidth\n header.totalFlexWidth = totalFlexWidth\n } else {\n header.totalMinWidth = header.minWidth\n header.totalWidth = Math.min(\n Math.max(header.minWidth, header.width),\n header.maxWidth\n )\n header.totalMaxWidth = header.maxWidth\n header.totalFlexWidth = header.canResize ? header.totalWidth : 0\n }\n if (header.isVisible) {\n left += header.totalWidth\n sumTotalMinWidth += header.totalMinWidth\n sumTotalWidth += header.totalWidth\n sumTotalMaxWidth += header.totalMaxWidth\n sumTotalFlexWidth += header.totalFlexWidth\n }\n })\n\n return [sumTotalMinWidth, sumTotalWidth, sumTotalMaxWidth, sumTotalFlexWidth]\n}\n\nfunction accessRowsForColumn({\n data,\n rows,\n flatRows,\n rowsById,\n column,\n getRowId,\n getSubRows,\n accessValueHooks,\n getInstance,\n}) {\n // Access the row's data column-by-column\n // We do it this way so we can incrementally add materialized\n // columns after the first pass and avoid excessive looping\n const accessRow = (originalRow, rowIndex, depth = 0, parent, parentRows) => {\n // Keep the original reference around\n const original = originalRow\n\n const id = getRowId(originalRow, rowIndex, parent)\n\n let row = rowsById[id]\n\n // If the row hasn't been created, let's make it\n if (!row) {\n row = {\n id,\n original,\n index: rowIndex,\n depth,\n cells: [{}], // This is a dummy cell\n }\n\n // Override common array functions (and the dummy cell's getCellProps function)\n // to show an error if it is accessed without calling prepareRow\n row.cells.map = unpreparedAccessWarning\n row.cells.filter = unpreparedAccessWarning\n row.cells.forEach = unpreparedAccessWarning\n row.cells[0].getCellProps = unpreparedAccessWarning\n\n // Create the cells and values\n row.values = {}\n\n // Push this row into the parentRows array\n parentRows.push(row)\n // Keep track of every row in a flat array\n flatRows.push(row)\n // Also keep track of every row by its ID\n rowsById[id] = row\n\n // Get the original subrows\n row.originalSubRows = getSubRows(originalRow, rowIndex)\n\n // Then recursively access them\n if (row.originalSubRows) {\n const subRows = []\n row.originalSubRows.forEach((d, i) =>\n accessRow(d, i, depth + 1, row, subRows)\n )\n // Keep the new subRows array on the row\n row.subRows = subRows\n }\n } else if (row.subRows) {\n // If the row exists, then it's already been accessed\n // Keep recursing, but don't worry about passing the\n // accumlator array (those rows already exist)\n row.originalSubRows.forEach((d, i) => accessRow(d, i, depth + 1, row))\n }\n\n // If the column has an accessor, use it to get a value\n if (column.accessor) {\n row.values[column.id] = column.accessor(\n originalRow,\n rowIndex,\n row,\n parentRows,\n data\n )\n }\n\n // Allow plugins to manipulate the column value\n row.values[column.id] = reduceHooks(\n accessValueHooks,\n row.values[column.id],\n {\n row,\n column,\n instance: getInstance(),\n },\n true\n )\n }\n\n data.forEach((originalRow, rowIndex) =>\n accessRow(originalRow, rowIndex, 0, undefined, rows)\n )\n}\n","import React from 'react'\n\nimport { expandRows } from '../utils'\n\nimport {\n useGetLatest,\n actions,\n useMountedLayoutEffect,\n makePropGetter,\n ensurePluginOrder,\n} from '../publicUtils'\n\n// Actions\nactions.resetExpanded = 'resetExpanded'\nactions.toggleRowExpanded = 'toggleRowExpanded'\nactions.toggleAllRowsExpanded = 'toggleAllRowsExpanded'\n\nexport const useExpanded = hooks => {\n hooks.getToggleAllRowsExpandedProps = [defaultGetToggleAllRowsExpandedProps]\n hooks.getToggleRowExpandedProps = [defaultGetToggleRowExpandedProps]\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\nuseExpanded.pluginName = 'useExpanded'\n\nconst defaultGetToggleAllRowsExpandedProps = (props, { instance }) => [\n props,\n {\n onClick: e => {\n instance.toggleAllRowsExpanded()\n },\n style: {\n cursor: 'pointer',\n },\n title: 'Toggle All Rows Expanded',\n },\n]\n\nconst defaultGetToggleRowExpandedProps = (props, { row }) => [\n props,\n {\n onClick: () => {\n row.toggleRowExpanded()\n },\n style: {\n cursor: 'pointer',\n },\n title: 'Toggle Row Expanded',\n },\n]\n\n// Reducer\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n expanded: {},\n ...state,\n }\n }\n\n if (action.type === actions.resetExpanded) {\n return {\n ...state,\n expanded: instance.initialState.expanded || {},\n }\n }\n\n if (action.type === actions.toggleAllRowsExpanded) {\n const { value } = action\n const { rowsById } = instance\n\n const isAllRowsExpanded =\n Object.keys(rowsById).length === Object.keys(state.expanded).length\n\n const expandAll = typeof value !== 'undefined' ? value : !isAllRowsExpanded\n\n if (expandAll) {\n const expanded = {}\n\n Object.keys(rowsById).forEach(rowId => {\n expanded[rowId] = true\n })\n\n return {\n ...state,\n expanded,\n }\n }\n\n return {\n ...state,\n expanded: {},\n }\n }\n\n if (action.type === actions.toggleRowExpanded) {\n const { id, value: setExpanded } = action\n const exists = state.expanded[id]\n\n const shouldExist =\n typeof setExpanded !== 'undefined' ? setExpanded : !exists\n\n if (!exists && shouldExist) {\n return {\n ...state,\n expanded: {\n ...state.expanded,\n [id]: true,\n },\n }\n } else if (exists && !shouldExist) {\n const { [id]: _, ...rest } = state.expanded\n return {\n ...state,\n expanded: rest,\n }\n } else {\n return state\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n rowsById,\n manualExpandedKey = 'expanded',\n paginateExpandedRows = true,\n expandSubRows = true,\n autoResetExpanded = true,\n getHooks,\n plugins,\n state: { expanded },\n dispatch,\n } = instance\n\n ensurePluginOrder(\n plugins,\n ['useSortBy', 'useGroupBy', 'usePivotColumns', 'useGlobalFilter'],\n 'useExpanded'\n )\n\n const getAutoResetExpanded = useGetLatest(autoResetExpanded)\n\n let isAllRowsExpanded = Boolean(\n Object.keys(rowsById).length && Object.keys(expanded).length\n )\n\n if (isAllRowsExpanded) {\n if (Object.keys(rowsById).some(id => !expanded[id])) {\n isAllRowsExpanded = false\n }\n }\n\n // Bypass any effects from firing when this changes\n useMountedLayoutEffect(() => {\n if (getAutoResetExpanded()) {\n dispatch({ type: actions.resetExpanded })\n }\n }, [dispatch, data])\n\n const toggleRowExpanded = React.useCallback(\n (id, value) => {\n dispatch({ type: actions.toggleRowExpanded, id, value })\n },\n [dispatch]\n )\n\n const toggleAllRowsExpanded = React.useCallback(\n value => dispatch({ type: actions.toggleAllRowsExpanded, value }),\n [dispatch]\n )\n\n const expandedRows = React.useMemo(() => {\n if (paginateExpandedRows) {\n return expandRows(rows, { manualExpandedKey, expanded, expandSubRows })\n }\n\n return rows\n }, [paginateExpandedRows, rows, manualExpandedKey, expanded, expandSubRows])\n\n const expandedDepth = React.useMemo(() => findExpandedDepth(expanded), [\n expanded,\n ])\n\n const getInstance = useGetLatest(instance)\n\n const getToggleAllRowsExpandedProps = makePropGetter(\n getHooks().getToggleAllRowsExpandedProps,\n { instance: getInstance() }\n )\n\n Object.assign(instance, {\n preExpandedRows: rows,\n expandedRows,\n rows: expandedRows,\n expandedDepth,\n isAllRowsExpanded,\n toggleRowExpanded,\n toggleAllRowsExpanded,\n getToggleAllRowsExpandedProps,\n })\n}\n\nfunction prepareRow(row, { instance: { getHooks }, instance }) {\n row.toggleRowExpanded = set => instance.toggleRowExpanded(row.id, set)\n\n row.getToggleRowExpandedProps = makePropGetter(\n getHooks().getToggleRowExpandedProps,\n {\n instance,\n row,\n }\n )\n}\n\nfunction findExpandedDepth(expanded) {\n let maxDepth = 0\n\n Object.keys(expanded).forEach(id => {\n const splitId = id.split('.')\n maxDepth = Math.max(maxDepth, splitId.length)\n })\n\n return maxDepth\n}\n","export const text = (rows, ids, filterValue) => {\n rows = rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return String(rowValue)\n .toLowerCase()\n .includes(String(filterValue).toLowerCase())\n })\n })\n return rows\n}\n\ntext.autoRemove = val => !val\n\nexport const exactText = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return rowValue !== undefined\n ? String(rowValue).toLowerCase() === String(filterValue).toLowerCase()\n : true\n })\n })\n}\n\nexactText.autoRemove = val => !val\n\nexport const exactTextCase = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return rowValue !== undefined\n ? String(rowValue) === String(filterValue)\n : true\n })\n })\n}\n\nexactTextCase.autoRemove = val => !val\n\nexport const includes = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return rowValue.includes(filterValue)\n })\n })\n}\n\nincludes.autoRemove = val => !val || !val.length\n\nexport const includesAll = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return (\n rowValue &&\n rowValue.length &&\n filterValue.every(val => rowValue.includes(val))\n )\n })\n })\n}\n\nincludesAll.autoRemove = val => !val || !val.length\n\nexport const includesSome = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return (\n rowValue &&\n rowValue.length &&\n filterValue.some(val => rowValue.includes(val))\n )\n })\n })\n}\n\nincludesSome.autoRemove = val => !val || !val.length\n\nexport const includesValue = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return filterValue.includes(rowValue)\n })\n })\n}\n\nincludesValue.autoRemove = val => !val || !val.length\n\nexport const exact = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return rowValue === filterValue\n })\n })\n}\n\nexact.autoRemove = val => typeof val === 'undefined'\n\nexport const equals = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n // eslint-disable-next-line eqeqeq\n return rowValue == filterValue\n })\n })\n}\n\nequals.autoRemove = val => val == null\n\nexport const between = (rows, ids, filterValue) => {\n let [min, max] = filterValue || []\n\n min = typeof min === 'number' ? min : -Infinity\n max = typeof max === 'number' ? max : Infinity\n\n if (min > max) {\n const temp = min\n min = max\n max = temp\n }\n\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return rowValue >= min && rowValue <= max\n })\n })\n}\n\nbetween.autoRemove = val =>\n !val || (typeof val[0] !== 'number' && typeof val[1] !== 'number')\n","import React from 'react'\n\nimport {\n getFirstDefined,\n getFilterMethod,\n shouldAutoRemoveFilter,\n} from '../utils'\n\nimport {\n actions,\n useGetLatest,\n functionalUpdate,\n useMountedLayoutEffect,\n} from '../publicUtils'\n\nimport * as filterTypes from '../filterTypes'\n\n// Actions\nactions.resetFilters = 'resetFilters'\nactions.setFilter = 'setFilter'\nactions.setAllFilters = 'setAllFilters'\n\nexport const useFilters = hooks => {\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n}\n\nuseFilters.pluginName = 'useFilters'\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n filters: [],\n ...state,\n }\n }\n\n if (action.type === actions.resetFilters) {\n return {\n ...state,\n filters: instance.initialState.filters || [],\n }\n }\n\n if (action.type === actions.setFilter) {\n const { columnId, filterValue } = action\n const { allColumns, filterTypes: userFilterTypes } = instance\n\n const column = allColumns.find(d => d.id === columnId)\n\n if (!column) {\n throw new Error(\n `React-Table: Could not find a column with id: ${columnId}`\n )\n }\n\n const filterMethod = getFilterMethod(\n column.filter,\n userFilterTypes || {},\n filterTypes\n )\n\n const previousfilter = state.filters.find(d => d.id === columnId)\n\n const newFilter = functionalUpdate(\n filterValue,\n previousfilter && previousfilter.value\n )\n\n //\n if (shouldAutoRemoveFilter(filterMethod.autoRemove, newFilter, column)) {\n return {\n ...state,\n filters: state.filters.filter(d => d.id !== columnId),\n }\n }\n\n if (previousfilter) {\n return {\n ...state,\n filters: state.filters.map(d => {\n if (d.id === columnId) {\n return { id: columnId, value: newFilter }\n }\n return d\n }),\n }\n }\n\n return {\n ...state,\n filters: [...state.filters, { id: columnId, value: newFilter }],\n }\n }\n\n if (action.type === actions.setAllFilters) {\n const { filters } = action\n const { allColumns, filterTypes: userFilterTypes } = instance\n\n return {\n ...state,\n // Filter out undefined values\n filters: functionalUpdate(filters, state.filters).filter(filter => {\n const column = allColumns.find(d => d.id === filter.id)\n const filterMethod = getFilterMethod(\n column.filter,\n userFilterTypes || {},\n filterTypes\n )\n\n if (\n shouldAutoRemoveFilter(filterMethod.autoRemove, filter.value, column)\n ) {\n return false\n }\n return true\n }),\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n flatRows,\n rowsById,\n allColumns,\n filterTypes: userFilterTypes,\n manualFilters,\n defaultCanFilter = false,\n disableFilters,\n state: { filters },\n dispatch,\n autoResetFilters = true,\n } = instance\n\n const setFilter = React.useCallback(\n (columnId, filterValue) => {\n dispatch({ type: actions.setFilter, columnId, filterValue })\n },\n [dispatch]\n )\n\n const setAllFilters = React.useCallback(\n filters => {\n dispatch({\n type: actions.setAllFilters,\n filters,\n })\n },\n [dispatch]\n )\n\n allColumns.forEach(column => {\n const {\n id,\n accessor,\n defaultCanFilter: columnDefaultCanFilter,\n disableFilters: columnDisableFilters,\n } = column\n\n // Determine if a column is filterable\n column.canFilter = accessor\n ? getFirstDefined(\n columnDisableFilters === true ? false : undefined,\n disableFilters === true ? false : undefined,\n true\n )\n : getFirstDefined(columnDefaultCanFilter, defaultCanFilter, false)\n\n // Provide the column a way of updating the filter value\n column.setFilter = val => setFilter(column.id, val)\n\n // Provide the current filter value to the column for\n // convenience\n const found = filters.find(d => d.id === id)\n column.filterValue = found && found.value\n })\n\n const [\n filteredRows,\n filteredFlatRows,\n filteredRowsById,\n ] = React.useMemo(() => {\n if (manualFilters || !filters.length) {\n return [rows, flatRows, rowsById]\n }\n\n const filteredFlatRows = []\n const filteredRowsById = {}\n\n // Filters top level and nested rows\n const filterRows = (rows, depth = 0) => {\n let filteredRows = rows\n\n filteredRows = filters.reduce(\n (filteredSoFar, { id: columnId, value: filterValue }) => {\n // Find the filters column\n const column = allColumns.find(d => d.id === columnId)\n\n if (!column) {\n return filteredSoFar\n }\n\n if (depth === 0) {\n column.preFilteredRows = filteredSoFar\n }\n\n const filterMethod = getFilterMethod(\n column.filter,\n userFilterTypes || {},\n filterTypes\n )\n\n if (!filterMethod) {\n console.warn(\n `Could not find a valid 'column.filter' for column with the ID: ${column.id}.`\n )\n return filteredSoFar\n }\n\n // Pass the rows, id, filterValue and column to the filterMethod\n // to get the filtered rows back\n column.filteredRows = filterMethod(\n filteredSoFar,\n [columnId],\n filterValue\n )\n\n return column.filteredRows\n },\n rows\n )\n\n // Apply the filter to any subRows\n // We technically could do this recursively in the above loop,\n // but that would severely hinder the API for the user, since they\n // would be required to do that recursion in some scenarios\n filteredRows.forEach(row => {\n filteredFlatRows.push(row)\n filteredRowsById[row.id] = row\n if (!row.subRows) {\n return\n }\n\n row.subRows =\n row.subRows && row.subRows.length > 0\n ? filterRows(row.subRows, depth + 1)\n : row.subRows\n })\n\n return filteredRows\n }\n\n return [filterRows(rows), filteredFlatRows, filteredRowsById]\n }, [\n manualFilters,\n filters,\n rows,\n flatRows,\n rowsById,\n allColumns,\n userFilterTypes,\n ])\n\n React.useMemo(() => {\n // Now that each filtered column has it's partially filtered rows,\n // lets assign the final filtered rows to all of the other columns\n const nonFilteredColumns = allColumns.filter(\n column => !filters.find(d => d.id === column.id)\n )\n\n // This essentially enables faceted filter options to be built easily\n // using every column's preFilteredRows value\n nonFilteredColumns.forEach(column => {\n column.preFilteredRows = filteredRows\n column.filteredRows = filteredRows\n })\n }, [filteredRows, filters, allColumns])\n\n const getAutoResetFilters = useGetLatest(autoResetFilters)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetFilters()) {\n dispatch({ type: actions.resetFilters })\n }\n }, [dispatch, manualFilters ? null : data])\n\n Object.assign(instance, {\n preFilteredRows: rows,\n preFilteredFlatRows: flatRows,\n preFilteredRowsById: rowsById,\n filteredRows,\n filteredFlatRows,\n filteredRowsById,\n rows: filteredRows,\n flatRows: filteredFlatRows,\n rowsById: filteredRowsById,\n setFilter,\n setAllFilters,\n })\n}\n","import React from 'react'\n\nimport {\n getFilterMethod,\n shouldAutoRemoveFilter,\n getFirstDefined,\n} from '../utils'\n\nimport {\n actions,\n useMountedLayoutEffect,\n functionalUpdate,\n useGetLatest,\n} from '../publicUtils'\n\nimport * as filterTypes from '../filterTypes'\n\n// Actions\nactions.resetGlobalFilter = 'resetGlobalFilter'\nactions.setGlobalFilter = 'setGlobalFilter'\n\nexport const useGlobalFilter = hooks => {\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n}\n\nuseGlobalFilter.pluginName = 'useGlobalFilter'\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.resetGlobalFilter) {\n return {\n ...state,\n globalFilter: instance.initialState.globalFilter || undefined,\n }\n }\n\n if (action.type === actions.setGlobalFilter) {\n const { filterValue } = action\n const { userFilterTypes } = instance\n\n const filterMethod = getFilterMethod(\n instance.globalFilter,\n userFilterTypes || {},\n filterTypes\n )\n\n const newFilter = functionalUpdate(filterValue, state.globalFilter)\n\n //\n if (shouldAutoRemoveFilter(filterMethod.autoRemove, newFilter)) {\n const { globalFilter, ...stateWithoutGlobalFilter } = state\n return stateWithoutGlobalFilter\n }\n\n return {\n ...state,\n globalFilter: newFilter,\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n flatRows,\n rowsById,\n allColumns,\n filterTypes: userFilterTypes,\n globalFilter,\n manualGlobalFilter,\n state: { globalFilter: globalFilterValue },\n dispatch,\n autoResetGlobalFilter = true,\n disableGlobalFilter,\n } = instance\n\n const setGlobalFilter = React.useCallback(\n filterValue => {\n dispatch({ type: actions.setGlobalFilter, filterValue })\n },\n [dispatch]\n )\n\n // TODO: Create a filter cache for incremental high speed multi-filtering\n // This gets pretty complicated pretty fast, since you have to maintain a\n // cache for each row group (top-level rows, and each row's recursive subrows)\n // This would make multi-filtering a lot faster though. Too far?\n\n const [\n globalFilteredRows,\n globalFilteredFlatRows,\n globalFilteredRowsById,\n ] = React.useMemo(() => {\n if (manualGlobalFilter || typeof globalFilterValue === 'undefined') {\n return [rows, flatRows, rowsById]\n }\n\n const filteredFlatRows = []\n const filteredRowsById = {}\n\n const filterMethod = getFilterMethod(\n globalFilter,\n userFilterTypes || {},\n filterTypes\n )\n\n if (!filterMethod) {\n console.warn(`Could not find a valid 'globalFilter' option.`)\n return rows\n }\n\n allColumns.forEach(column => {\n const { disableGlobalFilter: columnDisableGlobalFilter } = column\n\n column.canFilter = getFirstDefined(\n columnDisableGlobalFilter === true ? false : undefined,\n disableGlobalFilter === true ? false : undefined,\n true\n )\n })\n\n const filterableColumns = allColumns.filter(c => c.canFilter === true)\n\n // Filters top level and nested rows\n const filterRows = filteredRows => {\n filteredRows = filterMethod(\n filteredRows,\n filterableColumns.map(d => d.id),\n globalFilterValue\n )\n\n filteredRows.forEach(row => {\n filteredFlatRows.push(row)\n filteredRowsById[row.id] = row\n\n row.subRows =\n row.subRows && row.subRows.length\n ? filterRows(row.subRows)\n : row.subRows\n })\n\n return filteredRows\n }\n\n return [filterRows(rows), filteredFlatRows, filteredRowsById]\n }, [\n manualGlobalFilter,\n globalFilterValue,\n globalFilter,\n userFilterTypes,\n allColumns,\n rows,\n flatRows,\n rowsById,\n disableGlobalFilter,\n ])\n\n const getAutoResetGlobalFilter = useGetLatest(autoResetGlobalFilter)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetGlobalFilter()) {\n dispatch({ type: actions.resetGlobalFilter })\n }\n }, [dispatch, manualGlobalFilter ? null : data])\n\n Object.assign(instance, {\n preGlobalFilteredRows: rows,\n preGlobalFilteredFlatRows: flatRows,\n preGlobalFilteredRowsById: rowsById,\n globalFilteredRows,\n globalFilteredFlatRows,\n globalFilteredRowsById,\n rows: globalFilteredRows,\n flatRows: globalFilteredFlatRows,\n rowsById: globalFilteredRowsById,\n setGlobalFilter,\n disableGlobalFilter,\n })\n}\n","export function sum(values, aggregatedValues) {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return aggregatedValues.reduce(\n (sum, next) => sum + (typeof next === 'number' ? next : 0),\n 0\n )\n}\n\nexport function min(values) {\n let min = values[0] || 0\n\n values.forEach(value => {\n if (typeof value === 'number') {\n min = Math.min(min, value)\n }\n })\n\n return min\n}\n\nexport function max(values) {\n let max = values[0] || 0\n\n values.forEach(value => {\n if (typeof value === 'number') {\n max = Math.max(max, value)\n }\n })\n\n return max\n}\n\nexport function minMax(values) {\n let min = values[0] || 0\n let max = values[0] || 0\n\n values.forEach(value => {\n if (typeof value === 'number') {\n min = Math.min(min, value)\n max = Math.max(max, value)\n }\n })\n\n return `${min}..${max}`\n}\n\nexport function average(values) {\n return sum(null, values) / values.length\n}\n\nexport function median(values) {\n if (!values.length) {\n return null\n }\n\n const mid = Math.floor(values.length / 2)\n const nums = [...values].sort((a, b) => a - b)\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2\n}\n\nexport function unique(values) {\n return Array.from(new Set(values).values())\n}\n\nexport function uniqueCount(values) {\n return new Set(values).size\n}\n\nexport function count(values) {\n return values.length\n}\n","import React from 'react'\n\nimport * as aggregations from '../aggregations'\n\nimport { getFirstDefined, flattenBy } from '../utils'\n\nimport {\n actions,\n makePropGetter,\n ensurePluginOrder,\n useMountedLayoutEffect,\n useGetLatest,\n} from '../publicUtils'\n\nconst emptyArray = []\nconst emptyObject = {}\n\n// Actions\nactions.resetGroupBy = 'resetGroupBy'\nactions.setGroupBy = 'setGroupBy'\nactions.toggleGroupBy = 'toggleGroupBy'\n\nexport const useGroupBy = hooks => {\n hooks.getGroupByToggleProps = [defaultGetGroupByToggleProps]\n hooks.stateReducers.push(reducer)\n hooks.visibleColumnsDeps.push((deps, { instance }) => [\n ...deps,\n instance.state.groupBy,\n ])\n hooks.visibleColumns.push(visibleColumns)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\nuseGroupBy.pluginName = 'useGroupBy'\n\nconst defaultGetGroupByToggleProps = (props, { header }) => [\n props,\n {\n onClick: header.canGroupBy\n ? e => {\n e.persist()\n header.toggleGroupBy()\n }\n : undefined,\n style: {\n cursor: header.canGroupBy ? 'pointer' : undefined,\n },\n title: 'Toggle GroupBy',\n },\n]\n\n// Reducer\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n groupBy: [],\n ...state,\n }\n }\n\n if (action.type === actions.resetGroupBy) {\n return {\n ...state,\n groupBy: instance.initialState.groupBy || [],\n }\n }\n\n if (action.type === actions.setGroupBy) {\n const { value } = action\n return {\n ...state,\n groupBy: value,\n }\n }\n\n if (action.type === actions.toggleGroupBy) {\n const { columnId, value: setGroupBy } = action\n\n const resolvedGroupBy =\n typeof setGroupBy !== 'undefined'\n ? setGroupBy\n : !state.groupBy.includes(columnId)\n\n if (resolvedGroupBy) {\n return {\n ...state,\n groupBy: [...state.groupBy, columnId],\n }\n }\n\n return {\n ...state,\n groupBy: state.groupBy.filter(d => d !== columnId),\n }\n }\n}\n\nfunction visibleColumns(\n columns,\n {\n instance: {\n state: { groupBy },\n },\n }\n) {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n\n const groupByColumns = groupBy\n .map(g => columns.find(col => col.id === g))\n .filter(Boolean)\n\n const nonGroupByColumns = columns.filter(col => !groupBy.includes(col.id))\n\n columns = [...groupByColumns, ...nonGroupByColumns]\n\n columns.forEach(column => {\n column.isGrouped = groupBy.includes(column.id)\n column.groupedIndex = groupBy.indexOf(column.id)\n })\n\n return columns\n}\n\nconst defaultUserAggregations = {}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n flatRows,\n rowsById,\n allColumns,\n flatHeaders,\n groupByFn = defaultGroupByFn,\n manualGroupBy,\n aggregations: userAggregations = defaultUserAggregations,\n plugins,\n state: { groupBy },\n dispatch,\n autoResetGroupBy = true,\n disableGroupBy,\n defaultCanGroupBy,\n getHooks,\n } = instance\n\n ensurePluginOrder(plugins, ['useColumnOrder', 'useFilters'], 'useGroupBy')\n\n const getInstance = useGetLatest(instance)\n\n allColumns.forEach(column => {\n const {\n accessor,\n defaultGroupBy: defaultColumnGroupBy,\n disableGroupBy: columnDisableGroupBy,\n } = column\n\n column.canGroupBy = accessor\n ? getFirstDefined(\n column.canGroupBy,\n columnDisableGroupBy === true ? false : undefined,\n disableGroupBy === true ? false : undefined,\n true\n )\n : getFirstDefined(\n column.canGroupBy,\n defaultColumnGroupBy,\n defaultCanGroupBy,\n false\n )\n\n if (column.canGroupBy) {\n column.toggleGroupBy = () => instance.toggleGroupBy(column.id)\n }\n\n column.Aggregated = column.Aggregated || column.Cell\n })\n\n const toggleGroupBy = React.useCallback(\n (columnId, value) => {\n dispatch({ type: actions.toggleGroupBy, columnId, value })\n },\n [dispatch]\n )\n\n const setGroupBy = React.useCallback(\n value => {\n dispatch({ type: actions.setGroupBy, value })\n },\n [dispatch]\n )\n\n flatHeaders.forEach(header => {\n header.getGroupByToggleProps = makePropGetter(\n getHooks().getGroupByToggleProps,\n { instance: getInstance(), header }\n )\n })\n\n const [\n groupedRows,\n groupedFlatRows,\n groupedRowsById,\n onlyGroupedFlatRows,\n onlyGroupedRowsById,\n nonGroupedFlatRows,\n nonGroupedRowsById,\n ] = React.useMemo(() => {\n if (manualGroupBy || !groupBy.length) {\n return [\n rows,\n flatRows,\n rowsById,\n emptyArray,\n emptyObject,\n flatRows,\n rowsById,\n ]\n }\n\n // Ensure that the list of filtered columns exist\n const existingGroupBy = groupBy.filter(g =>\n allColumns.find(col => col.id === g)\n )\n\n // Find the columns that can or are aggregating\n // Uses each column to aggregate rows into a single value\n const aggregateRowsToValues = (leafRows, groupedRows, depth) => {\n const values = {}\n\n allColumns.forEach(column => {\n // Don't aggregate columns that are in the groupBy\n if (existingGroupBy.includes(column.id)) {\n values[column.id] = groupedRows[0]\n ? groupedRows[0].values[column.id]\n : null\n return\n }\n\n // Aggregate the values\n let aggregateFn =\n typeof column.aggregate === 'function'\n ? column.aggregate\n : userAggregations[column.aggregate] ||\n aggregations[column.aggregate]\n\n if (aggregateFn) {\n // Get the columnValues to aggregate\n const groupedValues = groupedRows.map(row => row.values[column.id])\n\n // Get the columnValues to aggregate\n const leafValues = leafRows.map(row => {\n let columnValue = row.values[column.id]\n\n if (!depth && column.aggregateValue) {\n const aggregateValueFn =\n typeof column.aggregateValue === 'function'\n ? column.aggregateValue\n : userAggregations[column.aggregateValue] ||\n aggregations[column.aggregateValue]\n\n if (!aggregateValueFn) {\n console.info({ column })\n throw new Error(\n `React Table: Invalid column.aggregateValue option for column listed above`\n )\n }\n\n columnValue = aggregateValueFn(columnValue, row, column)\n }\n return columnValue\n })\n\n values[column.id] = aggregateFn(leafValues, groupedValues)\n } else if (column.aggregate) {\n console.info({ column })\n throw new Error(\n `React Table: Invalid column.aggregate option for column listed above`\n )\n } else {\n values[column.id] = null\n }\n })\n\n return values\n }\n\n let groupedFlatRows = []\n const groupedRowsById = {}\n const onlyGroupedFlatRows = []\n const onlyGroupedRowsById = {}\n const nonGroupedFlatRows = []\n const nonGroupedRowsById = {}\n\n // Recursively group the data\n const groupUpRecursively = (rows, depth = 0, parentId) => {\n // This is the last level, just return the rows\n if (depth === existingGroupBy.length) {\n return rows.map((row) => ({ ...row, depth }))\n }\n\n const columnId = existingGroupBy[depth]\n\n // Group the rows together for this level\n let rowGroupsMap = groupByFn(rows, columnId)\n\n // Peform aggregations for each group\n const aggregatedGroupedRows = Object.entries(rowGroupsMap).map(\n ([groupByVal, groupedRows], index) => {\n let id = `${columnId}:${groupByVal}`\n id = parentId ? `${parentId}>${id}` : id\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id)\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth\n ? flattenBy(groupedRows, 'leafRows')\n : groupedRows\n\n const values = aggregateRowsToValues(leafRows, groupedRows, depth)\n\n const row = {\n id,\n isGrouped: true,\n groupByID: columnId,\n groupByVal,\n values,\n subRows,\n leafRows,\n depth,\n index,\n }\n\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow)\n groupedRowsById[subRow.id] = subRow\n if (subRow.isGrouped) {\n onlyGroupedFlatRows.push(subRow)\n onlyGroupedRowsById[subRow.id] = subRow\n } else {\n nonGroupedFlatRows.push(subRow)\n nonGroupedRowsById[subRow.id] = subRow\n }\n })\n\n return row\n }\n )\n\n return aggregatedGroupedRows\n }\n\n const groupedRows = groupUpRecursively(rows)\n\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow)\n groupedRowsById[subRow.id] = subRow\n if (subRow.isGrouped) {\n onlyGroupedFlatRows.push(subRow)\n onlyGroupedRowsById[subRow.id] = subRow\n } else {\n nonGroupedFlatRows.push(subRow)\n nonGroupedRowsById[subRow.id] = subRow\n }\n })\n\n // Assign the new data\n return [\n groupedRows,\n groupedFlatRows,\n groupedRowsById,\n onlyGroupedFlatRows,\n onlyGroupedRowsById,\n nonGroupedFlatRows,\n nonGroupedRowsById,\n ]\n }, [\n manualGroupBy,\n groupBy,\n rows,\n flatRows,\n rowsById,\n allColumns,\n userAggregations,\n groupByFn,\n ])\n\n const getAutoResetGroupBy = useGetLatest(autoResetGroupBy)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetGroupBy()) {\n dispatch({ type: actions.resetGroupBy })\n }\n }, [dispatch, manualGroupBy ? null : data])\n\n Object.assign(instance, {\n preGroupedRows: rows,\n preGroupedFlatRow: flatRows,\n preGroupedRowsById: rowsById,\n groupedRows,\n groupedFlatRows,\n groupedRowsById,\n onlyGroupedFlatRows,\n onlyGroupedRowsById,\n nonGroupedFlatRows,\n nonGroupedRowsById,\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById,\n toggleGroupBy,\n setGroupBy,\n })\n}\n\nfunction prepareRow(row) {\n row.allCells.forEach(cell => {\n // Grouped cells are in the groupBy and the pivot cell for the row\n cell.isGrouped = cell.column.isGrouped && cell.column.id === row.groupByID\n // Placeholder cells are any columns in the groupBy that are not grouped\n cell.isPlaceholder = !cell.isGrouped && cell.column.isGrouped\n // Aggregated cells are not grouped, not repeated, but still have subRows\n cell.isAggregated =\n !cell.isGrouped && !cell.isPlaceholder && row.subRows?.length\n })\n}\n\nexport function defaultGroupByFn(rows, columnId) {\n return rows.reduce((prev, row, i) => {\n // TODO: Might want to implement a key serializer here so\n // irregular column values can still be grouped if needed?\n const resKey = `${row.values[columnId]}`\n prev[resKey] = Array.isArray(prev[resKey]) ? prev[resKey] : []\n prev[resKey].push(row)\n return prev\n }, {})\n}\n","const reSplitAlphaNumeric = /([0-9]+)/gm\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nexport const alphanumeric = (rowA, rowB, columnId) => {\n let [a, b] = getRowValuesByColumnID(rowA, rowB, columnId)\n\n // Force to strings (or \"\" for unsupported types)\n a = toString(a)\n b = toString(b)\n\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n a = a.split(reSplitAlphaNumeric).filter(Boolean)\n b = b.split(reSplitAlphaNumeric).filter(Boolean)\n\n // While\n while (a.length && b.length) {\n let aa = a.shift()\n let bb = b.shift()\n\n const an = parseInt(aa, 10)\n const bn = parseInt(bb, 10)\n\n const combo = [an, bn].sort()\n\n // Both are string\n if (isNaN(combo[0])) {\n if (aa > bb) {\n return 1\n }\n if (bb > aa) {\n return -1\n }\n continue\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1])) {\n return isNaN(an) ? -1 : 1\n }\n\n // Both are numbers\n if (an > bn) {\n return 1\n }\n if (bn > an) {\n return -1\n }\n }\n\n return a.length - b.length\n}\nexport function datetime(rowA, rowB, columnId) {\n let [a, b] = getRowValuesByColumnID(rowA, rowB, columnId)\n\n a = a.getTime()\n b = b.getTime()\n\n return compareBasic(a, b)\n}\n\nexport function basic(rowA, rowB, columnId) {\n let [a, b] = getRowValuesByColumnID(rowA, rowB, columnId)\n\n return compareBasic(a, b)\n}\n\nexport function string(rowA, rowB, columnId) {\n let [a, b] = getRowValuesByColumnID(rowA, rowB, columnId)\n\n a = a.split('').filter(Boolean)\n b = b.split('').filter(Boolean)\n\n while (a.length && b.length) {\n let aa = a.shift()\n let bb = b.shift()\n\n let alower = aa.toLowerCase()\n let blower = bb.toLowerCase()\n\n // Case insensitive comparison until characters match\n if (alower > blower) {\n return 1\n }\n if (blower > alower) {\n return -1\n }\n // If lowercase characters are identical\n if (aa > bb) {\n return 1\n }\n if (bb > aa) {\n return -1\n }\n continue\n }\n\n return a.length - b.length\n}\n\nexport function number(rowA, rowB, columnId) {\n let [a, b] = getRowValuesByColumnID(rowA, rowB, columnId)\n\n const replaceNonNumeric = /[^0-9.]/gi\n\n a = Number(String(a).replace(replaceNonNumeric, ''))\n b = Number(String(b).replace(replaceNonNumeric, ''))\n\n return compareBasic(a, b)\n}\n\n// Utils\n\nfunction compareBasic(a, b) {\n return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction getRowValuesByColumnID(row1, row2, columnId) {\n return [row1.values[columnId], row2.values[columnId]]\n}\n\nfunction toString(a) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return ''\n }\n return String(a)\n }\n if (typeof a === 'string') {\n return a\n }\n return ''\n}\n","import React from 'react'\n\nimport {\n actions,\n ensurePluginOrder,\n defaultColumn,\n makePropGetter,\n useGetLatest,\n useMountedLayoutEffect,\n} from '../publicUtils'\n\nimport { getFirstDefined, isFunction } from '../utils'\n\nimport * as sortTypes from '../sortTypes'\n\n// Actions\nactions.resetSortBy = 'resetSortBy'\nactions.setSortBy = 'setSortBy'\nactions.toggleSortBy = 'toggleSortBy'\nactions.clearSortBy = 'clearSortBy'\n\ndefaultColumn.sortType = 'alphanumeric'\ndefaultColumn.sortDescFirst = false\n\nexport const useSortBy = hooks => {\n hooks.getSortByToggleProps = [defaultGetSortByToggleProps]\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n}\n\nuseSortBy.pluginName = 'useSortBy'\n\nconst defaultGetSortByToggleProps = (props, { instance, column }) => {\n const { isMultiSortEvent = e => e.shiftKey } = instance\n\n return [\n props,\n {\n onClick: column.canSort\n ? e => {\n e.persist()\n column.toggleSortBy(\n undefined,\n !instance.disableMultiSort && isMultiSortEvent(e)\n )\n }\n : undefined,\n style: {\n cursor: column.canSort ? 'pointer' : undefined,\n },\n title: column.canSort ? 'Toggle SortBy' : undefined,\n },\n ]\n}\n\n// Reducer\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n sortBy: [],\n ...state,\n }\n }\n\n if (action.type === actions.resetSortBy) {\n return {\n ...state,\n sortBy: instance.initialState.sortBy || [],\n }\n }\n\n if (action.type === actions.clearSortBy) {\n const { sortBy } = state\n const newSortBy = sortBy.filter(d => d.id !== action.columnId)\n\n return {\n ...state,\n sortBy: newSortBy,\n }\n }\n\n if (action.type === actions.setSortBy) {\n const { sortBy } = action\n return {\n ...state,\n sortBy,\n }\n }\n\n if (action.type === actions.toggleSortBy) {\n const { columnId, desc, multi } = action\n\n const {\n allColumns,\n disableMultiSort,\n disableSortRemove,\n disableMultiRemove,\n maxMultiSortColCount = Number.MAX_SAFE_INTEGER,\n } = instance\n\n const { sortBy } = state\n\n // Find the column for this columnId\n const column = allColumns.find(d => d.id === columnId)\n const { sortDescFirst } = column\n\n // Find any existing sortBy for this column\n const existingSortBy = sortBy.find(d => d.id === columnId)\n const existingIndex = sortBy.findIndex(d => d.id === columnId)\n const hasDescDefined = typeof desc !== 'undefined' && desc !== null\n\n let newSortBy = []\n\n // What should we do with this sort action?\n let sortAction\n\n if (!disableMultiSort && multi) {\n if (existingSortBy) {\n sortAction = 'toggle'\n } else {\n sortAction = 'add'\n }\n } else {\n // Normal mode\n if (existingIndex !== sortBy.length - 1 || sortBy.length !== 1) {\n sortAction = 'replace'\n } else if (existingSortBy) {\n sortAction = 'toggle'\n } else {\n sortAction = 'replace'\n }\n }\n\n // Handle toggle states that will remove the sortBy\n if (\n sortAction === 'toggle' && // Must be toggling\n !disableSortRemove && // If disableSortRemove, disable in general\n !hasDescDefined && // Must not be setting desc\n (multi ? !disableMultiRemove : true) && // If multi, don't allow if disableMultiRemove\n ((existingSortBy && // Finally, detect if it should indeed be removed\n existingSortBy.desc &&\n !sortDescFirst) ||\n (!existingSortBy.desc && sortDescFirst))\n ) {\n sortAction = 'remove'\n }\n\n if (sortAction === 'replace') {\n newSortBy = [\n {\n id: columnId,\n desc: hasDescDefined ? desc : sortDescFirst,\n },\n ]\n } else if (sortAction === 'add') {\n newSortBy = [\n ...sortBy,\n {\n id: columnId,\n desc: hasDescDefined ? desc : sortDescFirst,\n },\n ]\n // Take latest n columns\n newSortBy.splice(0, newSortBy.length - maxMultiSortColCount)\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSortBy = sortBy.map(d => {\n if (d.id === columnId) {\n return {\n ...d,\n desc: hasDescDefined ? desc : !existingSortBy.desc,\n }\n }\n return d\n })\n } else if (sortAction === 'remove') {\n newSortBy = sortBy.filter(d => d.id !== columnId)\n }\n\n return {\n ...state,\n sortBy: newSortBy,\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n flatRows,\n allColumns,\n orderByFn = defaultOrderByFn,\n sortTypes: userSortTypes,\n manualSortBy,\n defaultCanSort,\n disableSortBy,\n flatHeaders,\n state: { sortBy },\n dispatch,\n plugins,\n getHooks,\n autoResetSortBy = true,\n } = instance\n\n ensurePluginOrder(\n plugins,\n ['useFilters', 'useGlobalFilter', 'useGroupBy', 'usePivotColumns'],\n 'useSortBy'\n )\n\n const setSortBy = React.useCallback(\n sortBy => {\n dispatch({ type: actions.setSortBy, sortBy })\n },\n [dispatch]\n )\n\n // Updates sorting based on a columnId, desc flag and multi flag\n const toggleSortBy = React.useCallback(\n (columnId, desc, multi) => {\n dispatch({ type: actions.toggleSortBy, columnId, desc, multi })\n },\n [dispatch]\n )\n\n // use reference to avoid memory leak in #1608\n const getInstance = useGetLatest(instance)\n\n // Add the getSortByToggleProps method to columns and headers\n flatHeaders.forEach(column => {\n const {\n accessor,\n canSort: defaultColumnCanSort,\n disableSortBy: columnDisableSortBy,\n id,\n } = column\n\n const canSort = accessor\n ? getFirstDefined(\n columnDisableSortBy === true ? false : undefined,\n disableSortBy === true ? false : undefined,\n true\n )\n : getFirstDefined(defaultCanSort, defaultColumnCanSort, false)\n\n column.canSort = canSort\n\n if (column.canSort) {\n column.toggleSortBy = (desc, multi) =>\n toggleSortBy(column.id, desc, multi)\n\n column.clearSortBy = () => {\n dispatch({ type: actions.clearSortBy, columnId: column.id })\n }\n }\n\n column.getSortByToggleProps = makePropGetter(\n getHooks().getSortByToggleProps,\n {\n instance: getInstance(),\n column,\n }\n )\n\n const columnSort = sortBy.find(d => d.id === id)\n column.isSorted = !!columnSort\n column.sortedIndex = sortBy.findIndex(d => d.id === id)\n column.isSortedDesc = column.isSorted ? columnSort.desc : undefined\n })\n\n const [sortedRows, sortedFlatRows] = React.useMemo(() => {\n if (manualSortBy || !sortBy.length) {\n return [rows, flatRows]\n }\n\n const sortedFlatRows = []\n\n // Filter out sortBys that correspond to non existing columns\n const availableSortBy = sortBy.filter(sort =>\n allColumns.find(col => col.id === sort.id)\n )\n\n const sortData = rows => {\n // Use the orderByFn to compose multiple sortBy's together.\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = orderByFn(\n rows,\n availableSortBy.map(sort => {\n // Support custom sorting methods for each column\n const column = allColumns.find(d => d.id === sort.id)\n\n if (!column) {\n throw new Error(\n `React-Table: Could not find a column with id: ${sort.id} while sorting`\n )\n }\n\n const { sortType } = column\n\n // Look up sortBy functions in this order:\n // column function\n // column string lookup on user sortType\n // column string lookup on built-in sortType\n // default function\n // default string lookup on user sortType\n // default string lookup on built-in sortType\n const sortMethod =\n isFunction(sortType) ||\n (userSortTypes || {})[sortType] ||\n sortTypes[sortType]\n\n if (!sortMethod) {\n throw new Error(\n `React-Table: Could not find a valid sortType of '${sortType}' for column '${sort.id}'.`\n )\n }\n\n // Return the correct sortFn.\n // This function should always return in ascending order\n return (a, b) => sortMethod(a, b, sort.id, sort.desc)\n }),\n // Map the directions\n availableSortBy.map(sort => {\n // Detect and use the sortInverted option\n const column = allColumns.find(d => d.id === sort.id)\n\n if (column && column.sortInverted) {\n return sort.desc\n }\n\n return !sort.desc\n })\n )\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n sortedFlatRows.push(row)\n if (!row.subRows || row.subRows.length === 0) {\n return\n }\n row.subRows = sortData(row.subRows)\n })\n\n return sortedData\n }\n\n return [sortData(rows), sortedFlatRows]\n }, [\n manualSortBy,\n sortBy,\n rows,\n flatRows,\n allColumns,\n orderByFn,\n userSortTypes,\n ])\n\n const getAutoResetSortBy = useGetLatest(autoResetSortBy)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetSortBy()) {\n dispatch({ type: actions.resetSortBy })\n }\n }, [manualSortBy ? null : data])\n\n Object.assign(instance, {\n preSortedRows: rows,\n preSortedFlatRows: flatRows,\n sortedRows,\n sortedFlatRows,\n rows: sortedRows,\n flatRows: sortedFlatRows,\n setSortBy,\n toggleSortBy,\n })\n}\n\nexport function defaultOrderByFn(arr, funcs, dirs) {\n return [...arr].sort((rowA, rowB) => {\n for (let i = 0; i < funcs.length; i += 1) {\n const sortFn = funcs[i]\n const desc = dirs[i] === false || dirs[i] === 'desc'\n const sortInt = sortFn(rowA, rowB)\n if (sortInt !== 0) {\n return desc ? -sortInt : sortInt\n }\n }\n return dirs[0] ? rowA.index - rowB.index : rowB.index - rowA.index\n })\n}\n","import React from 'react'\n\n//\n\nimport {\n actions,\n ensurePluginOrder,\n functionalUpdate,\n useMountedLayoutEffect,\n useGetLatest,\n} from '../publicUtils'\n\nimport { expandRows } from '../utils'\n\nconst pluginName = 'usePagination'\n\n// Actions\nactions.resetPage = 'resetPage'\nactions.gotoPage = 'gotoPage'\nactions.setPageSize = 'setPageSize'\n\nexport const usePagination = hooks => {\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n}\n\nusePagination.pluginName = pluginName\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n pageSize: 10,\n pageIndex: 0,\n ...state,\n }\n }\n\n if (action.type === actions.resetPage) {\n return {\n ...state,\n pageIndex: instance.initialState.pageIndex || 0,\n }\n }\n\n if (action.type === actions.gotoPage) {\n const { pageCount, page } = instance\n const newPageIndex = functionalUpdate(action.pageIndex, state.pageIndex)\n let canNavigate = false\n\n if (newPageIndex > state.pageIndex) {\n // next page\n canNavigate =\n pageCount === -1\n ? page.length >= state.pageSize\n : newPageIndex < pageCount\n } else if (newPageIndex < state.pageIndex) {\n // prev page\n canNavigate = newPageIndex > -1\n }\n\n if (!canNavigate) {\n return state\n }\n\n return {\n ...state,\n pageIndex: newPageIndex,\n }\n }\n\n if (action.type === actions.setPageSize) {\n const { pageSize } = action\n const topRowIndex = state.pageSize * state.pageIndex\n const pageIndex = Math.floor(topRowIndex / pageSize)\n\n return {\n ...state,\n pageIndex,\n pageSize,\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n rows,\n autoResetPage = true,\n manualExpandedKey = 'expanded',\n plugins,\n pageCount: userPageCount,\n paginateExpandedRows = true,\n expandSubRows = true,\n state: {\n pageSize,\n pageIndex,\n expanded,\n globalFilter,\n filters,\n groupBy,\n sortBy,\n },\n dispatch,\n data,\n manualPagination,\n } = instance\n\n ensurePluginOrder(\n plugins,\n ['useGlobalFilter', 'useFilters', 'useGroupBy', 'useSortBy', 'useExpanded'],\n 'usePagination'\n )\n\n const getAutoResetPage = useGetLatest(autoResetPage)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetPage()) {\n dispatch({ type: actions.resetPage })\n }\n }, [\n dispatch,\n manualPagination ? null : data,\n globalFilter,\n filters,\n groupBy,\n sortBy,\n ])\n\n const pageCount = manualPagination\n ? userPageCount\n : Math.ceil(rows.length / pageSize)\n\n const pageOptions = React.useMemo(\n () =>\n pageCount > 0\n ? [...new Array(pageCount)].fill(null).map((d, i) => i)\n : [],\n [pageCount]\n )\n\n const page = React.useMemo(() => {\n let page\n\n if (manualPagination) {\n page = rows\n } else {\n const pageStart = pageSize * pageIndex\n const pageEnd = pageStart + pageSize\n\n page = rows.slice(pageStart, pageEnd)\n }\n\n if (paginateExpandedRows) {\n return page\n }\n\n return expandRows(page, { manualExpandedKey, expanded, expandSubRows })\n }, [\n expandSubRows,\n expanded,\n manualExpandedKey,\n manualPagination,\n pageIndex,\n pageSize,\n paginateExpandedRows,\n rows,\n ])\n\n const canPreviousPage = pageIndex > 0\n const canNextPage =\n pageCount === -1 ? page.length >= pageSize : pageIndex < pageCount - 1\n\n const gotoPage = React.useCallback(\n pageIndex => {\n dispatch({ type: actions.gotoPage, pageIndex })\n },\n [dispatch]\n )\n\n const previousPage = React.useCallback(() => {\n return gotoPage(old => old - 1)\n }, [gotoPage])\n\n const nextPage = React.useCallback(() => {\n return gotoPage(old => old + 1)\n }, [gotoPage])\n\n const setPageSize = React.useCallback(\n pageSize => {\n dispatch({ type: actions.setPageSize, pageSize })\n },\n [dispatch]\n )\n\n Object.assign(instance, {\n pageOptions,\n pageCount,\n page,\n canPreviousPage,\n canNextPage,\n gotoPage,\n previousPage,\n nextPage,\n setPageSize,\n })\n}\n","/* istanbul ignore file */\n\nimport {\n actions,\n makePropGetter,\n ensurePluginOrder,\n useMountedLayoutEffect,\n useGetLatest,\n} from '../publicUtils'\n\nimport { flattenColumns, getFirstDefined } from '../utils'\n\n// Actions\nactions.resetPivot = 'resetPivot'\nactions.togglePivot = 'togglePivot'\n\nexport const _UNSTABLE_usePivotColumns = hooks => {\n hooks.getPivotToggleProps = [defaultGetPivotToggleProps]\n hooks.stateReducers.push(reducer)\n hooks.useInstanceAfterData.push(useInstanceAfterData)\n hooks.allColumns.push(allColumns)\n hooks.accessValue.push(accessValue)\n hooks.materializedColumns.push(materializedColumns)\n hooks.materializedColumnsDeps.push(materializedColumnsDeps)\n hooks.visibleColumns.push(visibleColumns)\n hooks.visibleColumnsDeps.push(visibleColumnsDeps)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\n_UNSTABLE_usePivotColumns.pluginName = 'usePivotColumns'\n\nconst defaultPivotColumns = []\n\nconst defaultGetPivotToggleProps = (props, { header }) => [\n props,\n {\n onClick: header.canPivot\n ? e => {\n e.persist()\n header.togglePivot()\n }\n : undefined,\n style: {\n cursor: header.canPivot ? 'pointer' : undefined,\n },\n title: 'Toggle Pivot',\n },\n]\n\n// Reducer\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n pivotColumns: defaultPivotColumns,\n ...state,\n }\n }\n\n if (action.type === actions.resetPivot) {\n return {\n ...state,\n pivotColumns: instance.initialState.pivotColumns || defaultPivotColumns,\n }\n }\n\n if (action.type === actions.togglePivot) {\n const { columnId, value: setPivot } = action\n\n const resolvedPivot =\n typeof setPivot !== 'undefined'\n ? setPivot\n : !state.pivotColumns.includes(columnId)\n\n if (resolvedPivot) {\n return {\n ...state,\n pivotColumns: [...state.pivotColumns, columnId],\n }\n }\n\n return {\n ...state,\n pivotColumns: state.pivotColumns.filter(d => d !== columnId),\n }\n }\n}\n\nfunction useInstanceAfterData(instance) {\n instance.allColumns.forEach(column => {\n column.isPivotSource = instance.state.pivotColumns.includes(column.id)\n })\n}\n\nfunction allColumns(columns, { instance }) {\n columns.forEach(column => {\n column.isPivotSource = instance.state.pivotColumns.includes(column.id)\n column.uniqueValues = new Set()\n })\n return columns\n}\n\nfunction accessValue(value, { column }) {\n if (column.uniqueValues && typeof value !== 'undefined') {\n column.uniqueValues.add(value)\n }\n return value\n}\n\nfunction materializedColumns(materialized, { instance }) {\n const { allColumns, state } = instance\n\n if (!state.pivotColumns.length || !state.groupBy || !state.groupBy.length) {\n return materialized\n }\n\n const pivotColumns = state.pivotColumns\n .map(id => allColumns.find(d => d.id === id))\n .filter(Boolean)\n\n const sourceColumns = allColumns.filter(\n d =>\n !d.isPivotSource &&\n !state.groupBy.includes(d.id) &&\n !state.pivotColumns.includes(d.id)\n )\n\n const buildPivotColumns = (depth = 0, parent, pivotFilters = []) => {\n const pivotColumn = pivotColumns[depth]\n\n if (!pivotColumn) {\n return sourceColumns.map(sourceColumn => {\n // TODO: We could offer support here for renesting pivoted\n // columns inside copies of their header groups. For now,\n // that seems like it would be (1) overkill on nesting, considering\n // you already get nesting for every pivot level and (2)\n // really hard. :)\n\n return {\n ...sourceColumn,\n canPivot: false,\n isPivoted: true,\n parent,\n depth: depth,\n id: `${parent ? `${parent.id}.${sourceColumn.id}` : sourceColumn.id}`,\n accessor: (originalRow, i, row) => {\n if (pivotFilters.every(filter => filter(row))) {\n return row.values[sourceColumn.id]\n }\n },\n }\n })\n }\n\n const uniqueValues = Array.from(pivotColumn.uniqueValues).sort()\n\n return uniqueValues.map(uniqueValue => {\n const columnGroup = {\n ...pivotColumn,\n Header:\n pivotColumn.PivotHeader || typeof pivotColumn.header === 'string'\n ? `${pivotColumn.Header}: ${uniqueValue}`\n : uniqueValue,\n isPivotGroup: true,\n parent,\n depth,\n id: parent\n ? `${parent.id}.${pivotColumn.id}.${uniqueValue}`\n : `${pivotColumn.id}.${uniqueValue}`,\n pivotValue: uniqueValue,\n }\n\n columnGroup.columns = buildPivotColumns(depth + 1, columnGroup, [\n ...pivotFilters,\n row => row.values[pivotColumn.id] === uniqueValue,\n ])\n\n return columnGroup\n })\n }\n\n const newMaterialized = flattenColumns(buildPivotColumns())\n\n return [...materialized, ...newMaterialized]\n}\n\nfunction materializedColumnsDeps(\n deps,\n {\n instance: {\n state: { pivotColumns, groupBy },\n },\n }\n) {\n return [...deps, pivotColumns, groupBy]\n}\n\nfunction visibleColumns(visibleColumns, { instance: { state } }) {\n visibleColumns = visibleColumns.filter(d => !d.isPivotSource)\n\n if (state.pivotColumns.length && state.groupBy && state.groupBy.length) {\n visibleColumns = visibleColumns.filter(\n column => column.isGrouped || column.isPivoted\n )\n }\n\n return visibleColumns\n}\n\nfunction visibleColumnsDeps(deps, { instance }) {\n return [...deps, instance.state.pivotColumns, instance.state.groupBy]\n}\n\nfunction useInstance(instance) {\n const {\n columns,\n allColumns,\n flatHeaders,\n // pivotFn = defaultPivotFn,\n // manualPivot,\n getHooks,\n plugins,\n dispatch,\n autoResetPivot = true,\n manaulPivot,\n disablePivot,\n defaultCanPivot,\n } = instance\n\n ensurePluginOrder(plugins, ['useGroupBy'], 'usePivotColumns')\n\n const getInstance = useGetLatest(instance)\n\n allColumns.forEach(column => {\n const {\n accessor,\n defaultPivot: defaultColumnPivot,\n disablePivot: columnDisablePivot,\n } = column\n\n column.canPivot = accessor\n ? getFirstDefined(\n column.canPivot,\n columnDisablePivot === true ? false : undefined,\n disablePivot === true ? false : undefined,\n true\n )\n : getFirstDefined(\n column.canPivot,\n defaultColumnPivot,\n defaultCanPivot,\n false\n )\n\n if (column.canPivot) {\n column.togglePivot = () => instance.togglePivot(column.id)\n }\n\n column.Aggregated = column.Aggregated || column.Cell\n })\n\n const togglePivot = (columnId, value) => {\n dispatch({ type: actions.togglePivot, columnId, value })\n }\n\n flatHeaders.forEach(header => {\n header.getPivotToggleProps = makePropGetter(\n getHooks().getPivotToggleProps,\n {\n instance: getInstance(),\n header,\n }\n )\n })\n\n const getAutoResetPivot = useGetLatest(autoResetPivot)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetPivot()) {\n dispatch({ type: actions.resetPivot })\n }\n }, [dispatch, manaulPivot ? null : columns])\n\n Object.assign(instance, {\n togglePivot,\n })\n}\n\nfunction prepareRow(row) {\n row.allCells.forEach(cell => {\n // Grouped cells are in the pivotColumns and the pivot cell for the row\n cell.isPivoted = cell.column.isPivoted\n })\n}\n","import React from 'react'\n\nimport {\n actions,\n makePropGetter,\n ensurePluginOrder,\n useGetLatest,\n useMountedLayoutEffect,\n} from '../publicUtils'\n\nconst pluginName = 'useRowSelect'\n\n// Actions\nactions.resetSelectedRows = 'resetSelectedRows'\nactions.toggleAllRowsSelected = 'toggleAllRowsSelected'\nactions.toggleRowSelected = 'toggleRowSelected'\nactions.toggleAllPageRowsSelected = 'toggleAllPageRowsSelected'\n\nexport const useRowSelect = hooks => {\n hooks.getToggleRowSelectedProps = [defaultGetToggleRowSelectedProps]\n hooks.getToggleAllRowsSelectedProps = [defaultGetToggleAllRowsSelectedProps]\n hooks.getToggleAllPageRowsSelectedProps = [\n defaultGetToggleAllPageRowsSelectedProps,\n ]\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\nuseRowSelect.pluginName = pluginName\n\nconst defaultGetToggleRowSelectedProps = (props, { instance, row }) => {\n const { manualRowSelectedKey = 'isSelected' } = instance\n let checked = false\n\n if (row.original && row.original[manualRowSelectedKey]) {\n checked = true\n } else {\n checked = row.isSelected\n }\n\n return [\n props,\n {\n onChange: e => {\n row.toggleRowSelected(e.target.checked)\n },\n style: {\n cursor: 'pointer',\n },\n checked,\n title: 'Toggle Row Selected',\n indeterminate: row.isSomeSelected,\n },\n ]\n}\n\nconst defaultGetToggleAllRowsSelectedProps = (props, { instance }) => [\n props,\n {\n onChange: e => {\n instance.toggleAllRowsSelected(e.target.checked)\n },\n style: {\n cursor: 'pointer',\n },\n checked: instance.isAllRowsSelected,\n title: 'Toggle All Rows Selected',\n indeterminate: Boolean(\n !instance.isAllRowsSelected &&\n Object.keys(instance.state.selectedRowIds).length\n ),\n },\n]\n\nconst defaultGetToggleAllPageRowsSelectedProps = (props, { instance }) => [\n props,\n {\n onChange(e) {\n instance.toggleAllPageRowsSelected(e.target.checked)\n },\n style: {\n cursor: 'pointer',\n },\n checked: instance.isAllPageRowsSelected,\n title: 'Toggle All Current Page Rows Selected',\n indeterminate: Boolean(\n !instance.isAllPageRowsSelected &&\n instance.page.some(({ id }) => instance.state.selectedRowIds[id])\n ),\n },\n]\n\n// eslint-disable-next-line max-params\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n selectedRowIds: {},\n ...state,\n }\n }\n\n if (action.type === actions.resetSelectedRows) {\n return {\n ...state,\n selectedRowIds: instance.initialState.selectedRowIds || {},\n }\n }\n\n if (action.type === actions.toggleAllRowsSelected) {\n const { value: setSelected } = action\n const {\n isAllRowsSelected,\n rowsById,\n nonGroupedRowsById = rowsById,\n } = instance\n\n const selectAll =\n typeof setSelected !== 'undefined' ? setSelected : !isAllRowsSelected\n\n // Only remove/add the rows that are visible on the screen\n // Leave all the other rows that are selected alone.\n const selectedRowIds = Object.assign({}, state.selectedRowIds)\n\n if (selectAll) {\n Object.keys(nonGroupedRowsById).forEach(rowId => {\n selectedRowIds[rowId] = true\n })\n } else {\n Object.keys(nonGroupedRowsById).forEach(rowId => {\n delete selectedRowIds[rowId]\n })\n }\n\n return {\n ...state,\n selectedRowIds,\n }\n }\n\n if (action.type === actions.toggleRowSelected) {\n const { id, value: setSelected } = action\n const { rowsById, selectSubRows = true, getSubRows } = instance\n const isSelected = state.selectedRowIds[id]\n const shouldExist =\n typeof setSelected !== 'undefined' ? setSelected : !isSelected\n\n if (isSelected === shouldExist) {\n return state\n }\n\n const newSelectedRowIds = { ...state.selectedRowIds }\n\n const handleRowById = id => {\n const row = rowsById[id]\n\n if (row) {\n if (!row.isGrouped) {\n if (shouldExist) {\n newSelectedRowIds[id] = true\n } else {\n delete newSelectedRowIds[id]\n }\n }\n\n if (selectSubRows && getSubRows(row)) {\n return getSubRows(row).forEach(row => handleRowById(row.id))\n }\n }\n }\n\n handleRowById(id)\n\n return {\n ...state,\n selectedRowIds: newSelectedRowIds,\n }\n }\n\n if (action.type === actions.toggleAllPageRowsSelected) {\n const { value: setSelected } = action\n const {\n page,\n rowsById,\n selectSubRows = true,\n isAllPageRowsSelected,\n getSubRows,\n } = instance\n\n const selectAll =\n typeof setSelected !== 'undefined' ? setSelected : !isAllPageRowsSelected\n\n const newSelectedRowIds = { ...state.selectedRowIds }\n\n const handleRowById = id => {\n const row = rowsById[id]\n\n if (!row.isGrouped) {\n if (selectAll) {\n newSelectedRowIds[id] = true\n } else {\n delete newSelectedRowIds[id]\n }\n }\n\n if (selectSubRows && getSubRows(row)) {\n return getSubRows(row).forEach(row => handleRowById(row.id))\n }\n }\n\n page.forEach(row => handleRowById(row.id))\n\n return {\n ...state,\n selectedRowIds: newSelectedRowIds,\n }\n }\n return state\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n getHooks,\n plugins,\n rowsById,\n nonGroupedRowsById = rowsById,\n autoResetSelectedRows = true,\n state: { selectedRowIds },\n selectSubRows = true,\n dispatch,\n page,\n getSubRows,\n } = instance\n\n ensurePluginOrder(\n plugins,\n ['useFilters', 'useGroupBy', 'useSortBy', 'useExpanded', 'usePagination'],\n 'useRowSelect'\n )\n\n const selectedFlatRows = React.useMemo(() => {\n const selectedFlatRows = []\n\n rows.forEach(row => {\n const isSelected = selectSubRows\n ? getRowIsSelected(row, selectedRowIds, getSubRows)\n : !!selectedRowIds[row.id]\n row.isSelected = !!isSelected\n row.isSomeSelected = isSelected === null\n\n if (isSelected) {\n selectedFlatRows.push(row)\n }\n })\n\n return selectedFlatRows\n }, [rows, selectSubRows, selectedRowIds, getSubRows])\n\n let isAllRowsSelected = Boolean(\n Object.keys(nonGroupedRowsById).length && Object.keys(selectedRowIds).length\n )\n\n let isAllPageRowsSelected = isAllRowsSelected\n\n if (isAllRowsSelected) {\n if (Object.keys(nonGroupedRowsById).some(id => !selectedRowIds[id])) {\n isAllRowsSelected = false\n }\n }\n\n if (!isAllRowsSelected) {\n if (page && page.length && page.some(({ id }) => !selectedRowIds[id])) {\n isAllPageRowsSelected = false\n }\n }\n\n const getAutoResetSelectedRows = useGetLatest(autoResetSelectedRows)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetSelectedRows()) {\n dispatch({ type: actions.resetSelectedRows })\n }\n }, [dispatch, data])\n\n const toggleAllRowsSelected = React.useCallback(\n value => dispatch({ type: actions.toggleAllRowsSelected, value }),\n [dispatch]\n )\n\n const toggleAllPageRowsSelected = React.useCallback(\n value => dispatch({ type: actions.toggleAllPageRowsSelected, value }),\n [dispatch]\n )\n\n const toggleRowSelected = React.useCallback(\n (id, value) => dispatch({ type: actions.toggleRowSelected, id, value }),\n [dispatch]\n )\n\n const getInstance = useGetLatest(instance)\n\n const getToggleAllRowsSelectedProps = makePropGetter(\n getHooks().getToggleAllRowsSelectedProps,\n { instance: getInstance() }\n )\n\n const getToggleAllPageRowsSelectedProps = makePropGetter(\n getHooks().getToggleAllPageRowsSelectedProps,\n { instance: getInstance() }\n )\n\n Object.assign(instance, {\n selectedFlatRows,\n isAllRowsSelected,\n isAllPageRowsSelected,\n toggleRowSelected,\n toggleAllRowsSelected,\n getToggleAllRowsSelectedProps,\n getToggleAllPageRowsSelectedProps,\n toggleAllPageRowsSelected,\n })\n}\n\nfunction prepareRow(row, { instance }) {\n row.toggleRowSelected = set => instance.toggleRowSelected(row.id, set)\n\n row.getToggleRowSelectedProps = makePropGetter(\n instance.getHooks().getToggleRowSelectedProps,\n { instance: instance, row }\n )\n}\n\nfunction getRowIsSelected(row, selectedRowIds, getSubRows) {\n if (selectedRowIds[row.id]) {\n return true\n }\n\n const subRows = getSubRows(row)\n\n if (subRows && subRows.length) {\n let allChildrenSelected = true\n let someSelected = false\n\n subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return\n }\n\n if (getRowIsSelected(subRow, selectedRowIds, getSubRows)) {\n someSelected = true\n } else {\n allChildrenSelected = false\n }\n })\n return allChildrenSelected ? true : someSelected ? null : false\n }\n\n return false\n}\n","import React from 'react'\n\nimport {\n actions,\n functionalUpdate,\n useMountedLayoutEffect,\n useGetLatest,\n} from '../publicUtils'\n\nconst defaultInitialRowStateAccessor = row => ({})\nconst defaultInitialCellStateAccessor = cell => ({})\n\n// Actions\nactions.setRowState = 'setRowState'\nactions.setCellState = 'setCellState'\nactions.resetRowState = 'resetRowState'\n\nexport const useRowState = hooks => {\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\nuseRowState.pluginName = 'useRowState'\n\nfunction reducer(state, action, previousState, instance) {\n const {\n initialRowStateAccessor = defaultInitialRowStateAccessor,\n initialCellStateAccessor = defaultInitialCellStateAccessor,\n rowsById,\n } = instance\n\n if (action.type === actions.init) {\n return {\n rowState: {},\n ...state,\n }\n }\n\n if (action.type === actions.resetRowState) {\n return {\n ...state,\n rowState: instance.initialState.rowState || {},\n }\n }\n\n if (action.type === actions.setRowState) {\n const { rowId, value } = action\n\n const oldRowState =\n typeof state.rowState[rowId] !== 'undefined'\n ? state.rowState[rowId]\n : initialRowStateAccessor(rowsById[rowId])\n\n return {\n ...state,\n rowState: {\n ...state.rowState,\n [rowId]: functionalUpdate(value, oldRowState),\n },\n }\n }\n\n if (action.type === actions.setCellState) {\n const { rowId, columnId, value } = action\n\n const oldRowState =\n typeof state.rowState[rowId] !== 'undefined'\n ? state.rowState[rowId]\n : initialRowStateAccessor(rowsById[rowId])\n\n const oldCellState =\n typeof oldRowState?.cellState?.[columnId] !== 'undefined'\n ? oldRowState.cellState[columnId]\n : initialCellStateAccessor(\n rowsById[rowId]?.cells?.find(cell => cell.column.id === columnId)\n )\n\n return {\n ...state,\n rowState: {\n ...state.rowState,\n [rowId]: {\n ...oldRowState,\n cellState: {\n ...(oldRowState.cellState || {}),\n [columnId]: functionalUpdate(value, oldCellState),\n },\n },\n },\n }\n }\n}\n\nfunction useInstance(instance) {\n const { autoResetRowState = true, data, dispatch } = instance\n\n const setRowState = React.useCallback(\n (rowId, value) =>\n dispatch({\n type: actions.setRowState,\n rowId,\n value,\n }),\n [dispatch]\n )\n\n const setCellState = React.useCallback(\n (rowId, columnId, value) =>\n dispatch({\n type: actions.setCellState,\n rowId,\n columnId,\n value,\n }),\n [dispatch]\n )\n\n const getAutoResetRowState = useGetLatest(autoResetRowState)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetRowState()) {\n dispatch({ type: actions.resetRowState })\n }\n }, [data])\n\n Object.assign(instance, {\n setRowState,\n setCellState,\n })\n}\n\nfunction prepareRow(row, { instance }) {\n const {\n initialRowStateAccessor = defaultInitialRowStateAccessor,\n initialCellStateAccessor = defaultInitialCellStateAccessor,\n state: { rowState },\n } = instance\n\n if (row) {\n row.state =\n typeof rowState[row.id] !== 'undefined'\n ? rowState[row.id]\n : initialRowStateAccessor(row)\n\n row.setState = updater => {\n return instance.setRowState(row.id, updater)\n }\n\n row.cells.forEach(cell => {\n if (!row.state.cellState) {\n row.state.cellState = {}\n }\n\n cell.state =\n typeof row.state.cellState[cell.column.id] !== 'undefined'\n ? row.state.cellState[cell.column.id]\n : initialCellStateAccessor(cell)\n\n cell.setState = updater => {\n return instance.setCellState(row.id, cell.column.id, updater)\n }\n })\n }\n}\n","import React from 'react'\n\nimport { functionalUpdate, actions } from '../publicUtils'\n\n// Actions\nactions.resetColumnOrder = 'resetColumnOrder'\nactions.setColumnOrder = 'setColumnOrder'\n\nexport const useColumnOrder = hooks => {\n hooks.stateReducers.push(reducer)\n hooks.visibleColumnsDeps.push((deps, { instance }) => {\n return [...deps, instance.state.columnOrder]\n })\n hooks.visibleColumns.push(visibleColumns)\n hooks.useInstance.push(useInstance)\n}\n\nuseColumnOrder.pluginName = 'useColumnOrder'\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n columnOrder: [],\n ...state,\n }\n }\n\n if (action.type === actions.resetColumnOrder) {\n return {\n ...state,\n columnOrder: instance.initialState.columnOrder || [],\n }\n }\n\n if (action.type === actions.setColumnOrder) {\n return {\n ...state,\n columnOrder: functionalUpdate(action.columnOrder, state.columnOrder),\n }\n }\n}\n\nfunction visibleColumns(\n columns,\n {\n instance: {\n state: { columnOrder },\n },\n }\n) {\n // If there is no order, return the normal columns\n if (!columnOrder || !columnOrder.length) {\n return columns\n }\n\n const columnOrderCopy = [...columnOrder]\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns]\n\n // And make a new ordered array of the columns\n const columnsInOrder = []\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift()\n const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId)\n if (foundIndex > -1) {\n columnsInOrder.push(columnsCopy.splice(foundIndex, 1)[0])\n }\n }\n\n // If there are any columns left, add them to the end\n return [...columnsInOrder, ...columnsCopy]\n}\n\nfunction useInstance(instance) {\n const { dispatch } = instance\n\n instance.setColumnOrder = React.useCallback(\n columnOrder => {\n return dispatch({ type: actions.setColumnOrder, columnOrder })\n },\n [dispatch]\n )\n}\n","import React from 'react'\n\nimport {\n actions,\n defaultColumn,\n makePropGetter,\n useGetLatest,\n ensurePluginOrder,\n useMountedLayoutEffect,\n} from '../publicUtils'\n\nimport { getFirstDefined, passiveEventSupported } from '../utils'\n\n// Default Column\ndefaultColumn.canResize = true\n\n// Actions\nactions.columnStartResizing = 'columnStartResizing'\nactions.columnResizing = 'columnResizing'\nactions.columnDoneResizing = 'columnDoneResizing'\nactions.resetResize = 'resetResize'\n\nexport const useResizeColumns = hooks => {\n hooks.getResizerProps = [defaultGetResizerProps]\n hooks.getHeaderProps.push({\n style: {\n position: 'relative',\n },\n })\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n hooks.useInstanceBeforeDimensions.push(useInstanceBeforeDimensions)\n}\n\nconst defaultGetResizerProps = (props, { instance, header }) => {\n const { dispatch } = instance\n\n const onResizeStart = (e, header) => {\n let isTouchEvent = false\n if (e.type === 'touchstart') {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return\n }\n isTouchEvent = true\n }\n const headersToResize = getLeafHeaders(header)\n const headerIdWidths = headersToResize.map(d => [d.id, d.totalWidth])\n\n const clientX = isTouchEvent ? Math.round(e.touches[0].clientX) : e.clientX\n\n let raf\n let mostRecentClientX\n\n const dispatchEnd = () => {\n window.cancelAnimationFrame(raf)\n raf = null\n dispatch({ type: actions.columnDoneResizing })\n }\n const dispatchMove = () => {\n window.cancelAnimationFrame(raf)\n raf = null\n dispatch({ type: actions.columnResizing, clientX: mostRecentClientX })\n }\n\n const scheduleDispatchMoveOnNextAnimationFrame = clientXPos => {\n mostRecentClientX = clientXPos\n if (!raf) {\n raf = window.requestAnimationFrame(dispatchMove)\n }\n }\n\n const handlersAndEvents = {\n mouse: {\n moveEvent: 'mousemove',\n moveHandler: e => scheduleDispatchMoveOnNextAnimationFrame(e.clientX),\n upEvent: 'mouseup',\n upHandler: e => {\n document.removeEventListener(\n 'mousemove',\n handlersAndEvents.mouse.moveHandler\n )\n document.removeEventListener(\n 'mouseup',\n handlersAndEvents.mouse.upHandler\n )\n dispatchEnd()\n },\n },\n touch: {\n moveEvent: 'touchmove',\n moveHandler: e => {\n if (e.cancelable) {\n e.preventDefault()\n e.stopPropagation()\n }\n scheduleDispatchMoveOnNextAnimationFrame(e.touches[0].clientX)\n return false\n },\n upEvent: 'touchend',\n upHandler: e => {\n document.removeEventListener(\n handlersAndEvents.touch.moveEvent,\n handlersAndEvents.touch.moveHandler\n )\n document.removeEventListener(\n handlersAndEvents.touch.upEvent,\n handlersAndEvents.touch.moveHandler\n )\n dispatchEnd()\n },\n },\n }\n\n const events = isTouchEvent\n ? handlersAndEvents.touch\n : handlersAndEvents.mouse\n const passiveIfSupported = passiveEventSupported()\n ? { passive: false }\n : false\n document.addEventListener(\n events.moveEvent,\n events.moveHandler,\n passiveIfSupported\n )\n document.addEventListener(\n events.upEvent,\n events.upHandler,\n passiveIfSupported\n )\n\n dispatch({\n type: actions.columnStartResizing,\n columnId: header.id,\n columnWidth: header.totalWidth,\n headerIdWidths,\n clientX,\n })\n }\n\n return [\n props,\n {\n onMouseDown: e => e.persist() || onResizeStart(e, header),\n onTouchStart: e => e.persist() || onResizeStart(e, header),\n style: {\n cursor: 'col-resize',\n },\n draggable: false,\n role: 'separator',\n },\n ]\n}\n\nuseResizeColumns.pluginName = 'useResizeColumns'\n\nfunction reducer(state, action) {\n if (action.type === actions.init) {\n return {\n columnResizing: {\n columnWidths: {},\n },\n ...state,\n }\n }\n\n if (action.type === actions.resetResize) {\n return {\n ...state,\n columnResizing: {\n columnWidths: {},\n },\n }\n }\n\n if (action.type === actions.columnStartResizing) {\n const { clientX, columnId, columnWidth, headerIdWidths } = action\n\n return {\n ...state,\n columnResizing: {\n ...state.columnResizing,\n startX: clientX,\n headerIdWidths,\n columnWidth,\n isResizingColumn: columnId,\n },\n }\n }\n\n if (action.type === actions.columnResizing) {\n const { clientX } = action\n const { startX, columnWidth, headerIdWidths = [] } = state.columnResizing\n\n const deltaX = clientX - startX\n const percentageDeltaX = deltaX / columnWidth\n\n const newColumnWidths = {}\n\n headerIdWidths.forEach(([headerId, headerWidth]) => {\n newColumnWidths[headerId] = Math.max(\n headerWidth + headerWidth * percentageDeltaX,\n 0\n )\n })\n\n return {\n ...state,\n columnResizing: {\n ...state.columnResizing,\n columnWidths: {\n ...state.columnResizing.columnWidths,\n ...newColumnWidths,\n },\n },\n }\n }\n\n if (action.type === actions.columnDoneResizing) {\n return {\n ...state,\n columnResizing: {\n ...state.columnResizing,\n startX: null,\n isResizingColumn: null,\n },\n }\n }\n}\n\nconst useInstanceBeforeDimensions = instance => {\n const {\n flatHeaders,\n disableResizing,\n getHooks,\n state: { columnResizing },\n } = instance\n\n const getInstance = useGetLatest(instance)\n\n flatHeaders.forEach(header => {\n const canResize = getFirstDefined(\n header.disableResizing === true ? false : undefined,\n disableResizing === true ? false : undefined,\n true\n )\n\n header.canResize = canResize\n header.width =\n columnResizing.columnWidths[header.id] ||\n header.originalWidth ||\n header.width\n header.isResizing = columnResizing.isResizingColumn === header.id\n\n if (canResize) {\n header.getResizerProps = makePropGetter(getHooks().getResizerProps, {\n instance: getInstance(),\n header,\n })\n }\n })\n}\n\nfunction useInstance(instance) {\n const { plugins, dispatch, autoResetResize = true, columns } = instance\n\n ensurePluginOrder(plugins, ['useAbsoluteLayout'], 'useResizeColumns')\n\n const getAutoResetResize = useGetLatest(autoResetResize)\n useMountedLayoutEffect(() => {\n if (getAutoResetResize()) {\n dispatch({ type: actions.resetResize })\n }\n }, [columns])\n\n const resetResizing = React.useCallback(\n () => dispatch({ type: actions.resetResize }),\n [dispatch]\n )\n\n Object.assign(instance, {\n resetResizing,\n })\n}\n\nfunction getLeafHeaders(header) {\n const leafHeaders = []\n const recurseHeader = header => {\n if (header.columns && header.columns.length) {\n header.columns.map(recurseHeader)\n }\n leafHeaders.push(header)\n }\n recurseHeader(header)\n return leafHeaders\n}\n","import { actions } from '../publicUtils'\n\n// Actions\nactions.columnStartResizing = 'columnStartResizing'\nactions.columnResizing = 'columnResizing'\nactions.columnDoneResizing = 'columnDoneResizing'\nactions.resetResize = 'resetResize'\n\nexport function useGridLayout(hooks) {\n hooks.stateReducers.push(reducer)\n hooks.getTableProps.push(getTableProps)\n hooks.getHeaderProps.push(getHeaderProps)\n hooks.getRowProps.push(getRowProps)\n}\n\nuseGridLayout.pluginName = 'useGridLayout'\n\nconst getTableProps = (props, { instance }) => {\n const gridTemplateColumns = instance.visibleColumns.map(column => {\n if (instance.state.gridLayout.columnWidths[column.id])\n return `${instance.state.gridLayout.columnWidths[column.id]}px`\n // When resizing, lock the width of all unset columns\n // instead of using user-provided width or defaultColumn width,\n // which could potentially be 'auto' or 'fr' units that don't scale linearly\n if (instance.state.columnResizing?.isResizingColumn)\n return `${instance.state.gridLayout.startWidths[column.id]}px`\n if (typeof column.width === 'number') return `${column.width}px`\n return column.width\n })\n return [\n props,\n {\n style: {\n display: `grid`,\n gridTemplateColumns: gridTemplateColumns.join(` `),\n },\n },\n ]\n}\n\nconst getHeaderProps = (props, { column }) => [\n props,\n {\n id: `header-cell-${column.id}`,\n style: {\n position: `sticky`, //enables a scroll wrapper to be placed around the table and have sticky headers\n gridColumn: `span ${column.totalVisibleHeaderCount}`,\n },\n },\n]\n\nconst getRowProps = (props, { row }) => {\n if (row.isExpanded) {\n return [\n props,\n {\n style: {\n gridColumn: `1 / ${row.cells.length + 1}`,\n },\n },\n ]\n }\n return [props, {}]\n}\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n gridLayout: {\n columnWidths: {},\n },\n ...state,\n }\n }\n\n if (action.type === actions.resetResize) {\n return {\n ...state,\n gridLayout: {\n columnWidths: {},\n },\n }\n }\n\n if (action.type === actions.columnStartResizing) {\n const { columnId, headerIdWidths } = action\n const columnWidth = getElementWidth(columnId)\n\n if (columnWidth !== undefined) {\n const startWidths = instance.visibleColumns.reduce(\n (acc, column) => ({\n ...acc,\n [column.id]: getElementWidth(column.id),\n }),\n {}\n )\n const minWidths = instance.visibleColumns.reduce(\n (acc, column) => ({\n ...acc,\n [column.id]: column.minWidth,\n }),\n {}\n )\n const maxWidths = instance.visibleColumns.reduce(\n (acc, column) => ({\n ...acc,\n [column.id]: column.maxWidth,\n }),\n {}\n )\n\n const headerIdGridWidths = headerIdWidths.map(([headerId]) => [\n headerId,\n getElementWidth(headerId),\n ])\n\n return {\n ...state,\n gridLayout: {\n ...state.gridLayout,\n startWidths,\n minWidths,\n maxWidths,\n headerIdGridWidths,\n columnWidth,\n },\n }\n } else {\n return state\n }\n }\n\n if (action.type === actions.columnResizing) {\n const { clientX } = action\n const { startX } = state.columnResizing\n const {\n columnWidth,\n minWidths,\n maxWidths,\n headerIdGridWidths = [],\n } = state.gridLayout\n\n const deltaX = clientX - startX\n const percentageDeltaX = deltaX / columnWidth\n\n const newColumnWidths = {}\n\n headerIdGridWidths.forEach(([headerId, headerWidth]) => {\n newColumnWidths[headerId] = Math.min(\n Math.max(\n minWidths[headerId],\n headerWidth + headerWidth * percentageDeltaX\n ),\n maxWidths[headerId]\n )\n })\n\n return {\n ...state,\n gridLayout: {\n ...state.gridLayout,\n columnWidths: {\n ...state.gridLayout.columnWidths,\n ...newColumnWidths,\n },\n },\n }\n }\n\n if (action.type === actions.columnDoneResizing) {\n return {\n ...state,\n gridLayout: {\n ...state.gridLayout,\n startWidths: {},\n minWidths: {},\n maxWidths: {},\n },\n }\n }\n}\n\nfunction getElementWidth(columnId) {\n const width = document.getElementById(`header-cell-${columnId}`)?.offsetWidth\n\n if (width !== undefined) {\n return width\n }\n}\n","var __WEBPACK_NAMESPACE_OBJECT__ = window.reactR;","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3)\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n","import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {string}\n */\nexport function prefix (value, length) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// flex, flex-direction\n\t\tcase 6828: case 4268:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// (s)ticky?\n\t\t\tif (charat(value, length + 1) !== 115)\n\t\t\t\tbreak\n\t\t// display: (flex|inline-flex)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n\t\t\t\t// stic(k)y\n\t\t\t\tcase 107:\n\t\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\t\t// (inline-)?fl(e)x\n\t\t\t\tcase 101:\n\t\t\t\t\treturn replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t}\n\t\t\tbreak\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t}\n\n\t\t\treturn WEBKIT + value + MS + value + value\n\t}\n\n\treturn value\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && characters.charCodeAt(length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, stringify, COMMENT, rulesheet, middleware, prefixer, serialize, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar last = function last(arr) {\n return arr.length ? arr[arr.length - 1] : null;\n}; // based on https://github.com/thysultan/stylis.js/blob/e6843c373ebcbbfade25ebcc23f540ed8508da0a/src/Tokenizer.js#L239-L244\n\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return !!element && element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule') return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses && cache.compat !== true) {\n var prevElement = index > 0 ? children[index - 1] : null;\n\n if (prevElement && isIgnoringComment(last(prevElement.children))) {\n return;\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if ( key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length)\n\t\t\t\t\tbreak\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(var|attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error(noComponentSelectorMessage);\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","import createCache from '@emotion/cache';\nimport { serializeStyles } from '@emotion/serialize';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\n\nfunction insertWithoutScoping(cache, serialized) {\n if (cache.inserted[serialized.name] === undefined) {\n return cache.insert('', serialized, cache.sheet, true);\n }\n}\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar createEmotion = function createEmotion(options) {\n var cache = createCache(options); // $FlowFixMe\n\n cache.sheet.speedy = function (value) {\n if (process.env.NODE_ENV !== 'production' && this.ctr !== 0) {\n throw new Error('speedy must be changed before any rules are inserted');\n }\n\n this.isSpeedy = value;\n };\n\n cache.compat = true;\n\n var css = function css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered, undefined);\n insertStyles(cache, serialized, false);\n return cache.key + \"-\" + serialized.name;\n };\n\n var keyframes = function keyframes() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n var animation = \"animation-\" + serialized.name;\n insertWithoutScoping(cache, {\n name: serialized.name,\n styles: \"@keyframes \" + animation + \"{\" + serialized.styles + \"}\"\n });\n return animation;\n };\n\n var injectGlobal = function injectGlobal() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n insertWithoutScoping(cache, serialized);\n };\n\n var cx = function cx() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n return {\n css: css,\n cx: cx,\n injectGlobal: injectGlobal,\n keyframes: keyframes,\n hydrate: function hydrate(ids) {\n ids.forEach(function (key) {\n cache.inserted[key] = true;\n });\n },\n flush: function flush() {\n cache.registered = {};\n cache.inserted = {};\n cache.sheet.flush();\n },\n // $FlowFixMe\n sheet: cache.sheet,\n cache: cache,\n getRegisteredStyles: getRegisteredStyles.bind(null, cache.registered),\n merge: merge.bind(null, cache.registered, css)\n };\n};\n\nvar classnames = function classnames(args) {\n var cls = '';\n\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nexport default createEmotion;\n","import createEmotion from '@emotion/css/create-instance'\n\nimport { isBrowser } from './utils'\n\nexport function createTheme(options) {\n if (!options) return null\n let {\n color,\n backgroundColor,\n borderColor,\n borderWidth,\n stripedColor,\n highlightColor,\n cellPadding,\n style,\n\n tableBorderColor = borderColor,\n tableBorderWidth = borderWidth,\n tableStyle,\n\n headerBorderColor = borderColor,\n headerBorderWidth = borderWidth,\n headerStyle,\n\n groupHeaderBorderColor = borderColor,\n groupHeaderBorderWidth = borderWidth,\n groupHeaderStyle,\n\n tableBodyStyle,\n\n rowGroupStyle,\n\n rowStyle,\n rowStripedStyle,\n rowHighlightStyle,\n rowSelectedStyle,\n\n cellBorderColor = borderColor,\n cellBorderWidth = borderWidth,\n cellStyle,\n\n footerBorderColor = borderColor,\n footerBorderWidth = borderWidth,\n footerStyle,\n\n inputStyle,\n filterInputStyle,\n searchInputStyle,\n\n selectStyle,\n\n paginationStyle,\n pageButtonStyle,\n pageButtonHoverStyle,\n pageButtonActiveStyle,\n pageButtonCurrentStyle\n } = options\n\n const expanderColor = getFirstDefinedProp(\n [cellStyle, rowStyle, tableBodyStyle, tableStyle, style],\n 'color',\n color\n )\n const selectColor = getFirstDefinedProp([selectStyle, style], 'color', color)\n\n // Allow easier override of header border width in an outlined/bordered table\n headerBorderWidth = getFirstDefinedProp([headerStyle], 'borderWidth', headerBorderWidth)\n\n let css = {\n style: {\n color,\n backgroundColor,\n ...style\n },\n\n tableStyle: {\n borderColor: tableBorderColor,\n borderWidth: tableBorderWidth,\n ...tableStyle\n },\n\n headerStyle: {\n borderColor: headerBorderColor,\n borderWidth: headerBorderWidth,\n padding: cellPadding,\n ...headerStyle,\n '.rt-bordered &, .rt-outlined &': {\n borderWidth: headerBorderWidth\n }\n },\n\n groupHeaderStyle: {\n // For vertical borders\n borderColor: groupHeaderBorderColor,\n borderWidth: groupHeaderBorderWidth,\n padding: cellPadding,\n ...groupHeaderStyle,\n // For horizontal borders\n '&::after': {\n backgroundColor: groupHeaderBorderColor,\n height: groupHeaderBorderWidth\n },\n '.rt-bordered &': {\n borderWidth: groupHeaderBorderWidth\n }\n },\n\n tableBodyStyle,\n\n rowGroupStyle,\n\n rowStyle: {\n ...rowStyle,\n '&.rt-tr-striped': {\n backgroundColor: stripedColor,\n ...rowStripedStyle\n },\n '&.rt-tr-highlight:hover': {\n backgroundColor: highlightColor,\n ...rowHighlightStyle\n },\n '&.rt-tr-selected': {\n ...rowSelectedStyle\n }\n },\n\n cellStyle: {\n borderColor: cellBorderColor,\n borderWidth: cellBorderWidth,\n padding: cellPadding,\n ...cellStyle\n },\n\n footerStyle: {\n borderColor: footerBorderColor,\n borderWidth: footerBorderWidth,\n padding: cellPadding,\n ...footerStyle\n },\n\n filterCellStyle: {\n borderColor: cellBorderColor,\n borderWidth: cellBorderWidth,\n padding: cellPadding,\n ...cellStyle\n },\n\n expanderStyle: {\n '&::after': {\n borderTopColor: expanderColor\n }\n },\n\n filterInputStyle: {\n ...inputStyle,\n ...filterInputStyle\n },\n\n searchInputStyle: {\n ...inputStyle,\n ...searchInputStyle\n },\n\n paginationStyle: {\n borderTopColor: cellBorderColor,\n borderTopWidth: cellBorderWidth,\n ...paginationStyle,\n\n '.rt-page-jump': {\n ...inputStyle\n },\n\n '.rt-page-size-select': {\n ...selectStyle,\n '@supports (-moz-appearance: none)': {\n backgroundImage:\n selectColor &&\n `url('data:image/svg+xml;charset=US-ASCII,` +\n `<svg width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\">` +\n // Colors should be URL encoded since they may contain # or parentheses\n `<path fill=\"${urlEncode(selectColor)}\" d=\"M24 1.5l-12 21-12-21h24z\"/></svg>')`\n }\n },\n\n '.rt-page-button': {\n ...pageButtonStyle\n },\n '.rt-page-button:not(:disabled):hover': {\n ...pageButtonHoverStyle\n },\n '.rt-page-button:not(:disabled):active': {\n ...pageButtonActiveStyle\n },\n '.rt-keyboard-active & .rt-page-button:not(:disabled):focus': {\n ...pageButtonHoverStyle\n },\n '.rt-page-button-current': {\n ...pageButtonCurrentStyle\n }\n }\n }\n\n removeEmptyProps(css)\n\n return css\n}\n\nfunction getFirstDefinedProp(objects, prop, defaultVal) {\n const found = objects.find(x => x && x[prop] != null)\n return found ? found[prop] : defaultVal\n}\n\n// URL encoder that escapes parentheses (for data URLs)\nfunction urlEncode(str) {\n return encodeURIComponent(str).replace('(', '%28').replace(')', '%29')\n}\n\n// Remove undefined/null properties and empty objects\nfunction removeEmptyProps(obj) {\n for (let [key, value] of Object.entries(obj)) {\n if (typeof value === 'object') {\n removeEmptyProps(value)\n if (Object.keys(value).length === 0) {\n delete obj[key]\n }\n } else if (value == null) {\n delete obj[key]\n }\n }\n}\n\n// Defer Emotion initialization until DOM is loaded and theming is used\nlet emotion\nexport function getEmotion() {\n if (emotion) {\n return emotion\n }\n // Emotion appends style tags to head by default. Instead, we insert styles\n // immediately after the reactable stylesheet for two reasons:\n //\n // 1. Some HTML documents (pkgdown) may place htmlDependencies in the body\n // instead of head, causing Emotion theme styles in head to come before the\n // the reactable stylesheet and not override default styles properly.\n // R Markdown and Shiny put htmlDependencies in head properly.\n // 2. User styles in head may be overrided by the theme since Emotion appends to\n // the end of head, after any existing styles in head. This is not as important\n // as reason 1, however.\n let container\n let insertionPoint\n if (isBrowser()) {\n for (let link of document.querySelectorAll('link')) {\n const filename = link.href.substring(link.href.lastIndexOf('/') + 1)\n if (link.rel === 'stylesheet' && filename === 'reactable.css') {\n container = link.parentElement\n insertionPoint = link\n break\n }\n }\n }\n emotion = createEmotion({\n // Class prefix and unique key to prevent conflicts with other Emotion instances\n key: 'reactable',\n container: container,\n insertionPoint: insertionPoint\n })\n return emotion\n}\n\n// Reset Emotion instance and styles, intended for testing use only\nexport function resetEmotion() {\n if (emotion) {\n emotion.flush()\n emotion = null\n }\n}\n\n// Emotion css wrapper that returns null instead of an unused class\nexport function css(...args) {\n const emotion = getEmotion()\n args = args.filter(arg => arg != null)\n return args.length ? emotion.css(args) : null\n}\n","import React from 'react'\nimport { useGetLatest } from 'react-table'\n\nexport function classNames(...classes) {\n return classes.filter(cls => cls).join(' ')\n}\n\nexport function getFirstDefined(...args) {\n return args.find(x => x != null)\n}\n\nexport function escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n// Get leaf columns as an array\nexport function getLeafColumns(column) {\n const leafColumns = []\n const recurseColumn = column => {\n if (column.columns) {\n column.columns.forEach(recurseColumn)\n } else {\n leafColumns.push(column)\n }\n }\n recurseColumn(column)\n return leafColumns\n}\n\n// Convert row data for react-table v6 compatibility\nexport function convertRowsToV6(rows) {\n return rows.map(row => {\n if (row.subRows && row.subRows.length > 0) {\n return { _subRows: convertRowsToV6(row.subRows), ...row.values }\n } else {\n return row.values\n }\n })\n}\n\nexport function rowsToCSV(rows, options = {}) {\n let { columnIds, headers = true, sep = ',', dec = '.' } = options\n const rowToCSV = row => {\n return row\n .map(value => {\n if (value == null) {\n value = ''\n }\n // Serialize dates as ISO strings, all other non-string and non-numeric values as JSON\n if (value instanceof Date) {\n value = value.toISOString()\n } else if (typeof value !== 'string' && typeof value !== 'number') {\n value = JSON.stringify(value)\n } else if (dec !== '.' && typeof value === 'number') {\n value = value.toString().replace('.', dec)\n }\n // Escape CSV-unsafe characters\n if (typeof value === 'string' && (value.includes('\"') || value.includes(sep))) {\n value = `\"${value.replace(/\"/g, '\"\"')}\"`\n }\n return value\n })\n .join(sep)\n }\n let csvRows = []\n if (!columnIds) {\n columnIds = rows.length > 0 ? Object.keys(rows[0]) : []\n }\n if (headers) {\n csvRows.push(rowToCSV(columnIds))\n }\n for (let row of rows) {\n const values = columnIds.map(id => row[id])\n csvRows.push(rowToCSV(values))\n }\n return csvRows.join('\\n') + '\\n'\n}\n\nexport function downloadCSV(content, filename) {\n const blob = new Blob([content], { type: 'text/csv;charset=utf-8' })\n if (window.navigator.msSaveBlob) {\n // For IE11\n window.navigator.msSaveBlob(blob, filename)\n } else {\n const link = document.createElement('a')\n const url = window.URL.createObjectURL(blob)\n link.href = url\n link.download = filename\n link.click()\n window.URL.revokeObjectURL(url)\n }\n}\n\nexport function isBrowser() {\n return typeof document !== 'undefined'\n}\n\n// useAsyncDebounce from react-table without async/await (which seems to be unnecessary anyway)\n// to avoid adding regenerator-runtime to bundle.\nexport function useAsyncDebounce(defaultFn, defaultWait = 0) {\n const debounceRef = React.useRef({})\n\n const getDefaultFn = useGetLatest(defaultFn)\n const getDefaultWait = useGetLatest(defaultWait)\n\n return React.useCallback(\n (...args) => {\n if (!debounceRef.current.promise) {\n debounceRef.current.promise = new Promise((resolve, reject) => {\n debounceRef.current.resolve = resolve\n debounceRef.current.reject = reject\n })\n }\n\n if (debounceRef.current.timeout) {\n clearTimeout(debounceRef.current.timeout)\n }\n\n debounceRef.current.timeout = setTimeout(() => {\n delete debounceRef.current.timeout\n try {\n debounceRef.current.resolve(getDefaultFn()(...args))\n } catch (err) {\n debounceRef.current.reject(err)\n } finally {\n delete debounceRef.current.promise\n }\n }, getDefaultWait())\n\n return debounceRef.current.promise\n },\n [getDefaultFn, getDefaultWait]\n )\n}\n","export const defaultLanguage = {\n // Sorting\n sortLabel: 'Sort {name}',\n\n // Filters\n filterPlaceholder: '',\n filterLabel: 'Filter {name}',\n\n // Search\n searchPlaceholder: 'Search',\n searchLabel: 'Search',\n\n // Tables\n noData: 'No rows found',\n\n // Pagination\n pageNext: 'Next',\n pagePrevious: 'Previous',\n pageNumbers: '{page} of {pages}',\n pageInfo: `{rowStart}${String.fromCharCode(0x2013)}{rowEnd} of {rows} rows`,\n pageSizeOptions: 'Show {rows}',\n pageNextLabel: 'Next page',\n pagePreviousLabel: 'Previous page',\n pageNumberLabel: 'Page {page}',\n pageJumpLabel: 'Go to page',\n pageSizeOptionsLabel: 'Rows per page',\n\n // Column groups\n groupExpandLabel: 'Toggle group',\n\n // Row details\n detailsExpandLabel: 'Toggle details',\n\n // Selection\n selectAllRowsLabel: 'Select all rows',\n selectAllSubRowsLabel: 'Select all rows in group',\n selectRowLabel: 'Select row',\n\n // Deprecated in v0.3.0\n defaultGroupHeader: 'Grouped',\n detailsCollapseLabel: 'Toggle details',\n deselectAllRowsLabel: 'Deselect all rows',\n deselectAllSubRowsLabel: 'Deselect all rows in group',\n deselectRowLabel: 'Deselect row'\n}\n\nexport function renderTemplate(template, params = {}) {\n if (!template || !params) {\n return template\n }\n const keys = Object.keys(params)\n const separator = '(' + keys.map(key => `{${key}}`).join('|') + ')'\n const strings = template.split(new RegExp(separator))\n const templateParams = keys.reduce((obj, key) => {\n obj[`{${key}}`] = params[key]\n return obj\n }, {})\n const rendered = strings.map(s => (templateParams[s] != null ? templateParams[s] : s))\n if (rendered.some(val => typeof val === 'object')) {\n return rendered\n }\n return rendered.join('')\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { css } from './theme'\nimport { defaultLanguage, renderTemplate } from './language'\nimport { classNames } from './utils'\n\nconst PageButton = ({ isCurrent, className, ...props }) => {\n className = classNames(className, 'rt-page-button', isCurrent ? ' rt-page-button-current' : null)\n return (\n <button type=\"button\" className={className} {...props}>\n {props.children}\n </button>\n )\n}\n\nPageButton.propTypes = {\n isCurrent: PropTypes.bool,\n className: PropTypes.string,\n children: PropTypes.node\n}\n\n// Get visible pages from current page (1-based) and total page count\nexport function getVisiblePages(page, totalPages) {\n // 6 pages or less\n if (totalPages <= 6) {\n return [...Array(totalPages)].map((_, i) => i + 1)\n }\n if (page <= 4) {\n // First 4 pages: 1 2 3 *4* 5 ... 7\n return [1, 2, 3, 4, 5, totalPages]\n } else if (totalPages - page < 3) {\n // Last 3 pages: 1 ... 4 *5* 6 7\n return [1, totalPages - 3, totalPages - 2, totalPages - 1, totalPages]\n } else {\n // Middle 3 pages: 1 ... 4 *5* 6 ... 8\n return [1, page - 1, page, page + 1, totalPages]\n }\n}\n\nexport default class Pagination extends React.Component {\n constructor(props) {\n super(props)\n this.changePage = this.changePage.bind(this)\n this.applyPage = this.applyPage.bind(this)\n this.state = {\n pageJumpValue: props.page + 1,\n prevPage: props.page\n }\n }\n\n static getDerivedStateFromProps(props, state) {\n // Update page jump value if page changes (e.g. from page size change).\n // Track previous page so we only update on prop changes.\n if (props.page !== state.prevPage) {\n return {\n pageJumpValue: props.page + 1,\n prevPage: props.page\n }\n }\n return null\n }\n\n changePage(newPage) {\n const currentPage = this.props.page + 1\n if (newPage === currentPage) {\n return\n }\n this.props.onPageChange(newPage - 1)\n }\n\n applyPage(e) {\n if (e) {\n e.preventDefault()\n }\n const newPage = this.state.pageJumpValue\n if (newPage !== '') {\n this.changePage(newPage)\n } else {\n // Reset page jump if new value is blank or invalid. (Some browsers\n // allow non-numeric characters with input type=\"number\").\n const currentPage = this.props.page + 1\n this.setState({ pageJumpValue: currentPage })\n }\n }\n\n renderPageInfo({ page, pageSize, pageRowCount, rowCount, language }) {\n const rowStart = Math.min(page * pageSize + 1, rowCount)\n // When pagination is disabled, pageSize is unused and the number of rows\n // on the page can exceed the page size.\n const rowEnd = Math.max(Math.min(page * pageSize + pageSize, rowCount), pageRowCount)\n const pageInfo = renderTemplate(language.pageInfo, { rowStart, rowEnd, rows: rowCount })\n return <div className=\"rt-page-info\" aria-live=\"polite\">{pageInfo}</div>\n }\n\n renderPageSizeOptions({ pageSize, pageSizeOptions, onPageSizeChange, language }) {\n const selector = (\n <select\n key=\"page-size-select\"\n className=\"rt-page-size-select\"\n aria-label={language.pageSizeOptionsLabel}\n onChange={e => onPageSizeChange(Number(e.target.value))}\n value={pageSize}\n >\n {pageSizeOptions.map((option, i) => (\n <option key={i} value={option}>\n {option}\n </option>\n ))}\n </select>\n )\n const elements = renderTemplate(language.pageSizeOptions, { rows: selector })\n return <div className=\"rt-page-size\">{elements}</div>\n }\n\n renderPageJump({ onChange, value, onBlur, onKeyPress, inputType, language }) {\n return (\n <input\n key=\"page-jump\"\n className=\"rt-page-jump\"\n aria-label={language.pageJumpLabel}\n type={inputType}\n onChange={onChange}\n value={value}\n onBlur={onBlur}\n onKeyPress={onKeyPress}\n />\n )\n }\n\n getPageJumpProperties() {\n return {\n onKeyPress: e => {\n if (e.which === 13 || e.keyCode === 13) {\n this.applyPage()\n }\n },\n onBlur: this.applyPage,\n value: this.state.pageJumpValue,\n onChange: e => {\n const value = e.target.value\n if (value === '') {\n this.setState({ pageJumpValue: value })\n return\n }\n const newPage = Number(value)\n if (!Number.isNaN(newPage)) {\n const nearestValidPage = Math.min(Math.max(newPage, 1), Math.max(this.props.pages, 1))\n this.setState({ pageJumpValue: nearestValidPage })\n }\n },\n inputType: 'number',\n language: this.props.language\n }\n }\n\n render() {\n const {\n paginationType,\n showPageSizeOptions,\n showPageInfo,\n page,\n pages,\n canPrevious,\n canNext,\n theme,\n language\n } = this.props\n\n const pageInfo = showPageInfo ? this.renderPageInfo(this.props) : null\n const pageSizeOptions = showPageSizeOptions ? this.renderPageSizeOptions(this.props) : null\n\n const currentPage = page + 1\n const visiblePages = getVisiblePages(currentPage, pages)\n\n let pageNumbers\n if (paginationType === 'numbers') {\n let pageButtons = []\n visiblePages.forEach((page, index) => {\n const isCurrent = currentPage === page\n const pageButton = (\n <PageButton\n key={page}\n isCurrent={isCurrent}\n onClick={this.changePage.bind(null, page)}\n // Change aria-label to work around issue with aria-current changes\n // not being recognized in NVDA + Chrome. https://github.com/nvaccess/nvda/issues/10728\n aria-label={renderTemplate(language.pageNumberLabel, { page }) + (isCurrent ? ' ' : '')}\n aria-current={isCurrent ? 'page' : null}\n >\n {page}\n </PageButton>\n )\n if (page - visiblePages[index - 1] > 1) {\n pageButtons.push(\n <span className=\"rt-page-ellipsis\" key={`ellipsis-${page}`} role=\"separator\">\n ...\n </span>\n )\n }\n pageButtons.push(pageButton)\n })\n pageNumbers = pageButtons\n } else {\n const page =\n paginationType === 'jump' ? this.renderPageJump(this.getPageJumpProperties()) : currentPage\n const totalPages = Math.max(pages, 1)\n pageNumbers = (\n <div className=\"rt-page-numbers\">\n {renderTemplate(language.pageNumbers, { page, pages: totalPages })}\n </div>\n )\n }\n\n const prevButton = (\n <PageButton\n className=\"rt-prev-button\"\n onClick={() => {\n if (!canPrevious) return\n this.changePage(currentPage - 1)\n }}\n disabled={!canPrevious}\n aria-disabled={!canPrevious ? 'true' : null}\n aria-label={language.pagePreviousLabel}\n >\n {language.pagePrevious}\n </PageButton>\n )\n\n const nextButton = (\n <PageButton\n className=\"rt-next-button\"\n onClick={() => {\n if (!canNext) return\n this.changePage(currentPage + 1)\n }}\n disabled={!canNext}\n aria-disabled={!canNext ? 'true' : null}\n aria-label={language.pageNextLabel}\n >\n {language.pageNext}\n </PageButton>\n )\n\n return (\n <div className={classNames('rt-pagination', css(theme.paginationStyle))}>\n <div className=\"rt-pagination-info\">\n {pageInfo}\n {pageSizeOptions}\n </div>\n\n <div className=\"rt-pagination-nav\">\n {prevButton}\n {pageNumbers}\n {nextButton}\n </div>\n </div>\n )\n }\n}\n\nPagination.propTypes = {\n paginationType: PropTypes.oneOf(['numbers', 'jump', 'simple']),\n pageSizeOptions: PropTypes.arrayOf(PropTypes.number),\n showPageSizeOptions: PropTypes.bool,\n showPageInfo: PropTypes.bool,\n page: PropTypes.number.isRequired,\n pages: PropTypes.number.isRequired,\n pageSize: PropTypes.number.isRequired,\n pageRowCount: PropTypes.number.isRequired,\n canPrevious: PropTypes.bool.isRequired,\n canNext: PropTypes.bool.isRequired,\n onPageChange: PropTypes.func.isRequired,\n onPageSizeChange: PropTypes.func.isRequired,\n rowCount: PropTypes.number.isRequired,\n theme: PropTypes.shape({\n paginationStyle: PropTypes.object\n }),\n language: PropTypes.shape({\n pageNext: PropTypes.string,\n pagePrevious: PropTypes.string,\n pageNumbers: PropTypes.string,\n pageInfo: PropTypes.string,\n pageSizeOptions: PropTypes.string,\n pageNextLabel: PropTypes.string,\n pagePreviousLabel: PropTypes.string,\n pageNumberLabel: PropTypes.string,\n pageJumpLabel: PropTypes.string,\n pageSizeOptionsLabel: PropTypes.string\n })\n}\n\nPagination.defaultProps = {\n paginationType: 'numbers',\n pageSizeOptions: [10, 25, 50, 100],\n showPageInfo: true,\n language: defaultLanguage\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { isBrowser } from './utils'\n\nexport default class WidgetContainer extends React.Component {\n componentDidMount() {\n this.staticRender()\n }\n\n staticRender() {\n if (!window.HTMLWidgets) {\n return\n }\n if (!WidgetContainer.throttled) {\n window.HTMLWidgets.staticRender()\n // Throttle static rendering since it targets the entire document\n WidgetContainer.throttled = true\n setTimeout(() => {\n if (WidgetContainer.lastCall) {\n window.HTMLWidgets.staticRender()\n }\n WidgetContainer.throttled = false\n WidgetContainer.lastCall = false\n })\n } else {\n WidgetContainer.lastCall = true\n }\n }\n\n render() {\n // Don't serialize HTML widget HTML/scripts when server-side rendering:\n // 1. Most HTML widgets are client-side rendered and wouldn't benefit much from SSR.\n // 2. This keeps the initial HTML payload slim, as the widget script data would be\n // unnecessarily duplicated.\n // 3. Problems can occur when multiple instances of the same HTML widget type\n // are embedded in different tables, and the global HTMLWidgets.staticRender()\n // renders HTML widgets in other tables before those other tables are hydrated\n // (each table lives in its own React root). When other tables are hydrated,\n // the HTML widgets there will get wiped out, but not rerendered on the next\n // staticRender() because the root widget element is already marked as\n // html-widget-static-bound. This also helps keep the initial HTML payload slim,\n // as the widget script data would get unnecessarily duplicated.\n if (!isBrowser()) {\n return null\n }\n return this.props.children\n }\n}\n\nWidgetContainer.propTypes = {\n children: PropTypes.node\n}\n","// useFlexLayout modified to:\n// - Fix flex widths when resizing is disabled (don't use column.totalFlexWidth)\n// - Support resizing to actual min and max column widths (not flex widths)\n// - Set min width on thead/tbody/tfoot instead of table for responsive, horizontal scrolling.\n// Tables should use the new instance.getTheadProps and instance.getTfootProps for this.\n// - Include resized widths in table min width to prevent glitches with sticky headers/footers\n// - Exclude redundant styles\n\nimport { useGetLatest, makePropGetter } from 'react-table'\n\nexport default function useFlexLayout(hooks) {\n hooks.getTheadProps = [getRowGroupStyles]\n hooks.getTfootProps = [getRowGroupStyles]\n hooks.getTableBodyProps.push(getRowGroupStyles)\n hooks.getRowProps.push(getRowStyles)\n hooks.getHeaderGroupProps.push(getRowStyles)\n hooks.getFooterGroupProps.push(getRowStyles)\n hooks.getHeaderProps.push(getHeaderProps)\n hooks.getCellProps.push(getCellProps)\n hooks.getFooterProps.push(getFooterProps)\n hooks.useInstance.push(useInstance)\n}\n\nuseFlexLayout.pluginName = 'useFlexLayout'\n\n// Set min-width for thead and tfoot. Include resized widths in min width\n// (using totalColumnsWidth over totalColumnsMinWidth) so cells don't overlap\n// with sticky headers and footers when the total resized width is greater than\n// the total min width.\nconst getRowGroupStyles = (props, { instance }) => {\n return [\n props,\n {\n style: {\n minWidth: asPx(instance.totalColumnsWidth)\n }\n }\n ]\n}\n\nconst getRowStyles = (props, { instance }) => {\n return [\n props,\n {\n style: {\n flex: '1 0 auto',\n minWidth: asPx(instance.totalColumnsWidth)\n }\n }\n ]\n}\n\nconst getHeaderProps = (props, { column }) => {\n // Don't set max width if MAX_SAFE_INTEGER (the default for column.maxWidth)\n const maxWidth = column.totalMaxWidth < Number.MAX_SAFE_INTEGER ? column.totalMaxWidth : null\n return [\n props,\n {\n style: {\n flex: `${column.flexWidth} 0 auto`,\n minWidth: asPx(column.totalMinWidth),\n width: asPx(column.totalWidth),\n maxWidth: asPx(maxWidth)\n }\n }\n ]\n}\n\nconst getCellProps = (props, { cell }) => {\n const maxWidth =\n cell.column.totalMaxWidth < Number.MAX_SAFE_INTEGER ? cell.column.totalMaxWidth : null\n return [\n props,\n {\n style: {\n flex: `${cell.column.flexWidth} 0 auto`,\n minWidth: asPx(cell.column.totalMinWidth),\n width: asPx(cell.column.totalWidth),\n maxWidth: asPx(maxWidth)\n }\n }\n ]\n}\n\nconst getFooterProps = (props, { column }) => {\n const maxWidth = column.totalMaxWidth < Number.MAX_SAFE_INTEGER ? column.totalMaxWidth : null\n return [\n props,\n {\n style: {\n flex: `${column.flexWidth} 0 auto`,\n minWidth: asPx(column.totalMinWidth),\n width: asPx(column.totalWidth),\n maxWidth: asPx(maxWidth)\n }\n }\n ]\n}\n\nfunction useInstance(instance) {\n const { headers, state, getHooks } = instance\n\n const resizedWidths = state.columnResizing.columnWidths\n\n // Manually calculate flex widths instead of using column.totalFlexWidth\n function calculateFlexWidths(columns) {\n let totalFlexWidth = 0\n columns.forEach(column => {\n if (column.headers) {\n column.flexWidth = calculateFlexWidths(column.headers)\n } else {\n // If the column has been resized or has fixed width, flex width = 0.\n // Otherwise, flex width = min width.\n if (resizedWidths[column.id] != null) {\n column.flexWidth = 0\n } else {\n const isFixedWidth = column.totalMinWidth === column.totalMaxWidth\n column.flexWidth = isFixedWidth ? 0 : column.totalMinWidth\n }\n }\n if (column.isVisible) {\n totalFlexWidth += column.flexWidth\n }\n })\n return totalFlexWidth\n }\n\n calculateFlexWidths(headers)\n\n const getInstance = useGetLatest(instance)\n const getTheadProps = makePropGetter(getHooks().getTheadProps, { instance: getInstance() })\n const getTfootProps = makePropGetter(getHooks().getTfootProps, { instance: getInstance() })\n\n Object.assign(instance, {\n getTheadProps,\n getTfootProps\n })\n}\n\nfunction asPx(value) {\n return typeof value === 'number' ? `${value}px` : undefined\n}\n","import { ensurePluginOrder } from 'react-table'\n\nimport { getLeafColumns } from './utils'\n\nexport default function useStickyColumns(hooks) {\n hooks.getHeaderProps.push(getHeaderProps)\n hooks.getCellProps.push(getCellProps)\n hooks.getFooterProps.push(getFooterProps)\n hooks.useInstance.push(useInstance)\n}\n\nuseStickyColumns.pluginName = 'useStickyColumns'\n\nconst getHeaderProps = (props, { column }) => {\n if (!column.stickyProps) {\n return props\n }\n return [props, column.stickyProps]\n}\n\nconst getCellProps = (props, { cell }) => {\n if (!cell.column.stickyProps) {\n return props\n }\n return [props, cell.column.stickyProps]\n}\n\nconst getFooterProps = (props, { column }) => {\n if (!column.stickyProps) {\n return props\n }\n return [props, column.stickyProps]\n}\n\nconst getStickyProps = (column, columns) => {\n const props = {\n className: 'rt-sticky',\n style: {\n position: 'sticky'\n }\n }\n if (column.sticky === 'left') {\n const stickyCols = columns.filter(col => col.sticky === 'left')\n props.style.left = 0\n for (let col of stickyCols) {\n if (col.id === column.id) break\n props.style.left += col.totalWidth\n }\n } else if (column.sticky === 'right') {\n const stickyCols = columns.filter(col => col.sticky === 'right')\n props.style.right = 0\n for (let col of stickyCols.reverse()) {\n if (col.id === column.id) break\n props.style.right += col.totalWidth\n }\n }\n return props\n}\n\nfunction useInstance(instance) {\n const { plugins, headerGroups } = instance\n\n ensurePluginOrder(plugins, ['useResizeColumns'], 'useStickyColumns')\n\n headerGroups.forEach(headerGroup => {\n const columns = headerGroup.headers\n\n // Ensure all columns in the group have the same sticky property.\n // If any sticky properties in the group differ, the first sticky column's\n // property is used for the whole group.\n columns.forEach(column => {\n const groupColumns = [column]\n if (column.columns) {\n groupColumns.push(...getLeafColumns(column))\n }\n const firstStickyCol = groupColumns.find(col => col.sticky)\n if (firstStickyCol) {\n groupColumns.forEach(col => {\n col.sticky = firstStickyCol.sticky\n })\n }\n })\n\n columns.forEach(column => {\n if (column.sticky) {\n column.stickyProps = getStickyProps(column, columns)\n }\n })\n })\n}\n","// useGroupBy hook modified to:\n// - Pass row objects and aggregated row objects to aggregate functions\n// - Include groupBy columns in aggregations\n// - Set nesting depth for leaf rows\n// - Omit row index properties on aggregated rows\n\nimport React from 'react'\nimport {\n actions,\n makePropGetter,\n ensurePluginOrder,\n useMountedLayoutEffect,\n useGetLatest\n} from 'react-table'\n\nimport { getFirstDefined } from './utils'\n\n// Not using any built-in aggregations\nconst aggregations = {}\n\nconst emptyArray = []\nconst emptyObject = {}\n\n// Actions\nactions.resetGroupBy = 'resetGroupBy'\nactions.setGroupBy = 'setGroupBy'\nactions.toggleGroupBy = 'toggleGroupBy'\n\nexport default function useGroupBy(hooks) {\n hooks.getGroupByToggleProps = [defaultGetGroupByToggleProps]\n hooks.stateReducers.push(reducer)\n hooks.visibleColumnsDeps.push((deps, { instance }) => [...deps, instance.state.groupBy])\n hooks.visibleColumns.push(visibleColumns)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\nuseGroupBy.pluginName = 'useGroupBy'\n\nconst defaultGetGroupByToggleProps = (props, { header }) => [\n props,\n {\n onClick: header.canGroupBy\n ? e => {\n e.persist()\n header.toggleGroupBy()\n }\n : undefined,\n style: {\n cursor: header.canGroupBy ? 'pointer' : undefined\n },\n title: 'Toggle GroupBy'\n }\n]\n\n// Reducer\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n groupBy: [],\n ...state\n }\n }\n\n if (action.type === actions.resetGroupBy) {\n return {\n ...state,\n groupBy: instance.initialState.groupBy || []\n }\n }\n\n if (action.type === actions.setGroupBy) {\n const { value } = action\n return {\n ...state,\n groupBy: value\n }\n }\n\n if (action.type === actions.toggleGroupBy) {\n const { columnId, value: setGroupBy } = action\n\n const resolvedGroupBy =\n typeof setGroupBy !== 'undefined' ? setGroupBy : !state.groupBy.includes(columnId)\n\n if (resolvedGroupBy) {\n return {\n ...state,\n groupBy: [...state.groupBy, columnId]\n }\n }\n\n return {\n ...state,\n groupBy: state.groupBy.filter(d => d !== columnId)\n }\n }\n}\n\nfunction visibleColumns(\n columns,\n {\n instance: {\n state: { groupBy }\n }\n }\n) {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n\n const groupByColumns = groupBy.map(g => columns.find(col => col.id === g)).filter(Boolean)\n\n const nonGroupByColumns = columns.filter(col => !groupBy.includes(col.id))\n\n columns = [...groupByColumns, ...nonGroupByColumns]\n\n columns.forEach(column => {\n column.isGrouped = groupBy.includes(column.id)\n column.groupedIndex = groupBy.indexOf(column.id)\n })\n\n return columns\n}\n\nconst defaultUserAggregations = {}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n flatRows,\n rowsById,\n allColumns,\n flatHeaders,\n groupByFn = defaultGroupByFn,\n manualGroupBy,\n aggregations: userAggregations = defaultUserAggregations,\n plugins,\n state: { groupBy },\n dispatch,\n autoResetGroupBy = true,\n disableGroupBy,\n defaultCanGroupBy,\n getHooks\n } = instance\n\n ensurePluginOrder(plugins, ['useColumnOrder', 'useFilters'], 'useGroupBy')\n\n const getInstance = useGetLatest(instance)\n\n allColumns.forEach(column => {\n const {\n accessor,\n defaultGroupBy: defaultColumnGroupBy,\n disableGroupBy: columnDisableGroupBy\n } = column\n\n column.canGroupBy = accessor\n ? getFirstDefined(\n column.canGroupBy,\n columnDisableGroupBy === true ? false : undefined,\n disableGroupBy === true ? false : undefined,\n true\n )\n : getFirstDefined(column.canGroupBy, defaultColumnGroupBy, defaultCanGroupBy, false)\n\n if (column.canGroupBy) {\n column.toggleGroupBy = () => instance.toggleGroupBy(column.id)\n }\n\n column.Aggregated = column.Aggregated || column.Cell\n })\n\n const toggleGroupBy = React.useCallback(\n (columnId, value) => {\n dispatch({ type: actions.toggleGroupBy, columnId, value })\n },\n [dispatch]\n )\n\n const setGroupBy = React.useCallback(\n value => {\n dispatch({ type: actions.setGroupBy, value })\n },\n [dispatch]\n )\n\n flatHeaders.forEach(header => {\n header.getGroupByToggleProps = makePropGetter(getHooks().getGroupByToggleProps, {\n instance: getInstance(),\n header\n })\n })\n\n const [\n groupedRows,\n groupedFlatRows,\n groupedRowsById,\n onlyGroupedFlatRows,\n onlyGroupedRowsById,\n nonGroupedFlatRows,\n nonGroupedRowsById\n ] = React.useMemo(() => {\n if (manualGroupBy || !groupBy.length) {\n return [rows, flatRows, rowsById, emptyArray, emptyObject, flatRows, rowsById]\n }\n\n // Ensure that the list of filtered columns exist\n const existingGroupBy = groupBy.filter(g => allColumns.find(col => col.id === g))\n\n // Find the columns that can or are aggregating\n // Uses each column to aggregate rows into a single value\n const aggregateRowsToValues = (leafRows, groupedRows, depth, aggregatedColumns) => {\n const values = {}\n\n allColumns.forEach(column => {\n // Only aggregate columns that aren't being grouped. Originally, all groupBy\n // columns were excluded, but now, groupBy columns not in the row's group\n // may be aggregated.\n if (!aggregatedColumns.includes(column.id)) {\n // Set placeholder values\n values[column.id] = groupedRows[0] ? groupedRows[0].values[column.id] : null\n return\n }\n\n // Get the columnValues to aggregate (no longer used)\n // const groupedValues = groupedRows.map(row => row.values[column.id])\n\n // Aggregate the values\n let aggregateFn =\n typeof column.aggregate === 'function'\n ? column.aggregate\n : userAggregations[column.aggregate] || aggregations[column.aggregate]\n\n if (aggregateFn) {\n // Get the columnValues to aggregate\n const leafValues = leafRows.map(row => {\n let columnValue = row.values[column.id]\n\n if (!depth && column.aggregateValue) {\n const aggregateValueFn =\n typeof column.aggregateValue === 'function'\n ? column.aggregateValue\n : userAggregations[column.aggregateValue] || aggregations[column.aggregateValue]\n\n if (!aggregateValueFn) {\n console.info({ column })\n throw new Error(\n `React Table: Invalid column.aggregateValue option for column listed above`\n )\n }\n\n columnValue = aggregateValueFn(columnValue, row, column)\n }\n return columnValue\n })\n\n // Originally, the leafValues and groupedValues were passed to the aggregate function.\n // Now, the aggregate function takes:\n // - leafValues: flattened array of values in the column\n // - leafRows: flattened array of rows in the column (for v6 compatibility)\n // - groupedRows: array of aggregated rows in the column\n values[column.id] = aggregateFn(\n leafValues,\n leafRows.map(row => row.values),\n groupedRows.map(row => row.values)\n )\n } else if (column.aggregate) {\n console.info({ column })\n throw new Error(`React Table: Invalid column.aggregate option for column listed above`)\n } else {\n values[column.id] = null\n }\n })\n\n return values\n }\n\n let groupedFlatRows = []\n const groupedRowsById = {}\n const onlyGroupedFlatRows = []\n const onlyGroupedRowsById = {}\n const nonGroupedFlatRows = []\n const nonGroupedRowsById = {}\n\n // Recursively group the data\n const groupUpRecursively = (rows, depth = 0, parentId) => {\n // This is the last level, just return the rows\n if (depth === existingGroupBy.length) {\n // Set nesting depth for leaf rows\n rows.forEach(row => {\n row.depth = depth\n })\n return rows\n }\n\n const columnId = existingGroupBy[depth]\n\n // Group the rows together for this level\n let rowGroupsMap = groupByFn(rows, columnId)\n\n // Peform aggregations for each group\n const aggregatedGroupedRows = Object.entries(rowGroupsMap).map(\n ([groupByVal, groupedRows], index) => {\n let id = `${columnId}:${groupByVal}`\n id = parentId ? `${parentId}>${id}` : id\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id)\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth ? flattenBy(groupedRows, 'leafRows') : groupedRows\n\n // Find the columns that can be aggregated, including any columns in\n // groupBy. Originally, no groupBy columns were aggregated. Now we\n // aggregate groupBy columns that aren't in the row's group.\n const groupedColumns = existingGroupBy.slice(0, depth + 1)\n const aggregatedColumns = allColumns\n .filter(col => !groupedColumns.includes(col.id))\n .map(col => col.id)\n\n // Originally, groupedRows were passed here, which were the same as\n // the leafRows. Now, the subRows are passed, which contain the aggregated\n // values of the immediate child rows.\n const values = aggregateRowsToValues(leafRows, subRows, depth, aggregatedColumns)\n\n const row = {\n id,\n isGrouped: true,\n groupByID: columnId,\n groupByVal,\n values,\n subRows,\n leafRows,\n depth,\n // Originally, aggregated rows had a row index corresponding to the index within\n // rowGroupsMap. This row index doesn't map to a valid data row and overlaps\n // with the leaf rows, so explicitly omit it.\n // index: undefined,\n index: undefined,\n groupIndex: index,\n // All columns that can be aggregated (including groupBy columns)\n aggregatedColumns\n }\n\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow)\n groupedRowsById[subRow.id] = subRow\n if (subRow.isGrouped) {\n onlyGroupedFlatRows.push(subRow)\n onlyGroupedRowsById[subRow.id] = subRow\n } else {\n nonGroupedFlatRows.push(subRow)\n nonGroupedRowsById[subRow.id] = subRow\n }\n })\n\n return row\n }\n )\n\n return aggregatedGroupedRows\n }\n\n const groupedRows = groupUpRecursively(rows)\n\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow)\n groupedRowsById[subRow.id] = subRow\n if (subRow.isGrouped) {\n onlyGroupedFlatRows.push(subRow)\n onlyGroupedRowsById[subRow.id] = subRow\n } else {\n nonGroupedFlatRows.push(subRow)\n nonGroupedRowsById[subRow.id] = subRow\n }\n })\n\n // Assign the new data\n return [\n groupedRows,\n groupedFlatRows,\n groupedRowsById,\n onlyGroupedFlatRows,\n onlyGroupedRowsById,\n nonGroupedFlatRows,\n nonGroupedRowsById\n ]\n }, [manualGroupBy, groupBy, rows, flatRows, rowsById, allColumns, userAggregations, groupByFn])\n\n const getAutoResetGroupBy = useGetLatest(autoResetGroupBy)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetGroupBy()) {\n dispatch({ type: actions.resetGroupBy })\n }\n }, [dispatch, manualGroupBy ? null : data])\n\n Object.assign(instance, {\n preGroupedRows: rows,\n preGroupedFlatRow: flatRows,\n preGroupedRowsById: rowsById,\n groupedRows,\n groupedFlatRows,\n groupedRowsById,\n onlyGroupedFlatRows,\n onlyGroupedRowsById,\n nonGroupedFlatRows,\n nonGroupedRowsById,\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById,\n toggleGroupBy,\n setGroupBy\n })\n}\n\nfunction prepareRow(row) {\n row.allCells.forEach(cell => {\n // Grouped cells are in the groupBy and the pivot cell for the row\n cell.isGrouped = cell.column.isGrouped && cell.column.id === row.groupByID\n\n // Aggregated cells are not grouped, not repeated, but still have subRows\n cell.isAggregated =\n !cell.isGrouped && row.aggregatedColumns?.includes(cell.column.id) && row.subRows?.length\n\n // Placeholder cells are any columns in the groupBy that are not grouped or aggregated\n cell.isPlaceholder = !cell.isGrouped && cell.column.isGrouped && !cell.isAggregated\n })\n}\n\nexport function defaultGroupByFn(rows, columnId) {\n return rows.reduce((prev, row) => {\n // TODO: Might want to implement a key serializer here so\n // irregular column values can still be grouped if needed?\n const resKey = `${row.values[columnId]}`\n prev[resKey] = Array.isArray(prev[resKey]) ? prev[resKey] : []\n prev[resKey].push(row)\n return prev\n }, {})\n}\n\nfunction flattenBy(arr, key) {\n const flat = []\n\n const recurse = arr => {\n arr.forEach(d => {\n if (!d[key]) {\n flat.push(d)\n } else {\n recurse(d[key])\n }\n })\n }\n\n recurse(arr)\n\n return flat\n}\n","// useResizeColumns modified to:\n// - Resize based on actual DOM width of column, like in v6. Requires a\n// getDOMWidth() method to be defined on each column header and header group.\n// - Clean up touchend listeners properly (https://github.com/tannerlinsley/react-table/issues/2622)\n// - Optimize number of calls to dispatch (https://github.com/tannerlinsley/react-table/pull/3231)\n\nimport React from 'react'\nimport {\n actions,\n defaultColumn,\n makePropGetter,\n ensurePluginOrder,\n useMountedLayoutEffect,\n useGetLatest\n} from 'react-table'\n\nimport { getFirstDefined } from './utils'\n\nlet passiveSupported = null\nfunction passiveEventSupported() {\n // memoize support to avoid adding multiple test events\n if (typeof passiveSupported === 'boolean') return passiveSupported\n\n let supported = false\n try {\n const options = {\n get passive() {\n supported = true\n return false\n }\n }\n\n window.addEventListener('test', null, options)\n window.removeEventListener('test', null, options)\n } catch (err) {\n supported = false\n }\n passiveSupported = supported\n return passiveSupported\n}\n\n// Default Column\ndefaultColumn.canResize = true\n\n// Actions\nactions.columnStartResizing = 'columnStartResizing'\nactions.columnResizing = 'columnResizing'\nactions.columnDoneResizing = 'columnDoneResizing'\nactions.resetResize = 'resetResize'\n\nexport default function useResizeColumns(hooks) {\n hooks.getResizerProps = [defaultGetResizerProps]\n hooks.getHeaderProps.push({\n style: {\n position: 'relative'\n }\n })\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n hooks.useInstanceBeforeDimensions.push(useInstanceBeforeDimensions)\n}\n\nconst defaultGetResizerProps = (props, { instance, header }) => {\n const { dispatch } = instance\n\n const onResizeStart = (e, header) => {\n let isTouchEvent = false\n if (e.type === 'touchstart') {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return\n }\n isTouchEvent = true\n }\n const headersToResize = getAllColumns(header)\n const headerIdWidths = headersToResize.map(d => [d.id, d.getDOMWidth()])\n const columnWidth = headerIdWidths.find(([id]) => id === header.id)[1]\n\n const clientX = isTouchEvent ? Math.round(e.touches[0].clientX) : e.clientX\n\n let raf\n let mostRecentClientX\n\n const dispatchMove = () => {\n window.cancelAnimationFrame(raf)\n raf = null\n dispatch({ type: actions.columnResizing, clientX: mostRecentClientX })\n }\n const dispatchEnd = () => {\n window.cancelAnimationFrame(raf)\n raf = null\n dispatch({ type: actions.columnDoneResizing })\n }\n\n const scheduleDispatchMoveOnNextAnimationFrame = clientXPos => {\n mostRecentClientX = clientXPos\n if (!raf) {\n raf = window.requestAnimationFrame(dispatchMove)\n }\n }\n\n const handlersAndEvents = {\n mouse: {\n moveEvent: 'mousemove',\n moveHandler: e => scheduleDispatchMoveOnNextAnimationFrame(e.clientX),\n upEvent: 'mouseup',\n upHandler: () => {\n document.removeEventListener('mousemove', handlersAndEvents.mouse.moveHandler)\n document.removeEventListener('mouseup', handlersAndEvents.mouse.upHandler)\n dispatchEnd()\n }\n },\n touch: {\n moveEvent: 'touchmove',\n moveHandler: e => {\n if (e.cancelable) {\n e.preventDefault()\n e.stopPropagation()\n }\n scheduleDispatchMoveOnNextAnimationFrame(e.touches[0].clientX)\n return false\n },\n upEvent: 'touchend',\n upHandler: () => {\n document.removeEventListener(\n handlersAndEvents.touch.moveEvent,\n handlersAndEvents.touch.moveHandler\n )\n document.removeEventListener(\n handlersAndEvents.touch.upEvent,\n handlersAndEvents.touch.upHandler\n )\n dispatchEnd()\n }\n }\n }\n\n const events = isTouchEvent ? handlersAndEvents.touch : handlersAndEvents.mouse\n const passiveIfSupported = passiveEventSupported() ? { passive: false } : false\n document.addEventListener(events.moveEvent, events.moveHandler, passiveIfSupported)\n document.addEventListener(events.upEvent, events.upHandler, passiveIfSupported)\n\n dispatch({\n type: actions.columnStartResizing,\n columnId: header.id,\n columnWidth,\n headerIdWidths,\n clientX\n })\n }\n\n return [\n props,\n {\n onMouseDown: e => e.persist() || onResizeStart(e, header),\n onTouchStart: e => e.persist() || onResizeStart(e, header),\n style: {\n cursor: 'col-resize'\n },\n draggable: false,\n role: 'separator'\n }\n ]\n}\n\nuseResizeColumns.pluginName = 'useResizeColumns'\n\nfunction reducer(state, action) {\n if (action.type === actions.init) {\n return {\n columnResizing: {\n columnWidths: {}\n },\n ...state\n }\n }\n\n if (action.type === actions.resetResize) {\n return {\n ...state,\n columnResizing: {\n columnWidths: {}\n }\n }\n }\n\n if (action.type === actions.columnStartResizing) {\n const { clientX, columnId, columnWidth, headerIdWidths } = action\n\n return {\n ...state,\n columnResizing: {\n ...state.columnResizing,\n startX: clientX,\n headerIdWidths,\n columnWidth,\n isResizingColumn: columnId\n }\n }\n }\n\n if (action.type === actions.columnResizing) {\n const { clientX } = action\n const { startX, columnWidth, headerIdWidths = [] } = state.columnResizing\n\n const deltaX = clientX - startX\n const percentageDeltaX = deltaX / columnWidth\n\n const newColumnWidths = {}\n\n headerIdWidths.forEach(([headerId, headerWidth]) => {\n newColumnWidths[headerId] = Math.max(headerWidth + headerWidth * percentageDeltaX, 0)\n })\n\n return {\n ...state,\n columnResizing: {\n ...state.columnResizing,\n columnWidths: {\n ...state.columnResizing.columnWidths,\n ...newColumnWidths\n }\n }\n }\n }\n\n if (action.type === actions.columnDoneResizing) {\n return {\n ...state,\n columnResizing: {\n ...state.columnResizing,\n startX: null,\n isResizingColumn: null\n }\n }\n }\n}\n\nconst useInstanceBeforeDimensions = instance => {\n const {\n flatHeaders,\n disableResizing,\n getHooks,\n state: { columnResizing }\n } = instance\n\n const getInstance = useGetLatest(instance)\n\n flatHeaders.forEach(header => {\n const canResize = getFirstDefined(\n header.disableResizing === true ? false : undefined,\n disableResizing === true ? false : undefined,\n true\n )\n\n header.canResize = canResize\n header.width = getFirstDefined(\n columnResizing.columnWidths[header.id],\n header.originalWidth,\n header.width\n )\n header.isResizing = columnResizing.isResizingColumn === header.id\n\n if (canResize) {\n header.getResizerProps = makePropGetter(getHooks().getResizerProps, {\n instance: getInstance(),\n header\n })\n }\n })\n}\n\nfunction useInstance(instance) {\n const { plugins, dispatch, autoResetResize = true, columns } = instance\n\n ensurePluginOrder(plugins, ['useAbsoluteLayout'], 'useResizeColumns')\n\n const getAutoResetResize = useGetLatest(autoResetResize)\n useMountedLayoutEffect(() => {\n if (getAutoResetResize()) {\n dispatch({ type: actions.resetResize })\n }\n }, [columns])\n\n const resetResizing = React.useCallback(() => dispatch({ type: actions.resetResize }), [dispatch])\n\n Object.assign(instance, {\n resetResizing\n })\n}\n\nfunction getAllColumns(column) {\n const allColumns = []\n const recurseColumn = column => {\n if (column.columns && column.columns.length) {\n column.columns.forEach(recurseColumn)\n }\n allColumns.push(column)\n }\n recurseColumn(column)\n return allColumns\n}\n","// useRowSelect hook modified to:\n// - Set row.isSelected for sub rows when paginateExpandedRows = false\n// (https://github.com/TanStack/react-table/issues/2908)\n// - Include an instance.setRowsSelected() function to set selected rows.\n// This is also useful to clear all selection, since toggleAllRowsSelected()\n// only affects visible rows, excluding any selected rows that may be filtered out.\n// - Handle sub rows correctly when custom getSubRows is used\n// (https://github.com/TanStack/react-table/pull/2886)\n\nimport React from 'react'\nimport {\n actions,\n makePropGetter,\n ensurePluginOrder,\n useGetLatest,\n useMountedLayoutEffect\n} from 'react-table'\n\nconst pluginName = 'useRowSelect'\n\n// Actions\nactions.resetSelectedRows = 'resetSelectedRows'\nactions.toggleAllRowsSelected = 'toggleAllRowsSelected'\nactions.toggleRowSelected = 'toggleRowSelected'\nactions.toggleAllPageRowsSelected = 'toggleAllPageRowsSelected'\nactions.setRowsSelected = 'setRowsSelected'\n\nexport default function useRowSelect(hooks) {\n hooks.getToggleRowSelectedProps = [defaultGetToggleRowSelectedProps]\n hooks.getToggleAllRowsSelectedProps = [defaultGetToggleAllRowsSelectedProps]\n hooks.getToggleAllPageRowsSelectedProps = [defaultGetToggleAllPageRowsSelectedProps]\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\nuseRowSelect.pluginName = pluginName\n\nconst defaultGetToggleRowSelectedProps = (props, { instance, row }) => {\n const { manualRowSelectedKey = 'isSelected' } = instance\n let checked = false\n\n if (row.original && row.original[manualRowSelectedKey]) {\n checked = true\n } else {\n checked = row.isSelected\n }\n\n return [\n props,\n {\n onChange: e => {\n row.toggleRowSelected(e.target.checked)\n },\n style: {\n cursor: 'pointer'\n },\n checked,\n title: 'Toggle Row Selected',\n indeterminate: row.isSomeSelected\n }\n ]\n}\n\nconst defaultGetToggleAllRowsSelectedProps = (props, { instance }) => [\n props,\n {\n onChange: e => {\n instance.toggleAllRowsSelected(e.target.checked)\n },\n style: {\n cursor: 'pointer'\n },\n checked: instance.isAllRowsSelected,\n title: 'Toggle All Rows Selected',\n indeterminate: Boolean(\n !instance.isAllRowsSelected && Object.keys(instance.state.selectedRowIds).length\n )\n }\n]\n\nconst defaultGetToggleAllPageRowsSelectedProps = (props, { instance }) => [\n props,\n {\n onChange(e) {\n instance.toggleAllPageRowsSelected(e.target.checked)\n },\n style: {\n cursor: 'pointer'\n },\n checked: instance.isAllPageRowsSelected,\n title: 'Toggle All Current Page Rows Selected',\n indeterminate: Boolean(\n !instance.isAllPageRowsSelected &&\n instance.page.some(({ id }) => instance.state.selectedRowIds[id])\n )\n }\n]\n\n// eslint-disable-next-line max-params\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n selectedRowIds: {},\n ...state\n }\n }\n\n if (action.type === actions.resetSelectedRows) {\n return {\n ...state,\n selectedRowIds: instance.initialState.selectedRowIds || {}\n }\n }\n\n if (action.type === actions.toggleAllRowsSelected) {\n const { value: setSelected } = action\n const { isAllRowsSelected, rowsById, nonGroupedRowsById = rowsById } = instance\n\n const selectAll = typeof setSelected !== 'undefined' ? setSelected : !isAllRowsSelected\n\n // Only remove/add the rows that are visible on the screen\n // Leave all the other rows that are selected alone.\n const selectedRowIds = Object.assign({}, state.selectedRowIds)\n\n if (selectAll) {\n Object.keys(nonGroupedRowsById).forEach(rowId => {\n selectedRowIds[rowId] = true\n })\n } else {\n Object.keys(nonGroupedRowsById).forEach(rowId => {\n delete selectedRowIds[rowId]\n })\n }\n\n return {\n ...state,\n selectedRowIds\n }\n }\n\n if (action.type === actions.toggleRowSelected) {\n const { id, value: setSelected } = action\n const { rowsById, selectSubRows = true } = instance\n const isSelected = state.selectedRowIds[id]\n const shouldExist = typeof setSelected !== 'undefined' ? setSelected : !isSelected\n\n if (isSelected === shouldExist) {\n return state\n }\n\n const newSelectedRowIds = { ...state.selectedRowIds }\n\n const handleRowById = id => {\n const row = rowsById[id]\n\n if (!row.isGrouped) {\n if (shouldExist) {\n newSelectedRowIds[id] = true\n } else {\n delete newSelectedRowIds[id]\n }\n }\n\n if (selectSubRows && row.subRows) {\n return row.subRows.forEach(row => handleRowById(row.id))\n }\n }\n\n handleRowById(id)\n\n return {\n ...state,\n selectedRowIds: newSelectedRowIds\n }\n }\n\n if (action.type === actions.toggleAllPageRowsSelected) {\n const { value: setSelected } = action\n const { page, rowsById, selectSubRows = true, isAllPageRowsSelected } = instance\n\n const selectAll = typeof setSelected !== 'undefined' ? setSelected : !isAllPageRowsSelected\n\n const newSelectedRowIds = { ...state.selectedRowIds }\n\n const handleRowById = id => {\n const row = rowsById[id]\n\n if (!row.isGrouped) {\n if (selectAll) {\n newSelectedRowIds[id] = true\n } else {\n delete newSelectedRowIds[id]\n }\n }\n\n if (selectSubRows && row.subRows) {\n return row.subRows.forEach(row => handleRowById(row.id))\n }\n }\n\n page.forEach(row => handleRowById(row.id))\n\n return {\n ...state,\n selectedRowIds: newSelectedRowIds\n }\n }\n\n if (action.type === actions.setRowsSelected) {\n const { ids: setSelected } = action\n const { rowsById, selectSubRows = true } = instance\n\n const newSelectedRowIds = {}\n\n const handleRowById = id => {\n const row = rowsById[id]\n\n // Select a filtered or (less likely) invalid row (rowsById only contains visible rows).\n if (!row) {\n newSelectedRowIds[id] = true\n return\n }\n\n if (!row.isGrouped) {\n newSelectedRowIds[id] = true\n }\n\n if (selectSubRows && row.subRows) {\n return row.subRows.forEach(row => handleRowById(row.id))\n }\n }\n\n setSelected.forEach(rowId => handleRowById(rowId))\n\n return {\n ...state,\n selectedRowIds: newSelectedRowIds\n }\n }\n return state\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n getHooks,\n plugins,\n rowsById,\n nonGroupedRowsById = rowsById,\n autoResetSelectedRows = true,\n state: { selectedRowIds },\n selectSubRows = true,\n dispatch,\n page\n } = instance\n\n ensurePluginOrder(\n plugins,\n ['useFilters', 'useGroupBy', 'useSortBy', 'useExpanded', 'usePagination'],\n 'useRowSelect'\n )\n\n const selectedFlatRows = React.useMemo(() => {\n const selectedFlatRows = []\n\n // Ensure row.isSelected is set for sub rows when paginateExpandedRows = false\n // https://github.com/TanStack/react-table/issues/2908\n const handleRow = row => {\n const isSelected = selectSubRows\n ? getRowIsSelected(row, selectedRowIds)\n : !!selectedRowIds[row.id]\n row.isSelected = !!isSelected\n row.isSomeSelected = isSelected === null\n\n if (isSelected) {\n selectedFlatRows.push(row)\n }\n\n if (row.subRows && row.subRows.length) {\n row.subRows.forEach(row => handleRow(row))\n }\n }\n\n rows.forEach(row => handleRow(row))\n\n return selectedFlatRows\n }, [rows, selectSubRows, selectedRowIds])\n\n let isAllRowsSelected = Boolean(\n Object.keys(nonGroupedRowsById).length && Object.keys(selectedRowIds).length\n )\n\n let isAllPageRowsSelected = isAllRowsSelected\n\n if (isAllRowsSelected) {\n if (Object.keys(nonGroupedRowsById).some(id => !selectedRowIds[id])) {\n isAllRowsSelected = false\n }\n }\n\n if (!isAllRowsSelected) {\n if (page && page.length && page.some(({ id }) => !selectedRowIds[id])) {\n isAllPageRowsSelected = false\n }\n }\n\n const getAutoResetSelectedRows = useGetLatest(autoResetSelectedRows)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetSelectedRows()) {\n dispatch({ type: actions.resetSelectedRows })\n }\n }, [dispatch, data])\n\n const toggleAllRowsSelected = React.useCallback(\n value => dispatch({ type: actions.toggleAllRowsSelected, value }),\n [dispatch]\n )\n\n const toggleAllPageRowsSelected = React.useCallback(\n value => dispatch({ type: actions.toggleAllPageRowsSelected, value }),\n [dispatch]\n )\n\n const toggleRowSelected = React.useCallback(\n (id, value) => dispatch({ type: actions.toggleRowSelected, id, value }),\n [dispatch]\n )\n\n const setRowsSelected = React.useCallback(\n ids => dispatch({ type: actions.setRowsSelected, ids }),\n [dispatch]\n )\n\n const getInstance = useGetLatest(instance)\n\n const getToggleAllRowsSelectedProps = makePropGetter(getHooks().getToggleAllRowsSelectedProps, {\n instance: getInstance()\n })\n\n const getToggleAllPageRowsSelectedProps = makePropGetter(\n getHooks().getToggleAllPageRowsSelectedProps,\n { instance: getInstance() }\n )\n\n Object.assign(instance, {\n selectedFlatRows,\n isAllRowsSelected,\n isAllPageRowsSelected,\n toggleRowSelected,\n toggleAllRowsSelected,\n setRowsSelected,\n getToggleAllRowsSelectedProps,\n getToggleAllPageRowsSelectedProps,\n toggleAllPageRowsSelected\n })\n}\n\nfunction prepareRow(row, { instance }) {\n row.toggleRowSelected = set => instance.toggleRowSelected(row.id, set)\n\n row.getToggleRowSelectedProps = makePropGetter(instance.getHooks().getToggleRowSelectedProps, {\n instance: instance,\n row\n })\n}\n\nfunction getRowIsSelected(row, selectedRowIds) {\n if (selectedRowIds[row.id]) {\n return true\n }\n\n const subRows = row.subRows\n\n if (subRows && subRows.length) {\n let allChildrenSelected = true\n let someSelected = false\n\n subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return\n }\n\n if (getRowIsSelected(subRow, selectedRowIds)) {\n someSelected = true\n } else {\n allChildrenSelected = false\n }\n })\n return allChildrenSelected ? true : someSelected ? null : false\n }\n\n return false\n}\n","// usePagination modified to:\n// - Allow pagination to be disabled. This makes it easier to use the hook\n// conditionally while keeping pagination functionality intact (e.g., the\n// pagination bar and API can still be used when pagination is disabled).\n// - Provide instance.pageRowCount for the number of paginated rows on the\n// page, excluding expanded rows when paginateExpandedRows = false.\n\nimport React from 'react'\nimport {\n actions,\n ensurePluginOrder,\n functionalUpdate,\n useMountedLayoutEffect,\n useGetLatest\n} from 'react-table'\n\nconst pluginName = 'usePagination'\n\n// Actions\nactions.resetPage = 'resetPage'\nactions.gotoPage = 'gotoPage'\nactions.setPageSize = 'setPageSize'\n\nexport default function usePagination(hooks) {\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n}\n\nusePagination.pluginName = pluginName\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n pageSize: 10,\n pageIndex: 0,\n ...state\n }\n }\n\n if (action.type === actions.resetPage) {\n return {\n ...state,\n pageIndex: instance.initialState.pageIndex || 0\n }\n }\n\n if (action.type === actions.gotoPage) {\n const { pageCount, page } = instance\n const newPageIndex = functionalUpdate(action.pageIndex, state.pageIndex)\n let canNavigate = false\n\n if (newPageIndex > state.pageIndex) {\n // next page\n canNavigate = pageCount === -1 ? page.length >= state.pageSize : newPageIndex < pageCount\n } else if (newPageIndex < state.pageIndex) {\n // prev page\n canNavigate = newPageIndex > -1\n }\n\n if (!canNavigate) {\n return state\n }\n\n return {\n ...state,\n pageIndex: newPageIndex\n }\n }\n\n if (action.type === actions.setPageSize) {\n const { pageSize } = action\n const topRowIndex = state.pageSize * state.pageIndex\n const pageIndex = Math.floor(topRowIndex / pageSize)\n\n return {\n ...state,\n pageIndex,\n pageSize\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n rows,\n autoResetPage = true,\n manualExpandedKey = 'expanded',\n plugins,\n pageCount: userPageCount,\n paginateExpandedRows = true,\n expandSubRows = true,\n disablePagination,\n state: { pageIndex, expanded, globalFilter, filters, groupBy, sortBy },\n dispatch,\n data,\n manualPagination\n } = instance\n\n ensurePluginOrder(\n plugins,\n ['useGlobalFilter', 'useFilters', 'useGroupBy', 'useSortBy', 'useExpanded'],\n 'usePagination'\n )\n\n const getAutoResetPage = useGetLatest(autoResetPage)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetPage()) {\n dispatch({ type: actions.resetPage })\n }\n }, [dispatch, manualPagination ? null : data, globalFilter, filters, groupBy, sortBy])\n\n // Disabling pagination effectively means setting the page size to the table size.\n // This is best done by the hook, rather than the user, because the row count\n // isn't known until other row-manipulating hooks have run (e.g., useGroupBy).\n const pageSize = disablePagination ? rows.length : instance.state.pageSize\n\n const pageCount = manualPagination ? userPageCount : Math.ceil(rows.length / pageSize)\n\n const pageOptions = React.useMemo(\n () => (pageCount > 0 ? [...new Array(pageCount)].fill(null).map((d, i) => i) : []),\n [pageCount]\n )\n\n const [page, pageRowCount] = React.useMemo(() => {\n let page\n\n if (manualPagination) {\n page = rows\n } else {\n const pageStart = pageSize * pageIndex\n const pageEnd = pageStart + pageSize\n\n page = rows.slice(pageStart, pageEnd)\n }\n\n const pageRowCount = page.length\n\n if (paginateExpandedRows) {\n return [page, pageRowCount]\n }\n\n return [expandRows(page, { manualExpandedKey, expanded, expandSubRows }), pageRowCount]\n }, [\n expandSubRows,\n expanded,\n manualExpandedKey,\n manualPagination,\n pageIndex,\n pageSize,\n paginateExpandedRows,\n rows\n ])\n\n const canPreviousPage = pageIndex > 0\n const canNextPage = pageCount === -1 ? page.length >= pageSize : pageIndex < pageCount - 1\n\n const gotoPage = React.useCallback(\n pageIndex => {\n dispatch({ type: actions.gotoPage, pageIndex })\n },\n [dispatch]\n )\n\n const previousPage = React.useCallback(() => {\n return gotoPage(old => old - 1)\n }, [gotoPage])\n\n const nextPage = React.useCallback(() => {\n return gotoPage(old => old + 1)\n }, [gotoPage])\n\n const setPageSize = React.useCallback(\n pageSize => {\n dispatch({ type: actions.setPageSize, pageSize })\n },\n [dispatch]\n )\n\n Object.assign(instance, {\n pageOptions,\n pageCount,\n page,\n pageRowCount,\n canPreviousPage,\n canNextPage,\n gotoPage,\n previousPage,\n nextPage,\n setPageSize\n })\n}\n\nfunction expandRows(rows, { manualExpandedKey, expanded, expandSubRows = true }) {\n const expandedRows = []\n\n const handleRow = (row, addToExpandedRows = true) => {\n row.isExpanded = (row.original && row.original[manualExpandedKey]) || expanded[row.id]\n\n row.canExpand = row.subRows && !!row.subRows.length\n\n if (addToExpandedRows) {\n expandedRows.push(row)\n }\n\n if (row.subRows && row.subRows.length && row.isExpanded) {\n row.subRows.forEach(row => handleRow(row, expandSubRows))\n }\n }\n\n rows.forEach(row => handleRow(row))\n\n return expandedRows\n}\n","export function sum(values) {\n const numbers = omitMissingNumbers(values)\n if (numbers.length === 0) {\n return 0\n }\n const result = numbers.reduce((a, b) => a + b, 0)\n // Adjust for floating-point precision errors\n return round(result, 12)\n}\n\nexport function mean(values) {\n const numbers = omitMissingNumbers(values)\n if (numbers.length === 0) {\n return NaN\n }\n const result = sum(numbers) / numbers.length\n // Adjust for floating-point precision errors\n return round(result, 12)\n}\n\nexport function maxNumber(values) {\n const numbers = omitMissingNumbers(values)\n if (numbers.length === 0) {\n return NaN\n }\n return Math.max.apply(null, numbers)\n}\n\nexport function minNumber(values) {\n const numbers = omitMissingNumbers(values)\n if (numbers.length === 0) {\n return NaN\n }\n return Math.min.apply(null, numbers)\n}\n\nexport function median(values) {\n const numbers = omitMissingNumbers(values)\n if (numbers.length === 0) {\n return NaN\n }\n numbers.sort((a, b) => a - b)\n if (numbers.length % 2 === 1) {\n return numbers[(numbers.length - 1) / 2]\n } else {\n return mean(numbers.slice(numbers.length / 2 - 1, numbers.length / 2 + 1))\n }\n}\n\nexport function max(values) {\n let maxValue\n values.forEach(value => {\n if (maxValue == null || value > maxValue) {\n maxValue = value\n }\n })\n return maxValue\n}\n\nexport function min(values) {\n let minValue\n values.forEach(value => {\n if (minValue == null || value < minValue) {\n minValue = value\n }\n })\n return minValue\n}\n\nexport function count(values) {\n return values.length\n}\n\nexport function unique(values) {\n return [...new Set(values)].join(', ')\n}\n\nexport function frequency(values) {\n const counts = {}\n values.forEach(value => {\n counts[value] = counts[value] || 0\n counts[value] += 1\n })\n const strs = Object.keys(counts).map(val => {\n return val + (counts[val] > 1 ? ` (${counts[val]})` : '')\n })\n return strs.join(', ')\n}\n\nconst numericAggregators = {\n mean,\n sum,\n max: maxNumber,\n min: minNumber,\n median\n}\n\nconst defaultAggregators = {\n max,\n min,\n count,\n unique,\n frequency\n}\n\nexport function getAggregateFunction(name, type) {\n if (type === 'numeric' && numericAggregators[name]) {\n return numericAggregators[name]\n }\n return defaultAggregators[name]\n}\n\nexport function round(n, digits = 3) {\n if (!Number.isFinite(n)) {\n return n\n }\n digits = digits > 0 ? digits : 0\n const c = Math.pow(10, digits)\n // Round away from zero rather than up (Math.round rounds -1.5 to -1)\n return (Math.sign(n) * Math.round(Math.abs(n) * c)) / c\n}\n\nfunction omitMissingNumbers(values) {\n return values.filter(n => n != null && !Number.isNaN(n))\n}\n","import React, { Fragment } from 'react'\nimport { hydrate } from 'reactR'\n\nimport WidgetContainer from './WidgetContainer'\nimport { getAggregateFunction } from './aggregators'\nimport { classNames, escapeRegExp, getFirstDefined, getLeafColumns } from './utils'\n\n// Use zero-width spaces to preserve the height of empty cells\nexport const emptyValue = '\\u200b'\n\n// Override default subRows property\nconst subRowsKey = '.subRows'\n\nexport function getSubRows(row) {\n return row[subRowsKey] || []\n}\n\n// Normalize raw column data from R for use in reactable\nexport function normalizeColumnData(data, columns) {\n for (let col of columns) {\n if (col.type === 'numeric' && data[col.id]) {\n convertJSONNumbers(data[col.id])\n }\n }\n return columnsToRows(data)\n}\n\n// Convert JSON-serialized numbers to JavaScript numbers in place. jsonlite::toJSON() converts\n// numeric NA, NaN, Inf, -Inf to strings, as there isn't a way to represent them in JSON otherwise.\nexport function convertJSONNumbers(arr) {\n for (let i = 0; i < arr.length; i++) {\n let n = arr[i]\n // Numeric columns can have nulls in pre-grouped data\n if (typeof n === 'number' || n == null) {\n continue\n }\n if (n === 'NA') {\n n = null\n } else if (n === 'NaN') {\n n = NaN\n } else if (n === 'Inf') {\n n = Infinity\n } else if (n === '-Inf') {\n n = -Infinity\n } else {\n n = Number(n)\n }\n arr[i] = n\n }\n}\n\n// Convert column-based data to rows\n// e.g. { a: [1, 2], b: ['x', 'y'] } to [{ a: 1, b: 'x' }, { a: 2, b: 'y' }]\nexport function columnsToRows(columns) {\n const names = Object.keys(columns)\n if (names.length === 0) {\n return []\n }\n const rows = new Array(columns[names[0]].length)\n for (let i = 0; i < rows.length; i++) {\n rows[i] = {}\n for (let name of names) {\n const value = columns[name][i]\n if (name === subRowsKey) {\n if (value instanceof Object) {\n rows[i][name] = columnsToRows(value)\n }\n } else {\n rows[i][name] = value\n }\n }\n }\n return rows\n}\n\nexport function RawHTML({ html, className, ...props }) {\n return (\n <div\n // Ensure text is truncated with ellipsis when text wrapping is off\n className={classNames('rt-text-content', className)}\n dangerouslySetInnerHTML={{ __html: html }}\n {...props}\n />\n )\n}\n\nexport function buildColumnDefs(columns, groups, tableProps = {}) {\n const { sortable, defaultSortDesc, showSortIcon, showSortable, filterable, resizable } =\n tableProps\n\n columns = columns.map(column => {\n let col = { ...column }\n // Always access column data by ID, not a path with periods or brackets\n col.accessor = row => row[col.id]\n\n if (typeof col.aggregate === 'string') {\n col.aggregate = getAggregateFunction(col.aggregate, col.type)\n }\n\n const sortMethod = createCompareFunction({ type: col.type, naLast: col.sortNALast })\n col.sortType = function sortType(a, b, id, desc) {\n return sortMethod(a.values[id], b.values[id], desc)\n }\n\n // Translate v6 props (e.g. sortable) to v7 (e.g. disableSortBy)\n col.sortable = getFirstDefined(col.sortable, sortable)\n col.disableSortBy = !col.sortable\n\n col.defaultSortDesc = getFirstDefined(col.defaultSortDesc, defaultSortDesc)\n col.sortDescFirst = col.defaultSortDesc\n\n col.filterable = getFirstDefined(col.filterable, filterable)\n col.disableFilters = !col.filterable\n\n if (col.searchable === false) {\n col.disableGlobalFilter = true\n }\n // Disable searching for hidden columns by default, but still allow it if requested\n if (col.show === false && col.searchable !== true) {\n col.disableGlobalFilter = true\n }\n\n // Default column filters\n // - numeric columns: string starts with\n // - other columns: case-insensitive substring\n if (col.type === 'numeric') {\n col.createMatcher = createStartsWithMatcher\n } else {\n col.createMatcher = createSubstringMatcher\n }\n col.filter = (rows, columnIds, filterValue) => {\n // For individual column filters, columnIds will always contain one column ID\n const id = columnIds[0]\n if (typeof col.filterMethod === 'function') {\n return col.filterMethod(rows, id, filterValue)\n }\n const match = col.createMatcher(filterValue)\n return rows.filter(row => {\n const value = row.values[id]\n return match(value)\n })\n }\n\n if (col.type === 'numeric') {\n // Right-align numbers by default\n col.align = col.align || 'right'\n } else {\n col.align = col.align || 'left'\n }\n\n col.vAlign = col.vAlign || 'top'\n col.headerVAlign = col.headerVAlign || 'top'\n\n const { width, minWidth, maxWidth } = col\n col.minWidth = getFirstDefined(width, minWidth, 100)\n col.maxWidth = getFirstDefined(width, maxWidth, Number.MAX_SAFE_INTEGER)\n\n // maxWidth takes priority over minWidth\n col.minWidth = Math.min(col.minWidth, col.maxWidth)\n\n // Start column width at min width / flex width, like in v6\n col.width = col.minWidth\n\n col.resizable = getFirstDefined(col.resizable, resizable)\n // Disable resizing on fixed width columns\n if (col.minWidth === col.maxWidth) {\n col.resizable = false\n }\n col.disableResizing = !col.resizable\n\n col.Cell = function Cell(cellInfo, state) {\n let value = cellInfo.value\n\n const isMissingValue = value == null || Number.isNaN(value)\n if (isMissingValue) {\n value = col.na\n }\n\n if (!isMissingValue && col.format && col.format.cell) {\n value = formatValue(value, col.format.cell)\n }\n\n if (col.cell) {\n if (typeof col.cell === 'function') {\n value = col.cell({ ...cellInfo, value }, state)\n }\n // Make sure we don't render aggregated cells for R renderers\n if (Array.isArray(col.cell) && !cellInfo.aggregated) {\n value = col.cell[cellInfo.index]\n if (value) {\n value = hydrate({ Fragment, WidgetContainer }, value)\n }\n }\n }\n\n // Use zero-width spaces to preserve the height of blank cells\n if (value == null || value === '') {\n value = emptyValue\n }\n\n let content\n if (React.isValidElement(value)) {\n content = value\n } else if (col.html) {\n // Render inline to align with the expander\n content = <RawHTML style={{ display: 'inline' }} html={value} />\n } else {\n content = String(value)\n }\n\n return content\n }\n\n if (col.grouped) {\n col.Grouped = function Grouped(cellInfo, state) {\n let value = cellInfo.value\n\n const isMissingValue = value == null || Number.isNaN(value)\n if (isMissingValue) {\n value = col.na\n }\n\n if (!isMissingValue && col.format && col.format.cell) {\n value = formatValue(value, col.format.cell)\n }\n\n value = col.grouped({ ...cellInfo, value }, state)\n\n // Use zero-width spaces to preserve the height of blank cells\n if (value == null || value === '') {\n value = emptyValue\n }\n\n let content\n if (React.isValidElement(value)) {\n content = value\n } else if (col.html) {\n // Render inline to align with the expander\n content = <RawHTML style={{ display: 'inline' }} html={value} />\n } else {\n content = String(value)\n }\n return content\n }\n } else {\n // Render grouped values the same as regular cells\n col.Grouped = function Grouped(cellInfo, state) {\n const value = col.Cell(cellInfo, state)\n return (\n <React.Fragment>\n {value}\n {cellInfo.subRows && ` (${cellInfo.subRows.length})`}\n </React.Fragment>\n )\n }\n }\n\n col.Aggregated = function Aggregated(cellInfo, state) {\n let value = cellInfo.value\n if (value != null && col.format && col.format.aggregated) {\n value = formatValue(value, col.format.aggregated)\n }\n if (col.aggregated) {\n value = col.aggregated({ ...cellInfo, value }, state)\n }\n if (value == null) {\n value = ''\n }\n let content\n if (React.isValidElement(value)) {\n content = value\n } else if (col.html) {\n return <RawHTML html={value} />\n } else {\n content = String(value)\n }\n return content\n }\n\n col.Header = function Header(column, state) {\n let header = col.name\n\n if (col.header != null) {\n if (typeof col.header === 'function') {\n header = col.header(column, state)\n } else {\n header = hydrate({ Fragment, WidgetContainer }, col.header)\n }\n }\n\n let content\n if (React.isValidElement(header)) {\n content = header\n } else if (col.html) {\n content = <RawHTML html={header} />\n } else {\n content = header != null ? String(header) : ''\n }\n\n // Add sort icon to column header\n if (col.sortable && showSortIcon) {\n const sortClass = showSortable ? 'rt-sort' : ''\n // Ensure text is truncated with an ellipsis when text wrapping is off.\n // The outer container is a flex container, so we need to wrap text in a\n // block element to allow text to shrink below their minimum content size.\n content = col.html ? content : <div className=\"rt-text-content\">{content}</div>\n\n if (col.align === 'right') {\n return (\n <div className=\"rt-sort-header\">\n <span className={classNames(sortClass, 'rt-sort-left')} aria-hidden=\"true\" />\n {content}\n </div>\n )\n } else {\n return (\n <div className=\"rt-sort-header\">\n {content}\n <span className={classNames(sortClass, 'rt-sort-right')} aria-hidden=\"true\" />\n </div>\n )\n }\n }\n return content\n }\n\n if (col.footer != null) {\n col.Footer = function Footer(column, state) {\n let footer\n if (typeof col.footer === 'function') {\n footer = col.footer(column, state)\n } else {\n footer = hydrate({ Fragment, WidgetContainer }, col.footer)\n }\n if (React.isValidElement(footer)) {\n return footer\n } else if (col.html) {\n return <RawHTML html={footer} />\n } else {\n return footer != null ? String(footer) : ''\n }\n }\n } else {\n // Set default content for an empty footer (otherwise defaults to )\n col.Footer = emptyValue\n }\n\n const colAlignClass = getAlignClass(col.align)\n const cellVAlignClass = getVAlignClass(col.vAlign)\n const headerVAlignClass = getVAlignClass(col.headerVAlign)\n\n col.headerClassName = classNames(colAlignClass, headerVAlignClass, col.headerClassName)\n col.footerClassName = classNames(colAlignClass, cellVAlignClass, col.footerClassName)\n\n col.getProps = (rowInfo, column, state) => {\n let props = {\n className: classNames(colAlignClass, cellVAlignClass)\n }\n if (col.className) {\n let className\n if (typeof col.className === 'function') {\n className = col.className(rowInfo, column, state)\n } else if (Array.isArray(col.className)) {\n className = col.className[rowInfo.index]\n } else {\n className = col.className\n }\n props.className = classNames(props.className, className)\n }\n if (col.style) {\n let style\n if (typeof col.style === 'function') {\n style = col.style(rowInfo, column, state)\n } else if (Array.isArray(col.style)) {\n style = col.style[rowInfo.index]\n } else {\n style = col.style\n }\n props.style = style\n }\n return props\n }\n\n return col\n })\n\n if (groups) {\n columns = addColumnGroups(columns, groups)\n columns.forEach((col, i) => {\n // The column group ID is arbitrary and just has to be unique\n col.id = `group_${i}`\n if (col.name != null || col.header != null) {\n col.Header = function Header(column, state) {\n let header = col.name\n if (col.header) {\n if (typeof col.header === 'function') {\n header = col.header(column, state)\n } else {\n header = hydrate({ Fragment, WidgetContainer }, col.header)\n }\n }\n if (React.isValidElement(header)) {\n return header\n } else if (col.html) {\n return <RawHTML html={header} />\n } else {\n return header != null ? String(header) : ''\n }\n }\n } else {\n col.Header = emptyValue\n }\n\n // Enable resizing if a single leaf column can be resized\n const leafColumns = getLeafColumns(col)\n if (leafColumns.every(col => col.disableResizing)) {\n col.disableResizing = true\n }\n\n col.align = col.align || 'center'\n col.headerVAlign = col.headerVAlign || 'top'\n\n const colAlignClass = getAlignClass(col.align)\n const headerVAlignClass = getVAlignClass(col.headerVAlign)\n\n col.headerClassName = classNames(colAlignClass, headerVAlignClass, col.headerClassName)\n })\n }\n\n return columns\n}\n\n// Add groups to an array of column definitions\nexport function addColumnGroups(columns, groups) {\n groups.forEach(group => {\n group = { ...group }\n const groupIds = group.columns\n group.columns = []\n columns = columns.reduce((newCols, col) => {\n if (col.id === groupIds[0]) {\n newCols.push(group)\n group.columns.push(col)\n } else if (groupIds.includes(col.id)) {\n group.columns.push(col)\n } else {\n newCols.push(col)\n }\n return newCols\n }, [])\n })\n\n // Create column groups for ungrouped columns, combining adjacent columns\n const newCols = []\n let lastGroup\n columns.forEach(col => {\n if (col.columns) {\n // Already a header group\n newCols.push(col)\n lastGroup = null\n } else {\n // Individual column\n if (!lastGroup) {\n lastGroup = { columns: [], isUngrouped: true }\n newCols.push(lastGroup)\n }\n lastGroup.columns.push(col)\n }\n })\n columns = newCols\n\n return columns\n}\n\n// Compare function that handles numbers and optionally sorts missing values (null, NaN) last.\nexport function createCompareFunction({ type, naLast } = {}) {\n return function compare(a, b, desc) {\n if (type === 'numeric') {\n a = Number.isNaN(a) ? null : a\n b = Number.isNaN(b) ? null : b\n } else {\n a = typeof a === 'string' ? a.toLowerCase() : a\n b = typeof b === 'string' ? b.toLowerCase() : b\n }\n if (a === b) {\n return 0\n }\n if (a == null) {\n if (naLast) return desc ? -1 : 1\n return -1\n }\n if (b == null) {\n if (naLast) return desc ? 1 : -1\n return 1\n }\n if (a > b) {\n return 1\n }\n if (a < b) {\n return -1\n }\n return 0\n }\n}\n\nexport function formatValue(value, options) {\n let {\n prefix,\n suffix,\n digits,\n separators,\n percent,\n currency,\n datetime,\n date,\n time,\n hour12,\n locales\n } = options\n\n if (typeof value === 'number') {\n if (separators || percent || currency || digits != null || locales) {\n // While Number.toLocaleString supports up to 20 fraction digits,\n // IE11 only supports up to 18 digits when formatting as percentages.\n let maximumFractionDigits = 18\n const options = { useGrouping: separators ? true : false }\n if (percent) {\n options.style = 'percent'\n // Use lower fraction digits to mitigate floating-point precision errors with\n // percent formatting, which can happen when using the Intl polyfill in V8.\n // This is the same as the rounding digits used by the aggregators.\n maximumFractionDigits = 12\n }\n if (currency) {\n options.style = 'currency'\n options.currency = currency\n } else if (digits != null) {\n options.minimumFractionDigits = Math.min(digits, maximumFractionDigits)\n options.maximumFractionDigits = Math.min(digits, maximumFractionDigits)\n } else {\n options.maximumFractionDigits = maximumFractionDigits\n }\n value = value.toLocaleString(locales || undefined, options)\n }\n }\n if (datetime || date || time) {\n locales = locales || undefined\n const options = {}\n if (hour12 != null) {\n options.hour12 = hour12\n }\n if (datetime) {\n value = new Date(value).toLocaleString(locales, options)\n } else if (date) {\n // Format YYYY-MM-DD dates in local time, not UTC.\n // Ignore ISO 8601 dates otherwise, i.e., YYYY-MM-DDTHH:MM:SS[Z]\n // http://blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html\n if (value.includes('-') && !value.includes('T') && !value.includes('Z')) {\n value = value.replace(/-/g, '/')\n }\n value = new Date(value).toLocaleDateString(locales, options)\n } else if (time) {\n value = new Date(value).toLocaleTimeString(locales, options)\n }\n }\n if (prefix != null) {\n value = value != null ? value : ''\n value = String(prefix) + value\n }\n if (suffix != null) {\n value = value != null ? value : ''\n value = value + String(suffix)\n }\n return value\n}\n\nexport function createStartsWithMatcher(str) {\n const regex = new RegExp('^' + escapeRegExp(str), 'i')\n return value => {\n // Ignore columns without data (don't match on \"undefined\"). This shouldn't\n // happen unless a data-less column (e.g., selection) is manually filtered via API.\n if (value === undefined) {\n return false\n }\n return regex.test(value)\n }\n}\n\nexport function createSubstringMatcher(str) {\n const regex = new RegExp(escapeRegExp(str), 'i')\n return value => {\n // Ignore columns without data (don't match on \"undefined\"). This shouldn't\n // happen unless a data-less column (e.g., selection) is manually filtered via API.\n if (value === undefined) {\n return false\n }\n return regex.test(value)\n }\n}\n\nfunction getAlignClass(align) {\n return `rt-align-${align}`\n}\n\nfunction getVAlignClass(vAlign) {\n if (vAlign === 'top') {\n return ''\n }\n return `rt-valign-${vAlign}`\n}\n","import React, { Fragment } from 'react'\nimport {\n safeUseLayoutEffect,\n useExpanded,\n useFilters,\n useGetLatest,\n useGlobalFilter,\n useMountedLayoutEffect,\n useSortBy,\n useTable\n} from 'react-table'\nimport PropTypes from 'prop-types'\nimport { hydrate } from 'reactR'\n\nimport Pagination from './Pagination'\nimport WidgetContainer from './WidgetContainer'\nimport useFlexLayout from './useFlexLayout'\nimport useStickyColumns from './useStickyColumns'\nimport useGroupBy from './useGroupBy'\nimport useResizeColumns from './useResizeColumns'\nimport useRowSelect from './useRowSelect'\nimport usePagination from './usePagination'\nimport useMeta from './useMeta'\nimport { buildColumnDefs, emptyValue, getSubRows, normalizeColumnData, RawHTML } from './columns'\nimport { defaultLanguage, renderTemplate } from './language'\nimport { createTheme, css } from './theme'\nimport {\n classNames,\n convertRowsToV6,\n getLeafColumns,\n rowsToCSV,\n downloadCSV,\n useAsyncDebounce\n} from './utils'\n\nimport './react-table.css'\nimport './reactable.css'\n\nconst tableInstances = {}\nexport function getInstance(tableId) {\n if (!tableId) {\n throw new Error('A reactable table ID must be provided')\n }\n const getInstance = tableInstances[tableId]\n if (!getInstance) {\n throw new Error(`reactable instance '${tableId}' not found`)\n }\n return getInstance()\n}\n\nexport function getState(tableId) {\n return getInstance(tableId).state\n}\n\nexport function setFilter(tableId, columnId, value) {\n getInstance(tableId).setFilter(columnId, value)\n}\n\nexport function setAllFilters(tableId, value) {\n getInstance(tableId).setAllFilters(value)\n}\n\nexport function setSearch(tableId, value) {\n getInstance(tableId).setGlobalFilter(value)\n}\n\nexport function toggleGroupBy(tableId, columnId, isGrouped) {\n getInstance(tableId).toggleGroupBy(columnId, isGrouped)\n}\n\nexport function setGroupBy(tableId, columnIds) {\n getInstance(tableId).setGroupBy(columnIds)\n}\n\nexport function toggleAllRowsExpanded(tableId, isExpanded) {\n getInstance(tableId).toggleAllRowsExpanded(isExpanded)\n}\n\nexport function downloadDataCSV(tableId, filename = 'data.csv', options = {}) {\n getInstance(tableId).downloadDataCSV(filename, options)\n}\n\nexport function getDataCSV(tableId, options = {}) {\n return getInstance(tableId).getDataCSV(options)\n}\n\nexport function setMeta(tableId, meta) {\n getInstance(tableId).setMeta(meta)\n}\n\nexport function toggleHideColumn(tableId, columnId, isHidden) {\n getInstance(tableId).toggleHideColumn(columnId, isHidden)\n}\n\nexport function setHiddenColumns(tableId, columns) {\n getInstance(tableId).setHiddenColumns(columns)\n}\n\nexport function setData(tableId, data, options) {\n getInstance(tableId).setData(data, options)\n}\n\nexport function onStateChange(tableId, listenerFn) {\n return getInstance(tableId).onStateChange(listenerFn)\n}\n\nexport default function Reactable({\n data,\n columns,\n columnGroups,\n sortable,\n defaultSortDesc,\n showSortIcon,\n showSortable,\n filterable,\n resizable,\n theme,\n language,\n dataKey,\n ...rest\n}) {\n data = normalizeColumnData(data, columns)\n columns = buildColumnDefs(columns, columnGroups, {\n sortable,\n defaultSortDesc,\n showSortIcon,\n showSortable,\n filterable,\n resizable\n })\n\n theme = createTheme(theme) || {}\n\n language = { ...defaultLanguage, ...language }\n for (let key in language) {\n language[key] = language[key] || null\n }\n\n return (\n <Table\n data={data}\n columns={columns}\n theme={theme}\n language={language}\n // Reset all state when the data changes. By default, most of the table state\n // persists when the data changes (sorted, filtered, grouped state, etc.).\n key={dataKey}\n {...rest}\n />\n )\n}\n\nconst RootComponent = React.forwardRef(function RootComponent({ className, ...rest }, ref) {\n // Keep ReactTable class for legacy compatibility (deprecated in v0.3.0)\n return <div ref={ref} className={classNames('Reactable', 'ReactTable', className)} {...rest} />\n})\n\nconst TableComponent = React.forwardRef(function TableComponent({ className, ...rest }, ref) {\n return <div ref={ref} className={classNames('rt-table', className)} role=\"table\" {...rest} />\n})\n\nfunction TheadComponent({ className, ...rest }) {\n return <div className={classNames('rt-thead', className)} role=\"rowgroup\" {...rest} />\n}\n\nfunction TbodyComponent({ className, ...rest }) {\n return <div className={classNames('rt-tbody', className)} role=\"rowgroup\" {...rest} />\n}\n\nfunction TfootComponent({ className, ...rest }) {\n return <div className={classNames('rt-tfoot', className)} role=\"rowgroup\" {...rest} />\n}\n\nfunction TrGroupComponent({ className, ...rest }) {\n return <div className={classNames('rt-tr-group', className)} {...rest} />\n}\n\nfunction TrComponent({ className, ...rest }) {\n return <div className={classNames('rt-tr', className)} role=\"row\" {...rest} />\n}\n\nconst ThComponent = React.forwardRef(function ThComponent(props, ref) {\n let {\n canSort,\n sortDescFirst,\n isSorted,\n isSortedDesc,\n toggleSortBy,\n canResize,\n isResizing,\n className,\n innerClassName,\n children,\n ...thProps\n } = props\n\n const [skipNextSort, setSkipNextSort] = React.useState(false)\n\n if (canSort) {\n const currentSortOrder = isSorted ? (isSortedDesc ? 'descending' : 'ascending') : 'none'\n const defaultSortOrder = sortDescFirst ? 'descending' : 'ascending'\n const toggleSort = isMultiSort => {\n let sortDesc = isSorted ? !isSortedDesc : sortDescFirst\n // Allow sort clearing if multi-sorting\n if (isMultiSort) {\n sortDesc = null\n }\n toggleSortBy && toggleSortBy(sortDesc, isMultiSort)\n }\n thProps = {\n ...thProps,\n 'aria-sort': currentSortOrder,\n tabIndex: '0',\n onClick: e => {\n if (!skipNextSort) {\n toggleSort(e.shiftKey)\n }\n },\n onKeyPress: e => {\n const keyCode = e.which || e.keyCode\n if (keyCode === 13 || keyCode === 32) {\n toggleSort(e.shiftKey)\n }\n },\n onMouseUp: () => {\n // Prevent resizer clicks from toggling sort (since resizer is in the header)\n if (isResizing) {\n setSkipNextSort(true)\n } else {\n setSkipNextSort(false)\n }\n },\n onMouseDown: e => {\n // Prevent text selection on double clicks, only when sorting\n if (e.detail > 1 || e.shiftKey) {\n e.preventDefault()\n }\n },\n // Focus indicator for keyboard navigation\n 'data-sort-hint': isSorted ? null : defaultSortOrder\n }\n }\n\n // The inner wrapper is a block container that prevents the outer flex container from\n // breaking text overflow and ellipsis truncation. Text nodes can't shrink below their\n // minimum content size.\n return (\n <div\n className={classNames('rt-th', canResize && 'rt-th-resizable', className)}\n role=\"columnheader\"\n ref={ref}\n {...thProps}\n >\n <div className={classNames('rt-th-inner', innerClassName)}>{children}</div>\n </div>\n )\n})\n\nThComponent.propTypes = {\n defaultSortOrder: PropTypes.string,\n canSort: PropTypes.bool,\n sortDescFirst: PropTypes.bool,\n isSorted: PropTypes.bool,\n isSortedDesc: PropTypes.bool,\n toggleSortBy: PropTypes.func,\n canResize: PropTypes.bool,\n isResizing: PropTypes.bool,\n className: PropTypes.string,\n innerClassName: PropTypes.string,\n children: PropTypes.node\n}\n\nfunction TdComponent({ className, innerClassName, children, ...rest }) {\n // The inner wrapper is a block container that prevents the outer flex container from\n // breaking text overflow and ellipsis truncation. Text nodes can't shrink below their\n // minimum content size.\n return (\n <div className={classNames('rt-td', className)} role=\"cell\" {...rest}>\n <div className={classNames('rt-td-inner', innerClassName)}>{children}</div>\n </div>\n )\n}\n\n// Get class names for a cell theme. Padding is set on the inner wrapper to prevent\n// the inner wrapper (with overflow hidden) from clipping borders, box shadows, etc.\nfunction getCellTheme(style) {\n if (!style) {\n return {}\n }\n if (style.padding != null) {\n const { padding, ...cellStyle } = style\n return {\n className: css(cellStyle),\n innerClassName: css({ padding })\n }\n }\n return { className: css(style) }\n}\n\nfunction ResizerComponent({ onMouseDown, onTouchStart, className, ...rest }) {\n return (\n <div\n className={classNames('rt-resizer', className)}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n aria-hidden={true}\n {...rest}\n />\n )\n}\n\nResizerComponent.propTypes = {\n onMouseDown: PropTypes.func,\n onTouchStart: PropTypes.func,\n className: PropTypes.string\n}\n\nclass RowDetails extends React.Component {\n componentDidMount() {\n if (window.Shiny && window.Shiny.bindAll) {\n window.Shiny.bindAll(this.el)\n }\n }\n\n componentWillUnmount() {\n if (window.Shiny && window.Shiny.unbindAll) {\n window.Shiny.unbindAll(this.el)\n }\n }\n\n render() {\n const { children, html } = this.props\n let props = { ref: el => (this.el = el) }\n if (html) {\n props = { ...props, dangerouslySetInnerHTML: { __html: html } }\n } else {\n props = { ...props, children }\n }\n return <div className=\"rt-tr-details\" {...props} />\n }\n}\n\nRowDetails.propTypes = {\n children: PropTypes.node,\n html: PropTypes.string\n}\n\nfunction ExpanderComponent({ isExpanded, className, 'aria-label': ariaLabel }) {\n return (\n <button\n className=\"rt-expander-button\"\n aria-label={ariaLabel}\n aria-expanded={isExpanded ? 'true' : 'false'}\n >\n <span\n className={classNames('rt-expander', isExpanded && 'rt-expander-open', className)}\n tabIndex=\"-1\"\n aria-hidden=\"true\"\n >\n ​\n </span>\n </button>\n )\n}\n\nExpanderComponent.propTypes = {\n isExpanded: PropTypes.bool,\n className: PropTypes.string,\n 'aria-label': PropTypes.string\n}\n\nfunction FilterComponent({\n filterValue,\n setFilter,\n className,\n placeholder,\n 'aria-label': ariaLabel\n}) {\n return (\n <input\n type=\"text\"\n className={classNames('rt-filter', className)}\n value={filterValue || ''}\n // Filter value must be undefined (not empty string) to clear the filter\n onChange={e => setFilter(e.target.value || undefined)}\n placeholder={placeholder}\n aria-label={ariaLabel}\n />\n )\n}\n\nFilterComponent.propTypes = {\n filterValue: PropTypes.string,\n setFilter: PropTypes.func.isRequired,\n className: PropTypes.string,\n placeholder: PropTypes.string,\n 'aria-label': PropTypes.string\n}\n\nfunction SearchComponent({\n searchValue,\n setSearch,\n className,\n placeholder,\n 'aria-label': ariaLabel\n}) {\n return (\n <input\n type=\"text\"\n value={searchValue || ''}\n // Search value must be undefined (not empty string) to clear the search\n onChange={e => setSearch(e.target.value || undefined)}\n className={classNames('rt-search', className)}\n placeholder={placeholder}\n aria-label={ariaLabel}\n />\n )\n}\n\nSearchComponent.propTypes = {\n searchValue: PropTypes.string,\n setSearch: PropTypes.func.isRequired,\n className: PropTypes.string,\n placeholder: PropTypes.string,\n 'aria-label': PropTypes.string\n}\n\nfunction NoDataComponent({ className, ...rest }) {\n return <div className={classNames('rt-no-data', className)} aria-live=\"assertive\" {...rest} />\n}\n\nfunction SelectInputComponent({ type, checked, onChange, 'aria-label': ariaLabel }) {\n // Use zero-width space character to properly align checkboxes with first\n // line of text in other cells, even if the text spans multiple lines.\n return (\n <div className=\"rt-select\">\n <input\n type={type}\n checked={checked}\n onChange={onChange}\n className=\"rt-select-input\"\n aria-label={ariaLabel}\n />\n ​\n </div>\n )\n}\n\nSelectInputComponent.propTypes = {\n type: PropTypes.oneOf(['checkbox', 'radio']).isRequired,\n checked: PropTypes.bool,\n onChange: PropTypes.func,\n 'aria-label': PropTypes.string\n}\n\nfunction Table({\n data: originalData,\n columns,\n groupBy,\n searchable,\n searchMethod,\n defaultSorted,\n pagination,\n paginationType,\n showPagination,\n showPageSizeOptions,\n showPageInfo,\n defaultPageSize,\n pageSizeOptions,\n minRows,\n paginateSubRows,\n defaultExpanded,\n selection,\n defaultSelected,\n selectionId,\n onClick,\n outlined,\n bordered,\n borderless,\n compact,\n nowrap,\n striped,\n highlight,\n className,\n style,\n rowClassName,\n rowStyle,\n inline,\n width,\n height,\n theme,\n language,\n meta: initialMeta,\n crosstalkKey,\n crosstalkGroup,\n crosstalkId,\n elementId,\n nested\n}) {\n const [newData, setNewData] = React.useState(null)\n const data = React.useMemo(() => {\n return newData ? newData : originalData\n }, [newData, originalData])\n\n const dataColumns = React.useMemo(() => {\n return columns.reduce((cols, col) => cols.concat(getLeafColumns(col)), [])\n }, [columns])\n\n // Must be memoized to prevent re-filtering on every render\n const globalFilter = React.useMemo(() => {\n if (searchMethod) {\n return searchMethod\n }\n return function globalFilter(rows, columnIds, searchValue) {\n const matchers = dataColumns.reduce((obj, col) => {\n obj[col.id] = col.createMatcher(searchValue)\n return obj\n }, {})\n\n rows = rows.filter(row => {\n for (const id of columnIds) {\n const value = row.values[id]\n if (matchers[id](value)) {\n return true\n }\n }\n })\n return rows\n }\n }, [dataColumns, searchMethod])\n\n const useRowSelectColumn = function useRowSelectColumn(hooks) {\n if (selection) {\n hooks.visibleColumns.push(columns => {\n const selectionCol = {\n // Apply defaults from existing selection column\n ...columns.find(col => col.selectable),\n selectable: true,\n // Disable sorting, filtering, and searching for selection columns\n disableSortBy: true,\n filterable: false,\n disableFilters: true,\n disableGlobalFilter: true\n }\n // Make selection column the first column, even before grouped columns\n return [selectionCol, ...columns.filter(col => !col.selectable)]\n })\n }\n }\n\n const useCrosstalkColumn = function useCrosstalkColumn(hooks) {\n if (crosstalkGroup) {\n hooks.visibleColumns.push(columns => {\n const ctCol = {\n id: crosstalkId,\n filter: (rows, id, value) => {\n if (!value) {\n return rows\n }\n return rows.filter(row => {\n if (value.includes(row.index)) {\n return true\n }\n })\n },\n disableGlobalFilter: true\n }\n return columns.concat(ctCol)\n })\n\n hooks.stateReducers.push(state => {\n if (!state.hiddenColumns.includes(crosstalkId)) {\n return {\n ...state,\n hiddenColumns: state.hiddenColumns.concat(crosstalkId)\n }\n }\n return state\n })\n }\n }\n\n const [meta, setMeta] = useMeta(initialMeta)\n\n const { state, ...instance } = useTable(\n {\n columns,\n data,\n initialState: {\n hiddenColumns: dataColumns.filter(col => col.show === false).map(col => col.id),\n groupBy: groupBy || [],\n sortBy: defaultSorted || [],\n pageSize: defaultPageSize,\n selectedRowIds: defaultSelected\n ? defaultSelected.reduce((obj, index) => ({ ...obj, [index]: true }), {})\n : {}\n },\n globalFilter,\n paginateExpandedRows: paginateSubRows ? true : false,\n disablePagination: !pagination,\n getSubRows,\n // Disable manual row expansion\n manualExpandedKey: null,\n // Maintain grouped state when the data changes\n autoResetGroupBy: false,\n // Maintain sorted state when the data changes\n autoResetSortBy: false,\n // Maintain expanded state when groupBy, sortBy, defaultPageSize change.\n // Expanded state is still reset when the data changes via dataKey or updateReactable.\n autoResetExpanded: false,\n // Maintain filtered state when the data changes\n autoResetFilters: false,\n autoResetGlobalFilter: false,\n // Maintain selected state when groupBy, sortBy, defaultPageSize change.\n // Selected state is still reset when the data changes via dataKey or updateReactable.\n autoResetSelectedRows: false,\n // Maintain resized state when the data changes\n autoResetResize: false,\n // Reset current page when the data changes (e.g., sorting, filtering, searching)\n autoResetPage: true\n },\n useResizeColumns,\n useFlexLayout,\n useStickyColumns,\n useFilters,\n useGlobalFilter,\n useGroupBy,\n useSortBy,\n useExpanded,\n usePagination,\n useRowSelect,\n useRowSelectColumn,\n useCrosstalkColumn\n )\n\n // Update table when default values change (preserves behavior from v6)\n useMountedLayoutEffect(() => {\n const setSortBy = instance.setSortBy\n setSortBy(defaultSorted || [])\n }, [instance.setSortBy, defaultSorted])\n\n useMountedLayoutEffect(() => {\n const setGroupBy = instance.setGroupBy\n setGroupBy(groupBy || [])\n }, [instance.setGroupBy, groupBy])\n\n useMountedLayoutEffect(() => {\n const setPageSize = instance.setPageSize\n setPageSize(defaultPageSize)\n }, [instance.setPageSize, defaultPageSize])\n\n useMountedLayoutEffect(() => {\n const setRowsSelected = instance.setRowsSelected\n setRowsSelected((defaultSelected || []).map(index => String(index)))\n }, [instance.setRowsSelected, defaultSelected])\n\n const rowsById = instance.preFilteredRowsById || instance.rowsById\n const selectedRowIndexes = React.useMemo(() => {\n return Object.keys(state.selectedRowIds).reduce((indexes, id) => {\n const row = rowsById[id]\n if (row) {\n indexes.push(row.index)\n }\n return indexes\n }, [])\n }, [state.selectedRowIds, rowsById])\n\n // Update Shiny on selected row changes (deprecated in v0.2.0)\n React.useEffect(() => {\n if (!selection) {\n return\n }\n // Convert to R's 1-based indices\n const selectedIndexes = selectedRowIndexes.map(index => index + 1)\n\n if (selectionId && window.Shiny) {\n window.Shiny.onInputChange(selectionId, selectedIndexes)\n }\n }, [selectedRowIndexes, selection, selectionId])\n\n // Reset searched state when table is no longer searchable\n const searchableRef = React.useRef(searchable)\n safeUseLayoutEffect(() => {\n if (searchableRef.current && !searchable) {\n const setGlobalFilter = instance.setGlobalFilter\n setGlobalFilter(undefined)\n }\n searchableRef.current = searchable\n }, [searchable, instance.setGlobalFilter])\n\n const makeSearch = () => {\n if (!searchable) {\n return null\n }\n return (\n <SearchComponent\n searchValue={state.globalFilter}\n setSearch={instance.setGlobalFilter}\n className={css(theme.searchInputStyle)}\n placeholder={language.searchPlaceholder}\n aria-label={language.searchLabel}\n />\n )\n }\n\n const rowData = convertRowsToV6(instance.rows)\n const stateInfo = React.useMemo(() => {\n return {\n ...state,\n searchValue: state.globalFilter,\n meta,\n hiddenColumns: state.hiddenColumns.filter(id => id !== crosstalkId),\n // For v6 compatibility\n sorted: state.sortBy,\n pageRows: convertRowsToV6(instance.page),\n sortedData: rowData,\n data: data,\n page: state.pageIndex,\n pageSize: state.pageSize,\n pages: instance.pageCount,\n selected: selectedRowIndexes\n }\n }, [\n state,\n meta,\n crosstalkId,\n instance.page,\n rowData,\n data,\n instance.pageCount,\n selectedRowIndexes\n ])\n\n const makeThead = () => {\n const theadProps = instance.getTheadProps()\n return (\n <TheadComponent {...theadProps}>\n {makeHeaders()}\n {makeFilters()}\n </TheadComponent>\n )\n }\n\n // Get actual width of the column for resizing\n const headerRefs = React.useRef({})\n const handleHeader = column => {\n column.getDOMWidth = () => {\n return headerRefs.current[column.id].getBoundingClientRect().width\n }\n if (column.headers && column.headers.length) {\n column.headers.forEach(col => handleHeader(col))\n }\n }\n instance.headers.forEach(handleHeader)\n\n const makeHeaders = () => {\n return instance.headerGroups.map((headerGroup, i) => {\n const isGroupHeader = i < instance.headerGroups.length - 1\n const { key: headerGroupKey, ...headerGroupProps } = headerGroup.getHeaderGroupProps({\n className: isGroupHeader ? 'rt-tr-group-header' : 'rt-tr-header'\n })\n return (\n <TrComponent key={headerGroupKey} {...headerGroupProps}>\n {headerGroup.headers.map(column => {\n column = {\n ...column,\n column, // Deprecated in v0.3.0\n data: rowData // Deprecated in v0.3.0\n }\n let header =\n typeof column.Header === 'function'\n ? column.Header(column, stateInfo)\n : column.render('Header')\n\n let headerProps = {\n // colspan doesn't apply to ARIA tables, but react-table adds it. Remove it.\n colSpan: null,\n ref: el => (headerRefs.current[column.id] = el)\n }\n if (isGroupHeader) {\n const { className: themeClass, innerClassName } = getCellTheme(theme.groupHeaderStyle)\n headerProps = {\n ...headerProps,\n 'aria-colspan': column.totalVisibleHeaderCount,\n className: classNames(\n !column.isUngrouped ? 'rt-th-group' : 'rt-th-group-none',\n column.headerClassName,\n themeClass\n ),\n innerClassName,\n style: column.headerStyle,\n canResize: column.canResize\n }\n } else {\n const { className: themeClass, innerClassName } = getCellTheme(theme.headerStyle)\n headerProps = {\n ...headerProps,\n // Assign cell role to selectable column headers to prevent input labels\n // from being read as column names (\"select all rows column\").\n role: column.selectable ? 'cell' : 'columnheader',\n className: classNames(column.headerClassName, themeClass),\n innerClassName,\n style: column.headerStyle,\n canResize: column.canResize,\n isResizing: column.isResizing\n }\n\n if (column.canSort) {\n headerProps = {\n ...headerProps,\n 'aria-label': renderTemplate(language.sortLabel, { name: column.name }),\n canSort: column.canSort,\n sortDescFirst: column.sortDescFirst,\n isSorted: column.isSorted,\n isSortedDesc: column.isSortedDesc,\n // Use toggleSortBy instead of getSortByToggleProps() for more control over sorting\n toggleSortBy: column.toggleSortBy\n }\n }\n }\n\n let resizer\n if (column.canResize) {\n const { onMouseDown, onTouchStart } = column.getResizerProps()\n resizer = (\n <ResizerComponent\n onMouseDown={e => {\n onMouseDown(e)\n // Prevent resizer from highlighting text\n e.preventDefault()\n }}\n onTouchStart={onTouchStart}\n onClick={e => {\n // Prevent resizer from toggling sorting\n e.stopPropagation()\n }}\n />\n )\n }\n\n if (column.selectable && selection === 'multiple' && instance.rows.length > 0) {\n const toggleAllRowsSelected = () => instance.toggleAllRowsSelected()\n headerProps = {\n ...headerProps,\n onClick: toggleAllRowsSelected,\n className: classNames(headerProps.className, 'rt-td-select')\n }\n header = (\n <SelectInputComponent\n type=\"checkbox\"\n checked={instance.isAllRowsSelected}\n onChange={toggleAllRowsSelected}\n aria-label={language.selectAllRowsLabel}\n />\n )\n }\n\n const { key, ...resolvedHeaderProps } = column.getHeaderProps(headerProps)\n return (\n <ThComponent key={key} {...resolvedHeaderProps}>\n {header}\n {resizer}\n </ThComponent>\n )\n })}\n </TrComponent>\n )\n })\n }\n\n // Use column.filterable over column.canFilter because useGlobalFilter\n // currently sets canFilter to true on columns with disableFilters = true.\n // https://github.com/tannerlinsley/react-table/issues/2787\n const isFilterable = instance.visibleColumns.some(col => col.filterable)\n\n // Reset filtered state when table is no longer filterable\n const filterableRef = React.useRef(isFilterable)\n safeUseLayoutEffect(() => {\n if (filterableRef.current && !isFilterable) {\n const setAllFilters = instance.setAllFilters\n setAllFilters(instance.visibleColumns.map(col => ({ id: col.id, value: undefined })))\n }\n filterableRef.current = isFilterable\n }, [isFilterable, instance.visibleColumns, instance.setAllFilters])\n\n const makeFilters = () => {\n if (!isFilterable) {\n return null\n }\n\n return (\n <TrComponent className={classNames('rt-tr-filters', css(theme.rowStyle))}>\n {instance.visibleColumns.map(column => {\n let filter\n // Use column.filterable over column.canFilter because useGlobalFilter\n // currently sets canFilter to true on columns with disableFilters = true.\n // https://github.com/TanStack/react-table/issues/2787\n if (column.filterable) {\n if (column.filterInput != null) {\n let filterInput\n if (typeof column.filterInput === 'function') {\n filterInput = column.filterInput(column, stateInfo)\n } else {\n filterInput = hydrate({ Fragment, WidgetContainer }, column.filterInput)\n }\n if (React.isValidElement(filterInput)) {\n filter = filterInput\n } else if (column.html) {\n filter = <RawHTML html={filterInput} />\n }\n } else {\n filter = (\n <FilterComponent\n filterValue={column.filterValue}\n setFilter={column.setFilter}\n className={css(theme.filterInputStyle)}\n placeholder={language.filterPlaceholder}\n aria-label={renderTemplate(language.filterLabel, { name: column.name })}\n />\n )\n }\n }\n\n const { className: themeClass, innerClassName } = getCellTheme(theme.filterCellStyle)\n const filterCellProps = {\n role: 'cell',\n // colspan doesn't apply to ARIA tables, but react-table adds it. Remove it.\n colSpan: null,\n className: classNames('rt-td-filter', column.headerClassName, themeClass),\n innerClassName,\n style: column.headerStyle\n }\n const { key, ...resolvedFilterCellProps } = column.getHeaderProps(filterCellProps)\n return (\n <TdComponent key={key} {...resolvedFilterCellProps}>\n {filter}\n </TdComponent>\n )\n })}\n </TrComponent>\n )\n }\n\n safeUseLayoutEffect(() => {\n const toggleAllRowsExpanded = instance.toggleAllRowsExpanded\n if (defaultExpanded) {\n toggleAllRowsExpanded(true)\n } else {\n toggleAllRowsExpanded(false)\n }\n }, [instance.toggleAllRowsExpanded, defaultExpanded])\n\n // Track expanded columns for multiple row details\n const [expandedColumns, setExpandedColumns] = React.useState({})\n const makeRowDetails = (rowInfo, state) => {\n // Ensure that row is expanded and not a grouped row. Row details are\n // currently not supported on grouped rows.\n if (!rowInfo.isExpanded || rowInfo.isGrouped) {\n return null\n }\n\n const expandedId = expandedColumns[rowInfo.id]\n let expandedCol\n if (expandedId != null) {\n expandedCol = instance.visibleColumns.find(col => col.id === expandedId)\n } else {\n // When expanding all rows, default to the first column with details\n expandedCol = instance.visibleColumns.find(col => col.details)\n }\n // Ensure that row details exist. Rows may have expanded state even though\n // there are no row details (when defaultExpanded = true).\n if (!expandedCol) {\n return null\n }\n\n const { details, html } = expandedCol\n let props = {}\n if (typeof details === 'function') {\n let content = details(rowInfo, state)\n if (html) {\n props.html = content\n }\n props.children = content\n } else if (Array.isArray(details)) {\n let content = details[rowInfo.index]\n if (content == null) {\n // No content to render. Although this row has no expander, it may still\n // have expanded state (when defaultExpanded = true).\n return null\n }\n if (html) {\n props.html = content\n }\n props.children = hydrate({ Reactable, Fragment, WidgetContainer }, content)\n }\n // Set key to force updates when expanding a different column or changing page\n return <RowDetails key={`${expandedCol.id}_${rowInfo.index}`} {...props} />\n }\n\n const makeTbody = () => {\n const hasStickyColumns = instance.visibleColumns.some(column => column.sticky)\n let rowHighlightClass = hasStickyColumns ? 'rt-tr-highlight-sticky' : 'rt-tr-highlight'\n let rowStripedClass = hasStickyColumns ? 'rt-tr-striped-sticky' : 'rt-tr-striped'\n\n const rows = instance.page.map((row, viewIndex) => {\n instance.prepareRow(row)\n\n // toggleRowSelected that supports single selection\n const toggleRowSelected = set => {\n if (set == null) {\n set = !row.isSelected\n }\n if (selection === 'single') {\n instance.setRowsSelected([])\n }\n row.toggleRowSelected(set)\n }\n\n const rowInfo = {\n ...row,\n toggleRowSelected,\n // For v6 compatibility\n viewIndex,\n row: row.values, // Deprecated in v0.3.0\n subRows: convertRowsToV6(row.subRows),\n aggregated: row.isGrouped,\n expanded: row.isExpanded,\n level: row.depth,\n selected: row.isSelected,\n page: state.pageIndex // Deprecated in v0.3.0\n }\n\n const rowProps = {\n className: classNames(\n striped && (viewIndex % 2 ? null : rowStripedClass),\n highlight && rowHighlightClass,\n row.isSelected && 'rt-tr-selected',\n css(theme.rowStyle)\n )\n }\n if (rowClassName) {\n let rowCls\n if (typeof rowClassName === 'function') {\n rowCls = rowClassName(rowInfo, stateInfo)\n } else if (Array.isArray(rowClassName)) {\n rowCls = rowClassName[rowInfo.index]\n } else {\n rowCls = rowClassName\n }\n rowProps.className = classNames(rowProps.className, rowCls)\n }\n if (rowStyle) {\n if (typeof rowStyle === 'function') {\n rowProps.style = rowStyle(rowInfo, stateInfo)\n } else if (Array.isArray(rowStyle)) {\n rowProps.style = rowStyle[rowInfo.index]\n } else {\n rowProps.style = rowStyle\n }\n }\n\n const rowDetails = makeRowDetails(rowInfo, stateInfo)\n\n let expandedId\n if (row.isExpanded) {\n if (expandedColumns[row.id] != null) {\n expandedId = expandedColumns[row.id]\n } else {\n // When expanding all rows, default to the first column with details\n const expandedCol = instance.visibleColumns.find(col => col.details)\n expandedId = expandedCol ? expandedCol.id : null\n }\n }\n\n const resolvedRowProps = row.getRowProps(rowProps)\n return (\n // Use relative row index for key (like in v6) rather than row index (v7)\n // for better rerender performance, especially with a large number of rows.\n <TrGroupComponent key={`${row.depth}_${viewIndex}`} className={css(theme.rowGroupStyle)}>\n <TrComponent {...resolvedRowProps} key={undefined}>\n {row.cells.map((cell, colIndex) => {\n const { column } = cell\n let cellProps = column.getProps ? column.getProps(rowInfo, column, stateInfo) : {}\n const { className: themeClass, innerClassName } = getCellTheme(theme.cellStyle)\n cellProps = {\n ...cellProps,\n className: classNames(cellProps.className, themeClass),\n innerClassName,\n role: column.rowHeader ? 'rowheader' : 'cell'\n }\n const cellInfo = {\n ...cell,\n column,\n filterValue: column.filterValue,\n ...rowInfo\n }\n let value\n if (cell.isGrouped) {\n value = column.Grouped ? column.Grouped(cellInfo, stateInfo) : cellInfo.value\n } else if (cell.isAggregated) {\n value = column.Aggregated\n ? column.Aggregated(cellInfo, stateInfo)\n : cell.render('Aggregated')\n } else if (cell.isPlaceholder) {\n value = ''\n } else {\n value = column.Cell ? column.Cell(cellInfo, stateInfo) : cell.render('Cell')\n }\n\n let hasDetails\n if (column.details && !row.isGrouped) {\n if (Array.isArray(column.details) && column.details[row.index] == null) {\n // Don't expand rows without content\n } else {\n hasDetails = true\n }\n }\n\n let expander\n if (hasDetails) {\n const isExpanded = row.isExpanded && expandedId === column.id\n cellProps = {\n ...cellProps,\n onClick: () => {\n if (isExpanded) {\n row.toggleRowExpanded(false)\n const newExpandedColumns = { ...expandedColumns }\n delete newExpandedColumns[row.id]\n setExpandedColumns(newExpandedColumns)\n } else {\n row.toggleRowExpanded(true)\n const newExpandedColumns = { ...expandedColumns, [row.id]: column.id }\n setExpandedColumns(newExpandedColumns)\n }\n },\n className: classNames(cellProps.className, 'rt-td-expandable')\n }\n // Hide overflow ellipsis and prevent text selection on expander-only columns\n if (value === emptyValue) {\n cellProps.style = { textOverflow: 'clip', userSelect: 'none', ...cellProps.style }\n }\n const expanderProps = {\n isExpanded: isExpanded,\n className: css(theme.expanderStyle),\n 'aria-label': language.detailsExpandLabel\n }\n expander = <ExpanderComponent {...expanderProps} />\n } else if (cell.isGrouped) {\n const isExpanded = row.isExpanded\n cellProps = {\n ...cellProps,\n onClick: () => row.toggleRowExpanded(),\n className: classNames(cellProps.className, 'rt-td-expandable')\n }\n const expanderProps = {\n isExpanded: isExpanded,\n className: css(theme.expanderStyle),\n 'aria-label': language.groupExpandLabel\n }\n expander = <ExpanderComponent {...expanderProps} />\n } else if (cell.column.isGrouped && row.canExpand) {\n // Make all grouped column cells expandable (including placeholders)\n cellProps = {\n ...cellProps,\n onClick: () => row.toggleRowExpanded(),\n className: classNames(cellProps.className, 'rt-td-expandable')\n }\n }\n\n const canRowSelect =\n selection === 'multiple' || (selection === 'single' && !cell.isAggregated)\n\n if (column.selectable && canRowSelect) {\n cellProps = {\n ...cellProps,\n onClick: () => toggleRowSelected(),\n className: classNames(cellProps.className, 'rt-td-select')\n }\n let ariaLabel\n if (cell.isAggregated) {\n ariaLabel = language.selectAllSubRowsLabel\n } else {\n ariaLabel = language.selectRowLabel\n }\n value = (\n <SelectInputComponent\n type={selection === 'multiple' ? 'checkbox' : 'radio'}\n checked={row.isSelected}\n onChange={() => toggleRowSelected()}\n aria-label={ariaLabel}\n />\n )\n }\n\n // Add cell click actions. Don't override existing click actions.\n if (onClick && !cellProps.onClick) {\n if (onClick === 'expand') {\n cellProps.onClick = () => row.toggleRowExpanded()\n } else if (onClick === 'select' && canRowSelect) {\n cellProps.onClick = () => toggleRowSelected()\n } else if (typeof onClick === 'function') {\n cellProps.onClick = () => onClick(rowInfo, column, stateInfo)\n }\n }\n\n const resolvedCellProps = cell.getCellProps(cellProps)\n return (\n // Use column ID for key (like in v6) rather than row index (v7)\n // for better rerender performance, especially with a large number of rows.\n <TdComponent {...resolvedCellProps} key={`${colIndex}_${column.id}`}>\n {expander}\n {value}\n </TdComponent>\n )\n })}\n </TrComponent>\n {rowDetails}\n </TrGroupComponent>\n )\n })\n\n let padRows\n // Leave at least one row to show the no data message properly\n minRows = minRows ? Math.max(minRows, 1) : 1\n const padRowCount = Math.max(minRows - instance.page.length, 0)\n if (padRowCount > 0) {\n padRows = [...Array(padRowCount)].map((_, viewIndex) => {\n const rowProps = {\n className: classNames('rt-tr-pad', css(theme.rowStyle))\n }\n if (rowClassName) {\n let rowCls\n if (typeof rowClassName === 'function') {\n rowCls = rowClassName(undefined, stateInfo)\n } else if (Array.isArray(rowClassName)) {\n // rowClassName not used for pad rows\n } else {\n rowCls = rowClassName\n }\n rowProps.className = classNames(rowProps.className, rowCls)\n }\n if (rowStyle) {\n if (typeof rowStyle === 'function') {\n rowProps.style = rowStyle(undefined, stateInfo)\n } else if (Array.isArray(rowStyle)) {\n // rowStyle not used for pad rows\n } else {\n rowProps.style = rowStyle\n }\n }\n return (\n <TrGroupComponent key={viewIndex} className={css(theme.rowGroupStyle)} aria-hidden>\n <TrComponent {...rowProps}>\n {instance.visibleColumns.map(column => {\n const { className: themeClass, innerClassName } = getCellTheme(theme.cellStyle)\n const cellProps = {\n className: themeClass\n }\n // Get layout styles (flex, sticky) from footer props. useFlexLayout\n // doesn't have built-in support for pad cells.\n const { className, style } = column.getFooterProps(cellProps)\n return (\n <TdComponent\n key={`${viewIndex}_${column.id}`}\n className={className}\n innerClassName={innerClassName}\n style={style}\n >\n \n </TdComponent>\n )\n })}\n </TrComponent>\n </TrGroupComponent>\n )\n })\n }\n\n let className = css(theme.tableBodyStyle)\n let noData\n if (instance.rows.length === 0) {\n noData = <NoDataComponent>{language.noData}</NoDataComponent>\n // Hide cell borders when table has no data\n className = classNames('rt-tbody-no-data', className)\n } else {\n // Must be on the page for the ARIA live region to be announced\n noData = <NoDataComponent />\n }\n const tbodyProps = instance.getTableBodyProps({ className })\n\n return (\n <TbodyComponent {...tbodyProps}>\n {rows}\n {padRows}\n {noData}\n </TbodyComponent>\n )\n }\n\n const makeTfoot = () => {\n const hasFooters = instance.visibleColumns.some(column => column.footer != null)\n if (!hasFooters) {\n return null\n }\n\n const tfootProps = instance.getTfootProps()\n return (\n <TfootComponent {...tfootProps}>\n <TrComponent>\n {instance.visibleColumns.map(column => {\n column = {\n ...column,\n column, // Deprecated in v0.3.0\n data: rowData // Deprecated in v0.3.0\n }\n const footer =\n typeof column.Footer === 'function'\n ? column.Footer(column, stateInfo)\n : column.render('Footer')\n\n const { className: themeClass, innerClassName } = getCellTheme(theme.footerStyle)\n const footerProps = {\n className: classNames('rt-td-footer', column.footerClassName, themeClass),\n innerClassName,\n style: column.footerStyle,\n role: column.rowHeader ? 'rowheader' : 'cell',\n // colspan doesn't apply to ARIA tables, but react-table adds it. Remove it.\n colSpan: null\n }\n const { key, ...resolvedFooterProps } = column.getFooterProps(footerProps)\n return (\n <TdComponent key={key} {...resolvedFooterProps}>\n {footer}\n </TdComponent>\n )\n })}\n </TrComponent>\n </TfootComponent>\n )\n }\n\n // Track the max number of rows for auto-shown pagination. Unfortunately, the max\n // number of rows can't be determined up front in a grouped and filtered table\n // because grouping happens after filtering (and swapping these hooks would\n // disable dynamic aggregation). Instead, we track the max number of rows\n // per dataset, so at least the pagination doesn't disappear upon filtering.\n const maxRowCount = React.useRef(\n paginateSubRows ? instance.flatRows.length : instance.rows.length\n )\n\n React.useEffect(() => {\n maxRowCount.current = 0\n }, [data])\n\n React.useEffect(() => {\n const rowCount = paginateSubRows ? instance.flatRows.length : instance.rows.length\n if (rowCount > maxRowCount.current) {\n maxRowCount.current = rowCount\n }\n }, [paginateSubRows, instance.flatRows, instance.rows])\n\n const makePagination = () => {\n if (showPagination === false) {\n return null\n } else if (!pagination && showPagination == null) {\n // Unpaginated tables can still have a visible pagination bar (e.g., for page info)\n return null\n } else if (pagination && showPagination == null) {\n // Auto-hide pagination if the entire table fits on one page\n const minPageSize = showPageSizeOptions\n ? Math.min(state.pageSize, ...(pageSizeOptions || []))\n : state.pageSize\n\n if (maxRowCount.current <= minPageSize) {\n return null\n }\n }\n return (\n <Pagination\n paginationType={paginationType}\n pageSizeOptions={pageSizeOptions}\n showPageInfo={showPageInfo}\n showPageSizeOptions={showPageSizeOptions}\n page={state.pageIndex}\n pages={instance.pageCount}\n pageSize={state.pageSize}\n pageRowCount={instance.pageRowCount}\n canNext={instance.canNextPage}\n canPrevious={instance.canPreviousPage}\n onPageChange={instance.gotoPage}\n onPageSizeChange={instance.setPageSize}\n rowCount={instance.rows.length}\n theme={theme}\n language={language}\n />\n )\n }\n\n // Add keyboard-only focus styles\n const rootElement = React.useRef(null)\n const keyboardActiveProps = {\n onMouseDown: () => {\n rootElement.current.classList.remove('rt-keyboard-active')\n },\n onKeyDown: () => {\n rootElement.current.classList.add('rt-keyboard-active')\n },\n onKeyUp: e => {\n // Detect keyboard use when tabbing into the table\n const keyCode = e.which || e.keyCode\n if (keyCode === 9) {\n rootElement.current.classList.add('rt-keyboard-active')\n }\n }\n }\n\n // Provide keyboard access to scrollable tables. Make the table focusable,\n // but only when it has a scrollbar.\n const tableElement = React.useRef(null)\n const [tableHasScrollbar, setTableHasScrollbar] = React.useState(false)\n safeUseLayoutEffect(() => {\n const checkTableHasScrollbar = () => {\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = tableElement.current\n const hasScrollbar = scrollHeight > clientHeight || scrollWidth > clientWidth\n setTableHasScrollbar(hasScrollbar)\n }\n if (window.ResizeObserver) {\n const resizeObserver = new ResizeObserver(() => {\n checkTableHasScrollbar()\n })\n resizeObserver.observe(tableElement.current)\n return function cleanup() {\n resizeObserver.disconnect()\n }\n } else {\n // Degrade gracefully on older browsers (e.g., Safari < 13)\n checkTableHasScrollbar()\n }\n }, [])\n\n // Send reactable state to Shiny for getReactableState\n React.useEffect(() => {\n // Ignore nested tables that aren't Shiny outputs\n if (!window.Shiny || !window.Shiny.onInputChange || nested) {\n return\n }\n // Ensure this is a Shiny output, not a static rendered table in Shiny\n const outputId = rootElement.current.parentElement.getAttribute('data-reactable-output')\n if (!outputId) {\n return\n }\n // Convert to R's 1-based indices\n const selectedIndexes = stateInfo.selected.map(index => index + 1)\n // Convert to R's 1-based indices\n const page = stateInfo.page + 1\n // Convert sortBy array to named list of \"asc\" and \"desc\"\n let sorted = stateInfo.sorted.length > 0 ? {} : null\n for (let sortInfo of stateInfo.sorted) {\n sorted[sortInfo.id] = sortInfo.desc ? 'desc' : 'asc'\n }\n\n // NOTE: any object arrays will be simplified into vectors by jsonlite by default. Avoid sending\n // arrays without transforming them first, or adding a custom input type and input handler.\n const state = {\n page: page,\n pageSize: stateInfo.pageSize,\n pages: stateInfo.pages,\n sorted: sorted,\n selected: selectedIndexes\n }\n // Shiny.onInputChange has built-in debouncing, so it's not strictly necessary to\n // debounce rapid state changes here.\n Object.keys(state).forEach(prop => {\n // NOTE: output IDs must always come first to work with Shiny modules\n window.Shiny.onInputChange(`${outputId}__reactable__${prop}`, state[prop])\n })\n }, [\n nested,\n stateInfo.page,\n stateInfo.pageSize,\n stateInfo.pages,\n stateInfo.sorted,\n stateInfo.selected\n ])\n\n // Getter for the latest page count\n const getPageCount = useGetLatest(instance.pageCount)\n\n // Add Shiny message handler for updateReactable\n React.useEffect(() => {\n // Ignore nested tables that aren't Shiny outputs\n if (!window.Shiny || nested) {\n return\n }\n // Ensure this is a Shiny output, not a static rendered table in Shiny\n const outputId = rootElement.current.parentElement.getAttribute('data-reactable-output')\n if (!outputId) {\n return\n }\n const setRowsSelected = instance.setRowsSelected\n const gotoPage = instance.gotoPage\n const toggleAllRowsExpanded = instance.toggleAllRowsExpanded\n\n const updateState = newState => {\n if (newState.jsEvals) {\n for (let key of newState.jsEvals) {\n window.HTMLWidgets.evaluateStringMember(newState, key)\n }\n }\n if (newState.data != null) {\n const data = normalizeColumnData(newState.data, dataColumns)\n setNewData(data)\n }\n if (newState.selected != null) {\n const selectedRowIds = newState.selected.map(index => String(index))\n setRowsSelected(selectedRowIds)\n }\n if (newState.page != null) {\n // Get the latest page count in case a data update changes the number of pages\n const nearestValidPage = Math.min(\n Math.max(newState.page, 0),\n Math.max(getPageCount() - 1, 0)\n )\n gotoPage(nearestValidPage)\n }\n if (newState.expanded != null) {\n if (newState.expanded) {\n toggleAllRowsExpanded(true)\n } else {\n toggleAllRowsExpanded(false)\n }\n }\n if (newState.meta !== undefined) {\n setMeta(newState.meta)\n }\n }\n window.Shiny.addCustomMessageHandler(`__reactable__${outputId}`, updateState)\n }, [\n nested,\n instance.setRowsSelected,\n instance.gotoPage,\n instance.toggleAllRowsExpanded,\n dataColumns,\n getPageCount,\n setMeta\n ])\n\n // Set up Crosstalk and apply initial selection/filtering.\n // useLayoutEffect so the hook runs in order with other useLayoutEffect hooks.\n const ctRef = React.useRef(null)\n\n safeUseLayoutEffect(() => {\n if (!crosstalkGroup || !window.crosstalk) {\n return\n }\n\n const ct = {}\n ct.selection = new window.crosstalk.SelectionHandle(crosstalkGroup)\n ct.filter = new window.crosstalk.FilterHandle(crosstalkGroup)\n // Keep track of selected and filtered state updated by other widgets.\n // SelectionHandle and FilterHandle also track state, but will include changes\n // coming from the table as well.\n ct.selected = ct.selection.value\n ct.filtered = ct.filter.filteredKeys\n ctRef.current = ct\n\n const rowByKey = (crosstalkKey || []).reduce((obj, key, index) => {\n obj[key] = index\n return obj\n }, {})\n\n const setFilter = instance.setFilter\n const setRowsSelected = instance.setRowsSelected\n const applyCrosstalkFilter = () => {\n // Selection value is an array of keys, or null or empty array if empty\n // Filter value is an an array of keys, or null if empty\n const selectedKeys = ct.selected && ct.selected.length > 0 ? ct.selected : null\n const filteredKeys = ct.filtered\n let keys\n if (!selectedKeys && !filteredKeys) {\n keys = null\n } else if (!selectedKeys) {\n keys = filteredKeys\n } else if (!filteredKeys) {\n keys = selectedKeys\n } else {\n keys = selectedKeys.filter(key => filteredKeys.includes(key))\n }\n const filteredRows = keys ? keys.map(key => rowByKey[key]) : null\n setFilter(crosstalkId, filteredRows)\n }\n\n const setCrosstalkSelection = value => {\n if (ct.selected !== value) {\n ct.selected = value\n applyCrosstalkFilter()\n }\n }\n\n const setCrosstalkFilter = value => {\n if (ct.filtered !== value) {\n ct.filtered = value\n applyCrosstalkFilter()\n }\n }\n\n ct.selection.on('change', e => {\n if (e.sender !== ct.selection) {\n setCrosstalkSelection(e.value)\n // Selections from other widgets should clear table selection state\n ct.skipNextSelection = true\n setRowsSelected([])\n } else {\n // Selections from table should clear selections from other widgets\n setCrosstalkSelection(null)\n }\n })\n\n ct.filter.on('change', e => {\n if (e.sender !== ct.filter) {\n setCrosstalkFilter(e.value)\n }\n })\n\n // Apply initial filter/selection for dynamically rendered tables (e.g., nested tables, Shiny outputs)\n if (ct.selected || ct.filtered) {\n applyCrosstalkFilter()\n }\n\n return function cleanup() {\n // Prevent errors from other widgets from breaking the table, e.g.,\n // https://github.com/ropensci/plotly/issues/1346\n try {\n ct.selection.close()\n } catch (e) {\n console.error('Error closing Crosstalk selection handle:', e)\n }\n try {\n ct.filter.close()\n } catch (e) {\n console.error('Error closing Crosstalk filter handle:', e)\n }\n }\n }, [crosstalkKey, crosstalkGroup, crosstalkId, instance.setFilter, instance.setRowsSelected])\n\n // Don't set Crosstalk selection on initial render\n safeUseLayoutEffect(() => {\n if (!ctRef.current) {\n return\n }\n if (!defaultSelected) {\n ctRef.current.skipNextSelection = true\n }\n }, [defaultSelected])\n\n // Set Crosstalk selection. useLayoutEffect to avoid visual flickering when\n // selecting a row and clearing a pre-existing selection at the same time.\n safeUseLayoutEffect(() => {\n if (!ctRef.current || !selection) {\n return\n }\n\n const ct = ctRef.current\n // Some selections don't update Crosstalk state, like selection clears from\n // other widget selections\n if (ct.skipNextSelection) {\n ct.skipNextSelection = false\n return\n }\n\n const selectedKeys = Object.keys(state.selectedRowIds).map(id => {\n return crosstalkKey[rowsById[id].index]\n })\n // Prevent errors from other widgets from breaking the table, e.g.,\n // https://github.com/ropensci/plotly/issues/1346\n try {\n ct.selection.set(selectedKeys)\n } catch (e) {\n console.error('Error selecting Crosstalk keys:', e)\n }\n }, [state.selectedRowIds, rowsById, selection, crosstalkKey])\n\n // Expose a limited JavaScript API to the table instance\n instance.state = stateInfo\n instance.downloadDataCSV = (filename, options = {}) => {\n filename = filename || 'data.csv'\n const csv = instance.getDataCSV(options)\n downloadCSV(csv, filename)\n }\n instance.getDataCSV = (options = {}) => {\n if (!options.columnIds) {\n options.columnIds = dataColumns.map(col => col.id)\n }\n // Ignore columns without data (e.g., selection or details columns) by default\n const dataColumnIds = data.length > 0 ? Object.keys(data[0]) : []\n options.columnIds = options.columnIds.filter(id => dataColumnIds.includes(id))\n // Ensure rows are flattened and ignore sort order. Unlike instance.flatRows,\n // instance.preGroupedRows excludes aggregated rows and uses the original data order.\n const rows = instance.preGroupedRows.map(row => row.values)\n const csv = rowsToCSV(rows, options)\n return csv\n }\n instance.setMeta = setMeta\n const origToggleHideColumn = instance.toggleHideColumn\n instance.toggleHideColumn = (columnId, isHidden) => {\n // Prevent duplicate column IDs from being added to hiddenColumns\n if (isHidden && stateInfo.hiddenColumns.includes(columnId)) {\n return\n }\n origToggleHideColumn(columnId, isHidden)\n }\n instance.setData = (data, options = {}) => {\n options = Object.assign({ resetSelected: true, resetExpanded: false }, options)\n if (typeof data !== 'object' || data == null) {\n throw new Error('data must be an array of row objects or an object containing column arrays')\n }\n // If data is in row format, it's assumed to have all numbers normalized (NA/NaN/Inf/-Inf not as strings)\n if (!Array.isArray(data)) {\n data = normalizeColumnData(data, dataColumns)\n }\n setNewData(data)\n if (options.resetSelected) {\n instance.setRowsSelected([])\n }\n if (options.resetExpanded) {\n instance.toggleAllRowsExpanded(false)\n }\n }\n\n let stateCallbacks = React.useRef([])\n instance.onStateChange = listenerFn => {\n if (typeof listenerFn !== 'function') {\n throw new Error('listenerFn must be a function')\n }\n stateCallbacks.current.push(listenerFn)\n return function cancel() {\n stateCallbacks.current = stateCallbacks.current.filter(cb => cb !== listenerFn)\n }\n }\n // Debounce rapid state changes. Some actions can cause the table to render twice, e.g., when\n // sorting and the pageIndex is automatically reset to 0 via an internal side effect.\n const onStateChange = useAsyncDebounce(state => {\n stateCallbacks.current.forEach(cb => {\n cb(state)\n })\n }, 0)\n React.useEffect(() => {\n onStateChange(stateInfo)\n }, [stateInfo, onStateChange])\n\n const getTableInstance = useGetLatest(instance)\n\n React.useEffect(() => {\n // For static rendered tables, the instance ID is the element ID. For Shiny outputs,\n // the instance ID is the Shiny output ID, although the element ID may override it.\n let instanceId = elementId\n if (!instanceId) {\n instanceId = rootElement.current.parentElement.getAttribute('data-reactable-output')\n }\n if (!instanceId) {\n return\n }\n\n tableInstances[instanceId] = getTableInstance\n\n return function cleanup() {\n delete tableInstances[instanceId]\n }\n }, [elementId, getTableInstance])\n\n className = classNames(\n className,\n css(theme.style),\n outlined && 'rt-outlined',\n bordered && 'rt-bordered',\n borderless && 'rt-borderless',\n compact && 'rt-compact',\n nowrap && 'rt-nowrap',\n inline && ' rt-inline'\n )\n style = { width, height, ...style }\n\n const isResizing = state.columnResizing.isResizingColumn != null\n const tableClassName = classNames(css(theme.tableStyle), isResizing && 'rt-resizing')\n\n return (\n <RootComponent ref={rootElement} {...keyboardActiveProps} className={className} style={style}>\n {makeSearch()}\n <TableComponent\n ref={tableElement}\n tabIndex={tableHasScrollbar ? 0 : null}\n className={tableClassName}\n >\n {makeThead()}\n {makeTbody()}\n {makeTfoot()}\n </TableComponent>\n {makePagination()}\n </RootComponent>\n )\n}\n\nReactable.propTypes = {\n data: PropTypes.objectOf(PropTypes.array).isRequired,\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\n columnGroups: PropTypes.arrayOf(PropTypes.object),\n groupBy: PropTypes.arrayOf(PropTypes.string),\n sortable: PropTypes.bool,\n resizable: PropTypes.bool,\n filterable: PropTypes.bool,\n searchable: PropTypes.bool,\n searchMethod: PropTypes.func,\n defaultSortDesc: PropTypes.bool,\n defaultSorted: PropTypes.arrayOf(PropTypes.shape({ id: PropTypes.string, desc: PropTypes.bool })),\n pagination: PropTypes.bool,\n defaultPageSize: PropTypes.number,\n pageSizeOptions: PropTypes.arrayOf(PropTypes.number),\n paginationType: PropTypes.oneOf(['numbers', 'jump', 'simple']),\n showPagination: PropTypes.bool,\n showPageSizeOptions: PropTypes.bool,\n showPageInfo: PropTypes.bool,\n minRows: PropTypes.number,\n paginateSubRows: PropTypes.bool,\n defaultExpanded: PropTypes.bool,\n selection: PropTypes.oneOf(['multiple', 'single']),\n selectionId: PropTypes.string, // Deprecated in v0.3.0\n defaultSelected: PropTypes.arrayOf(PropTypes.number),\n onClick: PropTypes.oneOfType([PropTypes.oneOf(['expand', 'select']), PropTypes.func]),\n outlined: PropTypes.bool,\n bordered: PropTypes.bool,\n borderless: PropTypes.bool,\n striped: PropTypes.bool,\n highlight: PropTypes.bool,\n compact: PropTypes.bool,\n nowrap: PropTypes.bool,\n showSortIcon: PropTypes.bool,\n showSortable: PropTypes.bool,\n className: PropTypes.string,\n style: PropTypes.object,\n rowClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.array]),\n rowStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.array]),\n inline: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n theme: PropTypes.object,\n language: PropTypes.object,\n meta: PropTypes.object,\n crosstalkKey: PropTypes.array,\n crosstalkGroup: PropTypes.string,\n crosstalkId: PropTypes.string,\n elementId: PropTypes.string,\n nested: PropTypes.bool,\n dataKey: PropTypes.string\n}\n\nReactable.defaultProps = {\n sortable: true,\n pagination: true,\n defaultPageSize: 10,\n paginationType: 'numbers',\n pageSizeOptions: [10, 25, 50, 100],\n showPageInfo: true,\n minRows: 1,\n showSortIcon: true,\n crosstalkId: '__crosstalk__'\n}\n","import React from 'react'\n\nexport default function useMeta(initialMeta = {}) {\n const [meta, setRawMeta] = React.useState(initialMeta)\n const setMeta = meta => {\n if (meta == null) {\n setRawMeta({})\n return\n }\n if (typeof meta !== 'object' && typeof meta !== 'function') {\n throw new Error('meta must be an object or function')\n }\n setRawMeta(prevMeta => {\n if (typeof meta === 'function') {\n meta = meta(prevMeta)\n }\n const newMeta = { ...prevMeta, ...meta }\n for (let [key, value] of Object.entries(newMeta)) {\n if (value === undefined) {\n delete meta[key]\n }\n }\n return newMeta\n })\n }\n return [meta, setMeta]\n}\n","import { reactWidget } from './reactR'\n\nimport Reactable from './Reactable'\n\nreactWidget('reactable', 'output', {\n Reactable\n})\n\nexport * from './Reactable'\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","window","React","ReactDOM","hydrate","components","tag","name","toUpperCase","Error","args","attribs","children","child","push","renderErr","actions","init","emptyRenderer","defaultColumn","Cell","width","minWidth","maxWidth","Number","MAX_SAFE_INTEGER","mergeProps","propList","reduce","props","next","style","className","rest","handlePropGetter","prevProps","userProps","meta","Array","isArray","makePropGetter","hooks","prev","reduceHooks","initial","loopHooks","context","forEach","hook","ensurePluginOrder","plugins","befores","pluginName","afters","findIndex","plugin","before","functionalUpdate","updater","old","useGetLatest","ref","current","safeUseLayoutEffect","document","useMountedLayoutEffect","fn","deps","mountedRef","makeRenderer","instance","column","type","Comp","console","info","flexRender","component","proto","getPrototypeOf","isReactComponent","isClassComponent","$$typeof","includes","description","isExoticComponent","linkColumnStructure","columns","parent","depth","map","assignColumnAccessor","flattenColumns","flat","recurse","arr","id","accessor","Header","accessorPath","split","row","path","def","val","cacheKey","JSON","stringify","pathObj","pathObjCache","flattenDeep","String","replace","join","reOpenBracket","reCloseBracket","makePathArray","set","cursor","pathPart","e","getBy","error","assign","decorateColumn","userDefaultColumn","Footer","originalWidth","makeHeaderGroups","allColumns","additionalHeaderProperties","headerGroups","scanColumns","uid","getUID","headerGroup","headers","parentColumns","hasParents","some","newParent","latestParentColumn","reverse","originalId","placeholderOf","length","Map","getFirstDefined","i","isFunction","expandRows","rows","manualExpandedKey","expanded","expandSubRows","expandedRows","handleRow","addToExpandedRows","isExpanded","original","canExpand","subRows","getFilterMethod","filter","userFilterTypes","filterTypes","text","shouldAutoRemoveFilter","autoRemove","unpreparedAccessWarning","newArr","defaultGetTableProps","role","defaultGetTableBodyProps","defaultGetHeaderProps","colSpan","totalVisibleHeaderCount","defaultGetFooterProps","defaultGetHeaderGroupProps","index","defaultGetFooterGroupProps","defaultGetRowProps","defaultGetCellProps","cell","makeDefaultPluginHooks","useOptions","stateReducers","useControlledState","columnsDeps","allColumnsDeps","accessValue","materializedColumns","materializedColumnsDeps","useInstanceAfterData","visibleColumns","visibleColumnsDeps","headerGroupsDeps","useInstanceBeforeDimensions","useInstance","prepareRow","getTableProps","getTableBodyProps","getHeaderGroupProps","getFooterGroupProps","getHeaderProps","getFooterProps","getRowProps","getCellProps","useFinalInstance","resetHiddenColumns","toggleHideColumn","setHiddenColumns","toggleHideAllColumns","useColumnVisibility","getToggleHiddenProps","defaultGetToggleHiddenProps","getToggleHideAllColumnsProps","defaultGetToggleHideAllColumnsProps","reducer","state","hiddenColumns","onChange","toggleHidden","target","checked","isVisible","title","allColumnsHidden","indeterminate","action","previousState","initialState","columnId","shouldAll","handleColumn","parentVisible","subColumn","subHeader","flatHeaders","dispatch","getHooks","autoResetHiddenColumns","getInstance","getAutoResetHiddenColumns","defaultInitialState","defaultColumnInstance","defaultReducer","prevState","defaultGetSubRows","defaultGetRowId","defaultUseControlledState","applyDefaults","getSubRows","getRowId","stateReducer","calculateHeaderWidths","left","sumTotalMinWidth","sumTotalWidth","sumTotalMaxWidth","sumTotalFlexWidth","header","subHeaders","totalLeft","totalMinWidth","totalWidth","totalMaxWidth","totalFlexWidth","Math","min","max","canResize","accessRowsForColumn","data","flatRows","rowsById","accessValueHooks","accessRow","originalRow","rowIndex","parentRows","originalSubRows","cells","values","undefined","resetExpanded","toggleRowExpanded","toggleAllRowsExpanded","useExpanded","getToggleAllRowsExpandedProps","defaultGetToggleAllRowsExpandedProps","getToggleRowExpandedProps","defaultGetToggleRowExpandedProps","onClick","isAllRowsExpanded","keys","rowId","setExpanded","exists","shouldExist","paginateExpandedRows","autoResetExpanded","getAutoResetExpanded","Boolean","expandedDepth","maxDepth","splitId","findExpandedDepth","preExpandedRows","ids","filterValue","rowValue","toLowerCase","exactText","exactTextCase","includesAll","every","includesSome","includesValue","exact","equals","between","Infinity","temp","resetFilters","setFilter","setAllFilters","useFilters","filters","find","filterMethod","previousfilter","newFilter","manualFilters","defaultCanFilter","disableFilters","autoResetFilters","columnDefaultCanFilter","columnDisableFilters","canFilter","found","filteredFlatRows","filteredRowsById","filterRows","filteredRows","filteredSoFar","preFilteredRows","warn","nonFilteredColumns","getAutoResetFilters","preFilteredFlatRows","preFilteredRowsById","resetGlobalFilter","setGlobalFilter","useGlobalFilter","globalFilter","manualGlobalFilter","globalFilterValue","autoResetGlobalFilter","disableGlobalFilter","columnDisableGlobalFilter","filterableColumns","c","globalFilteredRows","globalFilteredFlatRows","globalFilteredRowsById","getAutoResetGlobalFilter","preGlobalFilteredRows","preGlobalFilteredFlatRows","preGlobalFilteredRowsById","sum","aggregatedValues","minMax","average","median","mid","floor","nums","sort","b","unique","from","Set","uniqueCount","size","count","resetGroupBy","setGroupBy","toggleGroupBy","reSplitAlphaNumeric","alphanumeric","rowA","rowB","getRowValuesByColumnID","toString","aa","shift","bb","an","parseInt","bn","combo","isNaN","datetime","compareBasic","getTime","basic","string","alower","blower","number","replaceNonNumeric","row1","row2","resetSortBy","setSortBy","toggleSortBy","clearSortBy","sortType","sortDescFirst","useSortBy","getSortByToggleProps","defaultGetSortByToggleProps","isMultiSortEvent","shiftKey","canSort","persist","disableMultiSort","sortBy","newSortBy","sortAction","desc","multi","disableSortRemove","disableMultiRemove","maxMultiSortColCount","existingSortBy","existingIndex","hasDescDefined","splice","orderByFn","defaultOrderByFn","userSortTypes","sortTypes","manualSortBy","defaultCanSort","disableSortBy","autoResetSortBy","defaultColumnCanSort","columnDisableSortBy","columnSort","isSorted","sortedIndex","isSortedDesc","sortedFlatRows","availableSortBy","col","sortData","sortedData","sortMethod","sortInverted","sortedRows","getAutoResetSortBy","preSortedRows","preSortedFlatRows","funcs","dirs","sortFn","sortInt","resetPage","gotoPage","setPageSize","resetPivot","togglePivot","resetSelectedRows","toggleAllRowsSelected","toggleRowSelected","toggleAllPageRowsSelected","setRowState","setCellState","resetRowState","resetColumnOrder","setColumnOrder","columnStartResizing","columnResizing","columnDoneResizing","resetResize","reactR","StyleSheet","options","_this","this","_insertTag","tags","insertionPoint","nextSibling","prepend","container","firstChild","insertBefore","isSpeedy","speedy","ctr","nonce","_proto","nodes","insert","rule","createElement","setAttribute","appendChild","createTextNode","createStyleElement","sheet","styleSheets","ownerNode","sheetForTag","insertRule","cssRules","flush","parentNode","removeChild","abs","fromCharCode","trim","pattern","replacement","indexof","search","indexOf","charCodeAt","begin","end","slice","array","line","position","character","characters","node","root","return","copy","peek","caret","token","alloc","dealloc","delimit","delimiter","whitespace","escaping","commenter","identifier","MS","MOZ","WEBKIT","COMMENT","DECLARATION","KEYFRAMES","serialize","callback","output","element","prefix","hash","compile","parse","rules","rulesets","pseudo","points","declarations","offset","atrule","property","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","j","k","x","y","z","identifierWithPointTracking","fixedElements","WeakMap","compat","isImplicitRule","parsed","toRules","getRules","parentRules","removeLabel","defaultStylisPlugins","exec","match","str","h","len","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","cache","create","arg","styleName","processStyleValue","p1","p2","styles","handleInterpolation","mergedProps","registered","interpolation","__emotion_styles","anim","_key","interpolated","_i","createStringFromObject","previousCursor","result","cached","labelPattern","serializeStyles","stringMode","strings","raw","lastIndex","identifierName","getRegisteredStyles","registeredStyles","classNames","rawClassName","insertStyles","serialized","isStringTag","registerStyles","inserted","insertWithoutScoping","merge","css","emotion","classnames","cls","toAdd","ssrStyles","querySelectorAll","getAttribute","head","_insert","stylisPlugins","nodesToHydrate","attrib","currentSheet","collection","finalizingPlugins","serializer","concat","selector","shouldCache","_len","arguments","cx","_len4","_key4","injectGlobal","_len3","_key3","keyframes","_len2","_key2","animation","bind","classes","escapeRegExp","getLeafColumns","leafColumns","recurseColumn","convertRowsToV6","_subRows","rowsToCSV","columnIds","sep","dec","rowToCSV","Date","toISOString","csvRows","downloadCSV","content","filename","blob","Blob","navigator","msSaveBlob","link","url","URL","createObjectURL","href","download","click","revokeObjectURL","isBrowser","createTheme","color","backgroundColor","borderColor","borderWidth","stripedColor","highlightColor","cellPadding","tableBorderColor","tableBorderWidth","tableStyle","headerBorderColor","headerBorderWidth","headerStyle","groupHeaderBorderColor","groupHeaderBorderWidth","groupHeaderStyle","tableBodyStyle","rowGroupStyle","rowStyle","rowStripedStyle","rowHighlightStyle","rowSelectedStyle","cellBorderColor","cellBorderWidth","cellStyle","footerBorderColor","footerBorderWidth","footerStyle","inputStyle","filterInputStyle","searchInputStyle","selectStyle","paginationStyle","pageButtonStyle","pageButtonHoverStyle","pageButtonActiveStyle","pageButtonCurrentStyle","expanderColor","getFirstDefinedProp","selectColor","padding","height","filterCellStyle","expanderStyle","borderTopColor","borderTopWidth","backgroundImage","encodeURIComponent","removeEmptyProps","objects","defaultVal","entries","getEmotion","substring","lastIndexOf","rel","parentElement","createEmotion","defaultLanguage","sortLabel","filterPlaceholder","filterLabel","searchPlaceholder","searchLabel","noData","pageNext","pagePrevious","pageNumbers","pageInfo","pageSizeOptions","pageNextLabel","pagePreviousLabel","pageNumberLabel","pageJumpLabel","pageSizeOptionsLabel","groupExpandLabel","detailsExpandLabel","selectAllRowsLabel","selectAllSubRowsLabel","selectRowLabel","defaultGroupHeader","detailsCollapseLabel","deselectAllRowsLabel","deselectAllSubRowsLabel","deselectRowLabel","renderTemplate","template","params","separator","RegExp","templateParams","rendered","s","PageButton","isCurrent","Pagination","changePage","applyPage","pageJumpValue","page","prevPage","newPage","onPageChange","preventDefault","currentPage","setState","pageSize","pageRowCount","rowCount","language","rowStart","rowEnd","onPageSizeChange","option","elements","onBlur","onKeyPress","inputType","which","keyCode","nearestValidPage","pages","paginationType","showPageSizeOptions","showPageInfo","canPrevious","canNext","theme","renderPageInfo","renderPageSizeOptions","visiblePages","totalPages","_","getVisiblePages","pageButtons","pageButton","renderPageJump","getPageJumpProperties","prevButton","disabled","nextButton","defaultProps","WidgetContainer","staticRender","HTMLWidgets","throttled","lastCall","setTimeout","useFlexLayout","getTheadProps","getRowGroupStyles","getTfootProps","getRowStyles","asPx","totalColumnsWidth","flexWidth","resizedWidths","columnWidths","calculateFlexWidths","isFixedWidth","useStickyColumns","stickyProps","groupColumns","firstStickyCol","sticky","stickyCols","right","getStickyProps","aggregations","emptyArray","emptyObject","useGroupBy","getGroupByToggleProps","defaultGetGroupByToggleProps","groupBy","canGroupBy","resolvedGroupBy","groupByColumns","g","nonGroupByColumns","isGrouped","groupedIndex","defaultUserAggregations","groupByFn","defaultGroupByFn","manualGroupBy","userAggregations","autoResetGroupBy","disableGroupBy","defaultCanGroupBy","defaultColumnGroupBy","defaultGroupBy","columnDisableGroupBy","Aggregated","existingGroupBy","aggregateRowsToValues","leafRows","groupedRows","aggregatedColumns","aggregateFn","aggregate","leafValues","columnValue","aggregateValue","aggregateValueFn","groupedFlatRows","groupedRowsById","onlyGroupedFlatRows","onlyGroupedRowsById","nonGroupedFlatRows","nonGroupedRowsById","groupUpRecursively","parentId","rowGroupsMap","aggregatedGroupedRows","groupByVal","flattenBy","groupedColumns","groupByID","groupIndex","subRow","getAutoResetGroupBy","preGroupedRows","preGroupedFlatRow","preGroupedRowsById","allCells","isAggregated","isPlaceholder","resKey","passiveSupported","useResizeColumns","getResizerProps","defaultGetResizerProps","onResizeStart","isTouchEvent","touches","raf","mostRecentClientX","headersToResize","getAllColumns","headerIdWidths","getDOMWidth","columnWidth","clientX","round","dispatchMove","cancelAnimationFrame","dispatchEnd","scheduleDispatchMoveOnNextAnimationFrame","clientXPos","requestAnimationFrame","handlersAndEvents","mouse","moveEvent","moveHandler","upEvent","upHandler","removeEventListener","touch","cancelable","stopPropagation","events","passiveIfSupported","supported","passive","addEventListener","err","passiveEventSupported","onMouseDown","onTouchStart","draggable","startX","isResizingColumn","percentageDeltaX","newColumnWidths","headerId","headerWidth","disableResizing","isResizing","autoResetResize","getAutoResetResize","resetResizing","useRowSelect","getToggleRowSelectedProps","defaultGetToggleRowSelectedProps","getToggleAllRowsSelectedProps","defaultGetToggleAllRowsSelectedProps","getToggleAllPageRowsSelectedProps","defaultGetToggleAllPageRowsSelectedProps","setRowsSelected","manualRowSelectedKey","isSelected","isSomeSelected","isAllRowsSelected","selectedRowIds","isAllPageRowsSelected","setSelected","selectAll","selectSubRows","newSelectedRowIds","handleRowById","autoResetSelectedRows","selectedFlatRows","getRowIsSelected","getAutoResetSelectedRows","allChildrenSelected","someSelected","usePagination","pageIndex","pageCount","newPageIndex","canNavigate","topRowIndex","autoResetPage","userPageCount","disablePagination","manualPagination","getAutoResetPage","ceil","pageOptions","fill","pageStart","pageEnd","canPreviousPage","canNextPage","previousPage","nextPage","numbers","omitMissingNumbers","mean","NaN","numericAggregators","apply","defaultAggregators","maxValue","minValue","frequency","counts","getAggregateFunction","n","digits","isFinite","pow","sign","emptyValue","subRowsKey","normalizeColumnData","convertJSONNumbers","columnsToRows","names","RawHTML","html","dangerouslySetInnerHTML","__html","addColumnGroups","groups","group","groupIds","newCols","lastGroup","isUngrouped","createCompareFunction","naLast","formatValue","suffix","separators","percent","currency","date","time","hour12","locales","maximumFractionDigits","useGrouping","minimumFractionDigits","toLocaleString","toLocaleDateString","toLocaleTimeString","createStartsWithMatcher","regex","test","createSubstringMatcher","getAlignClass","align","getVAlignClass","vAlign","tableInstances","tableId","getState","setSearch","downloadDataCSV","getDataCSV","setMeta","isHidden","setData","onStateChange","listenerFn","Reactable","columnGroups","sortable","defaultSortDesc","showSortIcon","showSortable","filterable","resizable","dataKey","tableProps","sortNALast","searchable","show","createMatcher","headerVAlign","cellInfo","isMissingValue","na","format","aggregated","Fragment","display","grouped","Grouped","sortClass","footer","colAlignClass","cellVAlignClass","headerVAlignClass","headerClassName","footerClassName","getProps","rowInfo","buildColumnDefs","Table","RootComponent","TableComponent","TheadComponent","TbodyComponent","TfootComponent","TrGroupComponent","TrComponent","ThComponent","innerClassName","thProps","skipNextSort","setSkipNextSort","currentSortOrder","defaultSortOrder","toggleSort","isMultiSort","sortDesc","tabIndex","onMouseUp","detail","TdComponent","getCellTheme","ResizerComponent","RowDetails","Shiny","bindAll","el","unbindAll","ExpanderComponent","ariaLabel","FilterComponent","placeholder","SearchComponent","searchValue","NoDataComponent","SelectInputComponent","originalData","searchMethod","defaultSorted","pagination","showPagination","defaultPageSize","minRows","paginateSubRows","defaultExpanded","selection","defaultSelected","selectionId","outlined","bordered","borderless","compact","nowrap","striped","highlight","rowClassName","inline","initialMeta","crosstalkKey","crosstalkGroup","crosstalkId","elementId","nested","newData","setNewData","dataColumns","cols","matchers","setRawMeta","prevMeta","newMeta","useMeta","userColumns","getStateReducer","handler","reducerState","allColumnsQueue","initialRows","all","visibleColumnsDep","totalColumnsMinWidth","totalColumnsMaxWidth","render","footerGroups","useTable","selectable","ctCol","selectedRowIndexes","indexes","selectedIndexes","onInputChange","searchableRef","rowData","stateInfo","sorted","pageRows","selected","headerRefs","handleHeader","getBoundingClientRect","isFilterable","filterableRef","expandedColumns","setExpandedColumns","maxRowCount","rootElement","keyboardActiveProps","classList","remove","onKeyDown","add","onKeyUp","tableElement","tableHasScrollbar","setTableHasScrollbar","checkTableHasScrollbar","scrollHeight","clientHeight","scrollWidth","clientWidth","ResizeObserver","resizeObserver","observe","disconnect","outputId","sortInfo","getPageCount","addCustomMessageHandler","newState","jsEvals","evaluateStringMember","ctRef","crosstalk","ct","SelectionHandle","FilterHandle","filtered","filteredKeys","rowByKey","applyCrosstalkFilter","selectedKeys","setCrosstalkSelection","on","sender","skipNextSelection","close","csv","dataColumnIds","origToggleHideColumn","resetSelected","stateCallbacks","cb","defaultFn","defaultWait","debounceRef","getDefaultFn","getDefaultWait","promise","Promise","resolve","reject","timeout","clearTimeout","useAsyncDebounce","getTableInstance","instanceId","theadProps","tableClassName","isGroupHeader","headerGroupKey","headerGroupProps","resizer","headerProps","themeClass","resolvedHeaderProps","filterInput","filterCellProps","resolvedFilterCellProps","padRows","hasStickyColumns","rowHighlightClass","rowStripedClass","viewIndex","rowCls","level","rowProps","expandedId","rowDetails","expandedCol","details","makeRowDetails","resolvedRowProps","colIndex","cellProps","rowHeader","hasDetails","expander","newExpandedColumns","textOverflow","userSelect","expanderProps","canRowSelect","resolvedCellProps","padRowCount","tbodyProps","makeTbody","hasFooters","tfootProps","footerProps","resolvedFooterProps","makeTfoot","minPageSize","makePagination","widget","factory","renderValue","hasAttribute","resize"],"sourceRoot":""}