@erpsquad/common 1.8.22 → 1.8.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/ArrowBack/index.esm.js +5 -0
- package/dist/_virtual/ArrowBack/index.esm.js.map +1 -0
- package/dist/_virtual/ArrowBack/index.js +2 -0
- package/dist/_virtual/ArrowBack/index.js.map +1 -0
- package/dist/_virtual/ArrowForward/index.esm.js +5 -0
- package/dist/_virtual/ArrowForward/index.esm.js.map +1 -0
- package/dist/_virtual/ArrowForward/index.js +2 -0
- package/dist/_virtual/ArrowForward/index.js.map +1 -0
- package/dist/_virtual/IndeterminateCheckBox/index.esm.js +5 -0
- package/dist/_virtual/IndeterminateCheckBox/index.esm.js.map +1 -0
- package/dist/_virtual/IndeterminateCheckBox/index.js +2 -0
- package/dist/_virtual/IndeterminateCheckBox/index.js.map +1 -0
- package/dist/_virtual/NorthEast/index.esm.js +5 -0
- package/dist/_virtual/NorthEast/index.esm.js.map +1 -0
- package/dist/_virtual/NorthEast/index.js +2 -0
- package/dist/_virtual/NorthEast/index.js.map +1 -0
- package/dist/_virtual/Visibility/index.esm.js +5 -0
- package/dist/_virtual/Visibility/index.esm.js.map +1 -0
- package/dist/_virtual/Visibility/index.js +2 -0
- package/dist/_virtual/Visibility/index.js.map +1 -0
- package/dist/_virtual/index/index.esm.js +2 -4
- package/dist/_virtual/index/index.esm.js.map +1 -1
- package/dist/_virtual/index/index.esm2.js +2 -2
- package/dist/_virtual/index/index.esm3.js +4 -2
- package/dist/_virtual/index/index.esm3.js.map +1 -1
- package/dist/_virtual/index/index.js +1 -1
- package/dist/_virtual/index/index3.js +1 -1
- package/dist/components/charts/line-chart/area-line-chart/index.esm.js +40 -0
- package/dist/components/charts/line-chart/area-line-chart/index.esm.js.map +1 -0
- package/dist/components/charts/line-chart/area-line-chart/index.js +2 -0
- package/dist/components/charts/line-chart/area-line-chart/index.js.map +1 -0
- package/dist/components/filter/fields/index.esm.js +180 -0
- package/dist/components/filter/fields/index.esm.js.map +1 -0
- package/dist/components/filter/fields/index.js +2 -0
- package/dist/components/filter/fields/index.js.map +1 -0
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.esm.js +5 -1
- package/dist/components/index.esm.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/material-table/aggregation-fns/index/index.esm.js +10 -0
- package/dist/components/material-table/aggregation-fns/index/index.esm.js.map +1 -1
- package/dist/components/material-table/aggregation-fns/index/index.js +1 -1
- package/dist/components/material-table/aggregation-fns/index/index.js.map +1 -1
- package/dist/components/material-table/components/number-aggregation/index.esm.js +133 -0
- package/dist/components/material-table/components/number-aggregation/index.esm.js.map +1 -0
- package/dist/components/material-table/components/number-aggregation/index.js +5 -0
- package/dist/components/material-table/components/number-aggregation/index.js.map +1 -0
- package/dist/index.esm.js +6 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/node_modules/@asseinfo/react-kanban/dist/index/index.esm.js +1 -1
- package/dist/node_modules/@asseinfo/react-kanban/dist/index/index.js +1 -1
- package/dist/node_modules/@glideapps/glide-data-grid/dist/js/index/index.esm.js +32 -0
- package/dist/node_modules/@glideapps/glide-data-grid/dist/js/index/index.esm.js.map +1 -1
- package/dist/node_modules/@glideapps/glide-data-grid/dist/js/index/index.js +36 -36
- package/dist/node_modules/@glideapps/glide-data-grid/dist/js/index/index.js.map +1 -1
- package/dist/node_modules/@mui/icons-material/ArrowBack/index.esm.js +18 -0
- package/dist/node_modules/@mui/icons-material/ArrowBack/index.esm.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/ArrowBack/index.js +2 -0
- package/dist/node_modules/@mui/icons-material/ArrowBack/index.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/ArrowForward/index.esm.js +18 -0
- package/dist/node_modules/@mui/icons-material/ArrowForward/index.esm.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/ArrowForward/index.js +2 -0
- package/dist/node_modules/@mui/icons-material/ArrowForward/index.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/IndeterminateCheckBox/index.esm.js +18 -0
- package/dist/node_modules/@mui/icons-material/IndeterminateCheckBox/index.esm.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/IndeterminateCheckBox/index.js +2 -0
- package/dist/node_modules/@mui/icons-material/IndeterminateCheckBox/index.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/NorthEast/index.esm.js +18 -0
- package/dist/node_modules/@mui/icons-material/NorthEast/index.esm.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/NorthEast/index.js +2 -0
- package/dist/node_modules/@mui/icons-material/NorthEast/index.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/Visibility/index.esm.js +18 -0
- package/dist/node_modules/@mui/icons-material/Visibility/index.esm.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/Visibility/index.js +2 -0
- package/dist/node_modules/@mui/icons-material/Visibility/index.js.map +1 -0
- package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.esm.js +1 -1
- package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.js +1 -1
- package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.js.map +1 -1
- package/dist/node_modules/prop-types/index/index.esm.js +1 -1
- package/dist/node_modules/prop-types/index/index.js +1 -1
- package/dist/node_modules/prop-types/index/index.js.map +1 -1
- package/dist/style.css +3 -3
- package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.esm.js +48 -0
- package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.js +2 -0
- package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.js.map +1 -0
- package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.esm.js +50 -0
- package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.js +2 -0
- package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.js.map +1 -0
- package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.esm.js +57 -0
- package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.js +2 -0
- package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.js.map +1 -0
- package/dist/views/beforeAuth/components/grid-data/grid-data/index.esm.js +41 -0
- package/dist/views/beforeAuth/components/grid-data/grid-data/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/grid-data/grid-data/index.js +2 -0
- package/dist/views/beforeAuth/components/grid-data/grid-data/index.js.map +1 -0
- package/dist/views/beforeAuth/components/index/index.esm.js +1144 -0
- package/dist/views/beforeAuth/components/index/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/index/index.js +206 -0
- package/dist/views/beforeAuth/components/index/index.js.map +1 -0
- package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.esm.js +72 -0
- package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.js +2 -0
- package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.js.map +1 -0
- package/dist/views/beforeAuth/components/list-content/column-raw/index.esm.js +54 -0
- package/dist/views/beforeAuth/components/list-content/column-raw/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/list-content/column-raw/index.js +2 -0
- package/dist/views/beforeAuth/components/list-content/column-raw/index.js.map +1 -0
- package/dist/views/beforeAuth/components/list-content/list-data/index.esm.js +61 -0
- package/dist/views/beforeAuth/components/list-content/list-data/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/list-content/list-data/index.js +2 -0
- package/dist/views/beforeAuth/components/list-content/list-data/index.js.map +1 -0
- package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.esm.js +21 -0
- package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.js +2 -0
- package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.js.map +1 -0
- package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.esm.js +21 -0
- package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.js +2 -0
- package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.js.map +1 -0
- package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.esm.js +306 -0
- package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.esm.js.map +1 -0
- package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.js +2 -0
- package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.js.map +1 -0
- package/dist/views/index.esm.js +2 -0
- package/dist/views/index.esm.js.map +1 -1
- package/dist/views/index.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../../node_modules/@glideapps/glide-data-grid/dist/js/index.js"],"sourcesContent":["import {\n styled_default\n} from \"./chunk-XFANKXD6.js\";\n\n// src/data-editor/data-editor.tsx\nimport * as React35 from \"react\";\n\n// src/common/support.ts\nfunction proveType(_val) {\n}\nfunction panic(message = \"This should not happen\") {\n throw new Error(message);\n}\nfunction assert(fact, message = \"Assertion failed\") {\n if (fact)\n return;\n return panic(message);\n}\nfunction assertNever(_never, msg) {\n return panic(msg != null ? msg : \"Hell froze over\");\n}\nfunction maybe(fn, defaultValue) {\n try {\n return fn();\n } catch (e) {\n return defaultValue;\n }\n}\nvar has = Object.prototype.hasOwnProperty;\nfunction deepEqual(foo, bar) {\n let ctor, len;\n if (foo === bar)\n return true;\n if (foo && bar && (ctor = foo.constructor) === bar.constructor) {\n if (ctor === Date)\n return foo.getTime() === bar.getTime();\n if (ctor === RegExp)\n return foo.toString() === bar.toString();\n if (ctor === Array) {\n if ((len = foo.length) === bar.length) {\n while (len-- && deepEqual(foo[len], bar[len]))\n ;\n }\n return len === -1;\n }\n if (!ctor || typeof foo === \"object\") {\n len = 0;\n for (ctor in foo) {\n if (has.call(foo, ctor) && ++len && !has.call(bar, ctor))\n return false;\n if (!(ctor in bar) || !deepEqual(foo[ctor], bar[ctor]))\n return false;\n }\n return Object.keys(bar).length === len;\n }\n }\n return foo !== foo && bar !== bar;\n}\n\n// src/data-editor/data-editor.tsx\nimport clamp5 from \"lodash/clamp.js\";\nimport uniq from \"lodash/uniq.js\";\nimport flatten from \"lodash/flatten.js\";\nimport range from \"lodash/range.js\";\nimport debounce2 from \"lodash/debounce.js\";\n\n// src/data-grid-overlay-editor/data-grid-overlay-editor.tsx\nimport * as React4 from \"react\";\nimport { createPortal } from \"react-dom\";\n\n// src/click-outside-container/click-outside-container.tsx\nimport * as React from \"react\";\nvar ClickOutsideContainer = class extends React.PureComponent {\n constructor() {\n super(...arguments);\n this.wrapperRef = React.createRef();\n this.clickOutside = (event) => {\n if (this.props.isOutsideClick && !this.props.isOutsideClick(event)) {\n return;\n }\n if (this.wrapperRef.current !== null && !this.wrapperRef.current.contains(event.target)) {\n let node = event.target;\n while (node !== null) {\n if (node.classList.contains(\"click-outside-ignore\")) {\n return;\n }\n node = node.parentElement;\n }\n this.props.onClickOutside();\n }\n };\n }\n componentDidMount() {\n document.addEventListener(\"touchend\", this.clickOutside, true);\n document.addEventListener(\"mousedown\", this.clickOutside, true);\n document.addEventListener(\"contextmenu\", this.clickOutside, true);\n }\n componentWillUnmount() {\n document.removeEventListener(\"touchend\", this.clickOutside, true);\n document.removeEventListener(\"mousedown\", this.clickOutside, true);\n document.removeEventListener(\"contextmenu\", this.clickOutside, true);\n }\n render() {\n const { onClickOutside, isOutsideClick, ...rest } = this.props;\n return /* @__PURE__ */ React.createElement(\"div\", { ...rest, ref: this.wrapperRef }, this.props.children);\n }\n};\n\n// src/common/styles.ts\nimport React2 from \"react\";\nfunction makeCSSStyle(theme) {\n var _a, _b;\n return {\n \"--gdg-accent-color\": theme.accentColor,\n \"--gdg-accent-fg\": theme.accentFg,\n \"--gdg-accent-light\": theme.accentLight,\n \"--gdg-text-dark\": theme.textDark,\n \"--gdg-text-medium\": theme.textMedium,\n \"--gdg-text-light\": theme.textLight,\n \"--gdg-text-bubble\": theme.textBubble,\n \"--gdg-bg-icon-header\": theme.bgIconHeader,\n \"--gdg-fg-icon-header\": theme.fgIconHeader,\n \"--gdg-text-header\": theme.textHeader,\n \"--gdg-text-group-header\": (_a = theme.textGroupHeader) != null ? _a : theme.textHeader,\n \"--gdg-text-header-selected\": theme.textHeaderSelected,\n \"--gdg-bg-cell\": theme.bgCell,\n \"--gdg-bg-cell-medium\": theme.bgCellMedium,\n \"--gdg-bg-header\": theme.bgHeader,\n \"--gdg-bg-header-has-focus\": theme.bgHeaderHasFocus,\n \"--gdg-bg-header-hovered\": theme.bgHeaderHovered,\n \"--gdg-bg-bubble\": theme.bgBubble,\n \"--gdg-bg-bubble-selected\": theme.bgBubbleSelected,\n \"--gdg-bg-search-result\": theme.bgSearchResult,\n \"--gdg-border-color\": theme.borderColor,\n \"--gdg-horizontal-border-color\": (_b = theme.horizontalBorderColor) != null ? _b : theme.borderColor,\n \"--gdg-drilldown-border\": theme.drilldownBorder,\n \"--gdg-link-color\": theme.linkColor,\n \"--gdg-cell-horizontal-padding\": `${theme.cellHorizontalPadding}px`,\n \"--gdg-cell-vertical-padding\": `${theme.cellVerticalPadding}px`,\n \"--gdg-header-font-style\": theme.headerFontStyle,\n \"--gdg-base-font-style\": theme.baseFontStyle,\n \"--gdg-marker-font-style\": theme.markerFontStyle,\n \"--gdg-font-family\": theme.fontFamily,\n \"--gdg-editor-font-size\": theme.editorFontSize\n };\n}\nvar dataEditorBaseTheme = {\n accentColor: \"#4F5DFF\",\n accentFg: \"#FFFFFF\",\n accentLight: \"rgba(62, 116, 253, 0.1)\",\n textDark: \"#313139\",\n textMedium: \"#737383\",\n textLight: \"#B2B2C0\",\n textBubble: \"#313139\",\n bgIconHeader: \"#737383\",\n fgIconHeader: \"#FFFFFF\",\n textHeader: \"#313139\",\n textGroupHeader: \"#313139BB\",\n textHeaderSelected: \"#FFFFFF\",\n bgCell: \"#FFFFFF\",\n bgCellMedium: \"#FAFAFB\",\n bgHeader: \"#F7F7F8\",\n bgHeaderHasFocus: \"#E9E9EB\",\n bgHeaderHovered: \"#EFEFF1\",\n bgBubble: \"#EDEDF3\",\n bgBubbleSelected: \"#FFFFFF\",\n bgSearchResult: \"#fff9e3\",\n borderColor: \"rgba(115, 116, 131, 0.16)\",\n drilldownBorder: \"rgba(0, 0, 0, 0)\",\n linkColor: \"#4F5DFF\",\n cellHorizontalPadding: 8,\n cellVerticalPadding: 3,\n headerIconSize: 18,\n headerFontStyle: \"600 13px\",\n baseFontStyle: \"13px\",\n markerFontStyle: \"9px\",\n fontFamily: \"Inter, Roboto, -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Ubuntu, noto, arial, sans-serif\",\n editorFontSize: \"13px\",\n lineHeight: 1.4\n //unitless scaler depends on your font\n};\nfunction getDataEditorTheme() {\n return dataEditorBaseTheme;\n}\nvar ThemeContext = React2.createContext(dataEditorBaseTheme);\nfunction useTheme() {\n return React2.useContext(ThemeContext);\n}\n\n// src/data-grid/data-grid-types.ts\nimport has2 from \"lodash/has.js\";\nfunction gridSelectionHasItem(sel, item) {\n const [col, row] = item;\n if (sel.columns.hasIndex(col) || sel.rows.hasIndex(row))\n return true;\n if (sel.current !== void 0) {\n if (sel.current.cell[0] === col && sel.current.cell[1] === row)\n return true;\n const toCheck = [sel.current.range, ...sel.current.rangeStack];\n for (const r of toCheck) {\n if (col >= r.x && col < r.x + r.width && row >= r.y && row < r.y + r.height)\n return true;\n }\n }\n return false;\n}\nvar BooleanEmpty = null;\nvar BooleanIndeterminate = void 0;\nvar headerKind = \"header\";\nvar groupHeaderKind = \"group-header\";\nvar outOfBoundsKind = \"out-of-bounds\";\nvar GridCellKind = /* @__PURE__ */ ((GridCellKind2) => {\n GridCellKind2[\"Uri\"] = \"uri\";\n GridCellKind2[\"Text\"] = \"text\";\n GridCellKind2[\"Image\"] = \"image\";\n GridCellKind2[\"RowID\"] = \"row-id\";\n GridCellKind2[\"Number\"] = \"number\";\n GridCellKind2[\"Bubble\"] = \"bubble\";\n GridCellKind2[\"Boolean\"] = \"boolean\";\n GridCellKind2[\"Loading\"] = \"loading\";\n GridCellKind2[\"Markdown\"] = \"markdown\";\n GridCellKind2[\"Drilldown\"] = \"drilldown\";\n GridCellKind2[\"Protected\"] = \"protected\";\n GridCellKind2[\"Custom\"] = \"custom\";\n return GridCellKind2;\n})(GridCellKind || {});\nvar GridColumnIcon = /* @__PURE__ */ ((GridColumnIcon2) => {\n GridColumnIcon2[\"HeaderRowID\"] = \"headerRowID\";\n GridColumnIcon2[\"HeaderCode\"] = \"headerCode\";\n GridColumnIcon2[\"HeaderNumber\"] = \"headerNumber\";\n GridColumnIcon2[\"HeaderString\"] = \"headerString\";\n GridColumnIcon2[\"HeaderBoolean\"] = \"headerBoolean\";\n GridColumnIcon2[\"HeaderAudioUri\"] = \"headerAudioUri\";\n GridColumnIcon2[\"HeaderVideoUri\"] = \"headerVideoUri\";\n GridColumnIcon2[\"HeaderEmoji\"] = \"headerEmoji\";\n GridColumnIcon2[\"HeaderImage\"] = \"headerImage\";\n GridColumnIcon2[\"HeaderUri\"] = \"headerUri\";\n GridColumnIcon2[\"HeaderPhone\"] = \"headerPhone\";\n GridColumnIcon2[\"HeaderMarkdown\"] = \"headerMarkdown\";\n GridColumnIcon2[\"HeaderDate\"] = \"headerDate\";\n GridColumnIcon2[\"HeaderTime\"] = \"headerTime\";\n GridColumnIcon2[\"HeaderEmail\"] = \"headerEmail\";\n GridColumnIcon2[\"HeaderReference\"] = \"headerReference\";\n GridColumnIcon2[\"HeaderIfThenElse\"] = \"headerIfThenElse\";\n GridColumnIcon2[\"HeaderSingleValue\"] = \"headerSingleValue\";\n GridColumnIcon2[\"HeaderLookup\"] = \"headerLookup\";\n GridColumnIcon2[\"HeaderTextTemplate\"] = \"headerTextTemplate\";\n GridColumnIcon2[\"HeaderMath\"] = \"headerMath\";\n GridColumnIcon2[\"HeaderRollup\"] = \"headerRollup\";\n GridColumnIcon2[\"HeaderJoinStrings\"] = \"headerJoinStrings\";\n GridColumnIcon2[\"HeaderSplitString\"] = \"headerSplitString\";\n GridColumnIcon2[\"HeaderGeoDistance\"] = \"headerGeoDistance\";\n GridColumnIcon2[\"HeaderArray\"] = \"headerArray\";\n GridColumnIcon2[\"RowOwnerOverlay\"] = \"rowOwnerOverlay\";\n GridColumnIcon2[\"ProtectedColumnOverlay\"] = \"protectedColumnOverlay\";\n return GridColumnIcon2;\n})(GridColumnIcon || {});\nvar headerCellCheckboxPrefix = \"___gdg_header_cell_\";\nvar headerCellCheckedMarker = headerCellCheckboxPrefix + \"checked\";\nvar headerCellUnheckedMarker = headerCellCheckboxPrefix + \"unchecked\";\nvar headerCellIndeterminateMarker = headerCellCheckboxPrefix + \"indeterminate\";\nfunction isSizedGridColumn(c) {\n return \"width\" in c && typeof c.width === \"number\";\n}\nasync function resolveCellsThunk(thunk) {\n if (typeof thunk === \"object\")\n return thunk;\n return await thunk();\n}\nfunction isEditableGridCell(cell) {\n if (cell.kind === \"loading\" || cell.kind === \"bubble\" || cell.kind === \"row-id\" || cell.kind === \"protected\" || cell.kind === \"drilldown\") {\n return false;\n }\n proveType(cell);\n return true;\n}\nfunction isTextEditableGridCell(cell) {\n if (cell.kind === \"loading\" || cell.kind === \"bubble\" || cell.kind === \"row-id\" || cell.kind === \"protected\" || cell.kind === \"drilldown\" || cell.kind === \"boolean\" || cell.kind === \"image\" || cell.kind === \"custom\") {\n return false;\n }\n proveType(cell);\n return true;\n}\nfunction isInnerOnlyCell(cell) {\n return cell.kind === \"marker\" || cell.kind === \"new-row\";\n}\nfunction isReadWriteCell(cell) {\n if (!isEditableGridCell(cell) || cell.kind === \"image\")\n return false;\n if (cell.kind === \"text\" || cell.kind === \"number\" || cell.kind === \"markdown\" || cell.kind === \"uri\" || cell.kind === \"custom\" || cell.kind === \"boolean\") {\n return cell.readonly !== true;\n }\n assertNever(cell, \"A cell was passed with an invalid kind\");\n}\nfunction isObjectEditorCallbackResult(obj) {\n return has2(obj, \"editor\");\n}\nfunction booleanCellIsEditable(cell) {\n var _a;\n return !((_a = cell.readonly) != null ? _a : false);\n}\nvar InnerGridCellKind = /* @__PURE__ */ ((InnerGridCellKind2) => {\n InnerGridCellKind2[\"NewRow\"] = \"new-row\";\n InnerGridCellKind2[\"Marker\"] = \"marker\";\n return InnerGridCellKind2;\n})(InnerGridCellKind || {});\nfunction mergeRanges(input) {\n if (input.length === 0) {\n return [];\n }\n const ranges = [...input];\n const stack = [];\n ranges.sort(function(a, b) {\n return a[0] - b[0];\n });\n stack.push([...ranges[0]]);\n for (const range2 of ranges.slice(1)) {\n const top = stack[stack.length - 1];\n if (top[1] < range2[0]) {\n stack.push([...range2]);\n } else if (top[1] < range2[1]) {\n top[1] = range2[1];\n }\n }\n return stack;\n}\nvar emptyCompactSelection;\nvar _CompactSelection = class _CompactSelection {\n constructor(items) {\n this.items = items;\n }\n offset(amount) {\n if (amount === 0)\n return this;\n const newItems = this.items.map((x) => [x[0] + amount, x[1] + amount]);\n return new _CompactSelection(newItems);\n }\n add(selection) {\n const slice = typeof selection === \"number\" ? [selection, selection + 1] : selection;\n const newItems = mergeRanges([...this.items, slice]);\n return new _CompactSelection(newItems);\n }\n remove(selection) {\n const items = [...this.items];\n const selMin = typeof selection === \"number\" ? selection : selection[0];\n const selMax = typeof selection === \"number\" ? selection + 1 : selection[1];\n for (const [i, slice] of items.entries()) {\n const [start, end] = slice;\n if (start <= selMax && selMin <= end) {\n const toAdd = [];\n if (start < selMin) {\n toAdd.push([start, selMin]);\n }\n if (selMax < end) {\n toAdd.push([selMax, end]);\n }\n items.splice(i, 1, ...toAdd);\n }\n }\n return new _CompactSelection(items);\n }\n first() {\n if (this.items.length === 0)\n return void 0;\n return this.items[0][0];\n }\n last() {\n if (this.items.length === 0)\n return void 0;\n return this.items.slice(-1)[0][1] - 1;\n }\n hasIndex(index) {\n for (let i = 0; i < this.items.length; i++) {\n const [start, end] = this.items[i];\n if (index >= start && index < end)\n return true;\n }\n return false;\n }\n hasAll(index) {\n for (let x = index[0]; x < index[1]; x++) {\n if (!this.hasIndex(x))\n return false;\n }\n return true;\n }\n some(predicate) {\n for (const i of this) {\n if (predicate(i))\n return true;\n }\n return false;\n }\n equals(other) {\n if (other === this)\n return true;\n if (other.items.length !== this.items.length)\n return false;\n for (let i = 0; i < this.items.length; i++) {\n const left = other.items[i];\n const right = this.items[i];\n if (left[0] !== right[0] || left[1] !== right[1])\n return false;\n }\n return true;\n }\n // Really old JS wont have access to the iterator and babel will stop people using it\n // when trying to support browsers so old we don't support them anyway. What goes on\n // between an engineer and their bundler in the privacy of their CI server is none of\n // my business anyway.\n toArray() {\n const result = [];\n for (const [start, end] of this.items) {\n for (let x = start; x < end; x++) {\n result.push(x);\n }\n }\n return result;\n }\n get length() {\n let len = 0;\n for (const [start, end] of this.items) {\n len += end - start;\n }\n return len;\n }\n *[Symbol.iterator]() {\n for (const [start, end] of this.items) {\n for (let x = start; x < end; x++) {\n yield x;\n }\n }\n }\n};\n_CompactSelection.empty = () => {\n return emptyCompactSelection != null ? emptyCompactSelection : emptyCompactSelection = new _CompactSelection([]);\n};\n_CompactSelection.fromSingleSelection = (selection) => {\n return _CompactSelection.empty().add(selection);\n};\nvar CompactSelection = _CompactSelection;\n\n// src/data-grid-overlay-editor/data-grid-overlay-editor-style.tsx\nvar _exp = () => (p) => p.targetY;\nvar _exp2 = () => (p) => p.targetX - 1;\nvar _exp3 = () => (p) => p.targetY - 1;\nvar _exp4 = () => (p) => p.targetWidth + 2;\nvar _exp5 = () => (p) => p.targetHeight + 2;\nvar _exp6 = () => (p) => p.targetY + 10;\nvar _exp7 = () => (p) => Math.max(0, (p.targetHeight - 28) / 2);\nvar DataGridOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"DataGridOverlayEditorStyle\",\n class: \"d1t1th9s\",\n propsAsIs: false,\n vars: {\n \"d1t1th9s-0\": [_exp(), \"px\"],\n \"d1t1th9s-1\": [_exp2(), \"px\"],\n \"d1t1th9s-2\": [_exp3(), \"px\"],\n \"d1t1th9s-3\": [_exp4(), \"px\"],\n \"d1t1th9s-4\": [_exp5(), \"px\"],\n \"d1t1th9s-5\": [_exp6(), \"px\"],\n \"d1t1th9s-6\": [_exp7(), \"px\"]\n }\n});\n\n// src/data-grid-overlay-editor/use-stay-on-screen.ts\nimport * as React3 from \"react\";\nfunction useRefState() {\n const [refState, setRefState] = React3.useState();\n return [refState != null ? refState : void 0, setRefState];\n}\nfunction useStayOnScreen() {\n const [ref, setRef] = useRefState();\n const [xOffset, setXOffset] = React3.useState(0);\n const [isIntersecting, setIsIntersecting] = React3.useState(true);\n React3.useLayoutEffect(() => {\n if (ref === void 0)\n return;\n if (!(\"IntersectionObserver\" in window))\n return;\n const observer = new IntersectionObserver(\n (ents) => {\n if (ents.length === 0)\n return;\n setIsIntersecting(ents[0].isIntersecting);\n },\n { threshold: 1 }\n );\n observer.observe(ref);\n return () => observer.disconnect();\n }, [ref]);\n React3.useEffect(() => {\n if (isIntersecting || ref === void 0)\n return;\n let rafHandle;\n const fn = () => {\n const { right: refRight } = ref.getBoundingClientRect();\n setXOffset((cv) => Math.min(cv + window.innerWidth - refRight - 10, 0));\n rafHandle = requestAnimationFrame(fn);\n };\n rafHandle = requestAnimationFrame(fn);\n return () => {\n if (rafHandle !== void 0) {\n cancelAnimationFrame(rafHandle);\n }\n };\n }, [ref, isIntersecting]);\n const style = React3.useMemo(() => {\n return { transform: `translateX(${xOffset}px)` };\n }, [xOffset]);\n return {\n ref: setRef,\n style\n };\n}\n\n// src/data-grid-overlay-editor/data-grid-overlay-editor.tsx\nvar DataGridOverlayEditor = (p) => {\n const {\n target,\n content,\n onFinishEditing: onFinishEditingIn,\n forceEditMode,\n initialValue,\n imageEditorOverride,\n markdownDivCreateNode,\n highlight,\n className,\n theme,\n id,\n cell,\n validateCell,\n getCellRenderer,\n provideEditor,\n isOutsideClick\n } = p;\n const [tempValue, setTempValueRaw] = React4.useState(forceEditMode ? content : void 0);\n const lastValueRef = React4.useRef(tempValue != null ? tempValue : content);\n lastValueRef.current = tempValue != null ? tempValue : content;\n const [isValid, setIsValid] = React4.useState(() => {\n if (validateCell === void 0)\n return true;\n return !(isEditableGridCell(content) && (validateCell == null ? void 0 : validateCell(cell, content, lastValueRef.current)) === false);\n });\n const onFinishEditing = React4.useCallback(\n (newCell, movement) => {\n onFinishEditingIn(isValid ? newCell : void 0, movement);\n },\n [isValid, onFinishEditingIn]\n );\n const setTempValue = React4.useCallback(\n (newVal) => {\n if (validateCell !== void 0 && newVal !== void 0 && isEditableGridCell(newVal)) {\n const validResult = validateCell(cell, newVal, lastValueRef.current);\n if (validResult === false) {\n setIsValid(false);\n } else if (typeof validResult === \"object\") {\n newVal = validResult;\n setIsValid(true);\n } else {\n setIsValid(true);\n }\n }\n setTempValueRaw(newVal);\n },\n [cell, validateCell]\n );\n const finished = React4.useRef(false);\n const customMotion = React4.useRef(void 0);\n const onClickOutside = React4.useCallback(() => {\n onFinishEditing(tempValue, [0, 0]);\n finished.current = true;\n }, [tempValue, onFinishEditing]);\n const onEditorFinished = React4.useCallback(\n (newValue, movement) => {\n var _a;\n onFinishEditing(newValue, (_a = movement != null ? movement : customMotion.current) != null ? _a : [0, 0]);\n finished.current = true;\n },\n [onFinishEditing]\n );\n const onKeyDown = React4.useCallback(\n async (event) => {\n let save = false;\n if (event.key === \"Escape\") {\n event.stopPropagation();\n event.preventDefault();\n customMotion.current = [0, 0];\n } else if (event.key === \"Enter\" && !event.shiftKey) {\n event.stopPropagation();\n event.preventDefault();\n customMotion.current = [0, 1];\n save = true;\n } else if (event.key === \"Tab\") {\n event.stopPropagation();\n event.preventDefault();\n customMotion.current = [event.shiftKey ? -1 : 1, 0];\n save = true;\n }\n window.setTimeout(() => {\n if (!finished.current && customMotion.current !== void 0) {\n onFinishEditing(save ? tempValue : void 0, customMotion.current);\n finished.current = true;\n }\n }, 0);\n },\n [onFinishEditing, tempValue]\n );\n const targetValue = tempValue != null ? tempValue : content;\n const [editorProvider, useLabel] = React4.useMemo(() => {\n var _a, _b;\n if (isInnerOnlyCell(content))\n return [];\n const external = provideEditor == null ? void 0 : provideEditor(content);\n if (external !== void 0)\n return [external, false];\n return [(_b = (_a = getCellRenderer(content)) == null ? void 0 : _a.provideEditor) == null ? void 0 : _b.call(_a, content), false];\n }, [content, getCellRenderer, provideEditor]);\n const { ref, style: stayOnScreenStyle } = useStayOnScreen();\n let pad = true;\n let editor;\n let style = true;\n let styleOverride;\n if (editorProvider !== void 0) {\n pad = editorProvider.disablePadding !== true;\n style = editorProvider.disableStyling !== true;\n const isObjectEditor = isObjectEditorCallbackResult(editorProvider);\n if (isObjectEditor) {\n styleOverride = editorProvider.styleOverride;\n }\n const CustomEditor = isObjectEditor ? editorProvider.editor : editorProvider;\n editor = /* @__PURE__ */ React4.createElement(\n CustomEditor,\n {\n isHighlighted: highlight,\n onChange: setTempValue,\n value: targetValue,\n initialValue,\n onFinishedEditing: onEditorFinished,\n validatedSelection: isEditableGridCell(targetValue) ? targetValue.selectionRange : void 0,\n forceEditMode,\n target,\n imageEditorOverride,\n markdownDivCreateNode,\n isValid\n }\n );\n }\n styleOverride = { ...styleOverride, ...stayOnScreenStyle };\n const portalElement = document.getElementById(\"portal\");\n if (portalElement === null) {\n console.error(\n 'Cannot open Data Grid overlay editor, because portal not found. Please add `<div id=\"portal\" />` as the last child of your `<body>`.'\n );\n return null;\n }\n let classWrap = style ? \"gdg-style\" : \"gdg-unstyle\";\n if (!isValid) {\n classWrap += \" invalid\";\n }\n if (pad) {\n classWrap += \" pad\";\n }\n return createPortal(\n /* @__PURE__ */ React4.createElement(ThemeContext.Provider, { value: theme }, /* @__PURE__ */ React4.createElement(\n ClickOutsideContainer,\n {\n style: makeCSSStyle(theme),\n className,\n onClickOutside,\n isOutsideClick\n },\n /* @__PURE__ */ React4.createElement(\n DataGridOverlayEditorStyle,\n {\n ref,\n id,\n className: classWrap,\n style: styleOverride,\n as: useLabel === true ? \"label\" : void 0,\n targetX: target.x,\n targetY: target.y,\n targetWidth: target.width,\n targetHeight: target.height\n },\n /* @__PURE__ */ React4.createElement(\"div\", { className: \"clip-region\", onKeyDown }, editor)\n )\n )),\n portalElement\n );\n};\nvar data_grid_overlay_editor_default = DataGridOverlayEditor;\n\n// src/data-grid-search/data-grid-search.tsx\nimport * as React12 from \"react\";\n\n// src/scrolling-data-grid/scrolling-data-grid.tsx\nimport * as React11 from \"react\";\n\n// src/data-grid-dnd/data-grid-dnd.tsx\nimport clamp3 from \"lodash/clamp.js\";\nimport * as React9 from \"react\";\n\n// src/data-grid/data-grid.tsx\nimport * as React8 from \"react\";\n\n// src/common/image-window-loader.ts\nimport throttle from \"lodash/throttle.js\";\nvar rowShift = 1 << 16;\nvar imgPool = [];\nfunction packColRowToNumber(col, row) {\n return row * rowShift + col;\n}\nfunction unpackCol(packed) {\n return packed % rowShift;\n}\nfunction unpackRow(packed, col) {\n return (packed - col) / rowShift;\n}\nfunction unpackNumberToColRow(packed) {\n const col = unpackCol(packed);\n const row = unpackRow(packed, col);\n return [col, row];\n}\nvar ImageWindowLoaderImpl = class {\n constructor() {\n this.imageLoaded = () => void 0;\n this.loadedLocations = [];\n this.visibleWindow = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n this.freezeCols = 0;\n this.isInWindow = (packed) => {\n const col = unpackCol(packed);\n const row = unpackRow(packed, col);\n const w = this.visibleWindow;\n if (col < this.freezeCols && row >= w.y && row <= w.y + w.height)\n return true;\n return col >= w.x && col <= w.x + w.width && row >= w.y && row <= w.y + w.height;\n };\n this.cache = {};\n // eslint-disable-next-line unicorn/consistent-function-scoping\n this.sendLoaded = throttle(() => {\n this.imageLoaded(this.loadedLocations);\n this.loadedLocations = [];\n }, 20);\n this.clearOutOfWindow = () => {\n const keys = Object.keys(this.cache);\n for (const key of keys) {\n const obj = this.cache[key];\n let keep = false;\n for (let j = 0; j < obj.cells.length; j++) {\n const packed = obj.cells[j];\n if (this.isInWindow(packed)) {\n keep = true;\n break;\n }\n }\n if (keep) {\n obj.cells = obj.cells.filter(this.isInWindow);\n } else {\n obj.cancel();\n delete this.cache[key];\n }\n }\n };\n }\n setCallback(imageLoaded) {\n this.imageLoaded = imageLoaded;\n }\n setWindow(newWindow, freezeCols) {\n if (this.visibleWindow.x === newWindow.x && this.visibleWindow.y === newWindow.y && this.visibleWindow.width === newWindow.width && this.visibleWindow.height === newWindow.height && this.freezeCols === freezeCols)\n return;\n this.visibleWindow = newWindow;\n this.freezeCols = freezeCols;\n this.clearOutOfWindow();\n }\n loadImage(url, col, row, key) {\n var _a;\n let loaded = false;\n const img = (_a = imgPool.pop()) != null ? _a : new Image();\n let canceled = false;\n const result = {\n img: void 0,\n cells: [packColRowToNumber(col, row)],\n url,\n cancel: () => {\n if (canceled)\n return;\n canceled = true;\n if (imgPool.length < 12) {\n imgPool.unshift(img);\n } else if (!loaded) {\n img.src = \"\";\n }\n }\n };\n const loadPromise = new Promise((r) => img.addEventListener(\"load\", () => r(null)));\n requestAnimationFrame(async () => {\n try {\n img.src = url;\n await loadPromise;\n await img.decode();\n const toWrite = this.cache[key];\n if (toWrite !== void 0 && !canceled) {\n toWrite.img = img;\n for (const packed of toWrite.cells) {\n this.loadedLocations.push(unpackNumberToColRow(packed));\n }\n loaded = true;\n this.sendLoaded();\n }\n } catch (e) {\n result.cancel();\n }\n });\n this.cache[key] = result;\n }\n loadOrGetImage(url, col, row) {\n const key = url;\n const current = this.cache[key];\n if (current !== void 0) {\n const packed = packColRowToNumber(col, row);\n if (!current.cells.includes(packed)) {\n current.cells.push(packed);\n }\n return current.img;\n } else {\n this.loadImage(url, col, row, key);\n }\n return void 0;\n }\n};\nvar image_window_loader_default = ImageWindowLoaderImpl;\n\n// src/common/utils.tsx\nimport * as React5 from \"react\";\nimport debounce from \"lodash/debounce.js\";\nfunction useEventListener(eventName, handler, element, passive, capture = false) {\n const savedHandler = React5.useRef();\n savedHandler.current = handler;\n React5.useEffect(\n () => {\n if (element === null || element.addEventListener === void 0)\n return;\n const el = element;\n const eventListener = (event) => {\n var _a;\n (_a = savedHandler.current) == null ? void 0 : _a.call(el, event);\n };\n el.addEventListener(eventName, eventListener, { passive, capture });\n return () => {\n el.removeEventListener(eventName, eventListener, { capture });\n };\n },\n [eventName, element, passive, capture]\n // Re-run if eventName or element changes\n );\n}\nfunction whenDefined(obj, result) {\n return obj === void 0 ? void 0 : result;\n}\nvar PI = Math.PI;\nfunction degreesToRadians(degrees) {\n return degrees * PI / 180;\n}\nvar getSquareBB = (posX, posY, squareSideLength) => ({\n x1: posX - squareSideLength / 2,\n y1: posY - squareSideLength / 2,\n x2: posX + squareSideLength / 2,\n y2: posY + squareSideLength / 2\n});\nvar getSquareXPosFromAlign = (alignment, containerX, containerWidth, horizontalPadding, squareWidth) => {\n switch (alignment) {\n case \"left\":\n return Math.floor(containerX) + horizontalPadding + squareWidth / 2;\n case \"center\":\n return Math.floor(containerX + containerWidth / 2);\n case \"right\":\n return Math.floor(containerX + containerWidth) - horizontalPadding - squareWidth / 2;\n }\n};\nvar getSquareWidth = (maxSize, containerHeight, verticalPadding) => Math.min(maxSize, containerHeight - verticalPadding * 2);\nvar pointIsWithinBB = (x, y, bb) => bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2;\nvar EditPencil = (props) => {\n var _a;\n const fg = (_a = props.fgColor) != null ? _a : \"currentColor\";\n return /* @__PURE__ */ React5.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" }, /* @__PURE__ */ React5.createElement(\n \"path\",\n {\n d: \"M12.7073 7.05029C7.87391 11.8837 10.4544 9.30322 6.03024 13.7273C5.77392 13.9836 5.58981 14.3071 5.50189 14.6587L4.52521 18.5655C4.38789 19.1148 4.88543 19.6123 5.43472 19.475L9.34146 18.4983C9.69313 18.4104 10.0143 18.2286 10.2706 17.9722L16.9499 11.2929\",\n stroke: fg,\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\",\n vectorEffect: \"non-scaling-stroke\"\n }\n ), /* @__PURE__ */ React5.createElement(\n \"path\",\n {\n d: \"M20.4854 4.92901L19.0712 3.5148C18.2901 2.73375 17.0238 2.73375 16.2428 3.5148L14.475 5.28257C15.5326 7.71912 16.4736 8.6278 18.7176 9.52521L20.4854 7.75744C21.2665 6.97639 21.2665 5.71006 20.4854 4.92901Z\",\n stroke: fg,\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\",\n vectorEffect: \"non-scaling-stroke\"\n }\n ));\n};\nvar Checkmark = (props) => {\n var _a;\n const fg = (_a = props.fgColor) != null ? _a : \"currentColor\";\n return /* @__PURE__ */ React5.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" }, /* @__PURE__ */ React5.createElement(\n \"path\",\n {\n d: \"M19 6L10.3802 17L5.34071 11.8758\",\n vectorEffect: \"non-scaling-stroke\",\n stroke: fg,\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n ));\n};\nfunction useDebouncedMemo(factory, deps, time) {\n const [state, setState] = React5.useState(factory);\n const mountedRef = React5.useRef(true);\n React5.useEffect(\n () => () => {\n mountedRef.current = false;\n },\n []\n );\n const debouncedSetState = React5.useRef(\n debounce((x) => {\n if (mountedRef.current) {\n setState(x);\n }\n }, time)\n );\n React5.useLayoutEffect(() => {\n if (mountedRef.current) {\n debouncedSetState.current(() => factory());\n }\n }, deps);\n return state;\n}\nvar rtlRange = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\nvar ltrRange = \"A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\\u200E\\u2C00-\\uFB1C\\uFE00-\\uFE6F\\uFEFD-\\uFFFF\";\nvar rtl = new RegExp(\"^[^\" + ltrRange + \"]*[\" + rtlRange + \"]\");\nvar ltr = new RegExp(\"^[^\" + rtlRange + \"]*[\" + ltrRange + \"]\");\nfunction direction(value) {\n return rtl.test(value) ? \"rtl\" : ltr.test(value) ? \"ltr\" : \"neutral\";\n}\nvar scrollbarWidthCache = void 0;\nfunction getScrollBarWidth() {\n if (scrollbarWidthCache !== void 0)\n return scrollbarWidthCache;\n const inner = document.createElement(\"p\");\n inner.style.width = \"100%\";\n inner.style.height = \"200px\";\n const outer = document.createElement(\"div\");\n outer.id = \"testScrollbar\";\n outer.style.position = \"absolute\";\n outer.style.top = \"0px\";\n outer.style.left = \"0px\";\n outer.style.visibility = \"hidden\";\n outer.style.width = \"200px\";\n outer.style.height = \"150px\";\n outer.style.overflow = \"hidden\";\n outer.append(inner);\n document.body.append(outer);\n const w1 = inner.offsetWidth;\n outer.style.overflow = \"scroll\";\n let w2 = inner.offsetWidth;\n if (w1 === w2) {\n w2 = outer.clientWidth;\n }\n outer.remove();\n scrollbarWidthCache = w1 - w2;\n return scrollbarWidthCache;\n}\nvar empty = Symbol();\nfunction useStateWithReactiveInput(inputState) {\n const inputStateRef = React5.useRef([empty, inputState]);\n if (inputStateRef.current[1] !== inputState) {\n inputStateRef.current[0] = inputState;\n }\n inputStateRef.current[1] = inputState;\n const [state, setState] = React5.useState(inputState);\n const [, forceRender] = React5.useState();\n const setStateOuter = React5.useCallback((nv) => {\n const s = inputStateRef.current[0];\n if (s !== empty) {\n nv = typeof nv === \"function\" ? nv(s) : nv;\n if (nv === s)\n return;\n }\n if (s !== empty)\n forceRender({});\n setState((pv) => {\n if (typeof nv === \"function\") {\n return nv(s === empty ? pv : s);\n }\n return nv;\n });\n inputStateRef.current[0] = empty;\n }, []);\n const onEmpty = React5.useCallback(() => {\n inputStateRef.current[0] = empty;\n forceRender({});\n }, []);\n return [inputStateRef.current[0] === empty ? state : inputStateRef.current[0], setStateOuter, onEmpty];\n}\nfunction makeAccessibilityStringForArray(arr) {\n if (arr.length === 0) {\n return \"\";\n }\n let index = 0;\n let count = 0;\n for (const str of arr) {\n count += str.length;\n if (count > 1e4)\n break;\n index++;\n }\n return arr.slice(0, index).join(\", \");\n}\n\n// src/data-grid/data-grid-lib.ts\nimport React6 from \"react\";\nimport { split as splitText, clearCache } from \"canvas-hypertxt\";\nfunction useMappedColumns(columns, freezeColumns) {\n return React6.useMemo(\n () => columns.map((c, i) => ({\n ...c,\n sourceIndex: i,\n sticky: i < freezeColumns\n })),\n [columns, freezeColumns]\n );\n}\nfunction isGroupEqual(left, right) {\n return (left != null ? left : \"\") === (right != null ? right : \"\");\n}\nfunction cellIsSelected(location, cell, selection) {\n if ((selection == null ? void 0 : selection.current) === void 0)\n return false;\n const [col, row] = selection.current.cell;\n const [cellCol, cellRow] = location;\n if (cellRow !== row)\n return false;\n if (cell.span === void 0) {\n return col === cellCol;\n }\n return col >= cell.span[0] && col <= cell.span[1];\n}\nfunction cellIsInRect(location, cell, rect) {\n const startX = rect.x;\n const endX = rect.x + rect.width - 1;\n const startY = rect.y;\n const endY = rect.y + rect.height - 1;\n const [cellCol, cellRow] = location;\n if (cellRow < startY || cellRow > endY)\n return false;\n if (cell.span === void 0) {\n return cellCol >= startX && cellCol <= endX;\n }\n const [spanStart, spanEnd] = cell.span;\n return spanStart >= startX && spanStart <= endX || spanEnd >= startX && spanStart <= endX || spanStart < startX && spanEnd > endX;\n}\nfunction cellIsInRange(location, cell, selection) {\n let result = 0;\n if (selection.current === void 0)\n return result;\n if (cellIsInRect(location, cell, selection.current.range))\n result++;\n for (const r of selection.current.rangeStack) {\n if (cellIsInRect(location, cell, r)) {\n result++;\n }\n }\n return result;\n}\nfunction remapForDnDState(columns, dndState) {\n let mappedCols = columns;\n if (dndState !== void 0) {\n let writable = [...columns];\n const temp = mappedCols[dndState.src];\n if (dndState.src > dndState.dest) {\n writable.splice(dndState.src, 1);\n writable.splice(dndState.dest, 0, temp);\n } else {\n writable.splice(dndState.dest + 1, 0, temp);\n writable.splice(dndState.src, 1);\n }\n writable = writable.map((c, i) => ({\n ...c,\n sticky: columns[i].sticky\n }));\n mappedCols = writable;\n }\n return mappedCols;\n}\nfunction getStickyWidth(columns, dndState) {\n let result = 0;\n const remapped = remapForDnDState(columns, dndState);\n for (let i = 0; i < remapped.length; i++) {\n const c = remapped[i];\n if (c.sticky)\n result += c.width;\n else\n break;\n }\n return result;\n}\nfunction getEffectiveColumns(columns, cellXOffset, width, dndState, tx) {\n const mappedCols = remapForDnDState(columns, dndState);\n const sticky = [];\n for (const c of mappedCols) {\n if (c.sticky) {\n sticky.push(c);\n } else {\n break;\n }\n }\n if (sticky.length > 0) {\n for (const c of sticky) {\n width -= c.width;\n }\n }\n let endIndex = cellXOffset;\n let curX = tx != null ? tx : 0;\n while (curX <= width && endIndex < mappedCols.length) {\n curX += mappedCols[endIndex].width;\n endIndex++;\n }\n for (let i = cellXOffset; i < endIndex; i++) {\n const c = mappedCols[i];\n if (!c.sticky) {\n sticky.push(c);\n }\n }\n return sticky;\n}\nfunction getColumnIndexForX(targetX, effectiveColumns, translateX) {\n let x = 0;\n for (const c of effectiveColumns) {\n const cx = c.sticky ? x : x + (translateX != null ? translateX : 0);\n if (targetX <= cx + c.width) {\n return c.sourceIndex;\n }\n x += c.width;\n }\n return -1;\n}\nfunction getRowIndexForY(targetY, height, hasGroups, headerHeight, groupHeaderHeight, rows, rowHeight, cellYOffset, translateY, lastRowSticky) {\n const totalHeaderHeight = headerHeight + groupHeaderHeight;\n if (hasGroups && targetY <= groupHeaderHeight)\n return -2;\n if (targetY <= totalHeaderHeight)\n return -1;\n const lastRowHeight = typeof rowHeight === \"number\" ? rowHeight : rowHeight(rows - 1);\n if (lastRowSticky && targetY > height - lastRowHeight) {\n return rows - 1;\n }\n const effectiveRows = rows - (lastRowSticky ? 1 : 0);\n const ty = targetY - (translateY != null ? translateY : 0);\n if (typeof rowHeight === \"number\") {\n const target = Math.floor((ty - totalHeaderHeight) / rowHeight) + cellYOffset;\n if (target >= effectiveRows)\n return void 0;\n return target;\n } else {\n let curY = totalHeaderHeight;\n for (let i = cellYOffset; i < effectiveRows; i++) {\n const rh = rowHeight(i);\n if (ty <= curY + rh)\n return i;\n curY += rh;\n }\n return void 0;\n }\n}\nvar metricsSize = 0;\nvar metricsCache = {};\nvar isSSR = typeof window === \"undefined\";\nasync function clearCacheOnLoad() {\n var _a;\n if (isSSR || ((_a = document == null ? void 0 : document.fonts) == null ? void 0 : _a.ready) === void 0)\n return;\n await document.fonts.ready;\n metricsSize = 0;\n metricsCache = {};\n clearCache();\n}\nvoid clearCacheOnLoad();\nfunction makeCacheKey(s, ctx, baseline, font) {\n return `${s}_${font != null ? font : ctx.font}_${baseline}`;\n}\nfunction measureTextCached(s, ctx, font) {\n const key = makeCacheKey(s, ctx, \"middle\", font);\n let metrics = metricsCache[key];\n if (metrics === void 0) {\n metrics = ctx.measureText(s);\n metricsCache[key] = metrics;\n metricsSize++;\n }\n if (metricsSize > 1e4) {\n metricsCache = {};\n metricsSize = 0;\n }\n return metrics;\n}\nfunction getMiddleCenterBias(ctx, font) {\n if (typeof font !== \"string\") {\n font = `${font.baseFontStyle} ${font.fontFamily}`;\n }\n return getMiddleCenterBiasInner(ctx, font);\n}\nfunction loadMetric(ctx, baseline) {\n const sample = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n ctx.save();\n ctx.textBaseline = baseline;\n const result = ctx.measureText(sample);\n ctx.restore();\n return result;\n}\nvar biasCache = [];\nfunction getMiddleCenterBiasInner(ctx, font) {\n for (const x of biasCache) {\n if (x.key === font)\n return x.val;\n }\n const alphabeticMetrics = loadMetric(ctx, \"alphabetic\");\n const middleMetrics = loadMetric(ctx, \"middle\");\n const bias = -(middleMetrics.actualBoundingBoxDescent - alphabeticMetrics.actualBoundingBoxDescent) + alphabeticMetrics.actualBoundingBoxAscent / 2;\n biasCache.push({\n key: font,\n val: bias\n });\n return bias;\n}\nfunction drawWithLastUpdate(args, lastUpdate, frameTime, lastPrep, draw) {\n const { ctx, rect, theme } = args;\n let progress = Number.MAX_SAFE_INTEGER;\n const animTime = 500;\n if (lastUpdate !== void 0) {\n progress = frameTime - lastUpdate;\n if (progress < animTime) {\n const fade = 1 - progress / animTime;\n ctx.globalAlpha = fade;\n ctx.fillStyle = theme.bgSearchResult;\n ctx.fillRect(rect.x, rect.y, rect.width, rect.height);\n ctx.globalAlpha = 1;\n if (lastPrep !== void 0) {\n lastPrep.fillStyle = theme.bgSearchResult;\n }\n }\n }\n draw();\n return progress < animTime;\n}\nfunction prepTextCell(args, lastPrep, overrideColor) {\n const { ctx, theme } = args;\n const result = lastPrep != null ? lastPrep : {};\n const newFill = overrideColor != null ? overrideColor : theme.textDark;\n if (newFill !== result.fillStyle) {\n ctx.fillStyle = newFill;\n result.fillStyle = newFill;\n }\n return result;\n}\nfunction drawTextCellExternal(args, data, contentAlign) {\n const { rect, ctx, theme } = args;\n ctx.fillStyle = theme.textDark;\n drawTextCell(\n {\n ctx,\n rect,\n theme\n },\n data,\n contentAlign\n );\n}\nfunction drawSingleTextLine(ctx, data, x, y, w, h, bias, theme, contentAlign) {\n if (contentAlign === \"right\") {\n ctx.fillText(data, x + w - (theme.cellHorizontalPadding + 0.5), y + h / 2 + bias);\n } else if (contentAlign === \"center\") {\n ctx.fillText(data, x + w / 2, y + h / 2 + bias);\n } else {\n ctx.fillText(data, x + theme.cellHorizontalPadding + 0.5, y + h / 2 + bias);\n }\n}\nfunction getEmHeight(ctx, fontStyle) {\n const textMetrics = measureTextCached(\"ABCi09jgqpy\", ctx, fontStyle);\n return textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent;\n}\nfunction drawTextCell(args, data, contentAlign, allowWrapping, hyperWrapping) {\n const { ctx, rect, theme } = args;\n const { x, y, width: w, height: h } = rect;\n allowWrapping = allowWrapping != null ? allowWrapping : false;\n if (!allowWrapping) {\n if (data.includes(\"\\n\")) {\n data = data.split(/\\r?\\n/)[0];\n }\n const max = w / 4;\n if (data.length > max) {\n data = data.slice(0, max);\n }\n }\n const bias = getMiddleCenterBias(ctx, theme);\n const isRtl = direction(data) === \"rtl\";\n if (contentAlign === void 0 && isRtl) {\n contentAlign = \"right\";\n }\n if (isRtl) {\n ctx.direction = \"rtl\";\n }\n if (data.length > 0) {\n let changed = false;\n if (contentAlign === \"right\") {\n ctx.textAlign = \"right\";\n changed = true;\n } else if (contentAlign !== void 0 && contentAlign !== \"left\") {\n ctx.textAlign = contentAlign;\n changed = true;\n }\n if (!allowWrapping) {\n drawSingleTextLine(ctx, data, x, y, w, h, bias, theme, contentAlign);\n } else {\n const fontStyle = `${theme.fontFamily} ${theme.baseFontStyle}`;\n const split = splitText(ctx, data, fontStyle, w - theme.cellHorizontalPadding * 2, hyperWrapping != null ? hyperWrapping : false);\n const emHeight = getEmHeight(ctx, fontStyle);\n const lineHeight = theme.lineHeight * emHeight;\n const actualHeight = emHeight + lineHeight * (split.length - 1);\n const mustClip = actualHeight + theme.cellVerticalPadding > h;\n if (mustClip) {\n ctx.save();\n ctx.rect(x, y, w, h);\n ctx.clip();\n }\n const optimalY = y + h / 2 - actualHeight / 2;\n let drawY = Math.max(y + theme.cellVerticalPadding, optimalY);\n for (const line of split) {\n drawSingleTextLine(ctx, line, x, drawY, w, emHeight, bias, theme, contentAlign);\n drawY += lineHeight;\n if (drawY > y + h)\n break;\n }\n if (mustClip) {\n ctx.restore();\n }\n }\n if (changed) {\n ctx.textAlign = \"start\";\n }\n if (isRtl) {\n ctx.direction = \"inherit\";\n }\n }\n}\nfunction drawNewRowCell(args, data, icon) {\n const { ctx, rect, hoverAmount, theme, spriteManager } = args;\n const { x, y, width: w, height: h } = rect;\n ctx.beginPath();\n ctx.globalAlpha = hoverAmount;\n ctx.rect(x, y, w, h);\n ctx.fillStyle = theme.bgHeaderHovered;\n ctx.fill();\n ctx.globalAlpha = 1;\n ctx.beginPath();\n const alwaysShowIcon = data !== \"\";\n let textX = 0;\n if (icon !== void 0) {\n const padding = 8;\n const size = h - padding;\n const px = x + padding / 2;\n const py = y + padding / 2;\n spriteManager.drawSprite(icon, \"normal\", ctx, px, py, size, theme, alwaysShowIcon ? 1 : hoverAmount);\n textX = size;\n } else {\n textX = 24;\n const finalLineSize = 12;\n const lineSize = alwaysShowIcon ? finalLineSize : hoverAmount * finalLineSize;\n const xTranslate = alwaysShowIcon ? 0 : (1 - hoverAmount) * finalLineSize * 0.5;\n const padPlus = theme.cellHorizontalPadding + 4;\n if (lineSize > 0) {\n ctx.moveTo(x + padPlus + xTranslate, y + h / 2);\n ctx.lineTo(x + padPlus + xTranslate + lineSize, y + h / 2);\n ctx.moveTo(x + padPlus + xTranslate + lineSize * 0.5, y + h / 2 - lineSize * 0.5);\n ctx.lineTo(x + padPlus + xTranslate + lineSize * 0.5, y + h / 2 + lineSize * 0.5);\n ctx.lineWidth = 2;\n ctx.strokeStyle = theme.bgIconHeader;\n ctx.lineCap = \"round\";\n ctx.stroke();\n }\n }\n ctx.fillStyle = theme.textMedium;\n ctx.fillText(data, textX + x + theme.cellHorizontalPadding + 0.5, y + h / 2 + getMiddleCenterBias(ctx, theme));\n ctx.beginPath();\n}\nfunction drawCheckbox(ctx, theme, checked, x, y, width, height, highlighted, hoverX = -20, hoverY = -20, maxSize = 32, alignment = \"center\") {\n const centerY = Math.floor(y + height / 2);\n const rectBordRadius = 4;\n const checkBoxWidth = getSquareWidth(maxSize, height, theme.cellVerticalPadding);\n const checkBoxHalfWidth = checkBoxWidth / 2;\n const posX = getSquareXPosFromAlign(alignment, x, width, theme.cellHorizontalPadding, checkBoxWidth);\n const bb = getSquareBB(posX, centerY, checkBoxWidth);\n const hovered = pointIsWithinBB(x + hoverX, y + hoverY, bb);\n switch (checked) {\n case true: {\n ctx.beginPath();\n roundedRect(\n ctx,\n posX - checkBoxWidth / 2,\n centerY - checkBoxWidth / 2,\n checkBoxWidth,\n checkBoxWidth,\n rectBordRadius\n );\n ctx.fillStyle = highlighted ? theme.accentColor : theme.textMedium;\n ctx.fill();\n ctx.beginPath();\n ctx.moveTo(\n posX - checkBoxHalfWidth + checkBoxWidth / 4.23,\n centerY - checkBoxHalfWidth + checkBoxWidth / 1.97\n );\n ctx.lineTo(\n posX - checkBoxHalfWidth + checkBoxWidth / 2.42,\n centerY - checkBoxHalfWidth + checkBoxWidth / 1.44\n );\n ctx.lineTo(\n posX - checkBoxHalfWidth + checkBoxWidth / 1.29,\n centerY - checkBoxHalfWidth + checkBoxWidth / 3.25\n );\n ctx.strokeStyle = theme.bgCell;\n ctx.lineJoin = \"round\";\n ctx.lineCap = \"round\";\n ctx.lineWidth = 1.9;\n ctx.stroke();\n break;\n }\n case BooleanEmpty:\n case false: {\n ctx.beginPath();\n roundedRect(\n ctx,\n posX - checkBoxWidth / 2 + 0.5,\n centerY - checkBoxWidth / 2 + 0.5,\n checkBoxWidth - 1,\n checkBoxWidth - 1,\n rectBordRadius\n );\n ctx.lineWidth = 1;\n ctx.strokeStyle = hovered ? theme.textDark : theme.textMedium;\n ctx.stroke();\n break;\n }\n case BooleanIndeterminate: {\n ctx.beginPath();\n roundedRect(\n ctx,\n posX - checkBoxWidth / 2,\n centerY - checkBoxWidth / 2,\n checkBoxWidth,\n checkBoxWidth,\n rectBordRadius\n );\n ctx.fillStyle = hovered ? theme.textMedium : theme.textLight;\n ctx.fill();\n ctx.beginPath();\n ctx.moveTo(posX - checkBoxWidth / 3, centerY);\n ctx.lineTo(posX + checkBoxWidth / 3, centerY);\n ctx.strokeStyle = theme.bgCell;\n ctx.lineCap = \"round\";\n ctx.lineWidth = 1.9;\n ctx.stroke();\n break;\n }\n default:\n assertNever(checked);\n }\n}\nfunction prepMarkerRowCell(args, lastPrep) {\n const { ctx, theme } = args;\n const newFont = `9px ${theme.fontFamily}`;\n const result = lastPrep != null ? lastPrep : {};\n if ((result == null ? void 0 : result.font) !== newFont) {\n ctx.font = newFont;\n result.font = newFont;\n }\n result.deprep = deprepMarkerRowCell;\n ctx.textAlign = \"center\";\n return result;\n}\nfunction deprepMarkerRowCell(args) {\n const { ctx } = args;\n ctx.textAlign = \"start\";\n}\nfunction drawMarkerRowCell(args, index, checked, markerKind, drawHandle) {\n const { ctx, rect, hoverAmount, theme } = args;\n const { x, y, width, height } = rect;\n const checkedboxAlpha = checked ? 1 : markerKind === \"checkbox-visible\" ? 0.6 + 0.4 * hoverAmount : hoverAmount;\n if (markerKind !== \"number\" && checkedboxAlpha > 0) {\n ctx.globalAlpha = checkedboxAlpha;\n const offsetAmount = 7 * (checked ? hoverAmount : 1);\n drawCheckbox(\n ctx,\n theme,\n checked,\n drawHandle ? x + offsetAmount : x,\n y,\n drawHandle ? width - offsetAmount : width,\n height,\n true,\n void 0,\n void 0,\n 18\n );\n if (drawHandle) {\n ctx.globalAlpha = hoverAmount;\n ctx.beginPath();\n for (const xOffset of [3, 6]) {\n for (const yOffset of [-5, -1, 3]) {\n ctx.rect(x + xOffset, y + height / 2 + yOffset, 2, 2);\n }\n }\n ctx.fillStyle = theme.textLight;\n ctx.fill();\n ctx.beginPath();\n }\n ctx.globalAlpha = 1;\n }\n if (markerKind === \"number\" || markerKind === \"both\" && !checked) {\n const text = index.toString();\n const fontStyle = `${theme.markerFontStyle} ${theme.fontFamily}`;\n const start = x + width / 2;\n if (markerKind === \"both\" && hoverAmount !== 0) {\n ctx.globalAlpha = 1 - hoverAmount;\n }\n ctx.fillStyle = theme.textLight;\n ctx.font = fontStyle;\n ctx.fillText(text, start, y + height / 2 + getMiddleCenterBias(ctx, fontStyle));\n if (hoverAmount !== 0) {\n ctx.globalAlpha = 1;\n }\n }\n}\nfunction drawProtectedCell(args) {\n const { ctx, theme, rect } = args;\n const { x, y, height: h } = rect;\n ctx.beginPath();\n const radius = 2.5;\n let xStart = x + theme.cellHorizontalPadding + radius;\n const center = y + h / 2;\n const p = Math.cos(degreesToRadians(30)) * radius;\n const q = Math.sin(degreesToRadians(30)) * radius;\n for (let i = 0; i < 12; i++) {\n ctx.moveTo(xStart, center - radius);\n ctx.lineTo(xStart, center + radius);\n ctx.moveTo(xStart + p, center - q);\n ctx.lineTo(xStart - p, center + q);\n ctx.moveTo(xStart - p, center - q);\n ctx.lineTo(xStart + p, center + q);\n xStart += 8;\n }\n ctx.lineWidth = 1.1;\n ctx.lineCap = \"square\";\n ctx.strokeStyle = theme.textLight;\n ctx.stroke();\n}\nfunction roundedRect(ctx, x, y, width, height, radius) {\n if (typeof radius === \"number\") {\n radius = { tl: radius, tr: radius, br: radius, bl: radius };\n }\n radius = {\n tl: Math.min(radius.tl, height / 2, width / 2),\n tr: Math.min(radius.tr, height / 2, width / 2),\n bl: Math.min(radius.bl, height / 2, width / 2),\n br: Math.min(radius.br, height / 2, width / 2)\n };\n ctx.moveTo(x + radius.tl, y);\n ctx.arcTo(x + width, y, x + width, y + radius.tr, radius.tr);\n ctx.arcTo(x + width, y + height, x + width - radius.br, y + height, radius.br);\n ctx.arcTo(x, y + height, x, y + height - radius.bl, radius.bl);\n ctx.arcTo(x, y, x + radius.tl, y, radius.tl);\n}\nfunction drawBoolean(args, data, canEdit, maxSize) {\n if (!canEdit && data === BooleanEmpty) {\n return;\n }\n const {\n ctx,\n hoverAmount,\n theme,\n rect,\n highlighted,\n hoverX,\n hoverY,\n cell: { contentAlign }\n } = args;\n const { x, y, width: w, height: h } = rect;\n const hoverEffect = 0.35;\n let alpha = canEdit ? 1 - hoverEffect + hoverEffect * hoverAmount : 0.4;\n if (data === BooleanEmpty) {\n alpha *= hoverAmount;\n }\n if (alpha === 0) {\n return;\n }\n ctx.globalAlpha = alpha;\n drawCheckbox(ctx, theme, data, x, y, w, h, highlighted, hoverX, hoverY, maxSize, contentAlign);\n ctx.globalAlpha = 1;\n}\nvar itemMargin = 4;\nfunction drawBubbles(args, data) {\n const { rect, theme, ctx, highlighted } = args;\n const { x, y, width: w, height: h } = rect;\n const bubbleHeight = 20;\n const bubblePad = 8;\n const bubbleMargin = itemMargin;\n let renderX = x + theme.cellHorizontalPadding;\n const renderBoxes = [];\n for (const s of data) {\n if (renderX > x + w)\n break;\n const textWidth = measureTextCached(s, ctx, `${theme.baseFontStyle} ${theme.fontFamily}`).width;\n renderBoxes.push({\n x: renderX,\n width: textWidth\n });\n renderX += textWidth + bubblePad * 2 + bubbleMargin;\n }\n ctx.beginPath();\n for (const rectInfo of renderBoxes) {\n roundedRect(\n ctx,\n rectInfo.x,\n y + (h - bubbleHeight) / 2,\n rectInfo.width + bubblePad * 2,\n bubbleHeight,\n bubbleHeight / 2\n );\n }\n ctx.fillStyle = highlighted ? theme.bgBubbleSelected : theme.bgBubble;\n ctx.fill();\n for (const [i, rectInfo] of renderBoxes.entries()) {\n ctx.beginPath();\n ctx.fillStyle = theme.textBubble;\n ctx.fillText(data[i], rectInfo.x + bubblePad, y + h / 2 + getMiddleCenterBias(ctx, theme));\n }\n}\nvar drilldownCache = {};\nfunction getAndCacheDrilldownBorder(bgCell, border, height) {\n const dpr = Math.ceil(window.devicePixelRatio);\n const shadowBlur = 5;\n const targetHeight = height - shadowBlur * 2;\n const middleWidth = 4;\n const rounding = 6;\n const innerHeight = height * dpr;\n const sideWidth = rounding + shadowBlur;\n const targetWidth = rounding * 3;\n const innerWidth = (targetWidth + shadowBlur * 2) * dpr;\n const key = `${bgCell},${border},${dpr},${height}`;\n if (drilldownCache[key] !== void 0) {\n return {\n el: drilldownCache[key],\n height: innerHeight,\n width: innerWidth,\n middleWidth: middleWidth * dpr,\n sideWidth: sideWidth * dpr,\n padding: shadowBlur * dpr,\n dpr\n };\n }\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (ctx === null)\n return null;\n canvas.width = innerWidth;\n canvas.height = innerHeight;\n ctx.scale(dpr, dpr);\n drilldownCache[key] = canvas;\n const trueRounding = Math.min(rounding, targetWidth / 2, targetHeight / 2);\n ctx.beginPath();\n roundedRect(ctx, shadowBlur, shadowBlur, targetWidth, targetHeight, trueRounding);\n ctx.shadowColor = \"rgba(24, 25, 34, 0.4)\";\n ctx.shadowBlur = 1;\n ctx.fillStyle = bgCell;\n ctx.fill();\n ctx.shadowColor = \"rgba(24, 25, 34, 0.3)\";\n ctx.shadowOffsetY = 1;\n ctx.shadowBlur = 5;\n ctx.fillStyle = bgCell;\n ctx.fill();\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = 0;\n ctx.shadowBlur = 0;\n ctx.beginPath();\n roundedRect(ctx, shadowBlur + 0.5, shadowBlur + 0.5, targetWidth, targetHeight, trueRounding);\n ctx.strokeStyle = border;\n ctx.lineWidth = 1;\n ctx.stroke();\n return {\n el: canvas,\n height: innerHeight,\n width: innerWidth,\n sideWidth: sideWidth * dpr,\n middleWidth: rounding * dpr,\n padding: shadowBlur * dpr,\n dpr\n };\n}\nfunction drawDrilldownCell(args, data) {\n const { rect, theme, ctx, imageLoader, col, row } = args;\n const { x, width: w } = rect;\n const font = `${theme.baseFontStyle} ${theme.fontFamily}`;\n const emHeight = getEmHeight(ctx, font);\n const h = Math.min(rect.height, Math.max(16, Math.ceil(emHeight * theme.lineHeight) * 2));\n const y = Math.floor(rect.y + (rect.height - h) / 2);\n const bubbleHeight = h - 10;\n const bubblePad = 8;\n const bubbleMargin = itemMargin;\n let renderX = x + theme.cellHorizontalPadding;\n const tileMap = getAndCacheDrilldownBorder(theme.bgCell, theme.drilldownBorder, h);\n const renderBoxes = [];\n for (const el of data) {\n if (renderX > x + w)\n break;\n const textMetrics = measureTextCached(el.text, ctx, font);\n const textWidth = textMetrics.width;\n let imgWidth = 0;\n if (el.img !== void 0) {\n const img = imageLoader.loadOrGetImage(el.img, col, row);\n if (img !== void 0) {\n imgWidth = bubbleHeight - 8 + 4;\n }\n }\n const renderWidth = textWidth + imgWidth + bubblePad * 2;\n renderBoxes.push({\n x: renderX,\n width: renderWidth\n });\n renderX += renderWidth + bubbleMargin;\n }\n if (tileMap !== null) {\n const { el, height, middleWidth, sideWidth, width, dpr, padding } = tileMap;\n const outerSideWidth = sideWidth / dpr;\n const outerPadding = padding / dpr;\n for (const rectInfo of renderBoxes) {\n const rx = Math.floor(rectInfo.x);\n const rw = Math.floor(rectInfo.width);\n const outerMiddleWidth = rw - (outerSideWidth - outerPadding) * 2;\n ctx.imageSmoothingEnabled = false;\n ctx.drawImage(el, 0, 0, sideWidth, height, rx - outerPadding, y, outerSideWidth, h);\n if (outerMiddleWidth > 0)\n ctx.drawImage(\n el,\n sideWidth,\n 0,\n middleWidth,\n height,\n rx + (outerSideWidth - outerPadding),\n y,\n outerMiddleWidth,\n h\n );\n ctx.drawImage(\n el,\n width - sideWidth,\n 0,\n sideWidth,\n height,\n rx + rw - (outerSideWidth - outerPadding),\n y,\n outerSideWidth,\n h\n );\n ctx.imageSmoothingEnabled = true;\n }\n }\n ctx.beginPath();\n for (const [i, rectInfo] of renderBoxes.entries()) {\n const d = data[i];\n let drawX = rectInfo.x + bubblePad;\n if (d.img !== void 0) {\n const img = imageLoader.loadOrGetImage(d.img, col, row);\n if (img !== void 0) {\n const imgSize = bubbleHeight - 8;\n let srcX = 0;\n let srcY = 0;\n let srcWidth = img.width;\n let srcHeight = img.height;\n if (srcWidth > srcHeight) {\n srcX += (srcWidth - srcHeight) / 2;\n srcWidth = srcHeight;\n } else if (srcHeight > srcWidth) {\n srcY += (srcHeight - srcWidth) / 2;\n srcHeight = srcWidth;\n }\n ctx.beginPath();\n roundedRect(ctx, drawX, y + h / 2 - imgSize / 2, imgSize, imgSize, 3);\n ctx.save();\n ctx.clip();\n ctx.drawImage(img, srcX, srcY, srcWidth, srcHeight, drawX, y + h / 2 - imgSize / 2, imgSize, imgSize);\n ctx.restore();\n drawX += imgSize + 4;\n }\n }\n ctx.beginPath();\n ctx.fillStyle = theme.textBubble;\n ctx.fillText(d.text, drawX, y + h / 2 + getMiddleCenterBias(ctx, theme));\n }\n}\nfunction drawImage(args, data, rounding = 4, contentAlign) {\n const { rect, col, row, theme, ctx, imageLoader } = args;\n const { x, y, height: h, width: w } = rect;\n const imgHeight = h - theme.cellVerticalPadding * 2;\n const images = [];\n let totalWidth = 0;\n for (let index = 0; index < data.length; index++) {\n const i = data[index];\n if (i.length === 0)\n continue;\n const img = imageLoader.loadOrGetImage(i, col, row);\n if (img !== void 0) {\n images[index] = img;\n const imgWidth = img.width * (imgHeight / img.height);\n totalWidth += imgWidth + itemMargin;\n }\n }\n if (totalWidth === 0)\n return;\n totalWidth -= itemMargin;\n let drawX = x + theme.cellHorizontalPadding;\n if (contentAlign === \"right\")\n drawX = Math.floor(x + w - theme.cellHorizontalPadding - totalWidth);\n else if (contentAlign === \"center\")\n drawX = Math.floor(x + w / 2 - totalWidth / 2);\n for (const img of images) {\n if (img === void 0)\n continue;\n const imgWidth = img.width * (imgHeight / img.height);\n if (rounding > 0) {\n roundedRect(ctx, drawX, y + theme.cellVerticalPadding, imgWidth, imgHeight, rounding);\n ctx.save();\n ctx.clip();\n }\n ctx.drawImage(img, drawX, y + theme.cellVerticalPadding, imgWidth, imgHeight);\n if (rounding > 0) {\n ctx.restore();\n }\n drawX += imgWidth + itemMargin;\n }\n}\nfunction roundedPoly(ctx, points, radiusAll) {\n const asVec = function(p, pp) {\n const vx = pp.x - p.x;\n const vy = pp.y - p.y;\n const vlen = Math.sqrt(vx * vx + vy * vy);\n const vnx = vx / vlen;\n const vny = vy / vlen;\n return {\n x: vx,\n y: pp.y - p.y,\n len: vlen,\n nx: vnx,\n ny: vny,\n ang: Math.atan2(vny, vnx)\n };\n };\n let radius;\n const len = points.length;\n let p1 = points[len - 1];\n for (let i = 0; i < len; i++) {\n let p2 = points[i % len];\n const p3 = points[(i + 1) % len];\n const v1 = asVec(p2, p1);\n const v2 = asVec(p2, p3);\n const sinA = v1.nx * v2.ny - v1.ny * v2.nx;\n const sinA90 = v1.nx * v2.nx - v1.ny * -v2.ny;\n let angle = Math.asin(sinA < -1 ? -1 : sinA > 1 ? 1 : sinA);\n let radDirection = 1;\n let drawDirection = false;\n if (sinA90 < 0) {\n if (angle < 0) {\n angle = Math.PI + angle;\n } else {\n angle = Math.PI - angle;\n radDirection = -1;\n drawDirection = true;\n }\n } else {\n if (angle > 0) {\n radDirection = -1;\n drawDirection = true;\n }\n }\n radius = p2.radius !== void 0 ? p2.radius : radiusAll;\n const halfAngle = angle / 2;\n let lenOut = Math.abs(Math.cos(halfAngle) * radius / Math.sin(halfAngle));\n let cRadius;\n if (lenOut > Math.min(v1.len / 2, v2.len / 2)) {\n lenOut = Math.min(v1.len / 2, v2.len / 2);\n cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle));\n } else {\n cRadius = radius;\n }\n let x = p2.x + v2.nx * lenOut;\n let y = p2.y + v2.ny * lenOut;\n x += -v2.ny * cRadius * radDirection;\n y += v2.nx * cRadius * radDirection;\n ctx.arc(\n x,\n y,\n cRadius,\n v1.ang + Math.PI / 2 * radDirection,\n v2.ang - Math.PI / 2 * radDirection,\n drawDirection\n );\n p1 = p2;\n p2 = p3;\n }\n ctx.closePath();\n}\nfunction computeBounds(col, row, width, height, groupHeaderHeight, totalHeaderHeight, cellXOffset, cellYOffset, translateX, translateY, rows, freezeColumns, lastRowSticky, mappedColumns, rowHeight) {\n const result = {\n x: 0,\n y: totalHeaderHeight + translateY,\n width: 0,\n height: 0\n };\n const headerHeight = totalHeaderHeight - groupHeaderHeight;\n if (col >= freezeColumns) {\n const dir = cellXOffset > col ? -1 : 1;\n const freezeWidth = getStickyWidth(mappedColumns);\n result.x += freezeWidth + translateX;\n for (let i = cellXOffset; i !== col; i += dir) {\n result.x += mappedColumns[dir === 1 ? i : i - 1].width * dir;\n }\n } else {\n for (let i = 0; i < col; i++) {\n result.x += mappedColumns[i].width;\n }\n }\n result.width = mappedColumns[col].width + 1;\n if (row === -1) {\n result.y = groupHeaderHeight;\n result.height = headerHeight;\n } else if (row === -2) {\n result.y = 0;\n result.height = groupHeaderHeight;\n let start = col;\n const group = mappedColumns[col].group;\n const sticky = mappedColumns[col].sticky;\n while (start > 0 && isGroupEqual(mappedColumns[start - 1].group, group) && mappedColumns[start - 1].sticky === sticky) {\n const c = mappedColumns[start - 1];\n result.x -= c.width;\n result.width += c.width;\n start--;\n }\n let end = col;\n while (end + 1 < mappedColumns.length && isGroupEqual(mappedColumns[end + 1].group, group) && mappedColumns[end + 1].sticky === sticky) {\n const c = mappedColumns[end + 1];\n result.width += c.width;\n end++;\n }\n if (!sticky) {\n const freezeWidth = getStickyWidth(mappedColumns);\n const clip = result.x - freezeWidth;\n if (clip < 0) {\n result.x -= clip;\n result.width += clip;\n }\n if (result.x + result.width > width) {\n result.width = width - result.x;\n }\n }\n } else if (lastRowSticky && row === rows - 1) {\n const stickyHeight = typeof rowHeight === \"number\" ? rowHeight : rowHeight(row);\n result.y = height - stickyHeight;\n result.height = stickyHeight;\n } else {\n const dir = cellYOffset > row ? -1 : 1;\n if (typeof rowHeight === \"number\") {\n const delta = row - cellYOffset;\n result.y += delta * rowHeight;\n } else {\n for (let r = cellYOffset; r !== row; r += dir) {\n result.y += rowHeight(r) * dir;\n }\n }\n result.height = (typeof rowHeight === \"number\" ? rowHeight : rowHeight(row)) + 1;\n }\n return result;\n}\n\n// src/data-grid/sprites.ts\nvar iconHead = `<svg width=\"20\" height=\"20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">`;\nvar headerRowID = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}<rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/><path d=\"M15.75 4h-1.5a.25.25 0 0 0-.177.074L9.308 8.838a3.75 3.75 0 1 0 1.854 1.854l1.155-1.157.967.322a.5.5 0 0 0 .65-.55l-.18-1.208.363-.363.727.331a.5.5 0 0 0 .69-.59l-.254-.904.647-.647A.25.25 0 0 0 16 5.75v-1.5a.25.25 0 0 0-.25-.25zM7.5 13.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0z\" fill=\"${fg}\"/></svg>`;\n};\nvar headerCode = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}<rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"4\" fill=\"${bg}\"/><path d=\"m12.223 13.314 3.052-2.826a.65.65 0 0 0 0-.984l-3.052-2.822c-.27-.25-.634-.242-.865.022-.232.263-.206.636.056.882l2.601 2.41-2.601 2.41c-.262.245-.288.619-.056.882.231.263.595.277.865.026Zm-4.444.005c.266.25.634.241.866-.027.231-.263.206-.636-.06-.882L5.983 10l2.602-2.405c.266-.25.291-.62.06-.887-.232-.263-.596-.272-.866-.022L4.723 9.51a.653.653 0 0 0 0 .983l3.056 2.827Z\" fill=\"${fg}\"/></svg>`;\n};\nvar headerNumber = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2z\" fill=\"${bg}\"/>\n <path d=\"M6.52 12.78H5.51V8.74l-1.33.47v-.87l2.29-.83h.05v5.27zm5.2 0H8.15v-.69l1.7-1.83a6.38 6.38 0 0 0 .34-.4c.09-.11.16-.22.22-.32s.1-.19.12-.27a.9.9 0 0 0 0-.56.63.63 0 0 0-.15-.23.58.58 0 0 0-.22-.15.75.75 0 0 0-.29-.05c-.27 0-.48.08-.62.23a.95.95 0 0 0-.2.65H8.03c0-.24.04-.46.13-.67a1.67 1.67 0 0 1 .97-.91c.23-.1.49-.14.77-.14.26 0 .5.04.7.11.21.08.38.18.52.32.14.13.25.3.32.48a1.74 1.74 0 0 1 .03 1.13 2.05 2.05 0 0 1-.24.47 4.16 4.16 0 0 1-.35.47l-.47.5-1 1.05h2.32v.8zm1.8-3.08h.55c.28 0 .48-.06.61-.2a.76.76 0 0 0 .2-.55.8.8 0 0 0-.05-.28.56.56 0 0 0-.13-.22.6.6 0 0 0-.23-.15.93.93 0 0 0-.32-.05.92.92 0 0 0-.29.05.72.72 0 0 0-.23.12.57.57 0 0 0-.21.46H12.4a1.3 1.3 0 0 1 .5-1.04c.15-.13.33-.23.54-.3a2.48 2.48 0 0 1 1.4 0c.2.06.4.15.55.28.15.13.27.28.36.47.08.19.13.4.13.65a1.15 1.15 0 0 1-.2.65 1.36 1.36 0 0 1-.58.49c.15.05.28.12.38.2a1.14 1.14 0 0 1 .43.62c.03.13.05.26.05.4 0 .25-.05.47-.14.66a1.42 1.42 0 0 1-.4.49c-.16.13-.35.23-.58.3a2.51 2.51 0 0 1-.73.1c-.22 0-.44-.03-.65-.09a1.8 1.8 0 0 1-.57-.28 1.43 1.43 0 0 1-.4-.47 1.41 1.41 0 0 1-.15-.66h1a.66.66 0 0 0 .22.5.87.87 0 0 0 .58.2c.25 0 .45-.07.6-.2a.71.71 0 0 0 .21-.56.97.97 0 0 0-.06-.36.61.61 0 0 0-.18-.25.74.74 0 0 0-.28-.15 1.33 1.33 0 0 0-.37-.04h-.55V9.7z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerString = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n <path d=\"M8.182 12.4h3.636l.655 1.6H14l-3.454-8H9.455L6 14h1.527l.655-1.6zM10 7.44l1.36 3.651H8.64L10 7.441z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerBoolean = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path\n d=\"M16.2222 2H3.77778C2.8 2 2 2.8 2 3.77778V16.2222C2 17.2 2.8 18 3.77778 18H16.2222C17.2 18 17.9911 17.2 17.9911 16.2222L18 3.77778C18 2.8 17.2 2 16.2222 2Z\"\n fill=\"${bg}\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M7.66667 6.66669C5.73368 6.66669 4.16667 8.15907 4.16667 10C4.16667 11.841 5.73368 13.3334 7.66667 13.3334H12.3333C14.2663 13.3334 15.8333 11.841 15.8333 10C15.8333 8.15907 14.2663 6.66669 12.3333 6.66669H7.66667ZM12.5 12.5C13.8807 12.5 15 11.3807 15 10C15 8.61931 13.8807 7.50002 12.5 7.50002C11.1193 7.50002 10 8.61931 10 10C10 11.3807 11.1193 12.5 12.5 12.5Z\"\n fill=\"${fg}\"\n />\n</svg>`;\n};\nvar headerUri = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n<path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.29 4.947a3.368 3.368 0 014.723.04 3.375 3.375 0 01.041 4.729l-.009.009-1.596 1.597a3.367 3.367 0 01-5.081-.364.71.71 0 011.136-.85 1.95 1.95 0 002.942.21l1.591-1.593a1.954 1.954 0 00-.027-2.733 1.95 1.95 0 00-2.732-.027l-.91.907a.709.709 0 11-1.001-1.007l.915-.911.007-.007z\" fill=\"${fg}\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6.55 8.678a3.368 3.368 0 015.082.364.71.71 0 01-1.136.85 1.95 1.95 0 00-2.942-.21l-1.591 1.593a1.954 1.954 0 00.027 2.733 1.95 1.95 0 002.73.028l.906-.906a.709.709 0 111.003 1.004l-.91.91-.008.01a3.368 3.368 0 01-4.724-.042 3.375 3.375 0 01-.041-4.728l.009-.009L6.55 8.678z\" fill=\"${fg}\"/>\n</svg>\n `;\n};\nvar renameIcon = (props) => {\n const bg = props.bgColor;\n return `${iconHead}\n <path stroke=\"${bg}\" stroke-width=\"2\" d=\"M12 3v14\"/>\n <path stroke=\"${bg}\" stroke-width=\"2\" stroke-linecap=\"round\" d=\"M10 4h4m-4 12h4\"/>\n <path d=\"M11 14h4a3 3 0 0 0 3-3V9a3 3 0 0 0-3-3h-4v2h4a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-4v2ZM9.5 8H5a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h4.5v2H5a3 3 0 0 1-3-3V9a3 3 0 0 1 3-3h4.5v2Z\" fill=\"${bg}\"/>\n </svg>\n`;\n};\nvar headerAudioUri = headerUri;\nvar headerVideoUri = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7 13.138a.5.5 0 00.748.434l5.492-3.138a.5.5 0 000-.868L7.748 6.427A.5.5 0 007 6.862v6.276z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerEmoji = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <path d=\"M10 5a5 5 0 1 0 0 10 5 5 0 0 0 0-10zm0 9.17A4.17 4.17 0 0 1 5.83 10 4.17 4.17 0 0 1 10 5.83 4.17 4.17 0 0 1 14.17 10 4.17 4.17 0 0 1 10 14.17z\" fill=\"${fg}\"/>\n <path d=\"M8.33 8.21a.83.83 0 1 0-.03 1.67.83.83 0 0 0 .03-1.67zm3.34 0a.83.83 0 1 0-.04 1.67.83.83 0 0 0 .04-1.67z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.53 13.9a2.82 2.82 0 0 1-5.06 0l.77-.38a1.97 1.97 0 0 0 3.52 0l.77.39z\" fill=\"${fg}\"/>\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2z\" fill=\"${bg}\"/>\n <path d=\"M10 4a6 6 0 1 0 0 12 6 6 0 0 0 0-12zm0 11a5 5 0 1 1 .01-10.01A5 5 0 0 1 10 15z\" fill=\"${fg}\"/>\n <path d=\"M8 7.86a1 1 0 1 0-.04 2 1 1 0 0 0 .04-2zm4 0a1 1 0 1 0-.04 2 1 1 0 0 0 .04-2z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12.53 11.9a2.82 2.82 0 0 1-5.06 0l.77-.38a1.97 1.97 0 0 0 3.52 0l.77.39z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerImage = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n <path opacity=\".5\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12.499 10.801a.5.5 0 01.835 0l2.698 4.098a.5.5 0 01-.418.775H10.22a.5.5 0 01-.417-.775l2.697-4.098z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.07 8.934a.5.5 0 01.824 0l4.08 5.958a.5.5 0 01-.412.782h-8.16a.5.5 0 01-.413-.782l4.08-5.958zM13.75 8.333a2.083 2.083 0 100-4.166 2.083 2.083 0 000 4.166z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerPhone = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <path fill=\"${fg}\" d=\"M3 3h14v14H3z\"/>\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2zm-7.24 9.78h1.23c.15 0 .27.06.36.18l.98 1.28a.43.43 0 0 1-.05.58l-1.2 1.21a.45.45 0 0 1-.6.04A6.72 6.72 0 0 1 7.33 10c0-.61.1-1.2.25-1.78a6.68 6.68 0 0 1 2.12-3.3.44.44 0 0 1 .6.04l1.2 1.2c.16.17.18.42.05.59l-.98 1.29a.43.43 0 0 1-.36.17H8.98A5.38 5.38 0 0 0 8.67 10c0 .62.11 1.23.3 1.79z\" fill=\"${bg}\"/>\n </svg>`;\n};\nvar headerMarkdown = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2z\" fill=\"${bg}\"/>\n <path d=\"m13.49 13.15-2.32-3.27h1.4V7h1.86v2.88h1.4l-2.34 3.27zM11 13H9v-3l-1.5 1.92L6 10v3H4V7h2l1.5 2L9 7h2v6z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerDate = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n <path d=\"M14.8 4.182h-.6V3H13v1.182H7V3H5.8v1.182h-.6c-.66 0-1.2.532-1.2 1.182v9.454C4 15.468 4.54 16 5.2 16h9.6c.66 0 1.2-.532 1.2-1.182V5.364c0-.65-.54-1.182-1.2-1.182zm0 10.636H5.2V7.136h9.6v7.682z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerTime = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2z\" fill=\"${bg}\"/>\n <path d=\"M10 4a6 6 0 0 0-6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0-6-6zm0 10.8A4.8 4.8 0 0 1 5.2 10a4.8 4.8 0 1 1 4.8 4.8z\" fill=\"${fg}\"/>\n <path d=\"M10 7H9v3.93L12.5 13l.5-.8-3-1.76V7z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerEmail = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10 8.643a1.357 1.357 0 100 2.714 1.357 1.357 0 000-2.714zM7.357 10a2.643 2.643 0 115.286 0 2.643 2.643 0 01-5.286 0z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.589 4.898A5.643 5.643 0 0115.643 10v.5a2.143 2.143 0 01-4.286 0V8a.643.643 0 011.286 0v2.5a.857.857 0 001.714 0V10a4.357 4.357 0 10-1.708 3.46.643.643 0 01.782 1.02 5.643 5.643 0 11-5.842-9.582z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerReference = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <rect x=\"2\" y=\"8\" width=\"10\" height=\"8\" rx=\"2\" fill=\"${bg}\"/>\n <rect x=\"8\" y=\"4\" width=\"10\" height=\"8\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M10.68 7.73V6l2.97 3.02-2.97 3.02v-1.77c-2.13 0-3.62.7-4.68 2.2.43-2.15 1.7-4.31 4.68-4.74z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerIfThenElse = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path fill=\"${fg}\" d=\"M4 3h12v14H4z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.6 2A1.6 1.6 0 002 3.6v12.8A1.6 1.6 0 003.6 18h12.8a1.6 1.6 0 001.6-1.6V3.6A1.6 1.6 0 0016.4 2H3.6zm11.3 10.8a.7.7 0 01.7.7v1.4a.7.7 0 01-.7.7h-1.4a.7.7 0 01-.7-.7v-1.4a.7.7 0 01.6-.693.117.117 0 00.1-.115V10.35a.117.117 0 00-.117-.116h-2.8a.117.117 0 00-.117.116v2.333c0 .064.053.117.117.117h.117a.7.7 0 01.7.7v1.4a.7.7 0 01-.7.7H9.3a.7.7 0 01-.7-.7v-1.4a.7.7 0 01.7-.7h.117a.117.117 0 00.117-.117V10.35a.117.117 0 00-.117-.117h-2.8a.117.117 0 00-.117.117v2.342c0 .058.042.106.1.115a.7.7 0 01.6.693v1.4a.7.7 0 01-.7.7H5.1a.7.7 0 01-.7-.7v-1.4a.7.7 0 01.7-.7h.35a.116.116 0 00.116-.117v-2.45c0-.515.418-.933.934-.933h2.917a.117.117 0 00.117-.117V6.85a.117.117 0 00-.117-.116h-2.45a.7.7 0 01-.7-.7V5.1a.7.7 0 01.7-.7h6.067a.7.7 0 01.7.7v.934a.7.7 0 01-.7.7h-2.45a.117.117 0 00-.118.116v2.333c0 .064.053.117.117.117H13.5c.516 0 .934.418.934.934v2.45c0 .063.052.116.116.116h.35z\" fill=\"${bg}\"/>\n</svg>`;\n};\nvar headerSingleValue = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M9.98 13.33c.45 0 .74-.3.73-.75l-.01-.1-.16-1.67 1.45 1.05a.81.81 0 0 0 .5.18c.37 0 .72-.32.72-.76 0-.3-.17-.54-.49-.68l-1.63-.77 1.63-.77c.32-.14.49-.37.49-.67 0-.45-.34-.76-.71-.76a.81.81 0 0 0-.5.18l-1.47 1.03.16-1.74.01-.08c.01-.46-.27-.76-.72-.76-.46 0-.76.32-.75.76l.01.08.16 1.74-1.47-1.03a.77.77 0 0 0-.5-.18.74.74 0 0 0-.72.76c0 .3.17.53.49.67l1.63.77-1.62.77c-.32.14-.5.37-.5.68 0 .44.35.75.72.75a.78.78 0 0 0 .5-.17L9.4 10.8l-.16 1.68v.09c-.02.44.28.75.74.75z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerLookup = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M8 5.83H5.83a.83.83 0 0 0 0 1.67h1.69A4.55 4.55 0 0 1 8 5.83zm-.33 3.34H5.83a.83.83 0 0 0 0 1.66h2.72a4.57 4.57 0 0 1-.88-1.66zM5.83 12.5a.83.83 0 0 0 0 1.67h7.5a.83.83 0 1 0 0-1.67h-7.5zm8.8-2.9a3.02 3.02 0 0 0 .46-1.6c0-1.66-1.32-3-2.94-3C10.52 5 9.2 6.34 9.2 8s1.31 3 2.93 3c.58 0 1.11-.17 1.56-.47l2.04 2.08.93-.94-2.04-2.08zm-2.48.07c-.9 0-1.63-.75-1.63-1.67s.73-1.67 1.63-1.67c.9 0 1.63.75 1.63 1.67s-.73 1.67-1.63 1.67z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerTextTemplate = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M7.676 4.726V3l2.976 3.021-2.976 3.022v-1.77c-2.125 0-3.613.69-4.676 2.201.425-2.158 1.7-4.316 4.676-4.748zM10.182 14.4h3.636l.655 1.6H16l-3.454-8h-1.091L8 16h1.527l.655-1.6zM12 9.44l1.36 3.65h-2.72L12 9.44z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerMath = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.167 5.417a.833.833 0 100 1.666h4.166a.833.833 0 100-1.666H4.167z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.083 4.167a.833.833 0 10-1.666 0v4.166a.833.833 0 101.666 0V4.167zM11.667 5.417a.833.833 0 100 1.666h4.166a.833.833 0 100-1.666h-4.166zM5.367 11.688a.833.833 0 00-1.179 1.179l2.947 2.946a.833.833 0 001.178-1.178l-2.946-2.947z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.313 12.867a.833.833 0 10-1.178-1.179l-2.947 2.947a.833.833 0 101.179 1.178l2.946-2.946z\" fill=\"${fg}\"/>\n <path d=\"M10.833 12.5c0-.46.373-.833.834-.833h4.166a.833.833 0 110 1.666h-4.166a.833.833 0 01-.834-.833zM10.833 15c0-.46.373-.833.834-.833h4.166a.833.833 0 110 1.666h-4.166a.833.833 0 01-.834-.833z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerRollup = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2z\" fill=\"${bg}\"/>\n <path d=\"M10 8.84a1.16 1.16 0 1 0 0 2.32 1.16 1.16 0 0 0 0-2.32zm3.02 3.61a3.92 3.92 0 0 0 .78-3.28.49.49 0 1 0-.95.2c.19.87-.02 1.78-.58 2.47a2.92 2.92 0 1 1-4.13-4.08 2.94 2.94 0 0 1 2.43-.62.49.49 0 1 0 .17-.96 3.89 3.89 0 1 0 2.28 6.27zM10 4.17a5.84 5.84 0 0 0-5.44 7.93.49.49 0 1 0 .9-.35 4.86 4.86 0 1 1 2.5 2.67.49.49 0 1 0-.4.88c.76.35 1.6.54 2.44.53a5.83 5.83 0 0 0 0-11.66zm3.02 3.5a.7.7 0 1 0-1.4 0 .7.7 0 0 0 1.4 0zm-6.97 5.35a.7.7 0 1 1 0 1.4.7.7 0 0 1 0-1.4z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerJoinStrings = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M12.4 13.565c1.865-.545 3.645-2.083 3.645-4.396 0-1.514-.787-2.604-2.071-2.604C12.69 6.565 12 7.63 12 8.939c1.114.072 1.865.726 1.865 1.683 0 .933-.8 1.647-1.84 2.023l.375.92zM4 5h6v2H4zM4 9h5v2H4zM4 13h4v2H4z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerSplitString = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M12.4 13.56c1.86-.54 3.65-2.08 3.65-4.4 0-1.5-.8-2.6-2.08-2.6S12 7.64 12 8.95c1.11.07 1.86.73 1.86 1.68 0 .94-.8 1.65-1.83 2.03l.37.91zM4 5h6v2H4zm0 4h5v2H4zm0 4h4v2H4z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerGeoDistance = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n <path d=\"M10 7a1 1 0 100-2v2zm0 6a1 1 0 100 2v-2zm0-8H7v2h3V5zm-3 6h5V9H7v2zm5 2h-2v2h2v-2zm1-1a1 1 0 01-1 1v2a3 3 0 003-3h-2zm-1-1a1 1 0 011 1h2a3 3 0 00-3-3v2zM4 8a3 3 0 003 3V9a1 1 0 01-1-1H4zm3-3a3 3 0 00-3 3h2a1 1 0 011-1V5z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.856 12.014a.5.5 0 00-.712.702L5.409 14l-1.265 1.284a.5.5 0 00.712.702l1.255-1.274 1.255 1.274a.5.5 0 00.712-.702L6.813 14l1.265-1.284a.5.5 0 00-.712-.702L6.11 13.288l-1.255-1.274zM12.856 4.014a.5.5 0 00-.712.702L13.409 6l-1.265 1.284a.5.5 0 10.712.702l1.255-1.274 1.255 1.274a.5.5 0 10.712-.702L14.813 6l1.265-1.284a.5.5 0 00-.712-.702L14.11 5.288l-1.255-1.274z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerArray = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.25 7.25a.75.75 0 000-1.5h-6.5a.75.75 0 100 1.5h6.5zM15 10a.75.75 0 01-.75.75h-6.5a.75.75 0 010-1.5h6.5A.75.75 0 0115 10zm-.75 4.25a.75.75 0 000-1.5h-6.5a.75.75 0 000 1.5h6.5zm-8.987-7a.75.75 0 100-1.5.75.75 0 000 1.5zm.75 2.75a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm-.75 4.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar rowOwnerOverlay = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n <svg width=\"18\" height=\"18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 15v1h14v-2.5c0-.87-.44-1.55-.98-2.04a6.19 6.19 0 0 0-1.9-1.14 12.1 12.1 0 0 0-2.48-.67A4 4 0 1 0 5 6a4 4 0 0 0 2.36 3.65c-.82.13-1.7.36-2.48.67-.69.28-1.37.65-1.9 1.13A2.8 2.8 0 0 0 2 13.5V15z\" fill=\"${bg}\" stroke=\"${fg}\" stroke-width=\"2\"/>\n </svg>`;\n};\nvar protectedColumnOverlay = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n <svg width=\"18\" height=\"18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12.43 6.04v-.18a3.86 3.86 0 0 0-7.72 0v.18A2.15 2.15 0 0 0 3 8.14v5.72C3 15.04 3.96 16 5.14 16H12c1.18 0 2.14-.96 2.14-2.14V8.14c0-1.03-.73-1.9-1.71-2.1zM7.86 6v-.14a.71.71 0 1 1 1.43 0V6H7.86z\" fill=\"${bg}\" stroke=\"${fg}\" stroke-width=\"2\"/>\n </svg>\n`;\n};\nvar sprites = {\n headerRowID,\n headerNumber,\n headerCode,\n headerString,\n headerBoolean,\n headerAudioUri,\n headerVideoUri,\n headerEmoji,\n headerImage,\n headerUri,\n headerPhone,\n headerMarkdown,\n headerDate,\n headerTime,\n headerEmail,\n headerReference,\n headerIfThenElse,\n headerSingleValue,\n headerLookup,\n headerTextTemplate,\n headerMath,\n headerRollup,\n headerJoinStrings,\n headerSplitString,\n headerGeoDistance,\n headerArray,\n rowOwnerOverlay,\n protectedColumnOverlay,\n renameIcon\n};\n\n// src/data-grid/data-grid-sprites.ts\nfunction getColors(variant, theme) {\n if (variant === \"normal\") {\n return [theme.bgIconHeader, theme.fgIconHeader];\n } else if (variant === \"selected\") {\n return [\"white\", theme.accentColor];\n } else {\n return [theme.accentColor, theme.bgHeader];\n }\n}\nvar SpriteManager = class {\n constructor(headerIcons, onSettled) {\n this.spriteMap = /* @__PURE__ */ new Map();\n this.inFlight = 0;\n this.onSettled = onSettled;\n this.headerIcons = {\n ...sprites,\n ...headerIcons\n };\n }\n drawSprite(sprite, variant, ctx, x, y, size, theme, alpha = 1) {\n const [bgColor, fgColor] = getColors(variant, theme);\n const rSize = size * Math.ceil(window.devicePixelRatio);\n const key = `${bgColor}_${fgColor}_${rSize}_${sprite}`;\n let spriteCanvas = this.spriteMap.get(key);\n if (spriteCanvas === void 0) {\n const spriteCb = this.headerIcons[sprite];\n if (spriteCb === void 0)\n return;\n spriteCanvas = document.createElement(\"canvas\");\n const spriteCtx = spriteCanvas.getContext(\"2d\");\n if (spriteCtx === null)\n return;\n const imgSource = new Image();\n imgSource.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(spriteCb({ fgColor, bgColor }))}`;\n this.spriteMap.set(key, spriteCanvas);\n const promise = imgSource.decode();\n if (promise === void 0)\n return;\n this.inFlight++;\n promise.then(() => {\n spriteCtx.drawImage(imgSource, 0, 0, rSize, rSize);\n }).finally(() => {\n this.inFlight--;\n if (this.inFlight === 0) {\n this.onSettled();\n }\n });\n } else {\n if (alpha < 1) {\n ctx.globalAlpha = alpha;\n }\n ctx.drawImage(spriteCanvas, 0, 0, rSize, rSize, x, y, size, size);\n if (alpha < 1) {\n ctx.globalAlpha = 1;\n }\n }\n }\n};\n\n// src/data-grid/data-grid.tsx\nimport clamp2 from \"lodash/clamp.js\";\nimport makeRange from \"lodash/range.js\";\n\n// src/data-grid/data-grid-render.tsx\nimport groupBy from \"lodash/groupBy.js\";\n\n// src/data-grid/color-parser.ts\nvar cache = {};\nvar div = null;\nfunction createDiv() {\n const d = document.createElement(\"div\");\n d.style.opacity = \"0\";\n d.style.pointerEvents = \"none\";\n d.style.position = \"fixed\";\n document.body.append(d);\n return d;\n}\nfunction parseToRgba(color) {\n const normalizedColor = color.toLowerCase().trim();\n if (cache[normalizedColor] !== void 0)\n return cache[normalizedColor];\n div = div || createDiv();\n div.style.color = \"#000\";\n div.style.color = normalizedColor;\n const control = getComputedStyle(div).color;\n div.style.color = \"#fff\";\n div.style.color = normalizedColor;\n const computedColor = getComputedStyle(div).color;\n if (computedColor !== control)\n return [0, 0, 0, 1];\n let result = computedColor.replace(/[^\\d.,]/g, \"\").split(\",\").map(Number.parseFloat);\n if (result.length < 4) {\n result.push(1);\n }\n result = result.map((x) => {\n const isNaN = Number.isNaN(x);\n if (isNaN) {\n console.warn(\"Could not parse color\", color);\n }\n return isNaN ? 0 : x;\n });\n cache[normalizedColor] = result;\n return result;\n}\nfunction withAlpha(color, alpha) {\n const [r, g, b] = parseToRgba(color);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\nfunction blend(color, background) {\n if (background === void 0)\n return color;\n const [r, g, b, a] = parseToRgba(color);\n if (a === 1)\n return color;\n const [br, bg, bb, ba] = parseToRgba(background);\n const ao = a + ba * (1 - a);\n const ro = (a * r + ba * br * (1 - a)) / ao;\n const go = (a * g + ba * bg * (1 - a)) / ao;\n const bo = (a * b + ba * bb * (1 - a)) / ao;\n return `rgba(${ro}, ${go}, ${bo}, ${ao})`;\n}\nfunction interpolateColors(leftColor, rightColor, val) {\n if (val <= 0)\n return leftColor;\n if (val >= 1)\n return rightColor;\n const left = [...parseToRgba(leftColor)];\n left[0] = left[0] * left[3];\n left[1] = left[1] * left[3];\n left[2] = left[2] * left[3];\n const right = [...parseToRgba(rightColor)];\n right[0] = right[0] * right[3];\n right[1] = right[1] * right[3];\n right[2] = right[2] * right[3];\n const hScaler = val;\n const nScaler = 1 - val;\n const a = left[3] * nScaler + right[3] * hScaler;\n const r = Math.floor((left[0] * nScaler + right[0] * hScaler) / a);\n const g = Math.floor((left[1] * nScaler + right[1] * hScaler) / a);\n const b = Math.floor((left[2] * nScaler + right[2] * hScaler) / a);\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n\n// src/data-grid/data-grid-render.tsx\nvar loadingCell = {\n kind: GridCellKind.Loading,\n allowOverlay: false\n};\nfunction drawCell(ctx, row, cell, col, x, y, w, h, highlighted, theme, drawCustomCell, imageLoader, spriteManager, hoverAmount, hoverInfo, hyperWrapping, frameTime, lastPrep, enqueue, getCellRenderer) {\n let hoverX;\n let hoverY;\n if (hoverInfo !== void 0 && hoverInfo[0][0] === col && hoverInfo[0][1] === row) {\n hoverX = hoverInfo[1][0];\n hoverY = hoverInfo[1][1];\n }\n let result = void 0;\n const args = {\n ctx,\n theme,\n col,\n row,\n cell,\n rect: { x, y, width: w, height: h },\n highlighted,\n hoverAmount,\n hoverX,\n hoverY,\n imageLoader,\n spriteManager,\n hyperWrapping,\n requestAnimationFrame: () => {\n forceAnim = true;\n }\n };\n let forceAnim = false;\n const needsAnim = drawWithLastUpdate(args, cell.lastUpdated, frameTime, lastPrep, () => {\n var _a, _b;\n const drawn = isInnerOnlyCell(cell) ? false : (drawCustomCell == null ? void 0 : drawCustomCell(args)) === true;\n if (!drawn) {\n const r = getCellRenderer(cell);\n if (r !== void 0) {\n if ((lastPrep == null ? void 0 : lastPrep.renderer) !== r) {\n (_a = lastPrep == null ? void 0 : lastPrep.deprep) == null ? void 0 : _a.call(lastPrep, args);\n lastPrep = void 0;\n }\n const partialPrepResult = (_b = r.drawPrep) == null ? void 0 : _b.call(r, args, lastPrep);\n r.draw(args, cell);\n result = {\n deprep: partialPrepResult == null ? void 0 : partialPrepResult.deprep,\n fillStyle: partialPrepResult == null ? void 0 : partialPrepResult.fillStyle,\n font: partialPrepResult == null ? void 0 : partialPrepResult.font,\n renderer: r\n };\n }\n }\n });\n if (needsAnim || forceAnim)\n enqueue == null ? void 0 : enqueue([col, row]);\n return result;\n}\nfunction blitLastFrame(ctx, canvas, last, cellXOffset, cellYOffset, translateX, translateY, lastRowSticky, width, height, rows, totalHeaderHeight, dpr, mappedColumns, effectiveCols, getRowHeight, doubleBuffer) {\n const drawRegions = [];\n let blittedYOnly = false;\n ctx.imageSmoothingEnabled = false;\n const minY = Math.min(last.cellYOffset, cellYOffset);\n const maxY = Math.max(last.cellYOffset, cellYOffset);\n let deltaY = 0;\n if (typeof getRowHeight === \"number\") {\n deltaY += (maxY - minY) * getRowHeight;\n } else {\n for (let i = minY; i < maxY; i++) {\n deltaY += getRowHeight(i);\n }\n }\n if (cellYOffset > last.cellYOffset) {\n deltaY = -deltaY;\n }\n deltaY += translateY - last.translateY;\n const minX = Math.min(last.cellXOffset, cellXOffset);\n const maxX = Math.max(last.cellXOffset, cellXOffset);\n let deltaX = 0;\n for (let i = minX; i < maxX; i++) {\n deltaX += mappedColumns[i].width;\n }\n if (cellXOffset > last.cellXOffset) {\n deltaX = -deltaX;\n }\n deltaX += translateX - last.translateX;\n let stickyWidth = getStickyWidth(effectiveCols);\n if (stickyWidth > 0)\n stickyWidth++;\n if (deltaX !== 0 && deltaY !== 0) {\n return {\n regions: [],\n yOnly: false\n };\n }\n const stickyRowHeight = lastRowSticky ? typeof getRowHeight === \"number\" ? getRowHeight : getRowHeight(rows - 1) : 0;\n const blitWidth = width - stickyWidth - Math.abs(deltaX);\n const blitHeight = height - totalHeaderHeight - stickyRowHeight - Math.abs(deltaY) - 1;\n if (blitWidth > 150 && blitHeight > 150) {\n blittedYOnly = deltaX === 0;\n const args = {\n sx: 0,\n sy: 0,\n sw: width * dpr,\n sh: height * dpr,\n dx: 0,\n dy: 0,\n dw: width * dpr,\n dh: height * dpr\n };\n if (deltaY > 0) {\n args.sy = (totalHeaderHeight + 1) * dpr;\n args.sh = blitHeight * dpr;\n args.dy = (deltaY + totalHeaderHeight + 1) * dpr;\n args.dh = blitHeight * dpr;\n drawRegions.push({\n x: 0,\n y: totalHeaderHeight,\n width,\n height: deltaY + 1\n });\n } else if (deltaY < 0) {\n args.sy = (-deltaY + totalHeaderHeight + 1) * dpr;\n args.sh = blitHeight * dpr;\n args.dy = (totalHeaderHeight + 1) * dpr;\n args.dh = blitHeight * dpr;\n drawRegions.push({\n x: 0,\n y: height + deltaY - stickyRowHeight,\n width,\n height: -deltaY + stickyRowHeight\n });\n }\n if (deltaX > 0) {\n args.sx = stickyWidth * dpr;\n args.sw = blitWidth * dpr;\n args.dx = (deltaX + stickyWidth) * dpr;\n args.dw = blitWidth * dpr;\n drawRegions.push({\n x: stickyWidth - 1,\n y: 0,\n width: deltaX + 2,\n // extra width to account for first col not drawing a left side border\n height\n });\n } else if (deltaX < 0) {\n args.sx = (stickyWidth - deltaX) * dpr;\n args.sw = blitWidth * dpr;\n args.dx = stickyWidth * dpr;\n args.dw = blitWidth * dpr;\n drawRegions.push({\n x: width + deltaX,\n y: 0,\n width: -deltaX,\n height\n });\n }\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n if (stickyWidth > 0 && deltaX !== 0 && deltaY === 0 && doubleBuffer) {\n ctx.drawImage(canvas, 0, 0, stickyWidth * dpr, height * dpr, 0, 0, stickyWidth * dpr, height * dpr);\n }\n ctx.drawImage(canvas, args.sx, args.sy, args.sw, args.sh, args.dx, args.dy, args.dw, args.dh);\n ctx.scale(dpr, dpr);\n }\n ctx.imageSmoothingEnabled = true;\n return {\n regions: drawRegions,\n yOnly: blittedYOnly\n };\n}\nfunction blitResizedCol(last, cellXOffset, cellYOffset, translateX, translateY, width, height, totalHeaderHeight, effectiveCols, resizedIndex) {\n const drawRegions = [];\n if (cellXOffset !== last.cellXOffset || cellYOffset !== last.cellYOffset || translateX !== last.translateX || translateY !== last.translateY) {\n return drawRegions;\n }\n walkColumns(effectiveCols, cellYOffset, translateX, translateY, totalHeaderHeight, (c, drawX, _drawY, clipX) => {\n if (c.sourceIndex === resizedIndex) {\n const x = Math.max(drawX, clipX) + 1;\n drawRegions.push({\n x,\n y: 0,\n width: width - x,\n height\n });\n return true;\n }\n });\n return drawRegions;\n}\nfunction drawGridLines(ctx, effectiveCols, cellYOffset, translateX, translateY, width, height, drawRegions, spans, groupHeaderHeight, totalHeaderHeight, getRowHeight, getRowThemeOverride, verticalBorder, trailingRowType, rows, theme, verticalOnly = false) {\n var _a, _b, _c;\n if (spans !== void 0) {\n ctx.beginPath();\n ctx.save();\n ctx.rect(0, 0, width, height);\n for (const span of spans) {\n ctx.rect(span.x + 1, span.y + 1, span.width - 1, span.height - 1);\n }\n ctx.clip(\"evenodd\");\n }\n const hColor = (_a = theme.horizontalBorderColor) != null ? _a : theme.borderColor;\n const vColor = theme.borderColor;\n let minX = 0;\n let maxX = width;\n let minY = 0;\n let maxY = height;\n if (drawRegions !== void 0 && drawRegions.length > 0) {\n minX = Number.MAX_SAFE_INTEGER;\n minY = Number.MAX_SAFE_INTEGER;\n maxX = Number.MIN_SAFE_INTEGER;\n maxY = Number.MIN_SAFE_INTEGER;\n for (const r of drawRegions) {\n minX = Math.min(minX, r.x - 1);\n maxX = Math.max(maxX, r.x + r.width + 1);\n minY = Math.min(minY, r.y - 1);\n maxY = Math.max(maxY, r.y + r.height + 1);\n }\n }\n const toDraw = [];\n ctx.beginPath();\n let x = 0.5;\n for (let index = 0; index < effectiveCols.length; index++) {\n const c = effectiveCols[index];\n if (c.width === 0)\n continue;\n x += c.width;\n const tx = c.sticky ? x : x + translateX;\n if (tx >= minX && tx <= maxX && verticalBorder(index + 1)) {\n toDraw.push({\n x1: tx,\n y1: Math.max(groupHeaderHeight, minY),\n x2: tx,\n y2: Math.min(height, maxY),\n color: vColor\n });\n }\n }\n const stickyHeight = getRowHeight(rows - 1);\n const stickyRowY = height - stickyHeight + 0.5;\n const lastRowSticky = trailingRowType === \"sticky\";\n if (lastRowSticky) {\n toDraw.push({ x1: minX, y1: stickyRowY, x2: maxX, y2: stickyRowY, color: hColor });\n }\n if (verticalOnly !== true) {\n let y = totalHeaderHeight + 0.5;\n let row = cellYOffset;\n const target = lastRowSticky ? height - stickyHeight : height;\n while (y + translateY <= target) {\n const ty = y + translateY;\n if (ty >= minY && ty <= maxY - 1 && (!lastRowSticky || row !== rows - 1 || Math.abs(ty - stickyRowY) > 1)) {\n const rowTheme = getRowThemeOverride == null ? void 0 : getRowThemeOverride(row);\n toDraw.push({\n x1: minX,\n y1: ty,\n x2: maxX,\n y2: ty,\n color: (_c = (_b = rowTheme == null ? void 0 : rowTheme.horizontalBorderColor) != null ? _b : rowTheme == null ? void 0 : rowTheme.borderColor) != null ? _c : hColor\n });\n }\n y += getRowHeight(row);\n row++;\n }\n }\n const groups = groupBy(toDraw, (line) => line.color);\n for (const g of Object.keys(groups)) {\n ctx.strokeStyle = g;\n for (const line of groups[g]) {\n ctx.moveTo(line.x1, line.y1);\n ctx.lineTo(line.x2, line.y2);\n }\n ctx.stroke();\n ctx.beginPath();\n }\n if (spans !== void 0) {\n ctx.restore();\n }\n}\nfunction getActionBoundsForGroup(box, actions) {\n const result = [];\n let x = box.x + box.width - 26 * actions.length;\n const y = box.y + box.height / 2 - 13;\n const height = 26;\n const width = 26;\n for (let i = 0; i < actions.length; i++) {\n result.push({\n x,\n y,\n width,\n height\n });\n x += 26;\n }\n return result;\n}\nfunction pointInRect(rect, x, y) {\n return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;\n}\nfunction drawGroups(ctx, effectiveCols, width, translateX, groupHeaderHeight, hovered, theme, spriteManager, _hoverValues, verticalBorder, getGroupDetails, damage) {\n var _a;\n const xPad = 8;\n const [hCol, hRow] = (_a = hovered == null ? void 0 : hovered[0]) != null ? _a : [];\n let finalX = 0;\n walkGroups(effectiveCols, width, translateX, groupHeaderHeight, (span, groupName, x, y, w, h) => {\n var _a2, _b;\n if (damage !== void 0 && !damage.some((d) => d[1] === -2 && d[0] >= span[0] && d[0] <= span[1]))\n return;\n ctx.save();\n ctx.beginPath();\n ctx.rect(x, y, w, h);\n ctx.clip();\n const group = getGroupDetails(groupName);\n const groupTheme = (group == null ? void 0 : group.overrideTheme) === void 0 ? theme : { ...theme, ...group.overrideTheme };\n const isHovered = hRow === -2 && hCol !== void 0 && hCol >= span[0] && hCol <= span[1];\n const fillColor = isHovered ? groupTheme.bgHeaderHovered : groupTheme.bgHeader;\n if (fillColor !== theme.bgHeader) {\n ctx.fillStyle = fillColor;\n ctx.fill();\n }\n ctx.fillStyle = (_a2 = groupTheme.textGroupHeader) != null ? _a2 : groupTheme.textHeader;\n if (group !== void 0) {\n let drawX = x;\n if (group.icon !== void 0) {\n spriteManager.drawSprite(\n group.icon,\n \"normal\",\n ctx,\n drawX + xPad,\n (groupHeaderHeight - 20) / 2,\n 20,\n groupTheme\n );\n drawX += 26;\n }\n ctx.fillText(\n group.name,\n drawX + xPad,\n groupHeaderHeight / 2 + getMiddleCenterBias(ctx, `${theme.headerFontStyle} ${theme.fontFamily}`)\n );\n if (group.actions !== void 0 && isHovered) {\n const actionBoxes = getActionBoundsForGroup({ x, y, width: w, height: h }, group.actions);\n ctx.beginPath();\n const fadeStartX = actionBoxes[0].x - 10;\n const fadeWidth = x + w - fadeStartX;\n ctx.rect(fadeStartX, 0, fadeWidth, groupHeaderHeight);\n const grad = ctx.createLinearGradient(fadeStartX, 0, fadeStartX + fadeWidth, 0);\n const trans = withAlpha(fillColor, 0);\n grad.addColorStop(0, trans);\n grad.addColorStop(10 / fadeWidth, fillColor);\n grad.addColorStop(1, fillColor);\n ctx.fillStyle = grad;\n ctx.fill();\n ctx.globalAlpha = 0.6;\n const [mouseX, mouseY] = (_b = hovered == null ? void 0 : hovered[1]) != null ? _b : [-1, -1];\n for (let i = 0; i < group.actions.length; i++) {\n const action = group.actions[i];\n const box = actionBoxes[i];\n const actionHovered = pointInRect(box, mouseX + x, mouseY);\n if (actionHovered) {\n ctx.globalAlpha = 1;\n }\n spriteManager.drawSprite(\n action.icon,\n \"normal\",\n ctx,\n box.x + box.width / 2 - 10,\n box.y + box.height / 2 - 10,\n 20,\n groupTheme\n );\n if (actionHovered) {\n ctx.globalAlpha = 0.6;\n }\n }\n ctx.globalAlpha = 1;\n }\n }\n if (x !== 0 && verticalBorder(span[0])) {\n ctx.beginPath();\n ctx.moveTo(x + 0.5, 0);\n ctx.lineTo(x + 0.5, groupHeaderHeight);\n ctx.strokeStyle = theme.borderColor;\n ctx.lineWidth = 1;\n ctx.stroke();\n }\n ctx.restore();\n finalX = x + w;\n });\n ctx.beginPath();\n ctx.moveTo(finalX + 0.5, 0);\n ctx.lineTo(finalX + 0.5, groupHeaderHeight);\n ctx.moveTo(0, groupHeaderHeight + 0.5);\n ctx.lineTo(width, groupHeaderHeight + 0.5);\n ctx.strokeStyle = theme.borderColor;\n ctx.lineWidth = 1;\n ctx.stroke();\n}\nvar menuButtonSize = 30;\nfunction getHeaderMenuBounds(x, y, width, height, isRtl) {\n if (isRtl)\n return { x, y, width: menuButtonSize, height: Math.min(menuButtonSize, height) };\n return {\n x: x + width - menuButtonSize,\n // right align\n y: Math.max(y, y + height / 2 - menuButtonSize / 2),\n // center vertically\n width: menuButtonSize,\n height: Math.min(menuButtonSize, height)\n };\n}\nfunction drawHeader(ctx, x, y, width, height, c, selected, theme, isHovered, hasSelectedCell, hoverAmount, spriteManager, drawHeaderCallback, touchMode) {\n const isCheckboxHeader = c.title.startsWith(headerCellCheckboxPrefix);\n const isRtl = direction(c.title) === \"rtl\";\n const menuBounds = getHeaderMenuBounds(x, y, width, height, isRtl);\n if (drawHeaderCallback !== void 0) {\n let passCol = c;\n if (isCheckboxHeader) {\n passCol = {\n ...c,\n title: \"\"\n };\n }\n if (drawHeaderCallback({\n ctx,\n theme,\n rect: { x, y, width, height },\n column: passCol,\n columnIndex: passCol.sourceIndex,\n isSelected: selected,\n hoverAmount,\n isHovered,\n hasSelectedCell,\n spriteManager,\n menuBounds\n })) {\n return;\n }\n }\n if (isCheckboxHeader) {\n let checked = void 0;\n if (c.title === headerCellCheckedMarker)\n checked = true;\n if (c.title === headerCellUnheckedMarker)\n checked = false;\n if (checked !== true) {\n ctx.globalAlpha = hoverAmount;\n }\n drawCheckbox(ctx, theme, checked, x, y, width, height, false, void 0, void 0, 18);\n if (checked !== true) {\n ctx.globalAlpha = 1;\n }\n return;\n }\n const xPad = theme.cellHorizontalPadding;\n const fillStyle = selected ? theme.textHeaderSelected : theme.textHeader;\n const shouldDrawMenu = c.hasMenu === true && (isHovered || touchMode && selected);\n const dirScalar = isRtl ? -1 : 1;\n let drawX = isRtl ? x + width - xPad : x + xPad;\n if (c.icon !== void 0) {\n let variant = selected ? \"selected\" : \"normal\";\n if (c.style === \"highlight\") {\n variant = selected ? \"selected\" : \"special\";\n }\n const headerSize = theme.headerIconSize;\n spriteManager.drawSprite(\n c.icon,\n variant,\n ctx,\n isRtl ? drawX - headerSize : drawX,\n y + (height - headerSize) / 2,\n headerSize,\n theme\n );\n if (c.overlayIcon !== void 0) {\n spriteManager.drawSprite(\n c.overlayIcon,\n selected ? \"selected\" : \"special\",\n ctx,\n isRtl ? drawX - headerSize + 9 : drawX + 9,\n y + ((height - 18) / 2 + 6),\n 18,\n theme\n );\n }\n drawX += Math.ceil(headerSize * 1.3) * dirScalar;\n }\n if (shouldDrawMenu && c.hasMenu === true && width > 35) {\n const fadeWidth = 35;\n const fadeStart = isRtl ? fadeWidth : width - fadeWidth;\n const fadeEnd = isRtl ? fadeWidth * 0.7 : width - fadeWidth * 0.7;\n const fadeStartPercent = fadeStart / width;\n const fadeEndPercent = fadeEnd / width;\n const grad = ctx.createLinearGradient(x, 0, x + width, 0);\n const trans = withAlpha(fillStyle, 0);\n grad.addColorStop(isRtl ? 1 : 0, fillStyle);\n grad.addColorStop(fadeStartPercent, fillStyle);\n grad.addColorStop(fadeEndPercent, trans);\n grad.addColorStop(isRtl ? 0 : 1, trans);\n ctx.fillStyle = grad;\n } else {\n ctx.fillStyle = fillStyle;\n }\n if (isRtl) {\n ctx.textAlign = \"right\";\n }\n ctx.fillText(\n c.title,\n drawX,\n y + height / 2 + getMiddleCenterBias(ctx, `${theme.headerFontStyle} ${theme.fontFamily}`)\n );\n if (isRtl) {\n ctx.textAlign = \"left\";\n }\n if (shouldDrawMenu && c.hasMenu === true) {\n ctx.beginPath();\n const triangleX = menuBounds.x + menuBounds.width / 2 - 5.5;\n const triangleY = menuBounds.y + menuBounds.height / 2 - 3;\n roundedPoly(\n ctx,\n [\n {\n x: triangleX,\n y: triangleY\n },\n {\n x: triangleX + 11,\n y: triangleY\n },\n {\n x: triangleX + 5.5,\n y: triangleY + 6\n }\n ],\n 1\n );\n ctx.fillStyle = fillStyle;\n ctx.fill();\n }\n}\nfunction drawGridHeaders(ctx, effectiveCols, enableGroups, hovered, width, translateX, headerHeight, groupHeaderHeight, dragAndDropState, isResizing, selection, outerTheme, spriteManager, hoverValues, verticalBorder, getGroupDetails, damage, drawHeaderCallback, touchMode) {\n var _a;\n const totalHeaderHeight = headerHeight + groupHeaderHeight;\n if (totalHeaderHeight <= 0)\n return;\n ctx.fillStyle = outerTheme.bgHeader;\n ctx.fillRect(0, 0, width, totalHeaderHeight);\n const [hCol, hRow] = (_a = hovered == null ? void 0 : hovered[0]) != null ? _a : [];\n const font = `${outerTheme.headerFontStyle} ${outerTheme.fontFamily}`;\n ctx.font = font;\n walkColumns(effectiveCols, 0, translateX, 0, totalHeaderHeight, (c, x, _y, clipX) => {\n var _a2, _b, _c;\n if (damage !== void 0 && !damage.some((d) => d[1] === -1 && d[0] === c.sourceIndex))\n return;\n const diff = Math.max(0, clipX - x);\n ctx.save();\n ctx.beginPath();\n ctx.rect(x + diff, groupHeaderHeight, c.width - diff, headerHeight);\n ctx.clip();\n const groupTheme = getGroupDetails((_a2 = c.group) != null ? _a2 : \"\").overrideTheme;\n const theme = c.themeOverride === void 0 && groupTheme === void 0 ? outerTheme : { ...outerTheme, ...groupTheme, ...c.themeOverride };\n if (theme.bgHeader !== outerTheme.bgHeader) {\n ctx.fillStyle = theme.bgHeader;\n ctx.fill();\n }\n const f = `${theme.headerFontStyle} ${theme.fontFamily}`;\n if (font !== f) {\n ctx.font = f;\n }\n const selected = selection.columns.hasIndex(c.sourceIndex);\n const noHover = dragAndDropState !== void 0 || isResizing;\n const hoveredBoolean = !noHover && hRow === -1 && hCol === c.sourceIndex;\n const hover = noHover ? 0 : (_c = (_b = hoverValues.find((s) => s.item[0] === c.sourceIndex && s.item[1] === -1)) == null ? void 0 : _b.hoverAmount) != null ? _c : 0;\n const hasSelectedCell = (selection == null ? void 0 : selection.current) !== void 0 && selection.current.cell[0] === c.sourceIndex;\n const bgFillStyle = selected ? theme.accentColor : hasSelectedCell ? theme.bgHeaderHasFocus : theme.bgHeader;\n const y = enableGroups ? groupHeaderHeight : 0;\n const xOffset = c.sourceIndex === 0 ? 0 : 1;\n if (selected) {\n ctx.fillStyle = bgFillStyle;\n ctx.fillRect(x + xOffset, y, c.width - xOffset, headerHeight);\n } else if (hasSelectedCell || hover > 0) {\n ctx.beginPath();\n ctx.rect(x + xOffset, y, c.width - xOffset, headerHeight);\n if (hasSelectedCell) {\n ctx.fillStyle = theme.bgHeaderHasFocus;\n ctx.fill();\n }\n if (hover > 0) {\n ctx.globalAlpha = hover;\n ctx.fillStyle = theme.bgHeaderHovered;\n ctx.fill();\n ctx.globalAlpha = 1;\n }\n }\n drawHeader(\n ctx,\n x,\n y,\n c.width,\n headerHeight,\n c,\n selected,\n theme,\n hoveredBoolean,\n hasSelectedCell,\n hover,\n spriteManager,\n drawHeaderCallback,\n touchMode\n );\n ctx.restore();\n });\n if (enableGroups) {\n drawGroups(\n ctx,\n effectiveCols,\n width,\n translateX,\n groupHeaderHeight,\n hovered,\n outerTheme,\n spriteManager,\n hoverValues,\n verticalBorder,\n getGroupDetails,\n damage\n );\n }\n}\nfunction intersectRect(x1, y1, w1, h1, x2, y2, w2, h2) {\n return x1 <= x2 + w2 && x2 <= x1 + w1 && y1 <= y2 + h2 && y2 <= y1 + h1;\n}\nfunction clipDamage(ctx, effectiveColumns, width, height, groupHeaderHeight, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, trailingRowType, damage, includeCells) {\n if (damage === void 0 || damage.length === 0)\n return;\n const stickyRowHeight = trailingRowType === \"sticky\" ? getRowHeight(rows - 1) : 0;\n ctx.beginPath();\n walkGroups(effectiveColumns, width, translateX, groupHeaderHeight, (span, _group, x, y, w, h) => {\n for (let i = 0; i < damage.length; i++) {\n const d = damage[i];\n if (d[1] === -2 && d[0] >= span[0] && d[0] <= span[1]) {\n ctx.rect(x, y, w, h);\n break;\n }\n }\n });\n walkColumns(\n effectiveColumns,\n cellYOffset,\n translateX,\n translateY,\n totalHeaderHeight,\n (c, drawX, colDrawY, clipX, startRow) => {\n const diff = Math.max(0, clipX - drawX);\n const finalX = drawX + diff + 1;\n const finalWidth = c.width - diff - 1;\n for (let i = 0; i < damage.length; i++) {\n const d = damage[i];\n if (d[0] === c.sourceIndex && (d[1] === -1 || d[1] === void 0)) {\n ctx.rect(finalX, groupHeaderHeight, finalWidth, totalHeaderHeight - groupHeaderHeight);\n break;\n }\n }\n if (!includeCells)\n return;\n walkRowsInCol(\n startRow,\n colDrawY,\n height,\n rows,\n getRowHeight,\n trailingRowType,\n (drawY, row, rh, isSticky) => {\n let isDamaged = false;\n for (let i = 0; i < damage.length; i++) {\n const d = damage[i];\n if (d[0] === c.sourceIndex && d[1] === row) {\n isDamaged = true;\n break;\n }\n }\n if (isDamaged) {\n const top = drawY + 1;\n const bottom = isSticky ? top + rh - 1 : Math.min(top + rh - 1, height - stickyRowHeight);\n const h = bottom - top;\n if (h > 0) {\n ctx.rect(finalX, top, finalWidth, h);\n }\n }\n }\n );\n }\n );\n ctx.clip();\n}\nfunction getSpanBounds(span, cellX, cellY, cellW, cellH, column, allColumns) {\n var _a, _b;\n const [startCol, endCol] = span;\n let frozenRect;\n let contentRect;\n const firstNonSticky = (_b = (_a = allColumns.find((x) => !x.sticky)) == null ? void 0 : _a.sourceIndex) != null ? _b : 0;\n if (endCol > firstNonSticky) {\n const renderFromCol = Math.max(startCol, firstNonSticky);\n let tempX = cellX;\n let tempW = cellW;\n for (let x = column.sourceIndex - 1; x >= renderFromCol; x--) {\n tempX -= allColumns[x].width;\n tempW += allColumns[x].width;\n }\n for (let x = column.sourceIndex + 1; x <= endCol; x++) {\n tempW += allColumns[x].width;\n }\n contentRect = {\n x: tempX,\n y: cellY,\n width: tempW,\n height: cellH\n };\n }\n if (firstNonSticky > startCol) {\n const renderToCol = Math.min(endCol, firstNonSticky - 1);\n let tempX = cellX;\n let tempW = cellW;\n for (let x = column.sourceIndex - 1; x >= startCol; x--) {\n tempX -= allColumns[x].width;\n tempW += allColumns[x].width;\n }\n for (let x = column.sourceIndex + 1; x <= renderToCol; x++) {\n tempW += allColumns[x].width;\n }\n frozenRect = {\n x: tempX,\n y: cellY,\n width: tempW,\n height: cellH\n };\n }\n return [frozenRect, contentRect];\n}\nfunction drawCells(ctx, effectiveColumns, allColumns, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, getCellContent, getGroupDetails, getRowThemeOverride, disabledRows, isFocused, drawFocus, trailingRowType, drawRegions, damage, selection, prelightCells, highlightRegions, drawCustomCell, imageLoader, spriteManager, hoverValues, hoverInfo, hyperWrapping, outerTheme, enqueue, getCellRenderer) {\n var _a;\n let toDraw = (_a = damage == null ? void 0 : damage.length) != null ? _a : Number.MAX_SAFE_INTEGER;\n const frameTime = performance.now();\n let font = `${outerTheme.baseFontStyle} ${outerTheme.fontFamily}`;\n ctx.font = font;\n let result;\n const handledSpans = /* @__PURE__ */ new Set();\n walkColumns(\n effectiveColumns,\n cellYOffset,\n translateX,\n translateY,\n totalHeaderHeight,\n (c, drawX, colDrawStartY, clipX, startRow) => {\n var _a2;\n const diff = Math.max(0, clipX - drawX);\n const colDrawX = drawX + diff;\n const colDrawY = totalHeaderHeight + 1;\n const colWidth = c.width - diff;\n const colHeight = height - totalHeaderHeight - 1;\n if (drawRegions.length > 0) {\n let found = false;\n for (let i = 0; i < drawRegions.length; i++) {\n const dr = drawRegions[i];\n if (intersectRect(colDrawX, colDrawY, colWidth, colHeight, dr.x, dr.y, dr.width, dr.height)) {\n found = true;\n break;\n }\n }\n if (!found)\n return;\n }\n const reclip = () => {\n ctx.save();\n ctx.beginPath();\n ctx.rect(colDrawX, colDrawY, colWidth, colHeight);\n ctx.clip();\n };\n const colSelected = selection.columns.hasIndex(c.sourceIndex);\n const groupTheme = getGroupDetails((_a2 = c.group) != null ? _a2 : \"\").overrideTheme;\n const colTheme = c.themeOverride === void 0 && groupTheme === void 0 ? outerTheme : { ...outerTheme, ...groupTheme, ...c.themeOverride };\n const colFont = `${colTheme.baseFontStyle} ${colTheme.fontFamily}`;\n if (colFont !== font) {\n font = colFont;\n ctx.font = colFont;\n }\n reclip();\n let prepResult = void 0;\n walkRowsInCol(\n startRow,\n colDrawStartY,\n height,\n rows,\n getRowHeight,\n trailingRowType,\n (drawY, row, rh, isSticky, isTrailingRow) => {\n var _a3, _b, _c, _d;\n if (row < 0)\n return;\n if (damage !== void 0) {\n let found = false;\n for (let i = 0; i < damage.length; i++) {\n const d = damage[i];\n if (d[0] === c.sourceIndex && d[1] === row) {\n found = true;\n break;\n }\n }\n if (!found)\n return;\n }\n if (drawRegions.length > 0) {\n let found = false;\n for (let i = 0; i < drawRegions.length; i++) {\n const dr = drawRegions[i];\n if (intersectRect(drawX, drawY, c.width, rh, dr.x, dr.y, dr.width, dr.height)) {\n found = true;\n break;\n }\n }\n if (!found)\n return;\n }\n const rowSelected = selection.rows.hasIndex(row);\n const rowDisabled = disabledRows.hasIndex(row);\n const cell = row < rows ? getCellContent([c.sourceIndex, row]) : loadingCell;\n let cellX = drawX;\n let cellWidth = c.width;\n let drawingSpan = false;\n let skipContents = false;\n if (cell.span !== void 0) {\n const [startCol, endCol] = cell.span;\n const spanKey = `${row},${startCol},${endCol},${c.sticky}`;\n if (!handledSpans.has(spanKey)) {\n const areas = getSpanBounds(cell.span, drawX, drawY, c.width, rh, c, allColumns);\n const area = c.sticky ? areas[0] : areas[1];\n if (!c.sticky && areas[0] !== void 0) {\n skipContents = true;\n }\n if (area !== void 0) {\n cellX = area.x;\n cellWidth = area.width;\n handledSpans.add(spanKey);\n ctx.restore();\n prepResult = void 0;\n ctx.save();\n ctx.beginPath();\n const d = Math.max(0, clipX - area.x);\n ctx.rect(area.x + d, drawY, area.width - d, rh);\n if (result === void 0) {\n result = [];\n }\n result.push({\n x: area.x + d,\n y: drawY,\n width: area.width - d,\n height: rh\n });\n ctx.clip();\n drawingSpan = true;\n }\n } else {\n toDraw--;\n return;\n }\n }\n const rowTheme = getRowThemeOverride == null ? void 0 : getRowThemeOverride(row);\n const trailingTheme = isTrailingRow && ((_a3 = c.trailingRowOptions) == null ? void 0 : _a3.themeOverride) !== void 0 ? (_b = c.trailingRowOptions) == null ? void 0 : _b.themeOverride : void 0;\n const theme = cell.themeOverride === void 0 && rowTheme === void 0 && trailingTheme === void 0 ? colTheme : { ...colTheme, ...rowTheme, ...trailingTheme, ...cell.themeOverride };\n ctx.beginPath();\n const cellIndex = [c.sourceIndex, row];\n const isSelected = cellIsSelected(cellIndex, cell, selection);\n let accentCount = cellIsInRange(cellIndex, cell, selection);\n const spanIsHighlighted = cell.span !== void 0 && selection.columns.some(\n (index) => cell.span !== void 0 && index >= cell.span[0] && index <= cell.span[1]\n );\n if (isSelected && !isFocused && drawFocus) {\n accentCount = 0;\n } else if (isSelected) {\n accentCount = Math.max(accentCount, 1);\n }\n if (spanIsHighlighted) {\n accentCount++;\n }\n if (!isSelected) {\n if (rowSelected)\n accentCount++;\n if (colSelected && !isSticky)\n accentCount++;\n }\n const bgCell = cell.kind === GridCellKind.Protected ? theme.bgCellMedium : theme.bgCell;\n let fill;\n if (isSticky || bgCell !== outerTheme.bgCell) {\n fill = blend(bgCell, fill);\n }\n if (accentCount > 0 || rowDisabled) {\n if (rowDisabled) {\n fill = blend(theme.bgHeader, fill);\n }\n for (let i = 0; i < accentCount; i++) {\n fill = blend(theme.accentLight, fill);\n }\n } else {\n if ((prelightCells == null ? void 0 : prelightCells.some((pre) => pre[0] === c.sourceIndex && pre[1] === row)) === true) {\n fill = blend(theme.bgSearchResult, fill);\n }\n }\n if (highlightRegions !== void 0) {\n for (const region of highlightRegions) {\n const r = region.range;\n if (r.x <= c.sourceIndex && c.sourceIndex < r.x + r.width && r.y <= row && row < r.y + r.height) {\n fill = blend(region.color, fill);\n }\n }\n }\n if (fill !== void 0) {\n ctx.fillStyle = fill;\n if (prepResult !== void 0) {\n prepResult.fillStyle = fill;\n }\n ctx.fillRect(cellX, drawY, cellWidth, rh);\n }\n if (cell.style === \"faded\") {\n ctx.globalAlpha = 0.6;\n }\n const hoverValue = hoverValues.find((hv) => hv.item[0] === c.sourceIndex && hv.item[1] === row);\n if (cellWidth > 10 && !skipContents) {\n const cellFont = `${theme.baseFontStyle} ${theme.fontFamily}`;\n if (cellFont !== font) {\n ctx.font = cellFont;\n font = cellFont;\n }\n prepResult = drawCell(\n ctx,\n row,\n cell,\n c.sourceIndex,\n cellX,\n drawY,\n cellWidth,\n rh,\n accentCount > 0,\n theme,\n drawCustomCell,\n imageLoader,\n spriteManager,\n (_c = hoverValue == null ? void 0 : hoverValue.hoverAmount) != null ? _c : 0,\n hoverInfo,\n hyperWrapping,\n frameTime,\n prepResult,\n enqueue,\n getCellRenderer\n );\n }\n if (cell.style === \"faded\") {\n ctx.globalAlpha = 1;\n }\n toDraw--;\n if (drawingSpan) {\n ctx.restore();\n (_d = prepResult == null ? void 0 : prepResult.deprep) == null ? void 0 : _d.call(prepResult, { ctx });\n prepResult = void 0;\n reclip();\n font = colFont;\n ctx.font = colFont;\n }\n return toDraw <= 0;\n }\n );\n ctx.restore();\n return toDraw <= 0;\n }\n );\n return result;\n}\nfunction drawBlanks(ctx, effectiveColumns, allColumns, width, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, getRowTheme, selectedRows, disabledRows, trailingRowType, drawRegions, damage, theme) {\n if (damage !== void 0 || effectiveColumns[effectiveColumns.length - 1] !== allColumns[effectiveColumns.length - 1])\n return;\n walkColumns(\n effectiveColumns,\n cellYOffset,\n translateX,\n translateY,\n totalHeaderHeight,\n (c, drawX, colDrawY, clipX, startRow) => {\n if (c !== effectiveColumns[effectiveColumns.length - 1])\n return;\n drawX += c.width;\n const x = Math.max(drawX, clipX);\n if (x > width)\n return;\n ctx.save();\n ctx.beginPath();\n ctx.rect(x, totalHeaderHeight + 1, 1e4, height - totalHeaderHeight - 1);\n ctx.clip();\n walkRowsInCol(\n startRow,\n colDrawY,\n height,\n rows,\n getRowHeight,\n trailingRowType,\n (drawY, row, rh, isSticky) => {\n if (!isSticky && drawRegions.length > 0 && !drawRegions.some(\n (dr) => intersectRect(drawX, drawY, 1e4, rh, dr.x, dr.y, dr.width, dr.height)\n )) {\n return;\n }\n const rowSelected = selectedRows.hasIndex(row);\n const rowDisabled = disabledRows.hasIndex(row);\n ctx.beginPath();\n const rowTheme = getRowTheme == null ? void 0 : getRowTheme(row);\n const blankTheme = rowTheme === void 0 ? theme : { ...theme, ...rowTheme };\n if (blankTheme.bgCell !== theme.bgCell) {\n ctx.fillStyle = blankTheme.bgCell;\n ctx.fillRect(drawX, drawY, 1e4, rh);\n }\n if (rowDisabled) {\n ctx.fillStyle = blankTheme.bgHeader;\n ctx.fillRect(drawX, drawY, 1e4, rh);\n }\n if (rowSelected) {\n ctx.fillStyle = blankTheme.accentLight;\n ctx.fillRect(drawX, drawY, 1e4, rh);\n }\n }\n );\n ctx.restore();\n }\n );\n}\nfunction overdrawStickyBoundaries(ctx, effectiveCols, width, height, lastRowSticky, rows, verticalBorder, getRowHeight, theme) {\n var _a;\n let drawFreezeBorder = false;\n for (const c of effectiveCols) {\n if (c.sticky)\n continue;\n drawFreezeBorder = verticalBorder(c.sourceIndex);\n break;\n }\n const hColor = (_a = theme.horizontalBorderColor) != null ? _a : theme.borderColor;\n const vColor = theme.borderColor;\n const drawX = drawFreezeBorder ? getStickyWidth(effectiveCols) : 0;\n if (drawX !== 0) {\n ctx.beginPath();\n ctx.moveTo(drawX + 0.5, 0);\n ctx.lineTo(drawX + 0.5, height);\n ctx.strokeStyle = blend(vColor, theme.bgCell);\n ctx.stroke();\n }\n if (lastRowSticky) {\n const h = getRowHeight(rows - 1);\n ctx.beginPath();\n ctx.moveTo(0, height - h + 0.5);\n ctx.lineTo(width, height - h + 0.5);\n ctx.strokeStyle = blend(hColor, theme.bgCell);\n ctx.stroke();\n }\n}\nfunction drawHighlightRings(ctx, width, height, cellXOffset, cellYOffset, translateX, translateY, mappedColumns, freezeColumns, headerHeight, groupHeaderHeight, rowHeight, lastRowSticky, rows, allHighlightRegions) {\n const highlightRegions = allHighlightRegions == null ? void 0 : allHighlightRegions.filter((x) => x.style !== \"no-outline\");\n if (highlightRegions === void 0 || highlightRegions.length === 0)\n return void 0;\n const drawRects = highlightRegions.map((h) => {\n var _a, _b, _c, _d, _e;\n const r = h.range;\n const topLeftBounds = computeBounds(\n r.x,\n r.y,\n width,\n height,\n groupHeaderHeight,\n headerHeight + groupHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n lastRowSticky,\n mappedColumns,\n rowHeight\n );\n if (r.width === 1 && r.height === 1) {\n if (r.x < freezeColumns) {\n return [{ color: h.color, style: (_a = h.style) != null ? _a : \"dashed\", rect: topLeftBounds }, void 0];\n }\n return [void 0, { color: h.color, style: (_b = h.style) != null ? _b : \"dashed\", rect: topLeftBounds }];\n }\n const bottomRightBounds = computeBounds(\n r.x + r.width - 1,\n r.y + r.height - 1,\n width,\n height,\n groupHeaderHeight,\n headerHeight + groupHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n lastRowSticky,\n mappedColumns,\n rowHeight\n );\n if (r.x < freezeColumns && r.x + r.width >= freezeColumns) {\n const freezeSectionRightBounds = computeBounds(\n freezeColumns - 1,\n r.y + r.height - 1,\n width,\n height,\n groupHeaderHeight,\n headerHeight + groupHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n lastRowSticky,\n mappedColumns,\n rowHeight\n );\n const unfreezeSectionleftBounds = computeBounds(\n freezeColumns,\n r.y + r.height - 1,\n width,\n height,\n groupHeaderHeight,\n headerHeight + groupHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n lastRowSticky,\n mappedColumns,\n rowHeight\n );\n return [\n {\n color: h.color,\n style: (_c = h.style) != null ? _c : \"dashed\",\n rect: {\n x: topLeftBounds.x,\n y: topLeftBounds.y,\n width: freezeSectionRightBounds.x + freezeSectionRightBounds.width - topLeftBounds.x,\n height: freezeSectionRightBounds.y + freezeSectionRightBounds.height - topLeftBounds.y\n }\n },\n {\n color: h.color,\n style: (_d = h.style) != null ? _d : \"dashed\",\n rect: {\n x: unfreezeSectionleftBounds.x,\n y: unfreezeSectionleftBounds.y,\n width: bottomRightBounds.x + bottomRightBounds.width - unfreezeSectionleftBounds.x,\n height: bottomRightBounds.y + bottomRightBounds.height - unfreezeSectionleftBounds.y\n }\n }\n ];\n } else {\n return [\n void 0,\n {\n color: h.color,\n style: (_e = h.style) != null ? _e : \"dashed\",\n rect: {\n x: topLeftBounds.x,\n y: topLeftBounds.y,\n width: bottomRightBounds.x + bottomRightBounds.width - topLeftBounds.x,\n height: bottomRightBounds.y + bottomRightBounds.height - topLeftBounds.y\n }\n }\n ];\n }\n });\n const stickyWidth = getStickyWidth(mappedColumns);\n const drawCb = () => {\n ctx.beginPath();\n ctx.save();\n let dashed = false;\n const setDashed = (dash) => {\n if (dashed === dash)\n return;\n ctx.setLineDash(dash ? [5, 3] : []);\n dashed = dash;\n };\n ctx.lineWidth = 1;\n for (const dr of drawRects) {\n const [s] = dr;\n if (s !== void 0 && intersectRect(0, 0, width, height, s.rect.x, s.rect.y, s.rect.width, s.rect.height)) {\n setDashed(s.style === \"dashed\");\n ctx.strokeStyle = withAlpha(s.color, 1);\n ctx.strokeRect(s.rect.x + 1, s.rect.y + 1, s.rect.width - 2, s.rect.height - 2);\n }\n }\n let clipped = false;\n for (const dr of drawRects) {\n const [, s] = dr;\n if (s !== void 0 && intersectRect(0, 0, width, height, s.rect.x, s.rect.y, s.rect.width, s.rect.height)) {\n setDashed(s.style === \"dashed\");\n if (!clipped && s.rect.x < stickyWidth) {\n ctx.rect(stickyWidth, 0, width, height);\n ctx.clip();\n clipped = true;\n }\n ctx.strokeStyle = withAlpha(s.color, 1);\n ctx.strokeRect(s.rect.x + 1, s.rect.y + 1, s.rect.width - 2, s.rect.height - 2);\n }\n }\n ctx.restore();\n };\n drawCb();\n return drawCb;\n}\nfunction drawFocusRing(ctx, width, height, cellYOffset, translateX, translateY, effectiveCols, allColumns, theme, totalHeaderHeight, selectedCell, getRowHeight, getCellContent, trailingRowType, fillHandle, rows) {\n var _a;\n if (selectedCell.current === void 0 || !effectiveCols.some((c) => {\n var _a2;\n return c.sourceIndex === ((_a2 = selectedCell.current) == null ? void 0 : _a2.cell[0]);\n }))\n return void 0;\n const [targetCol, targetRow] = selectedCell.current.cell;\n const cell = getCellContent(selectedCell.current.cell);\n const targetColSpan = (_a = cell.span) != null ? _a : [targetCol, targetCol];\n const isStickyRow = trailingRowType === \"sticky\" && targetRow === rows - 1;\n const stickRowHeight = trailingRowType === \"sticky\" && !isStickyRow ? getRowHeight(rows - 1) - 1 : 0;\n let drawCb = void 0;\n walkColumns(\n effectiveCols,\n cellYOffset,\n translateX,\n translateY,\n totalHeaderHeight,\n (col, drawX, colDrawY, clipX, startRow) => {\n if (col.sticky && targetCol > col.sourceIndex)\n return;\n if (col.sourceIndex < targetColSpan[0] || col.sourceIndex > targetColSpan[1]) {\n return;\n }\n walkRowsInCol(startRow, colDrawY, height, rows, getRowHeight, trailingRowType, (drawY, row, rh) => {\n if (row !== targetRow)\n return;\n let cellX = drawX;\n let cellWidth = col.width;\n if (cell.span !== void 0) {\n const areas = getSpanBounds(cell.span, drawX, drawY, col.width, rh, col, allColumns);\n const area = col.sticky ? areas[0] : areas[1];\n if (area !== void 0) {\n cellX = area.x;\n cellWidth = area.width;\n }\n }\n drawCb = () => {\n var _a2, _b, _c, _d;\n if (clipX > cellX && !col.sticky) {\n ctx.beginPath();\n ctx.rect(clipX, 0, width - clipX, height);\n ctx.clip();\n }\n ctx.beginPath();\n ctx.rect(cellX + 0.5, drawY + 0.5, cellWidth, rh);\n ctx.strokeStyle = (_b = (_a2 = col.themeOverride) == null ? void 0 : _a2.accentColor) != null ? _b : theme.accentColor;\n ctx.lineWidth = 1;\n ctx.stroke();\n if (fillHandle) {\n ctx.beginPath();\n ctx.rect(cellX + cellWidth - 4, drawY + rh - 4, 4, 4);\n ctx.fillStyle = (_d = (_c = col.themeOverride) == null ? void 0 : _c.accentColor) != null ? _d : theme.accentColor;\n ctx.fill();\n }\n };\n return true;\n });\n return true;\n }\n );\n if (drawCb === void 0)\n return void 0;\n const result = () => {\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, totalHeaderHeight, width, height - totalHeaderHeight - stickRowHeight);\n ctx.clip();\n drawCb == null ? void 0 : drawCb();\n ctx.restore();\n };\n result();\n return result;\n}\nfunction getLastRow(effectiveColumns, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, trailingRowType) {\n let result = 0;\n walkColumns(\n effectiveColumns,\n cellYOffset,\n translateX,\n translateY,\n totalHeaderHeight,\n (_c, __drawX, colDrawY, _clipX, startRow) => {\n walkRowsInCol(\n startRow,\n colDrawY,\n height,\n rows,\n getRowHeight,\n trailingRowType,\n (_drawY, row, _rh, isSticky) => {\n if (!isSticky) {\n result = Math.max(row, result);\n }\n }\n );\n return true;\n }\n );\n return result;\n}\nfunction computeCanBlit(current, last) {\n if (last === void 0)\n return false;\n if (current.width !== last.width || current.height !== last.height || current.theme !== last.theme || current.headerHeight !== last.headerHeight || current.rowHeight !== last.rowHeight || current.rows !== last.rows || current.getRowThemeOverride !== last.getRowThemeOverride || current.isFocused !== last.isFocused || current.isResizing !== last.isResizing || current.verticalBorder !== last.verticalBorder || current.getCellContent !== last.getCellContent || current.highlightRegions !== last.highlightRegions || current.selection !== last.selection || current.dragAndDropState !== last.dragAndDropState || current.prelightCells !== last.prelightCells || current.touchMode !== last.touchMode || current.scrolling !== last.scrolling) {\n return false;\n }\n if (current.mappedColumns !== last.mappedColumns) {\n if (current.mappedColumns.length > 100 || current.mappedColumns.length !== last.mappedColumns.length) {\n return false;\n }\n let resized;\n for (let i = 0; i < current.mappedColumns.length; i++) {\n const curCol = current.mappedColumns[i];\n const lastCol = last.mappedColumns[i];\n if (deepEqual(curCol, lastCol))\n continue;\n if (resized !== void 0)\n return false;\n if (curCol.width === lastCol.width)\n return false;\n const { width, ...curRest } = curCol;\n const { width: lastWidth, ...lastRest } = lastCol;\n if (!deepEqual(curRest, lastRest))\n return false;\n resized = i;\n }\n if (resized === void 0) {\n return true;\n }\n return resized;\n }\n return true;\n}\nfunction drawGrid(arg, lastArg) {\n var _a, _b;\n const {\n canvas,\n headerCanvas,\n width,\n height,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n mappedColumns,\n enableGroups,\n freezeColumns,\n dragAndDropState,\n theme,\n drawFocus,\n headerHeight,\n groupHeaderHeight,\n disabledRows,\n rowHeight,\n verticalBorder,\n isResizing,\n selection,\n fillHandle,\n lastRowSticky: trailingRowType,\n rows,\n getCellContent,\n getGroupDetails,\n getRowThemeOverride,\n isFocused,\n drawCustomCell,\n drawHeaderCallback,\n prelightCells,\n highlightRegions,\n imageLoader,\n lastBlitData,\n hoverValues,\n hyperWrapping,\n hoverInfo,\n spriteManager,\n scrolling,\n touchMode,\n enqueue,\n getCellRenderer,\n renderStrategy,\n bufferA,\n bufferB\n } = arg;\n let { damage } = arg;\n if (width === 0 || height === 0)\n return;\n const doubleBuffer = renderStrategy === \"double-buffer\";\n const dpr = scrolling ? 1 : Math.ceil((_a = window.devicePixelRatio) != null ? _a : 1);\n const canBlit = renderStrategy !== \"direct\" && computeCanBlit(arg, lastArg);\n if (canvas.width !== width * dpr || canvas.height !== height * dpr) {\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n canvas.style.width = width + \"px\";\n canvas.style.height = height + \"px\";\n }\n const overlayCanvas = headerCanvas;\n const totalHeaderHeight = enableGroups ? groupHeaderHeight + headerHeight : headerHeight;\n const overlayHeight = totalHeaderHeight + 1;\n if (overlayCanvas.width !== width * dpr || overlayCanvas.height !== overlayHeight * dpr) {\n overlayCanvas.width = width * dpr;\n overlayCanvas.height = overlayHeight * dpr;\n overlayCanvas.style.width = width + \"px\";\n overlayCanvas.style.height = overlayHeight + \"px\";\n }\n if (doubleBuffer && (bufferA.width !== width * dpr || bufferA.height !== height * dpr)) {\n bufferA.width = width * dpr;\n bufferA.height = height * dpr;\n }\n if (doubleBuffer && (bufferB.width !== width * dpr || bufferB.height !== height * dpr)) {\n bufferB.width = width * dpr;\n bufferB.height = height * dpr;\n }\n const last = lastBlitData.current;\n if (canBlit === true && cellXOffset === (last == null ? void 0 : last.cellXOffset) && cellYOffset === (last == null ? void 0 : last.cellYOffset) && translateX === (last == null ? void 0 : last.translateX) && translateY === (last == null ? void 0 : last.translateY))\n return;\n let mainCtx = null;\n if (doubleBuffer) {\n mainCtx = canvas.getContext(\"2d\", {\n alpha: false\n });\n }\n const overlayCtx = overlayCanvas.getContext(\"2d\", {\n alpha: false\n });\n let targetBuffer;\n if (!doubleBuffer) {\n targetBuffer = canvas;\n } else if (damage !== void 0) {\n targetBuffer = (last == null ? void 0 : last.lastBuffer) === \"b\" ? bufferB : bufferA;\n } else {\n targetBuffer = (last == null ? void 0 : last.lastBuffer) === \"b\" ? bufferA : bufferB;\n }\n const targetCtx = targetBuffer.getContext(\"2d\", {\n alpha: false\n });\n const blitSource = doubleBuffer ? targetBuffer === bufferA ? bufferB : bufferA : canvas;\n if (overlayCtx === null || targetCtx === null)\n return;\n const getRowHeight = typeof rowHeight === \"number\" ? () => rowHeight : rowHeight;\n overlayCtx.save();\n overlayCtx.beginPath();\n targetCtx.save();\n targetCtx.beginPath();\n overlayCtx.textBaseline = \"middle\";\n targetCtx.textBaseline = \"middle\";\n if (dpr !== 1) {\n overlayCtx.scale(dpr, dpr);\n targetCtx.scale(dpr, dpr);\n }\n const effectiveCols = getEffectiveColumns(mappedColumns, cellXOffset, width, dragAndDropState, translateX);\n let drawRegions = [];\n const mustDrawFocusOnHeader = drawFocus && ((_b = selection.current) == null ? void 0 : _b.cell[1]) === cellYOffset && translateY === 0;\n const drawHeaderTexture = () => {\n var _a2, _b2;\n drawGridHeaders(\n overlayCtx,\n effectiveCols,\n enableGroups,\n hoverInfo,\n width,\n translateX,\n headerHeight,\n groupHeaderHeight,\n dragAndDropState,\n isResizing,\n selection,\n theme,\n spriteManager,\n hoverValues,\n verticalBorder,\n getGroupDetails,\n damage,\n drawHeaderCallback,\n touchMode\n );\n drawGridLines(\n overlayCtx,\n effectiveCols,\n cellYOffset,\n translateX,\n translateY,\n width,\n height,\n void 0,\n void 0,\n groupHeaderHeight,\n totalHeaderHeight,\n getRowHeight,\n getRowThemeOverride,\n verticalBorder,\n trailingRowType,\n rows,\n theme,\n true\n );\n overlayCtx.beginPath();\n overlayCtx.moveTo(0, overlayHeight - 0.5);\n overlayCtx.lineTo(width, overlayHeight - 0.5);\n overlayCtx.strokeStyle = blend(\n (_b2 = (_a2 = theme.headerBottomBorderColor) != null ? _a2 : theme.horizontalBorderColor) != null ? _b2 : theme.borderColor,\n theme.bgHeader\n );\n overlayCtx.stroke();\n if (mustDrawFocusOnHeader) {\n drawFocusRing(\n overlayCtx,\n width,\n height,\n cellYOffset,\n translateX,\n translateY,\n effectiveCols,\n mappedColumns,\n theme,\n totalHeaderHeight,\n selection,\n getRowHeight,\n getCellContent,\n trailingRowType,\n fillHandle,\n rows\n );\n }\n };\n if (damage !== void 0) {\n let doHeaders = false;\n damage = damage.filter((x) => {\n doHeaders = doHeaders || x[1] < 0;\n return x[1] < 0 || intersectRect(cellXOffset, cellYOffset, effectiveCols.length, 300, x[0], x[1], 1, 1) || intersectRect(0, cellYOffset, freezeColumns, 300, x[0], x[1], 1, 1) || trailingRowType && intersectRect(cellXOffset, rows - 1, effectiveCols.length, 1, x[0], x[1], 1, 1);\n });\n if (damage.length > 0) {\n clipDamage(\n targetCtx,\n effectiveCols,\n width,\n height,\n groupHeaderHeight,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n trailingRowType,\n damage,\n true\n );\n targetCtx.fillStyle = theme.bgCell;\n targetCtx.fillRect(0, totalHeaderHeight + 1, width, height - totalHeaderHeight - 1);\n drawCells(\n targetCtx,\n effectiveCols,\n mappedColumns,\n height,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n getCellContent,\n getGroupDetails,\n getRowThemeOverride,\n disabledRows,\n isFocused,\n drawFocus,\n trailingRowType,\n drawRegions,\n damage,\n selection,\n prelightCells,\n highlightRegions,\n drawCustomCell,\n imageLoader,\n spriteManager,\n hoverValues,\n hoverInfo,\n hyperWrapping,\n theme,\n enqueue,\n getCellRenderer\n );\n if (fillHandle && drawFocus && selection.current !== void 0 && damage.some((x) => {\n var _a2, _b2;\n return x[0] === ((_a2 = selection.current) == null ? void 0 : _a2.cell[0]) && x[1] === ((_b2 = selection.current) == null ? void 0 : _b2.cell[1]);\n })) {\n drawFocusRing(\n targetCtx,\n width,\n height,\n cellYOffset,\n translateX,\n translateY,\n effectiveCols,\n mappedColumns,\n theme,\n totalHeaderHeight,\n selection,\n getRowHeight,\n getCellContent,\n trailingRowType,\n fillHandle,\n rows\n );\n }\n }\n if (doHeaders) {\n clipDamage(\n overlayCtx,\n effectiveCols,\n width,\n totalHeaderHeight,\n groupHeaderHeight,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n trailingRowType,\n damage,\n false\n );\n drawHeaderTexture();\n }\n targetCtx.restore();\n overlayCtx.restore();\n if (mainCtx !== null) {\n mainCtx.fillStyle = theme.bgCell;\n mainCtx.fillRect(0, 0, width, height);\n mainCtx.drawImage(targetCtx.canvas, 0, 0);\n }\n return;\n }\n if (canBlit !== true || cellXOffset !== (last == null ? void 0 : last.cellXOffset) || translateX !== (last == null ? void 0 : last.translateX) || mustDrawFocusOnHeader !== (last == null ? void 0 : last.mustDrawFocusOnHeader)) {\n drawHeaderTexture();\n }\n if (canBlit === true) {\n assert(blitSource !== void 0 && last !== void 0);\n const { regions } = blitLastFrame(\n targetCtx,\n blitSource,\n last,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n trailingRowType === \"sticky\",\n width,\n height,\n rows,\n totalHeaderHeight,\n dpr,\n mappedColumns,\n effectiveCols,\n rowHeight,\n doubleBuffer\n );\n drawRegions = regions;\n } else if (canBlit !== false) {\n assert(last !== void 0);\n const resizedCol = canBlit;\n drawRegions = blitResizedCol(\n last,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n width,\n height,\n totalHeaderHeight,\n effectiveCols,\n resizedCol\n );\n }\n overdrawStickyBoundaries(\n targetCtx,\n effectiveCols,\n width,\n height,\n trailingRowType === \"sticky\",\n rows,\n verticalBorder,\n getRowHeight,\n theme\n );\n const focusRedraw = drawFocus ? drawFocusRing(\n targetCtx,\n width,\n height,\n cellYOffset,\n translateX,\n translateY,\n effectiveCols,\n mappedColumns,\n theme,\n totalHeaderHeight,\n selection,\n getRowHeight,\n getCellContent,\n trailingRowType,\n fillHandle,\n rows\n ) : void 0;\n const highlightRedraw = drawHighlightRings(\n targetCtx,\n width,\n height,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n mappedColumns,\n freezeColumns,\n headerHeight,\n groupHeaderHeight,\n rowHeight,\n trailingRowType === \"sticky\",\n rows,\n highlightRegions\n );\n targetCtx.fillStyle = theme.bgCell;\n if (drawRegions.length > 0) {\n targetCtx.beginPath();\n for (const r of drawRegions) {\n targetCtx.rect(r.x, r.y, r.width, r.height);\n }\n targetCtx.clip();\n targetCtx.fill();\n targetCtx.beginPath();\n } else {\n targetCtx.fillRect(0, 0, width, height);\n }\n const spans = drawCells(\n targetCtx,\n effectiveCols,\n mappedColumns,\n height,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n getCellContent,\n getGroupDetails,\n getRowThemeOverride,\n disabledRows,\n isFocused,\n drawFocus,\n trailingRowType,\n drawRegions,\n damage,\n selection,\n prelightCells,\n highlightRegions,\n drawCustomCell,\n imageLoader,\n spriteManager,\n hoverValues,\n hoverInfo,\n hyperWrapping,\n theme,\n enqueue,\n getCellRenderer\n );\n drawBlanks(\n targetCtx,\n effectiveCols,\n mappedColumns,\n width,\n height,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n getRowThemeOverride,\n selection.rows,\n disabledRows,\n trailingRowType,\n drawRegions,\n damage,\n theme\n );\n drawGridLines(\n targetCtx,\n effectiveCols,\n cellYOffset,\n translateX,\n translateY,\n width,\n height,\n drawRegions,\n spans,\n groupHeaderHeight,\n totalHeaderHeight,\n getRowHeight,\n getRowThemeOverride,\n verticalBorder,\n trailingRowType,\n rows,\n theme\n );\n focusRedraw == null ? void 0 : focusRedraw();\n highlightRedraw == null ? void 0 : highlightRedraw();\n if (mainCtx !== null) {\n mainCtx.fillStyle = theme.bgCell;\n mainCtx.fillRect(0, 0, width, height);\n mainCtx.drawImage(targetCtx.canvas, 0, 0);\n }\n const lastRowDrawn = getLastRow(\n effectiveCols,\n height,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n trailingRowType\n );\n imageLoader == null ? void 0 : imageLoader.setWindow(\n {\n x: cellXOffset,\n y: cellYOffset,\n width: effectiveCols.length,\n height: lastRowDrawn - cellYOffset\n },\n freezeColumns\n );\n lastBlitData.current = {\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n mustDrawFocusOnHeader,\n lastBuffer: doubleBuffer ? targetBuffer === bufferA ? \"a\" : \"b\" : void 0\n };\n targetCtx.restore();\n overlayCtx.restore();\n}\nfunction walkRowsInCol(startRow, drawY, height, rows, getRowHeight, trailingRowType, cb) {\n let y = drawY;\n let row = startRow;\n let doSticky = trailingRowType === \"sticky\";\n while (y < height || doSticky) {\n const doingSticky = doSticky && y >= height;\n if (doingSticky) {\n doSticky = false;\n row = rows - 1;\n }\n const rh = getRowHeight(row);\n if (doingSticky) {\n y = height - rh;\n }\n const isMovedStickyRow = doSticky && row === rows - 1;\n if (!isMovedStickyRow && cb(y, row, rh, doingSticky, trailingRowType !== \"none\" && row === rows - 1) === true) {\n break;\n }\n if (doingSticky) {\n break;\n }\n y += rh;\n row++;\n }\n}\nfunction walkColumns(effectiveCols, cellYOffset, translateX, translateY, totalHeaderHeight, cb) {\n let x = 0;\n let clipX = 0;\n const drawY = totalHeaderHeight + translateY;\n for (const c of effectiveCols) {\n const drawX = c.sticky ? clipX : x + translateX;\n if (cb(c, drawX, drawY, clipX, cellYOffset) === true) {\n break;\n }\n x += c.width;\n clipX += c.sticky ? c.width : 0;\n }\n}\nfunction walkGroups(effectiveCols, width, translateX, groupHeaderHeight, cb) {\n var _a;\n let x = 0;\n let clipX = 0;\n for (let index = 0; index < effectiveCols.length; index++) {\n const startCol = effectiveCols[index];\n let end = index + 1;\n let boxWidth = startCol.width;\n if (startCol.sticky) {\n clipX += boxWidth;\n }\n while (end < effectiveCols.length && isGroupEqual(effectiveCols[end].group, startCol.group) && effectiveCols[end].sticky === effectiveCols[index].sticky) {\n const endCol = effectiveCols[end];\n boxWidth += endCol.width;\n end++;\n index++;\n if (endCol.sticky) {\n clipX += endCol.width;\n }\n }\n const t = startCol.sticky ? 0 : translateX;\n const localX = x + t;\n const delta = startCol.sticky ? 0 : Math.max(0, clipX - localX);\n const w = Math.min(boxWidth - delta, width - (localX + delta));\n cb(\n [startCol.sourceIndex, effectiveCols[end - 1].sourceIndex],\n (_a = startCol.group) != null ? _a : \"\",\n localX + delta,\n 0,\n w,\n groupHeaderHeight\n );\n x += boxWidth;\n }\n}\n\n// src/data-grid/animation-manager.ts\nimport clamp from \"lodash/clamp.js\";\nvar hoverTime = 80;\nfunction easeOutCubic(x) {\n const x1 = x - 1;\n return x1 * x1 * x1 + 1;\n}\nvar AnimationManager = class {\n constructor(callback) {\n this.currentHoveredItem = void 0;\n this.leavingItems = [];\n this.areSameItems = (left, right) => {\n return (left == null ? void 0 : left[0]) === (right == null ? void 0 : right[0]) && (left == null ? void 0 : left[1]) === (right == null ? void 0 : right[1]);\n };\n this.addToLeavingItems = (item) => {\n const isAlreadyLeaving = this.leavingItems.some((i) => this.areSameItems(i.item, item.item));\n if (isAlreadyLeaving) {\n return;\n }\n this.leavingItems.push(item);\n };\n /**\n * @returns the hover amount of the item, if it was leaving (0 if not).\n */\n this.removeFromLeavingItems = (item) => {\n var _a;\n const leavingItem = this.leavingItems.find((e) => this.areSameItems(e.item, item));\n this.leavingItems = this.leavingItems.filter((i) => i !== leavingItem);\n return (_a = leavingItem == null ? void 0 : leavingItem.hoverAmount) != null ? _a : 0;\n };\n this.cleanUpLeavingElements = () => {\n this.leavingItems = this.leavingItems.filter((i) => i.hoverAmount > 0);\n };\n this.shouldStep = () => {\n const hasLeavingItems = this.leavingItems.length > 0;\n const currentHoveredIsAnimating = this.currentHoveredItem !== void 0 && this.currentHoveredItem.hoverAmount < 1;\n return hasLeavingItems || currentHoveredIsAnimating;\n };\n this.getAnimatingItems = () => {\n if (this.currentHoveredItem !== void 0) {\n return [...this.leavingItems, this.currentHoveredItem];\n }\n return this.leavingItems.map((x) => ({ ...x, hoverAmount: easeOutCubic(x.hoverAmount) }));\n };\n this.step = (timestamp) => {\n if (this.lastAnimationTime === void 0) {\n this.lastAnimationTime = timestamp;\n } else {\n const step = timestamp - this.lastAnimationTime;\n const delta = step / hoverTime;\n for (const item of this.leavingItems) {\n item.hoverAmount = clamp(item.hoverAmount - delta, 0, 1);\n }\n if (this.currentHoveredItem !== void 0) {\n this.currentHoveredItem.hoverAmount = clamp(this.currentHoveredItem.hoverAmount + delta, 0, 1);\n }\n const animating = this.getAnimatingItems();\n this.callback(animating);\n this.cleanUpLeavingElements();\n }\n if (this.shouldStep()) {\n this.lastAnimationTime = timestamp;\n window.requestAnimationFrame(this.step);\n } else {\n this.lastAnimationTime = void 0;\n }\n };\n this.setHovered = (item) => {\n var _a;\n if (this.areSameItems((_a = this.currentHoveredItem) == null ? void 0 : _a.item, item)) {\n return;\n }\n if (this.currentHoveredItem !== void 0) {\n this.addToLeavingItems(this.currentHoveredItem);\n }\n if (item !== void 0) {\n const hoverAmount = this.removeFromLeavingItems(item);\n this.currentHoveredItem = {\n item,\n hoverAmount\n };\n } else {\n this.currentHoveredItem = void 0;\n }\n if (this.lastAnimationTime === void 0) {\n window.requestAnimationFrame(this.step);\n }\n };\n this.callback = callback;\n }\n};\n\n// src/common/browser-detect.ts\nvar Lazy = class {\n constructor(fn) {\n this.fn = fn;\n }\n get value() {\n var _a;\n return (_a = this.val) != null ? _a : this.val = this.fn();\n }\n};\nfunction lazy(fn) {\n return new Lazy(fn);\n}\nvar browserIsFirefox = lazy(() => window.navigator.userAgent.includes(\"Firefox\"));\nvar browserIsSafari = lazy(\n () => window.navigator.userAgent.includes(\"Mac OS\") && window.navigator.userAgent.includes(\"Safari\") && !window.navigator.userAgent.includes(\"Chrome\")\n);\nvar browserIsOSX = lazy(() => window.navigator.platform.toLowerCase().startsWith(\"mac\"));\n\n// src/data-grid/use-animation-queue.ts\nimport * as React7 from \"react\";\nfunction hasItem(arr, item) {\n for (const element of arr) {\n if (element[0] === item[0] && element[1] === item[1])\n return true;\n }\n return false;\n}\nfunction useAnimationQueue(draw) {\n const queue = React7.useRef([]);\n const seq = React7.useRef(0);\n const drawRef = React7.useRef(draw);\n drawRef.current = draw;\n const loop = React7.useCallback(() => {\n const requeue = () => window.requestAnimationFrame(fn);\n const fn = () => {\n const toDraw = queue.current;\n queue.current = [];\n drawRef.current(toDraw);\n if (queue.current.length > 0) {\n seq.current++;\n } else {\n seq.current = 0;\n }\n };\n window.requestAnimationFrame(seq.current > 600 ? requeue : fn);\n }, []);\n return React7.useCallback(\n (item) => {\n if (hasItem(queue.current, item))\n return;\n if (queue.current.length === 0) {\n loop();\n }\n queue.current.push(item);\n },\n [loop]\n );\n}\n\n// src/data-grid/data-grid.tsx\nvar getRowData = (cell, getCellRenderer) => {\n var _a;\n if (cell.kind === GridCellKind.Custom)\n return cell.copyData;\n const r = getCellRenderer == null ? void 0 : getCellRenderer(cell);\n return (_a = r == null ? void 0 : r.getAccessibilityString(cell)) != null ? _a : \"\";\n};\nvar DataGrid = (p, forwardedRef) => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const {\n width,\n height,\n accessibilityHeight,\n columns,\n cellXOffset: cellXOffsetReal,\n cellYOffset,\n headerHeight,\n fillHandle = false,\n groupHeaderHeight,\n rowHeight,\n rows,\n getCellContent,\n getRowThemeOverride,\n onHeaderMenuClick,\n enableGroups,\n isFilling,\n onCanvasFocused,\n onCanvasBlur,\n isFocused,\n selection,\n freezeColumns,\n onContextMenu,\n trailingRowType,\n fixedShadowX = true,\n fixedShadowY = true,\n drawFocusRing: drawFocusRing2 = true,\n onMouseDown,\n onMouseUp,\n onMouseMoveRaw,\n onMouseMove,\n onItemHovered,\n dragAndDropState,\n firstColAccessible,\n onKeyDown,\n onKeyUp,\n highlightRegions,\n canvasRef,\n onDragStart,\n onDragEnd,\n eventTargetRef,\n isResizing,\n isDragging,\n isDraggable = false,\n allowResize,\n disabledRows,\n getGroupDetails,\n theme,\n prelightCells,\n headerIcons,\n verticalBorder,\n drawHeader: drawHeaderCallback,\n drawCustomCell,\n onCellFocused,\n onDragOverCell,\n onDrop,\n onDragLeave,\n imageWindowLoader,\n smoothScrollX = false,\n smoothScrollY = false,\n experimental,\n getCellRenderer\n } = p;\n const translateX = (_a = p.translateX) != null ? _a : 0;\n const translateY = (_b = p.translateY) != null ? _b : 0;\n const cellXOffset = Math.max(freezeColumns, Math.min(columns.length - 1, cellXOffsetReal));\n const ref = React8.useRef(null);\n const imageWindowLoaderInternal = React8.useMemo(() => new image_window_loader_default(), []);\n const imageLoader = imageWindowLoader != null ? imageWindowLoader : imageWindowLoaderInternal;\n const damageRegion = React8.useRef();\n const [scrolling, setScrolling] = React8.useState(false);\n const hoverValues = React8.useRef([]);\n const lastBlitData = React8.useRef();\n const [hoveredItemInfo, setHoveredItemInfo] = React8.useState();\n const [hoveredOnEdge, setHoveredOnEdge] = React8.useState();\n const overlayRef = React8.useRef(null);\n const [lastWasTouch, setLastWasTouch] = React8.useState(false);\n const lastWasTouchRef = React8.useRef(lastWasTouch);\n lastWasTouchRef.current = lastWasTouch;\n const spriteManager = React8.useMemo(\n () => new SpriteManager(headerIcons, () => {\n lastArgsRef.current = void 0;\n lastDrawRef.current();\n }),\n [headerIcons]\n );\n const totalHeaderHeight = enableGroups ? groupHeaderHeight + headerHeight : headerHeight;\n const scrollingStopRef = React8.useRef(-1);\n const disableFirefoxRescaling = (experimental == null ? void 0 : experimental.enableFirefoxRescaling) !== true;\n React8.useLayoutEffect(() => {\n if (!browserIsFirefox.value || window.devicePixelRatio === 1 || disableFirefoxRescaling)\n return;\n if (scrollingStopRef.current !== -1) {\n setScrolling(true);\n }\n window.clearTimeout(scrollingStopRef.current);\n scrollingStopRef.current = window.setTimeout(() => {\n setScrolling(false);\n scrollingStopRef.current = -1;\n }, 200);\n }, [cellYOffset, cellXOffset, translateX, translateY, disableFirefoxRescaling]);\n const mappedColumns = useMappedColumns(columns, freezeColumns);\n const getBoundsForItem = React8.useCallback(\n (canvas, col, row) => {\n const rect = canvas.getBoundingClientRect();\n if (col >= mappedColumns.length || row >= rows) {\n return void 0;\n }\n const scale = rect.width / width;\n const result = computeBounds(\n col,\n row,\n width,\n height,\n groupHeaderHeight,\n totalHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n trailingRowType === \"sticky\",\n mappedColumns,\n rowHeight\n );\n if (scale !== 1) {\n result.x *= scale;\n result.y *= scale;\n result.width *= scale;\n result.height *= scale;\n }\n result.x += rect.x;\n result.y += rect.y;\n return result;\n },\n [\n width,\n height,\n groupHeaderHeight,\n totalHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n trailingRowType,\n mappedColumns,\n rowHeight\n ]\n );\n const getMouseArgsForPosition = React8.useCallback(\n (canvas, posX, posY, ev) => {\n var _a2, _b2;\n const rect = canvas.getBoundingClientRect();\n const scale = rect.width / width;\n const x = (posX - rect.left) / scale;\n const y = (posY - rect.top) / scale;\n const edgeDetectionBuffer = 5;\n const effectiveCols = getEffectiveColumns(mappedColumns, cellXOffset, width, void 0, translateX);\n let button = 0;\n if (ev instanceof MouseEvent) {\n button = ev.button;\n }\n const col = getColumnIndexForX(x, effectiveCols, translateX);\n const row = getRowIndexForY(\n y,\n height,\n enableGroups,\n headerHeight,\n groupHeaderHeight,\n rows,\n rowHeight,\n cellYOffset,\n translateY,\n trailingRowType === \"sticky\"\n );\n const shiftKey = (ev == null ? void 0 : ev.shiftKey) === true;\n const ctrlKey = (ev == null ? void 0 : ev.ctrlKey) === true;\n const metaKey = (ev == null ? void 0 : ev.metaKey) === true;\n const isTouch = ev !== void 0 && !(ev instanceof MouseEvent) || (ev == null ? void 0 : ev.pointerType) === \"touch\";\n const edgeSize = 20;\n const scrollEdge = [\n Math.abs(x) < edgeSize ? -1 : Math.abs(rect.width - x) < edgeSize ? 1 : 0,\n Math.abs(y) < edgeSize ? -1 : Math.abs(rect.height - y) < edgeSize ? 1 : 0\n ];\n let result;\n if (col === -1 || y < 0 || x < 0 || row === void 0 || x > width || y > height) {\n const horizontal = x > width ? -1 : x < 0 ? 1 : 0;\n const vertical = y > height ? 1 : y < 0 ? -1 : 0;\n let isEdge = false;\n if (col === -1 && row === -1) {\n const b = getBoundsForItem(canvas, mappedColumns.length - 1, -1);\n assert(b !== void 0);\n isEdge = posX < b.x + b.width + edgeDetectionBuffer;\n }\n const isMaybeScrollbar = x > width && x < width + getScrollBarWidth() || y > height && y < height + getScrollBarWidth();\n result = {\n kind: outOfBoundsKind,\n location: [col !== -1 ? col : x < 0 ? 0 : mappedColumns.length - 1, row != null ? row : rows - 1],\n direction: [horizontal, vertical],\n shiftKey,\n ctrlKey,\n metaKey,\n isEdge,\n isTouch,\n button,\n scrollEdge,\n isMaybeScrollbar\n };\n } else if (row <= -1) {\n let bounds = getBoundsForItem(canvas, col, row);\n assert(bounds !== void 0);\n let isEdge = bounds !== void 0 && bounds.x + bounds.width - posX <= edgeDetectionBuffer;\n const previousCol = col - 1;\n if (posX - bounds.x <= edgeDetectionBuffer && previousCol >= 0) {\n isEdge = true;\n bounds = getBoundsForItem(canvas, previousCol, row);\n assert(bounds !== void 0);\n result = {\n kind: enableGroups && row === -2 ? groupHeaderKind : headerKind,\n location: [previousCol, row],\n bounds,\n group: (_a2 = mappedColumns[previousCol].group) != null ? _a2 : \"\",\n isEdge,\n shiftKey,\n ctrlKey,\n metaKey,\n isTouch,\n localEventX: posX - bounds.x,\n localEventY: posY - bounds.y,\n button,\n scrollEdge\n };\n } else {\n result = {\n kind: enableGroups && row === -2 ? groupHeaderKind : headerKind,\n group: (_b2 = mappedColumns[col].group) != null ? _b2 : \"\",\n location: [col, row],\n bounds,\n isEdge,\n shiftKey,\n ctrlKey,\n metaKey,\n isTouch,\n localEventX: posX - bounds.x,\n localEventY: posY - bounds.y,\n button,\n scrollEdge\n };\n }\n } else {\n const bounds = getBoundsForItem(canvas, col, row);\n assert(bounds !== void 0);\n const isEdge = bounds !== void 0 && bounds.x + bounds.width - posX < edgeDetectionBuffer;\n const isFillHandle = fillHandle && bounds !== void 0 && bounds.x + bounds.width - posX < 6 && bounds.y + bounds.height - posY < 6;\n result = {\n kind: \"cell\",\n location: [col, row],\n bounds,\n isEdge,\n shiftKey,\n ctrlKey,\n isFillHandle,\n metaKey,\n isTouch,\n localEventX: posX - bounds.x,\n localEventY: posY - bounds.y,\n button,\n scrollEdge\n };\n }\n return result;\n },\n [\n mappedColumns,\n cellXOffset,\n width,\n translateX,\n height,\n enableGroups,\n headerHeight,\n groupHeaderHeight,\n rows,\n rowHeight,\n cellYOffset,\n translateY,\n trailingRowType,\n getBoundsForItem,\n fillHandle\n ]\n );\n function isSameItem(item, other) {\n if (item === other)\n return true;\n return (item == null ? void 0 : item.kind) === (other == null ? void 0 : other.kind) && (item == null ? void 0 : item.location[0]) === (other == null ? void 0 : other.location[0]) && (item == null ? void 0 : item.location[1]) === (other == null ? void 0 : other.location[1]);\n }\n const [hoveredItem] = hoveredItemInfo != null ? hoveredItemInfo : [];\n const enqueueRef = React8.useRef((_item) => {\n });\n const hoverInfoRef = React8.useRef(hoveredItemInfo);\n hoverInfoRef.current = hoveredItemInfo;\n const [bufferA, bufferB] = React8.useMemo(() => {\n const a = document.createElement(\"canvas\");\n const b = document.createElement(\"canvas\");\n a.style[\"display\"] = \"none\";\n a.style[\"opacity\"] = \"0\";\n a.style[\"position\"] = \"fixed\";\n b.style[\"display\"] = \"none\";\n b.style[\"opacity\"] = \"0\";\n b.style[\"position\"] = \"fixed\";\n return [a, b];\n }, []);\n React8.useLayoutEffect(() => {\n document.documentElement.append(bufferA);\n document.documentElement.append(bufferB);\n return () => {\n bufferA.remove();\n bufferB.remove();\n };\n }, [bufferA, bufferB]);\n const lastArgsRef = React8.useRef();\n const draw = React8.useCallback(() => {\n var _a2, _b2;\n const canvas = ref.current;\n const overlay = overlayRef.current;\n if (canvas === null || overlay === null)\n return;\n const last = lastArgsRef.current;\n const current = {\n canvas,\n bufferA,\n bufferB,\n headerCanvas: overlay,\n width,\n height,\n cellXOffset,\n cellYOffset,\n translateX: Math.round(translateX),\n translateY: Math.round(translateY),\n mappedColumns,\n enableGroups,\n freezeColumns,\n dragAndDropState,\n theme,\n headerHeight,\n groupHeaderHeight,\n disabledRows: disabledRows != null ? disabledRows : CompactSelection.empty(),\n rowHeight,\n verticalBorder,\n isResizing,\n isFocused,\n selection,\n fillHandle,\n lastRowSticky: trailingRowType,\n rows,\n drawFocus: drawFocusRing2,\n getCellContent,\n getGroupDetails: getGroupDetails != null ? getGroupDetails : (name) => ({ name }),\n getRowThemeOverride,\n drawCustomCell,\n drawHeaderCallback,\n prelightCells,\n highlightRegions,\n imageLoader,\n lastBlitData,\n damage: damageRegion.current,\n hoverValues: hoverValues.current,\n hoverInfo: hoverInfoRef.current,\n spriteManager,\n scrolling,\n hyperWrapping: (_a2 = experimental == null ? void 0 : experimental.hyperWrapping) != null ? _a2 : false,\n touchMode: lastWasTouch,\n enqueue: enqueueRef.current,\n renderStrategy: (_b2 = experimental == null ? void 0 : experimental.renderStrategy) != null ? _b2 : browserIsSafari.value ? \"double-buffer\" : \"single-buffer\",\n getCellRenderer\n };\n if (current.damage === void 0) {\n lastArgsRef.current = current;\n drawGrid(current, last);\n } else {\n drawGrid(current, void 0);\n }\n }, [\n bufferA,\n bufferB,\n width,\n height,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n mappedColumns,\n enableGroups,\n freezeColumns,\n dragAndDropState,\n theme,\n headerHeight,\n groupHeaderHeight,\n disabledRows,\n rowHeight,\n verticalBorder,\n isResizing,\n isFocused,\n selection,\n fillHandle,\n trailingRowType,\n rows,\n drawFocusRing2,\n getCellContent,\n getGroupDetails,\n getRowThemeOverride,\n drawCustomCell,\n drawHeaderCallback,\n prelightCells,\n highlightRegions,\n imageLoader,\n spriteManager,\n scrolling,\n experimental == null ? void 0 : experimental.hyperWrapping,\n experimental == null ? void 0 : experimental.renderStrategy,\n lastWasTouch,\n getCellRenderer\n ]);\n const lastDrawRef = React8.useRef(draw);\n React8.useLayoutEffect(() => {\n draw();\n lastDrawRef.current = draw;\n }, [draw]);\n React8.useLayoutEffect(() => {\n const fn = async () => {\n var _a2;\n if (((_a2 = document == null ? void 0 : document.fonts) == null ? void 0 : _a2.ready) === void 0)\n return;\n await document.fonts.ready;\n lastArgsRef.current = void 0;\n lastDrawRef.current();\n };\n void fn();\n }, []);\n const damageInternal = React8.useCallback((locations) => {\n damageRegion.current = locations;\n lastDrawRef.current();\n damageRegion.current = void 0;\n }, []);\n const enqueue = useAnimationQueue(damageInternal);\n enqueueRef.current = enqueue;\n const damage = React8.useCallback(\n (cells) => {\n damageInternal(cells.map((x) => x.cell));\n },\n [damageInternal]\n );\n imageLoader.setCallback(damageInternal);\n const [overFill, setOverFill] = React8.useState(false);\n const [hCol, hRow] = hoveredItem != null ? hoveredItem : [];\n const headerHovered = hCol !== void 0 && hRow === -1;\n const groupHeaderHovered = hCol !== void 0 && hRow === -2;\n let clickableInnerCellHovered = false;\n let editableBoolHovered = false;\n let cursorOverride;\n if (hCol !== void 0 && hRow !== void 0 && hRow > -1) {\n const cell = getCellContent([hCol, hRow], true);\n clickableInnerCellHovered = cell.kind === InnerGridCellKind.NewRow || cell.kind === InnerGridCellKind.Marker && cell.markerKind !== \"number\";\n editableBoolHovered = cell.kind === GridCellKind.Boolean && booleanCellIsEditable(cell);\n cursorOverride = cell.cursor;\n }\n const canDrag = hoveredOnEdge != null ? hoveredOnEdge : false;\n const cursor = isDragging ? \"grabbing\" : canDrag || isResizing ? \"col-resize\" : overFill || isFilling ? \"crosshair\" : cursorOverride !== void 0 ? cursorOverride : headerHovered || clickableInnerCellHovered || editableBoolHovered || groupHeaderHovered ? \"pointer\" : \"default\";\n const style = React8.useMemo(\n () => ({\n // width,\n // height,\n contain: \"strict\",\n display: \"block\",\n cursor\n }),\n [cursor]\n );\n const lastSetCursor = React8.useRef(\"default\");\n const target = eventTargetRef == null ? void 0 : eventTargetRef.current;\n if (target !== null && target !== void 0 && lastSetCursor.current !== style.cursor) {\n target.style.cursor = lastSetCursor.current = style.cursor;\n }\n const groupHeaderActionForEvent = React8.useCallback(\n (group, bounds, localEventX, localEventY) => {\n if (getGroupDetails === void 0)\n return void 0;\n const groupDesc = getGroupDetails(group);\n if (groupDesc.actions !== void 0) {\n const boxes = getActionBoundsForGroup(bounds, groupDesc.actions);\n for (const [i, box] of boxes.entries()) {\n if (pointInRect(box, localEventX + bounds.x, localEventY + box.y)) {\n return groupDesc.actions[i];\n }\n }\n }\n return void 0;\n },\n [getGroupDetails]\n );\n const isOverHeaderMenu = React8.useCallback(\n (canvas, col, clientX, clientY) => {\n const header = columns[col];\n if (!isDragging && !isResizing && header.hasMenu === true && !(hoveredOnEdge != null ? hoveredOnEdge : false)) {\n const headerBounds = getBoundsForItem(canvas, col, -1);\n assert(headerBounds !== void 0);\n const menuBounds = getHeaderMenuBounds(\n headerBounds.x,\n headerBounds.y,\n headerBounds.width,\n headerBounds.height,\n direction(header.title) === \"rtl\"\n );\n if (clientX > menuBounds.x && clientX < menuBounds.x + menuBounds.width && clientY > menuBounds.y && clientY < menuBounds.y + menuBounds.height) {\n return headerBounds;\n }\n }\n return void 0;\n },\n [columns, getBoundsForItem, hoveredOnEdge, isDragging, isResizing]\n );\n const downTime = React8.useRef(0);\n const downPosition = React8.useRef();\n const mouseDown = React8.useRef(false);\n const onMouseDownImpl = React8.useCallback(\n (ev) => {\n const canvas = ref.current;\n const eventTarget = eventTargetRef == null ? void 0 : eventTargetRef.current;\n if (canvas === null || ev.target !== canvas && ev.target !== eventTarget)\n return;\n mouseDown.current = true;\n let clientX;\n let clientY;\n if (ev instanceof MouseEvent) {\n clientX = ev.clientX;\n clientY = ev.clientY;\n } else {\n clientX = ev.touches[0].clientX;\n clientY = ev.touches[0].clientY;\n }\n if (ev.target === eventTarget && eventTarget !== null) {\n const bounds = eventTarget.getBoundingClientRect();\n if (clientX > bounds.right || clientY > bounds.bottom)\n return;\n }\n const args = getMouseArgsForPosition(canvas, clientX, clientY, ev);\n downPosition.current = args.location;\n if (args.isTouch) {\n downTime.current = Date.now();\n }\n if (lastWasTouchRef.current !== args.isTouch) {\n setLastWasTouch(args.isTouch);\n }\n if (args.kind === headerKind && isOverHeaderMenu(canvas, args.location[0], clientX, clientY) !== void 0) {\n return;\n } else if (args.kind === groupHeaderKind) {\n const action = groupHeaderActionForEvent(args.group, args.bounds, args.localEventX, args.localEventY);\n if (action !== void 0) {\n return;\n }\n }\n onMouseDown == null ? void 0 : onMouseDown(args);\n if (!args.isTouch && isDraggable !== true && isDraggable !== args.kind) {\n ev.preventDefault();\n }\n },\n [eventTargetRef, isDraggable, getMouseArgsForPosition, groupHeaderActionForEvent, isOverHeaderMenu, onMouseDown]\n );\n useEventListener(\"touchstart\", onMouseDownImpl, window, false);\n useEventListener(\"mousedown\", onMouseDownImpl, window, false);\n const onMouseUpImpl = React8.useCallback(\n (ev) => {\n var _a2, _b2;\n const canvas = ref.current;\n mouseDown.current = false;\n if (onMouseUp === void 0 || canvas === null)\n return;\n const eventTarget = eventTargetRef == null ? void 0 : eventTargetRef.current;\n const isOutside = ev.target !== canvas && ev.target !== eventTarget;\n let clientX;\n let clientY;\n if (ev instanceof MouseEvent) {\n clientX = ev.clientX;\n clientY = ev.clientY;\n if (ev.pointerType === \"touch\") {\n return;\n }\n } else {\n clientX = ev.changedTouches[0].clientX;\n clientY = ev.changedTouches[0].clientY;\n }\n let args = getMouseArgsForPosition(canvas, clientX, clientY, ev);\n if (args.isTouch && downTime.current !== 0 && Date.now() - downTime.current > 500) {\n args = {\n ...args,\n isLongTouch: true\n };\n }\n if (lastWasTouchRef.current !== args.isTouch) {\n setLastWasTouch(args.isTouch);\n }\n if (!isOutside && ev.cancelable) {\n ev.preventDefault();\n }\n const [col] = args.location;\n const headerBounds = isOverHeaderMenu(canvas, col, clientX, clientY);\n if (args.kind === headerKind && headerBounds !== void 0) {\n if (args.button !== 0 || ((_a2 = downPosition.current) == null ? void 0 : _a2[0]) !== col || ((_b2 = downPosition.current) == null ? void 0 : _b2[1]) !== -1) {\n onMouseUp(args, true);\n }\n return;\n } else if (args.kind === groupHeaderKind) {\n const action = groupHeaderActionForEvent(args.group, args.bounds, args.localEventX, args.localEventY);\n if (action !== void 0) {\n if (args.button === 0) {\n action.onClick(args);\n }\n return;\n }\n }\n onMouseUp(args, isOutside);\n },\n [onMouseUp, eventTargetRef, getMouseArgsForPosition, isOverHeaderMenu, groupHeaderActionForEvent]\n );\n useEventListener(\"mouseup\", onMouseUpImpl, window, false);\n useEventListener(\"touchend\", onMouseUpImpl, window, false);\n const onClickImpl = React8.useCallback(\n (ev) => {\n var _a2, _b2;\n const canvas = ref.current;\n if (canvas === null)\n return;\n const eventTarget = eventTargetRef == null ? void 0 : eventTargetRef.current;\n const isOutside = ev.target !== canvas && ev.target !== eventTarget;\n let clientX;\n let clientY;\n if (ev instanceof MouseEvent) {\n clientX = ev.clientX;\n clientY = ev.clientY;\n } else {\n clientX = ev.changedTouches[0].clientX;\n clientY = ev.changedTouches[0].clientY;\n }\n const args = getMouseArgsForPosition(canvas, clientX, clientY, ev);\n if (lastWasTouchRef.current !== args.isTouch) {\n setLastWasTouch(args.isTouch);\n }\n if (!isOutside && ev.cancelable) {\n ev.preventDefault();\n }\n const [col] = args.location;\n const headerBounds = isOverHeaderMenu(canvas, col, clientX, clientY);\n if (args.kind === headerKind && headerBounds !== void 0) {\n if (args.button === 0 && ((_a2 = downPosition.current) == null ? void 0 : _a2[0]) === col && ((_b2 = downPosition.current) == null ? void 0 : _b2[1]) === -1) {\n onHeaderMenuClick == null ? void 0 : onHeaderMenuClick(col, headerBounds);\n }\n } else if (args.kind === groupHeaderKind) {\n const action = groupHeaderActionForEvent(args.group, args.bounds, args.localEventX, args.localEventY);\n if (action !== void 0 && args.button === 0) {\n action.onClick(args);\n }\n }\n },\n [eventTargetRef, getMouseArgsForPosition, isOverHeaderMenu, onHeaderMenuClick, groupHeaderActionForEvent]\n );\n useEventListener(\"click\", onClickImpl, window, false);\n const onContextMenuImpl = React8.useCallback(\n (ev) => {\n const canvas = ref.current;\n if (canvas === null || onContextMenu === void 0)\n return;\n const args = getMouseArgsForPosition(canvas, ev.clientX, ev.clientY, ev);\n onContextMenu(args, () => {\n if (ev.cancelable)\n ev.preventDefault();\n });\n },\n [getMouseArgsForPosition, onContextMenu]\n );\n useEventListener(\"contextmenu\", onContextMenuImpl, (_c = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _c : null, false);\n const onAnimationFrame = React8.useCallback((values) => {\n damageRegion.current = values.map((x) => x.item);\n hoverValues.current = values;\n lastDrawRef.current();\n damageRegion.current = void 0;\n }, []);\n const animManagerValue = React8.useMemo(() => new AnimationManager(onAnimationFrame), [onAnimationFrame]);\n const animationManager = React8.useRef(animManagerValue);\n animationManager.current = animManagerValue;\n React8.useLayoutEffect(() => {\n const am = animationManager.current;\n if (hoveredItem === void 0 || hoveredItem[1] < 0) {\n am.setHovered(hoveredItem);\n return;\n }\n const cell = getCellContent(hoveredItem);\n const r = getCellRenderer(cell);\n am.setHovered(\n r === void 0 && cell.kind === GridCellKind.Custom || (r == null ? void 0 : r.needsHover) === true ? hoveredItem : void 0\n );\n }, [getCellContent, getCellRenderer, hoveredItem]);\n const hoveredRef = React8.useRef();\n const onMouseMoveImpl = React8.useCallback(\n (ev) => {\n var _a2;\n const canvas = ref.current;\n if (canvas === null)\n return;\n const eventTarget = eventTargetRef == null ? void 0 : eventTargetRef.current;\n const isIndirect = ev.target !== canvas && ev.target !== eventTarget;\n const args = getMouseArgsForPosition(canvas, ev.clientX, ev.clientY, ev);\n if (args.kind !== \"out-of-bounds\" && isIndirect && !mouseDown.current && !args.isTouch) {\n return;\n }\n if (!isSameItem(args, hoveredRef.current)) {\n onItemHovered == null ? void 0 : onItemHovered(args);\n setHoveredItemInfo(\n args.kind === outOfBoundsKind ? void 0 : [args.location, [args.localEventX, args.localEventY]]\n );\n hoveredRef.current = args;\n } else if (args.kind === \"cell\" || args.kind === headerKind || args.kind === groupHeaderKind) {\n const newInfo = [args.location, [args.localEventX, args.localEventY]];\n setHoveredItemInfo(newInfo);\n hoverInfoRef.current = newInfo;\n if (args.kind === \"cell\") {\n const toCheck = getCellContent(args.location);\n if (toCheck.kind === GridCellKind.Custom || ((_a2 = getCellRenderer(toCheck)) == null ? void 0 : _a2.needsHoverPosition) === true) {\n damageInternal([args.location]);\n }\n } else if (args.kind === groupHeaderKind) {\n damageInternal([args.location]);\n }\n }\n const notRowMarkerCol = args.location[0] >= (firstColAccessible ? 0 : 1);\n setHoveredOnEdge(args.kind === headerKind && args.isEdge && notRowMarkerCol && allowResize === true);\n if (fillHandle && selection.current !== void 0) {\n const [col, row] = selection.current.cell;\n const sb = getBoundsForItem(canvas, col, row);\n const x = ev.clientX;\n const y = ev.clientY;\n assert(sb !== void 0);\n setOverFill(\n x >= sb.x + sb.width - 6 && x <= sb.x + sb.width && y >= sb.y + sb.height - 6 && y <= sb.y + sb.height\n );\n } else {\n setOverFill(false);\n }\n onMouseMoveRaw == null ? void 0 : onMouseMoveRaw(ev);\n onMouseMove(args);\n },\n [\n eventTargetRef,\n getMouseArgsForPosition,\n firstColAccessible,\n allowResize,\n fillHandle,\n selection,\n onMouseMoveRaw,\n onMouseMove,\n onItemHovered,\n getCellContent,\n getCellRenderer,\n damageInternal,\n getBoundsForItem\n ]\n );\n useEventListener(\"mousemove\", onMouseMoveImpl, window, true);\n const onKeyDownImpl = React8.useCallback(\n (event) => {\n const canvas = ref.current;\n if (canvas === null)\n return;\n let bounds;\n let location = void 0;\n if (selection.current !== void 0) {\n bounds = getBoundsForItem(canvas, selection.current.cell[0], selection.current.cell[1]);\n location = selection.current.cell;\n }\n onKeyDown == null ? void 0 : onKeyDown({\n bounds,\n stopPropagation: () => event.stopPropagation(),\n preventDefault: () => event.preventDefault(),\n cancel: () => void 0,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n key: event.key,\n keyCode: event.keyCode,\n rawEvent: event,\n location\n });\n },\n [onKeyDown, selection, getBoundsForItem]\n );\n const onKeyUpImpl = React8.useCallback(\n (event) => {\n const canvas = ref.current;\n if (canvas === null)\n return;\n let bounds;\n let location = void 0;\n if (selection.current !== void 0) {\n bounds = getBoundsForItem(canvas, selection.current.cell[0], selection.current.cell[1]);\n location = selection.current.cell;\n }\n onKeyUp == null ? void 0 : onKeyUp({\n bounds,\n stopPropagation: () => event.stopPropagation(),\n preventDefault: () => event.preventDefault(),\n cancel: () => void 0,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n key: event.key,\n keyCode: event.keyCode,\n rawEvent: event,\n location\n });\n },\n [onKeyUp, selection, getBoundsForItem]\n );\n const refImpl = React8.useCallback(\n (instance) => {\n ref.current = instance;\n if (canvasRef !== void 0) {\n canvasRef.current = instance;\n }\n },\n [canvasRef]\n );\n const onDragStartImpl = React8.useCallback(\n (event) => {\n var _a2;\n const canvas = ref.current;\n if (canvas === null || isDraggable === false || isResizing) {\n event.preventDefault();\n return;\n }\n let dragMime;\n let dragData;\n const args = getMouseArgsForPosition(canvas, event.clientX, event.clientY);\n if (isDraggable !== true && args.kind !== isDraggable) {\n event.preventDefault();\n return;\n }\n const setData = (mime, payload) => {\n dragMime = mime;\n dragData = payload;\n };\n let dragImage;\n let dragImageX;\n let dragImageY;\n const setDragImage = (image, x, y) => {\n dragImage = image;\n dragImageX = x;\n dragImageY = y;\n };\n let prevented = false;\n onDragStart == null ? void 0 : onDragStart({\n ...args,\n setData,\n setDragImage,\n preventDefault: () => prevented = true,\n defaultPrevented: () => prevented\n });\n if (!prevented && dragMime !== void 0 && dragData !== void 0 && event.dataTransfer !== null) {\n event.dataTransfer.setData(dragMime, dragData);\n event.dataTransfer.effectAllowed = \"copyLink\";\n if (dragImage !== void 0 && dragImageX !== void 0 && dragImageY !== void 0) {\n event.dataTransfer.setDragImage(dragImage, dragImageX, dragImageY);\n } else {\n const [col, row] = args.location;\n if (row !== void 0) {\n const offscreen = document.createElement(\"canvas\");\n const boundsForDragTarget = getBoundsForItem(canvas, col, row);\n assert(boundsForDragTarget !== void 0);\n const dpr = Math.ceil((_a2 = window.devicePixelRatio) != null ? _a2 : 1);\n offscreen.width = boundsForDragTarget.width * dpr;\n offscreen.height = boundsForDragTarget.height * dpr;\n const ctx = offscreen.getContext(\"2d\");\n if (ctx !== null) {\n ctx.scale(dpr, dpr);\n ctx.textBaseline = \"middle\";\n if (row === -1) {\n ctx.font = `${theme.headerFontStyle} ${theme.fontFamily}`;\n ctx.fillStyle = theme.bgHeader;\n ctx.fillRect(0, 0, offscreen.width, offscreen.height);\n drawHeader(\n ctx,\n 0,\n 0,\n boundsForDragTarget.width,\n boundsForDragTarget.height,\n mappedColumns[col],\n false,\n theme,\n false,\n false,\n 0,\n spriteManager,\n drawHeaderCallback,\n false\n );\n } else {\n ctx.font = `${theme.baseFontStyle} ${theme.fontFamily}`;\n ctx.fillStyle = theme.bgCell;\n ctx.fillRect(0, 0, offscreen.width, offscreen.height);\n drawCell(\n ctx,\n row,\n getCellContent([col, row]),\n 0,\n 0,\n 0,\n boundsForDragTarget.width,\n boundsForDragTarget.height,\n false,\n theme,\n drawCustomCell,\n imageLoader,\n spriteManager,\n 1,\n void 0,\n false,\n 0,\n void 0,\n void 0,\n getCellRenderer\n );\n }\n }\n offscreen.style.left = \"-100%\";\n offscreen.style.position = \"absolute\";\n offscreen.style.width = `${boundsForDragTarget.width}px`;\n offscreen.style.height = `${boundsForDragTarget.height}px`;\n document.body.append(offscreen);\n event.dataTransfer.setDragImage(\n offscreen,\n boundsForDragTarget.width / 2,\n boundsForDragTarget.height / 2\n );\n window.setTimeout(() => {\n offscreen.remove();\n }, 0);\n }\n }\n } else {\n event.preventDefault();\n }\n },\n [\n isDraggable,\n isResizing,\n getMouseArgsForPosition,\n onDragStart,\n getBoundsForItem,\n theme,\n mappedColumns,\n spriteManager,\n drawHeaderCallback,\n getCellContent,\n drawCustomCell,\n imageLoader,\n getCellRenderer\n ]\n );\n useEventListener(\"dragstart\", onDragStartImpl, (_d = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _d : null, false, false);\n const activeDropTarget = React8.useRef();\n const onDragOverImpl = React8.useCallback(\n (event) => {\n var _a2;\n const canvas = ref.current;\n if (onDrop !== void 0) {\n event.preventDefault();\n }\n if (canvas === null || onDragOverCell === void 0) {\n return;\n }\n const args = getMouseArgsForPosition(canvas, event.clientX, event.clientY);\n const [rawCol, row] = args.location;\n const col = rawCol - (firstColAccessible ? 0 : 1);\n const [activeCol, activeRow] = (_a2 = activeDropTarget.current) != null ? _a2 : [];\n if (activeCol !== col || activeRow !== row) {\n activeDropTarget.current = [col, row];\n onDragOverCell([col, row], event.dataTransfer);\n }\n },\n [firstColAccessible, getMouseArgsForPosition, onDragOverCell, onDrop]\n );\n useEventListener(\"dragover\", onDragOverImpl, (_e = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _e : null, false, false);\n const onDragEndImpl = React8.useCallback(() => {\n activeDropTarget.current = void 0;\n onDragEnd == null ? void 0 : onDragEnd();\n }, [onDragEnd]);\n useEventListener(\"dragend\", onDragEndImpl, (_f = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _f : null, false, false);\n const onDropImpl = React8.useCallback(\n (event) => {\n const canvas = ref.current;\n if (canvas === null || onDrop === void 0) {\n return;\n }\n event.preventDefault();\n const args = getMouseArgsForPosition(canvas, event.clientX, event.clientY);\n const [rawCol, row] = args.location;\n const col = rawCol - (firstColAccessible ? 0 : 1);\n onDrop([col, row], event.dataTransfer);\n },\n [firstColAccessible, getMouseArgsForPosition, onDrop]\n );\n useEventListener(\"drop\", onDropImpl, (_g = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _g : null, false, false);\n const onDragLeaveImpl = React8.useCallback(() => {\n onDragLeave == null ? void 0 : onDragLeave();\n }, [onDragLeave]);\n useEventListener(\"dragleave\", onDragLeaveImpl, (_h = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _h : null, false, false);\n const selectionRef = React8.useRef(selection);\n selectionRef.current = selection;\n const focusRef = React8.useRef(null);\n const focusElement = React8.useCallback(\n (el) => {\n var _a2;\n if (ref.current === null || !ref.current.contains(document.activeElement))\n return;\n if (el === null && selectionRef.current.current !== void 0) {\n (_a2 = canvasRef == null ? void 0 : canvasRef.current) == null ? void 0 : _a2.focus({\n preventScroll: true\n });\n } else if (el !== null) {\n el.focus({\n preventScroll: true\n });\n }\n focusRef.current = el;\n },\n [canvasRef]\n );\n React8.useImperativeHandle(\n forwardedRef,\n () => ({\n focus: () => {\n var _a2;\n const el = focusRef.current;\n if (el === null || !document.contains(el)) {\n (_a2 = canvasRef == null ? void 0 : canvasRef.current) == null ? void 0 : _a2.focus({\n preventScroll: true\n });\n } else {\n el.focus({\n preventScroll: true\n });\n }\n },\n getBounds: (col, row) => {\n if (canvasRef === void 0 || canvasRef.current === null) {\n return void 0;\n }\n return getBoundsForItem(canvasRef.current, col != null ? col : 0, row != null ? row : -1);\n },\n damage\n }),\n [canvasRef, damage, getBoundsForItem]\n );\n const lastFocusedSubdomNode = React8.useRef();\n const accessibilityTree = useDebouncedMemo(\n () => {\n var _a2, _b2, _c2, _d2;\n if (width < 50)\n return null;\n let effectiveCols = getEffectiveColumns(mappedColumns, cellXOffset, width, dragAndDropState, translateX);\n const colOffset = firstColAccessible ? 0 : -1;\n if (!firstColAccessible && ((_a2 = effectiveCols[0]) == null ? void 0 : _a2.sourceIndex) === 0) {\n effectiveCols = effectiveCols.slice(1);\n }\n const [fCol, fRow] = (_c2 = (_b2 = selection.current) == null ? void 0 : _b2.cell) != null ? _c2 : [];\n const range2 = (_d2 = selection.current) == null ? void 0 : _d2.range;\n const visibleCols = effectiveCols.map((c) => c.sourceIndex);\n const visibleRows = makeRange(cellYOffset, Math.min(rows, cellYOffset + accessibilityHeight));\n if (fCol !== void 0 && fRow !== void 0 && !(visibleCols.includes(fCol) && visibleRows.includes(fRow))) {\n focusElement(null);\n }\n return /* @__PURE__ */ React8.createElement(\n \"table\",\n {\n key: \"access-tree\",\n role: \"grid\",\n \"aria-rowcount\": rows + 1,\n \"aria-multiselectable\": \"true\",\n \"aria-colcount\": mappedColumns.length + colOffset\n },\n /* @__PURE__ */ React8.createElement(\"thead\", { role: \"rowgroup\" }, /* @__PURE__ */ React8.createElement(\"tr\", { role: \"row\", \"aria-rowindex\": 1 }, effectiveCols.map((c) => /* @__PURE__ */ React8.createElement(\n \"th\",\n {\n role: \"columnheader\",\n \"aria-selected\": selection.columns.hasIndex(c.sourceIndex),\n \"aria-colindex\": c.sourceIndex + 1 + colOffset,\n tabIndex: -1,\n onFocus: (e) => {\n if (e.target === focusRef.current)\n return;\n return onCellFocused == null ? void 0 : onCellFocused([c.sourceIndex, -1]);\n },\n key: c.sourceIndex\n },\n c.title\n )))),\n /* @__PURE__ */ React8.createElement(\"tbody\", { role: \"rowgroup\" }, visibleRows.map((row) => /* @__PURE__ */ React8.createElement(\n \"tr\",\n {\n role: \"row\",\n \"aria-selected\": selection.rows.hasIndex(row),\n key: row,\n \"aria-rowindex\": row + 2\n },\n effectiveCols.map((c) => {\n const col = c.sourceIndex;\n const key = `${col},${row}`;\n const focused = fCol === col && fRow === row;\n const selected = range2 !== void 0 && col >= range2.x && col < range2.x + range2.width && row >= range2.y && row < range2.y + range2.height;\n const id = `glide-cell-${col}-${row}`;\n const location = [col, row];\n const cellContent = getCellContent(location, true);\n return /* @__PURE__ */ React8.createElement(\n \"td\",\n {\n key,\n role: \"gridcell\",\n \"aria-colindex\": col + 1 + colOffset,\n \"aria-selected\": selected,\n \"aria-readonly\": isInnerOnlyCell(cellContent) || !isReadWriteCell(cellContent),\n id,\n \"data-testid\": id,\n onClick: () => {\n const canvas = canvasRef == null ? void 0 : canvasRef.current;\n if (canvas === null || canvas === void 0)\n return;\n return onKeyDown == null ? void 0 : onKeyDown({\n bounds: getBoundsForItem(canvas, col, row),\n cancel: () => void 0,\n preventDefault: () => void 0,\n stopPropagation: () => void 0,\n ctrlKey: false,\n key: \"Enter\",\n keyCode: 13,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: void 0,\n location\n });\n },\n onFocusCapture: (e) => {\n var _a3, _b3;\n if (e.target === focusRef.current || ((_a3 = lastFocusedSubdomNode.current) == null ? void 0 : _a3[0]) === col && ((_b3 = lastFocusedSubdomNode.current) == null ? void 0 : _b3[1]) === row)\n return;\n lastFocusedSubdomNode.current = location;\n return onCellFocused == null ? void 0 : onCellFocused(location);\n },\n ref: focused ? focusElement : void 0,\n tabIndex: -1\n },\n getRowData(cellContent, getCellRenderer)\n );\n })\n )))\n );\n },\n [\n width,\n mappedColumns,\n cellXOffset,\n dragAndDropState,\n translateX,\n rows,\n cellYOffset,\n accessibilityHeight,\n selection,\n focusElement,\n getCellContent,\n canvasRef,\n onKeyDown,\n getBoundsForItem,\n onCellFocused\n ],\n 200\n );\n const stickyX = fixedShadowX ? getStickyWidth(mappedColumns, dragAndDropState) : 0;\n const opacityX = freezeColumns === 0 || !fixedShadowX ? 0 : cellXOffset > freezeColumns ? 1 : clamp2(-translateX / 100, 0, 1);\n const absoluteOffsetY = -cellYOffset * 32 + translateY;\n const opacityY = !fixedShadowY ? 0 : clamp2(-absoluteOffsetY / 100, 0, 1);\n const stickyShadow = React8.useMemo(() => {\n if (!opacityX && !opacityY) {\n return null;\n }\n const styleX = {\n position: \"absolute\",\n top: 0,\n left: stickyX,\n width: width - stickyX,\n height,\n opacity: opacityX,\n pointerEvents: \"none\",\n transition: !smoothScrollX ? \"opacity 0.2s\" : void 0,\n boxShadow: \"inset 13px 0 10px -13px rgba(0, 0, 0, 0.2)\"\n };\n const styleY = {\n position: \"absolute\",\n top: totalHeaderHeight,\n left: 0,\n width,\n height,\n opacity: opacityY,\n pointerEvents: \"none\",\n transition: !smoothScrollY ? \"opacity 0.2s\" : void 0,\n boxShadow: \"inset 0 13px 10px -13px rgba(0, 0, 0, 0.2)\"\n };\n return /* @__PURE__ */ React8.createElement(React8.Fragment, null, opacityX > 0 && /* @__PURE__ */ React8.createElement(\"div\", { id: \"shadow-x\", style: styleX }), opacityY > 0 && /* @__PURE__ */ React8.createElement(\"div\", { id: \"shadow-y\", style: styleY }));\n }, [opacityX, opacityY, stickyX, width, smoothScrollX, totalHeaderHeight, height, smoothScrollY]);\n const overlayStyle = React8.useMemo(\n () => ({\n position: \"absolute\",\n top: 0,\n left: 0\n }),\n []\n );\n return /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(\n \"canvas\",\n {\n \"data-testid\": \"data-grid-canvas\",\n tabIndex: 0,\n onKeyDown: onKeyDownImpl,\n onKeyUp: onKeyUpImpl,\n onFocus: onCanvasFocused,\n onBlur: onCanvasBlur,\n ref: refImpl,\n style\n },\n accessibilityTree\n ), /* @__PURE__ */ React8.createElement(\"canvas\", { ref: overlayRef, style: overlayStyle }), stickyShadow);\n};\nvar data_grid_default = React8.memo(React8.forwardRef(DataGrid));\n\n// src/data-grid-dnd/data-grid-dnd.tsx\nfunction offsetColumnSize(column, width, min, max) {\n var _a;\n return clamp3(Math.round(width - ((_a = column.growOffset) != null ? _a : 0)), Math.ceil(min), Math.floor(max));\n}\nvar DataGridDnd = (p) => {\n var _a;\n const [resizeColStartX, setResizeColStartX] = React9.useState();\n const [resizeCol, setResizeCol] = React9.useState();\n const [dragCol, setDragCol] = React9.useState();\n const [dropCol, setDropCol] = React9.useState();\n const [dragColActive, setDragColActive] = React9.useState(false);\n const [dragStartX, setDragStartX] = React9.useState();\n const [dragRow, setDragRow] = React9.useState();\n const [dropRow, setDropRow] = React9.useState();\n const [dragRowActive, setDragRowActive] = React9.useState(false);\n const [dragStartY, setDragStartY] = React9.useState();\n const {\n onHeaderMenuClick,\n getCellContent,\n onColumnMoved,\n onColumnResize,\n onColumnResizeStart,\n onColumnResizeEnd,\n gridRef,\n maxColumnWidth,\n minColumnWidth,\n onRowMoved,\n lockColumns,\n onMouseDown,\n onMouseUp,\n onItemHovered,\n onDragStart,\n canvasRef\n } = p;\n const canResize = ((_a = onColumnResize != null ? onColumnResize : onColumnResizeEnd) != null ? _a : onColumnResizeStart) !== void 0;\n const { columns, selection } = p;\n const selectedColumns = selection.columns;\n const onItemHoveredImpl = React9.useCallback(\n (args) => {\n const [col, row] = args.location;\n if (dragCol !== void 0 && dropCol !== col && col >= lockColumns) {\n setDragColActive(true);\n setDropCol(col);\n } else if (dragRow !== void 0 && row !== void 0) {\n setDragRowActive(true);\n setDropRow(Math.max(0, row));\n } else {\n onItemHovered == null ? void 0 : onItemHovered(args);\n }\n },\n [dragCol, dragRow, dropCol, onItemHovered, lockColumns]\n );\n const canDragCol = onColumnMoved !== void 0;\n const onMouseDownImpl = React9.useCallback(\n (args) => {\n var _a2, _b;\n if (args.button === 0) {\n const [col, row] = args.location;\n if (args.kind === \"out-of-bounds\" && args.isEdge && canResize) {\n const bounds = (_a2 = gridRef == null ? void 0 : gridRef.current) == null ? void 0 : _a2.getBounds(columns.length - 1, -1);\n if (bounds !== void 0) {\n setResizeColStartX(bounds.x);\n setResizeCol(columns.length - 1);\n }\n } else if (args.kind === \"header\" && col >= lockColumns) {\n const canvas = canvasRef == null ? void 0 : canvasRef.current;\n if (args.isEdge && canResize && canvas) {\n setResizeColStartX(args.bounds.x);\n setResizeCol(col);\n const rect = canvas.getBoundingClientRect();\n const scale = rect.width / canvas.offsetWidth;\n const width = args.bounds.width / scale;\n onColumnResizeStart == null ? void 0 : onColumnResizeStart(columns[col], width, col, width + ((_b = columns[col].growOffset) != null ? _b : 0));\n } else if (args.kind === \"header\" && canDragCol) {\n setDragStartX(args.bounds.x);\n setDragCol(col);\n }\n } else if (args.kind === \"cell\" && lockColumns > 0 && col === 0 && row !== void 0 && onRowMoved !== void 0) {\n setDragStartY(args.bounds.y);\n setDragRow(row);\n }\n }\n onMouseDown == null ? void 0 : onMouseDown(args);\n },\n [onMouseDown, canResize, lockColumns, onRowMoved, gridRef, columns, canDragCol, onColumnResizeStart, canvasRef]\n );\n const onHeaderMenuClickMangled = React9.useCallback(\n (col, screenPosition) => {\n if (dragColActive || dragRowActive)\n return;\n onHeaderMenuClick == null ? void 0 : onHeaderMenuClick(col, screenPosition);\n },\n [dragColActive, dragRowActive, onHeaderMenuClick]\n );\n const lastResizeWidthRef = React9.useRef(-1);\n const clearAll = React9.useCallback(() => {\n lastResizeWidthRef.current = -1;\n setDragRow(void 0);\n setDropRow(void 0);\n setDragStartY(void 0);\n setDragRowActive(false);\n setDragCol(void 0);\n setDropCol(void 0);\n setDragStartX(void 0);\n setDragColActive(false);\n setResizeCol(void 0);\n setResizeColStartX(void 0);\n }, []);\n const onMouseUpImpl = React9.useCallback(\n (args, isOutside) => {\n var _a2, _b, _c;\n if (args.button === 0) {\n if (resizeCol !== void 0) {\n if ((selectedColumns == null ? void 0 : selectedColumns.hasIndex(resizeCol)) === true) {\n for (const c of selectedColumns) {\n if (c === resizeCol)\n continue;\n const col = columns[c];\n const newSize = offsetColumnSize(\n col,\n lastResizeWidthRef.current,\n minColumnWidth,\n maxColumnWidth\n );\n onColumnResize == null ? void 0 : onColumnResize(col, newSize, c, newSize + ((_a2 = col.growOffset) != null ? _a2 : 0));\n }\n }\n const ns = offsetColumnSize(\n columns[resizeCol],\n lastResizeWidthRef.current,\n minColumnWidth,\n maxColumnWidth\n );\n onColumnResizeEnd == null ? void 0 : onColumnResizeEnd(columns[resizeCol], ns, resizeCol, ns + ((_b = columns[resizeCol].growOffset) != null ? _b : 0));\n if (selectedColumns.hasIndex(resizeCol)) {\n for (const c of selectedColumns) {\n if (c === resizeCol)\n continue;\n const col = columns[c];\n const s = offsetColumnSize(col, lastResizeWidthRef.current, minColumnWidth, maxColumnWidth);\n onColumnResizeEnd == null ? void 0 : onColumnResizeEnd(col, s, c, s + ((_c = col.growOffset) != null ? _c : 0));\n }\n }\n }\n clearAll();\n if (dragCol !== void 0 && dropCol !== void 0) {\n onColumnMoved == null ? void 0 : onColumnMoved(dragCol, dropCol);\n }\n if (dragRow !== void 0 && dropRow !== void 0) {\n onRowMoved == null ? void 0 : onRowMoved(dragRow, dropRow);\n }\n }\n onMouseUp == null ? void 0 : onMouseUp(args, isOutside);\n },\n [\n onMouseUp,\n resizeCol,\n dragCol,\n dropCol,\n dragRow,\n dropRow,\n selectedColumns,\n onColumnResizeEnd,\n columns,\n minColumnWidth,\n maxColumnWidth,\n onColumnResize,\n onColumnMoved,\n onRowMoved,\n clearAll\n ]\n );\n const dragOffset = React9.useMemo(() => {\n if (dragCol === void 0 || dropCol === void 0)\n return void 0;\n if (dragCol === dropCol)\n return void 0;\n return {\n src: dragCol,\n dest: dropCol\n };\n }, [dragCol, dropCol]);\n const onMouseMove = React9.useCallback(\n (event) => {\n var _a2, _b;\n const canvas = canvasRef == null ? void 0 : canvasRef.current;\n if (dragCol !== void 0 && dragStartX !== void 0) {\n const diff = Math.abs(event.clientX - dragStartX);\n if (diff > 20) {\n setDragColActive(true);\n }\n } else if (dragRow !== void 0 && dragStartY !== void 0) {\n const diff = Math.abs(event.clientY - dragStartY);\n if (diff > 20) {\n setDragRowActive(true);\n }\n } else if (resizeCol !== void 0 && resizeColStartX !== void 0 && canvas) {\n const rect = canvas.getBoundingClientRect();\n const scale = rect.width / canvas.offsetWidth;\n const newWidth = (event.clientX - resizeColStartX) / scale;\n const column = columns[resizeCol];\n const ns = offsetColumnSize(column, newWidth, minColumnWidth, maxColumnWidth);\n onColumnResize == null ? void 0 : onColumnResize(column, ns, resizeCol, ns + ((_a2 = column.growOffset) != null ? _a2 : 0));\n lastResizeWidthRef.current = newWidth;\n if ((selectedColumns == null ? void 0 : selectedColumns.first()) === resizeCol) {\n for (const c of selectedColumns) {\n if (c === resizeCol)\n continue;\n const col = columns[c];\n const s = offsetColumnSize(col, lastResizeWidthRef.current, minColumnWidth, maxColumnWidth);\n onColumnResize == null ? void 0 : onColumnResize(col, s, c, s + ((_b = col.growOffset) != null ? _b : 0));\n }\n }\n }\n },\n [\n dragCol,\n dragStartX,\n dragRow,\n dragStartY,\n resizeCol,\n resizeColStartX,\n columns,\n minColumnWidth,\n maxColumnWidth,\n onColumnResize,\n selectedColumns,\n canvasRef\n ]\n );\n const getMangledCellContent = React9.useCallback(\n (cell, forceStrict) => {\n if (dragRow === void 0 || dropRow === void 0)\n return getCellContent(cell, forceStrict);\n let [col, row] = cell;\n if (row === dropRow) {\n row = dragRow;\n } else {\n if (row > dropRow)\n row -= 1;\n if (row >= dragRow)\n row += 1;\n }\n return getCellContent([col, row], forceStrict);\n },\n [dragRow, dropRow, getCellContent]\n );\n const onDragStartImpl = React9.useCallback(\n (args) => {\n onDragStart == null ? void 0 : onDragStart(args);\n if (!args.defaultPrevented()) {\n clearAll();\n }\n },\n [clearAll, onDragStart]\n );\n return /* @__PURE__ */ React9.createElement(\n data_grid_default,\n {\n accessibilityHeight: p.accessibilityHeight,\n canvasRef: p.canvasRef,\n cellXOffset: p.cellXOffset,\n cellYOffset: p.cellYOffset,\n columns: p.columns,\n disabledRows: p.disabledRows,\n drawCustomCell: p.drawCustomCell,\n drawFocusRing: p.drawFocusRing,\n drawHeader: p.drawHeader,\n enableGroups: p.enableGroups,\n eventTargetRef: p.eventTargetRef,\n experimental: p.experimental,\n fillHandle: p.fillHandle,\n firstColAccessible: p.firstColAccessible,\n fixedShadowX: p.fixedShadowX,\n fixedShadowY: p.fixedShadowY,\n freezeColumns: p.freezeColumns,\n getCellRenderer: p.getCellRenderer,\n getGroupDetails: p.getGroupDetails,\n getRowThemeOverride: p.getRowThemeOverride,\n groupHeaderHeight: p.groupHeaderHeight,\n headerHeight: p.headerHeight,\n headerIcons: p.headerIcons,\n height: p.height,\n highlightRegions: p.highlightRegions,\n imageWindowLoader: p.imageWindowLoader,\n isDraggable: p.isDraggable,\n isFilling: p.isFilling,\n isFocused: p.isFocused,\n onCanvasBlur: p.onCanvasBlur,\n onCanvasFocused: p.onCanvasFocused,\n onCellFocused: p.onCellFocused,\n onContextMenu: p.onContextMenu,\n onDragEnd: p.onDragEnd,\n onDragLeave: p.onDragLeave,\n onDragOverCell: p.onDragOverCell,\n onDrop: p.onDrop,\n onKeyDown: p.onKeyDown,\n onKeyUp: p.onKeyUp,\n onMouseMove: p.onMouseMove,\n prelightCells: p.prelightCells,\n rowHeight: p.rowHeight,\n rows: p.rows,\n selection: p.selection,\n smoothScrollX: p.smoothScrollX,\n smoothScrollY: p.smoothScrollY,\n theme: p.theme,\n trailingRowType: p.trailingRowType,\n translateX: p.translateX,\n translateY: p.translateY,\n verticalBorder: p.verticalBorder,\n width: p.width,\n getCellContent: getMangledCellContent,\n isResizing: resizeCol !== void 0,\n onHeaderMenuClick: onHeaderMenuClickMangled,\n isDragging: dragColActive,\n onItemHovered: onItemHoveredImpl,\n onDragStart: onDragStartImpl,\n onMouseDown: onMouseDownImpl,\n allowResize: canResize,\n onMouseUp: onMouseUpImpl,\n dragAndDropState: dragOffset,\n onMouseMoveRaw: onMouseMove,\n ref: gridRef\n }\n );\n};\nvar data_grid_dnd_default = DataGridDnd;\n\n// src/scrolling-data-grid/infinite-scroller.tsx\nimport * as React10 from \"react\";\n\n// src/common/resize-detector.ts\nimport { useLayoutEffect as useLayoutEffect4, useState as useState6, useRef as useRef6 } from \"react\";\nfunction useResizeDetector(initialSize) {\n const ref = useRef6(null);\n const [size, setSize] = useState6({\n width: initialSize == null ? void 0 : initialSize[0],\n height: initialSize == null ? void 0 : initialSize[1]\n });\n useLayoutEffect4(() => {\n const resizeCallback = (entries) => {\n for (const entry of entries) {\n const { width, height } = entry && entry.contentRect || {};\n setSize((cv) => cv.width === width && cv.height === height ? cv : { width, height });\n }\n };\n const resizeObserver = new window.ResizeObserver(resizeCallback);\n if (ref.current) {\n resizeObserver.observe(ref.current, void 0);\n }\n return () => {\n resizeObserver.disconnect();\n };\n }, [ref.current]);\n return { ref, ...size };\n}\n\n// src/scrolling-data-grid/infinite-scroller.tsx\nvar _exp8 = () => (p) => p.isSafari ? \"scroll\" : \"auto\";\nvar ScrollRegionStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"ScrollRegionStyle\",\n class: \"s1jz82f8\",\n propsAsIs: false,\n vars: {\n \"s1jz82f8-0\": [_exp8()]\n }\n});\nfunction useTouchUpDelayed(delay) {\n const [hasTouches, setHasTouches] = React10.useState(false);\n const cbTimer = React10.useRef(0);\n useEventListener(\"touchstart\", React10.useCallback(() => {\n window.clearTimeout(cbTimer.current);\n setHasTouches(true);\n }, []), window, true, false);\n useEventListener(\"touchend\", React10.useCallback((e) => {\n if (e.touches.length === 0) {\n cbTimer.current = window.setTimeout(() => setHasTouches(false), delay);\n }\n }, [delay]), window, true, false);\n return hasTouches;\n}\nvar InfiniteScroller = (p) => {\n var _a, _b, _c, _d;\n const {\n children,\n clientHeight,\n scrollHeight,\n scrollWidth,\n update,\n draggable,\n className,\n preventDiagonalScrolling = false,\n paddingBottom = 0,\n paddingRight = 0,\n rightElement,\n rightElementProps,\n scrollRef,\n scrollToEnd,\n initialSize,\n minimap\n } = p;\n const padders = [];\n const rightElementSticky = (_a = rightElementProps == null ? void 0 : rightElementProps.sticky) != null ? _a : false;\n const rightElementFill = (_b = rightElementProps == null ? void 0 : rightElementProps.fill) != null ? _b : false;\n const offsetY = React10.useRef(0);\n const lastScrollY = React10.useRef(0);\n const scroller = React10.useRef(null);\n const dpr = window.devicePixelRatio;\n React10.useEffect(() => {\n const el = scroller.current;\n if (el === null || scrollToEnd !== true)\n return;\n el.scrollLeft = el.scrollWidth - el.clientWidth;\n }, [scrollToEnd]);\n const lastScrollPosition = React10.useRef({\n scrollLeft: 0,\n scrollTop: 0,\n lockDirection: void 0\n });\n const rightWrapRef = React10.useRef(null);\n const hasTouches = useTouchUpDelayed(200);\n const [isIdle, setIsIdle] = React10.useState(true);\n const idleTimer = React10.useRef(0);\n React10.useEffect(() => {\n if (!isIdle || hasTouches || lastScrollPosition.current.lockDirection === void 0)\n return;\n const el = scroller.current;\n if (el === null)\n return;\n const [lx, ly] = lastScrollPosition.current.lockDirection;\n if (lx !== void 0) {\n el.scrollLeft = lx;\n } else if (ly !== void 0) {\n el.scrollTop = ly;\n }\n lastScrollPosition.current.lockDirection = void 0;\n }, [hasTouches, isIdle]);\n const onScroll = React10.useCallback(() => {\n var _a2, _b2, _c2, _d2;\n const el = scroller.current;\n if (el === null)\n return;\n let scrollTop = el.scrollTop;\n let scrollLeft = el.scrollLeft;\n const lastScrollTop = lastScrollPosition.current.scrollTop;\n const lastScrollLeft = lastScrollPosition.current.scrollLeft;\n const dx = scrollLeft - lastScrollLeft;\n const dy = scrollTop - lastScrollTop;\n if (hasTouches && dx !== 0 && dy !== 0 && (Math.abs(dx) > 3 || Math.abs(dy) > 3) && preventDiagonalScrolling && lastScrollPosition.current.lockDirection === void 0) {\n lastScrollPosition.current.lockDirection = Math.abs(dx) < Math.abs(dy) ? [lastScrollLeft, void 0] : [void 0, lastScrollTop];\n }\n const lock = lastScrollPosition.current.lockDirection;\n scrollLeft = (_a2 = lock == null ? void 0 : lock[0]) != null ? _a2 : scrollLeft;\n scrollTop = (_b2 = lock == null ? void 0 : lock[1]) != null ? _b2 : scrollTop;\n lastScrollPosition.current.scrollLeft = scrollLeft;\n lastScrollPosition.current.scrollTop = scrollTop;\n const newY = scrollTop;\n const delta = lastScrollY.current - newY;\n const scrollableHeight = el.scrollHeight - el.clientHeight;\n lastScrollY.current = newY;\n if (scrollableHeight > 0 && (Math.abs(delta) > 2e3 || newY === 0 || newY === scrollableHeight) && scrollHeight > el.scrollHeight + 5) {\n const prog = newY / scrollableHeight;\n const recomputed = (scrollHeight - el.clientHeight) * prog;\n offsetY.current = recomputed - newY;\n }\n if (lock !== void 0) {\n window.clearTimeout(idleTimer.current);\n setIsIdle(false);\n idleTimer.current = window.setTimeout(() => setIsIdle(true), 200);\n }\n update({\n x: scrollLeft,\n y: newY + offsetY.current,\n width: el.clientWidth - paddingRight,\n height: el.clientHeight - paddingBottom,\n paddingRight: (_d2 = (_c2 = rightWrapRef.current) == null ? void 0 : _c2.clientWidth) != null ? _d2 : 0\n });\n }, [paddingBottom, paddingRight, scrollHeight, update, preventDiagonalScrolling, hasTouches]);\n const onScrollRef = React10.useRef(onScroll);\n onScrollRef.current = onScroll;\n const lastProps = React10.useRef();\n const didFirstScroll = React10.useRef(false);\n React10.useEffect(() => {\n if (didFirstScroll.current)\n onScroll();\n else\n didFirstScroll.current = true;\n }, [onScroll, paddingBottom, paddingRight]);\n const setRefs = React10.useCallback((instance) => {\n scroller.current = instance;\n if (scrollRef !== void 0) {\n scrollRef.current = instance;\n }\n }, [scrollRef]);\n let key = 0;\n let h = 0;\n padders.push(/* @__PURE__ */ React10.createElement(\"div\", {\n key: key++,\n style: {\n width: scrollWidth,\n height: 0\n }\n }));\n while (h < scrollHeight) {\n const toAdd = Math.min(5e6, scrollHeight - h);\n padders.push(/* @__PURE__ */ React10.createElement(\"div\", {\n key: key++,\n style: {\n width: 0,\n height: toAdd\n }\n }));\n h += toAdd;\n }\n const {\n ref,\n width,\n height\n } = useResizeDetector(initialSize);\n if (((_c = lastProps.current) == null ? void 0 : _c.height) !== height || ((_d = lastProps.current) == null ? void 0 : _d.width) !== width) {\n window.setTimeout(() => onScrollRef.current(), 0);\n lastProps.current = {\n width,\n height\n };\n }\n if ((width != null ? width : 0) === 0 || (height != null ? height : 0) === 0)\n return /* @__PURE__ */ React10.createElement(\"div\", {\n ref\n });\n return /* @__PURE__ */ React10.createElement(\"div\", {\n ref\n }, /* @__PURE__ */ React10.createElement(ScrollRegionStyle, {\n isSafari: browserIsSafari.value\n }, minimap, /* @__PURE__ */ React10.createElement(\"div\", {\n className: \"dvn-underlay\"\n }, children), /* @__PURE__ */ React10.createElement(\"div\", {\n ref: setRefs,\n style: lastProps.current,\n draggable,\n onDragStart: (e) => {\n if (!draggable) {\n e.stopPropagation();\n e.preventDefault();\n }\n },\n className: \"dvn-scroller \" + (className != null ? className : \"\"),\n onScroll\n }, /* @__PURE__ */ React10.createElement(\"div\", {\n className: \"dvn-scroll-inner\" + (rightElement === void 0 ? \" hidden\" : \"\")\n }, /* @__PURE__ */ React10.createElement(\"div\", {\n className: \"dvn-stack\"\n }, padders), rightElement !== void 0 && /* @__PURE__ */ React10.createElement(React10.Fragment, null, !rightElementFill && /* @__PURE__ */ React10.createElement(\"div\", {\n className: \"dvn-spacer\"\n }), /* @__PURE__ */ React10.createElement(\"div\", {\n ref: rightWrapRef,\n style: {\n height,\n maxHeight: clientHeight - Math.ceil(dpr % 1),\n position: \"sticky\",\n top: 0,\n paddingLeft: 1,\n marginBottom: -40,\n marginRight: paddingRight,\n flexGrow: rightElementFill ? 1 : void 0,\n right: rightElementSticky ? paddingRight != null ? paddingRight : 0 : void 0,\n pointerEvents: \"auto\"\n }\n }, rightElement))))));\n};\n\n// src/scrolling-data-grid/scrolling-data-grid.tsx\nimport clamp4 from \"lodash/clamp.js\";\nvar MinimapStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"MinimapStyle\",\n class: \"m15w2ly5\",\n propsAsIs: false\n});\nvar GridScroller = (p) => {\n var _a, _b, _c;\n const {\n columns,\n rows,\n rowHeight,\n headerHeight,\n groupHeaderHeight,\n enableGroups,\n freezeColumns,\n experimental,\n clientSize,\n className,\n onVisibleRegionChanged,\n scrollToEnd,\n scrollRef,\n preventDiagonalScrolling,\n rightElement,\n rightElementProps,\n overscrollX,\n overscrollY,\n showMinimap = false,\n initialSize,\n smoothScrollX = false,\n smoothScrollY = false,\n isDraggable\n } = p;\n const {\n paddingRight,\n paddingBottom\n } = experimental != null ? experimental : {};\n const [clientWidth, clientHeight] = clientSize;\n const last = React11.useRef();\n const lastX = React11.useRef();\n const lastY = React11.useRef();\n const lastSize = React11.useRef();\n const width = React11.useMemo(() => {\n let r = Math.max(0, overscrollX != null ? overscrollX : 0);\n for (const c of columns) {\n r += c.width;\n }\n return r;\n }, [columns, overscrollX]);\n let height = enableGroups ? headerHeight + groupHeaderHeight : headerHeight;\n if (typeof rowHeight === \"number\") {\n height += rows * rowHeight;\n } else {\n for (let r = 0; r < rows; r++) {\n height += rowHeight(r);\n }\n }\n if (overscrollY !== void 0) {\n height += overscrollY;\n }\n const lastArgs = React11.useRef();\n const processArgs = React11.useCallback(() => {\n var _a2, _b2, _c2;\n if (lastArgs.current === void 0)\n return;\n const args = {\n ...lastArgs.current\n };\n let x = 0;\n let tx = args.x < 0 ? -args.x : 0;\n let cellRight = 0;\n let cellX = 0;\n args.x = args.x < 0 ? 0 : args.x;\n let stickyColWidth = 0;\n for (let i = 0; i < freezeColumns; i++) {\n stickyColWidth += columns[i].width;\n }\n for (const c of columns) {\n const cx = x - stickyColWidth;\n if (args.x >= cx + c.width) {\n x += c.width;\n cellX++;\n cellRight++;\n } else if (args.x > cx) {\n x += c.width;\n if (smoothScrollX) {\n tx += cx - args.x;\n } else {\n cellX++;\n }\n cellRight++;\n } else if (args.x + args.width > cx) {\n x += c.width;\n cellRight++;\n } else {\n break;\n }\n }\n let ty = 0;\n let cellY = 0;\n let cellBottom = 0;\n if (typeof rowHeight === \"number\") {\n if (smoothScrollY) {\n cellY = Math.floor(args.y / rowHeight);\n ty = cellY * rowHeight - args.y;\n } else {\n cellY = Math.ceil(args.y / rowHeight);\n }\n cellBottom = Math.ceil(args.height / rowHeight) + cellY;\n if (ty < 0)\n cellBottom++;\n } else {\n let y = 0;\n for (let row = 0; row < rows; row++) {\n const rh = rowHeight(row);\n const cy = y + (smoothScrollY ? 0 : rh / 2);\n if (args.y >= y + rh) {\n y += rh;\n cellY++;\n cellBottom++;\n } else if (args.y > cy) {\n y += rh;\n if (smoothScrollY) {\n ty += cy - args.y;\n } else {\n cellY++;\n }\n cellBottom++;\n } else if (args.y + args.height > rh / 2 + y) {\n y += rh;\n cellBottom++;\n } else {\n break;\n }\n }\n }\n const rect = {\n x: cellX,\n y: cellY,\n width: cellRight - cellX,\n height: cellBottom - cellY\n };\n const oldRect = last.current;\n if (oldRect === void 0 || oldRect.y !== rect.y || oldRect.x !== rect.x || oldRect.height !== rect.height || oldRect.width !== rect.width || lastX.current !== tx || lastY.current !== ty || args.width !== ((_a2 = lastSize.current) == null ? void 0 : _a2[0]) || args.height !== ((_b2 = lastSize.current) == null ? void 0 : _b2[1])) {\n onVisibleRegionChanged == null ? void 0 : onVisibleRegionChanged({\n x: cellX,\n y: cellY,\n width: cellRight - cellX,\n height: cellBottom - cellY\n }, args.width, args.height, (_c2 = args.paddingRight) != null ? _c2 : 0, tx, ty);\n last.current = rect;\n lastX.current = tx;\n lastY.current = ty;\n lastSize.current = [args.width, args.height];\n }\n }, [columns, rowHeight, rows, onVisibleRegionChanged, freezeColumns, smoothScrollX, smoothScrollY]);\n const onScrollUpdate = React11.useCallback((args) => {\n lastArgs.current = args;\n processArgs();\n }, [processArgs]);\n React11.useEffect(() => {\n processArgs();\n }, [processArgs]);\n const scroller = (_a = scrollRef == null ? void 0 : scrollRef.current) != null ? _a : void 0;\n const aspect = clamp4(width / height, 2 / 3, 1.5);\n const maxSize = 200;\n const w = aspect > 1 ? maxSize : Math.ceil(maxSize * aspect);\n const h = aspect > 1 ? Math.ceil(maxSize / aspect) : maxSize;\n const hRatio = w / width;\n const vRatio = h / height;\n const vWidth = Math.min(clientWidth * Math.max(hRatio, 0.01), w);\n const vHeight = Math.min(clientHeight * Math.max(vRatio, 0.01), h);\n const left = ((_b = scroller == null ? void 0 : scroller.scrollLeft) != null ? _b : 0) / (width - clientWidth) * (w - vWidth);\n const top = ((_c = scroller == null ? void 0 : scroller.scrollTop) != null ? _c : 0) / (height - clientHeight) * (h - vHeight);\n const minimap = React11.useMemo(() => {\n if (!showMinimap || vWidth === 0 || vHeight === 0)\n return void 0;\n const handleMouse = (e) => {\n if (scroller === void 0)\n return;\n const bounds = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - bounds.x - vWidth / 2;\n const y = e.clientY - bounds.y - vHeight / 2;\n const newScrollLeft = (width - scroller.clientWidth) * (x / (w - vWidth));\n const newScrollTop = (height - scroller.clientHeight) * (y / (h - vHeight));\n scroller.scrollTo({\n left: newScrollLeft,\n top: newScrollTop,\n behavior: e.type === \"mousemove\" ? \"auto\" : \"smooth\"\n });\n };\n return /* @__PURE__ */ React11.createElement(MinimapStyle, {\n style: {\n width: w,\n height: h\n },\n \"data-testid\": \"minimap-container\",\n onMouseMove: (e) => {\n if (e.buttons !== 1)\n return;\n handleMouse(e);\n },\n onClick: handleMouse\n }, /* @__PURE__ */ React11.createElement(\"div\", {\n className: \"header\"\n }), /* @__PURE__ */ React11.createElement(\"div\", {\n className: \"locationMarker\",\n onDragStart: (e) => e.preventDefault(),\n style: {\n left,\n top,\n width: vWidth,\n height: vHeight,\n borderRadius: Math.min(vWidth, vHeight * 0.2, 9)\n }\n }));\n }, [h, height, left, scroller, showMinimap, top, vHeight, vWidth, w, width]);\n return /* @__PURE__ */ React11.createElement(InfiniteScroller, {\n scrollRef,\n minimap,\n className,\n preventDiagonalScrolling,\n draggable: isDraggable === true || typeof isDraggable === \"string\",\n scrollWidth: width + (paddingRight != null ? paddingRight : 0),\n scrollHeight: height + (paddingBottom != null ? paddingBottom : 0),\n clientHeight,\n rightElement,\n paddingBottom,\n paddingRight,\n rightElementProps,\n update: onScrollUpdate,\n initialSize,\n scrollToEnd\n }, /* @__PURE__ */ React11.createElement(data_grid_dnd_default, {\n eventTargetRef: scrollRef,\n width: clientWidth,\n height: clientHeight,\n accessibilityHeight: p.accessibilityHeight,\n canvasRef: p.canvasRef,\n cellXOffset: p.cellXOffset,\n cellYOffset: p.cellYOffset,\n columns: p.columns,\n disabledRows: p.disabledRows,\n enableGroups: p.enableGroups,\n fillHandle: p.fillHandle,\n firstColAccessible: p.firstColAccessible,\n fixedShadowX: p.fixedShadowX,\n fixedShadowY: p.fixedShadowY,\n freezeColumns: p.freezeColumns,\n getCellContent: p.getCellContent,\n getCellRenderer: p.getCellRenderer,\n getGroupDetails: p.getGroupDetails,\n getRowThemeOverride: p.getRowThemeOverride,\n groupHeaderHeight: p.groupHeaderHeight,\n headerHeight: p.headerHeight,\n highlightRegions: p.highlightRegions,\n imageWindowLoader: p.imageWindowLoader,\n isFilling: p.isFilling,\n isFocused: p.isFocused,\n lockColumns: p.lockColumns,\n maxColumnWidth: p.maxColumnWidth,\n minColumnWidth: p.minColumnWidth,\n onHeaderMenuClick: p.onHeaderMenuClick,\n onMouseMove: p.onMouseMove,\n prelightCells: p.prelightCells,\n rowHeight: p.rowHeight,\n rows: p.rows,\n selection: p.selection,\n theme: p.theme,\n trailingRowType: p.trailingRowType,\n translateX: p.translateX,\n translateY: p.translateY,\n verticalBorder: p.verticalBorder,\n drawCustomCell: p.drawCustomCell,\n drawFocusRing: p.drawFocusRing,\n drawHeader: p.drawHeader,\n experimental: p.experimental,\n gridRef: p.gridRef,\n headerIcons: p.headerIcons,\n isDraggable: p.isDraggable,\n onCanvasBlur: p.onCanvasBlur,\n onCanvasFocused: p.onCanvasFocused,\n onCellFocused: p.onCellFocused,\n onColumnMoved: p.onColumnMoved,\n onColumnResize: p.onColumnResize,\n onColumnResizeEnd: p.onColumnResizeEnd,\n onColumnResizeStart: p.onColumnResizeStart,\n onContextMenu: p.onContextMenu,\n onDragEnd: p.onDragEnd,\n onDragLeave: p.onDragLeave,\n onDragOverCell: p.onDragOverCell,\n onDragStart: p.onDragStart,\n onDrop: p.onDrop,\n onItemHovered: p.onItemHovered,\n onKeyDown: p.onKeyDown,\n onKeyUp: p.onKeyUp,\n onMouseDown: p.onMouseDown,\n onMouseUp: p.onMouseUp,\n onRowMoved: p.onRowMoved,\n smoothScrollX: p.smoothScrollX,\n smoothScrollY: p.smoothScrollY\n }));\n};\nvar scrolling_data_grid_default = GridScroller;\n\n// src/data-grid-search/data-grid-search-style.tsx\nvar _exp9 = () => (p) => p.showSearch ? 0 : 400;\nvar SearchWrapper = /* @__PURE__ */ styled_default(\"div\")({\n name: \"SearchWrapper\",\n class: \"sxep88s\",\n propsAsIs: false,\n vars: {\n \"sxep88s-0\": [_exp9(), \"px\"]\n }\n});\n\n// src/data-grid-search/data-grid-search.tsx\nvar upArrow = /* @__PURE__ */ React12.createElement(\"svg\", { className: \"button-icon\", viewBox: \"0 0 512 512\" }, /* @__PURE__ */ React12.createElement(\n \"path\",\n {\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"48\",\n d: \"M112 244l144-144 144 144M256 120v292\"\n }\n));\nvar downArrow = /* @__PURE__ */ React12.createElement(\"svg\", { className: \"button-icon\", viewBox: \"0 0 512 512\" }, /* @__PURE__ */ React12.createElement(\n \"path\",\n {\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"48\",\n d: \"M112 268l144 144 144-144M256 392V100\"\n }\n));\nvar closeX = /* @__PURE__ */ React12.createElement(\"svg\", { className: \"button-icon\", viewBox: \"0 0 512 512\" }, /* @__PURE__ */ React12.createElement(\n \"path\",\n {\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"32\",\n d: \"M368 368L144 144M368 144L144 368\"\n }\n));\nvar targetSearchTimeMS = 10;\nvar DataGridSearch = (p) => {\n const {\n canvasRef,\n cellYOffset,\n rows,\n columns,\n searchInputRef,\n searchValue,\n searchResults: searchResultsIn,\n onSearchValueChange,\n getCellsForSelection,\n onSearchResultsChanged,\n showSearch = false,\n onSearchClose\n } = p;\n const [searchID] = React12.useState(() => \"search-box-\" + Math.round(Math.random() * 1e3));\n const [searchStringInner, setSearchStringInner] = React12.useState(\"\");\n const searchString = searchValue != null ? searchValue : searchStringInner;\n const setSearchString = React12.useCallback(\n (newVal) => {\n setSearchStringInner(newVal);\n onSearchValueChange == null ? void 0 : onSearchValueChange(newVal);\n },\n [onSearchValueChange]\n );\n const [searchStatus, setSearchStatus] = React12.useState();\n const searchStatusRef = React12.useRef(searchStatus);\n searchStatusRef.current = searchStatus;\n React12.useEffect(() => {\n if (searchResultsIn === void 0)\n return;\n if (searchResultsIn.length > 0) {\n setSearchStatus((cv) => {\n var _a;\n return {\n rowsSearched: rows,\n results: searchResultsIn.length,\n selectedIndex: (_a = cv == null ? void 0 : cv.selectedIndex) != null ? _a : -1\n };\n });\n } else {\n setSearchStatus(void 0);\n }\n }, [rows, searchResultsIn]);\n const abortControllerRef = React12.useRef(new AbortController());\n const searchHandle = React12.useRef();\n const [searchResultsInner, setSearchResultsInner] = React12.useState([]);\n const searchResults = searchResultsIn != null ? searchResultsIn : searchResultsInner;\n const cancelSearch = React12.useCallback(() => {\n if (searchHandle.current !== void 0) {\n window.cancelAnimationFrame(searchHandle.current);\n searchHandle.current = void 0;\n abortControllerRef.current.abort();\n }\n }, []);\n const cellYOffsetRef = React12.useRef(cellYOffset);\n cellYOffsetRef.current = cellYOffset;\n const beginSearch = React12.useCallback(\n (str) => {\n const regex = new RegExp(str.replace(/([$()*+.?[\\\\\\]^{|}-])/g, \"\\\\$1\"), \"i\");\n let startY = cellYOffsetRef.current;\n let searchStride = Math.min(10, rows);\n let rowsSearched = 0;\n setSearchStatus(void 0);\n setSearchResultsInner([]);\n const runningResult = [];\n const tick = async () => {\n var _a, _b;\n if (getCellsForSelection === void 0)\n return;\n const tStart = performance.now();\n const rowsLeft = rows - rowsSearched;\n let data = getCellsForSelection(\n {\n x: 0,\n y: startY,\n width: columns.length,\n height: Math.min(searchStride, rowsLeft, rows - startY)\n },\n abortControllerRef.current.signal\n );\n if (typeof data === \"function\") {\n data = await data();\n }\n let added = false;\n for (const [row, d] of data.entries()) {\n for (const [col, cell] of d.entries()) {\n let testString;\n switch (cell.kind) {\n case GridCellKind.Text:\n case GridCellKind.Number:\n testString = cell.displayData;\n break;\n case GridCellKind.Uri:\n case GridCellKind.Markdown:\n testString = cell.data;\n break;\n case GridCellKind.Boolean:\n testString = typeof cell.data === \"boolean\" ? cell.data.toString() : void 0;\n break;\n case GridCellKind.Image:\n case GridCellKind.Bubble:\n testString = cell.data.join(\"\\u{1F433}\");\n break;\n case GridCellKind.Custom:\n testString = cell.copyData;\n break;\n }\n if (testString !== void 0 && regex.test(testString)) {\n runningResult.push([col, row + startY]);\n added = true;\n }\n }\n }\n const tEnd = performance.now();\n if (added) {\n setSearchResultsInner([...runningResult]);\n }\n rowsSearched += data.length;\n assert(rowsSearched <= rows);\n const selectedIndex = (_b = (_a = searchStatusRef.current) == null ? void 0 : _a.selectedIndex) != null ? _b : -1;\n setSearchStatus({\n results: runningResult.length,\n rowsSearched,\n selectedIndex\n });\n onSearchResultsChanged == null ? void 0 : onSearchResultsChanged(runningResult, selectedIndex);\n if (startY + searchStride >= rows) {\n startY = 0;\n } else {\n startY += searchStride;\n }\n const tElapsed = tEnd - tStart;\n const rounded = Math.max(tElapsed, 1);\n const scalar = targetSearchTimeMS / rounded;\n searchStride = Math.ceil(searchStride * scalar);\n if (rowsSearched < rows && runningResult.length < 1e3) {\n searchHandle.current = window.requestAnimationFrame(tick);\n }\n };\n cancelSearch();\n searchHandle.current = window.requestAnimationFrame(tick);\n },\n [cancelSearch, columns.length, getCellsForSelection, onSearchResultsChanged, rows]\n );\n const onClose = React12.useCallback(() => {\n var _a;\n onSearchClose == null ? void 0 : onSearchClose();\n setSearchStatus(void 0);\n setSearchResultsInner([]);\n onSearchResultsChanged == null ? void 0 : onSearchResultsChanged([], -1);\n cancelSearch();\n (_a = canvasRef == null ? void 0 : canvasRef.current) == null ? void 0 : _a.focus();\n }, [cancelSearch, canvasRef, onSearchClose, onSearchResultsChanged]);\n const onSearchChange = React12.useCallback(\n (event) => {\n setSearchString(event.target.value);\n if (searchResultsIn !== void 0)\n return;\n if (event.target.value === \"\") {\n setSearchStatus(void 0);\n setSearchResultsInner([]);\n cancelSearch();\n } else {\n beginSearch(event.target.value);\n }\n },\n [beginSearch, cancelSearch, setSearchString, searchResultsIn]\n );\n React12.useEffect(() => {\n if (showSearch && searchInputRef.current !== null) {\n setSearchString(\"\");\n searchInputRef.current.focus({ preventScroll: true });\n }\n }, [showSearch, searchInputRef, setSearchString]);\n const onNext = React12.useCallback(\n (ev) => {\n var _a;\n (_a = ev == null ? void 0 : ev.stopPropagation) == null ? void 0 : _a.call(ev);\n if (searchStatus === void 0)\n return;\n const newIndex = (searchStatus.selectedIndex + 1) % searchStatus.results;\n setSearchStatus({\n ...searchStatus,\n selectedIndex: newIndex\n });\n onSearchResultsChanged == null ? void 0 : onSearchResultsChanged(searchResults, newIndex);\n },\n [searchStatus, onSearchResultsChanged, searchResults]\n );\n const onPrev = React12.useCallback(\n (ev) => {\n var _a;\n (_a = ev == null ? void 0 : ev.stopPropagation) == null ? void 0 : _a.call(ev);\n if (searchStatus === void 0)\n return;\n let newIndex = (searchStatus.selectedIndex - 1) % searchStatus.results;\n if (newIndex < 0)\n newIndex += searchStatus.results;\n setSearchStatus({\n ...searchStatus,\n selectedIndex: newIndex\n });\n onSearchResultsChanged == null ? void 0 : onSearchResultsChanged(searchResults, newIndex);\n },\n [onSearchResultsChanged, searchResults, searchStatus]\n );\n const onSearchKeyDown = React12.useCallback(\n (event) => {\n if ((event.ctrlKey || event.metaKey) && event.nativeEvent.code === \"KeyF\" || event.key === \"Escape\") {\n onClose();\n event.stopPropagation();\n event.preventDefault();\n } else if (event.key === \"Enter\") {\n if (event.shiftKey) {\n onPrev();\n } else {\n onNext();\n }\n }\n },\n [onClose, onNext, onPrev]\n );\n React12.useEffect(() => {\n return () => {\n cancelSearch();\n };\n }, [cancelSearch]);\n const searchbox = React12.useMemo(() => {\n var _a, _b, _c;\n let resultString;\n if (searchStatus !== void 0) {\n resultString = searchStatus.results >= 1e3 ? `over 1000` : `${searchStatus.results} result${searchStatus.results !== 1 ? \"s\" : \"\"}`;\n if (searchStatus.selectedIndex >= 0) {\n resultString = `${searchStatus.selectedIndex + 1} of ${resultString}`;\n }\n }\n const cancelEvent = (ev) => {\n ev.stopPropagation();\n };\n const rowsSearchedProgress = Math.floor(((_a = searchStatus == null ? void 0 : searchStatus.rowsSearched) != null ? _a : 0) / rows * 100);\n const progressStyle = {\n width: `${rowsSearchedProgress}%`\n };\n return /* @__PURE__ */ React12.createElement(\n SearchWrapper,\n {\n showSearch,\n onMouseDown: cancelEvent,\n onMouseMove: cancelEvent,\n onMouseUp: cancelEvent,\n onClick: cancelEvent\n },\n /* @__PURE__ */ React12.createElement(\"div\", { className: \"search-bar-inner\" }, /* @__PURE__ */ React12.createElement(\n \"input\",\n {\n id: searchID,\n \"aria-hidden\": !showSearch,\n \"data-testid\": \"search-input\",\n ref: searchInputRef,\n onChange: onSearchChange,\n value: searchString,\n tabIndex: showSearch ? void 0 : -1,\n onKeyDownCapture: onSearchKeyDown\n }\n ), /* @__PURE__ */ React12.createElement(\n \"button\",\n {\n \"aria-label\": \"Previous Result\",\n \"aria-hidden\": !showSearch,\n tabIndex: showSearch ? void 0 : -1,\n onClick: onPrev,\n disabled: ((_b = searchStatus == null ? void 0 : searchStatus.results) != null ? _b : 0) === 0\n },\n upArrow\n ), /* @__PURE__ */ React12.createElement(\n \"button\",\n {\n \"aria-label\": \"Next Result\",\n \"aria-hidden\": !showSearch,\n tabIndex: showSearch ? void 0 : -1,\n onClick: onNext,\n disabled: ((_c = searchStatus == null ? void 0 : searchStatus.results) != null ? _c : 0) === 0\n },\n downArrow\n ), onSearchClose !== void 0 && /* @__PURE__ */ React12.createElement(\n \"button\",\n {\n \"aria-label\": \"Close Search\",\n \"aria-hidden\": !showSearch,\n \"data-testid\": \"search-close-button\",\n tabIndex: showSearch ? void 0 : -1,\n onClick: onClose\n },\n closeX\n )),\n searchStatus !== void 0 ? /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(\"div\", { className: \"search-status\" }, /* @__PURE__ */ React12.createElement(\"div\", { \"data-testid\": \"search-result-area\" }, resultString)), /* @__PURE__ */ React12.createElement(\"div\", { className: \"search-progress\", style: progressStyle })) : /* @__PURE__ */ React12.createElement(\"div\", { className: \"search-status\" }, /* @__PURE__ */ React12.createElement(\"label\", { htmlFor: searchID }, \"Type to search\"))\n );\n }, [\n onClose,\n onNext,\n onPrev,\n onSearchChange,\n onSearchClose,\n onSearchKeyDown,\n rows,\n searchStatus,\n searchString,\n showSearch,\n searchID,\n searchInputRef\n ]);\n return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(\n scrolling_data_grid_default,\n {\n prelightCells: searchResults,\n accessibilityHeight: p.accessibilityHeight,\n canvasRef: p.canvasRef,\n cellXOffset: p.cellXOffset,\n cellYOffset: p.cellYOffset,\n className: p.className,\n clientSize: p.clientSize,\n columns: p.columns,\n disabledRows: p.disabledRows,\n enableGroups: p.enableGroups,\n fillHandle: p.fillHandle,\n firstColAccessible: p.firstColAccessible,\n fixedShadowX: p.fixedShadowX,\n fixedShadowY: p.fixedShadowY,\n freezeColumns: p.freezeColumns,\n getCellContent: p.getCellContent,\n getCellRenderer: p.getCellRenderer,\n getGroupDetails: p.getGroupDetails,\n getRowThemeOverride: p.getRowThemeOverride,\n groupHeaderHeight: p.groupHeaderHeight,\n headerHeight: p.headerHeight,\n highlightRegions: p.highlightRegions,\n imageWindowLoader: p.imageWindowLoader,\n initialSize: p.initialSize,\n isFilling: p.isFilling,\n isFocused: p.isFocused,\n lockColumns: p.lockColumns,\n maxColumnWidth: p.maxColumnWidth,\n minColumnWidth: p.minColumnWidth,\n onHeaderMenuClick: p.onHeaderMenuClick,\n onMouseMove: p.onMouseMove,\n onVisibleRegionChanged: p.onVisibleRegionChanged,\n overscrollX: p.overscrollX,\n overscrollY: p.overscrollY,\n preventDiagonalScrolling: p.preventDiagonalScrolling,\n rightElement: p.rightElement,\n rightElementProps: p.rightElementProps,\n rowHeight: p.rowHeight,\n rows: p.rows,\n scrollRef: p.scrollRef,\n selection: p.selection,\n showMinimap: p.showMinimap,\n theme: p.theme,\n trailingRowType: p.trailingRowType,\n translateX: p.translateX,\n translateY: p.translateY,\n verticalBorder: p.verticalBorder,\n drawCustomCell: p.drawCustomCell,\n drawFocusRing: p.drawFocusRing,\n drawHeader: p.drawHeader,\n experimental: p.experimental,\n gridRef: p.gridRef,\n headerIcons: p.headerIcons,\n isDraggable: p.isDraggable,\n onCanvasBlur: p.onCanvasBlur,\n onCanvasFocused: p.onCanvasFocused,\n onCellFocused: p.onCellFocused,\n onColumnMoved: p.onColumnMoved,\n onColumnResize: p.onColumnResize,\n onColumnResizeEnd: p.onColumnResizeEnd,\n onColumnResizeStart: p.onColumnResizeStart,\n onContextMenu: p.onContextMenu,\n onDragEnd: p.onDragEnd,\n onDragLeave: p.onDragLeave,\n onDragOverCell: p.onDragOverCell,\n onDragStart: p.onDragStart,\n onDrop: p.onDrop,\n onItemHovered: p.onItemHovered,\n onKeyDown: p.onKeyDown,\n onKeyUp: p.onKeyUp,\n onMouseDown: p.onMouseDown,\n onMouseUp: p.onMouseUp,\n onRowMoved: p.onRowMoved,\n smoothScrollX: p.smoothScrollX,\n smoothScrollY: p.smoothScrollY,\n scrollToEnd: p.scrollToEnd\n }\n ), searchbox);\n};\nvar data_grid_search_default = DataGridSearch;\n\n// src/data-editor/group-rename.tsx\nimport React13 from \"react\";\nvar _exp10 = () => (p) => Math.max(16, p.targetHeight - 10);\nvar RenameInput = /* @__PURE__ */ styled_default(\"input\")({\n name: \"RenameInput\",\n class: \"r1kzy40b\",\n propsAsIs: false,\n vars: {\n \"r1kzy40b-0\": [_exp10(), \"px\"]\n }\n});\nvar GroupRename = (p) => {\n const {\n bounds,\n group,\n onClose,\n canvasBounds,\n onFinish\n } = p;\n const [value, setValue] = React13.useState(group);\n return /* @__PURE__ */ React13.createElement(ClickOutsideContainer, {\n style: {\n position: \"absolute\",\n left: bounds.x - canvasBounds.left + 1,\n top: bounds.y - canvasBounds.top,\n width: bounds.width - 2,\n height: bounds.height\n },\n className: \"c1sqdbw3\",\n onClickOutside: onClose\n }, /* @__PURE__ */ React13.createElement(RenameInput, {\n targetHeight: bounds.height,\n \"data-testid\": \"group-rename-input\",\n value,\n onBlur: onClose,\n onFocus: (e) => e.target.setSelectionRange(0, value.length),\n onChange: (e) => setValue(e.target.value),\n onKeyDown: (e) => {\n if (e.key === \"Enter\") {\n onFinish(value);\n } else if (e.key === \"Escape\") {\n onClose();\n }\n },\n autoFocus: true\n }));\n};\n\n// src/data-editor/use-column-sizer.ts\nimport * as React14 from \"react\";\nvar defaultSize = 150;\nfunction measureCell(ctx, cell, theme, getCellRenderer) {\n var _a, _b;\n const r = getCellRenderer(cell);\n return (_b = (_a = r == null ? void 0 : r.measure) == null ? void 0 : _a.call(r, ctx, cell, theme)) != null ? _b : defaultSize;\n}\nfunction measureColumn(ctx, theme, c, colIndex, selectedData, minColumnWidth, maxColumnWidth, removeOutliers, getCellRenderer) {\n let sizes = [];\n if (selectedData !== void 0) {\n sizes.push(\n ...selectedData.map((row) => row[colIndex]).map((cell) => measureCell(ctx, cell, theme, getCellRenderer))\n );\n }\n if (sizes.length > 5 && removeOutliers) {\n const average = sizes.reduce((a, b) => a + b) / sizes.length;\n sizes = sizes.filter((a) => a < average * 2);\n }\n sizes.push(ctx.measureText(c.title).width + 16 + (c.icon === void 0 ? 0 : 28));\n const biggest = Math.max(...sizes);\n const final = Math.max(Math.ceil(minColumnWidth), Math.min(Math.floor(maxColumnWidth), Math.ceil(biggest)));\n return {\n ...c,\n width: final\n };\n}\nfunction useColumnSizer(columns, rows, getCellsForSelection, clientWidth, minColumnWidth, maxColumnWidth, theme, getCellRenderer, abortController) {\n const rowsRef = React14.useRef(rows);\n const getCellsForSelectionRef = React14.useRef(getCellsForSelection);\n const themeRef = React14.useRef(theme);\n rowsRef.current = rows;\n getCellsForSelectionRef.current = getCellsForSelection;\n themeRef.current = theme;\n const [canvas, ctx] = React14.useMemo(() => {\n if (typeof window === \"undefined\")\n return [null, null];\n const offscreen = document.createElement(\"canvas\");\n offscreen.style[\"display\"] = \"none\";\n offscreen.style[\"opacity\"] = \"0\";\n offscreen.style[\"position\"] = \"fixed\";\n return [offscreen, offscreen.getContext(\"2d\", { alpha: false })];\n }, []);\n React14.useLayoutEffect(() => {\n if (canvas)\n document.documentElement.append(canvas);\n return () => {\n canvas == null ? void 0 : canvas.remove();\n };\n }, [canvas]);\n const memoMap = React14.useRef({});\n const lastColumns = React14.useRef();\n const [selectedData, setSelectionData] = React14.useState();\n React14.useLayoutEffect(() => {\n const getCells = getCellsForSelectionRef.current;\n if (getCells === void 0 || columns.every(isSizedGridColumn))\n return;\n let computeRows = Math.max(1, 10 - Math.floor(columns.length / 1e4));\n let tailRows = 0;\n if (computeRows < rowsRef.current && computeRows > 1) {\n computeRows--;\n tailRows = 1;\n }\n const computeArea = {\n x: 0,\n y: 0,\n width: columns.length,\n height: Math.min(rowsRef.current, computeRows)\n };\n const tailComputeArea = {\n x: 0,\n y: rowsRef.current - 1,\n width: columns.length,\n height: 1\n };\n const fn = async () => {\n const getResult = getCells(computeArea, abortController.signal);\n const tailGetResult = tailRows > 0 ? getCells(tailComputeArea, abortController.signal) : void 0;\n let toSet;\n if (typeof getResult === \"object\") {\n toSet = getResult;\n } else {\n toSet = await resolveCellsThunk(getResult);\n }\n if (tailGetResult !== void 0) {\n if (typeof tailGetResult === \"object\") {\n toSet = [...toSet, ...tailGetResult];\n } else {\n toSet = [...toSet, ...await resolveCellsThunk(tailGetResult)];\n }\n }\n lastColumns.current = columns;\n setSelectionData(toSet);\n };\n void fn();\n }, [abortController.signal, columns]);\n return React14.useMemo(() => {\n var _a;\n const getRaw = () => {\n if (columns.every(isSizedGridColumn)) {\n return columns;\n }\n if (ctx === null) {\n return columns.map((c) => {\n if (isSizedGridColumn(c))\n return c;\n return {\n ...c,\n width: defaultSize\n };\n });\n }\n ctx.font = `${themeRef.current.baseFontStyle} ${themeRef.current.fontFamily}`;\n return columns.map((c, colIndex) => {\n if (isSizedGridColumn(c))\n return c;\n if (memoMap.current[c.id] !== void 0) {\n return {\n ...c,\n width: memoMap.current[c.id]\n };\n }\n if (selectedData === void 0 || lastColumns.current !== columns || c.id === void 0) {\n return {\n ...c,\n width: defaultSize\n };\n }\n const r = measureColumn(\n ctx,\n theme,\n c,\n colIndex,\n selectedData,\n minColumnWidth,\n maxColumnWidth,\n true,\n getCellRenderer\n );\n memoMap.current[c.id] = r.width;\n return r;\n });\n };\n let result = getRaw();\n let totalWidth = 0;\n let totalGrow = 0;\n const distribute = [];\n for (const [i, c] of result.entries()) {\n totalWidth += c.width;\n if (c.grow !== void 0 && c.grow > 0) {\n totalGrow += c.grow;\n distribute.push(i);\n }\n }\n if (totalWidth < clientWidth && distribute.length > 0) {\n const writeable = [...result];\n const extra = clientWidth - totalWidth;\n let remaining = extra;\n for (let di = 0; di < distribute.length; di++) {\n const i = distribute[di];\n const weighted = ((_a = result[i].grow) != null ? _a : 0) / totalGrow;\n const toAdd = di === distribute.length - 1 ? remaining : Math.min(remaining, Math.floor(extra * weighted));\n writeable[i] = {\n ...result[i],\n growOffset: toAdd,\n width: result[i].width + toAdd\n };\n remaining -= toAdd;\n }\n result = writeable;\n }\n return result;\n }, [clientWidth, columns, ctx, selectedData, theme, minColumnWidth, maxColumnWidth, getCellRenderer]);\n}\n\n// src/common/is-hotkey.ts\nfunction checkKey(key, args) {\n if (key === void 0)\n return false;\n if (key.length > 1 && key.startsWith(\"_\")) {\n const keycode = Number.parseInt(key.slice(1));\n if (keycode !== args.keyCode)\n return false;\n } else {\n if (key !== args.key)\n return false;\n }\n return true;\n}\nfunction isHotkey(hotkey, args) {\n if (hotkey.length === 0)\n return false;\n let wantCtrl = false;\n let wantShift = false;\n let wantAlt = false;\n let wantMeta = false;\n const split = hotkey.split(\"+\");\n const key = split.pop();\n if (!checkKey(key, args))\n return false;\n for (const accel of split) {\n switch (accel) {\n case \"ctrl\":\n wantCtrl = true;\n break;\n case \"shift\":\n wantShift = true;\n break;\n case \"alt\":\n wantAlt = true;\n break;\n case \"meta\":\n wantMeta = true;\n break;\n case \"primary\":\n if (browserIsOSX.value) {\n wantMeta = true;\n } else {\n wantCtrl = true;\n }\n break;\n }\n }\n return args.altKey === wantAlt && args.ctrlKey === wantCtrl && args.shiftKey === wantShift && args.metaKey === wantMeta;\n}\n\n// src/data-grid/use-selection-behavior.ts\nimport React15 from \"react\";\nfunction useSelectionBehavior(gridSelection, setGridSelection, rangeBehavior, columnBehavior, rowBehavior, rangeSelect) {\n const setCurrent = React15.useCallback(\n (value, expand, append, trigger) => {\n var _a, _b;\n if ((rangeSelect === \"cell\" || rangeSelect === \"multi-cell\") && value !== void 0) {\n value = {\n ...value,\n range: {\n x: value.cell[0],\n y: value.cell[1],\n width: 1,\n height: 1\n }\n };\n }\n const rangeMixable = rangeBehavior === \"mixed\" && (append || trigger === \"drag\");\n const allowColumnCoSelect = columnBehavior === \"mixed\" && rangeMixable;\n const allowRowCoSelect = rowBehavior === \"mixed\" && rangeMixable;\n let newVal = {\n current: value === void 0 ? void 0 : {\n ...value,\n rangeStack: trigger === \"drag\" ? (_b = (_a = gridSelection.current) == null ? void 0 : _a.rangeStack) != null ? _b : [] : []\n },\n columns: allowColumnCoSelect ? gridSelection.columns : CompactSelection.empty(),\n rows: allowRowCoSelect ? gridSelection.rows : CompactSelection.empty()\n };\n const addLastRange = append && (rangeSelect === \"multi-rect\" || rangeSelect === \"multi-cell\");\n if (addLastRange && newVal.current !== void 0 && gridSelection.current !== void 0) {\n newVal = {\n ...newVal,\n current: {\n ...newVal.current,\n rangeStack: [...gridSelection.current.rangeStack, gridSelection.current.range]\n }\n };\n }\n setGridSelection(newVal, expand);\n },\n [columnBehavior, gridSelection, rangeBehavior, rangeSelect, rowBehavior, setGridSelection]\n );\n const setSelectedRows = React15.useCallback(\n (newRows, append, allowMixed) => {\n newRows = newRows != null ? newRows : gridSelection.rows;\n if (append !== void 0) {\n newRows = newRows.add(append);\n }\n let newVal;\n if (rowBehavior === \"exclusive\" && newRows.length > 0) {\n newVal = {\n current: void 0,\n columns: CompactSelection.empty(),\n rows: newRows\n };\n } else {\n const rangeMixed = allowMixed && rangeBehavior === \"mixed\";\n const columnMixed = allowMixed && columnBehavior === \"mixed\";\n const current = !rangeMixed ? void 0 : gridSelection.current;\n newVal = {\n current,\n columns: columnMixed ? gridSelection.columns : CompactSelection.empty(),\n rows: newRows\n };\n }\n setGridSelection(newVal, false);\n },\n [columnBehavior, gridSelection, rangeBehavior, rowBehavior, setGridSelection]\n );\n const setSelectedColumns = React15.useCallback(\n (newCols, append, allowMixed) => {\n newCols = newCols != null ? newCols : gridSelection.columns;\n if (append !== void 0) {\n newCols = newCols.add(append);\n }\n let newVal;\n if (columnBehavior === \"exclusive\" && newCols.length > 0) {\n newVal = {\n current: void 0,\n rows: CompactSelection.empty(),\n columns: newCols\n };\n } else {\n const rangeMixed = allowMixed && rangeBehavior === \"mixed\";\n const rowMixed = allowMixed && rowBehavior === \"mixed\";\n const current = !rangeMixed ? void 0 : gridSelection.current;\n newVal = {\n current,\n rows: rowMixed ? gridSelection.rows : CompactSelection.empty(),\n columns: newCols\n };\n }\n setGridSelection(newVal, false);\n },\n [columnBehavior, gridSelection, rangeBehavior, rowBehavior, setGridSelection]\n );\n return [setCurrent, setSelectedRows, setSelectedColumns];\n}\n\n// src/data-editor/use-cells-for-selection.ts\nimport * as React16 from \"react\";\nfunction useCellsForSelection(getCellsForSelectionIn, getCellContent, rowMarkerOffset, abortController, rows) {\n const getCellsForSelectionDirectWhenValid = React16.useCallback(\n (rect) => {\n var _a;\n if (getCellsForSelectionIn === true) {\n const result = [];\n for (let y = rect.y; y < rect.y + rect.height; y++) {\n const row = [];\n for (let x = rect.x; x < rect.x + rect.width; x++) {\n if (x < 0 || y >= rows) {\n row.push({\n kind: GridCellKind.Loading,\n allowOverlay: false\n });\n } else {\n row.push(getCellContent([x, y]));\n }\n }\n result.push(row);\n }\n return result;\n }\n return (_a = getCellsForSelectionIn == null ? void 0 : getCellsForSelectionIn(rect, abortController.signal)) != null ? _a : [];\n },\n [abortController.signal, getCellContent, getCellsForSelectionIn, rows]\n );\n const getCellsForSelectionDirect = getCellsForSelectionIn !== void 0 ? getCellsForSelectionDirectWhenValid : void 0;\n const getCellsForSelectionMangled = React16.useCallback(\n (rect) => {\n if (getCellsForSelectionDirect === void 0)\n return [];\n const newRect = {\n ...rect,\n x: rect.x - rowMarkerOffset\n };\n if (newRect.x < 0) {\n newRect.x = 0;\n newRect.width--;\n const r = getCellsForSelectionDirect(newRect, abortController.signal);\n if (typeof r === \"function\") {\n return async () => (\n // eslint-disable-next-line unicorn/no-await-expression-member\n (await r()).map((row) => [\n { kind: GridCellKind.Loading, allowOverlay: false },\n ...row\n ])\n );\n }\n return r.map((row) => [{ kind: GridCellKind.Loading, allowOverlay: false }, ...row]);\n }\n return getCellsForSelectionDirect(newRect, abortController.signal);\n },\n [abortController.signal, getCellsForSelectionDirect, rowMarkerOffset]\n );\n const getCellsForSelection = getCellsForSelectionIn !== void 0 ? getCellsForSelectionMangled : void 0;\n return [getCellsForSelection, getCellsForSelectionDirect];\n}\n\n// src/data-editor/copy-paste.ts\nfunction convertCellToBuffer(cell) {\n var _a, _b;\n if (cell.copyData !== void 0) {\n return {\n formatted: cell.copyData,\n rawValue: cell.copyData,\n format: \"string\"\n };\n }\n switch (cell.kind) {\n case GridCellKind.Boolean:\n return {\n formatted: cell.data === true ? \"TRUE\" : cell.data === false ? \"FALSE\" : cell.data === BooleanIndeterminate ? \"INDETERMINATE\" : \"\",\n rawValue: cell.data,\n format: \"boolean\"\n };\n case GridCellKind.Custom:\n return {\n formatted: cell.copyData,\n rawValue: cell.copyData,\n format: \"string\"\n };\n case GridCellKind.Image:\n case GridCellKind.Bubble:\n return {\n formatted: cell.data,\n rawValue: cell.data,\n format: \"string-array\"\n };\n case GridCellKind.Drilldown:\n return {\n formatted: cell.data.map((x) => x.text),\n rawValue: cell.data.map((x) => x.text),\n format: \"string-array\"\n };\n case GridCellKind.Text:\n return {\n formatted: (_a = cell.displayData) != null ? _a : cell.data,\n rawValue: cell.data,\n format: \"string\"\n };\n case GridCellKind.Uri:\n return {\n formatted: (_b = cell.displayData) != null ? _b : cell.data,\n rawValue: cell.data,\n format: \"url\"\n };\n case GridCellKind.Markdown:\n case GridCellKind.RowID:\n return {\n formatted: cell.data,\n rawValue: cell.data,\n format: \"string\"\n };\n case GridCellKind.Number:\n return {\n formatted: cell.displayData,\n rawValue: cell.data,\n format: \"number\"\n };\n case GridCellKind.Loading:\n return {\n formatted: \"#LOADING\",\n rawValue: \"\",\n format: \"string\"\n };\n case GridCellKind.Protected:\n return {\n formatted: \"************\",\n rawValue: \"\",\n format: \"string\"\n };\n default:\n assertNever(cell);\n }\n}\nfunction createBufferFromGridCells(cells, columnIndexes) {\n const copyBuffer = cells.map((row, index) => {\n const mappedIndex = columnIndexes[index];\n return row.map((cell) => {\n if (cell.span !== void 0 && cell.span[0] !== mappedIndex)\n return {\n formatted: \"\",\n rawValue: \"\",\n format: \"string\"\n };\n return convertCellToBuffer(cell);\n });\n });\n return copyBuffer;\n}\nfunction escapeIfNeeded(str, withComma) {\n if ((withComma ? /[\\t\\n\",]/ : /[\\t\\n\"]/).test(str)) {\n str = `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\nfunction createTextBuffer(copyBuffer) {\n var _a, _b;\n const lines = [];\n for (const row of copyBuffer) {\n const line = [];\n for (const cell of row) {\n if (cell.format === \"url\") {\n line.push((_b = (_a = cell.rawValue) == null ? void 0 : _a.toString()) != null ? _b : \"\");\n } else if (cell.format === \"string-array\") {\n line.push(cell.formatted.map((x) => escapeIfNeeded(x, true)).join(\",\"));\n } else {\n line.push(escapeIfNeeded(cell.formatted, false));\n }\n }\n lines.push(line.join(\"\t\"));\n }\n return lines.join(\"\\n\");\n}\nfunction formatHtmlTextContent(text) {\n return text.replace(/\\t/g, \" \").replace(/ {2,}/g, (match) => \"<span> </span>\".repeat(match.length));\n}\nfunction formatHtmlAttributeContent(attrText) {\n return '\"' + attrText.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\").replace(/>/g, \">\") + '\"';\n}\nfunction restoreHtmlEntities(str) {\n return str.replace(/"/g, '\"').replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\");\n}\nfunction createHtmlBuffer(copyBuffer) {\n var _a, _b;\n const lines = [];\n lines.push(`<style type=\"text/css\"><!--br {mso-data-placement:same-cell;}--></style>`, \"<table><tbody>\");\n for (const row of copyBuffer) {\n lines.push(\"<tr>\");\n for (const cell of row) {\n const formatStr = `gdg-format=\"${cell.format}\"`;\n if (cell.format === \"url\") {\n lines.push(\n `<td ${formatStr}><a href=\"${cell.rawValue}\">${formatHtmlTextContent(cell.formatted)}</a></td>`\n );\n } else {\n if (cell.format === \"string-array\") {\n lines.push(\n `<td ${formatStr}><ol>${cell.formatted.map(\n (x, ind) => `<li gdg-raw-value=${formatHtmlAttributeContent(cell.rawValue[ind])}>` + formatHtmlTextContent(x) + \"</li>\"\n ).join(\"\")}</ol></td>`\n );\n } else {\n lines.push(\n `<td gdg-raw-value=${formatHtmlAttributeContent(\n (_b = (_a = cell.rawValue) == null ? void 0 : _a.toString()) != null ? _b : \"\"\n )} ${formatStr}>${formatHtmlTextContent(cell.formatted)}</td>`\n );\n }\n }\n }\n lines.push(\"</tr>\");\n }\n lines.push(\"</tbody></table>\");\n return lines.join(\"\");\n}\nfunction getCopyBufferContents(cells, columnIndexes) {\n const copyBuffer = createBufferFromGridCells(cells, columnIndexes);\n const textPlain = createTextBuffer(copyBuffer);\n const textHtml = createHtmlBuffer(copyBuffer);\n return {\n textPlain,\n textHtml\n };\n}\nfunction decodeHTML(html) {\n var _a, _b, _c, _d, _e, _f;\n const fragment = document.createElement(\"html\");\n fragment.innerHTML = html.replace(/ /g, \" \");\n const tableEl = fragment.querySelector(\"table\");\n if (tableEl === null)\n return void 0;\n const walkEl = [tableEl];\n const result = [];\n let current;\n while (walkEl.length > 0) {\n const el = walkEl.pop();\n if (el === void 0)\n break;\n if (el instanceof HTMLTableElement || el.nodeName === \"TBODY\") {\n walkEl.push(...[...el.children].reverse());\n } else if (el instanceof HTMLTableRowElement) {\n if (current !== void 0) {\n result.push(current);\n }\n current = [];\n walkEl.push(...[...el.children].reverse());\n } else if (el instanceof HTMLTableCellElement) {\n const clone = el.cloneNode(true);\n const firstTagIsPara = clone.children.length === 1 && clone.children[0].nodeName === \"P\";\n const para = firstTagIsPara ? clone.children[0] : null;\n const isAppleNumbers = (para == null ? void 0 : para.children.length) === 1 && para.children[0].nodeName === \"FONT\";\n const brs = clone.querySelectorAll(\"br\");\n for (const br of brs) {\n br.replaceWith(\"\\n\");\n }\n const attributeValue = clone.getAttribute(\"gdg-raw-value\");\n const formatValue = (_a = clone.getAttribute(\"gdg-format\")) != null ? _a : \"string\";\n if (clone.querySelector(\"a\") !== null) {\n current == null ? void 0 : current.push({\n // raw value is the href\n rawValue: (_c = (_b = clone.querySelector(\"a\")) == null ? void 0 : _b.getAttribute(\"href\")) != null ? _c : \"\",\n formatted: (_d = clone.textContent) != null ? _d : \"\",\n format: formatValue\n });\n } else if (clone.querySelector(\"ol\") !== null) {\n const rawValues = clone.querySelectorAll(\"li\");\n current == null ? void 0 : current.push({\n rawValue: [...rawValues].map((x) => {\n var _a2;\n return (_a2 = x.getAttribute(\"gdg-raw-value\")) != null ? _a2 : \"\";\n }),\n formatted: [...rawValues].map((x) => {\n var _a2;\n return (_a2 = x.textContent) != null ? _a2 : \"\";\n }),\n format: \"string-array\"\n });\n } else if (attributeValue !== null) {\n current == null ? void 0 : current.push({\n rawValue: restoreHtmlEntities(attributeValue),\n formatted: (_e = clone.textContent) != null ? _e : \"\",\n format: formatValue\n });\n } else {\n let textContent = (_f = clone.textContent) != null ? _f : \"\";\n if (isAppleNumbers) {\n textContent = textContent.replace(/\\n(?!\\n)/g, \"\");\n }\n current == null ? void 0 : current.push({\n rawValue: textContent != null ? textContent : \"\",\n formatted: textContent != null ? textContent : \"\",\n format: formatValue\n });\n }\n }\n }\n if (current !== void 0) {\n result.push(current);\n }\n return result;\n}\n\n// src/data-editor/data-editor-fns.ts\nfunction expandSelection(newVal, getCellsForSelection, rowMarkerOffset, spanRangeBehavior, abortController) {\n var _a, _b;\n const origVal = newVal;\n if (spanRangeBehavior === \"allowPartial\" || newVal.current === void 0 || getCellsForSelection === void 0)\n return newVal;\n let isFilled = false;\n do {\n if ((newVal == null ? void 0 : newVal.current) === void 0)\n break;\n const r = (_a = newVal.current) == null ? void 0 : _a.range;\n const cells = [];\n if (r.width > 2) {\n const leftCells = getCellsForSelection(\n {\n x: r.x,\n y: r.y,\n width: 1,\n height: r.height\n },\n abortController.signal\n );\n if (typeof leftCells === \"function\") {\n return origVal;\n }\n cells.push(...leftCells);\n const rightCells = getCellsForSelection(\n {\n x: r.x + r.width - 1,\n y: r.y,\n width: 1,\n height: r.height\n },\n abortController.signal\n );\n if (typeof rightCells === \"function\") {\n return origVal;\n }\n cells.push(...rightCells);\n } else {\n const rCells = getCellsForSelection(\n {\n x: r.x,\n y: r.y,\n width: r.width,\n height: r.height\n },\n abortController.signal\n );\n if (typeof rCells === \"function\") {\n return origVal;\n }\n cells.push(...rCells);\n }\n let left = r.x - rowMarkerOffset;\n let right = r.x + r.width - 1 - rowMarkerOffset;\n for (const row of cells) {\n for (const cell of row) {\n if (cell.span === void 0)\n continue;\n left = Math.min(cell.span[0], left);\n right = Math.max(cell.span[1], right);\n }\n }\n if (left === r.x - rowMarkerOffset && right === r.x + r.width - 1 - rowMarkerOffset) {\n isFilled = true;\n } else {\n newVal = {\n current: {\n cell: (_b = newVal.current.cell) != null ? _b : [0, 0],\n range: {\n x: left + rowMarkerOffset,\n y: r.y,\n width: right - left + 1,\n height: r.height\n },\n rangeStack: newVal.current.rangeStack\n },\n columns: newVal.columns,\n rows: newVal.rows\n };\n }\n } while (!isFilled);\n return newVal;\n}\nfunction descape(s) {\n if (s.startsWith('\"') && s.endsWith('\"')) {\n s = s.slice(1, -1).replace(/\"\"/g, '\"');\n }\n return s;\n}\nfunction unquote(str) {\n let State;\n ((State2) => {\n State2[State2[\"None\"] = 0] = \"None\";\n State2[State2[\"inString\"] = 1] = \"inString\";\n State2[State2[\"inStringPostQuote\"] = 2] = \"inStringPostQuote\";\n })(State || (State = {}));\n const result = [];\n let current = [];\n let start = 0;\n let state = 0;\n str = str.replace(/\\r\\n/g, \"\\n\");\n let index = 0;\n for (const char of str) {\n switch (state) {\n case 0:\n if (char === \"\t\" || char === \"\\n\") {\n current.push(str.slice(start, index));\n start = index + 1;\n if (char === \"\\n\") {\n result.push(current);\n current = [];\n }\n } else if (char === `\"`) {\n state = 1;\n }\n break;\n case 1:\n if (char === `\"`) {\n state = 2;\n }\n break;\n case 2:\n if (char === '\"') {\n state = 1;\n } else if (char === \"\t\" || char === \"\\n\") {\n current.push(descape(str.slice(start, index)));\n start = index + 1;\n if (char === \"\\n\") {\n result.push(current);\n current = [];\n }\n state = 0;\n } else {\n state = 0;\n }\n break;\n }\n index++;\n }\n if (start < str.length) {\n current.push(descape(str.slice(start, str.length)));\n }\n result.push(current);\n return result.map((r) => r.map((c) => ({ rawValue: c, formatted: c, format: \"string\" })));\n}\nfunction copyToClipboard(cells, columnIndexes, e) {\n var _a;\n const copyBuffer = getCopyBufferContents(cells, columnIndexes);\n const copyWithWriteText = (s) => {\n var _a2;\n void ((_a2 = window.navigator.clipboard) == null ? void 0 : _a2.writeText(s));\n };\n const copyWithWrite = (s, html) => {\n var _a2;\n if (((_a2 = window.navigator.clipboard) == null ? void 0 : _a2.write) === void 0)\n return false;\n void window.navigator.clipboard.write([\n new ClipboardItem({\n // eslint-disable-next-line sonarjs/no-duplicate-string\n \"text/plain\": new Blob([s], { type: \"text/plain\" }),\n \"text/html\": new Blob([html], {\n type: \"text/html\"\n })\n })\n ]);\n return true;\n };\n const copyWithClipboardData = (s, html) => {\n var _a2, _b;\n try {\n if (e === void 0 || e.clipboardData === null)\n throw new Error(\"No clipboard data\");\n (_a2 = e == null ? void 0 : e.clipboardData) == null ? void 0 : _a2.setData(\"text/plain\", s);\n (_b = e == null ? void 0 : e.clipboardData) == null ? void 0 : _b.setData(\"text/html\", html);\n } catch (e2) {\n if (!copyWithWrite(s, html)) {\n copyWithWriteText(s);\n }\n }\n };\n if (((_a = window.navigator.clipboard) == null ? void 0 : _a.write) !== void 0 || (e == null ? void 0 : e.clipboardData) !== void 0) {\n void copyWithClipboardData(copyBuffer.textPlain, copyBuffer.textHtml);\n } else {\n void copyWithWriteText(copyBuffer.textPlain);\n }\n e == null ? void 0 : e.preventDefault();\n}\n\n// src/data-editor-container/data-grid-container.tsx\nimport * as React17 from \"react\";\nfunction toCss(x) {\n if (typeof x === \"string\")\n return x;\n return `${x}px`;\n}\nvar _exp11 = () => (p) => p.innerWidth;\nvar _exp22 = () => (p) => p.innerHeight;\nvar Wrapper = /* @__PURE__ */ styled_default(\"div\")({\n name: \"Wrapper\",\n class: \"wzg2m5k\",\n propsAsIs: false,\n vars: {\n \"wzg2m5k-0\": [_exp11()],\n \"wzg2m5k-1\": [_exp22()]\n }\n});\nvar DataEditorContainer = (p) => {\n const {\n inWidth,\n inHeight,\n children,\n ...rest\n } = p;\n return /* @__PURE__ */ React17.createElement(Wrapper, {\n innerHeight: toCss(inHeight),\n innerWidth: toCss(inWidth),\n ...rest\n }, children);\n};\n\n// src/data-grid/cells/boolean-cell.tsx\nfunction toggleBoolean(data) {\n return data !== true;\n}\nvar defaultCellMaxSize = 20;\nvar booleanCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"false\";\n },\n kind: GridCellKind.Boolean,\n needsHover: true,\n useLabel: false,\n needsHoverPosition: true,\n measure: () => 50,\n draw: (a) => {\n var _a;\n return drawBoolean(a, a.cell.data, booleanCellIsEditable(a.cell), (_a = a.cell.maxSize) != null ? _a : defaultCellMaxSize);\n },\n onDelete: (c) => ({\n ...c,\n data: false\n }),\n onClick: (e) => {\n var _a, _b;\n const { cell, posX: pointerX, posY: pointerY, bounds, theme } = e;\n const { width, height, x: cellX, y: cellY } = bounds;\n const maxWidth = (_a = cell.maxSize) != null ? _a : defaultCellMaxSize;\n const cellCenterY = Math.floor(bounds.y + height / 2);\n const checkBoxWidth = getSquareWidth(maxWidth, height, theme.cellVerticalPadding);\n const posX = getSquareXPosFromAlign(\n (_b = cell.contentAlign) != null ? _b : \"center\",\n cellX,\n width,\n theme.cellHorizontalPadding,\n checkBoxWidth\n );\n const bb = getSquareBB(posX, cellCenterY, checkBoxWidth);\n const checkBoxClicked = pointIsWithinBB(cellX + pointerX, cellY + pointerY, bb);\n if (booleanCellIsEditable(cell) && checkBoxClicked) {\n return {\n ...cell,\n data: toggleBoolean(cell.data)\n };\n }\n return void 0;\n },\n onPaste: (toPaste, cell) => {\n let newVal = BooleanEmpty;\n if (toPaste.toLowerCase() === \"true\") {\n newVal = true;\n } else if (toPaste.toLowerCase() === \"false\") {\n newVal = false;\n } else if (toPaste.toLowerCase() === \"indeterminate\") {\n newVal = BooleanIndeterminate;\n }\n return newVal === cell.data ? void 0 : {\n ...cell,\n data: newVal\n };\n }\n};\n\n// src/data-editor/use-autoscroll.ts\nimport React18 from \"react\";\nvar maxPxPerMs = 2;\nvar msToFullSpeed = 1300;\nfunction useAutoscroll(scrollDirection, scrollRef) {\n const speedScalar = React18.useRef(0);\n const [xDir, yDir] = scrollDirection != null ? scrollDirection : [0, 0];\n React18.useEffect(() => {\n if (xDir === 0 && yDir === 0) {\n speedScalar.current = 0;\n return;\n }\n let lastTime = 0;\n const scrollFn = (curTime) => {\n var _a;\n if (lastTime === 0) {\n lastTime = curTime;\n } else {\n const step = curTime - lastTime;\n speedScalar.current = Math.min(1, speedScalar.current + step / msToFullSpeed);\n const motion = speedScalar.current ** 1.618 * step * maxPxPerMs;\n (_a = scrollRef.current) == null ? void 0 : _a.scrollBy(xDir * motion, yDir * motion);\n lastTime = curTime;\n }\n t = window.requestAnimationFrame(scrollFn);\n };\n let t = window.requestAnimationFrame(scrollFn);\n return () => window.cancelAnimationFrame(t);\n }, [scrollRef, xDir, yDir]);\n}\n\n// src/data-grid/cells/bubble-cell.tsx\nimport * as React20 from \"react\";\n\n// src/data-grid-overlay-editor/private/bubbles-overlay-editor.tsx\nimport * as React19 from \"react\";\n\n// src/data-grid-overlay-editor/private/bubbles-overlay-editor-style.tsx\nvar BubblesOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"BubblesOverlayEditorStyle\",\n class: \"b1bqsp5z\",\n propsAsIs: false\n});\n\n// src/data-grid-overlay-editor/private/bubbles-overlay-editor.tsx\nvar BubblesOverlayEditor = (p) => {\n const { bubbles } = p;\n return /* @__PURE__ */ React19.createElement(BubblesOverlayEditorStyle, null, bubbles.map((b, i) => /* @__PURE__ */ React19.createElement(\"div\", { key: i, className: \"boe-bubble\" }, b)), /* @__PURE__ */ React19.createElement(\"textarea\", { className: \"gdg-input\", autoFocus: true }));\n};\nvar bubbles_overlay_editor_default = BubblesOverlayEditor;\n\n// src/data-grid/cells/bubble-cell.tsx\nvar bubbleCellRenderer = {\n getAccessibilityString: (c) => makeAccessibilityStringForArray(c.data),\n kind: GridCellKind.Bubble,\n needsHover: false,\n useLabel: false,\n needsHoverPosition: false,\n measure: (ctx, cell, t) => cell.data.reduce((acc, data) => ctx.measureText(data).width + acc + 20, 0) + 2 * t.cellHorizontalPadding - 4,\n draw: (a) => drawBubbles(a, a.cell.data),\n provideEditor: () => (p) => {\n const { value } = p;\n return /* @__PURE__ */ React20.createElement(bubbles_overlay_editor_default, { bubbles: value.data });\n },\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/drilldown-cell.tsx\nimport * as React22 from \"react\";\n\n// src/data-grid-overlay-editor/private/drilldown-overlay-editor.tsx\nimport * as React21 from \"react\";\nvar DrilldownOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"DrilldownOverlayEditorStyle\",\n class: \"df2kt4a\",\n propsAsIs: false\n});\nvar DrilldownOverlayEditor = (p) => {\n const {\n drilldowns\n } = p;\n return /* @__PURE__ */ React21.createElement(DrilldownOverlayEditorStyle, null, drilldowns.map((d, i) => /* @__PURE__ */ React21.createElement(\"div\", {\n key: i,\n className: \"doe-bubble\"\n }, d.img !== void 0 && /* @__PURE__ */ React21.createElement(\"img\", {\n src: d.img\n }), /* @__PURE__ */ React21.createElement(\"div\", null, d.text))));\n};\nvar drilldown_overlay_editor_default = DrilldownOverlayEditor;\n\n// src/data-grid/cells/drilldown-cell.tsx\nvar drilldownCellRenderer = {\n getAccessibilityString: (c) => makeAccessibilityStringForArray(c.data.map((d) => d.text)),\n kind: GridCellKind.Drilldown,\n needsHover: false,\n useLabel: false,\n needsHoverPosition: false,\n measure: (ctx, cell, t) => cell.data.reduce(\n (acc, data) => ctx.measureText(data.text).width + acc + 20 + (data.img !== void 0 ? 18 : 0),\n 0\n ) + 2 * t.cellHorizontalPadding - 4,\n draw: (a) => drawDrilldownCell(a, a.cell.data),\n provideEditor: () => (p) => {\n const { value } = p;\n return /* @__PURE__ */ React22.createElement(drilldown_overlay_editor_default, { drilldowns: value.data });\n },\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/image-cell.tsx\nimport * as React24 from \"react\";\n\n// src/data-grid-overlay-editor/private/image-overlay-editor.tsx\nimport * as React23 from \"react\";\n\n// src/data-grid-overlay-editor/private/image-overlay-editor-style.tsx\nvar ImageOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"ImageOverlayEditorStyle\",\n class: \"i1eozt10\",\n propsAsIs: false\n});\n\n// src/data-grid-overlay-editor/private/image-overlay-editor.tsx\nimport { Carousel } from \"react-responsive-carousel\";\nvar ImageOverlayEditor = (p) => {\n const { urls, canWrite, onEditClick, renderImage } = p;\n const filtered = urls.filter((u) => u !== \"\");\n if (filtered.length === 0) {\n return null;\n }\n const allowMove = filtered.length > 1;\n return /* @__PURE__ */ React23.createElement(ImageOverlayEditorStyle, { \"data-testid\": \"GDG-default-image-overlay-editor\" }, /* @__PURE__ */ React23.createElement(\n Carousel,\n {\n showArrows: allowMove,\n showThumbs: false,\n swipeable: allowMove,\n emulateTouch: allowMove,\n infiniteLoop: allowMove\n },\n filtered.map((url) => {\n var _a;\n const innerContent = (_a = renderImage == null ? void 0 : renderImage(url)) != null ? _a : /* @__PURE__ */ React23.createElement(\"img\", { draggable: false, src: url });\n return /* @__PURE__ */ React23.createElement(\"div\", { className: \"centering-container\", key: url }, innerContent);\n })\n ), canWrite && onEditClick && /* @__PURE__ */ React23.createElement(\"button\", { className: \"edit-icon\", onClick: onEditClick }, /* @__PURE__ */ React23.createElement(EditPencil, null)));\n};\n\n// src/data-grid/cells/image-cell.tsx\nvar imageCellRenderer = {\n getAccessibilityString: (c) => c.data.join(\", \"),\n kind: GridCellKind.Image,\n needsHover: false,\n useLabel: false,\n needsHoverPosition: false,\n draw: (a) => {\n var _a;\n return drawImage(a, (_a = a.cell.displayData) != null ? _a : a.cell.data, a.cell.rounding, a.cell.contentAlign);\n },\n measure: (_ctx, cell) => cell.data.length * 50,\n onDelete: (c) => ({\n ...c,\n data: []\n }),\n provideEditor: () => (p) => {\n const { value, onFinishedEditing, imageEditorOverride } = p;\n const ImageEditor = imageEditorOverride != null ? imageEditorOverride : ImageOverlayEditor;\n return /* @__PURE__ */ React24.createElement(\n ImageEditor,\n {\n urls: value.data,\n canWrite: value.allowAdd,\n onCancel: onFinishedEditing,\n onChange: (newImage) => {\n onFinishedEditing({\n ...value,\n data: [newImage]\n });\n }\n }\n );\n },\n onPaste: (toPaste, cell) => {\n toPaste = toPaste.trim();\n const fragments = toPaste.split(\",\");\n const uris = fragments.map((f) => {\n try {\n new URL(f);\n return f;\n } catch (e) {\n return void 0;\n }\n }).filter((x) => x !== void 0);\n if (uris.length === cell.data.length && uris.every((u, i) => u === cell.data[i]))\n return void 0;\n return {\n ...cell,\n data: uris\n };\n }\n};\n\n// src/data-grid/cells/loading-cell.tsx\nvar loadingCellRenderer = {\n getAccessibilityString: () => \"\",\n kind: GridCellKind.Loading,\n needsHover: false,\n useLabel: false,\n needsHoverPosition: false,\n measure: () => 120,\n draw: () => void 0,\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/markdown-cell.tsx\nimport * as React28 from \"react\";\n\n// src/data-grid-overlay-editor/private/markdown-overlay-editor.tsx\nimport * as React27 from \"react\";\n\n// src/markdown-div/markdown-div.tsx\nimport React25 from \"react\";\nimport { marked } from \"marked\";\n\n// src/markdown-div/private/markdown-container.tsx\nvar MarkdownContainer = /* @__PURE__ */ styled_default(\"div\")({\n name: \"MarkdownContainer\",\n class: \"mlbeo71\",\n propsAsIs: false\n});\n\n// src/markdown-div/markdown-div.tsx\nvar MarkdownDiv = class extends React25.PureComponent {\n constructor() {\n super(...arguments);\n this.targetElement = null;\n this.containerRefHook = (element) => {\n this.targetElement = element;\n this.renderMarkdownIntoDiv();\n };\n }\n renderMarkdownIntoDiv() {\n const { targetElement, props } = this;\n if (targetElement === null)\n return;\n const { contents, createNode } = props;\n const innerHTML = marked(contents);\n const childRange = document.createRange();\n childRange.selectNodeContents(targetElement);\n childRange.deleteContents();\n let newChild = createNode == null ? void 0 : createNode(innerHTML);\n if (newChild === void 0) {\n const childDoc = document.createElement(\"template\");\n childDoc.innerHTML = innerHTML;\n newChild = childDoc.content;\n }\n targetElement.append(newChild);\n const tags = targetElement.getElementsByTagName(\"a\");\n for (const tag of tags) {\n tag.target = \"_blank\";\n tag.rel = \"noreferrer noopener\";\n }\n }\n render() {\n this.renderMarkdownIntoDiv();\n return /* @__PURE__ */ React25.createElement(MarkdownContainer, { ref: this.containerRefHook });\n }\n};\n\n// src/growing-entry/growing-entry.tsx\nimport * as React26 from \"react\";\n\n// src/growing-entry/growing-entry-style.tsx\nvar InputBox = /* @__PURE__ */ styled_default(\"textarea\")({\n name: \"InputBox\",\n class: \"ijuk0po\",\n propsAsIs: false\n});\nvar ShadowBox = /* @__PURE__ */ styled_default(\"div\")({\n name: \"ShadowBox\",\n class: \"saq3p5l\",\n propsAsIs: false\n});\nvar GrowingEntryStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"GrowingEntryStyle\",\n class: \"gf8vzix\",\n propsAsIs: false\n});\n\n// src/growing-entry/growing-entry.tsx\nvar globalInputID = 0;\nvar GrowingEntry = (props) => {\n const { placeholder, value, onKeyDown, highlight, altNewline, validatedSelection, ...rest } = props;\n const { onChange, className } = rest;\n const inputRef = React26.useRef(null);\n const useText = value != null ? value : \"\";\n assert(onChange !== void 0, \"GrowingEntry must be a controlled input area\");\n const [inputID] = React26.useState(() => \"input-box-\" + (globalInputID = (globalInputID + 1) % 1e7));\n React26.useEffect(() => {\n const ta = inputRef.current;\n if (ta === null)\n return;\n if (ta.disabled)\n return;\n const length = useText.toString().length;\n ta.focus();\n ta.setSelectionRange(highlight ? 0 : length, length);\n }, []);\n React26.useLayoutEffect(() => {\n var _a;\n if (validatedSelection !== void 0) {\n const range2 = typeof validatedSelection === \"number\" ? [validatedSelection, null] : validatedSelection;\n (_a = inputRef.current) == null ? void 0 : _a.setSelectionRange(range2[0], range2[1]);\n }\n }, [validatedSelection]);\n const onKeyDownInner = React26.useCallback(\n (e) => {\n if (e.key === \"Enter\" && e.shiftKey && altNewline === true) {\n return;\n }\n onKeyDown == null ? void 0 : onKeyDown(e);\n },\n [altNewline, onKeyDown]\n );\n return /* @__PURE__ */ React26.createElement(GrowingEntryStyle, { className: \"gdg-growing-entry\" }, /* @__PURE__ */ React26.createElement(ShadowBox, { className }, useText + \"\\n\"), /* @__PURE__ */ React26.createElement(\n InputBox,\n {\n ...rest,\n className: (className != null ? className : \"\") + \" gdg-input\",\n id: inputID,\n ref: inputRef,\n onKeyDown: onKeyDownInner,\n value: useText,\n placeholder,\n dir: \"auto\"\n }\n ));\n};\n\n// src/data-grid-overlay-editor/private/markdown-overlay-editor-style.tsx\nvar _exp12 = () => (p) => p.targetWidth;\nvar MarkdownOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"MarkdownOverlayEditorStyle\",\n class: \"mdwzdl1\",\n propsAsIs: false,\n vars: {\n \"mdwzdl1-0\": [_exp12(), \"px\"]\n }\n});\n\n// src/data-grid-overlay-editor/private/markdown-overlay-editor.tsx\nvar MarkdownOverlayEditor = (p) => {\n const { value, onChange, forceEditMode, createNode, targetRect, onFinish, validatedSelection } = p;\n const markdown = value.data;\n const readonly = value.readonly === true;\n const [editMode, setEditMode] = React27.useState(markdown === \"\" || forceEditMode);\n const onEditClick = React27.useCallback(() => {\n setEditMode((e) => !e);\n }, []);\n const addLeftPad = markdown ? \"ml-6\" : \"\";\n if (editMode) {\n return /* @__PURE__ */ React27.createElement(MarkdownOverlayEditorStyle, { targetWidth: targetRect.width - 20 }, /* @__PURE__ */ React27.createElement(\n GrowingEntry,\n {\n autoFocus: true,\n highlight: false,\n validatedSelection,\n value: markdown,\n onKeyDown: (e) => {\n if (e.key === \"Enter\")\n e.stopPropagation();\n },\n onChange\n }\n ), /* @__PURE__ */ React27.createElement(\"div\", { className: `edit-icon checkmark-hover ${addLeftPad}`, onClick: () => onFinish(value) }, /* @__PURE__ */ React27.createElement(Checkmark, null)));\n }\n return /* @__PURE__ */ React27.createElement(MarkdownOverlayEditorStyle, { targetWidth: targetRect.width }, /* @__PURE__ */ React27.createElement(MarkdownDiv, { contents: markdown, createNode }), !readonly && /* @__PURE__ */ React27.createElement(React27.Fragment, null, /* @__PURE__ */ React27.createElement(\"div\", { className: \"spacer\" }), /* @__PURE__ */ React27.createElement(\"div\", { className: `edit-icon edit-hover ${addLeftPad}`, onClick: onEditClick }, /* @__PURE__ */ React27.createElement(EditPencil, null))), /* @__PURE__ */ React27.createElement(\"textarea\", { className: \"md-edit-textarea gdg-input\", autoFocus: true }));\n};\n\n// src/data-grid/cells/markdown-cell.tsx\nvar markdownCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n },\n kind: GridCellKind.Markdown,\n needsHover: false,\n needsHoverPosition: false,\n drawPrep: prepTextCell,\n measure: (ctx, cell, t) => {\n const firstLine = cell.data.split(\"\\n\")[0];\n return ctx.measureText(firstLine).width + 2 * t.cellHorizontalPadding;\n },\n draw: (a) => drawTextCell(a, a.cell.data, a.cell.contentAlign),\n onDelete: (c) => ({\n ...c,\n data: \"\"\n }),\n provideEditor: () => (p) => {\n const { onChange, value, target, onFinishedEditing, markdownDivCreateNode, forceEditMode, validatedSelection } = p;\n return /* @__PURE__ */ React28.createElement(\n MarkdownOverlayEditor,\n {\n onFinish: onFinishedEditing,\n targetRect: target,\n value,\n validatedSelection,\n onChange: (e) => onChange({\n ...value,\n data: e.target.value\n }),\n forceEditMode,\n createNode: markdownDivCreateNode\n }\n );\n },\n onPaste: (toPaste, cell) => toPaste === cell.data ? void 0 : { ...cell, data: toPaste }\n};\n\n// src/data-grid/cells/marker-cell.tsx\nvar markerCellRenderer = {\n getAccessibilityString: (c) => c.row.toString(),\n kind: InnerGridCellKind.Marker,\n needsHover: true,\n needsHoverPosition: false,\n drawPrep: prepMarkerRowCell,\n measure: () => 44,\n draw: (a) => drawMarkerRowCell(a, a.cell.row, a.cell.checked, a.cell.markerKind, a.cell.drawHandle),\n onClick: (e) => {\n const { bounds, cell, posX: x, posY: y } = e;\n const { width, height } = bounds;\n const centerX = cell.drawHandle ? 7 + (width - 7) / 2 : width / 2;\n const centerY = height / 2;\n if (Math.abs(x - centerX) <= 10 && Math.abs(y - centerY) <= 10) {\n return {\n ...cell,\n checked: !cell.checked\n };\n }\n return void 0;\n },\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/new-row-cell.tsx\nvar newRowCellRenderer = {\n getAccessibilityString: () => \"\",\n kind: InnerGridCellKind.NewRow,\n needsHover: true,\n needsHoverPosition: false,\n measure: () => 200,\n draw: (a) => drawNewRowCell(a, a.cell.hint, a.cell.icon),\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/number-cell.tsx\nimport * as React29 from \"react\";\nvar NumberOverlayEditor = React29.lazy(\n async () => await import(\"./number-overlay-editor-FPDVTUA6.js\")\n);\nvar numberCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n },\n kind: GridCellKind.Number,\n needsHover: false,\n needsHoverPosition: false,\n useLabel: true,\n drawPrep: prepTextCell,\n draw: (a) => drawTextCell(a, a.cell.displayData, a.cell.contentAlign),\n measure: (ctx, cell) => ctx.measureText(cell.displayData).width + 16,\n onDelete: (c) => ({\n ...c,\n data: void 0\n }),\n provideEditor: () => (p) => {\n const { isHighlighted, onChange, value, validatedSelection } = p;\n return /* @__PURE__ */ React29.createElement(React29.Suspense, { fallback: null }, /* @__PURE__ */ React29.createElement(\n NumberOverlayEditor,\n {\n highlight: isHighlighted,\n disabled: value.readonly === true,\n value: value.data,\n fixedDecimals: value.fixedDecimals,\n allowNegative: value.allowNegative,\n thousandSeparator: value.thousandSeparator,\n decimalSeparator: value.decimalSeparator,\n validatedSelection,\n onChange: (x) => {\n var _a;\n return onChange({\n ...value,\n data: Number.isNaN((_a = x.floatValue) != null ? _a : 0) ? 0 : x.floatValue\n });\n }\n }\n ));\n },\n onPaste: (toPaste, cell, details) => {\n var _a;\n const newNumber = typeof details.rawValue === \"number\" ? details.rawValue : Number.parseFloat(typeof details.rawValue === \"string\" ? details.rawValue : toPaste);\n if (Number.isNaN(newNumber) || cell.data === newNumber)\n return void 0;\n return { ...cell, data: newNumber, displayData: (_a = details.formattedString) != null ? _a : cell.displayData };\n }\n};\n\n// src/data-grid/cells/protected-cell.tsx\nvar protectedCellRenderer = {\n getAccessibilityString: () => \"\",\n measure: () => 108,\n kind: GridCellKind.Protected,\n needsHover: false,\n needsHoverPosition: false,\n draw: drawProtectedCell,\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/row-id-cell.tsx\nimport React30 from \"react\";\nvar rowIDCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n },\n kind: GridCellKind.RowID,\n needsHover: false,\n needsHoverPosition: false,\n drawPrep: (a, b) => prepTextCell(a, b, a.theme.textLight),\n draw: (a) => drawTextCell(a, a.cell.data, a.cell.contentAlign),\n measure: (ctx, cell) => ctx.measureText(cell.data).width + 16,\n // eslint-disable-next-line react/display-name\n provideEditor: () => (p) => {\n const { isHighlighted, onChange, value, validatedSelection } = p;\n return /* @__PURE__ */ React30.createElement(\n GrowingEntry,\n {\n highlight: isHighlighted,\n autoFocus: value.readonly !== true,\n disabled: value.readonly !== false,\n value: value.data,\n validatedSelection,\n onChange: (e) => onChange({\n ...value,\n data: e.target.value\n })\n }\n );\n },\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/text-cell.tsx\nimport * as React31 from \"react\";\nvar textCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n },\n kind: GridCellKind.Text,\n needsHover: false,\n needsHoverPosition: false,\n drawPrep: prepTextCell,\n useLabel: true,\n draw: (a) => (drawTextCell(a, a.cell.displayData, a.cell.contentAlign, a.cell.allowWrapping, a.hyperWrapping), true),\n measure: (ctx, cell, t) => {\n const lines = cell.displayData.split(\"\\n\").slice(0, cell.allowWrapping === true ? void 0 : 1);\n return Math.max(...lines.map((l) => ctx.measureText(l).width + 2 * t.cellHorizontalPadding));\n },\n onDelete: (c) => ({\n ...c,\n data: \"\"\n }),\n provideEditor: (cell) => ({\n disablePadding: cell.allowWrapping === true,\n editor: (p) => {\n const { isHighlighted, onChange, value, validatedSelection } = p;\n return /* @__PURE__ */ React31.createElement(\n GrowingEntry,\n {\n style: cell.allowWrapping === true ? { padding: \"3px 8.5px\" } : void 0,\n highlight: isHighlighted,\n autoFocus: value.readonly !== true,\n disabled: value.readonly === true,\n altNewline: true,\n value: value.data,\n validatedSelection,\n onChange: (e) => onChange({\n ...value,\n data: e.target.value\n })\n }\n );\n }\n }),\n onPaste: (toPaste, cell, details) => {\n var _a;\n return toPaste === cell.data ? void 0 : { ...cell, data: toPaste, displayData: (_a = details.formattedString) != null ? _a : cell.displayData };\n }\n};\n\n// src/data-grid/cells/uri-cell.tsx\nimport * as React33 from \"react\";\n\n// src/data-grid-overlay-editor/private/uri-overlay-editor.tsx\nimport * as React32 from \"react\";\n\n// src/data-grid-overlay-editor/private/uri-overlay-editor-style.tsx\nvar UriOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"UriOverlayEditorStyle\",\n class: \"uf0sjo8\",\n propsAsIs: false\n});\n\n// src/data-grid-overlay-editor/private/uri-overlay-editor.tsx\nvar UriOverlayEditor = (p) => {\n const { uri, onChange, forceEditMode, readonly, validatedSelection, preview } = p;\n const [editMode, setEditMode] = React32.useState(uri === \"\" || forceEditMode);\n const onEditClick = React32.useCallback(() => {\n setEditMode(true);\n }, []);\n if (editMode) {\n return /* @__PURE__ */ React32.createElement(\n GrowingEntry,\n {\n validatedSelection,\n highlight: true,\n autoFocus: true,\n value: uri,\n onChange\n }\n );\n }\n return /* @__PURE__ */ React32.createElement(UriOverlayEditorStyle, null, /* @__PURE__ */ React32.createElement(\"a\", { className: \"link-area\", href: uri, target: \"_blank\", rel: \"noopener noreferrer\" }, preview), !readonly && /* @__PURE__ */ React32.createElement(\"div\", { className: \"edit-icon\", onClick: onEditClick }, /* @__PURE__ */ React32.createElement(EditPencil, null)), /* @__PURE__ */ React32.createElement(\"textarea\", { className: \"gdg-input\", autoFocus: true }));\n};\nvar uri_overlay_editor_default = UriOverlayEditor;\n\n// src/data-grid/cells/uri-cell.tsx\nvar uriCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n },\n kind: GridCellKind.Uri,\n needsHover: false,\n needsHoverPosition: false,\n useLabel: true,\n drawPrep: prepTextCell,\n draw: (a) => drawTextCell(a, a.cell.data, a.cell.contentAlign),\n measure: (ctx, cell, theme) => ctx.measureText(cell.data).width + theme.cellHorizontalPadding * 2,\n onDelete: (c) => ({\n ...c,\n data: \"\"\n }),\n provideEditor: () => (p) => {\n var _a;\n const { onChange, value, forceEditMode, validatedSelection } = p;\n return /* @__PURE__ */ React33.createElement(\n uri_overlay_editor_default,\n {\n forceEditMode,\n uri: value.data,\n preview: (_a = value.displayData) != null ? _a : value.data,\n validatedSelection,\n readonly: value.readonly === true,\n onChange: (e) => onChange({\n ...value,\n data: e.target.value\n })\n }\n );\n },\n onPaste: (toPaste, cell, details) => {\n var _a;\n return toPaste === cell.data ? void 0 : { ...cell, data: toPaste, displayData: (_a = details.formattedString) != null ? _a : cell.displayData };\n }\n};\n\n// src/data-grid/cells/index.ts\nvar CellRenderers = {\n [InnerGridCellKind.Marker]: markerCellRenderer,\n [InnerGridCellKind.NewRow]: newRowCellRenderer,\n [GridCellKind.Boolean]: booleanCellRenderer,\n [GridCellKind.Bubble]: bubbleCellRenderer,\n [GridCellKind.Drilldown]: drilldownCellRenderer,\n [GridCellKind.Image]: imageCellRenderer,\n [GridCellKind.Loading]: loadingCellRenderer,\n [GridCellKind.Markdown]: markdownCellRenderer,\n [GridCellKind.Number]: numberCellRenderer,\n [GridCellKind.Protected]: protectedCellRenderer,\n [GridCellKind.RowID]: rowIDCellRenderer,\n [GridCellKind.Text]: textCellRenderer,\n [GridCellKind.Uri]: uriCellRenderer\n};\n\n// src/data-editor/use-rem-adjuster.ts\nimport React34 from \"react\";\nfunction useRemAdjuster({\n rowHeight: rowHeightIn,\n headerHeight: headerHeightIn,\n groupHeaderHeight: groupHeaderHeightIn,\n theme: themeIn,\n overscrollX: overscrollXIn,\n overscrollY: overscrollYIn,\n scaleToRem,\n remSize\n}) {\n const [rowHeight, headerHeight, groupHeaderHeight, theme, overscrollX, overscrollY] = React34.useMemo(() => {\n var _a, _b, _c;\n if (!scaleToRem || remSize === 16)\n return [rowHeightIn, headerHeightIn, groupHeaderHeightIn, themeIn, overscrollXIn, overscrollYIn];\n const scaler = remSize / 16;\n const rh = rowHeightIn;\n const bt = getDataEditorTheme();\n return [\n typeof rh === \"number\" ? rh * scaler : (n) => Math.ceil(rh(n) * scaler),\n Math.ceil(headerHeightIn * scaler),\n Math.ceil(groupHeaderHeightIn * scaler),\n {\n ...themeIn,\n headerIconSize: ((_a = themeIn == null ? void 0 : themeIn.headerIconSize) != null ? _a : bt.headerIconSize) * scaler,\n cellHorizontalPadding: ((_b = themeIn == null ? void 0 : themeIn.cellHorizontalPadding) != null ? _b : bt.cellHorizontalPadding) * scaler,\n cellVerticalPadding: ((_c = themeIn == null ? void 0 : themeIn.cellVerticalPadding) != null ? _c : bt.cellVerticalPadding) * scaler\n },\n Math.ceil((overscrollXIn != null ? overscrollXIn : 0) * scaler),\n Math.ceil((overscrollYIn != null ? overscrollYIn : 0) * scaler)\n ];\n }, [groupHeaderHeightIn, headerHeightIn, overscrollXIn, overscrollYIn, remSize, rowHeightIn, scaleToRem, themeIn]);\n return { rowHeight, headerHeight, groupHeaderHeight, theme, overscrollX, overscrollY };\n}\n\n// src/data-editor/data-editor.tsx\nvar idCounter = 0;\nfunction getSpanStops(cells) {\n return uniq(\n flatten(\n flatten(cells).filter((c) => c.span !== void 0).map((c) => {\n var _a, _b, _c, _d;\n return range(((_b = (_a = c.span) == null ? void 0 : _a[0]) != null ? _b : 0) + 1, ((_d = (_c = c.span) == null ? void 0 : _c[1]) != null ? _d : 0) + 1);\n })\n )\n );\n}\nfunction shiftSelection(input, offset) {\n if (input === void 0 || offset === 0 || input.columns.length === 0 && input.current === void 0)\n return input;\n return {\n current: input.current === void 0 ? void 0 : {\n cell: [input.current.cell[0] + offset, input.current.cell[1]],\n range: {\n ...input.current.range,\n x: input.current.range.x + offset\n },\n rangeStack: input.current.rangeStack.map((r) => ({\n ...r,\n x: r.x + offset\n }))\n },\n rows: input.rows,\n columns: input.columns.offset(offset)\n };\n}\nvar keybindingDefaults = {\n selectAll: true,\n selectRow: true,\n selectColumn: true,\n downFill: false,\n rightFill: false,\n pageUp: false,\n pageDown: false,\n clear: true,\n copy: true,\n paste: true,\n cut: true,\n search: false,\n first: true,\n last: true\n};\nvar loadingCell2 = {\n kind: GridCellKind.Loading,\n allowOverlay: false\n};\nvar emptyGridSelection = {\n columns: CompactSelection.empty(),\n rows: CompactSelection.empty(),\n current: void 0\n};\nvar DataEditorImpl = (p, forwardedRef) => {\n var _a, _b, _c, _d, _e;\n const [gridSelectionInner, setGridSelectionInner] = React35.useState(emptyGridSelection);\n const [overlay, setOverlay] = React35.useState();\n const searchInputRef = React35.useRef(null);\n const canvasRef = React35.useRef(null);\n const [mouseState, setMouseState] = React35.useState();\n const scrollRef = React35.useRef(null);\n const lastSent = React35.useRef();\n const {\n rowMarkers = \"none\",\n rowMarkerWidth: rowMarkerWidthRaw,\n imageEditorOverride,\n getRowThemeOverride,\n markdownDivCreateNode,\n width,\n height,\n columns: columnsIn,\n rows,\n getCellContent,\n onCellClicked,\n onCellActivated,\n onFinishedEditing,\n coercePasteValue,\n drawHeader: drawHeaderIn,\n onHeaderClicked,\n spanRangeBehavior = \"default\",\n onGroupHeaderClicked,\n onCellContextMenu,\n className,\n onHeaderContextMenu,\n getCellsForSelection: getCellsForSelectionIn,\n onGroupHeaderContextMenu,\n onGroupHeaderRenamed,\n onCellEdited,\n onCellsEdited,\n onSearchResultsChanged: onSearchResultsChangedIn,\n searchResults,\n onSearchValueChange,\n searchValue,\n onKeyDown: onKeyDownIn,\n onKeyUp: onKeyUpIn,\n keybindings: keybindingsIn,\n onRowAppended,\n onColumnMoved,\n validateCell: validateCellIn,\n highlightRegions: highlightRegionsIn,\n drawCell: drawCell2,\n rangeSelect = \"rect\",\n columnSelect = \"multi\",\n rowSelect = \"multi\",\n rangeSelectionBlending = \"exclusive\",\n columnSelectionBlending = \"exclusive\",\n rowSelectionBlending = \"exclusive\",\n onDelete: onDeleteIn,\n onDragStart,\n onMouseMove,\n onPaste,\n copyHeaders = false,\n freezeColumns = 0,\n rowSelectionMode = \"auto\",\n rowMarkerStartIndex = 1,\n rowMarkerTheme,\n onHeaderMenuClick,\n getGroupDetails,\n onSearchClose: onSearchCloseIn,\n onItemHovered,\n onSelectionCleared,\n showSearch: showSearchIn,\n onVisibleRegionChanged,\n gridSelection: gridSelectionOuter,\n onGridSelectionChange,\n minColumnWidth: minColumnWidthIn = 50,\n maxColumnWidth: maxColumnWidthIn = 500,\n maxColumnAutoWidth: maxColumnAutoWidthIn,\n provideEditor,\n trailingRowOptions,\n scrollOffsetX,\n scrollOffsetY,\n verticalBorder,\n onDragOverCell,\n onDrop,\n onColumnResize: onColumnResizeIn,\n onColumnResizeEnd: onColumnResizeEndIn,\n onColumnResizeStart: onColumnResizeStartIn,\n customRenderers: additionalRenderers,\n fillHandle,\n drawFocusRing: drawFocusRing2,\n experimental,\n fixedShadowX,\n fixedShadowY,\n headerIcons,\n imageWindowLoader,\n initialSize,\n isDraggable,\n onDragLeave,\n onRowMoved,\n overscrollX: overscrollXIn,\n overscrollY: overscrollYIn,\n preventDiagonalScrolling,\n rightElement,\n rightElementProps,\n showMinimap,\n smoothScrollX,\n smoothScrollY,\n scrollToEnd,\n scaleToRem = false,\n rowHeight: rowHeightIn = 34,\n headerHeight: headerHeightIn = 36,\n groupHeaderHeight: groupHeaderHeightIn = headerHeightIn,\n theme: themeIn,\n isOutsideClick\n } = p;\n const minColumnWidth = Math.max(minColumnWidthIn, 20);\n const maxColumnWidth = Math.max(maxColumnWidthIn, minColumnWidth);\n const maxColumnAutoWidth = Math.max(maxColumnAutoWidthIn != null ? maxColumnAutoWidthIn : maxColumnWidth, minColumnWidth);\n const docStyle = React35.useMemo(() => {\n if (typeof window === \"undefined\")\n return { fontSize: \"16px\" };\n return window.getComputedStyle(document.documentElement);\n }, []);\n const fontSizeStr = docStyle.fontSize;\n const remSize = React35.useMemo(() => Number.parseFloat(fontSizeStr), [fontSizeStr]);\n const { rowHeight, headerHeight, groupHeaderHeight, theme, overscrollX, overscrollY } = useRemAdjuster({\n groupHeaderHeight: groupHeaderHeightIn,\n headerHeight: headerHeightIn,\n overscrollX: overscrollXIn,\n overscrollY: overscrollYIn,\n remSize,\n rowHeight: rowHeightIn,\n scaleToRem,\n theme: themeIn\n });\n const keybindings = React35.useMemo(() => {\n return keybindingsIn === void 0 ? keybindingDefaults : {\n ...keybindingDefaults,\n ...keybindingsIn\n };\n }, [keybindingsIn]);\n const rowMarkerWidth = rowMarkerWidthRaw != null ? rowMarkerWidthRaw : rows > 1e4 ? 48 : rows > 1e3 ? 44 : rows > 100 ? 36 : 32;\n const hasRowMarkers = rowMarkers !== \"none\";\n const rowMarkerOffset = hasRowMarkers ? 1 : 0;\n const showTrailingBlankRow = onRowAppended !== void 0;\n const lastRowSticky = (trailingRowOptions == null ? void 0 : trailingRowOptions.sticky) === true;\n const [showSearchInner, setShowSearchInner] = React35.useState(false);\n const showSearch = showSearchIn != null ? showSearchIn : showSearchInner;\n const onSearchClose = React35.useCallback(() => {\n if (onSearchCloseIn !== void 0) {\n onSearchCloseIn();\n } else {\n setShowSearchInner(false);\n }\n }, [onSearchCloseIn]);\n const gridSelectionOuterMangled = React35.useMemo(() => {\n return gridSelectionOuter === void 0 ? void 0 : shiftSelection(gridSelectionOuter, rowMarkerOffset);\n }, [gridSelectionOuter, rowMarkerOffset]);\n const gridSelection = gridSelectionOuterMangled != null ? gridSelectionOuterMangled : gridSelectionInner;\n const abortControllerRef = React35.useRef(new AbortController());\n React35.useEffect(() => {\n return () => {\n abortControllerRef == null ? void 0 : abortControllerRef.current.abort();\n };\n }, []);\n const [getCellsForSelection, getCellsForSeletionDirect] = useCellsForSelection(\n getCellsForSelectionIn,\n getCellContent,\n rowMarkerOffset,\n abortControllerRef.current,\n rows\n );\n const validateCell = React35.useCallback(\n (cell, newValue, prevValue) => {\n if (validateCellIn === void 0)\n return true;\n const item = [cell[0] - rowMarkerOffset, cell[1]];\n return validateCellIn == null ? void 0 : validateCellIn(item, newValue, prevValue);\n },\n [rowMarkerOffset, validateCellIn]\n );\n const expectedExternalGridSelection = React35.useRef(gridSelectionOuter);\n const setGridSelection = React35.useCallback(\n (newVal, expand) => {\n if (expand) {\n newVal = expandSelection(\n newVal,\n getCellsForSelection,\n rowMarkerOffset,\n spanRangeBehavior,\n abortControllerRef.current\n );\n }\n if (onGridSelectionChange !== void 0) {\n expectedExternalGridSelection.current = shiftSelection(newVal, -rowMarkerOffset);\n onGridSelectionChange(expectedExternalGridSelection.current);\n } else {\n setGridSelectionInner(newVal);\n }\n },\n [onGridSelectionChange, getCellsForSelection, rowMarkerOffset, spanRangeBehavior]\n );\n const onColumnResize = whenDefined(\n onColumnResizeIn,\n React35.useCallback(\n (_, w, ind, wg) => {\n onColumnResizeIn == null ? void 0 : onColumnResizeIn(columnsIn[ind - rowMarkerOffset], w, ind - rowMarkerOffset, wg);\n },\n [onColumnResizeIn, rowMarkerOffset, columnsIn]\n )\n );\n const onColumnResizeEnd = whenDefined(\n onColumnResizeEndIn,\n React35.useCallback(\n (_, w, ind, wg) => {\n onColumnResizeEndIn == null ? void 0 : onColumnResizeEndIn(columnsIn[ind - rowMarkerOffset], w, ind - rowMarkerOffset, wg);\n },\n [onColumnResizeEndIn, rowMarkerOffset, columnsIn]\n )\n );\n const onColumnResizeStart = whenDefined(\n onColumnResizeStartIn,\n React35.useCallback(\n (_, w, ind, wg) => {\n onColumnResizeStartIn == null ? void 0 : onColumnResizeStartIn(columnsIn[ind - rowMarkerOffset], w, ind - rowMarkerOffset, wg);\n },\n [onColumnResizeStartIn, rowMarkerOffset, columnsIn]\n )\n );\n const drawHeader2 = whenDefined(\n drawHeaderIn,\n React35.useCallback(\n (args) => {\n var _a2;\n return (_a2 = drawHeaderIn == null ? void 0 : drawHeaderIn({ ...args, columnIndex: args.columnIndex - rowMarkerOffset })) != null ? _a2 : false;\n },\n [drawHeaderIn, rowMarkerOffset]\n )\n );\n const onDelete = React35.useCallback(\n (sel) => {\n if (onDeleteIn !== void 0) {\n const result = onDeleteIn(shiftSelection(sel, -rowMarkerOffset));\n if (typeof result === \"boolean\") {\n return result;\n }\n return shiftSelection(result, rowMarkerOffset);\n }\n return true;\n },\n [onDeleteIn, rowMarkerOffset]\n );\n const [setCurrent, setSelectedRows, setSelectedColumns] = useSelectionBehavior(\n gridSelection,\n setGridSelection,\n rangeSelectionBlending,\n columnSelectionBlending,\n rowSelectionBlending,\n rangeSelect\n );\n const mergedTheme = React35.useMemo(() => {\n return { ...getDataEditorTheme(), ...theme };\n }, [theme]);\n const [clientSize, setClientSize] = React35.useState([10, 10, 0]);\n const getCellRenderer = React35.useCallback(\n (cell) => {\n if (cell.kind !== GridCellKind.Custom) {\n return CellRenderers[cell.kind];\n }\n return additionalRenderers == null ? void 0 : additionalRenderers.find((x) => x.isMatch(cell));\n },\n [additionalRenderers]\n );\n const columns = useColumnSizer(\n columnsIn,\n rows,\n getCellsForSeletionDirect,\n clientSize[0] - (rowMarkerOffset === 0 ? 0 : rowMarkerWidth) - clientSize[2],\n minColumnWidth,\n maxColumnAutoWidth,\n mergedTheme,\n getCellRenderer,\n abortControllerRef.current\n );\n const enableGroups = React35.useMemo(() => {\n return columns.some((c) => c.group !== void 0);\n }, [columns]);\n const totalHeaderHeight = enableGroups ? headerHeight + groupHeaderHeight : headerHeight;\n const numSelectedRows = gridSelection.rows.length;\n const rowMarkerHeader = rowMarkers === \"none\" ? \"\" : numSelectedRows === 0 ? headerCellUnheckedMarker : numSelectedRows === rows ? headerCellCheckedMarker : headerCellIndeterminateMarker;\n const mangledCols = React35.useMemo(() => {\n if (rowMarkers === \"none\")\n return columns;\n return [\n {\n title: rowMarkerHeader,\n width: rowMarkerWidth,\n icon: void 0,\n hasMenu: false,\n style: \"normal\",\n themeOverride: rowMarkerTheme\n },\n ...columns\n ];\n }, [columns, rowMarkerWidth, rowMarkers, rowMarkerHeader, rowMarkerTheme]);\n const [visibleRegionY, visibleRegionTy] = React35.useMemo(() => {\n return [\n scrollOffsetY !== void 0 && typeof rowHeight === \"number\" ? Math.floor(scrollOffsetY / rowHeight) : 0,\n scrollOffsetY !== void 0 && typeof rowHeight === \"number\" ? -(scrollOffsetY % rowHeight) : 0\n ];\n }, [scrollOffsetY, rowHeight]);\n const visibleRegionRef = React35.useRef({\n height: 1,\n width: 1,\n x: 0,\n y: 0\n });\n const visibleRegionInput = React35.useMemo(\n () => {\n var _a2, _b2;\n return {\n x: visibleRegionRef.current.x,\n y: visibleRegionY,\n width: (_a2 = visibleRegionRef.current.width) != null ? _a2 : 1,\n height: (_b2 = visibleRegionRef.current.height) != null ? _b2 : 1,\n // tx: 'TODO',\n ty: visibleRegionTy\n };\n },\n [visibleRegionTy, visibleRegionY]\n );\n const hasJustScrolled = React35.useRef(false);\n const [visibleRegion, setVisibleRegion, empty2] = useStateWithReactiveInput(visibleRegionInput);\n const vScrollReady = ((_a = visibleRegion.height) != null ? _a : 1) > 1;\n React35.useLayoutEffect(() => {\n if (scrollOffsetY !== void 0 && scrollRef.current !== null && vScrollReady) {\n if (scrollRef.current.scrollTop === scrollOffsetY)\n return;\n scrollRef.current.scrollTop = scrollOffsetY;\n if (scrollRef.current.scrollTop !== scrollOffsetY) {\n empty2();\n }\n hasJustScrolled.current = true;\n }\n }, [scrollOffsetY, vScrollReady, empty2]);\n const hScrollReady = ((_b = visibleRegion.width) != null ? _b : 1) > 1;\n React35.useLayoutEffect(() => {\n if (scrollOffsetX !== void 0 && scrollRef.current !== null && hScrollReady) {\n if (scrollRef.current.scrollLeft === scrollOffsetX)\n return;\n scrollRef.current.scrollLeft = scrollOffsetX;\n if (scrollRef.current.scrollLeft !== scrollOffsetX) {\n empty2();\n }\n hasJustScrolled.current = true;\n }\n }, [scrollOffsetX, hScrollReady, empty2]);\n const cellXOffset = visibleRegion.x + rowMarkerOffset;\n const cellYOffset = visibleRegion.y;\n const gridRef = React35.useRef(null);\n const focus = React35.useCallback((immediate) => {\n var _a2;\n if (immediate === true) {\n (_a2 = gridRef.current) == null ? void 0 : _a2.focus();\n } else {\n window.requestAnimationFrame(() => {\n var _a3;\n (_a3 = gridRef.current) == null ? void 0 : _a3.focus();\n });\n }\n }, []);\n const mangledRows = showTrailingBlankRow ? rows + 1 : rows;\n const mangledOnCellsEdited = React35.useCallback(\n (items) => {\n const mangledItems = rowMarkerOffset === 0 ? items : items.map((x) => ({\n ...x,\n location: [x.location[0] - rowMarkerOffset, x.location[1]]\n }));\n const r = onCellsEdited == null ? void 0 : onCellsEdited(mangledItems);\n if (r !== true) {\n for (const i of mangledItems)\n onCellEdited == null ? void 0 : onCellEdited(i.location, i.value);\n }\n return r;\n },\n [onCellEdited, onCellsEdited, rowMarkerOffset]\n );\n const highlightRegions = React35.useMemo(() => {\n if (highlightRegionsIn === void 0)\n return void 0;\n if (rowMarkerOffset === 0)\n return highlightRegionsIn;\n return highlightRegionsIn.map((r) => {\n const maxWidth = mangledCols.length - r.range.x - rowMarkerOffset;\n if (maxWidth <= 0)\n return void 0;\n return {\n color: r.color,\n range: {\n ...r.range,\n x: r.range.x + rowMarkerOffset,\n width: Math.min(maxWidth, r.range.width)\n },\n style: r.style\n };\n }).filter((x) => x !== void 0);\n }, [highlightRegionsIn, mangledCols.length, rowMarkerOffset]);\n const mangledColsRef = React35.useRef(mangledCols);\n mangledColsRef.current = mangledCols;\n const getMangledCellContent = React35.useCallback(\n ([col, row], forceStrict = false) => {\n var _a2, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j;\n const isTrailing = showTrailingBlankRow && row === mangledRows - 1;\n const isRowMarkerCol = col === 0 && hasRowMarkers;\n if (isRowMarkerCol) {\n if (isTrailing) {\n return loadingCell2;\n }\n return {\n kind: InnerGridCellKind.Marker,\n allowOverlay: false,\n checked: (gridSelection == null ? void 0 : gridSelection.rows.hasIndex(row)) === true,\n markerKind: rowMarkers === \"clickable-number\" ? \"number\" : rowMarkers,\n row: rowMarkerStartIndex + row,\n drawHandle: onRowMoved !== void 0,\n cursor: rowMarkers === \"clickable-number\" ? \"pointer\" : void 0\n };\n } else if (isTrailing) {\n const isFirst = col === rowMarkerOffset;\n const maybeFirstColumnHint = isFirst ? (_a2 = trailingRowOptions == null ? void 0 : trailingRowOptions.hint) != null ? _a2 : \"\" : \"\";\n const c = mangledColsRef.current[col];\n if (((_b2 = c == null ? void 0 : c.trailingRowOptions) == null ? void 0 : _b2.disabled) === true) {\n return loadingCell2;\n } else {\n const hint = (_d2 = (_c2 = c == null ? void 0 : c.trailingRowOptions) == null ? void 0 : _c2.hint) != null ? _d2 : maybeFirstColumnHint;\n const icon = (_f = (_e2 = c == null ? void 0 : c.trailingRowOptions) == null ? void 0 : _e2.addIcon) != null ? _f : trailingRowOptions == null ? void 0 : trailingRowOptions.addIcon;\n return {\n kind: InnerGridCellKind.NewRow,\n hint,\n allowOverlay: false,\n icon\n };\n }\n } else {\n const outerCol = col - rowMarkerOffset;\n if (forceStrict || (experimental == null ? void 0 : experimental.strict) === true) {\n const vr = visibleRegionRef.current;\n const isOutsideMainArea = vr.x > outerCol || outerCol > vr.x + vr.width || vr.y > row || row > vr.y + vr.height;\n const isSelected = outerCol === ((_h = (_g = vr.extras) == null ? void 0 : _g.selected) == null ? void 0 : _h[0]) && row === ((_i = vr.extras) == null ? void 0 : _i.selected[1]);\n const isOutsideFreezeArea = ((_j = vr.extras) == null ? void 0 : _j.freezeRegion) === void 0 || vr.extras.freezeRegion.x > outerCol || outerCol > vr.extras.freezeRegion.x + vr.extras.freezeRegion.width || vr.extras.freezeRegion.y > row || row > vr.extras.freezeRegion.y + vr.extras.freezeRegion.height;\n if (isOutsideMainArea && !isSelected && isOutsideFreezeArea) {\n return {\n kind: GridCellKind.Loading,\n allowOverlay: false\n };\n }\n }\n let result = getCellContent([outerCol, row]);\n if (rowMarkerOffset !== 0 && result.span !== void 0) {\n result = {\n ...result,\n span: [result.span[0] + rowMarkerOffset, result.span[1] + rowMarkerOffset]\n };\n }\n return result;\n }\n },\n [\n showTrailingBlankRow,\n mangledRows,\n hasRowMarkers,\n gridSelection == null ? void 0 : gridSelection.rows,\n onRowMoved,\n rowMarkers,\n rowMarkerOffset,\n trailingRowOptions == null ? void 0 : trailingRowOptions.hint,\n trailingRowOptions == null ? void 0 : trailingRowOptions.addIcon,\n experimental == null ? void 0 : experimental.strict,\n getCellContent,\n rowMarkerStartIndex\n ]\n );\n const mangledGetGroupDetails = React35.useCallback(\n (group) => {\n var _a2, _b2;\n let result = (_a2 = getGroupDetails == null ? void 0 : getGroupDetails(group)) != null ? _a2 : { name: group };\n if (onGroupHeaderRenamed !== void 0 && group !== \"\") {\n result = {\n icon: result.icon,\n name: result.name,\n overrideTheme: result.overrideTheme,\n actions: [\n ...(_b2 = result.actions) != null ? _b2 : [],\n {\n title: \"Rename\",\n icon: \"renameIcon\",\n onClick: (e) => setRenameGroup({\n group: result.name,\n bounds: e.bounds\n })\n }\n ]\n };\n }\n return result;\n },\n [getGroupDetails, onGroupHeaderRenamed]\n );\n const setOverlaySimple = React35.useCallback(\n (val) => {\n var _a2;\n const [col, row] = val.cell;\n const column = mangledCols[col];\n const groupTheme = (column == null ? void 0 : column.group) !== void 0 ? (_a2 = mangledGetGroupDetails(column.group)) == null ? void 0 : _a2.overrideTheme : void 0;\n const colTheme = column == null ? void 0 : column.themeOverride;\n const rowTheme = getRowThemeOverride == null ? void 0 : getRowThemeOverride(row);\n setOverlay({\n ...val,\n theme: { ...mergedTheme, ...groupTheme, ...colTheme, ...rowTheme, ...val.content.themeOverride }\n });\n },\n [getRowThemeOverride, mangledCols, mangledGetGroupDetails, mergedTheme]\n );\n const reselect = React35.useCallback(\n (bounds, fromKeyboard, initialValue) => {\n var _a2;\n if (gridSelection.current === void 0)\n return;\n const [col, row] = gridSelection.current.cell;\n const c = getMangledCellContent([col, row]);\n if (c.kind !== GridCellKind.Boolean && c.allowOverlay) {\n let content = c;\n if (initialValue !== void 0) {\n switch (content.kind) {\n case GridCellKind.Number: {\n const d = maybe(() => initialValue === \"-\" ? -0 : Number.parseFloat(initialValue), 0);\n content = {\n ...content,\n data: Number.isNaN(d) ? 0 : d\n };\n break;\n }\n case GridCellKind.Text:\n case GridCellKind.Markdown:\n case GridCellKind.Uri:\n content = {\n ...content,\n data: initialValue\n };\n break;\n }\n }\n setOverlaySimple({\n target: bounds,\n content,\n initialValue,\n cell: [col, row],\n highlight: initialValue === void 0,\n forceEditMode: initialValue !== void 0\n });\n } else if (c.kind === GridCellKind.Boolean && fromKeyboard && c.readonly !== true) {\n mangledOnCellsEdited([\n {\n location: gridSelection.current.cell,\n value: {\n ...c,\n data: toggleBoolean(c.data)\n }\n }\n ]);\n (_a2 = gridRef.current) == null ? void 0 : _a2.damage([{ cell: gridSelection.current.cell }]);\n }\n },\n [getMangledCellContent, gridSelection, mangledOnCellsEdited, setOverlaySimple]\n );\n const focusOnRowFromTrailingBlankRow = React35.useCallback(\n (col, row) => {\n var _a2;\n const bounds = (_a2 = gridRef.current) == null ? void 0 : _a2.getBounds(col, row);\n if (bounds === void 0 || scrollRef.current === null) {\n return;\n }\n const content = getMangledCellContent([col, row]);\n if (!content.allowOverlay) {\n return;\n }\n setOverlaySimple({\n target: bounds,\n content,\n initialValue: void 0,\n highlight: true,\n cell: [col, row],\n forceEditMode: true\n });\n },\n [getMangledCellContent, setOverlaySimple]\n );\n const scrollTo = React35.useCallback(\n (col, row, dir = \"both\", paddingX = 0, paddingY = 0, options = void 0) => {\n var _a2;\n if (scrollRef.current !== null) {\n const grid = gridRef.current;\n const canvas = canvasRef.current;\n const trueCol = typeof col !== \"number\" ? col.unit === \"cell\" ? col.amount : void 0 : col;\n const trueRow = typeof row !== \"number\" ? row.unit === \"cell\" ? row.amount : void 0 : row;\n const desiredX = typeof col !== \"number\" && col.unit === \"px\" ? col.amount : void 0;\n const desiredY = typeof row !== \"number\" && row.unit === \"px\" ? row.amount : void 0;\n if (grid !== null && canvas !== null) {\n let targetRect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n let scrollX = 0;\n let scrollY = 0;\n if (trueCol !== void 0 || trueRow !== void 0) {\n targetRect = (_a2 = grid.getBounds((trueCol != null ? trueCol : 0) + rowMarkerOffset, trueRow != null ? trueRow : 0)) != null ? _a2 : targetRect;\n if (targetRect.width === 0 || targetRect.height === 0)\n return;\n }\n const scrollBounds = canvas.getBoundingClientRect();\n const scale = scrollBounds.width / canvas.offsetWidth;\n if (desiredX !== void 0) {\n targetRect = {\n ...targetRect,\n x: desiredX - scrollBounds.left - scrollRef.current.scrollLeft,\n width: 1\n };\n }\n if (desiredY !== void 0) {\n targetRect = {\n ...targetRect,\n y: desiredY + scrollBounds.top - scrollRef.current.scrollTop,\n height: 1\n };\n }\n if (targetRect !== void 0) {\n const bounds = {\n x: targetRect.x - paddingX,\n y: targetRect.y - paddingY,\n width: targetRect.width + 2 * paddingX,\n height: targetRect.height + 2 * paddingY\n };\n let frozenWidth = 0;\n for (let i = 0; i < freezeColumns; i++) {\n frozenWidth += columns[i].width;\n }\n let trailingRowHeight = 0;\n if (lastRowSticky) {\n trailingRowHeight = typeof rowHeight === \"number\" ? rowHeight : rowHeight(rows);\n }\n let sLeft = frozenWidth * scale + scrollBounds.left + rowMarkerOffset * rowMarkerWidth * scale;\n let sRight = scrollBounds.right;\n let sTop = scrollBounds.top + totalHeaderHeight * scale;\n let sBottom = scrollBounds.bottom - trailingRowHeight * scale;\n const minx = targetRect.width + paddingX * 2;\n switch (options == null ? void 0 : options.hAlign) {\n case \"start\":\n sRight = sLeft + minx;\n break;\n case \"end\":\n sLeft = sRight - minx;\n break;\n case \"center\":\n sLeft = Math.floor((sLeft + sRight) / 2) - minx / 2;\n sRight = sLeft + minx;\n break;\n }\n const miny = targetRect.height + paddingY * 2;\n switch (options == null ? void 0 : options.vAlign) {\n case \"start\":\n sBottom = sTop + miny;\n break;\n case \"end\":\n sTop = sBottom - miny;\n break;\n case \"center\":\n sTop = Math.floor((sTop + sBottom) / 2) - miny / 2;\n sBottom = sTop + miny;\n break;\n }\n if (sLeft > bounds.x) {\n scrollX = bounds.x - sLeft;\n } else if (sRight < bounds.x + bounds.width) {\n scrollX = bounds.x + bounds.width - sRight;\n }\n if (sTop > bounds.y) {\n scrollY = bounds.y - sTop;\n } else if (sBottom < bounds.y + bounds.height) {\n scrollY = bounds.y + bounds.height - sBottom;\n }\n if (dir === \"vertical\" || typeof col === \"number\" && col < freezeColumns) {\n scrollX = 0;\n } else if (dir === \"horizontal\") {\n scrollY = 0;\n }\n if (scrollX !== 0 || scrollY !== 0) {\n if (scale !== 1) {\n scrollX /= scale;\n scrollY /= scale;\n }\n scrollRef.current.scrollTo(\n scrollX + scrollRef.current.scrollLeft,\n scrollY + scrollRef.current.scrollTop\n );\n }\n }\n }\n }\n },\n [rowMarkerOffset, rowMarkerWidth, totalHeaderHeight, lastRowSticky, freezeColumns, columns, rowHeight, rows]\n );\n const focusCallback = React35.useRef(focusOnRowFromTrailingBlankRow);\n const getCellContentRef = React35.useRef(getCellContent);\n const rowsRef = React35.useRef(rows);\n focusCallback.current = focusOnRowFromTrailingBlankRow;\n getCellContentRef.current = getCellContent;\n rowsRef.current = rows;\n const appendRow = React35.useCallback(\n async (col, openOverlay = true) => {\n var _a2;\n const c = mangledCols[col];\n if (((_a2 = c == null ? void 0 : c.trailingRowOptions) == null ? void 0 : _a2.disabled) === true) {\n return;\n }\n const appendResult = onRowAppended == null ? void 0 : onRowAppended();\n let r = void 0;\n let bottom = true;\n if (appendResult !== void 0) {\n r = await appendResult;\n if (r === \"top\")\n bottom = false;\n if (typeof r === \"number\")\n bottom = false;\n }\n let backoff = 0;\n const doFocus = () => {\n if (rowsRef.current <= rows) {\n if (backoff < 500) {\n window.setTimeout(doFocus, backoff);\n }\n backoff = 50 + backoff * 2;\n return;\n }\n const row = typeof r === \"number\" ? r : bottom ? rows : 0;\n scrollTo(col - rowMarkerOffset, row);\n setCurrent(\n {\n cell: [col, row],\n range: {\n x: col,\n y: row,\n width: 1,\n height: 1\n }\n },\n false,\n false,\n \"edit\"\n );\n const cell = getCellContentRef.current([col - rowMarkerOffset, row]);\n if (cell.allowOverlay && isReadWriteCell(cell) && cell.readonly !== true && openOverlay) {\n window.setTimeout(() => {\n focusCallback.current(col, row);\n }, 0);\n }\n };\n doFocus();\n },\n [mangledCols, onRowAppended, rowMarkerOffset, rows, scrollTo, setCurrent]\n );\n const getCustomNewRowTargetColumn = React35.useCallback(\n (col) => {\n var _a2, _b2, _c2;\n const customTargetColumn = (_c2 = (_b2 = (_a2 = columns[col]) == null ? void 0 : _a2.trailingRowOptions) == null ? void 0 : _b2.targetColumn) != null ? _c2 : trailingRowOptions == null ? void 0 : trailingRowOptions.targetColumn;\n if (typeof customTargetColumn === \"number\") {\n const customTargetOffset = hasRowMarkers ? 1 : 0;\n return customTargetColumn + customTargetOffset;\n }\n if (typeof customTargetColumn === \"object\") {\n const maybeIndex = columnsIn.indexOf(customTargetColumn);\n if (maybeIndex >= 0) {\n const customTargetOffset = hasRowMarkers ? 1 : 0;\n return maybeIndex + customTargetOffset;\n }\n }\n return void 0;\n },\n [columns, columnsIn, hasRowMarkers, trailingRowOptions == null ? void 0 : trailingRowOptions.targetColumn]\n );\n const lastSelectedRowRef = React35.useRef();\n const lastSelectedColRef = React35.useRef();\n const themeForCell = React35.useCallback(\n (cell, pos) => {\n var _a2;\n const [col, row] = pos;\n return {\n ...mergedTheme,\n ...(_a2 = mangledCols[col]) == null ? void 0 : _a2.themeOverride,\n ...getRowThemeOverride == null ? void 0 : getRowThemeOverride(row),\n ...cell.themeOverride\n };\n },\n [getRowThemeOverride, mangledCols, mergedTheme]\n );\n const handleSelect = React35.useCallback(\n (args) => {\n var _a2, _b2, _c2, _d2;\n const isMultiKey = browserIsOSX.value ? args.metaKey : args.ctrlKey;\n const isMultiRow = isMultiKey && rowSelect === \"multi\";\n const isMultiCol = isMultiKey && columnSelect === \"multi\";\n const [col, row] = args.location;\n const selectedColumns = gridSelection.columns;\n const selectedRows = gridSelection.rows;\n const [cellCol, cellRow] = (_b2 = (_a2 = gridSelection.current) == null ? void 0 : _a2.cell) != null ? _b2 : [];\n if (args.kind === \"cell\") {\n lastSelectedColRef.current = void 0;\n lastMouseSelectLocation.current = [col, row];\n if (col === 0 && hasRowMarkers) {\n if (showTrailingBlankRow === true && row === rows || rowMarkers === \"number\" || rowSelect === \"none\")\n return;\n const markerCell = getMangledCellContent(args.location);\n if (markerCell.kind !== InnerGridCellKind.Marker) {\n return;\n }\n if (onRowMoved !== void 0) {\n const renderer = getCellRenderer(markerCell);\n assert((renderer == null ? void 0 : renderer.kind) === InnerGridCellKind.Marker);\n const postClick = (_c2 = renderer == null ? void 0 : renderer.onClick) == null ? void 0 : _c2.call(renderer, {\n ...args,\n cell: markerCell,\n posX: args.localEventX,\n posY: args.localEventY,\n bounds: args.bounds,\n theme: themeForCell(markerCell, args.location),\n preventDefault: () => void 0\n });\n if (postClick === void 0 || postClick.checked === markerCell.checked)\n return;\n }\n setOverlay(void 0);\n focus();\n const isSelected = selectedRows.hasIndex(row);\n const lastHighlighted = lastSelectedRowRef.current;\n if (rowSelect === \"multi\" && (args.shiftKey || args.isLongTouch === true) && lastHighlighted !== void 0 && selectedRows.hasIndex(lastHighlighted)) {\n const newSlice = [Math.min(lastHighlighted, row), Math.max(lastHighlighted, row) + 1];\n if (isMultiRow || rowSelectionMode === \"multi\") {\n setSelectedRows(void 0, newSlice, true);\n } else {\n setSelectedRows(CompactSelection.fromSingleSelection(newSlice), void 0, isMultiRow);\n }\n } else if (isMultiRow || args.isTouch || rowSelectionMode === \"multi\") {\n if (isSelected) {\n setSelectedRows(selectedRows.remove(row), void 0, true);\n } else {\n setSelectedRows(void 0, row, true);\n lastSelectedRowRef.current = row;\n }\n } else if (isSelected && selectedRows.length === 1) {\n setSelectedRows(CompactSelection.empty(), void 0, isMultiKey);\n } else {\n setSelectedRows(CompactSelection.fromSingleSelection(row), void 0, isMultiKey);\n lastSelectedRowRef.current = row;\n }\n } else if (col >= rowMarkerOffset && showTrailingBlankRow && row === rows) {\n const customTargetColumn = getCustomNewRowTargetColumn(col);\n void appendRow(customTargetColumn != null ? customTargetColumn : col);\n } else {\n if (cellCol !== col || cellRow !== row) {\n const cell = getMangledCellContent(args.location);\n const renderer = getCellRenderer(cell);\n if ((renderer == null ? void 0 : renderer.onSelect) !== void 0) {\n let prevented = false;\n renderer.onSelect({\n ...args,\n cell,\n posX: args.localEventX,\n posY: args.localEventY,\n bounds: args.bounds,\n preventDefault: () => prevented = true,\n theme: themeForCell(cell, args.location)\n });\n if (prevented) {\n return;\n }\n }\n const isLastStickyRow = lastRowSticky && row === rows;\n const startedFromLastSticky = lastRowSticky && gridSelection !== void 0 && ((_d2 = gridSelection.current) == null ? void 0 : _d2.cell[1]) === rows;\n if ((args.shiftKey || args.isLongTouch === true) && cellCol !== void 0 && cellRow !== void 0 && gridSelection.current !== void 0 && !startedFromLastSticky) {\n if (isLastStickyRow) {\n return;\n }\n const left = Math.min(col, cellCol);\n const right = Math.max(col, cellCol);\n const top = Math.min(row, cellRow);\n const bottom = Math.max(row, cellRow);\n setCurrent(\n {\n ...gridSelection.current,\n range: {\n x: left,\n y: top,\n width: right - left + 1,\n height: bottom - top + 1\n }\n },\n true,\n isMultiKey,\n \"click\"\n );\n lastSelectedRowRef.current = void 0;\n focus();\n } else {\n setCurrent(\n {\n cell: [col, row],\n range: { x: col, y: row, width: 1, height: 1 }\n },\n true,\n isMultiKey,\n \"click\"\n );\n lastSelectedRowRef.current = void 0;\n setOverlay(void 0);\n focus();\n }\n }\n }\n } else if (args.kind === \"header\") {\n lastMouseSelectLocation.current = [col, row];\n setOverlay(void 0);\n if (hasRowMarkers && col === 0) {\n lastSelectedRowRef.current = void 0;\n lastSelectedColRef.current = void 0;\n if (rowSelect === \"multi\") {\n if (selectedRows.length !== rows) {\n setSelectedRows(CompactSelection.fromSingleSelection([0, rows]), void 0, isMultiKey);\n } else {\n setSelectedRows(CompactSelection.empty(), void 0, isMultiKey);\n }\n focus();\n }\n } else {\n const lastCol = lastSelectedColRef.current;\n if (columnSelect === \"multi\" && (args.shiftKey || args.isLongTouch === true) && lastCol !== void 0 && selectedColumns.hasIndex(lastCol)) {\n const newSlice = [Math.min(lastCol, col), Math.max(lastCol, col) + 1];\n if (isMultiCol) {\n setSelectedColumns(void 0, newSlice, isMultiKey);\n } else {\n setSelectedColumns(CompactSelection.fromSingleSelection(newSlice), void 0, isMultiKey);\n }\n } else if (isMultiCol) {\n if (selectedColumns.hasIndex(col)) {\n setSelectedColumns(selectedColumns.remove(col), void 0, isMultiKey);\n } else {\n setSelectedColumns(void 0, col, isMultiKey);\n }\n lastSelectedColRef.current = col;\n } else if (columnSelect !== \"none\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(col), void 0, isMultiKey);\n lastSelectedColRef.current = col;\n }\n lastSelectedRowRef.current = void 0;\n focus();\n }\n } else if (args.kind === groupHeaderKind) {\n lastMouseSelectLocation.current = [col, row];\n } else if (args.kind === outOfBoundsKind && !args.isMaybeScrollbar) {\n setGridSelection(emptyGridSelection, false);\n setOverlay(void 0);\n focus();\n onSelectionCleared == null ? void 0 : onSelectionCleared();\n lastSelectedRowRef.current = void 0;\n lastSelectedColRef.current = void 0;\n }\n },\n [\n appendRow,\n columnSelect,\n focus,\n getCellRenderer,\n getCustomNewRowTargetColumn,\n getMangledCellContent,\n gridSelection,\n hasRowMarkers,\n lastRowSticky,\n onSelectionCleared,\n onRowMoved,\n rowMarkerOffset,\n rowMarkers,\n rowSelect,\n rowSelectionMode,\n rows,\n setCurrent,\n setGridSelection,\n setSelectedColumns,\n setSelectedRows,\n showTrailingBlankRow,\n themeForCell\n ]\n );\n const isActivelyDraggingHeader = React35.useRef(false);\n const lastMouseSelectLocation = React35.useRef();\n const touchDownArgs = React35.useRef(visibleRegion);\n const mouseDownData = React35.useRef();\n const onMouseDown = React35.useCallback(\n (args) => {\n var _a2, _b2;\n isPrevented.current = false;\n touchDownArgs.current = visibleRegionRef.current;\n if (args.button !== 0 && args.button !== 1) {\n mouseDownData.current = void 0;\n return;\n }\n const time = performance.now();\n const wasDoubleClick = time - ((_b2 = (_a2 = mouseDownData.current) == null ? void 0 : _a2.time) != null ? _b2 : -1e3) < 250;\n mouseDownData.current = {\n wasDoubleClick,\n button: args.button,\n time,\n location: args.location\n };\n if ((args == null ? void 0 : args.kind) === \"header\") {\n isActivelyDraggingHeader.current = true;\n }\n const fh = args.kind === \"cell\" && args.isFillHandle;\n if (!fh && args.kind !== \"cell\" && args.isEdge)\n return;\n setMouseState({\n previousSelection: gridSelection,\n fillHandle: fh\n });\n lastMouseSelectLocation.current = void 0;\n if (!args.isTouch && args.button === 0) {\n handleSelect(args);\n } else if (!args.isTouch && args.button === 1) {\n lastMouseSelectLocation.current = args.location;\n }\n },\n [gridSelection, handleSelect]\n );\n const [renameGroup, setRenameGroup] = React35.useState();\n const handleGroupHeaderSelection = React35.useCallback(\n (args) => {\n if (args.kind !== groupHeaderKind || columnSelect !== \"multi\") {\n return;\n }\n const isMultiKey = browserIsOSX.value ? args.metaKey : args.ctrlKey;\n const [col] = args.location;\n const selectedColumns = gridSelection.columns;\n if (col < rowMarkerOffset)\n return;\n const needle = mangledCols[col];\n let start = col;\n let end = col;\n for (let i = col - 1; i >= rowMarkerOffset; i--) {\n if (!isGroupEqual(needle.group, mangledCols[i].group))\n break;\n start--;\n }\n for (let i = col + 1; i < mangledCols.length; i++) {\n if (!isGroupEqual(needle.group, mangledCols[i].group))\n break;\n end++;\n }\n focus();\n if (isMultiKey) {\n if (selectedColumns.hasAll([start, end + 1])) {\n let newVal = selectedColumns;\n for (let index = start; index <= end; index++) {\n newVal = newVal.remove(index);\n }\n setSelectedColumns(newVal, void 0, isMultiKey);\n } else {\n setSelectedColumns(void 0, [start, end + 1], isMultiKey);\n }\n } else {\n setSelectedColumns(CompactSelection.fromSingleSelection([start, end + 1]), void 0, isMultiKey);\n }\n },\n [columnSelect, focus, gridSelection.columns, mangledCols, rowMarkerOffset, setSelectedColumns]\n );\n const fillDown = React35.useCallback(\n (reverse) => {\n var _a2;\n if (gridSelection.current === void 0)\n return;\n const v = [];\n const r = gridSelection.current.range;\n for (let x = 0; x < r.width; x++) {\n const fillCol = x + r.x;\n const fillVal = getMangledCellContent([fillCol, reverse ? r.y + r.height - 1 : r.y]);\n if (isInnerOnlyCell(fillVal) || !isReadWriteCell(fillVal))\n continue;\n for (let y = 1; y < r.height; y++) {\n const fillRow = reverse ? r.y + r.height - (y + 1) : y + r.y;\n const target = [fillCol, fillRow];\n v.push({\n location: target,\n value: { ...fillVal }\n });\n }\n }\n mangledOnCellsEdited(v);\n (_a2 = gridRef.current) == null ? void 0 : _a2.damage(\n v.map((c) => ({\n cell: c.location\n }))\n );\n },\n [getMangledCellContent, gridSelection, mangledOnCellsEdited]\n );\n const isPrevented = React35.useRef(false);\n const normalSizeColumn = React35.useCallback(\n async (col, force = false) => {\n var _a2;\n if ((((_a2 = mouseDownData.current) == null ? void 0 : _a2.wasDoubleClick) === true || force) && getCellsForSelection !== void 0 && onColumnResize !== void 0) {\n const start = visibleRegionRef.current.y;\n const end = visibleRegionRef.current.height;\n let cells = getCellsForSelection(\n {\n x: col,\n y: start,\n width: 1,\n height: Math.min(end, rows - start)\n },\n abortControllerRef.current.signal\n );\n if (typeof cells !== \"object\") {\n cells = await cells();\n }\n const inputCol = columns[col - rowMarkerOffset];\n const offscreen = document.createElement(\"canvas\");\n const ctx = offscreen.getContext(\"2d\", { alpha: false });\n if (ctx !== null) {\n ctx.font = `${mergedTheme.baseFontStyle} ${mergedTheme.fontFamily}`;\n const newCol = measureColumn(\n ctx,\n mergedTheme,\n inputCol,\n 0,\n cells,\n minColumnWidth,\n maxColumnWidth,\n false,\n getCellRenderer\n );\n onColumnResize == null ? void 0 : onColumnResize(inputCol, newCol.width, col, newCol.width);\n }\n }\n },\n [\n columns,\n getCellsForSelection,\n maxColumnWidth,\n mergedTheme,\n minColumnWidth,\n onColumnResize,\n rowMarkerOffset,\n rows,\n getCellRenderer\n ]\n );\n const [scrollDir, setScrollDir] = React35.useState();\n const onMouseUp = React35.useCallback(\n (args, isOutside) => {\n var _a2, _b2, _c2;\n const mouse = mouseState;\n setMouseState(void 0);\n setScrollDir(void 0);\n isActivelyDraggingHeader.current = false;\n if (isOutside)\n return;\n if ((mouse == null ? void 0 : mouse.fillHandle) === true && gridSelection.current !== void 0) {\n fillDown(gridSelection.current.cell[1] !== gridSelection.current.range.y);\n return;\n }\n const [col, row] = args.location;\n const [lastMouseDownCol, lastMouseDownRow] = (_a2 = lastMouseSelectLocation.current) != null ? _a2 : [];\n const preventDefault = () => {\n isPrevented.current = true;\n };\n const handleMaybeClick = (a) => {\n var _a3, _b3, _c3;\n const isValidClick = a.isTouch || lastMouseDownCol === col && lastMouseDownRow === row;\n if (isValidClick) {\n onCellClicked == null ? void 0 : onCellClicked([col - rowMarkerOffset, row], {\n ...a,\n preventDefault\n });\n }\n if (a.button === 1)\n return !isPrevented.current;\n if (!isPrevented.current) {\n const c = getMangledCellContent(args.location);\n const r = getCellRenderer(c);\n if (r !== void 0 && r.onClick !== void 0 && isValidClick) {\n const newVal = r.onClick({\n ...a,\n cell: c,\n posX: a.localEventX,\n posY: a.localEventY,\n bounds: a.bounds,\n theme: themeForCell(c, args.location),\n preventDefault\n });\n if (newVal !== void 0 && !isInnerOnlyCell(newVal) && isEditableGridCell(newVal)) {\n mangledOnCellsEdited([{ location: a.location, value: newVal }]);\n (_a3 = gridRef.current) == null ? void 0 : _a3.damage([\n {\n cell: a.location\n }\n ]);\n }\n }\n if (!isPrevented.current && ((_c3 = (_b3 = mouse == null ? void 0 : mouse.previousSelection) == null ? void 0 : _b3.current) == null ? void 0 : _c3.cell) !== void 0 && gridSelection.current !== void 0) {\n const [selectedCol, selectedRow] = gridSelection.current.cell;\n const [prevCol, prevRow] = mouse.previousSelection.current.cell;\n if (col === selectedCol && col === prevCol && row === selectedRow && row === prevRow) {\n onCellActivated == null ? void 0 : onCellActivated([col - rowMarkerOffset, row]);\n reselect(a.bounds, false);\n return true;\n }\n }\n }\n return false;\n };\n const clickLocation = args.location[0] - rowMarkerOffset;\n if (args.isTouch) {\n const vr = visibleRegionRef.current;\n const touchVr = touchDownArgs.current;\n if (vr.x !== touchVr.x || vr.y !== touchVr.y) {\n return;\n }\n if (args.isLongTouch === true) {\n if (args.kind === \"cell\" && ((_b2 = gridSelection == null ? void 0 : gridSelection.current) == null ? void 0 : _b2.cell[0]) === col && ((_c2 = gridSelection == null ? void 0 : gridSelection.current) == null ? void 0 : _c2.cell[1]) === row) {\n onCellContextMenu == null ? void 0 : onCellContextMenu([clickLocation, args.location[1]], {\n ...args,\n preventDefault\n });\n return;\n } else if (args.kind === \"header\" && gridSelection.columns.hasIndex(col)) {\n onHeaderContextMenu == null ? void 0 : onHeaderContextMenu(clickLocation, { ...args, preventDefault });\n return;\n } else if (args.kind === groupHeaderKind) {\n if (clickLocation < 0) {\n return;\n }\n onGroupHeaderContextMenu == null ? void 0 : onGroupHeaderContextMenu(clickLocation, { ...args, preventDefault });\n return;\n }\n }\n if (args.kind === \"cell\") {\n if (!handleMaybeClick(args)) {\n handleSelect(args);\n }\n } else if (args.kind === groupHeaderKind) {\n onGroupHeaderClicked == null ? void 0 : onGroupHeaderClicked(clickLocation, { ...args, preventDefault });\n } else {\n if (args.kind === headerKind) {\n onHeaderClicked == null ? void 0 : onHeaderClicked(clickLocation, {\n ...args,\n preventDefault\n });\n }\n handleSelect(args);\n }\n return;\n }\n if (args.kind === \"header\") {\n if (clickLocation < 0) {\n return;\n }\n if (args.isEdge) {\n void normalSizeColumn(col);\n } else if (args.button === 0 && col === lastMouseDownCol && row === lastMouseDownRow) {\n onHeaderClicked == null ? void 0 : onHeaderClicked(clickLocation, { ...args, preventDefault });\n }\n }\n if (args.kind === groupHeaderKind) {\n if (clickLocation < 0) {\n return;\n }\n if (args.button === 0 && col === lastMouseDownCol && row === lastMouseDownRow) {\n onGroupHeaderClicked == null ? void 0 : onGroupHeaderClicked(clickLocation, { ...args, preventDefault });\n if (!isPrevented.current) {\n handleGroupHeaderSelection(args);\n }\n }\n }\n if (args.kind === \"cell\" && (args.button === 0 || args.button === 1)) {\n handleMaybeClick(args);\n }\n lastMouseSelectLocation.current = void 0;\n },\n [\n mouseState,\n rowMarkerOffset,\n gridSelection,\n onCellClicked,\n fillDown,\n getMangledCellContent,\n getCellRenderer,\n themeForCell,\n mangledOnCellsEdited,\n onCellActivated,\n reselect,\n onCellContextMenu,\n onHeaderContextMenu,\n onGroupHeaderContextMenu,\n handleSelect,\n onGroupHeaderClicked,\n normalSizeColumn,\n onHeaderClicked,\n handleGroupHeaderSelection\n ]\n );\n const onMouseMoveImpl = React35.useCallback(\n (args) => {\n const a = {\n ...args,\n location: [args.location[0] - rowMarkerOffset, args.location[1]]\n };\n onMouseMove == null ? void 0 : onMouseMove(a);\n setScrollDir((cv) => {\n var _a2, _b2;\n if (isActivelyDraggingHeader.current)\n return [args.scrollEdge[0], 0];\n if (args.scrollEdge[0] === (cv == null ? void 0 : cv[0]) && args.scrollEdge[1] === cv[1])\n return cv;\n return mouseState === void 0 || ((_b2 = (_a2 = mouseDownData.current) == null ? void 0 : _a2.location[0]) != null ? _b2 : 0) < rowMarkerOffset ? void 0 : args.scrollEdge;\n });\n },\n [mouseState, onMouseMove, rowMarkerOffset]\n );\n useAutoscroll(scrollDir, scrollRef);\n const onHeaderMenuClickInner = React35.useCallback(\n (col, screenPosition) => {\n onHeaderMenuClick == null ? void 0 : onHeaderMenuClick(col - rowMarkerOffset, screenPosition);\n },\n [onHeaderMenuClick, rowMarkerOffset]\n );\n const currentCell = (_c = gridSelection == null ? void 0 : gridSelection.current) == null ? void 0 : _c.cell;\n const onVisibleRegionChangedImpl = React35.useCallback(\n (region, clientWidth, clientHeight, rightElWidth, tx, ty) => {\n hasJustScrolled.current = false;\n let selected = currentCell;\n if (selected !== void 0) {\n selected = [selected[0] - rowMarkerOffset, selected[1]];\n }\n const newRegion = {\n x: region.x - rowMarkerOffset,\n y: region.y,\n width: region.width,\n height: showTrailingBlankRow && region.y + region.height >= rows ? region.height - 1 : region.height,\n tx,\n ty,\n extras: {\n selected,\n freezeRegion: freezeColumns === 0 ? void 0 : {\n x: 0,\n y: region.y,\n width: freezeColumns,\n height: region.height\n }\n }\n };\n visibleRegionRef.current = newRegion;\n setVisibleRegion(newRegion);\n setClientSize([clientWidth, clientHeight, rightElWidth]);\n onVisibleRegionChanged == null ? void 0 : onVisibleRegionChanged(newRegion, newRegion.tx, newRegion.ty, newRegion.extras);\n },\n [\n currentCell,\n rowMarkerOffset,\n showTrailingBlankRow,\n rows,\n freezeColumns,\n setVisibleRegion,\n onVisibleRegionChanged\n ]\n );\n const onColumnMovedImpl = whenDefined(\n onColumnMoved,\n React35.useCallback(\n (startIndex, endIndex) => {\n onColumnMoved == null ? void 0 : onColumnMoved(startIndex - rowMarkerOffset, endIndex - rowMarkerOffset);\n if (columnSelect !== \"none\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(endIndex), void 0, true);\n }\n },\n [columnSelect, onColumnMoved, rowMarkerOffset, setSelectedColumns]\n )\n );\n const isActivelyDragging = React35.useRef(false);\n const onDragStartImpl = React35.useCallback(\n (args) => {\n if (args.location[0] === 0 && rowMarkerOffset > 0) {\n args.preventDefault();\n return;\n }\n onDragStart == null ? void 0 : onDragStart({\n ...args,\n location: [args.location[0] - rowMarkerOffset, args.location[1]]\n });\n if (!args.defaultPrevented()) {\n isActivelyDragging.current = true;\n }\n setMouseState(void 0);\n },\n [onDragStart, rowMarkerOffset]\n );\n const onDragEnd = React35.useCallback(() => {\n isActivelyDragging.current = false;\n }, []);\n const onItemHoveredImpl = React35.useCallback(\n (args) => {\n var _a2, _b2;\n if (((_a2 = mouseDownData == null ? void 0 : mouseDownData.current) == null ? void 0 : _a2.button) !== void 0 && mouseDownData.current.button >= 1)\n return;\n if (mouseState !== void 0 && ((_b2 = mouseDownData.current) == null ? void 0 : _b2.location[0]) === 0 && args.location[0] === 0 && rowMarkerOffset === 1 && rowSelect === \"multi\" && mouseState.previousSelection && !mouseState.previousSelection.rows.hasIndex(mouseDownData.current.location[1]) && gridSelection.rows.hasIndex(mouseDownData.current.location[1])) {\n const start = Math.min(mouseDownData.current.location[1], args.location[1]);\n const end = Math.max(mouseDownData.current.location[1], args.location[1]) + 1;\n setSelectedRows(CompactSelection.fromSingleSelection([start, end]), void 0, false);\n }\n if (mouseState !== void 0 && gridSelection.current !== void 0 && !isActivelyDragging.current && (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n const [selectedCol, selectedRow] = gridSelection.current.cell;\n let [col, row] = args.location;\n if (row < 0) {\n row = visibleRegionRef.current.y;\n }\n const startedFromLastStickyRow = lastRowSticky && selectedRow === rows;\n if (startedFromLastStickyRow)\n return;\n const landedOnLastStickyRow = lastRowSticky && row === rows;\n if (landedOnLastStickyRow) {\n if (args.kind === outOfBoundsKind)\n row--;\n else\n return;\n }\n col = Math.max(col, rowMarkerOffset);\n const deltaX = col - selectedCol;\n const deltaY = row - selectedRow;\n const newRange = {\n x: deltaX >= 0 ? selectedCol : col,\n y: deltaY >= 0 ? selectedRow : row,\n width: Math.abs(deltaX) + 1,\n height: Math.abs(deltaY) + 1\n };\n setCurrent(\n {\n ...gridSelection.current,\n range: newRange\n },\n true,\n false,\n \"drag\"\n );\n }\n onItemHovered == null ? void 0 : onItemHovered({ ...args, location: [args.location[0] - rowMarkerOffset, args.location[1]] });\n },\n [\n mouseState,\n rowMarkerOffset,\n rowSelect,\n gridSelection,\n rangeSelect,\n onItemHovered,\n setSelectedRows,\n lastRowSticky,\n rows,\n setCurrent\n ]\n );\n const adjustSelection = React35.useCallback(\n (direction2) => {\n if (gridSelection.current === void 0)\n return;\n const [x, y] = direction2;\n const [col, row] = gridSelection.current.cell;\n const old = gridSelection.current.range;\n let left = old.x;\n let right = old.x + old.width;\n let top = old.y;\n let bottom = old.y + old.height;\n if (y !== 0) {\n switch (y) {\n case 2: {\n bottom = rows;\n top = row;\n scrollTo(0, bottom, \"vertical\");\n break;\n }\n case -2: {\n top = 0;\n bottom = row + 1;\n scrollTo(0, top, \"vertical\");\n break;\n }\n case 1: {\n if (top < row) {\n top++;\n scrollTo(0, top, \"vertical\");\n } else {\n bottom = Math.min(rows, bottom + 1);\n scrollTo(0, bottom, \"vertical\");\n }\n break;\n }\n case -1: {\n if (bottom > row + 1) {\n bottom--;\n scrollTo(0, bottom, \"vertical\");\n } else {\n top = Math.max(0, top - 1);\n scrollTo(0, top, \"vertical\");\n }\n break;\n }\n default: {\n assertNever(y);\n }\n }\n }\n if (x !== 0) {\n if (x === 2) {\n right = mangledCols.length;\n left = col;\n scrollTo(right - 1 - rowMarkerOffset, 0, \"horizontal\");\n } else if (x === -2) {\n left = rowMarkerOffset;\n right = col + 1;\n scrollTo(left - rowMarkerOffset, 0, \"horizontal\");\n } else {\n let disallowed = [];\n if (getCellsForSelection !== void 0) {\n const cells = getCellsForSelection(\n {\n x: left,\n y: top,\n width: right - left - rowMarkerOffset,\n height: bottom - top\n },\n abortControllerRef.current.signal\n );\n if (typeof cells === \"object\") {\n disallowed = getSpanStops(cells);\n }\n }\n if (x === 1) {\n let done = false;\n if (left < col) {\n if (disallowed.length > 0) {\n const target = range(left + 1, col + 1).find(\n (n) => !disallowed.includes(n - rowMarkerOffset)\n );\n if (target !== void 0) {\n left = target;\n done = true;\n }\n } else {\n left++;\n done = true;\n }\n if (done)\n scrollTo(left, 0, \"horizontal\");\n }\n if (!done) {\n right = Math.min(mangledCols.length, right + 1);\n scrollTo(right - 1 - rowMarkerOffset, 0, \"horizontal\");\n }\n } else if (x === -1) {\n let done = false;\n if (right > col + 1) {\n if (disallowed.length > 0) {\n const target = range(right - 1, col, -1).find(\n (n) => !disallowed.includes(n - rowMarkerOffset)\n );\n if (target !== void 0) {\n right = target;\n done = true;\n }\n } else {\n right--;\n done = true;\n }\n if (done)\n scrollTo(right - rowMarkerOffset, 0, \"horizontal\");\n }\n if (!done) {\n left = Math.max(rowMarkerOffset, left - 1);\n scrollTo(left - rowMarkerOffset, 0, \"horizontal\");\n }\n } else {\n assertNever(x);\n }\n }\n }\n setCurrent(\n {\n cell: gridSelection.current.cell,\n range: {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top\n }\n },\n true,\n false,\n \"keyboard-select\"\n );\n },\n [getCellsForSelection, gridSelection, mangledCols.length, rowMarkerOffset, rows, scrollTo, setCurrent]\n );\n const updateSelectedCell = React35.useCallback(\n (col, row, fromEditingTrailingRow, freeMove) => {\n const rowMax = mangledRows - (fromEditingTrailingRow ? 0 : 1);\n col = clamp5(col, rowMarkerOffset, columns.length - 1 + rowMarkerOffset);\n row = clamp5(row, 0, rowMax);\n if (col === (currentCell == null ? void 0 : currentCell[0]) && row === (currentCell == null ? void 0 : currentCell[1]))\n return false;\n if (freeMove && gridSelection.current !== void 0) {\n const newStack = [...gridSelection.current.rangeStack];\n if (gridSelection.current.range.width > 1 || gridSelection.current.range.height > 1) {\n newStack.push(gridSelection.current.range);\n }\n setGridSelection(\n {\n ...gridSelection,\n current: {\n cell: [col, row],\n range: { x: col, y: row, width: 1, height: 1 },\n rangeStack: newStack\n }\n },\n true\n );\n } else {\n setCurrent(\n {\n cell: [col, row],\n range: { x: col, y: row, width: 1, height: 1 }\n },\n true,\n false,\n \"keyboard-nav\"\n );\n }\n if (lastSent.current !== void 0 && lastSent.current[0] === col && lastSent.current[1] === row) {\n lastSent.current = void 0;\n }\n scrollTo(col - rowMarkerOffset, row);\n return true;\n },\n [\n mangledRows,\n rowMarkerOffset,\n columns.length,\n currentCell,\n gridSelection,\n scrollTo,\n setGridSelection,\n setCurrent\n ]\n );\n const onFinishEditing = React35.useCallback(\n (newValue, movement) => {\n if ((overlay == null ? void 0 : overlay.cell) !== void 0 && newValue !== void 0 && isEditableGridCell(newValue)) {\n mangledOnCellsEdited([{ location: overlay.cell, value: newValue }]);\n window.requestAnimationFrame(() => {\n var _a2;\n (_a2 = gridRef.current) == null ? void 0 : _a2.damage([\n {\n cell: overlay.cell\n }\n ]);\n });\n }\n focus(true);\n setOverlay(void 0);\n const [movX, movY] = movement;\n if (gridSelection.current !== void 0 && (movX !== 0 || movY !== 0)) {\n const isEditingTrailingRow = gridSelection.current.cell[1] === mangledRows - 1 && newValue !== void 0;\n updateSelectedCell(\n clamp5(gridSelection.current.cell[0] + movX, 0, mangledCols.length - 1),\n clamp5(gridSelection.current.cell[1] + movY, 0, mangledRows - 1),\n isEditingTrailingRow,\n false\n );\n }\n onFinishedEditing == null ? void 0 : onFinishedEditing(newValue, movement);\n },\n [\n overlay == null ? void 0 : overlay.cell,\n focus,\n gridSelection,\n onFinishedEditing,\n mangledOnCellsEdited,\n mangledRows,\n updateSelectedCell,\n mangledCols.length\n ]\n );\n const overlayID = React35.useMemo(() => {\n return `gdg-overlay-${idCounter++}`;\n }, []);\n const deleteRange = React35.useCallback(\n (r) => {\n var _a2, _b2, _c2, _d2;\n focus();\n const editList = [];\n for (let x = r.x; x < r.x + r.width; x++) {\n for (let y = r.y; y < r.y + r.height; y++) {\n const cellValue = getCellContent([x - rowMarkerOffset, y]);\n if (!cellValue.allowOverlay && cellValue.kind !== GridCellKind.Boolean)\n continue;\n let newVal = void 0;\n if (cellValue.kind === GridCellKind.Custom) {\n const toDelete = getCellRenderer(cellValue);\n const editor = (_a2 = toDelete == null ? void 0 : toDelete.provideEditor) == null ? void 0 : _a2.call(toDelete, cellValue);\n if ((toDelete == null ? void 0 : toDelete.onDelete) !== void 0) {\n newVal = toDelete.onDelete(cellValue);\n } else if (isObjectEditorCallbackResult(editor)) {\n newVal = (_b2 = editor == null ? void 0 : editor.deletedValue) == null ? void 0 : _b2.call(editor, cellValue);\n }\n } else if (isEditableGridCell(cellValue) && cellValue.allowOverlay || cellValue.kind === GridCellKind.Boolean) {\n const toDelete = getCellRenderer(cellValue);\n newVal = (_c2 = toDelete == null ? void 0 : toDelete.onDelete) == null ? void 0 : _c2.call(toDelete, cellValue);\n }\n if (newVal !== void 0 && !isInnerOnlyCell(newVal) && isEditableGridCell(newVal)) {\n editList.push({ location: [x, y], value: newVal });\n }\n }\n }\n mangledOnCellsEdited(editList);\n (_d2 = gridRef.current) == null ? void 0 : _d2.damage(editList.map((x) => ({ cell: x.location })));\n },\n [focus, getCellContent, getCellRenderer, mangledOnCellsEdited, rowMarkerOffset]\n );\n const onKeyDown = React35.useCallback(\n (event) => {\n const fn = async () => {\n var _a2, _b2, _c2, _d2, _e2;\n let cancelled = false;\n if (onKeyDownIn !== void 0) {\n onKeyDownIn({\n ...event,\n cancel: () => {\n cancelled = true;\n }\n });\n }\n if (cancelled)\n return;\n const cancel = () => {\n event.stopPropagation();\n event.preventDefault();\n };\n const overlayOpen = overlay !== void 0;\n const { altKey, shiftKey, metaKey, ctrlKey, key, bounds } = event;\n const isOSX = browserIsOSX.value;\n const isPrimaryKey = isOSX ? metaKey : ctrlKey;\n const isDeleteKey = key === \"Delete\" || isOSX && key === \"Backspace\";\n const vr = visibleRegionRef.current;\n const selectedColumns = gridSelection.columns;\n const selectedRows = gridSelection.rows;\n if (key === \"Escape\") {\n if (overlayOpen) {\n setOverlay(void 0);\n } else if (keybindings.clear) {\n setGridSelection(emptyGridSelection, false);\n onSelectionCleared == null ? void 0 : onSelectionCleared();\n }\n return;\n } else if (isHotkey(\"primary+a\", event) && keybindings.selectAll) {\n if (!overlayOpen) {\n setGridSelection(\n {\n columns: CompactSelection.empty(),\n rows: CompactSelection.empty(),\n current: {\n cell: (_b2 = (_a2 = gridSelection.current) == null ? void 0 : _a2.cell) != null ? _b2 : [rowMarkerOffset, 0],\n range: {\n x: rowMarkerOffset,\n y: 0,\n width: columnsIn.length,\n height: rows\n },\n rangeStack: []\n }\n },\n false\n );\n } else {\n const el = document.getElementById(overlayID);\n if (el !== null) {\n const s = window.getSelection();\n const r = document.createRange();\n r.selectNodeContents(el);\n s == null ? void 0 : s.removeAllRanges();\n s == null ? void 0 : s.addRange(r);\n }\n }\n cancel();\n return;\n } else if (isHotkey(\"primary+f\", event) && keybindings.search) {\n cancel();\n (_c2 = searchInputRef == null ? void 0 : searchInputRef.current) == null ? void 0 : _c2.focus({ preventScroll: true });\n setShowSearchInner(true);\n }\n if (isDeleteKey) {\n const callbackResult = (_d2 = onDelete == null ? void 0 : onDelete(gridSelection)) != null ? _d2 : true;\n cancel();\n if (callbackResult !== false) {\n const toDelete = callbackResult === true ? gridSelection : callbackResult;\n if (toDelete.current !== void 0) {\n deleteRange(toDelete.current.range);\n for (const r of toDelete.current.rangeStack) {\n deleteRange(r);\n }\n }\n for (const r of toDelete.rows) {\n deleteRange({\n x: rowMarkerOffset,\n y: r,\n width: mangledCols.length - rowMarkerOffset,\n height: 1\n });\n }\n for (const col2 of toDelete.columns) {\n deleteRange({\n x: col2,\n y: 0,\n width: 1,\n height: rows\n });\n }\n }\n return;\n }\n if (gridSelection.current === void 0)\n return;\n let [col, row] = gridSelection.current.cell;\n let freeMove = false;\n if (keybindings.selectColumn && isHotkey(\"ctrl+ \", event) && columnSelect !== \"none\") {\n if (selectedColumns.hasIndex(col)) {\n setSelectedColumns(selectedColumns.remove(col), void 0, true);\n } else {\n if (columnSelect === \"single\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(col), void 0, true);\n } else {\n setSelectedColumns(void 0, col, true);\n }\n }\n } else if (keybindings.selectRow && isHotkey(\"shift+ \", event) && rowSelect !== \"none\") {\n if (selectedRows.hasIndex(row)) {\n setSelectedRows(selectedRows.remove(row), void 0, true);\n } else {\n if (rowSelect === \"single\") {\n setSelectedRows(CompactSelection.fromSingleSelection(row), void 0, true);\n } else {\n setSelectedRows(void 0, row, true);\n }\n }\n } else if ((isHotkey(\"Enter\", event) || isHotkey(\" \", event) || isHotkey(\"shift+Enter\", event)) && bounds !== void 0) {\n if (overlayOpen) {\n setOverlay(void 0);\n if (isHotkey(\"Enter\", event)) {\n row++;\n } else if (isHotkey(\"shift+Enter\", event)) {\n row--;\n }\n } else if (row === rows && showTrailingBlankRow) {\n window.setTimeout(() => {\n const customTargetColumn = getCustomNewRowTargetColumn(col);\n void appendRow(customTargetColumn != null ? customTargetColumn : col);\n }, 0);\n } else {\n onCellActivated == null ? void 0 : onCellActivated([col - rowMarkerOffset, row]);\n reselect(bounds, true);\n cancel();\n }\n } else if (keybindings.downFill && isHotkey(\"primary+_68\", event) && gridSelection.current.range.height > 1) {\n fillDown(false);\n cancel();\n } else if (keybindings.rightFill && isHotkey(\"primary+_82\", event) && gridSelection.current.range.width > 1) {\n const editList = [];\n const r = gridSelection.current.range;\n for (let y = 0; y < r.height; y++) {\n const fillRow = y + r.y;\n const fillVal = getMangledCellContent([r.x, fillRow]);\n if (isInnerOnlyCell(fillVal) || !isReadWriteCell(fillVal))\n continue;\n for (let x = 1; x < r.width; x++) {\n const fillCol = x + r.x;\n const target = [fillCol, fillRow];\n editList.push({\n location: target,\n value: { ...fillVal }\n });\n }\n }\n mangledOnCellsEdited(editList);\n (_e2 = gridRef.current) == null ? void 0 : _e2.damage(\n editList.map((c) => ({\n cell: c.location\n }))\n );\n cancel();\n } else if (keybindings.pageDown && isHotkey(\"PageDown\", event)) {\n row += Math.max(1, visibleRegionRef.current.height - 4);\n cancel();\n } else if (keybindings.pageUp && isHotkey(\"PageUp\", event)) {\n row -= Math.max(1, visibleRegionRef.current.height - 4);\n cancel();\n } else if (keybindings.first && isHotkey(\"primary+Home\", event)) {\n setOverlay(void 0);\n row = 0;\n col = 0;\n } else if (keybindings.last && isHotkey(\"primary+End\", event)) {\n setOverlay(void 0);\n row = Number.MAX_SAFE_INTEGER;\n col = Number.MAX_SAFE_INTEGER;\n } else if (keybindings.first && isHotkey(\"primary+shift+Home\", event)) {\n setOverlay(void 0);\n adjustSelection([-2, -2]);\n } else if (keybindings.last && isHotkey(\"primary+shift+End\", event)) {\n setOverlay(void 0);\n adjustSelection([2, 2]);\n } else if (key === \"ArrowDown\") {\n if (ctrlKey && altKey) {\n return;\n }\n setOverlay(void 0);\n if (shiftKey && (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n adjustSelection([0, isPrimaryKey && !altKey ? 2 : 1]);\n } else {\n if (altKey && !isPrimaryKey) {\n freeMove = true;\n }\n if (isPrimaryKey && !altKey) {\n row = rows - 1;\n } else {\n row += 1;\n }\n }\n } else if (key === \"ArrowUp\" || key === \"Home\") {\n const asPrimary = key === \"Home\" || isPrimaryKey;\n setOverlay(void 0);\n if (shiftKey && (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n adjustSelection([0, asPrimary && !altKey ? -2 : -1]);\n } else {\n if (altKey && !asPrimary) {\n freeMove = true;\n }\n row += asPrimary && !altKey ? Number.MIN_SAFE_INTEGER : -1;\n }\n } else if (key === \"ArrowRight\" || key === \"End\") {\n const asPrimary = key === \"End\" || isPrimaryKey;\n setOverlay(void 0);\n if (shiftKey && (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n adjustSelection([asPrimary && !altKey ? 2 : 1, 0]);\n } else {\n if (altKey && !asPrimary) {\n freeMove = true;\n }\n col += asPrimary && !altKey ? Number.MAX_SAFE_INTEGER : 1;\n }\n } else if (key === \"ArrowLeft\") {\n setOverlay(void 0);\n if (shiftKey && (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n adjustSelection([isPrimaryKey && !altKey ? -2 : -1, 0]);\n } else {\n if (altKey && !isPrimaryKey) {\n freeMove = true;\n }\n col += isPrimaryKey && !altKey ? Number.MIN_SAFE_INTEGER : -1;\n }\n } else if (key === \"Tab\") {\n setOverlay(void 0);\n if (shiftKey) {\n col--;\n } else {\n col++;\n }\n } else if (!metaKey && !ctrlKey && gridSelection.current !== void 0 && key.length === 1 && /[ -~]/g.test(key) && bounds !== void 0 && isReadWriteCell(getCellContent([col - rowMarkerOffset, Math.max(0, Math.min(row, rows - 1))]))) {\n if ((!lastRowSticky || row !== rows) && (vr.y > row || row > vr.y + vr.height || vr.x > col || col > vr.x + vr.width)) {\n return;\n }\n reselect(bounds, true, key);\n cancel();\n }\n const moved = updateSelectedCell(col, row, false, freeMove);\n if (moved) {\n cancel();\n }\n };\n void fn();\n },\n [\n onKeyDownIn,\n deleteRange,\n overlay,\n gridSelection,\n keybindings.selectAll,\n keybindings.search,\n keybindings.selectColumn,\n keybindings.selectRow,\n keybindings.downFill,\n keybindings.rightFill,\n keybindings.pageDown,\n keybindings.pageUp,\n keybindings.first,\n keybindings.last,\n keybindings.clear,\n columnSelect,\n rowSelect,\n getCellContent,\n rowMarkerOffset,\n updateSelectedCell,\n setGridSelection,\n onSelectionCleared,\n columnsIn.length,\n rows,\n overlayID,\n mangledOnCellsEdited,\n onDelete,\n mangledCols.length,\n setSelectedColumns,\n setSelectedRows,\n showTrailingBlankRow,\n getCustomNewRowTargetColumn,\n appendRow,\n onCellActivated,\n reselect,\n fillDown,\n getMangledCellContent,\n adjustSelection,\n rangeSelect,\n lastRowSticky\n ]\n );\n const onContextMenu = React35.useCallback(\n (args, preventDefault) => {\n const adjustedCol = args.location[0] - rowMarkerOffset;\n if (args.kind === \"header\") {\n onHeaderContextMenu == null ? void 0 : onHeaderContextMenu(adjustedCol, { ...args, preventDefault });\n }\n if (args.kind === groupHeaderKind) {\n if (adjustedCol < 0) {\n return;\n }\n onGroupHeaderContextMenu == null ? void 0 : onGroupHeaderContextMenu(adjustedCol, { ...args, preventDefault });\n }\n if (args.kind === \"cell\") {\n const [col, row] = args.location;\n onCellContextMenu == null ? void 0 : onCellContextMenu([adjustedCol, row], {\n ...args,\n preventDefault\n });\n if (!gridSelectionHasItem(gridSelection, args.location)) {\n updateSelectedCell(col, row, false, false);\n }\n }\n },\n [\n gridSelection,\n onCellContextMenu,\n onGroupHeaderContextMenu,\n onHeaderContextMenu,\n rowMarkerOffset,\n updateSelectedCell\n ]\n );\n const onPasteInternal = React35.useCallback(\n async (e) => {\n var _a2, _b2, _c2, _d2, _e2, _f, _g;\n if (!keybindings.paste)\n return;\n function pasteToCell(inner, target2, rawValue, formatted) {\n var _a3, _b3, _c3, _d3;\n const stringifiedRawValue = typeof rawValue === \"object\" ? (_a3 = rawValue == null ? void 0 : rawValue.join(\"\\n\")) != null ? _a3 : \"\" : (_b3 = rawValue == null ? void 0 : rawValue.toString()) != null ? _b3 : \"\";\n if (!isInnerOnlyCell(inner) && isReadWriteCell(inner) && inner.readonly !== true) {\n const coerced = coercePasteValue == null ? void 0 : coercePasteValue(stringifiedRawValue, inner);\n if (coerced !== void 0 && isEditableGridCell(coerced)) {\n if (coerced.kind !== inner.kind) {\n console.warn(\"Coercion should not change cell kind.\");\n }\n return {\n location: target2,\n value: coerced\n };\n }\n const r = getCellRenderer(inner);\n if (r === void 0)\n return void 0;\n if (r.kind === GridCellKind.Custom) {\n assert(inner.kind === GridCellKind.Custom);\n const newVal = (_c3 = r.onPaste) == null ? void 0 : _c3.call(\n r,\n stringifiedRawValue,\n inner.data\n );\n if (newVal === void 0)\n return void 0;\n return {\n location: target2,\n value: {\n ...inner,\n data: newVal\n }\n };\n } else {\n const newVal = (_d3 = r.onPaste) == null ? void 0 : _d3.call(r, stringifiedRawValue, inner, {\n formatted,\n formattedString: typeof formatted === \"string\" ? formatted : formatted == null ? void 0 : formatted.join(\"\\n\"),\n rawValue\n });\n if (newVal === void 0)\n return void 0;\n assert(newVal.kind === inner.kind);\n return {\n location: target2,\n value: newVal\n };\n }\n }\n return void 0;\n }\n const selectedColumns = gridSelection.columns;\n const selectedRows = gridSelection.rows;\n const focused = ((_a2 = scrollRef.current) == null ? void 0 : _a2.contains(document.activeElement)) === true || ((_b2 = canvasRef.current) == null ? void 0 : _b2.contains(document.activeElement)) === true;\n let target = (_c2 = gridSelection.current) == null ? void 0 : _c2.cell;\n if (target === void 0 && selectedColumns.length === 1) {\n target = [(_d2 = selectedColumns.first()) != null ? _d2 : 0, 0];\n }\n if (target === void 0 && selectedRows.length === 1) {\n target = [rowMarkerOffset, (_e2 = selectedRows.first()) != null ? _e2 : 0];\n }\n if (focused && target !== void 0) {\n let data;\n let text;\n const textPlain = \"text/plain\";\n const textHtml = \"text/html\";\n if (navigator.clipboard.read !== void 0) {\n const clipboardContent = await navigator.clipboard.read();\n for (const item of clipboardContent) {\n if (item.types.includes(textHtml)) {\n const htmlBlob = await item.getType(textHtml);\n const html = await htmlBlob.text();\n const decoded = decodeHTML(html);\n if (decoded !== void 0) {\n data = decoded;\n break;\n }\n }\n if (item.types.includes(textPlain)) {\n text = await (await item.getType(textPlain)).text();\n }\n }\n } else if (navigator.clipboard.readText !== void 0) {\n text = await navigator.clipboard.readText();\n } else if (e !== void 0 && (e == null ? void 0 : e.clipboardData) !== null) {\n if (e.clipboardData.types.includes(textHtml)) {\n const html = e.clipboardData.getData(textHtml);\n data = decodeHTML(html);\n }\n if (data === void 0 && e.clipboardData.types.includes(textPlain)) {\n text = e.clipboardData.getData(textPlain);\n }\n } else {\n return;\n }\n const [gridCol, gridRow] = target;\n const editList = [];\n do {\n if (onPaste === void 0) {\n const cellData = getMangledCellContent(target);\n const rawValue = (_f = text != null ? text : data == null ? void 0 : data.map((r) => r.map((cb) => cb.rawValue).join(\"\t\")).join(\"\t\")) != null ? _f : \"\";\n const newVal = pasteToCell(cellData, target, rawValue, void 0);\n if (newVal !== void 0) {\n editList.push(newVal);\n }\n break;\n }\n if (data === void 0) {\n if (text === void 0)\n return;\n data = unquote(text);\n }\n if (onPaste === false || typeof onPaste === \"function\" && (onPaste == null ? void 0 : onPaste(\n [target[0] - rowMarkerOffset, target[1]],\n data.map((r) => r.map((cb) => {\n var _a3, _b3;\n return (_b3 = (_a3 = cb.rawValue) == null ? void 0 : _a3.toString()) != null ? _b3 : \"\";\n }))\n )) !== true) {\n return;\n }\n for (const [row, dataRow] of data.entries()) {\n if (row + gridRow >= rows)\n break;\n for (const [col, dataItem] of dataRow.entries()) {\n const index = [col + gridCol, row + gridRow];\n const [writeCol, writeRow] = index;\n if (writeCol >= mangledCols.length)\n continue;\n if (writeRow >= mangledRows)\n continue;\n const cellData = getMangledCellContent(index);\n const newVal = pasteToCell(cellData, index, dataItem.rawValue, dataItem.formatted);\n if (newVal !== void 0) {\n editList.push(newVal);\n }\n }\n }\n } while (false);\n mangledOnCellsEdited(editList);\n (_g = gridRef.current) == null ? void 0 : _g.damage(\n editList.map((c) => ({\n cell: c.location\n }))\n );\n }\n },\n [\n coercePasteValue,\n getCellRenderer,\n getMangledCellContent,\n gridSelection,\n keybindings.paste,\n mangledCols.length,\n mangledOnCellsEdited,\n mangledRows,\n onPaste,\n rowMarkerOffset,\n rows\n ]\n );\n useEventListener(\"paste\", onPasteInternal, window, false, true);\n const onCopy = React35.useCallback(\n async (e, ignoreFocus) => {\n var _a2, _b2;\n if (!keybindings.copy)\n return;\n const focused = ignoreFocus === true || ((_a2 = scrollRef.current) == null ? void 0 : _a2.contains(document.activeElement)) === true || ((_b2 = canvasRef.current) == null ? void 0 : _b2.contains(document.activeElement)) === true;\n const selectedColumns = gridSelection.columns;\n const selectedRows = gridSelection.rows;\n const copyToClipboardWithHeaders = (cells, columnIndexes) => {\n if (!copyHeaders) {\n copyToClipboard(cells, columnIndexes, e);\n } else {\n const headers = columnIndexes.map((index) => ({\n kind: GridCellKind.Text,\n data: columnsIn[index].title,\n displayData: columnsIn[index].title,\n allowOverlay: false\n }));\n copyToClipboard([headers, ...cells], columnIndexes, e);\n }\n };\n if (focused && getCellsForSelection !== void 0) {\n if (gridSelection.current !== void 0) {\n let thunk = getCellsForSelection(gridSelection.current.range, abortControllerRef.current.signal);\n if (typeof thunk !== \"object\") {\n thunk = await thunk();\n }\n copyToClipboardWithHeaders(\n thunk,\n range(\n gridSelection.current.range.x - rowMarkerOffset,\n gridSelection.current.range.x + gridSelection.current.range.width - rowMarkerOffset\n )\n );\n } else if (selectedRows !== void 0 && selectedRows.length > 0) {\n const toCopy = [...selectedRows];\n const cells = toCopy.map((rowIndex) => {\n const thunk = getCellsForSelection(\n {\n x: rowMarkerOffset,\n y: rowIndex,\n width: columnsIn.length,\n height: 1\n },\n abortControllerRef.current.signal\n );\n if (typeof thunk === \"object\") {\n return thunk[0];\n }\n return thunk().then((v) => v[0]);\n });\n if (cells.some((x) => x instanceof Promise)) {\n const settled = await Promise.all(cells);\n copyToClipboardWithHeaders(settled, range(columnsIn.length));\n } else {\n copyToClipboardWithHeaders(cells, range(columnsIn.length));\n }\n } else if (selectedColumns.length > 0) {\n const results = [];\n const cols = [];\n for (const col of selectedColumns) {\n let thunk = getCellsForSelection(\n {\n x: col,\n y: 0,\n width: 1,\n height: rows\n },\n abortControllerRef.current.signal\n );\n if (typeof thunk !== \"object\") {\n thunk = await thunk();\n }\n results.push(thunk);\n cols.push(col - rowMarkerOffset);\n }\n if (results.length === 1) {\n copyToClipboardWithHeaders(results[0], cols);\n } else {\n const toCopy = results.reduce((pv, cv) => pv.map((row, index) => [...row, ...cv[index]]));\n copyToClipboardWithHeaders(toCopy, cols);\n }\n }\n }\n },\n [columnsIn, getCellsForSelection, gridSelection, keybindings.copy, rowMarkerOffset, rows, copyHeaders]\n );\n useEventListener(\"copy\", onCopy, window, false, false);\n const onCut = React35.useCallback(\n async (e) => {\n var _a2, _b2;\n if (!keybindings.cut)\n return;\n const focused = ((_a2 = scrollRef.current) == null ? void 0 : _a2.contains(document.activeElement)) === true || ((_b2 = canvasRef.current) == null ? void 0 : _b2.contains(document.activeElement)) === true;\n if (!focused)\n return;\n await onCopy(e);\n if (gridSelection.current !== void 0) {\n deleteRange(gridSelection.current.range);\n }\n },\n [deleteRange, gridSelection, keybindings.cut, onCopy]\n );\n useEventListener(\"cut\", onCut, window, false, false);\n const onSearchResultsChanged = React35.useCallback(\n (results, navIndex) => {\n if (onSearchResultsChangedIn !== void 0) {\n if (rowMarkerOffset !== 0) {\n results = results.map((item) => [item[0] - rowMarkerOffset, item[1]]);\n }\n onSearchResultsChangedIn(results, navIndex);\n return;\n }\n if (results.length === 0 || navIndex === -1)\n return;\n const [col, row] = results[navIndex];\n if (lastSent.current !== void 0 && lastSent.current[0] === col && lastSent.current[1] === row) {\n return;\n }\n lastSent.current = [col, row];\n updateSelectedCell(col, row, false, false);\n },\n [onSearchResultsChangedIn, rowMarkerOffset, updateSelectedCell]\n );\n const [outCol, outRow] = (_e = (_d = gridSelectionOuter == null ? void 0 : gridSelectionOuter.current) == null ? void 0 : _d.cell) != null ? _e : [];\n const scrollToRef = React35.useRef(scrollTo);\n scrollToRef.current = scrollTo;\n React35.useLayoutEffect(() => {\n var _a2, _b2, _c2, _d2;\n if (!hasJustScrolled.current && outCol !== void 0 && outRow !== void 0 && (outCol !== ((_b2 = (_a2 = expectedExternalGridSelection.current) == null ? void 0 : _a2.current) == null ? void 0 : _b2.cell[0]) || outRow !== ((_d2 = (_c2 = expectedExternalGridSelection.current) == null ? void 0 : _c2.current) == null ? void 0 : _d2.cell[1]))) {\n scrollToRef.current(outCol, outRow);\n }\n hasJustScrolled.current = false;\n }, [outCol, outRow]);\n const selectionOutOfBounds = gridSelection.current !== void 0 && (gridSelection.current.cell[0] >= mangledCols.length || gridSelection.current.cell[1] >= mangledRows);\n React35.useLayoutEffect(() => {\n if (selectionOutOfBounds) {\n setGridSelection(emptyGridSelection, false);\n }\n }, [selectionOutOfBounds, setGridSelection]);\n const disabledRows = React35.useMemo(() => {\n if (showTrailingBlankRow === true && (trailingRowOptions == null ? void 0 : trailingRowOptions.tint) === true) {\n return CompactSelection.fromSingleSelection(mangledRows - 1);\n }\n return CompactSelection.empty();\n }, [mangledRows, showTrailingBlankRow, trailingRowOptions == null ? void 0 : trailingRowOptions.tint]);\n const mangledVerticalBorder = React35.useCallback(\n (col) => {\n var _a2;\n return typeof verticalBorder === \"boolean\" ? verticalBorder : (_a2 = verticalBorder == null ? void 0 : verticalBorder(col - rowMarkerOffset)) != null ? _a2 : true;\n },\n [rowMarkerOffset, verticalBorder]\n );\n const renameGroupNode = React35.useMemo(() => {\n if (renameGroup === void 0 || canvasRef.current === null)\n return null;\n const { bounds, group } = renameGroup;\n const canvasBounds = canvasRef.current.getBoundingClientRect();\n return /* @__PURE__ */ React35.createElement(\n GroupRename,\n {\n bounds,\n group,\n canvasBounds,\n onClose: () => setRenameGroup(void 0),\n onFinish: (newVal) => {\n setRenameGroup(void 0);\n onGroupHeaderRenamed == null ? void 0 : onGroupHeaderRenamed(group, newVal);\n }\n }\n );\n }, [onGroupHeaderRenamed, renameGroup]);\n const mangledFreezeColumns = Math.min(mangledCols.length, freezeColumns + (hasRowMarkers ? 1 : 0));\n React35.useImperativeHandle(\n forwardedRef,\n () => ({\n appendRow: (col, openOverlay) => appendRow(col + rowMarkerOffset, openOverlay),\n updateCells: (damageList) => {\n var _a2;\n if (rowMarkerOffset !== 0) {\n damageList = damageList.map((x) => ({ cell: [x.cell[0] + rowMarkerOffset, x.cell[1]] }));\n }\n return (_a2 = gridRef.current) == null ? void 0 : _a2.damage(damageList);\n },\n getBounds: (col, row) => {\n var _a2;\n if ((canvasRef == null ? void 0 : canvasRef.current) === null || (scrollRef == null ? void 0 : scrollRef.current) === null) {\n return void 0;\n }\n if (col === void 0 && row === void 0) {\n const rect = canvasRef.current.getBoundingClientRect();\n const scale = rect.width / scrollRef.current.clientWidth;\n return {\n x: rect.x - scrollRef.current.scrollLeft * scale,\n y: rect.y - scrollRef.current.scrollTop * scale,\n width: scrollRef.current.scrollWidth * scale,\n height: scrollRef.current.scrollHeight * scale\n };\n }\n return (_a2 = gridRef.current) == null ? void 0 : _a2.getBounds(col != null ? col : 0 + rowMarkerOffset, row);\n },\n focus: () => {\n var _a2;\n return (_a2 = gridRef.current) == null ? void 0 : _a2.focus();\n },\n emit: async (e) => {\n switch (e) {\n case \"delete\":\n onKeyDown({\n bounds: void 0,\n cancel: () => void 0,\n stopPropagation: () => void 0,\n preventDefault: () => void 0,\n ctrlKey: false,\n key: \"Delete\",\n keyCode: 46,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: void 0,\n location: void 0\n });\n break;\n case \"fill-right\":\n onKeyDown({\n bounds: void 0,\n cancel: () => void 0,\n stopPropagation: () => void 0,\n preventDefault: () => void 0,\n ctrlKey: true,\n key: \"r\",\n keyCode: 82,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: void 0,\n location: void 0\n });\n break;\n case \"fill-down\":\n onKeyDown({\n bounds: void 0,\n cancel: () => void 0,\n stopPropagation: () => void 0,\n preventDefault: () => void 0,\n ctrlKey: true,\n key: \"d\",\n keyCode: 68,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: void 0,\n location: void 0\n });\n break;\n case \"copy\":\n await onCopy(void 0, true);\n break;\n case \"paste\":\n await onPasteInternal();\n break;\n }\n },\n scrollTo,\n remeasureColumns: (cols) => {\n for (const col of cols) {\n void normalSizeColumn(col + rowMarkerOffset, true);\n }\n }\n }),\n [appendRow, normalSizeColumn, onCopy, onKeyDown, onPasteInternal, rowMarkerOffset, scrollTo]\n );\n const [selCol, selRow] = currentCell != null ? currentCell : [];\n const onCellFocused = React35.useCallback(\n (cell) => {\n const [col, row] = cell;\n if (row === -1) {\n if (columnSelect !== \"none\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(col), void 0, false);\n focus();\n }\n return;\n }\n if (selCol === col && selRow === row)\n return;\n setCurrent(\n {\n cell,\n range: { x: col, y: row, width: 1, height: 1 }\n },\n true,\n false,\n \"keyboard-nav\"\n );\n scrollTo(col, row);\n },\n [columnSelect, focus, scrollTo, selCol, selRow, setCurrent, setSelectedColumns]\n );\n const [isFocused, setIsFocused] = React35.useState(false);\n const setIsFocusedDebounced = React35.useRef(\n debounce2((val) => {\n setIsFocused(val);\n }, 5)\n );\n const onCanvasFocused = React35.useCallback(() => {\n setIsFocusedDebounced.current(true);\n if (gridSelection.current === void 0 && gridSelection.columns.length === 0 && gridSelection.rows.length === 0 && mouseState === void 0) {\n setCurrent(\n {\n cell: [rowMarkerOffset, cellYOffset],\n range: {\n x: rowMarkerOffset,\n y: cellYOffset,\n width: 1,\n height: 1\n }\n },\n true,\n false,\n \"keyboard-select\"\n );\n }\n }, [cellYOffset, gridSelection, mouseState, rowMarkerOffset, setCurrent]);\n const onFocusOut = React35.useCallback(() => {\n setIsFocusedDebounced.current(false);\n }, []);\n const [idealWidth, idealHeight] = React35.useMemo(() => {\n var _a2;\n let h;\n const scrollbarWidth = (_a2 = experimental == null ? void 0 : experimental.scrollbarWidthOverride) != null ? _a2 : getScrollBarWidth();\n const rowsCountWithTrailingRow = rows + (showTrailingBlankRow ? 1 : 0);\n if (typeof rowHeight === \"number\") {\n h = totalHeaderHeight + rowsCountWithTrailingRow * rowHeight;\n } else {\n let avg = 0;\n const toAverage = Math.min(rowsCountWithTrailingRow, 10);\n for (let i = 0; i < toAverage; i++) {\n avg += rowHeight(i);\n }\n avg = Math.floor(avg / toAverage);\n h = totalHeaderHeight + rowsCountWithTrailingRow * avg;\n }\n h += scrollbarWidth;\n const w = mangledCols.reduce((acc, x) => x.width + acc, 0) + scrollbarWidth;\n return [`${Math.min(1e5, w)}px`, `${Math.min(1e5, h)}px`];\n }, [mangledCols, experimental == null ? void 0 : experimental.scrollbarWidthOverride, rowHeight, rows, showTrailingBlankRow, totalHeaderHeight]);\n return /* @__PURE__ */ React35.createElement(ThemeContext.Provider, { value: mergedTheme }, /* @__PURE__ */ React35.createElement(\n DataEditorContainer,\n {\n style: makeCSSStyle(mergedTheme),\n className,\n inWidth: width != null ? width : idealWidth,\n inHeight: height != null ? height : idealHeight\n },\n /* @__PURE__ */ React35.createElement(\n data_grid_search_default,\n {\n fillHandle,\n drawFocusRing: drawFocusRing2,\n experimental,\n fixedShadowX,\n fixedShadowY,\n getRowThemeOverride,\n headerIcons,\n imageWindowLoader,\n initialSize,\n isDraggable,\n onDragLeave,\n onRowMoved,\n overscrollX,\n overscrollY,\n preventDiagonalScrolling,\n rightElement,\n rightElementProps,\n showMinimap,\n smoothScrollX,\n smoothScrollY,\n className,\n enableGroups,\n onCanvasFocused,\n onCanvasBlur: onFocusOut,\n canvasRef,\n onContextMenu,\n theme: mergedTheme,\n cellXOffset,\n cellYOffset,\n accessibilityHeight: visibleRegion.height,\n onDragEnd,\n columns: mangledCols,\n drawCustomCell: drawCell2,\n drawHeader: drawHeader2,\n disabledRows,\n freezeColumns: mangledFreezeColumns,\n lockColumns: rowMarkerOffset,\n firstColAccessible: rowMarkerOffset === 0,\n getCellContent: getMangledCellContent,\n minColumnWidth,\n maxColumnWidth,\n searchInputRef,\n showSearch,\n onSearchClose,\n highlightRegions,\n getCellsForSelection,\n getGroupDetails: mangledGetGroupDetails,\n headerHeight,\n isFocused,\n groupHeaderHeight: enableGroups ? groupHeaderHeight : 0,\n trailingRowType: !showTrailingBlankRow ? \"none\" : (trailingRowOptions == null ? void 0 : trailingRowOptions.sticky) === true ? \"sticky\" : \"appended\",\n onColumnResize,\n onColumnResizeEnd,\n onColumnResizeStart,\n onCellFocused,\n onColumnMoved: onColumnMovedImpl,\n onDragStart: onDragStartImpl,\n onHeaderMenuClick: onHeaderMenuClickInner,\n onItemHovered: onItemHoveredImpl,\n isFilling: (mouseState == null ? void 0 : mouseState.fillHandle) === true,\n onMouseMove: onMouseMoveImpl,\n onKeyDown,\n onKeyUp: onKeyUpIn,\n onMouseDown,\n onMouseUp,\n onDragOverCell,\n onDrop,\n onSearchResultsChanged,\n onVisibleRegionChanged: onVisibleRegionChangedImpl,\n clientSize: [clientSize[0], clientSize[1]],\n rowHeight,\n searchResults,\n searchValue,\n onSearchValueChange,\n rows: mangledRows,\n scrollRef,\n selection: gridSelection,\n translateX: visibleRegion.tx,\n translateY: visibleRegion.ty,\n verticalBorder: mangledVerticalBorder,\n gridRef,\n getCellRenderer,\n scrollToEnd\n }\n ),\n renameGroupNode,\n overlay !== void 0 && /* @__PURE__ */ React35.createElement(\n data_grid_overlay_editor_default,\n {\n ...overlay,\n validateCell,\n id: overlayID,\n getCellRenderer,\n className: (experimental == null ? void 0 : experimental.isSubGrid) === true ? \"click-outside-ignore\" : void 0,\n provideEditor,\n imageEditorOverride,\n onFinishEditing,\n markdownDivCreateNode,\n isOutsideClick\n }\n )\n ));\n};\nvar DataEditor = React35.forwardRef(DataEditorImpl);\n\n// src/data-editor/use-custom-cells.ts\nimport * as React36 from \"react\";\nfunction inflate(input) {\n return {\n ...input,\n kind: GridCellKind.Custom\n };\n}\nfunction useCustomCells(cells) {\n return { customRenderers: React36.useMemo(() => cells.map(inflate), [cells]) };\n}\nexport {\n BooleanEmpty,\n BooleanIndeterminate,\n CompactSelection,\n DataEditor,\n GridCellKind,\n GridColumnIcon,\n ImageOverlayEditor,\n InnerGridCellKind,\n MarkdownDiv,\n GrowingEntry as TextCellEntry,\n blend,\n booleanCellIsEditable,\n DataEditor as default,\n drawTextCellExternal as drawTextCell,\n getDataEditorTheme as getDefaultTheme,\n getMiddleCenterBias,\n gridSelectionHasItem,\n groupHeaderKind,\n headerCellCheckboxPrefix,\n headerCellCheckedMarker,\n headerCellIndeterminateMarker,\n headerCellUnheckedMarker,\n headerKind,\n interpolateColors,\n isEditableGridCell,\n isInnerOnlyCell,\n isObjectEditorCallbackResult,\n isReadWriteCell,\n isSizedGridColumn,\n isTextEditableGridCell,\n measureTextCached,\n outOfBoundsKind,\n parseToRgba,\n resolveCellsThunk,\n useColumnSizer,\n useCustomCells,\n useTheme,\n withAlpha\n};\n//# sourceMappingURL=index.js.map\n"],"names":["panic","message","Error","assert","fact","assertNever","_never","msg","has","Object","prototype","hasOwnProperty","deepEqual","foo","bar","ctor","len","constructor","Date","getTime","RegExp","toString","Array","length","call","keys","ClickOutsideContainer","React","PureComponent","super","arguments","this","wrapperRef","createRef","clickOutside","event","props","isOutsideClick","current","contains","target","node","classList","parentElement","onClickOutside","componentDidMount","document","addEventListener","componentWillUnmount","removeEventListener","render","rest","createElement","ref","children","makeCSSStyle","theme","_a","_b","accentColor","accentFg","accentLight","textDark","textMedium","textLight","textBubble","bgIconHeader","fgIconHeader","textHeader","textGroupHeader","textHeaderSelected","bgCell","bgCellMedium","bgHeader","bgHeaderHasFocus","bgHeaderHovered","bgBubble","bgBubbleSelected","bgSearchResult","borderColor","horizontalBorderColor","drilldownBorder","linkColor","cellHorizontalPadding","cellVerticalPadding","headerFontStyle","baseFontStyle","markerFontStyle","fontFamily","editorFontSize","dataEditorBaseTheme","headerIconSize","lineHeight","getDataEditorTheme","ThemeContext","React2","createContext","gridSelectionHasItem","sel","item","col","row","columns","hasIndex","rows","cell","toCheck","range","rangeStack","r","x","width","y","height","BooleanEmpty","BooleanIndeterminate","headerKind","groupHeaderKind","outOfBoundsKind","GridCellKind","GridCellKind2","headerCellCheckboxPrefix","headerCellCheckedMarker","headerCellUnheckedMarker","headerCellIndeterminateMarker","isSizedGridColumn","c","async","resolveCellsThunk","thunk","isEditableGridCell","kind","isInnerOnlyCell","isReadWriteCell","readonly","isObjectEditorCallbackResult","obj","has2","booleanCellIsEditable","emptyCompactSelection","InnerGridCellKind","InnerGridCellKind2","_CompactSelection","items","offset","amount","newItems","map","add","selection","slice","input","ranges","stack","sort","a","b","push","range2","top","mergeRanges","remove","selMin","selMax","i","entries","start","end","toAdd","splice","first","last","index","hasAll","some","predicate","equals","other","left","right","toArray","result","Symbol","iterator","empty","fromSingleSelection","CompactSelection","DataGridOverlayEditorStyle","styled_default","name","class","propsAsIs","vars","p","targetY","targetX","targetWidth","targetHeight","Math","max","data_grid_overlay_editor_default","content","onFinishEditing","onFinishEditingIn","forceEditMode","initialValue","imageEditorOverride","markdownDivCreateNode","highlight","className","id","validateCell","getCellRenderer","provideEditor","tempValue","setTempValueRaw","React4","useState","lastValueRef","useRef","isValid","setIsValid","useCallback","newCell","movement","setTempValue","newVal","validResult","finished","customMotion","onEditorFinished","newValue","onKeyDown","save","key","stopPropagation","preventDefault","shiftKey","window","setTimeout","targetValue","editorProvider","useLabel","useMemo","external","style","stayOnScreenStyle","setRef","refState","setRefState","React3","useRefState","xOffset","setXOffset","isIntersecting","setIsIntersecting","useLayoutEffect","observer","IntersectionObserver","ents","threshold","observe","disconnect","useEffect","rafHandle","fn","refRight","getBoundingClientRect","cv","min","innerWidth","requestAnimationFrame","cancelAnimationFrame","transform","useStayOnScreen","editor","styleOverride","pad","disablePadding","disableStyling","isObjectEditor","CustomEditor","isHighlighted","onChange","value","onFinishedEditing","validatedSelection","selectionRange","portalElement","getElementById","classWrap","createPortal","Provider","as","rowShift","imgPool","packColRowToNumber","unpackCol","packed","unpackRow","unpackNumberToColRow","image_window_loader_default","imageLoaded","loadedLocations","visibleWindow","freezeCols","isInWindow","w","cache","sendLoaded","throttle","clearOutOfWindow","keep","j","cells","filter","cancel","setCallback","setWindow","newWindow","loadImage","url","loaded","img","pop","Image","canceled","unshift","src","loadPromise","Promise","decode","toWrite","e","loadOrGetImage","includes","useEventListener","eventName","handler","element","passive","capture","savedHandler","React5","el","eventListener","whenDefined","PI","degreesToRadians","degrees","getSquareBB","posX","posY","squareSideLength","x1","y1","x2","y2","getSquareXPosFromAlign","alignment","containerX","containerWidth","horizontalPadding","squareWidth","floor","getSquareWidth","maxSize","containerHeight","verticalPadding","pointIsWithinBB","bb","EditPencil","fg","fgColor","viewBox","fill","xmlns","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","vectorEffect","Checkmark","rtlRange","ltrRange","rtl","ltr","direction","test","scrollbarWidthCache","getScrollBarWidth","inner","outer","position","visibility","overflow","append","body","w1","offsetWidth","w2","clientWidth","makeAccessibilityStringForArray","arr","count","str","join","isGroupEqual","cellIsInRect","location","rect","startX","endX","startY","endY","cellCol","cellRow","span","spanStart","spanEnd","remapForDnDState","dndState","mappedCols","writable","temp","dest","sticky","getStickyWidth","remapped","getEffectiveColumns","cellXOffset","tx","endIndex","curX","metricsSize","metricsCache","isSSR","measureTextCached","s","ctx","font","baseline","makeCacheKey","metrics","measureText","getMiddleCenterBias","biasCache","val","alphabeticMetrics","loadMetric","bias","actualBoundingBoxDescent","actualBoundingBoxAscent","getMiddleCenterBiasInner","textBaseline","restore","fonts","ready","clearCache","clearCacheOnLoad","prepTextCell","args","lastPrep","overrideColor","newFill","fillStyle","drawSingleTextLine","data","h","contentAlign","fillText","getEmHeight","fontStyle","textMetrics","drawTextCell","allowWrapping","hyperWrapping","split","isRtl","changed","textAlign","splitText","emHeight","actualHeight","mustClip","clip","optimalY","drawY","line","drawCheckbox","checked","highlighted","hoverX","hoverY","centerY","checkBoxWidth","checkBoxHalfWidth","hovered","beginPath","roundedRect","moveTo","lineTo","strokeStyle","lineJoin","lineCap","lineWidth","deprepMarkerRowCell","radius","tl","tr","br","bl","arcTo","drilldownCache","computeBounds","groupHeaderHeight","totalHeaderHeight","cellYOffset","translateX","translateY","freezeColumns","lastRowSticky","mappedColumns","rowHeight","headerHeight","dir","freezeWidth","group","stickyHeight","delta","iconHead","headerUri","bg","bgColor","sprites","headerRowID","headerNumber","headerCode","headerString","headerBoolean","headerAudioUri","headerVideoUri","headerEmoji","headerImage","headerPhone","headerMarkdown","headerDate","headerTime","headerEmail","headerReference","headerIfThenElse","headerSingleValue","headerLookup","headerTextTemplate","headerMath","headerRollup","headerJoinStrings","headerSplitString","headerGeoDistance","headerArray","rowOwnerOverlay","protectedColumnOverlay","renameIcon","SpriteManager","headerIcons","onSettled","spriteMap","Map","inFlight","drawSprite","sprite","variant","size","alpha","getColors","rSize","ceil","devicePixelRatio","spriteCanvas","get","spriteCb","spriteCtx","getContext","imgSource","encodeURIComponent","set","promise","then","drawImage","finally","globalAlpha","div","parseToRgba","color","normalizedColor","toLowerCase","trim","opacity","pointerEvents","createDiv","control","getComputedStyle","computedColor","replace","Number","parseFloat","isNaN","withAlpha","g","blend","background","ba","ao","loadingCell","Loading","allowOverlay","drawCell","drawCustomCell","imageLoader","spriteManager","hoverAmount","hoverInfo","frameTime","enqueue","forceAnim","needsAnim","lastUpdate","draw","progress","MAX_SAFE_INTEGER","fade","fillRect","drawWithLastUpdate","lastUpdated","renderer","deprep","partialPrepResult","drawPrep","drawGridLines","effectiveCols","drawRegions","spans","getRowHeight","getRowThemeOverride","verticalBorder","trailingRowType","verticalOnly","_c","hColor","vColor","minX","maxX","minY","maxY","MIN_SAFE_INTEGER","toDraw","stickyRowY","ty","abs","rowTheme","groups","groupBy","getActionBoundsForGroup","box","actions","pointInRect","getHeaderMenuBounds","menuButtonSize","drawHeader","selected","isHovered","hasSelectedCell","drawHeaderCallback","touchMode","isCheckboxHeader","title","startsWith","menuBounds","passCol","column","columnIndex","sourceIndex","isSelected","xPad","shouldDrawMenu","hasMenu","dirScalar","drawX","icon","headerSize","overlayIcon","fadeWidth","fadeStartPercent","fadeEndPercent","grad","createLinearGradient","trans","addColorStop","triangleX","triangleY","points","asVec","pp","vx","vy","vlen","sqrt","vnx","vny","nx","ny","ang","atan2","p1","p2","p3","v1","v2","sinA","sinA90","angle","asin","radDirection","drawDirection","halfAngle","cRadius","lenOut","cos","sin","arc","closePath","roundedPoly","intersectRect","h1","h2","clipDamage","effectiveColumns","damage","includeCells","stickyRowHeight","walkGroups","_group","walkColumns","colDrawY","clipX","startRow","diff","finalX","finalWidth","walkRowsInCol","rh","isSticky","isDamaged","getSpanBounds","cellX","cellY","cellW","cellH","allColumns","startCol","endCol","frozenRect","contentRect","firstNonSticky","find","renderFromCol","tempX","tempW","renderToCol","drawCells","getCellContent","getGroupDetails","disabledRows","isFocused","drawFocus","prelightCells","highlightRegions","hoverValues","outerTheme","performance","now","handledSpans","Set","colDrawStartY","_a2","colDrawX","colWidth","colHeight","found","dr","reclip","colSelected","groupTheme","overrideTheme","colTheme","themeOverride","colFont","prepResult","isTrailingRow","_a3","_d","rowSelected","rowDisabled","cellWidth","drawingSpan","skipContents","spanKey","areas","area","trailingTheme","trailingRowOptions","cellIndex","cellIsSelected","accentCount","cellIsInRange","spanIsHighlighted","Protected","pre","region","hoverValue","hv","cellFont","drawFocusRing","selectedCell","fillHandle","targetCol","targetRow","targetColSpan","stickRowHeight","drawCb","drawGrid","arg","lastArg","canvas","headerCanvas","enableGroups","dragAndDropState","isResizing","lastBlitData","scrolling","renderStrategy","bufferA","bufferB","doubleBuffer","dpr","canBlit","resized","curCol","lastCol","curRest","lastWidth","lastRest","computeCanBlit","overlayCanvas","overlayHeight","mainCtx","overlayCtx","targetBuffer","lastBuffer","targetCtx","blitSource","scale","mustDrawFocusOnHeader","drawHeaderTexture","_b2","hCol","hRow","_y","f","noHover","hoveredBoolean","hover","bgFillStyle","_hoverValues","groupName","fillColor","actionBoxes","fadeStartX","mouseX","mouseY","action","actionHovered","drawGroups","drawGridHeaders","headerBottomBorderColor","doHeaders","regions","blittedYOnly","imageSmoothingEnabled","deltaY","deltaX","stickyWidth","yOnly","blitWidth","blitHeight","sx","sy","sw","sh","dx","dy","dw","dh","setTransform","blitLastFrame","resizedIndex","_drawY","blitResizedCol","drawFreezeBorder","overdrawStickyBoundaries","focusRedraw","highlightRedraw","allHighlightRegions","drawRects","_e","topLeftBounds","bottomRightBounds","freezeSectionRightBounds","unfreezeSectionleftBounds","dashed","setDashed","dash","setLineDash","strokeRect","clipped","drawHighlightRings","getRowTheme","selectedRows","blankTheme","drawBlanks","lastRowDrawn","__drawX","_clipX","_rh","getLastRow","cb","doSticky","doingSticky","boxWidth","localX","easeOutCubic","AnimationManager","callback","currentHoveredItem","leavingItems","areSameItems","addToLeavingItems","removeFromLeavingItems","leavingItem","cleanUpLeavingElements","shouldStep","hasLeavingItems","currentHoveredIsAnimating","getAnimatingItems","step","timestamp","lastAnimationTime","clamp","animating","setHovered","Lazy","lazy","browserIsFirefox","navigator","userAgent","browserIsSafari","browserIsOSX","platform","data_grid_default","React8","memo","forwardRef","forwardedRef","_f","_g","_h","accessibilityHeight","cellXOffsetReal","onHeaderMenuClick","isFilling","onCanvasFocused","onCanvasBlur","onContextMenu","fixedShadowX","fixedShadowY","drawFocusRing2","onMouseDown","onMouseUp","onMouseMoveRaw","onMouseMove","onItemHovered","firstColAccessible","onKeyUp","canvasRef","onDragStart","onDragEnd","eventTargetRef","isDragging","isDraggable","allowResize","onCellFocused","onDragOverCell","onDrop","onDragLeave","imageWindowLoader","smoothScrollX","smoothScrollY","experimental","imageWindowLoaderInternal","damageRegion","setScrolling","hoveredItemInfo","setHoveredItemInfo","hoveredOnEdge","setHoveredOnEdge","overlayRef","lastWasTouch","setLastWasTouch","lastWasTouchRef","lastArgsRef","lastDrawRef","scrollingStopRef","disableFirefoxRescaling","enableFirefoxRescaling","clearTimeout","React6","useMappedColumns","getBoundsForItem","getMouseArgsForPosition","ev","button","MouseEvent","getColumnIndexForX","hasGroups","lastRowHeight","effectiveRows","curY","getRowIndexForY","ctrlKey","metaKey","isTouch","pointerType","scrollEdge","horizontal","vertical","isEdge","isMaybeScrollbar","bounds","previousCol","localEventX","localEventY","isFillHandle","hoveredItem","enqueueRef","_item","hoverInfoRef","documentElement","overlay","round","damageInternal","locations","queue","React7","seq","drawRef","loop","hasItem","useAnimationQueue","overFill","setOverFill","headerHovered","groupHeaderHovered","cursorOverride","clickableInnerCellHovered","editableBoolHovered","NewRow","Marker","markerKind","Boolean","cursor","contain","display","lastSetCursor","groupHeaderActionForEvent","groupDesc","boxes","isOverHeaderMenu","clientX","clientY","header","headerBounds","downTime","downPosition","mouseDown","onMouseDownImpl","eventTarget","touches","bottom","onMouseUpImpl","isOutside","changedTouches","isLongTouch","cancelable","onClick","onAnimationFrame","values","animManagerValue","animationManager","am","Custom","needsHover","hoveredRef","isIndirect","newInfo","needsHoverPosition","notRowMarkerCol","sb","onKeyDownImpl","altKey","keyCode","rawEvent","onKeyUpImpl","refImpl","instance","dragMime","dragData","dragImage","dragImageX","dragImageY","prevented","setData","mime","payload","setDragImage","image","defaultPrevented","dataTransfer","effectAllowed","offscreen","boundsForDragTarget","activeDropTarget","rawCol","activeCol","activeRow","selectionRef","focusRef","focusElement","activeElement","focus","preventScroll","useImperativeHandle","getBounds","lastFocusedSubdomNode","accessibilityTree","factory","deps","state","setState","mountedRef","debouncedSetState","debounce","useDebouncedMemo","_c2","_d2","colOffset","fCol","fRow","visibleCols","visibleRows","makeRange","role","tabIndex","onFocus","focused","cellContent","onFocusCapture","_b3","copyData","getAccessibilityString","getRowData","stickyX","opacityX","clamp2","absoluteOffsetY","opacityY","stickyShadow","styleX","transition","boxShadow","styleY","Fragment","overlayStyle","onBlur","offsetColumnSize","clamp3","growOffset","data_grid_dnd_default","resizeColStartX","setResizeColStartX","React9","resizeCol","setResizeCol","dragCol","setDragCol","dropCol","setDropCol","dragColActive","setDragColActive","dragStartX","setDragStartX","dragRow","setDragRow","dropRow","setDropRow","dragRowActive","setDragRowActive","dragStartY","setDragStartY","onColumnMoved","onColumnResize","onColumnResizeStart","onColumnResizeEnd","gridRef","maxColumnWidth","minColumnWidth","onRowMoved","lockColumns","canResize","selectedColumns","onItemHoveredImpl","canDragCol","onHeaderMenuClickMangled","screenPosition","lastResizeWidthRef","clearAll","newSize","ns","dragOffset","newWidth","getMangledCellContent","forceStrict","onDragStartImpl","ScrollRegionStyle","isSafari","InfiniteScroller","clientHeight","scrollHeight","scrollWidth","update","draggable","preventDiagonalScrolling","paddingBottom","paddingRight","rightElement","rightElementProps","scrollRef","scrollToEnd","initialSize","minimap","padders","rightElementSticky","rightElementFill","offsetY","React10","lastScrollY","scroller","scrollLeft","lastScrollPosition","scrollTop","lockDirection","rightWrapRef","hasTouches","setHasTouches","cbTimer","useTouchUpDelayed","isIdle","setIsIdle","idleTimer","lx","ly","onScroll","lastScrollTop","lastScrollLeft","lock","newY","scrollableHeight","prog","recomputed","onScrollRef","lastProps","didFirstScroll","setRefs","useRef6","setSize","useState6","useLayoutEffect4","resizeObserver","ResizeObserver","entry","useResizeDetector","maxHeight","paddingLeft","marginBottom","marginRight","flexGrow","MinimapStyle","scrolling_data_grid_default","clientSize","onVisibleRegionChanged","overscrollX","overscrollY","showMinimap","React11","lastX","lastY","lastSize","lastArgs","processArgs","cellRight","stickyColWidth","cx","cellBottom","cy","oldRect","onScrollUpdate","aspect","clamp4","hRatio","vRatio","vWidth","vHeight","handleMouse","currentTarget","newScrollLeft","newScrollTop","scrollTo","behavior","type","buttons","borderRadius","SearchWrapper","showSearch","upArrow","React12","downArrow","closeX","data_grid_search_default","searchInputRef","searchValue","searchResults","searchResultsIn","onSearchValueChange","getCellsForSelection","onSearchResultsChanged","onSearchClose","searchID","random","searchStringInner","setSearchStringInner","searchString","setSearchString","searchStatus","setSearchStatus","searchStatusRef","rowsSearched","results","selectedIndex","abortControllerRef","AbortController","searchHandle","searchResultsInner","setSearchResultsInner","cancelSearch","abort","cellYOffsetRef","beginSearch","regex","searchStride","runningResult","tick","tStart","rowsLeft","signal","added","testString","Text","displayData","Uri","Markdown","Bubble","tEnd","tElapsed","scalar","onClose","onSearchChange","onNext","newIndex","onPrev","onSearchKeyDown","nativeEvent","code","searchbox","resultString","cancelEvent","progressStyle","onKeyDownCapture","disabled","htmlFor","RenameInput","GroupRename","canvasBounds","onFinish","setValue","React13","setSelectionRange","autoFocus","measureColumn","colIndex","selectedData","removeOutliers","sizes","measure","measureCell","average","reduce","biggest","final","useColumnSizer","abortController","rowsRef","React14","getCellsForSelectionRef","themeRef","memoMap","lastColumns","setSelectionData","getCells","every","computeRows","tailRows","computeArea","tailComputeArea","getResult","tailGetResult","toSet","totalWidth","totalGrow","distribute","grow","writeable","extra","remaining","di","weighted","isHotkey","hotkey","wantCtrl","wantShift","wantAlt","wantMeta","parseInt","checkKey","accel","escapeIfNeeded","withComma","formatHtmlTextContent","text","match","repeat","formatHtmlAttributeContent","attrText","restoreHtmlEntities","getCopyBufferContents","columnIndexes","copyBuffer","mappedIndex","formatted","rawValue","format","Drilldown","RowID","convertCellToBuffer","createBufferFromGridCells","textPlain","lines","createTextBuffer","textHtml","formatStr","ind","createHtmlBuffer","decodeHTML","html","fragment","innerHTML","tableEl","querySelector","walkEl","HTMLTableElement","nodeName","reverse","HTMLTableRowElement","HTMLTableCellElement","clone","cloneNode","para","isAppleNumbers","brs","querySelectorAll","replaceWith","attributeValue","getAttribute","formatValue","textContent","rawValues","descape","endsWith","unquote","State","State2","char","copyToClipboard","copyWithWriteText","clipboard","writeText","write","clipboardData","e2","ClipboardItem","Blob","copyWithWrite","copyWithClipboardData","toCss","Wrapper","innerHeight","DataEditorContainer","inWidth","inHeight","React17","toggleBoolean","booleanCellRenderer","canEdit","drawBoolean","onDelete","pointerX","pointerY","maxWidth","cellCenterY","checkBoxClicked","onPaste","toPaste","BubblesOverlayEditorStyle","bubbles_overlay_editor_default","bubbles","React19","bubbleCellRenderer","t","acc","renderX","renderBoxes","textWidth","bubblePad","rectInfo","bubbleHeight","drawBubbles","DrilldownOverlayEditorStyle","drilldown_overlay_editor_default","drilldowns","React21","drilldownCellRenderer","tileMap","border","shadowBlur","middleWidth","sideWidth","rounding","padding","trueRounding","shadowColor","shadowOffsetY","getAndCacheDrilldownBorder","imgWidth","renderWidth","outerSideWidth","outerPadding","rx","rw","outerMiddleWidth","imgSize","srcX","srcY","srcWidth","srcHeight","drawDrilldownCell","ImageOverlayEditorStyle","ImageOverlayEditor","urls","canWrite","onEditClick","renderImage","filtered","u","allowMove","React23","Carousel","showArrows","showThumbs","swipeable","emulateTouch","infiniteLoop","innerContent","imageCellRenderer","imgHeight","images","_ctx","ImageEditor","React24","allowAdd","onCancel","newImage","uris","URL","loadingCellRenderer","MarkdownContainer","MarkdownDiv","React25","targetElement","containerRefHook","renderMarkdownIntoDiv","contents","createNode","marked","childRange","createRange","selectNodeContents","deleteContents","newChild","childDoc","tags","getElementsByTagName","tag","rel","InputBox","ShadowBox","GrowingEntryStyle","globalInputID","GrowingEntry","placeholder","altNewline","inputRef","React26","useText","inputID","ta","onKeyDownInner","MarkdownOverlayEditorStyle","MarkdownOverlayEditor","targetRect","markdown","editMode","setEditMode","React27","addLeftPad","markdownCellRenderer","firstLine","React28","markerCellRenderer","newFont","drawHandle","checkedboxAlpha","offsetAmount","yOffset","drawMarkerRowCell","centerX","newRowCellRenderer","alwaysShowIcon","textX","px","py","finalLineSize","lineSize","xTranslate","padPlus","drawNewRowCell","hint","NumberOverlayEditor","React29","resolve","require","numberCellRenderer","Suspense","fallback","fixedDecimals","allowNegative","thousandSeparator","decimalSeparator","floatValue","details","newNumber","formattedString","protectedCellRenderer","xStart","center","q","rowIDCellRenderer","React30","textCellRenderer","l","React31","UriOverlayEditorStyle","uri_overlay_editor_default","uri","preview","React32","href","uriCellRenderer","React33","CellRenderers","idCounter","shiftSelection","keybindingDefaults","selectAll","selectRow","selectColumn","downFill","rightFill","pageUp","pageDown","clear","copy","paste","cut","search","loadingCell2","emptyGridSelection","DataEditor","React35","gridSelectionInner","setGridSelectionInner","setOverlay","mouseState","setMouseState","lastSent","rowMarkers","rowMarkerWidth","rowMarkerWidthRaw","columnsIn","onCellClicked","onCellActivated","coercePasteValue","drawHeaderIn","onHeaderClicked","spanRangeBehavior","onGroupHeaderClicked","onCellContextMenu","onHeaderContextMenu","getCellsForSelectionIn","onGroupHeaderContextMenu","onGroupHeaderRenamed","onCellEdited","onCellsEdited","onSearchResultsChangedIn","onKeyDownIn","onKeyUpIn","keybindings","keybindingsIn","onRowAppended","validateCellIn","highlightRegionsIn","drawCell2","rangeSelect","columnSelect","rowSelect","rangeSelectionBlending","columnSelectionBlending","rowSelectionBlending","onDeleteIn","copyHeaders","rowSelectionMode","rowMarkerStartIndex","rowMarkerTheme","onSearchCloseIn","onSelectionCleared","showSearchIn","gridSelection","gridSelectionOuter","onGridSelectionChange","minColumnWidthIn","maxColumnWidthIn","maxColumnAutoWidth","maxColumnAutoWidthIn","scrollOffsetX","scrollOffsetY","onColumnResizeIn","onColumnResizeEndIn","onColumnResizeStartIn","customRenderers","additionalRenderers","overscrollXIn","overscrollYIn","scaleToRem","rowHeightIn","headerHeightIn","groupHeaderHeightIn","themeIn","fontSizeStr","fontSize","remSize","React34","scaler","bt","n","useRemAdjuster","hasRowMarkers","rowMarkerOffset","showTrailingBlankRow","showSearchInner","setShowSearchInner","gridSelectionOuterMangled","getCellsForSeletionDirect","getCellsForSelectionDirectWhenValid","React16","getCellsForSelectionDirect","getCellsForSelectionMangled","newRect","useCellsForSelection","prevValue","expectedExternalGridSelection","setGridSelection","expand","origVal","isFilled","leftCells","rightCells","rCells","expandSelection","_","wg","drawHeader2","setCurrent","setSelectedRows","setSelectedColumns","rangeBehavior","columnBehavior","rowBehavior","React15","trigger","rangeMixable","allowColumnCoSelect","allowRowCoSelect","newRows","allowMixed","columnMixed","newCols","rowMixed","useSelectionBehavior","mergedTheme","setClientSize","isMatch","numSelectedRows","rowMarkerHeader","mangledCols","visibleRegionY","visibleRegionTy","visibleRegionRef","visibleRegionInput","hasJustScrolled","visibleRegion","setVisibleRegion","empty2","inputState","inputStateRef","forceRender","setStateOuter","nv","pv","onEmpty","useStateWithReactiveInput","vScrollReady","hScrollReady","immediate","mangledRows","mangledOnCellsEdited","mangledItems","mangledColsRef","_e2","_i","_j","isTrailing","maybeFirstColumnHint","addIcon","outerCol","strict","vr","isOutsideMainArea","extras","isOutsideFreezeArea","freezeRegion","mangledGetGroupDetails","setRenameGroup","setOverlaySimple","reselect","fromKeyboard","maybe","focusOnRowFromTrailingBlankRow","paddingX","paddingY","options","grid","trueCol","unit","trueRow","desiredX","desiredY","scrollX","scrollY","scrollBounds","frozenWidth","trailingRowHeight","sLeft","sRight","sTop","sBottom","minx","hAlign","miny","vAlign","focusCallback","getCellContentRef","appendRow","openOverlay","appendResult","backoff","doFocus","getCustomNewRowTargetColumn","customTargetColumn","targetColumn","maybeIndex","indexOf","lastSelectedRowRef","lastSelectedColRef","themeForCell","pos","handleSelect","isMultiKey","isMultiRow","isMultiCol","lastMouseSelectLocation","markerCell","postClick","lastHighlighted","newSlice","onSelect","isLastStickyRow","startedFromLastSticky","isActivelyDraggingHeader","touchDownArgs","mouseDownData","isPrevented","time","wasDoubleClick","fh","previousSelection","renameGroup","handleGroupHeaderSelection","needle","fillDown","v","fillCol","fillVal","normalSizeColumn","force","inputCol","newCol","scrollDir","setScrollDir","mouse","lastMouseDownCol","lastMouseDownRow","handleMaybeClick","_c3","isValidClick","selectedCol","selectedRow","prevCol","prevRow","clickLocation","touchVr","onMouseMoveImpl","scrollDirection","speedScalar","React18","xDir","yDir","lastTime","scrollFn","curTime","motion","scrollBy","useAutoscroll","onHeaderMenuClickInner","currentCell","onVisibleRegionChangedImpl","rightElWidth","newRegion","onColumnMovedImpl","startIndex","isActivelyDragging","newRange","adjustSelection","direction2","old","disallowed","uniq","flatten","getSpanStops","done","updateSelectedCell","fromEditingTrailingRow","freeMove","rowMax","clamp5","newStack","movX","movY","isEditingTrailingRow","overlayID","deleteRange","editList","cellValue","toDelete","deletedValue","cancelled","overlayOpen","isOSX","isPrimaryKey","isDeleteKey","getSelection","removeAllRanges","addRange","callbackResult","col2","fillRow","asPrimary","adjustedCol","onPasteInternal","pasteToCell","target2","_d3","stringifiedRawValue","coerced","read","clipboardContent","types","htmlBlob","getType","decoded","readText","getData","gridCol","gridRow","dataRow","dataItem","writeCol","writeRow","onCopy","ignoreFocus","copyToClipboardWithHeaders","rowIndex","all","cols","navIndex","outCol","outRow","scrollToRef","selectionOutOfBounds","tint","mangledVerticalBorder","renameGroupNode","mangledFreezeColumns","updateCells","damageList","emit","remeasureColumns","selCol","selRow","setIsFocused","setIsFocusedDebounced","debounce2","onFocusOut","idealWidth","idealHeight","scrollbarWidth","scrollbarWidthOverride","rowsCountWithTrailingRow","avg","toAverage","isSubGrid","inflate","leftColor","rightColor","hScaler","nScaler","React36","useContext"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../../node_modules/@glideapps/glide-data-grid/dist/js/index.js"],"sourcesContent":["import {\n styled_default\n} from \"./chunk-XFANKXD6.js\";\n\n// src/data-editor/data-editor.tsx\nimport * as React35 from \"react\";\n\n// src/common/support.ts\nfunction proveType(_val) {\n}\nfunction panic(message = \"This should not happen\") {\n throw new Error(message);\n}\nfunction assert(fact, message = \"Assertion failed\") {\n if (fact)\n return;\n return panic(message);\n}\nfunction assertNever(_never, msg) {\n return panic(msg != null ? msg : \"Hell froze over\");\n}\nfunction maybe(fn, defaultValue) {\n try {\n return fn();\n } catch (e) {\n return defaultValue;\n }\n}\nvar has = Object.prototype.hasOwnProperty;\nfunction deepEqual(foo, bar) {\n let ctor, len;\n if (foo === bar)\n return true;\n if (foo && bar && (ctor = foo.constructor) === bar.constructor) {\n if (ctor === Date)\n return foo.getTime() === bar.getTime();\n if (ctor === RegExp)\n return foo.toString() === bar.toString();\n if (ctor === Array) {\n if ((len = foo.length) === bar.length) {\n while (len-- && deepEqual(foo[len], bar[len]))\n ;\n }\n return len === -1;\n }\n if (!ctor || typeof foo === \"object\") {\n len = 0;\n for (ctor in foo) {\n if (has.call(foo, ctor) && ++len && !has.call(bar, ctor))\n return false;\n if (!(ctor in bar) || !deepEqual(foo[ctor], bar[ctor]))\n return false;\n }\n return Object.keys(bar).length === len;\n }\n }\n return foo !== foo && bar !== bar;\n}\n\n// src/data-editor/data-editor.tsx\nimport clamp5 from \"lodash/clamp.js\";\nimport uniq from \"lodash/uniq.js\";\nimport flatten from \"lodash/flatten.js\";\nimport range from \"lodash/range.js\";\nimport debounce2 from \"lodash/debounce.js\";\n\n// src/data-grid-overlay-editor/data-grid-overlay-editor.tsx\nimport * as React4 from \"react\";\nimport { createPortal } from \"react-dom\";\n\n// src/click-outside-container/click-outside-container.tsx\nimport * as React from \"react\";\nvar ClickOutsideContainer = class extends React.PureComponent {\n constructor() {\n super(...arguments);\n this.wrapperRef = React.createRef();\n this.clickOutside = (event) => {\n if (this.props.isOutsideClick && !this.props.isOutsideClick(event)) {\n return;\n }\n if (this.wrapperRef.current !== null && !this.wrapperRef.current.contains(event.target)) {\n let node = event.target;\n while (node !== null) {\n if (node.classList.contains(\"click-outside-ignore\")) {\n return;\n }\n node = node.parentElement;\n }\n this.props.onClickOutside();\n }\n };\n }\n componentDidMount() {\n document.addEventListener(\"touchend\", this.clickOutside, true);\n document.addEventListener(\"mousedown\", this.clickOutside, true);\n document.addEventListener(\"contextmenu\", this.clickOutside, true);\n }\n componentWillUnmount() {\n document.removeEventListener(\"touchend\", this.clickOutside, true);\n document.removeEventListener(\"mousedown\", this.clickOutside, true);\n document.removeEventListener(\"contextmenu\", this.clickOutside, true);\n }\n render() {\n const { onClickOutside, isOutsideClick, ...rest } = this.props;\n return /* @__PURE__ */ React.createElement(\"div\", { ...rest, ref: this.wrapperRef }, this.props.children);\n }\n};\n\n// src/common/styles.ts\nimport React2 from \"react\";\nfunction makeCSSStyle(theme) {\n var _a, _b;\n return {\n \"--gdg-accent-color\": theme.accentColor,\n \"--gdg-accent-fg\": theme.accentFg,\n \"--gdg-accent-light\": theme.accentLight,\n \"--gdg-text-dark\": theme.textDark,\n \"--gdg-text-medium\": theme.textMedium,\n \"--gdg-text-light\": theme.textLight,\n \"--gdg-text-bubble\": theme.textBubble,\n \"--gdg-bg-icon-header\": theme.bgIconHeader,\n \"--gdg-fg-icon-header\": theme.fgIconHeader,\n \"--gdg-text-header\": theme.textHeader,\n \"--gdg-text-group-header\": (_a = theme.textGroupHeader) != null ? _a : theme.textHeader,\n \"--gdg-text-header-selected\": theme.textHeaderSelected,\n \"--gdg-bg-cell\": theme.bgCell,\n \"--gdg-bg-cell-medium\": theme.bgCellMedium,\n \"--gdg-bg-header\": theme.bgHeader,\n \"--gdg-bg-header-has-focus\": theme.bgHeaderHasFocus,\n \"--gdg-bg-header-hovered\": theme.bgHeaderHovered,\n \"--gdg-bg-bubble\": theme.bgBubble,\n \"--gdg-bg-bubble-selected\": theme.bgBubbleSelected,\n \"--gdg-bg-search-result\": theme.bgSearchResult,\n \"--gdg-border-color\": theme.borderColor,\n \"--gdg-horizontal-border-color\": (_b = theme.horizontalBorderColor) != null ? _b : theme.borderColor,\n \"--gdg-drilldown-border\": theme.drilldownBorder,\n \"--gdg-link-color\": theme.linkColor,\n \"--gdg-cell-horizontal-padding\": `${theme.cellHorizontalPadding}px`,\n \"--gdg-cell-vertical-padding\": `${theme.cellVerticalPadding}px`,\n \"--gdg-header-font-style\": theme.headerFontStyle,\n \"--gdg-base-font-style\": theme.baseFontStyle,\n \"--gdg-marker-font-style\": theme.markerFontStyle,\n \"--gdg-font-family\": theme.fontFamily,\n \"--gdg-editor-font-size\": theme.editorFontSize\n };\n}\nvar dataEditorBaseTheme = {\n accentColor: \"#4F5DFF\",\n accentFg: \"#FFFFFF\",\n accentLight: \"rgba(62, 116, 253, 0.1)\",\n textDark: \"#313139\",\n textMedium: \"#737383\",\n textLight: \"#B2B2C0\",\n textBubble: \"#313139\",\n bgIconHeader: \"#737383\",\n fgIconHeader: \"#FFFFFF\",\n textHeader: \"#313139\",\n textGroupHeader: \"#313139BB\",\n textHeaderSelected: \"#FFFFFF\",\n bgCell: \"#FFFFFF\",\n bgCellMedium: \"#FAFAFB\",\n bgHeader: \"#F7F7F8\",\n bgHeaderHasFocus: \"#E9E9EB\",\n bgHeaderHovered: \"#EFEFF1\",\n bgBubble: \"#EDEDF3\",\n bgBubbleSelected: \"#FFFFFF\",\n bgSearchResult: \"#fff9e3\",\n borderColor: \"rgba(115, 116, 131, 0.16)\",\n drilldownBorder: \"rgba(0, 0, 0, 0)\",\n linkColor: \"#4F5DFF\",\n cellHorizontalPadding: 8,\n cellVerticalPadding: 3,\n headerIconSize: 18,\n headerFontStyle: \"600 13px\",\n baseFontStyle: \"13px\",\n markerFontStyle: \"9px\",\n fontFamily: \"Inter, Roboto, -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Ubuntu, noto, arial, sans-serif\",\n editorFontSize: \"13px\",\n lineHeight: 1.4\n //unitless scaler depends on your font\n};\nfunction getDataEditorTheme() {\n return dataEditorBaseTheme;\n}\nvar ThemeContext = React2.createContext(dataEditorBaseTheme);\nfunction useTheme() {\n return React2.useContext(ThemeContext);\n}\n\n// src/data-grid/data-grid-types.ts\nimport has2 from \"lodash/has.js\";\nfunction gridSelectionHasItem(sel, item) {\n const [col, row] = item;\n if (sel.columns.hasIndex(col) || sel.rows.hasIndex(row))\n return true;\n if (sel.current !== void 0) {\n if (sel.current.cell[0] === col && sel.current.cell[1] === row)\n return true;\n const toCheck = [sel.current.range, ...sel.current.rangeStack];\n for (const r of toCheck) {\n if (col >= r.x && col < r.x + r.width && row >= r.y && row < r.y + r.height)\n return true;\n }\n }\n return false;\n}\nvar BooleanEmpty = null;\nvar BooleanIndeterminate = void 0;\nvar headerKind = \"header\";\nvar groupHeaderKind = \"group-header\";\nvar outOfBoundsKind = \"out-of-bounds\";\nvar GridCellKind = /* @__PURE__ */ ((GridCellKind2) => {\n GridCellKind2[\"Uri\"] = \"uri\";\n GridCellKind2[\"Text\"] = \"text\";\n GridCellKind2[\"Image\"] = \"image\";\n GridCellKind2[\"RowID\"] = \"row-id\";\n GridCellKind2[\"Number\"] = \"number\";\n GridCellKind2[\"Bubble\"] = \"bubble\";\n GridCellKind2[\"Boolean\"] = \"boolean\";\n GridCellKind2[\"Loading\"] = \"loading\";\n GridCellKind2[\"Markdown\"] = \"markdown\";\n GridCellKind2[\"Drilldown\"] = \"drilldown\";\n GridCellKind2[\"Protected\"] = \"protected\";\n GridCellKind2[\"Custom\"] = \"custom\";\n return GridCellKind2;\n})(GridCellKind || {});\nvar GridColumnIcon = /* @__PURE__ */ ((GridColumnIcon2) => {\n GridColumnIcon2[\"HeaderRowID\"] = \"headerRowID\";\n GridColumnIcon2[\"HeaderCode\"] = \"headerCode\";\n GridColumnIcon2[\"HeaderNumber\"] = \"headerNumber\";\n GridColumnIcon2[\"HeaderString\"] = \"headerString\";\n GridColumnIcon2[\"HeaderBoolean\"] = \"headerBoolean\";\n GridColumnIcon2[\"HeaderAudioUri\"] = \"headerAudioUri\";\n GridColumnIcon2[\"HeaderVideoUri\"] = \"headerVideoUri\";\n GridColumnIcon2[\"HeaderEmoji\"] = \"headerEmoji\";\n GridColumnIcon2[\"HeaderImage\"] = \"headerImage\";\n GridColumnIcon2[\"HeaderUri\"] = \"headerUri\";\n GridColumnIcon2[\"HeaderPhone\"] = \"headerPhone\";\n GridColumnIcon2[\"HeaderMarkdown\"] = \"headerMarkdown\";\n GridColumnIcon2[\"HeaderDate\"] = \"headerDate\";\n GridColumnIcon2[\"HeaderTime\"] = \"headerTime\";\n GridColumnIcon2[\"HeaderEmail\"] = \"headerEmail\";\n GridColumnIcon2[\"HeaderReference\"] = \"headerReference\";\n GridColumnIcon2[\"HeaderIfThenElse\"] = \"headerIfThenElse\";\n GridColumnIcon2[\"HeaderSingleValue\"] = \"headerSingleValue\";\n GridColumnIcon2[\"HeaderLookup\"] = \"headerLookup\";\n GridColumnIcon2[\"HeaderTextTemplate\"] = \"headerTextTemplate\";\n GridColumnIcon2[\"HeaderMath\"] = \"headerMath\";\n GridColumnIcon2[\"HeaderRollup\"] = \"headerRollup\";\n GridColumnIcon2[\"HeaderJoinStrings\"] = \"headerJoinStrings\";\n GridColumnIcon2[\"HeaderSplitString\"] = \"headerSplitString\";\n GridColumnIcon2[\"HeaderGeoDistance\"] = \"headerGeoDistance\";\n GridColumnIcon2[\"HeaderArray\"] = \"headerArray\";\n GridColumnIcon2[\"RowOwnerOverlay\"] = \"rowOwnerOverlay\";\n GridColumnIcon2[\"ProtectedColumnOverlay\"] = \"protectedColumnOverlay\";\n return GridColumnIcon2;\n})(GridColumnIcon || {});\nvar headerCellCheckboxPrefix = \"___gdg_header_cell_\";\nvar headerCellCheckedMarker = headerCellCheckboxPrefix + \"checked\";\nvar headerCellUnheckedMarker = headerCellCheckboxPrefix + \"unchecked\";\nvar headerCellIndeterminateMarker = headerCellCheckboxPrefix + \"indeterminate\";\nfunction isSizedGridColumn(c) {\n return \"width\" in c && typeof c.width === \"number\";\n}\nasync function resolveCellsThunk(thunk) {\n if (typeof thunk === \"object\")\n return thunk;\n return await thunk();\n}\nfunction isEditableGridCell(cell) {\n if (cell.kind === \"loading\" || cell.kind === \"bubble\" || cell.kind === \"row-id\" || cell.kind === \"protected\" || cell.kind === \"drilldown\") {\n return false;\n }\n proveType(cell);\n return true;\n}\nfunction isTextEditableGridCell(cell) {\n if (cell.kind === \"loading\" || cell.kind === \"bubble\" || cell.kind === \"row-id\" || cell.kind === \"protected\" || cell.kind === \"drilldown\" || cell.kind === \"boolean\" || cell.kind === \"image\" || cell.kind === \"custom\") {\n return false;\n }\n proveType(cell);\n return true;\n}\nfunction isInnerOnlyCell(cell) {\n return cell.kind === \"marker\" || cell.kind === \"new-row\";\n}\nfunction isReadWriteCell(cell) {\n if (!isEditableGridCell(cell) || cell.kind === \"image\")\n return false;\n if (cell.kind === \"text\" || cell.kind === \"number\" || cell.kind === \"markdown\" || cell.kind === \"uri\" || cell.kind === \"custom\" || cell.kind === \"boolean\") {\n return cell.readonly !== true;\n }\n assertNever(cell, \"A cell was passed with an invalid kind\");\n}\nfunction isObjectEditorCallbackResult(obj) {\n return has2(obj, \"editor\");\n}\nfunction booleanCellIsEditable(cell) {\n var _a;\n return !((_a = cell.readonly) != null ? _a : false);\n}\nvar InnerGridCellKind = /* @__PURE__ */ ((InnerGridCellKind2) => {\n InnerGridCellKind2[\"NewRow\"] = \"new-row\";\n InnerGridCellKind2[\"Marker\"] = \"marker\";\n return InnerGridCellKind2;\n})(InnerGridCellKind || {});\nfunction mergeRanges(input) {\n if (input.length === 0) {\n return [];\n }\n const ranges = [...input];\n const stack = [];\n ranges.sort(function(a, b) {\n return a[0] - b[0];\n });\n stack.push([...ranges[0]]);\n for (const range2 of ranges.slice(1)) {\n const top = stack[stack.length - 1];\n if (top[1] < range2[0]) {\n stack.push([...range2]);\n } else if (top[1] < range2[1]) {\n top[1] = range2[1];\n }\n }\n return stack;\n}\nvar emptyCompactSelection;\nvar _CompactSelection = class _CompactSelection {\n constructor(items) {\n this.items = items;\n }\n offset(amount) {\n if (amount === 0)\n return this;\n const newItems = this.items.map((x) => [x[0] + amount, x[1] + amount]);\n return new _CompactSelection(newItems);\n }\n add(selection) {\n const slice = typeof selection === \"number\" ? [selection, selection + 1] : selection;\n const newItems = mergeRanges([...this.items, slice]);\n return new _CompactSelection(newItems);\n }\n remove(selection) {\n const items = [...this.items];\n const selMin = typeof selection === \"number\" ? selection : selection[0];\n const selMax = typeof selection === \"number\" ? selection + 1 : selection[1];\n for (const [i, slice] of items.entries()) {\n const [start, end] = slice;\n if (start <= selMax && selMin <= end) {\n const toAdd = [];\n if (start < selMin) {\n toAdd.push([start, selMin]);\n }\n if (selMax < end) {\n toAdd.push([selMax, end]);\n }\n items.splice(i, 1, ...toAdd);\n }\n }\n return new _CompactSelection(items);\n }\n first() {\n if (this.items.length === 0)\n return void 0;\n return this.items[0][0];\n }\n last() {\n if (this.items.length === 0)\n return void 0;\n return this.items.slice(-1)[0][1] - 1;\n }\n hasIndex(index) {\n for (let i = 0; i < this.items.length; i++) {\n const [start, end] = this.items[i];\n if (index >= start && index < end)\n return true;\n }\n return false;\n }\n hasAll(index) {\n for (let x = index[0]; x < index[1]; x++) {\n if (!this.hasIndex(x))\n return false;\n }\n return true;\n }\n some(predicate) {\n for (const i of this) {\n if (predicate(i))\n return true;\n }\n return false;\n }\n equals(other) {\n if (other === this)\n return true;\n if (other.items.length !== this.items.length)\n return false;\n for (let i = 0; i < this.items.length; i++) {\n const left = other.items[i];\n const right = this.items[i];\n if (left[0] !== right[0] || left[1] !== right[1])\n return false;\n }\n return true;\n }\n // Really old JS wont have access to the iterator and babel will stop people using it\n // when trying to support browsers so old we don't support them anyway. What goes on\n // between an engineer and their bundler in the privacy of their CI server is none of\n // my business anyway.\n toArray() {\n const result = [];\n for (const [start, end] of this.items) {\n for (let x = start; x < end; x++) {\n result.push(x);\n }\n }\n return result;\n }\n get length() {\n let len = 0;\n for (const [start, end] of this.items) {\n len += end - start;\n }\n return len;\n }\n *[Symbol.iterator]() {\n for (const [start, end] of this.items) {\n for (let x = start; x < end; x++) {\n yield x;\n }\n }\n }\n};\n_CompactSelection.empty = () => {\n return emptyCompactSelection != null ? emptyCompactSelection : emptyCompactSelection = new _CompactSelection([]);\n};\n_CompactSelection.fromSingleSelection = (selection) => {\n return _CompactSelection.empty().add(selection);\n};\nvar CompactSelection = _CompactSelection;\n\n// src/data-grid-overlay-editor/data-grid-overlay-editor-style.tsx\nvar _exp = () => (p) => p.targetY;\nvar _exp2 = () => (p) => p.targetX - 1;\nvar _exp3 = () => (p) => p.targetY - 1;\nvar _exp4 = () => (p) => p.targetWidth + 2;\nvar _exp5 = () => (p) => p.targetHeight + 2;\nvar _exp6 = () => (p) => p.targetY + 10;\nvar _exp7 = () => (p) => Math.max(0, (p.targetHeight - 28) / 2);\nvar DataGridOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"DataGridOverlayEditorStyle\",\n class: \"d1t1th9s\",\n propsAsIs: false,\n vars: {\n \"d1t1th9s-0\": [_exp(), \"px\"],\n \"d1t1th9s-1\": [_exp2(), \"px\"],\n \"d1t1th9s-2\": [_exp3(), \"px\"],\n \"d1t1th9s-3\": [_exp4(), \"px\"],\n \"d1t1th9s-4\": [_exp5(), \"px\"],\n \"d1t1th9s-5\": [_exp6(), \"px\"],\n \"d1t1th9s-6\": [_exp7(), \"px\"]\n }\n});\n\n// src/data-grid-overlay-editor/use-stay-on-screen.ts\nimport * as React3 from \"react\";\nfunction useRefState() {\n const [refState, setRefState] = React3.useState();\n return [refState != null ? refState : void 0, setRefState];\n}\nfunction useStayOnScreen() {\n const [ref, setRef] = useRefState();\n const [xOffset, setXOffset] = React3.useState(0);\n const [isIntersecting, setIsIntersecting] = React3.useState(true);\n React3.useLayoutEffect(() => {\n if (ref === void 0)\n return;\n if (!(\"IntersectionObserver\" in window))\n return;\n const observer = new IntersectionObserver(\n (ents) => {\n if (ents.length === 0)\n return;\n setIsIntersecting(ents[0].isIntersecting);\n },\n { threshold: 1 }\n );\n observer.observe(ref);\n return () => observer.disconnect();\n }, [ref]);\n React3.useEffect(() => {\n if (isIntersecting || ref === void 0)\n return;\n let rafHandle;\n const fn = () => {\n const { right: refRight } = ref.getBoundingClientRect();\n setXOffset((cv) => Math.min(cv + window.innerWidth - refRight - 10, 0));\n rafHandle = requestAnimationFrame(fn);\n };\n rafHandle = requestAnimationFrame(fn);\n return () => {\n if (rafHandle !== void 0) {\n cancelAnimationFrame(rafHandle);\n }\n };\n }, [ref, isIntersecting]);\n const style = React3.useMemo(() => {\n return { transform: `translateX(${xOffset}px)` };\n }, [xOffset]);\n return {\n ref: setRef,\n style\n };\n}\n\n// src/data-grid-overlay-editor/data-grid-overlay-editor.tsx\nvar DataGridOverlayEditor = (p) => {\n const {\n target,\n content,\n onFinishEditing: onFinishEditingIn,\n forceEditMode,\n initialValue,\n imageEditorOverride,\n markdownDivCreateNode,\n highlight,\n className,\n theme,\n id,\n cell,\n validateCell,\n getCellRenderer,\n provideEditor,\n isOutsideClick\n } = p;\n const [tempValue, setTempValueRaw] = React4.useState(forceEditMode ? content : void 0);\n const lastValueRef = React4.useRef(tempValue != null ? tempValue : content);\n lastValueRef.current = tempValue != null ? tempValue : content;\n const [isValid, setIsValid] = React4.useState(() => {\n if (validateCell === void 0)\n return true;\n return !(isEditableGridCell(content) && (validateCell == null ? void 0 : validateCell(cell, content, lastValueRef.current)) === false);\n });\n const onFinishEditing = React4.useCallback(\n (newCell, movement) => {\n onFinishEditingIn(isValid ? newCell : void 0, movement);\n },\n [isValid, onFinishEditingIn]\n );\n const setTempValue = React4.useCallback(\n (newVal) => {\n if (validateCell !== void 0 && newVal !== void 0 && isEditableGridCell(newVal)) {\n const validResult = validateCell(cell, newVal, lastValueRef.current);\n if (validResult === false) {\n setIsValid(false);\n } else if (typeof validResult === \"object\") {\n newVal = validResult;\n setIsValid(true);\n } else {\n setIsValid(true);\n }\n }\n setTempValueRaw(newVal);\n },\n [cell, validateCell]\n );\n const finished = React4.useRef(false);\n const customMotion = React4.useRef(void 0);\n const onClickOutside = React4.useCallback(() => {\n onFinishEditing(tempValue, [0, 0]);\n finished.current = true;\n }, [tempValue, onFinishEditing]);\n const onEditorFinished = React4.useCallback(\n (newValue, movement) => {\n var _a;\n onFinishEditing(newValue, (_a = movement != null ? movement : customMotion.current) != null ? _a : [0, 0]);\n finished.current = true;\n },\n [onFinishEditing]\n );\n const onKeyDown = React4.useCallback(\n async (event) => {\n let save = false;\n if (event.key === \"Escape\") {\n event.stopPropagation();\n event.preventDefault();\n customMotion.current = [0, 0];\n } else if (event.key === \"Enter\" && !event.shiftKey) {\n event.stopPropagation();\n event.preventDefault();\n customMotion.current = [0, 1];\n save = true;\n } else if (event.key === \"Tab\") {\n event.stopPropagation();\n event.preventDefault();\n customMotion.current = [event.shiftKey ? -1 : 1, 0];\n save = true;\n }\n window.setTimeout(() => {\n if (!finished.current && customMotion.current !== void 0) {\n onFinishEditing(save ? tempValue : void 0, customMotion.current);\n finished.current = true;\n }\n }, 0);\n },\n [onFinishEditing, tempValue]\n );\n const targetValue = tempValue != null ? tempValue : content;\n const [editorProvider, useLabel] = React4.useMemo(() => {\n var _a, _b;\n if (isInnerOnlyCell(content))\n return [];\n const external = provideEditor == null ? void 0 : provideEditor(content);\n if (external !== void 0)\n return [external, false];\n return [(_b = (_a = getCellRenderer(content)) == null ? void 0 : _a.provideEditor) == null ? void 0 : _b.call(_a, content), false];\n }, [content, getCellRenderer, provideEditor]);\n const { ref, style: stayOnScreenStyle } = useStayOnScreen();\n let pad = true;\n let editor;\n let style = true;\n let styleOverride;\n if (editorProvider !== void 0) {\n pad = editorProvider.disablePadding !== true;\n style = editorProvider.disableStyling !== true;\n const isObjectEditor = isObjectEditorCallbackResult(editorProvider);\n if (isObjectEditor) {\n styleOverride = editorProvider.styleOverride;\n }\n const CustomEditor = isObjectEditor ? editorProvider.editor : editorProvider;\n editor = /* @__PURE__ */ React4.createElement(\n CustomEditor,\n {\n isHighlighted: highlight,\n onChange: setTempValue,\n value: targetValue,\n initialValue,\n onFinishedEditing: onEditorFinished,\n validatedSelection: isEditableGridCell(targetValue) ? targetValue.selectionRange : void 0,\n forceEditMode,\n target,\n imageEditorOverride,\n markdownDivCreateNode,\n isValid\n }\n );\n }\n styleOverride = { ...styleOverride, ...stayOnScreenStyle };\n const portalElement = document.getElementById(\"portal\");\n if (portalElement === null) {\n console.error(\n 'Cannot open Data Grid overlay editor, because portal not found. Please add `<div id=\"portal\" />` as the last child of your `<body>`.'\n );\n return null;\n }\n let classWrap = style ? \"gdg-style\" : \"gdg-unstyle\";\n if (!isValid) {\n classWrap += \" invalid\";\n }\n if (pad) {\n classWrap += \" pad\";\n }\n return createPortal(\n /* @__PURE__ */ React4.createElement(ThemeContext.Provider, { value: theme }, /* @__PURE__ */ React4.createElement(\n ClickOutsideContainer,\n {\n style: makeCSSStyle(theme),\n className,\n onClickOutside,\n isOutsideClick\n },\n /* @__PURE__ */ React4.createElement(\n DataGridOverlayEditorStyle,\n {\n ref,\n id,\n className: classWrap,\n style: styleOverride,\n as: useLabel === true ? \"label\" : void 0,\n targetX: target.x,\n targetY: target.y,\n targetWidth: target.width,\n targetHeight: target.height\n },\n /* @__PURE__ */ React4.createElement(\"div\", { className: \"clip-region\", onKeyDown }, editor)\n )\n )),\n portalElement\n );\n};\nvar data_grid_overlay_editor_default = DataGridOverlayEditor;\n\n// src/data-grid-search/data-grid-search.tsx\nimport * as React12 from \"react\";\n\n// src/scrolling-data-grid/scrolling-data-grid.tsx\nimport * as React11 from \"react\";\n\n// src/data-grid-dnd/data-grid-dnd.tsx\nimport clamp3 from \"lodash/clamp.js\";\nimport * as React9 from \"react\";\n\n// src/data-grid/data-grid.tsx\nimport * as React8 from \"react\";\n\n// src/common/image-window-loader.ts\nimport throttle from \"lodash/throttle.js\";\nvar rowShift = 1 << 16;\nvar imgPool = [];\nfunction packColRowToNumber(col, row) {\n return row * rowShift + col;\n}\nfunction unpackCol(packed) {\n return packed % rowShift;\n}\nfunction unpackRow(packed, col) {\n return (packed - col) / rowShift;\n}\nfunction unpackNumberToColRow(packed) {\n const col = unpackCol(packed);\n const row = unpackRow(packed, col);\n return [col, row];\n}\nvar ImageWindowLoaderImpl = class {\n constructor() {\n this.imageLoaded = () => void 0;\n this.loadedLocations = [];\n this.visibleWindow = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n this.freezeCols = 0;\n this.isInWindow = (packed) => {\n const col = unpackCol(packed);\n const row = unpackRow(packed, col);\n const w = this.visibleWindow;\n if (col < this.freezeCols && row >= w.y && row <= w.y + w.height)\n return true;\n return col >= w.x && col <= w.x + w.width && row >= w.y && row <= w.y + w.height;\n };\n this.cache = {};\n // eslint-disable-next-line unicorn/consistent-function-scoping\n this.sendLoaded = throttle(() => {\n this.imageLoaded(this.loadedLocations);\n this.loadedLocations = [];\n }, 20);\n this.clearOutOfWindow = () => {\n const keys = Object.keys(this.cache);\n for (const key of keys) {\n const obj = this.cache[key];\n let keep = false;\n for (let j = 0; j < obj.cells.length; j++) {\n const packed = obj.cells[j];\n if (this.isInWindow(packed)) {\n keep = true;\n break;\n }\n }\n if (keep) {\n obj.cells = obj.cells.filter(this.isInWindow);\n } else {\n obj.cancel();\n delete this.cache[key];\n }\n }\n };\n }\n setCallback(imageLoaded) {\n this.imageLoaded = imageLoaded;\n }\n setWindow(newWindow, freezeCols) {\n if (this.visibleWindow.x === newWindow.x && this.visibleWindow.y === newWindow.y && this.visibleWindow.width === newWindow.width && this.visibleWindow.height === newWindow.height && this.freezeCols === freezeCols)\n return;\n this.visibleWindow = newWindow;\n this.freezeCols = freezeCols;\n this.clearOutOfWindow();\n }\n loadImage(url, col, row, key) {\n var _a;\n let loaded = false;\n const img = (_a = imgPool.pop()) != null ? _a : new Image();\n let canceled = false;\n const result = {\n img: void 0,\n cells: [packColRowToNumber(col, row)],\n url,\n cancel: () => {\n if (canceled)\n return;\n canceled = true;\n if (imgPool.length < 12) {\n imgPool.unshift(img);\n } else if (!loaded) {\n img.src = \"\";\n }\n }\n };\n const loadPromise = new Promise((r) => img.addEventListener(\"load\", () => r(null)));\n requestAnimationFrame(async () => {\n try {\n img.src = url;\n await loadPromise;\n await img.decode();\n const toWrite = this.cache[key];\n if (toWrite !== void 0 && !canceled) {\n toWrite.img = img;\n for (const packed of toWrite.cells) {\n this.loadedLocations.push(unpackNumberToColRow(packed));\n }\n loaded = true;\n this.sendLoaded();\n }\n } catch (e) {\n result.cancel();\n }\n });\n this.cache[key] = result;\n }\n loadOrGetImage(url, col, row) {\n const key = url;\n const current = this.cache[key];\n if (current !== void 0) {\n const packed = packColRowToNumber(col, row);\n if (!current.cells.includes(packed)) {\n current.cells.push(packed);\n }\n return current.img;\n } else {\n this.loadImage(url, col, row, key);\n }\n return void 0;\n }\n};\nvar image_window_loader_default = ImageWindowLoaderImpl;\n\n// src/common/utils.tsx\nimport * as React5 from \"react\";\nimport debounce from \"lodash/debounce.js\";\nfunction useEventListener(eventName, handler, element, passive, capture = false) {\n const savedHandler = React5.useRef();\n savedHandler.current = handler;\n React5.useEffect(\n () => {\n if (element === null || element.addEventListener === void 0)\n return;\n const el = element;\n const eventListener = (event) => {\n var _a;\n (_a = savedHandler.current) == null ? void 0 : _a.call(el, event);\n };\n el.addEventListener(eventName, eventListener, { passive, capture });\n return () => {\n el.removeEventListener(eventName, eventListener, { capture });\n };\n },\n [eventName, element, passive, capture]\n // Re-run if eventName or element changes\n );\n}\nfunction whenDefined(obj, result) {\n return obj === void 0 ? void 0 : result;\n}\nvar PI = Math.PI;\nfunction degreesToRadians(degrees) {\n return degrees * PI / 180;\n}\nvar getSquareBB = (posX, posY, squareSideLength) => ({\n x1: posX - squareSideLength / 2,\n y1: posY - squareSideLength / 2,\n x2: posX + squareSideLength / 2,\n y2: posY + squareSideLength / 2\n});\nvar getSquareXPosFromAlign = (alignment, containerX, containerWidth, horizontalPadding, squareWidth) => {\n switch (alignment) {\n case \"left\":\n return Math.floor(containerX) + horizontalPadding + squareWidth / 2;\n case \"center\":\n return Math.floor(containerX + containerWidth / 2);\n case \"right\":\n return Math.floor(containerX + containerWidth) - horizontalPadding - squareWidth / 2;\n }\n};\nvar getSquareWidth = (maxSize, containerHeight, verticalPadding) => Math.min(maxSize, containerHeight - verticalPadding * 2);\nvar pointIsWithinBB = (x, y, bb) => bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2;\nvar EditPencil = (props) => {\n var _a;\n const fg = (_a = props.fgColor) != null ? _a : \"currentColor\";\n return /* @__PURE__ */ React5.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" }, /* @__PURE__ */ React5.createElement(\n \"path\",\n {\n d: \"M12.7073 7.05029C7.87391 11.8837 10.4544 9.30322 6.03024 13.7273C5.77392 13.9836 5.58981 14.3071 5.50189 14.6587L4.52521 18.5655C4.38789 19.1148 4.88543 19.6123 5.43472 19.475L9.34146 18.4983C9.69313 18.4104 10.0143 18.2286 10.2706 17.9722L16.9499 11.2929\",\n stroke: fg,\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\",\n vectorEffect: \"non-scaling-stroke\"\n }\n ), /* @__PURE__ */ React5.createElement(\n \"path\",\n {\n d: \"M20.4854 4.92901L19.0712 3.5148C18.2901 2.73375 17.0238 2.73375 16.2428 3.5148L14.475 5.28257C15.5326 7.71912 16.4736 8.6278 18.7176 9.52521L20.4854 7.75744C21.2665 6.97639 21.2665 5.71006 20.4854 4.92901Z\",\n stroke: fg,\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\",\n vectorEffect: \"non-scaling-stroke\"\n }\n ));\n};\nvar Checkmark = (props) => {\n var _a;\n const fg = (_a = props.fgColor) != null ? _a : \"currentColor\";\n return /* @__PURE__ */ React5.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" }, /* @__PURE__ */ React5.createElement(\n \"path\",\n {\n d: \"M19 6L10.3802 17L5.34071 11.8758\",\n vectorEffect: \"non-scaling-stroke\",\n stroke: fg,\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n ));\n};\nfunction useDebouncedMemo(factory, deps, time) {\n const [state, setState] = React5.useState(factory);\n const mountedRef = React5.useRef(true);\n React5.useEffect(\n () => () => {\n mountedRef.current = false;\n },\n []\n );\n const debouncedSetState = React5.useRef(\n debounce((x) => {\n if (mountedRef.current) {\n setState(x);\n }\n }, time)\n );\n React5.useLayoutEffect(() => {\n if (mountedRef.current) {\n debouncedSetState.current(() => factory());\n }\n }, deps);\n return state;\n}\nvar rtlRange = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\nvar ltrRange = \"A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\\u200E\\u2C00-\\uFB1C\\uFE00-\\uFE6F\\uFEFD-\\uFFFF\";\nvar rtl = new RegExp(\"^[^\" + ltrRange + \"]*[\" + rtlRange + \"]\");\nvar ltr = new RegExp(\"^[^\" + rtlRange + \"]*[\" + ltrRange + \"]\");\nfunction direction(value) {\n return rtl.test(value) ? \"rtl\" : ltr.test(value) ? \"ltr\" : \"neutral\";\n}\nvar scrollbarWidthCache = void 0;\nfunction getScrollBarWidth() {\n if (scrollbarWidthCache !== void 0)\n return scrollbarWidthCache;\n const inner = document.createElement(\"p\");\n inner.style.width = \"100%\";\n inner.style.height = \"200px\";\n const outer = document.createElement(\"div\");\n outer.id = \"testScrollbar\";\n outer.style.position = \"absolute\";\n outer.style.top = \"0px\";\n outer.style.left = \"0px\";\n outer.style.visibility = \"hidden\";\n outer.style.width = \"200px\";\n outer.style.height = \"150px\";\n outer.style.overflow = \"hidden\";\n outer.append(inner);\n document.body.append(outer);\n const w1 = inner.offsetWidth;\n outer.style.overflow = \"scroll\";\n let w2 = inner.offsetWidth;\n if (w1 === w2) {\n w2 = outer.clientWidth;\n }\n outer.remove();\n scrollbarWidthCache = w1 - w2;\n return scrollbarWidthCache;\n}\nvar empty = Symbol();\nfunction useStateWithReactiveInput(inputState) {\n const inputStateRef = React5.useRef([empty, inputState]);\n if (inputStateRef.current[1] !== inputState) {\n inputStateRef.current[0] = inputState;\n }\n inputStateRef.current[1] = inputState;\n const [state, setState] = React5.useState(inputState);\n const [, forceRender] = React5.useState();\n const setStateOuter = React5.useCallback((nv) => {\n const s = inputStateRef.current[0];\n if (s !== empty) {\n nv = typeof nv === \"function\" ? nv(s) : nv;\n if (nv === s)\n return;\n }\n if (s !== empty)\n forceRender({});\n setState((pv) => {\n if (typeof nv === \"function\") {\n return nv(s === empty ? pv : s);\n }\n return nv;\n });\n inputStateRef.current[0] = empty;\n }, []);\n const onEmpty = React5.useCallback(() => {\n inputStateRef.current[0] = empty;\n forceRender({});\n }, []);\n return [inputStateRef.current[0] === empty ? state : inputStateRef.current[0], setStateOuter, onEmpty];\n}\nfunction makeAccessibilityStringForArray(arr) {\n if (arr.length === 0) {\n return \"\";\n }\n let index = 0;\n let count = 0;\n for (const str of arr) {\n count += str.length;\n if (count > 1e4)\n break;\n index++;\n }\n return arr.slice(0, index).join(\", \");\n}\n\n// src/data-grid/data-grid-lib.ts\nimport React6 from \"react\";\nimport { split as splitText, clearCache } from \"canvas-hypertxt\";\nfunction useMappedColumns(columns, freezeColumns) {\n return React6.useMemo(\n () => columns.map((c, i) => ({\n ...c,\n sourceIndex: i,\n sticky: i < freezeColumns\n })),\n [columns, freezeColumns]\n );\n}\nfunction isGroupEqual(left, right) {\n return (left != null ? left : \"\") === (right != null ? right : \"\");\n}\nfunction cellIsSelected(location, cell, selection) {\n if ((selection == null ? void 0 : selection.current) === void 0)\n return false;\n const [col, row] = selection.current.cell;\n const [cellCol, cellRow] = location;\n if (cellRow !== row)\n return false;\n if (cell.span === void 0) {\n return col === cellCol;\n }\n return col >= cell.span[0] && col <= cell.span[1];\n}\nfunction cellIsInRect(location, cell, rect) {\n const startX = rect.x;\n const endX = rect.x + rect.width - 1;\n const startY = rect.y;\n const endY = rect.y + rect.height - 1;\n const [cellCol, cellRow] = location;\n if (cellRow < startY || cellRow > endY)\n return false;\n if (cell.span === void 0) {\n return cellCol >= startX && cellCol <= endX;\n }\n const [spanStart, spanEnd] = cell.span;\n return spanStart >= startX && spanStart <= endX || spanEnd >= startX && spanStart <= endX || spanStart < startX && spanEnd > endX;\n}\nfunction cellIsInRange(location, cell, selection) {\n let result = 0;\n if (selection.current === void 0)\n return result;\n if (cellIsInRect(location, cell, selection.current.range))\n result++;\n for (const r of selection.current.rangeStack) {\n if (cellIsInRect(location, cell, r)) {\n result++;\n }\n }\n return result;\n}\nfunction remapForDnDState(columns, dndState) {\n let mappedCols = columns;\n if (dndState !== void 0) {\n let writable = [...columns];\n const temp = mappedCols[dndState.src];\n if (dndState.src > dndState.dest) {\n writable.splice(dndState.src, 1);\n writable.splice(dndState.dest, 0, temp);\n } else {\n writable.splice(dndState.dest + 1, 0, temp);\n writable.splice(dndState.src, 1);\n }\n writable = writable.map((c, i) => ({\n ...c,\n sticky: columns[i].sticky\n }));\n mappedCols = writable;\n }\n return mappedCols;\n}\nfunction getStickyWidth(columns, dndState) {\n let result = 0;\n const remapped = remapForDnDState(columns, dndState);\n for (let i = 0; i < remapped.length; i++) {\n const c = remapped[i];\n if (c.sticky)\n result += c.width;\n else\n break;\n }\n return result;\n}\nfunction getEffectiveColumns(columns, cellXOffset, width, dndState, tx) {\n const mappedCols = remapForDnDState(columns, dndState);\n const sticky = [];\n for (const c of mappedCols) {\n if (c.sticky) {\n sticky.push(c);\n } else {\n break;\n }\n }\n if (sticky.length > 0) {\n for (const c of sticky) {\n width -= c.width;\n }\n }\n let endIndex = cellXOffset;\n let curX = tx != null ? tx : 0;\n while (curX <= width && endIndex < mappedCols.length) {\n curX += mappedCols[endIndex].width;\n endIndex++;\n }\n for (let i = cellXOffset; i < endIndex; i++) {\n const c = mappedCols[i];\n if (!c.sticky) {\n sticky.push(c);\n }\n }\n return sticky;\n}\nfunction getColumnIndexForX(targetX, effectiveColumns, translateX) {\n let x = 0;\n for (const c of effectiveColumns) {\n const cx = c.sticky ? x : x + (translateX != null ? translateX : 0);\n if (targetX <= cx + c.width) {\n return c.sourceIndex;\n }\n x += c.width;\n }\n return -1;\n}\nfunction getRowIndexForY(targetY, height, hasGroups, headerHeight, groupHeaderHeight, rows, rowHeight, cellYOffset, translateY, lastRowSticky) {\n const totalHeaderHeight = headerHeight + groupHeaderHeight;\n if (hasGroups && targetY <= groupHeaderHeight)\n return -2;\n if (targetY <= totalHeaderHeight)\n return -1;\n const lastRowHeight = typeof rowHeight === \"number\" ? rowHeight : rowHeight(rows - 1);\n if (lastRowSticky && targetY > height - lastRowHeight) {\n return rows - 1;\n }\n const effectiveRows = rows - (lastRowSticky ? 1 : 0);\n const ty = targetY - (translateY != null ? translateY : 0);\n if (typeof rowHeight === \"number\") {\n const target = Math.floor((ty - totalHeaderHeight) / rowHeight) + cellYOffset;\n if (target >= effectiveRows)\n return void 0;\n return target;\n } else {\n let curY = totalHeaderHeight;\n for (let i = cellYOffset; i < effectiveRows; i++) {\n const rh = rowHeight(i);\n if (ty <= curY + rh)\n return i;\n curY += rh;\n }\n return void 0;\n }\n}\nvar metricsSize = 0;\nvar metricsCache = {};\nvar isSSR = typeof window === \"undefined\";\nasync function clearCacheOnLoad() {\n var _a;\n if (isSSR || ((_a = document == null ? void 0 : document.fonts) == null ? void 0 : _a.ready) === void 0)\n return;\n await document.fonts.ready;\n metricsSize = 0;\n metricsCache = {};\n clearCache();\n}\nvoid clearCacheOnLoad();\nfunction makeCacheKey(s, ctx, baseline, font) {\n return `${s}_${font != null ? font : ctx.font}_${baseline}`;\n}\nfunction measureTextCached(s, ctx, font) {\n const key = makeCacheKey(s, ctx, \"middle\", font);\n let metrics = metricsCache[key];\n if (metrics === void 0) {\n metrics = ctx.measureText(s);\n metricsCache[key] = metrics;\n metricsSize++;\n }\n if (metricsSize > 1e4) {\n metricsCache = {};\n metricsSize = 0;\n }\n return metrics;\n}\nfunction getMiddleCenterBias(ctx, font) {\n if (typeof font !== \"string\") {\n font = `${font.baseFontStyle} ${font.fontFamily}`;\n }\n return getMiddleCenterBiasInner(ctx, font);\n}\nfunction loadMetric(ctx, baseline) {\n const sample = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n ctx.save();\n ctx.textBaseline = baseline;\n const result = ctx.measureText(sample);\n ctx.restore();\n return result;\n}\nvar biasCache = [];\nfunction getMiddleCenterBiasInner(ctx, font) {\n for (const x of biasCache) {\n if (x.key === font)\n return x.val;\n }\n const alphabeticMetrics = loadMetric(ctx, \"alphabetic\");\n const middleMetrics = loadMetric(ctx, \"middle\");\n const bias = -(middleMetrics.actualBoundingBoxDescent - alphabeticMetrics.actualBoundingBoxDescent) + alphabeticMetrics.actualBoundingBoxAscent / 2;\n biasCache.push({\n key: font,\n val: bias\n });\n return bias;\n}\nfunction drawWithLastUpdate(args, lastUpdate, frameTime, lastPrep, draw) {\n const { ctx, rect, theme } = args;\n let progress = Number.MAX_SAFE_INTEGER;\n const animTime = 500;\n if (lastUpdate !== void 0) {\n progress = frameTime - lastUpdate;\n if (progress < animTime) {\n const fade = 1 - progress / animTime;\n ctx.globalAlpha = fade;\n ctx.fillStyle = theme.bgSearchResult;\n ctx.fillRect(rect.x, rect.y, rect.width, rect.height);\n ctx.globalAlpha = 1;\n if (lastPrep !== void 0) {\n lastPrep.fillStyle = theme.bgSearchResult;\n }\n }\n }\n draw();\n return progress < animTime;\n}\nfunction prepTextCell(args, lastPrep, overrideColor) {\n const { ctx, theme } = args;\n const result = lastPrep != null ? lastPrep : {};\n const newFill = overrideColor != null ? overrideColor : theme.textDark;\n if (newFill !== result.fillStyle) {\n ctx.fillStyle = newFill;\n result.fillStyle = newFill;\n }\n return result;\n}\nfunction drawTextCellExternal(args, data, contentAlign) {\n const { rect, ctx, theme } = args;\n ctx.fillStyle = theme.textDark;\n drawTextCell(\n {\n ctx,\n rect,\n theme\n },\n data,\n contentAlign\n );\n}\nfunction drawSingleTextLine(ctx, data, x, y, w, h, bias, theme, contentAlign) {\n if (contentAlign === \"right\") {\n ctx.fillText(data, x + w - (theme.cellHorizontalPadding + 0.5), y + h / 2 + bias);\n } else if (contentAlign === \"center\") {\n ctx.fillText(data, x + w / 2, y + h / 2 + bias);\n } else {\n ctx.fillText(data, x + theme.cellHorizontalPadding + 0.5, y + h / 2 + bias);\n }\n}\nfunction getEmHeight(ctx, fontStyle) {\n const textMetrics = measureTextCached(\"ABCi09jgqpy\", ctx, fontStyle);\n return textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent;\n}\nfunction drawTextCell(args, data, contentAlign, allowWrapping, hyperWrapping) {\n const { ctx, rect, theme } = args;\n const { x, y, width: w, height: h } = rect;\n allowWrapping = allowWrapping != null ? allowWrapping : false;\n if (!allowWrapping) {\n if (data.includes(\"\\n\")) {\n data = data.split(/\\r?\\n/)[0];\n }\n const max = w / 4;\n if (data.length > max) {\n data = data.slice(0, max);\n }\n }\n const bias = getMiddleCenterBias(ctx, theme);\n const isRtl = direction(data) === \"rtl\";\n if (contentAlign === void 0 && isRtl) {\n contentAlign = \"right\";\n }\n if (isRtl) {\n ctx.direction = \"rtl\";\n }\n if (data.length > 0) {\n let changed = false;\n if (contentAlign === \"right\") {\n ctx.textAlign = \"right\";\n changed = true;\n } else if (contentAlign !== void 0 && contentAlign !== \"left\") {\n ctx.textAlign = contentAlign;\n changed = true;\n }\n if (!allowWrapping) {\n drawSingleTextLine(ctx, data, x, y, w, h, bias, theme, contentAlign);\n } else {\n const fontStyle = `${theme.fontFamily} ${theme.baseFontStyle}`;\n const split = splitText(ctx, data, fontStyle, w - theme.cellHorizontalPadding * 2, hyperWrapping != null ? hyperWrapping : false);\n const emHeight = getEmHeight(ctx, fontStyle);\n const lineHeight = theme.lineHeight * emHeight;\n const actualHeight = emHeight + lineHeight * (split.length - 1);\n const mustClip = actualHeight + theme.cellVerticalPadding > h;\n if (mustClip) {\n ctx.save();\n ctx.rect(x, y, w, h);\n ctx.clip();\n }\n const optimalY = y + h / 2 - actualHeight / 2;\n let drawY = Math.max(y + theme.cellVerticalPadding, optimalY);\n for (const line of split) {\n drawSingleTextLine(ctx, line, x, drawY, w, emHeight, bias, theme, contentAlign);\n drawY += lineHeight;\n if (drawY > y + h)\n break;\n }\n if (mustClip) {\n ctx.restore();\n }\n }\n if (changed) {\n ctx.textAlign = \"start\";\n }\n if (isRtl) {\n ctx.direction = \"inherit\";\n }\n }\n}\nfunction drawNewRowCell(args, data, icon) {\n const { ctx, rect, hoverAmount, theme, spriteManager } = args;\n const { x, y, width: w, height: h } = rect;\n ctx.beginPath();\n ctx.globalAlpha = hoverAmount;\n ctx.rect(x, y, w, h);\n ctx.fillStyle = theme.bgHeaderHovered;\n ctx.fill();\n ctx.globalAlpha = 1;\n ctx.beginPath();\n const alwaysShowIcon = data !== \"\";\n let textX = 0;\n if (icon !== void 0) {\n const padding = 8;\n const size = h - padding;\n const px = x + padding / 2;\n const py = y + padding / 2;\n spriteManager.drawSprite(icon, \"normal\", ctx, px, py, size, theme, alwaysShowIcon ? 1 : hoverAmount);\n textX = size;\n } else {\n textX = 24;\n const finalLineSize = 12;\n const lineSize = alwaysShowIcon ? finalLineSize : hoverAmount * finalLineSize;\n const xTranslate = alwaysShowIcon ? 0 : (1 - hoverAmount) * finalLineSize * 0.5;\n const padPlus = theme.cellHorizontalPadding + 4;\n if (lineSize > 0) {\n ctx.moveTo(x + padPlus + xTranslate, y + h / 2);\n ctx.lineTo(x + padPlus + xTranslate + lineSize, y + h / 2);\n ctx.moveTo(x + padPlus + xTranslate + lineSize * 0.5, y + h / 2 - lineSize * 0.5);\n ctx.lineTo(x + padPlus + xTranslate + lineSize * 0.5, y + h / 2 + lineSize * 0.5);\n ctx.lineWidth = 2;\n ctx.strokeStyle = theme.bgIconHeader;\n ctx.lineCap = \"round\";\n ctx.stroke();\n }\n }\n ctx.fillStyle = theme.textMedium;\n ctx.fillText(data, textX + x + theme.cellHorizontalPadding + 0.5, y + h / 2 + getMiddleCenterBias(ctx, theme));\n ctx.beginPath();\n}\nfunction drawCheckbox(ctx, theme, checked, x, y, width, height, highlighted, hoverX = -20, hoverY = -20, maxSize = 32, alignment = \"center\") {\n const centerY = Math.floor(y + height / 2);\n const rectBordRadius = 4;\n const checkBoxWidth = getSquareWidth(maxSize, height, theme.cellVerticalPadding);\n const checkBoxHalfWidth = checkBoxWidth / 2;\n const posX = getSquareXPosFromAlign(alignment, x, width, theme.cellHorizontalPadding, checkBoxWidth);\n const bb = getSquareBB(posX, centerY, checkBoxWidth);\n const hovered = pointIsWithinBB(x + hoverX, y + hoverY, bb);\n switch (checked) {\n case true: {\n ctx.beginPath();\n roundedRect(\n ctx,\n posX - checkBoxWidth / 2,\n centerY - checkBoxWidth / 2,\n checkBoxWidth,\n checkBoxWidth,\n rectBordRadius\n );\n ctx.fillStyle = highlighted ? theme.accentColor : theme.textMedium;\n ctx.fill();\n ctx.beginPath();\n ctx.moveTo(\n posX - checkBoxHalfWidth + checkBoxWidth / 4.23,\n centerY - checkBoxHalfWidth + checkBoxWidth / 1.97\n );\n ctx.lineTo(\n posX - checkBoxHalfWidth + checkBoxWidth / 2.42,\n centerY - checkBoxHalfWidth + checkBoxWidth / 1.44\n );\n ctx.lineTo(\n posX - checkBoxHalfWidth + checkBoxWidth / 1.29,\n centerY - checkBoxHalfWidth + checkBoxWidth / 3.25\n );\n ctx.strokeStyle = theme.bgCell;\n ctx.lineJoin = \"round\";\n ctx.lineCap = \"round\";\n ctx.lineWidth = 1.9;\n ctx.stroke();\n break;\n }\n case BooleanEmpty:\n case false: {\n ctx.beginPath();\n roundedRect(\n ctx,\n posX - checkBoxWidth / 2 + 0.5,\n centerY - checkBoxWidth / 2 + 0.5,\n checkBoxWidth - 1,\n checkBoxWidth - 1,\n rectBordRadius\n );\n ctx.lineWidth = 1;\n ctx.strokeStyle = hovered ? theme.textDark : theme.textMedium;\n ctx.stroke();\n break;\n }\n case BooleanIndeterminate: {\n ctx.beginPath();\n roundedRect(\n ctx,\n posX - checkBoxWidth / 2,\n centerY - checkBoxWidth / 2,\n checkBoxWidth,\n checkBoxWidth,\n rectBordRadius\n );\n ctx.fillStyle = hovered ? theme.textMedium : theme.textLight;\n ctx.fill();\n ctx.beginPath();\n ctx.moveTo(posX - checkBoxWidth / 3, centerY);\n ctx.lineTo(posX + checkBoxWidth / 3, centerY);\n ctx.strokeStyle = theme.bgCell;\n ctx.lineCap = \"round\";\n ctx.lineWidth = 1.9;\n ctx.stroke();\n break;\n }\n default:\n assertNever(checked);\n }\n}\nfunction prepMarkerRowCell(args, lastPrep) {\n const { ctx, theme } = args;\n const newFont = `9px ${theme.fontFamily}`;\n const result = lastPrep != null ? lastPrep : {};\n if ((result == null ? void 0 : result.font) !== newFont) {\n ctx.font = newFont;\n result.font = newFont;\n }\n result.deprep = deprepMarkerRowCell;\n ctx.textAlign = \"center\";\n return result;\n}\nfunction deprepMarkerRowCell(args) {\n const { ctx } = args;\n ctx.textAlign = \"start\";\n}\nfunction drawMarkerRowCell(args, index, checked, markerKind, drawHandle) {\n const { ctx, rect, hoverAmount, theme } = args;\n const { x, y, width, height } = rect;\n const checkedboxAlpha = checked ? 1 : markerKind === \"checkbox-visible\" ? 0.6 + 0.4 * hoverAmount : hoverAmount;\n if (markerKind !== \"number\" && checkedboxAlpha > 0) {\n ctx.globalAlpha = checkedboxAlpha;\n const offsetAmount = 7 * (checked ? hoverAmount : 1);\n drawCheckbox(\n ctx,\n theme,\n checked,\n drawHandle ? x + offsetAmount : x,\n y,\n drawHandle ? width - offsetAmount : width,\n height,\n true,\n void 0,\n void 0,\n 18\n );\n if (drawHandle) {\n ctx.globalAlpha = hoverAmount;\n ctx.beginPath();\n for (const xOffset of [3, 6]) {\n for (const yOffset of [-5, -1, 3]) {\n ctx.rect(x + xOffset, y + height / 2 + yOffset, 2, 2);\n }\n }\n ctx.fillStyle = theme.textLight;\n ctx.fill();\n ctx.beginPath();\n }\n ctx.globalAlpha = 1;\n }\n if (markerKind === \"number\" || markerKind === \"both\" && !checked) {\n const text = index.toString();\n const fontStyle = `${theme.markerFontStyle} ${theme.fontFamily}`;\n const start = x + width / 2;\n if (markerKind === \"both\" && hoverAmount !== 0) {\n ctx.globalAlpha = 1 - hoverAmount;\n }\n ctx.fillStyle = theme.textLight;\n ctx.font = fontStyle;\n ctx.fillText(text, start, y + height / 2 + getMiddleCenterBias(ctx, fontStyle));\n if (hoverAmount !== 0) {\n ctx.globalAlpha = 1;\n }\n }\n}\nfunction drawProtectedCell(args) {\n const { ctx, theme, rect } = args;\n const { x, y, height: h } = rect;\n ctx.beginPath();\n const radius = 2.5;\n let xStart = x + theme.cellHorizontalPadding + radius;\n const center = y + h / 2;\n const p = Math.cos(degreesToRadians(30)) * radius;\n const q = Math.sin(degreesToRadians(30)) * radius;\n for (let i = 0; i < 12; i++) {\n ctx.moveTo(xStart, center - radius);\n ctx.lineTo(xStart, center + radius);\n ctx.moveTo(xStart + p, center - q);\n ctx.lineTo(xStart - p, center + q);\n ctx.moveTo(xStart - p, center - q);\n ctx.lineTo(xStart + p, center + q);\n xStart += 8;\n }\n ctx.lineWidth = 1.1;\n ctx.lineCap = \"square\";\n ctx.strokeStyle = theme.textLight;\n ctx.stroke();\n}\nfunction roundedRect(ctx, x, y, width, height, radius) {\n if (typeof radius === \"number\") {\n radius = { tl: radius, tr: radius, br: radius, bl: radius };\n }\n radius = {\n tl: Math.min(radius.tl, height / 2, width / 2),\n tr: Math.min(radius.tr, height / 2, width / 2),\n bl: Math.min(radius.bl, height / 2, width / 2),\n br: Math.min(radius.br, height / 2, width / 2)\n };\n ctx.moveTo(x + radius.tl, y);\n ctx.arcTo(x + width, y, x + width, y + radius.tr, radius.tr);\n ctx.arcTo(x + width, y + height, x + width - radius.br, y + height, radius.br);\n ctx.arcTo(x, y + height, x, y + height - radius.bl, radius.bl);\n ctx.arcTo(x, y, x + radius.tl, y, radius.tl);\n}\nfunction drawBoolean(args, data, canEdit, maxSize) {\n if (!canEdit && data === BooleanEmpty) {\n return;\n }\n const {\n ctx,\n hoverAmount,\n theme,\n rect,\n highlighted,\n hoverX,\n hoverY,\n cell: { contentAlign }\n } = args;\n const { x, y, width: w, height: h } = rect;\n const hoverEffect = 0.35;\n let alpha = canEdit ? 1 - hoverEffect + hoverEffect * hoverAmount : 0.4;\n if (data === BooleanEmpty) {\n alpha *= hoverAmount;\n }\n if (alpha === 0) {\n return;\n }\n ctx.globalAlpha = alpha;\n drawCheckbox(ctx, theme, data, x, y, w, h, highlighted, hoverX, hoverY, maxSize, contentAlign);\n ctx.globalAlpha = 1;\n}\nvar itemMargin = 4;\nfunction drawBubbles(args, data) {\n const { rect, theme, ctx, highlighted } = args;\n const { x, y, width: w, height: h } = rect;\n const bubbleHeight = 20;\n const bubblePad = 8;\n const bubbleMargin = itemMargin;\n let renderX = x + theme.cellHorizontalPadding;\n const renderBoxes = [];\n for (const s of data) {\n if (renderX > x + w)\n break;\n const textWidth = measureTextCached(s, ctx, `${theme.baseFontStyle} ${theme.fontFamily}`).width;\n renderBoxes.push({\n x: renderX,\n width: textWidth\n });\n renderX += textWidth + bubblePad * 2 + bubbleMargin;\n }\n ctx.beginPath();\n for (const rectInfo of renderBoxes) {\n roundedRect(\n ctx,\n rectInfo.x,\n y + (h - bubbleHeight) / 2,\n rectInfo.width + bubblePad * 2,\n bubbleHeight,\n bubbleHeight / 2\n );\n }\n ctx.fillStyle = highlighted ? theme.bgBubbleSelected : theme.bgBubble;\n ctx.fill();\n for (const [i, rectInfo] of renderBoxes.entries()) {\n ctx.beginPath();\n ctx.fillStyle = theme.textBubble;\n ctx.fillText(data[i], rectInfo.x + bubblePad, y + h / 2 + getMiddleCenterBias(ctx, theme));\n }\n}\nvar drilldownCache = {};\nfunction getAndCacheDrilldownBorder(bgCell, border, height) {\n const dpr = Math.ceil(window.devicePixelRatio);\n const shadowBlur = 5;\n const targetHeight = height - shadowBlur * 2;\n const middleWidth = 4;\n const rounding = 6;\n const innerHeight = height * dpr;\n const sideWidth = rounding + shadowBlur;\n const targetWidth = rounding * 3;\n const innerWidth = (targetWidth + shadowBlur * 2) * dpr;\n const key = `${bgCell},${border},${dpr},${height}`;\n if (drilldownCache[key] !== void 0) {\n return {\n el: drilldownCache[key],\n height: innerHeight,\n width: innerWidth,\n middleWidth: middleWidth * dpr,\n sideWidth: sideWidth * dpr,\n padding: shadowBlur * dpr,\n dpr\n };\n }\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (ctx === null)\n return null;\n canvas.width = innerWidth;\n canvas.height = innerHeight;\n ctx.scale(dpr, dpr);\n drilldownCache[key] = canvas;\n const trueRounding = Math.min(rounding, targetWidth / 2, targetHeight / 2);\n ctx.beginPath();\n roundedRect(ctx, shadowBlur, shadowBlur, targetWidth, targetHeight, trueRounding);\n ctx.shadowColor = \"rgba(24, 25, 34, 0.4)\";\n ctx.shadowBlur = 1;\n ctx.fillStyle = bgCell;\n ctx.fill();\n ctx.shadowColor = \"rgba(24, 25, 34, 0.3)\";\n ctx.shadowOffsetY = 1;\n ctx.shadowBlur = 5;\n ctx.fillStyle = bgCell;\n ctx.fill();\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = 0;\n ctx.shadowBlur = 0;\n ctx.beginPath();\n roundedRect(ctx, shadowBlur + 0.5, shadowBlur + 0.5, targetWidth, targetHeight, trueRounding);\n ctx.strokeStyle = border;\n ctx.lineWidth = 1;\n ctx.stroke();\n return {\n el: canvas,\n height: innerHeight,\n width: innerWidth,\n sideWidth: sideWidth * dpr,\n middleWidth: rounding * dpr,\n padding: shadowBlur * dpr,\n dpr\n };\n}\nfunction drawDrilldownCell(args, data) {\n const { rect, theme, ctx, imageLoader, col, row } = args;\n const { x, width: w } = rect;\n const font = `${theme.baseFontStyle} ${theme.fontFamily}`;\n const emHeight = getEmHeight(ctx, font);\n const h = Math.min(rect.height, Math.max(16, Math.ceil(emHeight * theme.lineHeight) * 2));\n const y = Math.floor(rect.y + (rect.height - h) / 2);\n const bubbleHeight = h - 10;\n const bubblePad = 8;\n const bubbleMargin = itemMargin;\n let renderX = x + theme.cellHorizontalPadding;\n const tileMap = getAndCacheDrilldownBorder(theme.bgCell, theme.drilldownBorder, h);\n const renderBoxes = [];\n for (const el of data) {\n if (renderX > x + w)\n break;\n const textMetrics = measureTextCached(el.text, ctx, font);\n const textWidth = textMetrics.width;\n let imgWidth = 0;\n if (el.img !== void 0) {\n const img = imageLoader.loadOrGetImage(el.img, col, row);\n if (img !== void 0) {\n imgWidth = bubbleHeight - 8 + 4;\n }\n }\n const renderWidth = textWidth + imgWidth + bubblePad * 2;\n renderBoxes.push({\n x: renderX,\n width: renderWidth\n });\n renderX += renderWidth + bubbleMargin;\n }\n if (tileMap !== null) {\n const { el, height, middleWidth, sideWidth, width, dpr, padding } = tileMap;\n const outerSideWidth = sideWidth / dpr;\n const outerPadding = padding / dpr;\n for (const rectInfo of renderBoxes) {\n const rx = Math.floor(rectInfo.x);\n const rw = Math.floor(rectInfo.width);\n const outerMiddleWidth = rw - (outerSideWidth - outerPadding) * 2;\n ctx.imageSmoothingEnabled = false;\n ctx.drawImage(el, 0, 0, sideWidth, height, rx - outerPadding, y, outerSideWidth, h);\n if (outerMiddleWidth > 0)\n ctx.drawImage(\n el,\n sideWidth,\n 0,\n middleWidth,\n height,\n rx + (outerSideWidth - outerPadding),\n y,\n outerMiddleWidth,\n h\n );\n ctx.drawImage(\n el,\n width - sideWidth,\n 0,\n sideWidth,\n height,\n rx + rw - (outerSideWidth - outerPadding),\n y,\n outerSideWidth,\n h\n );\n ctx.imageSmoothingEnabled = true;\n }\n }\n ctx.beginPath();\n for (const [i, rectInfo] of renderBoxes.entries()) {\n const d = data[i];\n let drawX = rectInfo.x + bubblePad;\n if (d.img !== void 0) {\n const img = imageLoader.loadOrGetImage(d.img, col, row);\n if (img !== void 0) {\n const imgSize = bubbleHeight - 8;\n let srcX = 0;\n let srcY = 0;\n let srcWidth = img.width;\n let srcHeight = img.height;\n if (srcWidth > srcHeight) {\n srcX += (srcWidth - srcHeight) / 2;\n srcWidth = srcHeight;\n } else if (srcHeight > srcWidth) {\n srcY += (srcHeight - srcWidth) / 2;\n srcHeight = srcWidth;\n }\n ctx.beginPath();\n roundedRect(ctx, drawX, y + h / 2 - imgSize / 2, imgSize, imgSize, 3);\n ctx.save();\n ctx.clip();\n ctx.drawImage(img, srcX, srcY, srcWidth, srcHeight, drawX, y + h / 2 - imgSize / 2, imgSize, imgSize);\n ctx.restore();\n drawX += imgSize + 4;\n }\n }\n ctx.beginPath();\n ctx.fillStyle = theme.textBubble;\n ctx.fillText(d.text, drawX, y + h / 2 + getMiddleCenterBias(ctx, theme));\n }\n}\nfunction drawImage(args, data, rounding = 4, contentAlign) {\n const { rect, col, row, theme, ctx, imageLoader } = args;\n const { x, y, height: h, width: w } = rect;\n const imgHeight = h - theme.cellVerticalPadding * 2;\n const images = [];\n let totalWidth = 0;\n for (let index = 0; index < data.length; index++) {\n const i = data[index];\n if (i.length === 0)\n continue;\n const img = imageLoader.loadOrGetImage(i, col, row);\n if (img !== void 0) {\n images[index] = img;\n const imgWidth = img.width * (imgHeight / img.height);\n totalWidth += imgWidth + itemMargin;\n }\n }\n if (totalWidth === 0)\n return;\n totalWidth -= itemMargin;\n let drawX = x + theme.cellHorizontalPadding;\n if (contentAlign === \"right\")\n drawX = Math.floor(x + w - theme.cellHorizontalPadding - totalWidth);\n else if (contentAlign === \"center\")\n drawX = Math.floor(x + w / 2 - totalWidth / 2);\n for (const img of images) {\n if (img === void 0)\n continue;\n const imgWidth = img.width * (imgHeight / img.height);\n if (rounding > 0) {\n roundedRect(ctx, drawX, y + theme.cellVerticalPadding, imgWidth, imgHeight, rounding);\n ctx.save();\n ctx.clip();\n }\n ctx.drawImage(img, drawX, y + theme.cellVerticalPadding, imgWidth, imgHeight);\n if (rounding > 0) {\n ctx.restore();\n }\n drawX += imgWidth + itemMargin;\n }\n}\nfunction roundedPoly(ctx, points, radiusAll) {\n const asVec = function(p, pp) {\n const vx = pp.x - p.x;\n const vy = pp.y - p.y;\n const vlen = Math.sqrt(vx * vx + vy * vy);\n const vnx = vx / vlen;\n const vny = vy / vlen;\n return {\n x: vx,\n y: pp.y - p.y,\n len: vlen,\n nx: vnx,\n ny: vny,\n ang: Math.atan2(vny, vnx)\n };\n };\n let radius;\n const len = points.length;\n let p1 = points[len - 1];\n for (let i = 0; i < len; i++) {\n let p2 = points[i % len];\n const p3 = points[(i + 1) % len];\n const v1 = asVec(p2, p1);\n const v2 = asVec(p2, p3);\n const sinA = v1.nx * v2.ny - v1.ny * v2.nx;\n const sinA90 = v1.nx * v2.nx - v1.ny * -v2.ny;\n let angle = Math.asin(sinA < -1 ? -1 : sinA > 1 ? 1 : sinA);\n let radDirection = 1;\n let drawDirection = false;\n if (sinA90 < 0) {\n if (angle < 0) {\n angle = Math.PI + angle;\n } else {\n angle = Math.PI - angle;\n radDirection = -1;\n drawDirection = true;\n }\n } else {\n if (angle > 0) {\n radDirection = -1;\n drawDirection = true;\n }\n }\n radius = p2.radius !== void 0 ? p2.radius : radiusAll;\n const halfAngle = angle / 2;\n let lenOut = Math.abs(Math.cos(halfAngle) * radius / Math.sin(halfAngle));\n let cRadius;\n if (lenOut > Math.min(v1.len / 2, v2.len / 2)) {\n lenOut = Math.min(v1.len / 2, v2.len / 2);\n cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle));\n } else {\n cRadius = radius;\n }\n let x = p2.x + v2.nx * lenOut;\n let y = p2.y + v2.ny * lenOut;\n x += -v2.ny * cRadius * radDirection;\n y += v2.nx * cRadius * radDirection;\n ctx.arc(\n x,\n y,\n cRadius,\n v1.ang + Math.PI / 2 * radDirection,\n v2.ang - Math.PI / 2 * radDirection,\n drawDirection\n );\n p1 = p2;\n p2 = p3;\n }\n ctx.closePath();\n}\nfunction computeBounds(col, row, width, height, groupHeaderHeight, totalHeaderHeight, cellXOffset, cellYOffset, translateX, translateY, rows, freezeColumns, lastRowSticky, mappedColumns, rowHeight) {\n const result = {\n x: 0,\n y: totalHeaderHeight + translateY,\n width: 0,\n height: 0\n };\n const headerHeight = totalHeaderHeight - groupHeaderHeight;\n if (col >= freezeColumns) {\n const dir = cellXOffset > col ? -1 : 1;\n const freezeWidth = getStickyWidth(mappedColumns);\n result.x += freezeWidth + translateX;\n for (let i = cellXOffset; i !== col; i += dir) {\n result.x += mappedColumns[dir === 1 ? i : i - 1].width * dir;\n }\n } else {\n for (let i = 0; i < col; i++) {\n result.x += mappedColumns[i].width;\n }\n }\n result.width = mappedColumns[col].width + 1;\n if (row === -1) {\n result.y = groupHeaderHeight;\n result.height = headerHeight;\n } else if (row === -2) {\n result.y = 0;\n result.height = groupHeaderHeight;\n let start = col;\n const group = mappedColumns[col].group;\n const sticky = mappedColumns[col].sticky;\n while (start > 0 && isGroupEqual(mappedColumns[start - 1].group, group) && mappedColumns[start - 1].sticky === sticky) {\n const c = mappedColumns[start - 1];\n result.x -= c.width;\n result.width += c.width;\n start--;\n }\n let end = col;\n while (end + 1 < mappedColumns.length && isGroupEqual(mappedColumns[end + 1].group, group) && mappedColumns[end + 1].sticky === sticky) {\n const c = mappedColumns[end + 1];\n result.width += c.width;\n end++;\n }\n if (!sticky) {\n const freezeWidth = getStickyWidth(mappedColumns);\n const clip = result.x - freezeWidth;\n if (clip < 0) {\n result.x -= clip;\n result.width += clip;\n }\n if (result.x + result.width > width) {\n result.width = width - result.x;\n }\n }\n } else if (lastRowSticky && row === rows - 1) {\n const stickyHeight = typeof rowHeight === \"number\" ? rowHeight : rowHeight(row);\n result.y = height - stickyHeight;\n result.height = stickyHeight;\n } else {\n const dir = cellYOffset > row ? -1 : 1;\n if (typeof rowHeight === \"number\") {\n const delta = row - cellYOffset;\n result.y += delta * rowHeight;\n } else {\n for (let r = cellYOffset; r !== row; r += dir) {\n result.y += rowHeight(r) * dir;\n }\n }\n result.height = (typeof rowHeight === \"number\" ? rowHeight : rowHeight(row)) + 1;\n }\n return result;\n}\n\n// src/data-grid/sprites.ts\nvar iconHead = `<svg width=\"20\" height=\"20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">`;\nvar headerRowID = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}<rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/><path d=\"M15.75 4h-1.5a.25.25 0 0 0-.177.074L9.308 8.838a3.75 3.75 0 1 0 1.854 1.854l1.155-1.157.967.322a.5.5 0 0 0 .65-.55l-.18-1.208.363-.363.727.331a.5.5 0 0 0 .69-.59l-.254-.904.647-.647A.25.25 0 0 0 16 5.75v-1.5a.25.25 0 0 0-.25-.25zM7.5 13.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0z\" fill=\"${fg}\"/></svg>`;\n};\nvar headerCode = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}<rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"4\" fill=\"${bg}\"/><path d=\"m12.223 13.314 3.052-2.826a.65.65 0 0 0 0-.984l-3.052-2.822c-.27-.25-.634-.242-.865.022-.232.263-.206.636.056.882l2.601 2.41-2.601 2.41c-.262.245-.288.619-.056.882.231.263.595.277.865.026Zm-4.444.005c.266.25.634.241.866-.027.231-.263.206-.636-.06-.882L5.983 10l2.602-2.405c.266-.25.291-.62.06-.887-.232-.263-.596-.272-.866-.022L4.723 9.51a.653.653 0 0 0 0 .983l3.056 2.827Z\" fill=\"${fg}\"/></svg>`;\n};\nvar headerNumber = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2z\" fill=\"${bg}\"/>\n <path d=\"M6.52 12.78H5.51V8.74l-1.33.47v-.87l2.29-.83h.05v5.27zm5.2 0H8.15v-.69l1.7-1.83a6.38 6.38 0 0 0 .34-.4c.09-.11.16-.22.22-.32s.1-.19.12-.27a.9.9 0 0 0 0-.56.63.63 0 0 0-.15-.23.58.58 0 0 0-.22-.15.75.75 0 0 0-.29-.05c-.27 0-.48.08-.62.23a.95.95 0 0 0-.2.65H8.03c0-.24.04-.46.13-.67a1.67 1.67 0 0 1 .97-.91c.23-.1.49-.14.77-.14.26 0 .5.04.7.11.21.08.38.18.52.32.14.13.25.3.32.48a1.74 1.74 0 0 1 .03 1.13 2.05 2.05 0 0 1-.24.47 4.16 4.16 0 0 1-.35.47l-.47.5-1 1.05h2.32v.8zm1.8-3.08h.55c.28 0 .48-.06.61-.2a.76.76 0 0 0 .2-.55.8.8 0 0 0-.05-.28.56.56 0 0 0-.13-.22.6.6 0 0 0-.23-.15.93.93 0 0 0-.32-.05.92.92 0 0 0-.29.05.72.72 0 0 0-.23.12.57.57 0 0 0-.21.46H12.4a1.3 1.3 0 0 1 .5-1.04c.15-.13.33-.23.54-.3a2.48 2.48 0 0 1 1.4 0c.2.06.4.15.55.28.15.13.27.28.36.47.08.19.13.4.13.65a1.15 1.15 0 0 1-.2.65 1.36 1.36 0 0 1-.58.49c.15.05.28.12.38.2a1.14 1.14 0 0 1 .43.62c.03.13.05.26.05.4 0 .25-.05.47-.14.66a1.42 1.42 0 0 1-.4.49c-.16.13-.35.23-.58.3a2.51 2.51 0 0 1-.73.1c-.22 0-.44-.03-.65-.09a1.8 1.8 0 0 1-.57-.28 1.43 1.43 0 0 1-.4-.47 1.41 1.41 0 0 1-.15-.66h1a.66.66 0 0 0 .22.5.87.87 0 0 0 .58.2c.25 0 .45-.07.6-.2a.71.71 0 0 0 .21-.56.97.97 0 0 0-.06-.36.61.61 0 0 0-.18-.25.74.74 0 0 0-.28-.15 1.33 1.33 0 0 0-.37-.04h-.55V9.7z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerString = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n <path d=\"M8.182 12.4h3.636l.655 1.6H14l-3.454-8H9.455L6 14h1.527l.655-1.6zM10 7.44l1.36 3.651H8.64L10 7.441z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerBoolean = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path\n d=\"M16.2222 2H3.77778C2.8 2 2 2.8 2 3.77778V16.2222C2 17.2 2.8 18 3.77778 18H16.2222C17.2 18 17.9911 17.2 17.9911 16.2222L18 3.77778C18 2.8 17.2 2 16.2222 2Z\"\n fill=\"${bg}\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M7.66667 6.66669C5.73368 6.66669 4.16667 8.15907 4.16667 10C4.16667 11.841 5.73368 13.3334 7.66667 13.3334H12.3333C14.2663 13.3334 15.8333 11.841 15.8333 10C15.8333 8.15907 14.2663 6.66669 12.3333 6.66669H7.66667ZM12.5 12.5C13.8807 12.5 15 11.3807 15 10C15 8.61931 13.8807 7.50002 12.5 7.50002C11.1193 7.50002 10 8.61931 10 10C10 11.3807 11.1193 12.5 12.5 12.5Z\"\n fill=\"${fg}\"\n />\n</svg>`;\n};\nvar headerUri = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n<path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.29 4.947a3.368 3.368 0 014.723.04 3.375 3.375 0 01.041 4.729l-.009.009-1.596 1.597a3.367 3.367 0 01-5.081-.364.71.71 0 011.136-.85 1.95 1.95 0 002.942.21l1.591-1.593a1.954 1.954 0 00-.027-2.733 1.95 1.95 0 00-2.732-.027l-.91.907a.709.709 0 11-1.001-1.007l.915-.911.007-.007z\" fill=\"${fg}\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6.55 8.678a3.368 3.368 0 015.082.364.71.71 0 01-1.136.85 1.95 1.95 0 00-2.942-.21l-1.591 1.593a1.954 1.954 0 00.027 2.733 1.95 1.95 0 002.73.028l.906-.906a.709.709 0 111.003 1.004l-.91.91-.008.01a3.368 3.368 0 01-4.724-.042 3.375 3.375 0 01-.041-4.728l.009-.009L6.55 8.678z\" fill=\"${fg}\"/>\n</svg>\n `;\n};\nvar renameIcon = (props) => {\n const bg = props.bgColor;\n return `${iconHead}\n <path stroke=\"${bg}\" stroke-width=\"2\" d=\"M12 3v14\"/>\n <path stroke=\"${bg}\" stroke-width=\"2\" stroke-linecap=\"round\" d=\"M10 4h4m-4 12h4\"/>\n <path d=\"M11 14h4a3 3 0 0 0 3-3V9a3 3 0 0 0-3-3h-4v2h4a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-4v2ZM9.5 8H5a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h4.5v2H5a3 3 0 0 1-3-3V9a3 3 0 0 1 3-3h4.5v2Z\" fill=\"${bg}\"/>\n </svg>\n`;\n};\nvar headerAudioUri = headerUri;\nvar headerVideoUri = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7 13.138a.5.5 0 00.748.434l5.492-3.138a.5.5 0 000-.868L7.748 6.427A.5.5 0 007 6.862v6.276z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerEmoji = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <path d=\"M10 5a5 5 0 1 0 0 10 5 5 0 0 0 0-10zm0 9.17A4.17 4.17 0 0 1 5.83 10 4.17 4.17 0 0 1 10 5.83 4.17 4.17 0 0 1 14.17 10 4.17 4.17 0 0 1 10 14.17z\" fill=\"${fg}\"/>\n <path d=\"M8.33 8.21a.83.83 0 1 0-.03 1.67.83.83 0 0 0 .03-1.67zm3.34 0a.83.83 0 1 0-.04 1.67.83.83 0 0 0 .04-1.67z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.53 13.9a2.82 2.82 0 0 1-5.06 0l.77-.38a1.97 1.97 0 0 0 3.52 0l.77.39z\" fill=\"${fg}\"/>\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2z\" fill=\"${bg}\"/>\n <path d=\"M10 4a6 6 0 1 0 0 12 6 6 0 0 0 0-12zm0 11a5 5 0 1 1 .01-10.01A5 5 0 0 1 10 15z\" fill=\"${fg}\"/>\n <path d=\"M8 7.86a1 1 0 1 0-.04 2 1 1 0 0 0 .04-2zm4 0a1 1 0 1 0-.04 2 1 1 0 0 0 .04-2z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12.53 11.9a2.82 2.82 0 0 1-5.06 0l.77-.38a1.97 1.97 0 0 0 3.52 0l.77.39z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerImage = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n <path opacity=\".5\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12.499 10.801a.5.5 0 01.835 0l2.698 4.098a.5.5 0 01-.418.775H10.22a.5.5 0 01-.417-.775l2.697-4.098z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.07 8.934a.5.5 0 01.824 0l4.08 5.958a.5.5 0 01-.412.782h-8.16a.5.5 0 01-.413-.782l4.08-5.958zM13.75 8.333a2.083 2.083 0 100-4.166 2.083 2.083 0 000 4.166z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerPhone = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <path fill=\"${fg}\" d=\"M3 3h14v14H3z\"/>\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2zm-7.24 9.78h1.23c.15 0 .27.06.36.18l.98 1.28a.43.43 0 0 1-.05.58l-1.2 1.21a.45.45 0 0 1-.6.04A6.72 6.72 0 0 1 7.33 10c0-.61.1-1.2.25-1.78a6.68 6.68 0 0 1 2.12-3.3.44.44 0 0 1 .6.04l1.2 1.2c.16.17.18.42.05.59l-.98 1.29a.43.43 0 0 1-.36.17H8.98A5.38 5.38 0 0 0 8.67 10c0 .62.11 1.23.3 1.79z\" fill=\"${bg}\"/>\n </svg>`;\n};\nvar headerMarkdown = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2z\" fill=\"${bg}\"/>\n <path d=\"m13.49 13.15-2.32-3.27h1.4V7h1.86v2.88h1.4l-2.34 3.27zM11 13H9v-3l-1.5 1.92L6 10v3H4V7h2l1.5 2L9 7h2v6z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerDate = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n <path d=\"M14.8 4.182h-.6V3H13v1.182H7V3H5.8v1.182h-.6c-.66 0-1.2.532-1.2 1.182v9.454C4 15.468 4.54 16 5.2 16h9.6c.66 0 1.2-.532 1.2-1.182V5.364c0-.65-.54-1.182-1.2-1.182zm0 10.636H5.2V7.136h9.6v7.682z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerTime = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2z\" fill=\"${bg}\"/>\n <path d=\"M10 4a6 6 0 0 0-6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0-6-6zm0 10.8A4.8 4.8 0 0 1 5.2 10a4.8 4.8 0 1 1 4.8 4.8z\" fill=\"${fg}\"/>\n <path d=\"M10 7H9v3.93L12.5 13l.5-.8-3-1.76V7z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerEmail = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10 8.643a1.357 1.357 0 100 2.714 1.357 1.357 0 000-2.714zM7.357 10a2.643 2.643 0 115.286 0 2.643 2.643 0 01-5.286 0z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.589 4.898A5.643 5.643 0 0115.643 10v.5a2.143 2.143 0 01-4.286 0V8a.643.643 0 011.286 0v2.5a.857.857 0 001.714 0V10a4.357 4.357 0 10-1.708 3.46.643.643 0 01.782 1.02 5.643 5.643 0 11-5.842-9.582z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerReference = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <rect x=\"2\" y=\"8\" width=\"10\" height=\"8\" rx=\"2\" fill=\"${bg}\"/>\n <rect x=\"8\" y=\"4\" width=\"10\" height=\"8\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M10.68 7.73V6l2.97 3.02-2.97 3.02v-1.77c-2.13 0-3.62.7-4.68 2.2.43-2.15 1.7-4.31 4.68-4.74z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerIfThenElse = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path fill=\"${fg}\" d=\"M4 3h12v14H4z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.6 2A1.6 1.6 0 002 3.6v12.8A1.6 1.6 0 003.6 18h12.8a1.6 1.6 0 001.6-1.6V3.6A1.6 1.6 0 0016.4 2H3.6zm11.3 10.8a.7.7 0 01.7.7v1.4a.7.7 0 01-.7.7h-1.4a.7.7 0 01-.7-.7v-1.4a.7.7 0 01.6-.693.117.117 0 00.1-.115V10.35a.117.117 0 00-.117-.116h-2.8a.117.117 0 00-.117.116v2.333c0 .064.053.117.117.117h.117a.7.7 0 01.7.7v1.4a.7.7 0 01-.7.7H9.3a.7.7 0 01-.7-.7v-1.4a.7.7 0 01.7-.7h.117a.117.117 0 00.117-.117V10.35a.117.117 0 00-.117-.117h-2.8a.117.117 0 00-.117.117v2.342c0 .058.042.106.1.115a.7.7 0 01.6.693v1.4a.7.7 0 01-.7.7H5.1a.7.7 0 01-.7-.7v-1.4a.7.7 0 01.7-.7h.35a.116.116 0 00.116-.117v-2.45c0-.515.418-.933.934-.933h2.917a.117.117 0 00.117-.117V6.85a.117.117 0 00-.117-.116h-2.45a.7.7 0 01-.7-.7V5.1a.7.7 0 01.7-.7h6.067a.7.7 0 01.7.7v.934a.7.7 0 01-.7.7h-2.45a.117.117 0 00-.118.116v2.333c0 .064.053.117.117.117H13.5c.516 0 .934.418.934.934v2.45c0 .063.052.116.116.116h.35z\" fill=\"${bg}\"/>\n</svg>`;\n};\nvar headerSingleValue = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M9.98 13.33c.45 0 .74-.3.73-.75l-.01-.1-.16-1.67 1.45 1.05a.81.81 0 0 0 .5.18c.37 0 .72-.32.72-.76 0-.3-.17-.54-.49-.68l-1.63-.77 1.63-.77c.32-.14.49-.37.49-.67 0-.45-.34-.76-.71-.76a.81.81 0 0 0-.5.18l-1.47 1.03.16-1.74.01-.08c.01-.46-.27-.76-.72-.76-.46 0-.76.32-.75.76l.01.08.16 1.74-1.47-1.03a.77.77 0 0 0-.5-.18.74.74 0 0 0-.72.76c0 .3.17.53.49.67l1.63.77-1.62.77c-.32.14-.5.37-.5.68 0 .44.35.75.72.75a.78.78 0 0 0 .5-.17L9.4 10.8l-.16 1.68v.09c-.02.44.28.75.74.75z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerLookup = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M8 5.83H5.83a.83.83 0 0 0 0 1.67h1.69A4.55 4.55 0 0 1 8 5.83zm-.33 3.34H5.83a.83.83 0 0 0 0 1.66h2.72a4.57 4.57 0 0 1-.88-1.66zM5.83 12.5a.83.83 0 0 0 0 1.67h7.5a.83.83 0 1 0 0-1.67h-7.5zm8.8-2.9a3.02 3.02 0 0 0 .46-1.6c0-1.66-1.32-3-2.94-3C10.52 5 9.2 6.34 9.2 8s1.31 3 2.93 3c.58 0 1.11-.17 1.56-.47l2.04 2.08.93-.94-2.04-2.08zm-2.48.07c-.9 0-1.63-.75-1.63-1.67s.73-1.67 1.63-1.67c.9 0 1.63.75 1.63 1.67s-.73 1.67-1.63 1.67z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerTextTemplate = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M7.676 4.726V3l2.976 3.021-2.976 3.022v-1.77c-2.125 0-3.613.69-4.676 2.201.425-2.158 1.7-4.316 4.676-4.748zM10.182 14.4h3.636l.655 1.6H16l-3.454-8h-1.091L8 16h1.527l.655-1.6zM12 9.44l1.36 3.65h-2.72L12 9.44z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerMath = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.167 5.417a.833.833 0 100 1.666h4.166a.833.833 0 100-1.666H4.167z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.083 4.167a.833.833 0 10-1.666 0v4.166a.833.833 0 101.666 0V4.167zM11.667 5.417a.833.833 0 100 1.666h4.166a.833.833 0 100-1.666h-4.166zM5.367 11.688a.833.833 0 00-1.179 1.179l2.947 2.946a.833.833 0 001.178-1.178l-2.946-2.947z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.313 12.867a.833.833 0 10-1.178-1.179l-2.947 2.947a.833.833 0 101.179 1.178l2.946-2.946z\" fill=\"${fg}\"/>\n <path d=\"M10.833 12.5c0-.46.373-.833.834-.833h4.166a.833.833 0 110 1.666h-4.166a.833.833 0 01-.834-.833zM10.833 15c0-.46.373-.833.834-.833h4.166a.833.833 0 110 1.666h-4.166a.833.833 0 01-.834-.833z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerRollup = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <path d=\"M16.22 2H3.78C2.8 2 2 2.8 2 3.78v12.44C2 17.2 2.8 18 3.78 18h12.44c.98 0 1.77-.8 1.77-1.78L18 3.78C18 2.8 17.2 2 16.22 2z\" fill=\"${bg}\"/>\n <path d=\"M10 8.84a1.16 1.16 0 1 0 0 2.32 1.16 1.16 0 0 0 0-2.32zm3.02 3.61a3.92 3.92 0 0 0 .78-3.28.49.49 0 1 0-.95.2c.19.87-.02 1.78-.58 2.47a2.92 2.92 0 1 1-4.13-4.08 2.94 2.94 0 0 1 2.43-.62.49.49 0 1 0 .17-.96 3.89 3.89 0 1 0 2.28 6.27zM10 4.17a5.84 5.84 0 0 0-5.44 7.93.49.49 0 1 0 .9-.35 4.86 4.86 0 1 1 2.5 2.67.49.49 0 1 0-.4.88c.76.35 1.6.54 2.44.53a5.83 5.83 0 0 0 0-11.66zm3.02 3.5a.7.7 0 1 0-1.4 0 .7.7 0 0 0 1.4 0zm-6.97 5.35a.7.7 0 1 1 0 1.4.7.7 0 0 1 0-1.4z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerJoinStrings = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M12.4 13.565c1.865-.545 3.645-2.083 3.645-4.396 0-1.514-.787-2.604-2.071-2.604C12.69 6.565 12 7.63 12 8.939c1.114.072 1.865.726 1.865 1.683 0 .933-.8 1.647-1.84 2.023l.375.92zM4 5h6v2H4zM4 9h5v2H4zM4 13h4v2H4z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerSplitString = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n ${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path d=\"M12.4 13.56c1.86-.54 3.65-2.08 3.65-4.4 0-1.5-.8-2.6-2.08-2.6S12 7.64 12 8.95c1.11.07 1.86.73 1.86 1.68 0 .94-.8 1.65-1.83 2.03l.37.91zM4 5h6v2H4zm0 4h5v2H4zm0 4h4v2H4z\" fill=\"${fg}\"/>\n </svg>`;\n};\nvar headerGeoDistance = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <path d=\"M16.222 2H3.778C2.8 2 2 2.8 2 3.778v12.444C2 17.2 2.8 18 3.778 18h12.444c.978 0 1.77-.8 1.77-1.778L18 3.778C18 2.8 17.2 2 16.222 2z\" fill=\"${bg}\"/>\n <path d=\"M10 7a1 1 0 100-2v2zm0 6a1 1 0 100 2v-2zm0-8H7v2h3V5zm-3 6h5V9H7v2zm5 2h-2v2h2v-2zm1-1a1 1 0 01-1 1v2a3 3 0 003-3h-2zm-1-1a1 1 0 011 1h2a3 3 0 00-3-3v2zM4 8a3 3 0 003 3V9a1 1 0 01-1-1H4zm3-3a3 3 0 00-3 3h2a1 1 0 011-1V5z\" fill=\"${fg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.856 12.014a.5.5 0 00-.712.702L5.409 14l-1.265 1.284a.5.5 0 00.712.702l1.255-1.274 1.255 1.274a.5.5 0 00.712-.702L6.813 14l1.265-1.284a.5.5 0 00-.712-.702L6.11 13.288l-1.255-1.274zM12.856 4.014a.5.5 0 00-.712.702L13.409 6l-1.265 1.284a.5.5 0 10.712.702l1.255-1.274 1.255 1.274a.5.5 0 10.712-.702L14.813 6l1.265-1.284a.5.5 0 00-.712-.702L14.11 5.288l-1.255-1.274z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar headerArray = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `${iconHead}\n <rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" fill=\"${bg}\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.25 7.25a.75.75 0 000-1.5h-6.5a.75.75 0 100 1.5h6.5zM15 10a.75.75 0 01-.75.75h-6.5a.75.75 0 010-1.5h6.5A.75.75 0 0115 10zm-.75 4.25a.75.75 0 000-1.5h-6.5a.75.75 0 000 1.5h6.5zm-8.987-7a.75.75 0 100-1.5.75.75 0 000 1.5zm.75 2.75a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm-.75 4.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" fill=\"${fg}\"/>\n</svg>`;\n};\nvar rowOwnerOverlay = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n <svg width=\"18\" height=\"18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 15v1h14v-2.5c0-.87-.44-1.55-.98-2.04a6.19 6.19 0 0 0-1.9-1.14 12.1 12.1 0 0 0-2.48-.67A4 4 0 1 0 5 6a4 4 0 0 0 2.36 3.65c-.82.13-1.7.36-2.48.67-.69.28-1.37.65-1.9 1.13A2.8 2.8 0 0 0 2 13.5V15z\" fill=\"${bg}\" stroke=\"${fg}\" stroke-width=\"2\"/>\n </svg>`;\n};\nvar protectedColumnOverlay = (props) => {\n const fg = props.fgColor;\n const bg = props.bgColor;\n return `\n <svg width=\"18\" height=\"18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12.43 6.04v-.18a3.86 3.86 0 0 0-7.72 0v.18A2.15 2.15 0 0 0 3 8.14v5.72C3 15.04 3.96 16 5.14 16H12c1.18 0 2.14-.96 2.14-2.14V8.14c0-1.03-.73-1.9-1.71-2.1zM7.86 6v-.14a.71.71 0 1 1 1.43 0V6H7.86z\" fill=\"${bg}\" stroke=\"${fg}\" stroke-width=\"2\"/>\n </svg>\n`;\n};\nvar sprites = {\n headerRowID,\n headerNumber,\n headerCode,\n headerString,\n headerBoolean,\n headerAudioUri,\n headerVideoUri,\n headerEmoji,\n headerImage,\n headerUri,\n headerPhone,\n headerMarkdown,\n headerDate,\n headerTime,\n headerEmail,\n headerReference,\n headerIfThenElse,\n headerSingleValue,\n headerLookup,\n headerTextTemplate,\n headerMath,\n headerRollup,\n headerJoinStrings,\n headerSplitString,\n headerGeoDistance,\n headerArray,\n rowOwnerOverlay,\n protectedColumnOverlay,\n renameIcon\n};\n\n// src/data-grid/data-grid-sprites.ts\nfunction getColors(variant, theme) {\n if (variant === \"normal\") {\n return [theme.bgIconHeader, theme.fgIconHeader];\n } else if (variant === \"selected\") {\n return [\"white\", theme.accentColor];\n } else {\n return [theme.accentColor, theme.bgHeader];\n }\n}\nvar SpriteManager = class {\n constructor(headerIcons, onSettled) {\n this.spriteMap = /* @__PURE__ */ new Map();\n this.inFlight = 0;\n this.onSettled = onSettled;\n this.headerIcons = {\n ...sprites,\n ...headerIcons\n };\n }\n drawSprite(sprite, variant, ctx, x, y, size, theme, alpha = 1) {\n const [bgColor, fgColor] = getColors(variant, theme);\n const rSize = size * Math.ceil(window.devicePixelRatio);\n const key = `${bgColor}_${fgColor}_${rSize}_${sprite}`;\n let spriteCanvas = this.spriteMap.get(key);\n if (spriteCanvas === void 0) {\n const spriteCb = this.headerIcons[sprite];\n if (spriteCb === void 0)\n return;\n spriteCanvas = document.createElement(\"canvas\");\n const spriteCtx = spriteCanvas.getContext(\"2d\");\n if (spriteCtx === null)\n return;\n const imgSource = new Image();\n imgSource.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(spriteCb({ fgColor, bgColor }))}`;\n this.spriteMap.set(key, spriteCanvas);\n const promise = imgSource.decode();\n if (promise === void 0)\n return;\n this.inFlight++;\n promise.then(() => {\n spriteCtx.drawImage(imgSource, 0, 0, rSize, rSize);\n }).finally(() => {\n this.inFlight--;\n if (this.inFlight === 0) {\n this.onSettled();\n }\n });\n } else {\n if (alpha < 1) {\n ctx.globalAlpha = alpha;\n }\n ctx.drawImage(spriteCanvas, 0, 0, rSize, rSize, x, y, size, size);\n if (alpha < 1) {\n ctx.globalAlpha = 1;\n }\n }\n }\n};\n\n// src/data-grid/data-grid.tsx\nimport clamp2 from \"lodash/clamp.js\";\nimport makeRange from \"lodash/range.js\";\n\n// src/data-grid/data-grid-render.tsx\nimport groupBy from \"lodash/groupBy.js\";\n\n// src/data-grid/color-parser.ts\nvar cache = {};\nvar div = null;\nfunction createDiv() {\n const d = document.createElement(\"div\");\n d.style.opacity = \"0\";\n d.style.pointerEvents = \"none\";\n d.style.position = \"fixed\";\n document.body.append(d);\n return d;\n}\nfunction parseToRgba(color) {\n const normalizedColor = color.toLowerCase().trim();\n if (cache[normalizedColor] !== void 0)\n return cache[normalizedColor];\n div = div || createDiv();\n div.style.color = \"#000\";\n div.style.color = normalizedColor;\n const control = getComputedStyle(div).color;\n div.style.color = \"#fff\";\n div.style.color = normalizedColor;\n const computedColor = getComputedStyle(div).color;\n if (computedColor !== control)\n return [0, 0, 0, 1];\n let result = computedColor.replace(/[^\\d.,]/g, \"\").split(\",\").map(Number.parseFloat);\n if (result.length < 4) {\n result.push(1);\n }\n result = result.map((x) => {\n const isNaN = Number.isNaN(x);\n if (isNaN) {\n console.warn(\"Could not parse color\", color);\n }\n return isNaN ? 0 : x;\n });\n cache[normalizedColor] = result;\n return result;\n}\nfunction withAlpha(color, alpha) {\n const [r, g, b] = parseToRgba(color);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\nfunction blend(color, background) {\n if (background === void 0)\n return color;\n const [r, g, b, a] = parseToRgba(color);\n if (a === 1)\n return color;\n const [br, bg, bb, ba] = parseToRgba(background);\n const ao = a + ba * (1 - a);\n const ro = (a * r + ba * br * (1 - a)) / ao;\n const go = (a * g + ba * bg * (1 - a)) / ao;\n const bo = (a * b + ba * bb * (1 - a)) / ao;\n return `rgba(${ro}, ${go}, ${bo}, ${ao})`;\n}\nfunction interpolateColors(leftColor, rightColor, val) {\n if (val <= 0)\n return leftColor;\n if (val >= 1)\n return rightColor;\n const left = [...parseToRgba(leftColor)];\n left[0] = left[0] * left[3];\n left[1] = left[1] * left[3];\n left[2] = left[2] * left[3];\n const right = [...parseToRgba(rightColor)];\n right[0] = right[0] * right[3];\n right[1] = right[1] * right[3];\n right[2] = right[2] * right[3];\n const hScaler = val;\n const nScaler = 1 - val;\n const a = left[3] * nScaler + right[3] * hScaler;\n const r = Math.floor((left[0] * nScaler + right[0] * hScaler) / a);\n const g = Math.floor((left[1] * nScaler + right[1] * hScaler) / a);\n const b = Math.floor((left[2] * nScaler + right[2] * hScaler) / a);\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n\n// src/data-grid/data-grid-render.tsx\nvar loadingCell = {\n kind: GridCellKind.Loading,\n allowOverlay: false\n};\nfunction drawCell(ctx, row, cell, col, x, y, w, h, highlighted, theme, drawCustomCell, imageLoader, spriteManager, hoverAmount, hoverInfo, hyperWrapping, frameTime, lastPrep, enqueue, getCellRenderer) {\n let hoverX;\n let hoverY;\n if (hoverInfo !== void 0 && hoverInfo[0][0] === col && hoverInfo[0][1] === row) {\n hoverX = hoverInfo[1][0];\n hoverY = hoverInfo[1][1];\n }\n let result = void 0;\n const args = {\n ctx,\n theme,\n col,\n row,\n cell,\n rect: { x, y, width: w, height: h },\n highlighted,\n hoverAmount,\n hoverX,\n hoverY,\n imageLoader,\n spriteManager,\n hyperWrapping,\n requestAnimationFrame: () => {\n forceAnim = true;\n }\n };\n let forceAnim = false;\n const needsAnim = drawWithLastUpdate(args, cell.lastUpdated, frameTime, lastPrep, () => {\n var _a, _b;\n const drawn = isInnerOnlyCell(cell) ? false : (drawCustomCell == null ? void 0 : drawCustomCell(args)) === true;\n if (!drawn) {\n const r = getCellRenderer(cell);\n if (r !== void 0) {\n if ((lastPrep == null ? void 0 : lastPrep.renderer) !== r) {\n (_a = lastPrep == null ? void 0 : lastPrep.deprep) == null ? void 0 : _a.call(lastPrep, args);\n lastPrep = void 0;\n }\n const partialPrepResult = (_b = r.drawPrep) == null ? void 0 : _b.call(r, args, lastPrep);\n r.draw(args, cell);\n result = {\n deprep: partialPrepResult == null ? void 0 : partialPrepResult.deprep,\n fillStyle: partialPrepResult == null ? void 0 : partialPrepResult.fillStyle,\n font: partialPrepResult == null ? void 0 : partialPrepResult.font,\n renderer: r\n };\n }\n }\n });\n if (needsAnim || forceAnim)\n enqueue == null ? void 0 : enqueue([col, row]);\n return result;\n}\nfunction blitLastFrame(ctx, canvas, last, cellXOffset, cellYOffset, translateX, translateY, lastRowSticky, width, height, rows, totalHeaderHeight, dpr, mappedColumns, effectiveCols, getRowHeight, doubleBuffer) {\n const drawRegions = [];\n let blittedYOnly = false;\n ctx.imageSmoothingEnabled = false;\n const minY = Math.min(last.cellYOffset, cellYOffset);\n const maxY = Math.max(last.cellYOffset, cellYOffset);\n let deltaY = 0;\n if (typeof getRowHeight === \"number\") {\n deltaY += (maxY - minY) * getRowHeight;\n } else {\n for (let i = minY; i < maxY; i++) {\n deltaY += getRowHeight(i);\n }\n }\n if (cellYOffset > last.cellYOffset) {\n deltaY = -deltaY;\n }\n deltaY += translateY - last.translateY;\n const minX = Math.min(last.cellXOffset, cellXOffset);\n const maxX = Math.max(last.cellXOffset, cellXOffset);\n let deltaX = 0;\n for (let i = minX; i < maxX; i++) {\n deltaX += mappedColumns[i].width;\n }\n if (cellXOffset > last.cellXOffset) {\n deltaX = -deltaX;\n }\n deltaX += translateX - last.translateX;\n let stickyWidth = getStickyWidth(effectiveCols);\n if (stickyWidth > 0)\n stickyWidth++;\n if (deltaX !== 0 && deltaY !== 0) {\n return {\n regions: [],\n yOnly: false\n };\n }\n const stickyRowHeight = lastRowSticky ? typeof getRowHeight === \"number\" ? getRowHeight : getRowHeight(rows - 1) : 0;\n const blitWidth = width - stickyWidth - Math.abs(deltaX);\n const blitHeight = height - totalHeaderHeight - stickyRowHeight - Math.abs(deltaY) - 1;\n if (blitWidth > 150 && blitHeight > 150) {\n blittedYOnly = deltaX === 0;\n const args = {\n sx: 0,\n sy: 0,\n sw: width * dpr,\n sh: height * dpr,\n dx: 0,\n dy: 0,\n dw: width * dpr,\n dh: height * dpr\n };\n if (deltaY > 0) {\n args.sy = (totalHeaderHeight + 1) * dpr;\n args.sh = blitHeight * dpr;\n args.dy = (deltaY + totalHeaderHeight + 1) * dpr;\n args.dh = blitHeight * dpr;\n drawRegions.push({\n x: 0,\n y: totalHeaderHeight,\n width,\n height: deltaY + 1\n });\n } else if (deltaY < 0) {\n args.sy = (-deltaY + totalHeaderHeight + 1) * dpr;\n args.sh = blitHeight * dpr;\n args.dy = (totalHeaderHeight + 1) * dpr;\n args.dh = blitHeight * dpr;\n drawRegions.push({\n x: 0,\n y: height + deltaY - stickyRowHeight,\n width,\n height: -deltaY + stickyRowHeight\n });\n }\n if (deltaX > 0) {\n args.sx = stickyWidth * dpr;\n args.sw = blitWidth * dpr;\n args.dx = (deltaX + stickyWidth) * dpr;\n args.dw = blitWidth * dpr;\n drawRegions.push({\n x: stickyWidth - 1,\n y: 0,\n width: deltaX + 2,\n // extra width to account for first col not drawing a left side border\n height\n });\n } else if (deltaX < 0) {\n args.sx = (stickyWidth - deltaX) * dpr;\n args.sw = blitWidth * dpr;\n args.dx = stickyWidth * dpr;\n args.dw = blitWidth * dpr;\n drawRegions.push({\n x: width + deltaX,\n y: 0,\n width: -deltaX,\n height\n });\n }\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n if (stickyWidth > 0 && deltaX !== 0 && deltaY === 0 && doubleBuffer) {\n ctx.drawImage(canvas, 0, 0, stickyWidth * dpr, height * dpr, 0, 0, stickyWidth * dpr, height * dpr);\n }\n ctx.drawImage(canvas, args.sx, args.sy, args.sw, args.sh, args.dx, args.dy, args.dw, args.dh);\n ctx.scale(dpr, dpr);\n }\n ctx.imageSmoothingEnabled = true;\n return {\n regions: drawRegions,\n yOnly: blittedYOnly\n };\n}\nfunction blitResizedCol(last, cellXOffset, cellYOffset, translateX, translateY, width, height, totalHeaderHeight, effectiveCols, resizedIndex) {\n const drawRegions = [];\n if (cellXOffset !== last.cellXOffset || cellYOffset !== last.cellYOffset || translateX !== last.translateX || translateY !== last.translateY) {\n return drawRegions;\n }\n walkColumns(effectiveCols, cellYOffset, translateX, translateY, totalHeaderHeight, (c, drawX, _drawY, clipX) => {\n if (c.sourceIndex === resizedIndex) {\n const x = Math.max(drawX, clipX) + 1;\n drawRegions.push({\n x,\n y: 0,\n width: width - x,\n height\n });\n return true;\n }\n });\n return drawRegions;\n}\nfunction drawGridLines(ctx, effectiveCols, cellYOffset, translateX, translateY, width, height, drawRegions, spans, groupHeaderHeight, totalHeaderHeight, getRowHeight, getRowThemeOverride, verticalBorder, trailingRowType, rows, theme, verticalOnly = false) {\n var _a, _b, _c;\n if (spans !== void 0) {\n ctx.beginPath();\n ctx.save();\n ctx.rect(0, 0, width, height);\n for (const span of spans) {\n ctx.rect(span.x + 1, span.y + 1, span.width - 1, span.height - 1);\n }\n ctx.clip(\"evenodd\");\n }\n const hColor = (_a = theme.horizontalBorderColor) != null ? _a : theme.borderColor;\n const vColor = theme.borderColor;\n let minX = 0;\n let maxX = width;\n let minY = 0;\n let maxY = height;\n if (drawRegions !== void 0 && drawRegions.length > 0) {\n minX = Number.MAX_SAFE_INTEGER;\n minY = Number.MAX_SAFE_INTEGER;\n maxX = Number.MIN_SAFE_INTEGER;\n maxY = Number.MIN_SAFE_INTEGER;\n for (const r of drawRegions) {\n minX = Math.min(minX, r.x - 1);\n maxX = Math.max(maxX, r.x + r.width + 1);\n minY = Math.min(minY, r.y - 1);\n maxY = Math.max(maxY, r.y + r.height + 1);\n }\n }\n const toDraw = [];\n ctx.beginPath();\n let x = 0.5;\n for (let index = 0; index < effectiveCols.length; index++) {\n const c = effectiveCols[index];\n if (c.width === 0)\n continue;\n x += c.width;\n const tx = c.sticky ? x : x + translateX;\n if (tx >= minX && tx <= maxX && verticalBorder(index + 1)) {\n toDraw.push({\n x1: tx,\n y1: Math.max(groupHeaderHeight, minY),\n x2: tx,\n y2: Math.min(height, maxY),\n color: vColor\n });\n }\n }\n const stickyHeight = getRowHeight(rows - 1);\n const stickyRowY = height - stickyHeight + 0.5;\n const lastRowSticky = trailingRowType === \"sticky\";\n if (lastRowSticky) {\n toDraw.push({ x1: minX, y1: stickyRowY, x2: maxX, y2: stickyRowY, color: hColor });\n }\n if (verticalOnly !== true) {\n let y = totalHeaderHeight + 0.5;\n let row = cellYOffset;\n const target = lastRowSticky ? height - stickyHeight : height;\n while (y + translateY <= target) {\n const ty = y + translateY;\n if (ty >= minY && ty <= maxY - 1 && (!lastRowSticky || row !== rows - 1 || Math.abs(ty - stickyRowY) > 1)) {\n const rowTheme = getRowThemeOverride == null ? void 0 : getRowThemeOverride(row);\n toDraw.push({\n x1: minX,\n y1: ty,\n x2: maxX,\n y2: ty,\n color: (_c = (_b = rowTheme == null ? void 0 : rowTheme.horizontalBorderColor) != null ? _b : rowTheme == null ? void 0 : rowTheme.borderColor) != null ? _c : hColor\n });\n }\n y += getRowHeight(row);\n row++;\n }\n }\n const groups = groupBy(toDraw, (line) => line.color);\n for (const g of Object.keys(groups)) {\n ctx.strokeStyle = g;\n for (const line of groups[g]) {\n ctx.moveTo(line.x1, line.y1);\n ctx.lineTo(line.x2, line.y2);\n }\n ctx.stroke();\n ctx.beginPath();\n }\n if (spans !== void 0) {\n ctx.restore();\n }\n}\nfunction getActionBoundsForGroup(box, actions) {\n const result = [];\n let x = box.x + box.width - 26 * actions.length;\n const y = box.y + box.height / 2 - 13;\n const height = 26;\n const width = 26;\n for (let i = 0; i < actions.length; i++) {\n result.push({\n x,\n y,\n width,\n height\n });\n x += 26;\n }\n return result;\n}\nfunction pointInRect(rect, x, y) {\n return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;\n}\nfunction drawGroups(ctx, effectiveCols, width, translateX, groupHeaderHeight, hovered, theme, spriteManager, _hoverValues, verticalBorder, getGroupDetails, damage) {\n var _a;\n const xPad = 8;\n const [hCol, hRow] = (_a = hovered == null ? void 0 : hovered[0]) != null ? _a : [];\n let finalX = 0;\n walkGroups(effectiveCols, width, translateX, groupHeaderHeight, (span, groupName, x, y, w, h) => {\n var _a2, _b;\n if (damage !== void 0 && !damage.some((d) => d[1] === -2 && d[0] >= span[0] && d[0] <= span[1]))\n return;\n ctx.save();\n ctx.beginPath();\n ctx.rect(x, y, w, h);\n ctx.clip();\n const group = getGroupDetails(groupName);\n const groupTheme = (group == null ? void 0 : group.overrideTheme) === void 0 ? theme : { ...theme, ...group.overrideTheme };\n const isHovered = hRow === -2 && hCol !== void 0 && hCol >= span[0] && hCol <= span[1];\n const fillColor = isHovered ? groupTheme.bgHeaderHovered : groupTheme.bgHeader;\n if (fillColor !== theme.bgHeader) {\n ctx.fillStyle = fillColor;\n ctx.fill();\n }\n ctx.fillStyle = (_a2 = groupTheme.textGroupHeader) != null ? _a2 : groupTheme.textHeader;\n if (group !== void 0) {\n let drawX = x;\n if (group.icon !== void 0) {\n spriteManager.drawSprite(\n group.icon,\n \"normal\",\n ctx,\n drawX + xPad,\n (groupHeaderHeight - 20) / 2,\n 20,\n groupTheme\n );\n drawX += 26;\n }\n ctx.fillText(\n group.name,\n drawX + xPad,\n groupHeaderHeight / 2 + getMiddleCenterBias(ctx, `${theme.headerFontStyle} ${theme.fontFamily}`)\n );\n if (group.actions !== void 0 && isHovered) {\n const actionBoxes = getActionBoundsForGroup({ x, y, width: w, height: h }, group.actions);\n ctx.beginPath();\n const fadeStartX = actionBoxes[0].x - 10;\n const fadeWidth = x + w - fadeStartX;\n ctx.rect(fadeStartX, 0, fadeWidth, groupHeaderHeight);\n const grad = ctx.createLinearGradient(fadeStartX, 0, fadeStartX + fadeWidth, 0);\n const trans = withAlpha(fillColor, 0);\n grad.addColorStop(0, trans);\n grad.addColorStop(10 / fadeWidth, fillColor);\n grad.addColorStop(1, fillColor);\n ctx.fillStyle = grad;\n ctx.fill();\n ctx.globalAlpha = 0.6;\n const [mouseX, mouseY] = (_b = hovered == null ? void 0 : hovered[1]) != null ? _b : [-1, -1];\n for (let i = 0; i < group.actions.length; i++) {\n const action = group.actions[i];\n const box = actionBoxes[i];\n const actionHovered = pointInRect(box, mouseX + x, mouseY);\n if (actionHovered) {\n ctx.globalAlpha = 1;\n }\n spriteManager.drawSprite(\n action.icon,\n \"normal\",\n ctx,\n box.x + box.width / 2 - 10,\n box.y + box.height / 2 - 10,\n 20,\n groupTheme\n );\n if (actionHovered) {\n ctx.globalAlpha = 0.6;\n }\n }\n ctx.globalAlpha = 1;\n }\n }\n if (x !== 0 && verticalBorder(span[0])) {\n ctx.beginPath();\n ctx.moveTo(x + 0.5, 0);\n ctx.lineTo(x + 0.5, groupHeaderHeight);\n ctx.strokeStyle = theme.borderColor;\n ctx.lineWidth = 1;\n ctx.stroke();\n }\n ctx.restore();\n finalX = x + w;\n });\n ctx.beginPath();\n ctx.moveTo(finalX + 0.5, 0);\n ctx.lineTo(finalX + 0.5, groupHeaderHeight);\n ctx.moveTo(0, groupHeaderHeight + 0.5);\n ctx.lineTo(width, groupHeaderHeight + 0.5);\n ctx.strokeStyle = theme.borderColor;\n ctx.lineWidth = 1;\n ctx.stroke();\n}\nvar menuButtonSize = 30;\nfunction getHeaderMenuBounds(x, y, width, height, isRtl) {\n if (isRtl)\n return { x, y, width: menuButtonSize, height: Math.min(menuButtonSize, height) };\n return {\n x: x + width - menuButtonSize,\n // right align\n y: Math.max(y, y + height / 2 - menuButtonSize / 2),\n // center vertically\n width: menuButtonSize,\n height: Math.min(menuButtonSize, height)\n };\n}\nfunction drawHeader(ctx, x, y, width, height, c, selected, theme, isHovered, hasSelectedCell, hoverAmount, spriteManager, drawHeaderCallback, touchMode) {\n const isCheckboxHeader = c.title.startsWith(headerCellCheckboxPrefix);\n const isRtl = direction(c.title) === \"rtl\";\n const menuBounds = getHeaderMenuBounds(x, y, width, height, isRtl);\n if (drawHeaderCallback !== void 0) {\n let passCol = c;\n if (isCheckboxHeader) {\n passCol = {\n ...c,\n title: \"\"\n };\n }\n if (drawHeaderCallback({\n ctx,\n theme,\n rect: { x, y, width, height },\n column: passCol,\n columnIndex: passCol.sourceIndex,\n isSelected: selected,\n hoverAmount,\n isHovered,\n hasSelectedCell,\n spriteManager,\n menuBounds\n })) {\n return;\n }\n }\n if (isCheckboxHeader) {\n let checked = void 0;\n if (c.title === headerCellCheckedMarker)\n checked = true;\n if (c.title === headerCellUnheckedMarker)\n checked = false;\n if (checked !== true) {\n ctx.globalAlpha = hoverAmount;\n }\n drawCheckbox(ctx, theme, checked, x, y, width, height, false, void 0, void 0, 18);\n if (checked !== true) {\n ctx.globalAlpha = 1;\n }\n return;\n }\n const xPad = theme.cellHorizontalPadding;\n const fillStyle = selected ? theme.textHeaderSelected : theme.textHeader;\n const shouldDrawMenu = c.hasMenu === true && (isHovered || touchMode && selected);\n const dirScalar = isRtl ? -1 : 1;\n let drawX = isRtl ? x + width - xPad : x + xPad;\n if (c.icon !== void 0) {\n let variant = selected ? \"selected\" : \"normal\";\n if (c.style === \"highlight\") {\n variant = selected ? \"selected\" : \"special\";\n }\n const headerSize = theme.headerIconSize;\n spriteManager.drawSprite(\n c.icon,\n variant,\n ctx,\n isRtl ? drawX - headerSize : drawX,\n y + (height - headerSize) / 2,\n headerSize,\n theme\n );\n if (c.overlayIcon !== void 0) {\n spriteManager.drawSprite(\n c.overlayIcon,\n selected ? \"selected\" : \"special\",\n ctx,\n isRtl ? drawX - headerSize + 9 : drawX + 9,\n y + ((height - 18) / 2 + 6),\n 18,\n theme\n );\n }\n drawX += Math.ceil(headerSize * 1.3) * dirScalar;\n }\n if (shouldDrawMenu && c.hasMenu === true && width > 35) {\n const fadeWidth = 35;\n const fadeStart = isRtl ? fadeWidth : width - fadeWidth;\n const fadeEnd = isRtl ? fadeWidth * 0.7 : width - fadeWidth * 0.7;\n const fadeStartPercent = fadeStart / width;\n const fadeEndPercent = fadeEnd / width;\n const grad = ctx.createLinearGradient(x, 0, x + width, 0);\n const trans = withAlpha(fillStyle, 0);\n grad.addColorStop(isRtl ? 1 : 0, fillStyle);\n grad.addColorStop(fadeStartPercent, fillStyle);\n grad.addColorStop(fadeEndPercent, trans);\n grad.addColorStop(isRtl ? 0 : 1, trans);\n ctx.fillStyle = grad;\n } else {\n ctx.fillStyle = fillStyle;\n }\n if (isRtl) {\n ctx.textAlign = \"right\";\n }\n ctx.fillText(\n c.title,\n drawX,\n y + height / 2 + getMiddleCenterBias(ctx, `${theme.headerFontStyle} ${theme.fontFamily}`)\n );\n if (isRtl) {\n ctx.textAlign = \"left\";\n }\n if (shouldDrawMenu && c.hasMenu === true) {\n ctx.beginPath();\n const triangleX = menuBounds.x + menuBounds.width / 2 - 5.5;\n const triangleY = menuBounds.y + menuBounds.height / 2 - 3;\n roundedPoly(\n ctx,\n [\n {\n x: triangleX,\n y: triangleY\n },\n {\n x: triangleX + 11,\n y: triangleY\n },\n {\n x: triangleX + 5.5,\n y: triangleY + 6\n }\n ],\n 1\n );\n ctx.fillStyle = fillStyle;\n ctx.fill();\n }\n}\nfunction drawGridHeaders(ctx, effectiveCols, enableGroups, hovered, width, translateX, headerHeight, groupHeaderHeight, dragAndDropState, isResizing, selection, outerTheme, spriteManager, hoverValues, verticalBorder, getGroupDetails, damage, drawHeaderCallback, touchMode) {\n var _a;\n const totalHeaderHeight = headerHeight + groupHeaderHeight;\n if (totalHeaderHeight <= 0)\n return;\n ctx.fillStyle = outerTheme.bgHeader;\n ctx.fillRect(0, 0, width, totalHeaderHeight);\n const [hCol, hRow] = (_a = hovered == null ? void 0 : hovered[0]) != null ? _a : [];\n const font = `${outerTheme.headerFontStyle} ${outerTheme.fontFamily}`;\n ctx.font = font;\n walkColumns(effectiveCols, 0, translateX, 0, totalHeaderHeight, (c, x, _y, clipX) => {\n var _a2, _b, _c;\n if (damage !== void 0 && !damage.some((d) => d[1] === -1 && d[0] === c.sourceIndex))\n return;\n const diff = Math.max(0, clipX - x);\n ctx.save();\n ctx.beginPath();\n ctx.rect(x + diff, groupHeaderHeight, c.width - diff, headerHeight);\n ctx.clip();\n const groupTheme = getGroupDetails((_a2 = c.group) != null ? _a2 : \"\").overrideTheme;\n const theme = c.themeOverride === void 0 && groupTheme === void 0 ? outerTheme : { ...outerTheme, ...groupTheme, ...c.themeOverride };\n if (theme.bgHeader !== outerTheme.bgHeader) {\n ctx.fillStyle = theme.bgHeader;\n ctx.fill();\n }\n const f = `${theme.headerFontStyle} ${theme.fontFamily}`;\n if (font !== f) {\n ctx.font = f;\n }\n const selected = selection.columns.hasIndex(c.sourceIndex);\n const noHover = dragAndDropState !== void 0 || isResizing;\n const hoveredBoolean = !noHover && hRow === -1 && hCol === c.sourceIndex;\n const hover = noHover ? 0 : (_c = (_b = hoverValues.find((s) => s.item[0] === c.sourceIndex && s.item[1] === -1)) == null ? void 0 : _b.hoverAmount) != null ? _c : 0;\n const hasSelectedCell = (selection == null ? void 0 : selection.current) !== void 0 && selection.current.cell[0] === c.sourceIndex;\n const bgFillStyle = selected ? theme.accentColor : hasSelectedCell ? theme.bgHeaderHasFocus : theme.bgHeader;\n const y = enableGroups ? groupHeaderHeight : 0;\n const xOffset = c.sourceIndex === 0 ? 0 : 1;\n if (selected) {\n ctx.fillStyle = bgFillStyle;\n ctx.fillRect(x + xOffset, y, c.width - xOffset, headerHeight);\n } else if (hasSelectedCell || hover > 0) {\n ctx.beginPath();\n ctx.rect(x + xOffset, y, c.width - xOffset, headerHeight);\n if (hasSelectedCell) {\n ctx.fillStyle = theme.bgHeaderHasFocus;\n ctx.fill();\n }\n if (hover > 0) {\n ctx.globalAlpha = hover;\n ctx.fillStyle = theme.bgHeaderHovered;\n ctx.fill();\n ctx.globalAlpha = 1;\n }\n }\n drawHeader(\n ctx,\n x,\n y,\n c.width,\n headerHeight,\n c,\n selected,\n theme,\n hoveredBoolean,\n hasSelectedCell,\n hover,\n spriteManager,\n drawHeaderCallback,\n touchMode\n );\n ctx.restore();\n });\n if (enableGroups) {\n drawGroups(\n ctx,\n effectiveCols,\n width,\n translateX,\n groupHeaderHeight,\n hovered,\n outerTheme,\n spriteManager,\n hoverValues,\n verticalBorder,\n getGroupDetails,\n damage\n );\n }\n}\nfunction intersectRect(x1, y1, w1, h1, x2, y2, w2, h2) {\n return x1 <= x2 + w2 && x2 <= x1 + w1 && y1 <= y2 + h2 && y2 <= y1 + h1;\n}\nfunction clipDamage(ctx, effectiveColumns, width, height, groupHeaderHeight, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, trailingRowType, damage, includeCells) {\n if (damage === void 0 || damage.length === 0)\n return;\n const stickyRowHeight = trailingRowType === \"sticky\" ? getRowHeight(rows - 1) : 0;\n ctx.beginPath();\n walkGroups(effectiveColumns, width, translateX, groupHeaderHeight, (span, _group, x, y, w, h) => {\n for (let i = 0; i < damage.length; i++) {\n const d = damage[i];\n if (d[1] === -2 && d[0] >= span[0] && d[0] <= span[1]) {\n ctx.rect(x, y, w, h);\n break;\n }\n }\n });\n walkColumns(\n effectiveColumns,\n cellYOffset,\n translateX,\n translateY,\n totalHeaderHeight,\n (c, drawX, colDrawY, clipX, startRow) => {\n const diff = Math.max(0, clipX - drawX);\n const finalX = drawX + diff + 1;\n const finalWidth = c.width - diff - 1;\n for (let i = 0; i < damage.length; i++) {\n const d = damage[i];\n if (d[0] === c.sourceIndex && (d[1] === -1 || d[1] === void 0)) {\n ctx.rect(finalX, groupHeaderHeight, finalWidth, totalHeaderHeight - groupHeaderHeight);\n break;\n }\n }\n if (!includeCells)\n return;\n walkRowsInCol(\n startRow,\n colDrawY,\n height,\n rows,\n getRowHeight,\n trailingRowType,\n (drawY, row, rh, isSticky) => {\n let isDamaged = false;\n for (let i = 0; i < damage.length; i++) {\n const d = damage[i];\n if (d[0] === c.sourceIndex && d[1] === row) {\n isDamaged = true;\n break;\n }\n }\n if (isDamaged) {\n const top = drawY + 1;\n const bottom = isSticky ? top + rh - 1 : Math.min(top + rh - 1, height - stickyRowHeight);\n const h = bottom - top;\n if (h > 0) {\n ctx.rect(finalX, top, finalWidth, h);\n }\n }\n }\n );\n }\n );\n ctx.clip();\n}\nfunction getSpanBounds(span, cellX, cellY, cellW, cellH, column, allColumns) {\n var _a, _b;\n const [startCol, endCol] = span;\n let frozenRect;\n let contentRect;\n const firstNonSticky = (_b = (_a = allColumns.find((x) => !x.sticky)) == null ? void 0 : _a.sourceIndex) != null ? _b : 0;\n if (endCol > firstNonSticky) {\n const renderFromCol = Math.max(startCol, firstNonSticky);\n let tempX = cellX;\n let tempW = cellW;\n for (let x = column.sourceIndex - 1; x >= renderFromCol; x--) {\n tempX -= allColumns[x].width;\n tempW += allColumns[x].width;\n }\n for (let x = column.sourceIndex + 1; x <= endCol; x++) {\n tempW += allColumns[x].width;\n }\n contentRect = {\n x: tempX,\n y: cellY,\n width: tempW,\n height: cellH\n };\n }\n if (firstNonSticky > startCol) {\n const renderToCol = Math.min(endCol, firstNonSticky - 1);\n let tempX = cellX;\n let tempW = cellW;\n for (let x = column.sourceIndex - 1; x >= startCol; x--) {\n tempX -= allColumns[x].width;\n tempW += allColumns[x].width;\n }\n for (let x = column.sourceIndex + 1; x <= renderToCol; x++) {\n tempW += allColumns[x].width;\n }\n frozenRect = {\n x: tempX,\n y: cellY,\n width: tempW,\n height: cellH\n };\n }\n return [frozenRect, contentRect];\n}\nfunction drawCells(ctx, effectiveColumns, allColumns, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, getCellContent, getGroupDetails, getRowThemeOverride, disabledRows, isFocused, drawFocus, trailingRowType, drawRegions, damage, selection, prelightCells, highlightRegions, drawCustomCell, imageLoader, spriteManager, hoverValues, hoverInfo, hyperWrapping, outerTheme, enqueue, getCellRenderer) {\n var _a;\n let toDraw = (_a = damage == null ? void 0 : damage.length) != null ? _a : Number.MAX_SAFE_INTEGER;\n const frameTime = performance.now();\n let font = `${outerTheme.baseFontStyle} ${outerTheme.fontFamily}`;\n ctx.font = font;\n let result;\n const handledSpans = /* @__PURE__ */ new Set();\n walkColumns(\n effectiveColumns,\n cellYOffset,\n translateX,\n translateY,\n totalHeaderHeight,\n (c, drawX, colDrawStartY, clipX, startRow) => {\n var _a2;\n const diff = Math.max(0, clipX - drawX);\n const colDrawX = drawX + diff;\n const colDrawY = totalHeaderHeight + 1;\n const colWidth = c.width - diff;\n const colHeight = height - totalHeaderHeight - 1;\n if (drawRegions.length > 0) {\n let found = false;\n for (let i = 0; i < drawRegions.length; i++) {\n const dr = drawRegions[i];\n if (intersectRect(colDrawX, colDrawY, colWidth, colHeight, dr.x, dr.y, dr.width, dr.height)) {\n found = true;\n break;\n }\n }\n if (!found)\n return;\n }\n const reclip = () => {\n ctx.save();\n ctx.beginPath();\n ctx.rect(colDrawX, colDrawY, colWidth, colHeight);\n ctx.clip();\n };\n const colSelected = selection.columns.hasIndex(c.sourceIndex);\n const groupTheme = getGroupDetails((_a2 = c.group) != null ? _a2 : \"\").overrideTheme;\n const colTheme = c.themeOverride === void 0 && groupTheme === void 0 ? outerTheme : { ...outerTheme, ...groupTheme, ...c.themeOverride };\n const colFont = `${colTheme.baseFontStyle} ${colTheme.fontFamily}`;\n if (colFont !== font) {\n font = colFont;\n ctx.font = colFont;\n }\n reclip();\n let prepResult = void 0;\n walkRowsInCol(\n startRow,\n colDrawStartY,\n height,\n rows,\n getRowHeight,\n trailingRowType,\n (drawY, row, rh, isSticky, isTrailingRow) => {\n var _a3, _b, _c, _d;\n if (row < 0)\n return;\n if (damage !== void 0) {\n let found = false;\n for (let i = 0; i < damage.length; i++) {\n const d = damage[i];\n if (d[0] === c.sourceIndex && d[1] === row) {\n found = true;\n break;\n }\n }\n if (!found)\n return;\n }\n if (drawRegions.length > 0) {\n let found = false;\n for (let i = 0; i < drawRegions.length; i++) {\n const dr = drawRegions[i];\n if (intersectRect(drawX, drawY, c.width, rh, dr.x, dr.y, dr.width, dr.height)) {\n found = true;\n break;\n }\n }\n if (!found)\n return;\n }\n const rowSelected = selection.rows.hasIndex(row);\n const rowDisabled = disabledRows.hasIndex(row);\n const cell = row < rows ? getCellContent([c.sourceIndex, row]) : loadingCell;\n let cellX = drawX;\n let cellWidth = c.width;\n let drawingSpan = false;\n let skipContents = false;\n if (cell.span !== void 0) {\n const [startCol, endCol] = cell.span;\n const spanKey = `${row},${startCol},${endCol},${c.sticky}`;\n if (!handledSpans.has(spanKey)) {\n const areas = getSpanBounds(cell.span, drawX, drawY, c.width, rh, c, allColumns);\n const area = c.sticky ? areas[0] : areas[1];\n if (!c.sticky && areas[0] !== void 0) {\n skipContents = true;\n }\n if (area !== void 0) {\n cellX = area.x;\n cellWidth = area.width;\n handledSpans.add(spanKey);\n ctx.restore();\n prepResult = void 0;\n ctx.save();\n ctx.beginPath();\n const d = Math.max(0, clipX - area.x);\n ctx.rect(area.x + d, drawY, area.width - d, rh);\n if (result === void 0) {\n result = [];\n }\n result.push({\n x: area.x + d,\n y: drawY,\n width: area.width - d,\n height: rh\n });\n ctx.clip();\n drawingSpan = true;\n }\n } else {\n toDraw--;\n return;\n }\n }\n const rowTheme = getRowThemeOverride == null ? void 0 : getRowThemeOverride(row);\n const trailingTheme = isTrailingRow && ((_a3 = c.trailingRowOptions) == null ? void 0 : _a3.themeOverride) !== void 0 ? (_b = c.trailingRowOptions) == null ? void 0 : _b.themeOverride : void 0;\n const theme = cell.themeOverride === void 0 && rowTheme === void 0 && trailingTheme === void 0 ? colTheme : { ...colTheme, ...rowTheme, ...trailingTheme, ...cell.themeOverride };\n ctx.beginPath();\n const cellIndex = [c.sourceIndex, row];\n const isSelected = cellIsSelected(cellIndex, cell, selection);\n let accentCount = cellIsInRange(cellIndex, cell, selection);\n const spanIsHighlighted = cell.span !== void 0 && selection.columns.some(\n (index) => cell.span !== void 0 && index >= cell.span[0] && index <= cell.span[1]\n );\n if (isSelected && !isFocused && drawFocus) {\n accentCount = 0;\n } else if (isSelected) {\n accentCount = Math.max(accentCount, 1);\n }\n if (spanIsHighlighted) {\n accentCount++;\n }\n if (!isSelected) {\n if (rowSelected)\n accentCount++;\n if (colSelected && !isSticky)\n accentCount++;\n }\n const bgCell = cell.kind === GridCellKind.Protected ? theme.bgCellMedium : theme.bgCell;\n let fill;\n if (isSticky || bgCell !== outerTheme.bgCell) {\n fill = blend(bgCell, fill);\n }\n if (accentCount > 0 || rowDisabled) {\n if (rowDisabled) {\n fill = blend(theme.bgHeader, fill);\n }\n for (let i = 0; i < accentCount; i++) {\n fill = blend(theme.accentLight, fill);\n }\n } else {\n if ((prelightCells == null ? void 0 : prelightCells.some((pre) => pre[0] === c.sourceIndex && pre[1] === row)) === true) {\n fill = blend(theme.bgSearchResult, fill);\n }\n }\n if (highlightRegions !== void 0) {\n for (const region of highlightRegions) {\n const r = region.range;\n if (r.x <= c.sourceIndex && c.sourceIndex < r.x + r.width && r.y <= row && row < r.y + r.height) {\n fill = blend(region.color, fill);\n }\n }\n }\n if (fill !== void 0) {\n ctx.fillStyle = fill;\n if (prepResult !== void 0) {\n prepResult.fillStyle = fill;\n }\n ctx.fillRect(cellX, drawY, cellWidth, rh);\n }\n if (cell.style === \"faded\") {\n ctx.globalAlpha = 0.6;\n }\n const hoverValue = hoverValues.find((hv) => hv.item[0] === c.sourceIndex && hv.item[1] === row);\n if (cellWidth > 10 && !skipContents) {\n const cellFont = `${theme.baseFontStyle} ${theme.fontFamily}`;\n if (cellFont !== font) {\n ctx.font = cellFont;\n font = cellFont;\n }\n prepResult = drawCell(\n ctx,\n row,\n cell,\n c.sourceIndex,\n cellX,\n drawY,\n cellWidth,\n rh,\n accentCount > 0,\n theme,\n drawCustomCell,\n imageLoader,\n spriteManager,\n (_c = hoverValue == null ? void 0 : hoverValue.hoverAmount) != null ? _c : 0,\n hoverInfo,\n hyperWrapping,\n frameTime,\n prepResult,\n enqueue,\n getCellRenderer\n );\n }\n if (cell.style === \"faded\") {\n ctx.globalAlpha = 1;\n }\n toDraw--;\n if (drawingSpan) {\n ctx.restore();\n (_d = prepResult == null ? void 0 : prepResult.deprep) == null ? void 0 : _d.call(prepResult, { ctx });\n prepResult = void 0;\n reclip();\n font = colFont;\n ctx.font = colFont;\n }\n return toDraw <= 0;\n }\n );\n ctx.restore();\n return toDraw <= 0;\n }\n );\n return result;\n}\nfunction drawBlanks(ctx, effectiveColumns, allColumns, width, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, getRowTheme, selectedRows, disabledRows, trailingRowType, drawRegions, damage, theme) {\n if (damage !== void 0 || effectiveColumns[effectiveColumns.length - 1] !== allColumns[effectiveColumns.length - 1])\n return;\n walkColumns(\n effectiveColumns,\n cellYOffset,\n translateX,\n translateY,\n totalHeaderHeight,\n (c, drawX, colDrawY, clipX, startRow) => {\n if (c !== effectiveColumns[effectiveColumns.length - 1])\n return;\n drawX += c.width;\n const x = Math.max(drawX, clipX);\n if (x > width)\n return;\n ctx.save();\n ctx.beginPath();\n ctx.rect(x, totalHeaderHeight + 1, 1e4, height - totalHeaderHeight - 1);\n ctx.clip();\n walkRowsInCol(\n startRow,\n colDrawY,\n height,\n rows,\n getRowHeight,\n trailingRowType,\n (drawY, row, rh, isSticky) => {\n if (!isSticky && drawRegions.length > 0 && !drawRegions.some(\n (dr) => intersectRect(drawX, drawY, 1e4, rh, dr.x, dr.y, dr.width, dr.height)\n )) {\n return;\n }\n const rowSelected = selectedRows.hasIndex(row);\n const rowDisabled = disabledRows.hasIndex(row);\n ctx.beginPath();\n const rowTheme = getRowTheme == null ? void 0 : getRowTheme(row);\n const blankTheme = rowTheme === void 0 ? theme : { ...theme, ...rowTheme };\n if (blankTheme.bgCell !== theme.bgCell) {\n ctx.fillStyle = blankTheme.bgCell;\n ctx.fillRect(drawX, drawY, 1e4, rh);\n }\n if (rowDisabled) {\n ctx.fillStyle = blankTheme.bgHeader;\n ctx.fillRect(drawX, drawY, 1e4, rh);\n }\n if (rowSelected) {\n ctx.fillStyle = blankTheme.accentLight;\n ctx.fillRect(drawX, drawY, 1e4, rh);\n }\n }\n );\n ctx.restore();\n }\n );\n}\nfunction overdrawStickyBoundaries(ctx, effectiveCols, width, height, lastRowSticky, rows, verticalBorder, getRowHeight, theme) {\n var _a;\n let drawFreezeBorder = false;\n for (const c of effectiveCols) {\n if (c.sticky)\n continue;\n drawFreezeBorder = verticalBorder(c.sourceIndex);\n break;\n }\n const hColor = (_a = theme.horizontalBorderColor) != null ? _a : theme.borderColor;\n const vColor = theme.borderColor;\n const drawX = drawFreezeBorder ? getStickyWidth(effectiveCols) : 0;\n if (drawX !== 0) {\n ctx.beginPath();\n ctx.moveTo(drawX + 0.5, 0);\n ctx.lineTo(drawX + 0.5, height);\n ctx.strokeStyle = blend(vColor, theme.bgCell);\n ctx.stroke();\n }\n if (lastRowSticky) {\n const h = getRowHeight(rows - 1);\n ctx.beginPath();\n ctx.moveTo(0, height - h + 0.5);\n ctx.lineTo(width, height - h + 0.5);\n ctx.strokeStyle = blend(hColor, theme.bgCell);\n ctx.stroke();\n }\n}\nfunction drawHighlightRings(ctx, width, height, cellXOffset, cellYOffset, translateX, translateY, mappedColumns, freezeColumns, headerHeight, groupHeaderHeight, rowHeight, lastRowSticky, rows, allHighlightRegions) {\n const highlightRegions = allHighlightRegions == null ? void 0 : allHighlightRegions.filter((x) => x.style !== \"no-outline\");\n if (highlightRegions === void 0 || highlightRegions.length === 0)\n return void 0;\n const drawRects = highlightRegions.map((h) => {\n var _a, _b, _c, _d, _e;\n const r = h.range;\n const topLeftBounds = computeBounds(\n r.x,\n r.y,\n width,\n height,\n groupHeaderHeight,\n headerHeight + groupHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n lastRowSticky,\n mappedColumns,\n rowHeight\n );\n if (r.width === 1 && r.height === 1) {\n if (r.x < freezeColumns) {\n return [{ color: h.color, style: (_a = h.style) != null ? _a : \"dashed\", rect: topLeftBounds }, void 0];\n }\n return [void 0, { color: h.color, style: (_b = h.style) != null ? _b : \"dashed\", rect: topLeftBounds }];\n }\n const bottomRightBounds = computeBounds(\n r.x + r.width - 1,\n r.y + r.height - 1,\n width,\n height,\n groupHeaderHeight,\n headerHeight + groupHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n lastRowSticky,\n mappedColumns,\n rowHeight\n );\n if (r.x < freezeColumns && r.x + r.width >= freezeColumns) {\n const freezeSectionRightBounds = computeBounds(\n freezeColumns - 1,\n r.y + r.height - 1,\n width,\n height,\n groupHeaderHeight,\n headerHeight + groupHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n lastRowSticky,\n mappedColumns,\n rowHeight\n );\n const unfreezeSectionleftBounds = computeBounds(\n freezeColumns,\n r.y + r.height - 1,\n width,\n height,\n groupHeaderHeight,\n headerHeight + groupHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n lastRowSticky,\n mappedColumns,\n rowHeight\n );\n return [\n {\n color: h.color,\n style: (_c = h.style) != null ? _c : \"dashed\",\n rect: {\n x: topLeftBounds.x,\n y: topLeftBounds.y,\n width: freezeSectionRightBounds.x + freezeSectionRightBounds.width - topLeftBounds.x,\n height: freezeSectionRightBounds.y + freezeSectionRightBounds.height - topLeftBounds.y\n }\n },\n {\n color: h.color,\n style: (_d = h.style) != null ? _d : \"dashed\",\n rect: {\n x: unfreezeSectionleftBounds.x,\n y: unfreezeSectionleftBounds.y,\n width: bottomRightBounds.x + bottomRightBounds.width - unfreezeSectionleftBounds.x,\n height: bottomRightBounds.y + bottomRightBounds.height - unfreezeSectionleftBounds.y\n }\n }\n ];\n } else {\n return [\n void 0,\n {\n color: h.color,\n style: (_e = h.style) != null ? _e : \"dashed\",\n rect: {\n x: topLeftBounds.x,\n y: topLeftBounds.y,\n width: bottomRightBounds.x + bottomRightBounds.width - topLeftBounds.x,\n height: bottomRightBounds.y + bottomRightBounds.height - topLeftBounds.y\n }\n }\n ];\n }\n });\n const stickyWidth = getStickyWidth(mappedColumns);\n const drawCb = () => {\n ctx.beginPath();\n ctx.save();\n let dashed = false;\n const setDashed = (dash) => {\n if (dashed === dash)\n return;\n ctx.setLineDash(dash ? [5, 3] : []);\n dashed = dash;\n };\n ctx.lineWidth = 1;\n for (const dr of drawRects) {\n const [s] = dr;\n if (s !== void 0 && intersectRect(0, 0, width, height, s.rect.x, s.rect.y, s.rect.width, s.rect.height)) {\n setDashed(s.style === \"dashed\");\n ctx.strokeStyle = withAlpha(s.color, 1);\n ctx.strokeRect(s.rect.x + 1, s.rect.y + 1, s.rect.width - 2, s.rect.height - 2);\n }\n }\n let clipped = false;\n for (const dr of drawRects) {\n const [, s] = dr;\n if (s !== void 0 && intersectRect(0, 0, width, height, s.rect.x, s.rect.y, s.rect.width, s.rect.height)) {\n setDashed(s.style === \"dashed\");\n if (!clipped && s.rect.x < stickyWidth) {\n ctx.rect(stickyWidth, 0, width, height);\n ctx.clip();\n clipped = true;\n }\n ctx.strokeStyle = withAlpha(s.color, 1);\n ctx.strokeRect(s.rect.x + 1, s.rect.y + 1, s.rect.width - 2, s.rect.height - 2);\n }\n }\n ctx.restore();\n };\n drawCb();\n return drawCb;\n}\nfunction drawFocusRing(ctx, width, height, cellYOffset, translateX, translateY, effectiveCols, allColumns, theme, totalHeaderHeight, selectedCell, getRowHeight, getCellContent, trailingRowType, fillHandle, rows) {\n var _a;\n if (selectedCell.current === void 0 || !effectiveCols.some((c) => {\n var _a2;\n return c.sourceIndex === ((_a2 = selectedCell.current) == null ? void 0 : _a2.cell[0]);\n }))\n return void 0;\n const [targetCol, targetRow] = selectedCell.current.cell;\n const cell = getCellContent(selectedCell.current.cell);\n const targetColSpan = (_a = cell.span) != null ? _a : [targetCol, targetCol];\n const isStickyRow = trailingRowType === \"sticky\" && targetRow === rows - 1;\n const stickRowHeight = trailingRowType === \"sticky\" && !isStickyRow ? getRowHeight(rows - 1) - 1 : 0;\n let drawCb = void 0;\n walkColumns(\n effectiveCols,\n cellYOffset,\n translateX,\n translateY,\n totalHeaderHeight,\n (col, drawX, colDrawY, clipX, startRow) => {\n if (col.sticky && targetCol > col.sourceIndex)\n return;\n if (col.sourceIndex < targetColSpan[0] || col.sourceIndex > targetColSpan[1]) {\n return;\n }\n walkRowsInCol(startRow, colDrawY, height, rows, getRowHeight, trailingRowType, (drawY, row, rh) => {\n if (row !== targetRow)\n return;\n let cellX = drawX;\n let cellWidth = col.width;\n if (cell.span !== void 0) {\n const areas = getSpanBounds(cell.span, drawX, drawY, col.width, rh, col, allColumns);\n const area = col.sticky ? areas[0] : areas[1];\n if (area !== void 0) {\n cellX = area.x;\n cellWidth = area.width;\n }\n }\n drawCb = () => {\n var _a2, _b, _c, _d;\n if (clipX > cellX && !col.sticky) {\n ctx.beginPath();\n ctx.rect(clipX, 0, width - clipX, height);\n ctx.clip();\n }\n ctx.beginPath();\n ctx.rect(cellX + 0.5, drawY + 0.5, cellWidth, rh);\n ctx.strokeStyle = (_b = (_a2 = col.themeOverride) == null ? void 0 : _a2.accentColor) != null ? _b : theme.accentColor;\n ctx.lineWidth = 1;\n ctx.stroke();\n if (fillHandle) {\n ctx.beginPath();\n ctx.rect(cellX + cellWidth - 4, drawY + rh - 4, 4, 4);\n ctx.fillStyle = (_d = (_c = col.themeOverride) == null ? void 0 : _c.accentColor) != null ? _d : theme.accentColor;\n ctx.fill();\n }\n };\n return true;\n });\n return true;\n }\n );\n if (drawCb === void 0)\n return void 0;\n const result = () => {\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, totalHeaderHeight, width, height - totalHeaderHeight - stickRowHeight);\n ctx.clip();\n drawCb == null ? void 0 : drawCb();\n ctx.restore();\n };\n result();\n return result;\n}\nfunction getLastRow(effectiveColumns, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, trailingRowType) {\n let result = 0;\n walkColumns(\n effectiveColumns,\n cellYOffset,\n translateX,\n translateY,\n totalHeaderHeight,\n (_c, __drawX, colDrawY, _clipX, startRow) => {\n walkRowsInCol(\n startRow,\n colDrawY,\n height,\n rows,\n getRowHeight,\n trailingRowType,\n (_drawY, row, _rh, isSticky) => {\n if (!isSticky) {\n result = Math.max(row, result);\n }\n }\n );\n return true;\n }\n );\n return result;\n}\nfunction computeCanBlit(current, last) {\n if (last === void 0)\n return false;\n if (current.width !== last.width || current.height !== last.height || current.theme !== last.theme || current.headerHeight !== last.headerHeight || current.rowHeight !== last.rowHeight || current.rows !== last.rows || current.getRowThemeOverride !== last.getRowThemeOverride || current.isFocused !== last.isFocused || current.isResizing !== last.isResizing || current.verticalBorder !== last.verticalBorder || current.getCellContent !== last.getCellContent || current.highlightRegions !== last.highlightRegions || current.selection !== last.selection || current.dragAndDropState !== last.dragAndDropState || current.prelightCells !== last.prelightCells || current.touchMode !== last.touchMode || current.scrolling !== last.scrolling) {\n return false;\n }\n if (current.mappedColumns !== last.mappedColumns) {\n if (current.mappedColumns.length > 100 || current.mappedColumns.length !== last.mappedColumns.length) {\n return false;\n }\n let resized;\n for (let i = 0; i < current.mappedColumns.length; i++) {\n const curCol = current.mappedColumns[i];\n const lastCol = last.mappedColumns[i];\n if (deepEqual(curCol, lastCol))\n continue;\n if (resized !== void 0)\n return false;\n if (curCol.width === lastCol.width)\n return false;\n const { width, ...curRest } = curCol;\n const { width: lastWidth, ...lastRest } = lastCol;\n if (!deepEqual(curRest, lastRest))\n return false;\n resized = i;\n }\n if (resized === void 0) {\n return true;\n }\n return resized;\n }\n return true;\n}\nfunction drawGrid(arg, lastArg) {\n var _a, _b;\n const {\n canvas,\n headerCanvas,\n width,\n height,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n mappedColumns,\n enableGroups,\n freezeColumns,\n dragAndDropState,\n theme,\n drawFocus,\n headerHeight,\n groupHeaderHeight,\n disabledRows,\n rowHeight,\n verticalBorder,\n isResizing,\n selection,\n fillHandle,\n lastRowSticky: trailingRowType,\n rows,\n getCellContent,\n getGroupDetails,\n getRowThemeOverride,\n isFocused,\n drawCustomCell,\n drawHeaderCallback,\n prelightCells,\n highlightRegions,\n imageLoader,\n lastBlitData,\n hoverValues,\n hyperWrapping,\n hoverInfo,\n spriteManager,\n scrolling,\n touchMode,\n enqueue,\n getCellRenderer,\n renderStrategy,\n bufferA,\n bufferB\n } = arg;\n let { damage } = arg;\n if (width === 0 || height === 0)\n return;\n const doubleBuffer = renderStrategy === \"double-buffer\";\n const dpr = scrolling ? 1 : Math.ceil((_a = window.devicePixelRatio) != null ? _a : 1);\n const canBlit = renderStrategy !== \"direct\" && computeCanBlit(arg, lastArg);\n if (canvas.width !== width * dpr || canvas.height !== height * dpr) {\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n canvas.style.width = width + \"px\";\n canvas.style.height = height + \"px\";\n }\n const overlayCanvas = headerCanvas;\n const totalHeaderHeight = enableGroups ? groupHeaderHeight + headerHeight : headerHeight;\n const overlayHeight = totalHeaderHeight + 1;\n if (overlayCanvas.width !== width * dpr || overlayCanvas.height !== overlayHeight * dpr) {\n overlayCanvas.width = width * dpr;\n overlayCanvas.height = overlayHeight * dpr;\n overlayCanvas.style.width = width + \"px\";\n overlayCanvas.style.height = overlayHeight + \"px\";\n }\n if (doubleBuffer && (bufferA.width !== width * dpr || bufferA.height !== height * dpr)) {\n bufferA.width = width * dpr;\n bufferA.height = height * dpr;\n }\n if (doubleBuffer && (bufferB.width !== width * dpr || bufferB.height !== height * dpr)) {\n bufferB.width = width * dpr;\n bufferB.height = height * dpr;\n }\n const last = lastBlitData.current;\n if (canBlit === true && cellXOffset === (last == null ? void 0 : last.cellXOffset) && cellYOffset === (last == null ? void 0 : last.cellYOffset) && translateX === (last == null ? void 0 : last.translateX) && translateY === (last == null ? void 0 : last.translateY))\n return;\n let mainCtx = null;\n if (doubleBuffer) {\n mainCtx = canvas.getContext(\"2d\", {\n alpha: false\n });\n }\n const overlayCtx = overlayCanvas.getContext(\"2d\", {\n alpha: false\n });\n let targetBuffer;\n if (!doubleBuffer) {\n targetBuffer = canvas;\n } else if (damage !== void 0) {\n targetBuffer = (last == null ? void 0 : last.lastBuffer) === \"b\" ? bufferB : bufferA;\n } else {\n targetBuffer = (last == null ? void 0 : last.lastBuffer) === \"b\" ? bufferA : bufferB;\n }\n const targetCtx = targetBuffer.getContext(\"2d\", {\n alpha: false\n });\n const blitSource = doubleBuffer ? targetBuffer === bufferA ? bufferB : bufferA : canvas;\n if (overlayCtx === null || targetCtx === null)\n return;\n const getRowHeight = typeof rowHeight === \"number\" ? () => rowHeight : rowHeight;\n overlayCtx.save();\n overlayCtx.beginPath();\n targetCtx.save();\n targetCtx.beginPath();\n overlayCtx.textBaseline = \"middle\";\n targetCtx.textBaseline = \"middle\";\n if (dpr !== 1) {\n overlayCtx.scale(dpr, dpr);\n targetCtx.scale(dpr, dpr);\n }\n const effectiveCols = getEffectiveColumns(mappedColumns, cellXOffset, width, dragAndDropState, translateX);\n let drawRegions = [];\n const mustDrawFocusOnHeader = drawFocus && ((_b = selection.current) == null ? void 0 : _b.cell[1]) === cellYOffset && translateY === 0;\n const drawHeaderTexture = () => {\n var _a2, _b2;\n drawGridHeaders(\n overlayCtx,\n effectiveCols,\n enableGroups,\n hoverInfo,\n width,\n translateX,\n headerHeight,\n groupHeaderHeight,\n dragAndDropState,\n isResizing,\n selection,\n theme,\n spriteManager,\n hoverValues,\n verticalBorder,\n getGroupDetails,\n damage,\n drawHeaderCallback,\n touchMode\n );\n drawGridLines(\n overlayCtx,\n effectiveCols,\n cellYOffset,\n translateX,\n translateY,\n width,\n height,\n void 0,\n void 0,\n groupHeaderHeight,\n totalHeaderHeight,\n getRowHeight,\n getRowThemeOverride,\n verticalBorder,\n trailingRowType,\n rows,\n theme,\n true\n );\n overlayCtx.beginPath();\n overlayCtx.moveTo(0, overlayHeight - 0.5);\n overlayCtx.lineTo(width, overlayHeight - 0.5);\n overlayCtx.strokeStyle = blend(\n (_b2 = (_a2 = theme.headerBottomBorderColor) != null ? _a2 : theme.horizontalBorderColor) != null ? _b2 : theme.borderColor,\n theme.bgHeader\n );\n overlayCtx.stroke();\n if (mustDrawFocusOnHeader) {\n drawFocusRing(\n overlayCtx,\n width,\n height,\n cellYOffset,\n translateX,\n translateY,\n effectiveCols,\n mappedColumns,\n theme,\n totalHeaderHeight,\n selection,\n getRowHeight,\n getCellContent,\n trailingRowType,\n fillHandle,\n rows\n );\n }\n };\n if (damage !== void 0) {\n let doHeaders = false;\n damage = damage.filter((x) => {\n doHeaders = doHeaders || x[1] < 0;\n return x[1] < 0 || intersectRect(cellXOffset, cellYOffset, effectiveCols.length, 300, x[0], x[1], 1, 1) || intersectRect(0, cellYOffset, freezeColumns, 300, x[0], x[1], 1, 1) || trailingRowType && intersectRect(cellXOffset, rows - 1, effectiveCols.length, 1, x[0], x[1], 1, 1);\n });\n if (damage.length > 0) {\n clipDamage(\n targetCtx,\n effectiveCols,\n width,\n height,\n groupHeaderHeight,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n trailingRowType,\n damage,\n true\n );\n targetCtx.fillStyle = theme.bgCell;\n targetCtx.fillRect(0, totalHeaderHeight + 1, width, height - totalHeaderHeight - 1);\n drawCells(\n targetCtx,\n effectiveCols,\n mappedColumns,\n height,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n getCellContent,\n getGroupDetails,\n getRowThemeOverride,\n disabledRows,\n isFocused,\n drawFocus,\n trailingRowType,\n drawRegions,\n damage,\n selection,\n prelightCells,\n highlightRegions,\n drawCustomCell,\n imageLoader,\n spriteManager,\n hoverValues,\n hoverInfo,\n hyperWrapping,\n theme,\n enqueue,\n getCellRenderer\n );\n if (fillHandle && drawFocus && selection.current !== void 0 && damage.some((x) => {\n var _a2, _b2;\n return x[0] === ((_a2 = selection.current) == null ? void 0 : _a2.cell[0]) && x[1] === ((_b2 = selection.current) == null ? void 0 : _b2.cell[1]);\n })) {\n drawFocusRing(\n targetCtx,\n width,\n height,\n cellYOffset,\n translateX,\n translateY,\n effectiveCols,\n mappedColumns,\n theme,\n totalHeaderHeight,\n selection,\n getRowHeight,\n getCellContent,\n trailingRowType,\n fillHandle,\n rows\n );\n }\n }\n if (doHeaders) {\n clipDamage(\n overlayCtx,\n effectiveCols,\n width,\n totalHeaderHeight,\n groupHeaderHeight,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n trailingRowType,\n damage,\n false\n );\n drawHeaderTexture();\n }\n targetCtx.restore();\n overlayCtx.restore();\n if (mainCtx !== null) {\n mainCtx.fillStyle = theme.bgCell;\n mainCtx.fillRect(0, 0, width, height);\n mainCtx.drawImage(targetCtx.canvas, 0, 0);\n }\n return;\n }\n if (canBlit !== true || cellXOffset !== (last == null ? void 0 : last.cellXOffset) || translateX !== (last == null ? void 0 : last.translateX) || mustDrawFocusOnHeader !== (last == null ? void 0 : last.mustDrawFocusOnHeader)) {\n drawHeaderTexture();\n }\n if (canBlit === true) {\n assert(blitSource !== void 0 && last !== void 0);\n const { regions } = blitLastFrame(\n targetCtx,\n blitSource,\n last,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n trailingRowType === \"sticky\",\n width,\n height,\n rows,\n totalHeaderHeight,\n dpr,\n mappedColumns,\n effectiveCols,\n rowHeight,\n doubleBuffer\n );\n drawRegions = regions;\n } else if (canBlit !== false) {\n assert(last !== void 0);\n const resizedCol = canBlit;\n drawRegions = blitResizedCol(\n last,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n width,\n height,\n totalHeaderHeight,\n effectiveCols,\n resizedCol\n );\n }\n overdrawStickyBoundaries(\n targetCtx,\n effectiveCols,\n width,\n height,\n trailingRowType === \"sticky\",\n rows,\n verticalBorder,\n getRowHeight,\n theme\n );\n const focusRedraw = drawFocus ? drawFocusRing(\n targetCtx,\n width,\n height,\n cellYOffset,\n translateX,\n translateY,\n effectiveCols,\n mappedColumns,\n theme,\n totalHeaderHeight,\n selection,\n getRowHeight,\n getCellContent,\n trailingRowType,\n fillHandle,\n rows\n ) : void 0;\n const highlightRedraw = drawHighlightRings(\n targetCtx,\n width,\n height,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n mappedColumns,\n freezeColumns,\n headerHeight,\n groupHeaderHeight,\n rowHeight,\n trailingRowType === \"sticky\",\n rows,\n highlightRegions\n );\n targetCtx.fillStyle = theme.bgCell;\n if (drawRegions.length > 0) {\n targetCtx.beginPath();\n for (const r of drawRegions) {\n targetCtx.rect(r.x, r.y, r.width, r.height);\n }\n targetCtx.clip();\n targetCtx.fill();\n targetCtx.beginPath();\n } else {\n targetCtx.fillRect(0, 0, width, height);\n }\n const spans = drawCells(\n targetCtx,\n effectiveCols,\n mappedColumns,\n height,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n getCellContent,\n getGroupDetails,\n getRowThemeOverride,\n disabledRows,\n isFocused,\n drawFocus,\n trailingRowType,\n drawRegions,\n damage,\n selection,\n prelightCells,\n highlightRegions,\n drawCustomCell,\n imageLoader,\n spriteManager,\n hoverValues,\n hoverInfo,\n hyperWrapping,\n theme,\n enqueue,\n getCellRenderer\n );\n drawBlanks(\n targetCtx,\n effectiveCols,\n mappedColumns,\n width,\n height,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n getRowThemeOverride,\n selection.rows,\n disabledRows,\n trailingRowType,\n drawRegions,\n damage,\n theme\n );\n drawGridLines(\n targetCtx,\n effectiveCols,\n cellYOffset,\n translateX,\n translateY,\n width,\n height,\n drawRegions,\n spans,\n groupHeaderHeight,\n totalHeaderHeight,\n getRowHeight,\n getRowThemeOverride,\n verticalBorder,\n trailingRowType,\n rows,\n theme\n );\n focusRedraw == null ? void 0 : focusRedraw();\n highlightRedraw == null ? void 0 : highlightRedraw();\n if (mainCtx !== null) {\n mainCtx.fillStyle = theme.bgCell;\n mainCtx.fillRect(0, 0, width, height);\n mainCtx.drawImage(targetCtx.canvas, 0, 0);\n }\n const lastRowDrawn = getLastRow(\n effectiveCols,\n height,\n totalHeaderHeight,\n translateX,\n translateY,\n cellYOffset,\n rows,\n getRowHeight,\n trailingRowType\n );\n imageLoader == null ? void 0 : imageLoader.setWindow(\n {\n x: cellXOffset,\n y: cellYOffset,\n width: effectiveCols.length,\n height: lastRowDrawn - cellYOffset\n },\n freezeColumns\n );\n lastBlitData.current = {\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n mustDrawFocusOnHeader,\n lastBuffer: doubleBuffer ? targetBuffer === bufferA ? \"a\" : \"b\" : void 0\n };\n targetCtx.restore();\n overlayCtx.restore();\n}\nfunction walkRowsInCol(startRow, drawY, height, rows, getRowHeight, trailingRowType, cb) {\n let y = drawY;\n let row = startRow;\n let doSticky = trailingRowType === \"sticky\";\n while (y < height || doSticky) {\n const doingSticky = doSticky && y >= height;\n if (doingSticky) {\n doSticky = false;\n row = rows - 1;\n }\n const rh = getRowHeight(row);\n if (doingSticky) {\n y = height - rh;\n }\n const isMovedStickyRow = doSticky && row === rows - 1;\n if (!isMovedStickyRow && cb(y, row, rh, doingSticky, trailingRowType !== \"none\" && row === rows - 1) === true) {\n break;\n }\n if (doingSticky) {\n break;\n }\n y += rh;\n row++;\n }\n}\nfunction walkColumns(effectiveCols, cellYOffset, translateX, translateY, totalHeaderHeight, cb) {\n let x = 0;\n let clipX = 0;\n const drawY = totalHeaderHeight + translateY;\n for (const c of effectiveCols) {\n const drawX = c.sticky ? clipX : x + translateX;\n if (cb(c, drawX, drawY, clipX, cellYOffset) === true) {\n break;\n }\n x += c.width;\n clipX += c.sticky ? c.width : 0;\n }\n}\nfunction walkGroups(effectiveCols, width, translateX, groupHeaderHeight, cb) {\n var _a;\n let x = 0;\n let clipX = 0;\n for (let index = 0; index < effectiveCols.length; index++) {\n const startCol = effectiveCols[index];\n let end = index + 1;\n let boxWidth = startCol.width;\n if (startCol.sticky) {\n clipX += boxWidth;\n }\n while (end < effectiveCols.length && isGroupEqual(effectiveCols[end].group, startCol.group) && effectiveCols[end].sticky === effectiveCols[index].sticky) {\n const endCol = effectiveCols[end];\n boxWidth += endCol.width;\n end++;\n index++;\n if (endCol.sticky) {\n clipX += endCol.width;\n }\n }\n const t = startCol.sticky ? 0 : translateX;\n const localX = x + t;\n const delta = startCol.sticky ? 0 : Math.max(0, clipX - localX);\n const w = Math.min(boxWidth - delta, width - (localX + delta));\n cb(\n [startCol.sourceIndex, effectiveCols[end - 1].sourceIndex],\n (_a = startCol.group) != null ? _a : \"\",\n localX + delta,\n 0,\n w,\n groupHeaderHeight\n );\n x += boxWidth;\n }\n}\n\n// src/data-grid/animation-manager.ts\nimport clamp from \"lodash/clamp.js\";\nvar hoverTime = 80;\nfunction easeOutCubic(x) {\n const x1 = x - 1;\n return x1 * x1 * x1 + 1;\n}\nvar AnimationManager = class {\n constructor(callback) {\n this.currentHoveredItem = void 0;\n this.leavingItems = [];\n this.areSameItems = (left, right) => {\n return (left == null ? void 0 : left[0]) === (right == null ? void 0 : right[0]) && (left == null ? void 0 : left[1]) === (right == null ? void 0 : right[1]);\n };\n this.addToLeavingItems = (item) => {\n const isAlreadyLeaving = this.leavingItems.some((i) => this.areSameItems(i.item, item.item));\n if (isAlreadyLeaving) {\n return;\n }\n this.leavingItems.push(item);\n };\n /**\n * @returns the hover amount of the item, if it was leaving (0 if not).\n */\n this.removeFromLeavingItems = (item) => {\n var _a;\n const leavingItem = this.leavingItems.find((e) => this.areSameItems(e.item, item));\n this.leavingItems = this.leavingItems.filter((i) => i !== leavingItem);\n return (_a = leavingItem == null ? void 0 : leavingItem.hoverAmount) != null ? _a : 0;\n };\n this.cleanUpLeavingElements = () => {\n this.leavingItems = this.leavingItems.filter((i) => i.hoverAmount > 0);\n };\n this.shouldStep = () => {\n const hasLeavingItems = this.leavingItems.length > 0;\n const currentHoveredIsAnimating = this.currentHoveredItem !== void 0 && this.currentHoveredItem.hoverAmount < 1;\n return hasLeavingItems || currentHoveredIsAnimating;\n };\n this.getAnimatingItems = () => {\n if (this.currentHoveredItem !== void 0) {\n return [...this.leavingItems, this.currentHoveredItem];\n }\n return this.leavingItems.map((x) => ({ ...x, hoverAmount: easeOutCubic(x.hoverAmount) }));\n };\n this.step = (timestamp) => {\n if (this.lastAnimationTime === void 0) {\n this.lastAnimationTime = timestamp;\n } else {\n const step = timestamp - this.lastAnimationTime;\n const delta = step / hoverTime;\n for (const item of this.leavingItems) {\n item.hoverAmount = clamp(item.hoverAmount - delta, 0, 1);\n }\n if (this.currentHoveredItem !== void 0) {\n this.currentHoveredItem.hoverAmount = clamp(this.currentHoveredItem.hoverAmount + delta, 0, 1);\n }\n const animating = this.getAnimatingItems();\n this.callback(animating);\n this.cleanUpLeavingElements();\n }\n if (this.shouldStep()) {\n this.lastAnimationTime = timestamp;\n window.requestAnimationFrame(this.step);\n } else {\n this.lastAnimationTime = void 0;\n }\n };\n this.setHovered = (item) => {\n var _a;\n if (this.areSameItems((_a = this.currentHoveredItem) == null ? void 0 : _a.item, item)) {\n return;\n }\n if (this.currentHoveredItem !== void 0) {\n this.addToLeavingItems(this.currentHoveredItem);\n }\n if (item !== void 0) {\n const hoverAmount = this.removeFromLeavingItems(item);\n this.currentHoveredItem = {\n item,\n hoverAmount\n };\n } else {\n this.currentHoveredItem = void 0;\n }\n if (this.lastAnimationTime === void 0) {\n window.requestAnimationFrame(this.step);\n }\n };\n this.callback = callback;\n }\n};\n\n// src/common/browser-detect.ts\nvar Lazy = class {\n constructor(fn) {\n this.fn = fn;\n }\n get value() {\n var _a;\n return (_a = this.val) != null ? _a : this.val = this.fn();\n }\n};\nfunction lazy(fn) {\n return new Lazy(fn);\n}\nvar browserIsFirefox = lazy(() => window.navigator.userAgent.includes(\"Firefox\"));\nvar browserIsSafari = lazy(\n () => window.navigator.userAgent.includes(\"Mac OS\") && window.navigator.userAgent.includes(\"Safari\") && !window.navigator.userAgent.includes(\"Chrome\")\n);\nvar browserIsOSX = lazy(() => window.navigator.platform.toLowerCase().startsWith(\"mac\"));\n\n// src/data-grid/use-animation-queue.ts\nimport * as React7 from \"react\";\nfunction hasItem(arr, item) {\n for (const element of arr) {\n if (element[0] === item[0] && element[1] === item[1])\n return true;\n }\n return false;\n}\nfunction useAnimationQueue(draw) {\n const queue = React7.useRef([]);\n const seq = React7.useRef(0);\n const drawRef = React7.useRef(draw);\n drawRef.current = draw;\n const loop = React7.useCallback(() => {\n const requeue = () => window.requestAnimationFrame(fn);\n const fn = () => {\n const toDraw = queue.current;\n queue.current = [];\n drawRef.current(toDraw);\n if (queue.current.length > 0) {\n seq.current++;\n } else {\n seq.current = 0;\n }\n };\n window.requestAnimationFrame(seq.current > 600 ? requeue : fn);\n }, []);\n return React7.useCallback(\n (item) => {\n if (hasItem(queue.current, item))\n return;\n if (queue.current.length === 0) {\n loop();\n }\n queue.current.push(item);\n },\n [loop]\n );\n}\n\n// src/data-grid/data-grid.tsx\nvar getRowData = (cell, getCellRenderer) => {\n var _a;\n if (cell.kind === GridCellKind.Custom)\n return cell.copyData;\n const r = getCellRenderer == null ? void 0 : getCellRenderer(cell);\n return (_a = r == null ? void 0 : r.getAccessibilityString(cell)) != null ? _a : \"\";\n};\nvar DataGrid = (p, forwardedRef) => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const {\n width,\n height,\n accessibilityHeight,\n columns,\n cellXOffset: cellXOffsetReal,\n cellYOffset,\n headerHeight,\n fillHandle = false,\n groupHeaderHeight,\n rowHeight,\n rows,\n getCellContent,\n getRowThemeOverride,\n onHeaderMenuClick,\n enableGroups,\n isFilling,\n onCanvasFocused,\n onCanvasBlur,\n isFocused,\n selection,\n freezeColumns,\n onContextMenu,\n trailingRowType,\n fixedShadowX = true,\n fixedShadowY = true,\n drawFocusRing: drawFocusRing2 = true,\n onMouseDown,\n onMouseUp,\n onMouseMoveRaw,\n onMouseMove,\n onItemHovered,\n dragAndDropState,\n firstColAccessible,\n onKeyDown,\n onKeyUp,\n highlightRegions,\n canvasRef,\n onDragStart,\n onDragEnd,\n eventTargetRef,\n isResizing,\n isDragging,\n isDraggable = false,\n allowResize,\n disabledRows,\n getGroupDetails,\n theme,\n prelightCells,\n headerIcons,\n verticalBorder,\n drawHeader: drawHeaderCallback,\n drawCustomCell,\n onCellFocused,\n onDragOverCell,\n onDrop,\n onDragLeave,\n imageWindowLoader,\n smoothScrollX = false,\n smoothScrollY = false,\n experimental,\n getCellRenderer\n } = p;\n const translateX = (_a = p.translateX) != null ? _a : 0;\n const translateY = (_b = p.translateY) != null ? _b : 0;\n const cellXOffset = Math.max(freezeColumns, Math.min(columns.length - 1, cellXOffsetReal));\n const ref = React8.useRef(null);\n const imageWindowLoaderInternal = React8.useMemo(() => new image_window_loader_default(), []);\n const imageLoader = imageWindowLoader != null ? imageWindowLoader : imageWindowLoaderInternal;\n const damageRegion = React8.useRef();\n const [scrolling, setScrolling] = React8.useState(false);\n const hoverValues = React8.useRef([]);\n const lastBlitData = React8.useRef();\n const [hoveredItemInfo, setHoveredItemInfo] = React8.useState();\n const [hoveredOnEdge, setHoveredOnEdge] = React8.useState();\n const overlayRef = React8.useRef(null);\n const [lastWasTouch, setLastWasTouch] = React8.useState(false);\n const lastWasTouchRef = React8.useRef(lastWasTouch);\n lastWasTouchRef.current = lastWasTouch;\n const spriteManager = React8.useMemo(\n () => new SpriteManager(headerIcons, () => {\n lastArgsRef.current = void 0;\n lastDrawRef.current();\n }),\n [headerIcons]\n );\n const totalHeaderHeight = enableGroups ? groupHeaderHeight + headerHeight : headerHeight;\n const scrollingStopRef = React8.useRef(-1);\n const disableFirefoxRescaling = (experimental == null ? void 0 : experimental.enableFirefoxRescaling) !== true;\n React8.useLayoutEffect(() => {\n if (!browserIsFirefox.value || window.devicePixelRatio === 1 || disableFirefoxRescaling)\n return;\n if (scrollingStopRef.current !== -1) {\n setScrolling(true);\n }\n window.clearTimeout(scrollingStopRef.current);\n scrollingStopRef.current = window.setTimeout(() => {\n setScrolling(false);\n scrollingStopRef.current = -1;\n }, 200);\n }, [cellYOffset, cellXOffset, translateX, translateY, disableFirefoxRescaling]);\n const mappedColumns = useMappedColumns(columns, freezeColumns);\n const getBoundsForItem = React8.useCallback(\n (canvas, col, row) => {\n const rect = canvas.getBoundingClientRect();\n if (col >= mappedColumns.length || row >= rows) {\n return void 0;\n }\n const scale = rect.width / width;\n const result = computeBounds(\n col,\n row,\n width,\n height,\n groupHeaderHeight,\n totalHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n trailingRowType === \"sticky\",\n mappedColumns,\n rowHeight\n );\n if (scale !== 1) {\n result.x *= scale;\n result.y *= scale;\n result.width *= scale;\n result.height *= scale;\n }\n result.x += rect.x;\n result.y += rect.y;\n return result;\n },\n [\n width,\n height,\n groupHeaderHeight,\n totalHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n trailingRowType,\n mappedColumns,\n rowHeight\n ]\n );\n const getMouseArgsForPosition = React8.useCallback(\n (canvas, posX, posY, ev) => {\n var _a2, _b2;\n const rect = canvas.getBoundingClientRect();\n const scale = rect.width / width;\n const x = (posX - rect.left) / scale;\n const y = (posY - rect.top) / scale;\n const edgeDetectionBuffer = 5;\n const effectiveCols = getEffectiveColumns(mappedColumns, cellXOffset, width, void 0, translateX);\n let button = 0;\n if (ev instanceof MouseEvent) {\n button = ev.button;\n }\n const col = getColumnIndexForX(x, effectiveCols, translateX);\n const row = getRowIndexForY(\n y,\n height,\n enableGroups,\n headerHeight,\n groupHeaderHeight,\n rows,\n rowHeight,\n cellYOffset,\n translateY,\n trailingRowType === \"sticky\"\n );\n const shiftKey = (ev == null ? void 0 : ev.shiftKey) === true;\n const ctrlKey = (ev == null ? void 0 : ev.ctrlKey) === true;\n const metaKey = (ev == null ? void 0 : ev.metaKey) === true;\n const isTouch = ev !== void 0 && !(ev instanceof MouseEvent) || (ev == null ? void 0 : ev.pointerType) === \"touch\";\n const edgeSize = 20;\n const scrollEdge = [\n Math.abs(x) < edgeSize ? -1 : Math.abs(rect.width - x) < edgeSize ? 1 : 0,\n Math.abs(y) < edgeSize ? -1 : Math.abs(rect.height - y) < edgeSize ? 1 : 0\n ];\n let result;\n if (col === -1 || y < 0 || x < 0 || row === void 0 || x > width || y > height) {\n const horizontal = x > width ? -1 : x < 0 ? 1 : 0;\n const vertical = y > height ? 1 : y < 0 ? -1 : 0;\n let isEdge = false;\n if (col === -1 && row === -1) {\n const b = getBoundsForItem(canvas, mappedColumns.length - 1, -1);\n assert(b !== void 0);\n isEdge = posX < b.x + b.width + edgeDetectionBuffer;\n }\n const isMaybeScrollbar = x > width && x < width + getScrollBarWidth() || y > height && y < height + getScrollBarWidth();\n result = {\n kind: outOfBoundsKind,\n location: [col !== -1 ? col : x < 0 ? 0 : mappedColumns.length - 1, row != null ? row : rows - 1],\n direction: [horizontal, vertical],\n shiftKey,\n ctrlKey,\n metaKey,\n isEdge,\n isTouch,\n button,\n scrollEdge,\n isMaybeScrollbar\n };\n } else if (row <= -1) {\n let bounds = getBoundsForItem(canvas, col, row);\n assert(bounds !== void 0);\n let isEdge = bounds !== void 0 && bounds.x + bounds.width - posX <= edgeDetectionBuffer;\n const previousCol = col - 1;\n if (posX - bounds.x <= edgeDetectionBuffer && previousCol >= 0) {\n isEdge = true;\n bounds = getBoundsForItem(canvas, previousCol, row);\n assert(bounds !== void 0);\n result = {\n kind: enableGroups && row === -2 ? groupHeaderKind : headerKind,\n location: [previousCol, row],\n bounds,\n group: (_a2 = mappedColumns[previousCol].group) != null ? _a2 : \"\",\n isEdge,\n shiftKey,\n ctrlKey,\n metaKey,\n isTouch,\n localEventX: posX - bounds.x,\n localEventY: posY - bounds.y,\n button,\n scrollEdge\n };\n } else {\n result = {\n kind: enableGroups && row === -2 ? groupHeaderKind : headerKind,\n group: (_b2 = mappedColumns[col].group) != null ? _b2 : \"\",\n location: [col, row],\n bounds,\n isEdge,\n shiftKey,\n ctrlKey,\n metaKey,\n isTouch,\n localEventX: posX - bounds.x,\n localEventY: posY - bounds.y,\n button,\n scrollEdge\n };\n }\n } else {\n const bounds = getBoundsForItem(canvas, col, row);\n assert(bounds !== void 0);\n const isEdge = bounds !== void 0 && bounds.x + bounds.width - posX < edgeDetectionBuffer;\n const isFillHandle = fillHandle && bounds !== void 0 && bounds.x + bounds.width - posX < 6 && bounds.y + bounds.height - posY < 6;\n result = {\n kind: \"cell\",\n location: [col, row],\n bounds,\n isEdge,\n shiftKey,\n ctrlKey,\n isFillHandle,\n metaKey,\n isTouch,\n localEventX: posX - bounds.x,\n localEventY: posY - bounds.y,\n button,\n scrollEdge\n };\n }\n return result;\n },\n [\n mappedColumns,\n cellXOffset,\n width,\n translateX,\n height,\n enableGroups,\n headerHeight,\n groupHeaderHeight,\n rows,\n rowHeight,\n cellYOffset,\n translateY,\n trailingRowType,\n getBoundsForItem,\n fillHandle\n ]\n );\n function isSameItem(item, other) {\n if (item === other)\n return true;\n return (item == null ? void 0 : item.kind) === (other == null ? void 0 : other.kind) && (item == null ? void 0 : item.location[0]) === (other == null ? void 0 : other.location[0]) && (item == null ? void 0 : item.location[1]) === (other == null ? void 0 : other.location[1]);\n }\n const [hoveredItem] = hoveredItemInfo != null ? hoveredItemInfo : [];\n const enqueueRef = React8.useRef((_item) => {\n });\n const hoverInfoRef = React8.useRef(hoveredItemInfo);\n hoverInfoRef.current = hoveredItemInfo;\n const [bufferA, bufferB] = React8.useMemo(() => {\n const a = document.createElement(\"canvas\");\n const b = document.createElement(\"canvas\");\n a.style[\"display\"] = \"none\";\n a.style[\"opacity\"] = \"0\";\n a.style[\"position\"] = \"fixed\";\n b.style[\"display\"] = \"none\";\n b.style[\"opacity\"] = \"0\";\n b.style[\"position\"] = \"fixed\";\n return [a, b];\n }, []);\n React8.useLayoutEffect(() => {\n document.documentElement.append(bufferA);\n document.documentElement.append(bufferB);\n return () => {\n bufferA.remove();\n bufferB.remove();\n };\n }, [bufferA, bufferB]);\n const lastArgsRef = React8.useRef();\n const draw = React8.useCallback(() => {\n var _a2, _b2;\n const canvas = ref.current;\n const overlay = overlayRef.current;\n if (canvas === null || overlay === null)\n return;\n const last = lastArgsRef.current;\n const current = {\n canvas,\n bufferA,\n bufferB,\n headerCanvas: overlay,\n width,\n height,\n cellXOffset,\n cellYOffset,\n translateX: Math.round(translateX),\n translateY: Math.round(translateY),\n mappedColumns,\n enableGroups,\n freezeColumns,\n dragAndDropState,\n theme,\n headerHeight,\n groupHeaderHeight,\n disabledRows: disabledRows != null ? disabledRows : CompactSelection.empty(),\n rowHeight,\n verticalBorder,\n isResizing,\n isFocused,\n selection,\n fillHandle,\n lastRowSticky: trailingRowType,\n rows,\n drawFocus: drawFocusRing2,\n getCellContent,\n getGroupDetails: getGroupDetails != null ? getGroupDetails : (name) => ({ name }),\n getRowThemeOverride,\n drawCustomCell,\n drawHeaderCallback,\n prelightCells,\n highlightRegions,\n imageLoader,\n lastBlitData,\n damage: damageRegion.current,\n hoverValues: hoverValues.current,\n hoverInfo: hoverInfoRef.current,\n spriteManager,\n scrolling,\n hyperWrapping: (_a2 = experimental == null ? void 0 : experimental.hyperWrapping) != null ? _a2 : false,\n touchMode: lastWasTouch,\n enqueue: enqueueRef.current,\n renderStrategy: (_b2 = experimental == null ? void 0 : experimental.renderStrategy) != null ? _b2 : browserIsSafari.value ? \"double-buffer\" : \"single-buffer\",\n getCellRenderer\n };\n if (current.damage === void 0) {\n lastArgsRef.current = current;\n drawGrid(current, last);\n } else {\n drawGrid(current, void 0);\n }\n }, [\n bufferA,\n bufferB,\n width,\n height,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n mappedColumns,\n enableGroups,\n freezeColumns,\n dragAndDropState,\n theme,\n headerHeight,\n groupHeaderHeight,\n disabledRows,\n rowHeight,\n verticalBorder,\n isResizing,\n isFocused,\n selection,\n fillHandle,\n trailingRowType,\n rows,\n drawFocusRing2,\n getCellContent,\n getGroupDetails,\n getRowThemeOverride,\n drawCustomCell,\n drawHeaderCallback,\n prelightCells,\n highlightRegions,\n imageLoader,\n spriteManager,\n scrolling,\n experimental == null ? void 0 : experimental.hyperWrapping,\n experimental == null ? void 0 : experimental.renderStrategy,\n lastWasTouch,\n getCellRenderer\n ]);\n const lastDrawRef = React8.useRef(draw);\n React8.useLayoutEffect(() => {\n draw();\n lastDrawRef.current = draw;\n }, [draw]);\n React8.useLayoutEffect(() => {\n const fn = async () => {\n var _a2;\n if (((_a2 = document == null ? void 0 : document.fonts) == null ? void 0 : _a2.ready) === void 0)\n return;\n await document.fonts.ready;\n lastArgsRef.current = void 0;\n lastDrawRef.current();\n };\n void fn();\n }, []);\n const damageInternal = React8.useCallback((locations) => {\n damageRegion.current = locations;\n lastDrawRef.current();\n damageRegion.current = void 0;\n }, []);\n const enqueue = useAnimationQueue(damageInternal);\n enqueueRef.current = enqueue;\n const damage = React8.useCallback(\n (cells) => {\n damageInternal(cells.map((x) => x.cell));\n },\n [damageInternal]\n );\n imageLoader.setCallback(damageInternal);\n const [overFill, setOverFill] = React8.useState(false);\n const [hCol, hRow] = hoveredItem != null ? hoveredItem : [];\n const headerHovered = hCol !== void 0 && hRow === -1;\n const groupHeaderHovered = hCol !== void 0 && hRow === -2;\n let clickableInnerCellHovered = false;\n let editableBoolHovered = false;\n let cursorOverride;\n if (hCol !== void 0 && hRow !== void 0 && hRow > -1) {\n const cell = getCellContent([hCol, hRow], true);\n clickableInnerCellHovered = cell.kind === InnerGridCellKind.NewRow || cell.kind === InnerGridCellKind.Marker && cell.markerKind !== \"number\";\n editableBoolHovered = cell.kind === GridCellKind.Boolean && booleanCellIsEditable(cell);\n cursorOverride = cell.cursor;\n }\n const canDrag = hoveredOnEdge != null ? hoveredOnEdge : false;\n const cursor = isDragging ? \"grabbing\" : canDrag || isResizing ? \"col-resize\" : overFill || isFilling ? \"crosshair\" : cursorOverride !== void 0 ? cursorOverride : headerHovered || clickableInnerCellHovered || editableBoolHovered || groupHeaderHovered ? \"pointer\" : \"default\";\n const style = React8.useMemo(\n () => ({\n // width,\n // height,\n contain: \"strict\",\n display: \"block\",\n cursor\n }),\n [cursor]\n );\n const lastSetCursor = React8.useRef(\"default\");\n const target = eventTargetRef == null ? void 0 : eventTargetRef.current;\n if (target !== null && target !== void 0 && lastSetCursor.current !== style.cursor) {\n target.style.cursor = lastSetCursor.current = style.cursor;\n }\n const groupHeaderActionForEvent = React8.useCallback(\n (group, bounds, localEventX, localEventY) => {\n if (getGroupDetails === void 0)\n return void 0;\n const groupDesc = getGroupDetails(group);\n if (groupDesc.actions !== void 0) {\n const boxes = getActionBoundsForGroup(bounds, groupDesc.actions);\n for (const [i, box] of boxes.entries()) {\n if (pointInRect(box, localEventX + bounds.x, localEventY + box.y)) {\n return groupDesc.actions[i];\n }\n }\n }\n return void 0;\n },\n [getGroupDetails]\n );\n const isOverHeaderMenu = React8.useCallback(\n (canvas, col, clientX, clientY) => {\n const header = columns[col];\n if (!isDragging && !isResizing && header.hasMenu === true && !(hoveredOnEdge != null ? hoveredOnEdge : false)) {\n const headerBounds = getBoundsForItem(canvas, col, -1);\n assert(headerBounds !== void 0);\n const menuBounds = getHeaderMenuBounds(\n headerBounds.x,\n headerBounds.y,\n headerBounds.width,\n headerBounds.height,\n direction(header.title) === \"rtl\"\n );\n if (clientX > menuBounds.x && clientX < menuBounds.x + menuBounds.width && clientY > menuBounds.y && clientY < menuBounds.y + menuBounds.height) {\n return headerBounds;\n }\n }\n return void 0;\n },\n [columns, getBoundsForItem, hoveredOnEdge, isDragging, isResizing]\n );\n const downTime = React8.useRef(0);\n const downPosition = React8.useRef();\n const mouseDown = React8.useRef(false);\n const onMouseDownImpl = React8.useCallback(\n (ev) => {\n const canvas = ref.current;\n const eventTarget = eventTargetRef == null ? void 0 : eventTargetRef.current;\n if (canvas === null || ev.target !== canvas && ev.target !== eventTarget)\n return;\n mouseDown.current = true;\n let clientX;\n let clientY;\n if (ev instanceof MouseEvent) {\n clientX = ev.clientX;\n clientY = ev.clientY;\n } else {\n clientX = ev.touches[0].clientX;\n clientY = ev.touches[0].clientY;\n }\n if (ev.target === eventTarget && eventTarget !== null) {\n const bounds = eventTarget.getBoundingClientRect();\n if (clientX > bounds.right || clientY > bounds.bottom)\n return;\n }\n const args = getMouseArgsForPosition(canvas, clientX, clientY, ev);\n downPosition.current = args.location;\n if (args.isTouch) {\n downTime.current = Date.now();\n }\n if (lastWasTouchRef.current !== args.isTouch) {\n setLastWasTouch(args.isTouch);\n }\n if (args.kind === headerKind && isOverHeaderMenu(canvas, args.location[0], clientX, clientY) !== void 0) {\n return;\n } else if (args.kind === groupHeaderKind) {\n const action = groupHeaderActionForEvent(args.group, args.bounds, args.localEventX, args.localEventY);\n if (action !== void 0) {\n return;\n }\n }\n onMouseDown == null ? void 0 : onMouseDown(args);\n if (!args.isTouch && isDraggable !== true && isDraggable !== args.kind) {\n ev.preventDefault();\n }\n },\n [eventTargetRef, isDraggable, getMouseArgsForPosition, groupHeaderActionForEvent, isOverHeaderMenu, onMouseDown]\n );\n useEventListener(\"touchstart\", onMouseDownImpl, window, false);\n useEventListener(\"mousedown\", onMouseDownImpl, window, false);\n const onMouseUpImpl = React8.useCallback(\n (ev) => {\n var _a2, _b2;\n const canvas = ref.current;\n mouseDown.current = false;\n if (onMouseUp === void 0 || canvas === null)\n return;\n const eventTarget = eventTargetRef == null ? void 0 : eventTargetRef.current;\n const isOutside = ev.target !== canvas && ev.target !== eventTarget;\n let clientX;\n let clientY;\n if (ev instanceof MouseEvent) {\n clientX = ev.clientX;\n clientY = ev.clientY;\n if (ev.pointerType === \"touch\") {\n return;\n }\n } else {\n clientX = ev.changedTouches[0].clientX;\n clientY = ev.changedTouches[0].clientY;\n }\n let args = getMouseArgsForPosition(canvas, clientX, clientY, ev);\n if (args.isTouch && downTime.current !== 0 && Date.now() - downTime.current > 500) {\n args = {\n ...args,\n isLongTouch: true\n };\n }\n if (lastWasTouchRef.current !== args.isTouch) {\n setLastWasTouch(args.isTouch);\n }\n if (!isOutside && ev.cancelable) {\n ev.preventDefault();\n }\n const [col] = args.location;\n const headerBounds = isOverHeaderMenu(canvas, col, clientX, clientY);\n if (args.kind === headerKind && headerBounds !== void 0) {\n if (args.button !== 0 || ((_a2 = downPosition.current) == null ? void 0 : _a2[0]) !== col || ((_b2 = downPosition.current) == null ? void 0 : _b2[1]) !== -1) {\n onMouseUp(args, true);\n }\n return;\n } else if (args.kind === groupHeaderKind) {\n const action = groupHeaderActionForEvent(args.group, args.bounds, args.localEventX, args.localEventY);\n if (action !== void 0) {\n if (args.button === 0) {\n action.onClick(args);\n }\n return;\n }\n }\n onMouseUp(args, isOutside);\n },\n [onMouseUp, eventTargetRef, getMouseArgsForPosition, isOverHeaderMenu, groupHeaderActionForEvent]\n );\n useEventListener(\"mouseup\", onMouseUpImpl, window, false);\n useEventListener(\"touchend\", onMouseUpImpl, window, false);\n const onClickImpl = React8.useCallback(\n (ev) => {\n var _a2, _b2;\n const canvas = ref.current;\n if (canvas === null)\n return;\n const eventTarget = eventTargetRef == null ? void 0 : eventTargetRef.current;\n const isOutside = ev.target !== canvas && ev.target !== eventTarget;\n let clientX;\n let clientY;\n if (ev instanceof MouseEvent) {\n clientX = ev.clientX;\n clientY = ev.clientY;\n } else {\n clientX = ev.changedTouches[0].clientX;\n clientY = ev.changedTouches[0].clientY;\n }\n const args = getMouseArgsForPosition(canvas, clientX, clientY, ev);\n if (lastWasTouchRef.current !== args.isTouch) {\n setLastWasTouch(args.isTouch);\n }\n if (!isOutside && ev.cancelable) {\n ev.preventDefault();\n }\n const [col] = args.location;\n const headerBounds = isOverHeaderMenu(canvas, col, clientX, clientY);\n if (args.kind === headerKind && headerBounds !== void 0) {\n if (args.button === 0 && ((_a2 = downPosition.current) == null ? void 0 : _a2[0]) === col && ((_b2 = downPosition.current) == null ? void 0 : _b2[1]) === -1) {\n onHeaderMenuClick == null ? void 0 : onHeaderMenuClick(col, headerBounds);\n }\n } else if (args.kind === groupHeaderKind) {\n const action = groupHeaderActionForEvent(args.group, args.bounds, args.localEventX, args.localEventY);\n if (action !== void 0 && args.button === 0) {\n action.onClick(args);\n }\n }\n },\n [eventTargetRef, getMouseArgsForPosition, isOverHeaderMenu, onHeaderMenuClick, groupHeaderActionForEvent]\n );\n useEventListener(\"click\", onClickImpl, window, false);\n const onContextMenuImpl = React8.useCallback(\n (ev) => {\n const canvas = ref.current;\n if (canvas === null || onContextMenu === void 0)\n return;\n const args = getMouseArgsForPosition(canvas, ev.clientX, ev.clientY, ev);\n onContextMenu(args, () => {\n if (ev.cancelable)\n ev.preventDefault();\n });\n },\n [getMouseArgsForPosition, onContextMenu]\n );\n useEventListener(\"contextmenu\", onContextMenuImpl, (_c = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _c : null, false);\n const onAnimationFrame = React8.useCallback((values) => {\n damageRegion.current = values.map((x) => x.item);\n hoverValues.current = values;\n lastDrawRef.current();\n damageRegion.current = void 0;\n }, []);\n const animManagerValue = React8.useMemo(() => new AnimationManager(onAnimationFrame), [onAnimationFrame]);\n const animationManager = React8.useRef(animManagerValue);\n animationManager.current = animManagerValue;\n React8.useLayoutEffect(() => {\n const am = animationManager.current;\n if (hoveredItem === void 0 || hoveredItem[1] < 0) {\n am.setHovered(hoveredItem);\n return;\n }\n const cell = getCellContent(hoveredItem);\n const r = getCellRenderer(cell);\n am.setHovered(\n r === void 0 && cell.kind === GridCellKind.Custom || (r == null ? void 0 : r.needsHover) === true ? hoveredItem : void 0\n );\n }, [getCellContent, getCellRenderer, hoveredItem]);\n const hoveredRef = React8.useRef();\n const onMouseMoveImpl = React8.useCallback(\n (ev) => {\n var _a2;\n const canvas = ref.current;\n if (canvas === null)\n return;\n const eventTarget = eventTargetRef == null ? void 0 : eventTargetRef.current;\n const isIndirect = ev.target !== canvas && ev.target !== eventTarget;\n const args = getMouseArgsForPosition(canvas, ev.clientX, ev.clientY, ev);\n if (args.kind !== \"out-of-bounds\" && isIndirect && !mouseDown.current && !args.isTouch) {\n return;\n }\n if (!isSameItem(args, hoveredRef.current)) {\n onItemHovered == null ? void 0 : onItemHovered(args);\n setHoveredItemInfo(\n args.kind === outOfBoundsKind ? void 0 : [args.location, [args.localEventX, args.localEventY]]\n );\n hoveredRef.current = args;\n } else if (args.kind === \"cell\" || args.kind === headerKind || args.kind === groupHeaderKind) {\n const newInfo = [args.location, [args.localEventX, args.localEventY]];\n setHoveredItemInfo(newInfo);\n hoverInfoRef.current = newInfo;\n if (args.kind === \"cell\") {\n const toCheck = getCellContent(args.location);\n if (toCheck.kind === GridCellKind.Custom || ((_a2 = getCellRenderer(toCheck)) == null ? void 0 : _a2.needsHoverPosition) === true) {\n damageInternal([args.location]);\n }\n } else if (args.kind === groupHeaderKind) {\n damageInternal([args.location]);\n }\n }\n const notRowMarkerCol = args.location[0] >= (firstColAccessible ? 0 : 1);\n setHoveredOnEdge(args.kind === headerKind && args.isEdge && notRowMarkerCol && allowResize === true);\n if (fillHandle && selection.current !== void 0) {\n const [col, row] = selection.current.cell;\n const sb = getBoundsForItem(canvas, col, row);\n const x = ev.clientX;\n const y = ev.clientY;\n assert(sb !== void 0);\n setOverFill(\n x >= sb.x + sb.width - 6 && x <= sb.x + sb.width && y >= sb.y + sb.height - 6 && y <= sb.y + sb.height\n );\n } else {\n setOverFill(false);\n }\n onMouseMoveRaw == null ? void 0 : onMouseMoveRaw(ev);\n onMouseMove(args);\n },\n [\n eventTargetRef,\n getMouseArgsForPosition,\n firstColAccessible,\n allowResize,\n fillHandle,\n selection,\n onMouseMoveRaw,\n onMouseMove,\n onItemHovered,\n getCellContent,\n getCellRenderer,\n damageInternal,\n getBoundsForItem\n ]\n );\n useEventListener(\"mousemove\", onMouseMoveImpl, window, true);\n const onKeyDownImpl = React8.useCallback(\n (event) => {\n const canvas = ref.current;\n if (canvas === null)\n return;\n let bounds;\n let location = void 0;\n if (selection.current !== void 0) {\n bounds = getBoundsForItem(canvas, selection.current.cell[0], selection.current.cell[1]);\n location = selection.current.cell;\n }\n onKeyDown == null ? void 0 : onKeyDown({\n bounds,\n stopPropagation: () => event.stopPropagation(),\n preventDefault: () => event.preventDefault(),\n cancel: () => void 0,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n key: event.key,\n keyCode: event.keyCode,\n rawEvent: event,\n location\n });\n },\n [onKeyDown, selection, getBoundsForItem]\n );\n const onKeyUpImpl = React8.useCallback(\n (event) => {\n const canvas = ref.current;\n if (canvas === null)\n return;\n let bounds;\n let location = void 0;\n if (selection.current !== void 0) {\n bounds = getBoundsForItem(canvas, selection.current.cell[0], selection.current.cell[1]);\n location = selection.current.cell;\n }\n onKeyUp == null ? void 0 : onKeyUp({\n bounds,\n stopPropagation: () => event.stopPropagation(),\n preventDefault: () => event.preventDefault(),\n cancel: () => void 0,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n key: event.key,\n keyCode: event.keyCode,\n rawEvent: event,\n location\n });\n },\n [onKeyUp, selection, getBoundsForItem]\n );\n const refImpl = React8.useCallback(\n (instance) => {\n ref.current = instance;\n if (canvasRef !== void 0) {\n canvasRef.current = instance;\n }\n },\n [canvasRef]\n );\n const onDragStartImpl = React8.useCallback(\n (event) => {\n var _a2;\n const canvas = ref.current;\n if (canvas === null || isDraggable === false || isResizing) {\n event.preventDefault();\n return;\n }\n let dragMime;\n let dragData;\n const args = getMouseArgsForPosition(canvas, event.clientX, event.clientY);\n if (isDraggable !== true && args.kind !== isDraggable) {\n event.preventDefault();\n return;\n }\n const setData = (mime, payload) => {\n dragMime = mime;\n dragData = payload;\n };\n let dragImage;\n let dragImageX;\n let dragImageY;\n const setDragImage = (image, x, y) => {\n dragImage = image;\n dragImageX = x;\n dragImageY = y;\n };\n let prevented = false;\n onDragStart == null ? void 0 : onDragStart({\n ...args,\n setData,\n setDragImage,\n preventDefault: () => prevented = true,\n defaultPrevented: () => prevented\n });\n if (!prevented && dragMime !== void 0 && dragData !== void 0 && event.dataTransfer !== null) {\n event.dataTransfer.setData(dragMime, dragData);\n event.dataTransfer.effectAllowed = \"copyLink\";\n if (dragImage !== void 0 && dragImageX !== void 0 && dragImageY !== void 0) {\n event.dataTransfer.setDragImage(dragImage, dragImageX, dragImageY);\n } else {\n const [col, row] = args.location;\n if (row !== void 0) {\n const offscreen = document.createElement(\"canvas\");\n const boundsForDragTarget = getBoundsForItem(canvas, col, row);\n assert(boundsForDragTarget !== void 0);\n const dpr = Math.ceil((_a2 = window.devicePixelRatio) != null ? _a2 : 1);\n offscreen.width = boundsForDragTarget.width * dpr;\n offscreen.height = boundsForDragTarget.height * dpr;\n const ctx = offscreen.getContext(\"2d\");\n if (ctx !== null) {\n ctx.scale(dpr, dpr);\n ctx.textBaseline = \"middle\";\n if (row === -1) {\n ctx.font = `${theme.headerFontStyle} ${theme.fontFamily}`;\n ctx.fillStyle = theme.bgHeader;\n ctx.fillRect(0, 0, offscreen.width, offscreen.height);\n drawHeader(\n ctx,\n 0,\n 0,\n boundsForDragTarget.width,\n boundsForDragTarget.height,\n mappedColumns[col],\n false,\n theme,\n false,\n false,\n 0,\n spriteManager,\n drawHeaderCallback,\n false\n );\n } else {\n ctx.font = `${theme.baseFontStyle} ${theme.fontFamily}`;\n ctx.fillStyle = theme.bgCell;\n ctx.fillRect(0, 0, offscreen.width, offscreen.height);\n drawCell(\n ctx,\n row,\n getCellContent([col, row]),\n 0,\n 0,\n 0,\n boundsForDragTarget.width,\n boundsForDragTarget.height,\n false,\n theme,\n drawCustomCell,\n imageLoader,\n spriteManager,\n 1,\n void 0,\n false,\n 0,\n void 0,\n void 0,\n getCellRenderer\n );\n }\n }\n offscreen.style.left = \"-100%\";\n offscreen.style.position = \"absolute\";\n offscreen.style.width = `${boundsForDragTarget.width}px`;\n offscreen.style.height = `${boundsForDragTarget.height}px`;\n document.body.append(offscreen);\n event.dataTransfer.setDragImage(\n offscreen,\n boundsForDragTarget.width / 2,\n boundsForDragTarget.height / 2\n );\n window.setTimeout(() => {\n offscreen.remove();\n }, 0);\n }\n }\n } else {\n event.preventDefault();\n }\n },\n [\n isDraggable,\n isResizing,\n getMouseArgsForPosition,\n onDragStart,\n getBoundsForItem,\n theme,\n mappedColumns,\n spriteManager,\n drawHeaderCallback,\n getCellContent,\n drawCustomCell,\n imageLoader,\n getCellRenderer\n ]\n );\n useEventListener(\"dragstart\", onDragStartImpl, (_d = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _d : null, false, false);\n const activeDropTarget = React8.useRef();\n const onDragOverImpl = React8.useCallback(\n (event) => {\n var _a2;\n const canvas = ref.current;\n if (onDrop !== void 0) {\n event.preventDefault();\n }\n if (canvas === null || onDragOverCell === void 0) {\n return;\n }\n const args = getMouseArgsForPosition(canvas, event.clientX, event.clientY);\n const [rawCol, row] = args.location;\n const col = rawCol - (firstColAccessible ? 0 : 1);\n const [activeCol, activeRow] = (_a2 = activeDropTarget.current) != null ? _a2 : [];\n if (activeCol !== col || activeRow !== row) {\n activeDropTarget.current = [col, row];\n onDragOverCell([col, row], event.dataTransfer);\n }\n },\n [firstColAccessible, getMouseArgsForPosition, onDragOverCell, onDrop]\n );\n useEventListener(\"dragover\", onDragOverImpl, (_e = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _e : null, false, false);\n const onDragEndImpl = React8.useCallback(() => {\n activeDropTarget.current = void 0;\n onDragEnd == null ? void 0 : onDragEnd();\n }, [onDragEnd]);\n useEventListener(\"dragend\", onDragEndImpl, (_f = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _f : null, false, false);\n const onDropImpl = React8.useCallback(\n (event) => {\n const canvas = ref.current;\n if (canvas === null || onDrop === void 0) {\n return;\n }\n event.preventDefault();\n const args = getMouseArgsForPosition(canvas, event.clientX, event.clientY);\n const [rawCol, row] = args.location;\n const col = rawCol - (firstColAccessible ? 0 : 1);\n onDrop([col, row], event.dataTransfer);\n },\n [firstColAccessible, getMouseArgsForPosition, onDrop]\n );\n useEventListener(\"drop\", onDropImpl, (_g = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _g : null, false, false);\n const onDragLeaveImpl = React8.useCallback(() => {\n onDragLeave == null ? void 0 : onDragLeave();\n }, [onDragLeave]);\n useEventListener(\"dragleave\", onDragLeaveImpl, (_h = eventTargetRef == null ? void 0 : eventTargetRef.current) != null ? _h : null, false, false);\n const selectionRef = React8.useRef(selection);\n selectionRef.current = selection;\n const focusRef = React8.useRef(null);\n const focusElement = React8.useCallback(\n (el) => {\n var _a2;\n if (ref.current === null || !ref.current.contains(document.activeElement))\n return;\n if (el === null && selectionRef.current.current !== void 0) {\n (_a2 = canvasRef == null ? void 0 : canvasRef.current) == null ? void 0 : _a2.focus({\n preventScroll: true\n });\n } else if (el !== null) {\n el.focus({\n preventScroll: true\n });\n }\n focusRef.current = el;\n },\n [canvasRef]\n );\n React8.useImperativeHandle(\n forwardedRef,\n () => ({\n focus: () => {\n var _a2;\n const el = focusRef.current;\n if (el === null || !document.contains(el)) {\n (_a2 = canvasRef == null ? void 0 : canvasRef.current) == null ? void 0 : _a2.focus({\n preventScroll: true\n });\n } else {\n el.focus({\n preventScroll: true\n });\n }\n },\n getBounds: (col, row) => {\n if (canvasRef === void 0 || canvasRef.current === null) {\n return void 0;\n }\n return getBoundsForItem(canvasRef.current, col != null ? col : 0, row != null ? row : -1);\n },\n damage\n }),\n [canvasRef, damage, getBoundsForItem]\n );\n const lastFocusedSubdomNode = React8.useRef();\n const accessibilityTree = useDebouncedMemo(\n () => {\n var _a2, _b2, _c2, _d2;\n if (width < 50)\n return null;\n let effectiveCols = getEffectiveColumns(mappedColumns, cellXOffset, width, dragAndDropState, translateX);\n const colOffset = firstColAccessible ? 0 : -1;\n if (!firstColAccessible && ((_a2 = effectiveCols[0]) == null ? void 0 : _a2.sourceIndex) === 0) {\n effectiveCols = effectiveCols.slice(1);\n }\n const [fCol, fRow] = (_c2 = (_b2 = selection.current) == null ? void 0 : _b2.cell) != null ? _c2 : [];\n const range2 = (_d2 = selection.current) == null ? void 0 : _d2.range;\n const visibleCols = effectiveCols.map((c) => c.sourceIndex);\n const visibleRows = makeRange(cellYOffset, Math.min(rows, cellYOffset + accessibilityHeight));\n if (fCol !== void 0 && fRow !== void 0 && !(visibleCols.includes(fCol) && visibleRows.includes(fRow))) {\n focusElement(null);\n }\n return /* @__PURE__ */ React8.createElement(\n \"table\",\n {\n key: \"access-tree\",\n role: \"grid\",\n \"aria-rowcount\": rows + 1,\n \"aria-multiselectable\": \"true\",\n \"aria-colcount\": mappedColumns.length + colOffset\n },\n /* @__PURE__ */ React8.createElement(\"thead\", { role: \"rowgroup\" }, /* @__PURE__ */ React8.createElement(\"tr\", { role: \"row\", \"aria-rowindex\": 1 }, effectiveCols.map((c) => /* @__PURE__ */ React8.createElement(\n \"th\",\n {\n role: \"columnheader\",\n \"aria-selected\": selection.columns.hasIndex(c.sourceIndex),\n \"aria-colindex\": c.sourceIndex + 1 + colOffset,\n tabIndex: -1,\n onFocus: (e) => {\n if (e.target === focusRef.current)\n return;\n return onCellFocused == null ? void 0 : onCellFocused([c.sourceIndex, -1]);\n },\n key: c.sourceIndex\n },\n c.title\n )))),\n /* @__PURE__ */ React8.createElement(\"tbody\", { role: \"rowgroup\" }, visibleRows.map((row) => /* @__PURE__ */ React8.createElement(\n \"tr\",\n {\n role: \"row\",\n \"aria-selected\": selection.rows.hasIndex(row),\n key: row,\n \"aria-rowindex\": row + 2\n },\n effectiveCols.map((c) => {\n const col = c.sourceIndex;\n const key = `${col},${row}`;\n const focused = fCol === col && fRow === row;\n const selected = range2 !== void 0 && col >= range2.x && col < range2.x + range2.width && row >= range2.y && row < range2.y + range2.height;\n const id = `glide-cell-${col}-${row}`;\n const location = [col, row];\n const cellContent = getCellContent(location, true);\n return /* @__PURE__ */ React8.createElement(\n \"td\",\n {\n key,\n role: \"gridcell\",\n \"aria-colindex\": col + 1 + colOffset,\n \"aria-selected\": selected,\n \"aria-readonly\": isInnerOnlyCell(cellContent) || !isReadWriteCell(cellContent),\n id,\n \"data-testid\": id,\n onClick: () => {\n const canvas = canvasRef == null ? void 0 : canvasRef.current;\n if (canvas === null || canvas === void 0)\n return;\n return onKeyDown == null ? void 0 : onKeyDown({\n bounds: getBoundsForItem(canvas, col, row),\n cancel: () => void 0,\n preventDefault: () => void 0,\n stopPropagation: () => void 0,\n ctrlKey: false,\n key: \"Enter\",\n keyCode: 13,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: void 0,\n location\n });\n },\n onFocusCapture: (e) => {\n var _a3, _b3;\n if (e.target === focusRef.current || ((_a3 = lastFocusedSubdomNode.current) == null ? void 0 : _a3[0]) === col && ((_b3 = lastFocusedSubdomNode.current) == null ? void 0 : _b3[1]) === row)\n return;\n lastFocusedSubdomNode.current = location;\n return onCellFocused == null ? void 0 : onCellFocused(location);\n },\n ref: focused ? focusElement : void 0,\n tabIndex: -1\n },\n getRowData(cellContent, getCellRenderer)\n );\n })\n )))\n );\n },\n [\n width,\n mappedColumns,\n cellXOffset,\n dragAndDropState,\n translateX,\n rows,\n cellYOffset,\n accessibilityHeight,\n selection,\n focusElement,\n getCellContent,\n canvasRef,\n onKeyDown,\n getBoundsForItem,\n onCellFocused\n ],\n 200\n );\n const stickyX = fixedShadowX ? getStickyWidth(mappedColumns, dragAndDropState) : 0;\n const opacityX = freezeColumns === 0 || !fixedShadowX ? 0 : cellXOffset > freezeColumns ? 1 : clamp2(-translateX / 100, 0, 1);\n const absoluteOffsetY = -cellYOffset * 32 + translateY;\n const opacityY = !fixedShadowY ? 0 : clamp2(-absoluteOffsetY / 100, 0, 1);\n const stickyShadow = React8.useMemo(() => {\n if (!opacityX && !opacityY) {\n return null;\n }\n const styleX = {\n position: \"absolute\",\n top: 0,\n left: stickyX,\n width: width - stickyX,\n height,\n opacity: opacityX,\n pointerEvents: \"none\",\n transition: !smoothScrollX ? \"opacity 0.2s\" : void 0,\n boxShadow: \"inset 13px 0 10px -13px rgba(0, 0, 0, 0.2)\"\n };\n const styleY = {\n position: \"absolute\",\n top: totalHeaderHeight,\n left: 0,\n width,\n height,\n opacity: opacityY,\n pointerEvents: \"none\",\n transition: !smoothScrollY ? \"opacity 0.2s\" : void 0,\n boxShadow: \"inset 0 13px 10px -13px rgba(0, 0, 0, 0.2)\"\n };\n return /* @__PURE__ */ React8.createElement(React8.Fragment, null, opacityX > 0 && /* @__PURE__ */ React8.createElement(\"div\", { id: \"shadow-x\", style: styleX }), opacityY > 0 && /* @__PURE__ */ React8.createElement(\"div\", { id: \"shadow-y\", style: styleY }));\n }, [opacityX, opacityY, stickyX, width, smoothScrollX, totalHeaderHeight, height, smoothScrollY]);\n const overlayStyle = React8.useMemo(\n () => ({\n position: \"absolute\",\n top: 0,\n left: 0\n }),\n []\n );\n return /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(\n \"canvas\",\n {\n \"data-testid\": \"data-grid-canvas\",\n tabIndex: 0,\n onKeyDown: onKeyDownImpl,\n onKeyUp: onKeyUpImpl,\n onFocus: onCanvasFocused,\n onBlur: onCanvasBlur,\n ref: refImpl,\n style\n },\n accessibilityTree\n ), /* @__PURE__ */ React8.createElement(\"canvas\", { ref: overlayRef, style: overlayStyle }), stickyShadow);\n};\nvar data_grid_default = React8.memo(React8.forwardRef(DataGrid));\n\n// src/data-grid-dnd/data-grid-dnd.tsx\nfunction offsetColumnSize(column, width, min, max) {\n var _a;\n return clamp3(Math.round(width - ((_a = column.growOffset) != null ? _a : 0)), Math.ceil(min), Math.floor(max));\n}\nvar DataGridDnd = (p) => {\n var _a;\n const [resizeColStartX, setResizeColStartX] = React9.useState();\n const [resizeCol, setResizeCol] = React9.useState();\n const [dragCol, setDragCol] = React9.useState();\n const [dropCol, setDropCol] = React9.useState();\n const [dragColActive, setDragColActive] = React9.useState(false);\n const [dragStartX, setDragStartX] = React9.useState();\n const [dragRow, setDragRow] = React9.useState();\n const [dropRow, setDropRow] = React9.useState();\n const [dragRowActive, setDragRowActive] = React9.useState(false);\n const [dragStartY, setDragStartY] = React9.useState();\n const {\n onHeaderMenuClick,\n getCellContent,\n onColumnMoved,\n onColumnResize,\n onColumnResizeStart,\n onColumnResizeEnd,\n gridRef,\n maxColumnWidth,\n minColumnWidth,\n onRowMoved,\n lockColumns,\n onMouseDown,\n onMouseUp,\n onItemHovered,\n onDragStart,\n canvasRef\n } = p;\n const canResize = ((_a = onColumnResize != null ? onColumnResize : onColumnResizeEnd) != null ? _a : onColumnResizeStart) !== void 0;\n const { columns, selection } = p;\n const selectedColumns = selection.columns;\n const onItemHoveredImpl = React9.useCallback(\n (args) => {\n const [col, row] = args.location;\n if (dragCol !== void 0 && dropCol !== col && col >= lockColumns) {\n setDragColActive(true);\n setDropCol(col);\n } else if (dragRow !== void 0 && row !== void 0) {\n setDragRowActive(true);\n setDropRow(Math.max(0, row));\n } else {\n onItemHovered == null ? void 0 : onItemHovered(args);\n }\n },\n [dragCol, dragRow, dropCol, onItemHovered, lockColumns]\n );\n const canDragCol = onColumnMoved !== void 0;\n const onMouseDownImpl = React9.useCallback(\n (args) => {\n var _a2, _b;\n if (args.button === 0) {\n const [col, row] = args.location;\n if (args.kind === \"out-of-bounds\" && args.isEdge && canResize) {\n const bounds = (_a2 = gridRef == null ? void 0 : gridRef.current) == null ? void 0 : _a2.getBounds(columns.length - 1, -1);\n if (bounds !== void 0) {\n setResizeColStartX(bounds.x);\n setResizeCol(columns.length - 1);\n }\n } else if (args.kind === \"header\" && col >= lockColumns) {\n const canvas = canvasRef == null ? void 0 : canvasRef.current;\n if (args.isEdge && canResize && canvas) {\n setResizeColStartX(args.bounds.x);\n setResizeCol(col);\n const rect = canvas.getBoundingClientRect();\n const scale = rect.width / canvas.offsetWidth;\n const width = args.bounds.width / scale;\n onColumnResizeStart == null ? void 0 : onColumnResizeStart(columns[col], width, col, width + ((_b = columns[col].growOffset) != null ? _b : 0));\n } else if (args.kind === \"header\" && canDragCol) {\n setDragStartX(args.bounds.x);\n setDragCol(col);\n }\n } else if (args.kind === \"cell\" && lockColumns > 0 && col === 0 && row !== void 0 && onRowMoved !== void 0) {\n setDragStartY(args.bounds.y);\n setDragRow(row);\n }\n }\n onMouseDown == null ? void 0 : onMouseDown(args);\n },\n [onMouseDown, canResize, lockColumns, onRowMoved, gridRef, columns, canDragCol, onColumnResizeStart, canvasRef]\n );\n const onHeaderMenuClickMangled = React9.useCallback(\n (col, screenPosition) => {\n if (dragColActive || dragRowActive)\n return;\n onHeaderMenuClick == null ? void 0 : onHeaderMenuClick(col, screenPosition);\n },\n [dragColActive, dragRowActive, onHeaderMenuClick]\n );\n const lastResizeWidthRef = React9.useRef(-1);\n const clearAll = React9.useCallback(() => {\n lastResizeWidthRef.current = -1;\n setDragRow(void 0);\n setDropRow(void 0);\n setDragStartY(void 0);\n setDragRowActive(false);\n setDragCol(void 0);\n setDropCol(void 0);\n setDragStartX(void 0);\n setDragColActive(false);\n setResizeCol(void 0);\n setResizeColStartX(void 0);\n }, []);\n const onMouseUpImpl = React9.useCallback(\n (args, isOutside) => {\n var _a2, _b, _c;\n if (args.button === 0) {\n if (resizeCol !== void 0) {\n if ((selectedColumns == null ? void 0 : selectedColumns.hasIndex(resizeCol)) === true) {\n for (const c of selectedColumns) {\n if (c === resizeCol)\n continue;\n const col = columns[c];\n const newSize = offsetColumnSize(\n col,\n lastResizeWidthRef.current,\n minColumnWidth,\n maxColumnWidth\n );\n onColumnResize == null ? void 0 : onColumnResize(col, newSize, c, newSize + ((_a2 = col.growOffset) != null ? _a2 : 0));\n }\n }\n const ns = offsetColumnSize(\n columns[resizeCol],\n lastResizeWidthRef.current,\n minColumnWidth,\n maxColumnWidth\n );\n onColumnResizeEnd == null ? void 0 : onColumnResizeEnd(columns[resizeCol], ns, resizeCol, ns + ((_b = columns[resizeCol].growOffset) != null ? _b : 0));\n if (selectedColumns.hasIndex(resizeCol)) {\n for (const c of selectedColumns) {\n if (c === resizeCol)\n continue;\n const col = columns[c];\n const s = offsetColumnSize(col, lastResizeWidthRef.current, minColumnWidth, maxColumnWidth);\n onColumnResizeEnd == null ? void 0 : onColumnResizeEnd(col, s, c, s + ((_c = col.growOffset) != null ? _c : 0));\n }\n }\n }\n clearAll();\n if (dragCol !== void 0 && dropCol !== void 0) {\n onColumnMoved == null ? void 0 : onColumnMoved(dragCol, dropCol);\n }\n if (dragRow !== void 0 && dropRow !== void 0) {\n onRowMoved == null ? void 0 : onRowMoved(dragRow, dropRow);\n }\n }\n onMouseUp == null ? void 0 : onMouseUp(args, isOutside);\n },\n [\n onMouseUp,\n resizeCol,\n dragCol,\n dropCol,\n dragRow,\n dropRow,\n selectedColumns,\n onColumnResizeEnd,\n columns,\n minColumnWidth,\n maxColumnWidth,\n onColumnResize,\n onColumnMoved,\n onRowMoved,\n clearAll\n ]\n );\n const dragOffset = React9.useMemo(() => {\n if (dragCol === void 0 || dropCol === void 0)\n return void 0;\n if (dragCol === dropCol)\n return void 0;\n return {\n src: dragCol,\n dest: dropCol\n };\n }, [dragCol, dropCol]);\n const onMouseMove = React9.useCallback(\n (event) => {\n var _a2, _b;\n const canvas = canvasRef == null ? void 0 : canvasRef.current;\n if (dragCol !== void 0 && dragStartX !== void 0) {\n const diff = Math.abs(event.clientX - dragStartX);\n if (diff > 20) {\n setDragColActive(true);\n }\n } else if (dragRow !== void 0 && dragStartY !== void 0) {\n const diff = Math.abs(event.clientY - dragStartY);\n if (diff > 20) {\n setDragRowActive(true);\n }\n } else if (resizeCol !== void 0 && resizeColStartX !== void 0 && canvas) {\n const rect = canvas.getBoundingClientRect();\n const scale = rect.width / canvas.offsetWidth;\n const newWidth = (event.clientX - resizeColStartX) / scale;\n const column = columns[resizeCol];\n const ns = offsetColumnSize(column, newWidth, minColumnWidth, maxColumnWidth);\n onColumnResize == null ? void 0 : onColumnResize(column, ns, resizeCol, ns + ((_a2 = column.growOffset) != null ? _a2 : 0));\n lastResizeWidthRef.current = newWidth;\n if ((selectedColumns == null ? void 0 : selectedColumns.first()) === resizeCol) {\n for (const c of selectedColumns) {\n if (c === resizeCol)\n continue;\n const col = columns[c];\n const s = offsetColumnSize(col, lastResizeWidthRef.current, minColumnWidth, maxColumnWidth);\n onColumnResize == null ? void 0 : onColumnResize(col, s, c, s + ((_b = col.growOffset) != null ? _b : 0));\n }\n }\n }\n },\n [\n dragCol,\n dragStartX,\n dragRow,\n dragStartY,\n resizeCol,\n resizeColStartX,\n columns,\n minColumnWidth,\n maxColumnWidth,\n onColumnResize,\n selectedColumns,\n canvasRef\n ]\n );\n const getMangledCellContent = React9.useCallback(\n (cell, forceStrict) => {\n if (dragRow === void 0 || dropRow === void 0)\n return getCellContent(cell, forceStrict);\n let [col, row] = cell;\n if (row === dropRow) {\n row = dragRow;\n } else {\n if (row > dropRow)\n row -= 1;\n if (row >= dragRow)\n row += 1;\n }\n return getCellContent([col, row], forceStrict);\n },\n [dragRow, dropRow, getCellContent]\n );\n const onDragStartImpl = React9.useCallback(\n (args) => {\n onDragStart == null ? void 0 : onDragStart(args);\n if (!args.defaultPrevented()) {\n clearAll();\n }\n },\n [clearAll, onDragStart]\n );\n return /* @__PURE__ */ React9.createElement(\n data_grid_default,\n {\n accessibilityHeight: p.accessibilityHeight,\n canvasRef: p.canvasRef,\n cellXOffset: p.cellXOffset,\n cellYOffset: p.cellYOffset,\n columns: p.columns,\n disabledRows: p.disabledRows,\n drawCustomCell: p.drawCustomCell,\n drawFocusRing: p.drawFocusRing,\n drawHeader: p.drawHeader,\n enableGroups: p.enableGroups,\n eventTargetRef: p.eventTargetRef,\n experimental: p.experimental,\n fillHandle: p.fillHandle,\n firstColAccessible: p.firstColAccessible,\n fixedShadowX: p.fixedShadowX,\n fixedShadowY: p.fixedShadowY,\n freezeColumns: p.freezeColumns,\n getCellRenderer: p.getCellRenderer,\n getGroupDetails: p.getGroupDetails,\n getRowThemeOverride: p.getRowThemeOverride,\n groupHeaderHeight: p.groupHeaderHeight,\n headerHeight: p.headerHeight,\n headerIcons: p.headerIcons,\n height: p.height,\n highlightRegions: p.highlightRegions,\n imageWindowLoader: p.imageWindowLoader,\n isDraggable: p.isDraggable,\n isFilling: p.isFilling,\n isFocused: p.isFocused,\n onCanvasBlur: p.onCanvasBlur,\n onCanvasFocused: p.onCanvasFocused,\n onCellFocused: p.onCellFocused,\n onContextMenu: p.onContextMenu,\n onDragEnd: p.onDragEnd,\n onDragLeave: p.onDragLeave,\n onDragOverCell: p.onDragOverCell,\n onDrop: p.onDrop,\n onKeyDown: p.onKeyDown,\n onKeyUp: p.onKeyUp,\n onMouseMove: p.onMouseMove,\n prelightCells: p.prelightCells,\n rowHeight: p.rowHeight,\n rows: p.rows,\n selection: p.selection,\n smoothScrollX: p.smoothScrollX,\n smoothScrollY: p.smoothScrollY,\n theme: p.theme,\n trailingRowType: p.trailingRowType,\n translateX: p.translateX,\n translateY: p.translateY,\n verticalBorder: p.verticalBorder,\n width: p.width,\n getCellContent: getMangledCellContent,\n isResizing: resizeCol !== void 0,\n onHeaderMenuClick: onHeaderMenuClickMangled,\n isDragging: dragColActive,\n onItemHovered: onItemHoveredImpl,\n onDragStart: onDragStartImpl,\n onMouseDown: onMouseDownImpl,\n allowResize: canResize,\n onMouseUp: onMouseUpImpl,\n dragAndDropState: dragOffset,\n onMouseMoveRaw: onMouseMove,\n ref: gridRef\n }\n );\n};\nvar data_grid_dnd_default = DataGridDnd;\n\n// src/scrolling-data-grid/infinite-scroller.tsx\nimport * as React10 from \"react\";\n\n// src/common/resize-detector.ts\nimport { useLayoutEffect as useLayoutEffect4, useState as useState6, useRef as useRef6 } from \"react\";\nfunction useResizeDetector(initialSize) {\n const ref = useRef6(null);\n const [size, setSize] = useState6({\n width: initialSize == null ? void 0 : initialSize[0],\n height: initialSize == null ? void 0 : initialSize[1]\n });\n useLayoutEffect4(() => {\n const resizeCallback = (entries) => {\n for (const entry of entries) {\n const { width, height } = entry && entry.contentRect || {};\n setSize((cv) => cv.width === width && cv.height === height ? cv : { width, height });\n }\n };\n const resizeObserver = new window.ResizeObserver(resizeCallback);\n if (ref.current) {\n resizeObserver.observe(ref.current, void 0);\n }\n return () => {\n resizeObserver.disconnect();\n };\n }, [ref.current]);\n return { ref, ...size };\n}\n\n// src/scrolling-data-grid/infinite-scroller.tsx\nvar _exp8 = () => (p) => p.isSafari ? \"scroll\" : \"auto\";\nvar ScrollRegionStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"ScrollRegionStyle\",\n class: \"s1jz82f8\",\n propsAsIs: false,\n vars: {\n \"s1jz82f8-0\": [_exp8()]\n }\n});\nfunction useTouchUpDelayed(delay) {\n const [hasTouches, setHasTouches] = React10.useState(false);\n const cbTimer = React10.useRef(0);\n useEventListener(\"touchstart\", React10.useCallback(() => {\n window.clearTimeout(cbTimer.current);\n setHasTouches(true);\n }, []), window, true, false);\n useEventListener(\"touchend\", React10.useCallback((e) => {\n if (e.touches.length === 0) {\n cbTimer.current = window.setTimeout(() => setHasTouches(false), delay);\n }\n }, [delay]), window, true, false);\n return hasTouches;\n}\nvar InfiniteScroller = (p) => {\n var _a, _b, _c, _d;\n const {\n children,\n clientHeight,\n scrollHeight,\n scrollWidth,\n update,\n draggable,\n className,\n preventDiagonalScrolling = false,\n paddingBottom = 0,\n paddingRight = 0,\n rightElement,\n rightElementProps,\n scrollRef,\n scrollToEnd,\n initialSize,\n minimap\n } = p;\n const padders = [];\n const rightElementSticky = (_a = rightElementProps == null ? void 0 : rightElementProps.sticky) != null ? _a : false;\n const rightElementFill = (_b = rightElementProps == null ? void 0 : rightElementProps.fill) != null ? _b : false;\n const offsetY = React10.useRef(0);\n const lastScrollY = React10.useRef(0);\n const scroller = React10.useRef(null);\n const dpr = window.devicePixelRatio;\n React10.useEffect(() => {\n const el = scroller.current;\n if (el === null || scrollToEnd !== true)\n return;\n el.scrollLeft = el.scrollWidth - el.clientWidth;\n }, [scrollToEnd]);\n const lastScrollPosition = React10.useRef({\n scrollLeft: 0,\n scrollTop: 0,\n lockDirection: void 0\n });\n const rightWrapRef = React10.useRef(null);\n const hasTouches = useTouchUpDelayed(200);\n const [isIdle, setIsIdle] = React10.useState(true);\n const idleTimer = React10.useRef(0);\n React10.useEffect(() => {\n if (!isIdle || hasTouches || lastScrollPosition.current.lockDirection === void 0)\n return;\n const el = scroller.current;\n if (el === null)\n return;\n const [lx, ly] = lastScrollPosition.current.lockDirection;\n if (lx !== void 0) {\n el.scrollLeft = lx;\n } else if (ly !== void 0) {\n el.scrollTop = ly;\n }\n lastScrollPosition.current.lockDirection = void 0;\n }, [hasTouches, isIdle]);\n const onScroll = React10.useCallback(() => {\n var _a2, _b2, _c2, _d2;\n const el = scroller.current;\n if (el === null)\n return;\n let scrollTop = el.scrollTop;\n let scrollLeft = el.scrollLeft;\n const lastScrollTop = lastScrollPosition.current.scrollTop;\n const lastScrollLeft = lastScrollPosition.current.scrollLeft;\n const dx = scrollLeft - lastScrollLeft;\n const dy = scrollTop - lastScrollTop;\n if (hasTouches && dx !== 0 && dy !== 0 && (Math.abs(dx) > 3 || Math.abs(dy) > 3) && preventDiagonalScrolling && lastScrollPosition.current.lockDirection === void 0) {\n lastScrollPosition.current.lockDirection = Math.abs(dx) < Math.abs(dy) ? [lastScrollLeft, void 0] : [void 0, lastScrollTop];\n }\n const lock = lastScrollPosition.current.lockDirection;\n scrollLeft = (_a2 = lock == null ? void 0 : lock[0]) != null ? _a2 : scrollLeft;\n scrollTop = (_b2 = lock == null ? void 0 : lock[1]) != null ? _b2 : scrollTop;\n lastScrollPosition.current.scrollLeft = scrollLeft;\n lastScrollPosition.current.scrollTop = scrollTop;\n const newY = scrollTop;\n const delta = lastScrollY.current - newY;\n const scrollableHeight = el.scrollHeight - el.clientHeight;\n lastScrollY.current = newY;\n if (scrollableHeight > 0 && (Math.abs(delta) > 2e3 || newY === 0 || newY === scrollableHeight) && scrollHeight > el.scrollHeight + 5) {\n const prog = newY / scrollableHeight;\n const recomputed = (scrollHeight - el.clientHeight) * prog;\n offsetY.current = recomputed - newY;\n }\n if (lock !== void 0) {\n window.clearTimeout(idleTimer.current);\n setIsIdle(false);\n idleTimer.current = window.setTimeout(() => setIsIdle(true), 200);\n }\n update({\n x: scrollLeft,\n y: newY + offsetY.current,\n width: el.clientWidth - paddingRight,\n height: el.clientHeight - paddingBottom,\n paddingRight: (_d2 = (_c2 = rightWrapRef.current) == null ? void 0 : _c2.clientWidth) != null ? _d2 : 0\n });\n }, [paddingBottom, paddingRight, scrollHeight, update, preventDiagonalScrolling, hasTouches]);\n const onScrollRef = React10.useRef(onScroll);\n onScrollRef.current = onScroll;\n const lastProps = React10.useRef();\n const didFirstScroll = React10.useRef(false);\n React10.useEffect(() => {\n if (didFirstScroll.current)\n onScroll();\n else\n didFirstScroll.current = true;\n }, [onScroll, paddingBottom, paddingRight]);\n const setRefs = React10.useCallback((instance) => {\n scroller.current = instance;\n if (scrollRef !== void 0) {\n scrollRef.current = instance;\n }\n }, [scrollRef]);\n let key = 0;\n let h = 0;\n padders.push(/* @__PURE__ */ React10.createElement(\"div\", {\n key: key++,\n style: {\n width: scrollWidth,\n height: 0\n }\n }));\n while (h < scrollHeight) {\n const toAdd = Math.min(5e6, scrollHeight - h);\n padders.push(/* @__PURE__ */ React10.createElement(\"div\", {\n key: key++,\n style: {\n width: 0,\n height: toAdd\n }\n }));\n h += toAdd;\n }\n const {\n ref,\n width,\n height\n } = useResizeDetector(initialSize);\n if (((_c = lastProps.current) == null ? void 0 : _c.height) !== height || ((_d = lastProps.current) == null ? void 0 : _d.width) !== width) {\n window.setTimeout(() => onScrollRef.current(), 0);\n lastProps.current = {\n width,\n height\n };\n }\n if ((width != null ? width : 0) === 0 || (height != null ? height : 0) === 0)\n return /* @__PURE__ */ React10.createElement(\"div\", {\n ref\n });\n return /* @__PURE__ */ React10.createElement(\"div\", {\n ref\n }, /* @__PURE__ */ React10.createElement(ScrollRegionStyle, {\n isSafari: browserIsSafari.value\n }, minimap, /* @__PURE__ */ React10.createElement(\"div\", {\n className: \"dvn-underlay\"\n }, children), /* @__PURE__ */ React10.createElement(\"div\", {\n ref: setRefs,\n style: lastProps.current,\n draggable,\n onDragStart: (e) => {\n if (!draggable) {\n e.stopPropagation();\n e.preventDefault();\n }\n },\n className: \"dvn-scroller \" + (className != null ? className : \"\"),\n onScroll\n }, /* @__PURE__ */ React10.createElement(\"div\", {\n className: \"dvn-scroll-inner\" + (rightElement === void 0 ? \" hidden\" : \"\")\n }, /* @__PURE__ */ React10.createElement(\"div\", {\n className: \"dvn-stack\"\n }, padders), rightElement !== void 0 && /* @__PURE__ */ React10.createElement(React10.Fragment, null, !rightElementFill && /* @__PURE__ */ React10.createElement(\"div\", {\n className: \"dvn-spacer\"\n }), /* @__PURE__ */ React10.createElement(\"div\", {\n ref: rightWrapRef,\n style: {\n height,\n maxHeight: clientHeight - Math.ceil(dpr % 1),\n position: \"sticky\",\n top: 0,\n paddingLeft: 1,\n marginBottom: -40,\n marginRight: paddingRight,\n flexGrow: rightElementFill ? 1 : void 0,\n right: rightElementSticky ? paddingRight != null ? paddingRight : 0 : void 0,\n pointerEvents: \"auto\"\n }\n }, rightElement))))));\n};\n\n// src/scrolling-data-grid/scrolling-data-grid.tsx\nimport clamp4 from \"lodash/clamp.js\";\nvar MinimapStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"MinimapStyle\",\n class: \"m15w2ly5\",\n propsAsIs: false\n});\nvar GridScroller = (p) => {\n var _a, _b, _c;\n const {\n columns,\n rows,\n rowHeight,\n headerHeight,\n groupHeaderHeight,\n enableGroups,\n freezeColumns,\n experimental,\n clientSize,\n className,\n onVisibleRegionChanged,\n scrollToEnd,\n scrollRef,\n preventDiagonalScrolling,\n rightElement,\n rightElementProps,\n overscrollX,\n overscrollY,\n showMinimap = false,\n initialSize,\n smoothScrollX = false,\n smoothScrollY = false,\n isDraggable\n } = p;\n const {\n paddingRight,\n paddingBottom\n } = experimental != null ? experimental : {};\n const [clientWidth, clientHeight] = clientSize;\n const last = React11.useRef();\n const lastX = React11.useRef();\n const lastY = React11.useRef();\n const lastSize = React11.useRef();\n const width = React11.useMemo(() => {\n let r = Math.max(0, overscrollX != null ? overscrollX : 0);\n for (const c of columns) {\n r += c.width;\n }\n return r;\n }, [columns, overscrollX]);\n let height = enableGroups ? headerHeight + groupHeaderHeight : headerHeight;\n if (typeof rowHeight === \"number\") {\n height += rows * rowHeight;\n } else {\n for (let r = 0; r < rows; r++) {\n height += rowHeight(r);\n }\n }\n if (overscrollY !== void 0) {\n height += overscrollY;\n }\n const lastArgs = React11.useRef();\n const processArgs = React11.useCallback(() => {\n var _a2, _b2, _c2;\n if (lastArgs.current === void 0)\n return;\n const args = {\n ...lastArgs.current\n };\n let x = 0;\n let tx = args.x < 0 ? -args.x : 0;\n let cellRight = 0;\n let cellX = 0;\n args.x = args.x < 0 ? 0 : args.x;\n let stickyColWidth = 0;\n for (let i = 0; i < freezeColumns; i++) {\n stickyColWidth += columns[i].width;\n }\n for (const c of columns) {\n const cx = x - stickyColWidth;\n if (args.x >= cx + c.width) {\n x += c.width;\n cellX++;\n cellRight++;\n } else if (args.x > cx) {\n x += c.width;\n if (smoothScrollX) {\n tx += cx - args.x;\n } else {\n cellX++;\n }\n cellRight++;\n } else if (args.x + args.width > cx) {\n x += c.width;\n cellRight++;\n } else {\n break;\n }\n }\n let ty = 0;\n let cellY = 0;\n let cellBottom = 0;\n if (typeof rowHeight === \"number\") {\n if (smoothScrollY) {\n cellY = Math.floor(args.y / rowHeight);\n ty = cellY * rowHeight - args.y;\n } else {\n cellY = Math.ceil(args.y / rowHeight);\n }\n cellBottom = Math.ceil(args.height / rowHeight) + cellY;\n if (ty < 0)\n cellBottom++;\n } else {\n let y = 0;\n for (let row = 0; row < rows; row++) {\n const rh = rowHeight(row);\n const cy = y + (smoothScrollY ? 0 : rh / 2);\n if (args.y >= y + rh) {\n y += rh;\n cellY++;\n cellBottom++;\n } else if (args.y > cy) {\n y += rh;\n if (smoothScrollY) {\n ty += cy - args.y;\n } else {\n cellY++;\n }\n cellBottom++;\n } else if (args.y + args.height > rh / 2 + y) {\n y += rh;\n cellBottom++;\n } else {\n break;\n }\n }\n }\n const rect = {\n x: cellX,\n y: cellY,\n width: cellRight - cellX,\n height: cellBottom - cellY\n };\n const oldRect = last.current;\n if (oldRect === void 0 || oldRect.y !== rect.y || oldRect.x !== rect.x || oldRect.height !== rect.height || oldRect.width !== rect.width || lastX.current !== tx || lastY.current !== ty || args.width !== ((_a2 = lastSize.current) == null ? void 0 : _a2[0]) || args.height !== ((_b2 = lastSize.current) == null ? void 0 : _b2[1])) {\n onVisibleRegionChanged == null ? void 0 : onVisibleRegionChanged({\n x: cellX,\n y: cellY,\n width: cellRight - cellX,\n height: cellBottom - cellY\n }, args.width, args.height, (_c2 = args.paddingRight) != null ? _c2 : 0, tx, ty);\n last.current = rect;\n lastX.current = tx;\n lastY.current = ty;\n lastSize.current = [args.width, args.height];\n }\n }, [columns, rowHeight, rows, onVisibleRegionChanged, freezeColumns, smoothScrollX, smoothScrollY]);\n const onScrollUpdate = React11.useCallback((args) => {\n lastArgs.current = args;\n processArgs();\n }, [processArgs]);\n React11.useEffect(() => {\n processArgs();\n }, [processArgs]);\n const scroller = (_a = scrollRef == null ? void 0 : scrollRef.current) != null ? _a : void 0;\n const aspect = clamp4(width / height, 2 / 3, 1.5);\n const maxSize = 200;\n const w = aspect > 1 ? maxSize : Math.ceil(maxSize * aspect);\n const h = aspect > 1 ? Math.ceil(maxSize / aspect) : maxSize;\n const hRatio = w / width;\n const vRatio = h / height;\n const vWidth = Math.min(clientWidth * Math.max(hRatio, 0.01), w);\n const vHeight = Math.min(clientHeight * Math.max(vRatio, 0.01), h);\n const left = ((_b = scroller == null ? void 0 : scroller.scrollLeft) != null ? _b : 0) / (width - clientWidth) * (w - vWidth);\n const top = ((_c = scroller == null ? void 0 : scroller.scrollTop) != null ? _c : 0) / (height - clientHeight) * (h - vHeight);\n const minimap = React11.useMemo(() => {\n if (!showMinimap || vWidth === 0 || vHeight === 0)\n return void 0;\n const handleMouse = (e) => {\n if (scroller === void 0)\n return;\n const bounds = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - bounds.x - vWidth / 2;\n const y = e.clientY - bounds.y - vHeight / 2;\n const newScrollLeft = (width - scroller.clientWidth) * (x / (w - vWidth));\n const newScrollTop = (height - scroller.clientHeight) * (y / (h - vHeight));\n scroller.scrollTo({\n left: newScrollLeft,\n top: newScrollTop,\n behavior: e.type === \"mousemove\" ? \"auto\" : \"smooth\"\n });\n };\n return /* @__PURE__ */ React11.createElement(MinimapStyle, {\n style: {\n width: w,\n height: h\n },\n \"data-testid\": \"minimap-container\",\n onMouseMove: (e) => {\n if (e.buttons !== 1)\n return;\n handleMouse(e);\n },\n onClick: handleMouse\n }, /* @__PURE__ */ React11.createElement(\"div\", {\n className: \"header\"\n }), /* @__PURE__ */ React11.createElement(\"div\", {\n className: \"locationMarker\",\n onDragStart: (e) => e.preventDefault(),\n style: {\n left,\n top,\n width: vWidth,\n height: vHeight,\n borderRadius: Math.min(vWidth, vHeight * 0.2, 9)\n }\n }));\n }, [h, height, left, scroller, showMinimap, top, vHeight, vWidth, w, width]);\n return /* @__PURE__ */ React11.createElement(InfiniteScroller, {\n scrollRef,\n minimap,\n className,\n preventDiagonalScrolling,\n draggable: isDraggable === true || typeof isDraggable === \"string\",\n scrollWidth: width + (paddingRight != null ? paddingRight : 0),\n scrollHeight: height + (paddingBottom != null ? paddingBottom : 0),\n clientHeight,\n rightElement,\n paddingBottom,\n paddingRight,\n rightElementProps,\n update: onScrollUpdate,\n initialSize,\n scrollToEnd\n }, /* @__PURE__ */ React11.createElement(data_grid_dnd_default, {\n eventTargetRef: scrollRef,\n width: clientWidth,\n height: clientHeight,\n accessibilityHeight: p.accessibilityHeight,\n canvasRef: p.canvasRef,\n cellXOffset: p.cellXOffset,\n cellYOffset: p.cellYOffset,\n columns: p.columns,\n disabledRows: p.disabledRows,\n enableGroups: p.enableGroups,\n fillHandle: p.fillHandle,\n firstColAccessible: p.firstColAccessible,\n fixedShadowX: p.fixedShadowX,\n fixedShadowY: p.fixedShadowY,\n freezeColumns: p.freezeColumns,\n getCellContent: p.getCellContent,\n getCellRenderer: p.getCellRenderer,\n getGroupDetails: p.getGroupDetails,\n getRowThemeOverride: p.getRowThemeOverride,\n groupHeaderHeight: p.groupHeaderHeight,\n headerHeight: p.headerHeight,\n highlightRegions: p.highlightRegions,\n imageWindowLoader: p.imageWindowLoader,\n isFilling: p.isFilling,\n isFocused: p.isFocused,\n lockColumns: p.lockColumns,\n maxColumnWidth: p.maxColumnWidth,\n minColumnWidth: p.minColumnWidth,\n onHeaderMenuClick: p.onHeaderMenuClick,\n onMouseMove: p.onMouseMove,\n prelightCells: p.prelightCells,\n rowHeight: p.rowHeight,\n rows: p.rows,\n selection: p.selection,\n theme: p.theme,\n trailingRowType: p.trailingRowType,\n translateX: p.translateX,\n translateY: p.translateY,\n verticalBorder: p.verticalBorder,\n drawCustomCell: p.drawCustomCell,\n drawFocusRing: p.drawFocusRing,\n drawHeader: p.drawHeader,\n experimental: p.experimental,\n gridRef: p.gridRef,\n headerIcons: p.headerIcons,\n isDraggable: p.isDraggable,\n onCanvasBlur: p.onCanvasBlur,\n onCanvasFocused: p.onCanvasFocused,\n onCellFocused: p.onCellFocused,\n onColumnMoved: p.onColumnMoved,\n onColumnResize: p.onColumnResize,\n onColumnResizeEnd: p.onColumnResizeEnd,\n onColumnResizeStart: p.onColumnResizeStart,\n onContextMenu: p.onContextMenu,\n onDragEnd: p.onDragEnd,\n onDragLeave: p.onDragLeave,\n onDragOverCell: p.onDragOverCell,\n onDragStart: p.onDragStart,\n onDrop: p.onDrop,\n onItemHovered: p.onItemHovered,\n onKeyDown: p.onKeyDown,\n onKeyUp: p.onKeyUp,\n onMouseDown: p.onMouseDown,\n onMouseUp: p.onMouseUp,\n onRowMoved: p.onRowMoved,\n smoothScrollX: p.smoothScrollX,\n smoothScrollY: p.smoothScrollY\n }));\n};\nvar scrolling_data_grid_default = GridScroller;\n\n// src/data-grid-search/data-grid-search-style.tsx\nvar _exp9 = () => (p) => p.showSearch ? 0 : 400;\nvar SearchWrapper = /* @__PURE__ */ styled_default(\"div\")({\n name: \"SearchWrapper\",\n class: \"sxep88s\",\n propsAsIs: false,\n vars: {\n \"sxep88s-0\": [_exp9(), \"px\"]\n }\n});\n\n// src/data-grid-search/data-grid-search.tsx\nvar upArrow = /* @__PURE__ */ React12.createElement(\"svg\", { className: \"button-icon\", viewBox: \"0 0 512 512\" }, /* @__PURE__ */ React12.createElement(\n \"path\",\n {\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"48\",\n d: \"M112 244l144-144 144 144M256 120v292\"\n }\n));\nvar downArrow = /* @__PURE__ */ React12.createElement(\"svg\", { className: \"button-icon\", viewBox: \"0 0 512 512\" }, /* @__PURE__ */ React12.createElement(\n \"path\",\n {\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"48\",\n d: \"M112 268l144 144 144-144M256 392V100\"\n }\n));\nvar closeX = /* @__PURE__ */ React12.createElement(\"svg\", { className: \"button-icon\", viewBox: \"0 0 512 512\" }, /* @__PURE__ */ React12.createElement(\n \"path\",\n {\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"32\",\n d: \"M368 368L144 144M368 144L144 368\"\n }\n));\nvar targetSearchTimeMS = 10;\nvar DataGridSearch = (p) => {\n const {\n canvasRef,\n cellYOffset,\n rows,\n columns,\n searchInputRef,\n searchValue,\n searchResults: searchResultsIn,\n onSearchValueChange,\n getCellsForSelection,\n onSearchResultsChanged,\n showSearch = false,\n onSearchClose\n } = p;\n const [searchID] = React12.useState(() => \"search-box-\" + Math.round(Math.random() * 1e3));\n const [searchStringInner, setSearchStringInner] = React12.useState(\"\");\n const searchString = searchValue != null ? searchValue : searchStringInner;\n const setSearchString = React12.useCallback(\n (newVal) => {\n setSearchStringInner(newVal);\n onSearchValueChange == null ? void 0 : onSearchValueChange(newVal);\n },\n [onSearchValueChange]\n );\n const [searchStatus, setSearchStatus] = React12.useState();\n const searchStatusRef = React12.useRef(searchStatus);\n searchStatusRef.current = searchStatus;\n React12.useEffect(() => {\n if (searchResultsIn === void 0)\n return;\n if (searchResultsIn.length > 0) {\n setSearchStatus((cv) => {\n var _a;\n return {\n rowsSearched: rows,\n results: searchResultsIn.length,\n selectedIndex: (_a = cv == null ? void 0 : cv.selectedIndex) != null ? _a : -1\n };\n });\n } else {\n setSearchStatus(void 0);\n }\n }, [rows, searchResultsIn]);\n const abortControllerRef = React12.useRef(new AbortController());\n const searchHandle = React12.useRef();\n const [searchResultsInner, setSearchResultsInner] = React12.useState([]);\n const searchResults = searchResultsIn != null ? searchResultsIn : searchResultsInner;\n const cancelSearch = React12.useCallback(() => {\n if (searchHandle.current !== void 0) {\n window.cancelAnimationFrame(searchHandle.current);\n searchHandle.current = void 0;\n abortControllerRef.current.abort();\n }\n }, []);\n const cellYOffsetRef = React12.useRef(cellYOffset);\n cellYOffsetRef.current = cellYOffset;\n const beginSearch = React12.useCallback(\n (str) => {\n const regex = new RegExp(str.replace(/([$()*+.?[\\\\\\]^{|}-])/g, \"\\\\$1\"), \"i\");\n let startY = cellYOffsetRef.current;\n let searchStride = Math.min(10, rows);\n let rowsSearched = 0;\n setSearchStatus(void 0);\n setSearchResultsInner([]);\n const runningResult = [];\n const tick = async () => {\n var _a, _b;\n if (getCellsForSelection === void 0)\n return;\n const tStart = performance.now();\n const rowsLeft = rows - rowsSearched;\n let data = getCellsForSelection(\n {\n x: 0,\n y: startY,\n width: columns.length,\n height: Math.min(searchStride, rowsLeft, rows - startY)\n },\n abortControllerRef.current.signal\n );\n if (typeof data === \"function\") {\n data = await data();\n }\n let added = false;\n for (const [row, d] of data.entries()) {\n for (const [col, cell] of d.entries()) {\n let testString;\n switch (cell.kind) {\n case GridCellKind.Text:\n case GridCellKind.Number:\n testString = cell.displayData;\n break;\n case GridCellKind.Uri:\n case GridCellKind.Markdown:\n testString = cell.data;\n break;\n case GridCellKind.Boolean:\n testString = typeof cell.data === \"boolean\" ? cell.data.toString() : void 0;\n break;\n case GridCellKind.Image:\n case GridCellKind.Bubble:\n testString = cell.data.join(\"\\u{1F433}\");\n break;\n case GridCellKind.Custom:\n testString = cell.copyData;\n break;\n }\n if (testString !== void 0 && regex.test(testString)) {\n runningResult.push([col, row + startY]);\n added = true;\n }\n }\n }\n const tEnd = performance.now();\n if (added) {\n setSearchResultsInner([...runningResult]);\n }\n rowsSearched += data.length;\n assert(rowsSearched <= rows);\n const selectedIndex = (_b = (_a = searchStatusRef.current) == null ? void 0 : _a.selectedIndex) != null ? _b : -1;\n setSearchStatus({\n results: runningResult.length,\n rowsSearched,\n selectedIndex\n });\n onSearchResultsChanged == null ? void 0 : onSearchResultsChanged(runningResult, selectedIndex);\n if (startY + searchStride >= rows) {\n startY = 0;\n } else {\n startY += searchStride;\n }\n const tElapsed = tEnd - tStart;\n const rounded = Math.max(tElapsed, 1);\n const scalar = targetSearchTimeMS / rounded;\n searchStride = Math.ceil(searchStride * scalar);\n if (rowsSearched < rows && runningResult.length < 1e3) {\n searchHandle.current = window.requestAnimationFrame(tick);\n }\n };\n cancelSearch();\n searchHandle.current = window.requestAnimationFrame(tick);\n },\n [cancelSearch, columns.length, getCellsForSelection, onSearchResultsChanged, rows]\n );\n const onClose = React12.useCallback(() => {\n var _a;\n onSearchClose == null ? void 0 : onSearchClose();\n setSearchStatus(void 0);\n setSearchResultsInner([]);\n onSearchResultsChanged == null ? void 0 : onSearchResultsChanged([], -1);\n cancelSearch();\n (_a = canvasRef == null ? void 0 : canvasRef.current) == null ? void 0 : _a.focus();\n }, [cancelSearch, canvasRef, onSearchClose, onSearchResultsChanged]);\n const onSearchChange = React12.useCallback(\n (event) => {\n setSearchString(event.target.value);\n if (searchResultsIn !== void 0)\n return;\n if (event.target.value === \"\") {\n setSearchStatus(void 0);\n setSearchResultsInner([]);\n cancelSearch();\n } else {\n beginSearch(event.target.value);\n }\n },\n [beginSearch, cancelSearch, setSearchString, searchResultsIn]\n );\n React12.useEffect(() => {\n if (showSearch && searchInputRef.current !== null) {\n setSearchString(\"\");\n searchInputRef.current.focus({ preventScroll: true });\n }\n }, [showSearch, searchInputRef, setSearchString]);\n const onNext = React12.useCallback(\n (ev) => {\n var _a;\n (_a = ev == null ? void 0 : ev.stopPropagation) == null ? void 0 : _a.call(ev);\n if (searchStatus === void 0)\n return;\n const newIndex = (searchStatus.selectedIndex + 1) % searchStatus.results;\n setSearchStatus({\n ...searchStatus,\n selectedIndex: newIndex\n });\n onSearchResultsChanged == null ? void 0 : onSearchResultsChanged(searchResults, newIndex);\n },\n [searchStatus, onSearchResultsChanged, searchResults]\n );\n const onPrev = React12.useCallback(\n (ev) => {\n var _a;\n (_a = ev == null ? void 0 : ev.stopPropagation) == null ? void 0 : _a.call(ev);\n if (searchStatus === void 0)\n return;\n let newIndex = (searchStatus.selectedIndex - 1) % searchStatus.results;\n if (newIndex < 0)\n newIndex += searchStatus.results;\n setSearchStatus({\n ...searchStatus,\n selectedIndex: newIndex\n });\n onSearchResultsChanged == null ? void 0 : onSearchResultsChanged(searchResults, newIndex);\n },\n [onSearchResultsChanged, searchResults, searchStatus]\n );\n const onSearchKeyDown = React12.useCallback(\n (event) => {\n if ((event.ctrlKey || event.metaKey) && event.nativeEvent.code === \"KeyF\" || event.key === \"Escape\") {\n onClose();\n event.stopPropagation();\n event.preventDefault();\n } else if (event.key === \"Enter\") {\n if (event.shiftKey) {\n onPrev();\n } else {\n onNext();\n }\n }\n },\n [onClose, onNext, onPrev]\n );\n React12.useEffect(() => {\n return () => {\n cancelSearch();\n };\n }, [cancelSearch]);\n const searchbox = React12.useMemo(() => {\n var _a, _b, _c;\n let resultString;\n if (searchStatus !== void 0) {\n resultString = searchStatus.results >= 1e3 ? `over 1000` : `${searchStatus.results} result${searchStatus.results !== 1 ? \"s\" : \"\"}`;\n if (searchStatus.selectedIndex >= 0) {\n resultString = `${searchStatus.selectedIndex + 1} of ${resultString}`;\n }\n }\n const cancelEvent = (ev) => {\n ev.stopPropagation();\n };\n const rowsSearchedProgress = Math.floor(((_a = searchStatus == null ? void 0 : searchStatus.rowsSearched) != null ? _a : 0) / rows * 100);\n const progressStyle = {\n width: `${rowsSearchedProgress}%`\n };\n return /* @__PURE__ */ React12.createElement(\n SearchWrapper,\n {\n showSearch,\n onMouseDown: cancelEvent,\n onMouseMove: cancelEvent,\n onMouseUp: cancelEvent,\n onClick: cancelEvent\n },\n /* @__PURE__ */ React12.createElement(\"div\", { className: \"search-bar-inner\" }, /* @__PURE__ */ React12.createElement(\n \"input\",\n {\n id: searchID,\n \"aria-hidden\": !showSearch,\n \"data-testid\": \"search-input\",\n ref: searchInputRef,\n onChange: onSearchChange,\n value: searchString,\n tabIndex: showSearch ? void 0 : -1,\n onKeyDownCapture: onSearchKeyDown\n }\n ), /* @__PURE__ */ React12.createElement(\n \"button\",\n {\n \"aria-label\": \"Previous Result\",\n \"aria-hidden\": !showSearch,\n tabIndex: showSearch ? void 0 : -1,\n onClick: onPrev,\n disabled: ((_b = searchStatus == null ? void 0 : searchStatus.results) != null ? _b : 0) === 0\n },\n upArrow\n ), /* @__PURE__ */ React12.createElement(\n \"button\",\n {\n \"aria-label\": \"Next Result\",\n \"aria-hidden\": !showSearch,\n tabIndex: showSearch ? void 0 : -1,\n onClick: onNext,\n disabled: ((_c = searchStatus == null ? void 0 : searchStatus.results) != null ? _c : 0) === 0\n },\n downArrow\n ), onSearchClose !== void 0 && /* @__PURE__ */ React12.createElement(\n \"button\",\n {\n \"aria-label\": \"Close Search\",\n \"aria-hidden\": !showSearch,\n \"data-testid\": \"search-close-button\",\n tabIndex: showSearch ? void 0 : -1,\n onClick: onClose\n },\n closeX\n )),\n searchStatus !== void 0 ? /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(\"div\", { className: \"search-status\" }, /* @__PURE__ */ React12.createElement(\"div\", { \"data-testid\": \"search-result-area\" }, resultString)), /* @__PURE__ */ React12.createElement(\"div\", { className: \"search-progress\", style: progressStyle })) : /* @__PURE__ */ React12.createElement(\"div\", { className: \"search-status\" }, /* @__PURE__ */ React12.createElement(\"label\", { htmlFor: searchID }, \"Type to search\"))\n );\n }, [\n onClose,\n onNext,\n onPrev,\n onSearchChange,\n onSearchClose,\n onSearchKeyDown,\n rows,\n searchStatus,\n searchString,\n showSearch,\n searchID,\n searchInputRef\n ]);\n return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(\n scrolling_data_grid_default,\n {\n prelightCells: searchResults,\n accessibilityHeight: p.accessibilityHeight,\n canvasRef: p.canvasRef,\n cellXOffset: p.cellXOffset,\n cellYOffset: p.cellYOffset,\n className: p.className,\n clientSize: p.clientSize,\n columns: p.columns,\n disabledRows: p.disabledRows,\n enableGroups: p.enableGroups,\n fillHandle: p.fillHandle,\n firstColAccessible: p.firstColAccessible,\n fixedShadowX: p.fixedShadowX,\n fixedShadowY: p.fixedShadowY,\n freezeColumns: p.freezeColumns,\n getCellContent: p.getCellContent,\n getCellRenderer: p.getCellRenderer,\n getGroupDetails: p.getGroupDetails,\n getRowThemeOverride: p.getRowThemeOverride,\n groupHeaderHeight: p.groupHeaderHeight,\n headerHeight: p.headerHeight,\n highlightRegions: p.highlightRegions,\n imageWindowLoader: p.imageWindowLoader,\n initialSize: p.initialSize,\n isFilling: p.isFilling,\n isFocused: p.isFocused,\n lockColumns: p.lockColumns,\n maxColumnWidth: p.maxColumnWidth,\n minColumnWidth: p.minColumnWidth,\n onHeaderMenuClick: p.onHeaderMenuClick,\n onMouseMove: p.onMouseMove,\n onVisibleRegionChanged: p.onVisibleRegionChanged,\n overscrollX: p.overscrollX,\n overscrollY: p.overscrollY,\n preventDiagonalScrolling: p.preventDiagonalScrolling,\n rightElement: p.rightElement,\n rightElementProps: p.rightElementProps,\n rowHeight: p.rowHeight,\n rows: p.rows,\n scrollRef: p.scrollRef,\n selection: p.selection,\n showMinimap: p.showMinimap,\n theme: p.theme,\n trailingRowType: p.trailingRowType,\n translateX: p.translateX,\n translateY: p.translateY,\n verticalBorder: p.verticalBorder,\n drawCustomCell: p.drawCustomCell,\n drawFocusRing: p.drawFocusRing,\n drawHeader: p.drawHeader,\n experimental: p.experimental,\n gridRef: p.gridRef,\n headerIcons: p.headerIcons,\n isDraggable: p.isDraggable,\n onCanvasBlur: p.onCanvasBlur,\n onCanvasFocused: p.onCanvasFocused,\n onCellFocused: p.onCellFocused,\n onColumnMoved: p.onColumnMoved,\n onColumnResize: p.onColumnResize,\n onColumnResizeEnd: p.onColumnResizeEnd,\n onColumnResizeStart: p.onColumnResizeStart,\n onContextMenu: p.onContextMenu,\n onDragEnd: p.onDragEnd,\n onDragLeave: p.onDragLeave,\n onDragOverCell: p.onDragOverCell,\n onDragStart: p.onDragStart,\n onDrop: p.onDrop,\n onItemHovered: p.onItemHovered,\n onKeyDown: p.onKeyDown,\n onKeyUp: p.onKeyUp,\n onMouseDown: p.onMouseDown,\n onMouseUp: p.onMouseUp,\n onRowMoved: p.onRowMoved,\n smoothScrollX: p.smoothScrollX,\n smoothScrollY: p.smoothScrollY,\n scrollToEnd: p.scrollToEnd\n }\n ), searchbox);\n};\nvar data_grid_search_default = DataGridSearch;\n\n// src/data-editor/group-rename.tsx\nimport React13 from \"react\";\nvar _exp10 = () => (p) => Math.max(16, p.targetHeight - 10);\nvar RenameInput = /* @__PURE__ */ styled_default(\"input\")({\n name: \"RenameInput\",\n class: \"r1kzy40b\",\n propsAsIs: false,\n vars: {\n \"r1kzy40b-0\": [_exp10(), \"px\"]\n }\n});\nvar GroupRename = (p) => {\n const {\n bounds,\n group,\n onClose,\n canvasBounds,\n onFinish\n } = p;\n const [value, setValue] = React13.useState(group);\n return /* @__PURE__ */ React13.createElement(ClickOutsideContainer, {\n style: {\n position: \"absolute\",\n left: bounds.x - canvasBounds.left + 1,\n top: bounds.y - canvasBounds.top,\n width: bounds.width - 2,\n height: bounds.height\n },\n className: \"c1sqdbw3\",\n onClickOutside: onClose\n }, /* @__PURE__ */ React13.createElement(RenameInput, {\n targetHeight: bounds.height,\n \"data-testid\": \"group-rename-input\",\n value,\n onBlur: onClose,\n onFocus: (e) => e.target.setSelectionRange(0, value.length),\n onChange: (e) => setValue(e.target.value),\n onKeyDown: (e) => {\n if (e.key === \"Enter\") {\n onFinish(value);\n } else if (e.key === \"Escape\") {\n onClose();\n }\n },\n autoFocus: true\n }));\n};\n\n// src/data-editor/use-column-sizer.ts\nimport * as React14 from \"react\";\nvar defaultSize = 150;\nfunction measureCell(ctx, cell, theme, getCellRenderer) {\n var _a, _b;\n const r = getCellRenderer(cell);\n return (_b = (_a = r == null ? void 0 : r.measure) == null ? void 0 : _a.call(r, ctx, cell, theme)) != null ? _b : defaultSize;\n}\nfunction measureColumn(ctx, theme, c, colIndex, selectedData, minColumnWidth, maxColumnWidth, removeOutliers, getCellRenderer) {\n let sizes = [];\n if (selectedData !== void 0) {\n sizes.push(\n ...selectedData.map((row) => row[colIndex]).map((cell) => measureCell(ctx, cell, theme, getCellRenderer))\n );\n }\n if (sizes.length > 5 && removeOutliers) {\n const average = sizes.reduce((a, b) => a + b) / sizes.length;\n sizes = sizes.filter((a) => a < average * 2);\n }\n sizes.push(ctx.measureText(c.title).width + 16 + (c.icon === void 0 ? 0 : 28));\n const biggest = Math.max(...sizes);\n const final = Math.max(Math.ceil(minColumnWidth), Math.min(Math.floor(maxColumnWidth), Math.ceil(biggest)));\n return {\n ...c,\n width: final\n };\n}\nfunction useColumnSizer(columns, rows, getCellsForSelection, clientWidth, minColumnWidth, maxColumnWidth, theme, getCellRenderer, abortController) {\n const rowsRef = React14.useRef(rows);\n const getCellsForSelectionRef = React14.useRef(getCellsForSelection);\n const themeRef = React14.useRef(theme);\n rowsRef.current = rows;\n getCellsForSelectionRef.current = getCellsForSelection;\n themeRef.current = theme;\n const [canvas, ctx] = React14.useMemo(() => {\n if (typeof window === \"undefined\")\n return [null, null];\n const offscreen = document.createElement(\"canvas\");\n offscreen.style[\"display\"] = \"none\";\n offscreen.style[\"opacity\"] = \"0\";\n offscreen.style[\"position\"] = \"fixed\";\n return [offscreen, offscreen.getContext(\"2d\", { alpha: false })];\n }, []);\n React14.useLayoutEffect(() => {\n if (canvas)\n document.documentElement.append(canvas);\n return () => {\n canvas == null ? void 0 : canvas.remove();\n };\n }, [canvas]);\n const memoMap = React14.useRef({});\n const lastColumns = React14.useRef();\n const [selectedData, setSelectionData] = React14.useState();\n React14.useLayoutEffect(() => {\n const getCells = getCellsForSelectionRef.current;\n if (getCells === void 0 || columns.every(isSizedGridColumn))\n return;\n let computeRows = Math.max(1, 10 - Math.floor(columns.length / 1e4));\n let tailRows = 0;\n if (computeRows < rowsRef.current && computeRows > 1) {\n computeRows--;\n tailRows = 1;\n }\n const computeArea = {\n x: 0,\n y: 0,\n width: columns.length,\n height: Math.min(rowsRef.current, computeRows)\n };\n const tailComputeArea = {\n x: 0,\n y: rowsRef.current - 1,\n width: columns.length,\n height: 1\n };\n const fn = async () => {\n const getResult = getCells(computeArea, abortController.signal);\n const tailGetResult = tailRows > 0 ? getCells(tailComputeArea, abortController.signal) : void 0;\n let toSet;\n if (typeof getResult === \"object\") {\n toSet = getResult;\n } else {\n toSet = await resolveCellsThunk(getResult);\n }\n if (tailGetResult !== void 0) {\n if (typeof tailGetResult === \"object\") {\n toSet = [...toSet, ...tailGetResult];\n } else {\n toSet = [...toSet, ...await resolveCellsThunk(tailGetResult)];\n }\n }\n lastColumns.current = columns;\n setSelectionData(toSet);\n };\n void fn();\n }, [abortController.signal, columns]);\n return React14.useMemo(() => {\n var _a;\n const getRaw = () => {\n if (columns.every(isSizedGridColumn)) {\n return columns;\n }\n if (ctx === null) {\n return columns.map((c) => {\n if (isSizedGridColumn(c))\n return c;\n return {\n ...c,\n width: defaultSize\n };\n });\n }\n ctx.font = `${themeRef.current.baseFontStyle} ${themeRef.current.fontFamily}`;\n return columns.map((c, colIndex) => {\n if (isSizedGridColumn(c))\n return c;\n if (memoMap.current[c.id] !== void 0) {\n return {\n ...c,\n width: memoMap.current[c.id]\n };\n }\n if (selectedData === void 0 || lastColumns.current !== columns || c.id === void 0) {\n return {\n ...c,\n width: defaultSize\n };\n }\n const r = measureColumn(\n ctx,\n theme,\n c,\n colIndex,\n selectedData,\n minColumnWidth,\n maxColumnWidth,\n true,\n getCellRenderer\n );\n memoMap.current[c.id] = r.width;\n return r;\n });\n };\n let result = getRaw();\n let totalWidth = 0;\n let totalGrow = 0;\n const distribute = [];\n for (const [i, c] of result.entries()) {\n totalWidth += c.width;\n if (c.grow !== void 0 && c.grow > 0) {\n totalGrow += c.grow;\n distribute.push(i);\n }\n }\n if (totalWidth < clientWidth && distribute.length > 0) {\n const writeable = [...result];\n const extra = clientWidth - totalWidth;\n let remaining = extra;\n for (let di = 0; di < distribute.length; di++) {\n const i = distribute[di];\n const weighted = ((_a = result[i].grow) != null ? _a : 0) / totalGrow;\n const toAdd = di === distribute.length - 1 ? remaining : Math.min(remaining, Math.floor(extra * weighted));\n writeable[i] = {\n ...result[i],\n growOffset: toAdd,\n width: result[i].width + toAdd\n };\n remaining -= toAdd;\n }\n result = writeable;\n }\n return result;\n }, [clientWidth, columns, ctx, selectedData, theme, minColumnWidth, maxColumnWidth, getCellRenderer]);\n}\n\n// src/common/is-hotkey.ts\nfunction checkKey(key, args) {\n if (key === void 0)\n return false;\n if (key.length > 1 && key.startsWith(\"_\")) {\n const keycode = Number.parseInt(key.slice(1));\n if (keycode !== args.keyCode)\n return false;\n } else {\n if (key !== args.key)\n return false;\n }\n return true;\n}\nfunction isHotkey(hotkey, args) {\n if (hotkey.length === 0)\n return false;\n let wantCtrl = false;\n let wantShift = false;\n let wantAlt = false;\n let wantMeta = false;\n const split = hotkey.split(\"+\");\n const key = split.pop();\n if (!checkKey(key, args))\n return false;\n for (const accel of split) {\n switch (accel) {\n case \"ctrl\":\n wantCtrl = true;\n break;\n case \"shift\":\n wantShift = true;\n break;\n case \"alt\":\n wantAlt = true;\n break;\n case \"meta\":\n wantMeta = true;\n break;\n case \"primary\":\n if (browserIsOSX.value) {\n wantMeta = true;\n } else {\n wantCtrl = true;\n }\n break;\n }\n }\n return args.altKey === wantAlt && args.ctrlKey === wantCtrl && args.shiftKey === wantShift && args.metaKey === wantMeta;\n}\n\n// src/data-grid/use-selection-behavior.ts\nimport React15 from \"react\";\nfunction useSelectionBehavior(gridSelection, setGridSelection, rangeBehavior, columnBehavior, rowBehavior, rangeSelect) {\n const setCurrent = React15.useCallback(\n (value, expand, append, trigger) => {\n var _a, _b;\n if ((rangeSelect === \"cell\" || rangeSelect === \"multi-cell\") && value !== void 0) {\n value = {\n ...value,\n range: {\n x: value.cell[0],\n y: value.cell[1],\n width: 1,\n height: 1\n }\n };\n }\n const rangeMixable = rangeBehavior === \"mixed\" && (append || trigger === \"drag\");\n const allowColumnCoSelect = columnBehavior === \"mixed\" && rangeMixable;\n const allowRowCoSelect = rowBehavior === \"mixed\" && rangeMixable;\n let newVal = {\n current: value === void 0 ? void 0 : {\n ...value,\n rangeStack: trigger === \"drag\" ? (_b = (_a = gridSelection.current) == null ? void 0 : _a.rangeStack) != null ? _b : [] : []\n },\n columns: allowColumnCoSelect ? gridSelection.columns : CompactSelection.empty(),\n rows: allowRowCoSelect ? gridSelection.rows : CompactSelection.empty()\n };\n const addLastRange = append && (rangeSelect === \"multi-rect\" || rangeSelect === \"multi-cell\");\n if (addLastRange && newVal.current !== void 0 && gridSelection.current !== void 0) {\n newVal = {\n ...newVal,\n current: {\n ...newVal.current,\n rangeStack: [...gridSelection.current.rangeStack, gridSelection.current.range]\n }\n };\n }\n setGridSelection(newVal, expand);\n },\n [columnBehavior, gridSelection, rangeBehavior, rangeSelect, rowBehavior, setGridSelection]\n );\n const setSelectedRows = React15.useCallback(\n (newRows, append, allowMixed) => {\n newRows = newRows != null ? newRows : gridSelection.rows;\n if (append !== void 0) {\n newRows = newRows.add(append);\n }\n let newVal;\n if (rowBehavior === \"exclusive\" && newRows.length > 0) {\n newVal = {\n current: void 0,\n columns: CompactSelection.empty(),\n rows: newRows\n };\n } else {\n const rangeMixed = allowMixed && rangeBehavior === \"mixed\";\n const columnMixed = allowMixed && columnBehavior === \"mixed\";\n const current = !rangeMixed ? void 0 : gridSelection.current;\n newVal = {\n current,\n columns: columnMixed ? gridSelection.columns : CompactSelection.empty(),\n rows: newRows\n };\n }\n setGridSelection(newVal, false);\n },\n [columnBehavior, gridSelection, rangeBehavior, rowBehavior, setGridSelection]\n );\n const setSelectedColumns = React15.useCallback(\n (newCols, append, allowMixed) => {\n newCols = newCols != null ? newCols : gridSelection.columns;\n if (append !== void 0) {\n newCols = newCols.add(append);\n }\n let newVal;\n if (columnBehavior === \"exclusive\" && newCols.length > 0) {\n newVal = {\n current: void 0,\n rows: CompactSelection.empty(),\n columns: newCols\n };\n } else {\n const rangeMixed = allowMixed && rangeBehavior === \"mixed\";\n const rowMixed = allowMixed && rowBehavior === \"mixed\";\n const current = !rangeMixed ? void 0 : gridSelection.current;\n newVal = {\n current,\n rows: rowMixed ? gridSelection.rows : CompactSelection.empty(),\n columns: newCols\n };\n }\n setGridSelection(newVal, false);\n },\n [columnBehavior, gridSelection, rangeBehavior, rowBehavior, setGridSelection]\n );\n return [setCurrent, setSelectedRows, setSelectedColumns];\n}\n\n// src/data-editor/use-cells-for-selection.ts\nimport * as React16 from \"react\";\nfunction useCellsForSelection(getCellsForSelectionIn, getCellContent, rowMarkerOffset, abortController, rows) {\n const getCellsForSelectionDirectWhenValid = React16.useCallback(\n (rect) => {\n var _a;\n if (getCellsForSelectionIn === true) {\n const result = [];\n for (let y = rect.y; y < rect.y + rect.height; y++) {\n const row = [];\n for (let x = rect.x; x < rect.x + rect.width; x++) {\n if (x < 0 || y >= rows) {\n row.push({\n kind: GridCellKind.Loading,\n allowOverlay: false\n });\n } else {\n row.push(getCellContent([x, y]));\n }\n }\n result.push(row);\n }\n return result;\n }\n return (_a = getCellsForSelectionIn == null ? void 0 : getCellsForSelectionIn(rect, abortController.signal)) != null ? _a : [];\n },\n [abortController.signal, getCellContent, getCellsForSelectionIn, rows]\n );\n const getCellsForSelectionDirect = getCellsForSelectionIn !== void 0 ? getCellsForSelectionDirectWhenValid : void 0;\n const getCellsForSelectionMangled = React16.useCallback(\n (rect) => {\n if (getCellsForSelectionDirect === void 0)\n return [];\n const newRect = {\n ...rect,\n x: rect.x - rowMarkerOffset\n };\n if (newRect.x < 0) {\n newRect.x = 0;\n newRect.width--;\n const r = getCellsForSelectionDirect(newRect, abortController.signal);\n if (typeof r === \"function\") {\n return async () => (\n // eslint-disable-next-line unicorn/no-await-expression-member\n (await r()).map((row) => [\n { kind: GridCellKind.Loading, allowOverlay: false },\n ...row\n ])\n );\n }\n return r.map((row) => [{ kind: GridCellKind.Loading, allowOverlay: false }, ...row]);\n }\n return getCellsForSelectionDirect(newRect, abortController.signal);\n },\n [abortController.signal, getCellsForSelectionDirect, rowMarkerOffset]\n );\n const getCellsForSelection = getCellsForSelectionIn !== void 0 ? getCellsForSelectionMangled : void 0;\n return [getCellsForSelection, getCellsForSelectionDirect];\n}\n\n// src/data-editor/copy-paste.ts\nfunction convertCellToBuffer(cell) {\n var _a, _b;\n if (cell.copyData !== void 0) {\n return {\n formatted: cell.copyData,\n rawValue: cell.copyData,\n format: \"string\"\n };\n }\n switch (cell.kind) {\n case GridCellKind.Boolean:\n return {\n formatted: cell.data === true ? \"TRUE\" : cell.data === false ? \"FALSE\" : cell.data === BooleanIndeterminate ? \"INDETERMINATE\" : \"\",\n rawValue: cell.data,\n format: \"boolean\"\n };\n case GridCellKind.Custom:\n return {\n formatted: cell.copyData,\n rawValue: cell.copyData,\n format: \"string\"\n };\n case GridCellKind.Image:\n case GridCellKind.Bubble:\n return {\n formatted: cell.data,\n rawValue: cell.data,\n format: \"string-array\"\n };\n case GridCellKind.Drilldown:\n return {\n formatted: cell.data.map((x) => x.text),\n rawValue: cell.data.map((x) => x.text),\n format: \"string-array\"\n };\n case GridCellKind.Text:\n return {\n formatted: (_a = cell.displayData) != null ? _a : cell.data,\n rawValue: cell.data,\n format: \"string\"\n };\n case GridCellKind.Uri:\n return {\n formatted: (_b = cell.displayData) != null ? _b : cell.data,\n rawValue: cell.data,\n format: \"url\"\n };\n case GridCellKind.Markdown:\n case GridCellKind.RowID:\n return {\n formatted: cell.data,\n rawValue: cell.data,\n format: \"string\"\n };\n case GridCellKind.Number:\n return {\n formatted: cell.displayData,\n rawValue: cell.data,\n format: \"number\"\n };\n case GridCellKind.Loading:\n return {\n formatted: \"#LOADING\",\n rawValue: \"\",\n format: \"string\"\n };\n case GridCellKind.Protected:\n return {\n formatted: \"************\",\n rawValue: \"\",\n format: \"string\"\n };\n default:\n assertNever(cell);\n }\n}\nfunction createBufferFromGridCells(cells, columnIndexes) {\n const copyBuffer = cells.map((row, index) => {\n const mappedIndex = columnIndexes[index];\n return row.map((cell) => {\n if (cell.span !== void 0 && cell.span[0] !== mappedIndex)\n return {\n formatted: \"\",\n rawValue: \"\",\n format: \"string\"\n };\n return convertCellToBuffer(cell);\n });\n });\n return copyBuffer;\n}\nfunction escapeIfNeeded(str, withComma) {\n if ((withComma ? /[\\t\\n\",]/ : /[\\t\\n\"]/).test(str)) {\n str = `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\nfunction createTextBuffer(copyBuffer) {\n var _a, _b;\n const lines = [];\n for (const row of copyBuffer) {\n const line = [];\n for (const cell of row) {\n if (cell.format === \"url\") {\n line.push((_b = (_a = cell.rawValue) == null ? void 0 : _a.toString()) != null ? _b : \"\");\n } else if (cell.format === \"string-array\") {\n line.push(cell.formatted.map((x) => escapeIfNeeded(x, true)).join(\",\"));\n } else {\n line.push(escapeIfNeeded(cell.formatted, false));\n }\n }\n lines.push(line.join(\"\t\"));\n }\n return lines.join(\"\\n\");\n}\nfunction formatHtmlTextContent(text) {\n return text.replace(/\\t/g, \" \").replace(/ {2,}/g, (match) => \"<span> </span>\".repeat(match.length));\n}\nfunction formatHtmlAttributeContent(attrText) {\n return '\"' + attrText.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\").replace(/>/g, \">\") + '\"';\n}\nfunction restoreHtmlEntities(str) {\n return str.replace(/"/g, '\"').replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\");\n}\nfunction createHtmlBuffer(copyBuffer) {\n var _a, _b;\n const lines = [];\n lines.push(`<style type=\"text/css\"><!--br {mso-data-placement:same-cell;}--></style>`, \"<table><tbody>\");\n for (const row of copyBuffer) {\n lines.push(\"<tr>\");\n for (const cell of row) {\n const formatStr = `gdg-format=\"${cell.format}\"`;\n if (cell.format === \"url\") {\n lines.push(\n `<td ${formatStr}><a href=\"${cell.rawValue}\">${formatHtmlTextContent(cell.formatted)}</a></td>`\n );\n } else {\n if (cell.format === \"string-array\") {\n lines.push(\n `<td ${formatStr}><ol>${cell.formatted.map(\n (x, ind) => `<li gdg-raw-value=${formatHtmlAttributeContent(cell.rawValue[ind])}>` + formatHtmlTextContent(x) + \"</li>\"\n ).join(\"\")}</ol></td>`\n );\n } else {\n lines.push(\n `<td gdg-raw-value=${formatHtmlAttributeContent(\n (_b = (_a = cell.rawValue) == null ? void 0 : _a.toString()) != null ? _b : \"\"\n )} ${formatStr}>${formatHtmlTextContent(cell.formatted)}</td>`\n );\n }\n }\n }\n lines.push(\"</tr>\");\n }\n lines.push(\"</tbody></table>\");\n return lines.join(\"\");\n}\nfunction getCopyBufferContents(cells, columnIndexes) {\n const copyBuffer = createBufferFromGridCells(cells, columnIndexes);\n const textPlain = createTextBuffer(copyBuffer);\n const textHtml = createHtmlBuffer(copyBuffer);\n return {\n textPlain,\n textHtml\n };\n}\nfunction decodeHTML(html) {\n var _a, _b, _c, _d, _e, _f;\n const fragment = document.createElement(\"html\");\n fragment.innerHTML = html.replace(/ /g, \" \");\n const tableEl = fragment.querySelector(\"table\");\n if (tableEl === null)\n return void 0;\n const walkEl = [tableEl];\n const result = [];\n let current;\n while (walkEl.length > 0) {\n const el = walkEl.pop();\n if (el === void 0)\n break;\n if (el instanceof HTMLTableElement || el.nodeName === \"TBODY\") {\n walkEl.push(...[...el.children].reverse());\n } else if (el instanceof HTMLTableRowElement) {\n if (current !== void 0) {\n result.push(current);\n }\n current = [];\n walkEl.push(...[...el.children].reverse());\n } else if (el instanceof HTMLTableCellElement) {\n const clone = el.cloneNode(true);\n const firstTagIsPara = clone.children.length === 1 && clone.children[0].nodeName === \"P\";\n const para = firstTagIsPara ? clone.children[0] : null;\n const isAppleNumbers = (para == null ? void 0 : para.children.length) === 1 && para.children[0].nodeName === \"FONT\";\n const brs = clone.querySelectorAll(\"br\");\n for (const br of brs) {\n br.replaceWith(\"\\n\");\n }\n const attributeValue = clone.getAttribute(\"gdg-raw-value\");\n const formatValue = (_a = clone.getAttribute(\"gdg-format\")) != null ? _a : \"string\";\n if (clone.querySelector(\"a\") !== null) {\n current == null ? void 0 : current.push({\n // raw value is the href\n rawValue: (_c = (_b = clone.querySelector(\"a\")) == null ? void 0 : _b.getAttribute(\"href\")) != null ? _c : \"\",\n formatted: (_d = clone.textContent) != null ? _d : \"\",\n format: formatValue\n });\n } else if (clone.querySelector(\"ol\") !== null) {\n const rawValues = clone.querySelectorAll(\"li\");\n current == null ? void 0 : current.push({\n rawValue: [...rawValues].map((x) => {\n var _a2;\n return (_a2 = x.getAttribute(\"gdg-raw-value\")) != null ? _a2 : \"\";\n }),\n formatted: [...rawValues].map((x) => {\n var _a2;\n return (_a2 = x.textContent) != null ? _a2 : \"\";\n }),\n format: \"string-array\"\n });\n } else if (attributeValue !== null) {\n current == null ? void 0 : current.push({\n rawValue: restoreHtmlEntities(attributeValue),\n formatted: (_e = clone.textContent) != null ? _e : \"\",\n format: formatValue\n });\n } else {\n let textContent = (_f = clone.textContent) != null ? _f : \"\";\n if (isAppleNumbers) {\n textContent = textContent.replace(/\\n(?!\\n)/g, \"\");\n }\n current == null ? void 0 : current.push({\n rawValue: textContent != null ? textContent : \"\",\n formatted: textContent != null ? textContent : \"\",\n format: formatValue\n });\n }\n }\n }\n if (current !== void 0) {\n result.push(current);\n }\n return result;\n}\n\n// src/data-editor/data-editor-fns.ts\nfunction expandSelection(newVal, getCellsForSelection, rowMarkerOffset, spanRangeBehavior, abortController) {\n var _a, _b;\n const origVal = newVal;\n if (spanRangeBehavior === \"allowPartial\" || newVal.current === void 0 || getCellsForSelection === void 0)\n return newVal;\n let isFilled = false;\n do {\n if ((newVal == null ? void 0 : newVal.current) === void 0)\n break;\n const r = (_a = newVal.current) == null ? void 0 : _a.range;\n const cells = [];\n if (r.width > 2) {\n const leftCells = getCellsForSelection(\n {\n x: r.x,\n y: r.y,\n width: 1,\n height: r.height\n },\n abortController.signal\n );\n if (typeof leftCells === \"function\") {\n return origVal;\n }\n cells.push(...leftCells);\n const rightCells = getCellsForSelection(\n {\n x: r.x + r.width - 1,\n y: r.y,\n width: 1,\n height: r.height\n },\n abortController.signal\n );\n if (typeof rightCells === \"function\") {\n return origVal;\n }\n cells.push(...rightCells);\n } else {\n const rCells = getCellsForSelection(\n {\n x: r.x,\n y: r.y,\n width: r.width,\n height: r.height\n },\n abortController.signal\n );\n if (typeof rCells === \"function\") {\n return origVal;\n }\n cells.push(...rCells);\n }\n let left = r.x - rowMarkerOffset;\n let right = r.x + r.width - 1 - rowMarkerOffset;\n for (const row of cells) {\n for (const cell of row) {\n if (cell.span === void 0)\n continue;\n left = Math.min(cell.span[0], left);\n right = Math.max(cell.span[1], right);\n }\n }\n if (left === r.x - rowMarkerOffset && right === r.x + r.width - 1 - rowMarkerOffset) {\n isFilled = true;\n } else {\n newVal = {\n current: {\n cell: (_b = newVal.current.cell) != null ? _b : [0, 0],\n range: {\n x: left + rowMarkerOffset,\n y: r.y,\n width: right - left + 1,\n height: r.height\n },\n rangeStack: newVal.current.rangeStack\n },\n columns: newVal.columns,\n rows: newVal.rows\n };\n }\n } while (!isFilled);\n return newVal;\n}\nfunction descape(s) {\n if (s.startsWith('\"') && s.endsWith('\"')) {\n s = s.slice(1, -1).replace(/\"\"/g, '\"');\n }\n return s;\n}\nfunction unquote(str) {\n let State;\n ((State2) => {\n State2[State2[\"None\"] = 0] = \"None\";\n State2[State2[\"inString\"] = 1] = \"inString\";\n State2[State2[\"inStringPostQuote\"] = 2] = \"inStringPostQuote\";\n })(State || (State = {}));\n const result = [];\n let current = [];\n let start = 0;\n let state = 0;\n str = str.replace(/\\r\\n/g, \"\\n\");\n let index = 0;\n for (const char of str) {\n switch (state) {\n case 0:\n if (char === \"\t\" || char === \"\\n\") {\n current.push(str.slice(start, index));\n start = index + 1;\n if (char === \"\\n\") {\n result.push(current);\n current = [];\n }\n } else if (char === `\"`) {\n state = 1;\n }\n break;\n case 1:\n if (char === `\"`) {\n state = 2;\n }\n break;\n case 2:\n if (char === '\"') {\n state = 1;\n } else if (char === \"\t\" || char === \"\\n\") {\n current.push(descape(str.slice(start, index)));\n start = index + 1;\n if (char === \"\\n\") {\n result.push(current);\n current = [];\n }\n state = 0;\n } else {\n state = 0;\n }\n break;\n }\n index++;\n }\n if (start < str.length) {\n current.push(descape(str.slice(start, str.length)));\n }\n result.push(current);\n return result.map((r) => r.map((c) => ({ rawValue: c, formatted: c, format: \"string\" })));\n}\nfunction copyToClipboard(cells, columnIndexes, e) {\n var _a;\n const copyBuffer = getCopyBufferContents(cells, columnIndexes);\n const copyWithWriteText = (s) => {\n var _a2;\n void ((_a2 = window.navigator.clipboard) == null ? void 0 : _a2.writeText(s));\n };\n const copyWithWrite = (s, html) => {\n var _a2;\n if (((_a2 = window.navigator.clipboard) == null ? void 0 : _a2.write) === void 0)\n return false;\n void window.navigator.clipboard.write([\n new ClipboardItem({\n // eslint-disable-next-line sonarjs/no-duplicate-string\n \"text/plain\": new Blob([s], { type: \"text/plain\" }),\n \"text/html\": new Blob([html], {\n type: \"text/html\"\n })\n })\n ]);\n return true;\n };\n const copyWithClipboardData = (s, html) => {\n var _a2, _b;\n try {\n if (e === void 0 || e.clipboardData === null)\n throw new Error(\"No clipboard data\");\n (_a2 = e == null ? void 0 : e.clipboardData) == null ? void 0 : _a2.setData(\"text/plain\", s);\n (_b = e == null ? void 0 : e.clipboardData) == null ? void 0 : _b.setData(\"text/html\", html);\n } catch (e2) {\n if (!copyWithWrite(s, html)) {\n copyWithWriteText(s);\n }\n }\n };\n if (((_a = window.navigator.clipboard) == null ? void 0 : _a.write) !== void 0 || (e == null ? void 0 : e.clipboardData) !== void 0) {\n void copyWithClipboardData(copyBuffer.textPlain, copyBuffer.textHtml);\n } else {\n void copyWithWriteText(copyBuffer.textPlain);\n }\n e == null ? void 0 : e.preventDefault();\n}\n\n// src/data-editor-container/data-grid-container.tsx\nimport * as React17 from \"react\";\nfunction toCss(x) {\n if (typeof x === \"string\")\n return x;\n return `${x}px`;\n}\nvar _exp11 = () => (p) => p.innerWidth;\nvar _exp22 = () => (p) => p.innerHeight;\nvar Wrapper = /* @__PURE__ */ styled_default(\"div\")({\n name: \"Wrapper\",\n class: \"wzg2m5k\",\n propsAsIs: false,\n vars: {\n \"wzg2m5k-0\": [_exp11()],\n \"wzg2m5k-1\": [_exp22()]\n }\n});\nvar DataEditorContainer = (p) => {\n const {\n inWidth,\n inHeight,\n children,\n ...rest\n } = p;\n return /* @__PURE__ */ React17.createElement(Wrapper, {\n innerHeight: toCss(inHeight),\n innerWidth: toCss(inWidth),\n ...rest\n }, children);\n};\n\n// src/data-grid/cells/boolean-cell.tsx\nfunction toggleBoolean(data) {\n return data !== true;\n}\nvar defaultCellMaxSize = 20;\nvar booleanCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"false\";\n },\n kind: GridCellKind.Boolean,\n needsHover: true,\n useLabel: false,\n needsHoverPosition: true,\n measure: () => 50,\n draw: (a) => {\n var _a;\n return drawBoolean(a, a.cell.data, booleanCellIsEditable(a.cell), (_a = a.cell.maxSize) != null ? _a : defaultCellMaxSize);\n },\n onDelete: (c) => ({\n ...c,\n data: false\n }),\n onClick: (e) => {\n var _a, _b;\n const { cell, posX: pointerX, posY: pointerY, bounds, theme } = e;\n const { width, height, x: cellX, y: cellY } = bounds;\n const maxWidth = (_a = cell.maxSize) != null ? _a : defaultCellMaxSize;\n const cellCenterY = Math.floor(bounds.y + height / 2);\n const checkBoxWidth = getSquareWidth(maxWidth, height, theme.cellVerticalPadding);\n const posX = getSquareXPosFromAlign(\n (_b = cell.contentAlign) != null ? _b : \"center\",\n cellX,\n width,\n theme.cellHorizontalPadding,\n checkBoxWidth\n );\n const bb = getSquareBB(posX, cellCenterY, checkBoxWidth);\n const checkBoxClicked = pointIsWithinBB(cellX + pointerX, cellY + pointerY, bb);\n if (booleanCellIsEditable(cell) && checkBoxClicked) {\n return {\n ...cell,\n data: toggleBoolean(cell.data)\n };\n }\n return void 0;\n },\n onPaste: (toPaste, cell) => {\n let newVal = BooleanEmpty;\n if (toPaste.toLowerCase() === \"true\") {\n newVal = true;\n } else if (toPaste.toLowerCase() === \"false\") {\n newVal = false;\n } else if (toPaste.toLowerCase() === \"indeterminate\") {\n newVal = BooleanIndeterminate;\n }\n return newVal === cell.data ? void 0 : {\n ...cell,\n data: newVal\n };\n }\n};\n\n// src/data-editor/use-autoscroll.ts\nimport React18 from \"react\";\nvar maxPxPerMs = 2;\nvar msToFullSpeed = 1300;\nfunction useAutoscroll(scrollDirection, scrollRef) {\n const speedScalar = React18.useRef(0);\n const [xDir, yDir] = scrollDirection != null ? scrollDirection : [0, 0];\n React18.useEffect(() => {\n if (xDir === 0 && yDir === 0) {\n speedScalar.current = 0;\n return;\n }\n let lastTime = 0;\n const scrollFn = (curTime) => {\n var _a;\n if (lastTime === 0) {\n lastTime = curTime;\n } else {\n const step = curTime - lastTime;\n speedScalar.current = Math.min(1, speedScalar.current + step / msToFullSpeed);\n const motion = speedScalar.current ** 1.618 * step * maxPxPerMs;\n (_a = scrollRef.current) == null ? void 0 : _a.scrollBy(xDir * motion, yDir * motion);\n lastTime = curTime;\n }\n t = window.requestAnimationFrame(scrollFn);\n };\n let t = window.requestAnimationFrame(scrollFn);\n return () => window.cancelAnimationFrame(t);\n }, [scrollRef, xDir, yDir]);\n}\n\n// src/data-grid/cells/bubble-cell.tsx\nimport * as React20 from \"react\";\n\n// src/data-grid-overlay-editor/private/bubbles-overlay-editor.tsx\nimport * as React19 from \"react\";\n\n// src/data-grid-overlay-editor/private/bubbles-overlay-editor-style.tsx\nvar BubblesOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"BubblesOverlayEditorStyle\",\n class: \"b1bqsp5z\",\n propsAsIs: false\n});\n\n// src/data-grid-overlay-editor/private/bubbles-overlay-editor.tsx\nvar BubblesOverlayEditor = (p) => {\n const { bubbles } = p;\n return /* @__PURE__ */ React19.createElement(BubblesOverlayEditorStyle, null, bubbles.map((b, i) => /* @__PURE__ */ React19.createElement(\"div\", { key: i, className: \"boe-bubble\" }, b)), /* @__PURE__ */ React19.createElement(\"textarea\", { className: \"gdg-input\", autoFocus: true }));\n};\nvar bubbles_overlay_editor_default = BubblesOverlayEditor;\n\n// src/data-grid/cells/bubble-cell.tsx\nvar bubbleCellRenderer = {\n getAccessibilityString: (c) => makeAccessibilityStringForArray(c.data),\n kind: GridCellKind.Bubble,\n needsHover: false,\n useLabel: false,\n needsHoverPosition: false,\n measure: (ctx, cell, t) => cell.data.reduce((acc, data) => ctx.measureText(data).width + acc + 20, 0) + 2 * t.cellHorizontalPadding - 4,\n draw: (a) => drawBubbles(a, a.cell.data),\n provideEditor: () => (p) => {\n const { value } = p;\n return /* @__PURE__ */ React20.createElement(bubbles_overlay_editor_default, { bubbles: value.data });\n },\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/drilldown-cell.tsx\nimport * as React22 from \"react\";\n\n// src/data-grid-overlay-editor/private/drilldown-overlay-editor.tsx\nimport * as React21 from \"react\";\nvar DrilldownOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"DrilldownOverlayEditorStyle\",\n class: \"df2kt4a\",\n propsAsIs: false\n});\nvar DrilldownOverlayEditor = (p) => {\n const {\n drilldowns\n } = p;\n return /* @__PURE__ */ React21.createElement(DrilldownOverlayEditorStyle, null, drilldowns.map((d, i) => /* @__PURE__ */ React21.createElement(\"div\", {\n key: i,\n className: \"doe-bubble\"\n }, d.img !== void 0 && /* @__PURE__ */ React21.createElement(\"img\", {\n src: d.img\n }), /* @__PURE__ */ React21.createElement(\"div\", null, d.text))));\n};\nvar drilldown_overlay_editor_default = DrilldownOverlayEditor;\n\n// src/data-grid/cells/drilldown-cell.tsx\nvar drilldownCellRenderer = {\n getAccessibilityString: (c) => makeAccessibilityStringForArray(c.data.map((d) => d.text)),\n kind: GridCellKind.Drilldown,\n needsHover: false,\n useLabel: false,\n needsHoverPosition: false,\n measure: (ctx, cell, t) => cell.data.reduce(\n (acc, data) => ctx.measureText(data.text).width + acc + 20 + (data.img !== void 0 ? 18 : 0),\n 0\n ) + 2 * t.cellHorizontalPadding - 4,\n draw: (a) => drawDrilldownCell(a, a.cell.data),\n provideEditor: () => (p) => {\n const { value } = p;\n return /* @__PURE__ */ React22.createElement(drilldown_overlay_editor_default, { drilldowns: value.data });\n },\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/image-cell.tsx\nimport * as React24 from \"react\";\n\n// src/data-grid-overlay-editor/private/image-overlay-editor.tsx\nimport * as React23 from \"react\";\n\n// src/data-grid-overlay-editor/private/image-overlay-editor-style.tsx\nvar ImageOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"ImageOverlayEditorStyle\",\n class: \"i1eozt10\",\n propsAsIs: false\n});\n\n// src/data-grid-overlay-editor/private/image-overlay-editor.tsx\nimport { Carousel } from \"react-responsive-carousel\";\nvar ImageOverlayEditor = (p) => {\n const { urls, canWrite, onEditClick, renderImage } = p;\n const filtered = urls.filter((u) => u !== \"\");\n if (filtered.length === 0) {\n return null;\n }\n const allowMove = filtered.length > 1;\n return /* @__PURE__ */ React23.createElement(ImageOverlayEditorStyle, { \"data-testid\": \"GDG-default-image-overlay-editor\" }, /* @__PURE__ */ React23.createElement(\n Carousel,\n {\n showArrows: allowMove,\n showThumbs: false,\n swipeable: allowMove,\n emulateTouch: allowMove,\n infiniteLoop: allowMove\n },\n filtered.map((url) => {\n var _a;\n const innerContent = (_a = renderImage == null ? void 0 : renderImage(url)) != null ? _a : /* @__PURE__ */ React23.createElement(\"img\", { draggable: false, src: url });\n return /* @__PURE__ */ React23.createElement(\"div\", { className: \"centering-container\", key: url }, innerContent);\n })\n ), canWrite && onEditClick && /* @__PURE__ */ React23.createElement(\"button\", { className: \"edit-icon\", onClick: onEditClick }, /* @__PURE__ */ React23.createElement(EditPencil, null)));\n};\n\n// src/data-grid/cells/image-cell.tsx\nvar imageCellRenderer = {\n getAccessibilityString: (c) => c.data.join(\", \"),\n kind: GridCellKind.Image,\n needsHover: false,\n useLabel: false,\n needsHoverPosition: false,\n draw: (a) => {\n var _a;\n return drawImage(a, (_a = a.cell.displayData) != null ? _a : a.cell.data, a.cell.rounding, a.cell.contentAlign);\n },\n measure: (_ctx, cell) => cell.data.length * 50,\n onDelete: (c) => ({\n ...c,\n data: []\n }),\n provideEditor: () => (p) => {\n const { value, onFinishedEditing, imageEditorOverride } = p;\n const ImageEditor = imageEditorOverride != null ? imageEditorOverride : ImageOverlayEditor;\n return /* @__PURE__ */ React24.createElement(\n ImageEditor,\n {\n urls: value.data,\n canWrite: value.allowAdd,\n onCancel: onFinishedEditing,\n onChange: (newImage) => {\n onFinishedEditing({\n ...value,\n data: [newImage]\n });\n }\n }\n );\n },\n onPaste: (toPaste, cell) => {\n toPaste = toPaste.trim();\n const fragments = toPaste.split(\",\");\n const uris = fragments.map((f) => {\n try {\n new URL(f);\n return f;\n } catch (e) {\n return void 0;\n }\n }).filter((x) => x !== void 0);\n if (uris.length === cell.data.length && uris.every((u, i) => u === cell.data[i]))\n return void 0;\n return {\n ...cell,\n data: uris\n };\n }\n};\n\n// src/data-grid/cells/loading-cell.tsx\nvar loadingCellRenderer = {\n getAccessibilityString: () => \"\",\n kind: GridCellKind.Loading,\n needsHover: false,\n useLabel: false,\n needsHoverPosition: false,\n measure: () => 120,\n draw: () => void 0,\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/markdown-cell.tsx\nimport * as React28 from \"react\";\n\n// src/data-grid-overlay-editor/private/markdown-overlay-editor.tsx\nimport * as React27 from \"react\";\n\n// src/markdown-div/markdown-div.tsx\nimport React25 from \"react\";\nimport { marked } from \"marked\";\n\n// src/markdown-div/private/markdown-container.tsx\nvar MarkdownContainer = /* @__PURE__ */ styled_default(\"div\")({\n name: \"MarkdownContainer\",\n class: \"mlbeo71\",\n propsAsIs: false\n});\n\n// src/markdown-div/markdown-div.tsx\nvar MarkdownDiv = class extends React25.PureComponent {\n constructor() {\n super(...arguments);\n this.targetElement = null;\n this.containerRefHook = (element) => {\n this.targetElement = element;\n this.renderMarkdownIntoDiv();\n };\n }\n renderMarkdownIntoDiv() {\n const { targetElement, props } = this;\n if (targetElement === null)\n return;\n const { contents, createNode } = props;\n const innerHTML = marked(contents);\n const childRange = document.createRange();\n childRange.selectNodeContents(targetElement);\n childRange.deleteContents();\n let newChild = createNode == null ? void 0 : createNode(innerHTML);\n if (newChild === void 0) {\n const childDoc = document.createElement(\"template\");\n childDoc.innerHTML = innerHTML;\n newChild = childDoc.content;\n }\n targetElement.append(newChild);\n const tags = targetElement.getElementsByTagName(\"a\");\n for (const tag of tags) {\n tag.target = \"_blank\";\n tag.rel = \"noreferrer noopener\";\n }\n }\n render() {\n this.renderMarkdownIntoDiv();\n return /* @__PURE__ */ React25.createElement(MarkdownContainer, { ref: this.containerRefHook });\n }\n};\n\n// src/growing-entry/growing-entry.tsx\nimport * as React26 from \"react\";\n\n// src/growing-entry/growing-entry-style.tsx\nvar InputBox = /* @__PURE__ */ styled_default(\"textarea\")({\n name: \"InputBox\",\n class: \"ijuk0po\",\n propsAsIs: false\n});\nvar ShadowBox = /* @__PURE__ */ styled_default(\"div\")({\n name: \"ShadowBox\",\n class: \"saq3p5l\",\n propsAsIs: false\n});\nvar GrowingEntryStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"GrowingEntryStyle\",\n class: \"gf8vzix\",\n propsAsIs: false\n});\n\n// src/growing-entry/growing-entry.tsx\nvar globalInputID = 0;\nvar GrowingEntry = (props) => {\n const { placeholder, value, onKeyDown, highlight, altNewline, validatedSelection, ...rest } = props;\n const { onChange, className } = rest;\n const inputRef = React26.useRef(null);\n const useText = value != null ? value : \"\";\n assert(onChange !== void 0, \"GrowingEntry must be a controlled input area\");\n const [inputID] = React26.useState(() => \"input-box-\" + (globalInputID = (globalInputID + 1) % 1e7));\n React26.useEffect(() => {\n const ta = inputRef.current;\n if (ta === null)\n return;\n if (ta.disabled)\n return;\n const length = useText.toString().length;\n ta.focus();\n ta.setSelectionRange(highlight ? 0 : length, length);\n }, []);\n React26.useLayoutEffect(() => {\n var _a;\n if (validatedSelection !== void 0) {\n const range2 = typeof validatedSelection === \"number\" ? [validatedSelection, null] : validatedSelection;\n (_a = inputRef.current) == null ? void 0 : _a.setSelectionRange(range2[0], range2[1]);\n }\n }, [validatedSelection]);\n const onKeyDownInner = React26.useCallback(\n (e) => {\n if (e.key === \"Enter\" && e.shiftKey && altNewline === true) {\n return;\n }\n onKeyDown == null ? void 0 : onKeyDown(e);\n },\n [altNewline, onKeyDown]\n );\n return /* @__PURE__ */ React26.createElement(GrowingEntryStyle, { className: \"gdg-growing-entry\" }, /* @__PURE__ */ React26.createElement(ShadowBox, { className }, useText + \"\\n\"), /* @__PURE__ */ React26.createElement(\n InputBox,\n {\n ...rest,\n className: (className != null ? className : \"\") + \" gdg-input\",\n id: inputID,\n ref: inputRef,\n onKeyDown: onKeyDownInner,\n value: useText,\n placeholder,\n dir: \"auto\"\n }\n ));\n};\n\n// src/data-grid-overlay-editor/private/markdown-overlay-editor-style.tsx\nvar _exp12 = () => (p) => p.targetWidth;\nvar MarkdownOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"MarkdownOverlayEditorStyle\",\n class: \"mdwzdl1\",\n propsAsIs: false,\n vars: {\n \"mdwzdl1-0\": [_exp12(), \"px\"]\n }\n});\n\n// src/data-grid-overlay-editor/private/markdown-overlay-editor.tsx\nvar MarkdownOverlayEditor = (p) => {\n const { value, onChange, forceEditMode, createNode, targetRect, onFinish, validatedSelection } = p;\n const markdown = value.data;\n const readonly = value.readonly === true;\n const [editMode, setEditMode] = React27.useState(markdown === \"\" || forceEditMode);\n const onEditClick = React27.useCallback(() => {\n setEditMode((e) => !e);\n }, []);\n const addLeftPad = markdown ? \"ml-6\" : \"\";\n if (editMode) {\n return /* @__PURE__ */ React27.createElement(MarkdownOverlayEditorStyle, { targetWidth: targetRect.width - 20 }, /* @__PURE__ */ React27.createElement(\n GrowingEntry,\n {\n autoFocus: true,\n highlight: false,\n validatedSelection,\n value: markdown,\n onKeyDown: (e) => {\n if (e.key === \"Enter\")\n e.stopPropagation();\n },\n onChange\n }\n ), /* @__PURE__ */ React27.createElement(\"div\", { className: `edit-icon checkmark-hover ${addLeftPad}`, onClick: () => onFinish(value) }, /* @__PURE__ */ React27.createElement(Checkmark, null)));\n }\n return /* @__PURE__ */ React27.createElement(MarkdownOverlayEditorStyle, { targetWidth: targetRect.width }, /* @__PURE__ */ React27.createElement(MarkdownDiv, { contents: markdown, createNode }), !readonly && /* @__PURE__ */ React27.createElement(React27.Fragment, null, /* @__PURE__ */ React27.createElement(\"div\", { className: \"spacer\" }), /* @__PURE__ */ React27.createElement(\"div\", { className: `edit-icon edit-hover ${addLeftPad}`, onClick: onEditClick }, /* @__PURE__ */ React27.createElement(EditPencil, null))), /* @__PURE__ */ React27.createElement(\"textarea\", { className: \"md-edit-textarea gdg-input\", autoFocus: true }));\n};\n\n// src/data-grid/cells/markdown-cell.tsx\nvar markdownCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n },\n kind: GridCellKind.Markdown,\n needsHover: false,\n needsHoverPosition: false,\n drawPrep: prepTextCell,\n measure: (ctx, cell, t) => {\n const firstLine = cell.data.split(\"\\n\")[0];\n return ctx.measureText(firstLine).width + 2 * t.cellHorizontalPadding;\n },\n draw: (a) => drawTextCell(a, a.cell.data, a.cell.contentAlign),\n onDelete: (c) => ({\n ...c,\n data: \"\"\n }),\n provideEditor: () => (p) => {\n const { onChange, value, target, onFinishedEditing, markdownDivCreateNode, forceEditMode, validatedSelection } = p;\n return /* @__PURE__ */ React28.createElement(\n MarkdownOverlayEditor,\n {\n onFinish: onFinishedEditing,\n targetRect: target,\n value,\n validatedSelection,\n onChange: (e) => onChange({\n ...value,\n data: e.target.value\n }),\n forceEditMode,\n createNode: markdownDivCreateNode\n }\n );\n },\n onPaste: (toPaste, cell) => toPaste === cell.data ? void 0 : { ...cell, data: toPaste }\n};\n\n// src/data-grid/cells/marker-cell.tsx\nvar markerCellRenderer = {\n getAccessibilityString: (c) => c.row.toString(),\n kind: InnerGridCellKind.Marker,\n needsHover: true,\n needsHoverPosition: false,\n drawPrep: prepMarkerRowCell,\n measure: () => 44,\n draw: (a) => drawMarkerRowCell(a, a.cell.row, a.cell.checked, a.cell.markerKind, a.cell.drawHandle),\n onClick: (e) => {\n const { bounds, cell, posX: x, posY: y } = e;\n const { width, height } = bounds;\n const centerX = cell.drawHandle ? 7 + (width - 7) / 2 : width / 2;\n const centerY = height / 2;\n if (Math.abs(x - centerX) <= 10 && Math.abs(y - centerY) <= 10) {\n return {\n ...cell,\n checked: !cell.checked\n };\n }\n return void 0;\n },\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/new-row-cell.tsx\nvar newRowCellRenderer = {\n getAccessibilityString: () => \"\",\n kind: InnerGridCellKind.NewRow,\n needsHover: true,\n needsHoverPosition: false,\n measure: () => 200,\n draw: (a) => drawNewRowCell(a, a.cell.hint, a.cell.icon),\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/number-cell.tsx\nimport * as React29 from \"react\";\nvar NumberOverlayEditor = React29.lazy(\n async () => await import(\"./number-overlay-editor-FPDVTUA6.js\")\n);\nvar numberCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n },\n kind: GridCellKind.Number,\n needsHover: false,\n needsHoverPosition: false,\n useLabel: true,\n drawPrep: prepTextCell,\n draw: (a) => drawTextCell(a, a.cell.displayData, a.cell.contentAlign),\n measure: (ctx, cell) => ctx.measureText(cell.displayData).width + 16,\n onDelete: (c) => ({\n ...c,\n data: void 0\n }),\n provideEditor: () => (p) => {\n const { isHighlighted, onChange, value, validatedSelection } = p;\n return /* @__PURE__ */ React29.createElement(React29.Suspense, { fallback: null }, /* @__PURE__ */ React29.createElement(\n NumberOverlayEditor,\n {\n highlight: isHighlighted,\n disabled: value.readonly === true,\n value: value.data,\n fixedDecimals: value.fixedDecimals,\n allowNegative: value.allowNegative,\n thousandSeparator: value.thousandSeparator,\n decimalSeparator: value.decimalSeparator,\n validatedSelection,\n onChange: (x) => {\n var _a;\n return onChange({\n ...value,\n data: Number.isNaN((_a = x.floatValue) != null ? _a : 0) ? 0 : x.floatValue\n });\n }\n }\n ));\n },\n onPaste: (toPaste, cell, details) => {\n var _a;\n const newNumber = typeof details.rawValue === \"number\" ? details.rawValue : Number.parseFloat(typeof details.rawValue === \"string\" ? details.rawValue : toPaste);\n if (Number.isNaN(newNumber) || cell.data === newNumber)\n return void 0;\n return { ...cell, data: newNumber, displayData: (_a = details.formattedString) != null ? _a : cell.displayData };\n }\n};\n\n// src/data-grid/cells/protected-cell.tsx\nvar protectedCellRenderer = {\n getAccessibilityString: () => \"\",\n measure: () => 108,\n kind: GridCellKind.Protected,\n needsHover: false,\n needsHoverPosition: false,\n draw: drawProtectedCell,\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/row-id-cell.tsx\nimport React30 from \"react\";\nvar rowIDCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n },\n kind: GridCellKind.RowID,\n needsHover: false,\n needsHoverPosition: false,\n drawPrep: (a, b) => prepTextCell(a, b, a.theme.textLight),\n draw: (a) => drawTextCell(a, a.cell.data, a.cell.contentAlign),\n measure: (ctx, cell) => ctx.measureText(cell.data).width + 16,\n // eslint-disable-next-line react/display-name\n provideEditor: () => (p) => {\n const { isHighlighted, onChange, value, validatedSelection } = p;\n return /* @__PURE__ */ React30.createElement(\n GrowingEntry,\n {\n highlight: isHighlighted,\n autoFocus: value.readonly !== true,\n disabled: value.readonly !== false,\n value: value.data,\n validatedSelection,\n onChange: (e) => onChange({\n ...value,\n data: e.target.value\n })\n }\n );\n },\n onPaste: () => void 0\n};\n\n// src/data-grid/cells/text-cell.tsx\nimport * as React31 from \"react\";\nvar textCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n },\n kind: GridCellKind.Text,\n needsHover: false,\n needsHoverPosition: false,\n drawPrep: prepTextCell,\n useLabel: true,\n draw: (a) => (drawTextCell(a, a.cell.displayData, a.cell.contentAlign, a.cell.allowWrapping, a.hyperWrapping), true),\n measure: (ctx, cell, t) => {\n const lines = cell.displayData.split(\"\\n\").slice(0, cell.allowWrapping === true ? void 0 : 1);\n return Math.max(...lines.map((l) => ctx.measureText(l).width + 2 * t.cellHorizontalPadding));\n },\n onDelete: (c) => ({\n ...c,\n data: \"\"\n }),\n provideEditor: (cell) => ({\n disablePadding: cell.allowWrapping === true,\n editor: (p) => {\n const { isHighlighted, onChange, value, validatedSelection } = p;\n return /* @__PURE__ */ React31.createElement(\n GrowingEntry,\n {\n style: cell.allowWrapping === true ? { padding: \"3px 8.5px\" } : void 0,\n highlight: isHighlighted,\n autoFocus: value.readonly !== true,\n disabled: value.readonly === true,\n altNewline: true,\n value: value.data,\n validatedSelection,\n onChange: (e) => onChange({\n ...value,\n data: e.target.value\n })\n }\n );\n }\n }),\n onPaste: (toPaste, cell, details) => {\n var _a;\n return toPaste === cell.data ? void 0 : { ...cell, data: toPaste, displayData: (_a = details.formattedString) != null ? _a : cell.displayData };\n }\n};\n\n// src/data-grid/cells/uri-cell.tsx\nimport * as React33 from \"react\";\n\n// src/data-grid-overlay-editor/private/uri-overlay-editor.tsx\nimport * as React32 from \"react\";\n\n// src/data-grid-overlay-editor/private/uri-overlay-editor-style.tsx\nvar UriOverlayEditorStyle = /* @__PURE__ */ styled_default(\"div\")({\n name: \"UriOverlayEditorStyle\",\n class: \"uf0sjo8\",\n propsAsIs: false\n});\n\n// src/data-grid-overlay-editor/private/uri-overlay-editor.tsx\nvar UriOverlayEditor = (p) => {\n const { uri, onChange, forceEditMode, readonly, validatedSelection, preview } = p;\n const [editMode, setEditMode] = React32.useState(uri === \"\" || forceEditMode);\n const onEditClick = React32.useCallback(() => {\n setEditMode(true);\n }, []);\n if (editMode) {\n return /* @__PURE__ */ React32.createElement(\n GrowingEntry,\n {\n validatedSelection,\n highlight: true,\n autoFocus: true,\n value: uri,\n onChange\n }\n );\n }\n return /* @__PURE__ */ React32.createElement(UriOverlayEditorStyle, null, /* @__PURE__ */ React32.createElement(\"a\", { className: \"link-area\", href: uri, target: \"_blank\", rel: \"noopener noreferrer\" }, preview), !readonly && /* @__PURE__ */ React32.createElement(\"div\", { className: \"edit-icon\", onClick: onEditClick }, /* @__PURE__ */ React32.createElement(EditPencil, null)), /* @__PURE__ */ React32.createElement(\"textarea\", { className: \"gdg-input\", autoFocus: true }));\n};\nvar uri_overlay_editor_default = UriOverlayEditor;\n\n// src/data-grid/cells/uri-cell.tsx\nvar uriCellRenderer = {\n getAccessibilityString: (c) => {\n var _a, _b;\n return (_b = (_a = c.data) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n },\n kind: GridCellKind.Uri,\n needsHover: false,\n needsHoverPosition: false,\n useLabel: true,\n drawPrep: prepTextCell,\n draw: (a) => drawTextCell(a, a.cell.data, a.cell.contentAlign),\n measure: (ctx, cell, theme) => ctx.measureText(cell.data).width + theme.cellHorizontalPadding * 2,\n onDelete: (c) => ({\n ...c,\n data: \"\"\n }),\n provideEditor: () => (p) => {\n var _a;\n const { onChange, value, forceEditMode, validatedSelection } = p;\n return /* @__PURE__ */ React33.createElement(\n uri_overlay_editor_default,\n {\n forceEditMode,\n uri: value.data,\n preview: (_a = value.displayData) != null ? _a : value.data,\n validatedSelection,\n readonly: value.readonly === true,\n onChange: (e) => onChange({\n ...value,\n data: e.target.value\n })\n }\n );\n },\n onPaste: (toPaste, cell, details) => {\n var _a;\n return toPaste === cell.data ? void 0 : { ...cell, data: toPaste, displayData: (_a = details.formattedString) != null ? _a : cell.displayData };\n }\n};\n\n// src/data-grid/cells/index.ts\nvar CellRenderers = {\n [InnerGridCellKind.Marker]: markerCellRenderer,\n [InnerGridCellKind.NewRow]: newRowCellRenderer,\n [GridCellKind.Boolean]: booleanCellRenderer,\n [GridCellKind.Bubble]: bubbleCellRenderer,\n [GridCellKind.Drilldown]: drilldownCellRenderer,\n [GridCellKind.Image]: imageCellRenderer,\n [GridCellKind.Loading]: loadingCellRenderer,\n [GridCellKind.Markdown]: markdownCellRenderer,\n [GridCellKind.Number]: numberCellRenderer,\n [GridCellKind.Protected]: protectedCellRenderer,\n [GridCellKind.RowID]: rowIDCellRenderer,\n [GridCellKind.Text]: textCellRenderer,\n [GridCellKind.Uri]: uriCellRenderer\n};\n\n// src/data-editor/use-rem-adjuster.ts\nimport React34 from \"react\";\nfunction useRemAdjuster({\n rowHeight: rowHeightIn,\n headerHeight: headerHeightIn,\n groupHeaderHeight: groupHeaderHeightIn,\n theme: themeIn,\n overscrollX: overscrollXIn,\n overscrollY: overscrollYIn,\n scaleToRem,\n remSize\n}) {\n const [rowHeight, headerHeight, groupHeaderHeight, theme, overscrollX, overscrollY] = React34.useMemo(() => {\n var _a, _b, _c;\n if (!scaleToRem || remSize === 16)\n return [rowHeightIn, headerHeightIn, groupHeaderHeightIn, themeIn, overscrollXIn, overscrollYIn];\n const scaler = remSize / 16;\n const rh = rowHeightIn;\n const bt = getDataEditorTheme();\n return [\n typeof rh === \"number\" ? rh * scaler : (n) => Math.ceil(rh(n) * scaler),\n Math.ceil(headerHeightIn * scaler),\n Math.ceil(groupHeaderHeightIn * scaler),\n {\n ...themeIn,\n headerIconSize: ((_a = themeIn == null ? void 0 : themeIn.headerIconSize) != null ? _a : bt.headerIconSize) * scaler,\n cellHorizontalPadding: ((_b = themeIn == null ? void 0 : themeIn.cellHorizontalPadding) != null ? _b : bt.cellHorizontalPadding) * scaler,\n cellVerticalPadding: ((_c = themeIn == null ? void 0 : themeIn.cellVerticalPadding) != null ? _c : bt.cellVerticalPadding) * scaler\n },\n Math.ceil((overscrollXIn != null ? overscrollXIn : 0) * scaler),\n Math.ceil((overscrollYIn != null ? overscrollYIn : 0) * scaler)\n ];\n }, [groupHeaderHeightIn, headerHeightIn, overscrollXIn, overscrollYIn, remSize, rowHeightIn, scaleToRem, themeIn]);\n return { rowHeight, headerHeight, groupHeaderHeight, theme, overscrollX, overscrollY };\n}\n\n// src/data-editor/data-editor.tsx\nvar idCounter = 0;\nfunction getSpanStops(cells) {\n return uniq(\n flatten(\n flatten(cells).filter((c) => c.span !== void 0).map((c) => {\n var _a, _b, _c, _d;\n return range(((_b = (_a = c.span) == null ? void 0 : _a[0]) != null ? _b : 0) + 1, ((_d = (_c = c.span) == null ? void 0 : _c[1]) != null ? _d : 0) + 1);\n })\n )\n );\n}\nfunction shiftSelection(input, offset) {\n if (input === void 0 || offset === 0 || input.columns.length === 0 && input.current === void 0)\n return input;\n return {\n current: input.current === void 0 ? void 0 : {\n cell: [input.current.cell[0] + offset, input.current.cell[1]],\n range: {\n ...input.current.range,\n x: input.current.range.x + offset\n },\n rangeStack: input.current.rangeStack.map((r) => ({\n ...r,\n x: r.x + offset\n }))\n },\n rows: input.rows,\n columns: input.columns.offset(offset)\n };\n}\nvar keybindingDefaults = {\n selectAll: true,\n selectRow: true,\n selectColumn: true,\n downFill: false,\n rightFill: false,\n pageUp: false,\n pageDown: false,\n clear: true,\n copy: true,\n paste: true,\n cut: true,\n search: false,\n first: true,\n last: true\n};\nvar loadingCell2 = {\n kind: GridCellKind.Loading,\n allowOverlay: false\n};\nvar emptyGridSelection = {\n columns: CompactSelection.empty(),\n rows: CompactSelection.empty(),\n current: void 0\n};\nvar DataEditorImpl = (p, forwardedRef) => {\n var _a, _b, _c, _d, _e;\n const [gridSelectionInner, setGridSelectionInner] = React35.useState(emptyGridSelection);\n const [overlay, setOverlay] = React35.useState();\n const searchInputRef = React35.useRef(null);\n const canvasRef = React35.useRef(null);\n const [mouseState, setMouseState] = React35.useState();\n const scrollRef = React35.useRef(null);\n const lastSent = React35.useRef();\n const {\n rowMarkers = \"none\",\n rowMarkerWidth: rowMarkerWidthRaw,\n imageEditorOverride,\n getRowThemeOverride,\n markdownDivCreateNode,\n width,\n height,\n columns: columnsIn,\n rows,\n getCellContent,\n onCellClicked,\n onCellActivated,\n onFinishedEditing,\n coercePasteValue,\n drawHeader: drawHeaderIn,\n onHeaderClicked,\n spanRangeBehavior = \"default\",\n onGroupHeaderClicked,\n onCellContextMenu,\n className,\n onHeaderContextMenu,\n getCellsForSelection: getCellsForSelectionIn,\n onGroupHeaderContextMenu,\n onGroupHeaderRenamed,\n onCellEdited,\n onCellsEdited,\n onSearchResultsChanged: onSearchResultsChangedIn,\n searchResults,\n onSearchValueChange,\n searchValue,\n onKeyDown: onKeyDownIn,\n onKeyUp: onKeyUpIn,\n keybindings: keybindingsIn,\n onRowAppended,\n onColumnMoved,\n validateCell: validateCellIn,\n highlightRegions: highlightRegionsIn,\n drawCell: drawCell2,\n rangeSelect = \"rect\",\n columnSelect = \"multi\",\n rowSelect = \"multi\",\n rangeSelectionBlending = \"exclusive\",\n columnSelectionBlending = \"exclusive\",\n rowSelectionBlending = \"exclusive\",\n onDelete: onDeleteIn,\n onDragStart,\n onMouseMove,\n onPaste,\n copyHeaders = false,\n freezeColumns = 0,\n rowSelectionMode = \"auto\",\n rowMarkerStartIndex = 1,\n rowMarkerTheme,\n onHeaderMenuClick,\n getGroupDetails,\n onSearchClose: onSearchCloseIn,\n onItemHovered,\n onSelectionCleared,\n showSearch: showSearchIn,\n onVisibleRegionChanged,\n gridSelection: gridSelectionOuter,\n onGridSelectionChange,\n minColumnWidth: minColumnWidthIn = 50,\n maxColumnWidth: maxColumnWidthIn = 500,\n maxColumnAutoWidth: maxColumnAutoWidthIn,\n provideEditor,\n trailingRowOptions,\n scrollOffsetX,\n scrollOffsetY,\n verticalBorder,\n onDragOverCell,\n onDrop,\n onColumnResize: onColumnResizeIn,\n onColumnResizeEnd: onColumnResizeEndIn,\n onColumnResizeStart: onColumnResizeStartIn,\n customRenderers: additionalRenderers,\n fillHandle,\n drawFocusRing: drawFocusRing2,\n experimental,\n fixedShadowX,\n fixedShadowY,\n headerIcons,\n imageWindowLoader,\n initialSize,\n isDraggable,\n onDragLeave,\n onRowMoved,\n overscrollX: overscrollXIn,\n overscrollY: overscrollYIn,\n preventDiagonalScrolling,\n rightElement,\n rightElementProps,\n showMinimap,\n smoothScrollX,\n smoothScrollY,\n scrollToEnd,\n scaleToRem = false,\n rowHeight: rowHeightIn = 34,\n headerHeight: headerHeightIn = 36,\n groupHeaderHeight: groupHeaderHeightIn = headerHeightIn,\n theme: themeIn,\n isOutsideClick\n } = p;\n const minColumnWidth = Math.max(minColumnWidthIn, 20);\n const maxColumnWidth = Math.max(maxColumnWidthIn, minColumnWidth);\n const maxColumnAutoWidth = Math.max(maxColumnAutoWidthIn != null ? maxColumnAutoWidthIn : maxColumnWidth, minColumnWidth);\n const docStyle = React35.useMemo(() => {\n if (typeof window === \"undefined\")\n return { fontSize: \"16px\" };\n return window.getComputedStyle(document.documentElement);\n }, []);\n const fontSizeStr = docStyle.fontSize;\n const remSize = React35.useMemo(() => Number.parseFloat(fontSizeStr), [fontSizeStr]);\n const { rowHeight, headerHeight, groupHeaderHeight, theme, overscrollX, overscrollY } = useRemAdjuster({\n groupHeaderHeight: groupHeaderHeightIn,\n headerHeight: headerHeightIn,\n overscrollX: overscrollXIn,\n overscrollY: overscrollYIn,\n remSize,\n rowHeight: rowHeightIn,\n scaleToRem,\n theme: themeIn\n });\n const keybindings = React35.useMemo(() => {\n return keybindingsIn === void 0 ? keybindingDefaults : {\n ...keybindingDefaults,\n ...keybindingsIn\n };\n }, [keybindingsIn]);\n const rowMarkerWidth = rowMarkerWidthRaw != null ? rowMarkerWidthRaw : rows > 1e4 ? 48 : rows > 1e3 ? 44 : rows > 100 ? 36 : 32;\n const hasRowMarkers = rowMarkers !== \"none\";\n const rowMarkerOffset = hasRowMarkers ? 1 : 0;\n const showTrailingBlankRow = onRowAppended !== void 0;\n const lastRowSticky = (trailingRowOptions == null ? void 0 : trailingRowOptions.sticky) === true;\n const [showSearchInner, setShowSearchInner] = React35.useState(false);\n const showSearch = showSearchIn != null ? showSearchIn : showSearchInner;\n const onSearchClose = React35.useCallback(() => {\n if (onSearchCloseIn !== void 0) {\n onSearchCloseIn();\n } else {\n setShowSearchInner(false);\n }\n }, [onSearchCloseIn]);\n const gridSelectionOuterMangled = React35.useMemo(() => {\n return gridSelectionOuter === void 0 ? void 0 : shiftSelection(gridSelectionOuter, rowMarkerOffset);\n }, [gridSelectionOuter, rowMarkerOffset]);\n const gridSelection = gridSelectionOuterMangled != null ? gridSelectionOuterMangled : gridSelectionInner;\n const abortControllerRef = React35.useRef(new AbortController());\n React35.useEffect(() => {\n return () => {\n abortControllerRef == null ? void 0 : abortControllerRef.current.abort();\n };\n }, []);\n const [getCellsForSelection, getCellsForSeletionDirect] = useCellsForSelection(\n getCellsForSelectionIn,\n getCellContent,\n rowMarkerOffset,\n abortControllerRef.current,\n rows\n );\n const validateCell = React35.useCallback(\n (cell, newValue, prevValue) => {\n if (validateCellIn === void 0)\n return true;\n const item = [cell[0] - rowMarkerOffset, cell[1]];\n return validateCellIn == null ? void 0 : validateCellIn(item, newValue, prevValue);\n },\n [rowMarkerOffset, validateCellIn]\n );\n const expectedExternalGridSelection = React35.useRef(gridSelectionOuter);\n const setGridSelection = React35.useCallback(\n (newVal, expand) => {\n if (expand) {\n newVal = expandSelection(\n newVal,\n getCellsForSelection,\n rowMarkerOffset,\n spanRangeBehavior,\n abortControllerRef.current\n );\n }\n if (onGridSelectionChange !== void 0) {\n expectedExternalGridSelection.current = shiftSelection(newVal, -rowMarkerOffset);\n onGridSelectionChange(expectedExternalGridSelection.current);\n } else {\n setGridSelectionInner(newVal);\n }\n },\n [onGridSelectionChange, getCellsForSelection, rowMarkerOffset, spanRangeBehavior]\n );\n const onColumnResize = whenDefined(\n onColumnResizeIn,\n React35.useCallback(\n (_, w, ind, wg) => {\n onColumnResizeIn == null ? void 0 : onColumnResizeIn(columnsIn[ind - rowMarkerOffset], w, ind - rowMarkerOffset, wg);\n },\n [onColumnResizeIn, rowMarkerOffset, columnsIn]\n )\n );\n const onColumnResizeEnd = whenDefined(\n onColumnResizeEndIn,\n React35.useCallback(\n (_, w, ind, wg) => {\n onColumnResizeEndIn == null ? void 0 : onColumnResizeEndIn(columnsIn[ind - rowMarkerOffset], w, ind - rowMarkerOffset, wg);\n },\n [onColumnResizeEndIn, rowMarkerOffset, columnsIn]\n )\n );\n const onColumnResizeStart = whenDefined(\n onColumnResizeStartIn,\n React35.useCallback(\n (_, w, ind, wg) => {\n onColumnResizeStartIn == null ? void 0 : onColumnResizeStartIn(columnsIn[ind - rowMarkerOffset], w, ind - rowMarkerOffset, wg);\n },\n [onColumnResizeStartIn, rowMarkerOffset, columnsIn]\n )\n );\n const drawHeader2 = whenDefined(\n drawHeaderIn,\n React35.useCallback(\n (args) => {\n var _a2;\n return (_a2 = drawHeaderIn == null ? void 0 : drawHeaderIn({ ...args, columnIndex: args.columnIndex - rowMarkerOffset })) != null ? _a2 : false;\n },\n [drawHeaderIn, rowMarkerOffset]\n )\n );\n const onDelete = React35.useCallback(\n (sel) => {\n if (onDeleteIn !== void 0) {\n const result = onDeleteIn(shiftSelection(sel, -rowMarkerOffset));\n if (typeof result === \"boolean\") {\n return result;\n }\n return shiftSelection(result, rowMarkerOffset);\n }\n return true;\n },\n [onDeleteIn, rowMarkerOffset]\n );\n const [setCurrent, setSelectedRows, setSelectedColumns] = useSelectionBehavior(\n gridSelection,\n setGridSelection,\n rangeSelectionBlending,\n columnSelectionBlending,\n rowSelectionBlending,\n rangeSelect\n );\n const mergedTheme = React35.useMemo(() => {\n return { ...getDataEditorTheme(), ...theme };\n }, [theme]);\n const [clientSize, setClientSize] = React35.useState([10, 10, 0]);\n const getCellRenderer = React35.useCallback(\n (cell) => {\n if (cell.kind !== GridCellKind.Custom) {\n return CellRenderers[cell.kind];\n }\n return additionalRenderers == null ? void 0 : additionalRenderers.find((x) => x.isMatch(cell));\n },\n [additionalRenderers]\n );\n const columns = useColumnSizer(\n columnsIn,\n rows,\n getCellsForSeletionDirect,\n clientSize[0] - (rowMarkerOffset === 0 ? 0 : rowMarkerWidth) - clientSize[2],\n minColumnWidth,\n maxColumnAutoWidth,\n mergedTheme,\n getCellRenderer,\n abortControllerRef.current\n );\n const enableGroups = React35.useMemo(() => {\n return columns.some((c) => c.group !== void 0);\n }, [columns]);\n const totalHeaderHeight = enableGroups ? headerHeight + groupHeaderHeight : headerHeight;\n const numSelectedRows = gridSelection.rows.length;\n const rowMarkerHeader = rowMarkers === \"none\" ? \"\" : numSelectedRows === 0 ? headerCellUnheckedMarker : numSelectedRows === rows ? headerCellCheckedMarker : headerCellIndeterminateMarker;\n const mangledCols = React35.useMemo(() => {\n if (rowMarkers === \"none\")\n return columns;\n return [\n {\n title: rowMarkerHeader,\n width: rowMarkerWidth,\n icon: void 0,\n hasMenu: false,\n style: \"normal\",\n themeOverride: rowMarkerTheme\n },\n ...columns\n ];\n }, [columns, rowMarkerWidth, rowMarkers, rowMarkerHeader, rowMarkerTheme]);\n const [visibleRegionY, visibleRegionTy] = React35.useMemo(() => {\n return [\n scrollOffsetY !== void 0 && typeof rowHeight === \"number\" ? Math.floor(scrollOffsetY / rowHeight) : 0,\n scrollOffsetY !== void 0 && typeof rowHeight === \"number\" ? -(scrollOffsetY % rowHeight) : 0\n ];\n }, [scrollOffsetY, rowHeight]);\n const visibleRegionRef = React35.useRef({\n height: 1,\n width: 1,\n x: 0,\n y: 0\n });\n const visibleRegionInput = React35.useMemo(\n () => {\n var _a2, _b2;\n return {\n x: visibleRegionRef.current.x,\n y: visibleRegionY,\n width: (_a2 = visibleRegionRef.current.width) != null ? _a2 : 1,\n height: (_b2 = visibleRegionRef.current.height) != null ? _b2 : 1,\n // tx: 'TODO',\n ty: visibleRegionTy\n };\n },\n [visibleRegionTy, visibleRegionY]\n );\n const hasJustScrolled = React35.useRef(false);\n const [visibleRegion, setVisibleRegion, empty2] = useStateWithReactiveInput(visibleRegionInput);\n const vScrollReady = ((_a = visibleRegion.height) != null ? _a : 1) > 1;\n React35.useLayoutEffect(() => {\n if (scrollOffsetY !== void 0 && scrollRef.current !== null && vScrollReady) {\n if (scrollRef.current.scrollTop === scrollOffsetY)\n return;\n scrollRef.current.scrollTop = scrollOffsetY;\n if (scrollRef.current.scrollTop !== scrollOffsetY) {\n empty2();\n }\n hasJustScrolled.current = true;\n }\n }, [scrollOffsetY, vScrollReady, empty2]);\n const hScrollReady = ((_b = visibleRegion.width) != null ? _b : 1) > 1;\n React35.useLayoutEffect(() => {\n if (scrollOffsetX !== void 0 && scrollRef.current !== null && hScrollReady) {\n if (scrollRef.current.scrollLeft === scrollOffsetX)\n return;\n scrollRef.current.scrollLeft = scrollOffsetX;\n if (scrollRef.current.scrollLeft !== scrollOffsetX) {\n empty2();\n }\n hasJustScrolled.current = true;\n }\n }, [scrollOffsetX, hScrollReady, empty2]);\n const cellXOffset = visibleRegion.x + rowMarkerOffset;\n const cellYOffset = visibleRegion.y;\n const gridRef = React35.useRef(null);\n const focus = React35.useCallback((immediate) => {\n var _a2;\n if (immediate === true) {\n (_a2 = gridRef.current) == null ? void 0 : _a2.focus();\n } else {\n window.requestAnimationFrame(() => {\n var _a3;\n (_a3 = gridRef.current) == null ? void 0 : _a3.focus();\n });\n }\n }, []);\n const mangledRows = showTrailingBlankRow ? rows + 1 : rows;\n const mangledOnCellsEdited = React35.useCallback(\n (items) => {\n const mangledItems = rowMarkerOffset === 0 ? items : items.map((x) => ({\n ...x,\n location: [x.location[0] - rowMarkerOffset, x.location[1]]\n }));\n const r = onCellsEdited == null ? void 0 : onCellsEdited(mangledItems);\n if (r !== true) {\n for (const i of mangledItems)\n onCellEdited == null ? void 0 : onCellEdited(i.location, i.value);\n }\n return r;\n },\n [onCellEdited, onCellsEdited, rowMarkerOffset]\n );\n const highlightRegions = React35.useMemo(() => {\n if (highlightRegionsIn === void 0)\n return void 0;\n if (rowMarkerOffset === 0)\n return highlightRegionsIn;\n return highlightRegionsIn.map((r) => {\n const maxWidth = mangledCols.length - r.range.x - rowMarkerOffset;\n if (maxWidth <= 0)\n return void 0;\n return {\n color: r.color,\n range: {\n ...r.range,\n x: r.range.x + rowMarkerOffset,\n width: Math.min(maxWidth, r.range.width)\n },\n style: r.style\n };\n }).filter((x) => x !== void 0);\n }, [highlightRegionsIn, mangledCols.length, rowMarkerOffset]);\n const mangledColsRef = React35.useRef(mangledCols);\n mangledColsRef.current = mangledCols;\n const getMangledCellContent = React35.useCallback(\n ([col, row], forceStrict = false) => {\n var _a2, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j;\n const isTrailing = showTrailingBlankRow && row === mangledRows - 1;\n const isRowMarkerCol = col === 0 && hasRowMarkers;\n if (isRowMarkerCol) {\n if (isTrailing) {\n return loadingCell2;\n }\n return {\n kind: InnerGridCellKind.Marker,\n allowOverlay: false,\n checked: (gridSelection == null ? void 0 : gridSelection.rows.hasIndex(row)) === true,\n markerKind: rowMarkers === \"clickable-number\" ? \"number\" : rowMarkers,\n row: rowMarkerStartIndex + row,\n drawHandle: onRowMoved !== void 0,\n cursor: rowMarkers === \"clickable-number\" ? \"pointer\" : void 0\n };\n } else if (isTrailing) {\n const isFirst = col === rowMarkerOffset;\n const maybeFirstColumnHint = isFirst ? (_a2 = trailingRowOptions == null ? void 0 : trailingRowOptions.hint) != null ? _a2 : \"\" : \"\";\n const c = mangledColsRef.current[col];\n if (((_b2 = c == null ? void 0 : c.trailingRowOptions) == null ? void 0 : _b2.disabled) === true) {\n return loadingCell2;\n } else {\n const hint = (_d2 = (_c2 = c == null ? void 0 : c.trailingRowOptions) == null ? void 0 : _c2.hint) != null ? _d2 : maybeFirstColumnHint;\n const icon = (_f = (_e2 = c == null ? void 0 : c.trailingRowOptions) == null ? void 0 : _e2.addIcon) != null ? _f : trailingRowOptions == null ? void 0 : trailingRowOptions.addIcon;\n return {\n kind: InnerGridCellKind.NewRow,\n hint,\n allowOverlay: false,\n icon\n };\n }\n } else {\n const outerCol = col - rowMarkerOffset;\n if (forceStrict || (experimental == null ? void 0 : experimental.strict) === true) {\n const vr = visibleRegionRef.current;\n const isOutsideMainArea = vr.x > outerCol || outerCol > vr.x + vr.width || vr.y > row || row > vr.y + vr.height;\n const isSelected = outerCol === ((_h = (_g = vr.extras) == null ? void 0 : _g.selected) == null ? void 0 : _h[0]) && row === ((_i = vr.extras) == null ? void 0 : _i.selected[1]);\n const isOutsideFreezeArea = ((_j = vr.extras) == null ? void 0 : _j.freezeRegion) === void 0 || vr.extras.freezeRegion.x > outerCol || outerCol > vr.extras.freezeRegion.x + vr.extras.freezeRegion.width || vr.extras.freezeRegion.y > row || row > vr.extras.freezeRegion.y + vr.extras.freezeRegion.height;\n if (isOutsideMainArea && !isSelected && isOutsideFreezeArea) {\n return {\n kind: GridCellKind.Loading,\n allowOverlay: false\n };\n }\n }\n let result = getCellContent([outerCol, row]);\n if (rowMarkerOffset !== 0 && result.span !== void 0) {\n result = {\n ...result,\n span: [result.span[0] + rowMarkerOffset, result.span[1] + rowMarkerOffset]\n };\n }\n return result;\n }\n },\n [\n showTrailingBlankRow,\n mangledRows,\n hasRowMarkers,\n gridSelection == null ? void 0 : gridSelection.rows,\n onRowMoved,\n rowMarkers,\n rowMarkerOffset,\n trailingRowOptions == null ? void 0 : trailingRowOptions.hint,\n trailingRowOptions == null ? void 0 : trailingRowOptions.addIcon,\n experimental == null ? void 0 : experimental.strict,\n getCellContent,\n rowMarkerStartIndex\n ]\n );\n const mangledGetGroupDetails = React35.useCallback(\n (group) => {\n var _a2, _b2;\n let result = (_a2 = getGroupDetails == null ? void 0 : getGroupDetails(group)) != null ? _a2 : { name: group };\n if (onGroupHeaderRenamed !== void 0 && group !== \"\") {\n result = {\n icon: result.icon,\n name: result.name,\n overrideTheme: result.overrideTheme,\n actions: [\n ...(_b2 = result.actions) != null ? _b2 : [],\n {\n title: \"Rename\",\n icon: \"renameIcon\",\n onClick: (e) => setRenameGroup({\n group: result.name,\n bounds: e.bounds\n })\n }\n ]\n };\n }\n return result;\n },\n [getGroupDetails, onGroupHeaderRenamed]\n );\n const setOverlaySimple = React35.useCallback(\n (val) => {\n var _a2;\n const [col, row] = val.cell;\n const column = mangledCols[col];\n const groupTheme = (column == null ? void 0 : column.group) !== void 0 ? (_a2 = mangledGetGroupDetails(column.group)) == null ? void 0 : _a2.overrideTheme : void 0;\n const colTheme = column == null ? void 0 : column.themeOverride;\n const rowTheme = getRowThemeOverride == null ? void 0 : getRowThemeOverride(row);\n setOverlay({\n ...val,\n theme: { ...mergedTheme, ...groupTheme, ...colTheme, ...rowTheme, ...val.content.themeOverride }\n });\n },\n [getRowThemeOverride, mangledCols, mangledGetGroupDetails, mergedTheme]\n );\n const reselect = React35.useCallback(\n (bounds, fromKeyboard, initialValue) => {\n var _a2;\n if (gridSelection.current === void 0)\n return;\n const [col, row] = gridSelection.current.cell;\n const c = getMangledCellContent([col, row]);\n if (c.kind !== GridCellKind.Boolean && c.allowOverlay) {\n let content = c;\n if (initialValue !== void 0) {\n switch (content.kind) {\n case GridCellKind.Number: {\n const d = maybe(() => initialValue === \"-\" ? -0 : Number.parseFloat(initialValue), 0);\n content = {\n ...content,\n data: Number.isNaN(d) ? 0 : d\n };\n break;\n }\n case GridCellKind.Text:\n case GridCellKind.Markdown:\n case GridCellKind.Uri:\n content = {\n ...content,\n data: initialValue\n };\n break;\n }\n }\n setOverlaySimple({\n target: bounds,\n content,\n initialValue,\n cell: [col, row],\n highlight: initialValue === void 0,\n forceEditMode: initialValue !== void 0\n });\n } else if (c.kind === GridCellKind.Boolean && fromKeyboard && c.readonly !== true) {\n mangledOnCellsEdited([\n {\n location: gridSelection.current.cell,\n value: {\n ...c,\n data: toggleBoolean(c.data)\n }\n }\n ]);\n (_a2 = gridRef.current) == null ? void 0 : _a2.damage([{ cell: gridSelection.current.cell }]);\n }\n },\n [getMangledCellContent, gridSelection, mangledOnCellsEdited, setOverlaySimple]\n );\n const focusOnRowFromTrailingBlankRow = React35.useCallback(\n (col, row) => {\n var _a2;\n const bounds = (_a2 = gridRef.current) == null ? void 0 : _a2.getBounds(col, row);\n if (bounds === void 0 || scrollRef.current === null) {\n return;\n }\n const content = getMangledCellContent([col, row]);\n if (!content.allowOverlay) {\n return;\n }\n setOverlaySimple({\n target: bounds,\n content,\n initialValue: void 0,\n highlight: true,\n cell: [col, row],\n forceEditMode: true\n });\n },\n [getMangledCellContent, setOverlaySimple]\n );\n const scrollTo = React35.useCallback(\n (col, row, dir = \"both\", paddingX = 0, paddingY = 0, options = void 0) => {\n var _a2;\n if (scrollRef.current !== null) {\n const grid = gridRef.current;\n const canvas = canvasRef.current;\n const trueCol = typeof col !== \"number\" ? col.unit === \"cell\" ? col.amount : void 0 : col;\n const trueRow = typeof row !== \"number\" ? row.unit === \"cell\" ? row.amount : void 0 : row;\n const desiredX = typeof col !== \"number\" && col.unit === \"px\" ? col.amount : void 0;\n const desiredY = typeof row !== \"number\" && row.unit === \"px\" ? row.amount : void 0;\n if (grid !== null && canvas !== null) {\n let targetRect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n let scrollX = 0;\n let scrollY = 0;\n if (trueCol !== void 0 || trueRow !== void 0) {\n targetRect = (_a2 = grid.getBounds((trueCol != null ? trueCol : 0) + rowMarkerOffset, trueRow != null ? trueRow : 0)) != null ? _a2 : targetRect;\n if (targetRect.width === 0 || targetRect.height === 0)\n return;\n }\n const scrollBounds = canvas.getBoundingClientRect();\n const scale = scrollBounds.width / canvas.offsetWidth;\n if (desiredX !== void 0) {\n targetRect = {\n ...targetRect,\n x: desiredX - scrollBounds.left - scrollRef.current.scrollLeft,\n width: 1\n };\n }\n if (desiredY !== void 0) {\n targetRect = {\n ...targetRect,\n y: desiredY + scrollBounds.top - scrollRef.current.scrollTop,\n height: 1\n };\n }\n if (targetRect !== void 0) {\n const bounds = {\n x: targetRect.x - paddingX,\n y: targetRect.y - paddingY,\n width: targetRect.width + 2 * paddingX,\n height: targetRect.height + 2 * paddingY\n };\n let frozenWidth = 0;\n for (let i = 0; i < freezeColumns; i++) {\n frozenWidth += columns[i].width;\n }\n let trailingRowHeight = 0;\n if (lastRowSticky) {\n trailingRowHeight = typeof rowHeight === \"number\" ? rowHeight : rowHeight(rows);\n }\n let sLeft = frozenWidth * scale + scrollBounds.left + rowMarkerOffset * rowMarkerWidth * scale;\n let sRight = scrollBounds.right;\n let sTop = scrollBounds.top + totalHeaderHeight * scale;\n let sBottom = scrollBounds.bottom - trailingRowHeight * scale;\n const minx = targetRect.width + paddingX * 2;\n switch (options == null ? void 0 : options.hAlign) {\n case \"start\":\n sRight = sLeft + minx;\n break;\n case \"end\":\n sLeft = sRight - minx;\n break;\n case \"center\":\n sLeft = Math.floor((sLeft + sRight) / 2) - minx / 2;\n sRight = sLeft + minx;\n break;\n }\n const miny = targetRect.height + paddingY * 2;\n switch (options == null ? void 0 : options.vAlign) {\n case \"start\":\n sBottom = sTop + miny;\n break;\n case \"end\":\n sTop = sBottom - miny;\n break;\n case \"center\":\n sTop = Math.floor((sTop + sBottom) / 2) - miny / 2;\n sBottom = sTop + miny;\n break;\n }\n if (sLeft > bounds.x) {\n scrollX = bounds.x - sLeft;\n } else if (sRight < bounds.x + bounds.width) {\n scrollX = bounds.x + bounds.width - sRight;\n }\n if (sTop > bounds.y) {\n scrollY = bounds.y - sTop;\n } else if (sBottom < bounds.y + bounds.height) {\n scrollY = bounds.y + bounds.height - sBottom;\n }\n if (dir === \"vertical\" || typeof col === \"number\" && col < freezeColumns) {\n scrollX = 0;\n } else if (dir === \"horizontal\") {\n scrollY = 0;\n }\n if (scrollX !== 0 || scrollY !== 0) {\n if (scale !== 1) {\n scrollX /= scale;\n scrollY /= scale;\n }\n scrollRef.current.scrollTo(\n scrollX + scrollRef.current.scrollLeft,\n scrollY + scrollRef.current.scrollTop\n );\n }\n }\n }\n }\n },\n [rowMarkerOffset, rowMarkerWidth, totalHeaderHeight, lastRowSticky, freezeColumns, columns, rowHeight, rows]\n );\n const focusCallback = React35.useRef(focusOnRowFromTrailingBlankRow);\n const getCellContentRef = React35.useRef(getCellContent);\n const rowsRef = React35.useRef(rows);\n focusCallback.current = focusOnRowFromTrailingBlankRow;\n getCellContentRef.current = getCellContent;\n rowsRef.current = rows;\n const appendRow = React35.useCallback(\n async (col, openOverlay = true) => {\n var _a2;\n const c = mangledCols[col];\n if (((_a2 = c == null ? void 0 : c.trailingRowOptions) == null ? void 0 : _a2.disabled) === true) {\n return;\n }\n const appendResult = onRowAppended == null ? void 0 : onRowAppended();\n let r = void 0;\n let bottom = true;\n if (appendResult !== void 0) {\n r = await appendResult;\n if (r === \"top\")\n bottom = false;\n if (typeof r === \"number\")\n bottom = false;\n }\n let backoff = 0;\n const doFocus = () => {\n if (rowsRef.current <= rows) {\n if (backoff < 500) {\n window.setTimeout(doFocus, backoff);\n }\n backoff = 50 + backoff * 2;\n return;\n }\n const row = typeof r === \"number\" ? r : bottom ? rows : 0;\n scrollTo(col - rowMarkerOffset, row);\n setCurrent(\n {\n cell: [col, row],\n range: {\n x: col,\n y: row,\n width: 1,\n height: 1\n }\n },\n false,\n false,\n \"edit\"\n );\n const cell = getCellContentRef.current([col - rowMarkerOffset, row]);\n if (cell.allowOverlay && isReadWriteCell(cell) && cell.readonly !== true && openOverlay) {\n window.setTimeout(() => {\n focusCallback.current(col, row);\n }, 0);\n }\n };\n doFocus();\n },\n [mangledCols, onRowAppended, rowMarkerOffset, rows, scrollTo, setCurrent]\n );\n const getCustomNewRowTargetColumn = React35.useCallback(\n (col) => {\n var _a2, _b2, _c2;\n const customTargetColumn = (_c2 = (_b2 = (_a2 = columns[col]) == null ? void 0 : _a2.trailingRowOptions) == null ? void 0 : _b2.targetColumn) != null ? _c2 : trailingRowOptions == null ? void 0 : trailingRowOptions.targetColumn;\n if (typeof customTargetColumn === \"number\") {\n const customTargetOffset = hasRowMarkers ? 1 : 0;\n return customTargetColumn + customTargetOffset;\n }\n if (typeof customTargetColumn === \"object\") {\n const maybeIndex = columnsIn.indexOf(customTargetColumn);\n if (maybeIndex >= 0) {\n const customTargetOffset = hasRowMarkers ? 1 : 0;\n return maybeIndex + customTargetOffset;\n }\n }\n return void 0;\n },\n [columns, columnsIn, hasRowMarkers, trailingRowOptions == null ? void 0 : trailingRowOptions.targetColumn]\n );\n const lastSelectedRowRef = React35.useRef();\n const lastSelectedColRef = React35.useRef();\n const themeForCell = React35.useCallback(\n (cell, pos) => {\n var _a2;\n const [col, row] = pos;\n return {\n ...mergedTheme,\n ...(_a2 = mangledCols[col]) == null ? void 0 : _a2.themeOverride,\n ...getRowThemeOverride == null ? void 0 : getRowThemeOverride(row),\n ...cell.themeOverride\n };\n },\n [getRowThemeOverride, mangledCols, mergedTheme]\n );\n const handleSelect = React35.useCallback(\n (args) => {\n var _a2, _b2, _c2, _d2;\n const isMultiKey = browserIsOSX.value ? args.metaKey : args.ctrlKey;\n const isMultiRow = isMultiKey && rowSelect === \"multi\";\n const isMultiCol = isMultiKey && columnSelect === \"multi\";\n const [col, row] = args.location;\n const selectedColumns = gridSelection.columns;\n const selectedRows = gridSelection.rows;\n const [cellCol, cellRow] = (_b2 = (_a2 = gridSelection.current) == null ? void 0 : _a2.cell) != null ? _b2 : [];\n if (args.kind === \"cell\") {\n lastSelectedColRef.current = void 0;\n lastMouseSelectLocation.current = [col, row];\n if (col === 0 && hasRowMarkers) {\n if (showTrailingBlankRow === true && row === rows || rowMarkers === \"number\" || rowSelect === \"none\")\n return;\n const markerCell = getMangledCellContent(args.location);\n if (markerCell.kind !== InnerGridCellKind.Marker) {\n return;\n }\n if (onRowMoved !== void 0) {\n const renderer = getCellRenderer(markerCell);\n assert((renderer == null ? void 0 : renderer.kind) === InnerGridCellKind.Marker);\n const postClick = (_c2 = renderer == null ? void 0 : renderer.onClick) == null ? void 0 : _c2.call(renderer, {\n ...args,\n cell: markerCell,\n posX: args.localEventX,\n posY: args.localEventY,\n bounds: args.bounds,\n theme: themeForCell(markerCell, args.location),\n preventDefault: () => void 0\n });\n if (postClick === void 0 || postClick.checked === markerCell.checked)\n return;\n }\n setOverlay(void 0);\n focus();\n const isSelected = selectedRows.hasIndex(row);\n const lastHighlighted = lastSelectedRowRef.current;\n if (rowSelect === \"multi\" && (args.shiftKey || args.isLongTouch === true) && lastHighlighted !== void 0 && selectedRows.hasIndex(lastHighlighted)) {\n const newSlice = [Math.min(lastHighlighted, row), Math.max(lastHighlighted, row) + 1];\n if (isMultiRow || rowSelectionMode === \"multi\") {\n setSelectedRows(void 0, newSlice, true);\n } else {\n setSelectedRows(CompactSelection.fromSingleSelection(newSlice), void 0, isMultiRow);\n }\n } else if (isMultiRow || args.isTouch || rowSelectionMode === \"multi\") {\n if (isSelected) {\n setSelectedRows(selectedRows.remove(row), void 0, true);\n } else {\n setSelectedRows(void 0, row, true);\n lastSelectedRowRef.current = row;\n }\n } else if (isSelected && selectedRows.length === 1) {\n setSelectedRows(CompactSelection.empty(), void 0, isMultiKey);\n } else {\n setSelectedRows(CompactSelection.fromSingleSelection(row), void 0, isMultiKey);\n lastSelectedRowRef.current = row;\n }\n } else if (col >= rowMarkerOffset && showTrailingBlankRow && row === rows) {\n const customTargetColumn = getCustomNewRowTargetColumn(col);\n void appendRow(customTargetColumn != null ? customTargetColumn : col);\n } else {\n if (cellCol !== col || cellRow !== row) {\n const cell = getMangledCellContent(args.location);\n const renderer = getCellRenderer(cell);\n if ((renderer == null ? void 0 : renderer.onSelect) !== void 0) {\n let prevented = false;\n renderer.onSelect({\n ...args,\n cell,\n posX: args.localEventX,\n posY: args.localEventY,\n bounds: args.bounds,\n preventDefault: () => prevented = true,\n theme: themeForCell(cell, args.location)\n });\n if (prevented) {\n return;\n }\n }\n const isLastStickyRow = lastRowSticky && row === rows;\n const startedFromLastSticky = lastRowSticky && gridSelection !== void 0 && ((_d2 = gridSelection.current) == null ? void 0 : _d2.cell[1]) === rows;\n if ((args.shiftKey || args.isLongTouch === true) && cellCol !== void 0 && cellRow !== void 0 && gridSelection.current !== void 0 && !startedFromLastSticky) {\n if (isLastStickyRow) {\n return;\n }\n const left = Math.min(col, cellCol);\n const right = Math.max(col, cellCol);\n const top = Math.min(row, cellRow);\n const bottom = Math.max(row, cellRow);\n setCurrent(\n {\n ...gridSelection.current,\n range: {\n x: left,\n y: top,\n width: right - left + 1,\n height: bottom - top + 1\n }\n },\n true,\n isMultiKey,\n \"click\"\n );\n lastSelectedRowRef.current = void 0;\n focus();\n } else {\n setCurrent(\n {\n cell: [col, row],\n range: { x: col, y: row, width: 1, height: 1 }\n },\n true,\n isMultiKey,\n \"click\"\n );\n lastSelectedRowRef.current = void 0;\n setOverlay(void 0);\n focus();\n }\n }\n }\n } else if (args.kind === \"header\") {\n lastMouseSelectLocation.current = [col, row];\n setOverlay(void 0);\n if (hasRowMarkers && col === 0) {\n lastSelectedRowRef.current = void 0;\n lastSelectedColRef.current = void 0;\n if (rowSelect === \"multi\") {\n if (selectedRows.length !== rows) {\n setSelectedRows(CompactSelection.fromSingleSelection([0, rows]), void 0, isMultiKey);\n } else {\n setSelectedRows(CompactSelection.empty(), void 0, isMultiKey);\n }\n focus();\n }\n } else {\n const lastCol = lastSelectedColRef.current;\n if (columnSelect === \"multi\" && (args.shiftKey || args.isLongTouch === true) && lastCol !== void 0 && selectedColumns.hasIndex(lastCol)) {\n const newSlice = [Math.min(lastCol, col), Math.max(lastCol, col) + 1];\n if (isMultiCol) {\n setSelectedColumns(void 0, newSlice, isMultiKey);\n } else {\n setSelectedColumns(CompactSelection.fromSingleSelection(newSlice), void 0, isMultiKey);\n }\n } else if (isMultiCol) {\n if (selectedColumns.hasIndex(col)) {\n setSelectedColumns(selectedColumns.remove(col), void 0, isMultiKey);\n } else {\n setSelectedColumns(void 0, col, isMultiKey);\n }\n lastSelectedColRef.current = col;\n } else if (columnSelect !== \"none\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(col), void 0, isMultiKey);\n lastSelectedColRef.current = col;\n }\n lastSelectedRowRef.current = void 0;\n focus();\n }\n } else if (args.kind === groupHeaderKind) {\n lastMouseSelectLocation.current = [col, row];\n } else if (args.kind === outOfBoundsKind && !args.isMaybeScrollbar) {\n setGridSelection(emptyGridSelection, false);\n setOverlay(void 0);\n focus();\n onSelectionCleared == null ? void 0 : onSelectionCleared();\n lastSelectedRowRef.current = void 0;\n lastSelectedColRef.current = void 0;\n }\n },\n [\n appendRow,\n columnSelect,\n focus,\n getCellRenderer,\n getCustomNewRowTargetColumn,\n getMangledCellContent,\n gridSelection,\n hasRowMarkers,\n lastRowSticky,\n onSelectionCleared,\n onRowMoved,\n rowMarkerOffset,\n rowMarkers,\n rowSelect,\n rowSelectionMode,\n rows,\n setCurrent,\n setGridSelection,\n setSelectedColumns,\n setSelectedRows,\n showTrailingBlankRow,\n themeForCell\n ]\n );\n const isActivelyDraggingHeader = React35.useRef(false);\n const lastMouseSelectLocation = React35.useRef();\n const touchDownArgs = React35.useRef(visibleRegion);\n const mouseDownData = React35.useRef();\n const onMouseDown = React35.useCallback(\n (args) => {\n var _a2, _b2;\n isPrevented.current = false;\n touchDownArgs.current = visibleRegionRef.current;\n if (args.button !== 0 && args.button !== 1) {\n mouseDownData.current = void 0;\n return;\n }\n const time = performance.now();\n const wasDoubleClick = time - ((_b2 = (_a2 = mouseDownData.current) == null ? void 0 : _a2.time) != null ? _b2 : -1e3) < 250;\n mouseDownData.current = {\n wasDoubleClick,\n button: args.button,\n time,\n location: args.location\n };\n if ((args == null ? void 0 : args.kind) === \"header\") {\n isActivelyDraggingHeader.current = true;\n }\n const fh = args.kind === \"cell\" && args.isFillHandle;\n if (!fh && args.kind !== \"cell\" && args.isEdge)\n return;\n setMouseState({\n previousSelection: gridSelection,\n fillHandle: fh\n });\n lastMouseSelectLocation.current = void 0;\n if (!args.isTouch && args.button === 0) {\n handleSelect(args);\n } else if (!args.isTouch && args.button === 1) {\n lastMouseSelectLocation.current = args.location;\n }\n },\n [gridSelection, handleSelect]\n );\n const [renameGroup, setRenameGroup] = React35.useState();\n const handleGroupHeaderSelection = React35.useCallback(\n (args) => {\n if (args.kind !== groupHeaderKind || columnSelect !== \"multi\") {\n return;\n }\n const isMultiKey = browserIsOSX.value ? args.metaKey : args.ctrlKey;\n const [col] = args.location;\n const selectedColumns = gridSelection.columns;\n if (col < rowMarkerOffset)\n return;\n const needle = mangledCols[col];\n let start = col;\n let end = col;\n for (let i = col - 1; i >= rowMarkerOffset; i--) {\n if (!isGroupEqual(needle.group, mangledCols[i].group))\n break;\n start--;\n }\n for (let i = col + 1; i < mangledCols.length; i++) {\n if (!isGroupEqual(needle.group, mangledCols[i].group))\n break;\n end++;\n }\n focus();\n if (isMultiKey) {\n if (selectedColumns.hasAll([start, end + 1])) {\n let newVal = selectedColumns;\n for (let index = start; index <= end; index++) {\n newVal = newVal.remove(index);\n }\n setSelectedColumns(newVal, void 0, isMultiKey);\n } else {\n setSelectedColumns(void 0, [start, end + 1], isMultiKey);\n }\n } else {\n setSelectedColumns(CompactSelection.fromSingleSelection([start, end + 1]), void 0, isMultiKey);\n }\n },\n [columnSelect, focus, gridSelection.columns, mangledCols, rowMarkerOffset, setSelectedColumns]\n );\n const fillDown = React35.useCallback(\n (reverse) => {\n var _a2;\n if (gridSelection.current === void 0)\n return;\n const v = [];\n const r = gridSelection.current.range;\n for (let x = 0; x < r.width; x++) {\n const fillCol = x + r.x;\n const fillVal = getMangledCellContent([fillCol, reverse ? r.y + r.height - 1 : r.y]);\n if (isInnerOnlyCell(fillVal) || !isReadWriteCell(fillVal))\n continue;\n for (let y = 1; y < r.height; y++) {\n const fillRow = reverse ? r.y + r.height - (y + 1) : y + r.y;\n const target = [fillCol, fillRow];\n v.push({\n location: target,\n value: { ...fillVal }\n });\n }\n }\n mangledOnCellsEdited(v);\n (_a2 = gridRef.current) == null ? void 0 : _a2.damage(\n v.map((c) => ({\n cell: c.location\n }))\n );\n },\n [getMangledCellContent, gridSelection, mangledOnCellsEdited]\n );\n const isPrevented = React35.useRef(false);\n const normalSizeColumn = React35.useCallback(\n async (col, force = false) => {\n var _a2;\n if ((((_a2 = mouseDownData.current) == null ? void 0 : _a2.wasDoubleClick) === true || force) && getCellsForSelection !== void 0 && onColumnResize !== void 0) {\n const start = visibleRegionRef.current.y;\n const end = visibleRegionRef.current.height;\n let cells = getCellsForSelection(\n {\n x: col,\n y: start,\n width: 1,\n height: Math.min(end, rows - start)\n },\n abortControllerRef.current.signal\n );\n if (typeof cells !== \"object\") {\n cells = await cells();\n }\n const inputCol = columns[col - rowMarkerOffset];\n const offscreen = document.createElement(\"canvas\");\n const ctx = offscreen.getContext(\"2d\", { alpha: false });\n if (ctx !== null) {\n ctx.font = `${mergedTheme.baseFontStyle} ${mergedTheme.fontFamily}`;\n const newCol = measureColumn(\n ctx,\n mergedTheme,\n inputCol,\n 0,\n cells,\n minColumnWidth,\n maxColumnWidth,\n false,\n getCellRenderer\n );\n onColumnResize == null ? void 0 : onColumnResize(inputCol, newCol.width, col, newCol.width);\n }\n }\n },\n [\n columns,\n getCellsForSelection,\n maxColumnWidth,\n mergedTheme,\n minColumnWidth,\n onColumnResize,\n rowMarkerOffset,\n rows,\n getCellRenderer\n ]\n );\n const [scrollDir, setScrollDir] = React35.useState();\n const onMouseUp = React35.useCallback(\n (args, isOutside) => {\n var _a2, _b2, _c2;\n const mouse = mouseState;\n setMouseState(void 0);\n setScrollDir(void 0);\n isActivelyDraggingHeader.current = false;\n if (isOutside)\n return;\n if ((mouse == null ? void 0 : mouse.fillHandle) === true && gridSelection.current !== void 0) {\n fillDown(gridSelection.current.cell[1] !== gridSelection.current.range.y);\n return;\n }\n const [col, row] = args.location;\n const [lastMouseDownCol, lastMouseDownRow] = (_a2 = lastMouseSelectLocation.current) != null ? _a2 : [];\n const preventDefault = () => {\n isPrevented.current = true;\n };\n const handleMaybeClick = (a) => {\n var _a3, _b3, _c3;\n const isValidClick = a.isTouch || lastMouseDownCol === col && lastMouseDownRow === row;\n if (isValidClick) {\n onCellClicked == null ? void 0 : onCellClicked([col - rowMarkerOffset, row], {\n ...a,\n preventDefault\n });\n }\n if (a.button === 1)\n return !isPrevented.current;\n if (!isPrevented.current) {\n const c = getMangledCellContent(args.location);\n const r = getCellRenderer(c);\n if (r !== void 0 && r.onClick !== void 0 && isValidClick) {\n const newVal = r.onClick({\n ...a,\n cell: c,\n posX: a.localEventX,\n posY: a.localEventY,\n bounds: a.bounds,\n theme: themeForCell(c, args.location),\n preventDefault\n });\n if (newVal !== void 0 && !isInnerOnlyCell(newVal) && isEditableGridCell(newVal)) {\n mangledOnCellsEdited([{ location: a.location, value: newVal }]);\n (_a3 = gridRef.current) == null ? void 0 : _a3.damage([\n {\n cell: a.location\n }\n ]);\n }\n }\n if (!isPrevented.current && ((_c3 = (_b3 = mouse == null ? void 0 : mouse.previousSelection) == null ? void 0 : _b3.current) == null ? void 0 : _c3.cell) !== void 0 && gridSelection.current !== void 0) {\n const [selectedCol, selectedRow] = gridSelection.current.cell;\n const [prevCol, prevRow] = mouse.previousSelection.current.cell;\n if (col === selectedCol && col === prevCol && row === selectedRow && row === prevRow) {\n onCellActivated == null ? void 0 : onCellActivated([col - rowMarkerOffset, row]);\n reselect(a.bounds, false);\n return true;\n }\n }\n }\n return false;\n };\n const clickLocation = args.location[0] - rowMarkerOffset;\n if (args.isTouch) {\n const vr = visibleRegionRef.current;\n const touchVr = touchDownArgs.current;\n if (vr.x !== touchVr.x || vr.y !== touchVr.y) {\n return;\n }\n if (args.isLongTouch === true) {\n if (args.kind === \"cell\" && ((_b2 = gridSelection == null ? void 0 : gridSelection.current) == null ? void 0 : _b2.cell[0]) === col && ((_c2 = gridSelection == null ? void 0 : gridSelection.current) == null ? void 0 : _c2.cell[1]) === row) {\n onCellContextMenu == null ? void 0 : onCellContextMenu([clickLocation, args.location[1]], {\n ...args,\n preventDefault\n });\n return;\n } else if (args.kind === \"header\" && gridSelection.columns.hasIndex(col)) {\n onHeaderContextMenu == null ? void 0 : onHeaderContextMenu(clickLocation, { ...args, preventDefault });\n return;\n } else if (args.kind === groupHeaderKind) {\n if (clickLocation < 0) {\n return;\n }\n onGroupHeaderContextMenu == null ? void 0 : onGroupHeaderContextMenu(clickLocation, { ...args, preventDefault });\n return;\n }\n }\n if (args.kind === \"cell\") {\n if (!handleMaybeClick(args)) {\n handleSelect(args);\n }\n } else if (args.kind === groupHeaderKind) {\n onGroupHeaderClicked == null ? void 0 : onGroupHeaderClicked(clickLocation, { ...args, preventDefault });\n } else {\n if (args.kind === headerKind) {\n onHeaderClicked == null ? void 0 : onHeaderClicked(clickLocation, {\n ...args,\n preventDefault\n });\n }\n handleSelect(args);\n }\n return;\n }\n if (args.kind === \"header\") {\n if (clickLocation < 0) {\n return;\n }\n if (args.isEdge) {\n void normalSizeColumn(col);\n } else if (args.button === 0 && col === lastMouseDownCol && row === lastMouseDownRow) {\n onHeaderClicked == null ? void 0 : onHeaderClicked(clickLocation, { ...args, preventDefault });\n }\n }\n if (args.kind === groupHeaderKind) {\n if (clickLocation < 0) {\n return;\n }\n if (args.button === 0 && col === lastMouseDownCol && row === lastMouseDownRow) {\n onGroupHeaderClicked == null ? void 0 : onGroupHeaderClicked(clickLocation, { ...args, preventDefault });\n if (!isPrevented.current) {\n handleGroupHeaderSelection(args);\n }\n }\n }\n if (args.kind === \"cell\" && (args.button === 0 || args.button === 1)) {\n handleMaybeClick(args);\n }\n lastMouseSelectLocation.current = void 0;\n },\n [\n mouseState,\n rowMarkerOffset,\n gridSelection,\n onCellClicked,\n fillDown,\n getMangledCellContent,\n getCellRenderer,\n themeForCell,\n mangledOnCellsEdited,\n onCellActivated,\n reselect,\n onCellContextMenu,\n onHeaderContextMenu,\n onGroupHeaderContextMenu,\n handleSelect,\n onGroupHeaderClicked,\n normalSizeColumn,\n onHeaderClicked,\n handleGroupHeaderSelection\n ]\n );\n const onMouseMoveImpl = React35.useCallback(\n (args) => {\n const a = {\n ...args,\n location: [args.location[0] - rowMarkerOffset, args.location[1]]\n };\n onMouseMove == null ? void 0 : onMouseMove(a);\n setScrollDir((cv) => {\n var _a2, _b2;\n if (isActivelyDraggingHeader.current)\n return [args.scrollEdge[0], 0];\n if (args.scrollEdge[0] === (cv == null ? void 0 : cv[0]) && args.scrollEdge[1] === cv[1])\n return cv;\n return mouseState === void 0 || ((_b2 = (_a2 = mouseDownData.current) == null ? void 0 : _a2.location[0]) != null ? _b2 : 0) < rowMarkerOffset ? void 0 : args.scrollEdge;\n });\n },\n [mouseState, onMouseMove, rowMarkerOffset]\n );\n useAutoscroll(scrollDir, scrollRef);\n const onHeaderMenuClickInner = React35.useCallback(\n (col, screenPosition) => {\n onHeaderMenuClick == null ? void 0 : onHeaderMenuClick(col - rowMarkerOffset, screenPosition);\n },\n [onHeaderMenuClick, rowMarkerOffset]\n );\n const currentCell = (_c = gridSelection == null ? void 0 : gridSelection.current) == null ? void 0 : _c.cell;\n const onVisibleRegionChangedImpl = React35.useCallback(\n (region, clientWidth, clientHeight, rightElWidth, tx, ty) => {\n hasJustScrolled.current = false;\n let selected = currentCell;\n if (selected !== void 0) {\n selected = [selected[0] - rowMarkerOffset, selected[1]];\n }\n const newRegion = {\n x: region.x - rowMarkerOffset,\n y: region.y,\n width: region.width,\n height: showTrailingBlankRow && region.y + region.height >= rows ? region.height - 1 : region.height,\n tx,\n ty,\n extras: {\n selected,\n freezeRegion: freezeColumns === 0 ? void 0 : {\n x: 0,\n y: region.y,\n width: freezeColumns,\n height: region.height\n }\n }\n };\n visibleRegionRef.current = newRegion;\n setVisibleRegion(newRegion);\n setClientSize([clientWidth, clientHeight, rightElWidth]);\n onVisibleRegionChanged == null ? void 0 : onVisibleRegionChanged(newRegion, newRegion.tx, newRegion.ty, newRegion.extras);\n },\n [\n currentCell,\n rowMarkerOffset,\n showTrailingBlankRow,\n rows,\n freezeColumns,\n setVisibleRegion,\n onVisibleRegionChanged\n ]\n );\n const onColumnMovedImpl = whenDefined(\n onColumnMoved,\n React35.useCallback(\n (startIndex, endIndex) => {\n onColumnMoved == null ? void 0 : onColumnMoved(startIndex - rowMarkerOffset, endIndex - rowMarkerOffset);\n if (columnSelect !== \"none\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(endIndex), void 0, true);\n }\n },\n [columnSelect, onColumnMoved, rowMarkerOffset, setSelectedColumns]\n )\n );\n const isActivelyDragging = React35.useRef(false);\n const onDragStartImpl = React35.useCallback(\n (args) => {\n if (args.location[0] === 0 && rowMarkerOffset > 0) {\n args.preventDefault();\n return;\n }\n onDragStart == null ? void 0 : onDragStart({\n ...args,\n location: [args.location[0] - rowMarkerOffset, args.location[1]]\n });\n if (!args.defaultPrevented()) {\n isActivelyDragging.current = true;\n }\n setMouseState(void 0);\n },\n [onDragStart, rowMarkerOffset]\n );\n const onDragEnd = React35.useCallback(() => {\n isActivelyDragging.current = false;\n }, []);\n const onItemHoveredImpl = React35.useCallback(\n (args) => {\n var _a2, _b2;\n if (((_a2 = mouseDownData == null ? void 0 : mouseDownData.current) == null ? void 0 : _a2.button) !== void 0 && mouseDownData.current.button >= 1)\n return;\n if (mouseState !== void 0 && ((_b2 = mouseDownData.current) == null ? void 0 : _b2.location[0]) === 0 && args.location[0] === 0 && rowMarkerOffset === 1 && rowSelect === \"multi\" && mouseState.previousSelection && !mouseState.previousSelection.rows.hasIndex(mouseDownData.current.location[1]) && gridSelection.rows.hasIndex(mouseDownData.current.location[1])) {\n const start = Math.min(mouseDownData.current.location[1], args.location[1]);\n const end = Math.max(mouseDownData.current.location[1], args.location[1]) + 1;\n setSelectedRows(CompactSelection.fromSingleSelection([start, end]), void 0, false);\n }\n if (mouseState !== void 0 && gridSelection.current !== void 0 && !isActivelyDragging.current && (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n const [selectedCol, selectedRow] = gridSelection.current.cell;\n let [col, row] = args.location;\n if (row < 0) {\n row = visibleRegionRef.current.y;\n }\n const startedFromLastStickyRow = lastRowSticky && selectedRow === rows;\n if (startedFromLastStickyRow)\n return;\n const landedOnLastStickyRow = lastRowSticky && row === rows;\n if (landedOnLastStickyRow) {\n if (args.kind === outOfBoundsKind)\n row--;\n else\n return;\n }\n col = Math.max(col, rowMarkerOffset);\n const deltaX = col - selectedCol;\n const deltaY = row - selectedRow;\n const newRange = {\n x: deltaX >= 0 ? selectedCol : col,\n y: deltaY >= 0 ? selectedRow : row,\n width: Math.abs(deltaX) + 1,\n height: Math.abs(deltaY) + 1\n };\n setCurrent(\n {\n ...gridSelection.current,\n range: newRange\n },\n true,\n false,\n \"drag\"\n );\n }\n onItemHovered == null ? void 0 : onItemHovered({ ...args, location: [args.location[0] - rowMarkerOffset, args.location[1]] });\n },\n [\n mouseState,\n rowMarkerOffset,\n rowSelect,\n gridSelection,\n rangeSelect,\n onItemHovered,\n setSelectedRows,\n lastRowSticky,\n rows,\n setCurrent\n ]\n );\n const adjustSelection = React35.useCallback(\n (direction2) => {\n if (gridSelection.current === void 0)\n return;\n const [x, y] = direction2;\n const [col, row] = gridSelection.current.cell;\n const old = gridSelection.current.range;\n let left = old.x;\n let right = old.x + old.width;\n let top = old.y;\n let bottom = old.y + old.height;\n if (y !== 0) {\n switch (y) {\n case 2: {\n bottom = rows;\n top = row;\n scrollTo(0, bottom, \"vertical\");\n break;\n }\n case -2: {\n top = 0;\n bottom = row + 1;\n scrollTo(0, top, \"vertical\");\n break;\n }\n case 1: {\n if (top < row) {\n top++;\n scrollTo(0, top, \"vertical\");\n } else {\n bottom = Math.min(rows, bottom + 1);\n scrollTo(0, bottom, \"vertical\");\n }\n break;\n }\n case -1: {\n if (bottom > row + 1) {\n bottom--;\n scrollTo(0, bottom, \"vertical\");\n } else {\n top = Math.max(0, top - 1);\n scrollTo(0, top, \"vertical\");\n }\n break;\n }\n default: {\n assertNever(y);\n }\n }\n }\n if (x !== 0) {\n if (x === 2) {\n right = mangledCols.length;\n left = col;\n scrollTo(right - 1 - rowMarkerOffset, 0, \"horizontal\");\n } else if (x === -2) {\n left = rowMarkerOffset;\n right = col + 1;\n scrollTo(left - rowMarkerOffset, 0, \"horizontal\");\n } else {\n let disallowed = [];\n if (getCellsForSelection !== void 0) {\n const cells = getCellsForSelection(\n {\n x: left,\n y: top,\n width: right - left - rowMarkerOffset,\n height: bottom - top\n },\n abortControllerRef.current.signal\n );\n if (typeof cells === \"object\") {\n disallowed = getSpanStops(cells);\n }\n }\n if (x === 1) {\n let done = false;\n if (left < col) {\n if (disallowed.length > 0) {\n const target = range(left + 1, col + 1).find(\n (n) => !disallowed.includes(n - rowMarkerOffset)\n );\n if (target !== void 0) {\n left = target;\n done = true;\n }\n } else {\n left++;\n done = true;\n }\n if (done)\n scrollTo(left, 0, \"horizontal\");\n }\n if (!done) {\n right = Math.min(mangledCols.length, right + 1);\n scrollTo(right - 1 - rowMarkerOffset, 0, \"horizontal\");\n }\n } else if (x === -1) {\n let done = false;\n if (right > col + 1) {\n if (disallowed.length > 0) {\n const target = range(right - 1, col, -1).find(\n (n) => !disallowed.includes(n - rowMarkerOffset)\n );\n if (target !== void 0) {\n right = target;\n done = true;\n }\n } else {\n right--;\n done = true;\n }\n if (done)\n scrollTo(right - rowMarkerOffset, 0, \"horizontal\");\n }\n if (!done) {\n left = Math.max(rowMarkerOffset, left - 1);\n scrollTo(left - rowMarkerOffset, 0, \"horizontal\");\n }\n } else {\n assertNever(x);\n }\n }\n }\n setCurrent(\n {\n cell: gridSelection.current.cell,\n range: {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top\n }\n },\n true,\n false,\n \"keyboard-select\"\n );\n },\n [getCellsForSelection, gridSelection, mangledCols.length, rowMarkerOffset, rows, scrollTo, setCurrent]\n );\n const updateSelectedCell = React35.useCallback(\n (col, row, fromEditingTrailingRow, freeMove) => {\n const rowMax = mangledRows - (fromEditingTrailingRow ? 0 : 1);\n col = clamp5(col, rowMarkerOffset, columns.length - 1 + rowMarkerOffset);\n row = clamp5(row, 0, rowMax);\n if (col === (currentCell == null ? void 0 : currentCell[0]) && row === (currentCell == null ? void 0 : currentCell[1]))\n return false;\n if (freeMove && gridSelection.current !== void 0) {\n const newStack = [...gridSelection.current.rangeStack];\n if (gridSelection.current.range.width > 1 || gridSelection.current.range.height > 1) {\n newStack.push(gridSelection.current.range);\n }\n setGridSelection(\n {\n ...gridSelection,\n current: {\n cell: [col, row],\n range: { x: col, y: row, width: 1, height: 1 },\n rangeStack: newStack\n }\n },\n true\n );\n } else {\n setCurrent(\n {\n cell: [col, row],\n range: { x: col, y: row, width: 1, height: 1 }\n },\n true,\n false,\n \"keyboard-nav\"\n );\n }\n if (lastSent.current !== void 0 && lastSent.current[0] === col && lastSent.current[1] === row) {\n lastSent.current = void 0;\n }\n scrollTo(col - rowMarkerOffset, row);\n return true;\n },\n [\n mangledRows,\n rowMarkerOffset,\n columns.length,\n currentCell,\n gridSelection,\n scrollTo,\n setGridSelection,\n setCurrent\n ]\n );\n const onFinishEditing = React35.useCallback(\n (newValue, movement) => {\n if ((overlay == null ? void 0 : overlay.cell) !== void 0 && newValue !== void 0 && isEditableGridCell(newValue)) {\n mangledOnCellsEdited([{ location: overlay.cell, value: newValue }]);\n window.requestAnimationFrame(() => {\n var _a2;\n (_a2 = gridRef.current) == null ? void 0 : _a2.damage([\n {\n cell: overlay.cell\n }\n ]);\n });\n }\n focus(true);\n setOverlay(void 0);\n const [movX, movY] = movement;\n if (gridSelection.current !== void 0 && (movX !== 0 || movY !== 0)) {\n const isEditingTrailingRow = gridSelection.current.cell[1] === mangledRows - 1 && newValue !== void 0;\n updateSelectedCell(\n clamp5(gridSelection.current.cell[0] + movX, 0, mangledCols.length - 1),\n clamp5(gridSelection.current.cell[1] + movY, 0, mangledRows - 1),\n isEditingTrailingRow,\n false\n );\n }\n onFinishedEditing == null ? void 0 : onFinishedEditing(newValue, movement);\n },\n [\n overlay == null ? void 0 : overlay.cell,\n focus,\n gridSelection,\n onFinishedEditing,\n mangledOnCellsEdited,\n mangledRows,\n updateSelectedCell,\n mangledCols.length\n ]\n );\n const overlayID = React35.useMemo(() => {\n return `gdg-overlay-${idCounter++}`;\n }, []);\n const deleteRange = React35.useCallback(\n (r) => {\n var _a2, _b2, _c2, _d2;\n focus();\n const editList = [];\n for (let x = r.x; x < r.x + r.width; x++) {\n for (let y = r.y; y < r.y + r.height; y++) {\n const cellValue = getCellContent([x - rowMarkerOffset, y]);\n if (!cellValue.allowOverlay && cellValue.kind !== GridCellKind.Boolean)\n continue;\n let newVal = void 0;\n if (cellValue.kind === GridCellKind.Custom) {\n const toDelete = getCellRenderer(cellValue);\n const editor = (_a2 = toDelete == null ? void 0 : toDelete.provideEditor) == null ? void 0 : _a2.call(toDelete, cellValue);\n if ((toDelete == null ? void 0 : toDelete.onDelete) !== void 0) {\n newVal = toDelete.onDelete(cellValue);\n } else if (isObjectEditorCallbackResult(editor)) {\n newVal = (_b2 = editor == null ? void 0 : editor.deletedValue) == null ? void 0 : _b2.call(editor, cellValue);\n }\n } else if (isEditableGridCell(cellValue) && cellValue.allowOverlay || cellValue.kind === GridCellKind.Boolean) {\n const toDelete = getCellRenderer(cellValue);\n newVal = (_c2 = toDelete == null ? void 0 : toDelete.onDelete) == null ? void 0 : _c2.call(toDelete, cellValue);\n }\n if (newVal !== void 0 && !isInnerOnlyCell(newVal) && isEditableGridCell(newVal)) {\n editList.push({ location: [x, y], value: newVal });\n }\n }\n }\n mangledOnCellsEdited(editList);\n (_d2 = gridRef.current) == null ? void 0 : _d2.damage(editList.map((x) => ({ cell: x.location })));\n },\n [focus, getCellContent, getCellRenderer, mangledOnCellsEdited, rowMarkerOffset]\n );\n const onKeyDown = React35.useCallback(\n (event) => {\n const fn = async () => {\n var _a2, _b2, _c2, _d2, _e2;\n let cancelled = false;\n if (onKeyDownIn !== void 0) {\n onKeyDownIn({\n ...event,\n cancel: () => {\n cancelled = true;\n }\n });\n }\n if (cancelled)\n return;\n const cancel = () => {\n event.stopPropagation();\n event.preventDefault();\n };\n const overlayOpen = overlay !== void 0;\n const { altKey, shiftKey, metaKey, ctrlKey, key, bounds } = event;\n const isOSX = browserIsOSX.value;\n const isPrimaryKey = isOSX ? metaKey : ctrlKey;\n const isDeleteKey = key === \"Delete\" || isOSX && key === \"Backspace\";\n const vr = visibleRegionRef.current;\n const selectedColumns = gridSelection.columns;\n const selectedRows = gridSelection.rows;\n if (key === \"Escape\") {\n if (overlayOpen) {\n setOverlay(void 0);\n } else if (keybindings.clear) {\n setGridSelection(emptyGridSelection, false);\n onSelectionCleared == null ? void 0 : onSelectionCleared();\n }\n return;\n } else if (isHotkey(\"primary+a\", event) && keybindings.selectAll) {\n if (!overlayOpen) {\n setGridSelection(\n {\n columns: CompactSelection.empty(),\n rows: CompactSelection.empty(),\n current: {\n cell: (_b2 = (_a2 = gridSelection.current) == null ? void 0 : _a2.cell) != null ? _b2 : [rowMarkerOffset, 0],\n range: {\n x: rowMarkerOffset,\n y: 0,\n width: columnsIn.length,\n height: rows\n },\n rangeStack: []\n }\n },\n false\n );\n } else {\n const el = document.getElementById(overlayID);\n if (el !== null) {\n const s = window.getSelection();\n const r = document.createRange();\n r.selectNodeContents(el);\n s == null ? void 0 : s.removeAllRanges();\n s == null ? void 0 : s.addRange(r);\n }\n }\n cancel();\n return;\n } else if (isHotkey(\"primary+f\", event) && keybindings.search) {\n cancel();\n (_c2 = searchInputRef == null ? void 0 : searchInputRef.current) == null ? void 0 : _c2.focus({ preventScroll: true });\n setShowSearchInner(true);\n }\n if (isDeleteKey) {\n const callbackResult = (_d2 = onDelete == null ? void 0 : onDelete(gridSelection)) != null ? _d2 : true;\n cancel();\n if (callbackResult !== false) {\n const toDelete = callbackResult === true ? gridSelection : callbackResult;\n if (toDelete.current !== void 0) {\n deleteRange(toDelete.current.range);\n for (const r of toDelete.current.rangeStack) {\n deleteRange(r);\n }\n }\n for (const r of toDelete.rows) {\n deleteRange({\n x: rowMarkerOffset,\n y: r,\n width: mangledCols.length - rowMarkerOffset,\n height: 1\n });\n }\n for (const col2 of toDelete.columns) {\n deleteRange({\n x: col2,\n y: 0,\n width: 1,\n height: rows\n });\n }\n }\n return;\n }\n if (gridSelection.current === void 0)\n return;\n let [col, row] = gridSelection.current.cell;\n let freeMove = false;\n if (keybindings.selectColumn && isHotkey(\"ctrl+ \", event) && columnSelect !== \"none\") {\n if (selectedColumns.hasIndex(col)) {\n setSelectedColumns(selectedColumns.remove(col), void 0, true);\n } else {\n if (columnSelect === \"single\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(col), void 0, true);\n } else {\n setSelectedColumns(void 0, col, true);\n }\n }\n } else if (keybindings.selectRow && isHotkey(\"shift+ \", event) && rowSelect !== \"none\") {\n if (selectedRows.hasIndex(row)) {\n setSelectedRows(selectedRows.remove(row), void 0, true);\n } else {\n if (rowSelect === \"single\") {\n setSelectedRows(CompactSelection.fromSingleSelection(row), void 0, true);\n } else {\n setSelectedRows(void 0, row, true);\n }\n }\n } else if ((isHotkey(\"Enter\", event) || isHotkey(\" \", event) || isHotkey(\"shift+Enter\", event)) && bounds !== void 0) {\n if (overlayOpen) {\n setOverlay(void 0);\n if (isHotkey(\"Enter\", event)) {\n row++;\n } else if (isHotkey(\"shift+Enter\", event)) {\n row--;\n }\n } else if (row === rows && showTrailingBlankRow) {\n window.setTimeout(() => {\n const customTargetColumn = getCustomNewRowTargetColumn(col);\n void appendRow(customTargetColumn != null ? customTargetColumn : col);\n }, 0);\n } else {\n onCellActivated == null ? void 0 : onCellActivated([col - rowMarkerOffset, row]);\n reselect(bounds, true);\n cancel();\n }\n } else if (keybindings.downFill && isHotkey(\"primary+_68\", event) && gridSelection.current.range.height > 1) {\n fillDown(false);\n cancel();\n } else if (keybindings.rightFill && isHotkey(\"primary+_82\", event) && gridSelection.current.range.width > 1) {\n const editList = [];\n const r = gridSelection.current.range;\n for (let y = 0; y < r.height; y++) {\n const fillRow = y + r.y;\n const fillVal = getMangledCellContent([r.x, fillRow]);\n if (isInnerOnlyCell(fillVal) || !isReadWriteCell(fillVal))\n continue;\n for (let x = 1; x < r.width; x++) {\n const fillCol = x + r.x;\n const target = [fillCol, fillRow];\n editList.push({\n location: target,\n value: { ...fillVal }\n });\n }\n }\n mangledOnCellsEdited(editList);\n (_e2 = gridRef.current) == null ? void 0 : _e2.damage(\n editList.map((c) => ({\n cell: c.location\n }))\n );\n cancel();\n } else if (keybindings.pageDown && isHotkey(\"PageDown\", event)) {\n row += Math.max(1, visibleRegionRef.current.height - 4);\n cancel();\n } else if (keybindings.pageUp && isHotkey(\"PageUp\", event)) {\n row -= Math.max(1, visibleRegionRef.current.height - 4);\n cancel();\n } else if (keybindings.first && isHotkey(\"primary+Home\", event)) {\n setOverlay(void 0);\n row = 0;\n col = 0;\n } else if (keybindings.last && isHotkey(\"primary+End\", event)) {\n setOverlay(void 0);\n row = Number.MAX_SAFE_INTEGER;\n col = Number.MAX_SAFE_INTEGER;\n } else if (keybindings.first && isHotkey(\"primary+shift+Home\", event)) {\n setOverlay(void 0);\n adjustSelection([-2, -2]);\n } else if (keybindings.last && isHotkey(\"primary+shift+End\", event)) {\n setOverlay(void 0);\n adjustSelection([2, 2]);\n } else if (key === \"ArrowDown\") {\n if (ctrlKey && altKey) {\n return;\n }\n setOverlay(void 0);\n if (shiftKey && (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n adjustSelection([0, isPrimaryKey && !altKey ? 2 : 1]);\n } else {\n if (altKey && !isPrimaryKey) {\n freeMove = true;\n }\n if (isPrimaryKey && !altKey) {\n row = rows - 1;\n } else {\n row += 1;\n }\n }\n } else if (key === \"ArrowUp\" || key === \"Home\") {\n const asPrimary = key === \"Home\" || isPrimaryKey;\n setOverlay(void 0);\n if (shiftKey && (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n adjustSelection([0, asPrimary && !altKey ? -2 : -1]);\n } else {\n if (altKey && !asPrimary) {\n freeMove = true;\n }\n row += asPrimary && !altKey ? Number.MIN_SAFE_INTEGER : -1;\n }\n } else if (key === \"ArrowRight\" || key === \"End\") {\n const asPrimary = key === \"End\" || isPrimaryKey;\n setOverlay(void 0);\n if (shiftKey && (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n adjustSelection([asPrimary && !altKey ? 2 : 1, 0]);\n } else {\n if (altKey && !asPrimary) {\n freeMove = true;\n }\n col += asPrimary && !altKey ? Number.MAX_SAFE_INTEGER : 1;\n }\n } else if (key === \"ArrowLeft\") {\n setOverlay(void 0);\n if (shiftKey && (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n adjustSelection([isPrimaryKey && !altKey ? -2 : -1, 0]);\n } else {\n if (altKey && !isPrimaryKey) {\n freeMove = true;\n }\n col += isPrimaryKey && !altKey ? Number.MIN_SAFE_INTEGER : -1;\n }\n } else if (key === \"Tab\") {\n setOverlay(void 0);\n if (shiftKey) {\n col--;\n } else {\n col++;\n }\n } else if (!metaKey && !ctrlKey && gridSelection.current !== void 0 && key.length === 1 && /[ -~]/g.test(key) && bounds !== void 0 && isReadWriteCell(getCellContent([col - rowMarkerOffset, Math.max(0, Math.min(row, rows - 1))]))) {\n if ((!lastRowSticky || row !== rows) && (vr.y > row || row > vr.y + vr.height || vr.x > col || col > vr.x + vr.width)) {\n return;\n }\n reselect(bounds, true, key);\n cancel();\n }\n const moved = updateSelectedCell(col, row, false, freeMove);\n if (moved) {\n cancel();\n }\n };\n void fn();\n },\n [\n onKeyDownIn,\n deleteRange,\n overlay,\n gridSelection,\n keybindings.selectAll,\n keybindings.search,\n keybindings.selectColumn,\n keybindings.selectRow,\n keybindings.downFill,\n keybindings.rightFill,\n keybindings.pageDown,\n keybindings.pageUp,\n keybindings.first,\n keybindings.last,\n keybindings.clear,\n columnSelect,\n rowSelect,\n getCellContent,\n rowMarkerOffset,\n updateSelectedCell,\n setGridSelection,\n onSelectionCleared,\n columnsIn.length,\n rows,\n overlayID,\n mangledOnCellsEdited,\n onDelete,\n mangledCols.length,\n setSelectedColumns,\n setSelectedRows,\n showTrailingBlankRow,\n getCustomNewRowTargetColumn,\n appendRow,\n onCellActivated,\n reselect,\n fillDown,\n getMangledCellContent,\n adjustSelection,\n rangeSelect,\n lastRowSticky\n ]\n );\n const onContextMenu = React35.useCallback(\n (args, preventDefault) => {\n const adjustedCol = args.location[0] - rowMarkerOffset;\n if (args.kind === \"header\") {\n onHeaderContextMenu == null ? void 0 : onHeaderContextMenu(adjustedCol, { ...args, preventDefault });\n }\n if (args.kind === groupHeaderKind) {\n if (adjustedCol < 0) {\n return;\n }\n onGroupHeaderContextMenu == null ? void 0 : onGroupHeaderContextMenu(adjustedCol, { ...args, preventDefault });\n }\n if (args.kind === \"cell\") {\n const [col, row] = args.location;\n onCellContextMenu == null ? void 0 : onCellContextMenu([adjustedCol, row], {\n ...args,\n preventDefault\n });\n if (!gridSelectionHasItem(gridSelection, args.location)) {\n updateSelectedCell(col, row, false, false);\n }\n }\n },\n [\n gridSelection,\n onCellContextMenu,\n onGroupHeaderContextMenu,\n onHeaderContextMenu,\n rowMarkerOffset,\n updateSelectedCell\n ]\n );\n const onPasteInternal = React35.useCallback(\n async (e) => {\n var _a2, _b2, _c2, _d2, _e2, _f, _g;\n if (!keybindings.paste)\n return;\n function pasteToCell(inner, target2, rawValue, formatted) {\n var _a3, _b3, _c3, _d3;\n const stringifiedRawValue = typeof rawValue === \"object\" ? (_a3 = rawValue == null ? void 0 : rawValue.join(\"\\n\")) != null ? _a3 : \"\" : (_b3 = rawValue == null ? void 0 : rawValue.toString()) != null ? _b3 : \"\";\n if (!isInnerOnlyCell(inner) && isReadWriteCell(inner) && inner.readonly !== true) {\n const coerced = coercePasteValue == null ? void 0 : coercePasteValue(stringifiedRawValue, inner);\n if (coerced !== void 0 && isEditableGridCell(coerced)) {\n if (coerced.kind !== inner.kind) {\n console.warn(\"Coercion should not change cell kind.\");\n }\n return {\n location: target2,\n value: coerced\n };\n }\n const r = getCellRenderer(inner);\n if (r === void 0)\n return void 0;\n if (r.kind === GridCellKind.Custom) {\n assert(inner.kind === GridCellKind.Custom);\n const newVal = (_c3 = r.onPaste) == null ? void 0 : _c3.call(\n r,\n stringifiedRawValue,\n inner.data\n );\n if (newVal === void 0)\n return void 0;\n return {\n location: target2,\n value: {\n ...inner,\n data: newVal\n }\n };\n } else {\n const newVal = (_d3 = r.onPaste) == null ? void 0 : _d3.call(r, stringifiedRawValue, inner, {\n formatted,\n formattedString: typeof formatted === \"string\" ? formatted : formatted == null ? void 0 : formatted.join(\"\\n\"),\n rawValue\n });\n if (newVal === void 0)\n return void 0;\n assert(newVal.kind === inner.kind);\n return {\n location: target2,\n value: newVal\n };\n }\n }\n return void 0;\n }\n const selectedColumns = gridSelection.columns;\n const selectedRows = gridSelection.rows;\n const focused = ((_a2 = scrollRef.current) == null ? void 0 : _a2.contains(document.activeElement)) === true || ((_b2 = canvasRef.current) == null ? void 0 : _b2.contains(document.activeElement)) === true;\n let target = (_c2 = gridSelection.current) == null ? void 0 : _c2.cell;\n if (target === void 0 && selectedColumns.length === 1) {\n target = [(_d2 = selectedColumns.first()) != null ? _d2 : 0, 0];\n }\n if (target === void 0 && selectedRows.length === 1) {\n target = [rowMarkerOffset, (_e2 = selectedRows.first()) != null ? _e2 : 0];\n }\n if (focused && target !== void 0) {\n let data;\n let text;\n const textPlain = \"text/plain\";\n const textHtml = \"text/html\";\n if (navigator.clipboard.read !== void 0) {\n const clipboardContent = await navigator.clipboard.read();\n for (const item of clipboardContent) {\n if (item.types.includes(textHtml)) {\n const htmlBlob = await item.getType(textHtml);\n const html = await htmlBlob.text();\n const decoded = decodeHTML(html);\n if (decoded !== void 0) {\n data = decoded;\n break;\n }\n }\n if (item.types.includes(textPlain)) {\n text = await (await item.getType(textPlain)).text();\n }\n }\n } else if (navigator.clipboard.readText !== void 0) {\n text = await navigator.clipboard.readText();\n } else if (e !== void 0 && (e == null ? void 0 : e.clipboardData) !== null) {\n if (e.clipboardData.types.includes(textHtml)) {\n const html = e.clipboardData.getData(textHtml);\n data = decodeHTML(html);\n }\n if (data === void 0 && e.clipboardData.types.includes(textPlain)) {\n text = e.clipboardData.getData(textPlain);\n }\n } else {\n return;\n }\n const [gridCol, gridRow] = target;\n const editList = [];\n do {\n if (onPaste === void 0) {\n const cellData = getMangledCellContent(target);\n const rawValue = (_f = text != null ? text : data == null ? void 0 : data.map((r) => r.map((cb) => cb.rawValue).join(\"\t\")).join(\"\t\")) != null ? _f : \"\";\n const newVal = pasteToCell(cellData, target, rawValue, void 0);\n if (newVal !== void 0) {\n editList.push(newVal);\n }\n break;\n }\n if (data === void 0) {\n if (text === void 0)\n return;\n data = unquote(text);\n }\n if (onPaste === false || typeof onPaste === \"function\" && (onPaste == null ? void 0 : onPaste(\n [target[0] - rowMarkerOffset, target[1]],\n data.map((r) => r.map((cb) => {\n var _a3, _b3;\n return (_b3 = (_a3 = cb.rawValue) == null ? void 0 : _a3.toString()) != null ? _b3 : \"\";\n }))\n )) !== true) {\n return;\n }\n for (const [row, dataRow] of data.entries()) {\n if (row + gridRow >= rows)\n break;\n for (const [col, dataItem] of dataRow.entries()) {\n const index = [col + gridCol, row + gridRow];\n const [writeCol, writeRow] = index;\n if (writeCol >= mangledCols.length)\n continue;\n if (writeRow >= mangledRows)\n continue;\n const cellData = getMangledCellContent(index);\n const newVal = pasteToCell(cellData, index, dataItem.rawValue, dataItem.formatted);\n if (newVal !== void 0) {\n editList.push(newVal);\n }\n }\n }\n } while (false);\n mangledOnCellsEdited(editList);\n (_g = gridRef.current) == null ? void 0 : _g.damage(\n editList.map((c) => ({\n cell: c.location\n }))\n );\n }\n },\n [\n coercePasteValue,\n getCellRenderer,\n getMangledCellContent,\n gridSelection,\n keybindings.paste,\n mangledCols.length,\n mangledOnCellsEdited,\n mangledRows,\n onPaste,\n rowMarkerOffset,\n rows\n ]\n );\n useEventListener(\"paste\", onPasteInternal, window, false, true);\n const onCopy = React35.useCallback(\n async (e, ignoreFocus) => {\n var _a2, _b2;\n if (!keybindings.copy)\n return;\n const focused = ignoreFocus === true || ((_a2 = scrollRef.current) == null ? void 0 : _a2.contains(document.activeElement)) === true || ((_b2 = canvasRef.current) == null ? void 0 : _b2.contains(document.activeElement)) === true;\n const selectedColumns = gridSelection.columns;\n const selectedRows = gridSelection.rows;\n const copyToClipboardWithHeaders = (cells, columnIndexes) => {\n if (!copyHeaders) {\n copyToClipboard(cells, columnIndexes, e);\n } else {\n const headers = columnIndexes.map((index) => ({\n kind: GridCellKind.Text,\n data: columnsIn[index].title,\n displayData: columnsIn[index].title,\n allowOverlay: false\n }));\n copyToClipboard([headers, ...cells], columnIndexes, e);\n }\n };\n if (focused && getCellsForSelection !== void 0) {\n if (gridSelection.current !== void 0) {\n let thunk = getCellsForSelection(gridSelection.current.range, abortControllerRef.current.signal);\n if (typeof thunk !== \"object\") {\n thunk = await thunk();\n }\n copyToClipboardWithHeaders(\n thunk,\n range(\n gridSelection.current.range.x - rowMarkerOffset,\n gridSelection.current.range.x + gridSelection.current.range.width - rowMarkerOffset\n )\n );\n } else if (selectedRows !== void 0 && selectedRows.length > 0) {\n const toCopy = [...selectedRows];\n const cells = toCopy.map((rowIndex) => {\n const thunk = getCellsForSelection(\n {\n x: rowMarkerOffset,\n y: rowIndex,\n width: columnsIn.length,\n height: 1\n },\n abortControllerRef.current.signal\n );\n if (typeof thunk === \"object\") {\n return thunk[0];\n }\n return thunk().then((v) => v[0]);\n });\n if (cells.some((x) => x instanceof Promise)) {\n const settled = await Promise.all(cells);\n copyToClipboardWithHeaders(settled, range(columnsIn.length));\n } else {\n copyToClipboardWithHeaders(cells, range(columnsIn.length));\n }\n } else if (selectedColumns.length > 0) {\n const results = [];\n const cols = [];\n for (const col of selectedColumns) {\n let thunk = getCellsForSelection(\n {\n x: col,\n y: 0,\n width: 1,\n height: rows\n },\n abortControllerRef.current.signal\n );\n if (typeof thunk !== \"object\") {\n thunk = await thunk();\n }\n results.push(thunk);\n cols.push(col - rowMarkerOffset);\n }\n if (results.length === 1) {\n copyToClipboardWithHeaders(results[0], cols);\n } else {\n const toCopy = results.reduce((pv, cv) => pv.map((row, index) => [...row, ...cv[index]]));\n copyToClipboardWithHeaders(toCopy, cols);\n }\n }\n }\n },\n [columnsIn, getCellsForSelection, gridSelection, keybindings.copy, rowMarkerOffset, rows, copyHeaders]\n );\n useEventListener(\"copy\", onCopy, window, false, false);\n const onCut = React35.useCallback(\n async (e) => {\n var _a2, _b2;\n if (!keybindings.cut)\n return;\n const focused = ((_a2 = scrollRef.current) == null ? void 0 : _a2.contains(document.activeElement)) === true || ((_b2 = canvasRef.current) == null ? void 0 : _b2.contains(document.activeElement)) === true;\n if (!focused)\n return;\n await onCopy(e);\n if (gridSelection.current !== void 0) {\n deleteRange(gridSelection.current.range);\n }\n },\n [deleteRange, gridSelection, keybindings.cut, onCopy]\n );\n useEventListener(\"cut\", onCut, window, false, false);\n const onSearchResultsChanged = React35.useCallback(\n (results, navIndex) => {\n if (onSearchResultsChangedIn !== void 0) {\n if (rowMarkerOffset !== 0) {\n results = results.map((item) => [item[0] - rowMarkerOffset, item[1]]);\n }\n onSearchResultsChangedIn(results, navIndex);\n return;\n }\n if (results.length === 0 || navIndex === -1)\n return;\n const [col, row] = results[navIndex];\n if (lastSent.current !== void 0 && lastSent.current[0] === col && lastSent.current[1] === row) {\n return;\n }\n lastSent.current = [col, row];\n updateSelectedCell(col, row, false, false);\n },\n [onSearchResultsChangedIn, rowMarkerOffset, updateSelectedCell]\n );\n const [outCol, outRow] = (_e = (_d = gridSelectionOuter == null ? void 0 : gridSelectionOuter.current) == null ? void 0 : _d.cell) != null ? _e : [];\n const scrollToRef = React35.useRef(scrollTo);\n scrollToRef.current = scrollTo;\n React35.useLayoutEffect(() => {\n var _a2, _b2, _c2, _d2;\n if (!hasJustScrolled.current && outCol !== void 0 && outRow !== void 0 && (outCol !== ((_b2 = (_a2 = expectedExternalGridSelection.current) == null ? void 0 : _a2.current) == null ? void 0 : _b2.cell[0]) || outRow !== ((_d2 = (_c2 = expectedExternalGridSelection.current) == null ? void 0 : _c2.current) == null ? void 0 : _d2.cell[1]))) {\n scrollToRef.current(outCol, outRow);\n }\n hasJustScrolled.current = false;\n }, [outCol, outRow]);\n const selectionOutOfBounds = gridSelection.current !== void 0 && (gridSelection.current.cell[0] >= mangledCols.length || gridSelection.current.cell[1] >= mangledRows);\n React35.useLayoutEffect(() => {\n if (selectionOutOfBounds) {\n setGridSelection(emptyGridSelection, false);\n }\n }, [selectionOutOfBounds, setGridSelection]);\n const disabledRows = React35.useMemo(() => {\n if (showTrailingBlankRow === true && (trailingRowOptions == null ? void 0 : trailingRowOptions.tint) === true) {\n return CompactSelection.fromSingleSelection(mangledRows - 1);\n }\n return CompactSelection.empty();\n }, [mangledRows, showTrailingBlankRow, trailingRowOptions == null ? void 0 : trailingRowOptions.tint]);\n const mangledVerticalBorder = React35.useCallback(\n (col) => {\n var _a2;\n return typeof verticalBorder === \"boolean\" ? verticalBorder : (_a2 = verticalBorder == null ? void 0 : verticalBorder(col - rowMarkerOffset)) != null ? _a2 : true;\n },\n [rowMarkerOffset, verticalBorder]\n );\n const renameGroupNode = React35.useMemo(() => {\n if (renameGroup === void 0 || canvasRef.current === null)\n return null;\n const { bounds, group } = renameGroup;\n const canvasBounds = canvasRef.current.getBoundingClientRect();\n return /* @__PURE__ */ React35.createElement(\n GroupRename,\n {\n bounds,\n group,\n canvasBounds,\n onClose: () => setRenameGroup(void 0),\n onFinish: (newVal) => {\n setRenameGroup(void 0);\n onGroupHeaderRenamed == null ? void 0 : onGroupHeaderRenamed(group, newVal);\n }\n }\n );\n }, [onGroupHeaderRenamed, renameGroup]);\n const mangledFreezeColumns = Math.min(mangledCols.length, freezeColumns + (hasRowMarkers ? 1 : 0));\n React35.useImperativeHandle(\n forwardedRef,\n () => ({\n appendRow: (col, openOverlay) => appendRow(col + rowMarkerOffset, openOverlay),\n updateCells: (damageList) => {\n var _a2;\n if (rowMarkerOffset !== 0) {\n damageList = damageList.map((x) => ({ cell: [x.cell[0] + rowMarkerOffset, x.cell[1]] }));\n }\n return (_a2 = gridRef.current) == null ? void 0 : _a2.damage(damageList);\n },\n getBounds: (col, row) => {\n var _a2;\n if ((canvasRef == null ? void 0 : canvasRef.current) === null || (scrollRef == null ? void 0 : scrollRef.current) === null) {\n return void 0;\n }\n if (col === void 0 && row === void 0) {\n const rect = canvasRef.current.getBoundingClientRect();\n const scale = rect.width / scrollRef.current.clientWidth;\n return {\n x: rect.x - scrollRef.current.scrollLeft * scale,\n y: rect.y - scrollRef.current.scrollTop * scale,\n width: scrollRef.current.scrollWidth * scale,\n height: scrollRef.current.scrollHeight * scale\n };\n }\n return (_a2 = gridRef.current) == null ? void 0 : _a2.getBounds(col != null ? col : 0 + rowMarkerOffset, row);\n },\n focus: () => {\n var _a2;\n return (_a2 = gridRef.current) == null ? void 0 : _a2.focus();\n },\n emit: async (e) => {\n switch (e) {\n case \"delete\":\n onKeyDown({\n bounds: void 0,\n cancel: () => void 0,\n stopPropagation: () => void 0,\n preventDefault: () => void 0,\n ctrlKey: false,\n key: \"Delete\",\n keyCode: 46,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: void 0,\n location: void 0\n });\n break;\n case \"fill-right\":\n onKeyDown({\n bounds: void 0,\n cancel: () => void 0,\n stopPropagation: () => void 0,\n preventDefault: () => void 0,\n ctrlKey: true,\n key: \"r\",\n keyCode: 82,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: void 0,\n location: void 0\n });\n break;\n case \"fill-down\":\n onKeyDown({\n bounds: void 0,\n cancel: () => void 0,\n stopPropagation: () => void 0,\n preventDefault: () => void 0,\n ctrlKey: true,\n key: \"d\",\n keyCode: 68,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: void 0,\n location: void 0\n });\n break;\n case \"copy\":\n await onCopy(void 0, true);\n break;\n case \"paste\":\n await onPasteInternal();\n break;\n }\n },\n scrollTo,\n remeasureColumns: (cols) => {\n for (const col of cols) {\n void normalSizeColumn(col + rowMarkerOffset, true);\n }\n }\n }),\n [appendRow, normalSizeColumn, onCopy, onKeyDown, onPasteInternal, rowMarkerOffset, scrollTo]\n );\n const [selCol, selRow] = currentCell != null ? currentCell : [];\n const onCellFocused = React35.useCallback(\n (cell) => {\n const [col, row] = cell;\n if (row === -1) {\n if (columnSelect !== \"none\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(col), void 0, false);\n focus();\n }\n return;\n }\n if (selCol === col && selRow === row)\n return;\n setCurrent(\n {\n cell,\n range: { x: col, y: row, width: 1, height: 1 }\n },\n true,\n false,\n \"keyboard-nav\"\n );\n scrollTo(col, row);\n },\n [columnSelect, focus, scrollTo, selCol, selRow, setCurrent, setSelectedColumns]\n );\n const [isFocused, setIsFocused] = React35.useState(false);\n const setIsFocusedDebounced = React35.useRef(\n debounce2((val) => {\n setIsFocused(val);\n }, 5)\n );\n const onCanvasFocused = React35.useCallback(() => {\n setIsFocusedDebounced.current(true);\n if (gridSelection.current === void 0 && gridSelection.columns.length === 0 && gridSelection.rows.length === 0 && mouseState === void 0) {\n setCurrent(\n {\n cell: [rowMarkerOffset, cellYOffset],\n range: {\n x: rowMarkerOffset,\n y: cellYOffset,\n width: 1,\n height: 1\n }\n },\n true,\n false,\n \"keyboard-select\"\n );\n }\n }, [cellYOffset, gridSelection, mouseState, rowMarkerOffset, setCurrent]);\n const onFocusOut = React35.useCallback(() => {\n setIsFocusedDebounced.current(false);\n }, []);\n const [idealWidth, idealHeight] = React35.useMemo(() => {\n var _a2;\n let h;\n const scrollbarWidth = (_a2 = experimental == null ? void 0 : experimental.scrollbarWidthOverride) != null ? _a2 : getScrollBarWidth();\n const rowsCountWithTrailingRow = rows + (showTrailingBlankRow ? 1 : 0);\n if (typeof rowHeight === \"number\") {\n h = totalHeaderHeight + rowsCountWithTrailingRow * rowHeight;\n } else {\n let avg = 0;\n const toAverage = Math.min(rowsCountWithTrailingRow, 10);\n for (let i = 0; i < toAverage; i++) {\n avg += rowHeight(i);\n }\n avg = Math.floor(avg / toAverage);\n h = totalHeaderHeight + rowsCountWithTrailingRow * avg;\n }\n h += scrollbarWidth;\n const w = mangledCols.reduce((acc, x) => x.width + acc, 0) + scrollbarWidth;\n return [`${Math.min(1e5, w)}px`, `${Math.min(1e5, h)}px`];\n }, [mangledCols, experimental == null ? void 0 : experimental.scrollbarWidthOverride, rowHeight, rows, showTrailingBlankRow, totalHeaderHeight]);\n return /* @__PURE__ */ React35.createElement(ThemeContext.Provider, { value: mergedTheme }, /* @__PURE__ */ React35.createElement(\n DataEditorContainer,\n {\n style: makeCSSStyle(mergedTheme),\n className,\n inWidth: width != null ? width : idealWidth,\n inHeight: height != null ? height : idealHeight\n },\n /* @__PURE__ */ React35.createElement(\n data_grid_search_default,\n {\n fillHandle,\n drawFocusRing: drawFocusRing2,\n experimental,\n fixedShadowX,\n fixedShadowY,\n getRowThemeOverride,\n headerIcons,\n imageWindowLoader,\n initialSize,\n isDraggable,\n onDragLeave,\n onRowMoved,\n overscrollX,\n overscrollY,\n preventDiagonalScrolling,\n rightElement,\n rightElementProps,\n showMinimap,\n smoothScrollX,\n smoothScrollY,\n className,\n enableGroups,\n onCanvasFocused,\n onCanvasBlur: onFocusOut,\n canvasRef,\n onContextMenu,\n theme: mergedTheme,\n cellXOffset,\n cellYOffset,\n accessibilityHeight: visibleRegion.height,\n onDragEnd,\n columns: mangledCols,\n drawCustomCell: drawCell2,\n drawHeader: drawHeader2,\n disabledRows,\n freezeColumns: mangledFreezeColumns,\n lockColumns: rowMarkerOffset,\n firstColAccessible: rowMarkerOffset === 0,\n getCellContent: getMangledCellContent,\n minColumnWidth,\n maxColumnWidth,\n searchInputRef,\n showSearch,\n onSearchClose,\n highlightRegions,\n getCellsForSelection,\n getGroupDetails: mangledGetGroupDetails,\n headerHeight,\n isFocused,\n groupHeaderHeight: enableGroups ? groupHeaderHeight : 0,\n trailingRowType: !showTrailingBlankRow ? \"none\" : (trailingRowOptions == null ? void 0 : trailingRowOptions.sticky) === true ? \"sticky\" : \"appended\",\n onColumnResize,\n onColumnResizeEnd,\n onColumnResizeStart,\n onCellFocused,\n onColumnMoved: onColumnMovedImpl,\n onDragStart: onDragStartImpl,\n onHeaderMenuClick: onHeaderMenuClickInner,\n onItemHovered: onItemHoveredImpl,\n isFilling: (mouseState == null ? void 0 : mouseState.fillHandle) === true,\n onMouseMove: onMouseMoveImpl,\n onKeyDown,\n onKeyUp: onKeyUpIn,\n onMouseDown,\n onMouseUp,\n onDragOverCell,\n onDrop,\n onSearchResultsChanged,\n onVisibleRegionChanged: onVisibleRegionChangedImpl,\n clientSize: [clientSize[0], clientSize[1]],\n rowHeight,\n searchResults,\n searchValue,\n onSearchValueChange,\n rows: mangledRows,\n scrollRef,\n selection: gridSelection,\n translateX: visibleRegion.tx,\n translateY: visibleRegion.ty,\n verticalBorder: mangledVerticalBorder,\n gridRef,\n getCellRenderer,\n scrollToEnd\n }\n ),\n renameGroupNode,\n overlay !== void 0 && /* @__PURE__ */ React35.createElement(\n data_grid_overlay_editor_default,\n {\n ...overlay,\n validateCell,\n id: overlayID,\n getCellRenderer,\n className: (experimental == null ? void 0 : experimental.isSubGrid) === true ? \"click-outside-ignore\" : void 0,\n provideEditor,\n imageEditorOverride,\n onFinishEditing,\n markdownDivCreateNode,\n isOutsideClick\n }\n )\n ));\n};\nvar DataEditor = React35.forwardRef(DataEditorImpl);\n\n// src/data-editor/use-custom-cells.ts\nimport * as React36 from \"react\";\nfunction inflate(input) {\n return {\n ...input,\n kind: GridCellKind.Custom\n };\n}\nfunction useCustomCells(cells) {\n return { customRenderers: React36.useMemo(() => cells.map(inflate), [cells]) };\n}\nexport {\n BooleanEmpty,\n BooleanIndeterminate,\n CompactSelection,\n DataEditor,\n GridCellKind,\n GridColumnIcon,\n ImageOverlayEditor,\n InnerGridCellKind,\n MarkdownDiv,\n GrowingEntry as TextCellEntry,\n blend,\n booleanCellIsEditable,\n DataEditor as default,\n drawTextCellExternal as drawTextCell,\n getDataEditorTheme as getDefaultTheme,\n getMiddleCenterBias,\n gridSelectionHasItem,\n groupHeaderKind,\n headerCellCheckboxPrefix,\n headerCellCheckedMarker,\n headerCellIndeterminateMarker,\n headerCellUnheckedMarker,\n headerKind,\n interpolateColors,\n isEditableGridCell,\n isInnerOnlyCell,\n isObjectEditorCallbackResult,\n isReadWriteCell,\n isSizedGridColumn,\n isTextEditableGridCell,\n measureTextCached,\n outOfBoundsKind,\n parseToRgba,\n resolveCellsThunk,\n useColumnSizer,\n useCustomCells,\n useTheme,\n withAlpha\n};\n//# sourceMappingURL=index.js.map\n"],"names":["panic","message","Error","assert","fact","assertNever","_never","msg","has","Object","prototype","hasOwnProperty","deepEqual","foo","bar","ctor","len","constructor","Date","getTime","RegExp","toString","Array","length","call","keys","ClickOutsideContainer","React","PureComponent","super","arguments","this","wrapperRef","createRef","clickOutside","event","props","isOutsideClick","current","contains","target","node","classList","parentElement","onClickOutside","componentDidMount","document","addEventListener","componentWillUnmount","removeEventListener","render","rest","createElement","ref","children","makeCSSStyle","theme","_a","_b","accentColor","accentFg","accentLight","textDark","textMedium","textLight","textBubble","bgIconHeader","fgIconHeader","textHeader","textGroupHeader","textHeaderSelected","bgCell","bgCellMedium","bgHeader","bgHeaderHasFocus","bgHeaderHovered","bgBubble","bgBubbleSelected","bgSearchResult","borderColor","horizontalBorderColor","drilldownBorder","linkColor","cellHorizontalPadding","cellVerticalPadding","headerFontStyle","baseFontStyle","markerFontStyle","fontFamily","editorFontSize","dataEditorBaseTheme","headerIconSize","lineHeight","getDataEditorTheme","ThemeContext","React2","createContext","gridSelectionHasItem","sel","item","col","row","columns","hasIndex","rows","cell","toCheck","range","rangeStack","r","x","width","y","height","BooleanEmpty","BooleanIndeterminate","headerKind","groupHeaderKind","outOfBoundsKind","GridCellKind","GridCellKind2","GridColumnIcon","GridColumnIcon2","headerCellCheckboxPrefix","headerCellCheckedMarker","headerCellUnheckedMarker","headerCellIndeterminateMarker","isSizedGridColumn","c","async","resolveCellsThunk","thunk","isEditableGridCell","kind","isInnerOnlyCell","isReadWriteCell","readonly","isObjectEditorCallbackResult","obj","has2","booleanCellIsEditable","emptyCompactSelection","InnerGridCellKind","InnerGridCellKind2","_CompactSelection","items","offset","amount","newItems","map","add","selection","slice","input","ranges","stack","sort","a","b","push","range2","top","mergeRanges","remove","selMin","selMax","i","entries","start","end","toAdd","splice","first","last","index","hasAll","some","predicate","equals","other","left","right","toArray","result","Symbol","iterator","empty","fromSingleSelection","CompactSelection","DataGridOverlayEditorStyle","styled_default","name","class","propsAsIs","vars","p","targetY","targetX","targetWidth","targetHeight","Math","max","data_grid_overlay_editor_default","content","onFinishEditing","onFinishEditingIn","forceEditMode","initialValue","imageEditorOverride","markdownDivCreateNode","highlight","className","id","validateCell","getCellRenderer","provideEditor","tempValue","setTempValueRaw","React4","useState","lastValueRef","useRef","isValid","setIsValid","useCallback","newCell","movement","setTempValue","newVal","validResult","finished","customMotion","onEditorFinished","newValue","onKeyDown","save","key","stopPropagation","preventDefault","shiftKey","window","setTimeout","targetValue","editorProvider","useLabel","useMemo","external","style","stayOnScreenStyle","setRef","refState","setRefState","React3","useRefState","xOffset","setXOffset","isIntersecting","setIsIntersecting","useLayoutEffect","observer","IntersectionObserver","ents","threshold","observe","disconnect","useEffect","rafHandle","fn","refRight","getBoundingClientRect","cv","min","innerWidth","requestAnimationFrame","cancelAnimationFrame","transform","useStayOnScreen","editor","styleOverride","pad","disablePadding","disableStyling","isObjectEditor","CustomEditor","isHighlighted","onChange","value","onFinishedEditing","validatedSelection","selectionRange","portalElement","getElementById","classWrap","createPortal","Provider","as","rowShift","imgPool","packColRowToNumber","unpackCol","packed","unpackRow","unpackNumberToColRow","image_window_loader_default","imageLoaded","loadedLocations","visibleWindow","freezeCols","isInWindow","w","cache","sendLoaded","throttle","clearOutOfWindow","keep","j","cells","filter","cancel","setCallback","setWindow","newWindow","loadImage","url","loaded","img","pop","Image","canceled","unshift","src","loadPromise","Promise","decode","toWrite","e","loadOrGetImage","includes","useEventListener","eventName","handler","element","passive","capture","savedHandler","React5","el","eventListener","whenDefined","PI","degreesToRadians","degrees","getSquareBB","posX","posY","squareSideLength","x1","y1","x2","y2","getSquareXPosFromAlign","alignment","containerX","containerWidth","horizontalPadding","squareWidth","floor","getSquareWidth","maxSize","containerHeight","verticalPadding","pointIsWithinBB","bb","EditPencil","fg","fgColor","viewBox","fill","xmlns","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","vectorEffect","Checkmark","rtlRange","ltrRange","rtl","ltr","direction","test","scrollbarWidthCache","getScrollBarWidth","inner","outer","position","visibility","overflow","append","body","w1","offsetWidth","w2","clientWidth","makeAccessibilityStringForArray","arr","count","str","join","isGroupEqual","cellIsInRect","location","rect","startX","endX","startY","endY","cellCol","cellRow","span","spanStart","spanEnd","remapForDnDState","dndState","mappedCols","writable","temp","dest","sticky","getStickyWidth","remapped","getEffectiveColumns","cellXOffset","tx","endIndex","curX","metricsSize","metricsCache","isSSR","measureTextCached","s","ctx","font","baseline","makeCacheKey","metrics","measureText","getMiddleCenterBias","biasCache","val","alphabeticMetrics","loadMetric","bias","actualBoundingBoxDescent","actualBoundingBoxAscent","getMiddleCenterBiasInner","textBaseline","restore","fonts","ready","clearCache","clearCacheOnLoad","prepTextCell","args","lastPrep","overrideColor","newFill","fillStyle","drawSingleTextLine","data","h","contentAlign","fillText","getEmHeight","fontStyle","textMetrics","drawTextCell","allowWrapping","hyperWrapping","split","isRtl","changed","textAlign","splitText","emHeight","actualHeight","mustClip","clip","optimalY","drawY","line","drawCheckbox","checked","highlighted","hoverX","hoverY","centerY","checkBoxWidth","checkBoxHalfWidth","hovered","beginPath","roundedRect","moveTo","lineTo","strokeStyle","lineJoin","lineCap","lineWidth","deprepMarkerRowCell","radius","tl","tr","br","bl","arcTo","drilldownCache","computeBounds","groupHeaderHeight","totalHeaderHeight","cellYOffset","translateX","translateY","freezeColumns","lastRowSticky","mappedColumns","rowHeight","headerHeight","dir","freezeWidth","group","stickyHeight","delta","iconHead","headerUri","bg","bgColor","sprites","headerRowID","headerNumber","headerCode","headerString","headerBoolean","headerAudioUri","headerVideoUri","headerEmoji","headerImage","headerPhone","headerMarkdown","headerDate","headerTime","headerEmail","headerReference","headerIfThenElse","headerSingleValue","headerLookup","headerTextTemplate","headerMath","headerRollup","headerJoinStrings","headerSplitString","headerGeoDistance","headerArray","rowOwnerOverlay","protectedColumnOverlay","renameIcon","SpriteManager","headerIcons","onSettled","spriteMap","Map","inFlight","drawSprite","sprite","variant","size","alpha","getColors","rSize","ceil","devicePixelRatio","spriteCanvas","get","spriteCb","spriteCtx","getContext","imgSource","encodeURIComponent","set","promise","then","drawImage","finally","globalAlpha","div","parseToRgba","color","normalizedColor","toLowerCase","trim","opacity","pointerEvents","createDiv","control","getComputedStyle","computedColor","replace","Number","parseFloat","isNaN","withAlpha","g","blend","background","ba","ao","loadingCell","Loading","allowOverlay","drawCell","drawCustomCell","imageLoader","spriteManager","hoverAmount","hoverInfo","frameTime","enqueue","forceAnim","needsAnim","lastUpdate","draw","progress","MAX_SAFE_INTEGER","fade","fillRect","drawWithLastUpdate","lastUpdated","renderer","deprep","partialPrepResult","drawPrep","drawGridLines","effectiveCols","drawRegions","spans","getRowHeight","getRowThemeOverride","verticalBorder","trailingRowType","verticalOnly","_c","hColor","vColor","minX","maxX","minY","maxY","MIN_SAFE_INTEGER","toDraw","stickyRowY","ty","abs","rowTheme","groups","groupBy","getActionBoundsForGroup","box","actions","pointInRect","getHeaderMenuBounds","menuButtonSize","drawHeader","selected","isHovered","hasSelectedCell","drawHeaderCallback","touchMode","isCheckboxHeader","title","startsWith","menuBounds","passCol","column","columnIndex","sourceIndex","isSelected","xPad","shouldDrawMenu","hasMenu","dirScalar","drawX","icon","headerSize","overlayIcon","fadeWidth","fadeStartPercent","fadeEndPercent","grad","createLinearGradient","trans","addColorStop","triangleX","triangleY","points","asVec","pp","vx","vy","vlen","sqrt","vnx","vny","nx","ny","ang","atan2","p1","p2","p3","v1","v2","sinA","sinA90","angle","asin","radDirection","drawDirection","halfAngle","cRadius","lenOut","cos","sin","arc","closePath","roundedPoly","intersectRect","h1","h2","clipDamage","effectiveColumns","damage","includeCells","stickyRowHeight","walkGroups","_group","walkColumns","colDrawY","clipX","startRow","diff","finalX","finalWidth","walkRowsInCol","rh","isSticky","isDamaged","getSpanBounds","cellX","cellY","cellW","cellH","allColumns","startCol","endCol","frozenRect","contentRect","firstNonSticky","find","renderFromCol","tempX","tempW","renderToCol","drawCells","getCellContent","getGroupDetails","disabledRows","isFocused","drawFocus","prelightCells","highlightRegions","hoverValues","outerTheme","performance","now","handledSpans","Set","colDrawStartY","_a2","colDrawX","colWidth","colHeight","found","dr","reclip","colSelected","groupTheme","overrideTheme","colTheme","themeOverride","colFont","prepResult","isTrailingRow","_a3","_d","rowSelected","rowDisabled","cellWidth","drawingSpan","skipContents","spanKey","areas","area","trailingTheme","trailingRowOptions","cellIndex","cellIsSelected","accentCount","cellIsInRange","spanIsHighlighted","Protected","pre","region","hoverValue","hv","cellFont","drawFocusRing","selectedCell","fillHandle","targetCol","targetRow","targetColSpan","stickRowHeight","drawCb","drawGrid","arg","lastArg","canvas","headerCanvas","enableGroups","dragAndDropState","isResizing","lastBlitData","scrolling","renderStrategy","bufferA","bufferB","doubleBuffer","dpr","canBlit","resized","curCol","lastCol","curRest","lastWidth","lastRest","computeCanBlit","overlayCanvas","overlayHeight","mainCtx","overlayCtx","targetBuffer","lastBuffer","targetCtx","blitSource","scale","mustDrawFocusOnHeader","drawHeaderTexture","_b2","hCol","hRow","_y","f","noHover","hoveredBoolean","hover","bgFillStyle","_hoverValues","groupName","fillColor","actionBoxes","fadeStartX","mouseX","mouseY","action","actionHovered","drawGroups","drawGridHeaders","headerBottomBorderColor","doHeaders","regions","blittedYOnly","imageSmoothingEnabled","deltaY","deltaX","stickyWidth","yOnly","blitWidth","blitHeight","sx","sy","sw","sh","dx","dy","dw","dh","setTransform","blitLastFrame","resizedIndex","_drawY","blitResizedCol","drawFreezeBorder","overdrawStickyBoundaries","focusRedraw","highlightRedraw","allHighlightRegions","drawRects","_e","topLeftBounds","bottomRightBounds","freezeSectionRightBounds","unfreezeSectionleftBounds","dashed","setDashed","dash","setLineDash","strokeRect","clipped","drawHighlightRings","getRowTheme","selectedRows","blankTheme","drawBlanks","lastRowDrawn","__drawX","_clipX","_rh","getLastRow","cb","doSticky","doingSticky","boxWidth","localX","easeOutCubic","AnimationManager","callback","currentHoveredItem","leavingItems","areSameItems","addToLeavingItems","removeFromLeavingItems","leavingItem","cleanUpLeavingElements","shouldStep","hasLeavingItems","currentHoveredIsAnimating","getAnimatingItems","step","timestamp","lastAnimationTime","clamp","animating","setHovered","Lazy","lazy","browserIsFirefox","navigator","userAgent","browserIsSafari","browserIsOSX","platform","data_grid_default","React8","memo","forwardRef","forwardedRef","_f","_g","_h","accessibilityHeight","cellXOffsetReal","onHeaderMenuClick","isFilling","onCanvasFocused","onCanvasBlur","onContextMenu","fixedShadowX","fixedShadowY","drawFocusRing2","onMouseDown","onMouseUp","onMouseMoveRaw","onMouseMove","onItemHovered","firstColAccessible","onKeyUp","canvasRef","onDragStart","onDragEnd","eventTargetRef","isDragging","isDraggable","allowResize","onCellFocused","onDragOverCell","onDrop","onDragLeave","imageWindowLoader","smoothScrollX","smoothScrollY","experimental","imageWindowLoaderInternal","damageRegion","setScrolling","hoveredItemInfo","setHoveredItemInfo","hoveredOnEdge","setHoveredOnEdge","overlayRef","lastWasTouch","setLastWasTouch","lastWasTouchRef","lastArgsRef","lastDrawRef","scrollingStopRef","disableFirefoxRescaling","enableFirefoxRescaling","clearTimeout","React6","useMappedColumns","getBoundsForItem","getMouseArgsForPosition","ev","button","MouseEvent","getColumnIndexForX","hasGroups","lastRowHeight","effectiveRows","curY","getRowIndexForY","ctrlKey","metaKey","isTouch","pointerType","scrollEdge","horizontal","vertical","isEdge","isMaybeScrollbar","bounds","previousCol","localEventX","localEventY","isFillHandle","hoveredItem","enqueueRef","_item","hoverInfoRef","documentElement","overlay","round","damageInternal","locations","queue","React7","seq","drawRef","loop","hasItem","useAnimationQueue","overFill","setOverFill","headerHovered","groupHeaderHovered","cursorOverride","clickableInnerCellHovered","editableBoolHovered","NewRow","Marker","markerKind","Boolean","cursor","contain","display","lastSetCursor","groupHeaderActionForEvent","groupDesc","boxes","isOverHeaderMenu","clientX","clientY","header","headerBounds","downTime","downPosition","mouseDown","onMouseDownImpl","eventTarget","touches","bottom","onMouseUpImpl","isOutside","changedTouches","isLongTouch","cancelable","onClick","onAnimationFrame","values","animManagerValue","animationManager","am","Custom","needsHover","hoveredRef","isIndirect","newInfo","needsHoverPosition","notRowMarkerCol","sb","onKeyDownImpl","altKey","keyCode","rawEvent","onKeyUpImpl","refImpl","instance","dragMime","dragData","dragImage","dragImageX","dragImageY","prevented","setData","mime","payload","setDragImage","image","defaultPrevented","dataTransfer","effectAllowed","offscreen","boundsForDragTarget","activeDropTarget","rawCol","activeCol","activeRow","selectionRef","focusRef","focusElement","activeElement","focus","preventScroll","useImperativeHandle","getBounds","lastFocusedSubdomNode","accessibilityTree","factory","deps","state","setState","mountedRef","debouncedSetState","debounce","useDebouncedMemo","_c2","_d2","colOffset","fCol","fRow","visibleCols","visibleRows","makeRange","role","tabIndex","onFocus","focused","cellContent","onFocusCapture","_b3","copyData","getAccessibilityString","getRowData","stickyX","opacityX","clamp2","absoluteOffsetY","opacityY","stickyShadow","styleX","transition","boxShadow","styleY","Fragment","overlayStyle","onBlur","offsetColumnSize","clamp3","growOffset","data_grid_dnd_default","resizeColStartX","setResizeColStartX","React9","resizeCol","setResizeCol","dragCol","setDragCol","dropCol","setDropCol","dragColActive","setDragColActive","dragStartX","setDragStartX","dragRow","setDragRow","dropRow","setDropRow","dragRowActive","setDragRowActive","dragStartY","setDragStartY","onColumnMoved","onColumnResize","onColumnResizeStart","onColumnResizeEnd","gridRef","maxColumnWidth","minColumnWidth","onRowMoved","lockColumns","canResize","selectedColumns","onItemHoveredImpl","canDragCol","onHeaderMenuClickMangled","screenPosition","lastResizeWidthRef","clearAll","newSize","ns","dragOffset","newWidth","getMangledCellContent","forceStrict","onDragStartImpl","ScrollRegionStyle","isSafari","InfiniteScroller","clientHeight","scrollHeight","scrollWidth","update","draggable","preventDiagonalScrolling","paddingBottom","paddingRight","rightElement","rightElementProps","scrollRef","scrollToEnd","initialSize","minimap","padders","rightElementSticky","rightElementFill","offsetY","React10","lastScrollY","scroller","scrollLeft","lastScrollPosition","scrollTop","lockDirection","rightWrapRef","hasTouches","setHasTouches","cbTimer","useTouchUpDelayed","isIdle","setIsIdle","idleTimer","lx","ly","onScroll","lastScrollTop","lastScrollLeft","lock","newY","scrollableHeight","prog","recomputed","onScrollRef","lastProps","didFirstScroll","setRefs","useRef6","setSize","useState6","useLayoutEffect4","resizeObserver","ResizeObserver","entry","useResizeDetector","maxHeight","paddingLeft","marginBottom","marginRight","flexGrow","MinimapStyle","scrolling_data_grid_default","clientSize","onVisibleRegionChanged","overscrollX","overscrollY","showMinimap","React11","lastX","lastY","lastSize","lastArgs","processArgs","cellRight","stickyColWidth","cx","cellBottom","cy","oldRect","onScrollUpdate","aspect","clamp4","hRatio","vRatio","vWidth","vHeight","handleMouse","currentTarget","newScrollLeft","newScrollTop","scrollTo","behavior","type","buttons","borderRadius","SearchWrapper","showSearch","upArrow","React12","downArrow","closeX","data_grid_search_default","searchInputRef","searchValue","searchResults","searchResultsIn","onSearchValueChange","getCellsForSelection","onSearchResultsChanged","onSearchClose","searchID","random","searchStringInner","setSearchStringInner","searchString","setSearchString","searchStatus","setSearchStatus","searchStatusRef","rowsSearched","results","selectedIndex","abortControllerRef","AbortController","searchHandle","searchResultsInner","setSearchResultsInner","cancelSearch","abort","cellYOffsetRef","beginSearch","regex","searchStride","runningResult","tick","tStart","rowsLeft","signal","added","testString","Text","displayData","Uri","Markdown","Bubble","tEnd","tElapsed","scalar","onClose","onSearchChange","onNext","newIndex","onPrev","onSearchKeyDown","nativeEvent","code","searchbox","resultString","cancelEvent","progressStyle","onKeyDownCapture","disabled","htmlFor","RenameInput","GroupRename","canvasBounds","onFinish","setValue","React13","setSelectionRange","autoFocus","measureColumn","colIndex","selectedData","removeOutliers","sizes","measure","measureCell","average","reduce","biggest","final","useColumnSizer","abortController","rowsRef","React14","getCellsForSelectionRef","themeRef","memoMap","lastColumns","setSelectionData","getCells","every","computeRows","tailRows","computeArea","tailComputeArea","getResult","tailGetResult","toSet","totalWidth","totalGrow","distribute","grow","writeable","extra","remaining","di","weighted","isHotkey","hotkey","wantCtrl","wantShift","wantAlt","wantMeta","parseInt","checkKey","accel","escapeIfNeeded","withComma","formatHtmlTextContent","text","match","repeat","formatHtmlAttributeContent","attrText","restoreHtmlEntities","getCopyBufferContents","columnIndexes","copyBuffer","mappedIndex","formatted","rawValue","format","Drilldown","RowID","convertCellToBuffer","createBufferFromGridCells","textPlain","lines","createTextBuffer","textHtml","formatStr","ind","createHtmlBuffer","decodeHTML","html","fragment","innerHTML","tableEl","querySelector","walkEl","HTMLTableElement","nodeName","reverse","HTMLTableRowElement","HTMLTableCellElement","clone","cloneNode","para","isAppleNumbers","brs","querySelectorAll","replaceWith","attributeValue","getAttribute","formatValue","textContent","rawValues","descape","endsWith","unquote","State","State2","char","copyToClipboard","copyWithWriteText","clipboard","writeText","write","clipboardData","e2","ClipboardItem","Blob","copyWithWrite","copyWithClipboardData","toCss","Wrapper","innerHeight","DataEditorContainer","inWidth","inHeight","React17","toggleBoolean","booleanCellRenderer","canEdit","drawBoolean","onDelete","pointerX","pointerY","maxWidth","cellCenterY","checkBoxClicked","onPaste","toPaste","BubblesOverlayEditorStyle","bubbles_overlay_editor_default","bubbles","React19","bubbleCellRenderer","t","acc","renderX","renderBoxes","textWidth","bubblePad","rectInfo","bubbleHeight","drawBubbles","DrilldownOverlayEditorStyle","drilldown_overlay_editor_default","drilldowns","React21","drilldownCellRenderer","tileMap","border","shadowBlur","middleWidth","sideWidth","rounding","padding","trueRounding","shadowColor","shadowOffsetY","getAndCacheDrilldownBorder","imgWidth","renderWidth","outerSideWidth","outerPadding","rx","rw","outerMiddleWidth","imgSize","srcX","srcY","srcWidth","srcHeight","drawDrilldownCell","ImageOverlayEditorStyle","ImageOverlayEditor","urls","canWrite","onEditClick","renderImage","filtered","u","allowMove","React23","Carousel","showArrows","showThumbs","swipeable","emulateTouch","infiniteLoop","innerContent","imageCellRenderer","imgHeight","images","_ctx","ImageEditor","React24","allowAdd","onCancel","newImage","uris","URL","loadingCellRenderer","MarkdownContainer","MarkdownDiv","React25","targetElement","containerRefHook","renderMarkdownIntoDiv","contents","createNode","marked","childRange","createRange","selectNodeContents","deleteContents","newChild","childDoc","tags","getElementsByTagName","tag","rel","InputBox","ShadowBox","GrowingEntryStyle","globalInputID","GrowingEntry","placeholder","altNewline","inputRef","React26","useText","inputID","ta","onKeyDownInner","MarkdownOverlayEditorStyle","MarkdownOverlayEditor","targetRect","markdown","editMode","setEditMode","React27","addLeftPad","markdownCellRenderer","firstLine","React28","markerCellRenderer","newFont","drawHandle","checkedboxAlpha","offsetAmount","yOffset","drawMarkerRowCell","centerX","newRowCellRenderer","alwaysShowIcon","textX","px","py","finalLineSize","lineSize","xTranslate","padPlus","drawNewRowCell","hint","NumberOverlayEditor","React29","resolve","require","numberCellRenderer","Suspense","fallback","fixedDecimals","allowNegative","thousandSeparator","decimalSeparator","floatValue","details","newNumber","formattedString","protectedCellRenderer","xStart","center","q","rowIDCellRenderer","React30","textCellRenderer","l","React31","UriOverlayEditorStyle","uri_overlay_editor_default","uri","preview","React32","href","uriCellRenderer","React33","CellRenderers","idCounter","shiftSelection","keybindingDefaults","selectAll","selectRow","selectColumn","downFill","rightFill","pageUp","pageDown","clear","copy","paste","cut","search","loadingCell2","emptyGridSelection","DataEditor","React35","gridSelectionInner","setGridSelectionInner","setOverlay","mouseState","setMouseState","lastSent","rowMarkers","rowMarkerWidth","rowMarkerWidthRaw","columnsIn","onCellClicked","onCellActivated","coercePasteValue","drawHeaderIn","onHeaderClicked","spanRangeBehavior","onGroupHeaderClicked","onCellContextMenu","onHeaderContextMenu","getCellsForSelectionIn","onGroupHeaderContextMenu","onGroupHeaderRenamed","onCellEdited","onCellsEdited","onSearchResultsChangedIn","onKeyDownIn","onKeyUpIn","keybindings","keybindingsIn","onRowAppended","validateCellIn","highlightRegionsIn","drawCell2","rangeSelect","columnSelect","rowSelect","rangeSelectionBlending","columnSelectionBlending","rowSelectionBlending","onDeleteIn","copyHeaders","rowSelectionMode","rowMarkerStartIndex","rowMarkerTheme","onSearchCloseIn","onSelectionCleared","showSearchIn","gridSelection","gridSelectionOuter","onGridSelectionChange","minColumnWidthIn","maxColumnWidthIn","maxColumnAutoWidth","maxColumnAutoWidthIn","scrollOffsetX","scrollOffsetY","onColumnResizeIn","onColumnResizeEndIn","onColumnResizeStartIn","customRenderers","additionalRenderers","overscrollXIn","overscrollYIn","scaleToRem","rowHeightIn","headerHeightIn","groupHeaderHeightIn","themeIn","fontSizeStr","fontSize","remSize","React34","scaler","bt","n","useRemAdjuster","hasRowMarkers","rowMarkerOffset","showTrailingBlankRow","showSearchInner","setShowSearchInner","gridSelectionOuterMangled","getCellsForSeletionDirect","getCellsForSelectionDirectWhenValid","React16","getCellsForSelectionDirect","getCellsForSelectionMangled","newRect","useCellsForSelection","prevValue","expectedExternalGridSelection","setGridSelection","expand","origVal","isFilled","leftCells","rightCells","rCells","expandSelection","_","wg","drawHeader2","setCurrent","setSelectedRows","setSelectedColumns","rangeBehavior","columnBehavior","rowBehavior","React15","trigger","rangeMixable","allowColumnCoSelect","allowRowCoSelect","newRows","allowMixed","columnMixed","newCols","rowMixed","useSelectionBehavior","mergedTheme","setClientSize","isMatch","numSelectedRows","rowMarkerHeader","mangledCols","visibleRegionY","visibleRegionTy","visibleRegionRef","visibleRegionInput","hasJustScrolled","visibleRegion","setVisibleRegion","empty2","inputState","inputStateRef","forceRender","setStateOuter","nv","pv","onEmpty","useStateWithReactiveInput","vScrollReady","hScrollReady","immediate","mangledRows","mangledOnCellsEdited","mangledItems","mangledColsRef","_e2","_i","_j","isTrailing","maybeFirstColumnHint","addIcon","outerCol","strict","vr","isOutsideMainArea","extras","isOutsideFreezeArea","freezeRegion","mangledGetGroupDetails","setRenameGroup","setOverlaySimple","reselect","fromKeyboard","maybe","focusOnRowFromTrailingBlankRow","paddingX","paddingY","options","grid","trueCol","unit","trueRow","desiredX","desiredY","scrollX","scrollY","scrollBounds","frozenWidth","trailingRowHeight","sLeft","sRight","sTop","sBottom","minx","hAlign","miny","vAlign","focusCallback","getCellContentRef","appendRow","openOverlay","appendResult","backoff","doFocus","getCustomNewRowTargetColumn","customTargetColumn","targetColumn","maybeIndex","indexOf","lastSelectedRowRef","lastSelectedColRef","themeForCell","pos","handleSelect","isMultiKey","isMultiRow","isMultiCol","lastMouseSelectLocation","markerCell","postClick","lastHighlighted","newSlice","onSelect","isLastStickyRow","startedFromLastSticky","isActivelyDraggingHeader","touchDownArgs","mouseDownData","isPrevented","time","wasDoubleClick","fh","previousSelection","renameGroup","handleGroupHeaderSelection","needle","fillDown","v","fillCol","fillVal","normalSizeColumn","force","inputCol","newCol","scrollDir","setScrollDir","mouse","lastMouseDownCol","lastMouseDownRow","handleMaybeClick","_c3","isValidClick","selectedCol","selectedRow","prevCol","prevRow","clickLocation","touchVr","onMouseMoveImpl","scrollDirection","speedScalar","React18","xDir","yDir","lastTime","scrollFn","curTime","motion","scrollBy","useAutoscroll","onHeaderMenuClickInner","currentCell","onVisibleRegionChangedImpl","rightElWidth","newRegion","onColumnMovedImpl","startIndex","isActivelyDragging","newRange","adjustSelection","direction2","old","disallowed","uniq","flatten","getSpanStops","done","updateSelectedCell","fromEditingTrailingRow","freeMove","rowMax","clamp5","newStack","movX","movY","isEditingTrailingRow","overlayID","deleteRange","editList","cellValue","toDelete","deletedValue","cancelled","overlayOpen","isOSX","isPrimaryKey","isDeleteKey","getSelection","removeAllRanges","addRange","callbackResult","col2","fillRow","asPrimary","adjustedCol","onPasteInternal","pasteToCell","target2","_d3","stringifiedRawValue","coerced","read","clipboardContent","types","htmlBlob","getType","decoded","readText","getData","gridCol","gridRow","dataRow","dataItem","writeCol","writeRow","onCopy","ignoreFocus","copyToClipboardWithHeaders","rowIndex","all","cols","navIndex","outCol","outRow","scrollToRef","selectionOutOfBounds","tint","mangledVerticalBorder","renameGroupNode","mangledFreezeColumns","updateCells","damageList","emit","remeasureColumns","selCol","selRow","setIsFocused","setIsFocusedDebounced","debounce2","onFocusOut","idealWidth","idealHeight","scrollbarWidth","scrollbarWidthOverride","rowsCountWithTrailingRow","avg","toAverage","isSubGrid","inflate","leftColor","rightColor","hScaler","nScaler","React36","useContext"],"mappings":"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","x_google_ignoreList":[0]}
|