/usr/share/grafana/public/build
{"version":3,"file":"2218.623d73bd0985ddf5f8c4.js","mappings":"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","sources":["webpack://grafana/./node_modules/react-responsive-carousel/lib/js/dimensions.js","webpack://grafana/./node_modules/react-responsive-carousel/lib/js/shims/document.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/click-outside-container/click-outside-container.js","webpack://grafana/./node_modules/lodash/_arrayIncludes.js","webpack://grafana/./node_modules/lodash/_baseHas.js","webpack://grafana/./node_modules/react-responsive-carousel/lib/js/cssClasses.js","webpack://grafana/./node_modules/react-responsive-carousel/lib/js/components/Carousel/animations.js","webpack://grafana/./node_modules/react-responsive-carousel/lib/js/index.js","webpack://grafana/./node_modules/lodash/_arrayIncludesWith.js","webpack://grafana/./node_modules/react-responsive-carousel/lib/js/shims/window.js","webpack://grafana/./node_modules/lodash/_createBaseEach.js","webpack://grafana/./node_modules/react-responsive-carousel/lib/js/components/Carousel/utils.js","webpack://grafana/./node_modules/lodash/_createAggregator.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/common/utils.js","webpack://grafana/./node_modules/canvas-hypertxt/dist/js/index.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/render/data-grid-lib.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/common/render-state-provider.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/cell-set.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/data-grid-sprites.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/render/data-grid-render.walk.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/common/math.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/render/data-grid-render.cells.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/render/draw-checkbox.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/render/data-grid-render.header.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/render/data-grid-render.lines.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/render/data-grid-render.blit.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/render/data-grid.render.rings.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/render/data-grid-render.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/animation-manager.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/common/browser-detect.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/use-animation-queue.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/event-args.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/data-grid.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-dnd/data-grid-dnd.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/common/resize-detector.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/scrolling-data-grid/use-kinetic-scroll.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/scrolling-data-grid/infinite-scroller.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/scrolling-data-grid/scrolling-data-grid.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-search/data-grid-search-style.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-search/data-grid-search.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/data-editor/group-rename.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/data-editor/use-column-sizer.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/common/is-hotkey.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/use-selection-behavior.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/data-editor/use-cells-for-selection.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/data-editor/copy-paste.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/data-editor/data-editor-fns.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-editor-container/data-grid-container.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/data-editor/use-autoscroll.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/data-editor/use-rem-adjuster.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/data-editor/data-editor-keybindings.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/data-editor/data-editor.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/boolean-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/private/bubbles-overlay-editor-style.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/private/bubbles-overlay-editor.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/bubble-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/private/drilldown-overlay-editor.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/drilldown-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/private/image-overlay-editor-style.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/private/image-overlay-editor.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/image-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/loading-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/markdown-div/private/markdown-container.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/markdown-div/markdown-div.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/growing-entry/growing-entry-style.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/growing-entry/growing-entry.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/private/markdown-overlay-editor-style.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/private/markdown-overlay-editor.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/markdown-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/marker-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/new-row-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/number-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/protected-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/row-id-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/text-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/private/uri-overlay-editor-style.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/private/uri-overlay-editor.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/uri-cell.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/cells/index.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/sprites.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/common/image-window-loader.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/data-editor-all.js","webpack://grafana/./public/app/plugins/panel/datagrid/components/SimpleInput.tsx","webpack://grafana/./public/app/plugins/panel/datagrid/components/AddColumn.tsx","webpack://grafana/./public/app/plugins/panel/datagrid/featureFlagUtils.tsx","webpack://grafana/./public/app/plugins/panel/datagrid/utils.ts","webpack://grafana/./public/app/plugins/panel/datagrid/state.ts","webpack://grafana/./public/app/plugins/panel/datagrid/components/DatagridContextMenu.tsx","webpack://grafana/./public/app/plugins/panel/datagrid/components/RenameColumnCell.tsx","webpack://grafana/./public/app/plugins/panel/datagrid/DataGridPanel.tsx","webpack://grafana/./public/app/plugins/panel/datagrid/panelcfg.gen.ts","webpack://grafana/./public/app/plugins/panel/datagrid/module.tsx","webpack://grafana/./node_modules/lodash/_createSet.js","webpack://grafana/./node_modules/react-responsive-carousel/lib/js/CSSTranslate.js","webpack://grafana/./node_modules/lodash/_baseUniq.js","webpack://grafana/./node_modules/react-easy-swipe/lib/react-swipe.js","webpack://grafana/./node_modules/lodash/has.js","webpack://grafana/./node_modules/lodash/_baseAggregator.js","webpack://grafana/./node_modules/lodash/uniq.js","webpack://grafana/./node_modules/lodash/_arrayAggregator.js","webpack://grafana/./node_modules/lodash/noop.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/data-grid-types.js","webpack://grafana/./node_modules/react-easy-swipe/lib/index.js","webpack://grafana/./node_modules/react-responsive-carousel/lib/js/components/Carousel/index.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid/color-parser.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/common/support.js","webpack://grafana/./node_modules/@glideapps/glide-data-grid/dist/esm/common/styles.js","webpack://grafana/./node_modules/lodash/clamp.js","webpack://grafana/./node_modules/lodash/_baseEach.js","webpack://grafana/./node_modules/react-responsive-carousel/lib/js/components/Thumbs.js","webpack://grafana/./node_modules/lodash/groupBy.js","webpack://grafana/./node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://grafana/./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","webpack://grafana/./node_modules/@linaria/core/dist/index.mjs","webpack://grafana/./node_modules/@linaria/react/dist/index.mjs"],"sourcesContent":["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.outerWidth = void 0;\n\nvar outerWidth = function outerWidth(el) {\n var width = el.offsetWidth;\n var style = getComputedStyle(el);\n width += parseInt(style.marginLeft) + parseInt(style.marginRight);\n return width;\n};\n\nexports.outerWidth = outerWidth;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default() {\n return document;\n};\n\nexports.default = _default;","import * as React from \"react\";\nexport default class ClickOutsideContainer extends React.PureComponent {\n wrapperRef = React.createRef();\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 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 render() {\n const { onClickOutside, isOutsideClick, ...rest } = this.props;\n return (React.createElement(\"div\", { ...rest, ref: this.wrapperRef }, this.props.children));\n }\n}\n//# sourceMappingURL=click-outside-container.js.map","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _default = {\n ROOT: function ROOT(customClassName) {\n return (0, _classnames.default)(_defineProperty({\n 'carousel-root': true\n }, customClassName || '', !!customClassName));\n },\n CAROUSEL: function CAROUSEL(isSlider) {\n return (0, _classnames.default)({\n carousel: true,\n 'carousel-slider': isSlider\n });\n },\n WRAPPER: function WRAPPER(isSlider, axis) {\n return (0, _classnames.default)({\n 'thumbs-wrapper': !isSlider,\n 'slider-wrapper': isSlider,\n 'axis-horizontal': axis === 'horizontal',\n 'axis-vertical': axis !== 'horizontal'\n });\n },\n SLIDER: function SLIDER(isSlider, isSwiping) {\n return (0, _classnames.default)({\n thumbs: !isSlider,\n slider: isSlider,\n animated: !isSwiping\n });\n },\n ITEM: function ITEM(isSlider, selected, previous) {\n return (0, _classnames.default)({\n thumb: !isSlider,\n slide: isSlider,\n selected: selected,\n previous: previous\n });\n },\n ARROW_PREV: function ARROW_PREV(disabled) {\n return (0, _classnames.default)({\n 'control-arrow control-prev': true,\n 'control-disabled': disabled\n });\n },\n ARROW_NEXT: function ARROW_NEXT(disabled) {\n return (0, _classnames.default)({\n 'control-arrow control-next': true,\n 'control-disabled': disabled\n });\n },\n DOT: function DOT(selected) {\n return (0, _classnames.default)({\n dot: true,\n selected: selected\n });\n }\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.fadeAnimationHandler = exports.slideStopSwipingHandler = exports.slideSwipeAnimationHandler = exports.slideAnimationHandler = void 0;\n\nvar _react = require(\"react\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../../CSSTranslate\"));\n\nvar _utils = require(\"./utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Main animation handler for the default 'sliding' style animation\n * @param props\n * @param state\n */\nvar slideAnimationHandler = function slideAnimationHandler(props, state) {\n var returnStyles = {};\n var selectedItem = state.selectedItem;\n var previousItem = selectedItem;\n var lastPosition = _react.Children.count(props.children) - 1;\n var needClonedSlide = props.infiniteLoop && (selectedItem < 0 || selectedItem > lastPosition); // Handle list position if it needs a clone\n\n if (needClonedSlide) {\n if (previousItem < 0) {\n if (props.centerMode && props.centerSlidePercentage && props.axis === 'horizontal') {\n returnStyles.itemListStyle = (0, _utils.setPosition)(-(lastPosition + 2) * props.centerSlidePercentage - (100 - props.centerSlidePercentage) / 2, props.axis);\n } else {\n returnStyles.itemListStyle = (0, _utils.setPosition)(-(lastPosition + 2) * 100, props.axis);\n }\n } else if (previousItem > lastPosition) {\n returnStyles.itemListStyle = (0, _utils.setPosition)(0, props.axis);\n }\n\n return returnStyles;\n }\n\n var currentPosition = (0, _utils.getPosition)(selectedItem, props); // if 3d is available, let's take advantage of the performance of transform\n\n var transformProp = (0, _CSSTranslate.default)(currentPosition, '%', props.axis);\n var transitionTime = props.transitionTime + 'ms';\n returnStyles.itemListStyle = {\n WebkitTransform: transformProp,\n msTransform: transformProp,\n OTransform: transformProp,\n transform: transformProp\n };\n\n if (!state.swiping) {\n returnStyles.itemListStyle = _objectSpread(_objectSpread({}, returnStyles.itemListStyle), {}, {\n WebkitTransitionDuration: transitionTime,\n MozTransitionDuration: transitionTime,\n OTransitionDuration: transitionTime,\n transitionDuration: transitionTime,\n msTransitionDuration: transitionTime\n });\n }\n\n return returnStyles;\n};\n/**\n * Swiping animation handler for the default 'sliding' style animation\n * @param delta\n * @param props\n * @param state\n * @param setState\n */\n\n\nexports.slideAnimationHandler = slideAnimationHandler;\n\nvar slideSwipeAnimationHandler = function slideSwipeAnimationHandler(delta, props, state, setState) {\n var returnStyles = {};\n var isHorizontal = props.axis === 'horizontal';\n\n var childrenLength = _react.Children.count(props.children);\n\n var initialBoundry = 0;\n var currentPosition = (0, _utils.getPosition)(state.selectedItem, props);\n var finalBoundry = props.infiniteLoop ? (0, _utils.getPosition)(childrenLength - 1, props) - 100 : (0, _utils.getPosition)(childrenLength - 1, props);\n var axisDelta = isHorizontal ? delta.x : delta.y;\n var handledDelta = axisDelta; // prevent user from swiping left out of boundaries\n\n if (currentPosition === initialBoundry && axisDelta > 0) {\n handledDelta = 0;\n } // prevent user from swiping right out of boundaries\n\n\n if (currentPosition === finalBoundry && axisDelta < 0) {\n handledDelta = 0;\n }\n\n var position = currentPosition + 100 / (state.itemSize / handledDelta);\n var hasMoved = Math.abs(axisDelta) > props.swipeScrollTolerance;\n\n if (props.infiniteLoop && hasMoved) {\n // When allowing infinite loop, if we slide left from position 0 we reveal the cloned last slide that appears before it\n // if we slide even further we need to jump to other side so it can continue - and vice versa for the last slide\n if (state.selectedItem === 0 && position > -100) {\n position -= childrenLength * 100;\n } else if (state.selectedItem === childrenLength - 1 && position < -childrenLength * 100) {\n position += childrenLength * 100;\n }\n }\n\n if (!props.preventMovementUntilSwipeScrollTolerance || hasMoved || state.swipeMovementStarted) {\n if (!state.swipeMovementStarted) {\n setState({\n swipeMovementStarted: true\n });\n }\n\n returnStyles.itemListStyle = (0, _utils.setPosition)(position, props.axis);\n } //allows scroll if the swipe was within the tolerance\n\n\n if (hasMoved && !state.cancelClick) {\n setState({\n cancelClick: true\n });\n }\n\n return returnStyles;\n};\n/**\n * Default 'sliding' style animination handler for when a swipe action stops.\n * @param props\n * @param state\n */\n\n\nexports.slideSwipeAnimationHandler = slideSwipeAnimationHandler;\n\nvar slideStopSwipingHandler = function slideStopSwipingHandler(props, state) {\n var currentPosition = (0, _utils.getPosition)(state.selectedItem, props);\n var itemListStyle = (0, _utils.setPosition)(currentPosition, props.axis);\n return {\n itemListStyle: itemListStyle\n };\n};\n/**\n * Main animation handler for the default 'fade' style animation\n * @param props\n * @param state\n */\n\n\nexports.slideStopSwipingHandler = slideStopSwipingHandler;\n\nvar fadeAnimationHandler = function fadeAnimationHandler(props, state) {\n var transitionTime = props.transitionTime + 'ms';\n var transitionTimingFunction = 'ease-in-out';\n var slideStyle = {\n position: 'absolute',\n display: 'block',\n zIndex: -2,\n minHeight: '100%',\n opacity: 0,\n top: 0,\n right: 0,\n left: 0,\n bottom: 0,\n transitionTimingFunction: transitionTimingFunction,\n msTransitionTimingFunction: transitionTimingFunction,\n MozTransitionTimingFunction: transitionTimingFunction,\n WebkitTransitionTimingFunction: transitionTimingFunction,\n OTransitionTimingFunction: transitionTimingFunction\n };\n\n if (!state.swiping) {\n slideStyle = _objectSpread(_objectSpread({}, slideStyle), {}, {\n WebkitTransitionDuration: transitionTime,\n MozTransitionDuration: transitionTime,\n OTransitionDuration: transitionTime,\n transitionDuration: transitionTime,\n msTransitionDuration: transitionTime\n });\n }\n\n return {\n slideStyle: slideStyle,\n selectedStyle: _objectSpread(_objectSpread({}, slideStyle), {}, {\n opacity: 1,\n position: 'relative'\n }),\n prevStyle: _objectSpread({}, slideStyle)\n };\n};\n\nexports.fadeAnimationHandler = fadeAnimationHandler;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Carousel\", {\n enumerable: true,\n get: function get() {\n return _Carousel.default;\n }\n});\nObject.defineProperty(exports, \"CarouselProps\", {\n enumerable: true,\n get: function get() {\n return _types.CarouselProps;\n }\n});\nObject.defineProperty(exports, \"Thumbs\", {\n enumerable: true,\n get: function get() {\n return _Thumbs.default;\n }\n});\n\nvar _Carousel = _interopRequireDefault(require(\"./components/Carousel\"));\n\nvar _types = require(\"./components/Carousel/types\");\n\nvar _Thumbs = _interopRequireDefault(require(\"./components/Thumbs\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default() {\n return window;\n};\n\nexports.default = _default;","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.setPosition = exports.getPosition = exports.isKeyboardEvent = exports.defaultStatusFormatter = exports.noop = void 0;\n\nvar _react = require(\"react\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../../CSSTranslate\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar noop = function noop() {};\n\nexports.noop = noop;\n\nvar defaultStatusFormatter = function defaultStatusFormatter(current, total) {\n return \"\".concat(current, \" of \").concat(total);\n};\n\nexports.defaultStatusFormatter = defaultStatusFormatter;\n\nvar isKeyboardEvent = function isKeyboardEvent(e) {\n return e ? e.hasOwnProperty('key') : false;\n};\n/**\n * Gets the list 'position' relative to a current index\n * @param index\n */\n\n\nexports.isKeyboardEvent = isKeyboardEvent;\n\nvar getPosition = function getPosition(index, props) {\n if (props.infiniteLoop) {\n // index has to be added by 1 because of the first cloned slide\n ++index;\n }\n\n if (index === 0) {\n return 0;\n }\n\n var childrenLength = _react.Children.count(props.children);\n\n if (props.centerMode && props.axis === 'horizontal') {\n var currentPosition = -index * props.centerSlidePercentage;\n var lastPosition = childrenLength - 1;\n\n if (index && (index !== lastPosition || props.infiniteLoop)) {\n currentPosition += (100 - props.centerSlidePercentage) / 2;\n } else if (index === lastPosition) {\n currentPosition += 100 - props.centerSlidePercentage;\n }\n\n return currentPosition;\n }\n\n return -index * 100;\n};\n/**\n * Sets the 'position' transform for sliding animations\n * @param position\n * @param forceReflow\n */\n\n\nexports.getPosition = getPosition;\n\nvar setPosition = function setPosition(position, axis) {\n var style = {};\n ['WebkitTransform', 'MozTransform', 'MsTransform', 'OTransform', 'transform', 'msTransform'].forEach(function (prop) {\n // @ts-ignore\n style[prop] = (0, _CSSTranslate.default)(position, '%', axis);\n });\n return style;\n};\n\nexports.setPosition = setPosition;","var arrayAggregator = require('./_arrayAggregator'),\n baseAggregator = require('./_baseAggregator'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nmodule.exports = createAggregator;\n","import * as React from \"react\";\nimport debounce from \"lodash/debounce.js\";\nimport { deepEqual } from \"./support.js\";\nexport function useEventListener(eventName, handler, element, passive, capture = false) {\n // Create a ref that stores handler\n const savedHandler = React.useRef();\n // Update ref.current value if handler changes.\n // This allows our effect below to always get latest handler ...\n // ... without us needing to pass it in effect deps array ...\n // ... and potentially cause effect to re-run every render.\n savedHandler.current = handler;\n React.useEffect(() => {\n // Make sure element supports addEventListener\n if (element === null || element.addEventListener === undefined)\n return;\n const el = element;\n // Create event listener that calls handler function stored in ref\n const eventListener = (event) => {\n savedHandler.current?.call(el, event);\n };\n el.addEventListener(eventName, eventListener, { passive, capture });\n // Remove event listener on cleanup\n return () => {\n el.removeEventListener(eventName, eventListener, { capture });\n };\n }, [eventName, element, passive, capture] // Re-run if eventName or element changes\n );\n}\nexport function whenDefined(obj, result) {\n return obj === undefined ? undefined : result;\n}\nconst PI = Math.PI;\nexport function degreesToRadians(degrees) {\n return (degrees * PI) / 180;\n}\nexport const 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});\nexport const 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};\nexport const getSquareWidth = (maxSize, containerHeight, verticalPadding) => Math.min(maxSize, containerHeight - verticalPadding * 2);\nexport const pointIsWithinBB = (x, y, bb) => bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2;\nexport const EditPencil = (props) => {\n const fg = props.fgColor ?? \"currentColor\";\n return (React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n React.createElement(\"path\", { 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\", stroke: fg, strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\", fill: \"none\", vectorEffect: \"non-scaling-stroke\" }),\n React.createElement(\"path\", { 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\", stroke: fg, strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\", fill: \"none\", vectorEffect: \"non-scaling-stroke\" })));\n};\nexport const Checkmark = (props) => {\n const fg = props.fgColor ?? \"currentColor\";\n return (React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n React.createElement(\"path\", { d: \"M19 6L10.3802 17L5.34071 11.8758\", vectorEffect: \"non-scaling-stroke\", stroke: fg, strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" })));\n};\nexport function useDebouncedMemo(factory, deps, time) {\n const [state, setState] = React.useState(factory);\n const mountedRef = React.useRef(true);\n React.useEffect(() => () => {\n mountedRef.current = false;\n }, []);\n const debouncedSetState = React.useRef(debounce(x => {\n if (mountedRef.current) {\n setState(x);\n }\n }, time));\n React.useLayoutEffect(() => {\n if (mountedRef.current) {\n debouncedSetState.current(() => factory());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n return state;\n}\n// Shamelessly inline direction to avoid conflicts with 1.0 and 2.0.\nconst rtlRange = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\nconst ltrRange = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\" +\n \"\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\\u200E\\u2C00-\\uFB1C\" +\n \"\\uFE00-\\uFE6F\\uFEFD-\\uFFFF\";\n/* eslint-disable no-misleading-character-class */\nconst rtl = new RegExp(\"^[^\" + ltrRange + \"]*[\" + rtlRange + \"]\");\n/* eslint-enable no-misleading-character-class */\nexport function direction(value) {\n return rtl.test(value) ? \"rtl\" : \"not-rtl\";\n}\nlet scrollbarWidthCache = undefined;\nexport function getScrollBarWidth() {\n if (typeof document === \"undefined\")\n return 0;\n if (scrollbarWidthCache !== undefined)\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}\n// Dear future reader,\n// This dumb hook is to make sure if the inputState changes, that effectively behaves like an instant \"setState\" call.\n// This is useful in a wide variety of situations. I'm too dumb to know if this is a good idea or a really dumb one.\n// I can't tell. It's like poes law but for code.\n//\n// I'm sorry.\nconst empty = Symbol();\nexport function useStateWithReactiveInput(inputState) {\n // When [0] is not empty we will return it, [1] is always the last value we saw\n const inputStateRef = React.useRef([empty, inputState]);\n if (inputStateRef.current[1] !== inputState) {\n // it changed, we must use thee!\n inputStateRef.current[0] = inputState;\n }\n inputStateRef.current[1] = inputState;\n const [state, setState] = React.useState(inputState);\n // crimes against humanity here\n const [, forceRender] = React.useState();\n const setStateOuter = React.useCallback(nv => {\n // this takes care of the case where the inputState was set, then setState gets called again but back to what\n // the state was before the inputState changed. Since the useState effect wont trigger a render in this case\n // we need to be very naughty and force it to see the change. Technically this may not be needed some chunk of\n // the time (in fact most of it) but checking for it is likely to be more expensive than just over-doing it\n const s = inputStateRef.current[0];\n if (s !== empty) {\n nv = typeof nv === \"function\" ? nv(s) : nv;\n if (nv === s)\n return; // they are setting it to what the inputState is anyway so we can just do nothing\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 = React.useCallback(() => {\n inputStateRef.current[0] = empty;\n forceRender({});\n }, []);\n return [inputStateRef.current[0] === empty ? state : inputStateRef.current[0], setStateOuter, onEmpty];\n}\nexport function makeAccessibilityStringForArray(arr) {\n // this is basically just .join(\", \") but checks to make sure it is not going to allocate\n // a string that is so large it might crash the browser\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 > 10000)\n break;\n index++;\n }\n return arr.slice(0, index).join(\", \");\n}\nexport function useDeepMemo(value) {\n const ref = React.useRef(value);\n if (!deepEqual(value, ref.current)) {\n ref.current = value;\n }\n return ref.current;\n}\n//# sourceMappingURL=utils.js.map","\"use strict\";var d=new Map,b=new Map,z=new Map;function v(){d.clear(),z.clear(),b.clear()}function w(l,s,e,c,t){var n,r,o;let f=0,a={};for(let i of l)f+=(n=e.get(i))!=null?n:t,a[i]=((r=a[i])!=null?r:0)+1;let g=s-f;for(let i of Object.keys(a)){let m=a[i],u=(o=e.get(i))!=null?o:t,h=u*m/f,M=g*h*c/m,C=u+M;e.set(i,C)}}function R(l,s){var n;let e=new Map,c=0;for(let r of\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890,.-+=?\"){let o=l.measureText(r).width;e.set(r,o),c+=o}let t=c/e.size,f=3,a=(s/t+f)/(f+1),g=e.keys();for(let r of g)e.set(r,((n=e.get(r))!=null?n:t)*a);return e}function p(l,s,e,c){var g,n;let t=b.get(e);if(c&&t!==void 0&&t.count>2e4){let r=z.get(e);if(r===void 0&&(r=R(l,t.size),z.set(e,r)),t.count>5e5){let i=0;for(let m of s)i+=(g=r.get(m))!=null?g:t.size;return i*1.01}let o=l.measureText(s);return w(s,o.width,r,Math.max(.05,1-t.count/2e5),t.size),b.set(e,{count:t.count+s.length,size:t.size}),o.width}let f=l.measureText(s),a=f.width/s.length;if(((n=t==null?void 0:t.count)!=null?n:0)>2e4)return f.width;if(t===void 0)b.set(e,{count:s.length,size:a});else{let r=a-t.size,o=s.length/(t.count+s.length),i=t.size+r*o;b.set(e,{count:t.count+s.length,size:i})}return f.width}function T(l,s,e,c,t,f,a,g){if(s.length<=1)return s.length;if(t<e)return-1;let n=Math.floor(e/t*f),r=p(l,s.slice(0,Math.max(0,n)),c,a),o=g==null?void 0:g(s);if(r!==e)if(r<e){for(;r<e;)n++,r=p(l,s.slice(0,Math.max(0,n)),c,a);n--}else for(;r>e;){let i=o!==void 0?0:s.lastIndexOf(\" \",n-1);i>0?n=i:n--,r=p(l,s.slice(0,Math.max(0,n)),c,a)}if(s[n]!==\" \"){let i=0;if(o===void 0)i=s.lastIndexOf(\" \",n);else for(let m of o){if(m>n)break;i=m}i>0&&(n=i)}return n}function _(l,s,e,c,t,f){let a=`${s}_${e}_${c}px`,g=d.get(a);if(g!==void 0)return g;if(c<=0)return[];let n=[],r=s.split(`\n`),o=b.get(e),i=o===void 0?s.length:c/o.size*1.5,m=t&&o!==void 0&&o.count>2e4;for(let u of r){let h=p(l,u.slice(0,Math.max(0,i)),e,m),M=Math.min(u.length,i);if(h<=c)n.push(u);else{for(;h>c;){let C=T(l,u,c,e,h,M,m,f),k=u.slice(0,Math.max(0,C));u=u.slice(k.length),n.push(k),h=p(l,u.slice(0,Math.max(0,i)),e,m),M=Math.min(u.length,i)}h>0&&n.push(u)}}return n=n.map((u,h)=>h===0?u.trimEnd():u.trim()),d.set(a,n),d.size>500&&d.delete(d.keys().next().value),n}export{v as clearCache,_ as split};\n//# sourceMappingURL=index.js.map\n","import {} from \"../data-grid-types.js\";\nimport { direction } from \"../../../common/utils.js\";\nimport React from \"react\";\nimport { split as splitText, clearCache } from \"canvas-hypertxt\";\nexport function useMappedColumns(columns, freezeColumns) {\n return React.useMemo(() => columns.map((c, i) => ({\n group: c.group,\n grow: c.grow,\n hasMenu: c.hasMenu,\n icon: c.icon,\n id: c.id,\n menuIcon: c.menuIcon,\n overlayIcon: c.overlayIcon,\n sourceIndex: i,\n sticky: i < freezeColumns,\n style: c.style,\n themeOverride: c.themeOverride,\n title: c.title,\n trailingRowOptions: c.trailingRowOptions,\n width: c.width,\n growOffset: c.growOffset,\n rowMarker: c.rowMarker,\n rowMarkerChecked: c.rowMarkerChecked,\n })), [columns, freezeColumns]);\n}\nexport function 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 !== undefined) {\n if (itemsAreEqual(sel.current.cell, item))\n return true;\n const toCheck = [sel.current.range, ...sel.current.rangeStack]; // FIXME: pointless alloc\n for (const r of toCheck) {\n // dont we have a function for this?\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}\nexport function isGroupEqual(left, right) {\n return (left ?? \"\") === (right ?? \"\");\n}\nexport function cellIsSelected(location, cell, selection) {\n if (selection.current === undefined)\n return false;\n if (location[1] !== selection.current.cell[1])\n return false;\n if (cell.span === undefined) {\n return selection.current.cell[0] === location[0];\n }\n return selection.current.cell[0] >= cell.span[0] && selection.current.cell[0] <= cell.span[1];\n}\nexport function itemIsInRect(location, rect) {\n const [x, y] = location;\n return x >= rect.x && x < rect.x + rect.width && y >= rect.y && y < rect.y + rect.height;\n}\nexport function itemsAreEqual(a, b) {\n return a?.[0] === b?.[0] && a?.[1] === b?.[1];\n}\nexport function rectBottomRight(rect) {\n return [rect.x + rect.width - 1, rect.y + rect.height - 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 === undefined) {\n return cellCol >= startX && cellCol <= endX;\n }\n const [spanStart, spanEnd] = cell.span;\n return ((spanStart >= startX && spanStart <= endX) ||\n (spanEnd >= startX && spanStart <= endX) ||\n (spanStart < startX && spanEnd > endX));\n}\nexport function cellIsInRange(location, cell, selection, includeSingleSelection) {\n let result = 0;\n if (selection.current === undefined)\n return result;\n const range = selection.current.range;\n if ((includeSingleSelection || range.height * range.width > 1) && cellIsInRect(location, cell, range)) {\n result++;\n }\n for (const r of selection.current.rangeStack) {\n if (cellIsInRect(location, cell, r)) {\n result++;\n }\n }\n return result;\n}\nexport function remapForDnDState(columns, dndState) {\n let mappedCols = columns;\n if (dndState !== undefined) {\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 }\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}\nexport function 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}\nexport function getFreezeTrailingHeight(rows, freezeTrailingRows, getRowHeight) {\n if (typeof getRowHeight === \"number\") {\n return freezeTrailingRows * getRowHeight;\n }\n else {\n let result = 0;\n for (let i = rows - freezeTrailingRows; i < rows; i++) {\n result += getRowHeight(i);\n }\n return result;\n }\n}\nexport function 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 }\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 ?? 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}\nexport function getColumnIndexForX(targetX, effectiveColumns, translateX) {\n let x = 0;\n for (const c of effectiveColumns) {\n const cx = c.sticky ? x : x + (translateX ?? 0);\n if (targetX <= cx + c.width) {\n return c.sourceIndex;\n }\n x += c.width;\n }\n return -1;\n}\nexport function getRowIndexForY(targetY, height, hasGroups, headerHeight, groupHeaderHeight, rows, rowHeight, cellYOffset, translateY, freezeTrailingRows) {\n const totalHeaderHeight = headerHeight + groupHeaderHeight;\n if (hasGroups && targetY <= groupHeaderHeight)\n return -2;\n if (targetY <= totalHeaderHeight)\n return -1;\n let y = height;\n for (let fr = 0; fr < freezeTrailingRows; fr++) {\n const row = rows - 1 - fr;\n const rh = typeof rowHeight === \"number\" ? rowHeight : rowHeight(row);\n y -= rh;\n if (targetY >= y) {\n return row;\n }\n }\n const effectiveRows = rows - freezeTrailingRows;\n const ty = targetY - (translateY ?? 0);\n if (typeof rowHeight === \"number\") {\n const target = Math.floor((ty - totalHeaderHeight) / rowHeight) + cellYOffset;\n if (target >= effectiveRows)\n return undefined;\n return target;\n }\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 undefined;\n }\n}\nlet metricsSize = 0;\nlet metricsCache = {};\nconst isSSR = typeof window === \"undefined\";\nasync function clearCacheOnLoad() {\n if (isSSR || document?.fonts?.ready === undefined)\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 ?? ctx?.font}_${baseline}`;\n}\n/** @category Drawing */\nexport function measureTextCached(s, ctx, font, baseline = \"middle\") {\n const key = makeCacheKey(s, ctx, baseline, font);\n let metrics = metricsCache[key];\n if (metrics === undefined) {\n metrics = ctx.measureText(s);\n metricsCache[key] = metrics;\n metricsSize++;\n }\n if (metricsSize > 10000) {\n metricsCache = {};\n metricsSize = 0;\n }\n return metrics;\n}\nexport function getMeasuredTextCache(s, font) {\n const key = makeCacheKey(s, undefined, \"middle\", font);\n return metricsCache[key];\n}\n/** @category Drawing */\nexport function getMiddleCenterBias(ctx, font) {\n if (typeof font !== \"string\") {\n font = font.baseFontFull;\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}\nconst 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) +\n alphabeticMetrics.actualBoundingBoxAscent / 2;\n biasCache.push({\n key: font,\n val: bias,\n });\n return bias;\n}\nexport function drawLastUpdateUnderlay(args, lastUpdate, frameTime, lastPrep, isLastCol, isLastRow) {\n const { ctx, rect, theme } = args;\n let progress = Number.MAX_SAFE_INTEGER;\n const animTime = 500;\n if (lastUpdate !== undefined) {\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 + 1, rect.y + 1, rect.width - (isLastCol ? 2 : 1), rect.height - (isLastRow ? 2 : 1));\n ctx.globalAlpha = 1;\n if (lastPrep !== undefined) {\n lastPrep.fillStyle = theme.bgSearchResult;\n }\n }\n }\n return progress < animTime;\n}\nexport function prepTextCell(args, lastPrep, overrideColor) {\n const { ctx, theme } = args;\n const result = lastPrep ?? {};\n const newFill = overrideColor ?? theme.textDark;\n if (newFill !== result.fillStyle) {\n ctx.fillStyle = newFill;\n result.fillStyle = newFill;\n }\n return result;\n}\n/** @category Drawing */\nexport function drawTextCellExternal(args, data, contentAlign) {\n const { rect, ctx, theme } = args;\n ctx.fillStyle = theme.textDark;\n drawTextCell({\n ctx: ctx,\n rect,\n theme: theme,\n }, data, contentAlign);\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 }\n else if (contentAlign === \"center\") {\n ctx.fillText(data, x + w / 2, y + h / 2 + bias);\n }\n else {\n ctx.fillText(data, x + theme.cellHorizontalPadding + 0.5, y + h / 2 + bias);\n }\n}\nexport function getEmHeight(ctx, fontStyle) {\n const textMetrics = measureTextCached(\"ABCi09jgqpy\", ctx, fontStyle); // do not question the magic string\n return textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent;\n}\nfunction truncateString(data, w) {\n if (data.includes(\"\\n\")) {\n // new lines are rare and split is relatively expensive compared to the search\n // it pays off to not do the split contantly. More accurately... it pays off not to run the regex.\n // what even is the point of this? So what if there is a /r at the end of a line? It wont be drawn anyway.\n data = data.split(/\\r?\\n/, 1)[0];\n }\n const max = w / 4; // no need to round, slice will just truncate this\n if (data.length > max) {\n data = data.slice(0, max);\n }\n return data;\n}\nfunction drawMultiLineText(ctx, data, x, y, w, h, bias, theme, contentAlign, hyperWrapping) {\n const fontStyle = theme.baseFontFull;\n const split = splitText(ctx, data, fontStyle, w - theme.cellHorizontalPadding * 2, 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 // well now we have to clip because we might render outside the cell vertically\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/** @category Drawing */\nexport function drawTextCell(args, data, contentAlign, allowWrapping, hyperWrapping) {\n const { ctx, rect, theme } = args;\n const { x, y, width: w, height: h } = rect;\n allowWrapping = allowWrapping ?? false;\n if (!allowWrapping) {\n data = truncateString(data, w);\n }\n const bias = getMiddleCenterBias(ctx, theme);\n const isRtl = direction(data) === \"rtl\";\n if (contentAlign === undefined && 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 // Use right alignment as default for RTL text\n ctx.textAlign = \"right\";\n changed = true;\n }\n else if (contentAlign !== undefined && contentAlign !== \"left\") {\n // Since default is start (=left), only apply if alignment is center or right\n ctx.textAlign = contentAlign;\n changed = true;\n }\n if (!allowWrapping) {\n drawSingleTextLine(ctx, data, x, y, w, h, bias, theme, contentAlign);\n }\n else {\n drawMultiLineText(ctx, data, x, y, w, h, bias, theme, contentAlign, hyperWrapping);\n }\n if (changed) {\n // Reset alignment to default\n ctx.textAlign = \"start\";\n }\n if (isRtl) {\n ctx.direction = \"inherit\";\n }\n }\n}\nexport function roundedRect(ctx, x, y, width, height, radius) {\n if (typeof radius === \"number\") {\n radius = { tl: radius, tr: radius, br: radius, bl: radius };\n }\n // restrict radius to a reasonable max\n radius = {\n tl: Math.max(0, Math.min(radius.tl, height / 2, width / 2)),\n tr: Math.max(0, Math.min(radius.tr, height / 2, width / 2)),\n bl: Math.max(0, Math.min(radius.bl, height / 2, width / 2)),\n br: Math.max(0, 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}\nexport function drawMenuDots(ctx, dotsX, dotsY) {\n const radius = 1.25;\n ctx.arc(dotsX, dotsY - radius * 3.5, radius, 0, 2 * Math.PI, false);\n ctx.arc(dotsX, dotsY, radius, 0, 2 * Math.PI, false);\n ctx.arc(dotsX, dotsY + radius * 3.5, radius, 0, 2 * Math.PI, false);\n}\nexport function roundedPoly(ctx, points, radiusAll) {\n // convert 2 points into vector form, polar form, and normalised\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 v1: Vector = {} as any;\n // const v2: Vector = {} as any;\n const len = points.length;\n let p1 = points[len - 1];\n // for each point\n for (let i = 0; i < len; i++) {\n let p2 = points[i % len];\n const p3 = points[(i + 1) % len];\n //-----------------------------------------\n // Part 1\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 //-----------------------------------------\n let radDirection = 1;\n let drawDirection = false;\n if (sinA90 < 0) {\n if (angle < 0) {\n angle = Math.PI + angle;\n }\n else {\n angle = Math.PI - angle;\n radDirection = -1;\n drawDirection = true;\n }\n }\n else {\n if (angle > 0) {\n radDirection = -1;\n drawDirection = true;\n }\n }\n radius = p2.radius !== undefined ? p2.radius : radiusAll;\n //-----------------------------------------\n // Part 2\n const halfAngle = angle / 2;\n //-----------------------------------------\n //-----------------------------------------\n // Part 3\n let lenOut = Math.abs((Math.cos(halfAngle) * radius) / Math.sin(halfAngle));\n //-----------------------------------------\n //-----------------------------------------\n // Special part A\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 }\n else {\n cRadius = radius;\n }\n //-----------------------------------------\n // Part 4\n let x = p2.x + v2.nx * lenOut;\n let y = p2.y + v2.ny * lenOut;\n //-----------------------------------------\n // Part 5\n x += -v2.ny * cRadius * radDirection;\n y += v2.nx * cRadius * radDirection;\n //-----------------------------------------\n // Part 6\n ctx.arc(x, y, cRadius, v1.ang + (Math.PI / 2) * radDirection, v2.ang - (Math.PI / 2) * radDirection, drawDirection);\n //-----------------------------------------\n p1 = p2;\n p2 = p3;\n }\n ctx.closePath();\n}\nexport function computeBounds(col, row, width, height, groupHeaderHeight, totalHeaderHeight, cellXOffset, cellYOffset, translateX, translateY, rows, freezeColumns, freezeTrailingRows, mappedColumns, rowHeight) {\n const result = {\n x: 0,\n y: totalHeaderHeight + translateY,\n width: 0,\n height: 0,\n };\n if (col >= mappedColumns.length || row >= rows || row < -2 || col < 0) {\n return result;\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 }\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 }\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 &&\n isGroupEqual(mappedColumns[start - 1].group, group) &&\n 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 &&\n isGroupEqual(mappedColumns[end + 1].group, group) &&\n 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 }\n else if (row >= rows - freezeTrailingRows) {\n let dy = rows - row;\n result.y = height;\n while (dy > 0) {\n const r = row + dy - 1;\n result.height = typeof rowHeight === \"number\" ? rowHeight : rowHeight(r);\n result.y -= result.height;\n dy--;\n }\n result.height += 1;\n }\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 }\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//# sourceMappingURL=data-grid-lib.js.map","import { deepEqual } from \"./support.js\";\n// max safe int 2^53 - 1 (minus 1 omitted from here on)\n// max safe columns is 2^21 or 2,097,151\n// max safe rows is 2^32 or 4,294,967,295\n// If 3 rows render as an inch, then the max safe height is 1,431,655,765 inches or 22,426,868 miles\n// the distance to the moon is 238,900 miles, so this would give you a data grid that goes to the moon and back 94 times\n// seems fine\nconst rowShift = 1 << 21;\nexport function packColRowToNumber(col, row) {\n return (row + 2) * rowShift + col;\n}\nexport function unpackCol(packed) {\n return packed % rowShift;\n}\nexport function unpackRow(packed) {\n return Math.floor(packed / rowShift) - 2;\n}\nexport function unpackNumberToColRow(packed) {\n const col = unpackCol(packed);\n const row = unpackRow(packed);\n return [col, row];\n}\nexport class WindowingTrackerBase {\n visibleWindow = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n freezeCols = 0;\n freezeRows = [];\n isInWindow = (packed) => {\n const col = unpackCol(packed);\n const row = unpackRow(packed);\n const w = this.visibleWindow;\n const colInWindow = (col >= w.x && col <= w.x + w.width) || col < this.freezeCols;\n const rowInWindow = (row >= w.y && row <= w.y + w.height) || this.freezeRows.includes(row);\n return colInWindow && rowInWindow;\n };\n setWindow(newWindow, freezeCols, freezeRows) {\n if (this.visibleWindow.x === newWindow.x &&\n this.visibleWindow.y === newWindow.y &&\n this.visibleWindow.width === newWindow.width &&\n this.visibleWindow.height === newWindow.height &&\n this.freezeCols === freezeCols &&\n deepEqual(this.freezeRows, freezeRows))\n return;\n this.visibleWindow = newWindow;\n this.freezeCols = freezeCols;\n this.freezeRows = freezeRows;\n this.clearOutOfWindow();\n }\n}\nexport class RenderStateProvider extends WindowingTrackerBase {\n cache = new Map();\n setValue = (location, state) => {\n this.cache.set(packColRowToNumber(location[0], location[1]), state);\n };\n getValue = (location) => {\n return this.cache.get(packColRowToNumber(location[0], location[1]));\n };\n clearOutOfWindow = () => {\n for (const [key] of this.cache.entries()) {\n if (!this.isInWindow(key)) {\n this.cache.delete(key);\n }\n }\n };\n}\n//# sourceMappingURL=render-state-provider.js.map","import { packColRowToNumber, unpackNumberToColRow, unpackRow } from \"../../common/render-state-provider.js\";\nexport class CellSet {\n cells;\n constructor(items = []) {\n this.cells = new Set(items.map(x => packColRowToNumber(x[0], x[1])));\n }\n add(cell) {\n this.cells.add(packColRowToNumber(cell[0], cell[1]));\n }\n has(cell) {\n if (cell === undefined)\n return false;\n return this.cells.has(packColRowToNumber(cell[0], cell[1]));\n }\n remove(cell) {\n this.cells.delete(packColRowToNumber(cell[0], cell[1]));\n }\n clear() {\n this.cells.clear();\n }\n get size() {\n return this.cells.size;\n }\n hasHeader() {\n for (const cellNumber of this.cells) {\n const row = unpackRow(cellNumber);\n if (row < 0)\n return true;\n }\n return false;\n }\n hasItemInRectangle(rect) {\n for (let row = rect.y; row < rect.y + rect.height; row++) {\n for (let col = rect.x; col < rect.x + rect.width; col++) {\n if (this.cells.has(packColRowToNumber(col, row))) {\n return true;\n }\n }\n }\n return false;\n }\n hasItemInRegion(rect) {\n for (const r of rect) {\n if (this.hasItemInRectangle(r)) {\n return true;\n }\n }\n return false;\n }\n *values() {\n for (const cellNumber of this.cells) {\n yield unpackNumberToColRow(cellNumber);\n }\n }\n}\n//# sourceMappingURL=cell-set.js.map","import {} from \"./sprites.js\";\nfunction getColors(variant, theme) {\n if (variant === \"normal\") {\n return [theme.bgIconHeader, theme.fgIconHeader];\n }\n else if (variant === \"selected\") {\n return [\"white\", theme.accentColor];\n }\n else {\n return [theme.accentColor, theme.bgHeader];\n }\n}\n/** @category Columns */\nexport class SpriteManager {\n onSettled;\n spriteMap = new Map();\n headerIcons;\n inFlight = 0;\n constructor(headerIcons, onSettled) {\n this.onSettled = onSettled;\n this.headerIcons = headerIcons ?? {};\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 === undefined) {\n const spriteCb = this.headerIcons[sprite];\n if (spriteCb === undefined)\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 === undefined)\n return;\n this.inFlight++;\n promise\n .then(() => {\n spriteCtx.drawImage(imgSource, 0, 0, rSize, rSize);\n })\n .finally(() => {\n this.inFlight--;\n if (this.inFlight === 0) {\n this.onSettled();\n }\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//# sourceMappingURL=data-grid-sprites.js.map","import {} from \"../data-grid-types.js\";\nimport { isGroupEqual } from \"./data-grid-lib.js\";\nexport function getSkipPoint(drawRegions) {\n if (drawRegions.length === 0)\n return undefined;\n let drawRegionsLowestY;\n for (const dr of drawRegions) {\n drawRegionsLowestY = Math.min(drawRegionsLowestY ?? dr.y, dr.y);\n }\n}\nexport function walkRowsInCol(startRow, drawY, height, rows, getRowHeight, freezeTrailingRows, hasAppendRow, skipToY, cb) {\n skipToY = skipToY ?? drawY;\n let y = drawY;\n let row = startRow;\n const rowEnd = rows - freezeTrailingRows;\n let didBreak = false;\n while (y < height && row < rowEnd) {\n const rh = getRowHeight(row);\n if (y + rh > skipToY && cb(y, row, rh, false, hasAppendRow && row === rows - 1) === true) {\n didBreak = true;\n break;\n }\n y += rh;\n row++;\n }\n if (didBreak)\n return;\n y = height;\n for (let fr = 0; fr < freezeTrailingRows; fr++) {\n row = rows - 1 - fr;\n const rh = getRowHeight(row);\n y -= rh;\n cb(y, row, rh, true, hasAppendRow && row === rows - 1);\n }\n}\nexport function walkColumns(effectiveCols, cellYOffset, translateX, translateY, totalHeaderHeight, cb) {\n let x = 0;\n let clipX = 0; // this tracks the total width of sticky cols\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, c.sticky ? 0 : clipX, cellYOffset) === true) {\n break;\n }\n x += c.width;\n clipX += c.sticky ? c.width : 0;\n }\n}\nexport function walkGroups(effectiveCols, width, translateX, groupHeaderHeight, cb) {\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 &&\n isGroupEqual(effectiveCols[end].group, startCol.group) &&\n 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([startCol.sourceIndex, effectiveCols[end - 1].sourceIndex], startCol.group ?? \"\", localX + delta, 0, w, groupHeaderHeight);\n x += boxWidth;\n }\n}\nexport function getSpanBounds(span, cellX, cellY, cellW, cellH, column, allColumns) {\n const [startCol, endCol] = span;\n let frozenRect;\n let contentRect;\n const firstNonSticky = allColumns.find(x => !x.sticky)?.sourceIndex ?? 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}\n//# sourceMappingURL=data-grid-render.walk.js.map","/* eslint-disable unicorn/prefer-ternary */\nimport { itemIsInRect } from \"../internal/data-grid/render/data-grid-lib.js\";\nexport function getClosestRect(rect, px, py, allowedDirections) {\n if (allowedDirections === \"any\")\n return combineRects(rect, { x: px, y: py, width: 1, height: 1 });\n if (allowedDirections === \"vertical\")\n px = rect.x;\n if (allowedDirections === \"horizontal\")\n py = rect.y;\n // Check if the point is inside the rectangle\n if (itemIsInRect([px, py], rect)) {\n return undefined;\n }\n // Calculate distances to the closest edges\n const distanceToLeft = px - rect.x;\n const distanceToRight = rect.x + rect.width - px;\n const distanceToTop = py - rect.y + 1;\n const distanceToBottom = rect.y + rect.height - py;\n // Find the minimum distance\n const minDistance = Math.min(allowedDirections === \"vertical\" ? Number.MAX_SAFE_INTEGER : distanceToLeft, allowedDirections === \"vertical\" ? Number.MAX_SAFE_INTEGER : distanceToRight, allowedDirections === \"horizontal\" ? Number.MAX_SAFE_INTEGER : distanceToTop, allowedDirections === \"horizontal\" ? Number.MAX_SAFE_INTEGER : distanceToBottom);\n // eslint-disable-next-line unicorn/prefer-switch\n if (minDistance === distanceToBottom) {\n return { x: rect.x, y: rect.y + rect.height, width: rect.width, height: py - rect.y - rect.height + 1 };\n }\n else if (minDistance === distanceToTop) {\n return { x: rect.x, y: py, width: rect.width, height: rect.y - py };\n }\n else if (minDistance === distanceToRight) {\n return { x: rect.x + rect.width, y: rect.y, width: px - rect.x - rect.width + 1, height: rect.height };\n }\n else {\n return { x: px, y: rect.y, width: rect.x - px, height: rect.height };\n }\n}\nexport function intersectRect(x1, y1, w1, h1, x2, y2, w2, h2) {\n return x1 <= x2 + w2 && x2 <= x1 + w1 && y1 <= y2 + h2 && y2 <= y1 + h1;\n}\nexport function pointInRect(rect, x, y) {\n return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;\n}\nexport function combineRects(a, b) {\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n const width = Math.max(a.x + a.width, b.x + b.width) - x;\n const height = Math.max(a.y + a.height, b.y + b.height) - y;\n return { x, y, width, height };\n}\nexport function rectContains(a, b) {\n return a.x <= b.x && a.y <= b.y && a.x + a.width >= b.x + b.width && a.y + a.height >= b.y + b.height;\n}\n/**\n * This function is absolutely critical for the performance of the fill handle and highlight regions. If you don't\n * hug rectanges when they are dashed and they are huge you will get giant GPU stalls. The reason for the mod is\n * if you don't respect the dash stroke size you will get weird artificts as the rectangle changes sizes (the dashes\n * won't line up from one frame to the next)\n */\nexport function hugRectToTarget(rect, width, height, mod) {\n // Combine checks for early return\n if (rect.x > width ||\n rect.y > height ||\n (rect.x < 0 && rect.y < 0 && rect.x + rect.width > width && rect.y + rect.height > height)) {\n return undefined;\n }\n // Direct return if the rectangle is completely within bounds\n if (rect.x >= 0 && rect.y >= 0 && rect.x + rect.width <= width && rect.y + rect.height <= height) {\n return rect;\n }\n // Pre-compute constants for boundaries, we are giving ourselves slop here because we don't want to have weird\n // issues when scaling is applied. 4px is more than enough slop.\n const leftMax = -4;\n const topMax = -4;\n const rightMax = width + 4;\n const bottomMax = height + 4;\n // Pre-compute boundary overflows\n const leftOverflow = leftMax - rect.x;\n const rightOverflow = rect.x + rect.width - rightMax;\n const topOverflow = topMax - rect.y;\n const bottomOverflow = rect.y + rect.height - bottomMax;\n // Adjust if necessary, using simplified calculations\n const left = leftOverflow > 0 ? rect.x + Math.floor(leftOverflow / mod) * mod : rect.x;\n const right = rightOverflow > 0 ? rect.x + rect.width - Math.floor(rightOverflow / mod) * mod : rect.x + rect.width;\n const top = topOverflow > 0 ? rect.y + Math.floor(topOverflow / mod) * mod : rect.y;\n const bottom = bottomOverflow > 0 ? rect.y + rect.height - Math.floor(bottomOverflow / mod) * mod : rect.y + rect.height;\n return { x: left, y: top, width: right - left, height: bottom - top };\n}\nexport function splitRectIntoRegions(rect, splitIndicies, width, height, splitLocations) {\n const [lSplit, tSplit, rSplit, bSplit] = splitIndicies;\n const [lClip, tClip, rClip, bClip] = splitLocations;\n const { x: inX, y: inY, width: inW, height: inH } = rect;\n const result = [];\n if (inW <= 0 || inH <= 0)\n return result;\n const inRight = inX + inW;\n const inBottom = inY + inH;\n // The goal is to split the inbound rect into up to 9 regions based on the provided split indicies which are\n // more or less cut lines. The cut lines are whole numbers as is the rect. We are dividing cells on a table.\n // In theory there can be up to 9 regions returned, so we need to be careful to make sure we get them all and\n // not return any empty regions.\n // compute some handy values\n const isOverLeft = inX < lSplit;\n const isOverTop = inY < tSplit;\n const isOverRight = inX + inW > rSplit;\n const isOverBottom = inY + inH > bSplit;\n const isOverCenterVert = (inX >= lSplit && inX < rSplit) ||\n (inRight > lSplit && inRight <= rSplit) ||\n (inX < lSplit && inRight > rSplit);\n const isOverCenterHoriz = (inY >= tSplit && inY < bSplit) ||\n (inBottom > tSplit && inBottom <= bSplit) ||\n (inY < tSplit && inBottom > bSplit);\n const isOverCenter = isOverCenterVert && isOverCenterHoriz;\n // center\n if (isOverCenter) {\n const x = Math.max(inX, lSplit);\n const y = Math.max(inY, tSplit);\n const right = Math.min(inRight, rSplit);\n const bottom = Math.min(inBottom, bSplit);\n result.push({\n rect: { x, y, width: right - x, height: bottom - y },\n clip: {\n x: lClip,\n y: tClip,\n width: rClip - lClip + 1,\n height: bClip - tClip + 1,\n },\n });\n }\n // top left\n if (isOverLeft && isOverTop) {\n const x = inX;\n const y = inY;\n const right = Math.min(inRight, lSplit);\n const bottom = Math.min(inBottom, tSplit);\n result.push({\n rect: {\n x,\n y,\n width: right - x,\n height: bottom - y,\n },\n clip: {\n x: 0,\n y: 0,\n width: lClip + 1,\n height: tClip + 1,\n },\n });\n }\n // top center\n if (isOverTop && isOverCenterVert) {\n const x = Math.max(inX, lSplit);\n const y = inY;\n const right = Math.min(inRight, rSplit);\n const bottom = Math.min(inBottom, tSplit);\n result.push({\n rect: {\n x,\n y,\n width: right - x,\n height: bottom - y,\n },\n clip: {\n x: lClip,\n y: 0,\n width: rClip - lClip + 1,\n height: tClip + 1,\n },\n });\n }\n // top right\n if (isOverTop && isOverRight) {\n const x = Math.max(inX, rSplit);\n const y = inY;\n const right = inRight;\n const bottom = Math.min(inBottom, tSplit);\n result.push({\n rect: {\n x,\n y,\n width: right - x,\n height: bottom - y,\n },\n clip: {\n x: rClip,\n y: 0,\n width: width - rClip + 1,\n height: tClip + 1,\n },\n });\n }\n // center left\n if (isOverLeft && isOverCenterHoriz) {\n const x = inX;\n const y = Math.max(inY, tSplit);\n const right = Math.min(inRight, lSplit);\n const bottom = Math.min(inBottom, bSplit);\n result.push({\n rect: {\n x,\n y,\n width: right - x,\n height: bottom - y,\n },\n clip: {\n x: 0,\n y: tClip,\n width: lClip + 1,\n height: bClip - tClip + 1,\n },\n });\n }\n // center right\n if (isOverRight && isOverCenterHoriz) {\n const x = Math.max(inX, rSplit);\n const y = Math.max(inY, tSplit);\n const right = inRight;\n const bottom = Math.min(inBottom, bSplit);\n result.push({\n rect: {\n x,\n y,\n width: right - x,\n height: bottom - y,\n },\n clip: {\n x: rClip,\n y: tClip,\n width: width - rClip + 1,\n height: bClip - tClip + 1,\n },\n });\n }\n // bottom left\n if (isOverLeft && isOverBottom) {\n const x = inX;\n const y = Math.max(inY, bSplit);\n const right = Math.min(inRight, lSplit);\n const bottom = inBottom;\n result.push({\n rect: {\n x,\n y,\n width: right - x,\n height: bottom - y,\n },\n clip: {\n x: 0,\n y: bClip,\n width: lClip + 1,\n height: height - bClip + 1,\n },\n });\n }\n // bottom center\n if (isOverBottom && isOverCenterVert) {\n const x = Math.max(inX, lSplit);\n const y = Math.max(inY, bSplit);\n const right = Math.min(inRight, rSplit);\n const bottom = inBottom;\n result.push({\n rect: {\n x,\n y,\n width: right - x,\n height: bottom - y,\n },\n clip: {\n x: lClip,\n y: bClip,\n width: rClip - lClip + 1,\n height: height - bClip + 1,\n },\n });\n }\n // bottom right\n if (isOverRight && isOverBottom) {\n const x = Math.max(inX, rSplit);\n const y = Math.max(inY, bSplit);\n const right = inRight;\n const bottom = inBottom;\n result.push({\n rect: {\n x,\n y,\n width: right - x,\n height: bottom - y,\n },\n clip: {\n x: rClip,\n y: bClip,\n width: width - rClip + 1,\n height: height - bClip + 1,\n },\n });\n }\n return result;\n}\n//# sourceMappingURL=math.js.map","/* eslint-disable sonarjs/no-duplicate-string */\n/* eslint-disable unicorn/no-for-loop */\nimport { CompactSelection, GridColumnIcon, GridCellKind, isInnerOnlyCell, } from \"../data-grid-types.js\";\nimport { CellSet } from \"../cell-set.js\";\nimport { cellIsSelected, cellIsInRange, getFreezeTrailingHeight, drawLastUpdateUnderlay, } from \"./data-grid-lib.js\";\nimport { mergeAndRealizeTheme } from \"../../../common/styles.js\";\nimport { blend } from \"../color-parser.js\";\nimport { intersectRect } from \"../../../common/math.js\";\nimport { getSkipPoint, getSpanBounds, walkColumns, walkRowsInCol } from \"./data-grid-render.walk.js\";\nconst loadingCell = {\n kind: GridCellKind.Loading,\n allowOverlay: false,\n};\n// preppable items:\n// - font\n// - fillStyle\n// Column draw loop prep cycle\n// - Prep item\n// - Prep sets props\n// - Prep returns list of cared about props\n// - Draw item\n// - Loop may set some items, if present in args list, set undefined\n// - Prep next item, giving previous result\n// - If next item type is different, de-prep\n// - Result per column\nexport function drawCells(ctx, effectiveColumns, allColumns, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, getCellContent, getGroupDetails, getRowThemeOverride, disabledRows, isFocused, drawFocus, freezeTrailingRows, hasAppendRow, drawRegions, damage, selection, prelightCells, highlightRegions, imageLoader, spriteManager, hoverValues, hoverInfo, drawCellCallback, hyperWrapping, outerTheme, enqueue, renderStateProvider, getCellRenderer, overrideCursor, minimumCellWidth) {\n let toDraw = damage?.size ?? Number.MAX_SAFE_INTEGER;\n const frameTime = performance.now();\n let font = outerTheme.baseFontFull;\n ctx.font = font;\n const deprepArg = { ctx };\n const cellIndex = [0, 0];\n const freezeTrailingRowsHeight = freezeTrailingRows > 0 ? getFreezeTrailingHeight(rows, freezeTrailingRows, getRowHeight) : 0;\n let result;\n let handledSpans = undefined;\n const skipPoint = getSkipPoint(drawRegions);\n walkColumns(effectiveColumns, cellYOffset, translateX, translateY, totalHeaderHeight, (c, drawX, colDrawStartY, clipX, startRow) => {\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(c.group ?? \"\").overrideTheme;\n const colTheme = c.themeOverride === undefined && groupTheme === undefined\n ? outerTheme\n : mergeAndRealizeTheme(outerTheme, groupTheme, c.themeOverride);\n const colFont = colTheme.baseFontFull;\n if (colFont !== font) {\n font = colFont;\n ctx.font = colFont;\n }\n reclip();\n let prepResult = undefined;\n walkRowsInCol(startRow, colDrawStartY, height, rows, getRowHeight, freezeTrailingRows, hasAppendRow, skipPoint, (drawY, row, rh, isSticky, isTrailingRow) => {\n if (row < 0)\n return;\n cellIndex[0] = c.sourceIndex;\n cellIndex[1] = row;\n // if (damage !== undefined && !damage.some(d => d[0] === c.sourceIndex && d[1] === row)) {\n // return;\n // }\n // if (\n // drawRegions.length > 0 &&\n // !drawRegions.some(dr => intersectRect(drawX, drawY, c.width, rh, dr.x, dr.y, dr.width, dr.height))\n // ) {\n // return;\n // }\n // These are dumb versions of the above. I cannot for the life of believe that this matters but this is\n // the tightest part of the draw loop and the allocations above actually has a very measurable impact\n // on performance. For the love of all that is unholy please keep checking this again in the future.\n // As soon as this doesn't have any impact of note go back to the saner looking code. The smoke test\n // here is to scroll to the bottom of a test case first, then scroll back up while profiling and see\n // how many major GC collections you get. These allocate a lot of objects.\n if (damage !== undefined && !damage.has(cellIndex)) {\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(cellIndex) : loadingCell;\n let cellX = drawX;\n let cellWidth = c.width;\n let drawingSpan = false;\n let skipContents = false;\n if (cell.span !== undefined) {\n const [startCol, endCol] = cell.span;\n const spanKey = `${row},${startCol},${endCol},${c.sticky}`; //alloc\n if (handledSpans === undefined)\n handledSpans = new Set();\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] !== undefined) {\n skipContents = true;\n }\n if (area !== undefined) {\n cellX = area.x;\n cellWidth = area.width;\n handledSpans.add(spanKey);\n ctx.restore();\n prepResult = undefined;\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 === undefined) {\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 }\n else {\n toDraw--;\n return;\n }\n }\n const rowTheme = getRowThemeOverride?.(row);\n const trailingTheme = isTrailingRow && c.trailingRowOptions?.themeOverride !== undefined\n ? c.trailingRowOptions?.themeOverride\n : undefined;\n const theme = cell.themeOverride === undefined && rowTheme === undefined && trailingTheme === undefined\n ? colTheme\n : mergeAndRealizeTheme(colTheme, rowTheme, trailingTheme, cell.themeOverride); //alloc\n ctx.beginPath();\n const isSelected = cellIsSelected(cellIndex, cell, selection);\n let accentCount = cellIsInRange(cellIndex, cell, selection, drawFocus);\n const spanIsHighlighted = cell.span !== undefined &&\n selection.columns.some(index => cell.span !== undefined && index >= cell.span[0] && index <= cell.span[1] //alloc\n );\n if (isSelected && !isFocused && drawFocus) {\n accentCount = 0;\n }\n else if (isSelected && drawFocus) {\n accentCount = Math.max(accentCount, 1);\n }\n if (spanIsHighlighted) {\n accentCount++;\n }\n if (!isSelected) {\n if (rowSelected)\n accentCount++;\n if (colSelected && !isTrailingRow)\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 }\n else if (prelightCells !== undefined) {\n for (const pre of prelightCells) {\n if (pre[0] === c.sourceIndex && pre[1] === row) {\n fill = blend(theme.bgSearchResult, fill);\n break;\n }\n }\n }\n if (highlightRegions !== undefined) {\n for (let i = 0; i < highlightRegions.length; i++) {\n const region = highlightRegions[i];\n const r = region.range;\n if (region.style !== \"solid-outline\" &&\n r.x <= c.sourceIndex &&\n c.sourceIndex < r.x + r.width &&\n r.y <= row &&\n row < r.y + r.height) {\n fill = blend(region.color, fill);\n }\n }\n }\n let didDamageClip = false;\n if (damage !== undefined) {\n // we want to clip each cell individually rather than form a super clip region. The reason for\n // this is passing too many clip regions to the GPU at once can cause a performance hit. This\n // allows us to damage a large number of cells at once without issue.\n const top = drawY + 1;\n const bottom = isSticky\n ? top + rh - 1\n : Math.min(top + rh - 1, height - freezeTrailingRowsHeight);\n const h = bottom - top;\n // however, not clipping at all is even better. We want to clip if we are the left most col\n // or overlapping the bottom clip area.\n if (h !== rh - 1 || cellX + 1 <= clipX) {\n didDamageClip = true;\n ctx.save();\n ctx.beginPath();\n ctx.rect(cellX + 1, top, cellWidth - 1, h);\n ctx.clip();\n }\n // we also need to make sure to wipe the contents. Since the fill can do that lets repurpose\n // that call to avoid an extra draw call.\n fill = fill === undefined ? theme.bgCell : blend(fill, theme.bgCell);\n }\n const isLastColumn = c.sourceIndex === allColumns.length - 1;\n const isLastRow = row === rows - 1;\n if (fill !== undefined) {\n ctx.fillStyle = fill;\n if (prepResult !== undefined) {\n prepResult.fillStyle = fill;\n }\n if (damage !== undefined) {\n // this accounts for the fill handle outline being drawn inset on these cells. We do this\n // because technically the bottom right corner of the outline are on other cells.\n ctx.fillRect(cellX + 1, drawY + 1, cellWidth - (isLastColumn ? 2 : 1), rh - (isLastRow ? 2 : 1));\n }\n else {\n ctx.fillRect(cellX, drawY, cellWidth, rh);\n }\n }\n if (cell.style === \"faded\") {\n ctx.globalAlpha = 0.6;\n }\n let hoverValue;\n for (let i = 0; i < hoverValues.length; i++) {\n const hv = hoverValues[i];\n if (hv.item[0] === c.sourceIndex && hv.item[1] === row) {\n hoverValue = hv;\n break;\n }\n }\n if (cellWidth > minimumCellWidth && !skipContents) {\n const cellFont = theme.baseFontFull;\n if (cellFont !== font) {\n ctx.font = cellFont;\n font = cellFont;\n }\n prepResult = drawCell(ctx, cell, c.sourceIndex, row, isLastColumn, isLastRow, cellX, drawY, cellWidth, rh, accentCount > 0, theme, fill ?? theme.bgCell, imageLoader, spriteManager, hoverValue?.hoverAmount ?? 0, hoverInfo, hyperWrapping, frameTime, drawCellCallback, prepResult, enqueue, renderStateProvider, getCellRenderer, overrideCursor);\n }\n if (didDamageClip) {\n ctx.restore();\n }\n if (cell.style === \"faded\") {\n ctx.globalAlpha = 1;\n }\n toDraw--;\n if (drawingSpan) {\n ctx.restore();\n prepResult?.deprep?.(deprepArg);\n prepResult = undefined;\n reclip();\n font = colFont;\n ctx.font = colFont;\n }\n return toDraw <= 0;\n });\n ctx.restore();\n return toDraw <= 0;\n });\n return result;\n}\nconst allocatedItem = [0, 0];\nconst reusableRect = { x: 0, y: 0, width: 0, height: 0 };\nconst drawState = [undefined, () => undefined];\nlet animationFrameRequested = false;\nfunction animRequest() {\n animationFrameRequested = true;\n}\nexport function drawCell(ctx, cell, col, row, isLastCol, isLastRow, x, y, w, h, highlighted, theme, finalCellFillColor, imageLoader, spriteManager, hoverAmount, hoverInfo, hyperWrapping, frameTime, drawCellCallback, lastPrep, enqueue, renderStateProvider, getCellRenderer, overrideCursor) {\n let hoverX;\n let hoverY;\n if (hoverInfo !== undefined && hoverInfo[0][0] === col && hoverInfo[0][1] === row) {\n hoverX = hoverInfo[1][0];\n hoverY = hoverInfo[1][1];\n }\n let result = undefined;\n allocatedItem[0] = col;\n allocatedItem[1] = row;\n reusableRect.x = x;\n reusableRect.y = y;\n reusableRect.width = w;\n reusableRect.height = h;\n drawState[0] = renderStateProvider.getValue(allocatedItem);\n drawState[1] = (val) => renderStateProvider.setValue(allocatedItem, val); //alloc\n animationFrameRequested = false;\n const args = {\n //alloc\n ctx,\n theme,\n col,\n row,\n cell,\n rect: reusableRect,\n highlighted,\n cellFillColor: finalCellFillColor,\n hoverAmount,\n frameTime,\n hoverX,\n drawState,\n hoverY,\n imageLoader,\n spriteManager,\n hyperWrapping,\n overrideCursor: hoverX !== undefined ? overrideCursor : undefined,\n requestAnimationFrame: animRequest,\n };\n const needsAnim = drawLastUpdateUnderlay(args, cell.lastUpdated, frameTime, lastPrep, isLastCol, isLastRow);\n const r = getCellRenderer(cell);\n if (r !== undefined) {\n if (lastPrep?.renderer !== r) {\n lastPrep?.deprep?.(args);\n lastPrep = undefined;\n }\n const partialPrepResult = r.drawPrep?.(args, lastPrep);\n if (drawCellCallback !== undefined && !isInnerOnlyCell(args.cell)) {\n drawCellCallback(args, () => r.draw(args, cell));\n }\n else {\n r.draw(args, cell);\n }\n result =\n partialPrepResult === undefined\n ? undefined\n : {\n deprep: partialPrepResult?.deprep,\n fillStyle: partialPrepResult?.fillStyle,\n font: partialPrepResult?.font,\n renderer: r,\n };\n }\n if (needsAnim || animationFrameRequested)\n enqueue?.(allocatedItem);\n return result;\n}\n//# sourceMappingURL=data-grid-render.cells.js.map","import { assertNever } from \"../../../common/support.js\";\nimport { getSquareWidth, getSquareXPosFromAlign, getSquareBB, pointIsWithinBB } from \"../../../common/utils.js\";\nimport { roundedRect } from \"./data-grid-lib.js\";\nimport { BooleanEmpty, BooleanIndeterminate } from \"../data-grid-types.js\";\nexport function drawCheckbox(ctx, theme, checked, x, y, width, height, highlighted, hoverX = -20, hoverY = -20, maxSize = 32, alignment = \"center\", style = \"square\") {\n const centerY = Math.floor(y + height / 2);\n const rectBordRadius = style === \"circle\" ? 10000 : theme.roundingRadius ?? 4;\n let checkBoxWidth = getSquareWidth(maxSize, height, theme.cellVerticalPadding);\n let 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(ctx, posX - checkBoxWidth / 2, centerY - checkBoxWidth / 2, checkBoxWidth, checkBoxWidth, rectBordRadius);\n if (style === \"circle\") {\n checkBoxHalfWidth *= 0.8;\n checkBoxWidth *= 0.8;\n }\n ctx.fillStyle = highlighted ? theme.accentColor : theme.textMedium;\n ctx.fill();\n ctx.beginPath();\n ctx.moveTo(posX - checkBoxHalfWidth + checkBoxWidth / 4.23, centerY - checkBoxHalfWidth + checkBoxWidth / 1.97);\n ctx.lineTo(posX - checkBoxHalfWidth + checkBoxWidth / 2.42, centerY - checkBoxHalfWidth + checkBoxWidth / 1.44);\n ctx.lineTo(posX - checkBoxHalfWidth + checkBoxWidth / 1.29, centerY - checkBoxHalfWidth + checkBoxWidth / 3.25);\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(ctx, posX - checkBoxWidth / 2 + 0.5, centerY - checkBoxWidth / 2 + 0.5, checkBoxWidth - 1, checkBoxWidth - 1, rectBordRadius);\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(ctx, posX - checkBoxWidth / 2, centerY - checkBoxWidth / 2, checkBoxWidth, checkBoxWidth, rectBordRadius);\n ctx.fillStyle = hovered ? theme.textMedium : theme.textLight;\n ctx.fill();\n if (style === \"circle\") {\n checkBoxHalfWidth *= 0.8;\n checkBoxWidth *= 0.8;\n }\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}\n//# sourceMappingURL=draw-checkbox.js.map","import { pointInRect } from \"../../../common/math.js\";\nimport { mergeAndRealizeTheme } from \"../../../common/styles.js\";\nimport { direction } from \"../../../common/utils.js\";\nimport { withAlpha } from \"../color-parser.js\";\nimport { GridColumnMenuIcon } from \"../data-grid-types.js\";\nimport { drawMenuDots, getMiddleCenterBias, roundedPoly } from \"./data-grid-lib.js\";\nimport { walkColumns, walkGroups } from \"./data-grid-render.walk.js\";\nimport { drawCheckbox } from \"./draw-checkbox.js\";\nexport function drawGridHeaders(ctx, effectiveCols, enableGroups, hovered, width, translateX, headerHeight, groupHeaderHeight, dragAndDropState, isResizing, selection, outerTheme, spriteManager, hoverValues, verticalBorder, getGroupDetails, damage, drawHeaderCallback, touchMode) {\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] = hovered?.[0] ?? [];\n const font = outerTheme.headerFontFull;\n // Assinging the context font too much can be expensive, it can be worth it to minimze this\n ctx.font = font;\n walkColumns(effectiveCols, 0, translateX, 0, totalHeaderHeight, (c, x, _y, clipX) => {\n if (damage !== undefined && !damage.has([c.sourceIndex, -1]))\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(c.group ?? \"\").overrideTheme;\n const theme = c.themeOverride === undefined && groupTheme === undefined\n ? outerTheme\n : mergeAndRealizeTheme(outerTheme, groupTheme, c.themeOverride);\n if (theme.bgHeader !== outerTheme.bgHeader) {\n ctx.fillStyle = theme.bgHeader;\n ctx.fill();\n }\n if (theme !== outerTheme) {\n ctx.font = theme.baseFontFull;\n }\n const selected = selection.columns.hasIndex(c.sourceIndex);\n const noHover = dragAndDropState !== undefined || isResizing;\n const hoveredBoolean = !noHover && hRow === -1 && hCol === c.sourceIndex;\n const hover = noHover\n ? 0\n : hoverValues.find(s => s.item[0] === c.sourceIndex && s.item[1] === -1)?.hoverAmount ?? 0;\n const hasSelectedCell = selection?.current !== undefined && 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 }\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(ctx, x, y, c.width, headerHeight, c, selected, theme, hoveredBoolean, hasSelectedCell, hover, spriteManager, drawHeaderCallback, touchMode);\n ctx.restore();\n });\n if (enableGroups) {\n drawGroups(ctx, effectiveCols, width, translateX, groupHeaderHeight, hovered, outerTheme, spriteManager, hoverValues, verticalBorder, getGroupDetails, damage);\n }\n}\nexport function drawGroups(ctx, effectiveCols, width, translateX, groupHeaderHeight, hovered, theme, spriteManager, _hoverValues, verticalBorder, getGroupDetails, damage) {\n const xPad = 8;\n const [hCol, hRow] = hovered?.[0] ?? [];\n let finalX = 0;\n walkGroups(effectiveCols, width, translateX, groupHeaderHeight, (span, groupName, x, y, w, h) => {\n if (damage !== undefined &&\n !damage.hasItemInRectangle({\n x: span[0],\n y: -2,\n width: span[1] - span[0] + 1,\n height: 1,\n }))\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?.overrideTheme === undefined ? theme : mergeAndRealizeTheme(theme, group.overrideTheme);\n const isHovered = hRow === -2 && hCol !== undefined && 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 = groupTheme.textGroupHeader ?? groupTheme.textHeader;\n if (group !== undefined) {\n let drawX = x;\n if (group.icon !== undefined) {\n spriteManager.drawSprite(group.icon, \"normal\", ctx, drawX + xPad, (groupHeaderHeight - 20) / 2, 20, groupTheme);\n drawX += 26;\n }\n ctx.fillText(group.name, drawX + xPad, groupHeaderHeight / 2 + getMiddleCenterBias(ctx, theme.headerFontFull));\n if (group.actions !== undefined && 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 // eslint-disable-next-line prefer-const\n const [mouseX, mouseY] = hovered?.[1] ?? [-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(action.icon, \"normal\", ctx, box.x + box.width / 2 - 10, box.y + box.height / 2 - 10, 20, groupTheme);\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}\nconst menuButtonSize = 30;\nexport function 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 y: Math.max(y, y + height / 2 - menuButtonSize / 2),\n width: menuButtonSize,\n height: Math.min(menuButtonSize, height),\n };\n}\nexport function 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 drawHeaderInner(ctx, x, y, width, height, c, selected, theme, isHovered, hoverAmount, spriteManager, touchMode, isRtl, menuBounds) {\n if (c.rowMarker !== undefined) {\n const checked = c.rowMarkerChecked;\n if (checked !== true) {\n ctx.globalAlpha = hoverAmount;\n }\n drawCheckbox(ctx, theme, checked, x, y, width, height, false, undefined, undefined, 18, \"center\", c.rowMarker);\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 !== undefined) {\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(c.icon, variant, ctx, isRtl ? drawX - headerSize : drawX, y + (height - headerSize) / 2, headerSize, theme);\n if (c.overlayIcon !== undefined) {\n spriteManager.drawSprite(c.overlayIcon, selected ? \"selected\" : \"special\", ctx, isRtl ? drawX - headerSize + 9 : drawX + 9, y + ((height - 18) / 2 + 6), 18, theme);\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 }\n else {\n ctx.fillStyle = fillStyle;\n }\n if (isRtl) {\n ctx.textAlign = \"right\";\n }\n ctx.fillText(c.title, drawX, y + height / 2 + getMiddleCenterBias(ctx, theme.headerFontFull));\n if (isRtl) {\n ctx.textAlign = \"left\";\n }\n if (shouldDrawMenu && c.hasMenu === true) {\n if (c.menuIcon === undefined || c.menuIcon === GridColumnMenuIcon.Triangle) {\n // Draw the default triangle menu icon:\n ctx.beginPath();\n const triangleX = menuBounds.x + menuBounds.width / 2 - 5.5;\n const triangleY = menuBounds.y + menuBounds.height / 2 - 3;\n roundedPoly(ctx, [\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 ], 1);\n ctx.fillStyle = fillStyle;\n ctx.fill();\n }\n else if (c.menuIcon === GridColumnMenuIcon.Dots) {\n // Draw the three dots menu icon:\n ctx.beginPath();\n const dotsX = menuBounds.x + menuBounds.width / 2;\n const dotsY = menuBounds.y + menuBounds.height / 2;\n drawMenuDots(ctx, dotsX, dotsY);\n ctx.fillStyle = fillStyle;\n ctx.fill();\n }\n else {\n // Assume that the user has specified a valid sprite image as header icon:\n const iconX = menuBounds.x + (menuBounds.width - theme.headerIconSize) / 2;\n const iconY = menuBounds.y + (menuBounds.height - theme.headerIconSize) / 2;\n spriteManager.drawSprite(c.menuIcon, \"normal\", ctx, iconX, iconY, theme.headerIconSize, theme);\n }\n }\n}\nexport function drawHeader(ctx, x, y, width, height, c, selected, theme, isHovered, hasSelectedCell, hoverAmount, spriteManager, drawHeaderCallback, touchMode) {\n const isRtl = direction(c.title) === \"rtl\";\n const menuBounds = getHeaderMenuBounds(x, y, width, height, isRtl);\n if (drawHeaderCallback !== undefined) {\n drawHeaderCallback({\n ctx,\n theme,\n rect: { x, y, width, height },\n column: c,\n columnIndex: c.sourceIndex,\n isSelected: selected,\n hoverAmount,\n isHovered,\n hasSelectedCell,\n spriteManager,\n menuBounds,\n }, () => drawHeaderInner(ctx, x, y, width, height, c, selected, theme, isHovered, hoverAmount, spriteManager, touchMode, isRtl, menuBounds));\n }\n else {\n drawHeaderInner(ctx, x, y, width, height, c, selected, theme, isHovered, hoverAmount, spriteManager, touchMode, isRtl, menuBounds);\n }\n}\n//# sourceMappingURL=data-grid-render.header.js.map","/* eslint-disable sonarjs/no-duplicate-string */\n/* eslint-disable unicorn/no-for-loop */\nimport { CompactSelection } from \"../data-grid-types.js\";\nimport { CellSet } from \"../cell-set.js\";\nimport groupBy from \"lodash/groupBy.js\";\nimport { getStickyWidth, getFreezeTrailingHeight } from \"./data-grid-lib.js\";\nimport { mergeAndRealizeTheme } from \"../../../common/styles.js\";\nimport { blendCache } from \"../color-parser.js\";\nimport { intersectRect } from \"../../../common/math.js\";\nimport { getSkipPoint, walkColumns, walkRowsInCol } from \"./data-grid-render.walk.js\";\nimport {} from \"./data-grid-render.cells.js\";\nexport function drawBlanks(ctx, effectiveColumns, allColumns, width, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, getRowTheme, selectedRows, disabledRows, freezeTrailingRows, hasAppendRow, drawRegions, damage, theme) {\n if (damage !== undefined ||\n effectiveColumns[effectiveColumns.length - 1] !== allColumns[effectiveColumns.length - 1])\n return;\n const skipPoint = getSkipPoint(drawRegions);\n walkColumns(effectiveColumns, cellYOffset, translateX, translateY, totalHeaderHeight, (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, 10000, height - totalHeaderHeight - 1);\n ctx.clip();\n walkRowsInCol(startRow, colDrawY, height, rows, getRowHeight, freezeTrailingRows, hasAppendRow, skipPoint, (drawY, row, rh, isSticky) => {\n if (!isSticky &&\n drawRegions.length > 0 &&\n !drawRegions.some(dr => intersectRect(drawX, drawY, 10000, rh, dr.x, dr.y, dr.width, dr.height))) {\n return;\n }\n const rowSelected = selectedRows.hasIndex(row);\n const rowDisabled = disabledRows.hasIndex(row);\n ctx.beginPath();\n const rowTheme = getRowTheme?.(row);\n const blankTheme = rowTheme === undefined ? theme : mergeAndRealizeTheme(theme, rowTheme);\n if (blankTheme.bgCell !== theme.bgCell) {\n ctx.fillStyle = blankTheme.bgCell;\n ctx.fillRect(drawX, drawY, 10000, rh);\n }\n if (rowDisabled) {\n ctx.fillStyle = blankTheme.bgHeader;\n ctx.fillRect(drawX, drawY, 10000, rh);\n }\n if (rowSelected) {\n ctx.fillStyle = blankTheme.accentLight;\n ctx.fillRect(drawX, drawY, 10000, rh);\n }\n });\n ctx.restore();\n });\n}\nexport function overdrawStickyBoundaries(ctx, effectiveCols, width, height, freezeTrailingRows, rows, verticalBorder, getRowHeight, theme) {\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 = theme.horizontalBorderColor ?? theme.borderColor;\n const vColor = theme.borderColor;\n const drawX = drawFreezeBorder ? getStickyWidth(effectiveCols) : 0;\n let vStroke;\n if (drawX !== 0) {\n vStroke = blendCache(vColor, theme.bgCell);\n ctx.beginPath();\n ctx.moveTo(drawX + 0.5, 0);\n ctx.lineTo(drawX + 0.5, height);\n ctx.strokeStyle = vStroke;\n ctx.stroke();\n }\n if (freezeTrailingRows > 0) {\n const hStroke = vColor === hColor && vStroke !== undefined ? vStroke : blendCache(hColor, theme.bgCell);\n const h = getFreezeTrailingHeight(rows, freezeTrailingRows, getRowHeight);\n ctx.beginPath();\n ctx.moveTo(0, height - h + 0.5);\n ctx.lineTo(width, height - h + 0.5);\n ctx.strokeStyle = hStroke;\n ctx.stroke();\n }\n}\nconst getMinMaxXY = (drawRegions, width, height) => {\n let minX = 0;\n let maxX = width;\n let minY = 0;\n let maxY = height;\n if (drawRegions !== undefined && 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 return { minX, maxX, minY, maxY };\n};\nexport function drawExtraRowThemes(ctx, effectiveCols, cellYOffset, translateX, translateY, width, height, drawRegions, totalHeaderHeight, getRowHeight, getRowThemeOverride, verticalBorder, freezeTrailingRows, rows, theme) {\n const bgCell = theme.bgCell;\n const { minX, maxX, minY, maxY } = getMinMaxXY(drawRegions, width, height);\n const toDraw = [];\n const freezeY = height - getFreezeTrailingHeight(rows, freezeTrailingRows, getRowHeight);\n // row overflow\n let y = totalHeaderHeight;\n let row = cellYOffset;\n let extraRowsStartY = 0;\n while (y + translateY < freezeY) {\n const ty = y + translateY;\n const rh = getRowHeight(row);\n if (ty >= minY && ty <= maxY - 1) {\n const rowTheme = getRowThemeOverride?.(row);\n const rowThemeBgCell = rowTheme?.bgCell;\n const needDraw = rowThemeBgCell !== undefined && rowThemeBgCell !== bgCell && row >= rows - freezeTrailingRows;\n if (needDraw) {\n toDraw.push({\n x: minX,\n y: ty,\n w: maxX - minX,\n h: rh,\n color: rowThemeBgCell,\n });\n }\n }\n y += rh;\n if (row < rows - freezeTrailingRows)\n extraRowsStartY = y;\n row++;\n }\n // column overflow\n let x = 0;\n const h = Math.min(freezeY, maxY) - extraRowsStartY;\n if (h > 0) {\n for (let index = 0; index < effectiveCols.length; index++) {\n const c = effectiveCols[index];\n if (c.width === 0)\n continue;\n const tx = c.sticky ? x : x + translateX;\n const colThemeBgCell = c.themeOverride?.bgCell;\n if (colThemeBgCell !== undefined &&\n colThemeBgCell !== bgCell &&\n tx >= minX &&\n tx <= maxX &&\n verticalBorder(index + 1)) {\n toDraw.push({\n x: tx,\n y: extraRowsStartY,\n w: c.width,\n h,\n color: colThemeBgCell,\n });\n }\n x += c.width;\n }\n }\n if (toDraw.length === 0)\n return;\n let color;\n ctx.beginPath();\n // render in reverse order because we computed and added the columns last, but they should actually be lower\n // priority than the rows.\n for (let i = toDraw.length - 1; i >= 0; i--) {\n const r = toDraw[i];\n if (color === undefined) {\n color = r.color;\n }\n else if (r.color !== color) {\n ctx.fillStyle = color;\n ctx.fill();\n ctx.beginPath();\n color = r.color;\n }\n ctx.rect(r.x, r.y, r.w, r.h);\n }\n if (color !== undefined) {\n ctx.fillStyle = color;\n ctx.fill();\n }\n ctx.beginPath();\n}\n// lines are effectively drawn on the top left edge of a cell.\nexport function drawGridLines(ctx, effectiveCols, cellYOffset, translateX, translateY, width, height, drawRegions, spans, groupHeaderHeight, totalHeaderHeight, getRowHeight, getRowThemeOverride, verticalBorder, freezeTrailingRows, rows, theme, verticalOnly = false) {\n if (spans !== undefined) {\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 = theme.horizontalBorderColor ?? theme.borderColor;\n const vColor = theme.borderColor;\n const { minX, maxX, minY, maxY } = getMinMaxXY(drawRegions, width, height);\n const toDraw = [];\n ctx.beginPath();\n // vertical lines\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 let freezeY = height + 0.5;\n for (let i = rows - freezeTrailingRows; i < rows; i++) {\n const rh = getRowHeight(i);\n freezeY -= rh;\n toDraw.push({ x1: minX, y1: freezeY, x2: maxX, y2: freezeY, color: hColor });\n }\n if (verticalOnly !== true) {\n // horizontal lines\n let y = totalHeaderHeight + 0.5;\n let row = cellYOffset;\n const target = freezeY;\n while (y + translateY < target) {\n const ty = y + translateY;\n if (ty >= minY && ty <= maxY - 1) {\n const rowTheme = getRowThemeOverride?.(row);\n toDraw.push({\n x1: minX,\n y1: ty,\n x2: maxX,\n y2: ty,\n color: rowTheme?.horizontalBorderColor ?? rowTheme?.borderColor ?? 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 !== undefined) {\n ctx.restore();\n }\n}\n//# sourceMappingURL=data-grid-render.lines.js.map","/* eslint-disable sonarjs/no-duplicate-string */\n/* eslint-disable unicorn/no-for-loop */\nimport { deepEqual } from \"../../../common/support.js\";\nimport {} from \"../data-grid-types.js\";\nimport { getStickyWidth, getFreezeTrailingHeight } from \"./data-grid-lib.js\";\nimport { walkColumns } from \"./data-grid-render.walk.js\";\nexport function blitLastFrame(ctx, blitSource, blitSourceScroll, targetScroll, last, cellXOffset, cellYOffset, translateX, translateY, freezeTrailingRows, width, height, rows, totalHeaderHeight, dpr, mappedColumns, effectiveCols, getRowHeight, doubleBuffer) {\n const drawRegions = [];\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 }\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 const stickyWidth = getStickyWidth(effectiveCols);\n if (deltaX !== 0 && deltaY !== 0) {\n return {\n regions: [],\n };\n }\n const freezeTrailingRowsHeight = freezeTrailingRows > 0 ? getFreezeTrailingHeight(rows, freezeTrailingRows, getRowHeight) : 0;\n const blitWidth = width - stickyWidth - Math.abs(deltaX);\n const blitHeight = height - totalHeaderHeight - freezeTrailingRowsHeight - Math.abs(deltaY) - 1;\n if (blitWidth > 150 && blitHeight > 150) {\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 // blit Y\n if (deltaY > 0) {\n // scrolling up\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: width,\n height: deltaY + 1,\n });\n }\n else if (deltaY < 0) {\n // scrolling down\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 - freezeTrailingRowsHeight,\n width: width,\n height: -deltaY + freezeTrailingRowsHeight,\n });\n }\n // blit X\n if (deltaX > 0) {\n // pixels moving right\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 height: height,\n });\n }\n else if (deltaX < 0) {\n // pixels moving left\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: height,\n });\n }\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n if (doubleBuffer) {\n if (stickyWidth > 0 &&\n deltaX !== 0 &&\n deltaY === 0 &&\n (targetScroll === undefined || blitSourceScroll?.[1] !== false)) {\n // When double buffering the freeze columns can be offset by a couple pixels vertically between the two\n // buffers. We don't want to redraw them so we need to make sure to copy them between the buffers.\n const w = stickyWidth * dpr;\n const h = height * dpr;\n ctx.drawImage(blitSource, 0, 0, w, h, 0, 0, w, h);\n }\n if (freezeTrailingRowsHeight > 0 &&\n deltaX === 0 &&\n deltaY !== 0 &&\n (targetScroll === undefined || blitSourceScroll?.[0] !== false)) {\n const y = (height - freezeTrailingRowsHeight) * dpr;\n const w = width * dpr;\n const h = freezeTrailingRowsHeight * dpr;\n ctx.drawImage(blitSource, 0, y, w, h, 0, y, w, h);\n }\n }\n ctx.drawImage(blitSource, 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 };\n}\nexport function blitResizedCol(last, cellXOffset, cellYOffset, translateX, translateY, width, height, totalHeaderHeight, effectiveCols, resizedIndex) {\n const drawRegions = [];\n // ctx.imageSmoothingEnabled = false;\n if (cellXOffset !== last.cellXOffset ||\n cellYOffset !== last.cellYOffset ||\n translateX !== last.translateX ||\n 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}\nexport function computeCanBlit(current, last) {\n if (last === undefined)\n return false;\n if (current.width !== last.width ||\n current.height !== last.height ||\n current.theme !== last.theme ||\n current.headerHeight !== last.headerHeight ||\n current.rowHeight !== last.rowHeight ||\n current.rows !== last.rows ||\n current.freezeColumns !== last.freezeColumns ||\n current.getRowThemeOverride !== last.getRowThemeOverride ||\n current.isFocused !== last.isFocused ||\n current.isResizing !== last.isResizing ||\n current.verticalBorder !== last.verticalBorder ||\n current.getCellContent !== last.getCellContent ||\n current.highlightRegions !== last.highlightRegions ||\n current.selection !== last.selection ||\n current.dragAndDropState !== last.dragAndDropState ||\n current.prelightCells !== last.prelightCells ||\n current.touchMode !== last.touchMode ||\n current.maxScaleFactor !== last.maxScaleFactor) {\n return false;\n }\n if (current.mappedColumns !== last.mappedColumns) {\n if (current.mappedColumns.length > 100 || current.mappedColumns.length !== last.mappedColumns.length) {\n // The array is big, let's just redraw the damned thing rather than check these all. Or the number of cols\n // changed in which case I dont want to figure out what happened.\n return false;\n }\n // We want to know if only one column has resized. If this is the case we can do a special left/right sliding\n // blit. Or just not redraw shit on the left.\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 // two columns changed, abort\n if (resized !== undefined)\n return false;\n if (curCol.width === lastCol.width)\n return false;\n const { width, ...curRest } = curCol;\n const { width: lastWidth, ...lastRest } = lastCol;\n // more than width changed, abort\n if (!deepEqual(curRest, lastRest))\n return false;\n resized = i;\n }\n if (resized === undefined) {\n // we never found a changed column, cool, we can blit\n return true;\n }\n return resized;\n }\n return true;\n}\n//# sourceMappingURL=data-grid-render.blit.js.map","/* eslint-disable sonarjs/no-duplicate-string */\n/* eslint-disable unicorn/no-for-loop */\nimport {} from \"../data-grid-types.js\";\nimport { getStickyWidth, computeBounds, getFreezeTrailingHeight } from \"./data-grid-lib.js\";\nimport {} from \"../../../common/styles.js\";\nimport { blend, withAlpha } from \"../color-parser.js\";\nimport { hugRectToTarget, intersectRect, rectContains, splitRectIntoRegions } from \"../../../common/math.js\";\nimport { getSpanBounds, walkColumns, walkRowsInCol } from \"./data-grid-render.walk.js\";\nimport {} from \"./data-grid-render.cells.js\";\nexport function drawHighlightRings(ctx, width, height, cellXOffset, cellYOffset, translateX, translateY, mappedColumns, freezeColumns, headerHeight, groupHeaderHeight, rowHeight, freezeTrailingRows, rows, allHighlightRegions, theme) {\n const highlightRegions = allHighlightRegions?.filter(x => x.style !== \"no-outline\");\n if (highlightRegions === undefined || highlightRegions.length === 0)\n return undefined;\n const freezeLeft = getStickyWidth(mappedColumns);\n const freezeBottom = getFreezeTrailingHeight(rows, freezeTrailingRows, rowHeight);\n const splitIndicies = [freezeColumns, 0, mappedColumns.length, rows - freezeTrailingRows];\n const splitLocations = [freezeLeft, 0, width, height - freezeBottom];\n const drawRects = highlightRegions.map(h => {\n const r = h.range;\n const style = h.style ?? \"dashed\";\n return splitRectIntoRegions(r, splitIndicies, width, height, splitLocations).map(arg => {\n const rect = arg.rect;\n const topLeftBounds = computeBounds(rect.x, rect.y, width, height, groupHeaderHeight, headerHeight + groupHeaderHeight, cellXOffset, cellYOffset, translateX, translateY, rows, freezeColumns, freezeTrailingRows, mappedColumns, rowHeight);\n const bottomRightBounds = rect.width === 1 && rect.height === 1\n ? topLeftBounds\n : computeBounds(rect.x + rect.width - 1, rect.y + rect.height - 1, width, height, groupHeaderHeight, headerHeight + groupHeaderHeight, cellXOffset, cellYOffset, translateX, translateY, rows, freezeColumns, freezeTrailingRows, mappedColumns, rowHeight);\n if (rect.x + rect.width >= mappedColumns.length) {\n bottomRightBounds.width -= 1;\n }\n if (rect.y + rect.height >= rows) {\n bottomRightBounds.height -= 1;\n }\n return {\n color: h.color,\n style,\n clip: arg.clip,\n rect: hugRectToTarget({\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 }, width, height, 8),\n };\n });\n });\n const drawCb = () => {\n ctx.lineWidth = 1;\n let dashed = false;\n for (const dr of drawRects) {\n for (const s of dr) {\n if (s?.rect !== undefined &&\n intersectRect(0, 0, width, height, s.rect.x, s.rect.y, s.rect.width, s.rect.height)) {\n const wasDashed = dashed;\n const needsClip = !rectContains(s.clip, s.rect);\n if (needsClip) {\n ctx.save();\n ctx.rect(s.clip.x, s.clip.y, s.clip.width, s.clip.height);\n ctx.clip();\n }\n if (s.style === \"dashed\" && !dashed) {\n ctx.setLineDash([5, 3]);\n dashed = true;\n }\n else if ((s.style === \"solid\" || s.style === \"solid-outline\") && dashed) {\n ctx.setLineDash([]);\n dashed = false;\n }\n ctx.strokeStyle =\n s.style === \"solid-outline\"\n ? blend(blend(s.color, theme.borderColor), theme.bgCell)\n : withAlpha(s.color, 1);\n ctx.strokeRect(s.rect.x + 0.5, s.rect.y + 0.5, s.rect.width - 1, s.rect.height - 1);\n if (needsClip) {\n ctx.restore();\n dashed = wasDashed;\n }\n }\n }\n }\n if (dashed) {\n ctx.setLineDash([]);\n }\n };\n drawCb();\n return drawCb;\n}\nexport function drawColumnResizeOutline(ctx, yOffset, xOffset, height, style) {\n ctx.beginPath();\n ctx.moveTo(yOffset, xOffset);\n ctx.lineTo(yOffset, height);\n ctx.lineWidth = 2;\n ctx.strokeStyle = style;\n ctx.stroke();\n ctx.globalAlpha = 1;\n}\nexport function drawFillHandle(ctx, width, height, cellYOffset, translateX, translateY, effectiveCols, allColumns, theme, totalHeaderHeight, selectedCell, getRowHeight, getCellContent, freezeTrailingRows, hasAppendRow, fillHandle, rows) {\n if (selectedCell.current === undefined)\n return undefined;\n const range = selectedCell.current.range;\n const currentItem = selectedCell.current.cell;\n const fillHandleTarget = [range.x + range.width - 1, range.y + range.height - 1];\n // if the currentItem row greater than rows and the fill handle row is greater than rows, we dont need to draw\n if (currentItem[1] >= rows && fillHandleTarget[1] >= rows)\n return undefined;\n const mustDraw = effectiveCols.some(c => c.sourceIndex === currentItem[0] || c.sourceIndex === fillHandleTarget[0]);\n if (!mustDraw)\n return undefined;\n const [targetCol, targetRow] = selectedCell.current.cell;\n const cell = getCellContent(selectedCell.current.cell);\n const targetColSpan = cell.span ?? [targetCol, targetCol];\n const isStickyRow = targetRow >= rows - freezeTrailingRows;\n const stickRowHeight = freezeTrailingRows > 0 && !isStickyRow\n ? getFreezeTrailingHeight(rows, freezeTrailingRows, getRowHeight) - 1\n : 0;\n const fillHandleRow = fillHandleTarget[1];\n let drawHandleCb = undefined;\n walkColumns(effectiveCols, cellYOffset, translateX, translateY, totalHeaderHeight, (col, drawX, colDrawY, clipX, startRow) => {\n clipX;\n if (col.sticky && targetCol > col.sourceIndex)\n return;\n const isBeforeTarget = col.sourceIndex < targetColSpan[0];\n const isAfterTarget = col.sourceIndex > targetColSpan[1];\n const isFillHandleCol = col.sourceIndex === fillHandleTarget[0];\n if (!isFillHandleCol && (isBeforeTarget || isAfterTarget)) {\n // we dont need to do any drawing on this column but may yet need to draw\n return;\n }\n walkRowsInCol(startRow, colDrawY, height, rows, getRowHeight, freezeTrailingRows, hasAppendRow, undefined, (drawY, row, rh) => {\n if (row !== targetRow && row !== fillHandleRow)\n return;\n let cellX = drawX;\n let cellWidth = col.width;\n if (cell.span !== undefined) {\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 !== undefined) {\n cellX = area.x;\n cellWidth = area.width;\n }\n }\n const doHandle = row === fillHandleRow && isFillHandleCol && fillHandle;\n if (doHandle) {\n drawHandleCb = () => {\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 + cellWidth - 4, drawY + rh - 4, 4, 4);\n ctx.fillStyle = col.themeOverride?.accentColor ?? theme.accentColor;\n ctx.fill();\n };\n }\n return drawHandleCb !== undefined;\n });\n return drawHandleCb !== undefined;\n });\n if (drawHandleCb === undefined)\n return undefined;\n const result = () => {\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, totalHeaderHeight, width, height - totalHeaderHeight - stickRowHeight);\n ctx.clip();\n drawHandleCb?.();\n ctx.restore();\n };\n result();\n return result;\n}\n//# sourceMappingURL=data-grid.render.rings.js.map","/* eslint-disable sonarjs/no-duplicate-string */\n/* eslint-disable unicorn/no-for-loop */\nimport {} from \"../data-grid-types.js\";\nimport { CellSet } from \"../cell-set.js\";\nimport { getEffectiveColumns, rectBottomRight } from \"./data-grid-lib.js\";\nimport { blend } from \"../color-parser.js\";\nimport { assert } from \"../../../common/support.js\";\nimport { walkColumns, walkGroups, walkRowsInCol } from \"./data-grid-render.walk.js\";\nimport { drawCells } from \"./data-grid-render.cells.js\";\nimport { drawGridHeaders } from \"./data-grid-render.header.js\";\nimport { drawGridLines, overdrawStickyBoundaries, drawBlanks, drawExtraRowThemes } from \"./data-grid-render.lines.js\";\nimport { blitLastFrame, blitResizedCol, computeCanBlit } from \"./data-grid-render.blit.js\";\nimport { drawHighlightRings, drawFillHandle, drawColumnResizeOutline } from \"./data-grid.render.rings.js\";\n// Future optimization opportunities\n// - Create a cache of a buffer used to render the full view of a partially displayed column so that when\n// scrolling horizontally you can simply blit the pre-drawn column instead of continually paying the draw\n// cost as it slides into view.\n// - The same as above but for partially displayed rows\n// - Blit headers on horizontal scroll\n// - Use webworker to load images, helpful with lots of large images\n// - Retain mode for drawing cells. Instead of drawing cells as we come across them, first build a data\n// structure which contains all operations to perform, then sort them all by \"prep\" requirement, then do\n// all like operations at once.\nfunction clipHeaderDamage(ctx, effectiveColumns, width, groupHeaderHeight, totalHeaderHeight, translateX, translateY, cellYOffset, damage) {\n if (damage === undefined || damage.size === 0)\n return;\n ctx.beginPath();\n walkGroups(effectiveColumns, width, translateX, groupHeaderHeight, (span, _group, x, y, w, h) => {\n const hasItemInSpan = damage.hasItemInRectangle({\n x: span[0],\n y: -2,\n width: span[1] - span[0] + 1,\n height: 1,\n });\n if (hasItemInSpan) {\n ctx.rect(x, y, w, h);\n }\n });\n walkColumns(effectiveColumns, cellYOffset, translateX, translateY, totalHeaderHeight, (c, drawX, _colDrawY, clipX) => {\n const diff = Math.max(0, clipX - drawX);\n const finalX = drawX + diff + 1;\n const finalWidth = c.width - diff - 1;\n if (damage.has([c.sourceIndex, -1])) {\n ctx.rect(finalX, groupHeaderHeight, finalWidth, totalHeaderHeight - groupHeaderHeight);\n }\n });\n ctx.clip();\n}\nfunction getLastRow(effectiveColumns, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, freezeTrailingRows, hasAppendRow) {\n let result = 0;\n walkColumns(effectiveColumns, cellYOffset, translateX, translateY, totalHeaderHeight, (_c, __drawX, colDrawY, _clipX, startRow) => {\n walkRowsInCol(startRow, colDrawY, height, rows, getRowHeight, freezeTrailingRows, hasAppendRow, undefined, (_drawY, row, _rh, isSticky) => {\n if (!isSticky) {\n result = Math.max(row, result);\n }\n });\n return true;\n });\n return result;\n}\nexport function drawGrid(arg, lastArg) {\n const { canvasCtx, headerCanvasCtx, width, height, cellXOffset, cellYOffset, translateX, translateY, mappedColumns, enableGroups, freezeColumns, dragAndDropState, theme, drawFocus, headerHeight, groupHeaderHeight, disabledRows, rowHeight, verticalBorder, overrideCursor, isResizing, selection, fillHandle, freezeTrailingRows, rows, getCellContent, getGroupDetails, getRowThemeOverride, isFocused, drawHeaderCallback, prelightCells, drawCellCallback, highlightRegions, resizeCol, imageLoader, lastBlitData, hoverValues, hyperWrapping, hoverInfo, spriteManager, maxScaleFactor, hasAppendRow, touchMode, enqueue, renderStateProvider, getCellRenderer, renderStrategy, bufferACtx, bufferBCtx, damage, minimumCellWidth, } = arg;\n if (width === 0 || height === 0)\n return;\n const doubleBuffer = renderStrategy === \"double-buffer\";\n const dpr = Math.min(maxScaleFactor, Math.ceil(window.devicePixelRatio ?? 1));\n // if we are double buffering we need to make sure we can blit. If we can't we need to redraw the whole thing\n const canBlit = renderStrategy !== \"direct\" && computeCanBlit(arg, lastArg);\n const canvas = canvasCtx.canvas;\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 = headerCanvasCtx.canvas;\n const totalHeaderHeight = enableGroups ? groupHeaderHeight + headerHeight : headerHeight;\n const overlayHeight = totalHeaderHeight + 1; // border\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 const bufferA = bufferACtx.canvas;\n const bufferB = bufferBCtx.canvas;\n if (doubleBuffer && (bufferA.width !== width * dpr || bufferA.height !== height * dpr)) {\n bufferA.width = width * dpr;\n bufferA.height = height * dpr;\n if (lastBlitData.current !== undefined)\n lastBlitData.current.aBufferScroll = undefined;\n }\n if (doubleBuffer && (bufferB.width !== width * dpr || bufferB.height !== height * dpr)) {\n bufferB.width = width * dpr;\n bufferB.height = height * dpr;\n if (lastBlitData.current !== undefined)\n lastBlitData.current.bBufferScroll = undefined;\n }\n const last = lastBlitData.current;\n if (canBlit === true &&\n cellXOffset === last?.cellXOffset &&\n cellYOffset === last?.cellYOffset &&\n translateX === last?.translateX &&\n translateY === last?.translateY)\n return;\n let mainCtx = null;\n if (doubleBuffer) {\n mainCtx = canvasCtx;\n }\n const overlayCtx = headerCanvasCtx;\n let targetCtx;\n if (!doubleBuffer) {\n targetCtx = canvasCtx;\n }\n else if (damage !== undefined) {\n targetCtx = last?.lastBuffer === \"b\" ? bufferBCtx : bufferACtx;\n }\n else {\n targetCtx = last?.lastBuffer === \"b\" ? bufferACtx : bufferBCtx;\n }\n const targetBuffer = targetCtx.canvas;\n const blitSource = doubleBuffer ? (targetBuffer === bufferA ? bufferB : bufferA) : canvas;\n const getRowHeight = typeof rowHeight === \"number\" ? () => rowHeight : rowHeight;\n overlayCtx.save();\n targetCtx.save();\n overlayCtx.beginPath();\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 && selection.current?.cell[1] === cellYOffset && translateY === 0;\n let mustDrawHighlightRingsOnHeader = false;\n if (highlightRegions !== undefined) {\n for (const r of highlightRegions) {\n if (r.style !== \"no-outline\" && r.range.y === cellYOffset && translateY === 0) {\n mustDrawHighlightRingsOnHeader = true;\n break;\n }\n }\n }\n const drawHeaderTexture = () => {\n drawGridHeaders(overlayCtx, effectiveCols, enableGroups, hoverInfo, width, translateX, headerHeight, groupHeaderHeight, dragAndDropState, isResizing, selection, theme, spriteManager, hoverValues, verticalBorder, getGroupDetails, damage, drawHeaderCallback, touchMode);\n drawGridLines(overlayCtx, effectiveCols, cellYOffset, translateX, translateY, width, height, undefined, undefined, groupHeaderHeight, totalHeaderHeight, getRowHeight, getRowThemeOverride, verticalBorder, freezeTrailingRows, rows, theme, true);\n overlayCtx.beginPath();\n overlayCtx.moveTo(0, overlayHeight - 0.5);\n overlayCtx.lineTo(width, overlayHeight - 0.5);\n overlayCtx.strokeStyle = blend(theme.headerBottomBorderColor ?? theme.horizontalBorderColor ?? theme.borderColor, theme.bgHeader);\n overlayCtx.stroke();\n if (mustDrawHighlightRingsOnHeader) {\n drawHighlightRings(overlayCtx, width, height, cellXOffset, cellYOffset, translateX, translateY, mappedColumns, freezeColumns, headerHeight, groupHeaderHeight, rowHeight, freezeTrailingRows, rows, highlightRegions, theme);\n }\n if (mustDrawFocusOnHeader) {\n drawFillHandle(overlayCtx, width, height, cellYOffset, translateX, translateY, effectiveCols, mappedColumns, theme, totalHeaderHeight, selection, getRowHeight, getCellContent, freezeTrailingRows, hasAppendRow, fillHandle, rows);\n }\n };\n // handle damage updates by directly drawing to the target to avoid large blits\n if (damage !== undefined) {\n const viewRegionWidth = effectiveCols[effectiveCols.length - 1].sourceIndex + 1;\n const damageInView = damage.hasItemInRegion([\n {\n x: cellXOffset,\n y: -2,\n width: viewRegionWidth,\n height: 2,\n },\n {\n x: cellXOffset,\n y: cellYOffset,\n width: viewRegionWidth,\n height: 300,\n },\n {\n x: 0,\n y: cellYOffset,\n width: freezeColumns,\n height: 300,\n },\n {\n x: 0,\n y: -2,\n width: freezeColumns,\n height: 2,\n },\n {\n x: cellXOffset,\n y: rows - freezeTrailingRows,\n width: viewRegionWidth,\n height: freezeTrailingRows,\n when: freezeTrailingRows > 0,\n },\n ]);\n const doDamage = (ctx) => {\n drawCells(ctx, effectiveCols, mappedColumns, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, getCellContent, getGroupDetails, getRowThemeOverride, disabledRows, isFocused, drawFocus, freezeTrailingRows, hasAppendRow, drawRegions, damage, selection, prelightCells, highlightRegions, imageLoader, spriteManager, hoverValues, hoverInfo, drawCellCallback, hyperWrapping, theme, enqueue, renderStateProvider, getCellRenderer, overrideCursor, minimumCellWidth);\n const selectionCurrent = selection.current;\n if (fillHandle &&\n drawFocus &&\n selectionCurrent !== undefined &&\n damage.has(rectBottomRight(selectionCurrent.range))) {\n drawFillHandle(ctx, width, height, cellYOffset, translateX, translateY, effectiveCols, mappedColumns, theme, totalHeaderHeight, selection, getRowHeight, getCellContent, freezeTrailingRows, hasAppendRow, fillHandle, rows);\n }\n };\n if (damageInView) {\n doDamage(targetCtx);\n if (mainCtx !== null) {\n mainCtx.save();\n mainCtx.scale(dpr, dpr);\n mainCtx.textBaseline = \"middle\";\n doDamage(mainCtx);\n mainCtx.restore();\n }\n const doHeaders = damage.hasHeader();\n if (doHeaders) {\n clipHeaderDamage(overlayCtx, effectiveCols, width, groupHeaderHeight, totalHeaderHeight, translateX, translateY, cellYOffset, damage);\n drawHeaderTexture();\n }\n }\n targetCtx.restore();\n overlayCtx.restore();\n return;\n }\n if (canBlit !== true ||\n cellXOffset !== last?.cellXOffset ||\n translateX !== last?.translateX ||\n mustDrawFocusOnHeader !== last?.mustDrawFocusOnHeader ||\n mustDrawHighlightRingsOnHeader !== last?.mustDrawHighlightRingsOnHeader) {\n drawHeaderTexture();\n }\n if (canBlit === true) {\n assert(blitSource !== undefined && last !== undefined);\n const { regions } = blitLastFrame(targetCtx, blitSource, blitSource === bufferA ? last.aBufferScroll : last.bBufferScroll, blitSource === bufferA ? last.bBufferScroll : last.aBufferScroll, last, cellXOffset, cellYOffset, translateX, translateY, freezeTrailingRows, width, height, rows, totalHeaderHeight, dpr, mappedColumns, effectiveCols, rowHeight, doubleBuffer);\n drawRegions = regions;\n }\n else if (canBlit !== false) {\n assert(last !== undefined);\n const resizedCol = canBlit;\n drawRegions = blitResizedCol(last, cellXOffset, cellYOffset, translateX, translateY, width, height, totalHeaderHeight, effectiveCols, resizedCol);\n }\n overdrawStickyBoundaries(targetCtx, effectiveCols, width, height, freezeTrailingRows, rows, verticalBorder, getRowHeight, theme);\n const highlightRedraw = drawHighlightRings(targetCtx, width, height, cellXOffset, cellYOffset, translateX, translateY, mappedColumns, freezeColumns, headerHeight, groupHeaderHeight, rowHeight, freezeTrailingRows, rows, highlightRegions, theme);\n // the overdraw may have nuked out our focus ring right edge.\n const focusRedraw = drawFocus\n ? drawFillHandle(targetCtx, width, height, cellYOffset, translateX, translateY, effectiveCols, mappedColumns, theme, totalHeaderHeight, selection, getRowHeight, getCellContent, freezeTrailingRows, hasAppendRow, fillHandle, rows)\n : undefined;\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 }\n else {\n targetCtx.fillRect(0, 0, width, height);\n }\n const spans = drawCells(targetCtx, effectiveCols, mappedColumns, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, getCellContent, getGroupDetails, getRowThemeOverride, disabledRows, isFocused, drawFocus, freezeTrailingRows, hasAppendRow, drawRegions, damage, selection, prelightCells, highlightRegions, imageLoader, spriteManager, hoverValues, hoverInfo, drawCellCallback, hyperWrapping, theme, enqueue, renderStateProvider, getCellRenderer, overrideCursor, minimumCellWidth);\n drawBlanks(targetCtx, effectiveCols, mappedColumns, width, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, getRowThemeOverride, selection.rows, disabledRows, freezeTrailingRows, hasAppendRow, drawRegions, damage, theme);\n drawExtraRowThemes(targetCtx, effectiveCols, cellYOffset, translateX, translateY, width, height, drawRegions, totalHeaderHeight, getRowHeight, getRowThemeOverride, verticalBorder, freezeTrailingRows, rows, theme);\n drawGridLines(targetCtx, effectiveCols, cellYOffset, translateX, translateY, width, height, drawRegions, spans, groupHeaderHeight, totalHeaderHeight, getRowHeight, getRowThemeOverride, verticalBorder, freezeTrailingRows, rows, theme);\n highlightRedraw?.();\n focusRedraw?.();\n if (isResizing) {\n walkColumns(effectiveCols, 0, translateX, 0, totalHeaderHeight, (c, x) => {\n if (c.sourceIndex === resizeCol) {\n drawColumnResizeOutline(overlayCtx, x + c.width, 0, totalHeaderHeight + 1, blend(theme.resizeIndicatorColor ?? theme.accentLight, theme.bgHeader));\n drawColumnResizeOutline(targetCtx, x + c.width, totalHeaderHeight, height, blend(theme.resizeIndicatorColor ?? theme.accentLight, theme.bgCell));\n return true;\n }\n return false;\n });\n }\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(effectiveCols, height, totalHeaderHeight, translateX, translateY, cellYOffset, rows, getRowHeight, freezeTrailingRows, hasAppendRow);\n imageLoader?.setWindow({\n x: cellXOffset,\n y: cellYOffset,\n width: effectiveCols.length,\n height: lastRowDrawn - cellYOffset,\n }, freezeColumns, Array.from({ length: freezeTrailingRows }, (_, i) => rows - 1 - i));\n const scrollX = last !== undefined && (cellXOffset !== last.cellXOffset || translateX !== last.translateX);\n const scrollY = last !== undefined && (cellYOffset !== last.cellYOffset || translateY !== last.translateY);\n lastBlitData.current = {\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n mustDrawFocusOnHeader,\n mustDrawHighlightRingsOnHeader,\n lastBuffer: doubleBuffer ? (targetBuffer === bufferA ? \"a\" : \"b\") : undefined,\n aBufferScroll: targetBuffer === bufferA ? [scrollX, scrollY] : last?.aBufferScroll,\n bBufferScroll: targetBuffer === bufferB ? [scrollX, scrollY] : last?.bBufferScroll,\n };\n targetCtx.restore();\n overlayCtx.restore();\n}\n//# sourceMappingURL=data-grid-render.js.map","import clamp from \"lodash/clamp.js\";\nimport { itemsAreEqual } from \"./render/data-grid-lib.js\";\nconst hoverTime = 80;\nfunction easeOutCubic(x) {\n const x1 = x - 1;\n return x1 * x1 * x1 + 1;\n}\nexport class AnimationManager {\n callback;\n constructor(callback) {\n this.callback = callback;\n }\n currentHoveredItem = undefined;\n leavingItems = [];\n lastAnimationTime;\n addToLeavingItems = (item) => {\n const isAlreadyLeaving = this.leavingItems.some(i => itemsAreEqual(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 removeFromLeavingItems = (item) => {\n const leavingItem = this.leavingItems.find(e => itemsAreEqual(e.item, item));\n this.leavingItems = this.leavingItems.filter(i => i !== leavingItem);\n return leavingItem?.hoverAmount ?? 0;\n };\n cleanUpLeavingElements = () => {\n this.leavingItems = this.leavingItems.filter(i => i.hoverAmount > 0);\n };\n shouldStep = () => {\n const hasLeavingItems = this.leavingItems.length > 0;\n const currentHoveredIsAnimating = this.currentHoveredItem !== undefined && this.currentHoveredItem.hoverAmount < 1;\n return hasLeavingItems || currentHoveredIsAnimating;\n };\n getAnimatingItems = () => {\n // this is horrible. We shoudl be mutating the array in place. The reason we don't right now is because the\n // hoveramount is used as both the tweened value and the raw value. We should separate these two things.\n // Then we can stop doing the allocation insanity dance.\n if (this.currentHoveredItem !== undefined) {\n return [...this.leavingItems, this.currentHoveredItem];\n }\n return this.leavingItems.map(x => ({ ...x, hoverAmount: easeOutCubic(x.hoverAmount) }));\n };\n step = (timestamp) => {\n if (this.lastAnimationTime === undefined) {\n this.lastAnimationTime = timestamp;\n }\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 !== undefined) {\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 }\n else {\n this.lastAnimationTime = undefined;\n }\n };\n setHovered = (item) => {\n if (itemsAreEqual(this.currentHoveredItem?.item, item)) {\n return;\n }\n if (this.currentHoveredItem !== undefined) {\n this.addToLeavingItems(this.currentHoveredItem);\n }\n if (item !== undefined) {\n const hoverAmount = this.removeFromLeavingItems(item);\n this.currentHoveredItem = {\n item,\n hoverAmount,\n };\n }\n else {\n this.currentHoveredItem = undefined;\n }\n if (this.lastAnimationTime === undefined) {\n window.requestAnimationFrame(this.step);\n }\n };\n}\n//# sourceMappingURL=animation-manager.js.map","class Lazy {\n fn;\n val;\n constructor(fn) {\n this.fn = fn;\n }\n get value() {\n return this.val ?? (this.val = this.fn());\n }\n}\nfunction lazy(fn) {\n return new Lazy(fn);\n}\n// next.js apps don't have window available at import time, so this will fail if its not lazy.\nexport const browserIsFirefox = lazy(() => window.navigator.userAgent.includes(\"Firefox\"));\nexport const browserIsSafari = lazy(() => window.navigator.userAgent.includes(\"Mac OS\") &&\n window.navigator.userAgent.includes(\"Safari\") &&\n !window.navigator.userAgent.includes(\"Chrome\"));\nexport const browserIsOSX = lazy(() => window.navigator.platform.toLowerCase().startsWith(\"mac\"));\n//# sourceMappingURL=browser-detect.js.map","import * as React from \"react\";\nimport {} from \"./data-grid-types.js\";\nimport { CellSet } from \"./cell-set.js\";\nimport { packColRowToNumber, unpackNumberToColRow } from \"../../common/render-state-provider.js\";\nexport function useAnimationQueue(draw) {\n const queue = React.useRef([]);\n const seq = React.useRef(0);\n const drawRef = React.useRef(draw);\n drawRef.current = draw;\n const loop = React.useCallback(() => {\n const requeue = () => window.requestAnimationFrame(fn);\n const fn = () => {\n const toDraw = queue.current.map(unpackNumberToColRow);\n queue.current = [];\n drawRef.current(new CellSet(toDraw));\n if (queue.current.length > 0) {\n seq.current++;\n }\n else {\n seq.current = 0;\n }\n };\n window.requestAnimationFrame(seq.current > 600 ? requeue : fn);\n }, []);\n return React.useCallback((item) => {\n if (queue.current.length === 0)\n loop();\n const packed = packColRowToNumber(item[0], item[1]);\n if (queue.current.includes(packed))\n return;\n queue.current.push(packed);\n }, [loop]);\n}\n//# sourceMappingURL=use-animation-queue.js.map","/** @category Types */\nexport const headerKind = \"header\";\n/** @category Types */\nexport const groupHeaderKind = \"group-header\";\n/** @category Types */\nexport const outOfBoundsKind = \"out-of-bounds\";\n/** @category Types */\nexport var OutOfBoundsRegionAxis;\n(function (OutOfBoundsRegionAxis) {\n OutOfBoundsRegionAxis[OutOfBoundsRegionAxis[\"Start\"] = -2] = \"Start\";\n OutOfBoundsRegionAxis[OutOfBoundsRegionAxis[\"StartPadding\"] = -1] = \"StartPadding\";\n OutOfBoundsRegionAxis[OutOfBoundsRegionAxis[\"Center\"] = 0] = \"Center\";\n OutOfBoundsRegionAxis[OutOfBoundsRegionAxis[\"EndPadding\"] = 1] = \"EndPadding\";\n OutOfBoundsRegionAxis[OutOfBoundsRegionAxis[\"End\"] = 2] = \"End\";\n})(OutOfBoundsRegionAxis || (OutOfBoundsRegionAxis = {}));\nexport function mouseEventArgsAreEqual(args, other) {\n if (args === other)\n return true;\n if (args?.kind === \"out-of-bounds\") {\n return (args?.kind === other?.kind &&\n args?.location[0] === other?.location[0] &&\n args?.location[1] === other?.location[1] &&\n args?.region[0] === other?.region[0] &&\n args?.region[1] === other?.region[1]);\n }\n return (args?.kind === other?.kind &&\n args?.location[0] === other?.location[0] &&\n args?.location[1] === other?.location[1]);\n}\n//# sourceMappingURL=event-args.js.map","import * as React from \"react\";\nimport { computeBounds, getColumnIndexForX, getEffectiveColumns, getRowIndexForY, getStickyWidth, rectBottomRight, useMappedColumns, } from \"./render/data-grid-lib.js\";\nimport { GridCellKind, InnerGridCellKind, CompactSelection, isReadWriteCell, isInnerOnlyCell, booleanCellIsEditable, } from \"./data-grid-types.js\";\nimport { CellSet } from \"./cell-set.js\";\nimport { SpriteManager } from \"./data-grid-sprites.js\";\nimport { direction, getScrollBarWidth, useDebouncedMemo, useEventListener } from \"../../common/utils.js\";\nimport clamp from \"lodash/clamp.js\";\nimport makeRange from \"lodash/range.js\";\nimport { drawGrid } from \"./render/data-grid-render.js\";\nimport {} from \"./render/data-grid-render.blit.js\";\nimport { AnimationManager } from \"./animation-manager.js\";\nimport { RenderStateProvider, packColRowToNumber } from \"../../common/render-state-provider.js\";\nimport { browserIsFirefox, browserIsSafari } from \"../../common/browser-detect.js\";\nimport { useAnimationQueue } from \"./use-animation-queue.js\";\nimport { assert } from \"../../common/support.js\";\nimport { OutOfBoundsRegionAxis, outOfBoundsKind, groupHeaderKind, headerKind, mouseEventArgsAreEqual, } from \"./event-args.js\";\nimport { pointInRect } from \"../../common/math.js\";\nimport { drawCell, } from \"./render/data-grid-render.cells.js\";\nimport { getActionBoundsForGroup, getHeaderMenuBounds, drawHeader } from \"./render/data-grid-render.header.js\";\nconst fillHandleClickSize = 6;\nconst getRowData = (cell, getCellRenderer) => {\n if (cell.kind === GridCellKind.Custom)\n return cell.copyData;\n const r = getCellRenderer?.(cell);\n return r?.getAccessibilityString(cell) ?? \"\";\n};\nconst DataGrid = (p, forwardedRef) => {\n const { width, height, accessibilityHeight, columns, cellXOffset: cellXOffsetReal, cellYOffset, headerHeight, fillHandle = false, groupHeaderHeight, rowHeight, rows, getCellContent, getRowThemeOverride, onHeaderMenuClick, enableGroups, isFilling, onCanvasFocused, onCanvasBlur, isFocused, selection, freezeColumns, onContextMenu, freezeTrailingRows, fixedShadowX = true, fixedShadowY = true, drawFocusRing, onMouseDown, onMouseUp, onMouseMoveRaw, onMouseMove, onItemHovered, dragAndDropState, firstColAccessible, onKeyDown, onKeyUp, highlightRegions, canvasRef, onDragStart, onDragEnd, eventTargetRef, isResizing, resizeColumn: resizeCol, isDragging, isDraggable = false, allowResize, disabledRows, hasAppendRow, getGroupDetails, theme, prelightCells, headerIcons, verticalBorder, drawCell: drawCellCallback, drawHeader: drawHeaderCallback, onCellFocused, onDragOverCell, onDrop, onDragLeave, imageWindowLoader, smoothScrollX = false, smoothScrollY = false, experimental, getCellRenderer, } = p;\n const translateX = p.translateX ?? 0;\n const translateY = p.translateY ?? 0;\n const cellXOffset = Math.max(freezeColumns, Math.min(columns.length - 1, cellXOffsetReal));\n const ref = React.useRef(null);\n const imageLoader = imageWindowLoader;\n const damageRegion = React.useRef();\n const [scrolling, setScrolling] = React.useState(false);\n const hoverValues = React.useRef([]);\n const lastBlitData = React.useRef();\n const [hoveredItemInfo, setHoveredItemInfo] = React.useState();\n const [hoveredOnEdge, setHoveredOnEdge] = React.useState();\n const overlayRef = React.useRef(null);\n const [drawCursorOverride, setDrawCursorOverride] = React.useState();\n const [lastWasTouch, setLastWasTouch] = React.useState(false);\n const lastWasTouchRef = React.useRef(lastWasTouch);\n lastWasTouchRef.current = lastWasTouch;\n const spriteManager = React.useMemo(() => new SpriteManager(headerIcons, () => {\n lastArgsRef.current = undefined;\n lastDrawRef.current();\n }), [headerIcons]);\n const totalHeaderHeight = enableGroups ? groupHeaderHeight + headerHeight : headerHeight;\n const scrollingStopRef = React.useRef(-1);\n const enableFirefoxRescaling = (experimental?.enableFirefoxRescaling ?? false) && browserIsFirefox.value;\n const enableSafariRescaling = (experimental?.enableSafariRescaling ?? false) && browserIsSafari.value;\n React.useLayoutEffect(() => {\n if (window.devicePixelRatio === 1 || (!enableFirefoxRescaling && !enableSafariRescaling))\n return;\n // We don't want to go into scroll mode for a single repaint\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, enableFirefoxRescaling, enableSafariRescaling]);\n const mappedColumns = useMappedColumns(columns, freezeColumns);\n const stickyX = fixedShadowX ? getStickyWidth(mappedColumns, dragAndDropState) : 0;\n // row: -1 === columnHeader, -2 === groupHeader\n const getBoundsForItem = React.useCallback((canvas, col, row) => {\n const rect = canvas.getBoundingClientRect();\n if (col >= mappedColumns.length || row >= rows) {\n return undefined;\n }\n const scale = rect.width / width;\n const result = computeBounds(col, row, width, height, groupHeaderHeight, totalHeaderHeight, cellXOffset, cellYOffset, translateX, translateY, rows, freezeColumns, freezeTrailingRows, mappedColumns, rowHeight);\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 width,\n height,\n groupHeaderHeight,\n totalHeaderHeight,\n cellXOffset,\n cellYOffset,\n translateX,\n translateY,\n rows,\n freezeColumns,\n freezeTrailingRows,\n mappedColumns,\n rowHeight,\n ]);\n const getMouseArgsForPosition = React.useCallback((canvas, posX, posY, ev) => {\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, undefined, translateX);\n let button = 0;\n let buttons = 0;\n if (ev instanceof MouseEvent) {\n button = ev.button;\n buttons = ev.buttons;\n }\n // -1 === off right edge\n const col = getColumnIndexForX(x, effectiveCols, translateX);\n // -1: header or above\n // undefined: offbottom\n const row = getRowIndexForY(y, height, enableGroups, headerHeight, groupHeaderHeight, rows, rowHeight, cellYOffset, translateY, freezeTrailingRows);\n const shiftKey = ev?.shiftKey === true;\n const ctrlKey = ev?.ctrlKey === true;\n const metaKey = ev?.metaKey === true;\n const isTouch = (ev !== undefined && !(ev instanceof MouseEvent)) || ev?.pointerType === \"touch\";\n const scrollEdge = [\n x < 0 ? -1 : width < x ? 1 : 0,\n y < totalHeaderHeight ? -1 : height < y ? 1 : 0,\n ];\n let result;\n if (col === -1 || y < 0 || x < 0 || row === undefined || 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 innerHorizontal = horizontal * 2;\n let innerVertical = vertical * 2;\n if (horizontal === 0)\n innerHorizontal = col === -1 ? OutOfBoundsRegionAxis.EndPadding : OutOfBoundsRegionAxis.Center;\n if (vertical === 0)\n innerVertical = row === undefined ? OutOfBoundsRegionAxis.EndPadding : OutOfBoundsRegionAxis.Center;\n let isEdge = false;\n if (col === -1 && row === -1) {\n const b = getBoundsForItem(canvas, mappedColumns.length - 1, -1);\n assert(b !== undefined);\n isEdge = posX < b.x + b.width + edgeDetectionBuffer;\n }\n // This is used to ensure that clicking on the scrollbar doesn't unset the selection.\n // Unfortunately this doesn't work for overlay scrollbars because they are just a broken interaction\n // by design.\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 ?? rows - 1],\n region: [innerHorizontal, innerVertical],\n shiftKey,\n ctrlKey,\n metaKey,\n isEdge,\n isTouch,\n button,\n buttons,\n scrollEdge,\n isMaybeScrollbar,\n };\n }\n else if (row <= -1) {\n let bounds = getBoundsForItem(canvas, col, row);\n assert(bounds !== undefined);\n let isEdge = bounds !== undefined && 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 !== undefined);\n result = {\n kind: enableGroups && row === -2 ? groupHeaderKind : headerKind,\n location: [previousCol, row],\n bounds: bounds,\n group: mappedColumns[previousCol].group ?? \"\",\n isEdge,\n shiftKey,\n ctrlKey,\n metaKey,\n isTouch,\n localEventX: posX - bounds.x,\n localEventY: posY - bounds.y,\n button,\n buttons,\n scrollEdge,\n };\n }\n else {\n result = {\n kind: enableGroups && row === -2 ? groupHeaderKind : headerKind,\n group: mappedColumns[col].group ?? \"\",\n location: [col, row],\n bounds: bounds,\n isEdge,\n shiftKey,\n ctrlKey,\n metaKey,\n isTouch,\n localEventX: posX - bounds.x,\n localEventY: posY - bounds.y,\n button,\n buttons,\n scrollEdge,\n };\n }\n }\n else {\n const bounds = getBoundsForItem(canvas, col, row);\n assert(bounds !== undefined);\n const isEdge = bounds !== undefined && bounds.x + bounds.width - posX < edgeDetectionBuffer;\n let isFillHandle = false;\n if (fillHandle && selection.current !== undefined) {\n const fillHandleLocation = rectBottomRight(selection.current.range);\n const fillHandleCellBounds = getBoundsForItem(canvas, fillHandleLocation[0], fillHandleLocation[1]);\n if (fillHandleCellBounds !== undefined) {\n const handleLogicalCenterX = fillHandleCellBounds.x + fillHandleCellBounds.width - 2;\n const handleLogicalCenterY = fillHandleCellBounds.y + fillHandleCellBounds.height - 2;\n //check if posX and posY are within fillHandleClickSize from handleLogicalCenter\n isFillHandle =\n Math.abs(handleLogicalCenterX - posX) < fillHandleClickSize &&\n Math.abs(handleLogicalCenterY - posY) < fillHandleClickSize;\n }\n }\n result = {\n kind: \"cell\",\n location: [col, row],\n bounds: 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 buttons,\n scrollEdge,\n };\n }\n return result;\n }, [\n width,\n mappedColumns,\n cellXOffset,\n translateX,\n height,\n enableGroups,\n headerHeight,\n groupHeaderHeight,\n rows,\n rowHeight,\n cellYOffset,\n translateY,\n freezeTrailingRows,\n getBoundsForItem,\n fillHandle,\n selection,\n totalHeaderHeight,\n ]);\n const [hoveredItem] = hoveredItemInfo ?? [];\n const enqueueRef = React.useRef(() => {\n // do nothing\n });\n const hoverInfoRef = React.useRef(hoveredItemInfo);\n hoverInfoRef.current = hoveredItemInfo;\n const [bufferACtx, bufferBCtx] = React.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.getContext(\"2d\", { alpha: false }), b.getContext(\"2d\", { alpha: false })];\n }, []);\n React.useLayoutEffect(() => {\n if (bufferACtx === null || bufferBCtx === null)\n return;\n document.documentElement.append(bufferACtx.canvas);\n document.documentElement.append(bufferBCtx.canvas);\n return () => {\n bufferACtx.canvas.remove();\n bufferBCtx.canvas.remove();\n };\n }, [bufferACtx, bufferBCtx]);\n const renderStateProvider = React.useMemo(() => new RenderStateProvider(), []);\n const maxDPR = enableFirefoxRescaling && scrolling ? 1 : enableSafariRescaling && scrolling ? 2 : 5;\n const minimumCellWidth = experimental?.disableMinimumCellWidth === true ? 1 : 10;\n const lastArgsRef = React.useRef();\n const canvasCtx = React.useRef(null);\n const overlayCtx = React.useRef(null);\n const draw = React.useCallback(() => {\n const canvas = ref.current;\n const overlay = overlayRef.current;\n if (canvas === null || overlay === null)\n return;\n if (canvasCtx.current === null) {\n canvasCtx.current = canvas.getContext(\"2d\", { alpha: false });\n canvas.width = 0;\n canvas.height = 0;\n }\n if (overlayCtx.current === null) {\n overlayCtx.current = overlay.getContext(\"2d\", { alpha: false });\n overlay.width = 0;\n overlay.height = 0;\n }\n if (canvasCtx.current === null || overlayCtx.current === null || bufferACtx === null || bufferBCtx === null) {\n return;\n }\n let didOverride = false;\n const overrideCursor = (cursor) => {\n didOverride = true;\n setDrawCursorOverride(cursor);\n };\n const last = lastArgsRef.current;\n const current = {\n headerCanvasCtx: overlayCtx.current,\n canvasCtx: canvasCtx.current,\n bufferACtx,\n bufferBCtx,\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 ?? CompactSelection.empty(),\n rowHeight,\n verticalBorder,\n isResizing,\n resizeCol,\n isFocused,\n selection,\n fillHandle,\n drawCellCallback,\n hasAppendRow,\n overrideCursor,\n maxScaleFactor: maxDPR,\n freezeTrailingRows,\n rows,\n drawFocus: drawFocusRing,\n getCellContent,\n getGroupDetails: getGroupDetails ?? (name => ({ name })),\n getRowThemeOverride,\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: experimental?.hyperWrapping ?? false,\n touchMode: lastWasTouch,\n enqueue: enqueueRef.current,\n renderStateProvider,\n renderStrategy: experimental?.renderStrategy ?? (browserIsSafari.value ? \"double-buffer\" : \"single-buffer\"),\n getCellRenderer,\n minimumCellWidth,\n };\n // This confusing bit of code due to some poor design. Long story short, the damage property is only used\n // with what is effectively the \"last args\" for the last normal draw anyway. We don't want the drawing code\n // to look at this and go \"shit dawg, nothing changed\" so we force it to draw frash, but the damage restricts\n // the draw anyway.\n //\n // Dear future Jason, I'm sorry. It was expedient, it worked, and had almost zero perf overhead. THe universe\n // basically made me do it. What choice did I have?\n if (current.damage === undefined) {\n lastArgsRef.current = current;\n drawGrid(current, last);\n }\n else {\n drawGrid(current, undefined);\n }\n // don't reset on damage events\n if (!didOverride && (current.damage === undefined || current.damage.has(hoverInfoRef?.current?.[0]))) {\n setDrawCursorOverride(undefined);\n }\n }, [\n bufferACtx,\n bufferBCtx,\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 hasAppendRow,\n resizeCol,\n isFocused,\n selection,\n fillHandle,\n freezeTrailingRows,\n rows,\n drawFocusRing,\n maxDPR,\n getCellContent,\n getGroupDetails,\n getRowThemeOverride,\n drawCellCallback,\n drawHeaderCallback,\n prelightCells,\n highlightRegions,\n imageLoader,\n spriteManager,\n scrolling,\n experimental?.hyperWrapping,\n experimental?.renderStrategy,\n lastWasTouch,\n renderStateProvider,\n getCellRenderer,\n minimumCellWidth,\n ]);\n const lastDrawRef = React.useRef(draw);\n React.useLayoutEffect(() => {\n draw();\n lastDrawRef.current = draw;\n }, [draw]);\n React.useLayoutEffect(() => {\n const fn = async () => {\n if (document?.fonts?.ready === undefined)\n return;\n await document.fonts.ready;\n lastArgsRef.current = undefined;\n lastDrawRef.current();\n };\n void fn();\n }, []);\n const damageInternal = React.useCallback((locations) => {\n damageRegion.current = locations;\n lastDrawRef.current();\n damageRegion.current = undefined;\n }, []);\n const enqueue = useAnimationQueue(damageInternal);\n enqueueRef.current = enqueue;\n const damage = React.useCallback((cells) => {\n damageInternal(new CellSet(cells.map(x => x.cell)));\n }, [damageInternal]);\n imageLoader.setCallback(damageInternal);\n const [overFill, setOverFill] = React.useState(false);\n const [hCol, hRow] = hoveredItem ?? [];\n const headerHovered = hCol !== undefined && hRow === -1;\n const groupHeaderHovered = hCol !== undefined && hRow === -2;\n let clickableInnerCellHovered = false;\n let editableBoolHovered = false;\n let cursorOverride = drawCursorOverride;\n if (cursorOverride === undefined && hCol !== undefined && hRow !== undefined && hRow > -1 && hRow < rows) {\n const cell = getCellContent([hCol, hRow], true);\n clickableInnerCellHovered =\n cell.kind === InnerGridCellKind.NewRow ||\n (cell.kind === InnerGridCellKind.Marker && cell.markerKind !== \"number\");\n editableBoolHovered = cell.kind === GridCellKind.Boolean && booleanCellIsEditable(cell);\n cursorOverride = cell.cursor;\n }\n const canDrag = hoveredOnEdge ?? false;\n const cursor = isDragging\n ? \"grabbing\"\n : canDrag || isResizing\n ? \"col-resize\"\n : overFill || isFilling\n ? \"crosshair\"\n : cursorOverride !== undefined\n ? cursorOverride\n : headerHovered || clickableInnerCellHovered || editableBoolHovered || groupHeaderHovered\n ? \"pointer\"\n : \"default\";\n const style = React.useMemo(() => ({\n // width,\n // height,\n contain: \"strict\",\n display: \"block\",\n cursor,\n }), [cursor]);\n const lastSetCursor = React.useRef(\"default\");\n const target = eventTargetRef?.current;\n if (target !== null && target !== undefined && lastSetCursor.current !== style.cursor) {\n // because we have an event target we need to set its cursor instead.\n target.style.cursor = lastSetCursor.current = style.cursor;\n }\n const groupHeaderActionForEvent = React.useCallback((group, bounds, localEventX, localEventY) => {\n if (getGroupDetails === undefined)\n return undefined;\n const groupDesc = getGroupDetails(group);\n if (groupDesc.actions !== undefined) {\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 undefined;\n }, [getGroupDetails]);\n const isOverHeaderMenu = React.useCallback((canvas, col, clientX, clientY) => {\n const header = columns[col];\n if (!isDragging && !isResizing && header.hasMenu === true && !(hoveredOnEdge ?? false)) {\n const headerBounds = getBoundsForItem(canvas, col, -1);\n assert(headerBounds !== undefined);\n const menuBounds = getHeaderMenuBounds(headerBounds.x, headerBounds.y, headerBounds.width, headerBounds.height, direction(header.title) === \"rtl\");\n if (clientX > menuBounds.x &&\n clientX < menuBounds.x + menuBounds.width &&\n clientY > menuBounds.y &&\n clientY < menuBounds.y + menuBounds.height) {\n return headerBounds;\n }\n }\n return undefined;\n }, [columns, getBoundsForItem, hoveredOnEdge, isDragging, isResizing]);\n const downTime = React.useRef(0);\n const downPosition = React.useRef();\n const mouseDown = React.useRef(false);\n const onMouseDownImpl = React.useCallback((ev) => {\n const canvas = ref.current;\n const eventTarget = 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 }\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 &&\n isOverHeaderMenu(canvas, args.location[0], clientX, clientY) !== undefined) {\n return;\n }\n else if (args.kind === groupHeaderKind) {\n const action = groupHeaderActionForEvent(args.group, args.bounds, args.localEventX, args.localEventY);\n if (action !== undefined) {\n return;\n }\n }\n onMouseDown?.(args);\n if (!args.isTouch &&\n isDraggable !== true &&\n isDraggable !== args.kind &&\n args.button < 3 &&\n args.button !== 1) {\n // preventing default in touch events stops scroll\n ev.preventDefault();\n }\n }, [eventTargetRef, isDraggable, getMouseArgsForPosition, groupHeaderActionForEvent, isOverHeaderMenu, onMouseDown]);\n useEventListener(\"touchstart\", onMouseDownImpl, window, false);\n useEventListener(\"mousedown\", onMouseDownImpl, window, false);\n const lastUpTime = React.useRef(0);\n const onMouseUpImpl = React.useCallback((ev) => {\n const lastUpTimeValue = lastUpTime.current;\n lastUpTime.current = Date.now();\n const canvas = ref.current;\n mouseDown.current = false;\n if (onMouseUp === undefined || canvas === null)\n return;\n const eventTarget = eventTargetRef?.current;\n const isOutside = ev.target !== canvas && ev.target !== eventTarget;\n let clientX;\n let clientY;\n let canCancel = true;\n if (ev instanceof MouseEvent) {\n clientX = ev.clientX;\n clientY = ev.clientY;\n canCancel = ev.button < 3;\n if (ev.pointerType === \"touch\") {\n return;\n }\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 (lastUpTimeValue !== 0 && Date.now() - lastUpTimeValue < (args.isTouch ? 1000 : 500)) {\n args = {\n ...args,\n isDoubleClick: true,\n };\n }\n if (lastWasTouchRef.current !== args.isTouch) {\n setLastWasTouch(args.isTouch);\n }\n if (!isOutside && ev.cancelable && canCancel) {\n ev.preventDefault();\n }\n const [col] = args.location;\n const headerBounds = isOverHeaderMenu(canvas, col, clientX, clientY);\n if (args.kind === headerKind && headerBounds !== undefined) {\n if (args.button !== 0 || downPosition.current?.[0] !== col || downPosition.current?.[1] !== -1) {\n // force outside so that click will not process\n onMouseUp(args, true);\n }\n return;\n }\n else if (args.kind === groupHeaderKind) {\n const action = groupHeaderActionForEvent(args.group, args.bounds, args.localEventX, args.localEventY);\n if (action !== undefined) {\n if (args.button === 0) {\n action.onClick(args);\n }\n return;\n }\n }\n onMouseUp(args, isOutside);\n }, [onMouseUp, eventTargetRef, getMouseArgsForPosition, isOverHeaderMenu, groupHeaderActionForEvent]);\n useEventListener(\"mouseup\", onMouseUpImpl, window, false);\n useEventListener(\"touchend\", onMouseUpImpl, window, false);\n const onClickImpl = React.useCallback((ev) => {\n const canvas = ref.current;\n if (canvas === null)\n return;\n const eventTarget = eventTargetRef?.current;\n const isOutside = ev.target !== canvas && ev.target !== eventTarget;\n let clientX;\n let clientY;\n let canCancel = true;\n if (ev instanceof MouseEvent) {\n clientX = ev.clientX;\n clientY = ev.clientY;\n canCancel = ev.button < 3;\n }\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 && canCancel) {\n ev.preventDefault();\n }\n const [col] = args.location;\n const headerBounds = isOverHeaderMenu(canvas, col, clientX, clientY);\n if (args.kind === headerKind && headerBounds !== undefined) {\n if (args.button === 0 && downPosition.current?.[0] === col && downPosition.current?.[1] === -1) {\n onHeaderMenuClick?.(col, headerBounds);\n }\n }\n else if (args.kind === groupHeaderKind) {\n const action = groupHeaderActionForEvent(args.group, args.bounds, args.localEventX, args.localEventY);\n if (action !== undefined && args.button === 0) {\n action.onClick(args);\n }\n }\n }, [eventTargetRef, getMouseArgsForPosition, isOverHeaderMenu, onHeaderMenuClick, groupHeaderActionForEvent]);\n useEventListener(\"click\", onClickImpl, window, false);\n const onContextMenuImpl = React.useCallback((ev) => {\n const canvas = ref.current;\n const eventTarget = eventTargetRef?.current;\n if (canvas === null || (ev.target !== canvas && ev.target !== eventTarget) || onContextMenu === undefined)\n return;\n const args = getMouseArgsForPosition(canvas, ev.clientX, ev.clientY, ev);\n onContextMenu(args, () => {\n if (ev.cancelable)\n ev.preventDefault();\n });\n }, [eventTargetRef, getMouseArgsForPosition, onContextMenu]);\n useEventListener(\"contextmenu\", onContextMenuImpl, eventTargetRef?.current ?? null, false);\n const onAnimationFrame = React.useCallback(values => {\n damageRegion.current = new CellSet(values.map(x => x.item));\n hoverValues.current = values;\n lastDrawRef.current();\n damageRegion.current = undefined;\n }, []);\n const animManagerValue = React.useMemo(() => new AnimationManager(onAnimationFrame), [onAnimationFrame]);\n const animationManager = React.useRef(animManagerValue);\n animationManager.current = animManagerValue;\n React.useLayoutEffect(() => {\n const am = animationManager.current;\n if (hoveredItem === undefined || hoveredItem[1] < 0) {\n am.setHovered(hoveredItem);\n return;\n }\n const cell = getCellContent(hoveredItem, true);\n const r = getCellRenderer(cell);\n const cellNeedsHover = (r === undefined && cell.kind === GridCellKind.Custom) ||\n (r?.needsHover !== undefined && (typeof r.needsHover === \"boolean\" ? r.needsHover : r.needsHover(cell)));\n am.setHovered(cellNeedsHover ? hoveredItem : undefined);\n }, [getCellContent, getCellRenderer, hoveredItem]);\n const hoveredRef = React.useRef();\n const onMouseMoveImpl = React.useCallback((ev) => {\n const canvas = ref.current;\n if (canvas === null)\n return;\n const eventTarget = 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 // we are obscured by something else, so we want to not register events if we are not doing anything\n // important already\n return;\n }\n // the point here is not to trigger re-renders every time the mouse moves over a cell\n // that doesn't care about the mouse positon.\n const maybeSetHoveredInfo = (newVal, needPosition) => {\n setHoveredItemInfo(cv => {\n if (cv === newVal)\n return cv;\n if (cv?.[0][0] === newVal?.[0][0] &&\n cv?.[0][1] === newVal?.[0][1] &&\n ((cv?.[1][0] === newVal?.[1][0] && cv?.[1][1] === newVal?.[1][1]) || !needPosition)) {\n return cv;\n }\n return newVal;\n });\n };\n if (!mouseEventArgsAreEqual(args, hoveredRef.current)) {\n setDrawCursorOverride(undefined);\n onItemHovered?.(args);\n maybeSetHoveredInfo(args.kind === outOfBoundsKind ? undefined : [args.location, [args.localEventX, args.localEventY]], true);\n hoveredRef.current = args;\n }\n else if (args.kind === \"cell\" || args.kind === headerKind || args.kind === groupHeaderKind) {\n let needsDamageCell = false;\n let needsHoverPosition = true;\n if (args.kind === \"cell\") {\n const toCheck = getCellContent(args.location);\n const rendererNeeds = getCellRenderer(toCheck)?.needsHoverPosition;\n // custom cells we will assume need the position if they don't explicitly say they don't, everything\n // else we will assume doesn't need it.\n needsHoverPosition = rendererNeeds ?? toCheck.kind === GridCellKind.Custom;\n needsDamageCell = needsHoverPosition;\n }\n else if (args.kind === groupHeaderKind) {\n needsDamageCell = true;\n }\n const newInfo = [args.location, [args.localEventX, args.localEventY]];\n maybeSetHoveredInfo(newInfo, needsHoverPosition);\n hoverInfoRef.current = newInfo;\n if (needsDamageCell) {\n damageInternal(new CellSet([args.location]));\n }\n }\n const notRowMarkerCol = args.location[0] >= (firstColAccessible ? 0 : 1);\n setHoveredOnEdge(args.kind === headerKind && args.isEdge && notRowMarkerCol && allowResize === true);\n setOverFill(args.kind === \"cell\" && args.isFillHandle);\n onMouseMoveRaw?.(ev);\n onMouseMove(args);\n }, [\n eventTargetRef,\n getMouseArgsForPosition,\n firstColAccessible,\n allowResize,\n onMouseMoveRaw,\n onMouseMove,\n onItemHovered,\n getCellContent,\n getCellRenderer,\n damageInternal,\n ]);\n useEventListener(\"mousemove\", onMouseMoveImpl, window, true);\n const onKeyDownImpl = React.useCallback((event) => {\n const canvas = ref.current;\n if (canvas === null)\n return;\n let bounds;\n let location = undefined;\n if (selection.current !== undefined) {\n bounds = getBoundsForItem(canvas, selection.current.cell[0], selection.current.cell[1]);\n location = selection.current.cell;\n }\n onKeyDown?.({\n bounds,\n stopPropagation: () => event.stopPropagation(),\n preventDefault: () => event.preventDefault(),\n cancel: () => undefined,\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 }, [onKeyDown, selection, getBoundsForItem]);\n const onKeyUpImpl = React.useCallback((event) => {\n const canvas = ref.current;\n if (canvas === null)\n return;\n let bounds;\n let location = undefined;\n if (selection.current !== undefined) {\n bounds = getBoundsForItem(canvas, selection.current.cell[0], selection.current.cell[1]);\n location = selection.current.cell;\n }\n onKeyUp?.({\n bounds,\n stopPropagation: () => event.stopPropagation(),\n preventDefault: () => event.preventDefault(),\n cancel: () => undefined,\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 }, [onKeyUp, selection, getBoundsForItem]);\n const refImpl = React.useCallback((instance) => {\n ref.current = instance;\n if (canvasRef !== undefined) {\n canvasRef.current = instance;\n }\n }, [canvasRef]);\n const onDragStartImpl = React.useCallback((event) => {\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?.({\n ...args,\n setData,\n setDragImage,\n preventDefault: () => (prevented = true),\n defaultPrevented: () => prevented,\n });\n if (!prevented && dragMime !== undefined && dragData !== undefined && event.dataTransfer !== null) {\n event.dataTransfer.setData(dragMime, dragData);\n event.dataTransfer.effectAllowed = \"copyLink\";\n if (dragImage !== undefined && dragImageX !== undefined && dragImageY !== undefined) {\n event.dataTransfer.setDragImage(dragImage, dragImageX, dragImageY);\n }\n else {\n const [col, row] = args.location;\n if (row !== undefined) {\n const offscreen = document.createElement(\"canvas\");\n const boundsForDragTarget = getBoundsForItem(canvas, col, row);\n assert(boundsForDragTarget !== undefined);\n const dpr = Math.ceil(window.devicePixelRatio ?? 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.headerFontFull;\n ctx.fillStyle = theme.bgHeader;\n ctx.fillRect(0, 0, offscreen.width, offscreen.height);\n drawHeader(ctx, 0, 0, boundsForDragTarget.width, boundsForDragTarget.height, mappedColumns[col], false, theme, false, false, 0, spriteManager, drawHeaderCallback, false);\n }\n else {\n ctx.font = theme.baseFontFull;\n ctx.fillStyle = theme.bgCell;\n ctx.fillRect(0, 0, offscreen.width, offscreen.height);\n drawCell(ctx, getCellContent([col, row]), 0, row, false, false, 0, 0, boundsForDragTarget.width, boundsForDragTarget.height, false, theme, theme.bgCell, imageLoader, spriteManager, 1, undefined, false, 0, undefined, undefined, undefined, renderStateProvider, getCellRenderer, () => undefined);\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(offscreen, boundsForDragTarget.width / 2, boundsForDragTarget.height / 2);\n window.setTimeout(() => {\n offscreen.remove();\n }, 0);\n }\n }\n }\n else {\n event.preventDefault();\n }\n }, [\n isDraggable,\n isResizing,\n getMouseArgsForPosition,\n onDragStart,\n getBoundsForItem,\n theme,\n mappedColumns,\n spriteManager,\n drawHeaderCallback,\n getCellContent,\n imageLoader,\n renderStateProvider,\n getCellRenderer,\n ]);\n useEventListener(\"dragstart\", onDragStartImpl, eventTargetRef?.current ?? null, false, false);\n const activeDropTarget = React.useRef();\n const onDragOverImpl = React.useCallback((event) => {\n const canvas = ref.current;\n if (onDrop !== undefined) {\n // Need to preventDefault to allow drop\n event.preventDefault();\n }\n if (canvas === null || onDragOverCell === undefined) {\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] = activeDropTarget.current ?? [];\n if (activeCol !== col || activeRow !== row) {\n activeDropTarget.current = [col, row];\n onDragOverCell([col, row], event.dataTransfer);\n }\n }, [firstColAccessible, getMouseArgsForPosition, onDragOverCell, onDrop]);\n useEventListener(\"dragover\", onDragOverImpl, eventTargetRef?.current ?? null, false, false);\n const onDragEndImpl = React.useCallback(() => {\n activeDropTarget.current = undefined;\n onDragEnd?.();\n }, [onDragEnd]);\n useEventListener(\"dragend\", onDragEndImpl, eventTargetRef?.current ?? null, false, false);\n const onDropImpl = React.useCallback((event) => {\n const canvas = ref.current;\n if (canvas === null || onDrop === undefined) {\n return;\n }\n // Default can mess up sometimes.\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 }, [firstColAccessible, getMouseArgsForPosition, onDrop]);\n useEventListener(\"drop\", onDropImpl, eventTargetRef?.current ?? null, false, false);\n const onDragLeaveImpl = React.useCallback(() => {\n onDragLeave?.();\n }, [onDragLeave]);\n useEventListener(\"dragleave\", onDragLeaveImpl, eventTargetRef?.current ?? null, false, false);\n const selectionRef = React.useRef(selection);\n selectionRef.current = selection;\n const focusRef = React.useRef(null);\n const focusElement = React.useCallback((el) => {\n // We don't want to steal the focus if we don't currently own the focus.\n if (ref.current === null || !ref.current.contains(document.activeElement))\n return;\n if (el === null && selectionRef.current.current !== undefined) {\n canvasRef?.current?.focus({\n preventScroll: true,\n });\n }\n else if (el !== null) {\n el.focus({\n preventScroll: true,\n });\n }\n focusRef.current = el;\n }, [canvasRef]);\n React.useImperativeHandle(forwardedRef, () => ({\n focus: () => {\n const el = focusRef.current;\n // The element in the ref may have been removed however our callback method ref\n // won't see the removal so bad things happen. Checking to see if the element is\n // no longer attached is enough to resolve the problem. In the future this\n // should be replaced with something much more robust.\n if (el === null || !document.contains(el)) {\n canvasRef?.current?.focus({\n preventScroll: true,\n });\n }\n else {\n el.focus({\n preventScroll: true,\n });\n }\n },\n getBounds: (col, row) => {\n if (canvasRef === undefined || canvasRef.current === null) {\n return undefined;\n }\n return getBoundsForItem(canvasRef.current, col ?? 0, row ?? -1);\n },\n damage,\n }), [canvasRef, damage, getBoundsForItem]);\n const lastFocusedSubdomNode = React.useRef();\n const accessibilityTree = useDebouncedMemo(() => {\n if (width < 50 || experimental?.disableAccessibilityTree === true)\n return null;\n let effectiveCols = getEffectiveColumns(mappedColumns, cellXOffset, width, dragAndDropState, translateX);\n const colOffset = firstColAccessible ? 0 : -1;\n if (!firstColAccessible && effectiveCols[0]?.sourceIndex === 0) {\n effectiveCols = effectiveCols.slice(1);\n }\n const [fCol, fRow] = selection.current?.cell ?? [];\n const range = selection.current?.range;\n const visibleCols = effectiveCols.map(c => c.sourceIndex);\n const visibleRows = makeRange(cellYOffset, Math.min(rows, cellYOffset + accessibilityHeight));\n // Maintain focus within grid if we own it but focused cell is outside visible viewport\n // and not rendered.\n if (fCol !== undefined &&\n fRow !== undefined &&\n !(visibleCols.includes(fCol) && visibleRows.includes(fRow))) {\n focusElement(null);\n }\n return (React.createElement(\"table\", { key: \"access-tree\", role: \"grid\", \"aria-rowcount\": rows + 1, \"aria-multiselectable\": \"true\", \"aria-colcount\": mappedColumns.length + colOffset },\n React.createElement(\"thead\", { role: \"rowgroup\" },\n React.createElement(\"tr\", { role: \"row\", \"aria-rowindex\": 1 }, effectiveCols.map(c => (React.createElement(\"th\", { role: \"columnheader\", \"aria-selected\": selection.columns.hasIndex(c.sourceIndex), \"aria-colindex\": c.sourceIndex + 1 + colOffset, tabIndex: -1, onFocus: e => {\n if (e.target === focusRef.current)\n return;\n return onCellFocused?.([c.sourceIndex, -1]);\n }, key: c.sourceIndex }, c.title))))),\n React.createElement(\"tbody\", { role: \"rowgroup\" }, visibleRows.map(row => (React.createElement(\"tr\", { role: \"row\", \"aria-selected\": selection.rows.hasIndex(row), key: row, \"aria-rowindex\": row + 2 }, effectiveCols.map(c => {\n const col = c.sourceIndex;\n const key = packColRowToNumber(col, row);\n const focused = fCol === col && fRow === row;\n const selected = range !== undefined &&\n col >= range.x &&\n col < range.x + range.width &&\n row >= range.y &&\n row < range.y + range.height;\n const id = `glide-cell-${col}-${row}`;\n const location = [col, row];\n const cellContent = getCellContent(location, true);\n return (React.createElement(\"td\", { key: key, role: \"gridcell\", \"aria-colindex\": col + 1 + colOffset, \"aria-selected\": selected, \"aria-readonly\": isInnerOnlyCell(cellContent) || !isReadWriteCell(cellContent), id: id, \"data-testid\": id, onClick: () => {\n const canvas = canvasRef?.current;\n if (canvas === null || canvas === undefined)\n return;\n return onKeyDown?.({\n bounds: getBoundsForItem(canvas, col, row),\n cancel: () => undefined,\n preventDefault: () => undefined,\n stopPropagation: () => undefined,\n ctrlKey: false,\n key: \"Enter\",\n keyCode: 13,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: undefined,\n location,\n });\n }, onFocusCapture: e => {\n if (e.target === focusRef.current ||\n (lastFocusedSubdomNode.current?.[0] === col &&\n lastFocusedSubdomNode.current?.[1] === row))\n return;\n lastFocusedSubdomNode.current = location;\n return onCellFocused?.(location);\n }, ref: focused ? focusElement : undefined, tabIndex: -1 }, getRowData(cellContent, getCellRenderer)));\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 ], 200);\n const opacityX = freezeColumns === 0 || !fixedShadowX ? 0 : cellXOffset > freezeColumns ? 1 : clamp(-translateX / 100, 0, 1);\n const absoluteOffsetY = -cellYOffset * 32 + translateY;\n const opacityY = !fixedShadowY ? 0 : clamp(-absoluteOffsetY / 100, 0, 1);\n const stickyShadow = React.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: height,\n opacity: opacityX,\n pointerEvents: \"none\",\n transition: !smoothScrollX ? \"opacity 0.2s\" : undefined,\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: width,\n height: height,\n opacity: opacityY,\n pointerEvents: \"none\",\n transition: !smoothScrollY ? \"opacity 0.2s\" : undefined,\n boxShadow: \"inset 0 13px 10px -13px rgba(0, 0, 0, 0.2)\",\n };\n return (React.createElement(React.Fragment, null,\n opacityX > 0 && React.createElement(\"div\", { id: \"shadow-x\", style: styleX }),\n opacityY > 0 && React.createElement(\"div\", { id: \"shadow-y\", style: styleY })));\n }, [opacityX, opacityY, stickyX, width, smoothScrollX, totalHeaderHeight, height, smoothScrollY]);\n const overlayStyle = React.useMemo(() => ({\n position: \"absolute\",\n top: 0,\n left: 0,\n }), []);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"canvas\", { \"data-testid\": \"data-grid-canvas\", tabIndex: 0, onKeyDown: onKeyDownImpl, onKeyUp: onKeyUpImpl, onFocus: onCanvasFocused, onBlur: onCanvasBlur, ref: refImpl, style: style }, accessibilityTree),\n React.createElement(\"canvas\", { ref: overlayRef, style: overlayStyle }),\n stickyShadow));\n};\nexport default React.memo(React.forwardRef(DataGrid));\n//# sourceMappingURL=data-grid.js.map","/* eslint-disable unicorn/consistent-destructuring */\nimport clamp from \"lodash/clamp.js\";\nimport * as React from \"react\";\nimport DataGrid, {} from \"../data-grid/data-grid.js\";\n// Dear Past Jason,\n// Wtf does this function do? If you remember in the future come back and add a comment\n// -- Future-Past Jason\nfunction offsetColumnSize(column, width, min, max) {\n return clamp(Math.round(width - (column.growOffset ?? 0)), Math.ceil(min), Math.floor(max));\n}\nconst DataGridDnd = p => {\n const [resizeColStartX, setResizeColStartX] = React.useState();\n const [resizeCol, setResizeCol] = React.useState();\n const [dragCol, setDragCol] = React.useState();\n const [dropCol, setDropCol] = React.useState();\n const [dragColActive, setDragColActive] = React.useState(false);\n const [dragStartX, setDragStartX] = React.useState();\n const [dragRow, setDragRow] = React.useState();\n const [dropRow, setDropRow] = React.useState();\n const [dragRowActive, setDragRowActive] = React.useState(false);\n const [dragStartY, setDragStartY] = React.useState();\n const { onHeaderMenuClick, getCellContent, onColumnMoved, onColumnResize, onColumnResizeStart, onColumnResizeEnd, gridRef, maxColumnWidth, minColumnWidth, onRowMoved, lockColumns, onColumnProposeMove, onMouseDown, onMouseUp, onItemHovered, onDragStart, canvasRef, } = p;\n const canResize = (onColumnResize ?? onColumnResizeEnd ?? onColumnResizeStart) !== undefined;\n const { columns, selection } = p;\n const selectedColumns = selection.columns;\n const onItemHoveredImpl = React.useCallback((args) => {\n const [col, row] = args.location;\n if (dragCol !== undefined && dropCol !== col && col >= lockColumns) {\n setDragColActive(true);\n setDropCol(col);\n }\n else if (dragRow !== undefined && row !== undefined) {\n setDragRowActive(true);\n setDropRow(Math.max(0, row));\n // Don't emit onItemHovered if resizing or reordering a column or row.\n }\n else if (resizeCol === undefined && !dragColActive && !dragRowActive) {\n onItemHovered?.(args);\n }\n }, [dragCol, dragRow, dropCol, onItemHovered, lockColumns, resizeCol, dragColActive, dragRowActive]);\n const canDragCol = onColumnMoved !== undefined;\n const onMouseDownImpl = React.useCallback((args) => {\n if (args.button === 0) {\n const [col, row] = args.location;\n if (args.kind === \"out-of-bounds\" && args.isEdge && canResize) {\n const bounds = gridRef?.current?.getBounds(columns.length - 1, -1);\n if (bounds !== undefined) {\n setResizeColStartX(bounds.x);\n setResizeCol(columns.length - 1);\n }\n }\n else if (args.kind === \"header\" && col >= lockColumns) {\n const canvas = 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?.(columns[col], width, col, width + (columns[col].growOffset ?? 0));\n }\n else if (args.kind === \"header\" && canDragCol) {\n setDragStartX(args.bounds.x);\n setDragCol(col);\n }\n }\n else if (args.kind === \"cell\" &&\n lockColumns > 0 &&\n col === 0 &&\n row !== undefined &&\n onRowMoved !== undefined) {\n setDragStartY(args.bounds.y);\n setDragRow(row);\n }\n }\n onMouseDown?.(args);\n }, [onMouseDown, canResize, lockColumns, onRowMoved, gridRef, columns, canDragCol, onColumnResizeStart, canvasRef]);\n const onHeaderMenuClickMangled = React.useCallback((col, screenPosition) => {\n if (dragColActive || dragRowActive)\n return;\n onHeaderMenuClick?.(col, screenPosition);\n }, [dragColActive, dragRowActive, onHeaderMenuClick]);\n const lastResizeWidthRef = React.useRef(-1);\n const clearAll = React.useCallback(() => {\n lastResizeWidthRef.current = -1;\n setDragRow(undefined);\n setDropRow(undefined);\n setDragStartY(undefined);\n setDragRowActive(false);\n setDragCol(undefined);\n setDropCol(undefined);\n setDragStartX(undefined);\n setDragColActive(false);\n setResizeCol(undefined);\n setResizeColStartX(undefined);\n }, []);\n const onMouseUpImpl = React.useCallback((args, isOutside) => {\n if (args.button === 0) {\n if (resizeCol !== undefined) {\n // if the column is in selection, the selection may contain extra cols, so lets just re-send the last\n // resize event to all those columns.\n if (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(col, lastResizeWidthRef.current, minColumnWidth, maxColumnWidth);\n onColumnResize?.(col, newSize, c, newSize + (col.growOffset ?? 0));\n }\n }\n const ns = offsetColumnSize(columns[resizeCol], lastResizeWidthRef.current, minColumnWidth, maxColumnWidth);\n onColumnResizeEnd?.(columns[resizeCol], ns, resizeCol, ns + (columns[resizeCol].growOffset ?? 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?.(col, s, c, s + (col.growOffset ?? 0));\n }\n }\n }\n clearAll();\n if (dragCol !== undefined && dropCol !== undefined) {\n onColumnMoved?.(dragCol, dropCol);\n }\n if (dragRow !== undefined && dropRow !== undefined) {\n onRowMoved?.(dragRow, dropRow);\n }\n }\n onMouseUp?.(args, isOutside);\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 const dragOffset = React.useMemo(() => {\n if (dragCol === undefined || dropCol === undefined)\n return undefined;\n if (dragCol === dropCol)\n return undefined;\n if (onColumnProposeMove?.(dragCol, dropCol) === false)\n return undefined;\n return {\n src: dragCol,\n dest: dropCol,\n };\n }, [dragCol, dropCol, onColumnProposeMove]);\n const onMouseMove = React.useCallback((event) => {\n const canvas = canvasRef?.current;\n if (dragCol !== undefined && dragStartX !== undefined) {\n const diff = Math.abs(event.clientX - dragStartX);\n if (diff > 20) {\n setDragColActive(true);\n }\n }\n else if (dragRow !== undefined && dragStartY !== undefined) {\n const diff = Math.abs(event.clientY - dragStartY);\n if (diff > 20) {\n setDragRowActive(true);\n }\n }\n else if (resizeCol !== undefined && resizeColStartX !== undefined && 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?.(column, ns, resizeCol, ns + (column.growOffset ?? 0));\n lastResizeWidthRef.current = newWidth;\n if (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?.(col, s, c, s + (col.growOffset ?? 0));\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 const getMangledCellContent = React.useCallback((cell, forceStrict) => {\n if (dragRow === undefined || dropRow === undefined)\n return getCellContent(cell, forceStrict);\n // eslint-disable-next-line prefer-const\n let [col, row] = cell;\n if (row === dropRow) {\n row = dragRow;\n }\n else {\n if (row > dropRow)\n row -= 1;\n if (row >= dragRow)\n row += 1;\n }\n return getCellContent([col, row], forceStrict);\n }, [dragRow, dropRow, getCellContent]);\n const onDragStartImpl = React.useCallback(args => {\n onDragStart?.(args);\n if (!args.defaultPrevented()) {\n clearAll();\n }\n }, [clearAll, onDragStart]);\n return (React.createElement(DataGrid, { accessibilityHeight: p.accessibilityHeight, canvasRef: p.canvasRef, cellXOffset: p.cellXOffset, cellYOffset: p.cellYOffset, columns: p.columns, disabledRows: p.disabledRows, drawFocusRing: p.drawFocusRing, drawHeader: p.drawHeader, drawCell: p.drawCell, enableGroups: p.enableGroups, eventTargetRef: p.eventTargetRef, experimental: p.experimental, fillHandle: p.fillHandle, firstColAccessible: p.firstColAccessible, fixedShadowX: p.fixedShadowX, fixedShadowY: p.fixedShadowY, freezeColumns: p.freezeColumns, getCellRenderer: p.getCellRenderer, getGroupDetails: p.getGroupDetails, getRowThemeOverride: p.getRowThemeOverride, groupHeaderHeight: p.groupHeaderHeight, headerHeight: p.headerHeight, headerIcons: p.headerIcons, height: p.height, highlightRegions: p.highlightRegions, imageWindowLoader: p.imageWindowLoader, resizeColumn: resizeCol, isDraggable: p.isDraggable, isFilling: p.isFilling, isFocused: p.isFocused, onCanvasBlur: p.onCanvasBlur, onCanvasFocused: p.onCanvasFocused, onCellFocused: p.onCellFocused, onContextMenu: p.onContextMenu, onDragEnd: p.onDragEnd, onDragLeave: p.onDragLeave, onDragOverCell: p.onDragOverCell, onDrop: p.onDrop, onKeyDown: p.onKeyDown, onKeyUp: p.onKeyUp, onMouseMove: p.onMouseMove, prelightCells: p.prelightCells, rowHeight: p.rowHeight, rows: p.rows, selection: p.selection, smoothScrollX: p.smoothScrollX, smoothScrollY: p.smoothScrollY, theme: p.theme, freezeTrailingRows: p.freezeTrailingRows, hasAppendRow: p.hasAppendRow, translateX: p.translateX, translateY: p.translateY, verticalBorder: p.verticalBorder, width: p.width, getCellContent: getMangledCellContent, isResizing: resizeCol !== undefined, onHeaderMenuClick: onHeaderMenuClickMangled, isDragging: dragColActive, onItemHovered: onItemHoveredImpl, onDragStart: onDragStartImpl, onMouseDown: onMouseDownImpl, allowResize: canResize, onMouseUp: onMouseUpImpl, dragAndDropState: dragOffset, onMouseMoveRaw: onMouseMove, ref: gridRef }));\n};\nexport default DataGridDnd;\n//# sourceMappingURL=data-grid-dnd.js.map","/* eslint-disable @typescript-eslint/strict-boolean-expressions */\nimport { useLayoutEffect, useState, useRef } from \"react\";\nexport function useResizeDetector(initialSize) {\n const ref = useRef(null);\n const [size, setSize] = useState({\n width: initialSize?.[0],\n height: initialSize?.[1],\n });\n useLayoutEffect(() => {\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, undefined);\n }\n return () => {\n resizeObserver.disconnect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref.current]);\n return { ref, ...size };\n}\n//# sourceMappingURL=resize-detector.js.map","import { useEffect, useRef } from \"react\";\nconst useKineticScroll = (isEnabled, callback, targetScroller) => {\n const rafId = useRef(null);\n const isTouching = useRef(null);\n const lastScrollPosition = useRef(null);\n const sameCount = useRef(0);\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n const scrollEl = targetScroller.current;\n useEffect(() => {\n const handleScroll = () => {\n if (isTouching.current === false && scrollEl !== null) {\n const currentScrollPosition = [scrollEl.scrollLeft, scrollEl.scrollTop];\n if (lastScrollPosition.current?.[0] === currentScrollPosition[0] &&\n lastScrollPosition.current?.[1] === currentScrollPosition[1]) {\n if (sameCount.current > 10) {\n // Scroll position hasn't changed, stop the animation frame\n lastScrollPosition.current = null;\n isTouching.current = null;\n return;\n }\n else {\n sameCount.current++;\n }\n }\n else {\n sameCount.current = 0;\n callbackRef.current(currentScrollPosition[0], currentScrollPosition[1]);\n lastScrollPosition.current = currentScrollPosition;\n }\n rafId.current = window.setTimeout(handleScroll, 1000 / 120);\n }\n };\n const startTouch = () => {\n isTouching.current = true;\n lastScrollPosition.current = null; // Reset last scroll position on touch start\n if (rafId.current !== null) {\n window.clearTimeout(rafId.current);\n rafId.current = null;\n }\n };\n const endTouch = (event) => {\n if (event.touches.length === 0) {\n // All touches have ended\n isTouching.current = false;\n sameCount.current = 0;\n rafId.current = window.setTimeout(handleScroll, 1000 / 120);\n }\n };\n if (isEnabled && scrollEl !== null) {\n const element = scrollEl;\n element.addEventListener(\"touchstart\", startTouch);\n element.addEventListener(\"touchend\", endTouch);\n return () => {\n element.removeEventListener(\"touchstart\", startTouch);\n element.removeEventListener(\"touchend\", endTouch);\n if (rafId.current !== null) {\n window.clearTimeout(rafId.current);\n }\n };\n }\n }, [isEnabled, scrollEl]);\n};\nexport default useKineticScroll;\n//# sourceMappingURL=use-kinetic-scroll.js.map","import { styled } from \"@linaria/react\";\nimport * as React from \"react\";\nimport { useResizeDetector } from \"../../common/resize-detector.js\";\nimport { browserIsSafari } from \"../../common/browser-detect.js\";\nimport { useEventListener } from \"../../common/utils.js\";\nimport useKineticScroll from \"./use-kinetic-scroll.js\";\nconst _exp = /*#__PURE__*/() => p => p.isSafari ? \"scroll\" : \"auto\";\nconst ScrollRegionStyle = /*#__PURE__*/styled('div')({\n name: \"ScrollRegionStyle\",\n class: \"gdg-s1dgczr6\",\n propsAsIs: false,\n vars: {\n \"s1dgczr6-0\": [_exp()]\n }\n});\nfunction useTouchUpDelayed(delay) {\n const [hasTouches, setHasTouches] = React.useState(false);\n const safeWindow = typeof window === \"undefined\" ? null : window;\n const cbTimer = React.useRef(0);\n useEventListener(\"touchstart\", React.useCallback(() => {\n window.clearTimeout(cbTimer.current);\n setHasTouches(true);\n }, []), safeWindow, true, false);\n useEventListener(\"touchend\", React.useCallback(e => {\n if (e.touches.length === 0) {\n cbTimer.current = window.setTimeout(() => setHasTouches(false), delay);\n }\n }, [delay]), safeWindow, true, false);\n return hasTouches;\n}\nexport const InfiniteScroller = p => {\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 kineticScrollPerfHack = false,\n scrollRef,\n initialSize\n } = p;\n const padders = [];\n const rightElementSticky = rightElementProps?.sticky ?? false;\n const rightElementFill = rightElementProps?.fill ?? false;\n const offsetY = React.useRef(0);\n const lastScrollY = React.useRef(0);\n const scroller = React.useRef(null);\n const dpr = typeof window === \"undefined\" ? 1 : window.devicePixelRatio;\n const lastScrollPosition = React.useRef({\n scrollLeft: 0,\n scrollTop: 0,\n lockDirection: undefined\n });\n const rightWrapRef = React.useRef(null);\n const hasTouches = useTouchUpDelayed(200);\n const [isIdle, setIsIdle] = React.useState(true);\n const idleTimer = React.useRef(0);\n React.useLayoutEffect(() => {\n if (!isIdle || hasTouches || lastScrollPosition.current.lockDirection === undefined) return;\n const el = scroller.current;\n if (el === null) return;\n const [lx, ly] = lastScrollPosition.current.lockDirection;\n if (lx !== undefined) {\n el.scrollLeft = lx;\n } else if (ly !== undefined) {\n el.scrollTop = ly;\n }\n lastScrollPosition.current.lockDirection = undefined;\n }, [hasTouches, isIdle]);\n const onScroll = React.useCallback((scrollLeft, scrollTop) => {\n const el = scroller.current;\n if (el === null) return;\n scrollTop = scrollTop ?? el.scrollTop;\n scrollLeft = 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 === undefined) {\n lastScrollPosition.current.lockDirection = Math.abs(dx) < Math.abs(dy) ? [lastScrollLeft, undefined] : [undefined, lastScrollTop];\n }\n const lock = lastScrollPosition.current.lockDirection;\n scrollLeft = lock?.[0] ?? scrollLeft;\n scrollTop = lock?.[1] ?? scrollTop;\n lastScrollPosition.current.scrollLeft = scrollLeft;\n lastScrollPosition.current.scrollTop = scrollTop;\n const cWidth = el.clientWidth;\n const cHeight = el.clientHeight;\n const newY = scrollTop;\n const delta = lastScrollY.current - newY;\n const scrollableHeight = el.scrollHeight - cHeight;\n lastScrollY.current = newY;\n if (scrollableHeight > 0 && (Math.abs(delta) > 2000 || newY === 0 || newY === scrollableHeight) && scrollHeight > el.scrollHeight + 5) {\n const prog = newY / scrollableHeight;\n const recomputed = (scrollHeight - cHeight) * prog;\n offsetY.current = recomputed - newY;\n }\n if (lock !== undefined) {\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: cWidth - paddingRight,\n height: cHeight - paddingBottom,\n paddingRight: rightWrapRef.current?.clientWidth ?? 0\n });\n }, [paddingBottom, paddingRight, scrollHeight, update, preventDiagonalScrolling, hasTouches]);\n useKineticScroll(kineticScrollPerfHack && browserIsSafari.value, onScroll, scroller);\n const onScrollRef = React.useRef(onScroll);\n onScrollRef.current = onScroll;\n const lastProps = React.useRef();\n const didFirstScroll = React.useRef(false);\n // if this is not a layout effect there will be a flicker when changing the number of freezeColumns\n // we need to document what this is needed at all.\n React.useLayoutEffect(() => {\n if (didFirstScroll.current) onScroll();else didFirstScroll.current = true;\n }, [onScroll, paddingBottom, paddingRight]);\n const setRefs = React.useCallback(instance => {\n scroller.current = instance;\n if (scrollRef !== undefined) {\n scrollRef.current = instance;\n }\n }, [scrollRef]);\n let key = 0;\n let h = 0;\n padders.push(React.createElement(\"div\", {\n key: key++,\n style: {\n width: scrollWidth,\n height: 0\n }\n }));\n while (h < scrollHeight) {\n const toAdd = Math.min(5000000, scrollHeight - h);\n padders.push(React.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 (typeof window !== \"undefined\" && (lastProps.current?.height !== height || lastProps.current?.width !== width)) {\n window.setTimeout(() => onScrollRef.current(), 0);\n lastProps.current = {\n width,\n height\n };\n }\n if ((width ?? 0) === 0 || (height ?? 0) === 0) return React.createElement(\"div\", {\n ref: ref\n });\n return React.createElement(\"div\", {\n ref: ref\n }, React.createElement(ScrollRegionStyle, {\n isSafari: browserIsSafari.value\n }, React.createElement(\"div\", {\n className: \"dvn-underlay\"\n }, children), React.createElement(\"div\", {\n ref: setRefs,\n style: lastProps.current,\n draggable: draggable,\n onDragStart: e => {\n if (!draggable) {\n e.stopPropagation();\n e.preventDefault();\n }\n },\n className: \"dvn-scroller \" + (className ?? \"\"),\n onScroll: () => onScroll()\n }, React.createElement(\"div\", {\n className: \"dvn-scroll-inner\" + (rightElement === undefined ? \" dvn-hidden\" : \"\")\n }, React.createElement(\"div\", {\n className: \"dvn-stack\"\n }, padders), rightElement !== undefined && React.createElement(React.Fragment, null, !rightElementFill && React.createElement(\"div\", {\n className: \"dvn-spacer\"\n }), React.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 : undefined,\n right: rightElementSticky ? paddingRight ?? 0 : undefined,\n pointerEvents: \"auto\"\n }\n }, rightElement))))));\n};\n\n","import * as React from \"react\";\nimport DataGridDnd, {} from \"../data-grid-dnd/data-grid-dnd.js\";\nimport { InfiniteScroller } from \"./infinite-scroller.js\";\nconst GridScroller = p => {\n const { columns, rows, rowHeight, headerHeight, groupHeaderHeight, enableGroups, freezeColumns, experimental, nonGrowWidth, clientSize, className, onVisibleRegionChanged, scrollRef, preventDiagonalScrolling, rightElement, rightElementProps, overscrollX, overscrollY, initialSize, smoothScrollX = false, smoothScrollY = false, isDraggable, } = p;\n const { paddingRight, paddingBottom } = experimental ?? {};\n const [clientWidth, clientHeight] = clientSize;\n const last = React.useRef();\n const lastX = React.useRef();\n const lastY = React.useRef();\n const lastSize = React.useRef();\n const width = nonGrowWidth + Math.max(0, overscrollX ?? 0);\n let height = enableGroups ? headerHeight + groupHeaderHeight : headerHeight;\n if (typeof rowHeight === \"number\") {\n height += rows * rowHeight;\n }\n else {\n for (let r = 0; r < rows; r++) {\n height += rowHeight(r);\n }\n }\n if (overscrollY !== undefined) {\n height += overscrollY;\n }\n const lastArgs = React.useRef();\n const processArgs = React.useCallback(() => {\n if (lastArgs.current === undefined)\n return;\n const args = { ...lastArgs.current };\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 }\n else if (args.x > cx) {\n x += c.width;\n if (smoothScrollX) {\n tx += cx - args.x;\n }\n else {\n cellX++;\n }\n cellRight++;\n }\n else if (args.x + args.width > cx) {\n x += c.width;\n cellRight++;\n }\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 }\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 }\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 }\n else if (args.y > cy) {\n y += rh;\n if (smoothScrollY) {\n ty += cy - args.y;\n }\n else {\n cellY++;\n }\n cellBottom++;\n }\n else if (args.y + args.height > rh / 2 + y) {\n y += rh;\n cellBottom++;\n }\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 === undefined ||\n oldRect.y !== rect.y ||\n oldRect.x !== rect.x ||\n oldRect.height !== rect.height ||\n oldRect.width !== rect.width ||\n lastX.current !== tx ||\n lastY.current !== ty ||\n args.width !== lastSize.current?.[0] ||\n args.height !== lastSize.current?.[1]) {\n onVisibleRegionChanged?.({\n x: cellX,\n y: cellY,\n width: cellRight - cellX,\n height: cellBottom - cellY,\n }, args.width, args.height, args.paddingRight ?? 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 = React.useCallback((args) => {\n lastArgs.current = args;\n processArgs();\n }, [processArgs]);\n React.useEffect(() => {\n processArgs();\n }, [processArgs]);\n return (React.createElement(InfiniteScroller, { scrollRef: scrollRef, className: className, kineticScrollPerfHack: experimental?.kineticScrollPerfHack, preventDiagonalScrolling: preventDiagonalScrolling, draggable: isDraggable === true || typeof isDraggable === \"string\", scrollWidth: width + (paddingRight ?? 0), scrollHeight: height + (paddingBottom ?? 0), clientHeight: clientHeight, rightElement: rightElement, paddingBottom: paddingBottom, paddingRight: paddingRight, rightElementProps: rightElementProps, update: onScrollUpdate, initialSize: initialSize },\n React.createElement(DataGridDnd, { eventTargetRef: scrollRef, width: clientWidth, height: clientHeight, accessibilityHeight: p.accessibilityHeight, canvasRef: p.canvasRef, cellXOffset: p.cellXOffset, cellYOffset: p.cellYOffset, columns: p.columns, disabledRows: p.disabledRows, enableGroups: p.enableGroups, fillHandle: p.fillHandle, firstColAccessible: p.firstColAccessible, fixedShadowX: p.fixedShadowX, fixedShadowY: p.fixedShadowY, freezeColumns: p.freezeColumns, getCellContent: p.getCellContent, getCellRenderer: p.getCellRenderer, getGroupDetails: p.getGroupDetails, getRowThemeOverride: p.getRowThemeOverride, groupHeaderHeight: p.groupHeaderHeight, headerHeight: p.headerHeight, highlightRegions: p.highlightRegions, imageWindowLoader: p.imageWindowLoader, isFilling: p.isFilling, isFocused: p.isFocused, lockColumns: p.lockColumns, maxColumnWidth: p.maxColumnWidth, minColumnWidth: p.minColumnWidth, onHeaderMenuClick: p.onHeaderMenuClick, onMouseMove: p.onMouseMove, prelightCells: p.prelightCells, rowHeight: p.rowHeight, rows: p.rows, selection: p.selection, theme: p.theme, freezeTrailingRows: p.freezeTrailingRows, hasAppendRow: p.hasAppendRow, translateX: p.translateX, translateY: p.translateY, onColumnProposeMove: p.onColumnProposeMove, verticalBorder: p.verticalBorder, drawFocusRing: p.drawFocusRing, drawHeader: p.drawHeader, drawCell: p.drawCell, experimental: p.experimental, gridRef: p.gridRef, headerIcons: p.headerIcons, isDraggable: p.isDraggable, onCanvasBlur: p.onCanvasBlur, onCanvasFocused: p.onCanvasFocused, onCellFocused: p.onCellFocused, onColumnMoved: p.onColumnMoved, onColumnResize: p.onColumnResize, onColumnResizeEnd: p.onColumnResizeEnd, onColumnResizeStart: p.onColumnResizeStart, onContextMenu: p.onContextMenu, onDragEnd: p.onDragEnd, onDragLeave: p.onDragLeave, onDragOverCell: p.onDragOverCell, onDragStart: p.onDragStart, onDrop: p.onDrop, onItemHovered: p.onItemHovered, onKeyDown: p.onKeyDown, onKeyUp: p.onKeyUp, onMouseDown: p.onMouseDown, onMouseUp: p.onMouseUp, onRowMoved: p.onRowMoved, smoothScrollX: p.smoothScrollX, smoothScrollY: p.smoothScrollY })));\n};\nexport default GridScroller;\n//# sourceMappingURL=scrolling-data-grid.js.map","import { styled } from \"@linaria/react\";\nexport const SearchWrapper = /*#__PURE__*/styled('div')({\n name: \"SearchWrapper\",\n class: \"gdg-seveqep\",\n propsAsIs: false\n});\n\n","/* eslint-disable unicorn/consistent-destructuring */\nimport * as React from \"react\";\nimport { GridCellKind, } from \"../data-grid/data-grid-types.js\";\nimport ScrollingDataGrid, {} from \"../scrolling-data-grid/scrolling-data-grid.js\";\nimport { SearchWrapper } from \"./data-grid-search-style.js\";\nimport { assert } from \"../../common/support.js\";\n// icons\nconst upArrow = (React.createElement(\"svg\", { className: \"button-icon\", viewBox: \"0 0 512 512\" },\n React.createElement(\"path\", { fill: \"none\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"48\", d: \"M112 244l144-144 144 144M256 120v292\" })));\nconst downArrow = (React.createElement(\"svg\", { className: \"button-icon\", viewBox: \"0 0 512 512\" },\n React.createElement(\"path\", { fill: \"none\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"48\", d: \"M112 268l144 144 144-144M256 392V100\" })));\nconst closeX = (React.createElement(\"svg\", { className: \"button-icon\", viewBox: \"0 0 512 512\" },\n React.createElement(\"path\", { fill: \"none\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"32\", d: \"M368 368L144 144M368 144L144 368\" })));\nconst targetSearchTimeMS = 10;\nconst DataGridSearch = p => {\n const { canvasRef, cellYOffset, rows, columns, searchInputRef, searchValue, searchResults: searchResultsIn, onSearchValueChange, getCellsForSelection, onSearchResultsChanged, showSearch = false, onSearchClose, } = p;\n const [searchID] = React.useState(() => \"search-box-\" + Math.round(Math.random() * 1000));\n const [searchStringInner, setSearchStringInner] = React.useState(\"\");\n const searchString = searchValue ?? searchStringInner;\n // always emit both, this allows the user to spy on the search value without controlling it.\n const setSearchString = React.useCallback((newVal) => {\n setSearchStringInner(newVal);\n onSearchValueChange?.(newVal);\n }, [onSearchValueChange]);\n const [searchStatus, setSearchStatus] = React.useState();\n const searchStatusRef = React.useRef(searchStatus);\n searchStatusRef.current = searchStatus;\n React.useEffect(() => {\n if (searchResultsIn === undefined)\n return;\n if (searchResultsIn.length > 0) {\n setSearchStatus(cv => ({\n rowsSearched: rows,\n results: searchResultsIn.length,\n selectedIndex: cv?.selectedIndex ?? -1,\n }));\n }\n else {\n setSearchStatus(undefined);\n }\n }, [rows, searchResultsIn]);\n const abortControllerRef = React.useRef();\n if (abortControllerRef.current === undefined)\n abortControllerRef.current = new AbortController();\n const searchHandle = React.useRef();\n const [searchResultsInner, setSearchResultsInner] = React.useState([]);\n const searchResults = searchResultsIn ?? searchResultsInner;\n const cancelSearch = React.useCallback(() => {\n if (searchHandle.current !== undefined) {\n window.cancelAnimationFrame(searchHandle.current);\n searchHandle.current = undefined;\n abortControllerRef.current.abort();\n }\n }, []);\n const cellYOffsetRef = React.useRef(cellYOffset);\n cellYOffsetRef.current = cellYOffset;\n const beginSearch = React.useCallback((str) => {\n const regex = new RegExp(str.replace(/([$()*+.?[\\\\\\]^{|}-])/g, \"\\\\$1\"), \"i\");\n let startY = cellYOffsetRef.current;\n // Lets assume we can do 10 rows at a time\n // This is usually very safe and limits the damage for bad\n // performing sheets.\n let searchStride = Math.min(10, rows);\n let rowsSearched = 0;\n setSearchStatus(undefined);\n setSearchResultsInner([]);\n const runningResult = [];\n const tick = async () => {\n if (getCellsForSelection === undefined)\n return;\n const tStart = performance.now();\n const rowsLeft = rows - rowsSearched;\n let data = getCellsForSelection({\n x: 0,\n y: startY,\n width: columns.length,\n height: Math.min(searchStride, rowsLeft, rows - startY),\n }, abortControllerRef.current.signal);\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() : undefined;\n break;\n case GridCellKind.Image:\n case GridCellKind.Bubble:\n // I know its lazy, but unless someone is actually\n // searching for the whale emoji, this is pretty side effect\n // free. And ya know... it's nice and easy to do...\n testString = cell.data.join(\"🐳\");\n break;\n case GridCellKind.Custom:\n testString = cell.copyData;\n break;\n }\n if (testString !== undefined && 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 = searchStatusRef.current?.selectedIndex ?? -1;\n setSearchStatus({\n results: runningResult.length,\n rowsSearched,\n selectedIndex,\n });\n onSearchResultsChanged?.(runningResult, selectedIndex);\n if (startY + searchStride >= rows) {\n startY = 0;\n }\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 < 1000) {\n searchHandle.current = window.requestAnimationFrame(tick);\n }\n };\n cancelSearch();\n searchHandle.current = window.requestAnimationFrame(tick);\n }, [cancelSearch, columns.length, getCellsForSelection, onSearchResultsChanged, rows]);\n const onClose = React.useCallback(() => {\n onSearchClose?.();\n setSearchStatus(undefined);\n setSearchResultsInner([]);\n onSearchResultsChanged?.([], -1);\n cancelSearch();\n canvasRef?.current?.focus();\n }, [cancelSearch, canvasRef, onSearchClose, onSearchResultsChanged]);\n const onSearchChange = React.useCallback((event) => {\n setSearchString(event.target.value);\n if (searchResultsIn !== undefined)\n return;\n if (event.target.value === \"\") {\n setSearchStatus(undefined);\n setSearchResultsInner([]);\n cancelSearch();\n }\n else {\n beginSearch(event.target.value);\n }\n }, [beginSearch, cancelSearch, setSearchString, searchResultsIn]);\n React.useEffect(() => {\n if (showSearch && searchInputRef.current !== null) {\n setSearchString(\"\");\n searchInputRef.current.focus({ preventScroll: true });\n }\n }, [showSearch, searchInputRef, setSearchString]);\n const onNext = React.useCallback((ev) => {\n ev?.stopPropagation?.();\n if (searchStatus === undefined)\n return;\n const newIndex = (searchStatus.selectedIndex + 1) % searchStatus.results;\n setSearchStatus({\n ...searchStatus,\n selectedIndex: newIndex,\n });\n onSearchResultsChanged?.(searchResults, newIndex);\n }, [searchStatus, onSearchResultsChanged, searchResults]);\n const onPrev = React.useCallback((ev) => {\n ev?.stopPropagation?.();\n if (searchStatus === undefined)\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?.(searchResults, newIndex);\n }, [onSearchResultsChanged, searchResults, searchStatus]);\n const onSearchKeyDown = React.useCallback((event) => {\n if (((event.ctrlKey || event.metaKey) && event.nativeEvent.code === \"KeyF\") || event.key === \"Escape\") {\n onClose();\n event.stopPropagation();\n event.preventDefault();\n }\n else if (event.key === \"Enter\") {\n if (event.shiftKey) {\n onPrev();\n }\n else {\n onNext();\n }\n }\n }, [onClose, onNext, onPrev]);\n // cancel search if the component is unmounted\n React.useEffect(() => {\n return () => {\n cancelSearch();\n };\n }, [cancelSearch]);\n const [isAnimatingOut, setIsAnimatingOut] = React.useState(false);\n React.useEffect(() => {\n if (showSearch) {\n setIsAnimatingOut(true);\n }\n else {\n const timeoutId = setTimeout(() => setIsAnimatingOut(false), 150);\n return () => clearTimeout(timeoutId);\n }\n }, [showSearch]);\n const searchbox = React.useMemo(() => {\n if (!showSearch && !isAnimatingOut) {\n return null;\n }\n let resultString;\n if (searchStatus !== undefined) {\n resultString =\n searchStatus.results >= 1000\n ? `over 1000`\n : `${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(((searchStatus?.rowsSearched ?? 0) / rows) * 100);\n const progressStyle = {\n width: `${rowsSearchedProgress}%`,\n };\n return (React.createElement(SearchWrapper, { className: showSearch ? \"\" : \"out\", onMouseDown: cancelEvent, onMouseMove: cancelEvent, onMouseUp: cancelEvent, onClick: cancelEvent },\n React.createElement(\"div\", { className: \"gdg-search-bar-inner\" },\n React.createElement(\"input\", { id: searchID, \"aria-hidden\": !showSearch, \"data-testid\": \"search-input\", ref: searchInputRef, onChange: onSearchChange, value: searchString, tabIndex: showSearch ? undefined : -1, onKeyDownCapture: onSearchKeyDown }),\n React.createElement(\"button\", { \"aria-label\": \"Previous Result\", \"aria-hidden\": !showSearch, tabIndex: showSearch ? undefined : -1, onClick: onPrev, disabled: (searchStatus?.results ?? 0) === 0 }, upArrow),\n React.createElement(\"button\", { \"aria-label\": \"Next Result\", \"aria-hidden\": !showSearch, tabIndex: showSearch ? undefined : -1, onClick: onNext, disabled: (searchStatus?.results ?? 0) === 0 }, downArrow),\n onSearchClose !== undefined && (React.createElement(\"button\", { \"aria-label\": \"Close Search\", \"aria-hidden\": !showSearch, \"data-testid\": \"search-close-button\", tabIndex: showSearch ? undefined : -1, onClick: onClose }, closeX))),\n searchStatus !== undefined ? (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: \"gdg-search-status\" },\n React.createElement(\"div\", { \"data-testid\": \"search-result-area\" }, resultString)),\n React.createElement(\"div\", { className: \"gdg-search-progress\", style: progressStyle }))) : (React.createElement(\"div\", { className: \"gdg-search-status\" },\n React.createElement(\"label\", { htmlFor: searchID }, \"Type to search\")))));\n }, [\n showSearch,\n isAnimatingOut,\n searchStatus,\n rows,\n searchID,\n searchInputRef,\n onSearchChange,\n searchString,\n onSearchKeyDown,\n onPrev,\n onNext,\n onSearchClose,\n onClose,\n ]);\n return (React.createElement(React.Fragment, null,\n React.createElement(ScrollingDataGrid, { prelightCells: searchResults, accessibilityHeight: p.accessibilityHeight, canvasRef: p.canvasRef, cellXOffset: p.cellXOffset, cellYOffset: p.cellYOffset, className: p.className, clientSize: p.clientSize, columns: p.columns, disabledRows: p.disabledRows, enableGroups: p.enableGroups, fillHandle: p.fillHandle, firstColAccessible: p.firstColAccessible, nonGrowWidth: p.nonGrowWidth, fixedShadowX: p.fixedShadowX, fixedShadowY: p.fixedShadowY, freezeColumns: p.freezeColumns, getCellContent: p.getCellContent, getCellRenderer: p.getCellRenderer, getGroupDetails: p.getGroupDetails, getRowThemeOverride: p.getRowThemeOverride, groupHeaderHeight: p.groupHeaderHeight, headerHeight: p.headerHeight, highlightRegions: p.highlightRegions, imageWindowLoader: p.imageWindowLoader, initialSize: p.initialSize, isFilling: p.isFilling, isFocused: p.isFocused, lockColumns: p.lockColumns, maxColumnWidth: p.maxColumnWidth, minColumnWidth: p.minColumnWidth, onHeaderMenuClick: p.onHeaderMenuClick, onMouseMove: p.onMouseMove, onVisibleRegionChanged: p.onVisibleRegionChanged, overscrollX: p.overscrollX, overscrollY: p.overscrollY, preventDiagonalScrolling: p.preventDiagonalScrolling, rightElement: p.rightElement, rightElementProps: p.rightElementProps, rowHeight: p.rowHeight, rows: p.rows, scrollRef: p.scrollRef, selection: p.selection, theme: p.theme, freezeTrailingRows: p.freezeTrailingRows, hasAppendRow: p.hasAppendRow, translateX: p.translateX, translateY: p.translateY, verticalBorder: p.verticalBorder, onColumnProposeMove: p.onColumnProposeMove, drawFocusRing: p.drawFocusRing, drawCell: p.drawCell, drawHeader: p.drawHeader, experimental: p.experimental, gridRef: p.gridRef, headerIcons: p.headerIcons, isDraggable: p.isDraggable, onCanvasBlur: p.onCanvasBlur, onCanvasFocused: p.onCanvasFocused, onCellFocused: p.onCellFocused, onColumnMoved: p.onColumnMoved, onColumnResize: p.onColumnResize, onColumnResizeEnd: p.onColumnResizeEnd, onColumnResizeStart: p.onColumnResizeStart, onContextMenu: p.onContextMenu, onDragEnd: p.onDragEnd, onDragLeave: p.onDragLeave, onDragOverCell: p.onDragOverCell, onDragStart: p.onDragStart, onDrop: p.onDrop, onItemHovered: p.onItemHovered, onKeyDown: p.onKeyDown, onKeyUp: p.onKeyUp, onMouseDown: p.onMouseDown, onMouseUp: p.onMouseUp, onRowMoved: p.onRowMoved, smoothScrollX: p.smoothScrollX, smoothScrollY: p.smoothScrollY }),\n searchbox));\n};\nexport default DataGridSearch;\n//# sourceMappingURL=data-grid-search.js.map","import React from \"react\";\nimport { styled } from \"@linaria/react\";\nimport ClickOutsideContainer from \"../internal/click-outside-container/click-outside-container.js\";\nconst _exp = /*#__PURE__*/() => p => Math.max(16, p.targetHeight - 10);\nconst RenameInput = /*#__PURE__*/styled('input')({\n name: \"RenameInput\",\n class: \"gdg-r17m35ur\",\n propsAsIs: false,\n vars: {\n \"r17m35ur-0\": [_exp(), \"px\"]\n }\n});\nexport const GroupRename = p => {\n const {\n bounds,\n group,\n onClose,\n canvasBounds,\n onFinish\n } = p;\n const [value, setValue] = React.useState(group);\n return React.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: \"gdg-c1tqibwd\",\n onClickOutside: onClose\n }, React.createElement(RenameInput, {\n targetHeight: bounds.height,\n \"data-testid\": \"group-rename-input\",\n value: 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","import * as React from \"react\";\nimport { isSizedGridColumn, resolveCellsThunk, } from \"../internal/data-grid/data-grid-types.js\";\nconst defaultSize = 150;\nfunction measureCell(ctx, cell, theme, getCellRenderer) {\n const r = getCellRenderer(cell);\n return r?.measure?.(ctx, cell, theme) ?? defaultSize;\n}\nexport function measureColumn(ctx, theme, c, colIndex, selectedData, minColumnWidth, maxColumnWidth, removeOutliers, getCellRenderer) {\n let max = 0;\n const sizes = selectedData === undefined\n ? []\n : selectedData.map(row => {\n const r = measureCell(ctx, row[colIndex], theme, getCellRenderer);\n max = Math.max(max, r);\n return r;\n });\n if (sizes.length > 5 && removeOutliers) {\n max = 0;\n // Filter out outliers\n let sum = 0;\n for (const size of sizes) {\n sum += size;\n }\n const average = sum / sizes.length;\n // Set sizes that are considered outliers to zero\n for (let i = 0; i < sizes.length; i++) {\n if (sizes[i] >= average * 2) {\n sizes[i] = 0;\n }\n else {\n max = Math.max(max, sizes[i]);\n }\n }\n }\n max = Math.max(max, ctx.measureText(c.title).width + 16 + (c.icon === undefined ? 0 : 28));\n const final = Math.max(Math.ceil(minColumnWidth), Math.min(Math.floor(maxColumnWidth), Math.ceil(max)));\n return {\n ...c,\n width: final,\n };\n}\n/** @category Hooks */\nexport function useColumnSizer(columns, rows, getCellsForSelection, clientWidth, minColumnWidth, maxColumnWidth, theme, getCellRenderer, abortController) {\n const rowsRef = React.useRef(rows);\n const getCellsForSelectionRef = React.useRef(getCellsForSelection);\n const themeRef = React.useRef(theme);\n rowsRef.current = rows;\n getCellsForSelectionRef.current = getCellsForSelection;\n themeRef.current = theme;\n const [canvas, ctx] = React.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 React.useLayoutEffect(() => {\n if (canvas)\n document.documentElement.append(canvas);\n return () => {\n canvas?.remove();\n };\n }, [canvas]);\n const memoMap = React.useRef({});\n const lastColumns = React.useRef();\n const [selectedData, setSelectionData] = React.useState();\n React.useLayoutEffect(() => {\n const getCells = getCellsForSelectionRef.current;\n if (getCells === undefined || columns.every(isSizedGridColumn))\n return;\n let computeRows = Math.max(1, 10 - Math.floor(columns.length / 10000));\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) : undefined;\n let toSet;\n // eslint-disable-next-line unicorn/prefer-ternary\n if (typeof getResult === \"object\") {\n toSet = getResult;\n }\n else {\n toSet = await resolveCellsThunk(getResult);\n }\n if (tailGetResult !== undefined) {\n // eslint-disable-next-line unicorn/prefer-ternary\n if (typeof tailGetResult === \"object\") {\n toSet = [...toSet, ...tailGetResult];\n }\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 React.useMemo(() => {\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.baseFontFull;\n return columns.map((c, colIndex) => {\n if (isSizedGridColumn(c))\n return c;\n if (memoMap.current[c.id] !== undefined) {\n return {\n ...c,\n width: memoMap.current[c.id],\n };\n }\n if (selectedData === undefined || lastColumns.current !== columns || c.id === undefined) {\n return {\n ...c,\n width: defaultSize,\n };\n }\n const r = measureColumn(ctx, theme, c, colIndex, selectedData, minColumnWidth, maxColumnWidth, true, getCellRenderer);\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 !== undefined && 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 = (result[i].grow ?? 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 {\n sizedColumns: result,\n nonGrowWidth: totalWidth,\n };\n }, [clientWidth, columns, ctx, selectedData, theme, minColumnWidth, maxColumnWidth, getCellRenderer]);\n}\n//# sourceMappingURL=use-column-sizer.js.map","import { browserIsOSX } from \"./browser-detect.js\";\n// brain dead syntax, find your deps, and make buggy replacements with 5 times the effort\n// all lower case\n// ctrl+shift+alt+d or ctrl+x or shift+c or shift+Backspace or alt+_53\n// you get it, last one is always event.key, nothing fancy\n// special: primary === ctrl on windows, meta on mac\n// no to lower, its a waste, we're the only consumer, don't use caps\n// and before you ask, yes space is \" \", e.g. \"ctrl+alt+ \", whatacountry.gif\n// load bearing whitespace, it's basically python\n// if the char starts with a _ it is the event.keycode instead\nfunction checkKey(key, args) {\n if (key === undefined)\n return false;\n if (key.length > 1 && key.startsWith(\"_\")) {\n const keycode = Number.parseInt(key.slice(1));\n return keycode === args.keyCode;\n }\n if (key.length === 1 && key >= \"a\" && key <= \"z\") {\n return key.toUpperCase().codePointAt(0) === args.keyCode;\n }\n return key === args.key;\n}\nexport function isHotkey(hotkey, args, details) {\n const result = isHotkeyInner(hotkey, args);\n if (result)\n details.didMatch = true;\n return result;\n}\nfunction isHotkeyInner(hotkey, args) {\n if (hotkey.length === 0)\n return false;\n if (hotkey.includes(\"|\")) {\n const parts = hotkey.split(\"|\");\n for (const part of parts) {\n if (isHotkeyInner(part, args))\n return true;\n }\n return false;\n }\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 if (split[0] === \"any\")\n return true;\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 }\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//# sourceMappingURL=is-hotkey.js.map","import React from \"react\";\nimport { CompactSelection } from \"./data-grid-types.js\";\nexport function useSelectionBehavior(gridSelection, setGridSelection, rangeBehavior, columnBehavior, rowBehavior, rangeSelect) {\n // if append is true, the current range will be added to the rangeStack\n const setCurrent = React.useCallback((value, expand, append, trigger) => {\n if ((rangeSelect === \"cell\" || rangeSelect === \"multi-cell\") && value !== undefined) {\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 === undefined\n ? undefined\n : {\n ...value,\n rangeStack: trigger === \"drag\" ? gridSelection.current?.rangeStack ?? [] : [],\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 !== undefined && gridSelection.current !== undefined) {\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 }, [columnBehavior, gridSelection, rangeBehavior, rangeSelect, rowBehavior, setGridSelection]);\n const setSelectedRows = React.useCallback((newRows, append, allowMixed) => {\n newRows = newRows ?? gridSelection.rows;\n if (append !== undefined) {\n newRows = newRows.add(append);\n }\n let newVal;\n if (rowBehavior === \"exclusive\" && newRows.length > 0) {\n newVal = {\n current: undefined,\n columns: CompactSelection.empty(),\n rows: newRows,\n };\n }\n else {\n const rangeMixed = allowMixed && rangeBehavior === \"mixed\";\n const columnMixed = allowMixed && columnBehavior === \"mixed\";\n const current = !rangeMixed ? undefined : gridSelection.current;\n newVal = {\n current,\n columns: columnMixed ? gridSelection.columns : CompactSelection.empty(),\n rows: newRows,\n };\n }\n setGridSelection(newVal, false);\n }, [columnBehavior, gridSelection, rangeBehavior, rowBehavior, setGridSelection]);\n const setSelectedColumns = React.useCallback((newCols, append, allowMixed) => {\n newCols = newCols ?? gridSelection.columns;\n if (append !== undefined) {\n newCols = newCols.add(append);\n }\n let newVal;\n if (columnBehavior === \"exclusive\" && newCols.length > 0) {\n newVal = {\n current: undefined,\n rows: CompactSelection.empty(),\n columns: newCols,\n };\n }\n else {\n const rangeMixed = allowMixed && rangeBehavior === \"mixed\";\n const rowMixed = allowMixed && rowBehavior === \"mixed\";\n const current = !rangeMixed ? undefined : gridSelection.current;\n newVal = {\n current,\n rows: rowMixed ? gridSelection.rows : CompactSelection.empty(),\n columns: newCols,\n };\n }\n setGridSelection(newVal, false);\n }, [columnBehavior, gridSelection, rangeBehavior, rowBehavior, setGridSelection]);\n return [setCurrent, setSelectedRows, setSelectedColumns];\n}\n//# sourceMappingURL=use-selection-behavior.js.map","import * as React from \"react\";\nimport { GridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nexport function useCellsForSelection(getCellsForSelectionIn, getCellContent, rowMarkerOffset, abortController, rows) {\n const getCellsForSelectionDirectWhenValid = React.useCallback(rect => {\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 }\n else {\n row.push(getCellContent([x, y]));\n }\n }\n result.push(row);\n }\n return result;\n }\n return getCellsForSelectionIn?.(rect, abortController.signal) ?? [];\n }, [abortController.signal, getCellContent, getCellsForSelectionIn, rows]);\n const getCellsForSelectionDirect = getCellsForSelectionIn !== undefined ? getCellsForSelectionDirectWhenValid : undefined;\n const getCellsForSelectionMangled = React.useCallback(rect => {\n if (getCellsForSelectionDirect === undefined)\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 return r.map(row => [{ kind: GridCellKind.Loading, allowOverlay: false }, ...row]);\n }\n return getCellsForSelectionDirect(newRect, abortController.signal);\n }, [abortController.signal, getCellsForSelectionDirect, rowMarkerOffset]);\n const getCellsForSelection = getCellsForSelectionIn !== undefined ? getCellsForSelectionMangled : undefined;\n return [getCellsForSelection, getCellsForSelectionDirect];\n}\n//# sourceMappingURL=use-cells-for-selection.js.map","/* eslint-disable sonarjs/no-duplicate-string */\nimport { assertNever } from \"../common/support.js\";\nimport { GridCellKind, BooleanEmpty, BooleanIndeterminate, } from \"../internal/data-grid/data-grid-types.js\";\nfunction convertCellToBuffer(cell) {\n if (cell.copyData !== undefined) {\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\n ? \"TRUE\"\n : cell.data === false\n ? \"FALSE\"\n : cell.data === BooleanIndeterminate\n ? \"INDETERMINATE\"\n : \"\",\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: cell.displayData ?? cell.data,\n rawValue: cell.data,\n format: \"string\",\n };\n case GridCellKind.Uri:\n return {\n formatted: cell.displayData ?? 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 !== undefined && 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 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(cell.rawValue?.toString() ?? \"\");\n }\n else if (cell.format === \"string-array\") {\n line.push(cell.formatted.map(x => escapeIfNeeded(x, true)).join(\",\"));\n }\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 // The following formatting for the `html` variable ensures that when pasting,\n // spaces are preserved in both Google Sheets and Excel. This is done by:\n // 1. Replacing tabs with four spaces for consistency. Also google sheets disallows any tabs.\n // 2. Wrapping each space with a span element to prevent them from being collapsed or ignored during the\n // paste operation\n return text.replace(/\\t/g, \" \").replace(/ {2,}/g, match => \"<span> </span>\".repeat(match.length));\n}\nfunction formatHtmlAttributeContent(attrText) {\n // Escape all quotes, lt, gt, and other special characters\n return ('\"' + attrText.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\").replace(/>/g, \">\") + '\"');\n}\nfunction restoreHtmlEntities(str) {\n // Unescape all quotes, lt, gt, and other special characters\n return str\n .replace(/"/g, '\"')\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/&/g, \"&\");\n}\nfunction createHtmlBuffer(copyBuffer) {\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(`<td ${formatStr}><a href=\"${cell.rawValue}\">${formatHtmlTextContent(cell.formatted)}</a></td>`);\n }\n else {\n if (cell.format === \"string-array\") {\n lines.push(`<td ${formatStr}><ol>${cell.formatted\n .map((x, ind) => `<li gdg-raw-value=${formatHtmlAttributeContent(cell.rawValue[ind])}>` +\n formatHtmlTextContent(x) +\n \"</li>\")\n .join(\"\")}</ol></td>`);\n }\n else {\n lines.push(`<td gdg-raw-value=${formatHtmlAttributeContent(cell.rawValue?.toString() ?? \"\")} ${formatStr}>${formatHtmlTextContent(cell.formatted)}</td>`);\n }\n }\n }\n lines.push(\"</tr>\");\n }\n lines.push(\"</tbody></table>\");\n return lines.join(\"\");\n}\n// This function encodes grid cells to a table object.\n// Each td in the table contains one of 3 things\n// - A string directly and the td has a `gdg-raw-value` attribute with the raw value\n// - An anchor tag with a href and the text is the formatted value\n// - An ordered list with each item containing a `gdg-raw-value` attribute with the raw value\nexport function 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}\nexport function decodeHTML(html) {\n const fragment = document.createElement(\"html\");\n // we dont want to retain the pasted non-breaking spaces\n fragment.innerHTML = html.replace(/ /g, \" \");\n const tableEl = fragment.querySelector(\"table\");\n if (tableEl === null)\n return undefined;\n const walkEl = [tableEl];\n const result = [];\n let current;\n while (walkEl.length > 0) {\n const el = walkEl.pop();\n if (el === undefined)\n break;\n if (el instanceof HTMLTableElement || el.nodeName === \"TBODY\") {\n walkEl.push(...[...el.children].reverse());\n }\n else if (el instanceof HTMLTableRowElement) {\n if (current !== undefined) {\n result.push(current);\n }\n current = [];\n walkEl.push(...[...el.children].reverse());\n }\n else if (el instanceof HTMLTableCellElement) {\n // be careful not to use innerText here as its behavior is not well defined for non DOM attached nodes\n const clone = el.cloneNode(true);\n // Apple numbers seems to always wrap the cell in a p tag and a font tag. It also puts both <br> and \\n\n // linebreak markers in the code. This is both unneeded and causes issues with the paste code.\n const firstTagIsPara = clone.children.length === 1 && clone.children[0].nodeName === \"P\";\n const para = firstTagIsPara ? clone.children[0] : null;\n const isAppleNumbers = 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 = (clone.getAttribute(\"gdg-format\") ?? \"string\"); // fix me at some point\n if (clone.querySelector(\"a\") !== null) {\n current?.push({\n // raw value is the href\n rawValue: clone.querySelector(\"a\")?.getAttribute(\"href\") ?? \"\",\n formatted: clone.textContent ?? \"\",\n format: formatValue,\n });\n }\n else if (clone.querySelector(\"ol\") !== null) {\n const rawValues = clone.querySelectorAll(\"li\");\n current?.push({\n rawValue: [...rawValues].map(x => x.getAttribute(\"gdg-raw-value\") ?? \"\"),\n formatted: [...rawValues].map(x => x.textContent ?? \"\"),\n format: \"string-array\",\n });\n }\n else if (attributeValue !== null) {\n current?.push({\n rawValue: restoreHtmlEntities(attributeValue),\n formatted: clone.textContent ?? \"\",\n format: formatValue,\n });\n }\n else {\n let textContent = clone.textContent ?? \"\";\n if (isAppleNumbers) {\n // replace any newline not preceded by a newline\n textContent = textContent.replace(/\\n(?!\\n)/g, \"\");\n }\n current?.push({\n rawValue: textContent ?? \"\",\n formatted: textContent ?? \"\",\n format: formatValue,\n });\n }\n }\n }\n if (current !== undefined) {\n result.push(current);\n }\n return result;\n}\n//# sourceMappingURL=copy-paste.js.map","import {} from \"../internal/data-grid/data-grid-types.js\";\nimport { getCopyBufferContents } from \"./copy-paste.js\";\nexport function expandSelection(newVal, getCellsForSelection, rowMarkerOffset, spanRangeBehavior, abortController) {\n const origVal = newVal;\n if (spanRangeBehavior === \"allowPartial\" || newVal.current === undefined || getCellsForSelection === undefined)\n return newVal;\n let isFilled = false;\n do {\n if (newVal?.current === undefined)\n break;\n const r = newVal.current?.range;\n const cells = [];\n if (r.width > 2) {\n const leftCells = getCellsForSelection({\n x: r.x,\n y: r.y,\n width: 1,\n height: r.height,\n }, abortController.signal);\n if (typeof leftCells === \"function\") {\n return origVal;\n }\n cells.push(...leftCells);\n const rightCells = getCellsForSelection({\n x: r.x + r.width - 1,\n y: r.y,\n width: 1,\n height: r.height,\n }, abortController.signal);\n if (typeof rightCells === \"function\") {\n return origVal;\n }\n cells.push(...rightCells);\n }\n else {\n const rCells = getCellsForSelection({\n x: r.x,\n y: r.y,\n width: r.width,\n height: r.height,\n }, abortController.signal);\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 === undefined)\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 }\n else {\n newVal = {\n current: {\n cell: newVal.current.cell ?? [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}\nexport function unquote(str) {\n let State;\n (function (State) {\n State[State[\"None\"] = 0] = \"None\";\n State[State[\"inString\"] = 1] = \"inString\";\n State[State[\"inStringPostQuote\"] = 2] = \"inStringPostQuote\";\n })(State || (State = {}));\n const result = [];\n let current = [];\n let start = 0;\n let state = State.None;\n str = str.replace(/\\r\\n/g, \"\\n\");\n let index = 0;\n for (const char of str) {\n switch (state) {\n case State.None:\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 }\n else if (char === `\"`) {\n state = State.inString;\n }\n break;\n case State.inString:\n if (char === `\"`) {\n state = State.inStringPostQuote;\n }\n break;\n case State.inStringPostQuote:\n if (char === '\"') {\n state = State.inString;\n }\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 = State.None;\n }\n else {\n state = State.None;\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}\nexport function copyToClipboard(cells, columnIndexes, e) {\n const copyBuffer = getCopyBufferContents(cells, columnIndexes);\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const copyWithWriteText = (s) => {\n void window.navigator.clipboard?.writeText(s);\n };\n const copyWithWrite = (s, html) => {\n if (window.navigator.clipboard?.write === undefined)\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 try {\n if (e === undefined || e.clipboardData === null)\n throw new Error(\"No clipboard data\");\n // This might fail if we had to await the thunk\n e?.clipboardData?.setData(\"text/plain\", s);\n e?.clipboardData?.setData(\"text/html\", html);\n }\n catch {\n if (!copyWithWrite(s, html)) {\n copyWithWriteText(s);\n }\n }\n };\n if (window.navigator.clipboard?.write !== undefined || e?.clipboardData !== undefined) {\n void copyWithClipboardData(copyBuffer.textPlain, copyBuffer.textHtml);\n }\n else {\n void copyWithWriteText(copyBuffer.textPlain);\n }\n e?.preventDefault();\n}\n/**\n * Checkbox behavior:\n *\n * true + click -> unchecked\n * false + click -> checked\n * indeterminate + click -> checked\n * empty + click -> checked\n */\nexport function toggleBoolean(data) {\n return data !== true;\n}\n//# sourceMappingURL=data-editor-fns.js.map","import { styled } from \"@linaria/react\";\nimport * as React from \"react\";\nfunction toCss(x) {\n if (typeof x === \"string\") return x;\n return `${x}px`;\n}\nconst _exp = /*#__PURE__*/() => p => p.innerWidth;\nconst _exp2 = /*#__PURE__*/() => p => p.innerHeight;\nconst Wrapper = /*#__PURE__*/styled('div')({\n name: \"Wrapper\",\n class: \"gdg-wmyidgi\",\n propsAsIs: false,\n vars: {\n \"wmyidgi-0\": [_exp()],\n \"wmyidgi-1\": [_exp2()]\n }\n});\nexport const DataEditorContainer = p => {\n const {\n inWidth,\n inHeight,\n children,\n ...rest\n } = p;\n return React.createElement(Wrapper, {\n innerHeight: toCss(inHeight),\n innerWidth: toCss(inWidth),\n ...rest\n }, children);\n};\n\n","import React from \"react\";\nconst maxPxPerMs = 2;\nconst msToFullSpeed = 1300;\nexport function useAutoscroll(scrollDirection, scrollRef, onScroll) {\n const speedScalar = React.useRef(0);\n const [xDir, yDir] = scrollDirection ?? [0, 0];\n React.useEffect(() => {\n if (xDir === 0 && yDir === 0) {\n speedScalar.current = 0;\n return;\n }\n let cancelled = false;\n let lastTime = 0;\n const scrollFn = (curTime) => {\n if (cancelled)\n return;\n if (lastTime === 0) {\n lastTime = curTime;\n }\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 scrollRef.current?.scrollBy(xDir * motion, yDir * motion);\n lastTime = curTime;\n onScroll?.();\n }\n window.requestAnimationFrame(scrollFn);\n };\n window.requestAnimationFrame(scrollFn);\n return () => {\n cancelled = true;\n };\n }, [scrollRef, xDir, yDir, onScroll]);\n}\n//# sourceMappingURL=use-autoscroll.js.map","import React from \"react\";\nimport { getDataEditorTheme } from \"../common/styles.js\";\nexport function useRemAdjuster({ rowHeight: rowHeightIn, headerHeight: headerHeightIn, groupHeaderHeight: groupHeaderHeightIn, theme: themeIn, overscrollX: overscrollXIn, overscrollY: overscrollYIn, scaleToRem, remSize, }) {\n const [rowHeight, headerHeight, groupHeaderHeight, theme, overscrollX, overscrollY] = React.useMemo(() => {\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: (themeIn?.headerIconSize ?? bt.headerIconSize) * scaler,\n cellHorizontalPadding: (themeIn?.cellHorizontalPadding ?? bt.cellHorizontalPadding) * scaler,\n cellVerticalPadding: (themeIn?.cellVerticalPadding ?? bt.cellVerticalPadding) * scaler,\n },\n Math.ceil((overscrollXIn ?? 0) * scaler),\n Math.ceil((overscrollYIn ?? 0) * scaler),\n ];\n }, [groupHeaderHeightIn, headerHeightIn, overscrollXIn, overscrollYIn, remSize, rowHeightIn, scaleToRem, themeIn]);\n return { rowHeight, headerHeight, groupHeaderHeight, theme, overscrollX, overscrollY };\n}\n//# sourceMappingURL=use-rem-adjuster.js.map","import React from \"react\";\nimport { browserIsOSX } from \"../common/browser-detect.js\";\nimport { useDeepMemo } from \"../common/utils.js\";\nexport const keybindingDefaults = {\n downFill: false,\n rightFill: false,\n clear: true,\n closeOverlay: true,\n acceptOverlayDown: true,\n acceptOverlayUp: true,\n acceptOverlayLeft: true,\n acceptOverlayRight: true,\n copy: true,\n paste: true,\n cut: true,\n search: false,\n delete: true,\n activateCell: true,\n scrollToSelectedCell: true,\n goToFirstCell: true,\n goToFirstColumn: true,\n goToFirstRow: true,\n goToLastCell: true,\n goToLastColumn: true,\n goToLastRow: true,\n goToNextPage: true,\n goToPreviousPage: true,\n selectToFirstCell: true,\n selectToFirstColumn: true,\n selectToFirstRow: true,\n selectToLastCell: true,\n selectToLastColumn: true,\n selectToLastRow: true,\n selectAll: true,\n selectRow: true,\n selectColumn: true,\n goUpCell: true,\n goRightCell: true,\n goDownCell: true,\n goLeftCell: true,\n goUpCellRetainSelection: true,\n goRightCellRetainSelection: true,\n goDownCellRetainSelection: true,\n goLeftCellRetainSelection: true,\n selectGrowUp: true,\n selectGrowRight: true,\n selectGrowDown: true,\n selectGrowLeft: true,\n};\nfunction realizeKeybind(keybind, defaultVal) {\n if (keybind === true)\n return defaultVal;\n if (keybind === false)\n return \"\";\n return keybind;\n}\nexport function realizeKeybinds(keybinds) {\n const isOSX = browserIsOSX.value;\n return {\n activateCell: realizeKeybind(keybinds.activateCell, \" |Enter|shift+Enter\"),\n clear: realizeKeybind(keybinds.clear, \"any+Escape\"),\n closeOverlay: realizeKeybind(keybinds.closeOverlay, \"any+Escape\"),\n acceptOverlayDown: realizeKeybind(keybinds.acceptOverlayDown, \"Enter\"),\n acceptOverlayUp: realizeKeybind(keybinds.acceptOverlayUp, \"shift+Enter\"),\n acceptOverlayLeft: realizeKeybind(keybinds.acceptOverlayLeft, \"shift+Tab\"),\n acceptOverlayRight: realizeKeybind(keybinds.acceptOverlayRight, \"Tab\"),\n copy: keybinds.copy,\n cut: keybinds.cut,\n delete: realizeKeybind(keybinds.delete, isOSX ? \"Backspace|Delete\" : \"Delete\"),\n downFill: realizeKeybind(keybinds.downFill, \"primary+_68\"),\n scrollToSelectedCell: realizeKeybind(keybinds.scrollToSelectedCell, \"primary+Enter\"),\n goDownCell: realizeKeybind(keybinds.goDownCell, \"ArrowDown\"),\n goDownCellRetainSelection: realizeKeybind(keybinds.goDownCellRetainSelection, \"alt+ArrowDown\"),\n goLeftCell: realizeKeybind(keybinds.goLeftCell, \"ArrowLeft|shift+Tab\"),\n goLeftCellRetainSelection: realizeKeybind(keybinds.goLeftCellRetainSelection, \"alt+ArrowLeft\"),\n goRightCell: realizeKeybind(keybinds.goRightCell, \"ArrowRight|Tab\"),\n goRightCellRetainSelection: realizeKeybind(keybinds.goRightCellRetainSelection, \"alt+ArrowRight\"),\n goUpCell: realizeKeybind(keybinds.goUpCell, \"ArrowUp\"),\n goUpCellRetainSelection: realizeKeybind(keybinds.goUpCellRetainSelection, \"alt+ArrowUp\"),\n goToFirstCell: realizeKeybind(keybinds.goToFirstCell, \"primary+Home\"),\n goToFirstColumn: realizeKeybind(keybinds.goToFirstColumn, \"Home|primary+ArrowLeft\"),\n goToFirstRow: realizeKeybind(keybinds.goToFirstRow, \"primary+ArrowUp\"),\n goToLastCell: realizeKeybind(keybinds.goToLastCell, \"primary+End\"),\n goToLastColumn: realizeKeybind(keybinds.goToLastColumn, \"End|primary+ArrowRight\"),\n goToLastRow: realizeKeybind(keybinds.goToLastRow, \"primary+ArrowDown\"),\n goToNextPage: realizeKeybind(keybinds.goToNextPage, \"PageDown\"),\n goToPreviousPage: realizeKeybind(keybinds.goToPreviousPage, \"PageUp\"),\n paste: keybinds.paste,\n rightFill: realizeKeybind(keybinds.rightFill, \"primary+_82\"),\n search: realizeKeybind(keybinds.search, \"primary+f\"),\n selectAll: realizeKeybind(keybinds.selectAll, \"primary+a\"),\n selectColumn: realizeKeybind(keybinds.selectColumn, \"ctrl+ \"),\n selectGrowDown: realizeKeybind(keybinds.selectGrowDown, \"shift+ArrowDown\"),\n selectGrowLeft: realizeKeybind(keybinds.selectGrowLeft, \"shift+ArrowLeft\"),\n selectGrowRight: realizeKeybind(keybinds.selectGrowRight, \"shift+ArrowRight\"),\n selectGrowUp: realizeKeybind(keybinds.selectGrowUp, \"shift+ArrowUp\"),\n selectRow: realizeKeybind(keybinds.selectRow, \"shift+ \"),\n selectToFirstCell: realizeKeybind(keybinds.selectToFirstCell, \"primary+shift+Home\"),\n selectToFirstColumn: realizeKeybind(keybinds.selectToFirstColumn, \"primary+shift+ArrowLeft\"),\n selectToFirstRow: realizeKeybind(keybinds.selectToFirstRow, \"primary+shift+ArrowUp\"),\n selectToLastCell: realizeKeybind(keybinds.selectToLastCell, \"primary+shift+End\"),\n selectToLastColumn: realizeKeybind(keybinds.selectToLastColumn, \"primary+shift+ArrowRight\"),\n selectToLastRow: realizeKeybind(keybinds.selectToLastRow, \"primary+shift+ArrowDown\"),\n };\n}\nexport function useKeybindingsWithDefaults(keybindingsIn) {\n const keys = useDeepMemo(keybindingsIn);\n return React.useMemo(() => {\n if (keys === undefined)\n return realizeKeybinds(keybindingDefaults);\n const withBackCompatApplied = {\n ...keys,\n goToNextPage: keys?.goToNextPage ?? keys?.pageDown ?? keybindingDefaults.goToNextPage,\n goToPreviousPage: keys?.goToPreviousPage ?? keys?.pageUp ?? keybindingDefaults.goToPreviousPage,\n goToFirstCell: keys?.goToFirstCell ?? keys?.first ?? keybindingDefaults.goToFirstCell,\n goToLastCell: keys?.goToLastCell ?? keys?.last ?? keybindingDefaults.goToLastCell,\n selectToFirstCell: keys?.selectToFirstCell ?? keys?.first ?? keybindingDefaults.selectToFirstCell,\n selectToLastCell: keys?.selectToLastCell ?? keys?.last ?? keybindingDefaults.selectToLastCell,\n };\n return realizeKeybinds({\n ...keybindingDefaults,\n ...withBackCompatApplied,\n });\n }, [keys]);\n}\n//# sourceMappingURL=data-editor-keybindings.js.map","/* eslint-disable sonarjs/no-duplicate-string */\nimport * as React from \"react\";\nimport { assert, assertNever, maybe } from \"../common/support.js\";\nimport clamp from \"lodash/clamp.js\";\nimport uniq from \"lodash/uniq.js\";\nimport flatten from \"lodash/flatten.js\";\nimport range from \"lodash/range.js\";\nimport debounce from \"lodash/debounce.js\";\nimport { GridCellKind, isEditableGridCell, isReadWriteCell, InnerGridCellKind, CompactSelection, isInnerOnlyCell, isObjectEditorCallbackResult, BooleanEmpty, BooleanIndeterminate, } from \"../internal/data-grid/data-grid-types.js\";\nimport DataGridSearch, {} from \"../internal/data-grid-search/data-grid-search.js\";\nimport { browserIsOSX } from \"../common/browser-detect.js\";\nimport { getDataEditorTheme, makeCSSStyle, ThemeContext, mergeAndRealizeTheme, } from \"../common/styles.js\";\nimport { getScrollBarWidth, useEventListener, useStateWithReactiveInput, whenDefined } from \"../common/utils.js\";\nimport { isGroupEqual, itemsAreEqual, itemIsInRect, gridSelectionHasItem, getFreezeTrailingHeight, } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { GroupRename } from \"./group-rename.js\";\nimport { measureColumn, useColumnSizer } from \"./use-column-sizer.js\";\nimport { isHotkey } from \"../common/is-hotkey.js\";\nimport { useSelectionBehavior } from \"../internal/data-grid/use-selection-behavior.js\";\nimport { useCellsForSelection } from \"./use-cells-for-selection.js\";\nimport { unquote, expandSelection, copyToClipboard, toggleBoolean } from \"./data-editor-fns.js\";\nimport { DataEditorContainer } from \"../internal/data-editor-container/data-grid-container.js\";\nimport { useAutoscroll } from \"./use-autoscroll.js\";\nimport { decodeHTML } from \"./copy-paste.js\";\nimport { useRemAdjuster } from \"./use-rem-adjuster.js\";\nimport { withAlpha } from \"../internal/data-grid/color-parser.js\";\nimport { combineRects, getClosestRect, pointInRect } from \"../common/math.js\";\nimport { groupHeaderKind, outOfBoundsKind, headerKind, mouseEventArgsAreEqual, } from \"../internal/data-grid/event-args.js\";\nimport { useKeybindingsWithDefaults } from \"./data-editor-keybindings.js\";\nconst DataGridOverlayEditor = React.lazy(async () => await import(\"../internal/data-grid-overlay-editor/data-grid-overlay-editor.js\"));\n// There must be a better way\nlet idCounter = 0;\nfunction getSpanStops(cells) {\n return uniq(flatten(flatten(cells)\n .filter(c => c.span !== undefined)\n .map(c => range((c.span?.[0] ?? 0) + 1, (c.span?.[1] ?? 0) + 1))));\n}\nfunction shiftSelection(input, offset) {\n if (input === undefined || offset === 0 || (input.columns.length === 0 && input.current === undefined))\n return input;\n return {\n current: input.current === undefined\n ? undefined\n : {\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}\nconst loadingCell = {\n kind: GridCellKind.Loading,\n allowOverlay: false,\n};\nconst emptyGridSelection = {\n columns: CompactSelection.empty(),\n rows: CompactSelection.empty(),\n current: undefined,\n};\nconst DataEditorImpl = (p, forwardedRef) => {\n const [gridSelectionInner, setGridSelectionInner] = React.useState(emptyGridSelection);\n const [overlay, setOverlay] = React.useState();\n const searchInputRef = React.useRef(null);\n const canvasRef = React.useRef(null);\n const [mouseState, setMouseState] = React.useState();\n const scrollRef = React.useRef(null);\n const lastSent = React.useRef();\n const safeWindow = typeof window === \"undefined\" ? null : window;\n const { imageEditorOverride, getRowThemeOverride, markdownDivCreateNode, width, height, columns: columnsIn, rows, getCellContent, onCellClicked, onCellActivated, onFillPattern, onFinishedEditing, coercePasteValue, drawHeader: drawHeaderIn, drawCell: drawCellIn, editorBloom, onHeaderClicked, onColumnProposeMove, spanRangeBehavior = \"default\", onGroupHeaderClicked, onCellContextMenu, className, onHeaderContextMenu, getCellsForSelection: getCellsForSelectionIn, onGroupHeaderContextMenu, onGroupHeaderRenamed, onCellEdited, onCellsEdited, onSearchResultsChanged: onSearchResultsChangedIn, searchResults, onSearchValueChange, searchValue, onKeyDown: onKeyDownIn, onKeyUp: onKeyUpIn, keybindings: keybindingsIn, editOnType = true, onRowAppended, onColumnMoved, validateCell: validateCellIn, highlightRegions: highlightRegionsIn, rangeSelect = \"rect\", columnSelect = \"multi\", rowSelect = \"multi\", rangeSelectionBlending = \"exclusive\", columnSelectionBlending = \"exclusive\", rowSelectionBlending = \"exclusive\", onDelete: onDeleteIn, onDragStart, onMouseMove, onPaste, copyHeaders = false, freezeColumns = 0, cellActivationBehavior = \"second-click\", rowSelectionMode = \"auto\", onHeaderMenuClick, getGroupDetails, onSearchClose: onSearchCloseIn, onItemHovered, onSelectionCleared, showSearch: showSearchIn, onVisibleRegionChanged, gridSelection: gridSelectionOuter, onGridSelectionChange, minColumnWidth: minColumnWidthIn = 50, maxColumnWidth: maxColumnWidthIn = 500, maxColumnAutoWidth: maxColumnAutoWidthIn, provideEditor, trailingRowOptions, freezeTrailingRows = 0, allowedFillDirections = \"orthogonal\", scrollOffsetX, scrollOffsetY, verticalBorder, onDragOverCell, onDrop, onColumnResize: onColumnResizeIn, onColumnResizeEnd: onColumnResizeEndIn, onColumnResizeStart: onColumnResizeStartIn, customRenderers: additionalRenderers, fillHandle, drawFocusRing = true, experimental, fixedShadowX, fixedShadowY, headerIcons, imageWindowLoader, initialSize, isDraggable, onDragLeave, onRowMoved, overscrollX: overscrollXIn, overscrollY: overscrollYIn, preventDiagonalScrolling, rightElement, rightElementProps, trapFocus = false, smoothScrollX, smoothScrollY, scaleToRem = false, rowHeight: rowHeightIn = 34, headerHeight: headerHeightIn = 36, groupHeaderHeight: groupHeaderHeightIn = headerHeightIn, theme: themeIn, isOutsideClick, renderers, } = p;\n const rowMarkersObj = typeof p.rowMarkers === \"string\" ? undefined : p.rowMarkers;\n const rowMarkers = rowMarkersObj?.kind ?? p.rowMarkers ?? \"none\";\n const rowMarkerWidthRaw = rowMarkersObj?.width ?? p.rowMarkerWidth;\n const rowMarkerStartIndex = rowMarkersObj?.startIndex ?? p.rowMarkerStartIndex ?? 1;\n const rowMarkerTheme = rowMarkersObj?.theme ?? p.rowMarkerTheme;\n const rowMarkerCheckboxStyle = rowMarkersObj?.checkboxStyle ?? \"square\";\n const minColumnWidth = Math.max(minColumnWidthIn, 20);\n const maxColumnWidth = Math.max(maxColumnWidthIn, minColumnWidth);\n const maxColumnAutoWidth = Math.max(maxColumnAutoWidthIn ?? maxColumnWidth, minColumnWidth);\n const docStyle = React.useMemo(() => {\n if (typeof window === \"undefined\")\n return { fontSize: \"16px\" };\n return window.getComputedStyle(document.documentElement);\n }, []);\n const remSize = React.useMemo(() => Number.parseFloat(docStyle.fontSize), [docStyle]);\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 = useKeybindingsWithDefaults(keybindingsIn);\n const rowMarkerWidth = rowMarkerWidthRaw ?? (rows > 10000 ? 48 : rows > 1000 ? 44 : rows > 100 ? 36 : 32);\n const hasRowMarkers = rowMarkers !== \"none\";\n const rowMarkerOffset = hasRowMarkers ? 1 : 0;\n const showTrailingBlankRow = onRowAppended !== undefined;\n const lastRowSticky = trailingRowOptions?.sticky === true;\n const [showSearchInner, setShowSearchInner] = React.useState(false);\n const showSearch = showSearchIn ?? showSearchInner;\n const onSearchClose = React.useCallback(() => {\n if (onSearchCloseIn !== undefined) {\n onSearchCloseIn();\n }\n else {\n setShowSearchInner(false);\n }\n }, [onSearchCloseIn]);\n const gridSelectionOuterMangled = React.useMemo(() => {\n return gridSelectionOuter === undefined ? undefined : shiftSelection(gridSelectionOuter, rowMarkerOffset);\n }, [gridSelectionOuter, rowMarkerOffset]);\n const gridSelection = gridSelectionOuterMangled ?? gridSelectionInner;\n const abortControllerRef = React.useRef();\n if (abortControllerRef.current === undefined)\n abortControllerRef.current = new AbortController();\n React.useEffect(() => () => abortControllerRef?.current.abort(), []);\n const [getCellsForSelection, getCellsForSeletionDirect] = useCellsForSelection(getCellsForSelectionIn, getCellContent, rowMarkerOffset, abortControllerRef.current, rows);\n const validateCell = React.useCallback((cell, newValue, prevValue) => {\n if (validateCellIn === undefined)\n return true;\n const item = [cell[0] - rowMarkerOffset, cell[1]];\n return validateCellIn?.(item, newValue, prevValue);\n }, [rowMarkerOffset, validateCellIn]);\n const expectedExternalGridSelection = React.useRef(gridSelectionOuter);\n const setGridSelection = React.useCallback((newVal, expand) => {\n if (expand) {\n newVal = expandSelection(newVal, getCellsForSelection, rowMarkerOffset, spanRangeBehavior, abortControllerRef.current);\n }\n if (onGridSelectionChange !== undefined) {\n expectedExternalGridSelection.current = shiftSelection(newVal, -rowMarkerOffset);\n onGridSelectionChange(expectedExternalGridSelection.current);\n }\n else {\n setGridSelectionInner(newVal);\n }\n }, [onGridSelectionChange, getCellsForSelection, rowMarkerOffset, spanRangeBehavior]);\n const onColumnResize = whenDefined(onColumnResizeIn, React.useCallback((_, w, ind, wg) => {\n onColumnResizeIn?.(columnsIn[ind - rowMarkerOffset], w, ind - rowMarkerOffset, wg);\n }, [onColumnResizeIn, rowMarkerOffset, columnsIn]));\n const onColumnResizeEnd = whenDefined(onColumnResizeEndIn, React.useCallback((_, w, ind, wg) => {\n onColumnResizeEndIn?.(columnsIn[ind - rowMarkerOffset], w, ind - rowMarkerOffset, wg);\n }, [onColumnResizeEndIn, rowMarkerOffset, columnsIn]));\n const onColumnResizeStart = whenDefined(onColumnResizeStartIn, React.useCallback((_, w, ind, wg) => {\n onColumnResizeStartIn?.(columnsIn[ind - rowMarkerOffset], w, ind - rowMarkerOffset, wg);\n }, [onColumnResizeStartIn, rowMarkerOffset, columnsIn]));\n const drawHeader = whenDefined(drawHeaderIn, React.useCallback((args, draw) => {\n return drawHeaderIn?.({ ...args, columnIndex: args.columnIndex - rowMarkerOffset }, draw) ?? false;\n }, [drawHeaderIn, rowMarkerOffset]));\n const drawCell = whenDefined(drawCellIn, React.useCallback((args, draw) => {\n return drawCellIn?.({ ...args, col: args.col - rowMarkerOffset }, draw) ?? false;\n }, [drawCellIn, rowMarkerOffset]));\n const onDelete = React.useCallback(sel => {\n if (onDeleteIn !== undefined) {\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 }, [onDeleteIn, rowMarkerOffset]);\n const [setCurrent, setSelectedRows, setSelectedColumns] = useSelectionBehavior(gridSelection, setGridSelection, rangeSelectionBlending, columnSelectionBlending, rowSelectionBlending, rangeSelect);\n const mergedTheme = React.useMemo(() => {\n return mergeAndRealizeTheme(getDataEditorTheme(), theme);\n }, [theme]);\n const [clientSize, setClientSize] = React.useState([0, 0, 0]);\n const rendererMap = React.useMemo(() => {\n if (renderers === undefined)\n return {};\n const result = {};\n for (const r of renderers) {\n result[r.kind] = r;\n }\n return result;\n }, [renderers]);\n const getCellRenderer = React.useCallback((cell) => {\n if (cell.kind !== GridCellKind.Custom) {\n return rendererMap[cell.kind];\n }\n return additionalRenderers?.find(x => x.isMatch(cell));\n }, [additionalRenderers, rendererMap]);\n // eslint-disable-next-line prefer-const\n let { sizedColumns: columns, nonGrowWidth } = useColumnSizer(columnsIn, rows, getCellsForSeletionDirect, clientSize[0] - (rowMarkerOffset === 0 ? 0 : rowMarkerWidth) - clientSize[2], minColumnWidth, maxColumnAutoWidth, mergedTheme, getCellRenderer, abortControllerRef.current);\n if (rowMarkers !== \"none\")\n nonGrowWidth += rowMarkerWidth;\n const enableGroups = React.useMemo(() => {\n return columns.some(c => c.group !== undefined);\n }, [columns]);\n const totalHeaderHeight = enableGroups ? headerHeight + groupHeaderHeight : headerHeight;\n const numSelectedRows = gridSelection.rows.length;\n const rowMarkerChecked = rowMarkers === \"none\" ? undefined : numSelectedRows === 0 ? false : numSelectedRows === rows ? true : undefined;\n const mangledCols = React.useMemo(() => {\n if (rowMarkers === \"none\")\n return columns;\n return [\n {\n title: \"\",\n width: rowMarkerWidth,\n icon: undefined,\n hasMenu: false,\n style: \"normal\",\n themeOverride: rowMarkerTheme,\n rowMarker: rowMarkerCheckboxStyle,\n rowMarkerChecked,\n },\n ...columns,\n ];\n }, [rowMarkers, columns, rowMarkerWidth, rowMarkerTheme, rowMarkerCheckboxStyle, rowMarkerChecked]);\n const [visibleRegionY, visibleRegionTy] = React.useMemo(() => {\n return [\n scrollOffsetY !== undefined && typeof rowHeight === \"number\" ? Math.floor(scrollOffsetY / rowHeight) : 0,\n scrollOffsetY !== undefined && typeof rowHeight === \"number\" ? -(scrollOffsetY % rowHeight) : 0,\n ];\n }, [scrollOffsetY, rowHeight]);\n const visibleRegionRef = React.useRef({\n height: 1,\n width: 1,\n x: 0,\n y: 0,\n });\n const visibleRegionInput = React.useMemo(() => ({\n x: visibleRegionRef.current.x,\n y: visibleRegionY,\n width: visibleRegionRef.current.width ?? 1,\n height: visibleRegionRef.current.height ?? 1,\n // tx: 'TODO',\n ty: visibleRegionTy,\n }), [visibleRegionTy, visibleRegionY]);\n const hasJustScrolled = React.useRef(false);\n const [visibleRegion, setVisibleRegion, empty] = useStateWithReactiveInput(visibleRegionInput);\n visibleRegionRef.current = visibleRegion;\n const vScrollReady = (visibleRegion.height ?? 1) > 1;\n React.useLayoutEffect(() => {\n if (scrollOffsetY !== undefined && scrollRef.current !== null && vScrollReady) {\n if (scrollRef.current.scrollTop === scrollOffsetY)\n return;\n scrollRef.current.scrollTop = scrollOffsetY;\n if (scrollRef.current.scrollTop !== scrollOffsetY) {\n empty();\n }\n hasJustScrolled.current = true;\n }\n }, [scrollOffsetY, vScrollReady, empty]);\n const hScrollReady = (visibleRegion.width ?? 1) > 1;\n React.useLayoutEffect(() => {\n if (scrollOffsetX !== undefined && scrollRef.current !== null && hScrollReady) {\n if (scrollRef.current.scrollLeft === scrollOffsetX)\n return;\n scrollRef.current.scrollLeft = scrollOffsetX;\n if (scrollRef.current.scrollLeft !== scrollOffsetX) {\n empty();\n }\n hasJustScrolled.current = true;\n }\n }, [scrollOffsetX, hScrollReady, empty]);\n const cellXOffset = visibleRegion.x + rowMarkerOffset;\n const cellYOffset = visibleRegion.y;\n const gridRef = React.useRef(null);\n const focus = React.useCallback((immediate) => {\n if (immediate === true) {\n gridRef.current?.focus();\n }\n else {\n window.requestAnimationFrame(() => {\n gridRef.current?.focus();\n });\n }\n }, []);\n const mangledRows = showTrailingBlankRow ? rows + 1 : rows;\n const mangledOnCellsEdited = React.useCallback((items) => {\n const mangledItems = rowMarkerOffset === 0\n ? items\n : items.map(x => ({\n ...x,\n location: [x.location[0] - rowMarkerOffset, x.location[1]],\n }));\n const r = onCellsEdited?.(mangledItems);\n if (r !== true) {\n for (const i of mangledItems)\n onCellEdited?.(i.location, i.value);\n }\n return r;\n }, [onCellEdited, onCellsEdited, rowMarkerOffset]);\n const [fillHighlightRegion, setFillHighlightRegion] = React.useState();\n // this will generally be undefined triggering the memo less often\n const highlightRange = gridSelection.current !== undefined &&\n gridSelection.current.range.width * gridSelection.current.range.height > 1\n ? gridSelection.current.range\n : undefined;\n const highlightFocus = drawFocusRing ? gridSelection.current?.cell : undefined;\n const highlightFocusCol = highlightFocus?.[0];\n const highlightFocusRow = highlightFocus?.[1];\n const highlightRegions = React.useMemo(() => {\n if ((highlightRegionsIn === undefined || highlightRegionsIn.length === 0) &&\n (highlightRange ?? highlightFocusCol ?? highlightFocusRow ?? fillHighlightRegion) === undefined)\n return undefined;\n const regions = [];\n if (highlightRegionsIn !== undefined) {\n for (const r of highlightRegionsIn) {\n const maxWidth = mangledCols.length - r.range.x - rowMarkerOffset;\n if (maxWidth > 0) {\n regions.push({\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 }\n }\n }\n if (fillHighlightRegion !== undefined) {\n regions.push({\n color: withAlpha(mergedTheme.accentColor, 0),\n range: fillHighlightRegion,\n style: \"dashed\",\n });\n }\n if (highlightRange !== undefined) {\n regions.push({\n color: withAlpha(mergedTheme.accentColor, 0.5),\n range: highlightRange,\n style: \"solid-outline\",\n });\n }\n if (highlightFocusCol !== undefined && highlightFocusRow !== undefined) {\n regions.push({\n color: mergedTheme.accentColor,\n range: {\n x: highlightFocusCol,\n y: highlightFocusRow,\n width: 1,\n height: 1,\n },\n style: \"solid-outline\",\n });\n }\n return regions.length > 0 ? regions : undefined;\n }, [\n fillHighlightRegion,\n highlightRange,\n highlightFocusCol,\n highlightFocusRow,\n highlightRegionsIn,\n mangledCols.length,\n mergedTheme.accentColor,\n rowMarkerOffset,\n ]);\n const mangledColsRef = React.useRef(mangledCols);\n mangledColsRef.current = mangledCols;\n const getMangledCellContent = React.useCallback(([col, row], forceStrict = false) => {\n const isTrailing = showTrailingBlankRow && row === mangledRows - 1;\n const isRowMarkerCol = col === 0 && hasRowMarkers;\n if (isRowMarkerCol) {\n if (isTrailing) {\n return loadingCell;\n }\n return {\n kind: InnerGridCellKind.Marker,\n allowOverlay: false,\n checkboxStyle: rowMarkerCheckboxStyle,\n checked: gridSelection?.rows.hasIndex(row) === true,\n markerKind: rowMarkers === \"clickable-number\" ? \"number\" : rowMarkers,\n row: rowMarkerStartIndex + row,\n drawHandle: onRowMoved !== undefined,\n cursor: rowMarkers === \"clickable-number\" ? \"pointer\" : undefined,\n };\n }\n else if (isTrailing) {\n //If the grid is empty, we will return text\n const isFirst = col === rowMarkerOffset;\n const maybeFirstColumnHint = isFirst ? trailingRowOptions?.hint ?? \"\" : \"\";\n const c = mangledColsRef.current[col];\n if (c?.trailingRowOptions?.disabled === true) {\n return loadingCell;\n }\n else {\n const hint = c?.trailingRowOptions?.hint ?? maybeFirstColumnHint;\n const icon = c?.trailingRowOptions?.addIcon ?? trailingRowOptions?.addIcon;\n return {\n kind: InnerGridCellKind.NewRow,\n hint,\n allowOverlay: false,\n icon,\n };\n }\n }\n else {\n const outerCol = col - rowMarkerOffset;\n if (forceStrict || experimental?.strict === true) {\n const vr = visibleRegionRef.current;\n const isOutsideMainArea = vr.x > outerCol ||\n outerCol > vr.x + vr.width ||\n vr.y > row ||\n row > vr.y + vr.height ||\n row >= rowsRef.current;\n const isSelected = outerCol === vr.extras?.selected?.[0] && row === vr.extras?.selected[1];\n let isInFreezeArea = false;\n if (vr.extras?.freezeRegions !== undefined) {\n for (const fr of vr.extras.freezeRegions) {\n if (pointInRect(fr, outerCol, row)) {\n isInFreezeArea = true;\n break;\n }\n }\n }\n if (isOutsideMainArea && !isSelected && !isInFreezeArea) {\n return loadingCell;\n }\n }\n let result = getCellContent([outerCol, row]);\n if (rowMarkerOffset !== 0 && result.span !== undefined) {\n result = {\n ...result,\n span: [result.span[0] + rowMarkerOffset, result.span[1] + rowMarkerOffset],\n };\n }\n return result;\n }\n }, [\n showTrailingBlankRow,\n mangledRows,\n hasRowMarkers,\n rowMarkerCheckboxStyle,\n gridSelection?.rows,\n rowMarkers,\n rowMarkerStartIndex,\n onRowMoved,\n rowMarkerOffset,\n trailingRowOptions?.hint,\n trailingRowOptions?.addIcon,\n experimental?.strict,\n getCellContent,\n ]);\n const mangledGetGroupDetails = React.useCallback(group => {\n let result = getGroupDetails?.(group) ?? { name: group };\n if (onGroupHeaderRenamed !== undefined && group !== \"\") {\n result = {\n // FIXME: Mutate\n icon: result.icon,\n name: result.name,\n overrideTheme: result.overrideTheme,\n actions: [\n ...(result.actions ?? []),\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 }, [getGroupDetails, onGroupHeaderRenamed]);\n const setOverlaySimple = React.useCallback((val) => {\n const [col, row] = val.cell;\n const column = mangledCols[col];\n const groupTheme = column?.group !== undefined ? mangledGetGroupDetails(column.group)?.overrideTheme : undefined;\n const colTheme = column?.themeOverride;\n const rowTheme = getRowThemeOverride?.(row);\n setOverlay({\n ...val,\n theme: mergeAndRealizeTheme(mergedTheme, groupTheme, colTheme, rowTheme, val.content.themeOverride),\n });\n }, [getRowThemeOverride, mangledCols, mangledGetGroupDetails, mergedTheme]);\n const reselect = React.useCallback((bounds, fromKeyboard, initialValue) => {\n if (gridSelection.current === undefined)\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 !== undefined) {\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 === undefined,\n forceEditMode: initialValue !== undefined,\n });\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 gridRef.current?.damage([{ cell: gridSelection.current.cell }]);\n }\n }, [getMangledCellContent, gridSelection, mangledOnCellsEdited, setOverlaySimple]);\n const focusOnRowFromTrailingBlankRow = React.useCallback((col, row) => {\n const bounds = gridRef.current?.getBounds(col, row);\n if (bounds === undefined || 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: undefined,\n highlight: true,\n cell: [col, row],\n forceEditMode: true,\n });\n }, [getMangledCellContent, setOverlaySimple]);\n const scrollTo = React.useCallback((col, row, dir = \"both\", paddingX = 0, paddingY = 0, options = undefined) => {\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 : undefined) : col;\n const trueRow = typeof row !== \"number\" ? (row.unit === \"cell\" ? row.amount : undefined) : row;\n const desiredX = typeof col !== \"number\" && col.unit === \"px\" ? col.amount : undefined;\n const desiredY = typeof row !== \"number\" && row.unit === \"px\" ? row.amount : undefined;\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 !== undefined || trueRow !== undefined) {\n targetRect = grid.getBounds((trueCol ?? 0) + rowMarkerOffset, trueRow ?? 0) ?? 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 !== undefined) {\n targetRect = {\n ...targetRect,\n x: desiredX - scrollBounds.left - scrollRef.current.scrollLeft,\n width: 1,\n };\n }\n if (desiredY !== undefined) {\n targetRect = {\n ...targetRect,\n y: desiredY + scrollBounds.top - scrollRef.current.scrollTop,\n height: 1,\n };\n }\n if (targetRect !== undefined) {\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 const freezeTrailingRowsEffective = freezeTrailingRows + (lastRowSticky ? 1 : 0);\n if (freezeTrailingRowsEffective > 0) {\n trailingRowHeight = getFreezeTrailingHeight(mangledRows, freezeTrailingRowsEffective, rowHeight);\n }\n // scrollBounds is already scaled\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?.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?.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 }\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 }\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 }\n else if (dir === \"horizontal\" ||\n (typeof row === \"number\" && row >= mangledRows - freezeTrailingRowsEffective)) {\n scrollY = 0;\n }\n if (scrollX !== 0 || scrollY !== 0) {\n // Remove scaling as scrollTo method is unaffected by transform scale.\n if (scale !== 1) {\n scrollX /= scale;\n scrollY /= scale;\n }\n scrollRef.current.scrollTo(scrollX + scrollRef.current.scrollLeft, scrollY + scrollRef.current.scrollTop);\n }\n }\n }\n }\n }, [\n rowMarkerOffset,\n freezeTrailingRows,\n rowMarkerWidth,\n totalHeaderHeight,\n freezeColumns,\n columns,\n mangledRows,\n lastRowSticky,\n rowHeight,\n ]);\n const focusCallback = React.useRef(focusOnRowFromTrailingBlankRow);\n const getCellContentRef = React.useRef(getCellContent);\n const rowsRef = React.useRef(rows);\n focusCallback.current = focusOnRowFromTrailingBlankRow;\n getCellContentRef.current = getCellContent;\n rowsRef.current = rows;\n const appendRow = React.useCallback(async (col, openOverlay = true) => {\n const c = mangledCols[col];\n if (c?.trailingRowOptions?.disabled === true) {\n return;\n }\n const appendResult = onRowAppended?.();\n let r = undefined;\n let bottom = true;\n if (appendResult !== undefined) {\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 scrollToRef.current(col - rowMarkerOffset, row);\n setCurrent({\n cell: [col, row],\n range: {\n x: col,\n y: row,\n width: 1,\n height: 1,\n },\n }, false, false, \"edit\");\n const cell = getCellContentRef.current([col - rowMarkerOffset, row]);\n if (cell.allowOverlay && isReadWriteCell(cell) && cell.readonly !== true && openOverlay) {\n // wait for scroll to have a chance to process\n window.setTimeout(() => {\n focusCallback.current(col, row);\n }, 0);\n }\n };\n // Queue up to allow the consumer to react to the event and let us check if they did\n doFocus();\n }, [mangledCols, onRowAppended, rowMarkerOffset, rows, setCurrent]);\n const getCustomNewRowTargetColumn = React.useCallback((col) => {\n const customTargetColumn = columns[col]?.trailingRowOptions?.targetColumn ?? 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 undefined;\n }, [columns, columnsIn, hasRowMarkers, trailingRowOptions?.targetColumn]);\n const lastSelectedRowRef = React.useRef();\n const lastSelectedColRef = React.useRef();\n const themeForCell = React.useCallback((cell, pos) => {\n const [col, row] = pos;\n return mergeAndRealizeTheme(mergedTheme, mangledCols[col]?.themeOverride, getRowThemeOverride?.(row), cell.themeOverride);\n }, [getRowThemeOverride, mangledCols, mergedTheme]);\n const handleSelect = React.useCallback((args) => {\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] = gridSelection.current?.cell ?? [];\n // eslint-disable-next-line unicorn/prefer-switch\n if (args.kind === \"cell\") {\n lastSelectedColRef.current = undefined;\n lastMouseSelectLocation.current = [col, row];\n if (col === 0 && hasRowMarkers) {\n if ((showTrailingBlankRow === true && row === rows) ||\n rowMarkers === \"number\" ||\n rowSelect === \"none\")\n return;\n const markerCell = getMangledCellContent(args.location);\n if (markerCell.kind !== InnerGridCellKind.Marker) {\n return;\n }\n if (onRowMoved !== undefined) {\n const renderer = getCellRenderer(markerCell);\n assert(renderer?.kind === InnerGridCellKind.Marker);\n const postClick = renderer?.onClick?.({\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: () => undefined,\n });\n if (postClick === undefined || postClick.checked === markerCell.checked)\n return;\n }\n setOverlay(undefined);\n focus();\n const isSelected = selectedRows.hasIndex(row);\n const lastHighlighted = lastSelectedRowRef.current;\n if (rowSelect === \"multi\" &&\n (args.shiftKey || args.isLongTouch === true) &&\n lastHighlighted !== undefined &&\n selectedRows.hasIndex(lastHighlighted)) {\n const newSlice = [Math.min(lastHighlighted, row), Math.max(lastHighlighted, row) + 1];\n if (isMultiRow || rowSelectionMode === \"multi\") {\n setSelectedRows(undefined, newSlice, true);\n }\n else {\n setSelectedRows(CompactSelection.fromSingleSelection(newSlice), undefined, isMultiRow);\n }\n }\n else if (isMultiRow || args.isTouch || rowSelectionMode === \"multi\") {\n if (isSelected) {\n setSelectedRows(selectedRows.remove(row), undefined, true);\n }\n else {\n setSelectedRows(undefined, row, true);\n lastSelectedRowRef.current = row;\n }\n }\n else if (isSelected && selectedRows.length === 1) {\n setSelectedRows(CompactSelection.empty(), undefined, isMultiKey);\n }\n else {\n setSelectedRows(CompactSelection.fromSingleSelection(row), undefined, isMultiKey);\n lastSelectedRowRef.current = row;\n }\n }\n else if (col >= rowMarkerOffset && showTrailingBlankRow && row === rows) {\n const customTargetColumn = getCustomNewRowTargetColumn(col);\n void appendRow(customTargetColumn ?? col);\n }\n else {\n if (cellCol !== col || cellRow !== row) {\n const cell = getMangledCellContent(args.location);\n const renderer = getCellRenderer(cell);\n if (renderer?.onSelect !== undefined) {\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 !== undefined && gridSelection.current?.cell[1] === rows;\n if ((args.shiftKey || args.isLongTouch === true) &&\n cellCol !== undefined &&\n cellRow !== undefined &&\n gridSelection.current !== undefined &&\n !startedFromLastSticky) {\n if (isLastStickyRow) {\n // If we're making a selection and shift click in to the last sticky row,\n // just drop the event. Don't kill the selection.\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 ...gridSelection.current,\n range: {\n x: left,\n y: top,\n width: right - left + 1,\n height: bottom - top + 1,\n },\n }, true, isMultiKey, \"click\");\n lastSelectedRowRef.current = undefined;\n focus();\n }\n else {\n setCurrent({\n cell: [col, row],\n range: { x: col, y: row, width: 1, height: 1 },\n }, true, isMultiKey, \"click\");\n lastSelectedRowRef.current = undefined;\n setOverlay(undefined);\n focus();\n }\n }\n }\n }\n else if (args.kind === \"header\") {\n lastMouseSelectLocation.current = [col, row];\n setOverlay(undefined);\n if (hasRowMarkers && col === 0) {\n lastSelectedRowRef.current = undefined;\n lastSelectedColRef.current = undefined;\n if (rowSelect === \"multi\") {\n if (selectedRows.length !== rows) {\n setSelectedRows(CompactSelection.fromSingleSelection([0, rows]), undefined, isMultiKey);\n }\n else {\n setSelectedRows(CompactSelection.empty(), undefined, isMultiKey);\n }\n focus();\n }\n }\n else {\n const lastCol = lastSelectedColRef.current;\n if (columnSelect === \"multi\" &&\n (args.shiftKey || args.isLongTouch === true) &&\n lastCol !== undefined &&\n selectedColumns.hasIndex(lastCol)) {\n const newSlice = [Math.min(lastCol, col), Math.max(lastCol, col) + 1];\n if (isMultiCol) {\n setSelectedColumns(undefined, newSlice, isMultiKey);\n }\n else {\n setSelectedColumns(CompactSelection.fromSingleSelection(newSlice), undefined, isMultiKey);\n }\n }\n else if (isMultiCol) {\n if (selectedColumns.hasIndex(col)) {\n setSelectedColumns(selectedColumns.remove(col), undefined, isMultiKey);\n }\n else {\n setSelectedColumns(undefined, col, isMultiKey);\n }\n lastSelectedColRef.current = col;\n }\n else if (columnSelect !== \"none\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(col), undefined, isMultiKey);\n lastSelectedColRef.current = col;\n }\n lastSelectedRowRef.current = undefined;\n focus();\n }\n }\n else if (args.kind === groupHeaderKind) {\n lastMouseSelectLocation.current = [col, row];\n }\n else if (args.kind === outOfBoundsKind && !args.isMaybeScrollbar) {\n setGridSelection(emptyGridSelection, false);\n setOverlay(undefined);\n focus();\n onSelectionCleared?.();\n lastSelectedRowRef.current = undefined;\n lastSelectedColRef.current = undefined;\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 const isActivelyDraggingHeader = React.useRef(false);\n const lastMouseSelectLocation = React.useRef();\n const touchDownArgs = React.useRef(visibleRegion);\n const mouseDownData = React.useRef();\n const onMouseDown = React.useCallback((args) => {\n isPrevented.current = false;\n touchDownArgs.current = visibleRegionRef.current;\n if (args.button !== 0 && args.button !== 1) {\n mouseDownData.current = undefined;\n return;\n }\n const time = performance.now();\n mouseDownData.current = {\n button: args.button,\n time,\n location: args.location,\n };\n if (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 = undefined;\n if (!args.isTouch && args.button === 0 && !fh) {\n handleSelect(args);\n }\n else if (!args.isTouch && args.button === 1) {\n lastMouseSelectLocation.current = args.location;\n }\n }, [gridSelection, handleSelect]);\n const [renameGroup, setRenameGroup] = React.useState();\n const handleGroupHeaderSelection = React.useCallback((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, undefined, isMultiKey);\n }\n else {\n setSelectedColumns(undefined, [start, end + 1], isMultiKey);\n }\n }\n else {\n setSelectedColumns(CompactSelection.fromSingleSelection([start, end + 1]), undefined, isMultiKey);\n }\n }, [columnSelect, focus, gridSelection.columns, mangledCols, rowMarkerOffset, setSelectedColumns]);\n const isPrevented = React.useRef(false);\n const normalSizeColumn = React.useCallback(async (col) => {\n if (getCellsForSelection !== undefined && onColumnResize !== undefined) {\n const start = visibleRegionRef.current.y;\n const end = visibleRegionRef.current.height;\n let cells = getCellsForSelection({\n x: col,\n y: start,\n width: 1,\n height: Math.min(end, rows - start),\n }, abortControllerRef.current.signal);\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.baseFontFull;\n const newCol = measureColumn(ctx, mergedTheme, inputCol, 0, cells, minColumnWidth, maxColumnWidth, false, getCellRenderer);\n onColumnResize?.(inputCol, newCol.width, col, newCol.width);\n }\n }\n }, [\n columns,\n getCellsForSelection,\n maxColumnWidth,\n mergedTheme,\n minColumnWidth,\n onColumnResize,\n rowMarkerOffset,\n rows,\n getCellRenderer,\n ]);\n const [scrollDir, setScrollDir] = React.useState();\n const fillPattern = React.useCallback(async (previousSelection, currentSelection) => {\n const patternRange = previousSelection.current?.range;\n if (patternRange === undefined ||\n getCellsForSelection === undefined ||\n currentSelection.current === undefined) {\n return;\n }\n const currentRange = currentSelection.current.range;\n if (onFillPattern !== undefined) {\n let canceled = false;\n onFillPattern({\n fillDestination: { ...currentRange, x: currentRange.x - rowMarkerOffset },\n patternSource: { ...patternRange, x: patternRange.x - rowMarkerOffset },\n preventDefault: () => (canceled = true),\n });\n if (canceled)\n return;\n }\n let cells = getCellsForSelection(patternRange, abortControllerRef.current.signal);\n if (typeof cells !== \"object\")\n cells = await cells();\n const pattern = cells;\n // loop through all cells in currentSelection.current.range\n const editItemList = [];\n for (let x = 0; x < currentRange.width; x++) {\n for (let y = 0; y < currentRange.height; y++) {\n const cell = [currentRange.x + x, currentRange.y + y];\n if (itemIsInRect(cell, patternRange))\n continue;\n const patternCell = pattern[y % patternRange.height][x % patternRange.width];\n if (isInnerOnlyCell(patternCell) || !isReadWriteCell(patternCell))\n continue;\n editItemList.push({\n location: cell,\n value: { ...patternCell },\n });\n }\n }\n mangledOnCellsEdited(editItemList);\n gridRef.current?.damage(editItemList.map(c => ({\n cell: c.location,\n })));\n }, [getCellsForSelection, mangledOnCellsEdited, onFillPattern, rowMarkerOffset]);\n const fillRight = React.useCallback(() => {\n if (gridSelection.current === undefined || gridSelection.current.range.width <= 1)\n return;\n const firstColSelection = {\n ...gridSelection,\n current: {\n ...gridSelection.current,\n range: {\n ...gridSelection.current.range,\n width: 1,\n },\n },\n };\n void fillPattern(firstColSelection, gridSelection);\n }, [fillPattern, gridSelection]);\n const fillDown = React.useCallback(() => {\n if (gridSelection.current === undefined || gridSelection.current.range.height <= 1)\n return;\n const firstRowSelection = {\n ...gridSelection,\n current: {\n ...gridSelection.current,\n range: {\n ...gridSelection.current.range,\n height: 1,\n },\n },\n };\n void fillPattern(firstRowSelection, gridSelection);\n }, [fillPattern, gridSelection]);\n const onMouseUp = React.useCallback((args, isOutside) => {\n const mouse = mouseState;\n setMouseState(undefined);\n setFillHighlightRegion(undefined);\n setScrollDir(undefined);\n isActivelyDraggingHeader.current = false;\n if (isOutside)\n return;\n if (mouse?.fillHandle === true &&\n gridSelection.current !== undefined &&\n mouse.previousSelection?.current !== undefined) {\n if (fillHighlightRegion === undefined)\n return;\n const newRange = {\n ...gridSelection,\n current: {\n ...gridSelection.current,\n range: combineRects(mouse.previousSelection.current.range, fillHighlightRegion),\n },\n };\n void fillPattern(mouse.previousSelection, newRange);\n setGridSelection(newRange, true);\n return;\n }\n const [col, row] = args.location;\n const [lastMouseDownCol, lastMouseDownRow] = lastMouseSelectLocation.current ?? [];\n const preventDefault = () => {\n isPrevented.current = true;\n };\n const handleMaybeClick = (a) => {\n const isValidClick = a.isTouch || (lastMouseDownCol === col && lastMouseDownRow === row);\n if (isValidClick) {\n 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 !== undefined && r.onClick !== undefined && 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 !== undefined && !isInnerOnlyCell(newVal) && isEditableGridCell(newVal)) {\n mangledOnCellsEdited([{ location: a.location, value: newVal }]);\n gridRef.current?.damage([\n {\n cell: a.location,\n },\n ]);\n }\n }\n if (isPrevented.current || gridSelection.current === undefined)\n return false;\n let shouldActivate = false;\n switch (c.activationBehaviorOverride ?? cellActivationBehavior) {\n case \"double-click\":\n case \"second-click\": {\n if (mouse?.previousSelection?.current?.cell === undefined)\n break;\n const [selectedCol, selectedRow] = gridSelection.current.cell;\n const [prevCol, prevRow] = mouse.previousSelection.current.cell;\n const isClickOnSelected = col === selectedCol && col === prevCol && row === selectedRow && row === prevRow;\n shouldActivate =\n isClickOnSelected &&\n (a.isDoubleClick === true || cellActivationBehavior === \"second-click\");\n break;\n }\n case \"single-click\": {\n shouldActivate = true;\n break;\n }\n }\n if (shouldActivate) {\n onCellActivated?.([col - rowMarkerOffset, row]);\n reselect(a.bounds, false);\n return true;\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 // we scrolled, abort\n return;\n }\n // take care of context menus first if long pressed item is already selected\n if (args.isLongTouch === true) {\n if (args.kind === \"cell\" && itemsAreEqual(gridSelection.current?.cell, args.location)) {\n onCellContextMenu?.([clickLocation, args.location[1]], {\n ...args,\n preventDefault,\n });\n return;\n }\n else if (args.kind === \"header\" && gridSelection.columns.hasIndex(col)) {\n onHeaderContextMenu?.(clickLocation, { ...args, preventDefault });\n return;\n }\n else if (args.kind === groupHeaderKind) {\n if (clickLocation < 0) {\n return;\n }\n onGroupHeaderContextMenu?.(clickLocation, { ...args, preventDefault });\n return;\n }\n }\n if (args.kind === \"cell\") {\n // click that cell\n if (!handleMaybeClick(args)) {\n handleSelect(args);\n }\n }\n else if (args.kind === groupHeaderKind) {\n onGroupHeaderClicked?.(clickLocation, { ...args, preventDefault });\n }\n else {\n if (args.kind === headerKind) {\n 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 if (args.isDoubleClick === true) {\n void normalSizeColumn(col);\n }\n }\n else if (args.button === 0 && col === lastMouseDownCol && row === lastMouseDownRow) {\n 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?.(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 = undefined;\n }, [\n mouseState,\n gridSelection,\n rowMarkerOffset,\n fillHighlightRegion,\n fillPattern,\n setGridSelection,\n onCellClicked,\n getMangledCellContent,\n getCellRenderer,\n cellActivationBehavior,\n themeForCell,\n mangledOnCellsEdited,\n onCellActivated,\n reselect,\n onCellContextMenu,\n onHeaderContextMenu,\n onGroupHeaderContextMenu,\n handleSelect,\n onGroupHeaderClicked,\n onHeaderClicked,\n normalSizeColumn,\n handleGroupHeaderSelection,\n ]);\n const onMouseMoveImpl = React.useCallback((args) => {\n const a = {\n ...args,\n location: [args.location[0] - rowMarkerOffset, args.location[1]],\n };\n onMouseMove?.(a);\n if (mouseState !== undefined && args.buttons === 0) {\n setMouseState(undefined);\n setFillHighlightRegion(undefined);\n setScrollDir(undefined);\n isActivelyDraggingHeader.current = false;\n }\n setScrollDir(cv => {\n if (isActivelyDraggingHeader.current)\n return [args.scrollEdge[0], 0];\n if (args.scrollEdge[0] === cv?.[0] && args.scrollEdge[1] === cv[1])\n return cv;\n return mouseState === undefined || (mouseDownData.current?.location[0] ?? 0) < rowMarkerOffset\n ? undefined\n : args.scrollEdge;\n });\n }, [mouseState, onMouseMove, rowMarkerOffset]);\n const onHeaderMenuClickInner = React.useCallback((col, screenPosition) => {\n onHeaderMenuClick?.(col - rowMarkerOffset, screenPosition);\n }, [onHeaderMenuClick, rowMarkerOffset]);\n const currentCell = gridSelection?.current?.cell;\n const onVisibleRegionChangedImpl = React.useCallback((region, clientWidth, clientHeight, rightElWidth, tx, ty) => {\n hasJustScrolled.current = false;\n let selected = currentCell;\n if (selected !== undefined) {\n selected = [selected[0] - rowMarkerOffset, selected[1]];\n }\n const freezeRegion = freezeColumns === 0\n ? undefined\n : {\n x: 0,\n y: region.y,\n width: freezeColumns,\n height: region.height,\n };\n const freezeRegions = [];\n if (freezeRegion !== undefined)\n freezeRegions.push(freezeRegion);\n if (freezeTrailingRows > 0) {\n freezeRegions.push({\n x: region.x - rowMarkerOffset,\n y: rows - freezeTrailingRows,\n width: region.width,\n height: freezeTrailingRows,\n });\n if (freezeColumns > 0) {\n freezeRegions.push({\n x: 0,\n y: rows - freezeTrailingRows,\n width: freezeColumns,\n height: freezeTrailingRows,\n });\n }\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,\n freezeRegions,\n },\n };\n visibleRegionRef.current = newRegion;\n setVisibleRegion(newRegion);\n setClientSize([clientWidth, clientHeight, rightElWidth]);\n onVisibleRegionChanged?.(newRegion, newRegion.tx, newRegion.ty, newRegion.extras);\n }, [\n currentCell,\n rowMarkerOffset,\n showTrailingBlankRow,\n rows,\n freezeColumns,\n freezeTrailingRows,\n setVisibleRegion,\n onVisibleRegionChanged,\n ]);\n const onColumnMovedImpl = whenDefined(onColumnMoved, React.useCallback((startIndex, endIndex) => {\n onColumnMoved?.(startIndex - rowMarkerOffset, endIndex - rowMarkerOffset);\n if (columnSelect !== \"none\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(endIndex), undefined, true);\n }\n }, [columnSelect, onColumnMoved, rowMarkerOffset, setSelectedColumns]));\n const isActivelyDragging = React.useRef(false);\n const onDragStartImpl = React.useCallback((args) => {\n if (args.location[0] === 0 && rowMarkerOffset > 0) {\n args.preventDefault();\n return;\n }\n onDragStart?.({\n ...args,\n location: [args.location[0] - rowMarkerOffset, args.location[1]],\n });\n if (!args.defaultPrevented()) {\n isActivelyDragging.current = true;\n }\n setMouseState(undefined);\n }, [onDragStart, rowMarkerOffset]);\n const onDragEnd = React.useCallback(() => {\n isActivelyDragging.current = false;\n }, []);\n const hoveredRef = React.useRef();\n const onItemHoveredImpl = React.useCallback((args) => {\n // make sure we still have a button down\n if (mouseEventArgsAreEqual(args, hoveredRef.current))\n return;\n hoveredRef.current = args;\n if (mouseDownData?.current?.button !== undefined && mouseDownData.current.button >= 1)\n return;\n if (args.buttons !== 0 &&\n mouseState !== undefined &&\n mouseDownData.current?.location[0] === 0 &&\n args.location[0] === 0 &&\n rowMarkerOffset === 1 &&\n rowSelect === \"multi\" &&\n mouseState.previousSelection &&\n !mouseState.previousSelection.rows.hasIndex(mouseDownData.current.location[1]) &&\n 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]), undefined, false);\n }\n if (args.buttons !== 0 &&\n mouseState !== undefined &&\n gridSelection.current !== undefined &&\n !isActivelyDragging.current &&\n !isActivelyDraggingHeader.current &&\n (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\")) {\n const [selectedCol, selectedRow] = gridSelection.current.cell;\n // eslint-disable-next-line prefer-const\n let [col, row] = args.location;\n if (row < 0) {\n row = visibleRegionRef.current.y;\n }\n if (mouseState.fillHandle === true && mouseState.previousSelection?.current !== undefined) {\n const prevRange = mouseState.previousSelection.current.range;\n row = Math.min(row, showTrailingBlankRow ? rows - 1 : rows);\n const rect = getClosestRect(prevRange, col, row, allowedFillDirections);\n setFillHighlightRegion(rect);\n }\n else {\n const startedFromLastStickyRow = showTrailingBlankRow && selectedRow === rows;\n if (startedFromLastStickyRow)\n return;\n const landedOnLastStickyRow = showTrailingBlankRow && 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 ...gridSelection.current,\n range: newRange,\n }, true, false, \"drag\");\n }\n }\n onItemHovered?.({ ...args, location: [args.location[0] - rowMarkerOffset, args.location[1]] });\n }, [\n allowedFillDirections,\n mouseState,\n rowMarkerOffset,\n rowSelect,\n gridSelection,\n rangeSelect,\n onItemHovered,\n setSelectedRows,\n showTrailingBlankRow,\n rows,\n setCurrent,\n ]);\n const adjustSelectionOnScroll = React.useCallback(() => {\n const args = hoveredRef.current;\n if (args === undefined)\n return;\n const [xDir, yDir] = args.scrollEdge;\n let [col, row] = args.location;\n const visible = visibleRegionRef.current;\n if (xDir === -1) {\n col = visible.extras?.freezeRegion?.x ?? visible.x;\n }\n else if (xDir === 1) {\n col = visible.x + visible.width;\n }\n if (yDir === -1) {\n row = Math.max(0, visible.y);\n }\n else if (yDir === 1) {\n row = Math.min(rows - 1, visible.y + visible.height);\n }\n col = clamp(col, 0, mangledCols.length - 1);\n row = clamp(row, 0, rows - 1);\n onItemHoveredImpl({\n ...args,\n location: [col, row],\n });\n }, [mangledCols.length, onItemHoveredImpl, rows]);\n useAutoscroll(scrollDir, scrollRef, adjustSelectionOnScroll);\n // 1 === move one\n // 2 === move to end\n const adjustSelection = React.useCallback((direction) => {\n if (gridSelection.current === undefined)\n return;\n const [x, y] = direction;\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 // take care of vertical first in case new spans come in\n if (y !== 0) {\n switch (y) {\n case 2: {\n // go to end\n bottom = rows;\n top = row;\n scrollTo(0, bottom, \"vertical\");\n break;\n }\n case -2: {\n // go to start\n top = 0;\n bottom = row + 1;\n scrollTo(0, top, \"vertical\");\n break;\n }\n case 1: {\n // motion down\n if (top < row) {\n top++;\n scrollTo(0, top, \"vertical\");\n }\n else {\n bottom = Math.min(rows, bottom + 1);\n scrollTo(0, bottom, \"vertical\");\n }\n break;\n }\n case -1: {\n // motion up\n if (bottom > row + 1) {\n bottom--;\n scrollTo(0, bottom, \"vertical\");\n }\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 }\n else if (x === -2) {\n left = rowMarkerOffset;\n right = col + 1;\n scrollTo(left - rowMarkerOffset, 0, \"horizontal\");\n }\n else {\n let disallowed = [];\n if (getCellsForSelection !== undefined) {\n const cells = getCellsForSelection({\n x: left,\n y: top,\n width: right - left - rowMarkerOffset,\n height: bottom - top,\n }, abortControllerRef.current.signal);\n if (typeof cells === \"object\") {\n disallowed = getSpanStops(cells);\n }\n }\n if (x === 1) {\n // motion right\n let done = false;\n if (left < col) {\n if (disallowed.length > 0) {\n const target = range(left + 1, col + 1).find(n => !disallowed.includes(n - rowMarkerOffset));\n if (target !== undefined) {\n left = target;\n done = true;\n }\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 }\n else if (x === -1) {\n // motion left\n let done = false;\n if (right > col + 1) {\n if (disallowed.length > 0) {\n const target = range(right - 1, col, -1).find(n => !disallowed.includes(n - rowMarkerOffset));\n if (target !== undefined) {\n right = target;\n done = true;\n }\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 }\n else {\n assertNever(x);\n }\n }\n }\n setCurrent({\n cell: gridSelection.current.cell,\n range: {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n },\n }, true, false, \"keyboard-select\");\n }, [getCellsForSelection, gridSelection, mangledCols.length, rowMarkerOffset, rows, scrollTo, setCurrent]);\n const updateSelectedCell = React.useCallback((col, row, fromEditingTrailingRow, freeMove) => {\n const rowMax = mangledRows - (fromEditingTrailingRow ? 0 : 1);\n col = clamp(col, rowMarkerOffset, columns.length - 1 + rowMarkerOffset);\n row = clamp(row, 0, rowMax);\n if (col === currentCell?.[0] && row === currentCell?.[1])\n return false;\n if (freeMove && gridSelection.current !== undefined) {\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 ...gridSelection,\n current: {\n cell: [col, row],\n range: { x: col, y: row, width: 1, height: 1 },\n rangeStack: newStack,\n },\n }, true);\n }\n else {\n setCurrent({\n cell: [col, row],\n range: { x: col, y: row, width: 1, height: 1 },\n }, true, false, \"keyboard-nav\");\n }\n if (lastSent.current !== undefined && lastSent.current[0] === col && lastSent.current[1] === row) {\n lastSent.current = undefined;\n }\n scrollTo(col - rowMarkerOffset, row);\n return true;\n }, [\n mangledRows,\n rowMarkerOffset,\n columns.length,\n currentCell,\n gridSelection,\n scrollTo,\n setGridSelection,\n setCurrent,\n ]);\n const onFinishEditing = React.useCallback((newValue, movement) => {\n if (overlay?.cell !== undefined && newValue !== undefined && isEditableGridCell(newValue)) {\n mangledOnCellsEdited([{ location: overlay.cell, value: newValue }]);\n window.requestAnimationFrame(() => {\n gridRef.current?.damage([\n {\n cell: overlay.cell,\n },\n ]);\n });\n }\n focus(true);\n setOverlay(undefined);\n const [movX, movY] = movement;\n if (gridSelection.current !== undefined && (movX !== 0 || movY !== 0)) {\n const isEditingTrailingRow = gridSelection.current.cell[1] === mangledRows - 1 && newValue !== undefined;\n updateSelectedCell(clamp(gridSelection.current.cell[0] + movX, 0, mangledCols.length - 1), clamp(gridSelection.current.cell[1] + movY, 0, mangledRows - 1), isEditingTrailingRow, false);\n }\n onFinishedEditing?.(newValue, movement);\n }, [\n overlay?.cell,\n focus,\n gridSelection,\n onFinishedEditing,\n mangledOnCellsEdited,\n mangledRows,\n updateSelectedCell,\n mangledCols.length,\n ]);\n const overlayID = React.useMemo(() => {\n return `gdg-overlay-${idCounter++}`;\n }, []);\n const deleteRange = React.useCallback((r) => {\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 = undefined;\n if (cellValue.kind === GridCellKind.Custom) {\n const toDelete = getCellRenderer(cellValue);\n const editor = toDelete?.provideEditor?.(cellValue);\n if (toDelete?.onDelete !== undefined) {\n newVal = toDelete.onDelete(cellValue);\n }\n else if (isObjectEditorCallbackResult(editor)) {\n newVal = editor?.deletedValue?.(cellValue);\n }\n }\n else if ((isEditableGridCell(cellValue) && cellValue.allowOverlay) ||\n cellValue.kind === GridCellKind.Boolean) {\n const toDelete = getCellRenderer(cellValue);\n newVal = toDelete?.onDelete?.(cellValue);\n }\n if (newVal !== undefined && !isInnerOnlyCell(newVal) && isEditableGridCell(newVal)) {\n editList.push({ location: [x, y], value: newVal });\n }\n }\n }\n mangledOnCellsEdited(editList);\n gridRef.current?.damage(editList.map(x => ({ cell: x.location })));\n }, [focus, getCellContent, getCellRenderer, mangledOnCellsEdited, rowMarkerOffset]);\n const overlayOpen = overlay !== undefined;\n const handleFixedKeybindings = React.useCallback((event) => {\n const cancel = () => {\n event.stopPropagation();\n event.preventDefault();\n };\n const details = {\n didMatch: false,\n };\n const { bounds } = event;\n const selectedColumns = gridSelection.columns;\n const selectedRows = gridSelection.rows;\n const keys = keybindings;\n if (!overlayOpen && isHotkey(keys.clear, event, details)) {\n setGridSelection(emptyGridSelection, false);\n onSelectionCleared?.();\n }\n else if (!overlayOpen && isHotkey(keys.selectAll, event, details)) {\n setGridSelection({\n columns: CompactSelection.empty(),\n rows: CompactSelection.empty(),\n current: {\n cell: gridSelection.current?.cell ?? [rowMarkerOffset, 0],\n range: {\n x: rowMarkerOffset,\n y: 0,\n width: columnsIn.length,\n height: rows,\n },\n rangeStack: [],\n },\n }, false);\n }\n else if (isHotkey(keys.search, event, details)) {\n searchInputRef?.current?.focus({ preventScroll: true });\n setShowSearchInner(true);\n }\n else if (isHotkey(keys.delete, event, details)) {\n const callbackResult = onDelete?.(gridSelection) ?? true;\n if (callbackResult !== false) {\n const toDelete = callbackResult === true ? gridSelection : callbackResult;\n // delete order:\n // 1) primary range\n // 2) secondary ranges\n // 3) columns\n // 4) rows\n if (toDelete.current !== undefined) {\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: columnsIn.length,\n height: 1,\n });\n }\n for (const col of toDelete.columns) {\n deleteRange({\n x: col,\n y: 0,\n width: 1,\n height: rows,\n });\n }\n }\n }\n if (details.didMatch) {\n cancel();\n return true;\n }\n if (gridSelection.current === undefined)\n return false;\n let [col, row] = gridSelection.current.cell;\n let freeMove = false;\n let cancelOnlyOnMove = false;\n if (isHotkey(keys.scrollToSelectedCell, event, details)) {\n scrollToRef.current(col - rowMarkerOffset, row);\n }\n else if (columnSelect !== \"none\" && isHotkey(keys.selectColumn, event, details)) {\n if (selectedColumns.hasIndex(col)) {\n setSelectedColumns(selectedColumns.remove(col), undefined, true);\n }\n else {\n if (columnSelect === \"single\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(col), undefined, true);\n }\n else {\n setSelectedColumns(undefined, col, true);\n }\n }\n }\n else if (rowSelect !== \"none\" && isHotkey(keys.selectRow, event, details)) {\n if (selectedRows.hasIndex(row)) {\n setSelectedRows(selectedRows.remove(row), undefined, true);\n }\n else {\n if (rowSelect === \"single\") {\n setSelectedRows(CompactSelection.fromSingleSelection(row), undefined, true);\n }\n else {\n setSelectedRows(undefined, row, true);\n }\n }\n }\n else if (!overlayOpen && bounds !== undefined && isHotkey(keys.activateCell, event, details)) {\n if (row === rows && showTrailingBlankRow) {\n window.setTimeout(() => {\n const customTargetColumn = getCustomNewRowTargetColumn(col);\n void appendRow(customTargetColumn ?? col);\n }, 0);\n }\n else {\n onCellActivated?.([col - rowMarkerOffset, row]);\n reselect(bounds, true);\n }\n }\n else if (gridSelection.current.range.height > 1 && isHotkey(keys.downFill, event, details)) {\n fillDown();\n }\n else if (gridSelection.current.range.width > 1 && isHotkey(keys.rightFill, event, details)) {\n fillRight();\n }\n else if (isHotkey(keys.goToNextPage, event, details)) {\n row += Math.max(1, visibleRegionRef.current.height - 4); // partial cell accounting\n }\n else if (isHotkey(keys.goToPreviousPage, event, details)) {\n row -= Math.max(1, visibleRegionRef.current.height - 4); // partial cell accounting\n }\n else if (isHotkey(keys.goToFirstCell, event, details)) {\n setOverlay(undefined);\n row = 0;\n col = 0;\n }\n else if (isHotkey(keys.goToLastCell, event, details)) {\n setOverlay(undefined);\n row = Number.MAX_SAFE_INTEGER;\n col = Number.MAX_SAFE_INTEGER;\n }\n else if (isHotkey(keys.selectToFirstCell, event, details)) {\n setOverlay(undefined);\n adjustSelection([-2, -2]);\n }\n else if (isHotkey(keys.selectToLastCell, event, details)) {\n setOverlay(undefined);\n adjustSelection([2, 2]);\n }\n else if (!overlayOpen) {\n if (isHotkey(keys.goDownCell, event, details)) {\n row += 1;\n }\n else if (isHotkey(keys.goUpCell, event, details)) {\n row -= 1;\n }\n else if (isHotkey(keys.goRightCell, event, details)) {\n col += 1;\n }\n else if (isHotkey(keys.goLeftCell, event, details)) {\n col -= 1;\n }\n else if (isHotkey(keys.goDownCellRetainSelection, event, details)) {\n row += 1;\n freeMove = true;\n }\n else if (isHotkey(keys.goUpCellRetainSelection, event, details)) {\n row -= 1;\n freeMove = true;\n }\n else if (isHotkey(keys.goRightCellRetainSelection, event, details)) {\n col += 1;\n freeMove = true;\n }\n else if (isHotkey(keys.goLeftCellRetainSelection, event, details)) {\n col -= 1;\n freeMove = true;\n }\n else if (isHotkey(keys.goToLastRow, event, details)) {\n row = rows - 1;\n }\n else if (isHotkey(keys.goToFirstRow, event, details)) {\n row = Number.MIN_SAFE_INTEGER;\n }\n else if (isHotkey(keys.goToLastColumn, event, details)) {\n col = Number.MAX_SAFE_INTEGER;\n }\n else if (isHotkey(keys.goToFirstColumn, event, details)) {\n col = Number.MIN_SAFE_INTEGER;\n }\n else if (rangeSelect === \"rect\" || rangeSelect === \"multi-rect\") {\n if (isHotkey(keys.selectGrowDown, event, details)) {\n adjustSelection([0, 1]);\n }\n else if (isHotkey(keys.selectGrowUp, event, details)) {\n adjustSelection([0, -1]);\n }\n else if (isHotkey(keys.selectGrowRight, event, details)) {\n adjustSelection([1, 0]);\n }\n else if (isHotkey(keys.selectGrowLeft, event, details)) {\n adjustSelection([-1, 0]);\n }\n else if (isHotkey(keys.selectToLastRow, event, details)) {\n adjustSelection([0, 2]);\n }\n else if (isHotkey(keys.selectToFirstRow, event, details)) {\n adjustSelection([0, -2]);\n }\n else if (isHotkey(keys.selectToLastColumn, event, details)) {\n adjustSelection([2, 0]);\n }\n else if (isHotkey(keys.selectToFirstColumn, event, details)) {\n adjustSelection([-2, 0]);\n }\n }\n cancelOnlyOnMove = details.didMatch;\n }\n else {\n if (isHotkey(keys.closeOverlay, event, details)) {\n setOverlay(undefined);\n }\n if (isHotkey(keys.acceptOverlayDown, event, details)) {\n setOverlay(undefined);\n row++;\n }\n if (isHotkey(keys.acceptOverlayUp, event, details)) {\n setOverlay(undefined);\n row--;\n }\n if (isHotkey(keys.acceptOverlayLeft, event, details)) {\n setOverlay(undefined);\n col--;\n }\n if (isHotkey(keys.acceptOverlayRight, event, details)) {\n setOverlay(undefined);\n col++;\n }\n }\n // #endregion\n const moved = updateSelectedCell(col, row, false, freeMove);\n const didMatch = details.didMatch;\n if (didMatch && (moved || !cancelOnlyOnMove || trapFocus)) {\n cancel();\n }\n return didMatch;\n }, [\n overlayOpen,\n gridSelection,\n keybindings,\n columnSelect,\n rowSelect,\n rangeSelect,\n rowMarkerOffset,\n rows,\n updateSelectedCell,\n setGridSelection,\n onSelectionCleared,\n columnsIn.length,\n onDelete,\n trapFocus,\n deleteRange,\n setSelectedColumns,\n setSelectedRows,\n showTrailingBlankRow,\n getCustomNewRowTargetColumn,\n appendRow,\n onCellActivated,\n reselect,\n fillDown,\n fillRight,\n adjustSelection,\n ]);\n const onKeyDown = React.useCallback((event) => {\n let cancelled = false;\n if (onKeyDownIn !== undefined) {\n onKeyDownIn({\n ...event,\n cancel: () => {\n cancelled = true;\n },\n });\n }\n if (cancelled)\n return;\n if (handleFixedKeybindings(event))\n return;\n if (gridSelection.current === undefined)\n return;\n const [col, row] = gridSelection.current.cell;\n const vr = visibleRegionRef.current;\n if (editOnType &&\n !event.metaKey &&\n !event.ctrlKey &&\n gridSelection.current !== undefined &&\n event.key.length === 1 &&\n /[ -~]/g.test(event.key) &&\n event.bounds !== undefined &&\n isReadWriteCell(getCellContent([col - rowMarkerOffset, Math.max(0, Math.min(row, rows - 1))]))) {\n if ((!showTrailingBlankRow || row !== rows) &&\n (vr.y > row || row > vr.y + vr.height || vr.x > col || col > vr.x + vr.width)) {\n return;\n }\n reselect(event.bounds, true, event.key);\n event.stopPropagation();\n event.preventDefault();\n }\n }, [\n editOnType,\n onKeyDownIn,\n handleFixedKeybindings,\n gridSelection,\n getCellContent,\n rowMarkerOffset,\n rows,\n showTrailingBlankRow,\n reselect,\n ]);\n const onContextMenu = React.useCallback((args, preventDefault) => {\n const adjustedCol = args.location[0] - rowMarkerOffset;\n if (args.kind === \"header\") {\n onHeaderContextMenu?.(adjustedCol, { ...args, preventDefault });\n }\n if (args.kind === groupHeaderKind) {\n if (adjustedCol < 0) {\n return;\n }\n onGroupHeaderContextMenu?.(adjustedCol, { ...args, preventDefault });\n }\n if (args.kind === \"cell\") {\n const [col, row] = args.location;\n onCellContextMenu?.([adjustedCol, row], {\n ...args,\n preventDefault,\n });\n if (!gridSelectionHasItem(gridSelection, args.location)) {\n updateSelectedCell(col, row, false, false);\n }\n }\n }, [\n gridSelection,\n onCellContextMenu,\n onGroupHeaderContextMenu,\n onHeaderContextMenu,\n rowMarkerOffset,\n updateSelectedCell,\n ]);\n const onPasteInternal = React.useCallback(async (e) => {\n if (!keybindings.paste)\n return;\n function pasteToCell(inner, target, rawValue, formatted) {\n const stringifiedRawValue = typeof rawValue === \"object\" ? rawValue?.join(\"\\n\") ?? \"\" : rawValue?.toString() ?? \"\";\n if (!isInnerOnlyCell(inner) && isReadWriteCell(inner) && inner.readonly !== true) {\n const coerced = coercePasteValue?.(stringifiedRawValue, inner);\n if (coerced !== undefined && isEditableGridCell(coerced)) {\n if (process.env.NODE_ENV !== \"production\" && coerced.kind !== inner.kind) {\n // eslint-disable-next-line no-console\n console.warn(\"Coercion should not change cell kind.\");\n }\n return {\n location: target,\n value: coerced,\n };\n }\n const r = getCellRenderer(inner);\n if (r === undefined)\n return undefined;\n if (r.kind === GridCellKind.Custom) {\n assert(inner.kind === GridCellKind.Custom);\n const newVal = r.onPaste?.(stringifiedRawValue, inner.data);\n if (newVal === undefined)\n return undefined;\n return {\n location: target,\n value: {\n ...inner,\n data: newVal,\n },\n };\n }\n else {\n const newVal = r.onPaste?.(stringifiedRawValue, inner, {\n formatted,\n formattedString: typeof formatted === \"string\" ? formatted : formatted?.join(\"\\n\"),\n rawValue,\n });\n if (newVal === undefined)\n return undefined;\n assert(newVal.kind === inner.kind);\n return {\n location: target,\n value: newVal,\n };\n }\n }\n return undefined;\n }\n const selectedColumns = gridSelection.columns;\n const selectedRows = gridSelection.rows;\n const focused = scrollRef.current?.contains(document.activeElement) === true ||\n canvasRef.current?.contains(document.activeElement) === true;\n let target;\n if (gridSelection.current !== undefined) {\n target = [gridSelection.current.range.x, gridSelection.current.range.y];\n }\n else if (selectedColumns.length === 1) {\n target = [selectedColumns.first() ?? 0, 0];\n }\n else if (selectedRows.length === 1) {\n target = [rowMarkerOffset, selectedRows.first() ?? 0];\n }\n if (focused && target !== undefined) {\n let data;\n let text;\n const textPlain = \"text/plain\";\n const textHtml = \"text/html\";\n if (navigator.clipboard.read !== undefined) {\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 !== undefined) {\n data = decoded;\n break;\n }\n }\n if (item.types.includes(textPlain)) {\n // eslint-disable-next-line unicorn/no-await-expression-member\n text = await (await item.getType(textPlain)).text();\n }\n }\n }\n else if (navigator.clipboard.readText !== undefined) {\n text = await navigator.clipboard.readText();\n }\n else if (e !== undefined && 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 === undefined && e.clipboardData.types.includes(textPlain)) {\n text = e.clipboardData.getData(textPlain);\n }\n }\n else {\n return; // I didn't want to read that paste value anyway\n }\n const [targetCol, targetRow] = target;\n const editList = [];\n do {\n if (onPaste === undefined) {\n const cellData = getMangledCellContent(target);\n const rawValue = text ?? data?.map(r => r.map(cb => cb.rawValue).join(\"\\t\")).join(\"\\t\") ?? \"\";\n const newVal = pasteToCell(cellData, target, rawValue, undefined);\n if (newVal !== undefined) {\n editList.push(newVal);\n }\n break;\n }\n if (data === undefined) {\n if (text === undefined)\n return;\n data = unquote(text);\n }\n if (onPaste === false ||\n (typeof onPaste === \"function\" &&\n onPaste?.([target[0] - rowMarkerOffset, target[1]], data.map(r => r.map(cb => cb.rawValue?.toString() ?? \"\"))) !== true)) {\n return;\n }\n for (const [row, dataRow] of data.entries()) {\n if (row + targetRow >= rows)\n break;\n for (const [col, dataItem] of dataRow.entries()) {\n const index = [col + targetCol, row + targetRow];\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 !== undefined) {\n editList.push(newVal);\n }\n }\n }\n // eslint-disable-next-line no-constant-condition\n } while (false);\n mangledOnCellsEdited(editList);\n gridRef.current?.damage(editList.map(c => ({\n cell: c.location,\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 useEventListener(\"paste\", onPasteInternal, safeWindow, false, true);\n // While this function is async, we deeply prefer not to await if we don't have to. This will lead to unpacking\n // promises in rather awkward ways when possible to avoid awaiting. We have to use fallback copy mechanisms when\n // an await has happened.\n const onCopy = React.useCallback(async (e, ignoreFocus) => {\n if (!keybindings.copy)\n return;\n const focused = ignoreFocus === true ||\n scrollRef.current?.contains(document.activeElement) === true ||\n canvasRef.current?.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 }\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 !== undefined) {\n if (gridSelection.current !== undefined) {\n let thunk = getCellsForSelection(gridSelection.current.range, abortControllerRef.current.signal);\n if (typeof thunk !== \"object\") {\n thunk = await thunk();\n }\n copyToClipboardWithHeaders(thunk, range(gridSelection.current.range.x - rowMarkerOffset, gridSelection.current.range.x + gridSelection.current.range.width - rowMarkerOffset));\n }\n else if (selectedRows !== undefined && selectedRows.length > 0) {\n const toCopy = [...selectedRows];\n const cells = toCopy.map(rowIndex => {\n const thunk = getCellsForSelection({\n x: rowMarkerOffset,\n y: rowIndex,\n width: columnsIn.length,\n height: 1,\n }, abortControllerRef.current.signal);\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 }\n else {\n copyToClipboardWithHeaders(cells, range(columnsIn.length));\n }\n }\n else if (selectedColumns.length > 0) {\n const results = [];\n const cols = [];\n for (const col of selectedColumns) {\n let thunk = getCellsForSelection({\n x: col,\n y: 0,\n width: 1,\n height: rows,\n }, abortControllerRef.current.signal);\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 }\n else {\n // FIXME: this is dumb\n const toCopy = results.reduce((pv, cv) => pv.map((row, index) => [...row, ...cv[index]]));\n copyToClipboardWithHeaders(toCopy, cols);\n }\n }\n }\n }, [columnsIn, getCellsForSelection, gridSelection, keybindings.copy, rowMarkerOffset, rows, copyHeaders]);\n useEventListener(\"copy\", onCopy, safeWindow, false, false);\n const onCut = React.useCallback(async (e) => {\n if (!keybindings.cut)\n return;\n const focused = scrollRef.current?.contains(document.activeElement) === true ||\n canvasRef.current?.contains(document.activeElement) === true;\n if (!focused)\n return;\n await onCopy(e);\n if (gridSelection.current !== undefined) {\n let effectiveSelection = {\n current: {\n cell: gridSelection.current.cell,\n range: gridSelection.current.range,\n rangeStack: [],\n },\n rows: CompactSelection.empty(),\n columns: CompactSelection.empty(),\n };\n const onDeleteResult = onDelete?.(effectiveSelection);\n if (onDeleteResult === false)\n return;\n effectiveSelection = onDeleteResult === true ? effectiveSelection : onDeleteResult;\n if (effectiveSelection.current === undefined)\n return;\n deleteRange(effectiveSelection.current.range);\n }\n }, [deleteRange, gridSelection, keybindings.cut, onCopy, onDelete]);\n useEventListener(\"cut\", onCut, safeWindow, false, false);\n const onSearchResultsChanged = React.useCallback((results, navIndex) => {\n if (onSearchResultsChangedIn !== undefined) {\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 !== undefined && lastSent.current[0] === col && lastSent.current[1] === row) {\n return;\n }\n lastSent.current = [col, row];\n updateSelectedCell(col, row, false, false);\n }, [onSearchResultsChangedIn, rowMarkerOffset, updateSelectedCell]);\n // this effects purpose in life is to scroll the newly selected cell into view when and ONLY when that cell\n // is from an external gridSelection change. Also note we want the unmangled out selection because scrollTo\n // expects unmangled indexes\n const [outCol, outRow] = gridSelectionOuter?.current?.cell ?? [];\n const scrollToRef = React.useRef(scrollTo);\n scrollToRef.current = scrollTo;\n React.useLayoutEffect(() => {\n if (!hasJustScrolled.current &&\n outCol !== undefined &&\n outRow !== undefined &&\n (outCol !== expectedExternalGridSelection.current?.current?.cell[0] ||\n outRow !== expectedExternalGridSelection.current?.current?.cell[1])) {\n scrollToRef.current(outCol, outRow);\n }\n hasJustScrolled.current = false; //only allow skipping a single scroll\n }, [outCol, outRow]);\n const selectionOutOfBounds = gridSelection.current !== undefined &&\n (gridSelection.current.cell[0] >= mangledCols.length || gridSelection.current.cell[1] >= mangledRows);\n React.useLayoutEffect(() => {\n if (selectionOutOfBounds) {\n setGridSelection(emptyGridSelection, false);\n }\n }, [selectionOutOfBounds, setGridSelection]);\n const disabledRows = React.useMemo(() => {\n if (showTrailingBlankRow === true && trailingRowOptions?.tint === true) {\n return CompactSelection.fromSingleSelection(mangledRows - 1);\n }\n return CompactSelection.empty();\n }, [mangledRows, showTrailingBlankRow, trailingRowOptions?.tint]);\n const mangledVerticalBorder = React.useCallback((col) => {\n return typeof verticalBorder === \"boolean\"\n ? verticalBorder\n : verticalBorder?.(col - rowMarkerOffset) ?? true;\n }, [rowMarkerOffset, verticalBorder]);\n const renameGroupNode = React.useMemo(() => {\n if (renameGroup === undefined || canvasRef.current === null)\n return null;\n const { bounds, group } = renameGroup;\n const canvasBounds = canvasRef.current.getBoundingClientRect();\n return (React.createElement(GroupRename, { bounds: bounds, group: group, canvasBounds: canvasBounds, onClose: () => setRenameGroup(undefined), onFinish: newVal => {\n setRenameGroup(undefined);\n onGroupHeaderRenamed?.(group, newVal);\n } }));\n }, [onGroupHeaderRenamed, renameGroup]);\n const mangledFreezeColumns = Math.min(mangledCols.length, freezeColumns + (hasRowMarkers ? 1 : 0));\n React.useImperativeHandle(forwardedRef, () => ({\n appendRow: (col, openOverlay) => appendRow(col + rowMarkerOffset, openOverlay),\n updateCells: damageList => {\n if (rowMarkerOffset !== 0) {\n damageList = damageList.map(x => ({ cell: [x.cell[0] + rowMarkerOffset, x.cell[1]] }));\n }\n return gridRef.current?.damage(damageList);\n },\n getBounds: (col, row) => {\n if (canvasRef?.current === null || scrollRef?.current === null) {\n return undefined;\n }\n if (col === undefined && row === undefined) {\n // Return the bounds of the entire scroll area:\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 gridRef.current?.getBounds((col ?? 0) + rowMarkerOffset, row);\n },\n focus: () => gridRef.current?.focus(),\n emit: async (e) => {\n switch (e) {\n case \"delete\":\n onKeyDown({\n bounds: undefined,\n cancel: () => undefined,\n stopPropagation: () => undefined,\n preventDefault: () => undefined,\n ctrlKey: false,\n key: \"Delete\",\n keyCode: 46,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: undefined,\n location: undefined,\n });\n break;\n case \"fill-right\":\n onKeyDown({\n bounds: undefined,\n cancel: () => undefined,\n stopPropagation: () => undefined,\n preventDefault: () => undefined,\n ctrlKey: true,\n key: \"r\",\n keyCode: 82,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: undefined,\n location: undefined,\n });\n break;\n case \"fill-down\":\n onKeyDown({\n bounds: undefined,\n cancel: () => undefined,\n stopPropagation: () => undefined,\n preventDefault: () => undefined,\n ctrlKey: true,\n key: \"d\",\n keyCode: 68,\n metaKey: false,\n shiftKey: false,\n altKey: false,\n rawEvent: undefined,\n location: undefined,\n });\n break;\n case \"copy\":\n await onCopy(undefined, 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);\n }\n },\n }), [appendRow, normalSizeColumn, onCopy, onKeyDown, onPasteInternal, rowMarkerOffset, scrollTo]);\n const [selCol, selRow] = currentCell ?? [];\n const onCellFocused = React.useCallback((cell) => {\n const [col, row] = cell;\n if (row === -1) {\n if (columnSelect !== \"none\") {\n setSelectedColumns(CompactSelection.fromSingleSelection(col), undefined, false);\n focus();\n }\n return;\n }\n if (selCol === col && selRow === row)\n return;\n setCurrent({\n cell,\n range: { x: col, y: row, width: 1, height: 1 },\n }, true, false, \"keyboard-nav\");\n scrollTo(col, row);\n }, [columnSelect, focus, scrollTo, selCol, selRow, setCurrent, setSelectedColumns]);\n const [isFocused, setIsFocused] = React.useState(false);\n const setIsFocusedDebounced = React.useRef(debounce((val) => {\n setIsFocused(val);\n }, 5));\n const onCanvasFocused = React.useCallback(() => {\n setIsFocusedDebounced.current(true);\n // check for mouse state, don't do anything if the user is clicked to focus.\n if (gridSelection.current === undefined &&\n gridSelection.columns.length === 0 &&\n gridSelection.rows.length === 0 &&\n mouseState === undefined) {\n setCurrent({\n cell: [rowMarkerOffset, cellYOffset],\n range: {\n x: rowMarkerOffset,\n y: cellYOffset,\n width: 1,\n height: 1,\n },\n }, true, false, \"keyboard-select\");\n }\n }, [cellYOffset, gridSelection, mouseState, rowMarkerOffset, setCurrent]);\n const onFocusOut = React.useCallback(() => {\n setIsFocusedDebounced.current(false);\n }, []);\n const [idealWidth, idealHeight] = React.useMemo(() => {\n let h;\n const scrollbarWidth = experimental?.scrollbarWidthOverride ?? getScrollBarWidth();\n const rowsCountWithTrailingRow = rows + (showTrailingBlankRow ? 1 : 0);\n if (typeof rowHeight === \"number\") {\n h = totalHeaderHeight + rowsCountWithTrailingRow * rowHeight;\n }\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 // We need to set a reasonable cap here as some browsers will just ignore huge values\n // rather than treat them as huge values.\n return [`${Math.min(100000, w)}px`, `${Math.min(100000, h)}px`];\n }, [mangledCols, experimental?.scrollbarWidthOverride, rowHeight, rows, showTrailingBlankRow, totalHeaderHeight]);\n const cssStyle = React.useMemo(() => {\n return makeCSSStyle(mergedTheme);\n }, [mergedTheme]);\n return (React.createElement(ThemeContext.Provider, { value: mergedTheme },\n React.createElement(DataEditorContainer, { style: cssStyle, className: className, inWidth: width ?? idealWidth, inHeight: height ?? idealHeight },\n React.createElement(DataGridSearch, { fillHandle: fillHandle, drawFocusRing: drawFocusRing, experimental: experimental, fixedShadowX: fixedShadowX, fixedShadowY: fixedShadowY, getRowThemeOverride: getRowThemeOverride, headerIcons: headerIcons, imageWindowLoader: imageWindowLoader, initialSize: initialSize, isDraggable: isDraggable, onDragLeave: onDragLeave, onRowMoved: onRowMoved, overscrollX: overscrollX, overscrollY: overscrollY, preventDiagonalScrolling: preventDiagonalScrolling, rightElement: rightElement, rightElementProps: rightElementProps, smoothScrollX: smoothScrollX, smoothScrollY: smoothScrollY, className: className, enableGroups: enableGroups, onCanvasFocused: onCanvasFocused, onCanvasBlur: onFocusOut, canvasRef: canvasRef, onContextMenu: onContextMenu, theme: mergedTheme, cellXOffset: cellXOffset, cellYOffset: cellYOffset, accessibilityHeight: visibleRegion.height, onDragEnd: onDragEnd, columns: mangledCols, nonGrowWidth: nonGrowWidth, drawHeader: drawHeader, onColumnProposeMove: onColumnProposeMove, drawCell: drawCell, disabledRows: disabledRows, freezeColumns: mangledFreezeColumns, lockColumns: rowMarkerOffset, firstColAccessible: rowMarkerOffset === 0, getCellContent: getMangledCellContent, minColumnWidth: minColumnWidth, maxColumnWidth: maxColumnWidth, searchInputRef: searchInputRef, showSearch: showSearch, onSearchClose: onSearchClose, highlightRegions: highlightRegions, getCellsForSelection: getCellsForSelection, getGroupDetails: mangledGetGroupDetails, headerHeight: headerHeight, isFocused: isFocused, groupHeaderHeight: enableGroups ? groupHeaderHeight : 0, freezeTrailingRows: freezeTrailingRows + (showTrailingBlankRow && trailingRowOptions?.sticky === true ? 1 : 0), hasAppendRow: showTrailingBlankRow, onColumnResize: onColumnResize, onColumnResizeEnd: onColumnResizeEnd, onColumnResizeStart: onColumnResizeStart, onCellFocused: onCellFocused, onColumnMoved: onColumnMovedImpl, onDragStart: onDragStartImpl, onHeaderMenuClick: onHeaderMenuClickInner, onItemHovered: onItemHoveredImpl, isFilling: mouseState?.fillHandle === true, onMouseMove: onMouseMoveImpl, onKeyDown: onKeyDown, onKeyUp: onKeyUpIn, onMouseDown: onMouseDown, onMouseUp: onMouseUp, onDragOverCell: onDragOverCell, onDrop: onDrop, onSearchResultsChanged: onSearchResultsChanged, onVisibleRegionChanged: onVisibleRegionChangedImpl, clientSize: clientSize, rowHeight: rowHeight, searchResults: searchResults, searchValue: searchValue, onSearchValueChange: onSearchValueChange, rows: mangledRows, scrollRef: scrollRef, selection: gridSelection, translateX: visibleRegion.tx, translateY: visibleRegion.ty, verticalBorder: mangledVerticalBorder, gridRef: gridRef, getCellRenderer: getCellRenderer }),\n renameGroupNode,\n overlay !== undefined && (React.createElement(React.Suspense, { fallback: null },\n React.createElement(DataGridOverlayEditor, { ...overlay, validateCell: validateCell, bloom: editorBloom, id: overlayID, getCellRenderer: getCellRenderer, className: experimental?.isSubGrid === true ? \"click-outside-ignore\" : undefined, provideEditor: provideEditor, imageEditorOverride: imageEditorOverride, onFinishEditing: onFinishEditing, markdownDivCreateNode: markdownDivCreateNode, isOutsideClick: isOutsideClick }))))));\n};\n/**\n * The primary component of Glide Data Grid.\n * @category DataEditor\n * @param {DataEditorProps} props\n */\nexport const DataEditor = React.forwardRef(DataEditorImpl);\n//# sourceMappingURL=data-editor.js.map","import { getSquareWidth, getSquareXPosFromAlign, getSquareBB, pointIsWithinBB } from \"../common/utils.js\";\nimport { toggleBoolean } from \"../data-editor/data-editor-fns.js\";\nimport { GridCellKind, booleanCellIsEditable, BooleanEmpty, BooleanIndeterminate, } from \"../internal/data-grid/data-grid-types.js\";\nimport { drawCheckbox } from \"../internal/data-grid/render/draw-checkbox.js\";\nconst defaultCellMaxSize = 20;\nexport const booleanCellRenderer = {\n getAccessibilityString: c => c.data?.toString() ?? \"false\",\n kind: GridCellKind.Boolean,\n needsHover: true,\n useLabel: false,\n needsHoverPosition: true,\n measure: () => 50,\n draw: a => drawBoolean(a, a.cell.data, booleanCellIsEditable(a.cell), a.cell.maxSize ?? defaultCellMaxSize),\n onDelete: c => ({\n ...c,\n data: false,\n }),\n onClick: e => {\n const { cell, posX: pointerX, posY: pointerY, bounds, theme } = e;\n const { width, height, x: cellX, y: cellY } = bounds;\n const maxWidth = cell.maxSize ?? defaultCellMaxSize;\n const cellCenterY = Math.floor(bounds.y + height / 2);\n const checkBoxWidth = getSquareWidth(maxWidth, height, theme.cellVerticalPadding);\n const posX = getSquareXPosFromAlign(cell.contentAlign ?? \"center\", cellX, width, theme.cellHorizontalPadding, checkBoxWidth);\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 undefined;\n },\n onPaste: (toPaste, cell) => {\n let newVal = BooleanEmpty;\n if (toPaste.toLowerCase() === \"true\") {\n newVal = true;\n }\n else if (toPaste.toLowerCase() === \"false\") {\n newVal = false;\n }\n else if (toPaste.toLowerCase() === \"indeterminate\") {\n newVal = BooleanIndeterminate;\n }\n return newVal === cell.data\n ? undefined\n : {\n ...cell,\n data: newVal,\n };\n },\n};\nfunction drawBoolean(args, data, canEdit, maxSize) {\n if (!canEdit && data === BooleanEmpty) {\n return;\n }\n const { ctx, hoverAmount, theme, rect, highlighted, hoverX, hoverY, cell: { contentAlign }, } = 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}\n//# sourceMappingURL=boolean-cell.js.map","import { styled } from \"@linaria/react\";\nexport const BubblesOverlayEditorStyle = /*#__PURE__*/styled('div')({\n name: \"BubblesOverlayEditorStyle\",\n class: \"gdg-b1ygi5by\",\n propsAsIs: false\n});\n\n","import * as React from \"react\";\nimport { BubblesOverlayEditorStyle } from \"./bubbles-overlay-editor-style.js\";\nconst BubblesOverlayEditor = p => {\n const { bubbles } = p;\n return (React.createElement(BubblesOverlayEditorStyle, null,\n bubbles.map((b, i) => (React.createElement(\"div\", { key: i, className: \"boe-bubble\" }, b))),\n React.createElement(\"textarea\", { className: \"gdg-input\", autoFocus: true })));\n};\nexport default BubblesOverlayEditor;\n//# sourceMappingURL=bubbles-overlay-editor.js.map","/* eslint-disable react/display-name */\nimport * as React from \"react\";\nimport BubblesOverlayEditor from \"../internal/data-grid-overlay-editor/private/bubbles-overlay-editor.js\";\nimport { getMiddleCenterBias, measureTextCached, roundedRect } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { GridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nimport { makeAccessibilityStringForArray } from \"../common/utils.js\";\nexport const 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 React.createElement(BubblesOverlayEditor, { bubbles: value.data });\n },\n onPaste: () => undefined,\n};\nconst 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.baseFontFull).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(ctx, rectInfo.x, y + (h - bubbleHeight) / 2, rectInfo.width + bubblePad * 2, bubbleHeight, theme.roundingRadius ?? bubbleHeight / 2);\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}\n//# sourceMappingURL=bubble-cell.js.map","import * as React from \"react\";\nimport { styled } from \"@linaria/react\";\nconst DrilldownOverlayEditorStyle = /*#__PURE__*/styled('div')({\n name: \"DrilldownOverlayEditorStyle\",\n class: \"gdg-d4zsq0x\",\n propsAsIs: false\n});\nconst DrilldownOverlayEditor = p => {\n const {\n drilldowns\n } = p;\n return React.createElement(DrilldownOverlayEditorStyle, null, drilldowns.map((d, i) => React.createElement(\"div\", {\n key: i,\n className: \"doe-bubble\"\n }, d.img !== undefined && React.createElement(\"img\", {\n src: d.img\n }), React.createElement(\"div\", null, d.text))));\n};\nexport default DrilldownOverlayEditor;\n\n","/* eslint-disable react/display-name */\nimport * as React from \"react\";\nimport DrilldownOverlayEditor from \"../internal/data-grid-overlay-editor/private/drilldown-overlay-editor.js\";\nimport { getEmHeight, getMiddleCenterBias, measureTextCached, roundedRect, } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { GridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nimport { makeAccessibilityStringForArray } from \"../common/utils.js\";\nexport const 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((acc, data) => ctx.measureText(data.text).width + acc + 20 + (data.img !== undefined ? 18 : 0), 0) +\n 2 * t.cellHorizontalPadding -\n 4,\n draw: a => drawDrilldownCell(a, a.cell.data),\n provideEditor: () => p => {\n const { value } = p;\n return React.createElement(DrilldownOverlayEditor, { drilldowns: value.data });\n },\n onPaste: () => undefined,\n};\nconst itemMargin = 4;\nconst drilldownCache = {};\nfunction getAndCacheDrilldownBorder(bgCell, border, height, rounding) {\n const dpr = Math.ceil(window.devicePixelRatio);\n const shadowBlur = 5;\n const targetHeight = height - shadowBlur * 2;\n const middleWidth = 4;\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] !== undefined) {\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\"); // alpha needed\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 ctx.beginPath();\n roundedRect(ctx, shadowBlur, shadowBlur, targetWidth, targetHeight, rounding);\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, rounding);\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.baseFontFull;\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 rounding = theme.roundingRadius ?? 6;\n const tileMap = getAndCacheDrilldownBorder(theme.bgCell, theme.drilldownBorder, h, rounding);\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 !== undefined) {\n const img = imageLoader.loadOrGetImage(el.img, col, row);\n if (img !== undefined) {\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(el, sideWidth, 0, middleWidth, height, rx + (outerSideWidth - outerPadding), y, outerMiddleWidth, h);\n ctx.drawImage(el, width - sideWidth, 0, sideWidth, height, rx + rw - (outerSideWidth - outerPadding), y, outerSideWidth, h);\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 !== undefined) {\n const img = imageLoader.loadOrGetImage(d.img, col, row);\n if (img !== undefined) {\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 // landscape\n srcX += (srcWidth - srcHeight) / 2;\n srcWidth = srcHeight;\n }\n else if (srcHeight > srcWidth) {\n //portrait\n srcY += (srcHeight - srcWidth) / 2;\n srcHeight = srcWidth;\n }\n ctx.beginPath();\n roundedRect(ctx, drawX, y + h / 2 - imgSize / 2, imgSize, imgSize, theme.roundingRadius ?? 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}\n//# sourceMappingURL=drilldown-cell.js.map","import { styled } from \"@linaria/react\";\nexport const ImageOverlayEditorStyle = /*#__PURE__*/styled('div')({\n name: \"ImageOverlayEditorStyle\",\n class: \"gdg-i2iowwq\",\n propsAsIs: false\n});\n\n","import * as React from \"react\";\nimport { ImageOverlayEditorStyle } from \"./image-overlay-editor-style.js\";\nimport { Carousel } from \"react-responsive-carousel\";\nimport { EditPencil } from \"../../../common/utils.js\";\n/** @category Renderers */\nexport const 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 (React.createElement(ImageOverlayEditorStyle, { \"data-testid\": \"GDG-default-image-overlay-editor\" },\n React.createElement(Carousel, { showArrows: allowMove, showThumbs: false, swipeable: allowMove, emulateTouch: allowMove, infiniteLoop: allowMove }, filtered.map(url => {\n const innerContent = renderImage?.(url) ?? React.createElement(\"img\", { draggable: false, src: url });\n return (React.createElement(\"div\", { className: \"gdg-centering-container\", key: url }, innerContent));\n })),\n canWrite && onEditClick && (React.createElement(\"button\", { className: \"gdg-edit-icon\", onClick: onEditClick },\n React.createElement(EditPencil, null)))));\n};\n//# sourceMappingURL=image-overlay-editor.js.map","/* eslint-disable react/display-name */\nimport * as React from \"react\";\nimport { ImageOverlayEditor } from \"../internal/data-grid-overlay-editor/private/image-overlay-editor.js\";\nimport { roundedRect } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { GridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nexport const imageCellRenderer = {\n getAccessibilityString: c => c.data.join(\", \"),\n kind: GridCellKind.Image,\n needsHover: false,\n useLabel: false,\n needsHoverPosition: false,\n draw: a => drawImage(a, a.cell.displayData ?? a.cell.data, a.cell.rounding ?? a.theme.roundingRadius ?? 4, a.cell.contentAlign),\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 ?? ImageOverlayEditor;\n return (React.createElement(ImageEditor, { urls: value.data, canWrite: value.readonly !== false, onCancel: onFinishedEditing, onChange: newImage => {\n onFinishedEditing({\n ...value,\n data: [newImage],\n });\n } }));\n },\n onPaste: (toPaste, cell) => {\n toPaste = toPaste.trim();\n const fragments = toPaste.split(\",\");\n const uris = fragments\n .map(f => {\n try {\n new URL(f);\n return f;\n }\n catch {\n return undefined;\n }\n })\n .filter(x => x !== undefined);\n if (uris.length === cell.data.length && uris.every((u, i) => u === cell.data[i]))\n return undefined;\n return {\n ...cell,\n data: uris,\n };\n },\n};\nconst itemMargin = 4;\nexport function drawImage(args, data, rounding, 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 // eslint-disable-next-line unicorn/no-for-loop\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 !== undefined) {\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 === undefined)\n continue; //array is sparse\n const imgWidth = img.width * (imgHeight / img.height);\n if (rounding > 0) {\n ctx.beginPath();\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}\n//# sourceMappingURL=image-cell.js.map","import { withAlpha } from \"../internal/data-grid/color-parser.js\";\nimport { roundedRect } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { GridCellKind } from \"../internal/data-grid/data-grid-types.js\";\n// returns a \"random\" number between -1 and 1\nfunction getRandomNumber(x, y) {\n let seed = x * 49632 + y * 325176;\n // Inline Xorshift algorithm\n seed ^= seed << 13;\n seed ^= seed >> 17;\n seed ^= seed << 5;\n // eslint-disable-next-line unicorn/number-literal-case\n return (seed / 4294967295) * 2;\n}\nexport const loadingCellRenderer = {\n getAccessibilityString: () => \"\",\n kind: GridCellKind.Loading,\n needsHover: false,\n useLabel: false,\n needsHoverPosition: false,\n measure: () => 120,\n draw: a => {\n const { cell, col, row, ctx, rect, theme } = a;\n if (cell.skeletonWidth === undefined || cell.skeletonWidth === 0) {\n return;\n }\n let width = cell.skeletonWidth;\n if (cell.skeletonWidthVariability !== undefined && cell.skeletonWidthVariability > 0) {\n width += Math.round(getRandomNumber(col, row) * cell.skeletonWidthVariability);\n }\n const hpad = theme.cellHorizontalPadding;\n const rectHeight = cell.skeletonHeight ?? Math.min(18, rect.height - 2 * theme.cellVerticalPadding);\n roundedRect(ctx, rect.x + hpad, rect.y + (rect.height - rectHeight) / 2, width, rectHeight, theme.roundingRadius ?? 3);\n ctx.fillStyle = withAlpha(theme.textDark, 0.1);\n ctx.fill();\n },\n onPaste: () => undefined,\n};\n//# sourceMappingURL=loading-cell.js.map","import { styled } from \"@linaria/react\";\nexport const MarkdownContainer = /*#__PURE__*/styled('div')({\n name: \"MarkdownContainer\",\n class: \"gdg-mnuv029\",\n propsAsIs: false\n});\n\n","import React from \"react\";\nimport { marked } from \"marked\";\nimport { MarkdownContainer } from \"./private/markdown-container.js\";\n/** @category Renderers */\nexport default class MarkdownDiv extends React.PureComponent {\n targetElement = null;\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?.(innerHTML);\n if (newChild === undefined) {\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 containerRefHook = (element) => {\n this.targetElement = element;\n this.renderMarkdownIntoDiv();\n };\n render() {\n // Doing this in the ref hook works great when we first render, but never again.\n // This only works great after the first render, but not in the first render.\n // Putting the two together makes the full solution.\n this.renderMarkdownIntoDiv();\n return React.createElement(MarkdownContainer, { ref: this.containerRefHook });\n }\n}\n//# sourceMappingURL=markdown-div.js.map","import { styled } from \"@linaria/react\";\nexport const InputBox = /*#__PURE__*/styled('textarea')({\n name: \"InputBox\",\n class: \"gdg-izpuzkl\",\n propsAsIs: false\n});\nexport const ShadowBox = /*#__PURE__*/styled('div')({\n name: \"ShadowBox\",\n class: \"gdg-s69h75o\",\n propsAsIs: false\n});\nexport const GrowingEntryStyle = /*#__PURE__*/styled('div')({\n name: \"GrowingEntryStyle\",\n class: \"gdg-g1y0xocz\",\n propsAsIs: false\n});\n\n","import * as React from \"react\";\nimport { GrowingEntryStyle, ShadowBox, InputBox } from \"./growing-entry-style.js\";\nimport { assert } from \"../../common/support.js\";\nlet globalInputID = 0;\n/** @category Renderers */\nexport const GrowingEntry = (props) => {\n const { placeholder, value, onKeyDown, highlight, altNewline, validatedSelection, ...rest } = props;\n const { onChange, className } = rest;\n const inputRef = React.useRef(null);\n const useText = value ?? \"\";\n assert(onChange !== undefined, \"GrowingEntry must be a controlled input area\");\n // 10 million id's aught to be enough for anybody\n const [inputID] = React.useState(() => \"input-box-\" + (globalInputID = (globalInputID + 1) % 10000000));\n React.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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useLayoutEffect(() => {\n if (validatedSelection !== undefined) {\n const range = typeof validatedSelection === \"number\" ? [validatedSelection, null] : validatedSelection;\n inputRef.current?.setSelectionRange(range[0], range[1]);\n }\n }, [validatedSelection]);\n const onKeyDownInner = React.useCallback(e => {\n if (e.key === \"Enter\" && e.shiftKey && altNewline === true) {\n return;\n }\n onKeyDown?.(e);\n }, [altNewline, onKeyDown]);\n return (React.createElement(GrowingEntryStyle, { className: \"gdg-growing-entry\" },\n React.createElement(ShadowBox, { className: className }, useText + \"\\n\"),\n React.createElement(InputBox, { ...rest, className: (className ?? \"\") + \" gdg-input\", id: inputID, ref: inputRef, onKeyDown: onKeyDownInner, value: useText, placeholder: placeholder, dir: \"auto\" })));\n};\n//# sourceMappingURL=growing-entry.js.map","import { styled } from \"@linaria/react\";\nconst _exp = /*#__PURE__*/() => p => p.targetWidth;\nexport const MarkdownOverlayEditorStyle = /*#__PURE__*/styled('div')({\n name: \"MarkdownOverlayEditorStyle\",\n class: \"gdg-m1pnx84e\",\n propsAsIs: false,\n vars: {\n \"m1pnx84e-0\": [_exp(), \"px\"]\n }\n});\n\n","import * as React from \"react\";\nimport MarkdownDiv from \"../../markdown-div/markdown-div.js\";\nimport { GrowingEntry } from \"../../growing-entry/growing-entry.js\";\nimport { MarkdownOverlayEditorStyle } from \"./markdown-overlay-editor-style.js\";\nimport { EditPencil, Checkmark } from \"../../../common/utils.js\";\nexport const 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] = React.useState(markdown === \"\" || forceEditMode);\n const onEditClick = React.useCallback(() => {\n setEditMode(e => !e);\n }, []);\n const addLeftPad = markdown ? \"gdg-ml-6\" : \"\";\n if (editMode) {\n return (React.createElement(MarkdownOverlayEditorStyle, { targetWidth: targetRect.width - 20 },\n React.createElement(GrowingEntry, { autoFocus: true, highlight: false, validatedSelection: validatedSelection, value: markdown, onKeyDown: e => {\n if (e.key === \"Enter\")\n e.stopPropagation();\n }, onChange: onChange }),\n React.createElement(\"div\", { className: `gdg-edit-icon gdg-checkmark-hover ${addLeftPad}`, onClick: () => onFinish(value) },\n React.createElement(Checkmark, null))));\n }\n return (React.createElement(MarkdownOverlayEditorStyle, { targetWidth: targetRect.width },\n React.createElement(MarkdownDiv, { contents: markdown, createNode: createNode }),\n !readonly && (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: \"spacer\" }),\n React.createElement(\"div\", { className: `gdg-edit-icon gdg-edit-hover ${addLeftPad}`, onClick: onEditClick },\n React.createElement(EditPencil, null)))),\n React.createElement(\"textarea\", { className: \"gdg-md-edit-textarea gdg-input\", autoFocus: true })));\n};\n//# sourceMappingURL=markdown-overlay-editor.js.map","/* eslint-disable react/display-name */\nimport * as React from \"react\";\nimport { MarkdownOverlayEditor } from \"../internal/data-grid-overlay-editor/private/markdown-overlay-editor.js\";\nimport { drawTextCell, prepTextCell } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { GridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nexport const markdownCellRenderer = {\n getAccessibilityString: c => c.data?.toString() ?? \"\",\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 (React.createElement(MarkdownOverlayEditor, { onFinish: onFinishedEditing, targetRect: target, value: value, validatedSelection: validatedSelection, onChange: e => onChange({\n ...value,\n data: e.target.value,\n }), forceEditMode: forceEditMode, createNode: markdownDivCreateNode }));\n },\n onPaste: (toPaste, cell) => (toPaste === cell.data ? undefined : { ...cell, data: toPaste }),\n};\n//# sourceMappingURL=markdown-cell.js.map","import { getMiddleCenterBias } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { InnerGridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nimport { drawCheckbox } from \"../internal/data-grid/render/draw-checkbox.js\";\nexport const 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, a.cell.checkboxStyle),\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 undefined;\n },\n onPaste: () => undefined,\n};\nfunction prepMarkerRowCell(args, lastPrep) {\n const { ctx, theme } = args;\n const newFont = theme.markerFontFull;\n const result = lastPrep ?? {};\n if (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, style) {\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(ctx, theme, checked, drawHandle ? x + offsetAmount : x, y, drawHandle ? width - offsetAmount : width, height, true, undefined, undefined, 18, \"center\", style);\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.markerFontFull;\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}\n//# sourceMappingURL=marker-cell.js.map","import { getMiddleCenterBias } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { InnerGridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nexport const 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: () => undefined,\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 + 1, y + 1, w, h - 2);\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 !== undefined) {\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 }\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}\n//# sourceMappingURL=new-row-cell.js.map","/* eslint-disable react/display-name */\nimport * as React from \"react\";\nimport { drawTextCell, prepTextCell } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { GridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nconst NumberOverlayEditor = React.lazy(async () => await import(\"../internal/data-grid-overlay-editor/private/number-overlay-editor.js\"));\nexport const numberCellRenderer = {\n getAccessibilityString: c => c.data?.toString() ?? \"\",\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, theme) => ctx.measureText(cell.displayData).width + theme.cellHorizontalPadding * 2,\n onDelete: c => ({\n ...c,\n data: undefined,\n }),\n provideEditor: () => p => {\n const { isHighlighted, onChange, value, validatedSelection } = p;\n return (React.createElement(React.Suspense, { fallback: null },\n React.createElement(NumberOverlayEditor, { highlight: isHighlighted, disabled: value.readonly === true, value: value.data, fixedDecimals: value.fixedDecimals, allowNegative: value.allowNegative, thousandSeparator: value.thousandSeparator, decimalSeparator: value.decimalSeparator, validatedSelection: validatedSelection, onChange: x => onChange({\n ...value,\n data: Number.isNaN(x.floatValue ?? 0) ? 0 : x.floatValue,\n }) })));\n },\n onPaste: (toPaste, cell, details) => {\n const newNumber = typeof details.rawValue === \"number\"\n ? details.rawValue\n : Number.parseFloat(typeof details.rawValue === \"string\" ? details.rawValue : toPaste);\n if (Number.isNaN(newNumber) || cell.data === newNumber)\n return undefined;\n return { ...cell, data: newNumber, displayData: details.formattedString ?? cell.displayData };\n },\n};\n//# sourceMappingURL=number-cell.js.map","import { degreesToRadians } from \"../common/utils.js\";\nimport { GridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nexport const protectedCellRenderer = {\n getAccessibilityString: () => \"\",\n measure: () => 108,\n kind: GridCellKind.Protected,\n needsHover: false,\n needsHoverPosition: false,\n draw: drawProtectedCell,\n onPaste: () => undefined,\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}\n//# sourceMappingURL=protected-cell.js.map","import React from \"react\";\nimport { GrowingEntry } from \"../internal/growing-entry/growing-entry.js\";\nimport { drawTextCell, prepTextCell } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { GridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nexport const rowIDCellRenderer = {\n getAccessibilityString: c => c.data?.toString() ?? \"\",\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, theme) => ctx.measureText(cell.data).width + theme.cellHorizontalPadding * 2,\n // eslint-disable-next-line react/display-name\n provideEditor: () => p => {\n const { isHighlighted, onChange, value, validatedSelection } = p;\n return (React.createElement(GrowingEntry, { highlight: isHighlighted, autoFocus: value.readonly !== true, disabled: value.readonly !== false, value: value.data, validatedSelection: validatedSelection, onChange: e => onChange({\n ...value,\n data: e.target.value,\n }) }));\n },\n onPaste: () => undefined,\n};\n//# sourceMappingURL=row-id-cell.js.map","/* eslint-disable react/display-name */\nimport * as React from \"react\";\nimport { GrowingEntry } from \"../internal/growing-entry/growing-entry.js\";\nimport { drawTextCell, measureTextCached, prepTextCell, roundedRect, } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { GridCellKind } from \"../internal/data-grid/data-grid-types.js\";\nimport { withAlpha } from \"../internal/data-grid/color-parser.js\";\nexport const textCellRenderer = {\n getAccessibilityString: c => c.data?.toString() ?? \"\",\n kind: GridCellKind.Text,\n needsHover: textCell => textCell.hoverEffect === true,\n needsHoverPosition: false,\n drawPrep: prepTextCell,\n useLabel: true,\n draw: a => {\n const { cell, hoverAmount, hyperWrapping, ctx, rect, theme, overrideCursor } = a;\n const { displayData, contentAlign, hoverEffect, allowWrapping } = cell;\n if (hoverEffect === true && hoverAmount > 0) {\n ctx.textBaseline = \"alphabetic\";\n const padX = theme.cellHorizontalPadding;\n const padY = theme.cellVerticalPadding;\n const m = measureTextCached(displayData, ctx, theme.baseFontFull, \"alphabetic\");\n const maxH = rect.height - padY;\n const h = Math.min(maxH, m.actualBoundingBoxAscent * 2.5);\n ctx.beginPath();\n roundedRect(ctx, rect.x + padX / 2, rect.y + (rect.height - h) / 2 + 1, m.width + padX * 3, h - 1, theme.roundingRadius ?? 4);\n ctx.globalAlpha = hoverAmount;\n ctx.fillStyle = withAlpha(theme.textDark, 0.1);\n ctx.fill();\n // restore\n ctx.globalAlpha = 1;\n ctx.fillStyle = theme.textDark;\n ctx.textBaseline = \"middle\";\n overrideCursor?.(\"text\");\n }\n drawTextCell(a, displayData, contentAlign, allowWrapping, hyperWrapping);\n },\n measure: (ctx, cell, t) => {\n const lines = cell.displayData.split(\"\\n\", cell.allowWrapping === true ? undefined : 1);\n let maxLineWidth = 0;\n for (const line of lines) {\n maxLineWidth = Math.max(maxLineWidth, ctx.measureText(line).width);\n }\n return maxLineWidth + 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 (React.createElement(GrowingEntry, { style: cell.allowWrapping === true ? { padding: \"3px 8.5px\" } : undefined, highlight: isHighlighted, autoFocus: value.readonly !== true, disabled: value.readonly === true, altNewline: true, value: value.data, validatedSelection: validatedSelection, onChange: e => onChange({\n ...value,\n data: e.target.value,\n }) }));\n },\n }),\n onPaste: (toPaste, cell, details) => toPaste === cell.data\n ? undefined\n : { ...cell, data: toPaste, displayData: details.formattedString ?? cell.displayData },\n};\n//# sourceMappingURL=text-cell.js.map","import { styled } from \"@linaria/react\";\nexport const UriOverlayEditorStyle = /*#__PURE__*/styled('div')({\n name: \"UriOverlayEditorStyle\",\n class: \"gdg-u1rrojo\",\n propsAsIs: false\n});\n\n","import { EditPencil } from \"../../../common/utils.js\";\nimport * as React from \"react\";\nimport { GrowingEntry } from \"../../growing-entry/growing-entry.js\";\nimport { UriOverlayEditorStyle } from \"./uri-overlay-editor-style.js\";\nconst UriOverlayEditor = p => {\n const { uri, onChange, forceEditMode, readonly, validatedSelection, preview } = p;\n const [editMode, setEditMode] = React.useState(!readonly && (uri === \"\" || forceEditMode));\n const onEditClick = React.useCallback(() => {\n setEditMode(true);\n }, []);\n if (editMode) {\n return (React.createElement(GrowingEntry, { validatedSelection: validatedSelection, highlight: true, autoFocus: true, value: uri, onChange: onChange }));\n }\n return (React.createElement(UriOverlayEditorStyle, null,\n React.createElement(\"a\", { className: \"gdg-link-area\", href: uri, target: \"_blank\", rel: \"noopener noreferrer\" }, preview),\n !readonly && (React.createElement(\"div\", { className: \"gdg-edit-icon\", onClick: onEditClick },\n React.createElement(EditPencil, null))),\n React.createElement(\"textarea\", { className: \"gdg-input\", autoFocus: true })));\n};\nexport default UriOverlayEditor;\n//# sourceMappingURL=uri-overlay-editor.js.map","/* eslint-disable react/display-name */\nimport * as React from \"react\";\nimport UriOverlayEditor from \"../internal/data-grid-overlay-editor/private/uri-overlay-editor.js\";\nimport { drawTextCell, getMeasuredTextCache, getMiddleCenterBias, measureTextCached, prepTextCell, } from \"../internal/data-grid/render/data-grid-lib.js\";\nimport { GridCellKind, } from \"../internal/data-grid/data-grid-types.js\";\nimport { pointInRect } from \"../common/math.js\";\nfunction getTextRect(metrics, rect, theme, contentAlign) {\n let x = theme.cellHorizontalPadding;\n const y = rect.height / 2 - metrics.actualBoundingBoxAscent / 2;\n const width = metrics.width;\n const height = metrics.actualBoundingBoxAscent;\n if (contentAlign === \"right\") {\n x = rect.width - width - theme.cellHorizontalPadding;\n }\n else if (contentAlign === \"center\") {\n x = rect.width / 2 - width / 2;\n }\n return { x, y, width, height };\n}\nexport const uriCellRenderer = {\n getAccessibilityString: c => c.data?.toString() ?? \"\",\n kind: GridCellKind.Uri,\n needsHover: uriCell => uriCell.hoverEffect === true,\n needsHoverPosition: true,\n useLabel: true,\n drawPrep: prepTextCell,\n draw: a => {\n const { cell, theme, overrideCursor, hoverX, hoverY, rect, ctx } = a;\n const txt = cell.displayData ?? cell.data;\n const isLinky = cell.hoverEffect === true;\n if (overrideCursor !== undefined && isLinky && hoverX !== undefined && hoverY !== undefined) {\n const m = measureTextCached(txt, ctx, theme.baseFontFull);\n const textRect = getTextRect(m, rect, theme, cell.contentAlign);\n const { x, y, width: w, height: h } = textRect;\n // check if hoverX and hoverY inside the box\n if (hoverX >= x - 4 && hoverX <= x - 4 + w + 8 && hoverY >= y - 4 && hoverY <= y - 4 + h + 8) {\n const middleCenterBias = getMiddleCenterBias(ctx, theme.baseFontFull);\n overrideCursor(\"pointer\");\n const underlineOffset = 5;\n const drawY = y - middleCenterBias;\n ctx.beginPath();\n ctx.moveTo(rect.x + x, Math.floor(rect.y + drawY + h + underlineOffset) + 0.5);\n ctx.lineTo(rect.x + x + w, Math.floor(rect.y + drawY + h + underlineOffset) + 0.5);\n ctx.strokeStyle = theme.linkColor;\n ctx.stroke();\n ctx.save();\n ctx.fillStyle = a.cellFillColor;\n drawTextCell({ ...a, rect: { ...rect, x: rect.x - 1 } }, txt, cell.contentAlign);\n drawTextCell({ ...a, rect: { ...rect, x: rect.x - 2 } }, txt, cell.contentAlign);\n drawTextCell({ ...a, rect: { ...rect, x: rect.x + 1 } }, txt, cell.contentAlign);\n drawTextCell({ ...a, rect: { ...rect, x: rect.x + 2 } }, txt, cell.contentAlign);\n ctx.restore();\n }\n }\n ctx.fillStyle = isLinky ? theme.linkColor : theme.textDark;\n drawTextCell(a, txt, cell.contentAlign);\n },\n onClick: a => {\n const { cell, bounds, posX, posY, theme } = a;\n const txt = cell.displayData ?? cell.data;\n if (cell.hoverEffect !== true || cell.onClickUri === undefined)\n return;\n const m = getMeasuredTextCache(txt, theme.baseFontFull);\n if (m === undefined)\n return;\n const textRect = getTextRect(m, bounds, theme, cell.contentAlign);\n const didClick = pointInRect({\n x: textRect.x - 4,\n y: textRect.y - 4,\n width: textRect.width + 8,\n height: textRect.height + 8,\n }, posX, posY);\n if (didClick) {\n cell.onClickUri(a);\n }\n return undefined;\n },\n measure: (ctx, cell, theme) => ctx.measureText(cell.displayData ?? cell.data).width + theme.cellHorizontalPadding * 2,\n onDelete: c => ({\n ...c,\n data: \"\",\n }),\n provideEditor: cell => p => {\n const { onChange, value, forceEditMode, validatedSelection } = p;\n return (React.createElement(UriOverlayEditor, { forceEditMode: value.readonly !== true &&\n (forceEditMode || (cell.hoverEffect === true && cell.onClickUri !== undefined)), uri: value.data, preview: value.displayData ?? value.data, validatedSelection: validatedSelection, readonly: value.readonly === true, onChange: e => onChange({\n ...value,\n data: e.target.value,\n }) }));\n },\n onPaste: (toPaste, cell, details) => toPaste === cell.data\n ? undefined\n : { ...cell, data: toPaste, displayData: details.formattedString ?? cell.displayData },\n};\n//# sourceMappingURL=uri-cell.js.map","import {} from \"../internal/data-grid/data-grid-types.js\";\nimport { booleanCellRenderer } from \"./boolean-cell.js\";\nimport { bubbleCellRenderer } from \"./bubble-cell.js\";\nimport { drilldownCellRenderer } from \"./drilldown-cell.js\";\nimport { imageCellRenderer } from \"./image-cell.js\";\nimport { loadingCellRenderer } from \"./loading-cell.js\";\nimport { markdownCellRenderer } from \"./markdown-cell.js\";\nimport { markerCellRenderer } from \"./marker-cell.js\";\nimport { newRowCellRenderer } from \"./new-row-cell.js\";\nimport { numberCellRenderer } from \"./number-cell.js\";\nimport { protectedCellRenderer } from \"./protected-cell.js\";\nimport { rowIDCellRenderer } from \"./row-id-cell.js\";\nimport { textCellRenderer } from \"./text-cell.js\";\nimport { uriCellRenderer } from \"./uri-cell.js\";\nexport const AllCellRenderers = [\n markerCellRenderer,\n newRowCellRenderer,\n booleanCellRenderer,\n bubbleCellRenderer,\n drilldownCellRenderer,\n imageCellRenderer,\n loadingCellRenderer,\n markdownCellRenderer,\n numberCellRenderer,\n protectedCellRenderer,\n rowIDCellRenderer,\n textCellRenderer,\n uriCellRenderer,\n];\n//# sourceMappingURL=index.js.map","const iconHead = `<svg width=\"20\" height=\"20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">`;\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst headerAudioUri = headerUri;\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nconst 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};\nexport const 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//# sourceMappingURL=sprites.js.map","import { CellSet } from \"../internal/data-grid/cell-set.js\";\nimport throttle from \"lodash/throttle.js\";\nimport { packColRowToNumber, unpackNumberToColRow, WindowingTrackerBase } from \"./render-state-provider.js\";\nconst imgPool = [];\nclass ImageWindowLoaderImpl extends WindowingTrackerBase {\n imageLoaded = () => undefined;\n loadedLocations = [];\n cache = {};\n setCallback(imageLoaded) {\n this.imageLoaded = imageLoaded;\n }\n // eslint-disable-next-line unicorn/consistent-function-scoping\n sendLoaded = throttle(() => {\n this.imageLoaded(new CellSet(this.loadedLocations));\n this.loadedLocations = [];\n }, 20);\n 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 }\n else {\n obj.cancel();\n delete this.cache[key];\n }\n }\n };\n loadImage(url, col, row, key) {\n let loaded = false;\n const img = imgPool.pop() ?? new Image();\n let canceled = false;\n const result = {\n img: undefined,\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); // never retain more than 12\n }\n else if (!loaded) {\n img.src = \"\";\n }\n },\n };\n const loadPromise = new Promise(r => img.addEventListener(\"load\", () => r(null)));\n // use request animation time to avoid paying src set costs during draw calls\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 !== undefined && !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 }\n catch {\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 !== undefined) {\n const packed = packColRowToNumber(col, row);\n if (!current.cells.includes(packed)) {\n current.cells.push(packed);\n }\n return current.img;\n }\n else {\n this.loadImage(url, col, row, key);\n }\n return undefined;\n }\n}\nexport default ImageWindowLoaderImpl;\n//# sourceMappingURL=image-window-loader.js.map","import * as React from \"react\";\nimport { DataEditor } from \"./data-editor/data-editor.js\";\nimport { AllCellRenderers } from \"./cells/index.js\";\nimport { sprites } from \"./internal/data-grid/sprites.js\";\nimport ImageWindowLoaderImpl from \"./common/image-window-loader.js\";\nconst DataEditorAllImpl = (p, ref) => {\n const allSprites = React.useMemo(() => {\n return { ...sprites, ...p.headerIcons };\n }, [p.headerIcons]);\n const imageWindowLoader = React.useMemo(() => {\n return p.imageWindowLoader ?? new ImageWindowLoaderImpl();\n }, [p.imageWindowLoader]);\n return (React.createElement(DataEditor, { ...p, renderers: AllCellRenderers, headerIcons: allSprites, ref: ref, imageWindowLoader: imageWindowLoader }));\n};\nexport const DataEditorAll = React.forwardRef(DataEditorAllImpl);\n//# sourceMappingURL=data-editor-all.js.map","import { useRef, useEffect } from 'react';\nimport * as React from 'react';\n\ninterface InputProps {\n onBlur: (e: React.FocusEvent<HTMLInputElement>) => void;\n placeholder: string;\n}\n\nexport const SimpleInput = ({ onBlur, placeholder }: InputProps) => {\n const ref = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n ref.current.focus();\n });\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n const target = e.currentTarget;\n target.blur();\n }\n };\n\n return (\n <input\n type=\"text\"\n placeholder={placeholder}\n onBlur={onBlur}\n ref={ref}\n onKeyDown={onKeyDown}\n data-testid=\"column-input\"\n />\n );\n};\n","import { useState } from 'react';\nimport * as React from 'react';\n\nimport { t } from '@grafana/i18n';\n\nimport { SimpleInput } from './SimpleInput';\n\ninterface AddColumnProps {\n divStyle: string;\n onColumnInputBlur: (columnName: string) => void;\n}\n\nexport const AddColumn = ({ divStyle, onColumnInputBlur }: AddColumnProps) => {\n const [showInput, setShowInput] = useState<boolean>(false);\n\n const setupColumnInput = () => {\n setShowInput(true);\n };\n\n const onBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n const columnName = e.target.value;\n if (columnName) {\n onColumnInputBlur(columnName);\n }\n\n setShowInput(false);\n };\n\n return (\n <div className={divStyle}>\n {showInput ? (\n <SimpleInput placeholder={t('datagrid.add-column.placeholder-column-name', 'Column name')} onBlur={onBlur} />\n ) : (\n <button onClick={setupColumnInput}>+</button>\n )}\n </div>\n );\n};\n","import { config } from '@grafana/runtime';\n\nexport const isDatagridEnabled = () => {\n return config.featureToggles.enableDatagridEditing;\n};\n","import { css } from '@emotion/css';\nimport { CompactSelection, GridCell, GridCellKind, GridSelection, Theme } from '@glideapps/glide-data-grid';\n\nimport { DataFrame, Field, GrafanaTheme2, FieldType } from '@grafana/data';\n\nimport { isDatagridEnabled } from './featureFlagUtils';\n\nconst HEADER_FONT_FAMILY = '600 13px Inter';\nconst CELL_FONT_FAMILY = '400 13px Inter';\nconst TEXT_CANVAS = document.createElement('canvas');\n\nexport const CELL_PADDING = 20;\nexport const MAX_COLUMN_WIDTH = 300;\nexport const ICON_AND_MENU_WIDTH = 65;\nexport const ROW_MARKER_BOTH = 'both';\nexport const ROW_MARKER_NUMBER = 'number';\nexport const DEFAULT_CONTEXT_MENU = { isContextMenuOpen: false };\nexport const DEFAULT_RENAME_INPUT_DATA = { isInputOpen: false };\n\nexport const INTERACTION_EVENT_NAME = 'datagrid_panel';\nexport const INTERACTION_ITEM = {\n EDIT_CELL: 'edit_cell',\n GRID_SELECTED: 'grid_selected',\n APPEND_ROW: 'append_row',\n APPEND_COLUMN: 'append_column',\n DELETE_BTN_PRESSED: 'delete_btn_pressed',\n COLUMN_RESIZE: 'column_resize',\n COLUMN_REORDER: 'column_reorder',\n ROW_REORDER: 'row_reorder',\n CONTEXT_MENU_ACTION: 'context_menu_action',\n HEADER_MENU_ACTION: 'header_menu_action',\n};\n\nexport const EMPTY_DF = {\n name: 'A',\n fields: [],\n length: 0,\n};\n\nexport const EMPTY_CELL: GridCell = {\n kind: GridCellKind.Text,\n data: '',\n allowOverlay: true,\n readonly: false,\n displayData: '',\n};\n\nexport const EMPTY_GRID_SELECTION = {\n columns: CompactSelection.empty(),\n rows: CompactSelection.empty(),\n};\n\nexport const TRAILING_ROW_OPTIONS = {\n sticky: false,\n tint: true,\n};\n\nexport const RIGHT_ELEMENT_PROPS = {\n fill: true,\n sticky: false,\n};\n\nexport interface DatagridContextMenuData {\n x?: number;\n y?: number;\n column?: number;\n row?: number;\n isHeaderMenu?: boolean;\n isContextMenuOpen: boolean;\n}\n\nexport interface RenameColumnInputData {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n isInputOpen: boolean;\n inputValue?: string;\n columnIdx?: number;\n}\n\ninterface CellRange {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport async function updateSnapshot(\n frame: DataFrame,\n updateData?: (frames: DataFrame[]) => Promise<boolean>\n): Promise<boolean> {\n if (updateData && isDatagridEnabled()) {\n for (let i = 0; i < frame.fields.length; i++) {\n delete frame.fields[i].config.displayName;\n delete frame.fields[i].config.displayNameFromDS;\n }\n\n return await updateData([frame]);\n }\n\n return false;\n}\n\nexport const getTextWidth = (text: string, isHeader = false): number => {\n const context = TEXT_CANVAS.getContext('2d');\n context!.font = isHeader ? HEADER_FONT_FAMILY : CELL_FONT_FAMILY;\n const metrics = context!.measureText(text);\n return metrics.width;\n};\n\nexport const getCellWidth = (field: Field): number => {\n //If header is longer than cell text, get header width that will always fully show the header text\n //otherwise get the longest cell text width if it's shorter than the max column width, or the max column width\n return Math.max(\n getTextWidth(field.name, true) + ICON_AND_MENU_WIDTH, //header text\n Math.min(\n MAX_COLUMN_WIDTH,\n field.values.toArray().reduce((acc: number, val: string | number) => {\n const textWidth = getTextWidth(val?.toString() ?? '');\n\n if (textWidth > acc) {\n return textWidth;\n }\n\n return acc;\n }, 0) + CELL_PADDING //cell text\n )\n );\n};\n\nexport const deleteRows = (gridData: DataFrame, rows: number[], hardDelete = false): DataFrame => {\n const copy = {\n ...gridData,\n fields: gridData.fields.map((field) => ({ ...field, values: field.values.slice() })),\n };\n\n for (const field of copy.fields) {\n const valuesArray = field.values.toArray();\n\n //delete from the end of the array to avoid index shifting\n for (let i = rows.length - 1; i >= 0; i--) {\n if (hardDelete) {\n valuesArray.splice(rows[i], 1);\n } else {\n valuesArray.splice(rows[i], 1, null);\n }\n }\n\n field.values = [...valuesArray];\n }\n\n return {\n ...copy,\n length: copy.fields[0]?.values.length ?? 0,\n };\n};\n\nexport const clearCellsFromRangeSelection = (gridData: DataFrame, range: CellRange): DataFrame => {\n const colFrom: number = range.x;\n const rowFrom: number = range.y;\n const colTo: number = range.x + range.width - 1;\n const copy = {\n ...gridData,\n fields: gridData.fields.map((field) => ({ ...field, values: field.values.slice() })),\n };\n\n for (let i = colFrom; i <= colTo; i++) {\n const field = copy.fields[i];\n\n const valuesArray = field.values.toArray();\n valuesArray.splice(rowFrom, range.height, ...new Array(range.height).fill(null));\n field.values = [...valuesArray];\n }\n\n return {\n ...copy,\n length: copy.fields[0]?.values.length ?? 0,\n };\n};\n\n//Converting an array of nulls or undefineds returns them as strings and prints them in the cells instead of empty cells. Thus the cleanup func\nexport const cleanStringFieldAfterConversion = (field: Field): void => {\n const valuesArray = field.values.toArray();\n field.values = valuesArray.map((val) => (val === 'undefined' || val === 'null' ? null : val));\n return;\n};\n\nexport function getGridTheme(theme: GrafanaTheme2): Partial<Theme> {\n return {\n accentColor: theme.colors.primary.main,\n accentFg: theme.colors.secondary.main,\n textDark: theme.colors.text.primary,\n textMedium: theme.colors.text.secondary,\n textLight: theme.colors.text.secondary,\n textBubble: theme.colors.text.primary,\n textHeader: theme.colors.text.primary,\n bgCell: theme.colors.background.primary,\n bgCellMedium: theme.colors.background.primary,\n bgHeader: theme.colors.background.primary,\n bgHeaderHasFocus: theme.colors.background.secondary,\n bgHeaderHovered: theme.colors.background.secondary,\n linkColor: theme.colors.text.link,\n fontFamily: theme.typography.fontFamily,\n headerFontStyle: `${theme.typography.fontWeightMedium} ${theme.typography.fontSize}px`,\n fgIconHeader: theme.colors.secondary.contrastText,\n bgIconHeader: theme.colors.secondary.main,\n };\n}\n\nexport const getGridCellKind = (field: Field, row: number, hasGridSelection = false): GridCell => {\n const value = field.values.get(row);\n\n switch (field.type) {\n case FieldType.boolean:\n return {\n kind: GridCellKind.Boolean,\n data: value ? value : false,\n allowOverlay: false,\n readonly: false,\n };\n case FieldType.number:\n return {\n kind: GridCellKind.Number,\n data: value ? value : 0,\n allowOverlay: isDatagridEnabled()! && !hasGridSelection,\n readonly: false,\n displayData: value !== null && value !== undefined ? value.toString() : '',\n };\n case FieldType.string:\n return {\n kind: GridCellKind.Text,\n data: value ? value : '',\n allowOverlay: isDatagridEnabled()! && !hasGridSelection,\n readonly: false,\n displayData: value !== null && value !== undefined ? value.toString() : '',\n };\n default:\n return {\n kind: GridCellKind.Text,\n data: value ? value : '',\n allowOverlay: isDatagridEnabled()! && !hasGridSelection,\n readonly: false,\n displayData: value !== null && value !== undefined ? value.toString() : '',\n };\n }\n};\n\nexport const getStyles = (theme: GrafanaTheme2, isResizeInProgress: boolean) => {\n return {\n dataEditor: css({\n '.dvn-scroll-inner > div:nth-child(2)': {\n // can't avoid type assertion here due to '!important'\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n pointerEvents: 'none !important' as 'none',\n },\n scrollbarColor: `${theme.colors.background.secondary} ${theme.colors.background.primary}`,\n '::-webkit-scrollbar': {\n width: '10px',\n height: '10px',\n },\n '::-webkit-scrollbar-track': {\n background: theme.colors.background.primary,\n },\n '::-webkit-scrollbar-thumb': {\n // eslint-disable-next-line @grafana/no-border-radius-literal\n borderRadius: '10px',\n },\n '::-webkit-scrollbar-corner': {\n display: 'none',\n },\n }),\n addColumnDiv: css({\n width: '120px',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background.primary,\n button: {\n pointerEvents: isResizeInProgress ? 'none' : 'auto',\n border: 'none',\n outline: 'none',\n height: '37px',\n fontSize: '20px',\n backgroundColor: theme.colors.background.primary,\n color: theme.colors.text.primary,\n borderRight: `1px solid ${theme.components.panel.borderColor}`,\n borderBottom: `1px solid ${theme.components.panel.borderColor}`,\n [theme.transitions.handleMotion('no-preference')]: {\n transition: 'background-color 200ms',\n },\n cursor: 'pointer',\n ':hover': {\n backgroundColor: theme.colors.background.secondary,\n },\n },\n input: {\n height: '37px',\n border: `1px solid ${theme.colors.primary.main}`,\n ':focus': {\n outline: 'none',\n },\n },\n }),\n renameColumnInput: css({\n height: '37px',\n border: `1px solid ${theme.colors.primary.main}`,\n ':focus': {\n outline: 'none',\n },\n }),\n };\n};\n\nexport const hasGridSelection = (gridSelection: GridSelection): boolean => {\n if (gridSelection.rows.length || gridSelection.columns.length) {\n return true;\n }\n\n if (gridSelection.current === undefined) {\n return false;\n }\n\n return (\n gridSelection.current.range &&\n !(gridSelection.current.range.height === 1 && gridSelection.current.range.width === 1)\n );\n};\n","import {\n CellClickedEventArgs,\n GridColumnIcon,\n GridSelection,\n HeaderClickedEventArgs,\n Item,\n Rectangle,\n SizedGridColumn,\n} from '@glideapps/glide-data-grid';\n\nimport { DataFrame, Field, FieldType, getFieldDisplayName } from '@grafana/data';\n\nimport { isDatagridEnabled } from './featureFlagUtils';\nimport {\n DatagridContextMenuData,\n DEFAULT_CONTEXT_MENU,\n DEFAULT_RENAME_INPUT_DATA,\n EMPTY_GRID_SELECTION,\n getCellWidth,\n RenameColumnInputData,\n} from './utils';\n\ninterface DatagridState {\n columns: SizedGridColumn[];\n contextMenuData: DatagridContextMenuData;\n renameColumnInputData: RenameColumnInputData;\n gridSelection: GridSelection;\n columnFreezeIndex: number;\n toggleSearch: boolean;\n isResizeInProgress: boolean;\n}\n\ninterface UpdateColumnsAction {\n type: DatagridActionType.updateColumns;\n payload: {\n frame: DataFrame;\n };\n}\n\ninterface ColumnResizeStartAction {\n type: DatagridActionType.columnResizeStart;\n payload: {\n columnIndex: number;\n width: number;\n };\n}\n\ninterface OpenCellContextMenuAction {\n type: DatagridActionType.openCellContextMenu;\n payload: {\n event: CellClickedEventArgs;\n cell: Item;\n };\n}\n\ninterface OpenHeaderContextMenuAction {\n type: DatagridActionType.openHeaderContextMenu;\n payload: {\n event: HeaderClickedEventArgs;\n columnIndex: number;\n };\n}\n\ninterface OpenHeaderDropdownMenuAction {\n type: DatagridActionType.openHeaderDropdownMenu;\n payload: {\n screenPosition: Rectangle;\n columnIndex: number;\n value: string;\n };\n}\n\ninterface ColumnMoveAction {\n type: DatagridActionType.columnMove;\n payload: {\n from: number;\n to: number;\n };\n}\n\ninterface MultipleCellsSelectedAction {\n type: DatagridActionType.multipleCellsSelected;\n payload: {\n selection: GridSelection;\n };\n}\n\ninterface ColumnFreezeChangedAction {\n type: DatagridActionType.columnFreezeChanged;\n payload: {\n columnIndex: number;\n };\n}\n\ninterface ColumnResizeEndAction {\n type: DatagridActionType.columnResizeEnd;\n}\ninterface ShowColumnRenameInputAction {\n type: DatagridActionType.showColumnRenameInput;\n}\ninterface HideColumnRenameInputAction {\n type: DatagridActionType.hideColumnRenameInput;\n}\ninterface CloseContextMenuAction {\n type: DatagridActionType.closeContextMenu;\n}\ninterface CloseSearchAction {\n type: DatagridActionType.closeSearch;\n}\ninterface OpenSearchAction {\n type: DatagridActionType.openSearch;\n}\ninterface GridSelectionClearedAction {\n type: DatagridActionType.gridSelectionCleared;\n}\ninterface ColumnFreezeResetAction {\n type: DatagridActionType.columnFreezeReset;\n}\n\nexport type DatagridAction =\n | UpdateColumnsAction\n | ColumnResizeStartAction\n | OpenCellContextMenuAction\n | OpenHeaderContextMenuAction\n | OpenHeaderDropdownMenuAction\n | ColumnMoveAction\n | MultipleCellsSelectedAction\n | ColumnFreezeChangedAction\n | ColumnResizeEndAction\n | ShowColumnRenameInputAction\n | HideColumnRenameInputAction\n | CloseContextMenuAction\n | CloseSearchAction\n | OpenSearchAction\n | GridSelectionClearedAction\n | ColumnFreezeResetAction;\n\nexport enum DatagridActionType {\n columnResizeStart = 'columnResizeStart',\n columnResizeEnd = 'columnResizeEnd',\n columnMove = 'columnMove',\n updateColumns = 'updateColumns',\n showColumnRenameInput = 'showColumnRenameInput',\n hideColumnRenameInput = 'hideColumnRenameInput',\n openCellContextMenu = 'openCellContextMenu',\n openHeaderContextMenu = 'openHeaderContextMenu',\n openHeaderDropdownMenu = 'openHeaderDropdownMenu',\n closeContextMenu = 'closeContextMenu',\n multipleCellsSelected = 'multipleCellsSelected',\n gridSelectionCleared = 'gridSelectionCleared',\n columnFreezeReset = 'columnFreezeReset',\n columnFreezeChanged = 'columnFreezeChanged',\n openSearch = 'openSearch',\n closeSearch = 'closeSearch',\n}\n\nexport const initialState: DatagridState = {\n columns: [],\n contextMenuData: DEFAULT_CONTEXT_MENU,\n renameColumnInputData: DEFAULT_RENAME_INPUT_DATA,\n gridSelection: EMPTY_GRID_SELECTION,\n columnFreezeIndex: 0,\n toggleSearch: false,\n isResizeInProgress: false,\n};\n\nconst typeToIconMap: Map<string, GridColumnIcon> = new Map([\n [FieldType.number, GridColumnIcon.HeaderNumber],\n [FieldType.string, GridColumnIcon.HeaderTextTemplate],\n [FieldType.boolean, GridColumnIcon.HeaderBoolean],\n [FieldType.time, GridColumnIcon.HeaderDate],\n [FieldType.other, GridColumnIcon.HeaderReference],\n]);\n\nexport const datagridReducer = (state: DatagridState, action: DatagridAction): DatagridState => {\n let columns: SizedGridColumn[] = [];\n\n switch (action.type) {\n case DatagridActionType.columnResizeStart:\n columns = [...state.columns];\n const columnResizeStartPayload = action.payload;\n\n columns[columnResizeStartPayload.columnIndex] = {\n ...state.columns[columnResizeStartPayload.columnIndex],\n width: columnResizeStartPayload.width,\n };\n\n return {\n ...state,\n columns,\n isResizeInProgress: true,\n };\n case DatagridActionType.columnMove:\n columns = [...state.columns];\n const columnMovePayload = action.payload;\n\n const widthFrom = state.columns[columnMovePayload.from].width;\n\n let fromColumn = columns.splice(columnMovePayload.from, 1)[0];\n\n fromColumn = {\n ...fromColumn,\n width: widthFrom,\n };\n\n columns.splice(columnMovePayload.to, 0, fromColumn);\n\n return {\n ...state,\n columns,\n };\n case DatagridActionType.columnResizeEnd:\n return {\n ...state,\n isResizeInProgress: false,\n };\n case DatagridActionType.updateColumns:\n const updateColumnsPayload = action.payload;\n\n columns = [\n ...updateColumnsPayload.frame.fields.map((field: Field, index: number) => {\n // find column by field name and update width in new set. We cannot use index because\n // if a column gets deleted we don't know the correct index anymore\n const width = state.columns.find((column) => column.title === field.name)?.width;\n const displayName = getFieldDisplayName(field, updateColumnsPayload.frame);\n\n return {\n title: displayName,\n width: width ?? getCellWidth(field),\n icon: typeToIconMap.get(field.type),\n hasMenu: isDatagridEnabled(),\n trailingRowOptions: { targetColumn: --index },\n };\n }),\n ];\n\n return {\n ...state,\n columns,\n };\n case DatagridActionType.showColumnRenameInput:\n return {\n ...state,\n renameColumnInputData: {\n ...state.renameColumnInputData,\n isInputOpen: true,\n },\n };\n case DatagridActionType.hideColumnRenameInput:\n return {\n ...state,\n renameColumnInputData: {\n ...state.renameColumnInputData,\n isInputOpen: false,\n },\n };\n case DatagridActionType.openCellContextMenu:\n const openCellContextMenuPayload = action.payload;\n const cellEvent: CellClickedEventArgs = openCellContextMenuPayload.event;\n const cell: Item = openCellContextMenuPayload.cell;\n\n return {\n ...state,\n contextMenuData: {\n x: cellEvent.bounds.x + cellEvent.localEventX,\n y: cellEvent.bounds.y + cellEvent.localEventY,\n column: cell[0] === -1 ? undefined : cell[0], //row numbers,\n row: cell[1],\n isContextMenuOpen: true,\n isHeaderMenu: false,\n },\n };\n case DatagridActionType.openHeaderContextMenu:\n const openHeaderContextMenuPayload = action.payload;\n const headerEvent: HeaderClickedEventArgs = openHeaderContextMenuPayload.event;\n\n return {\n ...state,\n contextMenuData: {\n x: headerEvent.bounds.x + headerEvent.localEventX,\n y: headerEvent.bounds.y + headerEvent.localEventY,\n column: openHeaderContextMenuPayload.columnIndex,\n row: undefined, //header\n isContextMenuOpen: true,\n isHeaderMenu: false,\n },\n };\n case DatagridActionType.openHeaderDropdownMenu:\n const openHeaderDropdownMenuPayload = action.payload;\n const screenPosition: Rectangle = openHeaderDropdownMenuPayload.screenPosition;\n\n return {\n ...state,\n contextMenuData: {\n x: screenPosition.x + screenPosition.width,\n y: screenPosition.y + screenPosition.height,\n column: openHeaderDropdownMenuPayload.columnIndex,\n row: undefined, //header\n isContextMenuOpen: true,\n isHeaderMenu: true,\n },\n renameColumnInputData: {\n x: screenPosition.x,\n y: screenPosition.y,\n width: screenPosition.width,\n height: screenPosition.height,\n columnIdx: openHeaderDropdownMenuPayload.columnIndex,\n isInputOpen: false,\n inputValue: openHeaderDropdownMenuPayload.value,\n },\n };\n case DatagridActionType.closeContextMenu:\n return {\n ...state,\n contextMenuData: {\n isContextMenuOpen: false,\n },\n };\n case DatagridActionType.closeSearch:\n return {\n ...state,\n toggleSearch: false,\n };\n case DatagridActionType.openSearch:\n return {\n ...state,\n toggleSearch: true,\n };\n case DatagridActionType.multipleCellsSelected:\n const multipleCellsSelectedPayload = action.payload;\n\n return {\n ...state,\n gridSelection: multipleCellsSelectedPayload.selection,\n };\n case DatagridActionType.gridSelectionCleared:\n return {\n ...state,\n gridSelection: EMPTY_GRID_SELECTION,\n };\n case DatagridActionType.columnFreezeReset:\n return {\n ...state,\n columnFreezeIndex: 0,\n };\n case DatagridActionType.columnFreezeChanged:\n const columnFreezeChangedPayload = action.payload;\n\n return {\n ...state,\n columnFreezeIndex: columnFreezeChangedPayload.columnIndex,\n };\n default:\n return state;\n }\n};\n","import { GridSelection } from '@glideapps/glide-data-grid';\nimport { capitalize } from 'lodash';\nimport * as React from 'react';\n\nimport { DataFrame, FieldType } from '@grafana/data';\nimport { convertFieldType } from '@grafana/data/internal';\nimport { t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { ContextMenu, MenuGroup, MenuItem } from '@grafana/ui';\nimport { MenuDivider } from '@grafana/ui/internal';\n\nimport { DatagridAction, DatagridActionType } from '../state';\nimport {\n cleanStringFieldAfterConversion,\n DatagridContextMenuData,\n deleteRows,\n EMPTY_DF,\n INTERACTION_EVENT_NAME,\n INTERACTION_ITEM,\n} from '../utils';\n\ninterface ContextMenuProps {\n menuData: DatagridContextMenuData;\n data: DataFrame;\n saveData: (data: DataFrame) => void;\n dispatch: React.Dispatch<DatagridAction>;\n closeContextMenu: () => void;\n gridSelection: GridSelection;\n columnFreezeIndex: number;\n renameColumnClicked: () => void;\n}\n\nexport const DatagridContextMenu = ({\n menuData,\n data,\n saveData,\n closeContextMenu,\n dispatch,\n gridSelection,\n columnFreezeIndex,\n renameColumnClicked,\n}: ContextMenuProps) => {\n let selectedRows: number[] = [];\n let selectedColumns: number[] = [];\n const { row, column, x, y, isHeaderMenu } = menuData;\n\n if (gridSelection.rows) {\n selectedRows = gridSelection.rows.toArray();\n }\n\n if (gridSelection.columns) {\n selectedColumns = gridSelection.columns.toArray();\n }\n\n let rowDeletionLabel = 'Delete row';\n if (selectedRows.length && selectedRows.length > 1) {\n rowDeletionLabel = `Delete ${selectedRows.length} rows`;\n }\n\n let columnDeletionLabel = 'Delete column';\n if (selectedColumns.length && selectedColumns.length > 1) {\n columnDeletionLabel = `Delete ${selectedColumns.length} columns`;\n }\n\n // Show delete/clear options on cell right click, but not on header right click, unless header column is specifically selected.\n const showDeleteRow = (row !== undefined && row >= 0) || selectedRows.length;\n const showDeleteColumn = (column !== undefined && column >= 0 && row !== undefined) || selectedColumns.length;\n const showClearRow = row !== undefined && row >= 0 && !selectedRows.length;\n const showClearColumn = column !== undefined && column >= 0 && row !== undefined && !selectedColumns.length;\n\n const renderContextMenuItems = () => (\n <>\n {showDeleteRow ? (\n <MenuItem\n label={rowDeletionLabel}\n onClick={() => {\n if (selectedRows.length) {\n saveData(deleteRows(data, selectedRows, true));\n dispatch({ type: DatagridActionType.gridSelectionCleared });\n return;\n }\n\n if (row !== undefined && row >= 0) {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.CONTEXT_MENU_ACTION,\n menu_action: 'row_delete',\n });\n saveData(deleteRows(data, [row], true));\n }\n }}\n />\n ) : null}\n {showDeleteColumn ? (\n <MenuItem\n label={columnDeletionLabel}\n onClick={() => {\n if (selectedColumns.length) {\n saveData({\n ...data,\n fields: data.fields.filter((_, index) => !selectedColumns.includes(index)),\n });\n dispatch({ type: DatagridActionType.gridSelectionCleared });\n return;\n }\n\n if (column !== undefined && column >= 0) {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.CONTEXT_MENU_ACTION,\n menu_action: 'column_delete',\n });\n saveData({\n ...data,\n fields: data.fields.filter((_, index) => index !== column),\n });\n }\n }}\n />\n ) : null}\n {showDeleteColumn || showDeleteRow ? <MenuDivider /> : null}\n {showClearRow ? (\n <MenuItem\n label={t('datagrid.datagrid-context-menu.render-context-menu-items.label-clear-row', 'Clear row')}\n onClick={() => {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.CONTEXT_MENU_ACTION,\n menu_action: 'row_clear',\n });\n saveData(deleteRows(data, [row]));\n }}\n />\n ) : null}\n {showClearColumn ? (\n <MenuItem\n label={t('datagrid.datagrid-context-menu.render-context-menu-items.label-clear-column', 'Clear column')}\n onClick={() => {\n const field = data.fields[column];\n field.values = field.values.map(() => null);\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.CONTEXT_MENU_ACTION,\n menu_action: 'column_clear',\n });\n saveData({\n ...data,\n });\n }}\n />\n ) : null}\n {showClearRow || showClearColumn ? <MenuDivider /> : null}\n <MenuItem\n label={t('datagrid.datagrid-context-menu.render-context-menu-items.label-remove-all-data', 'Remove all data')}\n onClick={() => {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.CONTEXT_MENU_ACTION,\n menu_action: 'remove_all',\n });\n saveData(EMPTY_DF);\n }}\n />\n <MenuItem\n label={t('datagrid.datagrid-context-menu.render-context-menu-items.label-search', 'Search...')}\n onClick={() => {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.CONTEXT_MENU_ACTION,\n menu_action: 'open_search',\n });\n dispatch({ type: DatagridActionType.openSearch });\n }}\n />\n </>\n );\n\n const renderHeaderMenuItems = () => {\n if (column === null || column === undefined) {\n return null;\n }\n\n const fieldType = data.fields[column].type;\n const fieldTypeConversionData: Array<{\n label: string;\n options: {\n targetField: string;\n destinationType: FieldType;\n };\n }> = [];\n\n const addToConversionData = (fieldType: FieldType) => {\n fieldTypeConversionData.push({\n label: capitalize(fieldType),\n options: {\n targetField: data.fields[column].name,\n destinationType: fieldType,\n },\n });\n };\n\n if (fieldType === FieldType.string) {\n addToConversionData(FieldType.number);\n addToConversionData(FieldType.boolean);\n } else if (fieldType === FieldType.number) {\n addToConversionData(FieldType.string);\n addToConversionData(FieldType.boolean);\n } else if (fieldType === FieldType.boolean) {\n addToConversionData(FieldType.number);\n addToConversionData(FieldType.string);\n } else {\n addToConversionData(FieldType.string);\n addToConversionData(FieldType.number);\n addToConversionData(FieldType.boolean);\n }\n\n let columnFreezeLabel = 'Set column freeze position';\n const columnIndex = column + 1;\n if (columnFreezeIndex === columnIndex) {\n columnFreezeLabel = 'Unset column freeze';\n }\n\n return (\n <>\n {fieldTypeConversionData.length ? (\n <MenuGroup\n label={t('datagrid.datagrid-context-menu.render-header-menu-items.label-set-field-type', 'Set field type')}\n >\n {fieldTypeConversionData.map((conversionData, index) => (\n <MenuItem\n key={index}\n label={conversionData.label}\n onClick={() => {\n const field = convertFieldType(data.fields[column], conversionData.options);\n if (conversionData.options.destinationType === FieldType.string) {\n cleanStringFieldAfterConversion(field);\n }\n\n const copy = {\n name: data.name,\n fields: [...data.fields],\n length: data.length,\n };\n copy.fields[column] = field;\n\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.HEADER_MENU_ACTION,\n menu_action: 'convert_field',\n });\n saveData(copy);\n }}\n />\n ))}\n </MenuGroup>\n ) : null}\n <MenuDivider />\n <MenuItem\n label={columnFreezeLabel}\n onClick={() => {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.HEADER_MENU_ACTION,\n menu_action: 'column_freeze',\n });\n if (columnFreezeIndex === columnIndex) {\n dispatch({ type: DatagridActionType.columnFreezeReset });\n } else {\n dispatch({ type: DatagridActionType.columnFreezeChanged, payload: { columnIndex } });\n }\n }}\n />\n <MenuItem\n label={t('datagrid.datagrid-context-menu.render-header-menu-items.label-rename-column', 'Rename column')}\n onClick={renameColumnClicked}\n />\n <MenuDivider />\n <MenuItem\n label={t('datagrid.datagrid-context-menu.render-header-menu-items.label-delete-column', 'Delete column')}\n onClick={() => {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.HEADER_MENU_ACTION,\n menu_action: 'delete_column',\n });\n saveData({\n ...data,\n fields: data.fields.filter((_, index) => index !== column),\n });\n\n // also clear selection since it will change it if the deleted column is selected or if indexes shift\n dispatch({ type: DatagridActionType.gridSelectionCleared });\n }}\n />\n <MenuItem\n label={t('datagrid.datagrid-context-menu.render-header-menu-items.label-clear-column', 'Clear column')}\n onClick={() => {\n const field = data.fields[column];\n field.values = field.values.map(() => null);\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.HEADER_MENU_ACTION,\n menu_action: 'clear_column',\n });\n saveData({\n ...data,\n });\n }}\n />\n </>\n );\n };\n\n return (\n <ContextMenu\n renderMenuItems={isHeaderMenu ? renderHeaderMenuItems : renderContextMenuItems}\n x={x!}\n y={y!}\n onClose={closeContextMenu}\n />\n );\n};\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport * as React from 'react';\n\nimport { Portal } from '@grafana/ui';\n\nimport { RenameColumnInputData } from '../utils';\n\ninterface RenameColumnProps {\n renameColumnData: RenameColumnInputData;\n onColumnInputBlur: (columnName: string, columnIdx: number) => void;\n classStyle?: string;\n}\n\nexport const RenameColumnCell = ({ renameColumnData, onColumnInputBlur, classStyle }: RenameColumnProps) => {\n const { x, y, width, height, inputValue, columnIdx } = renameColumnData;\n const [styles, setStyles] = useState({});\n const [value, setValue] = useState<string>(inputValue!);\n const ref = useRef<HTMLInputElement>(null);\n\n useLayoutEffect(() => {\n ref.current?.focus();\n\n const rect = ref.current?.getBoundingClientRect();\n if (rect) {\n const collisions = {\n right: window.innerWidth < x! + rect.width,\n bottom: window.innerHeight < y! + rect.height,\n };\n\n setStyles({\n position: 'fixed',\n left: collisions.right ? x! - rect.width : x!,\n top: collisions.bottom ? y! - rect.height : y!,\n width: width,\n height: height,\n });\n }\n }, [height, width, x, y]);\n\n const onBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n const columnName = e.target.value;\n if (columnName) {\n onColumnInputBlur(columnName, columnIdx!);\n }\n };\n\n const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue(e.target.value);\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n const target = e.currentTarget;\n target.blur();\n }\n };\n\n return (\n <Portal>\n <input\n type=\"text\"\n className={classStyle}\n value={value}\n onBlur={onBlur}\n ref={ref}\n style={styles}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </Portal>\n );\n};\n","import DataEditor, {\n GridCell,\n Item,\n GridColumn,\n EditableGridCell,\n GridSelection,\n CellClickedEventArgs,\n Rectangle,\n HeaderClickedEventArgs,\n} from '@glideapps/glide-data-grid';\nimport { useEffect, useReducer } from 'react';\n\nimport { Field, PanelProps, FieldType, DataFrame } from '@grafana/data';\nimport { PanelDataErrorView, reportInteraction } from '@grafana/runtime';\nimport { usePanelContext, useTheme2 } from '@grafana/ui';\n\nimport '@glideapps/glide-data-grid/dist/index.css';\n\nimport { AddColumn } from './components/AddColumn';\nimport { DatagridContextMenu } from './components/DatagridContextMenu';\nimport { RenameColumnCell } from './components/RenameColumnCell';\nimport { isDatagridEnabled } from './featureFlagUtils';\nimport { Options } from './panelcfg.gen';\nimport { DatagridActionType, datagridReducer, initialState } from './state';\nimport {\n clearCellsFromRangeSelection,\n deleteRows,\n EMPTY_CELL,\n getGridCellKind,\n getGridTheme,\n RIGHT_ELEMENT_PROPS,\n TRAILING_ROW_OPTIONS,\n getStyles,\n ROW_MARKER_BOTH,\n ROW_MARKER_NUMBER,\n hasGridSelection,\n updateSnapshot,\n INTERACTION_EVENT_NAME,\n INTERACTION_ITEM,\n} from './utils';\n\nexport interface DataGridProps extends PanelProps<Options> {}\n\nexport function DataGridPanel({ options, data, id, fieldConfig, width, height }: DataGridProps) {\n const [state, dispatch] = useReducer(datagridReducer, initialState);\n const { onUpdateData } = usePanelContext();\n\n const {\n columns,\n contextMenuData,\n renameColumnInputData,\n gridSelection,\n columnFreezeIndex,\n toggleSearch,\n isResizeInProgress,\n } = state;\n\n const frame = data.series[options.selectedSeries ?? 0];\n\n const theme = useTheme2();\n const gridTheme = getGridTheme(theme);\n\n useEffect(() => {\n if (!frame) {\n return;\n }\n\n dispatch({ type: DatagridActionType.updateColumns, payload: { frame } });\n }, [frame]);\n\n const getCellContent = ([col, row]: Item): GridCell => {\n const field: Field = frame.fields[col];\n\n if (!field || row > frame.length) {\n return EMPTY_CELL;\n }\n\n return getGridCellKind(field, row, hasGridSelection(gridSelection));\n };\n\n const onCellEdited = (cell: Item, newValue: EditableGridCell) => {\n // if there are rows selected, return early, we don't want to edit any cell\n if (hasGridSelection(gridSelection)) {\n return;\n }\n\n const [col, row] = cell;\n const frameCopy = {\n ...frame,\n fields: frame.fields.map((f) => {\n return {\n ...f,\n values: [...f.values],\n };\n }),\n };\n const field: Field = frameCopy.fields[col];\n\n if (!field) {\n return;\n }\n\n const values = field.values.toArray();\n\n values[row] = newValue.data;\n field.values = [...values];\n\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.EDIT_CELL });\n\n updateSnapshot(frameCopy, onUpdateData);\n };\n\n const onColumnInputBlur = (columnName: string) => {\n const len = frame.length ?? 0;\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.APPEND_COLUMN });\n updateSnapshot(\n {\n ...frame,\n fields: [\n ...frame.fields,\n {\n name: columnName,\n type: FieldType.string,\n config: {},\n values: new Array(len).fill(''),\n },\n ],\n },\n onUpdateData\n );\n };\n\n const addNewRow = () => {\n const fields = frame.fields.map((f) => {\n const values = f.values.slice(); // copy\n values.push(null);\n return { ...f, values };\n });\n\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.APPEND_ROW });\n updateSnapshot({ ...frame, fields, length: frame.length + 1 }, onUpdateData);\n };\n\n const onColumnResize = (column: GridColumn, width: number, columnIndex: number, newSizeWithGrow: number) => {\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.COLUMN_RESIZE });\n dispatch({ type: DatagridActionType.columnResizeStart, payload: { columnIndex, width } });\n };\n\n //Hack used to allow resizing last column, near add column btn. This is a workaround for a bug in the grid component\n const onColumnResizeEnd = (column: GridColumn, newSize: number, colIndex: number, newSizeWithGrow: number) => {\n dispatch({ type: DatagridActionType.columnResizeEnd });\n };\n\n const closeContextMenu = () => {\n dispatch({ type: DatagridActionType.closeContextMenu });\n };\n\n const onDeletePressed = (selection: GridSelection) => {\n if (selection.current && selection.current.range) {\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.DELETE_BTN_PRESSED, selection: 'grid-cell' });\n updateSnapshot(clearCellsFromRangeSelection(frame, selection.current.range), onUpdateData);\n return true;\n }\n\n const rows = selection.rows.toArray();\n const cols = selection.columns.toArray();\n\n if (rows.length) {\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.DELETE_BTN_PRESSED, selection: 'rows' });\n updateSnapshot(deleteRows(frame, rows), onUpdateData);\n return true;\n }\n\n if (cols.length) {\n const copiedFrame = {\n ...frame,\n fields: frame.fields.map((field, index) => {\n if (cols.includes(index)) {\n return {\n ...field,\n values: new Array(frame.length).fill(null),\n };\n }\n\n return field;\n }),\n };\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.DELETE_BTN_PRESSED, selection: 'columns' });\n updateSnapshot(copiedFrame, onUpdateData);\n return true;\n }\n\n return false;\n };\n\n const onCellContextMenu = (cell: Item, event: CellClickedEventArgs) => {\n event.preventDefault();\n dispatch({ type: DatagridActionType.openCellContextMenu, payload: { event, cell } });\n };\n\n const onHeaderContextMenu = (columnIndex: number, event: HeaderClickedEventArgs) => {\n event.preventDefault();\n dispatch({ type: DatagridActionType.openHeaderContextMenu, payload: { event, columnIndex } });\n };\n\n const onHeaderMenuClick = (col: number, screenPosition: Rectangle) => {\n dispatch({\n type: DatagridActionType.openHeaderDropdownMenu,\n payload: { screenPosition, columnIndex: col, value: state.columns[col].title },\n });\n };\n\n const onColumnMove = async (from: number, to: number) => {\n const fields = frame.fields.map((f) => f);\n const field = fields[from];\n fields.splice(from, 1);\n fields.splice(to, 0, field);\n\n const hasUpdated = await updateSnapshot({ ...frame, fields }, onUpdateData);\n\n if (hasUpdated) {\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.COLUMN_REORDER });\n dispatch({ type: DatagridActionType.columnMove, payload: { from, to } });\n }\n };\n\n const onRowMove = (from: number, to: number) => {\n const fields = frame.fields.map((f) => ({ ...f, values: f.values.slice() }));\n\n for (const field of fields) {\n const value = field.values[from];\n field.values.splice(from, 1);\n field.values.splice(to, 0, value);\n }\n\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.ROW_REORDER });\n updateSnapshot({ ...frame, fields }, onUpdateData);\n };\n\n const onColumnRename = () => {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.HEADER_MENU_ACTION,\n menu_action: 'rename_column',\n });\n dispatch({ type: DatagridActionType.showColumnRenameInput });\n };\n\n const onRenameInputBlur = (columnName: string, columnIdx: number) => {\n const fields = frame.fields.map((f) => f);\n fields[columnIdx].name = columnName;\n\n dispatch({ type: DatagridActionType.hideColumnRenameInput });\n\n updateSnapshot({ ...frame, fields }, onUpdateData);\n };\n\n const onSearchClose = () => {\n dispatch({ type: DatagridActionType.closeSearch });\n };\n\n const onGridSelectionChange = (selection: GridSelection) => {\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.GRID_SELECTED });\n dispatch({ type: DatagridActionType.multipleCellsSelected, payload: { selection } });\n };\n\n const onContextMenuSave = (data: DataFrame) => {\n updateSnapshot(data, onUpdateData);\n };\n\n if (!frame) {\n return <PanelDataErrorView panelId={id} fieldConfig={fieldConfig} data={data} />;\n }\n\n if (!isDatagridEnabled()) {\n return <PanelDataErrorView panelId={id} message=\"Datagrid is not enabled\" fieldConfig={fieldConfig} data={data} />;\n }\n\n if (!document.getElementById('portal')) {\n const portal = document.createElement('div');\n portal.id = 'portal';\n document.body.appendChild(portal);\n }\n\n const styles = getStyles(theme, isResizeInProgress);\n\n return (\n <>\n <DataEditor\n className={styles.dataEditor}\n getCellContent={getCellContent}\n columns={columns}\n rows={frame.length}\n width={width}\n height={height}\n initialSize={[width, height]}\n theme={gridTheme}\n smoothScrollX\n smoothScrollY\n overscrollY={50}\n onCellEdited={isDatagridEnabled() ? onCellEdited : undefined}\n getCellsForSelection={isDatagridEnabled() ? true : undefined}\n showSearch={isDatagridEnabled() ? toggleSearch : false}\n onSearchClose={onSearchClose}\n gridSelection={gridSelection}\n onGridSelectionChange={isDatagridEnabled() ? onGridSelectionChange : undefined}\n onRowAppended={isDatagridEnabled() ? addNewRow : undefined}\n onDelete={isDatagridEnabled() ? onDeletePressed : undefined}\n rowMarkers={isDatagridEnabled() ? ROW_MARKER_BOTH : ROW_MARKER_NUMBER}\n onColumnResize={onColumnResize}\n onColumnResizeEnd={onColumnResizeEnd}\n onCellContextMenu={isDatagridEnabled() ? onCellContextMenu : undefined}\n onHeaderContextMenu={isDatagridEnabled() ? onHeaderContextMenu : undefined}\n onHeaderMenuClick={isDatagridEnabled() ? onHeaderMenuClick : undefined}\n trailingRowOptions={TRAILING_ROW_OPTIONS}\n rightElement={\n isDatagridEnabled() ? (\n <AddColumn onColumnInputBlur={onColumnInputBlur} divStyle={styles.addColumnDiv} />\n ) : null\n }\n rightElementProps={RIGHT_ELEMENT_PROPS}\n freezeColumns={columnFreezeIndex}\n onRowMoved={isDatagridEnabled() ? onRowMove : undefined}\n onColumnMoved={isDatagridEnabled() ? onColumnMove : undefined}\n />\n {contextMenuData.isContextMenuOpen && (\n <DatagridContextMenu\n menuData={contextMenuData}\n data={frame}\n saveData={onContextMenuSave}\n closeContextMenu={closeContextMenu}\n dispatch={dispatch}\n gridSelection={gridSelection}\n columnFreezeIndex={columnFreezeIndex}\n renameColumnClicked={onColumnRename}\n />\n )}\n {renameColumnInputData.isInputOpen ? (\n <RenameColumnCell\n onColumnInputBlur={onRenameInputBlur}\n renameColumnData={renameColumnInputData}\n classStyle={styles.renameColumnInput}\n />\n ) : null}\n </>\n );\n}\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nexport interface Options {\n selectedSeries: number;\n}\n\nexport const defaultOptions: Partial<Options> = {\n selectedSeries: 0,\n};\n","import { PanelPlugin } from '@grafana/data';\n\nimport { DataGridPanel } from './DataGridPanel';\nimport { defaultOptions, Options } from './panelcfg.gen';\n\nexport const plugin = new PanelPlugin<Options>(DataGridPanel).setPanelOptions((builder, context) => {\n const seriesOptions = context.data.map((frame, idx) => ({ value: idx, label: frame.refId }));\n\n if (\n context.options &&\n !seriesOptions.map((s: { value: number }) => s.value).includes(context.options.selectedSeries ?? 0)\n ) {\n context.options.selectedSeries = defaultOptions.selectedSeries!;\n }\n\n return builder.addSelect({\n path: 'selectedSeries',\n name: 'Select series',\n defaultValue: defaultOptions.selectedSeries,\n settings: {\n options: seriesOptions,\n },\n });\n});\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default(position, metric, axis) {\n var positionPercent = position === 0 ? position : position + metric;\n var positionCss = axis === 'horizontal' ? [positionPercent, 0, 0] : [0, positionPercent, 0];\n var transitionProp = 'translate3d';\n var translatedPosition = '(' + positionCss.join(',') + ')';\n return transitionProp + translatedPosition;\n};\n\nexports.default = _default;","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['exports', 'react', 'prop-types'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require('react'), require('prop-types'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports, global.react, global.propTypes);\n global.reactSwipe = mod.exports;\n }\n})(this, function (exports, _react, _propTypes) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.setHasSupportToCaptureOption = setHasSupportToCaptureOption;\n\n var _react2 = _interopRequireDefault(_react);\n\n var _propTypes2 = _interopRequireDefault(_propTypes);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n function _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var supportsCaptureOption = false;\n function setHasSupportToCaptureOption(hasSupport) {\n supportsCaptureOption = hasSupport;\n }\n\n try {\n addEventListener('test', null, Object.defineProperty({}, 'capture', { get: function get() {\n setHasSupportToCaptureOption(true);\n } }));\n } catch (e) {} // eslint-disable-line no-empty\n\n function getSafeEventHandlerOpts() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { capture: true };\n\n return supportsCaptureOption ? options : options.capture;\n }\n\n /**\n * [getPosition returns a position element that works for mouse or touch events]\n * @param {[Event]} event [the received event]\n * @return {[Object]} [x and y coords]\n */\n function getPosition(event) {\n if ('touches' in event) {\n var _event$touches$ = event.touches[0],\n pageX = _event$touches$.pageX,\n pageY = _event$touches$.pageY;\n\n return { x: pageX, y: pageY };\n }\n\n var screenX = event.screenX,\n screenY = event.screenY;\n\n return { x: screenX, y: screenY };\n }\n\n var ReactSwipe = function (_Component) {\n _inherits(ReactSwipe, _Component);\n\n function ReactSwipe() {\n var _ref;\n\n _classCallCheck(this, ReactSwipe);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var _this = _possibleConstructorReturn(this, (_ref = ReactSwipe.__proto__ || Object.getPrototypeOf(ReactSwipe)).call.apply(_ref, [this].concat(args)));\n\n _this._handleSwipeStart = _this._handleSwipeStart.bind(_this);\n _this._handleSwipeMove = _this._handleSwipeMove.bind(_this);\n _this._handleSwipeEnd = _this._handleSwipeEnd.bind(_this);\n\n _this._onMouseDown = _this._onMouseDown.bind(_this);\n _this._onMouseMove = _this._onMouseMove.bind(_this);\n _this._onMouseUp = _this._onMouseUp.bind(_this);\n\n _this._setSwiperRef = _this._setSwiperRef.bind(_this);\n return _this;\n }\n\n _createClass(ReactSwipe, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (this.swiper) {\n this.swiper.addEventListener('touchmove', this._handleSwipeMove, getSafeEventHandlerOpts({\n capture: true,\n passive: false\n }));\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (this.swiper) {\n this.swiper.removeEventListener('touchmove', this._handleSwipeMove, getSafeEventHandlerOpts({\n capture: true,\n passive: false\n }));\n }\n }\n }, {\n key: '_onMouseDown',\n value: function _onMouseDown(event) {\n if (!this.props.allowMouseEvents) {\n return;\n }\n\n this.mouseDown = true;\n\n document.addEventListener('mouseup', this._onMouseUp);\n document.addEventListener('mousemove', this._onMouseMove);\n\n this._handleSwipeStart(event);\n }\n }, {\n key: '_onMouseMove',\n value: function _onMouseMove(event) {\n if (!this.mouseDown) {\n return;\n }\n\n this._handleSwipeMove(event);\n }\n }, {\n key: '_onMouseUp',\n value: function _onMouseUp(event) {\n this.mouseDown = false;\n\n document.removeEventListener('mouseup', this._onMouseUp);\n document.removeEventListener('mousemove', this._onMouseMove);\n\n this._handleSwipeEnd(event);\n }\n }, {\n key: '_handleSwipeStart',\n value: function _handleSwipeStart(event) {\n var _getPosition = getPosition(event),\n x = _getPosition.x,\n y = _getPosition.y;\n\n this.moveStart = { x: x, y: y };\n this.props.onSwipeStart(event);\n }\n }, {\n key: '_handleSwipeMove',\n value: function _handleSwipeMove(event) {\n if (!this.moveStart) {\n return;\n }\n\n var _getPosition2 = getPosition(event),\n x = _getPosition2.x,\n y = _getPosition2.y;\n\n var deltaX = x - this.moveStart.x;\n var deltaY = y - this.moveStart.y;\n this.moving = true;\n\n // handling the responsability of cancelling the scroll to\n // the component handling the event\n var shouldPreventDefault = this.props.onSwipeMove({\n x: deltaX,\n y: deltaY\n }, event);\n\n if (shouldPreventDefault && event.cancelable) {\n event.preventDefault();\n }\n\n this.movePosition = { deltaX: deltaX, deltaY: deltaY };\n }\n }, {\n key: '_handleSwipeEnd',\n value: function _handleSwipeEnd(event) {\n this.props.onSwipeEnd(event);\n\n var tolerance = this.props.tolerance;\n\n\n if (this.moving && this.movePosition) {\n if (this.movePosition.deltaX < -tolerance) {\n this.props.onSwipeLeft(1, event);\n } else if (this.movePosition.deltaX > tolerance) {\n this.props.onSwipeRight(1, event);\n }\n if (this.movePosition.deltaY < -tolerance) {\n this.props.onSwipeUp(1, event);\n } else if (this.movePosition.deltaY > tolerance) {\n this.props.onSwipeDown(1, event);\n }\n }\n\n this.moveStart = null;\n this.moving = false;\n this.movePosition = null;\n }\n }, {\n key: '_setSwiperRef',\n value: function _setSwiperRef(node) {\n this.swiper = node;\n this.props.innerRef(node);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n tagName = _props.tagName,\n className = _props.className,\n style = _props.style,\n children = _props.children,\n allowMouseEvents = _props.allowMouseEvents,\n onSwipeUp = _props.onSwipeUp,\n onSwipeDown = _props.onSwipeDown,\n onSwipeLeft = _props.onSwipeLeft,\n onSwipeRight = _props.onSwipeRight,\n onSwipeStart = _props.onSwipeStart,\n onSwipeMove = _props.onSwipeMove,\n onSwipeEnd = _props.onSwipeEnd,\n innerRef = _props.innerRef,\n tolerance = _props.tolerance,\n props = _objectWithoutProperties(_props, ['tagName', 'className', 'style', 'children', 'allowMouseEvents', 'onSwipeUp', 'onSwipeDown', 'onSwipeLeft', 'onSwipeRight', 'onSwipeStart', 'onSwipeMove', 'onSwipeEnd', 'innerRef', 'tolerance']);\n\n return _react2.default.createElement(\n this.props.tagName,\n _extends({\n ref: this._setSwiperRef,\n onMouseDown: this._onMouseDown,\n onTouchStart: this._handleSwipeStart,\n onTouchEnd: this._handleSwipeEnd,\n className: className,\n style: style\n }, props),\n children\n );\n }\n }]);\n\n return ReactSwipe;\n }(_react.Component);\n\n ReactSwipe.displayName = 'ReactSwipe';\n ReactSwipe.propTypes = {\n tagName: _propTypes2.default.string,\n className: _propTypes2.default.string,\n style: _propTypes2.default.object,\n children: _propTypes2.default.node,\n allowMouseEvents: _propTypes2.default.bool,\n onSwipeUp: _propTypes2.default.func,\n onSwipeDown: _propTypes2.default.func,\n onSwipeLeft: _propTypes2.default.func,\n onSwipeRight: _propTypes2.default.func,\n onSwipeStart: _propTypes2.default.func,\n onSwipeMove: _propTypes2.default.func,\n onSwipeEnd: _propTypes2.default.func,\n innerRef: _propTypes2.default.func,\n tolerance: _propTypes2.default.number.isRequired\n };\n ReactSwipe.defaultProps = {\n tagName: 'div',\n allowMouseEvents: false,\n onSwipeUp: function onSwipeUp() {},\n onSwipeDown: function onSwipeDown() {},\n onSwipeLeft: function onSwipeLeft() {},\n onSwipeRight: function onSwipeRight() {},\n onSwipeStart: function onSwipeStart() {},\n onSwipeMove: function onSwipeMove() {},\n onSwipeEnd: function onSwipeEnd() {},\n innerRef: function innerRef() {},\n\n tolerance: 0\n };\n exports.default = ReactSwipe;\n});","var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseEach = require('./_baseEach');\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseAggregator;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayAggregator;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","import { assertNever, proveType } from \"../../common/support.js\";\nimport has from \"lodash/has.js\";\n/** @category Types */\nexport const BooleanEmpty = null;\n/** @category Types */\nexport const BooleanIndeterminate = undefined;\n/** @category Cells */\nexport var GridCellKind;\n(function (GridCellKind) {\n GridCellKind[\"Uri\"] = \"uri\";\n GridCellKind[\"Text\"] = \"text\";\n GridCellKind[\"Image\"] = \"image\";\n GridCellKind[\"RowID\"] = \"row-id\";\n GridCellKind[\"Number\"] = \"number\";\n GridCellKind[\"Bubble\"] = \"bubble\";\n GridCellKind[\"Boolean\"] = \"boolean\";\n GridCellKind[\"Loading\"] = \"loading\";\n GridCellKind[\"Markdown\"] = \"markdown\";\n GridCellKind[\"Drilldown\"] = \"drilldown\";\n GridCellKind[\"Protected\"] = \"protected\";\n GridCellKind[\"Custom\"] = \"custom\";\n})(GridCellKind || (GridCellKind = {}));\n/** @category Columns */\nexport var GridColumnIcon;\n(function (GridColumnIcon) {\n GridColumnIcon[\"HeaderRowID\"] = \"headerRowID\";\n GridColumnIcon[\"HeaderCode\"] = \"headerCode\";\n GridColumnIcon[\"HeaderNumber\"] = \"headerNumber\";\n GridColumnIcon[\"HeaderString\"] = \"headerString\";\n GridColumnIcon[\"HeaderBoolean\"] = \"headerBoolean\";\n GridColumnIcon[\"HeaderAudioUri\"] = \"headerAudioUri\";\n GridColumnIcon[\"HeaderVideoUri\"] = \"headerVideoUri\";\n GridColumnIcon[\"HeaderEmoji\"] = \"headerEmoji\";\n GridColumnIcon[\"HeaderImage\"] = \"headerImage\";\n GridColumnIcon[\"HeaderUri\"] = \"headerUri\";\n GridColumnIcon[\"HeaderPhone\"] = \"headerPhone\";\n GridColumnIcon[\"HeaderMarkdown\"] = \"headerMarkdown\";\n GridColumnIcon[\"HeaderDate\"] = \"headerDate\";\n GridColumnIcon[\"HeaderTime\"] = \"headerTime\";\n GridColumnIcon[\"HeaderEmail\"] = \"headerEmail\";\n GridColumnIcon[\"HeaderReference\"] = \"headerReference\";\n GridColumnIcon[\"HeaderIfThenElse\"] = \"headerIfThenElse\";\n GridColumnIcon[\"HeaderSingleValue\"] = \"headerSingleValue\";\n GridColumnIcon[\"HeaderLookup\"] = \"headerLookup\";\n GridColumnIcon[\"HeaderTextTemplate\"] = \"headerTextTemplate\";\n GridColumnIcon[\"HeaderMath\"] = \"headerMath\";\n GridColumnIcon[\"HeaderRollup\"] = \"headerRollup\";\n GridColumnIcon[\"HeaderJoinStrings\"] = \"headerJoinStrings\";\n GridColumnIcon[\"HeaderSplitString\"] = \"headerSplitString\";\n GridColumnIcon[\"HeaderGeoDistance\"] = \"headerGeoDistance\";\n GridColumnIcon[\"HeaderArray\"] = \"headerArray\";\n GridColumnIcon[\"RowOwnerOverlay\"] = \"rowOwnerOverlay\";\n GridColumnIcon[\"ProtectedColumnOverlay\"] = \"protectedColumnOverlay\";\n})(GridColumnIcon || (GridColumnIcon = {}));\n/** @category Columns */\nexport var GridColumnMenuIcon;\n(function (GridColumnMenuIcon) {\n GridColumnMenuIcon[\"Triangle\"] = \"triangle\";\n GridColumnMenuIcon[\"Dots\"] = \"dots\";\n})(GridColumnMenuIcon || (GridColumnMenuIcon = {}));\n/** @category Columns */\nexport function isSizedGridColumn(c) {\n return \"width\" in c && typeof c.width === \"number\";\n}\n/** @category Types */\nexport async function resolveCellsThunk(thunk) {\n if (typeof thunk === \"object\")\n return thunk;\n return await thunk();\n}\n// All EditableGridCells are inherently ValidatedGridCells, and this is more specific and thus more useful.\n/** @category Cells */\nexport function isEditableGridCell(cell) {\n if (cell.kind === GridCellKind.Loading ||\n cell.kind === GridCellKind.Bubble ||\n cell.kind === GridCellKind.RowID ||\n cell.kind === GridCellKind.Protected ||\n cell.kind === GridCellKind.Drilldown) {\n return false;\n }\n proveType(cell);\n return true;\n}\n/** @category Cells */\nexport function isTextEditableGridCell(cell) {\n if (cell.kind === GridCellKind.Loading ||\n cell.kind === GridCellKind.Bubble ||\n cell.kind === GridCellKind.RowID ||\n cell.kind === GridCellKind.Protected ||\n cell.kind === GridCellKind.Drilldown ||\n cell.kind === GridCellKind.Boolean ||\n cell.kind === GridCellKind.Image ||\n cell.kind === GridCellKind.Custom) {\n return false;\n }\n proveType(cell);\n return true;\n}\n/** @category Cells */\nexport function isInnerOnlyCell(cell) {\n return cell.kind === InnerGridCellKind.Marker || cell.kind === InnerGridCellKind.NewRow;\n}\n/** @category Cells */\nexport function isReadWriteCell(cell) {\n if (!isEditableGridCell(cell) || cell.kind === GridCellKind.Image)\n return false;\n if (cell.kind === GridCellKind.Text ||\n cell.kind === GridCellKind.Number ||\n cell.kind === GridCellKind.Markdown ||\n cell.kind === GridCellKind.Uri ||\n cell.kind === GridCellKind.Custom ||\n cell.kind === GridCellKind.Boolean) {\n return cell.readonly !== true;\n }\n assertNever(cell, \"A cell was passed with an invalid kind\");\n}\nexport function isRectangleEqual(a, b) {\n if (a === b)\n return true;\n if (a === undefined || b === undefined)\n return false;\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n/** @category Renderers */\nexport function isObjectEditorCallbackResult(obj) {\n return has(obj, \"editor\");\n}\n// Can be written more concisely, not easier to read if more concise.\n/** @category Cells */\nexport function booleanCellIsEditable(cell) {\n return !(cell.readonly ?? false);\n}\n/** @category Cells */\nexport var InnerGridCellKind;\n(function (InnerGridCellKind) {\n InnerGridCellKind[\"NewRow\"] = \"new-row\";\n InnerGridCellKind[\"Marker\"] = \"marker\";\n})(InnerGridCellKind || (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 range of ranges.slice(1)) {\n const top = stack[stack.length - 1];\n if (top[1] < range[0]) {\n stack.push([...range]);\n }\n else if (top[1] < range[1]) {\n top[1] = range[1];\n }\n }\n return stack;\n}\nlet emptyCompactSelection;\n/** @category Selection */\nexport class CompactSelection {\n items;\n constructor(items) {\n this.items = items;\n }\n static empty = () => {\n return emptyCompactSelection ?? (emptyCompactSelection = new CompactSelection([]));\n };\n static fromSingleSelection = (selection) => {\n return CompactSelection.empty().add(selection);\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 // Remove part of slice that intersects removed selection.\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 undefined;\n return this.items[0][0];\n }\n last() {\n if (this.items.length === 0)\n return undefined;\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//# sourceMappingURL=data-grid-types.js.map","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['exports', './react-swipe'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require('./react-swipe'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports, global.reactSwipe);\n global.index = mod.exports;\n }\n})(this, function (exports, _reactSwipe) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n\n var _reactSwipe2 = _interopRequireDefault(_reactSwipe);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n exports.default = _reactSwipe2.default;\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactEasySwipe = _interopRequireDefault(require(\"react-easy-swipe\"));\n\nvar _cssClasses = _interopRequireDefault(require(\"../../cssClasses\"));\n\nvar _Thumbs = _interopRequireDefault(require(\"../Thumbs\"));\n\nvar _document = _interopRequireDefault(require(\"../../shims/document\"));\n\nvar _window = _interopRequireDefault(require(\"../../shims/window\"));\n\nvar _utils = require(\"./utils\");\n\nvar _animations = require(\"./animations\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar Carousel = /*#__PURE__*/function (_React$Component) {\n _inherits(Carousel, _React$Component);\n\n var _super = _createSuper(Carousel);\n\n // @ts-ignore\n function Carousel(props) {\n var _this;\n\n _classCallCheck(this, Carousel);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"thumbsRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"carouselWrapperRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"listRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"itemsRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"timer\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"animationHandler\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"setThumbsRef\", function (node) {\n _this.thumbsRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setCarouselWrapperRef\", function (node) {\n _this.carouselWrapperRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setListRef\", function (node) {\n _this.listRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setItemsRef\", function (node, index) {\n if (!_this.itemsRef) {\n _this.itemsRef = [];\n }\n\n _this.itemsRef[index] = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"autoPlay\", function () {\n if (_react.Children.count(_this.props.children) <= 1) {\n return;\n }\n\n _this.clearAutoPlay();\n\n if (!_this.props.autoPlay) {\n return;\n }\n\n _this.timer = setTimeout(function () {\n _this.increment();\n }, _this.props.interval);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"clearAutoPlay\", function () {\n if (_this.timer) clearTimeout(_this.timer);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"resetAutoPlay\", function () {\n _this.clearAutoPlay();\n\n _this.autoPlay();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"stopOnHover\", function () {\n _this.setState({\n isMouseEntered: true\n }, _this.clearAutoPlay);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"startOnLeave\", function () {\n _this.setState({\n isMouseEntered: false\n }, _this.autoPlay);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"isFocusWithinTheCarousel\", function () {\n if (!_this.carouselWrapperRef) {\n return false;\n }\n\n if ((0, _document.default)().activeElement === _this.carouselWrapperRef || _this.carouselWrapperRef.contains((0, _document.default)().activeElement)) {\n return true;\n }\n\n return false;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"navigateWithKeyboard\", function (e) {\n if (!_this.isFocusWithinTheCarousel()) {\n return;\n }\n\n var axis = _this.props.axis;\n var isHorizontal = axis === 'horizontal';\n var keyNames = {\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n ArrowLeft: 37\n };\n var nextKey = isHorizontal ? keyNames.ArrowRight : keyNames.ArrowDown;\n var prevKey = isHorizontal ? keyNames.ArrowLeft : keyNames.ArrowUp;\n\n if (nextKey === e.keyCode) {\n _this.increment();\n } else if (prevKey === e.keyCode) {\n _this.decrement();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateSizes\", function () {\n if (!_this.state.initialized || !_this.itemsRef || _this.itemsRef.length === 0) {\n return;\n }\n\n var isHorizontal = _this.props.axis === 'horizontal';\n var firstItem = _this.itemsRef[0];\n\n if (!firstItem) {\n return;\n }\n\n var itemSize = isHorizontal ? firstItem.clientWidth : firstItem.clientHeight;\n\n _this.setState({\n itemSize: itemSize\n });\n\n if (_this.thumbsRef) {\n _this.thumbsRef.updateSizes();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setMountState\", function () {\n _this.setState({\n hasMount: true\n });\n\n _this.updateSizes();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleClickItem\", function (index, item) {\n if (_react.Children.count(_this.props.children) === 0) {\n return;\n }\n\n if (_this.state.cancelClick) {\n _this.setState({\n cancelClick: false\n });\n\n return;\n }\n\n _this.props.onClickItem(index, item);\n\n if (index !== _this.state.selectedItem) {\n _this.setState({\n selectedItem: index\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleOnChange\", function (index, item) {\n if (_react.Children.count(_this.props.children) <= 1) {\n return;\n }\n\n _this.props.onChange(index, item);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleClickThumb\", function (index, item) {\n _this.props.onClickThumb(index, item);\n\n _this.moveTo(index);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeStart\", function (event) {\n _this.setState({\n swiping: true\n });\n\n _this.props.onSwipeStart(event);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeEnd\", function (event) {\n _this.setState({\n swiping: false,\n cancelClick: false,\n swipeMovementStarted: false\n });\n\n _this.props.onSwipeEnd(event);\n\n _this.clearAutoPlay();\n\n if (_this.state.autoPlay) {\n _this.autoPlay();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeMove\", function (delta, event) {\n _this.props.onSwipeMove(event);\n\n var animationHandlerResponse = _this.props.swipeAnimationHandler(delta, _this.props, _this.state, _this.setState.bind(_assertThisInitialized(_this)));\n\n _this.setState(_objectSpread({}, animationHandlerResponse)); // If we have not moved, we should have an empty object returned\n // Return false to allow scrolling when not swiping\n\n\n return !!Object.keys(animationHandlerResponse).length;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"decrement\", function () {\n var positions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n _this.moveTo(_this.state.selectedItem - (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"increment\", function () {\n var positions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n _this.moveTo(_this.state.selectedItem + (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"moveTo\", function (position) {\n if (typeof position !== 'number') {\n return;\n }\n\n var lastPosition = _react.Children.count(_this.props.children) - 1;\n\n if (position < 0) {\n position = _this.props.infiniteLoop ? lastPosition : 0;\n }\n\n if (position > lastPosition) {\n position = _this.props.infiniteLoop ? 0 : lastPosition;\n }\n\n _this.selectItem({\n // if it's not a slider, we don't need to set position here\n selectedItem: position\n }); // don't reset auto play when stop on hover is enabled, doing so will trigger a call to auto play more than once\n // and will result in the interval function not being cleared correctly.\n\n\n if (_this.state.autoPlay && _this.state.isMouseEntered === false) {\n _this.resetAutoPlay();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onClickNext\", function () {\n _this.increment(1);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onClickPrev\", function () {\n _this.decrement(1);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeForward\", function () {\n _this.increment(1);\n\n if (_this.props.emulateTouch) {\n _this.setState({\n cancelClick: true\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeBackwards\", function () {\n _this.decrement(1);\n\n if (_this.props.emulateTouch) {\n _this.setState({\n cancelClick: true\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"changeItem\", function (newIndex) {\n return function (e) {\n if (!(0, _utils.isKeyboardEvent)(e) || e.key === 'Enter') {\n _this.moveTo(newIndex);\n }\n };\n });\n\n _defineProperty(_assertThisInitialized(_this), \"selectItem\", function (state) {\n // Merge in the new state while updating updating previous item\n _this.setState(_objectSpread({\n previousItem: _this.state.selectedItem\n }, state), function () {\n // Run animation handler and update styles based on it\n _this.setState(_this.animationHandler(_this.props, _this.state));\n });\n\n _this.handleOnChange(state.selectedItem, _react.Children.toArray(_this.props.children)[state.selectedItem]);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getInitialImage\", function () {\n var selectedItem = _this.props.selectedItem;\n var item = _this.itemsRef && _this.itemsRef[selectedItem];\n var images = item && item.getElementsByTagName('img') || [];\n return images[0];\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getVariableItemHeight\", function (position) {\n var item = _this.itemsRef && _this.itemsRef[position];\n\n if (_this.state.hasMount && item && item.children.length) {\n var slideImages = item.children[0].getElementsByTagName('img') || [];\n\n if (slideImages.length > 0) {\n var image = slideImages[0];\n\n if (!image.complete) {\n // if the image is still loading, the size won't be available so we trigger a new render after it's done\n var onImageLoad = function onImageLoad() {\n _this.forceUpdate();\n\n image.removeEventListener('load', onImageLoad);\n };\n\n image.addEventListener('load', onImageLoad);\n }\n } // try to get img first, if img not there find first display tag\n\n\n var displayItem = slideImages[0] || item.children[0];\n var height = displayItem.clientHeight;\n return height > 0 ? height : null;\n }\n\n return null;\n });\n\n var initState = {\n initialized: false,\n previousItem: props.selectedItem,\n selectedItem: props.selectedItem,\n hasMount: false,\n isMouseEntered: false,\n autoPlay: props.autoPlay,\n swiping: false,\n swipeMovementStarted: false,\n cancelClick: false,\n itemSize: 1,\n itemListStyle: {},\n slideStyle: {},\n selectedStyle: {},\n prevStyle: {}\n };\n _this.animationHandler = typeof props.animationHandler === 'function' && props.animationHandler || props.animationHandler === 'fade' && _animations.fadeAnimationHandler || _animations.slideAnimationHandler;\n _this.state = _objectSpread(_objectSpread({}, initState), _this.animationHandler(props, initState));\n return _this;\n }\n\n _createClass(Carousel, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!this.props.children) {\n return;\n }\n\n this.setupCarousel();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (!prevProps.children && this.props.children && !this.state.initialized) {\n this.setupCarousel();\n }\n\n if (!prevProps.autoFocus && this.props.autoFocus) {\n this.forceFocus();\n }\n\n if (prevState.swiping && !this.state.swiping) {\n // We stopped swiping, ensure we are heading to the new/current slide and not stuck\n this.setState(_objectSpread({}, this.props.stopSwipingHandler(this.props, this.state)));\n }\n\n if (prevProps.selectedItem !== this.props.selectedItem || prevProps.centerMode !== this.props.centerMode) {\n this.updateSizes();\n this.moveTo(this.props.selectedItem);\n }\n\n if (prevProps.autoPlay !== this.props.autoPlay) {\n if (this.props.autoPlay) {\n this.setupAutoPlay();\n } else {\n this.destroyAutoPlay();\n }\n\n this.setState({\n autoPlay: this.props.autoPlay\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.destroyCarousel();\n }\n }, {\n key: \"setupCarousel\",\n value: function setupCarousel() {\n var _this2 = this;\n\n this.bindEvents();\n\n if (this.state.autoPlay && _react.Children.count(this.props.children) > 1) {\n this.setupAutoPlay();\n }\n\n if (this.props.autoFocus) {\n this.forceFocus();\n }\n\n this.setState({\n initialized: true\n }, function () {\n var initialImage = _this2.getInitialImage();\n\n if (initialImage && !initialImage.complete) {\n // if it's a carousel of images, we set the mount state after the first image is loaded\n initialImage.addEventListener('load', _this2.setMountState);\n } else {\n _this2.setMountState();\n }\n });\n }\n }, {\n key: \"destroyCarousel\",\n value: function destroyCarousel() {\n if (this.state.initialized) {\n this.unbindEvents();\n this.destroyAutoPlay();\n }\n }\n }, {\n key: \"setupAutoPlay\",\n value: function setupAutoPlay() {\n this.autoPlay();\n var carouselWrapper = this.carouselWrapperRef;\n\n if (this.props.stopOnHover && carouselWrapper) {\n carouselWrapper.addEventListener('mouseenter', this.stopOnHover);\n carouselWrapper.addEventListener('mouseleave', this.startOnLeave);\n }\n }\n }, {\n key: \"destroyAutoPlay\",\n value: function destroyAutoPlay() {\n this.clearAutoPlay();\n var carouselWrapper = this.carouselWrapperRef;\n\n if (this.props.stopOnHover && carouselWrapper) {\n carouselWrapper.removeEventListener('mouseenter', this.stopOnHover);\n carouselWrapper.removeEventListener('mouseleave', this.startOnLeave);\n }\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n // as the widths are calculated, we need to resize\n // the carousel when the window is resized\n (0, _window.default)().addEventListener('resize', this.updateSizes); // issue #2 - image loading smaller\n\n (0, _window.default)().addEventListener('DOMContentLoaded', this.updateSizes);\n\n if (this.props.useKeyboardArrows) {\n (0, _document.default)().addEventListener('keydown', this.navigateWithKeyboard);\n }\n }\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n // removing listeners\n (0, _window.default)().removeEventListener('resize', this.updateSizes);\n (0, _window.default)().removeEventListener('DOMContentLoaded', this.updateSizes);\n var initialImage = this.getInitialImage();\n\n if (initialImage) {\n initialImage.removeEventListener('load', this.setMountState);\n }\n\n if (this.props.useKeyboardArrows) {\n (0, _document.default)().removeEventListener('keydown', this.navigateWithKeyboard);\n }\n }\n }, {\n key: \"forceFocus\",\n value: function forceFocus() {\n var _this$carouselWrapper;\n\n (_this$carouselWrapper = this.carouselWrapperRef) === null || _this$carouselWrapper === void 0 ? void 0 : _this$carouselWrapper.focus();\n }\n }, {\n key: \"renderItems\",\n value: function renderItems(isClone) {\n var _this3 = this;\n\n if (!this.props.children) {\n return [];\n }\n\n return _react.Children.map(this.props.children, function (item, index) {\n var isSelected = index === _this3.state.selectedItem;\n var isPrevious = index === _this3.state.previousItem;\n var style = isSelected && _this3.state.selectedStyle || isPrevious && _this3.state.prevStyle || _this3.state.slideStyle || {};\n\n if (_this3.props.centerMode && _this3.props.axis === 'horizontal') {\n style = _objectSpread(_objectSpread({}, style), {}, {\n minWidth: _this3.props.centerSlidePercentage + '%'\n });\n }\n\n if (_this3.state.swiping && _this3.state.swipeMovementStarted) {\n style = _objectSpread(_objectSpread({}, style), {}, {\n pointerEvents: 'none'\n });\n }\n\n var slideProps = {\n ref: function ref(e) {\n return _this3.setItemsRef(e, index);\n },\n key: 'itemKey' + index + (isClone ? 'clone' : ''),\n className: _cssClasses.default.ITEM(true, index === _this3.state.selectedItem, index === _this3.state.previousItem),\n onClick: _this3.handleClickItem.bind(_this3, index, item),\n style: style\n };\n return /*#__PURE__*/_react.default.createElement(\"li\", slideProps, _this3.props.renderItem(item, {\n isSelected: index === _this3.state.selectedItem,\n isPrevious: index === _this3.state.previousItem\n }));\n });\n }\n }, {\n key: \"renderControls\",\n value: function renderControls() {\n var _this4 = this;\n\n var _this$props = this.props,\n showIndicators = _this$props.showIndicators,\n labels = _this$props.labels,\n renderIndicator = _this$props.renderIndicator,\n children = _this$props.children;\n\n if (!showIndicators) {\n return null;\n }\n\n return /*#__PURE__*/_react.default.createElement(\"ul\", {\n className: \"control-dots\"\n }, _react.Children.map(children, function (_, index) {\n return renderIndicator && renderIndicator(_this4.changeItem(index), index === _this4.state.selectedItem, index, labels.item);\n }));\n }\n }, {\n key: \"renderStatus\",\n value: function renderStatus() {\n if (!this.props.showStatus) {\n return null;\n }\n\n return /*#__PURE__*/_react.default.createElement(\"p\", {\n className: \"carousel-status\"\n }, this.props.statusFormatter(this.state.selectedItem + 1, _react.Children.count(this.props.children)));\n }\n }, {\n key: \"renderThumbs\",\n value: function renderThumbs() {\n if (!this.props.showThumbs || !this.props.children || _react.Children.count(this.props.children) === 0) {\n return null;\n }\n\n return /*#__PURE__*/_react.default.createElement(_Thumbs.default, {\n ref: this.setThumbsRef,\n onSelectItem: this.handleClickThumb,\n selectedItem: this.state.selectedItem,\n transitionTime: this.props.transitionTime,\n thumbWidth: this.props.thumbWidth,\n labels: this.props.labels,\n emulateTouch: this.props.emulateTouch\n }, this.props.renderThumbs(this.props.children));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this5 = this;\n\n if (!this.props.children || _react.Children.count(this.props.children) === 0) {\n return null;\n }\n\n var isSwipeable = this.props.swipeable && _react.Children.count(this.props.children) > 1;\n var isHorizontal = this.props.axis === 'horizontal';\n var canShowArrows = this.props.showArrows && _react.Children.count(this.props.children) > 1; // show left arrow?\n\n var hasPrev = canShowArrows && (this.state.selectedItem > 0 || this.props.infiniteLoop) || false; // show right arrow\n\n var hasNext = canShowArrows && (this.state.selectedItem < _react.Children.count(this.props.children) - 1 || this.props.infiniteLoop) || false;\n var itemsClone = this.renderItems(true);\n var firstClone = itemsClone.shift();\n var lastClone = itemsClone.pop();\n var swiperProps = {\n className: _cssClasses.default.SLIDER(true, this.state.swiping),\n onSwipeMove: this.onSwipeMove,\n onSwipeStart: this.onSwipeStart,\n onSwipeEnd: this.onSwipeEnd,\n style: this.state.itemListStyle,\n tolerance: this.props.swipeScrollTolerance\n };\n var containerStyles = {};\n\n if (isHorizontal) {\n swiperProps.onSwipeLeft = this.onSwipeForward;\n swiperProps.onSwipeRight = this.onSwipeBackwards;\n\n if (this.props.dynamicHeight) {\n var itemHeight = this.getVariableItemHeight(this.state.selectedItem); // swiperProps.style.height = itemHeight || 'auto';\n\n containerStyles.height = itemHeight || 'auto';\n }\n } else {\n swiperProps.onSwipeUp = this.props.verticalSwipe === 'natural' ? this.onSwipeBackwards : this.onSwipeForward;\n swiperProps.onSwipeDown = this.props.verticalSwipe === 'natural' ? this.onSwipeForward : this.onSwipeBackwards;\n swiperProps.style = _objectSpread(_objectSpread({}, swiperProps.style), {}, {\n height: this.state.itemSize\n });\n containerStyles.height = this.state.itemSize;\n }\n\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n \"aria-label\": this.props.ariaLabel,\n className: _cssClasses.default.ROOT(this.props.className),\n ref: this.setCarouselWrapperRef,\n tabIndex: this.props.useKeyboardArrows ? 0 : undefined\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.CAROUSEL(true),\n style: {\n width: this.props.width\n }\n }, this.renderControls(), this.props.renderArrowPrev(this.onClickPrev, hasPrev, this.props.labels.leftArrow), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.WRAPPER(true, this.props.axis),\n style: containerStyles\n }, isSwipeable ? /*#__PURE__*/_react.default.createElement(_reactEasySwipe.default, _extends({\n tagName: \"ul\",\n innerRef: this.setListRef\n }, swiperProps, {\n allowMouseEvents: this.props.emulateTouch\n }), this.props.infiniteLoop && lastClone, this.renderItems(), this.props.infiniteLoop && firstClone) : /*#__PURE__*/_react.default.createElement(\"ul\", {\n className: _cssClasses.default.SLIDER(true, this.state.swiping),\n ref: function ref(node) {\n return _this5.setListRef(node);\n },\n style: this.state.itemListStyle || {}\n }, this.props.infiniteLoop && lastClone, this.renderItems(), this.props.infiniteLoop && firstClone)), this.props.renderArrowNext(this.onClickNext, hasNext, this.props.labels.rightArrow), this.renderStatus()), this.renderThumbs());\n }\n }]);\n\n return Carousel;\n}(_react.default.Component);\n\nexports.default = Carousel;\n\n_defineProperty(Carousel, \"displayName\", 'Carousel');\n\n_defineProperty(Carousel, \"defaultProps\", {\n ariaLabel: undefined,\n axis: 'horizontal',\n centerSlidePercentage: 80,\n interval: 3000,\n labels: {\n leftArrow: 'previous slide / item',\n rightArrow: 'next slide / item',\n item: 'slide item'\n },\n onClickItem: _utils.noop,\n onClickThumb: _utils.noop,\n onChange: _utils.noop,\n onSwipeStart: function onSwipeStart() {},\n onSwipeEnd: function onSwipeEnd() {},\n onSwipeMove: function onSwipeMove() {\n return false;\n },\n preventMovementUntilSwipeScrollTolerance: false,\n renderArrowPrev: function renderArrowPrev(onClickHandler, hasPrev, label) {\n return /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n \"aria-label\": label,\n className: _cssClasses.default.ARROW_PREV(!hasPrev),\n onClick: onClickHandler\n });\n },\n renderArrowNext: function renderArrowNext(onClickHandler, hasNext, label) {\n return /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n \"aria-label\": label,\n className: _cssClasses.default.ARROW_NEXT(!hasNext),\n onClick: onClickHandler\n });\n },\n renderIndicator: function renderIndicator(onClickHandler, isSelected, index, label) {\n return /*#__PURE__*/_react.default.createElement(\"li\", {\n className: _cssClasses.default.DOT(isSelected),\n onClick: onClickHandler,\n onKeyDown: onClickHandler,\n value: index,\n key: index,\n role: \"button\",\n tabIndex: 0,\n \"aria-label\": \"\".concat(label, \" \").concat(index + 1)\n });\n },\n renderItem: function renderItem(item) {\n return item;\n },\n renderThumbs: function renderThumbs(children) {\n var images = _react.Children.map(children, function (item) {\n var img = item; // if the item is not an image, try to find the first image in the item's children.\n\n if (item.type !== 'img') {\n img = _react.Children.toArray(item.props.children).find(function (children) {\n return children.type === 'img';\n });\n }\n\n if (!img) {\n return undefined;\n }\n\n return img;\n });\n\n if (images.filter(function (image) {\n return image;\n }).length === 0) {\n console.warn(\"No images found! Can't build the thumb list without images. If you don't need thumbs, set showThumbs={false} in the Carousel. Note that it's not possible to get images rendered inside custom components. More info at https://github.com/leandrowd/react-responsive-carousel/blob/master/TROUBLESHOOTING.md\");\n return [];\n }\n\n return images;\n },\n statusFormatter: _utils.defaultStatusFormatter,\n selectedItem: 0,\n showArrows: true,\n showIndicators: true,\n showStatus: true,\n showThumbs: true,\n stopOnHover: true,\n swipeScrollTolerance: 5,\n swipeable: true,\n transitionTime: 350,\n verticalSwipe: 'standard',\n width: '100%',\n animationHandler: 'slide',\n swipeAnimationHandler: _animations.slideSwipeAnimationHandler,\n stopSwipingHandler: _animations.slideStopSwipingHandler\n});","// Shamelessly stolen from https://github.com/ricokahler/color2k\n// We don't need all the color functions but we deeply appreciate their work.\nconst cache = {};\nlet 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 // div must be mounted for `getComputedStyle` to work\n document.body.append(d);\n return d;\n}\n/** @category Drawing */\nexport function parseToRgba(color) {\n // normalize the color\n const normalizedColor = color.toLowerCase().trim();\n if (cache[normalizedColor] !== undefined)\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\n // eslint-disable-next-line unicorn/better-regex\n .replace(/[^\\d.,]/g, \"\")\n .split(\",\")\n .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 (process.env.NODE_ENV !== \"production\" && isNaN) {\n // eslint-disable-next-line no-console\n console.warn(\"Could not parse color\", color);\n }\n return isNaN ? 0 : x;\n });\n cache[normalizedColor] = result;\n return result;\n}\n/** @category Drawing */\nexport function withAlpha(color, alpha) {\n const [r, g, b] = parseToRgba(color);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\nconst blendResultCache = new Map();\nexport function blendCache(color, background) {\n const cacheKey = `${color}-${background}`;\n const maybe = blendResultCache.get(cacheKey);\n if (maybe !== undefined)\n return maybe;\n const result = blend(color, background);\n blendResultCache.set(cacheKey, result);\n return result;\n}\n/** @category Drawing */\nexport function blend(color, background) {\n if (background === undefined)\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 // (xaA + xaB·(1−aA))/aR\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}\n/** @category Drawing */\nexport function interpolateColors(leftColor, rightColor, val) {\n // toot toot im a GPU\n if (val <= 0)\n return leftColor;\n if (val >= 1)\n return rightColor;\n // Parse to rgba returns straight alpha colors, for interpolation we want pre-multiplied alpha\n // FIXME: This can be faster if instead of makign an array we just use variables. No memory allocation.\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 // now we need to divide the alpha back out to get linear alpha back for the final result\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 * Returns a number (float) representing the luminance of a color.\n *\n * @category Drawing\n */\nexport function getLuminance(color) {\n if (color === \"transparent\")\n return 0;\n // eslint-disable-next-line unicorn/consistent-function-scoping\n function f(x) {\n const channel = x / 255;\n return channel <= 0.04045 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n }\n const [r, g, b] = parseToRgba(color);\n return 0.2126 * f(r) + 0.7152 * f(g) + 0.0722 * f(b);\n}\n//# sourceMappingURL=color-parser.js.map","export function proveType(_val) {\n // do nothing, just prove the compiler thinks the types match\n}\nfunction panic(message = \"This should not happen\") {\n throw new Error(message);\n}\nexport function assert(fact, message = \"Assertion failed\") {\n if (fact)\n return;\n return panic(message);\n}\nexport function assertNever(_never, msg) {\n return panic(msg ?? \"Hell froze over\");\n}\nexport function maybe(fn, defaultValue) {\n try {\n return fn();\n }\n catch {\n return defaultValue;\n }\n}\n// The following code is licensed under the MIT license to Luke Edwards\n// Original license and code can be found here: https://github.com/lukeed/dequal/blob/master/license\n// I have merely \"ported\" it to be TS (any any any) and directly included it for convenience.\nconst has = Object.prototype.hasOwnProperty;\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport function deepEqual(foo, bar) {\n let ctor, len;\n if (foo === bar)\n return true;\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\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 // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!ctor || typeof foo === \"object\") {\n len = 0;\n // eslint-disable-next-line guard-for-in\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//# sourceMappingURL=support.js.map","import React from \"react\";\nimport { blend } from \"../internal/data-grid/color-parser.js\";\n// theme variable precidence\n/** @category Theme */\nexport function makeCSSStyle(theme) {\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\": theme.textGroupHeader ?? 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\": theme.horizontalBorderColor ?? 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 ...(theme.resizeIndicatorColor === undefined\n ? {}\n : { \"--gdg-resize-indicator-color\": theme.resizeIndicatorColor }),\n ...(theme.headerBottomBorderColor === undefined\n ? {}\n : { \"--gdg-header-bottom-border-color\": theme.headerBottomBorderColor }),\n ...(theme.roundingRadius === undefined ? {} : { \"--gdg-rounding-radius\": `${theme.roundingRadius}px` }),\n };\n}\nconst 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: \"#353fb5\",\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, //unitless scaler depends on your font\n};\n/** @category Theme */\nexport function getDataEditorTheme() {\n return dataEditorBaseTheme;\n}\n/** @category Theme */\nexport const ThemeContext = React.createContext(dataEditorBaseTheme);\n/** @category Hooks */\nexport function useTheme() {\n return React.useContext(ThemeContext);\n}\nexport function mergeAndRealizeTheme(theme, ...overlays) {\n const merged = { ...theme };\n for (const overlay of overlays) {\n if (overlay !== undefined) {\n for (const key in overlay) {\n // eslint-disable-next-line no-prototype-builtins\n if (overlay.hasOwnProperty(key)) {\n if (key === \"bgCell\") {\n merged[key] = blend(overlay[key], merged[key]);\n }\n else {\n merged[key] = overlay[key];\n }\n }\n }\n }\n }\n if (merged.headerFontFull === undefined ||\n theme.fontFamily !== merged.fontFamily ||\n theme.headerFontStyle !== merged.headerFontStyle) {\n merged.headerFontFull = `${merged.headerFontStyle} ${merged.fontFamily}`;\n }\n if (merged.baseFontFull === undefined ||\n theme.fontFamily !== merged.fontFamily ||\n theme.baseFontStyle !== merged.baseFontStyle) {\n merged.baseFontFull = `${merged.baseFontStyle} ${merged.fontFamily}`;\n }\n if (merged.markerFontFull === undefined ||\n theme.fontFamily !== merged.fontFamily ||\n theme.markerFontStyle !== merged.markerFontStyle) {\n merged.markerFontFull = `${merged.markerFontStyle} ${merged.fontFamily}`;\n }\n return merged;\n}\n//# sourceMappingURL=styles.js.map","var baseClamp = require('./_baseClamp'),\n toNumber = require('./toNumber');\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nmodule.exports = clamp;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _cssClasses = _interopRequireDefault(require(\"../cssClasses\"));\n\nvar _dimensions = require(\"../dimensions\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../CSSTranslate\"));\n\nvar _reactEasySwipe = _interopRequireDefault(require(\"react-easy-swipe\"));\n\nvar _window = _interopRequireDefault(require(\"../shims/window\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar isKeyboardEvent = function isKeyboardEvent(e) {\n return e.hasOwnProperty('key');\n};\n\nvar Thumbs = /*#__PURE__*/function (_Component) {\n _inherits(Thumbs, _Component);\n\n var _super = _createSuper(Thumbs);\n\n function Thumbs(_props) {\n var _this;\n\n _classCallCheck(this, Thumbs);\n\n _this = _super.call(this, _props);\n\n _defineProperty(_assertThisInitialized(_this), \"itemsWrapperRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"itemsListRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"thumbsRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"setItemsWrapperRef\", function (node) {\n _this.itemsWrapperRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setItemsListRef\", function (node) {\n _this.itemsListRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setThumbsRef\", function (node, index) {\n if (!_this.thumbsRef) {\n _this.thumbsRef = [];\n }\n\n _this.thumbsRef[index] = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateSizes\", function () {\n if (!_this.props.children || !_this.itemsWrapperRef || !_this.thumbsRef) {\n return;\n }\n\n var total = _react.Children.count(_this.props.children);\n\n var wrapperSize = _this.itemsWrapperRef.clientWidth;\n var itemSize = _this.props.thumbWidth ? _this.props.thumbWidth : (0, _dimensions.outerWidth)(_this.thumbsRef[0]);\n var visibleItems = Math.floor(wrapperSize / itemSize);\n var showArrows = visibleItems < total;\n var lastPosition = showArrows ? total - visibleItems : 0;\n\n _this.setState(function (_state, props) {\n return {\n itemSize: itemSize,\n visibleItems: visibleItems,\n firstItem: showArrows ? _this.getFirstItem(props.selectedItem) : 0,\n lastPosition: lastPosition,\n showArrows: showArrows\n };\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleClickItem\", function (index, item, e) {\n if (!isKeyboardEvent(e) || e.key === 'Enter') {\n var handler = _this.props.onSelectItem;\n\n if (typeof handler === 'function') {\n handler(index, item);\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeStart\", function () {\n _this.setState({\n swiping: true\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeEnd\", function () {\n _this.setState({\n swiping: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeMove\", function (delta) {\n var deltaX = delta.x;\n\n if (!_this.state.itemSize || !_this.itemsWrapperRef || !_this.state.visibleItems) {\n return false;\n }\n\n var leftBoundary = 0;\n\n var childrenLength = _react.Children.count(_this.props.children);\n\n var currentPosition = -(_this.state.firstItem * 100) / _this.state.visibleItems;\n var lastLeftItem = Math.max(childrenLength - _this.state.visibleItems, 0);\n var lastLeftBoundary = -lastLeftItem * 100 / _this.state.visibleItems; // prevent user from swiping left out of boundaries\n\n if (currentPosition === leftBoundary && deltaX > 0) {\n deltaX = 0;\n } // prevent user from swiping right out of boundaries\n\n\n if (currentPosition === lastLeftBoundary && deltaX < 0) {\n deltaX = 0;\n }\n\n var wrapperSize = _this.itemsWrapperRef.clientWidth;\n var position = currentPosition + 100 / (wrapperSize / deltaX); // if 3d isn't available we will use left to move\n\n if (_this.itemsListRef) {\n ['WebkitTransform', 'MozTransform', 'MsTransform', 'OTransform', 'transform', 'msTransform'].forEach(function (prop) {\n _this.itemsListRef.style[prop] = (0, _CSSTranslate.default)(position, '%', _this.props.axis);\n });\n }\n\n return true;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"slideRight\", function (positions) {\n _this.moveTo(_this.state.firstItem - (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"slideLeft\", function (positions) {\n _this.moveTo(_this.state.firstItem + (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"moveTo\", function (position) {\n // position can't be lower than 0\n position = position < 0 ? 0 : position; // position can't be higher than last postion\n\n position = position >= _this.state.lastPosition ? _this.state.lastPosition : position;\n\n _this.setState({\n firstItem: position\n });\n });\n\n _this.state = {\n selectedItem: _props.selectedItem,\n swiping: false,\n showArrows: false,\n firstItem: 0,\n visibleItems: 0,\n lastPosition: 0\n };\n return _this;\n }\n\n _createClass(Thumbs, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.setupThumbs();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (this.props.selectedItem !== this.state.selectedItem) {\n this.setState({\n selectedItem: this.props.selectedItem,\n firstItem: this.getFirstItem(this.props.selectedItem)\n });\n }\n\n if (this.props.children === prevProps.children) {\n return;\n } // This will capture any size changes for arrow adjustments etc.\n // usually in the same render cycle so we don't see any flickers\n\n\n this.updateSizes();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.destroyThumbs();\n }\n }, {\n key: \"setupThumbs\",\n value: function setupThumbs() {\n // as the widths are calculated, we need to resize\n // the carousel when the window is resized\n (0, _window.default)().addEventListener('resize', this.updateSizes); // issue #2 - image loading smaller\n\n (0, _window.default)().addEventListener('DOMContentLoaded', this.updateSizes); // when the component is rendered we need to calculate\n // the container size to adjust the responsive behaviour\n\n this.updateSizes();\n }\n }, {\n key: \"destroyThumbs\",\n value: function destroyThumbs() {\n // removing listeners\n (0, _window.default)().removeEventListener('resize', this.updateSizes);\n (0, _window.default)().removeEventListener('DOMContentLoaded', this.updateSizes);\n }\n }, {\n key: \"getFirstItem\",\n value: function getFirstItem(selectedItem) {\n var firstItem = selectedItem;\n\n if (selectedItem >= this.state.lastPosition) {\n firstItem = this.state.lastPosition;\n }\n\n if (selectedItem < this.state.firstItem + this.state.visibleItems) {\n firstItem = this.state.firstItem;\n }\n\n if (selectedItem < this.state.firstItem) {\n firstItem = selectedItem;\n }\n\n return firstItem;\n }\n }, {\n key: \"renderItems\",\n value: function renderItems() {\n var _this2 = this;\n\n return this.props.children.map(function (img, index) {\n var itemClass = _cssClasses.default.ITEM(false, index === _this2.state.selectedItem);\n\n var thumbProps = {\n key: index,\n ref: function ref(e) {\n return _this2.setThumbsRef(e, index);\n },\n className: itemClass,\n onClick: _this2.handleClickItem.bind(_this2, index, _this2.props.children[index]),\n onKeyDown: _this2.handleClickItem.bind(_this2, index, _this2.props.children[index]),\n 'aria-label': \"\".concat(_this2.props.labels.item, \" \").concat(index + 1),\n style: {\n width: _this2.props.thumbWidth\n }\n };\n return /*#__PURE__*/_react.default.createElement(\"li\", _extends({}, thumbProps, {\n role: \"button\",\n tabIndex: 0\n }), img);\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this3 = this;\n\n if (!this.props.children) {\n return null;\n }\n\n var isSwipeable = _react.Children.count(this.props.children) > 1; // show left arrow?\n\n var hasPrev = this.state.showArrows && this.state.firstItem > 0; // show right arrow\n\n var hasNext = this.state.showArrows && this.state.firstItem < this.state.lastPosition; // obj to hold the transformations and styles\n\n var itemListStyles = {};\n var currentPosition = -this.state.firstItem * (this.state.itemSize || 0);\n var transformProp = (0, _CSSTranslate.default)(currentPosition, 'px', this.props.axis);\n var transitionTime = this.props.transitionTime + 'ms';\n itemListStyles = {\n WebkitTransform: transformProp,\n MozTransform: transformProp,\n MsTransform: transformProp,\n OTransform: transformProp,\n transform: transformProp,\n msTransform: transformProp,\n WebkitTransitionDuration: transitionTime,\n MozTransitionDuration: transitionTime,\n MsTransitionDuration: transitionTime,\n OTransitionDuration: transitionTime,\n transitionDuration: transitionTime,\n msTransitionDuration: transitionTime\n };\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.CAROUSEL(false)\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.WRAPPER(false),\n ref: this.setItemsWrapperRef\n }, /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n className: _cssClasses.default.ARROW_PREV(!hasPrev),\n onClick: function onClick() {\n return _this3.slideRight();\n },\n \"aria-label\": this.props.labels.leftArrow\n }), isSwipeable ? /*#__PURE__*/_react.default.createElement(_reactEasySwipe.default, {\n tagName: \"ul\",\n className: _cssClasses.default.SLIDER(false, this.state.swiping),\n onSwipeLeft: this.slideLeft,\n onSwipeRight: this.slideRight,\n onSwipeMove: this.onSwipeMove,\n onSwipeStart: this.onSwipeStart,\n onSwipeEnd: this.onSwipeEnd,\n style: itemListStyles,\n innerRef: this.setItemsListRef,\n allowMouseEvents: this.props.emulateTouch\n }, this.renderItems()) : /*#__PURE__*/_react.default.createElement(\"ul\", {\n className: _cssClasses.default.SLIDER(false, this.state.swiping),\n ref: function ref(node) {\n return _this3.setItemsListRef(node);\n },\n style: itemListStyles\n }, this.renderItems()), /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n className: _cssClasses.default.ARROW_NEXT(!hasNext),\n onClick: function onClick() {\n return _this3.slideLeft();\n },\n \"aria-label\": this.props.labels.rightArrow\n })));\n }\n }]);\n\n return Thumbs;\n}(_react.Component);\n\nexports.default = Thumbs;\n\n_defineProperty(Thumbs, \"displayName\", 'Thumbs');\n\n_defineProperty(Thumbs, \"defaultProps\", {\n axis: 'horizontal',\n labels: {\n leftArrow: 'previous slide / item',\n rightArrow: 'next slide / item',\n item: 'slide item'\n },\n selectedItem: 0,\n thumbWidth: 80,\n transitionTime: 350\n});","var baseAssignValue = require('./_baseAssignValue'),\n createAggregator = require('./_createAggregator');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n});\n\nmodule.exports = groupBy;\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","// src/css.ts\nvar idx = 0;\nvar css = () => {\n if (process.env.NODE_ENV === \"test\") {\n return `mocked-css-${idx++}`;\n }\n throw new Error(\n 'Using the \"css\" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly.'\n );\n};\nvar css_default = css;\n\n// src/cx.ts\nvar cx = function cx2() {\n const presentClassNames = Array.prototype.slice.call(arguments).filter(Boolean);\n const atomicClasses = {};\n const nonAtomicClasses = [];\n presentClassNames.forEach((arg) => {\n const individualClassNames = arg ? arg.split(\" \") : [];\n individualClassNames.forEach((className) => {\n if (className.startsWith(\"atm_\")) {\n const [, keyHash] = className.split(\"_\");\n atomicClasses[keyHash] = className;\n } else {\n nonAtomicClasses.push(className);\n }\n });\n });\n const result = [];\n for (const keyHash in atomicClasses) {\n if (Object.prototype.hasOwnProperty.call(atomicClasses, keyHash)) {\n result.push(atomicClasses[keyHash]);\n }\n }\n result.push(...nonAtomicClasses);\n return result.join(\" \");\n};\nvar cx_default = cx;\nexport {\n css_default as css,\n cx_default as cx\n};\n//# sourceMappingURL=index.mjs.map","// src/styled.ts\nimport validAttr from \"@emotion/is-prop-valid\";\nimport React from \"react\";\nimport { cx } from \"@linaria/core\";\nvar isCapital = (ch) => ch.toUpperCase() === ch;\nvar filterKey = (keys) => (key) => keys.indexOf(key) === -1;\nvar omit = (obj, keys) => {\n const res = {};\n Object.keys(obj).filter(filterKey(keys)).forEach((key) => {\n res[key] = obj[key];\n });\n return res;\n};\nfunction filterProps(asIs, props, omitKeys) {\n const filteredProps = omit(props, omitKeys);\n if (!asIs) {\n const interopValidAttr = typeof validAttr === \"function\" ? { default: validAttr } : validAttr;\n Object.keys(filteredProps).forEach((key) => {\n if (!interopValidAttr.default(key)) {\n delete filteredProps[key];\n }\n });\n }\n return filteredProps;\n}\nvar warnIfInvalid = (value, componentName) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof value === \"string\" || typeof value === \"number\" && isFinite(value)) {\n return;\n }\n const stringified = typeof value === \"object\" ? JSON.stringify(value) : String(value);\n console.warn(\n `An interpolation evaluated to '${stringified}' in the component '${componentName}', which is probably a mistake. You should explicitly cast or transform the value to a string.`\n );\n }\n};\nvar idx = 0;\nfunction styled(tag) {\n var _a;\n let mockedClass = \"\";\n if (process.env.NODE_ENV === \"test\") {\n mockedClass += `mocked-styled-${idx++}`;\n if ((_a = tag == null ? void 0 : tag.__linaria) == null ? void 0 : _a.className) {\n mockedClass += ` ${tag.__linaria.className}`;\n }\n }\n return (options) => {\n if (process.env.NODE_ENV !== \"production\" && process.env.NODE_ENV !== \"test\") {\n if (Array.isArray(options)) {\n throw new Error(\n 'Using the \"styled\" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly. See https://github.com/callstack/linaria#setup'\n );\n }\n }\n const render = (props, ref) => {\n const { as: component = tag, class: className = mockedClass } = props;\n const shouldKeepProps = options.propsAsIs === void 0 ? !(typeof component === \"string\" && component.indexOf(\"-\") === -1 && !isCapital(component[0])) : options.propsAsIs;\n const filteredProps = filterProps(shouldKeepProps, props, [\n \"as\",\n \"class\"\n ]);\n filteredProps.ref = ref;\n filteredProps.className = options.atomic ? cx(options.class, filteredProps.className || className) : cx(filteredProps.className || className, options.class);\n const { vars } = options;\n if (vars) {\n const style = {};\n for (const name in vars) {\n const variable = vars[name];\n const result = variable[0];\n const unit = variable[1] || \"\";\n const value = typeof result === \"function\" ? result(props) : result;\n warnIfInvalid(value, options.name);\n style[`--${name}`] = `${value}${unit}`;\n }\n const ownStyle = filteredProps.style || {};\n const keys = Object.keys(ownStyle);\n if (keys.length > 0) {\n keys.forEach((key) => {\n style[key] = ownStyle[key];\n });\n }\n filteredProps.style = style;\n }\n if (tag.__linaria && tag !== component) {\n filteredProps.as = component;\n return React.createElement(tag, filteredProps);\n }\n return React.createElement(component, filteredProps);\n };\n const Result = React.forwardRef ? React.forwardRef(render) : (props) => {\n const rest = omit(props, [\"innerRef\"]);\n return render(rest, props.innerRef);\n };\n Result.displayName = options.name;\n Result.__linaria = {\n className: options.class || mockedClass,\n extends: tag\n };\n return Result;\n };\n}\nvar styled_default = process.env.NODE_ENV !== \"production\" ? new Proxy(styled, {\n get(o, prop) {\n return o(prop);\n }\n}) : styled;\nexport {\n styled_default as styled\n};\n//# sourceMappingURL=index.mjs.map"],"names":["exports","outerWidth","el","width","style","_default","ClickOutsideContainer","event","node","onClickOutside","isOutsideClick","rest","baseIndexOf","arrayIncludes","array","value","length","module","objectProto","hasOwnProperty","baseHas","object","key","_classnames","_interopRequireDefault","obj","_defineProperty","customClassName","isSlider","axis","isSwiping","selected","previous","disabled","_react","_CSSTranslate","_utils","ownKeys","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","slideAnimationHandler","props","state","returnStyles","selectedItem","previousItem","lastPosition","needClonedSlide","currentPosition","transformProp","transitionTime","slideSwipeAnimationHandler","delta","setState","isHorizontal","childrenLength","initialBoundry","finalBoundry","axisDelta","handledDelta","position","hasMoved","slideStopSwipingHandler","itemListStyle","fadeAnimationHandler","transitionTimingFunction","slideStyle","_Carousel","_types","_Thumbs","arrayIncludesWith","comparator","index","isArrayLike","createBaseEach","eachFunc","fromRight","collection","iteratee","iterable","noop","defaultStatusFormatter","current","total","isKeyboardEvent","e","getPosition","setPosition","prop","arrayAggregator","baseAggregator","baseIteratee","isArray","createAggregator","setter","initializer","func","accumulator","useEventListener","eventName","handler","element","passive","capture","savedHandler","eventListener","whenDefined","result","PI","degreesToRadians","degrees","getSquareBB","posX","posY","squareSideLength","getSquareXPosFromAlign","alignment","containerX","containerWidth","horizontalPadding","squareWidth","getSquareWidth","maxSize","containerHeight","verticalPadding","pointIsWithinBB","x","y","bb","EditPencil","fg","Checkmark","useDebouncedMemo","factory","deps","time","mountedRef","debouncedSetState","debounce","rtlRange","ltrRange","rtl","direction","scrollbarWidthCache","getScrollBarWidth","inner","outer","w1","w2","empty","useStateWithReactiveInput","inputState","inputStateRef","forceRender","setStateOuter","nv","s","pv","onEmpty","makeAccessibilityStringForArray","arr","count","str","useDeepMemo","ref","d","b","z","v","w","l","c","t","n","r","o","f","a","g","m","u","M","C","R","p","T","_","k","useMappedColumns","columns","freezeColumns","gridSelectionHasItem","sel","item","col","row","itemsAreEqual","toCheck","isGroupEqual","left","right","cellIsSelected","location","cell","selection","itemIsInRect","rect","rectBottomRight","cellIsInRect","startX","endX","startY","endY","cellCol","cellRow","spanStart","spanEnd","cellIsInRange","includeSingleSelection","range","remapForDnDState","dndState","mappedCols","writable","temp","getStickyWidth","remapped","getFreezeTrailingHeight","rows","freezeTrailingRows","getRowHeight","getEffectiveColumns","cellXOffset","tx","sticky","endIndex","curX","getColumnIndexForX","targetX","effectiveColumns","translateX","cx","getRowIndexForY","targetY","height","hasGroups","headerHeight","groupHeaderHeight","rowHeight","cellYOffset","translateY","totalHeaderHeight","fr","rh","effectiveRows","ty","curY","metricsSize","metricsCache","isSSR","clearCacheOnLoad","makeCacheKey","ctx","baseline","font","measureTextCached","metrics","getMeasuredTextCache","getMiddleCenterBias","getMiddleCenterBiasInner","loadMetric","sample","biasCache","alphabeticMetrics","bias","drawLastUpdateUnderlay","args","lastUpdate","frameTime","lastPrep","isLastCol","isLastRow","theme","progress","animTime","fade","prepTextCell","overrideColor","newFill","drawTextCellExternal","data","contentAlign","drawTextCell","drawSingleTextLine","h","getEmHeight","fontStyle","textMetrics","truncateString","max","drawMultiLineText","hyperWrapping","split","emHeight","lineHeight","actualHeight","mustClip","optimalY","drawY","line","allowWrapping","isRtl","changed","roundedRect","radius","drawMenuDots","dotsX","dotsY","roundedPoly","points","radiusAll","asVec","pp","vx","vy","vlen","vnx","vny","len","p1","p2","p3","v1","v2","sinA","sinA90","angle","radDirection","drawDirection","halfAngle","lenOut","cRadius","computeBounds","mappedColumns","dir","freezeWidth","start","group","end","clip","dy","rowShift","packColRowToNumber","unpackCol","packed","unpackRow","unpackNumberToColRow","WindowingTrackerBase","colInWindow","rowInWindow","newWindow","freezeCols","freezeRows","RenderStateProvider","CellSet","items","cellNumber","getColors","variant","SpriteManager","headerIcons","onSettled","sprite","size","alpha","bgColor","fgColor","rSize","spriteCanvas","spriteCb","spriteCtx","imgSource","promise","getSkipPoint","drawRegions","drawRegionsLowestY","dr","walkRowsInCol","startRow","hasAppendRow","skipToY","cb","rowEnd","didBreak","walkColumns","effectiveCols","clipX","drawX","walkGroups","startCol","boxWidth","endCol","localX","getSpanBounds","span","cellX","cellY","cellW","cellH","column","allColumns","frozenRect","contentRect","firstNonSticky","renderFromCol","tempX","tempW","renderToCol","getClosestRect","px","py","allowedDirections","combineRects","distanceToLeft","distanceToRight","distanceToTop","distanceToBottom","minDistance","intersectRect","x1","y1","h1","x2","y2","h2","pointInRect","rectContains","hugRectToTarget","mod","leftMax","topMax","rightMax","bottomMax","leftOverflow","rightOverflow","topOverflow","bottomOverflow","top","bottom","splitRectIntoRegions","splitIndicies","splitLocations","lSplit","tSplit","rSplit","bSplit","lClip","tClip","rClip","bClip","inX","inY","inW","inH","inRight","inBottom","isOverLeft","isOverTop","isOverRight","isOverBottom","isOverCenterVert","isOverCenterHoriz","loadingCell","drawCells","getCellContent","getGroupDetails","getRowThemeOverride","disabledRows","isFocused","drawFocus","damage","prelightCells","highlightRegions","imageLoader","spriteManager","hoverValues","hoverInfo","drawCellCallback","outerTheme","enqueue","renderStateProvider","getCellRenderer","overrideCursor","minimumCellWidth","toDraw","deprepArg","cellIndex","freezeTrailingRowsHeight","handledSpans","skipPoint","colDrawStartY","diff","colDrawX","colDrawY","colWidth","colHeight","found","reclip","colSelected","groupTheme","colTheme","colFont","prepResult","isSticky","isTrailingRow","rowSelected","rowDisabled","cellWidth","drawingSpan","skipContents","spanKey","areas","area","rowTheme","trailingTheme","isSelected","accentCount","spanIsHighlighted","bgCell","fill","pre","region","didDamageClip","isLastColumn","hoverValue","hv","cellFont","drawCell","allocatedItem","reusableRect","drawState","animationFrameRequested","animRequest","highlighted","finalCellFillColor","hoverAmount","hoverX","hoverY","val","needsAnim","partialPrepResult","drawCheckbox","checked","centerY","rectBordRadius","checkBoxWidth","checkBoxHalfWidth","hovered","drawGridHeaders","enableGroups","dragAndDropState","isResizing","verticalBorder","drawHeaderCallback","touchMode","hCol","hRow","_y","noHover","hoveredBoolean","hover","hasSelectedCell","bgFillStyle","xOffset","drawHeader","drawGroups","_hoverValues","finalX","groupName","isHovered","fillColor","actionBoxes","getActionBoundsForGroup","fadeStartX","fadeWidth","grad","trans","mouseX","mouseY","action","box","actionHovered","menuButtonSize","getHeaderMenuBounds","actions","drawHeaderInner","menuBounds","xPad","fillStyle","shouldDrawMenu","dirScalar","headerSize","fadeStart","fadeEnd","fadeStartPercent","fadeEndPercent","triangleX","triangleY","iconX","iconY","drawBlanks","getRowTheme","selectedRows","blankTheme","overdrawStickyBoundaries","drawFreezeBorder","hColor","vColor","vStroke","hStroke","getMinMaxXY","minX","maxX","minY","maxY","drawExtraRowThemes","freezeY","extraRowsStartY","rowThemeBgCell","colThemeBgCell","color","drawGridLines","spans","verticalOnly","groups","groupBy","blitLastFrame","blitSource","blitSourceScroll","targetScroll","last","dpr","doubleBuffer","deltaY","deltaX","stickyWidth","blitWidth","blitHeight","blitResizedCol","resizedIndex","_drawY","computeCanBlit","resized","curCol","lastCol","curRest","lastWidth","lastRest","drawHighlightRings","allHighlightRegions","freezeLeft","freezeBottom","drawRects","arg","topLeftBounds","bottomRightBounds","drawCb","dashed","wasDashed","needsClip","drawColumnResizeOutline","yOffset","drawFillHandle","selectedCell","fillHandle","currentItem","fillHandleTarget","targetCol","targetRow","targetColSpan","isStickyRow","stickRowHeight","fillHandleRow","drawHandleCb","isBeforeTarget","isAfterTarget","isFillHandleCol","clipHeaderDamage","_group","_colDrawY","finalWidth","getLastRow","_c","__drawX","_clipX","_rh","drawGrid","lastArg","canvasCtx","headerCanvasCtx","resizeCol","lastBlitData","maxScaleFactor","renderStrategy","bufferACtx","bufferBCtx","canBlit","canvas","overlayCanvas","overlayHeight","bufferA","bufferB","mainCtx","overlayCtx","targetCtx","targetBuffer","mustDrawFocusOnHeader","mustDrawHighlightRingsOnHeader","drawHeaderTexture","viewRegionWidth","damageInView","doDamage","selectionCurrent","regions","highlightRedraw","focusRedraw","lastRowDrawn","scrollX","scrollY","hoverTime","easeOutCubic","AnimationManager","callback","leavingItem","hasLeavingItems","currentHoveredIsAnimating","timestamp","clamp","animating","Lazy","fn","lazy","browserIsFirefox","browserIsSafari","browserIsOSX","useAnimationQueue","draw","queue","seq","drawRef","loop","requeue","headerKind","groupHeaderKind","outOfBoundsKind","OutOfBoundsRegionAxis","mouseEventArgsAreEqual","other","fillHandleClickSize","getRowData","DataGrid","forwardedRef","accessibilityHeight","cellXOffsetReal","onHeaderMenuClick","isFilling","onCanvasFocused","onCanvasBlur","onContextMenu","fixedShadowX","fixedShadowY","drawFocusRing","onMouseDown","onMouseUp","onMouseMoveRaw","onMouseMove","onItemHovered","firstColAccessible","onKeyDown","onKeyUp","canvasRef","onDragStart","onDragEnd","eventTargetRef","isDragging","isDraggable","allowResize","onCellFocused","onDragOverCell","onDrop","onDragLeave","imageWindowLoader","smoothScrollX","smoothScrollY","experimental","damageRegion","scrolling","setScrolling","hoveredItemInfo","setHoveredItemInfo","hoveredOnEdge","setHoveredOnEdge","overlayRef","drawCursorOverride","setDrawCursorOverride","lastWasTouch","setLastWasTouch","lastWasTouchRef","lastArgsRef","lastDrawRef","scrollingStopRef","enableFirefoxRescaling","enableSafariRescaling","stickyX","getBoundsForItem","scale","getMouseArgsForPosition","ev","edgeDetectionBuffer","button","buttons","shiftKey","ctrlKey","metaKey","isTouch","scrollEdge","horizontal","vertical","innerHorizontal","innerVertical","isEdge","isMaybeScrollbar","bounds","previousCol","isFillHandle","fillHandleLocation","fillHandleCellBounds","handleLogicalCenterX","handleLogicalCenterY","hoveredItem","enqueueRef","hoverInfoRef","maxDPR","overlay","didOverride","cursor","name","damageInternal","locations","cells","overFill","setOverFill","headerHovered","groupHeaderHovered","clickableInnerCellHovered","editableBoolHovered","cursorOverride","lastSetCursor","groupHeaderActionForEvent","localEventX","localEventY","groupDesc","boxes","isOverHeaderMenu","clientX","clientY","header","headerBounds","downTime","downPosition","mouseDown","onMouseDownImpl","eventTarget","lastUpTime","onMouseUpImpl","lastUpTimeValue","isOutside","canCancel","onClickImpl","onContextMenuImpl","onAnimationFrame","values","animManagerValue","animationManager","am","cellNeedsHover","hoveredRef","onMouseMoveImpl","isIndirect","maybeSetHoveredInfo","newVal","needPosition","cv","needsDamageCell","needsHoverPosition","newInfo","notRowMarkerCol","onKeyDownImpl","onKeyUpImpl","refImpl","instance","onDragStartImpl","dragMime","dragData","setData","mime","payload","dragImage","dragImageX","dragImageY","setDragImage","image","prevented","offscreen","boundsForDragTarget","activeDropTarget","onDragOverImpl","rawCol","activeCol","activeRow","onDragEndImpl","onDropImpl","onDragLeaveImpl","selectionRef","focusRef","focusElement","lastFocusedSubdomNode","accessibilityTree","colOffset","fCol","fRow","visibleCols","visibleRows","focused","id","cellContent","opacityX","absoluteOffsetY","opacityY","stickyShadow","styleX","styleY","overlayStyle","offsetColumnSize","min","resizeColStartX","setResizeColStartX","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","onColumnProposeMove","canResize","selectedColumns","onItemHoveredImpl","canDragCol","onHeaderMenuClickMangled","screenPosition","lastResizeWidthRef","clearAll","newSize","ns","dragOffset","newWidth","getMangledCellContent","forceStrict","useResizeDetector","initialSize","setSize","resizeCallback","entries","entry","resizeObserver","isEnabled","targetScroller","rafId","isTouching","lastScrollPosition","sameCount","callbackRef","scrollEl","handleScroll","currentScrollPosition","startTouch","endTouch","_exp","ScrollRegionStyle","useTouchUpDelayed","delay","hasTouches","setHasTouches","safeWindow","cbTimer","InfiniteScroller","children","clientHeight","scrollHeight","scrollWidth","update","draggable","className","preventDiagonalScrolling","paddingBottom","paddingRight","rightElement","rightElementProps","kineticScrollPerfHack","scrollRef","padders","rightElementSticky","rightElementFill","offsetY","lastScrollY","scroller","rightWrapRef","isIdle","setIsIdle","idleTimer","lx","ly","onScroll","scrollLeft","scrollTop","lastScrollTop","lastScrollLeft","dx","lock","cWidth","cHeight","newY","scrollableHeight","prog","recomputed","onScrollRef","lastProps","didFirstScroll","setRefs","toAdd","nonGrowWidth","clientSize","onVisibleRegionChanged","overscrollX","overscrollY","clientWidth","lastX","lastY","lastSize","lastArgs","processArgs","cellRight","stickyColWidth","cellBottom","cy","oldRect","onScrollUpdate","SearchWrapper","upArrow","downArrow","closeX","targetSearchTimeMS","searchInputRef","searchValue","searchResultsIn","onSearchValueChange","getCellsForSelection","onSearchResultsChanged","showSearch","onSearchClose","searchID","searchStringInner","setSearchStringInner","searchString","setSearchString","searchStatus","setSearchStatus","searchStatusRef","abortControllerRef","searchHandle","searchResultsInner","setSearchResultsInner","searchResults","cancelSearch","cellYOffsetRef","beginSearch","regex","searchStride","rowsSearched","runningResult","tick","tStart","rowsLeft","added","testString","tEnd","selectedIndex","tElapsed","rounded","scalar","onClose","onSearchChange","onNext","newIndex","onPrev","onSearchKeyDown","isAnimatingOut","setIsAnimatingOut","timeoutId","searchbox","resultString","cancelEvent","progressStyle","RenameInput","GroupRename","canvasBounds","onFinish","setValue","defaultSize","measureCell","measureColumn","colIndex","selectedData","removeOutliers","sizes","sum","average","final","useColumnSizer","abortController","rowsRef","getCellsForSelectionRef","themeRef","memoMap","lastColumns","setSelectionData","getCells","computeRows","tailRows","computeArea","tailComputeArea","getResult","tailGetResult","toSet","totalWidth","totalGrow","distribute","writeable","extra","remaining","di","weighted","checkKey","isHotkey","hotkey","details","isHotkeyInner","parts","part","wantCtrl","wantShift","wantAlt","wantMeta","accel","useSelectionBehavior","gridSelection","setGridSelection","rangeBehavior","columnBehavior","rowBehavior","rangeSelect","setCurrent","expand","append","trigger","rangeMixable","allowColumnCoSelect","allowRowCoSelect","setSelectedRows","newRows","allowMixed","rangeMixed","columnMixed","setSelectedColumns","newCols","rowMixed","useCellsForSelection","getCellsForSelectionIn","rowMarkerOffset","getCellsForSelectionDirectWhenValid","getCellsForSelectionDirect","getCellsForSelectionMangled","newRect","convertCellToBuffer","createBufferFromGridCells","columnIndexes","mappedIndex","escapeIfNeeded","withComma","createTextBuffer","copyBuffer","lines","formatHtmlTextContent","text","match","formatHtmlAttributeContent","attrText","restoreHtmlEntities","createHtmlBuffer","formatStr","ind","getCopyBufferContents","textPlain","textHtml","decodeHTML","html","fragment","tableEl","walkEl","clone","para","isAppleNumbers","brs","br","attributeValue","formatValue","rawValues","textContent","expandSelection","spanRangeBehavior","origVal","isFilled","leftCells","rightCells","rCells","descape","unquote","State","char","copyToClipboard","copyWithWriteText","copyWithWrite","copyWithClipboardData","toggleBoolean","toCss","_exp2","Wrapper","DataEditorContainer","inWidth","inHeight","maxPxPerMs","msToFullSpeed","useAutoscroll","scrollDirection","speedScalar","xDir","yDir","cancelled","lastTime","scrollFn","curTime","step","motion","useRemAdjuster","rowHeightIn","headerHeightIn","groupHeaderHeightIn","themeIn","overscrollXIn","overscrollYIn","scaleToRem","remSize","scaler","bt","keybindingDefaults","realizeKeybind","keybind","defaultVal","realizeKeybinds","keybinds","isOSX","useKeybindingsWithDefaults","keybindingsIn","withBackCompatApplied","DataGridOverlayEditor","idCounter","getSpanStops","uniq","flatten","shiftSelection","input","offset","emptyGridSelection","DataEditorImpl","gridSelectionInner","setGridSelectionInner","setOverlay","mouseState","setMouseState","lastSent","imageEditorOverride","markdownDivCreateNode","columnsIn","onCellClicked","onCellActivated","onFillPattern","onFinishedEditing","coercePasteValue","drawHeaderIn","drawCellIn","editorBloom","onHeaderClicked","onGroupHeaderClicked","onCellContextMenu","onHeaderContextMenu","onGroupHeaderContextMenu","onGroupHeaderRenamed","onCellEdited","onCellsEdited","onSearchResultsChangedIn","onKeyDownIn","onKeyUpIn","editOnType","onRowAppended","validateCellIn","highlightRegionsIn","columnSelect","rowSelect","rangeSelectionBlending","columnSelectionBlending","rowSelectionBlending","onDeleteIn","onPaste","copyHeaders","cellActivationBehavior","rowSelectionMode","onSearchCloseIn","onSelectionCleared","showSearchIn","gridSelectionOuter","onGridSelectionChange","minColumnWidthIn","maxColumnWidthIn","maxColumnAutoWidthIn","provideEditor","trailingRowOptions","allowedFillDirections","scrollOffsetX","scrollOffsetY","onColumnResizeIn","onColumnResizeEndIn","onColumnResizeStartIn","additionalRenderers","trapFocus","renderers","rowMarkersObj","rowMarkers","rowMarkerWidthRaw","rowMarkerStartIndex","rowMarkerTheme","rowMarkerCheckboxStyle","maxColumnAutoWidth","docStyle","keybindings","rowMarkerWidth","hasRowMarkers","showTrailingBlankRow","lastRowSticky","showSearchInner","setShowSearchInner","getCellsForSeletionDirect","validateCell","newValue","prevValue","expectedExternalGridSelection","wg","onDelete","mergedTheme","setClientSize","rendererMap","numSelectedRows","rowMarkerChecked","mangledCols","visibleRegionY","visibleRegionTy","visibleRegionRef","visibleRegionInput","hasJustScrolled","visibleRegion","setVisibleRegion","vScrollReady","hScrollReady","focus","immediate","mangledRows","mangledOnCellsEdited","mangledItems","fillHighlightRegion","setFillHighlightRegion","highlightRange","highlightFocus","highlightFocusCol","highlightFocusRow","maxWidth","mangledColsRef","isTrailing","maybeFirstColumnHint","hint","icon","outerCol","vr","isOutsideMainArea","isInFreezeArea","mangledGetGroupDetails","setRenameGroup","setOverlaySimple","reselect","fromKeyboard","initialValue","content","focusOnRowFromTrailingBlankRow","scrollTo","paddingX","paddingY","options","grid","trueCol","trueRow","desiredX","desiredY","targetRect","scrollBounds","frozenWidth","trailingRowHeight","freezeTrailingRowsEffective","sLeft","sRight","sTop","sBottom","minx","miny","focusCallback","getCellContentRef","appendRow","openOverlay","appendResult","backoff","doFocus","scrollToRef","getCustomNewRowTargetColumn","customTargetColumn","maybeIndex","lastSelectedRowRef","lastSelectedColRef","themeForCell","pos","handleSelect","isMultiKey","isMultiRow","isMultiCol","lastMouseSelectLocation","markerCell","renderer","postClick","lastHighlighted","newSlice","isLastStickyRow","startedFromLastSticky","isActivelyDraggingHeader","touchDownArgs","mouseDownData","isPrevented","fh","renameGroup","handleGroupHeaderSelection","needle","normalSizeColumn","inputCol","newCol","scrollDir","setScrollDir","fillPattern","previousSelection","currentSelection","patternRange","currentRange","canceled","pattern","editItemList","patternCell","fillRight","firstColSelection","fillDown","firstRowSelection","mouse","newRange","lastMouseDownCol","lastMouseDownRow","preventDefault","handleMaybeClick","isValidClick","shouldActivate","selectedCol","selectedRow","prevCol","prevRow","clickLocation","touchVr","onHeaderMenuClickInner","currentCell","onVisibleRegionChangedImpl","rightElWidth","freezeRegion","freezeRegions","newRegion","onColumnMovedImpl","startIndex","isActivelyDragging","prevRange","adjustSelectionOnScroll","visible","adjustSelection","old","disallowed","done","updateSelectedCell","fromEditingTrailingRow","freeMove","rowMax","newStack","onFinishEditing","movement","movX","movY","isEditingTrailingRow","overlayID","deleteRange","editList","cellValue","toDelete","editor","overlayOpen","handleFixedKeybindings","cancel","callbackResult","cancelOnlyOnMove","moved","didMatch","adjustedCol","onPasteInternal","pasteToCell","rawValue","formatted","stringifiedRawValue","coerced","clipboardContent","decoded","cellData","dataRow","dataItem","writeCol","writeRow","onCopy","ignoreFocus","copyToClipboardWithHeaders","headers","thunk","rowIndex","settled","results","cols","toCopy","onCut","effectiveSelection","onDeleteResult","navIndex","outCol","outRow","selectionOutOfBounds","mangledVerticalBorder","renameGroupNode","mangledFreezeColumns","damageList","selCol","selRow","setIsFocused","setIsFocusedDebounced","onFocusOut","idealWidth","idealHeight","scrollbarWidth","rowsCountWithTrailingRow","avg","toAverage","acc","cssStyle","DataEditor","defaultCellMaxSize","booleanCellRenderer","drawBoolean","pointerX","pointerY","cellCenterY","checkBoxClicked","toPaste","canEdit","hoverEffect","BubblesOverlayEditorStyle","bubbles","bubbleCellRenderer","drawBubbles","itemMargin","bubbleHeight","bubblePad","bubbleMargin","renderX","renderBoxes","textWidth","rectInfo","DrilldownOverlayEditorStyle","drilldowns","drilldownCellRenderer","drawDrilldownCell","drilldownCache","getAndCacheDrilldownBorder","border","rounding","shadowBlur","targetHeight","middleWidth","innerHeight","sideWidth","targetWidth","innerWidth","tileMap","imgWidth","renderWidth","padding","outerSideWidth","outerPadding","rx","rw","outerMiddleWidth","img","imgSize","srcX","srcY","srcWidth","srcHeight","ImageOverlayEditorStyle","ImageOverlayEditor","urls","canWrite","onEditClick","renderImage","filtered","allowMove","url","innerContent","imageCellRenderer","drawImage","_ctx","ImageEditor","newImage","uris","imgHeight","images","getRandomNumber","seed","loadingCellRenderer","hpad","rectHeight","MarkdownContainer","MarkdownDiv","targetElement","contents","createNode","innerHTML","childRange","newChild","childDoc","tags","tag","InputBox","ShadowBox","GrowingEntryStyle","globalInputID","GrowingEntry","placeholder","highlight","altNewline","validatedSelection","onChange","inputRef","useText","inputID","ta","onKeyDownInner","MarkdownOverlayEditorStyle","MarkdownOverlayEditor","forceEditMode","markdown","readonly","editMode","setEditMode","addLeftPad","markdownCellRenderer","firstLine","markerCellRenderer","prepMarkerRowCell","drawMarkerRowCell","centerX","newFont","deprepMarkerRowCell","markerKind","drawHandle","checkedboxAlpha","offsetAmount","newRowCellRenderer","drawNewRowCell","alwaysShowIcon","textX","finalLineSize","lineSize","xTranslate","padPlus","NumberOverlayEditor","numberCellRenderer","isHighlighted","newNumber","protectedCellRenderer","drawProtectedCell","xStart","center","q","rowIDCellRenderer","textCellRenderer","textCell","displayData","padX","padY","maxH","maxLineWidth","UriOverlayEditorStyle","uri","preview","getTextRect","uriCellRenderer","uriCell","txt","isLinky","textRect","middleCenterBias","underlineOffset","AllCellRenderers","iconHead","headerRowID","bg","headerCode","headerNumber","headerString","headerBoolean","headerUri","sprites","imgPool","ImageWindowLoaderImpl","imageLoaded","throttle","keep","j","loaded","loadPromise","toWrite","DataEditorAllImpl","allSprites","DataEditorAll","SimpleInput","onBlur","AddColumn","divStyle","onColumnInputBlur","showInput","setShowInput","setupColumnInput","columnName","isDatagridEnabled","config","HEADER_FONT_FAMILY","CELL_FONT_FAMILY","TEXT_CANVAS","CELL_PADDING","MAX_COLUMN_WIDTH","ICON_AND_MENU_WIDTH","ROW_MARKER_BOTH","ROW_MARKER_NUMBER","DEFAULT_CONTEXT_MENU","DEFAULT_RENAME_INPUT_DATA","INTERACTION_EVENT_NAME","INTERACTION_ITEM","EMPTY_DF","EMPTY_CELL","EMPTY_GRID_SELECTION","TRAILING_ROW_OPTIONS","RIGHT_ELEMENT_PROPS","updateSnapshot","frame","updateData","getTextWidth","isHeader","context","getCellWidth","field","deleteRows","gridData","hardDelete","copy","valuesArray","clearCellsFromRangeSelection","colFrom","rowFrom","colTo","cleanStringFieldAfterConversion","getGridTheme","getGridCellKind","hasGridSelection","getStyles","isResizeInProgress","DatagridActionType","initialState","typeToIconMap","datagridReducer","columnResizeStartPayload","columnMovePayload","widthFrom","fromColumn","updateColumnsPayload","openCellContextMenuPayload","cellEvent","openHeaderContextMenuPayload","headerEvent","openHeaderDropdownMenuPayload","multipleCellsSelectedPayload","columnFreezeChangedPayload","DatagridContextMenu","menuData","saveData","closeContextMenu","dispatch","columnFreezeIndex","renameColumnClicked","isHeaderMenu","rowDeletionLabel","columnDeletionLabel","showDeleteRow","showDeleteColumn","showClearRow","showClearColumn","renderContextMenuItems","MenuItem","MenuDivider","renderHeaderMenuItems","fieldType","fieldTypeConversionData","addToConversionData","columnFreezeLabel","columnIndex","MenuGroup","conversionData","convertFieldType","ContextMenu","RenameColumnCell","renameColumnData","classStyle","inputValue","columnIdx","styles","setStyles","collisions","Portal","DataGridPanel","fieldConfig","onUpdateData","contextMenuData","renameColumnInputData","toggleSearch","gridTheme","frameCopy","addNewRow","fields","newSizeWithGrow","onDeletePressed","copiedFrame","onColumnMove","from","to","onRowMove","onColumnRename","onRenameInputBlur","onContextMenuSave","PanelDataErrorView","portal","defaultOptions","PanelPlugin","builder","seriesOptions","idx","Set","setToArray","INFINITY","createSet","metric","positionPercent","positionCss","transitionProp","translatedPosition","SetCache","cacheHas","LARGE_ARRAY_SIZE","baseUniq","includes","isCommon","seen","set","computed","seenIndex","_propTypes","setHasSupportToCaptureOption","_react2","_propTypes2","_extends","_objectWithoutProperties","_classCallCheck","Constructor","_createClass","defineProperties","descriptor","protoProps","staticProps","_possibleConstructorReturn","self","call","_inherits","subClass","superClass","supportsCaptureOption","hasSupport","getSafeEventHandlerOpts","_event$touches$","pageX","pageY","screenX","screenY","ReactSwipe","_Component","_ref","_len","_key","_this","_getPosition","_getPosition2","shouldPreventDefault","tolerance","_props","tagName","allowMouseEvents","onSwipeUp","onSwipeDown","onSwipeLeft","onSwipeRight","onSwipeStart","onSwipeMove","onSwipeEnd","innerRef","hasPath","has","path","baseEach","BooleanEmpty","BooleanIndeterminate","GridCellKind","GridColumnIcon","GridColumnMenuIcon","isSizedGridColumn","resolveCellsThunk","isEditableGridCell","isTextEditableGridCell","isInnerOnlyCell","InnerGridCellKind","isReadWriteCell","isRectangleEqual","isObjectEditorCallbackResult","booleanCellIsEditable","mergeRanges","ranges","stack","emptyCompactSelection","CompactSelection","amount","newItems","slice","selMin","selMax","predicate","_reactSwipe","_reactSwipe2","_interopRequireWildcard","_reactEasySwipe","_cssClasses","_document","_window","_animations","_getRequireWildcardCache","cache","_typeof","newObj","hasPropertyDescriptor","desc","_defineProperties","_setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_assertThisInitialized","Carousel","_React$Component","_super","keyNames","nextKey","prevKey","firstItem","itemSize","animationHandlerResponse","positions","slideImages","onImageLoad","displayItem","initState","prevProps","prevState","_this2","initialImage","carouselWrapper","_this$carouselWrapper","isClone","_this3","isPrevious","slideProps","_this4","_this$props","showIndicators","labels","renderIndicator","_this5","isSwipeable","canShowArrows","hasPrev","hasNext","itemsClone","firstClone","lastClone","swiperProps","containerStyles","itemHeight","onClickHandler","label","div","createDiv","parseToRgba","normalizedColor","control","computedColor","withAlpha","blendResultCache","blendCache","background","cacheKey","maybe","blend","ba","ao","ro","go","bo","interpolateColors","leftColor","rightColor","hScaler","nScaler","getLuminance","channel","proveType","_val","panic","message","assert","fact","assertNever","_never","msg","defaultValue","deepEqual","foo","bar","ctor","makeCSSStyle","dataEditorBaseTheme","getDataEditorTheme","ThemeContext","useTheme","mergeAndRealizeTheme","overlays","merged","baseClamp","toNumber","number","lower","upper","baseForOwn","_dimensions","Thumbs","wrapperSize","visibleItems","showArrows","_state","leftBoundary","lastLeftItem","lastLeftBoundary","itemClass","thumbProps","itemListStyles","baseAssignValue","memoize","reactPropsRegex","isPropValid","css","css_default","presentClassNames","atomicClasses","nonAtomicClasses","keyHash","cx_default","isCapital","ch","filterKey","omit","res","filterProps","asIs","omitKeys","filteredProps","interopValidAttr","warnIfInvalid","componentName","styled","_a","mockedClass","render","component","shouldKeepProps","vars","variable","unit","ownStyle","Result","styled_default"],"sourceRoot":""}
.
Edit
..
Edit
1117.145ac642f59357bc40d8.js
Edit
1117.145ac642f59357bc40d8.js.map
Edit
1118.c684d1aadf16a6c70620.js
Edit
1118.c684d1aadf16a6c70620.js.map
Edit
1122.5fbf0d7cd148c610616d.js
Edit
1122.5fbf0d7cd148c610616d.js.map
Edit
1142.a4b35a0e8699cafd901e.js
Edit
1142.a4b35a0e8699cafd901e.js.map
Edit
1162.81868b3ac499fa5ea04b.js
Edit
1162.81868b3ac499fa5ea04b.js.map
Edit
1183.7444f51e5996a7f23c7d.js
Edit
1183.7444f51e5996a7f23c7d.js.map
Edit
1282.ae38cac1b732d8ac1d96.js
Edit
1282.ae38cac1b732d8ac1d96.js.map
Edit
130.a58aaeea748f37ee6482.js
Edit
130.a58aaeea748f37ee6482.js.map
Edit
1419.59f53ae25085b28e1e11.js
Edit
1419.59f53ae25085b28e1e11.js.map
Edit
1420.e63ce495727f83b8887d.js
Edit
1420.e63ce495727f83b8887d.js.map
Edit
1438.ccdd05d7188edf4191ff.js
Edit
1438.ccdd05d7188edf4191ff.js.map
Edit
1446.fe7b1f4563629b80793f.js
Edit
1446.fe7b1f4563629b80793f.js.map
Edit
1484.3da94e44ecdadcd342d4.js
Edit
1484.3da94e44ecdadcd342d4.js.map
Edit
1492.4026c6e7130c3afdae87.js
Edit
1494.ef220afb67ff6c52c7af.js
Edit
1494.ef220afb67ff6c52c7af.js.map
Edit
1560.538cd2395be11ba4e2c9.js
Edit
1560.538cd2395be11ba4e2c9.js.map
Edit
1579.c391ef869d4f7bfc0d1c.js
Edit
1579.c391ef869d4f7bfc0d1c.js.map
Edit
1646.d7d87a40853795910533.js
Edit
1646.d7d87a40853795910533.js.map
Edit
1710.7db3f56c6714c0c340e0.js
Edit
1710.7db3f56c6714c0c340e0.js.map
Edit
1716.f71f518289da5d2229bc.js
Edit
1716.f71f518289da5d2229bc.js.map
Edit
1740.baf38e7ee007e1a6935e.js
Edit
1740.baf38e7ee007e1a6935e.js.map
Edit
1821.c9a2456dc8d78cf6b02f.js
Edit
1821.c9a2456dc8d78cf6b02f.js.map
Edit
1888.d33142738af4fbf8a230.js
Edit
1888.d33142738af4fbf8a230.js.map
Edit
1914.5f33b3c2133b5bb7ea6e.js
Edit
1914.5f33b3c2133b5bb7ea6e.js.map
Edit
198.65a768ff6c601d19ea3f.js
Edit
198.65a768ff6c601d19ea3f.js.map
Edit
1990.9171129a8deabb59bf30.js
Edit
1990.9171129a8deabb59bf30.js.map
Edit
2018.5ff00ee0456301c1cf43.js
Edit
2018.5ff00ee0456301c1cf43.js.map
Edit
205.2eb73847215c8d021cc9.js
Edit
205.2eb73847215c8d021cc9.js.map
Edit
2077.a5848ca4b4b9fdebca17.js
Edit
2077.a5848ca4b4b9fdebca17.js.map
Edit
2094.97e7f0876201e76a77fd.js
Edit
2094.97e7f0876201e76a77fd.js.map
Edit
2150.7576285186c713978b39.js
Edit
2150.7576285186c713978b39.js.map
Edit
2152.b55841e6f422682a3891.js
Edit
2152.b55841e6f422682a3891.js.map
Edit
221.0fc4d14d0a67f3a25d64.js
Edit
221.0fc4d14d0a67f3a25d64.js.map
Edit
2218.623d73bd0985ddf5f8c4.js
Edit
2218.623d73bd0985ddf5f8c4.js.map
Edit
2223.e65417164a45701ed9dc.js
Edit
2223.e65417164a45701ed9dc.js.map
Edit
2244.70c156ada2487a05595c.js
Edit
2244.70c156ada2487a05595c.js.map
Edit
2278.f887de0a65e1b784ea9f.js
Edit
2278.f887de0a65e1b784ea9f.js.map
Edit
2288.6a65ba08c6c0f4f83435.js
Edit
2288.6a65ba08c6c0f4f83435.js.map
Edit
2311.73e1a2b949d289f5d6c9.js
Edit
2311.73e1a2b949d289f5d6c9.js.map
Edit
2398.d142e32be48079fc63c0.js
Edit
2398.d142e32be48079fc63c0.js.map
Edit
2405.c1b37a7cc8182472f6a6.js
Edit
2405.c1b37a7cc8182472f6a6.js.map
Edit
2446.0418c7ea000998178d8b.js
Edit
2446.0418c7ea000998178d8b.js.map
Edit
2450.d73c024ff7273aebf911.js
Edit
2450.d73c024ff7273aebf911.js.map
Edit
2586.668c65b61e9ea31b5bca.js
Edit
2586.668c65b61e9ea31b5bca.js.map
Edit
265.ed6933785cc750cbd9ed.js
Edit
265.ed6933785cc750cbd9ed.js.map
Edit
2658.7f70ebc378803654a814.js
Edit
2658.7f70ebc378803654a814.js.map
Edit
2686.ae267304ddd1380c30c7.js
Edit
2686.ae267304ddd1380c30c7.js.map
Edit
2692.fa24ada7d987a7ee05f1.js
Edit
2692.fa24ada7d987a7ee05f1.js.map
Edit
2699.b79e57051a1a63376320.js
Edit
2699.b79e57051a1a63376320.js.map
Edit
2710.e1ac8e57578a838f5bd8.js
Edit
2710.e1ac8e57578a838f5bd8.js.map
Edit
2744.d6b14bf01022bdb8eab5.js
Edit
2744.d6b14bf01022bdb8eab5.js.map
Edit
2745.8049d948cb362dfc6cb3.js
Edit
2745.8049d948cb362dfc6cb3.js.map
Edit
2835.01beb5b1a252d779aad7.js
Edit
2835.01beb5b1a252d779aad7.js.map
Edit
2961.4b27b21453fdbb115dd4.js
Edit
2961.4b27b21453fdbb115dd4.js.map
Edit
2962.85c9dc0cca68efab5e0c.js
Edit
2962.85c9dc0cca68efab5e0c.js.map
Edit
2975.e64aaea6ff35a7d3b3fd.js
Edit
2975.e64aaea6ff35a7d3b3fd.js.map
Edit
3003.f51365051eb27cf765d8.js
Edit
3003.f51365051eb27cf765d8.js.map
Edit
3042.44bad7d2d0536000b808.js
Edit
3042.44bad7d2d0536000b808.js.map
Edit
3062.ad5844391370fcc7525a.js
Edit
3062.ad5844391370fcc7525a.js.map
Edit
3082.704af6779ad700a5fa42.js
Edit
3082.704af6779ad700a5fa42.js.map
Edit
3096.aed61083f1ba4803ae84.js
Edit
3096.aed61083f1ba4803ae84.js.map
Edit
3126.10c85e1f02105e470a69.js
Edit
3126.10c85e1f02105e470a69.js.map
Edit
3169.0b88a5a2340f70961599.js
Edit
3169.0b88a5a2340f70961599.js.map
Edit
3171.c79c28e2611563e2dbcb.js
Edit
3171.c79c28e2611563e2dbcb.js.map
Edit
3182.831f754ed3b6f10441a0.js
Edit
3182.831f754ed3b6f10441a0.js.map
Edit
3192.2cb90eadf3399270363e.js
Edit
3192.2cb90eadf3399270363e.js.map
Edit
3217.c6faaa4f5637068f90f3.js
Edit
3217.c6faaa4f5637068f90f3.js.map
Edit
3259.c8e4d6ad93201a56e49f.js
Edit
3259.c8e4d6ad93201a56e49f.js.map
Edit
3284.79c2897655286b0c1f6d.js
Edit
3284.79c2897655286b0c1f6d.js.map
Edit
3303.225dae64cff0c2280c3b.js
Edit
3303.225dae64cff0c2280c3b.js.map
Edit
3326.cabc370d66d7ecfbd2c3.js
Edit
3326.cabc370d66d7ecfbd2c3.js.map
Edit
344.85cff3029cbbb5463c7e.js
Edit
344.85cff3029cbbb5463c7e.js.map
Edit
3466.fda7da0cb4150e59da98.js
Edit
3466.fda7da0cb4150e59da98.js.map
Edit
3474.74dfd856a9528c758a57.js
Edit
3474.74dfd856a9528c758a57.js.map
Edit
348.fd20e2547f12dbed76c7.js
Edit
348.fd20e2547f12dbed76c7.js.map
Edit
3495.9c1ae6f61edf7aef207b.js
Edit
3495.9c1ae6f61edf7aef207b.js.map
Edit
3501.a0ee7c2b24136aa91eb5.js
Edit
3501.a0ee7c2b24136aa91eb5.js.map
Edit
3520.a3c2b474e2dcaf9879fc.js
Edit
3520.a3c2b474e2dcaf9879fc.js.map
Edit
3605.41e3c44dfe2ca2966198.js
Edit
3605.41e3c44dfe2ca2966198.js.map
Edit
362.e5ce68af98ee6713a4e7.js
Edit
362.e5ce68af98ee6713a4e7.js.map
Edit
3622.0b196041f825b42c5233.js
Edit
3622.0b196041f825b42c5233.js.map
Edit
3630.1ffe9229d5c27fd0823a.js
Edit
3630.1ffe9229d5c27fd0823a.js.map
Edit
3659.f5dc1bb19d36546aadb8.js
Edit
3659.f5dc1bb19d36546aadb8.js.map
Edit
3688.ec5e74c60569e9498687.js
Edit
3688.ec5e74c60569e9498687.js.map
Edit
3718.b570aa4fa35f8dfc686e.js
Edit
3718.b570aa4fa35f8dfc686e.js.map
Edit
3726.84ef8bb1304f7adbc7f3.js
Edit
3726.84ef8bb1304f7adbc7f3.js.map
Edit
398.ceeafcf522343c717c4b.js
Edit
398.ceeafcf522343c717c4b.js.map
Edit
4064.e52eb763993ad947e4a1.js
Edit
4064.e52eb763993ad947e4a1.js.map
Edit
407.594046bd73cc88c29e80.js
Edit
407.594046bd73cc88c29e80.js.map
Edit
4113.3fa5432815c4662eb03e.js
Edit
4113.3fa5432815c4662eb03e.js.map
Edit
4114.c4741f0a73781d3f87dc.js
Edit
4114.c4741f0a73781d3f87dc.js.map
Edit
4120.968e1408d894f8515330.js
Edit
4120.968e1408d894f8515330.js.map
Edit
4162.8b8a683fa98d677f9137.js
Edit
4162.8b8a683fa98d677f9137.js.map
Edit
4209.de7f2b850ee1292a67e5.js
Edit
4209.de7f2b850ee1292a67e5.js.map
Edit
4224.cc13db0c6e3f7fdb05c9.js
Edit
4224.cc13db0c6e3f7fdb05c9.js.map
Edit
4251.28e90ad13c8fe749062c.js
Edit
4251.28e90ad13c8fe749062c.js.map
Edit
4334.396d65b7ba31733108e9.js
Edit
4334.396d65b7ba31733108e9.js.map
Edit
4350.6db49924324f8061d361.js
Edit
4350.6db49924324f8061d361.js.map
Edit
4463.24a3e34bed64cbbb8b99.js
Edit
4463.24a3e34bed64cbbb8b99.js.map
Edit
4514.03e966fee9064d7305dd.js
Edit
4514.03e966fee9064d7305dd.js.map
Edit
4564.ea4a09ba96ddbf74a0ee.js
Edit
4564.ea4a09ba96ddbf74a0ee.js.map
Edit
46.7809585ddbb4791e248a.js
Edit
46.7809585ddbb4791e248a.js.map
Edit
4630.54d7f3b9d384c6b95bbc.js
Edit
4630.54d7f3b9d384c6b95bbc.js.map
Edit
4656.a07d832134b096826a58.js
Edit
4656.a07d832134b096826a58.js.map
Edit
468.d3a2ba8b0d226ca1475b.js
Edit
468.d3a2ba8b0d226ca1475b.js.map
Edit
4680.abd86af55b75e75326ab.js
Edit
4680.abd86af55b75e75326ab.js.map
Edit
4691.2f69f76af87a66a1513c.js
Edit
4691.2f69f76af87a66a1513c.js.map
Edit
4698.c9a2c562b12da12dc66e.js
Edit
4698.c9a2c562b12da12dc66e.js.map
Edit
4791.fc3ef0337811ab73b164.js
Edit
4791.fc3ef0337811ab73b164.js.map
Edit
4814.2d8cb562606e508512d8.js
Edit
4814.2d8cb562606e508512d8.js.map
Edit
4824.2da8107f19d58bf153e0.js
Edit
4824.2da8107f19d58bf153e0.js.map
Edit
4839.f4d2edd5c2678ef2b624.js
Edit
4839.f4d2edd5c2678ef2b624.js.map
Edit
4857.4971a98037d2ec3b663d.js
Edit
4857.4971a98037d2ec3b663d.js.map
Edit
4865.be02c1283a83523c4414.js
Edit
4865.be02c1283a83523c4414.js.map
Edit
494.5463fc5a297eaedd150f.js
Edit
494.5463fc5a297eaedd150f.js.map
Edit
4958.226af5f19bf47305a407.js
Edit
4958.226af5f19bf47305a407.js.map
Edit
4962.bbff24c5a85e9314600a.js
Edit
4962.bbff24c5a85e9314600a.js.map
Edit
4964.1f2cc5acc0078feb7b08.js
Edit
4964.1f2cc5acc0078feb7b08.js.map
Edit
4965.ccdc00d808390be53820.js
Edit
4965.ccdc00d808390be53820.js.map
Edit
5065.a2c71dab50ccb4174ee2.js
Edit
5065.a2c71dab50ccb4174ee2.js.map
Edit
5074.92e2d1ae98dcd913506e.js
Edit
5074.92e2d1ae98dcd913506e.js.map
Edit
5091.987ffc33b70121541e5d.js
Edit
5091.987ffc33b70121541e5d.js.map
Edit
5106.581eaf66a6592320d97a.js
Edit
5106.581eaf66a6592320d97a.js.map
Edit
5110.96d49ea826be96c65045.js
Edit
5110.96d49ea826be96c65045.js.map
Edit
5130.cbdddcd716a093bdbaac.js
Edit
5130.cbdddcd716a093bdbaac.js.map
Edit
5196.9b7364caf64a8583ad01.js
Edit
5196.9b7364caf64a8583ad01.js.map
Edit
5198.2cd64d4e16a385dd9b91.js
Edit
5198.2cd64d4e16a385dd9b91.js.map
Edit
5280.2c29942977baa2dfbe0e.js
Edit
5280.2c29942977baa2dfbe0e.js.map
Edit
5364.0288d9c98f74f26b73e7.js
Edit
5364.0288d9c98f74f26b73e7.js.map
Edit
5446.ad01d0b233122dd49849.js
Edit
5446.ad01d0b233122dd49849.js.map
Edit
5550.5bf3e7d23d6b104740fd.js
Edit
5550.5bf3e7d23d6b104740fd.js.map
Edit
5618.909592bbe054b70f2377.js
Edit
5618.909592bbe054b70f2377.js.map
Edit
5648.a1fc2b0cbbca9bfa1d94.js
Edit
5648.a1fc2b0cbbca9bfa1d94.js.map
Edit
5664.c55be32f6d459ac3f3d8.js
Edit
5664.c55be32f6d459ac3f3d8.js.map
Edit
5671.e1e396b75d7b95ef461f.js
Edit
5671.e1e396b75d7b95ef461f.js.map
Edit
5742.117597ec799ab75cb2f4.js
Edit
5742.117597ec799ab75cb2f4.js.map
Edit
5747.b9389680058c12ffba68.js
Edit
5747.b9389680058c12ffba68.js.map
Edit
5757.5a4b7f2368dd09da42be.js
Edit
5786.c45dfaf9e1d969472e5e.js
Edit
5786.c45dfaf9e1d969472e5e.js.map
Edit
5790.29b0a5797fd46e9664f5.js
Edit
5790.29b0a5797fd46e9664f5.js.map
Edit
5923.b9c876b4bf528d8511cb.js
Edit
5923.b9c876b4bf528d8511cb.js.map
Edit
5984.1efdc4bb85100bd19ca9.js
Edit
5984.1efdc4bb85100bd19ca9.js.map
Edit
5995.5c7a375f33ea1cd16daa.js
Edit
5995.5c7a375f33ea1cd16daa.js.map
Edit
6018.befdd11bf701ea71f7bf.js
Edit
6018.befdd11bf701ea71f7bf.js.map
Edit
6029.bdcbf27bcdd36812f646.js
Edit
6029.bdcbf27bcdd36812f646.js.map
Edit
6088.7f526abfdb4003574c68.js
Edit
6088.7f526abfdb4003574c68.js.map
Edit
613.084d33252856771cf6e1.js
Edit
613.084d33252856771cf6e1.js.map
Edit
6185.2a7c893c6b3f2f0dadb8.js
Edit
6185.2a7c893c6b3f2f0dadb8.js.map
Edit
6208.571f272269524cfd14e7.js
Edit
6208.571f272269524cfd14e7.js.map
Edit
6236.30d1fa6aee173c946c50.js
Edit
6236.30d1fa6aee173c946c50.js.map
Edit
6244.64f83fc5d05560979c51.js
Edit
6244.64f83fc5d05560979c51.js.map
Edit
6260.b8be95165766a81dade2.js
Edit
6260.b8be95165766a81dade2.js.map
Edit
630.56b78dcdaeeb9d9c2967.js
Edit
630.56b78dcdaeeb9d9c2967.js.map
Edit
6302.a2ffa52069511df9772f.js
Edit
6302.a2ffa52069511df9772f.js.map
Edit
6315.f4d87fc6f8ae3cb40e38.js
Edit
6315.f4d87fc6f8ae3cb40e38.js.map
Edit
6414.7520859a2d9cc0a63d7f.js
Edit
6414.7520859a2d9cc0a63d7f.js.map
Edit
6446.1d75a8140260005fffbd.js
Edit
6446.1d75a8140260005fffbd.js.map
Edit
6743.67a52a99e2fdd1ae1e10.js
Edit
6743.67a52a99e2fdd1ae1e10.js.map
Edit
6759.0454d3c1e41385379bdc.js
Edit
6759.0454d3c1e41385379bdc.js.map
Edit
6772.0d4a074848bc323be8f8.js
Edit
6772.0d4a074848bc323be8f8.js.map
Edit
680.726adca366b4ecb272db.js
Edit
680.726adca366b4ecb272db.js.map
Edit
6830.a4b0ecf3a6d784ca7609.js
Edit
6830.a4b0ecf3a6d784ca7609.js.map
Edit
6834.0c9ef40e2f2b5428983d.js
Edit
6834.0c9ef40e2f2b5428983d.js.map
Edit
6857.252a60422ee275193aa7.js
Edit
6857.252a60422ee275193aa7.js.map
Edit
6940.b6c74df14413f0188f0d.js
Edit
6940.b6c74df14413f0188f0d.js.map
Edit
6990.d663924714fc213b17c6.js
Edit
6990.d663924714fc213b17c6.js.map
Edit
7018.5a037d2577fedc8d10f1.js
Edit
7018.5a037d2577fedc8d10f1.js.map
Edit
7031.047b15171c23b248efa0.js
Edit
7031.047b15171c23b248efa0.js.map
Edit
7033.141597840e42815ef6a4.js
Edit
7033.141597840e42815ef6a4.js.map
Edit
7048.3746fc9a274bf8ff72f1.js
Edit
7048.3746fc9a274bf8ff72f1.js.map
Edit
7051.604a402d305e093c00c2.js
Edit
7051.604a402d305e093c00c2.js.map
Edit
7061.f18464bcd6c6d7455662.js
Edit
7061.f18464bcd6c6d7455662.js.map
Edit
7080.9cdd1b7a0bf62b48e1fe.js
Edit
7080.9cdd1b7a0bf62b48e1fe.js.map
Edit
7200.d4425528f6cee80f9931.js
Edit
7200.d4425528f6cee80f9931.js.map
Edit
7235.46f071d3e4d0bb976223.js
Edit
7235.46f071d3e4d0bb976223.js.map
Edit
7246.03f5a8496e53f64602e2.js
Edit
7246.03f5a8496e53f64602e2.js.map
Edit
7249.3bea4aaf890f89fdad45.js
Edit
7249.3bea4aaf890f89fdad45.js.map
Edit
7299.cdff402b076dfea09ead.js
Edit
7299.cdff402b076dfea09ead.js.map
Edit
7348.6fd722455e8c7e077815.js
Edit
7348.6fd722455e8c7e077815.js.map
Edit
7396.ded473b7a47dc42fbb59.js
Edit
7396.ded473b7a47dc42fbb59.js.map
Edit
7466.b7c17c526c7b734dd5f7.js
Edit
7466.b7c17c526c7b734dd5f7.js.map
Edit
7539.5f405cae3b15e1e2f6fa.js
Edit
7539.5f405cae3b15e1e2f6fa.js.map
Edit
7585.084552e02c66201a55be.js
Edit
7585.084552e02c66201a55be.js.map
Edit
7626.38819cc0696f2d25cf99.js
Edit
7626.38819cc0696f2d25cf99.js.map
Edit
7651.5024ed8dd1beb08d01ab.js
Edit
7651.5024ed8dd1beb08d01ab.js.map
Edit
7681.7ef7b4f86e99abd7b7e1.js
Edit
7681.7ef7b4f86e99abd7b7e1.js.map
Edit
7691.0ad86f0c686b19ce829e.js
Edit
7691.0ad86f0c686b19ce829e.js.map
Edit
7790.4c141092868e7208a087.js
Edit
7790.4c141092868e7208a087.js.map
Edit
7806.dff3509790e494ca5a45.js
Edit
7806.dff3509790e494ca5a45.js.map
Edit
7836.afe37ef4be354f0a3b91.js
Edit
7836.afe37ef4be354f0a3b91.js.map
Edit
7882.e1721e9d6ac2d421bcda.js
Edit
7882.e1721e9d6ac2d421bcda.js.map
Edit
7886.8499ded396232466be7d.js
Edit
7886.8499ded396232466be7d.js.map
Edit
7887.a6dcfd824d57598ba1c3.js
Edit
7887.a6dcfd824d57598ba1c3.js.map
Edit
7969.a048d8060cabf1aede33.js
Edit
7969.a048d8060cabf1aede33.js.map
Edit
7996.bd232896e4559d37a26f.js
Edit
7996.bd232896e4559d37a26f.js.map
Edit
8016.8145cd87abcdd0646db2.js
Edit
8016.8145cd87abcdd0646db2.js.map
Edit
8018.c31846109f2dff21d8c4.js
Edit
8018.c31846109f2dff21d8c4.js.map
Edit
8056.4e8f71ed4d507f89b487.js
Edit
8056.4e8f71ed4d507f89b487.js.map
Edit
8177.52abd0953ac914f69e26.js
Edit
8177.52abd0953ac914f69e26.js.map
Edit
8220.aeea4a8f0893b3447b56.js
Edit
8220.aeea4a8f0893b3447b56.js.map
Edit
8224.75bd73bf51ff7a2fc4a0.js
Edit
8224.75bd73bf51ff7a2fc4a0.js.map
Edit
8230.d65bce2998eec95c6082.js
Edit
8230.d65bce2998eec95c6082.js.map
Edit
8260.c1da67af19b9259d5651.js
Edit
8260.c1da67af19b9259d5651.js.map
Edit
8271.0ee36e030014244adb47.js
Edit
8271.0ee36e030014244adb47.js.map
Edit
8332.a62e8632a336661f2969.js
Edit
8332.a62e8632a336661f2969.js.map
Edit
8334.1196f5ddcef25711fc25.js
Edit
8334.1196f5ddcef25711fc25.js.map
Edit
8347.de402f9280cd7a316c57.js
Edit
8347.de402f9280cd7a316c57.js.map
Edit
8390.9de755da2e214cc845a3.js
Edit
8390.9de755da2e214cc845a3.js.map
Edit
8393.30e95ae45cbe5455dcda.js
Edit
8393.30e95ae45cbe5455dcda.js.map
Edit
8477.4dad0537d13cf9315e86.js
Edit
8477.4dad0537d13cf9315e86.js.map
Edit
8494.659892f00c9d15ae441a.js
Edit
8494.659892f00c9d15ae441a.js.map
Edit
8530.0460c988ee4a40ce7769.js
Edit
8530.0460c988ee4a40ce7769.js.map
Edit
8542.317c15ed57f68fcf0c97.js
Edit
8542.317c15ed57f68fcf0c97.js.map
Edit
8547.390120a5caf7646e0e3e.js
Edit
8547.390120a5caf7646e0e3e.js.map
Edit
8566.5c8f392bb383ab92eed0.js
Edit
8566.5c8f392bb383ab92eed0.js.map
Edit
8622.5acf73c1485a11dfb0ab.js
Edit
8622.5acf73c1485a11dfb0ab.js.map
Edit
8706.f17afa6bcdfd511d5b03.js
Edit
8706.f17afa6bcdfd511d5b03.js.map
Edit
874.d24410518317d605c708.js
Edit
874.d24410518317d605c708.js.map
Edit
8813.e5137844631f6ddedbce.js
Edit
8813.e5137844631f6ddedbce.js.map
Edit
8856.2720526447b3adb5c75f.js
Edit
8856.2720526447b3adb5c75f.js.map
Edit
886.5f3383e84b10a6530b97.js
Edit
886.5f3383e84b10a6530b97.js.map
Edit
8864.2f4ee982114c25634e55.js
Edit
8864.2f4ee982114c25634e55.js.map
Edit
8902.71f14964ec6cea84dc8e.js
Edit
8902.71f14964ec6cea84dc8e.js.map
Edit
8932.e59e50ddb63414e0f2b9.js
Edit
8932.e59e50ddb63414e0f2b9.js.map
Edit
8990.665213a5c89afd6b2f83.js
Edit
8990.665213a5c89afd6b2f83.js.map
Edit
9034.a32e36472481cbe5d72d.js
Edit
9034.a32e36472481cbe5d72d.js.map
Edit
9038.f03b25f160057d4a0bf6.js
Edit
9038.f03b25f160057d4a0bf6.js.map
Edit
904.b68cd2a0cd6d68c5f1ae.js
Edit
904.b68cd2a0cd6d68c5f1ae.js.map
Edit
9044.441f64d6d946cc93be46.js
Edit
9044.441f64d6d946cc93be46.js.map
Edit
9147.8309cadbc384209d62e5.js
Edit
9147.8309cadbc384209d62e5.js.map
Edit
9150.38487365ffd149b730af.js
Edit
9150.38487365ffd149b730af.js.map
Edit
9292.e6befb57f8f116ad95a8.js
Edit
9292.e6befb57f8f116ad95a8.js.map
Edit
9355.95d7e1782f93f339549e.js
Edit
9355.95d7e1782f93f339549e.js.map
Edit
9388.88d95a230e9432e7037b.js
Edit
9388.88d95a230e9432e7037b.js.map
Edit
9390.c72fcd228017f7647b38.js
Edit
9390.c72fcd228017f7647b38.js.map
Edit
9414.642bfe0d5eb16efd0c16.js
Edit
9414.642bfe0d5eb16efd0c16.js.map
Edit
9449.502f2a824d0203e88d4d.js
Edit
9449.502f2a824d0203e88d4d.js.map
Edit
946.48c5e8c688cf29424295.js
Edit
946.48c5e8c688cf29424295.js.map
Edit
9473.e6fc327da88d88712828.js
Edit
9473.e6fc327da88d88712828.js.map
Edit
9510.1e255e96fe40aad2ed6f.js
Edit
9510.1e255e96fe40aad2ed6f.js.map
Edit
9521.e65411d726c29d77c526.js
Edit
9521.e65411d726c29d77c526.js.map
Edit
9538.a2289ff9ad06e24e391f.js
Edit
9538.a2289ff9ad06e24e391f.js.map
Edit
957.3c35d66aa698d8bdfe05.js
Edit
957.3c35d66aa698d8bdfe05.js.map
Edit
9571.41558d40bff9ea8c0726.js
Edit
9571.41558d40bff9ea8c0726.js.map
Edit
9578.9cfae16465bb9bc1f336.js
Edit
9578.9cfae16465bb9bc1f336.js.map
Edit
968.d4b150f9211c478b7b05.js
Edit
968.d4b150f9211c478b7b05.js.map
Edit
970.46f17b76711e4961a575.js
Edit
970.46f17b76711e4961a575.js.map
Edit
9700.02180b7a06c8a1f7606b.js
Edit
9700.02180b7a06c8a1f7606b.js.map
Edit
9744.aa6baaf988a68fa6a9ba.js
Edit
9744.aa6baaf988a68fa6a9ba.js.map
Edit
9820.6b462d83575efd05c883.js
Edit
9820.6b462d83575efd05c883.js.map
Edit
9838.06bd7dfd4290786f80e3.js
Edit
9838.06bd7dfd4290786f80e3.js.map
Edit
9992.fb08517d3ff77e887443.js
Edit
9992.fb08517d3ff77e887443.js.map
Edit
9996.21c451f22ff76b4bb683.js
Edit
9996.21c451f22ff76b4bb683.js.map
Edit
AdminAuthentication.076c98c6380fd1e42f7e.js
Edit
AdminAuthentication.076c98c6380fd1e42f7e.js.map
Edit
AdminEditOrgPage.8df8167ea6ff8f4803bd.js
Edit
AdminEditOrgPage.8df8167ea6ff8f4803bd.js.map
Edit
AdminListOrgsPage.176dac9ed391bda8952b.js
Edit
AdminListOrgsPage.176dac9ed391bda8952b.js.map
Edit
AdminSettings.7373ed8fa9b943bb2098.js
Edit
AdminSettings.7373ed8fa9b943bb2098.js.map
Edit
AlertGroups.81264e6e5009c36eed6e.js
Edit
AlertGroups.81264e6e5009c36eed6e.js.map
Edit
AlertRuleListIndex.98e7328feeaa2ffe67eb.js
Edit
AlertRuleListIndex.98e7328feeaa2ffe67eb.js.map
Edit
AlertingDisabled.b2c834be0ca4666dd793.js
Edit
AlertingDisabled.b2c834be0ca4666dd793.js.map
Edit
AlertingGroupDetails.3a2c6ef8085b505852e4.js
Edit
AlertingGroupDetails.3a2c6ef8085b505852e4.js.map
Edit
AlertingGroupEdit.69cfe9d5f37a1fc65326.js
Edit
AlertingGroupEdit.69cfe9d5f37a1fc65326.js.map
Edit
AlertingHome.06f307ab9a2a5d8b7f93.js
Edit
AlertingHome.06f307ab9a2a5d8b7f93.js.map
Edit
AlertingImportFromDSRules.f1224bcb622d25e2c94f.js
Edit
AlertingImportFromDSRules.f1224bcb622d25e2c94f.js.map
Edit
AlertingRedirectToRule.9ed1d16829d6833d2827.js
Edit
AlertingRedirectToRule.9ed1d16829d6833d2827.js.map
Edit
AlertingRuleForm.2e69d3f00eb6221e7355.js
Edit
AlertingRuleForm.2e69d3f00eb6221e7355.js.map
Edit
AlertingSettings.7a5f782f877cec4790cb.js
Edit
AlertingSettings.7a5f782f877cec4790cb.js.map
Edit
AlertingTriage.1174f36b4937ad0047c1.js
Edit
AlertingTriage.1174f36b4937ad0047c1.js.map
Edit
BenchmarksPage.ef387f4598ba2b2236ad.js
Edit
BenchmarksPage.ef387f4598ba2b2236ad.js.map
Edit
BookmarksPage.8fe93eb7377073f0c985.js
Edit
BookmarksPage.8fe93eb7377073f0c985.js.map
Edit
ChangePasswordPage.f21b0b1dd107ccd33c1a.js
Edit
ChangePasswordPage.f21b0b1dd107ccd33c1a.js.map
Edit
Connections.949b6389e73bcadb2109.js
Edit
Connections.949b6389e73bcadb2109.js.map
Edit
ContactPoints.9ae2d1927d60c6169b87.js
Edit
ContactPoints.9ae2d1927d60c6169b87.js.map
Edit
CorrelationsFeatureToggle.ec2f1aefce6b456e15eb.js
Edit
CorrelationsFeatureToggle.ec2f1aefce6b456e15eb.js.map
Edit
CorrelationsPage.bd7fcd24ed0b5fe8ac3e.js
Edit
CorrelationsPage.bd7fcd24ed0b5fe8ac3e.js.map
Edit
CreateTeam.429acf93986740280312.js
Edit
CreateTeam.429acf93986740280312.js.map
Edit
DashboardImport.3e9b6f980b81d6f1c755.js
Edit
DashboardImport.3e9b6f980b81d6f1c755.js.map
Edit
DashboardListPage.abeb0c29f072f888f9fb.js
Edit
DashboardListPage.abeb0c29f072f888f9fb.js.map
Edit
DashboardPage.72557fe6dd1a022b7d48.js
Edit
DashboardPage.72557fe6dd1a022b7d48.js.map
Edit
DashboardPageProxy.80adfefad8a885d8e2ef.js
Edit
DashboardPageProxy.80adfefad8a885d8e2ef.js.map
Edit
DashboardScenePage.83fe1fa9509b50120d65.js
Edit
DashboardScenePage.83fe1fa9509b50120d65.js.map
Edit
EditContactPoint.0c33428ddc8ba974d946.js
Edit
EditContactPoint.0c33428ddc8ba974d946.js.map
Edit
EditMuteTiming.8760cc9c77560acf0cd6.js
Edit
EditMuteTiming.8760cc9c77560acf0cd6.js.map
Edit
EditRepositoryPage.d71faaab1af2c8d70a22.js
Edit
EditRepositoryPage.d71faaab1af2c8d70a22.js.map
Edit
EmbeddedDashboard.57de550bce819e3d52e6.js
Edit
EmbeddedDashboard.57de550bce819e3d52e6.js.map
Edit
FileHistoryPage.154ab77c19bbe0ebed20.js
Edit
FileHistoryPage.154ab77c19bbe0ebed20.js.map
Edit
FileStatusPage.36f58cd61202ec603d22.js
Edit
FileStatusPage.36f58cd61202ec603d22.js.map
Edit
FolderAlerting.0b9acb6c42276aaee57d.js
Edit
FolderAlerting.0b9acb6c42276aaee57d.js.map
Edit
FolderLibraryPanelsPage.44f8cabf542ec314d176.js
Edit
FolderLibraryPanelsPage.44f8cabf542ec314d176.js.map
Edit
GettingStartedPage.4bea37f1c9bdcfd0f41b.js
Edit
GettingStartedPage.4bea37f1c9bdcfd0f41b.js.map
Edit
GlobalConfig.1377596507974d18caf6.js
Edit
GlobalConfig.1377596507974d18caf6.js.map
Edit
HistoryPage.4da98f4fa313ee3676ca.js
Edit
HistoryPage.4da98f4fa313ee3676ca.js.map
Edit
LdapSettingsPage.0e9f08d5e59150ecf466.js
Edit
LdapSettingsPage.0e9f08d5e59150ecf466.js.map
Edit
LibraryPanelsPage.824580d7751526c658e2.js
Edit
LibraryPanelsPage.824580d7751526c658e2.js.map
Edit
ListPublicDashboardPage.64c26ffd3ebe6c9076f3.js
Edit
ListPublicDashboardPage.64c26ffd3ebe6c9076f3.js.map
Edit
LoginPage.db48423ed1b455431daa.js
Edit
LoginPage.db48423ed1b455431daa.js.map
Edit
MetricsDrilldownRedirect.fcad4bdff346974952f4.js
Edit
MetricsDrilldownRedirect.fcad4bdff346974952f4.js.map
Edit
MigrateToCloud.5b474ad00e8a3d979750.js
Edit
MigrateToCloud.5b474ad00e8a3d979750.js.map
Edit
NewMuteTiming.2f6302420674f1c73aba.js
Edit
NewMuteTiming.2f6302420674f1c73aba.js.map
Edit
NewOrgPage.be31eaee06e2043d609b.js
Edit
NewOrgPage.be31eaee06e2043d609b.js.map
Edit
NewReceiverView.f1d83eb66a39882b8661.js
Edit
NewReceiverView.f1d83eb66a39882b8661.js.map
Edit
NewSilencePage.2643a48031f7e5d8f376.js
Edit
NewSilencePage.2643a48031f7e5d8f376.js.map
Edit
NotificationPoliciesPage.9333d10ecad1452ebf27.js
Edit
NotificationPoliciesPage.9333d10ecad1452ebf27.js.map
Edit
NotificationsPage.57df4ff5ba1433a4345d.js
Edit
NotificationsPage.57df4ff5ba1433a4345d.js.map
Edit
OrgDetailsPage.7b5835c30585aae81343.js
Edit
OrgDetailsPage.7b5835c30585aae81343.js.map
Edit
PlaylistEditPage.8310e384af659e40c313.js
Edit
PlaylistEditPage.8310e384af659e40c313.js.map
Edit
PlaylistNewPage.f45b642a98a747e28c0d.js
Edit
PlaylistNewPage.f45b642a98a747e28c0d.js.map
Edit
PlaylistPage.9af74957a1cdfb125338.js
Edit
PlaylistPage.9af74957a1cdfb125338.js.map
Edit
PlaylistStartPage.8011a98267ac64c7fa05.js
Edit
PlaylistStartPage.8011a98267ac64c7fa05.js.map
Edit
PluginExtensionsLog.54c02047d569b0c05823.js
Edit
PluginExtensionsLog.54c02047d569b0c05823.js.map
Edit
PluginListPage.e50c18fed21c23ca4ee8.js
Edit
PluginListPage.e50c18fed21c23ca4ee8.js.map
Edit
PluginPage.ae424531bce63dd4721e.js
Edit
PluginPage.ae424531bce63dd4721e.js.map
Edit
ProfileFeatureTogglePage.27378dcbb7520611348e.js
Edit
ProfileFeatureTogglePage.27378dcbb7520611348e.js.map
Edit
ProvisioningWizardPage.c4e4a8f431b4719b0e95.js
Edit
ProvisioningWizardPage.c4e4a8f431b4719b0e95.js.map
Edit
PublicDashboardPage.33d6ec8f685f1b70b9a6.js
Edit
PublicDashboardPage.33d6ec8f685f1b70b9a6.js.map
Edit
RecentlyDeleted.5e0ec16474d939fd9683.js
Edit
RecentlyDeleted.5e0ec16474d939fd9683.js.map
Edit
RecentlyDeletedPage.1dbc2b80b28204de8237.js
Edit
RecentlyDeletedPage.1dbc2b80b28204de8237.js.map
Edit
RepositoryListPage.ec3a0af1cbe2740800bf.js
Edit
RepositoryListPage.ec3a0af1cbe2740800bf.js.map
Edit
RepositoryStatusPage.9aee60589e35a4a19ec2.js
Edit
RepositoryStatusPage.9aee60589e35a4a19ec2.js.map
Edit
SelectOrgPage.910a8d842019a6d7fe93.js
Edit
SelectOrgPage.910a8d842019a6d7fe93.js.map
Edit
SendResetMailPage.513361d6980f98ff8139.js
Edit
SendResetMailPage.513361d6980f98ff8139.js.map
Edit
ServerStats.2830ca154f465dbdecea.js
Edit
ServerStats.2830ca154f465dbdecea.js.map
Edit
ServiceAccountCreatePage.80fcbdd2b7f5aa4e2da1.js
Edit
ServiceAccountCreatePage.80fcbdd2b7f5aa4e2da1.js.map
Edit
ServiceAccountPage.48944056459bb412ff33.js
Edit
ServiceAccountPage.48944056459bb412ff33.js.map
Edit
ServiceAccountsPage.d20b1eb9f87661f10b45.js
Edit
ServiceAccountsPage.d20b1eb9f87661f10b45.js.map
Edit
SignupInvited.fe2c29f380e9888c28cf.js
Edit
SignupInvited.fe2c29f380e9888c28cf.js.map
Edit
SilencesTablePage.b998fdbdcc3d60a81739.js
Edit
SilencesTablePage.b998fdbdcc3d60a81739.js.map
Edit
SnapshotListPage.6feaf24adb92e6a302ec.js
Edit
SnapshotListPage.6feaf24adb92e6a302ec.js.map
Edit
SoloPanelPage.7fc6a934aaadf4c1f84d.js
Edit
SoloPanelPage.7fc6a934aaadf4c1f84d.js.map
Edit
SoloPanelPageOld.bde57e000dd0a0108685.js
Edit
SoloPanelPageOld.bde57e000dd0a0108685.js.map
Edit
SupportBundles.1f46603ad3494624d67a.js
Edit
SupportBundles.1f46603ad3494624d67a.js.map
Edit
SupportBundlesCreate.5eaea61a9713f057277b.js
Edit
SupportBundlesCreate.5eaea61a9713f057277b.js.map
Edit
TeamList.6b088f83e6e8cb66b21d.js
Edit
TeamList.6b088f83e6e8cb66b21d.js.map
Edit
TeamPages.9d8b5dceef8be43c6923.js
Edit
TeamPages.9d8b5dceef8be43c6923.js.map
Edit
Templates.7a02a8497ebca052dcfb.js
Edit
Templates.7a02a8497ebca052dcfb.js.map
Edit
TestStuffPage.982c641592b2f7c9db40.js
Edit
TestStuffPage.982c641592b2f7c9db40.js.map
Edit
ThemePlayground.aeeec77fd8e9c1482f55.js
Edit
ThemePlayground.aeeec77fd8e9c1482f55.js.map
Edit
UserAdminPage.fc4d562eef05d9f59aca.js
Edit
UserAdminPage.fc4d562eef05d9f59aca.js.map
Edit
UserCreatePage.b7036214c66612fb31e9.js
Edit
UserCreatePage.b7036214c66612fb31e9.js.map
Edit
UserInvitePage.4a9bcd4084d7ae454c73.js
Edit
UserInvitePage.4a9bcd4084d7ae454c73.js.map
Edit
UserListPage.a452e1153ae820f58ac9.js
Edit
UserListPage.a452e1153ae820f58ac9.js.map
Edit
UserProfileEditPage.82c11690282e669eabb1.js
Edit
UserProfileEditPage.82c11690282e669eabb1.js.map
Edit
alert-rules-drawer-content.c95bb5ddd3fc813cae92.js
Edit
alert-rules-drawer-content.c95bb5ddd3fc813cae92.js.map
Edit
alert-rules-toolbar-button.0d86c1adae7edb55ff76.js
Edit
alert-rules-toolbar-button.0d86c1adae7edb55ff76.js.map
Edit
alertListPanel.0110106a8d1ab70d65d5.js
Edit
alertListPanel.0110106a8d1ab70d65d5.js.map
Edit
alertmanagerPlugin.2b59de5e7b7a556f87f1.js
Edit
alertmanagerPlugin.2b59de5e7b7a556f87f1.js.map
Edit
annoListPanel.0005a0eab0b05e24d970.js
Edit
annoListPanel.0005a0eab0b05e24d970.js.map
Edit
app.8385deda1df49aa75ec2.js
Edit
app.8385deda1df49aa75ec2.js.map
Edit
assets-manifest.json
Edit
barChartPanel.eecdaeab7d146d477721.js
Edit
barChartPanel.eecdaeab7d146d477721.js.map
Edit
barGaugePanel.6d9e94bbb72ba92a0e9b.js
Edit
barGaugePanel.6d9e94bbb72ba92a0e9b.js.map
Edit
candlestickPanel.af0e0decd06e7b7ab286.js
Edit
candlestickPanel.af0e0decd06e7b7ab286.js.map
Edit
canvasPanel.ddab72fab6e58c3419b2.js
Edit
canvasPanel.ddab72fab6e58c3419b2.js.map
Edit
cloudwatchPlugin.06ef34f60000c4f7ea37.js
Edit
cloudwatchPlugin.06ef34f60000c4f7ea37.js.map
Edit
dark.b66fa87185b9a313ec14.js
Edit
dashListPanel.23b954da0c4888602048.js
Edit
dashListPanel.23b954da0c4888602048.js.map
Edit
dataGridPanel.bb5d4b678cba38dd380b.js
Edit
debugPanel.fff63da32084d7a2e236.js
Edit
debugPanel.fff63da32084d7a2e236.js.map
Edit
elasticsearchPlugin.3f2edb012f5162b48903.js
Edit
elasticsearchPlugin.3f2edb012f5162b48903.js.map
Edit
explore-feature-toggle-page.3de03fa91c88d05cea1c.js
Edit
explore-feature-toggle-page.3de03fa91c88d05cea1c.js.map
Edit
explore.dd32637df83326225e0d.js
Edit
explore.dd32637df83326225e0d.js.map
Edit
flamegraphPanel.cc6c5b4bcd69e406fbb7.js
Edit
flamegraphPanel.cc6c5b4bcd69e406fbb7.js.map
Edit
gaugePanel.5da3c4e39a652e281cc4.js
Edit
gaugePanel.5da3c4e39a652e281cc4.js.map
Edit
gazetteer
Edit
geomapPanel.67ebb4567e9b5fa5074b.js
Edit
gettingStartedPanel.833059170dbbf8d5c4bf.js
Edit
gettingStartedPanel.833059170dbbf8d5c4bf.js.map
Edit
grafana.1492.25120d27db88f863e058.css
Edit
grafana.4350.a45e45977094df4a0bc9.css
Edit
grafana.5790.ffb3a9cd952d3cd7471b.css
Edit
grafana.DashboardPage.a66335f88cd003e4a44f.css
Edit
grafana.DashboardPageProxy.a66335f88cd003e4a44f.css
Edit
grafana.app.1f6473bb54b1e1647be8.css
Edit
grafana.dark.1e8d85816912aadbbba5.css
Edit
grafana.dataGridPanel.c1fc5db1829b1b31eb4d.css
Edit
grafana.geomapPanel.0057d964fa972bb207ec.css
Edit
grafana.light.111a5a99fcebc0962ddc.css
Edit
grafana.livePanel.25120d27db88f863e058.css
Edit
grafana.react-monaco-editor.ffb3a9cd952d3cd7471b.css
Edit
grafana.swagger.d0a2da197b9827204ac1.css
Edit
grafana.tablePanel.25120d27db88f863e058.css
Edit
grafanaPlugin.f21cdb4b84a732cc9dd8.js
Edit
grafanaPlugin.f21cdb4b84a732cc9dd8.js.map
Edit
heatmapPanel.7834b997bc573eddba88.js
Edit
heatmapPanel.7834b997bc573eddba88.js.map
Edit
histogramPanel.9953bfeccf8774500c0c.js
Edit
histogramPanel.9953bfeccf8774500c0c.js.map
Edit
img
Edit
influxdbPlugin.7a899e63be0a65d41e13.js
Edit
influxdbPlugin.7a899e63be0a65d41e13.js.map
Edit
light.827d442410485e491818.js
Edit
livePanel.2a43f499bc746d928d45.js
Edit
livePanel.2a43f499bc746d928d45.js.map
Edit
logsPanel.a328022d248508a083c1.js
Edit
logsPanel.a328022d248508a083c1.js.map
Edit
loki-query-field.f9a0b82b636d4821760c.js
Edit
loki-query-field.f9a0b82b636d4821760c.js.map
Edit
maps
Edit
mixedPlugin.3a69de93f366afbb2f85.js
Edit
newsPanel.c17f40f7c88ea14620e7.js
Edit
newsPanel.c17f40f7c88ea14620e7.js.map
Edit
nodeGraphPanel.f717a9075d994a9a8af4.js
Edit
nodeGraphPanel.f717a9075d994a9a8af4.js.map
Edit
opentsdbPlugin.1795eab1c223ea030c2e.js
Edit
opentsdbPlugin.1795eab1c223ea030c2e.js.map
Edit
pieChartPanel.45166aa6d57d163817ea.js
Edit
pieChartPanel.45166aa6d57d163817ea.js.map
Edit
prometheusPlugin.c3a55eb5353085fc3d2b.js
Edit
prometheusPlugin.c3a55eb5353085fc3d2b.js.map
Edit
radialBarPanel.294c52d497d8f5c2bebb.js
Edit
radialBarPanel.294c52d497d8f5c2bebb.js.map
Edit
runtime.a37cc2f12a959f33871a.js
Edit
runtime.a37cc2f12a959f33871a.js.map
Edit
sql-query-editor.e767d4a2aef360034bd9.js
Edit
sql-query-editor.e767d4a2aef360034bd9.js.map
Edit
statPanel.3a7f191bfb27fd320014.js
Edit
statPanel.3a7f191bfb27fd320014.js.map
Edit
stateTimelinePanel.08d857b143ef89dc195f.js
Edit
stateTimelinePanel.08d857b143ef89dc195f.js.map
Edit
static
Edit
statusHistoryPanel.29f7b8dc01039ba795af.js
Edit
statusHistoryPanel.29f7b8dc01039ba795af.js.map
Edit
swagger.06875a6266679f54141d.js
Edit
swagger.06875a6266679f54141d.js.map
Edit
tablePanel.43861ce2a60617dcd19d.js
Edit
tablePanel.43861ce2a60617dcd19d.js.map
Edit
textPanel.867ee60d01b2039aa159.js
Edit
textPanel.867ee60d01b2039aa159.js.map
Edit
timeseriesPanel.b4a947da450030262a31.js
Edit
timeseriesPanel.b4a947da450030262a31.js.map
Edit
tracesPanel.35bfc3e5ff6bea4212a3.js
Edit
tracesPanel.35bfc3e5ff6bea4212a3.js.map
Edit
trendPanel.001aff2bd153e737c464.js
Edit
trendPanel.001aff2bd153e737c464.js.map
Edit
vis-data.b34535ebabc0fcb91557.js
Edit
vis-data.b34535ebabc0fcb91557.js.map
Edit
vis-network.1b41caf21892c9525709.js
Edit
vis-network.1b41caf21892c9525709.js.map
Edit
welcomeBanner.1a693c9dc02006be4f0b.js
Edit
welcomeBanner.1a693c9dc02006be4f0b.js.map
Edit
xychart.cb20af67a6c495ba6ccd.js
Edit
xychart.cb20af67a6c495ba6ccd.js.map
Edit