{"version":3,"file":"step-ag-grid.cjs","sources":["../src/components/ComponentLoadingWrapper.tsx","../node_modules/clsx/dist/clsx.mjs","../node_modules/lodash.debounce/index.js","../node_modules/usehooks-ts/dist/index.js","../src/contexts/GridContext.tsx","../src/contexts/GridUpdatingContext.tsx","../node_modules/natsort/lib/index.js","../src/utils/util.ts","../src/components/clickInputWhenContainingCellClicked.tsx","../src/components/gridHeader/GridHeaderSelect.tsx","../src/react-menu3/contexts/EventHandlersContext.ts","../src/react-menu3/contexts/ItemSettingsContext.ts","../src/react-menu3/contexts/SettingsContext.ts","../src/react-menu3/hooks/useBEM.ts","../src/react-menu3/hooks/useCombinedRef.ts","../src/react-menu3/hooks/useIsomorphicLayoutEffect.ts","../src/react-menu3/hooks/useItemEffect.ts","../src/react-menu3/utils/constants.ts","../src/react-menu3/utils/utils.ts","../src/react-menu3/contexts/HoverItemContext.ts","../src/react-menu3/utils/withHovering.tsx","../src/react-menu3/hooks/useItems.ts","../src/react-menu3/contexts/MenuListItemContext.ts","../src/react-menu3/hooks/useItemState.ts","../src/react-menu3/hooks/useMenuChange.ts","../node_modules/react-transition-state/dist/esm/hooks/utils.mjs","../node_modules/react-transition-state/dist/esm/hooks/useTransitionState.mjs","../src/react-menu3/hooks/useMenuState.ts","../src/react-menu3/hooks/useMenuStateAndFocus.ts","../src/react-menu3/contexts/MenuListContext.ts","../src/react-menu3/positionUtils/getPositionHelpers.ts","../src/react-menu3/positionUtils/positionContextMenu.ts","../src/react-menu3/positionUtils/placeArrowVertical.ts","../src/react-menu3/positionUtils/placeLeftorRight.ts","../src/react-menu3/positionUtils/placeArrowHorizontal.ts","../src/react-menu3/positionUtils/placeToporBottom.ts","../src/react-menu3/positionUtils/positionMenu.ts","../src/react-menu3/components/MenuList.tsx","../src/react-menu3/components/ControlledMenu.tsx","../src/react-menu3/components/FocusableItem.tsx","../src/react-menu3/components/Menu.tsx","../src/react-menu3/components/MenuButton.tsx","../src/react-menu3/components/MenuDivider.tsx","../src/react-menu3/components/MenuGroup.tsx","../src/react-menu3/components/MenuHeader.tsx","../src/react-menu3/contexts/RadioGroupContext.ts","../src/react-menu3/components/MenuItem.tsx","../src/react-menu3/components/MenuRadioGroup.tsx","../src/react-menu3/components/SubMenu.tsx","../src/components/gridHook/useGridContextMenu.tsx","../src/components/GridNoRowsOverlay.tsx","../src/components/PostSortRowsHook.ts","../src/components/Grid.tsx","../src/contexts/GridPopoverContext.tsx","../src/contexts/GridPopoverContextProvider.tsx","../src/components/GridCellMultiSelectClassRules.tsx","../src/components/GridIcon.tsx","../src/components/GridLoadableCell.tsx","../src/components/GridCell.tsx","../src/components/GridCellFiller.tsx","../src/components/GridCellMultiEditor.tsx","../src/components/gridFilter/useGridFilter.ts","../src/components/gridFilter/GridFilterButtons.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/components/gridFilter/GridFilterColumnsMultiSelect.tsx","../src/components/gridFilter/GridFilterHeaderIconButton.tsx","../src/components/gridFilter/GridFilterColumnsToggle.tsx","../src/lui/timeoutHook.tsx","../src/lui/stateDeferredHook.tsx","../src/components/gridFilter/GridFilterDownloadCsvButton.tsx","../src/components/gridFilter/GridFilterQuick.tsx","../src/components/gridFilter/GridFilters.tsx","../node_modules/debounce-promise/dist/index.js","../src/contexts/GridSubComponentContext.ts","../src/lui/FormError.tsx","../src/lui/reactUtils.tsx","../node_modules/matcher/node_modules/escape-string-regexp/index.js","../node_modules/matcher/index.js","../src/utils/textMatcher.ts","../src/components/GridPopoverHook.tsx","../src/components/gridForm/GridFormDropDown.tsx","../src/lui/TextInputFormatted.tsx","../src/utils/bearing.ts","../src/components/gridForm/GridFormEditBearing.tsx","../src/components/gridForm/GridFormMessage.tsx","../src/components/gridForm/GridFormMultiSelect.tsx","../src/components/gridForm/GridFormMultiSelectGrid.tsx","../src/components/gridForm/GridFormPopoverMenu.tsx","../src/lui/TextAreaInput.tsx","../src/utils/textValidator.ts","../src/components/gridForm/GridFormSubComponentTextArea.tsx","../src/components/gridForm/GridFormSubComponentTextInput.tsx","../src/components/gridForm/GridFormTextArea.tsx","../src/components/gridForm/GridFormTextInput.tsx","../src/components/gridPopoverEdit/GridButton.tsx","../src/components/gridPopoverEdit/GridEditBoolean.tsx","../src/components/gridPopoverEdit/GridPopoutEditMultiSelect.ts","../src/components/gridPopoverEdit/GridPopoutEditMultiSelectGrid.ts","../src/components/gridPopoverEdit/GridPopoverEditBearing.ts","../src/components/gridPopoverEdit/GridPopoverEditDropDown.ts","../src/components/gridRender/GridRenderPopoutMenuCell.tsx","../src/components/gridPopoverEdit/GridPopoverMenu.tsx","../src/components/gridPopoverEdit/GridPopoverMessage.ts","../src/components/gridPopoverEdit/GridPopoverTextArea.ts","../src/components/gridPopoverEdit/GridPopoverTextInput.ts","../src/components/GridWrapper.tsx","../src/components/gridUtil.ts","../src/utils/waitForCondition.tsx","../src/contexts/GridContextProvider.tsx","../src/contexts/GridUpdatingContextProvider.tsx","../src/lui/ActionButton.tsx","../src/utils/deferredPromise.ts"],"sourcesContent":["import { LuiMiniSpinner } from '@linzjs/lui';\nimport { PropsWithChildren, ReactElement } from 'react';\n\n/**\n * If loading is true this returns a loading spinner, otherwise it returns its children.\n */\nexport const ComponentLoadingWrapper = (\n  props: PropsWithChildren<{\n    loading?: boolean;\n    saving?: boolean;\n    className: string | undefined;\n  }>,\n): ReactElement => {\n  return props.loading ? (\n    <LuiMiniSpinner size={22} divProps={{ role: 'status', ['aria-label']: 'Loading', style: { padding: 16 } }} />\n  ) : (\n    <div style={{ pointerEvents: props.saving ? 'none' : 'inherit' }} className={props.className}>\n      {props.saving && <div className={'ComponentLoadingWrapper-saveOverlay'} />}\n      {props.children}\n    </div>\n  );\n};\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n// src/useBoolean/useBoolean.ts\nfunction useBoolean(defaultValue = false) {\n  if (typeof defaultValue !== \"boolean\") {\n    throw new Error(\"defaultValue must be `true` or `false`\");\n  }\n  const [value, setValue] = useState(defaultValue);\n  const setTrue = useCallback(() => {\n    setValue(true);\n  }, []);\n  const setFalse = useCallback(() => {\n    setValue(false);\n  }, []);\n  const toggle = useCallback(() => {\n    setValue((x) => !x);\n  }, []);\n  return { value, setValue, setTrue, setFalse, toggle };\n}\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// src/useEventListener/useEventListener.ts\nfunction useEventListener(eventName, handler, element, options) {\n  const savedHandler = useRef(handler);\n  useIsomorphicLayoutEffect(() => {\n    savedHandler.current = handler;\n  }, [handler]);\n  useEffect(() => {\n    const targetElement = (element == null ? void 0 : element.current) ?? window;\n    if (!(targetElement && targetElement.addEventListener))\n      return;\n    const listener = (event) => {\n      savedHandler.current(event);\n    };\n    targetElement.addEventListener(eventName, listener, options);\n    return () => {\n      targetElement.removeEventListener(eventName, listener, options);\n    };\n  }, [eventName, element, options]);\n}\n\n// src/useClickAnyWhere/useClickAnyWhere.ts\nfunction useClickAnyWhere(handler) {\n  useEventListener(\"click\", (event) => {\n    handler(event);\n  });\n}\nfunction useCopyToClipboard() {\n  const [copiedText, setCopiedText] = useState(null);\n  const copy = useCallback(async (text) => {\n    if (!(navigator == null ? void 0 : navigator.clipboard)) {\n      console.warn(\"Clipboard not supported\");\n      return false;\n    }\n    try {\n      await navigator.clipboard.writeText(text);\n      setCopiedText(text);\n      return true;\n    } catch (error) {\n      console.warn(\"Copy failed\", error);\n      setCopiedText(null);\n      return false;\n    }\n  }, []);\n  return [copiedText, copy];\n}\nfunction useCounter(initialValue) {\n  const [count, setCount] = useState(initialValue ?? 0);\n  const increment = useCallback(() => {\n    setCount((x) => x + 1);\n  }, []);\n  const decrement = useCallback(() => {\n    setCount((x) => x - 1);\n  }, []);\n  const reset = useCallback(() => {\n    setCount(initialValue ?? 0);\n  }, [initialValue]);\n  return {\n    count,\n    increment,\n    decrement,\n    reset,\n    setCount\n  };\n}\nfunction useInterval(callback, delay) {\n  const savedCallback = useRef(callback);\n  useIsomorphicLayoutEffect(() => {\n    savedCallback.current = callback;\n  }, [callback]);\n  useEffect(() => {\n    if (delay === null) {\n      return;\n    }\n    const id = setInterval(() => {\n      savedCallback.current();\n    }, delay);\n    return () => {\n      clearInterval(id);\n    };\n  }, [delay]);\n}\n\n// src/useCountdown/useCountdown.ts\nfunction useCountdown({\n  countStart,\n  countStop = 0,\n  intervalMs = 1e3,\n  isIncrement = false\n}) {\n  const {\n    count,\n    increment,\n    decrement,\n    reset: resetCounter\n  } = useCounter(countStart);\n  const {\n    value: isCountdownRunning,\n    setTrue: startCountdown,\n    setFalse: stopCountdown\n  } = useBoolean(false);\n  const resetCountdown = useCallback(() => {\n    stopCountdown();\n    resetCounter();\n  }, [stopCountdown, resetCounter]);\n  const countdownCallback = useCallback(() => {\n    if (count === countStop) {\n      stopCountdown();\n      return;\n    }\n    if (isIncrement) {\n      increment();\n    } else {\n      decrement();\n    }\n  }, [count, countStop, decrement, increment, isIncrement, stopCountdown]);\n  useInterval(countdownCallback, isCountdownRunning ? intervalMs : null);\n  return [count, { startCountdown, stopCountdown, resetCountdown }];\n}\nfunction useEventCallback(fn) {\n  const ref = useRef(() => {\n    throw new Error(\"Cannot call an event handler while rendering.\");\n  });\n  useIsomorphicLayoutEffect(() => {\n    ref.current = fn;\n  }, [fn]);\n  return useCallback((...args) => {\n    var _a;\n    return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);\n  }, [ref]);\n}\n\n// src/useLocalStorage/useLocalStorage.ts\nvar IS_SERVER = typeof window === \"undefined\";\nfunction useLocalStorage(key, initialValue, options = {}) {\n  const { initializeWithValue = true } = options;\n  const serializer = useCallback(\n    (value) => {\n      if (options.serializer) {\n        return options.serializer(value);\n      }\n      return JSON.stringify(value);\n    },\n    [options]\n  );\n  const deserializer = useCallback(\n    (value) => {\n      if (options.deserializer) {\n        return options.deserializer(value);\n      }\n      if (value === \"undefined\") {\n        return void 0;\n      }\n      const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n      let parsed;\n      try {\n        parsed = JSON.parse(value);\n      } catch (error) {\n        console.error(\"Error parsing JSON:\", error);\n        return defaultValue;\n      }\n      return parsed;\n    },\n    [options, initialValue]\n  );\n  const readValue = useCallback(() => {\n    const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n    if (IS_SERVER) {\n      return initialValueToUse;\n    }\n    try {\n      const raw = window.localStorage.getItem(key);\n      return raw ? deserializer(raw) : initialValueToUse;\n    } catch (error) {\n      console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n      return initialValueToUse;\n    }\n  }, [initialValue, key, deserializer]);\n  const [storedValue, setStoredValue] = useState(() => {\n    if (initializeWithValue) {\n      return readValue();\n    }\n    return initialValue instanceof Function ? initialValue() : initialValue;\n  });\n  const setValue = useEventCallback((value) => {\n    if (IS_SERVER) {\n      console.warn(\n        `Tried setting localStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    try {\n      const newValue = value instanceof Function ? value(readValue()) : value;\n      window.localStorage.setItem(key, serializer(newValue));\n      setStoredValue(newValue);\n      window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n    } catch (error) {\n      console.warn(`Error setting localStorage key \\u201C${key}\\u201D:`, error);\n    }\n  });\n  const removeValue = useEventCallback(() => {\n    if (IS_SERVER) {\n      console.warn(\n        `Tried removing localStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n    window.localStorage.removeItem(key);\n    setStoredValue(defaultValue);\n    window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n  });\n  useEffect(() => {\n    setStoredValue(readValue());\n  }, [key]);\n  const handleStorageChange = useCallback(\n    (event) => {\n      if (event.key && event.key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    },\n    [key, readValue]\n  );\n  useEventListener(\"storage\", handleStorageChange);\n  useEventListener(\"local-storage\", handleStorageChange);\n  return [storedValue, setValue, removeValue];\n}\nvar IS_SERVER2 = typeof window === \"undefined\";\nfunction useMediaQuery(query, {\n  defaultValue = false,\n  initializeWithValue = true\n} = {}) {\n  const getMatches = (query2) => {\n    if (IS_SERVER2) {\n      return defaultValue;\n    }\n    return window.matchMedia(query2).matches;\n  };\n  const [matches, setMatches] = useState(() => {\n    if (initializeWithValue) {\n      return getMatches(query);\n    }\n    return defaultValue;\n  });\n  function handleChange() {\n    setMatches(getMatches(query));\n  }\n  useIsomorphicLayoutEffect(() => {\n    const matchMedia = window.matchMedia(query);\n    handleChange();\n    if (matchMedia.addListener) {\n      matchMedia.addListener(handleChange);\n    } else {\n      matchMedia.addEventListener(\"change\", handleChange);\n    }\n    return () => {\n      if (matchMedia.removeListener) {\n        matchMedia.removeListener(handleChange);\n      } else {\n        matchMedia.removeEventListener(\"change\", handleChange);\n      }\n    };\n  }, [query]);\n  return matches;\n}\n\n// src/useDarkMode/useDarkMode.ts\nvar COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY = \"usehooks-ts-dark-mode\";\nfunction useDarkMode(options = {}) {\n  const {\n    defaultValue,\n    localStorageKey = LOCAL_STORAGE_KEY,\n    initializeWithValue = true\n  } = options;\n  const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, {\n    initializeWithValue,\n    defaultValue\n  });\n  const [isDarkMode, setDarkMode] = useLocalStorage(\n    localStorageKey,\n    defaultValue ?? isDarkOS ?? false,\n    { initializeWithValue }\n  );\n  useIsomorphicLayoutEffect(() => {\n    if (isDarkOS !== isDarkMode) {\n      setDarkMode(isDarkOS);\n    }\n  }, [isDarkOS]);\n  return {\n    isDarkMode,\n    toggle: () => {\n      setDarkMode((prev) => !prev);\n    },\n    enable: () => {\n      setDarkMode(true);\n    },\n    disable: () => {\n      setDarkMode(false);\n    },\n    set: (value) => {\n      setDarkMode(value);\n    }\n  };\n}\nfunction useUnmount(func) {\n  const funcRef = useRef(func);\n  funcRef.current = func;\n  useEffect(\n    () => () => {\n      funcRef.current();\n    },\n    []\n  );\n}\n\n// src/useDebounceCallback/useDebounceCallback.ts\nfunction useDebounceCallback(func, delay = 500, options) {\n  const debouncedFunc = useRef();\n  useUnmount(() => {\n    if (debouncedFunc.current) {\n      debouncedFunc.current.cancel();\n    }\n  });\n  const debounced = useMemo(() => {\n    const debouncedFuncInstance = debounce(func, delay, options);\n    const wrappedFunc = (...args) => {\n      return debouncedFuncInstance(...args);\n    };\n    wrappedFunc.cancel = () => {\n      debouncedFuncInstance.cancel();\n    };\n    wrappedFunc.isPending = () => {\n      return !!debouncedFunc.current;\n    };\n    wrappedFunc.flush = () => {\n      return debouncedFuncInstance.flush();\n    };\n    return wrappedFunc;\n  }, [func, delay, options]);\n  useEffect(() => {\n    debouncedFunc.current = debounce(func, delay, options);\n  }, [func, delay, options]);\n  return debounced;\n}\nfunction useDebounceValue(initialValue, delay, options) {\n  const eq = (options == null ? void 0 : options.equalityFn) ?? ((left, right) => left === right);\n  const unwrappedInitialValue = initialValue instanceof Function ? initialValue() : initialValue;\n  const [debouncedValue, setDebouncedValue] = useState(unwrappedInitialValue);\n  const previousValueRef = useRef(unwrappedInitialValue);\n  const updateDebouncedValue = useDebounceCallback(\n    setDebouncedValue,\n    delay,\n    options\n  );\n  if (!eq(previousValueRef.current, unwrappedInitialValue)) {\n    updateDebouncedValue(unwrappedInitialValue);\n    previousValueRef.current = unwrappedInitialValue;\n  }\n  return [debouncedValue, updateDebouncedValue];\n}\nfunction useDocumentTitle(title, options = {}) {\n  const { preserveTitleOnUnmount = true } = options;\n  const defaultTitle = useRef(null);\n  useIsomorphicLayoutEffect(() => {\n    defaultTitle.current = window.document.title;\n  }, []);\n  useIsomorphicLayoutEffect(() => {\n    window.document.title = title;\n  }, [title]);\n  useUnmount(() => {\n    if (!preserveTitleOnUnmount && defaultTitle.current) {\n      window.document.title = defaultTitle.current;\n    }\n  });\n}\nfunction useHover(elementRef) {\n  const [value, setValue] = useState(false);\n  const handleMouseEnter = () => {\n    setValue(true);\n  };\n  const handleMouseLeave = () => {\n    setValue(false);\n  };\n  useEventListener(\"mouseenter\", handleMouseEnter, elementRef);\n  useEventListener(\"mouseleave\", handleMouseLeave, elementRef);\n  return value;\n}\nfunction useIntersectionObserver({\n  threshold = 0,\n  root = null,\n  rootMargin = \"0%\",\n  freezeOnceVisible = false,\n  initialIsIntersecting = false,\n  onChange\n} = {}) {\n  var _a;\n  const [ref, setRef] = useState(null);\n  const [state, setState] = useState(() => ({\n    isIntersecting: initialIsIntersecting,\n    entry: void 0\n  }));\n  const callbackRef = useRef();\n  callbackRef.current = onChange;\n  const frozen = ((_a = state.entry) == null ? void 0 : _a.isIntersecting) && freezeOnceVisible;\n  useEffect(() => {\n    if (!ref)\n      return;\n    if (!(\"IntersectionObserver\" in window))\n      return;\n    if (frozen)\n      return;\n    let unobserve;\n    const observer = new IntersectionObserver(\n      (entries) => {\n        const thresholds = Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n        entries.forEach((entry) => {\n          const isIntersecting = entry.isIntersecting && thresholds.some((threshold2) => entry.intersectionRatio >= threshold2);\n          setState({ isIntersecting, entry });\n          if (callbackRef.current) {\n            callbackRef.current(isIntersecting, entry);\n          }\n          if (isIntersecting && freezeOnceVisible && unobserve) {\n            unobserve();\n            unobserve = void 0;\n          }\n        });\n      },\n      { threshold, root, rootMargin }\n    );\n    observer.observe(ref);\n    return () => {\n      observer.disconnect();\n    };\n  }, [\n    ref,\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    JSON.stringify(threshold),\n    root,\n    rootMargin,\n    frozen,\n    freezeOnceVisible\n  ]);\n  const prevRef = useRef(null);\n  useEffect(() => {\n    var _a2;\n    if (!ref && ((_a2 = state.entry) == null ? void 0 : _a2.target) && !freezeOnceVisible && !frozen && prevRef.current !== state.entry.target) {\n      prevRef.current = state.entry.target;\n      setState({ isIntersecting: initialIsIntersecting, entry: void 0 });\n    }\n  }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n  const result = [\n    setRef,\n    !!state.isIntersecting,\n    state.entry\n  ];\n  result.ref = result[0];\n  result.isIntersecting = result[1];\n  result.entry = result[2];\n  return result;\n}\nfunction useIsClient() {\n  const [isClient, setClient] = useState(false);\n  useEffect(() => {\n    setClient(true);\n  }, []);\n  return isClient;\n}\nfunction useIsMounted() {\n  const isMounted = useRef(false);\n  useEffect(() => {\n    isMounted.current = true;\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n  return useCallback(() => isMounted.current, []);\n}\nfunction useMap(initialState = /* @__PURE__ */ new Map()) {\n  const [map, setMap] = useState(new Map(initialState));\n  const actions = {\n    set: useCallback((key, value) => {\n      setMap((prev) => {\n        const copy = new Map(prev);\n        copy.set(key, value);\n        return copy;\n      });\n    }, []),\n    setAll: useCallback((entries) => {\n      setMap(() => new Map(entries));\n    }, []),\n    remove: useCallback((key) => {\n      setMap((prev) => {\n        const copy = new Map(prev);\n        copy.delete(key);\n        return copy;\n      });\n    }, []),\n    reset: useCallback(() => {\n      setMap(() => /* @__PURE__ */ new Map());\n    }, [])\n  };\n  return [map, actions];\n}\n\n// src/useOnClickOutside/useOnClickOutside.ts\nfunction useOnClickOutside(ref, handler, eventType = \"mousedown\", eventListenerOptions = {}) {\n  useEventListener(\n    eventType,\n    (event) => {\n      const target = event.target;\n      if (!target || !target.isConnected) {\n        return;\n      }\n      const isOutside = Array.isArray(ref) ? ref.filter((r) => Boolean(r.current)).every((r) => r.current && !r.current.contains(target)) : ref.current && !ref.current.contains(target);\n      if (isOutside) {\n        handler(event);\n      }\n    },\n    void 0,\n    eventListenerOptions\n  );\n}\nvar IS_SERVER3 = typeof window === \"undefined\";\nfunction useReadLocalStorage(key, options = {}) {\n  let { initializeWithValue = true } = options;\n  if (IS_SERVER3) {\n    initializeWithValue = false;\n  }\n  const deserializer = useCallback(\n    (value) => {\n      if (options.deserializer) {\n        return options.deserializer(value);\n      }\n      if (value === \"undefined\") {\n        return void 0;\n      }\n      let parsed;\n      try {\n        parsed = JSON.parse(value);\n      } catch (error) {\n        console.error(\"Error parsing JSON:\", error);\n        return null;\n      }\n      return parsed;\n    },\n    [options]\n  );\n  const readValue = useCallback(() => {\n    if (IS_SERVER3) {\n      return null;\n    }\n    try {\n      const raw = window.localStorage.getItem(key);\n      return raw ? deserializer(raw) : null;\n    } catch (error) {\n      console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n      return null;\n    }\n  }, [key, deserializer]);\n  const [storedValue, setStoredValue] = useState(() => {\n    if (initializeWithValue) {\n      return readValue();\n    }\n    return void 0;\n  });\n  useEffect(() => {\n    setStoredValue(readValue());\n  }, [key]);\n  const handleStorageChange = useCallback(\n    (event) => {\n      if (event.key && event.key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    },\n    [key, readValue]\n  );\n  useEventListener(\"storage\", handleStorageChange);\n  useEventListener(\"local-storage\", handleStorageChange);\n  return storedValue;\n}\nvar initialSize = {\n  width: void 0,\n  height: void 0\n};\nfunction useResizeObserver(options) {\n  const { ref, box = \"content-box\" } = options;\n  const [{ width, height }, setSize] = useState(initialSize);\n  const isMounted = useIsMounted();\n  const previousSize = useRef({ ...initialSize });\n  const onResize = useRef(void 0);\n  onResize.current = options.onResize;\n  useEffect(() => {\n    if (!ref.current)\n      return;\n    if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window))\n      return;\n    const observer = new ResizeObserver(([entry]) => {\n      const boxProp = box === \"border-box\" ? \"borderBoxSize\" : box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n      const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n      const newHeight = extractSize(entry, boxProp, \"blockSize\");\n      const hasChanged = previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n      if (hasChanged) {\n        const newSize = { width: newWidth, height: newHeight };\n        previousSize.current.width = newWidth;\n        previousSize.current.height = newHeight;\n        if (onResize.current) {\n          onResize.current(newSize);\n        } else {\n          if (isMounted()) {\n            setSize(newSize);\n          }\n        }\n      }\n    });\n    observer.observe(ref.current, { box });\n    return () => {\n      observer.disconnect();\n    };\n  }, [box, ref, isMounted]);\n  return { width, height };\n}\nfunction extractSize(entry, box, sizeType) {\n  if (!entry[box]) {\n    if (box === \"contentBoxSize\") {\n      return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n    }\n    return void 0;\n  }\n  return Array.isArray(entry[box]) ? entry[box][0][sizeType] : (\n    // @ts-ignore Support Firefox's non-standard behavior\n    entry[box][sizeType]\n  );\n}\nvar IS_SERVER4 = typeof window === \"undefined\";\nfunction useScreen(options = {}) {\n  let { initializeWithValue = true } = options;\n  if (IS_SERVER4) {\n    initializeWithValue = false;\n  }\n  const readScreen = () => {\n    if (IS_SERVER4) {\n      return void 0;\n    }\n    return window.screen;\n  };\n  const [screen, setScreen] = useState(() => {\n    if (initializeWithValue) {\n      return readScreen();\n    }\n    return void 0;\n  });\n  const debouncedSetScreen = useDebounceCallback(\n    setScreen,\n    options.debounceDelay\n  );\n  function handleSize() {\n    const newScreen = readScreen();\n    const setSize = options.debounceDelay ? debouncedSetScreen : setScreen;\n    if (newScreen) {\n      const {\n        width,\n        height,\n        availHeight,\n        availWidth,\n        colorDepth,\n        orientation,\n        pixelDepth\n      } = newScreen;\n      setSize({\n        width,\n        height,\n        availHeight,\n        availWidth,\n        colorDepth,\n        orientation,\n        pixelDepth\n      });\n    }\n  }\n  useEventListener(\"resize\", handleSize);\n  useIsomorphicLayoutEffect(() => {\n    handleSize();\n  }, []);\n  return screen;\n}\nvar cachedScriptStatuses = /* @__PURE__ */ new Map();\nfunction getScriptNode(src) {\n  const node = document.querySelector(\n    `script[src=\"${src}\"]`\n  );\n  const status = node == null ? void 0 : node.getAttribute(\"data-status\");\n  return {\n    node,\n    status\n  };\n}\nfunction useScript(src, options) {\n  const [status, setStatus] = useState(() => {\n    if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n      return \"idle\";\n    }\n    if (typeof window === \"undefined\") {\n      return \"loading\";\n    }\n    return cachedScriptStatuses.get(src) ?? \"loading\";\n  });\n  useEffect(() => {\n    if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n      return;\n    }\n    const cachedScriptStatus = cachedScriptStatuses.get(src);\n    if (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n      setStatus(cachedScriptStatus);\n      return;\n    }\n    const script = getScriptNode(src);\n    let scriptNode = script.node;\n    if (!scriptNode) {\n      scriptNode = document.createElement(\"script\");\n      scriptNode.src = src;\n      scriptNode.async = true;\n      if (options == null ? void 0 : options.id) {\n        scriptNode.id = options.id;\n      }\n      scriptNode.setAttribute(\"data-status\", \"loading\");\n      document.body.appendChild(scriptNode);\n      const setAttributeFromEvent = (event) => {\n        const scriptStatus = event.type === \"load\" ? \"ready\" : \"error\";\n        scriptNode == null ? void 0 : scriptNode.setAttribute(\"data-status\", scriptStatus);\n      };\n      scriptNode.addEventListener(\"load\", setAttributeFromEvent);\n      scriptNode.addEventListener(\"error\", setAttributeFromEvent);\n    } else {\n      setStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n    }\n    const setStateFromEvent = (event) => {\n      const newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n      setStatus(newStatus);\n      cachedScriptStatuses.set(src, newStatus);\n    };\n    scriptNode.addEventListener(\"load\", setStateFromEvent);\n    scriptNode.addEventListener(\"error\", setStateFromEvent);\n    return () => {\n      if (scriptNode) {\n        scriptNode.removeEventListener(\"load\", setStateFromEvent);\n        scriptNode.removeEventListener(\"error\", setStateFromEvent);\n      }\n      if (scriptNode && (options == null ? void 0 : options.removeOnUnmount)) {\n        scriptNode.remove();\n        cachedScriptStatuses.delete(src);\n      }\n    };\n  }, [src, options == null ? void 0 : options.shouldPreventLoad, options == null ? void 0 : options.removeOnUnmount, options == null ? void 0 : options.id]);\n  return status;\n}\nvar IS_SERVER5 = typeof window === \"undefined\";\nfunction useScrollLock(options = {}) {\n  const { autoLock = true, lockTarget, widthReflow = true } = options;\n  const [isLocked, setIsLocked] = useState(false);\n  const target = useRef(null);\n  const originalStyle = useRef(null);\n  const lock = () => {\n    if (target.current) {\n      const { overflow, paddingRight } = target.current.style;\n      originalStyle.current = { overflow, paddingRight };\n      if (widthReflow) {\n        const offsetWidth = target.current === document.body ? window.innerWidth : target.current.offsetWidth;\n        const currentPaddingRight = parseInt(window.getComputedStyle(target.current).paddingRight, 10) || 0;\n        const scrollbarWidth = offsetWidth - target.current.scrollWidth;\n        target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`;\n      }\n      target.current.style.overflow = \"hidden\";\n      setIsLocked(true);\n    }\n  };\n  const unlock = () => {\n    if (target.current && originalStyle.current) {\n      target.current.style.overflow = originalStyle.current.overflow;\n      if (widthReflow) {\n        target.current.style.paddingRight = originalStyle.current.paddingRight;\n      }\n    }\n    setIsLocked(false);\n  };\n  useIsomorphicLayoutEffect(() => {\n    if (IS_SERVER5)\n      return;\n    if (lockTarget) {\n      target.current = typeof lockTarget === \"string\" ? document.querySelector(lockTarget) : lockTarget;\n    }\n    if (!target.current) {\n      target.current = document.body;\n    }\n    if (autoLock) {\n      lock();\n    }\n    return () => {\n      unlock();\n    };\n  }, [autoLock, lockTarget, widthReflow]);\n  return { isLocked, lock, unlock };\n}\nvar IS_SERVER6 = typeof window === \"undefined\";\nfunction useSessionStorage(key, initialValue, options = {}) {\n  const { initializeWithValue = true } = options;\n  const serializer = useCallback(\n    (value) => {\n      if (options.serializer) {\n        return options.serializer(value);\n      }\n      return JSON.stringify(value);\n    },\n    [options]\n  );\n  const deserializer = useCallback(\n    (value) => {\n      if (options.deserializer) {\n        return options.deserializer(value);\n      }\n      if (value === \"undefined\") {\n        return void 0;\n      }\n      const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n      let parsed;\n      try {\n        parsed = JSON.parse(value);\n      } catch (error) {\n        console.error(\"Error parsing JSON:\", error);\n        return defaultValue;\n      }\n      return parsed;\n    },\n    [options, initialValue]\n  );\n  const readValue = useCallback(() => {\n    const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n    if (IS_SERVER6) {\n      return initialValueToUse;\n    }\n    try {\n      const raw = window.sessionStorage.getItem(key);\n      return raw ? deserializer(raw) : initialValueToUse;\n    } catch (error) {\n      console.warn(`Error reading sessionStorage key \\u201C${key}\\u201D:`, error);\n      return initialValueToUse;\n    }\n  }, [initialValue, key, deserializer]);\n  const [storedValue, setStoredValue] = useState(() => {\n    if (initializeWithValue) {\n      return readValue();\n    }\n    return initialValue instanceof Function ? initialValue() : initialValue;\n  });\n  const setValue = useEventCallback((value) => {\n    if (IS_SERVER6) {\n      console.warn(\n        `Tried setting sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    try {\n      const newValue = value instanceof Function ? value(readValue()) : value;\n      window.sessionStorage.setItem(key, serializer(newValue));\n      setStoredValue(newValue);\n      window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n    } catch (error) {\n      console.warn(`Error setting sessionStorage key \\u201C${key}\\u201D:`, error);\n    }\n  });\n  const removeValue = useEventCallback(() => {\n    if (IS_SERVER6) {\n      console.warn(\n        `Tried removing sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n    window.sessionStorage.removeItem(key);\n    setStoredValue(defaultValue);\n    window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n  });\n  useEffect(() => {\n    setStoredValue(readValue());\n  }, [key]);\n  const handleStorageChange = useCallback(\n    (event) => {\n      if (event.key && event.key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    },\n    [key, readValue]\n  );\n  useEventListener(\"storage\", handleStorageChange);\n  useEventListener(\"session-storage\", handleStorageChange);\n  return [storedValue, setValue, removeValue];\n}\nfunction useStep(maxStep) {\n  const [currentStep, setCurrentStep] = useState(1);\n  const canGoToNextStep = currentStep + 1 <= maxStep;\n  const canGoToPrevStep = currentStep - 1 > 0;\n  const setStep = useCallback(\n    (step) => {\n      const newStep = step instanceof Function ? step(currentStep) : step;\n      if (newStep >= 1 && newStep <= maxStep) {\n        setCurrentStep(newStep);\n        return;\n      }\n      throw new Error(\"Step not valid\");\n    },\n    [maxStep, currentStep]\n  );\n  const goToNextStep = useCallback(() => {\n    if (canGoToNextStep) {\n      setCurrentStep((step) => step + 1);\n    }\n  }, [canGoToNextStep]);\n  const goToPrevStep = useCallback(() => {\n    if (canGoToPrevStep) {\n      setCurrentStep((step) => step - 1);\n    }\n  }, [canGoToPrevStep]);\n  const reset = useCallback(() => {\n    setCurrentStep(1);\n  }, []);\n  return [\n    currentStep,\n    {\n      goToNextStep,\n      goToPrevStep,\n      canGoToNextStep,\n      canGoToPrevStep,\n      setStep,\n      reset\n    }\n  ];\n}\n\n// src/useTernaryDarkMode/useTernaryDarkMode.ts\nvar COLOR_SCHEME_QUERY2 = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY2 = \"usehooks-ts-ternary-dark-mode\";\nfunction useTernaryDarkMode({\n  defaultValue = \"system\",\n  localStorageKey = LOCAL_STORAGE_KEY2,\n  initializeWithValue = true\n} = {}) {\n  const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY2, { initializeWithValue });\n  const [mode, setMode] = useLocalStorage(localStorageKey, defaultValue, {\n    initializeWithValue\n  });\n  const isDarkMode = mode === \"dark\" || mode === \"system\" && isDarkOS;\n  const toggleTernaryDarkMode = () => {\n    const modes = [\"light\", \"system\", \"dark\"];\n    setMode((prevMode) => {\n      const nextIndex = (modes.indexOf(prevMode) + 1) % modes.length;\n      return modes[nextIndex];\n    });\n  };\n  return {\n    isDarkMode,\n    ternaryDarkMode: mode,\n    setTernaryDarkMode: setMode,\n    toggleTernaryDarkMode\n  };\n}\nfunction useTimeout(callback, delay) {\n  const savedCallback = useRef(callback);\n  useIsomorphicLayoutEffect(() => {\n    savedCallback.current = callback;\n  }, [callback]);\n  useEffect(() => {\n    if (!delay && delay !== 0) {\n      return;\n    }\n    const id = setTimeout(() => {\n      savedCallback.current();\n    }, delay);\n    return () => {\n      clearTimeout(id);\n    };\n  }, [delay]);\n}\nfunction useToggle(defaultValue) {\n  const [value, setValue] = useState(!!defaultValue);\n  const toggle = useCallback(() => {\n    setValue((x) => !x);\n  }, []);\n  return [value, toggle, setValue];\n}\nvar IS_SERVER7 = typeof window === \"undefined\";\nfunction useWindowSize(options = {}) {\n  let { initializeWithValue = true } = options;\n  if (IS_SERVER7) {\n    initializeWithValue = false;\n  }\n  const [windowSize, setWindowSize] = useState(() => {\n    if (initializeWithValue) {\n      return {\n        width: window.innerWidth,\n        height: window.innerHeight\n      };\n    }\n    return {\n      width: void 0,\n      height: void 0\n    };\n  });\n  const debouncedSetWindowSize = useDebounceCallback(\n    setWindowSize,\n    options.debounceDelay\n  );\n  function handleSize() {\n    const setSize = options.debounceDelay ? debouncedSetWindowSize : setWindowSize;\n    setSize({\n      width: window.innerWidth,\n      height: window.innerHeight\n    });\n  }\n  useEventListener(\"resize\", handleSize);\n  useIsomorphicLayoutEffect(() => {\n    handleSize();\n  }, []);\n  return windowSize;\n}\n\nexport { useBoolean, useClickAnyWhere, useCopyToClipboard, useCountdown, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDocumentTitle, useEventCallback, useEventListener, useHover, useIntersectionObserver, useInterval, useIsClient, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useOnClickOutside, useReadLocalStorage, useResizeObserver, useScreen, useScript, useScrollLock, useSessionStorage, useStep, useTernaryDarkMode, useTimeout, useToggle, useUnmount, useWindowSize };\n","import { ColDef, GridApi, IRowNode, ISizeColumnsToFitParams } from 'ag-grid-community';\nimport { CsvExportParams } from 'ag-grid-community';\nimport { createContext, useContext } from 'react';\n\nimport { ColDefT, GridBaseRow } from '../components/types';\n\nexport type GridFilterExternal<TData extends GridBaseRow> = (data: TData, rowNode: IRowNode) => boolean;\n\nexport interface AutoSizeColumnsProps {\n  skipHeader?: boolean;\n  colIds?: Set<string> | string[];\n  userSizedColIds?: Set<string>;\n}\n\nexport type AutoSizeColumnsResult = { width: number } | null;\n\nexport interface StartCellEditingProps<TData extends GridBaseRow> {\n  rowId: TData['id'];\n  colId: string;\n}\n\nexport interface GridContextType<TData extends GridBaseRow> {\n  gridReady: boolean;\n  gridRenderState: () => null | 'empty' | 'rows-visible';\n  getColDef: (colId?: string) => ColDef | undefined;\n  getColumns: (\n    filter?: keyof ColDef | ((r: ColDef) => boolean | undefined | null | number | string),\n  ) => ColDefT<TData, any>[];\n  getColumnIds: (filter?: keyof ColDef | ((r: ColDef) => boolean | undefined | null | number | string)) => string[];\n  setApis: (gridApi: GridApi | undefined, hasExternallySelectedItems: boolean, dataTestId?: string) => void;\n  prePopupOps: () => void;\n  setQuickFilter: (quickFilter: string) => void;\n  editingCells: () => boolean;\n  getSelectedRows: <T extends GridBaseRow>() => T[];\n  getFilteredSelectedRows: <T extends GridBaseRow>() => T[];\n  getSelectedRowIds: () => TData['id'][];\n  getFilteredSelectedRowIds: () => TData['id'][];\n  selectRowsDiff: (updateFn: () => Promise<any>) => Promise<void>;\n  selectRowsWithFlashDiff: (updateFn: () => Promise<any>) => Promise<void>;\n  selectRowsById: (rowIds?: TData['id'][]) => void;\n  selectRowsByIdWithFlash: (rowIds?: TData['id'][]) => void;\n  flashRows: (rowIds?: TData['id'][]) => void;\n  flashRowsDiff: (updateFn: () => Promise<any>) => Promise<void>;\n  focusByRowById: (rowId: TData['id'], ifNoCellFocused?: boolean) => void;\n  ensureRowVisible: (id: TData['id'] | string) => boolean;\n  ensureSelectedRowIsVisible: () => void;\n  getFirstRowId: () => TData['id'];\n  autoSizeColumns: (props?: AutoSizeColumnsProps) => Promise<AutoSizeColumnsResult>;\n  sizeColumnsToFit: (paramsOrGridWidth?: ISizeColumnsToFitParams) => void;\n  startCellEditing: ({ rowId, colId }: StartCellEditingProps<TData>) => Promise<void>;\n  // Restores the previous focus after cell editing\n  resetFocusedCellAfterCellEditing: () => void;\n  updatingCells: (\n    props: { selectedRows: GridBaseRow[]; field?: string },\n    fnUpdate: (selectedRows: any[]) => Promise<boolean>,\n    setSaving?: (saving: boolean) => void,\n    tabDirection?: 1 | 0 | -1,\n  ) => Promise<boolean>;\n  redrawRows: (rowNodes?: IRowNode[]) => void;\n  externallySelectedItemsAreInSync: boolean;\n  setExternallySelectedItemsAreInSync: (inSync: boolean) => void;\n  waitForExternallySelectedItemsToBeInSync: () => Promise<void>;\n  addExternalFilter: (filter: GridFilterExternal<TData>) => void;\n  removeExternalFilter: (filter: GridFilterExternal<TData>) => void;\n  isExternalFilterPresent: () => boolean;\n  doesExternalFilterPass: (node: IRowNode) => boolean;\n  invisibleColumnIds: string[] | undefined;\n  setInvisibleColumnIds: (colIds: string[]) => void;\n  downloadCsv: (csvExportParams?: CsvExportParams) => void;\n  onBulkEditingComplete: () => Promise<void> | void;\n  setOnBulkEditingComplete: (callback: (() => Promise<void> | void) | undefined) => void;\n  showNoRowsOverlay: () => void;\n}\n\nconst NoContext = <T,>(): T => {\n  console.error('Missing GridContextProvider');\n  return null as T;\n};\n\nexport const GridContext = createContext<GridContextType<any>>({\n  gridReady: false,\n  gridRenderState: () => null,\n  getColDef: NoContext,\n  getColumns: NoContext,\n  getColumnIds: NoContext,\n  invisibleColumnIds: undefined,\n  setInvisibleColumnIds: NoContext,\n  prePopupOps: NoContext,\n  externallySelectedItemsAreInSync: false,\n  setApis: NoContext,\n  setQuickFilter: NoContext,\n  selectRowsById: NoContext,\n  getSelectedRows: NoContext,\n  getFilteredSelectedRows: NoContext,\n  getSelectedRowIds: NoContext,\n  getFilteredSelectedRowIds: NoContext,\n  selectRowsDiff: NoContext,\n  selectRowsByIdWithFlash: NoContext,\n  selectRowsWithFlashDiff: NoContext,\n  flashRows: NoContext,\n  flashRowsDiff: NoContext,\n  focusByRowById: NoContext,\n  ensureRowVisible: NoContext,\n  ensureSelectedRowIsVisible: NoContext,\n  getFirstRowId: NoContext,\n  autoSizeColumns: NoContext,\n  sizeColumnsToFit: NoContext,\n  editingCells: NoContext,\n  startCellEditing: NoContext,\n  resetFocusedCellAfterCellEditing: NoContext,\n  updatingCells: NoContext,\n  redrawRows: NoContext,\n  setExternallySelectedItemsAreInSync: NoContext,\n  waitForExternallySelectedItemsToBeInSync: NoContext,\n  addExternalFilter: NoContext,\n  removeExternalFilter: NoContext,\n  isExternalFilterPresent: NoContext,\n  doesExternalFilterPass: NoContext,\n  downloadCsv: NoContext,\n  onBulkEditingComplete: NoContext,\n  setOnBulkEditingComplete: NoContext,\n  showNoRowsOverlay: NoContext,\n});\n\nexport const useGridContext = <TData extends GridBaseRow>() => useContext<GridContextType<TData>>(GridContext);\n","import { createContext } from 'react';\n\nexport type GridUpdatingContextType = {\n  anyUpdating: () => boolean;\n  checkUpdating: (fields: string | string[], id: number | string) => boolean;\n  modifyUpdating: (\n    fields: string | string[],\n    ids: (number | string)[],\n    fn: () => void | Promise<void>,\n  ) => Promise<void>;\n  updatedDep: number;\n  updatingCols: () => string[];\n};\n\nexport const GridUpdatingContext = createContext<GridUpdatingContextType>({\n  anyUpdating: () => {\n    console.error('Missing GridUpdatingContext');\n    return false;\n  },\n  checkUpdating: () => {\n    console.error('Missing GridUpdatingContext');\n    return false;\n  },\n  updatingCols: () => {\n    console.error('Missing GridUpdatingContext');\n    return [];\n  },\n  // eslint-disable-next-line @typescript-eslint/require-await\n  modifyUpdating: async () => {\n    console.error('Missing GridUpdatingContext');\n  },\n  updatedDep: 0,\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction natsort(options) {\n    if (options === void 0) { options = {}; }\n    var ore = /^0/;\n    var sre = /\\s+/g;\n    var tre = /^\\s+|\\s+$/g;\n    // unicode\n    var ure = /[^\\x00-\\x80]/;\n    // hex\n    var hre = /^0x[0-9a-f]+$/i;\n    // numeric\n    var nre = /(0x[\\da-fA-F]+|(^[\\+\\-]?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?(?=\\D|\\s|$))|\\d+)/g;\n    // datetime\n    var dre = /(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/; // tslint:disable-line\n    var toLowerCase = String.prototype.toLocaleLowerCase || String.prototype.toLowerCase;\n    var GREATER = options.desc ? -1 : 1;\n    var SMALLER = -GREATER;\n    var normalize = options.insensitive\n        ? function (s) { return toLowerCase.call(\"\" + s).replace(tre, ''); }\n        : function (s) { return (\"\" + s).replace(tre, ''); };\n    function tokenize(s) {\n        return s.replace(nre, '\\0$1\\0')\n            .replace(/\\0$/, '')\n            .replace(/^\\0/, '')\n            .split('\\0');\n    }\n    function parse(s, l) {\n        // normalize spaces; find floats not starting with '0',\n        // string or 0 if not defined (Clint Priest)\n        return (!s.match(ore) || l === 1)\n            && parseFloat(s)\n            || s.replace(sre, ' ').replace(tre, '')\n            || 0;\n    }\n    return function (a, b) {\n        // trim pre-post whitespace\n        var aa = normalize(a);\n        var bb = normalize(b);\n        // return immediately if at least one of the values is empty.\n        // empty string < any others\n        if (!aa && !bb) {\n            return 0;\n        }\n        if (!aa && bb) {\n            return SMALLER;\n        }\n        if (aa && !bb) {\n            return GREATER;\n        }\n        // tokenize: split numeric strings and default strings\n        var aArr = tokenize(aa);\n        var bArr = tokenize(bb);\n        // hex or date detection\n        var aHex = aa.match(hre);\n        var bHex = bb.match(hre);\n        var av = (aHex && bHex) ? parseInt(aHex[0], 16) : (aArr.length !== 1 && Date.parse(aa));\n        var bv = (aHex && bHex)\n            ? parseInt(bHex[0], 16)\n            : av && bb.match(dre) && Date.parse(bb) || null;\n        // try and sort Hex codes or Dates\n        if (bv) {\n            if (av === bv) {\n                return 0;\n            }\n            if (av < bv) {\n                return SMALLER;\n            }\n            if (av > bv) {\n                return GREATER;\n            }\n        }\n        var al = aArr.length;\n        var bl = bArr.length;\n        // handle numeric strings and default strings\n        for (var i = 0, l = Math.max(al, bl); i < l; i += 1) {\n            var af = parse(aArr[i] || '', al);\n            var bf = parse(bArr[i] || '', bl);\n            // handle numeric vs string comparison.\n            // numeric < string\n            if (isNaN(af) !== isNaN(bf)) {\n                return isNaN(af) ? GREATER : SMALLER;\n            }\n            // if unicode use locale comparison\n            if (ure.test(af + bf) && af.localeCompare) {\n                var comp = af.localeCompare(bf);\n                if (comp > 0) {\n                    return GREATER;\n                }\n                if (comp < 0) {\n                    return SMALLER;\n                }\n                if (i === l - 1) {\n                    return 0;\n                }\n            }\n            if (af < bf) {\n                return SMALLER;\n            }\n            if (af > bf) {\n                return GREATER;\n            }\n            if (\"\" + af < \"\" + bf) {\n                return SMALLER;\n            }\n            if (\"\" + af > \"\" + bf) {\n                return GREATER;\n            }\n        }\n        return 0;\n    };\n}\nexports.default = natsort;\n","import { isEmpty, negate } from 'lodash-es';\nimport natsort from 'natsort';\n\nexport const isNotEmpty = negate(isEmpty);\n\nexport const wait = (timeoutMs: number) =>\n  new Promise<(string | null)[]>((resolve) => {\n    setTimeout(resolve, timeoutMs);\n  });\n\n// This regexp only works if you parseFloat first, it won't validate a float on its own\n// It prevents scientific 1e10, or trailing decimal 1.2.3, or trailing garbage 1.2xyz\nconst isFloatRegExp = /^-?\\d*\\.?\\d*$/;\nexport const isFloat = (value: string) => {\n  try {\n    // Just checking it's not scientific notation or \"NaN\" here.\n    // Also parse float will parse up to the first invalid character,\n    // so we need to check there's no remaining invalids e.g. \"1.2xyz\" would parse as 1.2\n    return !Number.isNaN(parseFloat(value)) && isFloatRegExp.test(value);\n  } catch {\n    return false;\n  }\n};\n\nexport const findParentWithClass = function (className: string, child: Node): HTMLElement | null {\n  for (let node: Node | null = child; node; node = node.parentNode) {\n    // When nodes are in portals they aren't type node anymore hence treating it as any here\n    if ((node as any).classList && (node as any).classList.contains(className)) {\n      return node as HTMLElement;\n    }\n  }\n  return null;\n};\n\nexport const hasParentClass = function (className: string, child: Node) {\n  for (let node: Node | null = child; node; node = node.parentNode) {\n    // When nodes are in portals they aren't type node anymore hence treating it as any here\n    if ((node as any).classList && (node as any).classList.contains(className)) {\n      return true;\n    }\n  }\n  return false;\n};\n\nexport const stringByteLengthIsInvalid = (str: string, maxBytes: number) =>\n  new TextEncoder().encode(str).length > maxBytes;\n\nexport const fnOrVar = (fn: any, param?: any) => (typeof fn === 'function' ? fn(param) : fn);\n\nexport const sanitiseFileName = (filename: string): string => {\n  const valid = filename\n    .trim()\n    .replaceAll(/(\\/|\\\\)+/g, '-')\n    .replaceAll(/\\s+/g, '_')\n    .replaceAll(/[^\\w\\-āēīōūĀĒĪŌŪ.]/g, '');\n  const parts = valid.split('.');\n  const fileExt = parts.length > 1 ? parts.pop() : undefined;\n  // Arbitrary max filename length of 64 chars + extension\n  if (!fileExt) return valid.slice().slice(0, 64);\n  return valid.slice(0, -fileExt.length - 1).slice(0, 64) + '.' + fileExt;\n};\n\nconst naturalSortInsensitive = natsort({ insensitive: true });\nconst santitizeNaturalValue = (v: string | number | null | undefined): string => {\n  if (v === '–' || v === '-' || v == null) {\n    return '';\n  }\n  return String(v);\n};\nexport const compareNaturalInsensitive = (\n  a?: object | string | number | null,\n  b?: object | string | number | null,\n): number => {\n  if ((a !== null && typeof a === 'object') || (b !== null && typeof b === 'object')) {\n    // We can't compare objects\n    return 0;\n  }\n  return naturalSortInsensitive(santitizeNaturalValue(a), santitizeNaturalValue(b));\n};\n","import { CellClickedEvent } from 'ag-grid-community';\n\n/**\n * AgGrid checkbox select does not pass clicks within cell but not on the checkbox to checkbox.\n * This passes the event to the checkbox when you click anywhere in the cell.\n */\nexport const clickInputWhenContainingCellClicked = (params: CellClickedEvent) => {\n  const { data, event, colDef } = params;\n  if (!data || !event) return;\n\n  const element = event.target as Element;\n  // Already handled\n  if (\n    element.closest('.GridCell-readonly') ||\n    (['BUTTON', 'INPUT'].includes(element?.tagName) && element.closest('.ag-cell-inline-editing'))\n  ) {\n    return;\n  }\n\n  const row = element.closest('[row-id]');\n  if (!row) return;\n\n  const colId = colDef.colId;\n  if (!colId) return;\n\n  const clickInput = () => {\n    const cell = row.querySelector(`[col-id='${colId}']`);\n    if (!cell) return;\n\n    const input = cell.querySelector('input, button');\n    if (!input) {\n      return;\n    }\n\n    input.dispatchEvent(event);\n  };\n\n  setTimeout(clickInput, 20);\n};\n","import { IHeaderParams } from 'ag-grid-community';\nimport clsx from 'clsx';\nimport { useEffect, useState } from 'react';\n\n/**\n * AgGrid's existing select header doesn't work the way we want.\n * If you have partial select then clicking the header checkbox will select all,\n * but we want to deselect all on partial select.\n */\nexport const GridHeaderSelect = ({ api }: IHeaderParams) => {\n  // This is used to force an update on selection change\n  const [updateCounter, setUpdateCounter] = useState(0);\n  const selectedNodeCount = api.getSelectedRows().length;\n\n  useEffect(() => {\n    const clickHandler = () => {\n      setUpdateCounter(updateCounter + 1);\n    };\n\n    api.addEventListener('selectionChanged', clickHandler);\n    return () => {\n      !api.isDestroyed() && api.removeEventListener('selectionChanged', clickHandler);\n    };\n  }, [api, updateCounter]);\n\n  const handleMultiSelect = () => {\n    if (selectedNodeCount == 0) {\n      api.selectAll('filtered');\n    } else {\n      api.deselectAll();\n    }\n  };\n\n  const totalNodeCount = api.getDisplayedRowCount();\n  const partialSelect = selectedNodeCount != 0 && selectedNodeCount != totalNodeCount;\n  const allSelected = selectedNodeCount != 0 && selectedNodeCount == totalNodeCount;\n\n  return (\n    <div\n      className={clsx(\n        'ag-wrapper ag-input-wrapper ag-checkbox-input-wrapper',\n        partialSelect && 'ag-indeterminate',\n        allSelected && 'ag-checked',\n      )}\n      onClick={handleMultiSelect}\n    >\n      <input\n        type=\"checkbox\"\n        className={'ag-checkbox-input-wrapper'}\n        onChange={() => {\n          /* do nothing */\n        }}\n      />\n    </div>\n  );\n};\n","import { createContext } from 'react';\n\nimport { RMEvent } from '../utils';\n\nexport interface EventHandlersContextType {\n  handleClose?: () => void;\n  handleClick: (event: RMEvent, checked: boolean) => void;\n}\n\nexport const EventHandlersContext = createContext<EventHandlersContextType>({\n  handleClick: () => {},\n});\n","import { createContext } from 'react';\n\nexport const ItemSettingsContext = createContext<{ submenuCloseDelay: number; submenuOpenDelay: number }>({\n  submenuOpenDelay: 0,\n  submenuCloseDelay: 0,\n});\n","import { createContext, MutableRefObject, RefObject } from 'react';\n\nimport { ControlledMenuProps, MenuReposition, MenuViewScroll, RectElement, TransitionFieldType } from '../types';\n\ninterface SettingsContextType extends ControlledMenuProps {\n  rootMenuRef?: MutableRefObject<any>;\n  rootAnchorRef?: MutableRefObject<any>;\n  scrollNodesRef: MutableRefObject<{ anchors?: Element[]; menu?: any }>;\n\n  initialMounted?: boolean;\n  unmountOnClose?: boolean;\n  transition?: TransitionFieldType;\n  transitionTimeout?: number;\n  boundingBoxRef?: RefObject<Element | RectElement>;\n  boundingBoxPadding?: string;\n  reposition?: MenuReposition;\n  viewScroll?: MenuViewScroll;\n}\n\n// FIXME hacking a default context in here is probably bad, but the context is mess\nexport const SettingsContext = createContext<SettingsContextType>({} as SettingsContextType);\n","import { useMemo } from 'react';\n\nimport { ClassNameProp } from '../types';\n\ntype useBemModifiers = Record<string, boolean | string | undefined>;\n\ninterface useBemProps {\n  block: string;\n  element?: string;\n  modifiers?: useBemModifiers;\n  className?: ClassNameProp<any>;\n}\n\n// Generate className following BEM methodology: http://getbem.com/naming/\n// Modifier value can be one of the following types: boolean, string, undefined\nexport const useBEM = ({ block, element, modifiers, className }: useBemProps) =>\n  useMemo(() => {\n    const blockElement = element ? `${block}__${element}` : block;\n\n    let classString = blockElement;\n    modifiers &&\n      Object.keys(modifiers).forEach((name) => {\n        const value = modifiers[name];\n        if (value) classString += ` ${blockElement}--${value === true ? name : `${name}-${value}`}`;\n      });\n\n    let expandedClassName = typeof className === 'function' ? className(modifiers) : className;\n    if (typeof expandedClassName === 'string') {\n      expandedClassName = expandedClassName.trim();\n      if (expandedClassName) classString += ` ${expandedClassName}`;\n    }\n\n    return classString;\n  }, [block, element, modifiers, className]);\n","import { ForwardedRef, LegacyRef, useMemo } from 'react';\n\n// Adapted from material-ui\n// https://github.com/mui-org/material-ui/blob/f996027d00e7e4bff3fc040786c1706f9c6c3f82/packages/material-ui-utils/src/useForkRef.ts\n\nconst setRef = <T>(ref: ForwardedRef<T> | undefined, instance: T | null) => {\n  if (typeof ref === 'function') {\n    ref(instance);\n  } else if (ref) {\n    ref.current = instance;\n  }\n};\n\nexport const useCombinedRef = <Instance>(\n  refA: ForwardedRef<Instance> | undefined,\n  refB: ForwardedRef<Instance> | undefined,\n): LegacyRef<Instance> => {\n  return useMemo(() => {\n    return (instance: any) => {\n      setRef(refA, instance);\n      setRef(refB, instance);\n    };\n  }, [refA, refB]);\n};\n","import { useEffect, useLayoutEffect } from 'react';\n\n// Get around a warning when using useLayoutEffect on the server.\n// https://github.com/reduxjs/react-redux/blob/b48d087d76f666e1c6c5a9713bbec112a1631841/src/utils/useIsomorphicLayoutEffect.js#L12\n// https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n// https://github.com/facebook/react/issues/14927#issuecomment-549457471\n\nconst useIsomorphicLayoutEffect =\n  typeof window !== 'undefined' &&\n  typeof window.document !== 'undefined' &&\n  typeof window.document.createElement !== 'undefined'\n    ? useLayoutEffect\n    : useEffect;\n\nexport { useIsomorphicLayoutEffect as useLayoutEffect };\n","import { MutableRefObject } from 'react';\n\nimport { useLayoutEffect } from './useIsomorphicLayoutEffect';\n\nexport const useItemEffect = (\n  isDisabled: boolean | undefined,\n  menuItemRef: MutableRefObject<any> | undefined,\n  updateItems: (item: any, isMounted?: boolean) => void,\n) => {\n  useLayoutEffect(() => {\n    if (!menuItemRef) return;\n    if (process.env.NODE_ENV !== 'production' && !updateItems) {\n      throw new Error(\n        `[React-Menu] This menu item or submenu should be rendered under a menu: ${menuItemRef.current.outerHTML}`,\n      );\n    }\n    if (isDisabled) return;\n    const item = menuItemRef.current;\n    updateItems(item, true);\n    return () => {\n      updateItems(item);\n    };\n  }, [isDisabled, menuItemRef, updateItems]);\n};\n","import { MenuState } from '../types';\n\nexport const menuContainerClass = 'szh-menu-container';\nexport const menuClass = 'szh-menu';\nexport const menuButtonClass = 'szh-menu-button';\nexport const menuArrowClass = 'arrow';\nexport const menuItemClass = 'item';\nexport const menuDividerClass = 'divider';\nexport const menuHeaderClass = 'header';\nexport const menuGroupClass = 'group';\nexport const subMenuClass = 'submenu';\nexport const radioGroupClass = 'radio-group';\n\nexport interface RMEvent {\n  value: any;\n  syntheticEvent: any;\n  checked?: boolean;\n  name?: string;\n  key?: string;\n  shiftKey?: boolean;\n}\n\nexport const Keys = Object.freeze({\n  ENTER: 'Enter',\n  TAB: 'Tab',\n  ESC: 'Escape',\n  SPACE: ' ',\n  HOME: 'Home',\n  END: 'End',\n  LEFT: 'ArrowLeft',\n  RIGHT: 'ArrowRight',\n  UP: 'ArrowUp',\n  DOWN: 'ArrowDown',\n});\n\nexport const HoverActionTypes = Object.freeze({\n  RESET: 0,\n  SET: 1,\n  UNSET: 2,\n  INCREASE: 3,\n  DECREASE: 4,\n  FIRST: 5,\n  LAST: 6,\n  SET_INDEX: 7,\n});\n\nexport const CloseReason = Object.freeze({\n  CLICK: 'click',\n  CANCEL: 'cancel',\n  BLUR: 'blur',\n  SCROLL: 'scroll',\n  TAB_FORWARD: 'tab_forward',\n  TAB_BACKWARD: 'tab_backward',\n});\n\nexport const FocusPositions = Object.freeze({\n  FIRST: 'first',\n  LAST: 'last',\n});\n\nexport const MenuStateMap: Record<string, MenuState> = Object.freeze({\n  entering: 'opening',\n  entered: 'open',\n  exiting: 'closing',\n  exited: 'closed',\n});\n","import { findIndex } from 'lodash-es';\nimport { unstable_batchedUpdates } from 'react-dom';\n\nimport { MenuButtonProps } from '../components/MenuButton';\nimport { MenuState, MenuStateOptions } from '../types';\n\nexport const isMenuOpen = (state?: MenuState) => !!state && state[0] === 'o';\nexport const batchedUpdates = unstable_batchedUpdates || ((callback: () => any) => callback());\nexport const values = Object.values || ((obj: { [x: string]: any }) => Object.keys(obj).map((key) => obj[key]));\nexport const floatEqual = (a: number, b: number, diff = 0.0001) => Math.abs(a - b) < diff;\n\nexport type TransitionMap = {\n  open?: boolean;\n  close?: boolean;\n  item?: boolean;\n};\nexport const getTransition = (transition: MenuStateOptions['transition'], name: keyof TransitionMap) =>\n  transition === true || !!(transition && transition[name]);\n\nexport function safeCall<T, R>(fn: (arg?: T) => R, arg?: T): R;\nexport function safeCall<T, R>(fn: T, arg: R): T;\nexport function safeCall<T, R>(fn: (arg?: T) => R, arg?: T): T | R {\n  return typeof fn === 'function' ? fn(arg) : fn;\n}\n\nconst internalKey = '_szhsinMenu';\nexport const getName = (component: Record<string, any>) => component[internalKey];\n//export const defineName = <T extends any[]>(name: string, component: (...args: T) => ReactElement) =>\n//  Object.defineProperty(component, internalKey, { value: name });\n\nexport const defineName = (\n  name: string,\n  component: React.ForwardRefExoticComponent<React.PropsWithoutRef<MenuButtonProps> & React.RefAttributes<unknown>>,\n) => Object.defineProperty(component, internalKey, { value: name });\n\nexport const mergeProps = (target: any, source: any) => {\n  source &&\n    Object.keys(source).forEach((key) => {\n      const targetProp = target[key];\n      const sourceProp = source[key];\n      if (typeof sourceProp === 'function' && targetProp) {\n        target[key] = (...arg: any[]) => {\n          sourceProp(...arg);\n          targetProp(...arg);\n        };\n      } else {\n        target[key] = sourceProp;\n      }\n    });\n\n  return target;\n};\n\nexport const parsePadding = (paddingStr: string | undefined) => {\n  if (paddingStr == null) return { top: 0, right: 0, bottom: 0, left: 0 };\n\n  const padding = paddingStr.trim().split(/\\s+/, 4).map(parseFloat);\n  const top = !isNaN(padding[0]) ? padding[0] : 0;\n  const right = !isNaN(padding[1]) ? padding[1] : top;\n  return {\n    top,\n    right,\n    bottom: !isNaN(padding[2]) ? padding[2] : top,\n    left: !isNaN(padding[3]) ? padding[3] : right,\n  };\n};\n\n// Adapted from https://github.com/popperjs/popper-core/tree/v2.9.1/src/dom-utils\nexport const getScrollAncestor = (node: Node | null): Element | null => {\n  const thisWindow = (node?.ownerDocument ?? document).defaultView ?? window;\n  while (node) {\n    node = node.parentNode;\n    if (!node || node === thisWindow?.document?.body) return null;\n    if (node instanceof Element) {\n      const { overflow, overflowX, overflowY } = thisWindow.getComputedStyle(node);\n      if (/auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX)) return node;\n    }\n  }\n  return null;\n};\n\nexport function commonProps(isDisabled?: boolean, isHovering?: boolean) {\n  return {\n    'aria-disabled': isDisabled || undefined,\n    tabIndex: isHovering ? 0 : -1,\n  };\n}\n\nexport const indexOfNode = (nodeList: NodeListOf<Node>, node: Node) => findIndex(nodeList, node);\n\nexport const focusFirstInput = (container: any) => {\n  // We can't use instanceof Element in portals, so I use querySelectorAll as a proxy here\n  if (!container || !('querySelectorAll' in container)) return false;\n  const inputs = container.querySelectorAll(\"input[type='text'],input:not([type]),textarea\");\n  const input = inputs[0];\n  // Using focus as proxy for HTMLElement\n  if (!input || !('focus' in input)) return false;\n  input.focus();\n  // Text areas should start at end\n  // this is a proxy for instanceof HTMLTextAreaElement\n  if (['textarea', 'text'].includes(input.type)) {\n    input.setSelectionRange(0, input.value.length);\n  }\n  return true;\n};\n","import { createContext } from 'react';\n\nexport const HoverItemContext = createContext<\n  | HTMLDivElement\n  | HTMLLIElement\n  | ((prevItem: HTMLDivElement | HTMLLIElement) => HTMLDivElement | HTMLLIElement | undefined)\n  | undefined\n>(undefined);\n","import { forwardRef, memo, MutableRefObject, PropsWithRef, ReactElement, useContext, useRef } from 'react';\n\nimport { HoverItemContext } from '../contexts/HoverItemContext';\n\nexport interface withHoveringResultProps {\n  isHovering?: boolean;\n  externalRef?: MutableRefObject<any>;\n  menuItemRef?: MutableRefObject<HTMLLIElement>;\n}\n\nexport const withHovering = <X extends Record<string, any>, T extends PropsWithRef<X>>(\n  name: string,\n  WrappedComponent: (props: T) => ReactElement,\n) => {\n  const Component = memo(WrappedComponent);\n  const WithHovering = forwardRef<any, T>((props, ref) => {\n    const menuItemRef = useRef<any>(null);\n\n    return (\n      <>\n        {/* @ts-expect-error Can't work out what the ref issue is here */}\n        <Component\n          {...props}\n          menuItemRef={menuItemRef}\n          externalRef={ref}\n          isHovering={useContext(HoverItemContext) === menuItemRef.current}\n        />\n      </>\n    );\n  });\n\n  WithHovering.displayName = `WithHovering(${name})`;\n\n  return WithHovering;\n};\n","import { defer } from 'lodash-es';\nimport { MutableRefObject, useCallback, useRef, useState } from 'react';\n\nimport { FocusPosition } from '../types';\nimport { focusFirstInput, HoverActionTypes, indexOfNode } from '../utils';\n\nexport const useItems = (menuRef: MutableRefObject<any>, focusRef: MutableRefObject<any> | undefined) => {\n  const [hoverItem, setHoverItem] = useState<\n    | HTMLDivElement\n    | HTMLLIElement\n    | ((prevItem: HTMLDivElement | HTMLLIElement) => HTMLDivElement | HTMLLIElement | undefined)\n    | undefined\n  >();\n  const stateRef = useRef({\n    items: [] as (HTMLDivElement | HTMLLIElement)[],\n    hoverIndex: -1,\n    sorted: false,\n  });\n  const mutableState = stateRef.current;\n\n  const updateItems = useCallback(\n    (item?: HTMLDivElement | HTMLLIElement, isMounted?: boolean) => {\n      const { items } = mutableState;\n      if (!item) {\n        mutableState.items = [];\n      } else if (isMounted) {\n        items.push(item);\n      } else {\n        const index = items.indexOf(item);\n        if (index > -1) {\n          items.splice(index, 1);\n          if (item.contains(document.activeElement)) {\n            focusRef?.current?.focus();\n            setHoverItem(undefined);\n          }\n        }\n      }\n      mutableState.hoverIndex = -1;\n      mutableState.sorted = false;\n    },\n    [mutableState, focusRef],\n  );\n\n  const dispatch = useCallback(\n    (actionType: number, item: any, nextIndex: FocusPosition) => {\n      const { items, hoverIndex } = mutableState;\n      const sortItems = () => {\n        if (mutableState.sorted) return;\n        const orderedNodes = menuRef.current.querySelectorAll('.szh-menu__item');\n        items.sort((a, b) => indexOfNode(orderedNodes, a) - indexOfNode(orderedNodes, b));\n        mutableState.sorted = true;\n      };\n\n      let index = -1;\n      let newItem: HTMLDivElement | HTMLLIElement | undefined = undefined;\n      let newItemFn:\n        | ((prevItem: HTMLDivElement | HTMLLIElement) => HTMLDivElement | HTMLLIElement | undefined)\n        | undefined = undefined;\n      switch (actionType) {\n        case HoverActionTypes.RESET:\n          break;\n\n        case HoverActionTypes.SET:\n          newItem = item;\n          break;\n\n        case HoverActionTypes.UNSET:\n          newItemFn = (prevItem: HTMLDivElement | HTMLLIElement) => (prevItem === item ? undefined : prevItem);\n          break;\n\n        case HoverActionTypes.FIRST:\n          sortItems();\n          index = 0;\n          newItem = items[index];\n          break;\n\n        case HoverActionTypes.LAST:\n          sortItems();\n          index = items.length - 1;\n          newItem = items[index];\n          break;\n\n        case HoverActionTypes.SET_INDEX:\n          if (typeof nextIndex !== 'number') break;\n          sortItems();\n          index = nextIndex;\n          newItem = items[index];\n          defer(() =>\n            (newItem as HTMLElement).scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' }),\n          );\n          break;\n\n        case HoverActionTypes.INCREASE:\n          sortItems();\n          index = hoverIndex;\n          if (index < 0) index = items.indexOf(item);\n          index++;\n          if (index >= items.length) index = 0;\n          newItem = items[index];\n          focusFirstInput(newItem);\n          break;\n\n        case HoverActionTypes.DECREASE: {\n          sortItems();\n          index = hoverIndex;\n          if (index < 0) index = items.indexOf(item);\n          index--;\n          if (index < 0) index = items.length - 1;\n          newItem = items[index];\n          focusFirstInput(newItem);\n          break;\n        }\n\n        default:\n          if (process.env.NODE_ENV !== 'production')\n            throw new Error(`[React-Menu] Unknown hover action type: ${actionType}`);\n      }\n\n      if (!newItem && !newItemFn) index = -1;\n      setHoverItem(newItem ?? newItemFn);\n      mutableState.hoverIndex = index;\n    },\n    [menuRef, mutableState],\n  );\n\n  return { hoverItem, dispatch, updateItems };\n};\n","import { createContext } from 'react';\n\nimport { FocusPosition } from '../types';\n\ninterface MenuListItemContextType {\n  isParentOpen?: boolean;\n  isSubmenuOpen?: boolean;\n  dispatch: (actionType: number, item: any, nextIndex: FocusPosition) => void;\n  updateItems: (item: any, isMounted?: boolean) => void;\n  setOpenSubmenuCount: (fn: (count: number) => number) => void;\n}\n\nexport const MenuListItemContext = createContext<MenuListItemContextType>({\n  dispatch: () => {},\n  updateItems: () => {},\n  setOpenSubmenuCount: () => 0,\n});\n","import { FocusEvent, MutableRefObject, useContext, useEffect, useRef } from 'react';\n\nimport { ItemSettingsContext } from '../contexts/ItemSettingsContext';\nimport { MenuListItemContext } from '../contexts/MenuListItemContext';\nimport { HoverActionTypes } from '../utils/constants';\nimport { useItemEffect } from './useItemEffect';\n\n// This hook includes some common stateful logic in MenuItem and FocusableItem\nexport const useItemState = (\n  menuItemRef: MutableRefObject<any> | undefined,\n  focusRef: MutableRefObject<any> | undefined,\n  isHovering?: boolean,\n  isDisabled?: boolean,\n) => {\n  const { submenuCloseDelay } = useContext(ItemSettingsContext);\n  const { isParentOpen, isSubmenuOpen, dispatch, updateItems } = useContext(MenuListItemContext);\n  const timeoutId = useRef<ReturnType<typeof setTimeout>>();\n\n  const setHover = () => {\n    !isHovering && !isDisabled && dispatch(HoverActionTypes.SET, menuItemRef?.current, 0);\n  };\n\n  const unsetHover = () => {\n    !isDisabled && dispatch(HoverActionTypes.UNSET, menuItemRef?.current, 0);\n  };\n\n  const onBlur = (e: FocusEvent) => {\n    // Focus has moved out of the entire item\n    // It handles situation such as clicking on a sibling disabled menu item\n    if (isHovering && !e.currentTarget.contains(e.relatedTarget)) unsetHover();\n  };\n\n  const onPointerMove = () => {\n    if (isSubmenuOpen) {\n      if (!timeoutId.current)\n        timeoutId.current = setTimeout(() => {\n          timeoutId.current = undefined;\n          setHover();\n        }, submenuCloseDelay);\n    } else {\n      setHover();\n    }\n  };\n\n  const onPointerLeave = (_: PointerEvent, keepHover: boolean) => {\n    if (timeoutId.current) {\n      clearTimeout(timeoutId.current);\n      timeoutId.current = undefined;\n    }\n\n    !keepHover && unsetHover();\n  };\n\n  useItemEffect(isDisabled, menuItemRef, updateItems);\n  useEffect(() => () => clearTimeout(timeoutId.current), []);\n  useEffect(() => {\n    // Don't set focus when parent menu is closed, otherwise focus will be lost\n    // and onBlur event will be fired with relatedTarget setting as null.\n    if (isHovering && isParentOpen) {\n      focusRef?.current && focusRef.current.focus();\n    }\n  }, [focusRef, isHovering, isParentOpen]);\n\n  return {\n    setHover,\n    onBlur,\n    onPointerMove,\n    onPointerLeave,\n  };\n};\n","import { useEffect, useRef } from 'react';\n\nimport { EventHandler, MenuChangeEvent } from '../types';\nimport { safeCall } from '../utils';\n\nexport const useMenuChange = (onMenuChange?: EventHandler<MenuChangeEvent>, isOpen?: boolean) => {\n  const prevOpen = useRef(isOpen);\n\n  useEffect(() => {\n    if (onMenuChange && prevOpen.current !== isOpen) safeCall(onMenuChange, { open: !!isOpen });\n    prevOpen.current = isOpen;\n  }, [onMenuChange, isOpen]);\n};\n","const PRE_ENTER = 0;\nconst ENTERING = 1;\nconst ENTERED = 2;\nconst PRE_EXIT = 3;\nconst EXITING = 4;\nconst EXITED = 5;\nconst UNMOUNTED = 6;\nconst STATUS = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];\nconst getState = status => ({\n  _s: status,\n  status: STATUS[status],\n  isEnter: status < PRE_EXIT,\n  isMounted: status !== UNMOUNTED,\n  isResolved: status === ENTERED || status > EXITING\n});\nconst startOrEnd = unmounted => unmounted ? UNMOUNTED : EXITED;\nconst getEndStatus = (status, unmountOnExit) => {\n  switch (status) {\n    case ENTERING:\n    case PRE_ENTER:\n      return ENTERED;\n    case EXITING:\n    case PRE_EXIT:\n      return startOrEnd(unmountOnExit);\n  }\n};\nconst getTimeout = timeout => typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];\nconst nextTick = (transitState, status) => setTimeout(() => {\n  // Reading document.body.offsetTop can force browser to repaint before transition to the next state\n  isNaN(document.body.offsetTop) || transitState(status + 1);\n}, 0);\n\nexport { ENTERED, ENTERING, EXITED, EXITING, PRE_ENTER, PRE_EXIT, STATUS, UNMOUNTED, getEndStatus, getState, getTimeout, nextTick, startOrEnd };\n","import { useState, useRef, useCallback } from 'react';\nimport { getState, ENTERED, startOrEnd, getTimeout, getEndStatus, PRE_EXIT, nextTick, PRE_ENTER, EXITING, ENTERING } from './utils.mjs';\n\nconst updateState = (status, setState, latestState, timeoutId, onChange) => {\n  clearTimeout(timeoutId.current);\n  const state = getState(status);\n  setState(state);\n  latestState.current = state;\n  onChange && onChange({\n    current: state\n  });\n};\nconst useTransitionState = ({\n  enter = true,\n  exit = true,\n  preEnter,\n  preExit,\n  timeout,\n  initialEntered,\n  mountOnEnter,\n  unmountOnExit,\n  onStateChange: onChange\n} = {}) => {\n  const [state, setState] = useState(() => getState(initialEntered ? ENTERED : startOrEnd(mountOnEnter)));\n  const latestState = useRef(state);\n  const timeoutId = useRef();\n  const [enterTimeout, exitTimeout] = getTimeout(timeout);\n  const endTransition = useCallback(() => {\n    const status = getEndStatus(latestState.current._s, unmountOnExit);\n    status && updateState(status, setState, latestState, timeoutId, onChange);\n  }, [onChange, unmountOnExit]);\n  const toggle = useCallback(toEnter => {\n    const transitState = status => {\n      updateState(status, setState, latestState, timeoutId, onChange);\n      switch (status) {\n        case ENTERING:\n          if (enterTimeout >= 0) timeoutId.current = setTimeout(endTransition, enterTimeout);\n          break;\n        case EXITING:\n          if (exitTimeout >= 0) timeoutId.current = setTimeout(endTransition, exitTimeout);\n          break;\n        case PRE_ENTER:\n        case PRE_EXIT:\n          timeoutId.current = nextTick(transitState, status);\n          break;\n      }\n    };\n    const enterStage = latestState.current.isEnter;\n    if (typeof toEnter !== 'boolean') toEnter = !enterStage;\n    if (toEnter) {\n      !enterStage && transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);\n    } else {\n      enterStage && transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));\n    }\n  }, [endTransition, onChange, enter, exit, preEnter, preExit, enterTimeout, exitTimeout, unmountOnExit]);\n  return [state, toggle, endTransition];\n};\n\nexport { useTransitionState };\n","import { useTransition } from 'react-transition-state';\n\nimport { MenuState, MenuStateOptions } from '../types';\nimport { getTransition, MenuStateMap } from '../utils';\n\n/**\n * A custom Hook which helps manage the states of `ControlledMenu`.\n */\nexport const useMenuState = (\n  props?: MenuStateOptions,\n): [\n  {\n    /**\n     * Menu state which should be forwarded to `ControlledMenu`.\n     */\n    state?: MenuState;\n    /**\n     * Stop transition animation. This function value should be forwarded to `ControlledMenu`.\n     */\n    endTransition: () => void;\n  },\n\n  /**\n   * Open or close menu.\n   *\n   * - If no parameter is supplied, this function will toggle state between open and close phases.\n   * - You can set a boolean parameter to explicitly switch into one of the two phases.\n   */\n  (open?: boolean) => void,\n] => {\n  const { initialMounted, unmountOnClose, transition, transitionTimeout } = props ?? {\n    transition: false,\n  };\n  const [state, toggleMenu, endTransition] = useTransition({\n    mountOnEnter: !initialMounted,\n    unmountOnExit: unmountOnClose,\n    timeout: transitionTimeout ?? 500,\n    enter: getTransition(transition, 'open'),\n    exit: getTransition(transition, 'close'),\n  });\n\n  return [{ state: MenuStateMap[state.status], endTransition }, toggleMenu];\n};\n","import { useState } from 'react';\n\nimport { ControlledMenuProps, FocusPosition, MenuStateOptions } from '../types';\nimport { useMenuState } from './useMenuState';\n\nexport const useMenuStateAndFocus = (\n  options: MenuStateOptions,\n): [any, (open?: boolean) => void, (position?: FocusPosition, alwaysUpdate?: boolean) => void] => {\n  const [menuProps, toggleMenu] = useMenuState(options);\n  const [menuItemFocus, setMenuItemFocus] = useState<ControlledMenuProps['menuItemFocus']>();\n\n  const openMenu = (position?: FocusPosition, alwaysUpdate?: boolean) => {\n    setMenuItemFocus({ position, alwaysUpdate });\n    toggleMenu(true);\n  };\n\n  return [{ menuItemFocus, ...menuProps }, toggleMenu, openMenu];\n};\n","import { createContext, MutableRefObject } from 'react';\n\nimport { MenuDirection, MenuOverflow } from '../types';\n\nexport const MenuListContext = createContext<{\n  overflow?: MenuOverflow;\n  overflowAmt?: number;\n  parentMenuRef?: MutableRefObject<any>;\n  parentDir?: MenuDirection;\n  reposSubmenu?: boolean;\n}>({});\n","import { MutableRefObject } from 'react';\n\nimport { parsePadding } from '../utils';\n\nexport const getPositionHelpers = (\n  containerRef: MutableRefObject<HTMLElement | undefined>,\n  menuRef: MutableRefObject<HTMLElement>,\n  menuScroll: Window | Element,\n  boundingBoxPadding: string | undefined,\n) => {\n  const menuRect = menuRef.current.getBoundingClientRect();\n  const thisWindow = containerRef.current?.ownerDocument.defaultView ?? window;\n  const containerRect = (containerRef.current ?? thisWindow.document.body).getBoundingClientRect();\n\n  const boundingRect =\n    menuScroll === window || menuScroll === thisWindow\n      ? {\n          left: 0,\n          top: 0,\n          right: thisWindow.document.documentElement.clientWidth,\n          bottom: thisWindow.innerHeight,\n        }\n      : (menuScroll as Element).getBoundingClientRect();\n  const padding = parsePadding(boundingBoxPadding);\n\n  // For left and top, overflows are negative value.\n  // For right and bottom, overflows are positive value.\n  const getLeftOverflow = (x: number) => x + containerRect.left - boundingRect.left - padding.left;\n  const getRightOverflow = (x: number) => x + containerRect.left + menuRect.width - boundingRect.right + padding.right;\n  const getTopOverflow = (y: number) => y + containerRect.top - boundingRect.top - padding.top;\n  const getBottomOverflow = (y: number) =>\n    y + containerRect.top + menuRect.height - boundingRect.bottom + padding.bottom;\n\n  const confineHorizontally = (x: number) => {\n    // If menu overflows to the left side, adjust x to have the menu contained within the viewport\n    // and there is no need to check the right side;\n    // if it doesn't overflow to the left, then check the right side\n    let leftOverflow = getLeftOverflow(x);\n    if (leftOverflow < 0) {\n      x -= leftOverflow;\n    } else {\n      const rightOverflow = getRightOverflow(x);\n      if (rightOverflow > 0) {\n        x -= rightOverflow;\n        // Check again to make sure menu doesn't overflow to the left\n        // because it may go off-screen and cannot be scrolled into view.\n        leftOverflow = getLeftOverflow(x);\n        if (leftOverflow < 0) x -= leftOverflow;\n      }\n    }\n\n    return x;\n  };\n\n  const confineVertically = (y: number) => {\n    // Similar logic to confineHorizontally above\n    let topOverflow = getTopOverflow(y);\n    if (topOverflow < 0) {\n      y -= topOverflow;\n    } else {\n      const bottomOverflow = getBottomOverflow(y);\n      if (bottomOverflow > 0) {\n        y -= bottomOverflow;\n        // Check again to make sure menu doesn't overflow to the bottom\n        // because it may go off screen and cannot be scroll into view.\n        topOverflow = getTopOverflow(y);\n        if (topOverflow < 0) y -= topOverflow;\n      }\n    }\n\n    return y;\n  };\n\n  return {\n    menuRect,\n    containerRect,\n    getLeftOverflow,\n    getRightOverflow,\n    getTopOverflow,\n    getBottomOverflow,\n    confineHorizontally,\n    confineVertically,\n  };\n};\n","import { MenuDirection } from '../types';\nimport { getPositionHelpers } from './getPositionHelpers';\n\nexport const positionContextMenu = ({\n  positionHelpers,\n  anchorPoint,\n}: {\n  positionHelpers: ReturnType<typeof getPositionHelpers>;\n  anchorPoint: { x: number; y: number };\n}): {\n  x: number;\n  y: number;\n  computedDirection: MenuDirection;\n} => {\n  const {\n    menuRect,\n    containerRect,\n    getLeftOverflow,\n    getRightOverflow,\n    getTopOverflow,\n    getBottomOverflow,\n    confineHorizontally,\n    confineVertically,\n  } = positionHelpers;\n\n  let x, y;\n\n  // position the menu with cursor pointing to its top-left corner\n  x = anchorPoint.x - containerRect.left;\n  y = anchorPoint.y - containerRect.top;\n\n  // If menu overflows to the right of viewport,\n  // try to reposition it on the left side of cursor.\n  // If menu overflows to the left of viewport after repositioning,\n  // choose a side which has less overflow\n  // and adjust x to have it contained within the viewport.\n  const rightOverflow = getRightOverflow(x);\n  if (rightOverflow > 0) {\n    const adjustedX = x - menuRect.width;\n    const leftOverflow = getLeftOverflow(adjustedX);\n    if (leftOverflow >= 0 || -leftOverflow < rightOverflow) {\n      x = adjustedX;\n    }\n    x = confineHorizontally(x);\n  }\n\n  // Similar logic to the left and right side above.\n  let computedDirection: MenuDirection = 'bottom';\n  const bottomOverflow = getBottomOverflow(y);\n  if (bottomOverflow > 0) {\n    const adjustedY = y - menuRect.height;\n    const topOverflow = getTopOverflow(adjustedY);\n    if (topOverflow >= 0 || -topOverflow < bottomOverflow) {\n      y = adjustedY;\n      computedDirection = 'top';\n    }\n    y = confineVertically(y);\n  }\n\n  return { x, y, computedDirection };\n};\n","import { MutableRefObject } from 'react';\n\nexport const placeArrowVertical = (p: {\n  arrowRef: MutableRefObject<HTMLElement | null>;\n  menuY: number;\n  anchorRect: DOMRect;\n  containerRect: DOMRect;\n  menuRect: DOMRect;\n}) => {\n  let y = p.anchorRect.top - p.containerRect.top - p.menuY + p.anchorRect.height / 2;\n  const offset = p.arrowRef.current ? p.arrowRef.current.offsetHeight * 1.25 : 0;\n  y = Math.max(offset, y);\n  y = Math.min(y, p.menuRect.height - offset);\n  return y;\n};\n","import { MutableRefObject } from 'react';\n\nimport { MenuDirection } from '../types';\nimport { getPositionHelpers } from './getPositionHelpers';\nimport { placeArrowVertical } from './placeArrowVertical';\n\nexport interface placeLeftorRightParams {\n  anchorRect: DOMRect;\n  placeLeftorRightY: number;\n  placeLeftX: number;\n  placeRightX: number;\n  arrowRef: MutableRefObject<HTMLElement | null>;\n  arrow?: boolean;\n  direction: MenuDirection;\n  position: 'auto' | 'anchor' | 'initial';\n}\n\nexport const placeLeftorRight = (\n  props: ReturnType<typeof getPositionHelpers> & placeLeftorRightParams,\n): { arrowY: number | undefined; x: number; y: number; computedDirection: MenuDirection } => {\n  const {\n    anchorRect,\n    containerRect,\n    menuRect,\n    placeLeftorRightY,\n    placeLeftX,\n    placeRightX,\n    getLeftOverflow,\n    getRightOverflow,\n    confineHorizontally,\n    confineVertically,\n    arrowRef,\n    arrow,\n    direction,\n    position,\n  } = props;\n  let computedDirection = direction;\n  let y = placeLeftorRightY;\n  if (position !== 'initial') {\n    y = confineVertically(y);\n    if (position === 'anchor') {\n      // restrict menu to the edge of anchor element\n      y = Math.min(y, anchorRect.bottom - containerRect.top);\n      y = Math.max(y, anchorRect.top - containerRect.top - menuRect.height);\n    }\n  }\n\n  let x, leftOverflow, rightOverflow;\n  if (computedDirection === 'left') {\n    x = placeLeftX;\n\n    if (position !== 'initial') {\n      // if menu overflows to the left,\n      // try to reposition it to the right of the anchor.\n      leftOverflow = getLeftOverflow(x);\n      if (leftOverflow < 0) {\n        // if menu overflows to the right after repositioning,\n        // choose a side which has less overflow\n        rightOverflow = getRightOverflow(placeRightX);\n        if (rightOverflow <= 0 || -leftOverflow > rightOverflow) {\n          x = placeRightX;\n          computedDirection = 'right';\n        }\n      }\n    }\n  } else {\n    // Opposite logic to the 'left' direction above\n    x = placeRightX;\n\n    if (position !== 'initial') {\n      rightOverflow = getRightOverflow(x);\n      if (rightOverflow > 0) {\n        leftOverflow = getLeftOverflow(placeLeftX);\n        if (leftOverflow >= 0 || -leftOverflow < rightOverflow) {\n          x = placeLeftX;\n          computedDirection = 'left';\n        }\n      }\n    }\n  }\n\n  if (position === 'auto') x = confineHorizontally(x);\n  const arrowY = arrow\n    ? placeArrowVertical({\n        menuY: y,\n        arrowRef,\n        anchorRect,\n        containerRect,\n        menuRect,\n      })\n    : undefined;\n  return { arrowY, x, y, computedDirection };\n};\n","import { MutableRefObject } from 'react';\n\nexport const placeArrowHorizontal = (p: {\n  arrowRef: MutableRefObject<HTMLElement | null>;\n  menuX: number;\n  anchorRect: DOMRect;\n  containerRect: DOMRect;\n  menuRect: DOMRect;\n}) => {\n  let x = p.anchorRect.left - p.containerRect.left - p.menuX + p.anchorRect.width / 2;\n  const offset = p.arrowRef.current ? p.arrowRef.current.offsetWidth * 1.25 : 0;\n  x = Math.max(offset, x);\n  x = Math.min(x, p.menuRect.width - offset);\n  return x;\n};\n","import { MutableRefObject } from 'react';\n\nimport { MenuDirection } from '../types';\nimport { getPositionHelpers } from './getPositionHelpers';\nimport { placeArrowHorizontal } from './placeArrowHorizontal';\n\nexport interface placeToporBottomParams {\n  anchorRect: DOMRect;\n  placeToporBottomX: number;\n  placeTopY: number;\n  placeBottomY: number;\n  arrowRef: MutableRefObject<HTMLElement | null>;\n  arrow?: boolean;\n  direction: 'left' | 'right' | 'top' | 'bottom';\n  position: 'auto' | 'anchor' | 'initial';\n}\n\nexport const placeToporBottom = (\n  props: ReturnType<typeof getPositionHelpers> & placeToporBottomParams,\n): { arrowX?: number | undefined; x: number; y: number; computedDirection: MenuDirection } => {\n  const {\n    anchorRect,\n    containerRect,\n    menuRect,\n    placeToporBottomX,\n    placeTopY,\n    placeBottomY,\n    getTopOverflow,\n    getBottomOverflow,\n    confineHorizontally,\n    confineVertically,\n    arrowRef,\n    arrow,\n    direction,\n    position,\n  } = props;\n  // make sure invalid direction is treated as 'bottom'\n  let computedDirection: MenuDirection = direction === 'top' ? 'top' : 'bottom';\n  let x = placeToporBottomX;\n  if (position !== 'initial') {\n    x = confineHorizontally(x);\n    if (position === 'anchor') {\n      // restrict menu to the edge of anchor element\n      x = Math.min(x, anchorRect.right - containerRect.left);\n      x = Math.max(x, anchorRect.left - containerRect.left - menuRect.width);\n    }\n  }\n\n  let y, topOverflow, bottomOverflow;\n  if (computedDirection === 'top') {\n    y = placeTopY;\n\n    if (position !== 'initial') {\n      // if menu overflows to the top,\n      // try to reposition it to the bottom of the anchor.\n      topOverflow = getTopOverflow(y);\n      if (topOverflow < 0) {\n        // if menu overflows to the bottom after repositioning,\n        // choose a side which has less overflow\n        bottomOverflow = getBottomOverflow(placeBottomY);\n        if (bottomOverflow <= 0 || -topOverflow > bottomOverflow) {\n          y = placeBottomY;\n          computedDirection = 'bottom';\n        }\n      }\n    }\n  } else {\n    // Opposite logic to the 'top' direction above\n    y = placeBottomY;\n\n    if (position !== 'initial') {\n      bottomOverflow = getBottomOverflow(y);\n      if (bottomOverflow > 0) {\n        topOverflow = getTopOverflow(placeTopY);\n        if (topOverflow >= 0 || -topOverflow < bottomOverflow) {\n          y = placeTopY;\n          computedDirection = 'top';\n        }\n      }\n    }\n  }\n\n  if (position === 'auto') y = confineVertically(y);\n  const arrowX = arrow\n    ? placeArrowHorizontal({\n        menuX: x,\n        arrowRef,\n        anchorRect,\n        containerRect,\n        menuRect,\n      })\n    : undefined;\n  return { arrowX, x, y, computedDirection };\n};\n","import { MutableRefObject } from 'react';\n\nimport { MenuDirection } from '../types';\nimport { getPositionHelpers } from './getPositionHelpers';\nimport { placeLeftorRight } from './placeLeftorRight';\nimport { placeToporBottom } from './placeToporBottom';\n\ninterface positionMenuProps {\n  offsetX: number;\n  offsetY: number;\n  arrowRef: MutableRefObject<HTMLDivElement | null>;\n  anchorRef: MutableRefObject<Element | null>;\n  arrow?: boolean;\n  direction: MenuDirection;\n  position: 'auto' | 'anchor' | 'initial';\n  align: 'start' | 'center' | 'end';\n  positionHelpers: ReturnType<typeof getPositionHelpers>;\n}\n\nexport const positionMenu = (props: positionMenuProps) => {\n  const { arrow, align, direction, offsetX, offsetY, position, anchorRef, arrowRef, positionHelpers } = props;\n  const { menuRect, containerRect } = positionHelpers;\n\n  let horizontalOffset = offsetX;\n  let verticalOffset = offsetY;\n  if (arrow && arrowRef.current) {\n    if (direction === 'left' || direction === 'right') {\n      horizontalOffset += arrowRef.current.offsetWidth;\n    } else {\n      verticalOffset += arrowRef.current.offsetHeight;\n    }\n  }\n\n  const anchorRect = anchorRef.current\n    ? anchorRef.current.getBoundingClientRect()\n    : ({ left: 0, right: 0, top: 200, bottom: 200, width: 200, height: 200 } as DOMRect);\n  const placeLeftX = anchorRect.left - containerRect.left - menuRect.width - horizontalOffset;\n  const placeRightX = anchorRect.right - containerRect.left + horizontalOffset;\n  const placeTopY = anchorRect.top - containerRect.top - menuRect.height - verticalOffset;\n  const placeBottomY = anchorRect.bottom - containerRect.top + verticalOffset;\n\n  let placeToporBottomX, placeLeftorRightY;\n  if (align === 'end') {\n    placeToporBottomX = anchorRect.right - containerRect.left - menuRect.width;\n    placeLeftorRightY = anchorRect.bottom - containerRect.top - menuRect.height;\n  } else if (align === 'center') {\n    placeToporBottomX = anchorRect.left - containerRect.left - (menuRect.width - anchorRect.width) / 2;\n    placeLeftorRightY = anchorRect.top - containerRect.top - (menuRect.height - anchorRect.height) / 2;\n  } else {\n    placeToporBottomX = anchorRect.left - containerRect.left;\n    placeLeftorRightY = anchorRect.top - containerRect.top;\n  }\n  placeToporBottomX += horizontalOffset;\n  placeLeftorRightY += verticalOffset;\n\n  const options = {\n    ...positionHelpers,\n    anchorRect,\n    placeLeftX,\n    placeRightX,\n    placeLeftorRightY,\n    placeTopY,\n    placeBottomY,\n    placeToporBottomX,\n    arrowRef,\n    arrow,\n    direction,\n    position,\n  };\n\n  switch (direction) {\n    case 'left':\n    case 'right':\n      return placeLeftorRight(options);\n\n    case 'top':\n    case 'bottom':\n    default:\n      return placeToporBottom(options);\n  }\n};\n","import { debounce } from 'lodash-es';\nimport { useCallback, useContext, useEffect, useMemo, useReducer, useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\n\nimport { findParentWithClass } from '../../utils/util';\nimport { HoverItemContext } from '../contexts/HoverItemContext';\nimport { MenuListContext } from '../contexts/MenuListContext';\nimport { MenuListItemContext } from '../contexts/MenuListItemContext';\nimport { SettingsContext } from '../contexts/SettingsContext';\nimport { useBEM, useCombinedRef, useItems, useLayoutEffect } from '../hooks';\nimport { getPositionHelpers, positionContextMenu, positionMenu } from '../positionUtils';\nimport { ControlledMenuProps, MenuDirection } from '../types';\nimport {\n  batchedUpdates,\n  CloseReason,\n  commonProps,\n  floatEqual,\n  focusFirstInput,\n  FocusPositions,\n  getScrollAncestor,\n  getTransition,\n  HoverActionTypes,\n  isMenuOpen,\n  Keys,\n  menuArrowClass,\n  menuClass,\n  mergeProps,\n  safeCall,\n} from '../utils';\n\nexport const MenuList = ({\n  ariaLabel,\n  menuClassName,\n  menuStyle,\n  arrowClassName,\n  arrowStyle,\n  anchorPoint,\n  anchorRef,\n  containerRef,\n  externalRef,\n  parentScrollingRef,\n  arrow,\n  align = 'start',\n  direction = 'bottom',\n  position = 'auto',\n  overflow = 'visible',\n  setDownOverflow,\n  repositionFlag,\n  captureFocus = true,\n  state,\n  endTransition,\n  isDisabled,\n  menuItemFocus,\n  dontShrinkIfDirectionIsTop,\n  offsetX = 0,\n  offsetY = 0,\n  children,\n  onClose,\n  ...restProps\n}: ControlledMenuProps) => {\n  const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 });\n  const [arrowPosition, setArrowPosition] = useState({ x: 0, y: 0 });\n  const [overflowData, setOverflowData] = useState<{ height: number; overflowAmt: number | undefined }>();\n  const [expandedDirection, setExpandedDirection] = useState(direction);\n  const [openSubmenuCount, setOpenSubmenuCount] = useState(0);\n  const [reposSubmenu, forceReposSubmenu] = useReducer((c) => c + 1, 1);\n  const {\n    transition,\n    boundingBoxRef,\n    boundingBoxPadding,\n    rootMenuRef,\n    rootAnchorRef,\n    scrollNodesRef,\n    reposition,\n    viewScroll,\n  } = useContext(SettingsContext);\n  const reposFlag = useContext(MenuListContext).reposSubmenu || repositionFlag;\n  const menuRef = useRef<HTMLUListElement>({} as HTMLUListElement);\n  const focusRef = useRef<HTMLDivElement>(null);\n  const arrowRef = useRef<HTMLDivElement>(null);\n  const prevOpen = useRef(false);\n  const latestWindowSize = useRef({ width: 0, height: 0 });\n  const latestMenuSize = useRef({ width: 0, height: 0 });\n  const latestHandlePosition = useRef(() => {});\n  const { hoverItem, dispatch, updateItems } = useItems(menuRef, focusRef);\n\n  const isOpen = isMenuOpen(state);\n  const openTransition = getTransition(transition, 'open');\n  const closeTransition = getTransition(transition, 'close');\n  const scrollNodes = scrollNodesRef.current;\n\n  /**\n   * Given the menu-item we are on, find the closest or furthest next menu-item horizontally and focus it.\n   * @return true if element found else false.\n   */\n  const focusSideways = (menuItemEl: HTMLElement | null, direction: 1 | -1): boolean => {\n    if (!menuItemEl) return false;\n\n    let [best, worst]: { i: number; d: number }[] = [];\n    findParentWithClass('szh-menu', menuItemEl)\n      ?.querySelectorAll<HTMLLIElement>('.szh-menu__item')\n      ?.forEach((item, i) => {\n        // Must be at same height as currently focused menu-item\n        if (item.offsetTop === menuItemEl.offsetTop) {\n          // Find the least positive distance and most negative distance (for wrap around)\n          const d = (item.offsetLeft - menuItemEl.offsetLeft) * direction;\n          if (d > 0 && (!best || d < best.d)) best = { i, d };\n          if (d < 0 && (!worst || d < worst.d)) worst = { i, d };\n        }\n      });\n    const r = best ?? worst;\n    if (!r) return false;\n\n    dispatch(HoverActionTypes.SET_INDEX, undefined, r['i']);\n    return true;\n  };\n\n  const onKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n    const elementTarget = e.target instanceof HTMLElement ? e.target : null;\n    const isTextInputTarget =\n      elementTarget &&\n      (elementTarget.nodeName === 'TEXTAREA' ||\n        (elementTarget.nodeName === 'INPUT' && elementTarget.getAttribute('type') === 'text'));\n    switch (e.key) {\n      case Keys.HOME:\n        // Don't eat home/end events on inputs\n        if (isTextInputTarget) return;\n        dispatch(HoverActionTypes.FIRST, null, 0);\n        break;\n\n      case Keys.END:\n        // Don't eat home/end events on inputs\n        if (isTextInputTarget) return;\n        dispatch(HoverActionTypes.LAST, null, 0);\n        break;\n\n      case Keys.UP:\n        dispatch(HoverActionTypes.DECREASE, hoverItem, 0);\n        break;\n\n      case Keys.DOWN:\n        dispatch(HoverActionTypes.INCREASE, hoverItem, 0);\n        break;\n\n      case Keys.LEFT:\n        if (!focusSideways(elementTarget, -1)) {\n          return; // Unhandled\n        }\n        break;\n\n      case Keys.RIGHT:\n        if (!focusSideways(elementTarget, 1)) {\n          return; // Unhandled\n        }\n        break;\n\n      // prevent browser from scrolling the page when SPACE is pressed\n      case Keys.SPACE:\n        // Don't preventDefault on children of FocusableItem\n        if (elementTarget && elementTarget.className.includes(menuClass)) {\n          e.preventDefault();\n        }\n        return;\n\n      default:\n        return;\n    }\n\n    e.preventDefault();\n    e.stopPropagation();\n  };\n\n  const onAnimationEnd = () => {\n    if (state === 'closing') {\n      setOverflowData(undefined); // reset overflowData after closing\n    }\n\n    endTransition && safeCall(endTransition);\n  };\n\n  const handlePosition = useCallback(\n    (noOverflowCheck?: boolean) => {\n      if (!containerRef?.current) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.error(\n            '[React-Menu] Menu cannot be positioned properly as container ref is null. If you need to initialise `state` prop to \"open\" for ControlledMenu, please see this solution: https://codesandbox.io/s/initial-open-sp10wn',\n          );\n        }\n        return;\n      }\n\n      if (!scrollNodes.menu) {\n        scrollNodes.menu =\n          (boundingBoxRef\n            ? boundingBoxRef.current // user explicitly sets boundingBoxRef\n            : getScrollAncestor(rootMenuRef?.current)) || window; // try to discover bounding box automatically\n      }\n\n      const positionHelpers = getPositionHelpers(containerRef, menuRef, scrollNodes.menu, boundingBoxPadding);\n      const { menuRect } = positionHelpers;\n      let results: { computedDirection: MenuDirection; arrowX?: number; arrowY?: number; x: number; y: number } = {\n        computedDirection: 'bottom',\n        x: 0,\n        y: 0,\n      };\n      if (anchorPoint) {\n        results = positionContextMenu({ positionHelpers, anchorPoint });\n      } else if (anchorRef) {\n        results = positionMenu({\n          arrow,\n          align,\n          direction,\n          offsetX,\n          offsetY,\n          position,\n          anchorRef,\n          arrowRef,\n          positionHelpers,\n        });\n      }\n      let { y } = results;\n      const { x, arrowX, arrowY, computedDirection } = results;\n      let menuHeight = menuRect.height;\n\n      if (!noOverflowCheck && overflow !== 'visible') {\n        const { getTopOverflow, getBottomOverflow } = positionHelpers;\n\n        let height: number | undefined, overflowAmt: number | undefined;\n        const prevHeight = latestMenuSize.current.height;\n        const bottomOverflow = getBottomOverflow(y);\n        // When bottomOverflow is 0, menu is on the bottom edge of viewport\n        // This might be the result of a previous maxHeight set on the menu.\n        // In this situation, we need to still apply a new maxHeight.\n        // Same reason for the top side\n        if (bottomOverflow > 0 || (floatEqual(bottomOverflow, 0) && floatEqual(menuHeight, prevHeight))) {\n          height = menuHeight - bottomOverflow;\n          overflowAmt = bottomOverflow;\n        } else {\n          const topOverflow = getTopOverflow(y);\n          if (topOverflow < 0 || (floatEqual(topOverflow, 0) && floatEqual(menuHeight, prevHeight))) {\n            height = menuHeight + topOverflow;\n            overflowAmt = 0 - topOverflow; // avoid getting -0\n            if (height >= 0) y -= topOverflow;\n          }\n        }\n\n        if (height != null && height >= 0) {\n          // To avoid triggering reposition in the next ResizeObserver callback\n          menuHeight = height;\n          setOverflowData({ height, overflowAmt });\n        } else {\n          setOverflowData(undefined);\n        }\n      }\n\n      if (arrow) setArrowPosition({ x: arrowX ?? 0, y: arrowY ?? 0 });\n      setMenuPosition({ x, y });\n      setExpandedDirection(computedDirection);\n      latestMenuSize.current = { width: menuRect.width, height: menuHeight };\n    },\n    [\n      arrow,\n      align,\n      boundingBoxPadding,\n      direction,\n      offsetX,\n      offsetY,\n      position,\n      overflow,\n      anchorPoint,\n      anchorRef,\n      containerRef,\n      boundingBoxRef,\n      rootMenuRef,\n      scrollNodes,\n    ],\n  );\n\n  useLayoutEffect(() => {\n    if (isOpen) {\n      handlePosition();\n      // Reposition submenu whenever deps(except isOpen) have changed\n      if (prevOpen.current) forceReposSubmenu();\n    }\n    prevOpen.current = isOpen;\n    latestHandlePosition.current = handlePosition;\n  }, [isOpen, handlePosition, /* effect dep */ reposFlag]);\n\n  useLayoutEffect(() => {\n    if (overflowData && !setDownOverflow) menuRef.current.scrollTop = 0;\n  }, [overflowData, setDownOverflow]);\n\n  useLayoutEffect(() => updateItems, [updateItems]);\n\n  useEffect(() => {\n    let { menu: menuScroll } = scrollNodes;\n    if (!isOpen || !menuScroll) return;\n\n    menuScroll = menuScroll.addEventListener ? menuScroll : window;\n    if (!scrollNodes.anchors) {\n      scrollNodes.anchors = [];\n      let anchorScroll = getScrollAncestor(rootAnchorRef && rootAnchorRef.current);\n      while (anchorScroll && anchorScroll !== menuScroll) {\n        scrollNodes.anchors.push(anchorScroll);\n        anchorScroll = getScrollAncestor(anchorScroll);\n      }\n    }\n\n    let scroll = viewScroll;\n    if (scrollNodes.anchors.length && scroll === 'initial') scroll = 'auto';\n    if (scroll === 'initial') return;\n\n    const handleScroll = () => {\n      if (scroll === 'auto') {\n        batchedUpdates(() => handlePosition(true));\n      } else {\n        safeCall(onClose, { reason: CloseReason.SCROLL });\n      }\n    };\n\n    const scrollObservers = scrollNodes.anchors.concat(viewScroll !== 'initial' ? menuScroll : []);\n    scrollObservers.forEach((o: any) => o.addEventListener('scroll', handleScroll));\n    return () => scrollObservers.forEach((o) => o.removeEventListener('scroll', handleScroll));\n  }, [rootAnchorRef, scrollNodes, isOpen, onClose, viewScroll, handlePosition]);\n\n  const hasOverflow = !!overflowData && overflowData.overflowAmt != null && overflowData.overflowAmt > 0;\n  useEffect(() => {\n    if (hasOverflow || !isOpen || !parentScrollingRef) return;\n\n    const handleScroll = () => batchedUpdates(handlePosition);\n    const parentScroll = parentScrollingRef.current;\n    parentScroll.addEventListener('scroll', handleScroll);\n    return () => parentScroll.removeEventListener('scroll', handleScroll);\n  }, [isOpen, hasOverflow, parentScrollingRef, handlePosition]);\n\n  useEffect(() => {\n    if (typeof ResizeObserver !== 'function' || reposition === 'initial') return;\n\n    const resizeObserver = new ResizeObserver(([entry]) => {\n      const { borderBoxSize, target } = entry;\n      let width, height;\n      if (borderBoxSize) {\n        const { inlineSize, blockSize } = borderBoxSize[0] || borderBoxSize;\n        width = inlineSize;\n        height = blockSize;\n      } else {\n        const borderRect = target.getBoundingClientRect();\n        width = borderRect.width;\n        height = borderRect.height;\n      }\n\n      if (width === 0 || height === 0) return;\n      if (floatEqual(width, latestMenuSize.current.width, 1) && floatEqual(height, latestMenuSize.current.height, 1))\n        return;\n      flushSync(() => {\n        latestHandlePosition.current();\n        forceReposSubmenu();\n      });\n    });\n\n    const observeTarget = menuRef.current;\n    resizeObserver.observe(observeTarget, { box: 'border-box' });\n    return () => resizeObserver.unobserve(observeTarget);\n  }, [reposition]);\n\n  // Matt added window resize observer\n  useEffect(() => {\n    if (typeof ResizeObserver !== 'function' || reposition === 'initial' || !menuRef.current) {\n      return;\n    }\n\n    const callback = debounce(() => {\n      if (!menuRef.current) {\n        return;\n      }\n      const { width, height } = menuRef.current.ownerDocument.body.getBoundingClientRect();\n      if (width === 0 || height === 0) return;\n      if (\n        floatEqual(width, latestWindowSize.current.width, 1) &&\n        floatEqual(height, latestWindowSize.current.height, 1)\n      ) {\n        return;\n      }\n      latestWindowSize.current = { width, height };\n      flushSync(() => {\n        latestHandlePosition.current();\n        forceReposSubmenu();\n      });\n    }, 250);\n\n    const resizeObserver = new ResizeObserver(callback);\n\n    const observeTarget = menuRef.current.ownerDocument.body;\n    resizeObserver.observe(observeTarget, { box: 'border-box' });\n    return () => {\n      callback.cancel();\n      resizeObserver.unobserve(observeTarget);\n    };\n  }, [reposition]);\n\n  useEffect(() => {\n    if (!isOpen) {\n      dispatch(HoverActionTypes.RESET, undefined, 0);\n      if (!closeTransition) setOverflowData(undefined);\n      return () => {};\n    }\n\n    const { position, alwaysUpdate } = menuItemFocus || {};\n    const setItemFocus = () => {\n      if (position === FocusPositions.FIRST) {\n        dispatch(HoverActionTypes.FIRST, undefined, 0);\n      } else if (position === FocusPositions.LAST) {\n        dispatch(HoverActionTypes.LAST, undefined, 0);\n      } else if (typeof position === 'number' && position >= -1) {\n        dispatch(HoverActionTypes.SET_INDEX, undefined, position);\n      }\n    };\n\n    if (alwaysUpdate) {\n      setItemFocus();\n    } else if (captureFocus) {\n      // Use a timeout here because if set focus immediately, page might scroll unexpectedly.\n      const id = setTimeout(\n        () => {\n          // If focus has already been set to a children element, don't set focus on menu or item\n          if (menuRef.current && !menuRef.current.contains(document.activeElement)) {\n            // Handle popover portal focus\n            const popupElement = focusRef.current?.nextSibling;\n            if (!focusFirstInput(popupElement)) {\n              focusRef.current?.focus();\n            }\n            setItemFocus();\n          }\n        },\n        openTransition ? 170 : 100,\n      );\n\n      return () => clearTimeout(id);\n    }\n    return () => {};\n  }, [isOpen, openTransition, closeTransition, captureFocus, menuItemFocus, dispatch]);\n\n  const isSubmenuOpen = openSubmenuCount > 0;\n  const itemContext = useMemo(\n    () => ({\n      isParentOpen: isOpen,\n      isSubmenuOpen,\n      setOpenSubmenuCount,\n      dispatch,\n      updateItems,\n    }),\n    [isOpen, isSubmenuOpen, dispatch, updateItems],\n  );\n\n  let maxHeight: number | undefined;\n  let overflowAmt: number | undefined;\n  if (overflowData) {\n    setDownOverflow ? (overflowAmt = overflowData.overflowAmt) : (maxHeight = overflowData.height);\n  }\n\n  const listContext = useMemo(\n    () => ({\n      reposSubmenu,\n      overflow,\n      overflowAmt,\n      parentMenuRef: menuRef,\n      parentDir: expandedDirection,\n    }),\n    [reposSubmenu, overflow, overflowAmt, expandedDirection],\n  );\n  const overflowStyle = maxHeight != null && maxHeight >= 0 ? { maxHeight, overflow } : undefined;\n\n  const modifiers = useMemo(\n    () => ({\n      state,\n      dir: expandedDirection,\n    }),\n    [state, expandedDirection],\n  );\n  const arrowModifiers = useMemo(() => ({ dir: expandedDirection }), [expandedDirection]);\n  const _arrowClass = useBEM({\n    block: menuClass,\n    element: menuArrowClass,\n    modifiers: arrowModifiers,\n    className: arrowClassName,\n  });\n\n  const minHeight = useRef(0);\n  if (dontShrinkIfDirectionIsTop && menuRef.current?.getBoundingClientRect) {\n    const h = menuRef.current?.getBoundingClientRect().height;\n    if (minHeight.current < h) minHeight.current = h;\n  }\n\n  const dontShrinkOps = useMemo(\n    () =>\n      expandedDirection === 'top' && dontShrinkIfDirectionIsTop\n        ? {\n            overflowY: isSubmenuOpen ? '' : 'auto',\n            minHeight: (isSubmenuOpen ? 0 : minHeight.current) + 'px',\n          }\n        : undefined,\n    [dontShrinkIfDirectionIsTop, expandedDirection, isSubmenuOpen],\n  );\n\n  return (\n    <ul\n      role=\"menu\"\n      aria-label={ariaLabel}\n      {...mergeProps({ onKeyDown, onAnimationEnd }, restProps)}\n      {...commonProps(isDisabled)}\n      ref={useCombinedRef(externalRef, menuRef)}\n      className={useBEM({ block: menuClass, modifiers, className: menuClassName })}\n      style={{\n        ...menuStyle,\n        ...overflowStyle,\n        ...dontShrinkOps,\n        margin: 0,\n        display: state === 'closed' ? 'none' : undefined,\n        position: 'absolute',\n        left: menuPosition.x,\n        top: menuPosition.y,\n      }}\n    >\n      <div\n        ref={focusRef}\n        tabIndex={-1}\n        style={{ position: 'absolute', left: 0, top: 0 }}\n        onKeyDown={(event) => {\n          if (event.key == 'Tab') {\n            event.preventDefault();\n            event.stopPropagation();\n            safeCall(onClose, {\n              key: event.key,\n              shiftKey: event.shiftKey,\n              reason:\n                event.key === 'Tab'\n                  ? event.shiftKey\n                    ? CloseReason.TAB_BACKWARD\n                    : CloseReason.TAB_FORWARD\n                  : CloseReason.CLICK,\n            });\n          }\n        }}\n      />\n      {arrow && (\n        <div\n          className={_arrowClass}\n          style={{\n            ...arrowStyle,\n            position: 'absolute',\n            left: arrowPosition.x,\n            top: arrowPosition.y,\n          }}\n          ref={arrowRef}\n        />\n      )}\n\n      <MenuListContext.Provider value={listContext}>\n        <MenuListItemContext.Provider value={itemContext}>\n          <HoverItemContext.Provider value={hoverItem}>{children}</HoverItemContext.Provider>\n        </MenuListItemContext.Provider>\n      </MenuListContext.Provider>\n    </ul>\n  );\n};\n","import { FocusEvent, ForwardedRef, forwardRef, MutableRefObject, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { hasParentClass } from '../../utils/util';\nimport { EventHandlersContext, EventHandlersContextType } from '../contexts/EventHandlersContext';\nimport { ItemSettingsContext } from '../contexts/ItemSettingsContext';\nimport { SettingsContext } from '../contexts/SettingsContext';\nimport { useBEM } from '../hooks';\nimport { ControlledMenuProps, PortalFieldType, RadioChangeEvent } from '../types';\nimport { CloseReason, getTransition, isMenuOpen, Keys, menuContainerClass, mergeProps, safeCall } from '../utils';\nimport { MenuList } from './MenuList';\n\nexport const ControlledMenuFr = (\n  {\n    'aria-label': ariaLabel,\n    className,\n    containerProps,\n    initialMounted,\n    unmountOnClose,\n    transition,\n    transitionTimeout,\n    boundingBoxRef,\n    boundingBoxPadding,\n    reposition = 'auto',\n    submenuOpenDelay = 300,\n    submenuCloseDelay = 150,\n    skipOpen,\n    viewScroll = 'initial',\n    portal,\n    theming,\n    onItemClick,\n    onClose,\n    saveButtonRef,\n    ...restProps\n  }: ControlledMenuProps & { saveButtonRef?: MutableRefObject<HTMLButtonElement | null> },\n  externalRef: ForwardedRef<HTMLUListElement>,\n) => {\n  const containerRef = useRef<HTMLElement>();\n  const scrollNodesRef = useRef<{ anchors?: HTMLDivElement[] }>({});\n  const { anchorRef, state } = restProps;\n\n  const settings = useMemo(\n    () => ({\n      initialMounted,\n      unmountOnClose,\n      transition,\n      transitionTimeout,\n      boundingBoxRef,\n      boundingBoxPadding,\n      rootMenuRef: containerRef,\n      rootAnchorRef: anchorRef,\n      scrollNodesRef,\n      reposition,\n      viewScroll,\n    }),\n    [\n      initialMounted,\n      unmountOnClose,\n      transition,\n      transitionTimeout,\n      anchorRef,\n      boundingBoxRef,\n      boundingBoxPadding,\n      reposition,\n      viewScroll,\n    ],\n  );\n\n  const isWithinMenu = useCallback(\n    (target: EventTarget | null) =>\n      hasParentClass('szh-menu--state-open', target as Node) ||\n      // This is temporary, it will be removed when the overlay click is fixed\n      hasParentClass('LuiModalPrefab', target as Node) ||\n      hasParentClass('prefab-modal', target as Node),\n    [],\n  );\n\n  const handleScreenEventForSave = useCallback(\n    (ev: MouseEvent) => {\n      if (!isWithinMenu(ev.target)) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        // Note: There's an issue in React17\n        // the cell doesn't refresh during update if save is invoked from a native event\n        // This doesn't happen in React18\n        // To work around it, I invoke the save by clicking on a passed in invisible button ref\n        if (saveButtonRef?.current) {\n          saveButtonRef.current.setAttribute('data-reason', CloseReason.BLUR);\n          saveButtonRef.current.click();\n        } else safeCall(onClose, { reason: CloseReason.BLUR });\n\n        // If a user clicks on the menu button when a menu is open, we need to close the menu.\n        // However, a blur event will be fired prior to the click event on menu button,\n        // which makes the menu first close and then open again.\n        // If this happens, e.relatedTarget is incorrectly set to null instead of the button in Safari and Firefox,\n        // and makes it difficult to determine whether onBlur is fired because of clicking on menu button.\n        // This is a workaround approach which sets a flag to skip a following click event.\n        if (skipOpen) {\n          skipOpen.current = true;\n          setTimeout(() => (skipOpen.current = false), 300);\n        }\n      }\n    },\n    [isWithinMenu, onClose, saveButtonRef, skipOpen],\n  );\n\n  const handleScreenEventForCancel = useCallback(\n    (ev: MouseEvent) => {\n      if (!isWithinMenu(ev.target)) {\n        ev.preventDefault();\n        ev.stopPropagation();\n      }\n    },\n    [isWithinMenu],\n  );\n\n  const lastTabDownEl = useRef<Element>();\n  const lastEnterDownEl = useRef<Element>();\n  const handleKeyboardTabAndEnter = useCallback(\n    (isDown: boolean) => (ev: KeyboardEvent) => {\n      const thisDocument = anchorRef?.current ? anchorRef?.current.ownerDocument : document;\n      const activeElement = thisDocument.activeElement;\n      if (!anchorRef?.current || !activeElement) {\n        return;\n      }\n      if (ev.key !== 'Tab' && ev.key !== 'Enter' && ev.key !== 'Esc') {\n        return;\n      }\n\n      if (ev.repeat) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        return;\n      }\n\n      if (ev.key === 'Esc') {\n        ev.preventDefault();\n        ev.stopPropagation();\n        safeCall(onClose, { key: ev.key, reason: CloseReason.CANCEL });\n        return;\n      }\n\n      const invokeSave = (reason: string) => {\n        if (!saveButtonRef?.current) return;\n        saveButtonRef.current?.setAttribute('data-reason', reason);\n        saveButtonRef?.current?.click();\n      };\n\n      // data-allowtabtosave is used such that list filter inputs can use tab to save\n      const allowTabToSave = activeElement.getAttribute('data-allowtabtosave') == 'true';\n\n      const inputElsIterator = thisDocument.querySelectorAll<HTMLElement>('.szh-menu--state-open input,textarea');\n      let inputEls: HTMLElement[] = [];\n      inputElsIterator.forEach((el) => inputEls.push(el));\n      inputEls = inputEls.filter((el) => !(el as any).disabled);\n      if (inputEls.length === 0) return;\n      const firstInputEl = inputEls[0];\n      const lastInputEl = inputEls[inputEls.length - 1];\n\n      const isTextArea = activeElement.nodeName === 'TEXTAREA';\n      const suppressEnterAutoSave = activeElement.getAttribute('data-disableenterautosave') == 'true' || isTextArea;\n\n      if (ev.key === 'Tab') {\n        const tabDirection = ev.shiftKey ? CloseReason.TAB_BACKWARD : CloseReason.TAB_FORWARD;\n        if (\n          (activeElement === lastInputEl && !ev.shiftKey) ||\n          (activeElement === firstInputEl && ev.shiftKey) ||\n          allowTabToSave\n        ) {\n          ev.preventDefault();\n          ev.stopPropagation();\n\n          if (isDown) {\n            lastTabDownEl.current = activeElement;\n          } else {\n            lastTabDownEl.current == activeElement && invokeSave(tabDirection);\n          }\n        }\n      }\n\n      const type = activeElement.getAttribute('type');\n      const isTextInput = type === 'text' || type == null || type === 'textarea';\n\n      switch (activeElement.nodeName) {\n        case 'INPUT':\n          {\n            // If there's only one input element, we support tab and enter\n            if (isTextInput && ev.key === 'Enter' && !suppressEnterAutoSave) {\n              ev.preventDefault();\n              ev.stopPropagation();\n              if (isDown) {\n                lastEnterDownEl.current = activeElement;\n              } else {\n                lastEnterDownEl.current == activeElement && invokeSave(CloseReason.CLICK);\n              }\n            }\n          }\n          break;\n      }\n    },\n    [anchorRef, onClose, saveButtonRef],\n  );\n\n  const handleKeydownTabAndEnter = useMemo(() => handleKeyboardTabAndEnter(true), [handleKeyboardTabAndEnter]);\n  const handleKeyupTabAndEnter = useMemo(() => handleKeyboardTabAndEnter(false), [handleKeyboardTabAndEnter]);\n\n  useEffect(() => {\n    if (isMenuOpen(state)) {\n      const thisDocument = anchorRef?.current ? anchorRef?.current.ownerDocument : document;\n      thisDocument.addEventListener('keydown', handleKeydownTabAndEnter, true);\n      thisDocument.addEventListener('keyup', handleKeyupTabAndEnter, true);\n      thisDocument.addEventListener('mousedown', handleScreenEventForSave, true);\n      thisDocument.addEventListener('mouseup', handleScreenEventForCancel, true);\n      thisDocument.addEventListener('click', handleScreenEventForCancel, true);\n      thisDocument.addEventListener('dblclick', handleScreenEventForCancel, true);\n      return () => {\n        thisDocument.removeEventListener('keydown', handleKeydownTabAndEnter, true);\n        thisDocument.removeEventListener('keyup', handleKeyupTabAndEnter, true);\n        thisDocument.removeEventListener('mousedown', handleScreenEventForSave, true);\n        thisDocument.removeEventListener('mouseup', handleScreenEventForCancel, true);\n        thisDocument.removeEventListener('click', handleScreenEventForCancel, true);\n        thisDocument.removeEventListener('dblclick', handleScreenEventForCancel, true);\n      };\n    }\n    return () => {};\n  }, [\n    handleScreenEventForSave,\n    handleScreenEventForCancel,\n    state,\n    anchorRef,\n    handleKeydownTabAndEnter,\n    handleKeyupTabAndEnter,\n  ]);\n\n  const itemSettings = useMemo(\n    () => ({\n      submenuOpenDelay,\n      submenuCloseDelay,\n    }),\n    [submenuOpenDelay, submenuCloseDelay],\n  );\n\n  const eventHandlers = useMemo(\n    (): EventHandlersContextType => ({\n      handleClick(event: RadioChangeEvent, isCheckOrRadio: boolean) {\n        if (!event.stopPropagation) safeCall(onItemClick, event);\n\n        let keepOpen = event.keepOpen;\n        if (keepOpen === undefined) {\n          // if event.keepOpen is undefined, the following default behaviour is used\n          // According to WAI-ARIA Authoring Practices 1.1\n          // Keep menu open when check or radio is invoked by SPACE key\n          keepOpen = isCheckOrRadio && event.key === Keys.SPACE;\n        }\n\n        if (!keepOpen) {\n          safeCall(onClose, {\n            value: event.value,\n            key: event.key,\n            shiftKey: event.shiftKey,\n            reason:\n              event.key === 'Tab'\n                ? event.shiftKey\n                  ? CloseReason.TAB_BACKWARD\n                  : CloseReason.TAB_FORWARD\n                : CloseReason.CLICK,\n          });\n        }\n      },\n\n      handleClose(key?: string) {\n        safeCall(onClose, { key, reason: CloseReason.CLICK });\n      },\n    }),\n    [onItemClick, onClose],\n  );\n\n  const onKeyUp = (e: KeyboardEvent) => {\n    switch (e.key) {\n      case Keys.ESC:\n        e.preventDefault();\n        e.stopPropagation();\n        safeCall(onClose, { key: e.key, reason: CloseReason.CANCEL });\n        break;\n    }\n  };\n\n  const onBlur = (e: FocusEvent) => {\n    if (\n      isMenuOpen(state) &&\n      !e.currentTarget.contains(e.relatedTarget || document.activeElement) &&\n      !isWithinMenu(e.relatedTarget)\n    ) {\n      safeCall(onClose, { reason: CloseReason.BLUR });\n\n      // If a user clicks on the menu button when a menu is open, we need to close the menu.\n      // However, a blur event will be fired prior to the click event on menu button,\n      // which makes the menu first close and then open again.\n      // If this happens, e.relatedTarget is incorrectly set to null instead of the button in Safari and Firefox,\n      // and makes it difficult to determine whether onBlur is fired because of clicking on menu button.\n      // This is a workaround approach which sets a flag to skip a following click event.\n      if (skipOpen) {\n        skipOpen.current = true;\n        setTimeout(() => (skipOpen.current = false), 300);\n      }\n    }\n  };\n\n  const itemTransition = getTransition(transition, 'item');\n  const modifiers = useMemo(() => ({ theme: theming, itemTransition }), [theming, itemTransition]);\n\n  const menuList = (\n    <div\n      {...mergeProps({ onKeyUp, onBlur }, containerProps)}\n      className={useBEM({\n        block: menuContainerClass,\n        modifiers,\n        className,\n      })}\n      style={{ ...containerProps?.style, position: 'relative' }}\n      ref={containerRef}\n    >\n      {state && (\n        <SettingsContext.Provider value={settings}>\n          <ItemSettingsContext.Provider value={itemSettings}>\n            <EventHandlersContext.Provider value={eventHandlers}>\n              <MenuList\n                {...restProps}\n                ariaLabel={ariaLabel || 'Menu'}\n                externalRef={externalRef}\n                containerRef={containerRef}\n                onClose={onClose}\n              />\n            </EventHandlersContext.Provider>\n          </ItemSettingsContext.Provider>\n        </SettingsContext.Provider>\n      )}\n    </div>\n  );\n\n  if (portal === true && anchorRef?.current != null) {\n    if (hasParentClass('react-menu-inline-test', anchorRef.current)) {\n      portal = false;\n    } else {\n      portal = { target: anchorRef.current.ownerDocument.body } as PortalFieldType;\n    }\n  }\n\n  if (portal) {\n    if (typeof portal === 'boolean') {\n      if (portal && typeof document !== 'undefined') {\n        return createPortal(menuList, document.body);\n      }\n    } else {\n      return portal.target ? createPortal(menuList, portal.target) : portal.stablePosition ? null : menuList;\n    }\n  }\n  return menuList;\n};\n\nexport const ControlledMenu = forwardRef(ControlledMenuFr);\n","import { LegacyRef, ReactElement, useContext, useMemo, useRef } from 'react';\n\nimport { EventHandlersContext } from '../contexts/EventHandlersContext';\nimport { useBEM, useCombinedRef, useItemState } from '../hooks';\nimport { BaseProps } from '../types';\nimport { commonProps, menuClass, menuItemClass, mergeProps, safeCall, withHovering } from '../utils';\nimport { withHoveringResultProps } from '../utils/withHovering';\n\nexport interface FocusableItemProps extends BaseProps, withHoveringResultProps {\n  disabled?: boolean;\n  children: (ref: LegacyRef<any>) => ReactElement;\n}\n\nexport const FocusableItemFr = ({\n  className,\n  disabled,\n  children,\n  isHovering,\n  menuItemRef,\n  externalRef,\n  ...restProps\n}: FocusableItemProps) => {\n  const isDisabled = !!disabled;\n  const ref = useRef(null);\n  const { setHover, onPointerLeave, ...restStateProps } = useItemState(menuItemRef, ref, isHovering, isDisabled);\n  const { handleClose } = useContext(EventHandlersContext);\n\n  const modifiers = useMemo(\n    () => ({\n      disabled: isDisabled,\n      hover: isHovering,\n      focusable: true,\n    }),\n    [isDisabled, isHovering],\n  );\n\n  const renderChildren = useMemo(\n    () =>\n      safeCall(children, {\n        ...modifiers,\n        ref,\n        closeMenu: handleClose,\n      }),\n    [children, modifiers, handleClose],\n  );\n\n  const mergedProps = mergeProps(\n    {\n      ...restStateProps,\n      onPointerLeave: (e: PointerEvent) => onPointerLeave(e, true),\n      onFocus: setHover,\n    },\n    restProps,\n  );\n\n  return (\n    <li\n      role=\"menuitem\"\n      {...mergedProps}\n      {...commonProps(isDisabled)}\n      ref={useCombinedRef(externalRef, menuItemRef)}\n      className={useBEM({ block: menuClass, element: menuItemClass, modifiers, className })}\n    >\n      {renderChildren}\n    </li>\n  );\n};\n\nexport const FocusableItem = withHovering('FocusableItem', FocusableItemFr);\n","import {\n  cloneElement,\n  ForwardedRef,\n  forwardRef,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useImperativeHandle,\n  useRef,\n} from 'react';\n\nimport { useCombinedRef, useMenuChange, useMenuStateAndFocus } from '../hooks';\nimport { MenuButtonModifiers, MenuCloseEvent, RenderProp, RootMenuProps, UncontrolledMenuProps } from '../types';\nimport { FocusPositions, getName, isMenuOpen, Keys, mergeProps, safeCall } from '../utils';\nimport { ControlledMenu } from './ControlledMenu';\n\n//\n// Menu\n// ----------------------------------------------------------------------\nexport interface MenuProps extends RootMenuProps, UncontrolledMenuProps {\n  /**\n   * Can be a `MenuButton`, a `button` element, or a React component.\n   * It also can be a render function that returns one.\n   *\n   * If a React component is provided, it needs to implement the following contracts:\n   * - Accepts a `ref` prop that is forwarded to an element to which menu will be positioned.\n   * The element should be able to receive focus.\n   * - Accepts `onClick` and `onKeyDown` event props.\n   */\n  menuButton: RenderProp<MenuButtonModifiers, ReactElement>;\n}\n\nexport function MenuFr(\n  { 'aria-label': ariaLabel, menuButton, instanceRef, onMenuChange, ...restProps }: MenuProps,\n  externalRef: ForwardedRef<ReactElement>,\n) {\n  const [stateProps, toggleMenu, openMenu] = useMenuStateAndFocus(restProps);\n  const isOpen = isMenuOpen(stateProps.state);\n  const skipOpen = useRef(false);\n  const buttonRef = useRef<HTMLButtonElement>(null);\n\n  const handleClose = useCallback(\n    (e: MenuCloseEvent) => {\n      toggleMenu(false);\n      if (e.key) buttonRef.current && buttonRef.current.focus();\n    },\n    [toggleMenu],\n  );\n\n  const onClick = (e: MouseEvent) => {\n    if (skipOpen.current) return;\n    // Focus (hover) the first menu item when onClick event is trigger by keyboard\n    openMenu(e.detail === 0 ? FocusPositions.FIRST : undefined);\n  };\n\n  const onKeyDown = (e: KeyboardEvent) => {\n    switch (e.key) {\n      case Keys.UP:\n        openMenu(FocusPositions.LAST);\n        break;\n\n      case Keys.DOWN:\n        openMenu(FocusPositions.FIRST);\n        break;\n\n      default:\n        return;\n    }\n\n    e.preventDefault();\n  };\n\n  // Too many mixed types here to figure out what to pick for button.  Bad code.\n  const button: any = safeCall(menuButton, { open: isOpen });\n  if (!button || !button.type) throw new Error('Menu requires a menuButton prop.');\n\n  const buttonProps = {\n    ref: useCombinedRef(button.ref, buttonRef),\n    ...mergeProps({ onClick, onKeyDown }, button.props),\n    isOpen: false,\n  };\n  if (getName(button.type) === 'MenuButton') {\n    buttonProps.isOpen = isOpen;\n  }\n  const renderButton = cloneElement(button, buttonProps);\n\n  useMenuChange(onMenuChange, isOpen);\n\n  useImperativeHandle(instanceRef, () => ({\n    openMenu,\n    closeMenu: () => toggleMenu(false),\n  }));\n\n  return (\n    <Fragment>\n      {renderButton}\n      <ControlledMenu\n        {...restProps}\n        {...stateProps}\n        aria-label={ariaLabel || (typeof button.props.children === 'string' ? button.props.children : 'Menu')}\n        anchorRef={buttonRef}\n        ref={externalRef}\n        onClose={handleClose}\n        skipOpen={skipOpen}\n      />\n    </Fragment>\n  );\n}\nexport const Menu = forwardRef(MenuFr);\n","import { forwardRef, LegacyRef, ReactNode, useMemo } from 'react';\n\nimport { useBEM } from '../hooks/useBEM';\nimport { BaseProps, MenuButtonModifiers } from '../types';\nimport { menuButtonClass } from '../utils/constants';\n\nexport interface MenuButtonProps extends BaseProps<MenuButtonModifiers> {\n  disabled?: boolean;\n  children?: ReactNode;\n\n  // Seems to be an internal thing, wasn't in original code\n  isOpen?: boolean;\n}\n\nexport const MenuButton = forwardRef(function MenuButton(\n  { className, isOpen, disabled, children, ...restProps }: MenuButtonProps,\n  ref: LegacyRef<HTMLButtonElement>,\n) {\n  const modifiers = useMemo(() => ({ open: isOpen }), [isOpen]);\n\n  return (\n    <button\n      aria-haspopup\n      aria-expanded={isOpen}\n      aria-disabled={disabled || undefined}\n      type=\"button\"\n      disabled={disabled}\n      {...restProps}\n      ref={ref}\n      className={useBEM({ block: menuButtonClass, modifiers, className })}\n    >\n      {children}\n    </button>\n  );\n});\n","import { forwardRef, LegacyRef, memo } from 'react';\n\nimport { useBEM } from '../hooks';\nimport { BaseProps } from '../types';\nimport { menuClass, menuDividerClass } from '../utils';\n\nconst MenuDividerFr = ({ className, ...restProps }: BaseProps, externalRef: LegacyRef<HTMLLIElement>) => {\n  return (\n    <li\n      role=\"separator\"\n      {...restProps}\n      ref={externalRef}\n      className={useBEM({ block: menuClass, element: menuDividerClass, className })}\n    />\n  );\n};\n\nexport const MenuDivider = memo(forwardRef(MenuDividerFr));\n","import { ForwardedRef, forwardRef, ReactNode, useContext, useRef, useState } from 'react';\n\nimport { MenuListContext } from '../contexts/MenuListContext';\nimport { useBEM, useCombinedRef, useLayoutEffect } from '../hooks';\nimport { BaseProps, MenuOverflow } from '../types';\nimport { menuClass, menuGroupClass } from '../utils';\n\nexport interface MenuGroupProps extends BaseProps {\n  children?: ReactNode;\n  /**\n   * Set `true` to apply overflow of the parent menu to the group.\n   * Only one `MenuGroup` in a menu should set this prop as `true`.\n   */\n  takeOverflow?: boolean;\n}\n\nexport const MenuGroupFr = (\n  { className, style, takeOverflow, ...restProps }: MenuGroupProps,\n  externalRef: ForwardedRef<HTMLDivElement>,\n) => {\n  const ref = useRef<HTMLDivElement>(null);\n  const [overflowStyle, setOverflowStyle] = useState<{ maxHeight?: number; overflow?: MenuOverflow }>();\n  const { overflow, overflowAmt } = useContext(MenuListContext);\n\n  useLayoutEffect(() => {\n    let maxHeight;\n    if (takeOverflow && overflowAmt != null && overflowAmt >= 0 && ref.current) {\n      maxHeight = ref.current.getBoundingClientRect().height - overflowAmt;\n      if (maxHeight < 0) maxHeight = 0;\n    }\n    setOverflowStyle(maxHeight != null && maxHeight >= 0 ? { maxHeight, overflow } : undefined);\n  }, [takeOverflow, overflow, overflowAmt]);\n\n  useLayoutEffect(() => {\n    if (overflowStyle && ref.current) ref.current.scrollTop = 0;\n  }, [overflowStyle]);\n\n  return (\n    <div\n      {...restProps}\n      ref={useCombinedRef(externalRef, ref)}\n      className={useBEM({ block: menuClass, element: menuGroupClass, className })}\n      style={{ ...style, ...overflowStyle }}\n    />\n  );\n};\n\nexport const MenuGroup = forwardRef(MenuGroupFr);\n","import { ForwardedRef, forwardRef, memo } from 'react';\n\nimport { useBEM } from '../hooks';\nimport { BasePropsWithChildren } from '../types';\nimport { menuClass, menuHeaderClass } from '../utils';\n\nexport const MenuHeaderFr = (\n  { className, ...restProps }: BasePropsWithChildren,\n  externalRef: ForwardedRef<HTMLLIElement>,\n) => {\n  return (\n    <li\n      role=\"presentation\"\n      {...restProps}\n      ref={externalRef}\n      className={useBEM({ block: menuClass, element: menuHeaderClass, className })}\n    />\n  );\n};\n\nexport const MenuHeader = memo(forwardRef(MenuHeaderFr));\n","import { createContext } from 'react';\n\nimport { EventHandler, RadioChangeEvent } from '../types';\n\nexport const RadioGroupContext = createContext<{\n  value?: any;\n  name?: string;\n  onRadioChange?: EventHandler<RadioChangeEvent>;\n}>({});\n","import { KeyboardEvent, Ref, useContext, useMemo } from 'react';\n\nimport { EventHandlersContext } from '../contexts/EventHandlersContext';\nimport { RadioGroupContext } from '../contexts/RadioGroupContext';\nimport { useBEM, useCombinedRef, useItemState } from '../hooks';\nimport { BaseProps, ClickEvent, EventHandler, Hoverable, MenuItemTypeProp, RenderProp } from '../types';\nimport { commonProps, Keys, menuClass, menuItemClass, mergeProps, RMEvent, safeCall, withHovering } from '../utils';\nimport { withHoveringResultProps } from '../utils/withHovering';\n\n//\n// MenuItem\n// ----------------------------------------------------------------------\nexport type MenuItemModifiers = Readonly<{\n  /**\n   * 'radio' for radio item, 'checkbox' for checkbox item, or `undefined` for other items.\n   */\n  type?: MenuItemTypeProp;\n  /**\n   * Indicates if the menu item is disabled.\n   */\n  disabled: boolean;\n  /**\n   * Indicates if the menu item is being hovered and has focus.\n   */\n  hover: boolean;\n  /**\n   * Indicates if the menu item is checked when it's a radio or checkbox item.\n   */\n  checked: boolean;\n  /**\n   * Indicates if the menu item has a URL link.\n   */\n  anchor: boolean;\n}>;\n\nexport interface MenuItemProps extends Omit<BaseProps<MenuItemModifiers>, 'onClick'>, Hoverable {\n  /**\n   * Any value provided to this prop will be available in the event object of click events.\n   *\n   * It's useful for helping identify which menu item is clicked when you\n   * listen on `onItemClick` event on root menu component.\n   */\n  value?: any;\n  /**\n   * If provided, menu item renders an HTML `<a>` element with this `href` attribute.\n   */\n  href?: string;\n  rel?: string;\n  target?: string;\n  /**\n   * Set this prop to make the item a checkbox or radio menu item.\n   */\n  type?: MenuItemTypeProp;\n  /**\n   * Set `true` if a checkbox menu item is checked.\n   *\n   * *Please note radio menu item doesn't use this prop.*\n   */\n  checked?: boolean;\n  /**\n   * Event fired when the menu item is clicked.\n   */\n  onClick?: EventHandler<ClickEvent>;\n  /**\n   * Any valid React node or a render function that returns one.\n   */\n  children?: RenderProp<MenuItemModifiers>;\n}\n\nconst MenuItemFr = ({\n  className,\n  value,\n  href,\n  type,\n  checked,\n  disabled,\n  children,\n  onClick,\n  isHovering,\n  menuItemRef,\n  externalRef,\n  ...restProps\n}: MenuItemProps & withHoveringResultProps) => {\n  const isDisabled = !!disabled;\n  const { setHover, ...restStateProps } = useItemState(menuItemRef, menuItemRef, isHovering, isDisabled);\n  const eventHandlers = useContext(EventHandlersContext);\n  const radioGroup = useContext(RadioGroupContext);\n  const isRadio = type === 'radio';\n  const isCheckBox = type === 'checkbox';\n  const isAnchor = !!href && !isDisabled && !isRadio && !isCheckBox;\n  const isChecked = isRadio ? radioGroup.value === value : isCheckBox ? !!checked : false;\n\n  // handle click seems to be a combination of multiple event types, bad code.\n  const handleClick = (e: any) => {\n    if (isDisabled) {\n      if (e.syntheticEvent) {\n        e.syntheticEvent.stopPropagation();\n        e.syntheticEvent.preventDefault();\n      } else {\n        e.stopPropagation();\n        e.preventDefault();\n      }\n      return;\n    }\n\n    const event: RMEvent = {\n      value,\n      syntheticEvent: e,\n    };\n\n    if (e.key !== undefined) {\n      const ke = e as KeyboardEvent;\n      event.key = ke.key;\n      event.shiftKey = ke.shiftKey;\n    }\n    if (isCheckBox) event.checked = !isChecked;\n    if (isRadio) event.name = radioGroup.name;\n    safeCall(onClick, event);\n    if (isRadio) safeCall(radioGroup.onRadioChange, event);\n    eventHandlers.handleClick(event, isCheckBox || isRadio);\n  };\n\n  const handleKeyDown = (e: KeyboardEvent) => {\n    // if tab is allowed the handleKeyUp event can't process the tab\n    if (e.key === 'Tab') {\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  };\n\n  /**\n   * Keyboard events are triggered on up, otherwise subcomponents get spaces and enters typed in them\n   */\n  const handleKeyUp = (e: KeyboardEvent) => {\n    if (!isHovering) return;\n\n    switch (e.key) {\n      case Keys.ENTER:\n      case Keys.TAB:\n      case Keys.SPACE:\n        e.preventDefault();\n        e.stopPropagation();\n        if (isAnchor) {\n          menuItemRef?.current && menuItemRef.current.click();\n        } else {\n          handleClick(e);\n        }\n        break;\n    }\n  };\n\n  const modifiers = useMemo(\n    () => ({\n      type,\n      disabled: isDisabled,\n      hover: isHovering,\n      checked: isChecked,\n      anchor: isAnchor,\n    }),\n    [type, isDisabled, isHovering, isChecked, isAnchor],\n  );\n\n  const mergedProps = mergeProps(\n    {\n      ...restStateProps,\n      onPointerDown: setHover,\n      onKeyDown: handleKeyDown,\n      onKeyUp: handleKeyUp,\n      onClick: handleClick,\n    },\n    restProps,\n  );\n\n  // Order of props overriding (same in all components):\n  // 1. Preset props adhering to WAI-ARIA Authoring Practices.\n  // 2. Merged outer and local props\n  // 3. ref, className\n  const menuItemProps = {\n    role: isRadio ? 'menuitemradio' : isCheckBox ? 'menuitemcheckbox' : 'menuitem',\n    'aria-checked': isRadio || isCheckBox ? isChecked : undefined,\n    ...mergedProps,\n    ...commonProps(isDisabled, isHovering),\n    ref: useCombinedRef(externalRef as Ref<any>, menuItemRef),\n    className: useBEM({ block: menuClass, element: menuItemClass, modifiers, className }),\n    children: useMemo(() => safeCall(children, modifiers), [children, modifiers]),\n  };\n\n  if (isAnchor) {\n    return (\n      <li role=\"presentation\">\n        <a href={href} {...menuItemProps} />\n      </li>\n    );\n  } else {\n    return <li {...menuItemProps} />;\n  }\n};\n\nexport const MenuItem = withHovering('MenuItem', MenuItemFr);\n","import { ForwardedRef, forwardRef, ReactNode, useMemo } from 'react';\n\nimport { RadioGroupContext } from '../contexts/RadioGroupContext';\nimport { useBEM } from '../hooks';\nimport { BaseProps, EventHandler, RadioChangeEvent } from '../types';\nimport { menuClass, radioGroupClass } from '../utils';\n\n//\n// MenuRadioGroup\n// ----------------------------------------------------------------------\nexport interface MenuRadioGroupProps extends BaseProps {\n  /**\n   * Optionally set the radio group name.\n   *\n   * The name will be passed to the `onRadioChange` event.\n   * It's useful for identifying radio groups if you attach the same event handler to multiple groups.\n   */\n  name?: string;\n  /**\n   * Set value of the radio group.\n   *\n   * The child menu item which has the same value (strict equality ===) as the\n   * radio group is marked as checked.\n   */\n  value?: any;\n  children?: ReactNode;\n  /**\n   * Event fired when a child menu item is clicked (selected).\n   */\n  onRadioChange?: EventHandler<RadioChangeEvent>;\n}\n\nexport const MenuRadioGroupFr = (\n  { 'aria-label': ariaLabel, className, name, value, onRadioChange, ...restProps }: MenuRadioGroupProps,\n  externalRef: ForwardedRef<HTMLUListElement>,\n) => {\n  const contextValue = useMemo(() => ({ name, value, onRadioChange }), [name, value, onRadioChange]);\n\n  return (\n    <RadioGroupContext.Provider value={contextValue}>\n      <li role=\"presentation\">\n        <ul\n          role=\"group\"\n          aria-label={ariaLabel || name || 'Radio group'}\n          {...restProps}\n          ref={externalRef}\n          className={useBEM({ block: menuClass, element: radioGroupClass, className })}\n        />\n      </li>\n    </RadioGroupContext.Provider>\n  );\n};\n\nexport const MenuRadioGroup = forwardRef(MenuRadioGroupFr);\n","import {\n  CSSProperties,\n  KeyboardEvent,\n  ReactNode,\n  useContext,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { ItemSettingsContext } from '../contexts/ItemSettingsContext';\nimport { MenuListContext } from '../contexts/MenuListContext';\nimport { MenuListItemContext } from '../contexts/MenuListItemContext';\nimport { SettingsContext } from '../contexts/SettingsContext';\nimport { useBEM, useCombinedRef, useItemEffect, useMenuChange, useMenuStateAndFocus } from '../hooks';\nimport {\n  BaseProps,\n  ClassNameProp,\n  Hoverable,\n  MenuAlign,\n  MenuArrowModifiers,\n  MenuDirection,\n  MenuModifiers,\n  MenuOverflow,\n  MenuPosition,\n  RenderProp,\n  UncontrolledMenuProps,\n} from '../types';\nimport {\n  batchedUpdates,\n  commonProps,\n  FocusPositions,\n  HoverActionTypes,\n  isMenuOpen,\n  Keys,\n  menuClass,\n  menuItemClass,\n  mergeProps,\n  safeCall,\n  subMenuClass,\n  withHovering,\n} from '../utils';\nimport { withHoveringResultProps } from '../utils/withHovering';\nimport { MenuList } from './MenuList';\n\n//\n// SubMenu\n// ----------------------------------------------------------------------\nexport type SubMenuItemModifiers = Readonly<{\n  /**\n   * Indicates if the submenu is open.\n   */\n  open: boolean;\n  /**\n   * Indicates if the submenu item is being hovered and has focus.\n   */\n  hover: boolean;\n  /**\n   * Indicates if the submenu and item are disabled.\n   */\n  disabled: boolean;\n}>;\n\n/**\n * Common props for `Menu`, `SubMenu` and `ControlledMenu`\n */\ninterface BaseMenuProps extends Omit<BaseProps, 'style'> {\n  /**\n   * Can be a string or a function which receives a modifier object and returns a CSS `class` string.\n   */\n  menuClassName?: ClassNameProp<MenuModifiers>;\n  /**\n   * This prop is forwarded to the `style` prop of menu DOM element.\n   */\n  menuStyle?: CSSProperties;\n  /**\n   * Can be a string or a function which receives a modifier object and returns a CSS `class` string.\n   */\n  arrowClassName?: ClassNameProp<MenuArrowModifiers>;\n  /**\n   * This prop is forwarded to the `style` prop of menu arrow DOM element.\n   */\n  arrowStyle?: CSSProperties;\n  /**\n   * Set `true` to display an arrow pointing to its anchor element.\n   */\n  arrow?: boolean;\n  /**\n   * Set the horizontal distance (in pixels) between menu and its anchor element.\n   * The value can be negative.\n   * @default 0\n   */\n  offsetX?: number;\n  /**\n   * Set the vertical distance (in pixels) between menu and its anchor element.\n   * The value can be negative.\n   * @default 0\n   */\n  offsetY?: number;\n  /**\n   * Set alignment of menu with anchor element.\n   * @default 'start'\n   */\n  align?: MenuAlign;\n  /**\n   * Set direction in which menu expands against anchor element.\n   * @default 'bottom'\n   */\n  direction?: MenuDirection;\n  /**\n   * Set the position of menu related to its anchor element:\n   *\n   * - 'auto' menu position is adjusted to have it contained within the viewport,\n   * even if it will be detached from the anchor element.\n   * This option allows to display menu in the viewport as much as possible.\n   *\n   * - 'anchor' menu position is adjusted to have it contained within the viewport,\n   * but it will be kept attached to the edges of anchor element.\n   *\n   * - 'initial' menu always stays at its initial position.\n   * @default 'auto'\n   */\n  position?: MenuPosition;\n  /**\n   * Make the menu list scrollable or hidden when there is not enough viewport space to\n   * display all menu items. The prop is similar to the CSS `overflow` property.\n   * @default 'visible'\n   */\n  overflow?: MenuOverflow;\n  /**\n   * Set computed overflow amount down to a child `MenuGroup`.\n   * The `MenuGroup` should have `takeOverflow` prop set as `true` accordingly.\n   */\n  setDownOverflow?: boolean;\n  children?: ReactNode;\n}\n\nexport interface SubMenuProps extends BaseMenuProps, Hoverable, UncontrolledMenuProps, withHoveringResultProps {\n  /**\n   * Properties of this object are spread to the submenu item DOM element.\n   */\n  itemProps?: BaseProps<SubMenuItemModifiers>;\n  /**\n   * The submenu `label` can be a `string` or JSX element, or a render function that returns one.\n   */\n  label?: RenderProp<SubMenuItemModifiers>;\n  /**\n   * - `undefined` submenu opens when the label item is hovered or clicked. This is the default behaviour.\n   * - 'clickOnly' submenu opens when the label item is clicked.\n   * - 'none' submenu doesn't open with mouse or keyboard events;\n   * you can call the `openMenu` function on `instanceRef` to open submenu programmatically.\n   */\n  openTrigger?: 'none' | 'clickOnly';\n}\n\nexport const SubMenuFr = ({\n  'aria-label': ariaLabel,\n  className,\n  disabled,\n  direction,\n  label,\n  openTrigger,\n  onMenuChange,\n  isHovering,\n  instanceRef,\n  menuItemRef,\n  itemProps = {},\n  ...restProps\n}: SubMenuProps) => {\n  const settings = useContext(SettingsContext);\n  const { rootMenuRef } = settings;\n  const { submenuOpenDelay, submenuCloseDelay } = useContext(ItemSettingsContext);\n  const { parentMenuRef, parentDir, overflow: parentOverflow } = useContext(MenuListContext);\n  const { isParentOpen, isSubmenuOpen, setOpenSubmenuCount, dispatch, updateItems } = useContext(MenuListItemContext);\n  const isPortal = parentOverflow !== 'visible';\n\n  const [stateProps, toggleMenu, _openMenu] = useMenuStateAndFocus(settings);\n\n  const { state } = stateProps;\n  const isDisabled = !!disabled;\n  const isOpen = isMenuOpen(state);\n  const containerRef = useRef(null);\n  const timeoutId = useRef<ReturnType<typeof setTimeout>>();\n\n  const stopTimer = () => {\n    if (timeoutId.current) {\n      clearTimeout(timeoutId.current);\n      timeoutId.current = undefined;\n    }\n  };\n\n  const openMenu = (...args: any[]) => {\n    stopTimer();\n    setHover();\n    !isDisabled && _openMenu(...args);\n  };\n\n  const setHover = () => !isHovering && !isDisabled && dispatch(HoverActionTypes.SET, menuItemRef?.current, 0);\n\n  const delayOpen = (delay: number) => {\n    setHover();\n    if (!openTrigger) timeoutId.current = setTimeout(() => batchedUpdates(openMenu), Math.max(delay, 0));\n  };\n\n  const handlePointerMove = () => {\n    if (timeoutId.current || isOpen || isDisabled) return;\n\n    if (isSubmenuOpen) {\n      timeoutId.current = setTimeout(() => delayOpen(submenuOpenDelay - submenuCloseDelay), submenuCloseDelay);\n    } else {\n      delayOpen(submenuOpenDelay);\n    }\n  };\n\n  const handlePointerLeave = () => {\n    stopTimer();\n    if (!isOpen) dispatch(HoverActionTypes.UNSET, menuItemRef?.current, 0);\n  };\n\n  const handleKeyDown = (e: KeyboardEvent) => {\n    let handled = false;\n\n    switch (e.key) {\n      // LEFT key is bubbled up from submenu items\n      case Keys.LEFT:\n        if (isOpen) {\n          menuItemRef?.current && menuItemRef.current.focus();\n          toggleMenu(false);\n          handled = true;\n        }\n        break;\n\n      // prevent browser from scrolling page to the right\n      case Keys.RIGHT:\n        if (!isOpen) handled = true;\n        break;\n    }\n\n    if (handled) {\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  };\n\n  const handleItemKeyDown = (e: KeyboardEvent) => {\n    if (!isHovering) return;\n\n    switch (e.key) {\n      case Keys.ENTER:\n      case Keys.SPACE:\n      case Keys.RIGHT:\n        openTrigger !== 'none' && openMenu(FocusPositions.FIRST);\n        break;\n    }\n  };\n\n  useItemEffect(isDisabled, menuItemRef, updateItems);\n  useMenuChange(onMenuChange, isOpen);\n\n  useEffect(() => () => clearTimeout(timeoutId.current), []);\n  useEffect(() => {\n    // Don't set focus when parent menu is closed, otherwise focus will be lost\n    // and onBlur event will be fired with relatedTarget setting as null.\n    if (isHovering && isParentOpen) {\n      menuItemRef?.current && menuItemRef.current.focus();\n    } else {\n      toggleMenu(false);\n    }\n  }, [isHovering, isParentOpen, toggleMenu, menuItemRef]);\n\n  useEffect(() => {\n    setOpenSubmenuCount((count: number) => (isOpen ? count + 1 : Math.max(count - 1, 0)));\n  }, [setOpenSubmenuCount, isOpen]);\n\n  useImperativeHandle(instanceRef, () => ({\n    openMenu: (...args) => {\n      isParentOpen && openMenu(...args);\n    },\n    closeMenu: () => {\n      if (isOpen) {\n        menuItemRef?.current && menuItemRef.current.focus();\n        toggleMenu(false);\n      }\n    },\n  }));\n\n  const modifiers = useMemo(\n    () => ({\n      open: isOpen,\n      hover: isHovering,\n      disabled: isDisabled,\n      submenu: true,\n    }),\n    [isOpen, isHovering, isDisabled],\n  );\n\n  const { ref: externalItemRef, className: itemClassName, ...restItemProps } = itemProps;\n\n  const mergedItemProps = mergeProps(\n    {\n      onPointerMove: handlePointerMove,\n      onPointerLeave: handlePointerLeave,\n      onKeyDown: handleItemKeyDown,\n      onClick: () => openTrigger !== 'none' && openMenu(),\n    },\n    restItemProps,\n  );\n\n  const getMenuList = () => {\n    const menuList = (\n      <MenuList\n        {...restProps}\n        {...stateProps}\n        ariaLabel={ariaLabel || (typeof label === 'string' ? label : 'Submenu')}\n        anchorRef={menuItemRef}\n        containerRef={isPortal ? rootMenuRef : containerRef}\n        direction={direction || (parentDir === 'right' || parentDir === 'left' ? parentDir : 'right')}\n        parentScrollingRef={isPortal && parentMenuRef}\n        isDisabled={isDisabled}\n      />\n    );\n    const container = rootMenuRef?.current;\n    return isPortal && container ? createPortal(menuList, container) : menuList;\n  };\n\n  return (\n    <li\n      className={useBEM({ block: menuClass, element: subMenuClass, className })}\n      style={{ position: 'relative' }}\n      role=\"presentation\"\n      ref={containerRef}\n      onKeyDown={handleKeyDown}\n    >\n      <div\n        role=\"menuitem\"\n        aria-haspopup\n        aria-expanded={isOpen}\n        {...mergedItemProps}\n        {...commonProps(isDisabled, isHovering)}\n        ref={useCombinedRef(externalItemRef, menuItemRef)}\n        className={useBEM({\n          block: menuClass,\n          element: menuItemClass,\n          modifiers,\n          className: itemClassName,\n        })}\n      >\n        {useMemo(() => safeCall(label, modifiers), [label, modifiers])}\n      </div>\n\n      {state && getMenuList()}\n    </li>\n  );\n};\n\nexport const SubMenu = withHovering('SubMenu', SubMenuFr);\n","import { ColDef } from 'ag-grid-community';\nimport { CellContextMenuEvent } from 'ag-grid-community';\nimport { ReactElement, useCallback, useContext, useRef, useState } from 'react';\n\nimport { GridContext } from '../../contexts/GridContext';\nimport { ControlledMenu } from '../../react-menu3';\nimport { GridBaseRow } from '../types';\n\nexport interface GridContextMenuComponentProps<TData extends GridBaseRow> {\n  selectedRows: TData[];\n  clickedRow: TData;\n  colDef: ColDef;\n  close: () => void;\n}\n\nexport type GridContextMenuComponent<TData extends GridBaseRow> = (\n  props: GridContextMenuComponentProps<TData>,\n) => ReactElement | null;\n\nexport const useGridContextMenu = <TData extends GridBaseRow>({\n  contextMenuSelectRow,\n  contextMenu: ContextMenu,\n}: {\n  contextMenuSelectRow: boolean;\n  contextMenu?: GridContextMenuComponent<TData>;\n}) => {\n  const { redrawRows, prePopupOps, resetFocusedCellAfterCellEditing, getSelectedRows } = useContext(GridContext);\n\n  const [isOpen, setOpen] = useState(false);\n  const [anchorPoint, setAnchorPoint] = useState({ x: 0, y: 0 });\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  const clickedColDefRef = useRef<ColDef>(null!);\n  const selectedRowsRef = useRef<any[]>([]);\n  const clickedRowRef = useRef<any>(null);\n\n  const openMenu = useCallback(\n    (e: PointerEvent | null | undefined) => {\n      if (!e) return;\n      prePopupOps();\n      setAnchorPoint({ x: e.clientX, y: e.clientY });\n      setOpen(true);\n    },\n    [prePopupOps],\n  );\n\n  const closeMenu = useCallback(() => {\n    setOpen(false);\n    redrawRows();\n    resetFocusedCellAfterCellEditing();\n  }, [resetFocusedCellAfterCellEditing, redrawRows]);\n\n  const cellContextMenu = useCallback(\n    (event: CellContextMenuEvent) => {\n      if (contextMenuSelectRow && !event.node.isSelected()) {\n        event.node.setSelected(true, true);\n      }\n\n      clickedColDefRef.current = event.colDef;\n      selectedRowsRef.current = getSelectedRows();\n      clickedRowRef.current = event.data;\n\n      // This is actually a pointer event\n      openMenu(event.event as PointerEvent);\n    },\n    [contextMenuSelectRow, getSelectedRows, openMenu],\n  );\n\n  return {\n    openMenu,\n    cellContextMenu,\n    component: ContextMenu ? (\n      <>\n        <ControlledMenu\n          anchorPoint={anchorPoint}\n          state={isOpen ? 'open' : 'closed'}\n          direction=\"right\"\n          onClose={closeMenu}\n        >\n          {isOpen && (\n            <ContextMenu\n              selectedRows={selectedRowsRef.current}\n              clickedRow={clickedRowRef.current}\n              colDef={clickedColDefRef.current}\n              close={closeMenu}\n            />\n          )}\n        </ControlledMenu>\n      </>\n    ) : null,\n  };\n};\n","import { LuiIcon, LuiStatusSpinner } from '@linzjs/lui';\nimport { ForwardedRef, forwardRef } from 'react';\n\nconst GridLoadingOverlayComponentFr = (\n  props: { headerRowHeight: number },\n  externalRef: ForwardedRef<HTMLDivElement>,\n) => (\n  <div\n    ref={externalRef}\n    style={{\n      left: 0,\n      top: 0,\n      bottom: 0,\n      right: 0,\n      position: 'absolute',\n      backgroundColor: 'rgba(255,255,255,0.5)',\n    }}\n  >\n    <div style={{ height: '100%', position: 'relative' }}>\n      <div style={{ position: 'absolute', left: 0, top: props.headerRowHeight, right: 0, bottom: 0 }}>\n        <LuiStatusSpinner />\n      </div>\n    </div>\n  </div>\n);\n\nconst GridLoadingOverlayComponent = forwardRef(GridLoadingOverlayComponentFr);\n\nexport interface GridNoRowsOverlayProps {\n  loading: boolean;\n  rowCount: number | undefined | null;\n  filteredRowCount: number;\n  noRowsOverlayText: string | undefined;\n  noRowsMatchingOverlayText: string | undefined;\n  headerRowHeight: number;\n}\n\nexport const GridNoRowsOverlayFr = (props: GridNoRowsOverlayProps, externalRef: ForwardedRef<HTMLDivElement>) => {\n  if (props.loading) {\n    return <GridLoadingOverlayComponent ref={externalRef} headerRowHeight={props.headerRowHeight} />;\n  }\n  if (props.rowCount === 0) {\n    return (\n      <div ref={externalRef} className={'GridNoRowsOverlay'}>\n        <LuiIcon name=\"ic_info_outline\" alt=\"\" size=\"md\" />\n        {props.noRowsOverlayText ?? 'There are currently no rows'}\n      </div>\n    );\n  }\n  if (props.filteredRowCount === 0) {\n    return (\n      <div ref={externalRef} className={'GridNoRowsOverlay'}>\n        <LuiIcon name=\"ic_info_outline\" alt=\"\" size=\"md\" />\n        {props.noRowsMatchingOverlayText ?? 'All rows have been filtered'}\n      </div>\n    );\n  }\n  return <div ref={externalRef} />;\n};\n\nexport const GridNoRowsOverlay = forwardRef(GridNoRowsOverlayFr);\n","import { IRowNode } from 'ag-grid-community';\nimport { ColumnState } from 'ag-grid-community';\nimport { PostSortRowsParams } from 'ag-grid-community';\nimport { isEmpty } from 'lodash-es';\nimport { useCallback, useContext, useRef } from 'react';\n\nimport { GridContext } from '../contexts/GridContext';\n\ninterface PostSortRowsHookProps {\n  setStaleGrid: (stale: boolean) => void;\n}\n\n/**\n * Retains last sort order from via <AgGrid postRowSort>.\n * Then applies this sort until next sort column change.\n * Handles stale sort, when you edit a row but don't want to re-sort.\n */\nexport const usePostSortRowsHook = ({ setStaleGrid }: PostSortRowsHookProps) => {\n  const { redrawRows } = useContext(GridContext);\n\n  // On first run we need to init the first backed up sort order\n  const initialised = useRef(false);\n\n  // Used to detect sort order has changed since last run\n  const lastSortOrderHash = useRef<string>('');\n\n  // Used to detect if sort order was the same, has the direction changed\n  const previousRowSortIndexRef = useRef<Record<string, { index: number; hash: string } | undefined>>({});\n\n  // stale sort is when there's a sort and user edits a row\n  // this applies a class to the div wrapping the grid which in turn adds a * beside the sort arrow\n  const sortWasStale = useRef(false);\n\n  // Previous col sort is stored and reapplied if the sort direction changes on the same column and the sort was stale\n  // As a sort on a stale row should just resort, not change sort direction\n  const previousColSort = useRef<ColumnState[]>([]);\n\n  const previousQuickFilter = useRef('');\n\n  return useCallback(\n    ({ api, nodes }: PostSortRowsParams) => {\n      // Grid is destroyed\n      if (!api) return;\n\n      const previousRowSortIndex = previousRowSortIndexRef.current;\n\n      const hashNode = (node: IRowNode | undefined) => {\n        return node ? JSON.stringify(node.data) : '';\n      };\n\n      const copyCurrentSortSettings = (): ColumnState[] =>\n        api.getColumnState().map((row) => ({ colId: row.colId, sort: row.sort, sortIndex: row.sortIndex }));\n\n      const backupSortOrder = () => {\n        for (const x in previousRowSortIndex) delete previousRowSortIndex[x];\n        nodes.forEach((node, index) => (previousRowSortIndex[`${node.data.id}`] = { index, hash: hashNode(node) }));\n      };\n\n      // Check if column is the first sorted column.  Note: column is preconfigured to sort its sortIndex is null not 1\n      const isFirstSortColumn = (row: ColumnState) => row.sort && [0, null].includes(row.sortIndex ?? null);\n\n      const isSameColumnAndDifferentSort = (col1: ColumnState | undefined, col2: ColumnState | undefined) =>\n        col1 && col2 && col1.colId === col2.colId && col1.sort != col2.sort;\n\n      const restorePreviousSortColumnState = () => api.applyColumnState({ state: previousColSort.current });\n\n      const sortNodesByPreviousSort = () => {\n        nodes.sort(\n          (a, b) =>\n            (previousRowSortIndex[`${a.data.id}`]?.index ?? Number.MAX_SAFE_INTEGER) -\n            (previousRowSortIndex[`${b.data.id}`]?.index ?? Number.MAX_SAFE_INTEGER),\n        );\n      };\n\n      // On first load copy the current sort\n      if (!initialised.current) {\n        initialised.current = true;\n        previousColSort.current = copyCurrentSortSettings();\n      }\n\n      const newSortOrder = JSON.stringify(copyCurrentSortSettings());\n      let sortOrderChanged = newSortOrder != lastSortOrderHash.current;\n\n      const quickFilter = api.getQuickFilter();\n      if (previousQuickFilter.current != quickFilter) {\n        previousQuickFilter.current = quickFilter ?? '';\n        sortOrderChanged = true;\n      }\n\n      if (isEmpty(previousRowSortIndex)) {\n        backupSortOrder();\n      }\n\n      if (sortOrderChanged) {\n        const thisFirstCol = copyCurrentSortSettings().find(isFirstSortColumn);\n        const previousFirstCol = previousColSort.current.find(isFirstSortColumn);\n\n        // Change to sort can be: (in the context of stale sort do...)\n        // - no sort to sorted (do nothing)\n        // - asc to desc       (resort as asc, and remove stale sort)\n        // - desc to no sort   (resort as desc, and remove stale sort)\n        const wasSortChangedOnSameColumn =\n          previousFirstCol && (!thisFirstCol || isSameColumnAndDifferentSort(previousFirstCol, thisFirstCol));\n\n        // if sort was stale, and we're here, someone has clicked a stale sort order (^*) in the column header\n        if (sortWasStale.current && wasSortChangedOnSameColumn) {\n          // Sort was an existing priority 1 column\n          // We want to re-sort with the old sort direction and clear stale sort\n          sortWasStale.current = false;\n          setStaleGrid(false);\n\n          // trigger a recapture of sort order\n          lastSortOrderHash.current = '';\n          restorePreviousSortColumnState();\n        } else {\n          // Sort was on a different column so clear sort and sort like normal\n          if (sortWasStale.current) {\n            sortWasStale.current = false;\n            setStaleGrid(false);\n          }\n          // Columns were sorted so retain the sort\n          backupSortOrder();\n          lastSortOrderHash.current = newSortOrder;\n        }\n      } else {\n        let firstChangedNodeIndex = -1;\n        let lastNewNode: IRowNode | undefined = undefined;\n        let changedRowCount = 0;\n        let newRowCount = 0;\n        let index = 0;\n        for (const node of nodes) {\n          const psr = previousRowSortIndex[`${node.data.id}`];\n          if (psr) {\n            if (psr.hash != hashNode(node)) {\n              if (firstChangedNodeIndex === -1) firstChangedNodeIndex = index;\n              changedRowCount++;\n            }\n          } else {\n            lastNewNode = node;\n            newRowCount++;\n          }\n          index++;\n        }\n\n        let wasStale = false;\n        if (changedRowCount === 0 && newRowCount === 1) {\n          // insert new row at end\n          const newIndex = index - 1;\n          previousRowSortIndex[`${lastNewNode?.data.id}`] = { index: newIndex, hash: hashNode(lastNewNode) };\n          wasStale = true;\n        } else if (changedRowCount === 2 && newRowCount === 0) {\n          // This must be a swap rows (sometimes it's not, needs further attention)\n          backupSortOrder();\n          wasStale = false;\n        } else if (changedRowCount > 1 && newRowCount === 1) {\n          // This must be a insert so, insert new row near the row that changed\n          previousRowSortIndex[`${lastNewNode?.data.id}`] = {\n            index: firstChangedNodeIndex + 0.5,\n            hash: hashNode(lastNewNode),\n          };\n          wasStale = true;\n          // For some reason AgGrid mis-positions the inserted row.\n          lastNewNode && redrawRows();\n        } else if (changedRowCount == 1 && newRowCount === 0) {\n          // User edited one row so, do nothing, retain sort\n          wasStale = true;\n        } else if (changedRowCount !== 0 || newRowCount != 0) {\n          // too many rows changed, resort\n          backupSortOrder();\n        }\n\n        if (wasStale) {\n          // Check if the sort order the aggrid passed matches our stale sort order\n          const stillStale =\n            Object.keys(previousRowSortIndex).length != nodes.length ||\n            nodes.some((node, index) => previousRowSortIndex[`${node.data.id}`]?.index !== index);\n\n          // If we haven't already processed a stale sort then...\n          if (stillStale && !sortWasStale.current) {\n            // backup sort state, so we can restore it when sort is clicked on a stale column\n            previousColSort.current = copyCurrentSortSettings();\n            sortWasStale.current = true;\n            setStaleGrid(true);\n          }\n        }\n        sortNodesByPreviousSort();\n      }\n    },\n    [redrawRows, setStaleGrid],\n  );\n};\n","import {\n  AgGridEvent,\n  AllCommunityModule,\n  CellClassParams,\n  CellClickedEvent,\n  CellDoubleClickedEvent,\n  CellFocusedEvent,\n  CellKeyDownEvent,\n  ColDef,\n  ColGroupDef,\n  ColumnResizedEvent,\n  EditableCallback,\n  EditableCallbackParams,\n  GetRowIdParams,\n  GridOptions,\n  GridReadyEvent,\n  GridSizeChangedEvent,\n  ModelUpdatedEvent,\n  ModuleRegistry,\n  RowClickedEvent,\n  RowDoubleClickedEvent,\n  RowDragEndEvent,\n  RowDragMoveEvent,\n  SelectionChangedEvent,\n  SelectionColumnDef,\n  ValueFormatterParams,\n} from 'ag-grid-community';\nimport { AgGridReact } from 'ag-grid-react';\nimport clsx from 'clsx';\nimport { defer, delay, difference, isEmpty, last, omit, xorBy } from 'lodash-es';\nimport { ReactElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useInterval } from 'usehooks-ts';\n\nimport { AutoSizeColumnsResult, StartCellEditingProps, useGridContext } from '../contexts/GridContext';\nimport { GridUpdatingContext } from '../contexts/GridUpdatingContext';\nimport { compareNaturalInsensitive, fnOrVar, isNotEmpty } from '../utils/util';\nimport { clickInputWhenContainingCellClicked } from './clickInputWhenContainingCellClicked';\nimport { GridHeaderSelect } from './gridHeader';\nimport { GridContextMenuComponent, useGridContextMenu } from './gridHook';\nimport { GridNoRowsOverlay } from './GridNoRowsOverlay';\nimport { usePostSortRowsHook } from './PostSortRowsHook';\nimport { GridBaseRow, GridOnRowDragEndProps } from './types';\n\nModuleRegistry.registerModules([AllCommunityModule]);\n\nexport interface GridProps<TData extends GridBaseRow = GridBaseRow> {\n  readOnly?: boolean; // set all editables to false when read only, make all styles black, otherwise style is gray for not editable\n  defaultPostSort?: boolean; // Retain sort order after edit, Defaults to true.\n  selectable?: boolean;\n  enableClickSelection?: boolean;\n  enableSelectionWithoutKeys?: boolean;\n  hideSelectColumn?: boolean;\n  theme?: string; // should have prefix ag-theme-\n  ['data-testid']?: string;\n  domLayout?: GridOptions['domLayout'];\n  externalSelectedItems?: TData[];\n  externalSelectedIds?: TData['id'][];\n  setExternalSelectedItems?: (items: TData[]) => void;\n  setExternalSelectedIds?: (ids: TData['id'][]) => void;\n  defaultColDef?: GridOptions['defaultColDef'];\n  columnDefs: ColDef<TData>[] | ColGroupDef<TData>[];\n  rowData: GridOptions['rowData'];\n  selectColumnPinned?: ColDef['pinned'];\n  noRowsOverlayText?: string;\n  noRowsMatchingOverlayText?: string;\n  animateRows?: boolean;\n  rowHeight?: number;\n  rowClassRules?: GridOptions['rowClassRules'];\n  rowSelection?: 'single' | 'multiple';\n  autoSelectFirstRow?: boolean;\n  onCellFocused?: (props: { colDef: ColDef<TData>; data: TData }) => void;\n  onColumnMoved?: GridOptions['onColumnMoved'];\n  rowDragText?: GridOptions['rowDragText'];\n  onRowDragEnd?: (props: GridOnRowDragEndProps<TData>) => Promise<void> | void;\n  alwaysShowVerticalScroll?: boolean;\n  suppressColumnVirtualization?: GridOptions['suppressColumnVirtualisation'];\n  suppressReadOnlyStyle?: boolean;\n  /**\n   * When the grid is rendered using sizeColumns==\"auto\" this is called initially with the required container size to fit all content.\n   * This allows you set the size of the panel to fit perfectly.\n   */\n  onContentSize?: (props: { width: number }) => void;\n  /**\n   * <ul>\n   * <li>\"none\" to use aggrid defaults.</li>\n   * <li>\"fit\" will adjust columns to fit within panel via min/max/initial sizing.\n   * <b>Note:</b> This is only really needed if you have auto-height columns which prevents \"auto\" from working.\n   * </li>\n   * <li>\"auto\" will size columns based on their content but still obeying min/max sizing.</li>\n   * <li>\"auto-skip-headers\" (default) same as auto but does not take headers into account.</li>\n   * </ul>\n   *\n   * If you want to stretch to container width if width is greater than the container add a flex column.\n   */\n  sizeColumns?: 'fit' | 'auto' | 'auto-skip-headers' | 'none';\n  /**\n   * On first don't return a content size larger than this.\n   */\n  maxInitialWidth?: number;\n  /**\n   * When pressing tab whilst editing the grid will select and edit the next cell if available.\n   * Once the last cell to edit closes this callback is called.\n   */\n  onBulkEditingComplete?: () => Promise<void> | void;\n\n  /**\n   * Context menu definition if required.\n   */\n  contextMenu?: GridContextMenuComponent<TData>;\n\n  /**\n   * Whether to select row on context menu.\n   */\n  contextMenuSelectRow?: boolean;\n\n  /**\n   * Defaults to false.\n   */\n  singleClickEdit?: boolean;\n\n  loading?: boolean;\n  suppressCellFocus?: boolean;\n  pinnedTopRowData?: GridOptions['pinnedTopRowData'];\n  pinnedBottomRowData?: GridOptions['pinnedBottomRowData'];\n  onRowClicked?: (event: RowClickedEvent) => void;\n  onRowDoubleClicked?: (event: RowDoubleClickedEvent) => void;\n}\n\n/**\n * Wrapper for AgGrid to add commonly used functionality.\n */\nexport const Grid = <TData extends GridBaseRow = GridBaseRow>({\n  'data-testid': dataTestId,\n  defaultPostSort = true,\n  rowSelection = 'multiple',\n  suppressColumnVirtualization = true,\n  theme = 'ag-theme-step-default',\n  sizeColumns = 'auto',\n  selectColumnPinned = 'left',\n  contextMenuSelectRow = false,\n  singleClickEdit = false,\n  rowData,\n  rowHeight = theme === 'ag-theme-step-default' ? 40 : theme === 'ag-theme-step-compact' ? 36 : 40,\n  selectable,\n  autoSelectFirstRow,\n  onCellFocused: paramsOnCellFocused,\n  maxInitialWidth,\n  suppressReadOnlyStyle = false,\n  externalSelectedItems,\n  setExternalSelectedItems,\n  externalSelectedIds,\n  setExternalSelectedIds,\n  ...params\n}: GridProps<TData>): ReactElement => {\n  const {\n    gridReady,\n    gridRenderState,\n    setApis,\n    ensureRowVisible,\n    getFirstRowId,\n    selectRowsById,\n    focusByRowById,\n    ensureSelectedRowIsVisible,\n    autoSizeColumns,\n    sizeColumnsToFit,\n    externallySelectedItemsAreInSync,\n    setExternallySelectedItemsAreInSync,\n    isExternalFilterPresent,\n    doesExternalFilterPass,\n    setOnBulkEditingComplete,\n    getColDef,\n    showNoRowsOverlay,\n    prePopupOps,\n    startCellEditing: propStartCellEditing,\n  } = useGridContext<TData>();\n  // CellEditingStop event happens too much for one edit\n  const startedEditRef = useRef(false);\n  const startCellEditing = useCallback(\n    (props: StartCellEditingProps<TData>) => {\n      startedEditRef.current = true;\n      return propStartCellEditing(props);\n    },\n    [propStartCellEditing],\n  );\n\n  const { updatedDep, anyUpdating, updatingCols } = useContext(GridUpdatingContext);\n\n  const gridDivRef = useRef<HTMLDivElement>(null);\n  const lastSelectedIds = useRef<TData['id'][] | undefined>();\n\n  const [staleGrid, setStaleGrid] = useState(false);\n  const [autoSized, setAutoSized] = useState(false);\n\n  const postSortRows = usePostSortRowsHook({ setStaleGrid });\n\n  /**\n   * onContentSize should only be called at maximum twice.\n   * Once when an empty grid is loaded.\n   * And again when the grid has content.\n   */\n  const hasSetContentSize = useRef(false);\n  const hasSetContentSizeEmpty = useRef(false);\n  const needsAutoSize = useRef(true);\n\n  const autoSizeResultRef = useRef<AutoSizeColumnsResult | null>(null);\n  const prevRowsVisibleRef = useRef(false);\n  const initialContentSizeInProgressRef = useRef(false);\n  const setInitialContentSize = useCallback(async (): Promise<void> => {\n    if (initialContentSizeInProgressRef.current) {\n      return;\n    }\n    initialContentSizeInProgressRef.current = true;\n    try {\n      needsAutoSize.current = false;\n\n      if (!gridDivRef.current?.clientWidth || rowData == null) {\n        // Don't resize grids if they are offscreen as it doesn't work.\n        needsAutoSize.current = true;\n        return;\n      }\n\n      const gridRendered = gridRenderState();\n      if (gridRendered === null) {\n        // Don't resize until grid has rendered, or it has 0 rows.\n        needsAutoSize.current = true;\n        return;\n      }\n\n      // 1. First we autosize to get the size of the columns on an infinite grid.\n      if (sizeColumns === 'auto' || sizeColumns === 'auto-skip-headers') {\n        // You can't skip headers until the grid has content\n        const rowsVisible = gridRendered === 'rows-visible';\n        const skipHeader = sizeColumns === 'auto-skip-headers' && rowsVisible;\n        // If grid was empty and now has content we need to autosize\n        if (rowsVisible !== prevRowsVisibleRef.current && rowsVisible) {\n          prevRowsVisibleRef.current = rowsVisible;\n          autoSizeResultRef.current = null;\n        }\n        const autoSizeResult =\n          autoSizeResultRef.current ??\n          (await autoSizeColumns({\n            skipHeader,\n            userSizedColIds: new Set(userSizedColIds.current.keys()),\n          }));\n        // Auto-size failed retry later\n        if (!autoSizeResult) {\n          needsAutoSize.current = true;\n          return;\n        }\n\n        autoSizeResultRef.current = autoSizeResult;\n        // Calculate the auto-sized width, limit it to maxInitialWidth\n        autoSizeResult.width = maxInitialWidth ? Math.min(autoSizeResult.width, maxInitialWidth) : autoSizeResult.width;\n        if (gridRendered === 'empty') {\n          // If the grid is empty we still do an onContentSize callback, we will do another callback when grid has data\n          // We don't do this callback if we have previously had row data, or have already called back for empty\n          if (!hasSetContentSizeEmpty.current && !hasSetContentSize.current) {\n            hasSetContentSizeEmpty.current = true;\n            params.onContentSize?.(autoSizeResult);\n          }\n        } else if (gridRendered === 'rows-visible') {\n          // we have rows now so callback grid size\n          if (!hasSetContentSize.current) {\n            hasSetContentSize.current = true;\n            params.onContentSize?.(autoSizeResult);\n          }\n        } else {\n          // It should be impossible to get here\n          console.error('Unknown value returned from hasGridRendered');\n        }\n      } else {\n        sizeColumnsToFit();\n      }\n\n      setAutoSized(true);\n      needsAutoSize.current = false;\n    } finally {\n      initialContentSizeInProgressRef.current = false;\n    }\n  }, [autoSizeColumns, gridRenderState, maxInitialWidth, params, rowData, sizeColumns, sizeColumnsToFit]);\n\n  const lastOwnerDocumentRef = useRef<Document>();\n  const wasVisibleRef = useRef(false);\n\n  /**\n   * Auto-size windows that had deferred auto-size\n   * Reset focus if panel went from invisible to visible.\n   */\n  useInterval(() => {\n    // If grid has become visible after previously being hidden, then refocus the last focused cell.\n    const visible = !!gridDivRef.current?.checkVisibility?.();\n    if (visible && !wasVisibleRef.current) {\n      wasVisibleRef.current = true;\n      const el = (window as any).__stepaggrid_lastfocuseventtarget;\n      if (el) {\n        // Setting this to null will cause a new refocus event\n        (window as any).__stepaggrid_lastfocuseventtarget = null;\n        // Check element is still part of document\n        if (el.checkVisibility()) {\n          el.focus();\n        }\n      }\n    }\n    wasVisibleRef.current = visible;\n\n    // Check if window has been popped out and needs resize\n    const currentDocument = gridDivRef.current?.ownerDocument;\n    if (currentDocument !== lastOwnerDocumentRef.current) {\n      lastOwnerDocumentRef.current = currentDocument;\n      if (currentDocument) {\n        needsAutoSize.current = true;\n      }\n    }\n    if (\n      needsAutoSize.current ||\n      (!hasSetContentSize.current && (sizeColumns === 'auto' || sizeColumns === 'auto-skip-headers'))\n    ) {\n      void setInitialContentSize();\n    }\n  }, 200);\n\n  /**\n   * On data load select the first row of the grid if required.\n   */\n  const hasSelectedFirstItem = useRef(false);\n  useEffect(() => {\n    if (!gridReady || hasSelectedFirstItem.current || !rowData || !externallySelectedItemsAreInSync) {\n      return;\n    }\n    hasSelectedFirstItem.current = true;\n    if (isNotEmpty(rowData) && isEmpty(externalSelectedItems)) {\n      const firstRowId = getFirstRowId();\n      if (autoSelectFirstRow && selectable) {\n        selectRowsById([firstRowId]);\n      } else {\n        focusByRowById(firstRowId, true);\n      }\n    }\n  }, [\n    externallySelectedItemsAreInSync,\n    focusByRowById,\n    gridReady,\n    externalSelectedItems,\n    autoSelectFirstRow,\n    rowData,\n    selectRowsById,\n    getFirstRowId,\n    selectable,\n  ]);\n\n  /**\n   * Ensure external selected items list is in sync with panel.\n   */\n  const synchroniseExternalStateToGridSelection = useCallback(\n    ({ api }: SelectionChangedEvent) => {\n      if (externalSelectedIds && setExternalSelectedIds) {\n        const selectedRowsIds = api.getSelectedRows().map((row: TData) => row.id);\n\n        // We don't want to update selected Items if it hasn't changed to prevent excess renders\n        if (\n          externalSelectedIds.length !== selectedRowsIds.length ||\n          isNotEmpty(xorBy(selectedRowsIds, externalSelectedIds))\n        ) {\n          setExternallySelectedItemsAreInSync(false);\n          setExternalSelectedIds([...selectedRowsIds]);\n        } else {\n          setExternallySelectedItemsAreInSync(true);\n        }\n      } else if (externalSelectedItems && setExternalSelectedItems) {\n        const selectedRows = api.getSelectedRows();\n\n        // We don't want to update selected Items if it hasn't changed to prevent excess renders\n        if (\n          externalSelectedItems.length !== selectedRows.length ||\n          isNotEmpty(xorBy(selectedRows, externalSelectedItems, (row) => row.id))\n        ) {\n          setExternallySelectedItemsAreInSync(false);\n          setExternalSelectedItems([...selectedRows]);\n        } else {\n          setExternallySelectedItemsAreInSync(true);\n        }\n      } else {\n        setExternallySelectedItemsAreInSync(true);\n      }\n    },\n    [\n      externalSelectedIds,\n      externalSelectedItems,\n      setExternalSelectedIds,\n      setExternalSelectedItems,\n      setExternallySelectedItemsAreInSync,\n    ],\n  );\n\n  /**\n   * Synchronise externally selected items to grid.\n   * If new ids are selected scroll them into view.\n   */\n  const synchroniseExternallySelectedItemsToGrid = useCallback(() => {\n    if (!gridReady) return;\n    if (!externalSelectedItems && !externalSelectedIds) {\n      setExternallySelectedItemsAreInSync(true);\n      return;\n    }\n\n    const selectedIds = externalSelectedIds ?? externalSelectedItems?.map((row) => row.id);\n    const lastNewId = last(difference(selectedIds, lastSelectedIds.current ?? []));\n    if (lastNewId != null) {\n      ensureRowVisible(lastNewId);\n    }\n    lastSelectedIds.current = selectedIds;\n    selectRowsById(selectedIds);\n    setExternallySelectedItemsAreInSync(true);\n  }, [\n    gridReady,\n    externalSelectedItems,\n    externalSelectedIds,\n    selectRowsById,\n    setExternallySelectedItemsAreInSync,\n    ensureRowVisible,\n  ]);\n\n  /**\n   * Combine grid and cell editable into one function\n   */\n  const combineEditables =\n    (...editables: (boolean | EditableCallback | undefined)[]) =>\n    (params: EditableCallbackParams): boolean => {\n      const results = editables.map((editable) => fnOrVar(editable, params));\n      // If editable is not set anywhere then it's non-editable\n      if (results.every((v) => v == null)) return false;\n      // If any editable value is or returns false then it's non-editable\n      return !results.some((v) => v == false);\n    };\n\n  /**\n   * Synchronise externally selected items to grid on externalSelectedItems change\n   */\n  useEffect(synchroniseExternallySelectedItemsToGrid, [synchroniseExternallySelectedItemsToGrid]);\n\n  const mapColDef = useCallback(\n    (colDef: ColDef | ColGroupDef): ColDef | ColGroupDef => {\n      if ('children' in colDef) {\n        return {\n          ...colDef,\n          children: colDef.children.map(mapColDef),\n        };\n      } else {\n        const colDefEditable = colDef.editable;\n        const editable = combineEditables(\n          params.loading !== true && params.readOnly !== true,\n          params.defaultColDef?.editable,\n          colDefEditable,\n        );\n        return {\n          ...colDef,\n          editable,\n          cellClassRules: {\n            ...colDef.cellClassRules,\n            'GridCell-readonly': (ccp: CellClassParams<TData>) =>\n              !suppressReadOnlyStyle && !editable(ccp as unknown as EditableCallbackParams<TData>),\n          },\n        };\n      }\n    },\n    [params.defaultColDef?.editable, params.loading, params.readOnly, suppressReadOnlyStyle],\n  );\n\n  /**\n   * Add selectable column to colDefs.  Adjust column defs to block fit for auto sized columns.\n   */\n  const columnDefs = useMemo((): (ColDef | ColGroupDef)[] => {\n    return params.columnDefs.map(mapColDef);\n  }, [params.columnDefs, mapColDef]);\n\n  const hasExternallySelectedItems = !!setExternalSelectedItems || !!setExternalSelectedIds;\n\n  /**\n   * When grid is ready set the apis to the grid context and sync selected items to grid.\n   */\n  const onGridReady = useCallback(\n    (event: GridReadyEvent) => {\n      setApis(event.api, hasExternallySelectedItems, dataTestId);\n      event.api.showNoRowsOverlay();\n      synchroniseExternallySelectedItemsToGrid();\n    },\n    [dataTestId, hasExternallySelectedItems, setApis, synchroniseExternallySelectedItemsToGrid],\n  );\n\n  /**\n   * When the grid is being initialized the data may be empty.\n   * This will resize columns when we have at least one row.\n   */\n  const previousRowDataLength = useRef(0);\n\n  const onRowDataUpdated = useCallback(() => {\n    const length = rowData?.length ?? 0;\n    if (previousRowDataLength.current !== length) {\n      // We need to autosize all cells again\n      autoSizeResultRef.current = null;\n      previousRowDataLength.current = length;\n      void setInitialContentSize();\n      return;\n    }\n\n    if (lastUpdatedDep.current === updatedDep || isEmpty(colIdsEdited.current)) {\n      return;\n    }\n    lastUpdatedDep.current = updatedDep;\n\n    // Don't update while there are spinners\n    if (anyUpdating()) {\n      return;\n    }\n\n    const skipHeader = sizeColumns === 'auto-skip-headers';\n    if ((sizeColumns === 'auto' || sizeColumns === 'auto-skip-headers') && hasSetContentSize.current) {\n      void autoSizeColumns({\n        skipHeader,\n        userSizedColIds: new Set(userSizedColIds.current.keys()),\n        colIds: colIdsEdited.current,\n      });\n    }\n    colIdsEdited.current.clear();\n  }, [autoSizeColumns, rowData?.length, setInitialContentSize, sizeColumns, updatedDep, anyUpdating]);\n\n  /**\n   * Show/hide no rows overlay when model changes.\n   */\n  const onModelUpdated = useCallback((event: ModelUpdatedEvent) => {\n    event.api.showNoRowsOverlay();\n  }, []);\n\n  /**\n   * Handle double click edit\n   */\n  const onCellDoubleClick = useCallback(\n    (event: CellDoubleClickedEvent) => {\n      const editable = fnOrVar(event.colDef?.editable, event);\n      if (editable && !invokeEditAction(event)) {\n        void startCellEditing({ rowId: event.data.id, colId: event.column.getColId() });\n      }\n    },\n    [startCellEditing],\n  );\n\n  /**\n   * Handle single click edits\n   */\n  const onCellClicked = useCallback(\n    (event: CellClickedEvent) => {\n      const editable = fnOrVar(event.colDef?.editable, event);\n      if ((editable && event.colDef.singleClickEdit) ?? singleClickEdit) {\n        void startCellEditing({ rowId: event.data.id, colId: event.column.getColId() });\n      }\n    },\n    [singleClickEdit, startCellEditing],\n  );\n\n  const onCellEditingStopped = useCallback(\n    (event: AgGridEvent<TData>) => {\n      if (!startedEditRef.current) {\n        return;\n      }\n      startedEditRef.current = false;\n      const api = event.api;\n      // We need to redraw on fit as the updated row heights aren't visible\n      if (sizeColumns === 'fit') {\n        delay(() => {\n          // Don't update if currently editing, that will stop the edit\n          if (!anyUpdating() && document.querySelectorAll('.szh-menu--state-open').length === 0) {\n            if (!api.isDestroyed()) {\n              api.redrawRows();\n            }\n          }\n        }, 500);\n      }\n    },\n    [anyUpdating, sizeColumns],\n  );\n\n  /**\n   * If cell has an edit action invoke it (if editable)\n   */\n  const invokeEditAction = (e: CellDoubleClickedEvent | CellKeyDownEvent): boolean => {\n    const editAction = e.colDef?.cellRendererParams?.editAction;\n    if (!editAction) return false;\n    const editable = fnOrVar(e.colDef?.editable, e);\n    if (editable) {\n      if (!e.node.isSelected()) {\n        e.node.setSelected(true, true);\n      }\n      editAction([e.data, ...e.api.getSelectedRows().filter((row) => row.id !== e.data.id)]);\n    }\n    return true;\n  };\n\n  /**\n   * Start editing on pressing Enter\n   */\n  const onCellKeyPress = useCallback(\n    (e: CellKeyDownEvent) => {\n      const kbe = e.event as KeyboardEvent;\n      if (kbe.key === 'Enter') {\n        if (!invokeEditAction(e)) {\n          void startCellEditing({ rowId: e.data.id, colId: e.column.getColId() });\n        }\n      }\n      if (kbe.key === 'Tab') {\n        prePopupOps();\n      }\n    },\n    [prePopupOps, startCellEditing],\n  );\n\n  /**\n   * Once the grid has auto-sized we want to run fit to fit the grid in its container,\n   * but we don't want the non-flex auto-sized columns to \"fit\" size, so suppressSizeToFit is set to true.\n   */\n  const columnDefsAdjusted = useMemo(() => {\n    const adjustColDefOrGroup = (colDef: ColDef<TData> | ColGroupDef<TData>) =>\n      'children' in colDef ? adjustGroupColDef(colDef) : adjustColDef(colDef);\n\n    const adjustGroupColDef = (colDef: ColGroupDef<TData>): ColGroupDef<TData> => ({\n      ...colDef,\n      children: colDef.children.map((colDef) => adjustColDefOrGroup(colDef)),\n    });\n\n    const adjustColDef = (colDef: ColDef<TData>): ColDef<TData> => {\n      const flex = colDef.flex ?? (sizeColumns === 'fit' ? 1 : undefined);\n      const valueFormatter = colDef.valueFormatter;\n      const sortable = colDef.sortable && params.defaultColDef?.sortable !== false;\n      let comparator = colDef.comparator;\n      if (sortable && !comparator) {\n        comparator = (value1, value2, node1, node2) => {\n          let r;\n          if (typeof valueFormatter === 'function') {\n            r = compareNaturalInsensitive(\n              valueFormatter({\n                data: node1.data,\n                value: value1,\n                node: node1,\n                colDef: adjustedColDef,\n                ...NotAGridValueFormatterCall,\n              } as ValueFormatterParams<TData>),\n              valueFormatter({\n                data: node2.data,\n                value: value2,\n                node: node2,\n                colDef: adjustedColDef,\n                ...NotAGridValueFormatterCall,\n              } as ValueFormatterParams<TData>),\n            );\n          } else {\n            r = compareNaturalInsensitive(value1, value2);\n          }\n          // secondary compare as primary sort column rows are equal\n          return r === 0 ? compareNaturalInsensitive(node1.data?.id, node2.data?.id) : r;\n        };\n      }\n      const adjustedColDef = {\n        ...colDef,\n        // You cannot pass a width to a flex\n        width: !!colDef.flex ? undefined : colDef.width,\n        ...(!!colDef.flex && { flexAutoSizeWidth: colDef.width }),\n        // If this is allowed flex columns don't size based on flex\n        suppressSizeToFit: true,\n        // Auto-sizing flex columns breaks everything\n        flex,\n        suppressAutoSize: !!flex,\n        sortable,\n        comparator,\n      } as ColDef<TData> & { flexAutoSizeWidth?: number };\n\n      return adjustedColDef;\n    };\n\n    return columnDefs.map((colDef) => adjustColDefOrGroup(colDef));\n  }, [columnDefs, params.defaultColDef?.sortable, sizeColumns]);\n\n  /**\n   * Set of colIds that need auto-sizing.\n   */\n  const colIdsEdited = useRef(new Set<string>());\n  const lastUpdatedDep = useRef(updatedDep);\n\n  /**\n   * When cell editing has completed the colId as needing auto-sizing\n   */\n  useEffect(() => {\n    if (lastUpdatedDep.current === updatedDep) {\n      return;\n    }\n    lastUpdatedDep.current = updatedDep;\n    const colIds = updatingCols();\n    // Updating possibly completed\n    if (isEmpty(colIds)) {\n      // Columns to resize?\n      if (!isEmpty(colIdsEdited.current)) {\n        const skipHeader = sizeColumns === 'auto-skip-headers';\n        if (sizeColumns === 'auto' || skipHeader) {\n          defer(() => {\n            if (hasSetContentSize.current) {\n              void autoSizeColumns({\n                skipHeader,\n                userSizedColIds: new Set(userSizedColIds.current.keys()),\n                colIds: colIdsEdited.current,\n              });\n            }\n          });\n        }\n        colIdsEdited.current.clear();\n      }\n    } else {\n      // Updates not complete, add them to a list of columns needing resize\n      colIds.forEach((colId) => {\n        if (colId && !getColDef(colId)?.flex) {\n          colIdsEdited.current.add(colId);\n        }\n      });\n    }\n  }, [autoSizeColumns, getColDef, sizeColumns, updatedDep, updatingCols]);\n\n  const prevLoading = useRef(false);\n  useEffect(() => {\n    const newLoading = !rowData || params.loading === true;\n    if (newLoading && !prevLoading.current) {\n      showNoRowsOverlay();\n    }\n    prevLoading.current = newLoading;\n  }, [params.loading, rowData, showNoRowsOverlay]);\n\n  /**\n   * Set of column I'd's that are prevented from auto-sizing as they are user set\n   */\n  const userSizedColIds = useRef(new Map<string, number>());\n\n  /**\n   * Lock/unlock column width on user edit/reset.\n   */\n  const onColumnResized = useCallback((e: ColumnResizedEvent) => {\n    const colId = e.column?.getColId();\n    if (colId == null) {\n      return;\n    }\n    const width = e.column?.getActualWidth();\n    if (width == null) {\n      return;\n    }\n    switch (e.source) {\n      case 'uiColumnResized':\n        userSizedColIds.current.set(colId, width);\n        /*const colDef = e.column?.getColDef();\n          if (!colDef?.flex) {\n            onGridResize(e);\n          }*/\n        break;\n      case 'autosizeColumns':\n        userSizedColIds.current.delete(colId);\n        //onGridResize(e);\n        break;\n    }\n  }, []);\n\n  const gridContextMenu = useGridContextMenu({ contextMenu: params.contextMenu, contextMenuSelectRow });\n\n  const startDragYRef = useRef<number | null>(null);\n\n  const clearHighlightRowClasses = useCallback(() => {\n    document.querySelectorAll(`.ag-row-highlight-above`)?.forEach((el) => {\n      el.classList.remove('ag-row-highlight-above');\n    });\n    document.querySelectorAll(`.ag-row-highlight-below`)?.forEach((el) => {\n      el.classList.remove('ag-row-highlight-below');\n    });\n  }, []);\n\n  const gridElementRef = useRef<Element>();\n  const onRowDragMove = useCallback(\n    (event: RowDragMoveEvent) => {\n      if (startDragYRef.current === null) {\n        startDragYRef.current = event.y;\n      }\n\n      const yDiff = event.y - startDragYRef.current;\n      const data = event.overNode?.data;\n      if (data) {\n        clearHighlightRowClasses();\n        // Find the grid element, this can only be found on start drag.\n        // Once dragging is no progress the event target is the drag element not the start drag column.\n        const targetEl = event.event.target as Element | undefined;\n        if (targetEl) {\n          const gridElement = targetEl.closest('.ag-body');\n          if (gridElement) {\n            gridElementRef.current = gridElement;\n          }\n        }\n        gridElementRef.current?.querySelectorAll(`[row-id='${data.id}']`)?.forEach((el) => {\n          el.classList.add(yDiff < 0 ? 'ag-row-highlight-above' : 'ag-row-highlight-below');\n        });\n      }\n    },\n    [clearHighlightRowClasses],\n  );\n\n  const onCellFocused = useCallback(\n    (event: CellFocusedEvent<TData>) => {\n      if (event.rowIndex == null) {\n        return;\n      }\n      const api = event.api;\n      const rowNode = api.getDisplayedRowAtIndex(event.rowIndex);\n      const data = rowNode?.data;\n      const column = event.column;\n      if (!data || !column || typeof column === 'string') {\n        return;\n      }\n      const colDef = column.getColDef();\n      if (!colDef || typeof colDef === 'string') {\n        return;\n      }\n      // Prevent repeated callbacks to cell focus when focus didn't change\n      const { sourceEvent } = event;\n      if (sourceEvent) {\n        const cell = (sourceEvent.target as Element | undefined)?.closest?.('.ag-cell') ?? null;\n        if ((window as any).__stepaggrid_lastfocuseventtarget === cell) {\n          return;\n        }\n        (window as any).__stepaggrid_lastfocuseventtarget = cell;\n      }\n\n      paramsOnCellFocused?.({ colDef, data });\n    },\n    [paramsOnCellFocused],\n  );\n\n  const onRowDragEnd = useCallback(\n    (event: RowDragEndEvent<TData>) => {\n      clearHighlightRowClasses();\n      gridElementRef.current = undefined;\n      if (!params.onRowDragEnd || startDragYRef.current === null) {\n        return;\n      }\n      const yDiff = event.y - startDragYRef.current;\n      startDragYRef.current = null;\n      if (event.node.rowIndex != null) {\n        const movedRow = event.node.data;\n        const targetRow = event.overNode?.data;\n        if (!movedRow || !targetRow || movedRow === targetRow || yDiff === 0) {\n          return;\n        }\n        void params.onRowDragEnd({ movedRow, targetRow, direction: yDiff > 0 ? 1 : -1 });\n      }\n    },\n    [params, clearHighlightRowClasses],\n  );\n\n  useEffect(\n    () => {\n      if ((setExternalSelectedItems || setExternalSelectedIds) && selectable == null) {\n        console.warn(\n          '<Grid/> has setExternalSelectedItems/setExternalSelectedIds parameter, but is missing selectable parameter,' +\n            'this will cause weird delays in editing.\\nIf you need to hide selection column use hideSelectColumn=true',\n        );\n      }\n    },\n    // Only needs to run on startup\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [selectable],\n  );\n\n  // This is setting a ref in the GridContext so won't be triggering an update loop\n  setOnBulkEditingComplete(params.onBulkEditingComplete);\n\n  const getRowId = useCallback((params: GetRowIdParams<TData, unknown>) => `${params.data.id}`, []);\n  const defaultColDef = useMemo(\n    (): ColDef<TData, unknown> => ({\n      minWidth: 48,\n      ...omit(params.defaultColDef, ['editable', 'field', 'colId', 'tooltipField']),\n    }),\n    [params.defaultColDef],\n  );\n\n  const noRowsOverlayComponent = useCallback(\n    (event: AgGridEvent) => {\n      const headerRowCount = columnDefs.some((c) => (c as any).children) ? 2 : 1;\n\n      let rowCount = 0;\n      event.api.forEachNode(() => rowCount++);\n      return (\n        <GridNoRowsOverlay\n          loading={!rowData || params.loading === true}\n          rowCount={rowCount}\n          headerRowHeight={headerRowCount * rowHeight}\n          filteredRowCount={event.api.getDisplayedRowCount()}\n          noRowsOverlayText={params.noRowsOverlayText}\n          noRowsMatchingOverlayText={params.noRowsMatchingOverlayText}\n        />\n      );\n    },\n    [columnDefs, params.loading, params.noRowsMatchingOverlayText, params.noRowsOverlayText, rowData, rowHeight],\n  );\n\n  const selectionColumnDef = useMemo((): SelectionColumnDef | undefined => {\n    // Note this has to be 1 for hidden otherwise ag-grid does crazy things whilst resizing\n    const selectWidth = params.onRowDragEnd ? 76 : 48;\n    return {\n      suppressNavigable: params.hideSelectColumn,\n      rowDrag: !!params.onRowDragEnd,\n      minWidth: selectWidth,\n      maxWidth: selectWidth,\n      pinned: selectColumnPinned,\n      headerComponentParams: {\n        exportable: false,\n      },\n      suppressAutoSize: true,\n      suppressSizeToFit: true,\n      headerClass: clsx('ag-header-hide-default-select', params.onRowDragEnd && 'ag-header-select-draggable'),\n      headerComponent: rowSelection == 'multiple' ? GridHeaderSelect : undefined,\n      suppressHeaderKeyboardEvent: (e) => {\n        if (!selectable) return false;\n        if ((e.event.key === 'Enter' || e.event.key === ' ') && !e.event.repeat) {\n          if (isEmpty(e.api.getSelectedRows())) {\n            e.api.selectAll('filtered');\n          } else {\n            e.api.deselectAll();\n          }\n          return true;\n        }\n        return false;\n      },\n      onCellClicked: clickInputWhenContainingCellClicked,\n    };\n  }, [params.hideSelectColumn, params.onRowDragEnd, rowSelection, selectColumnPinned, selectable]);\n\n  const onGridSizeChanged = useCallback(\n    (event: GridSizeChangedEvent<TData>) => {\n      if (sizeColumns === 'fit' || (['auto', 'auto-skip-headers'].includes(sizeColumns) && hasSetContentSize.current)) {\n        event.api.sizeColumnsToFit();\n      }\n    },\n    [sizeColumns],\n  );\n\n  return (\n    <div\n      data-testid={dataTestId}\n      className={clsx(\n        'Grid-container',\n        theme,\n        'theme-specific',\n        staleGrid && 'Grid-sortIsStale',\n        gridReady && rowData && autoSized && 'Grid-ready',\n      )}\n    >\n      {gridContextMenu.component}\n      <div style={{ flex: 1 }} ref={gridDivRef}>\n        <AgGridReact\n          theme={'legacy'}\n          rowSelection={\n            selectable\n              ? {\n                  enableSelectionWithoutKeys: params.enableSelectionWithoutKeys ?? false,\n                  enableClickSelection: params.enableClickSelection ?? false,\n                  mode: rowSelection === 'single' ? 'singleRow' : 'multiRow',\n                  ...(params.hideSelectColumn && {\n                    checkboxes: false,\n                    headerCheckbox: false,\n                  }),\n                }\n              : undefined\n          }\n          selectionColumnDef={selectionColumnDef}\n          rowHeight={rowHeight}\n          animateRows={params.animateRows ?? false}\n          rowClassRules={params.rowClassRules}\n          getRowId={getRowId}\n          suppressColumnVirtualisation={suppressColumnVirtualization}\n          suppressClickEdit={true}\n          onGridSizeChanged={onGridSizeChanged}\n          onColumnVisible={() => void setInitialContentSize()}\n          onRowDataUpdated={onRowDataUpdated}\n          onCellFocused={onCellFocused}\n          onCellKeyDown={onCellKeyPress}\n          onCellClicked={onCellClicked}\n          onCellDoubleClicked={onCellDoubleClick}\n          onCellEditingStopped={onCellEditingStopped}\n          domLayout={params.domLayout}\n          onColumnResized={onColumnResized}\n          defaultColDef={defaultColDef}\n          columnDefs={columnDefsAdjusted}\n          rowData={rowData}\n          postSortRows={params.onRowDragEnd || !defaultPostSort ? undefined : postSortRows}\n          onModelUpdated={onModelUpdated}\n          onGridReady={onGridReady}\n          onSortChanged={ensureSelectedRowIsVisible}\n          quickFilterParser={quickFilterParser}\n          onSelectionChanged={synchroniseExternalStateToGridSelection}\n          onColumnMoved={params.onColumnMoved}\n          noRowsOverlayComponent={noRowsOverlayComponent}\n          alwaysShowVerticalScroll={params.alwaysShowVerticalScroll}\n          isExternalFilterPresent={isExternalFilterPresent}\n          doesExternalFilterPass={doesExternalFilterPass}\n          maintainColumnOrder={true}\n          preventDefaultOnContextMenu={true}\n          onCellContextMenu={gridContextMenu.cellContextMenu}\n          rowDragText={params.rowDragText}\n          onRowDragCancel={clearHighlightRowClasses}\n          onRowDragMove={onRowDragMove}\n          onRowDragEnd={onRowDragEnd}\n          suppressCellFocus={params.suppressCellFocus}\n          pinnedTopRowData={params.pinnedTopRowData}\n          pinnedBottomRowData={params.pinnedBottomRowData}\n          onRowClicked={params.onRowClicked}\n          onRowDoubleClicked={params.onRowDoubleClicked}\n          suppressStartEditOnTab={true}\n        />\n      </div>\n    </div>\n  );\n};\n\nconst quickFilterParser = (filterStr: string) => {\n  // filter is exact matches exactly groups separated by commas\n  return filterStr.split(',').map((str) => str.trim());\n};\n\n/**\n * Columns to indicate to user when they debug why things are broken in the default comparator if their valueFormatter\n * is too complicated.\n */\nconst NotAGridValueFormatterCall = {\n  column: 'Default comparator has no access to column, write your own comparator' as unknown,\n  api: 'Default comparator has no access to api, write your own comparator' as unknown,\n  context: 'Default comparator has no access to context, write your own comparator' as unknown,\n};\n","import { createContext, RefObject, useContext } from 'react';\n\nimport { GridBaseRow } from '../components/types';\n\nexport interface GridPopoverContextType<TData extends GridBaseRow> {\n  anchorRef: RefObject<Element>;\n  saving: boolean;\n  setSaving: (saving: boolean) => void;\n  stopEditing: () => void;\n  colId: string;\n  field: keyof TData;\n  value: any;\n  data: TData;\n  selectedRows: TData[];\n  updateValue: (\n    saveFn: (selectedRows: any[]) => Promise<boolean>,\n    tabDirection: 1 | 0 | -1,\n  ) => Promise<boolean> | boolean;\n  formatValue: (value: any) => any;\n}\n\nexport const GridPopoverContext = createContext<GridPopoverContextType<any>>({\n  anchorRef: { current: null },\n  saving: false,\n  setSaving: () => {},\n  stopEditing: () => {},\n  colId: '',\n  field: '',\n  value: null,\n  data: {} as GridBaseRow,\n  selectedRows: [],\n  updateValue: () => false,\n  formatValue: () => '! No gridPopoverContextProvider !',\n});\n\nexport const useGridPopoverContext = <TData extends GridBaseRow>() =>\n  useContext<GridPopoverContextType<TData>>(GridPopoverContext);\n","import { ICellEditorParams } from 'ag-grid-community';\nimport { sortBy } from 'lodash-es';\nimport { PropsWithChildren, RefObject, useCallback, useContext, useMemo, useRef, useState } from 'react';\n\nimport { GridBaseRow } from '../components/types';\nimport { GridContext } from './GridContext';\nimport { GridPopoverContext } from './GridPopoverContext';\n\ninterface GridPopoverContextProps {\n  props: ICellEditorParams<any, any, any>;\n}\n\nexport const GridPopoverContextProvider = (props2: PropsWithChildren<GridPopoverContextProps>) => {\n  const { getFilteredSelectedRows, updatingCells } = useContext(GridContext);\n  const children = props2.children;\n  const props = props2.props;\n  const anchorRef = useRef<Element>(props.eGridCell);\n\n  const hasSaved = useRef(false);\n  const [saving, setSaving] = useState(false);\n\n  const { colDef, stopEditing, formatValue, data, value } = props;\n  const { cellEditorParams } = colDef;\n  const multiEdit = cellEditorParams?.multiEdit ?? false;\n  // Then item that is clicked on will always be first in the list\n  const selectedRows = useMemo(\n    () =>\n      multiEdit ? sortBy(getFilteredSelectedRows(), (row) => row.id !== props.data.id) : [props.data as GridBaseRow],\n    [getFilteredSelectedRows, multiEdit, props.data],\n  );\n\n  const field = props.colDef?.field ?? '';\n  const colId = props.colDef?.colId ?? field ?? '';\n\n  const updateValue = useCallback(\n    async (saveFn: (selectedRows: any[]) => Promise<boolean>, tabDirection: 1 | 0 | -1): Promise<boolean> => {\n      if (hasSaved.current) {\n        // already called save so ignore\n        return true;\n      }\n      hasSaved.current = true;\n      return saving ? false : await updatingCells({ selectedRows, field }, saveFn, setSaving, tabDirection);\n    },\n    [field, saving, selectedRows, updatingCells],\n  );\n\n  return (\n    <GridPopoverContext.Provider\n      value={{\n        anchorRef: anchorRef as any as RefObject<Element>,\n        saving,\n        setSaving,\n        selectedRows,\n        colId,\n        field,\n        data,\n        value,\n        updateValue,\n        formatValue,\n        stopEditing,\n      }}\n    >\n      {children}\n    </GridPopoverContext.Provider>\n  );\n};\n","import { CellClassParams, CellClassRules } from 'ag-grid-community';\nimport { ICellEditorParams } from 'ag-grid-community';\n\nexport const GridCellMultiSelectClassRules: CellClassRules = {\n  'ag-selected-for-edit': (params: CellClassParams) => {\n    const { api, node, colDef } = params;\n    const cep = colDef.cellEditorSelector\n      ? colDef.cellEditorSelector(params as ICellEditorParams)?.params\n      : colDef.cellEditorParams;\n\n    return (\n      cep?.multiEdit &&\n      api\n        .getSelectedNodes()\n        ?.map((row) => row.id)\n        ?.includes(node.id) &&\n      api.getEditingCells().some((cell) => cell.colId === colDef.colId)\n    );\n  },\n};\n","import { LuiIcon } from '@linzjs/lui';\nimport { IconName, IconSize } from '@linzjs/lui/dist/components/LuiIcon/LuiIcon';\nimport clsx from 'clsx';\nimport { ReactElement } from 'react';\n\nexport const GridIcon = (props: {\n  icon: IconName;\n  title: string;\n  size?: IconSize;\n  disabled?: boolean;\n  className?: string;\n}): ReactElement => (\n  <LuiIcon\n    name={props.icon}\n    title={props.title}\n    alt={props.title}\n    size={props.size ?? 'md'}\n    className={clsx(\n      `step-ag-grid__alert-icon`,\n      `AgGridGenericCellRenderer-${props.icon}Icon`,\n      props.className,\n      props.disabled && 'GridIcon-disabled',\n    )}\n  />\n);\n","import { LuiMiniSpinner } from '@linzjs/lui';\n\nexport const GridLoadableCell = () => (\n  <LuiMiniSpinner\n    size={22}\n    divProps={{ className: 'GridLoadableCell-container', role: 'status', 'aria-label': 'Loading' }}\n  />\n);\n","import {\n  ColDef,\n  GetQuickFilterTextParams,\n  ICellEditorParams,\n  ICellRendererParams,\n  SuppressKeyboardEventParams,\n  ValueFormatterFunc,\n  ValueFormatterParams,\n} from 'ag-grid-community';\nimport { forwardRef, ReactElement, useContext } from 'react';\n\nimport { GridPopoverContextProvider } from '../contexts/GridPopoverContextProvider';\nimport { GridUpdatingContext } from '../contexts/GridUpdatingContext';\nimport { fnOrVar } from '../utils/util';\nimport { GridCellMultiSelectClassRules } from './GridCellMultiSelectClassRules';\nimport { GridIcon } from './GridIcon';\nimport { GridLoadableCell } from './GridLoadableCell';\nimport { GenericCellColDef, GenericCellRendererParams } from './gridRender';\nimport { ColDefT, GridBaseRow } from './types';\n\nexport interface GenericCellEditorProps<E> {\n  multiEdit?: boolean;\n  editor?: (editorProps: E) => ReactElement;\n  editorParams?: E;\n}\n\nexport const GridCellRenderer = (props: ICellRendererParams) => {\n  const { checkUpdating } = useContext(GridUpdatingContext);\n  const colDef = props.colDef as ColDef;\n\n  const rendererParams = colDef.cellRendererParams as GenericCellRendererParams<any> | undefined;\n  const errorFn = rendererParams?.error;\n  let errorText = props.data !== undefined && errorFn ? errorFn(props) : undefined;\n  const warningFn = rendererParams?.warning;\n  let warningText = props.data !== undefined && warningFn ? warningFn(props) : undefined;\n  const infoFn = rendererParams?.info;\n  let infoText = props.data !== undefined && infoFn ? infoFn(props) : undefined;\n  if (Array.isArray(errorText)) {\n    errorText = errorText.join('\\n');\n  }\n  if (Array.isArray(warningText)) {\n    warningText = warningText.join('\\n');\n  }\n  if (Array.isArray(infoText)) {\n    infoText = infoText.join('\\n');\n  }\n\n  return checkUpdating(colDef.field ?? colDef.colId ?? '', props.data.id) ? (\n    <GridLoadableCell />\n  ) : (\n    <>\n      {!!errorText && (\n        <GridIcon icon={'ic_error_outline'} title={typeof errorText === 'string' ? errorText : 'Error'} />\n      )}\n      {!!warningText && (\n        <GridIcon icon={'ic_warning_outline'} title={typeof warningText === 'string' ? warningText : 'Warning'} />\n      )}\n      {!!infoText && <GridIcon icon={'ic_info_outline'} title={typeof infoText === 'string' ? infoText : 'Info'} />}\n      <div className={'GridCell-container'}>\n        {colDef.cellRendererParams?.originalCellRenderer ? (\n          <colDef.cellRendererParams.originalCellRenderer {...props} />\n        ) : (\n          <span title={props.valueFormatted ?? undefined}>{props.valueFormatted || '–'}</span>\n        )}\n      </div>\n      {fnOrVar(colDef.editable, props) && rendererParams?.rightHoverElement && (\n        <div className={'GridCell-hoverRight'}>{rendererParams?.rightHoverElement}</div>\n      )}\n    </>\n  );\n};\n\nexport const suppressCellKeyboardEvents = (e: SuppressKeyboardEventParams) => {\n  const shortcutKeys = e.colDef.cellRendererParams?.shortcutKeys ?? {};\n  const exec = shortcutKeys[e.event.key];\n  if (exec && !e.editing && !e.event.repeat && e.event.type === 'keydown') {\n    const editable = fnOrVar(e.colDef?.editable, e);\n    return editable ? (exec(e) ?? true) : true;\n  }\n  // It's important that aggrid doesn't trigger edit on enter\n  // as the incorrect selected rows will be returned\n  return !['ArrowLeft', 'ArrowRight', 'ArrowDown', 'ArrowUp', 'Tab', ' ', 'Home', 'End', 'PageUp', 'PageDown'].includes(\n    e.event.key,\n  );\n};\n\nexport const generateFilterGetter = <TData extends GridBaseRow, ValueType>(\n  valueFormatter: string | ValueFormatterFunc<TData, ValueType> | undefined,\n): string | ((params: GetQuickFilterTextParams<TData, ValueType>) => string) | undefined => {\n  // aggrid will default to valueGetter\n  if (typeof valueFormatter !== 'function') {\n    return undefined;\n  }\n\n  return (params: GetQuickFilterTextParams<TData, ValueType>) => valueFormatter(params);\n};\n\nconst stringableValueFormatterTypes = ['number', 'boolean', 'string'];\nexport const defaultValueFormatter = ({ value }: ValueFormatterParams) => {\n  if (value == null) {\n    return '–';\n  }\n  return stringableValueFormatterTypes.includes(typeof value) //\n    ? String(value)\n    : JSON.stringify(value);\n};\n\n// ag-grid doesn't understand the custom editor, when it stops editing it thinks\n// that _it_ was editing and overwrites the user updated data\n// _but_, it only does this if the initial value of the cell was null!?\nconst blockValueSetter = () => true;\n\n/*\n * All cells should use this.\n */\nexport const GridCell = <TData extends GridBaseRow, TValue = any, Props extends CellEditorCommon = any>(\n  props: GenericCellColDef<TData, TValue>,\n  custom?: {\n    multiEdit?: boolean;\n    preventAutoEdit?: boolean;\n    editor?: (editorProps: Props) => ReactElement;\n    editorParams?: Props;\n  },\n): ColDefT<TData, TValue> => {\n  // Generate a default filter value getter which uses the formatted value plus\n  // the editable value if it's a string and different from the formatted value.\n  // This is so that e.g. bearings can be searched for by DMS or raw number.\n  const valueFormatter = props.valueFormatter ?? defaultValueFormatter;\n  const filterValueGetter = props.filterValueGetter ?? generateFilterGetter(valueFormatter as any);\n  const exportable = props.exportable;\n  // Can't leave this here ag-grid will complain\n  delete props.exportable;\n\n  return {\n    // Will be overridden if specified later\n    colId: props.field,\n    headerTooltip: props.headerName,\n    sortable: true,\n    resizable: true,\n    valueSetter: custom?.editor ? blockValueSetter : undefined,\n    editable: props.editable ?? !!custom?.editor,\n    ...(custom?.editor && {\n      cellClassRules: GridCellMultiSelectClassRules,\n      cellEditor: GenericCellEditorComponentWrapper(custom?.editor),\n    }),\n    suppressKeyboardEvent: suppressCellKeyboardEvents,\n    ...(custom?.editorParams\n      ? {\n          cellEditorParams: {\n            ...custom.editorParams,\n            multiEdit: custom.multiEdit,\n            preventAutoEdit: custom.preventAutoEdit ?? !custom?.editor,\n          },\n        }\n      : { cellEditorParams: { preventAutoEdit: !custom?.editor } }),\n    // If there's a valueFormatter and no filterValueGetter then create a filterValueGetter\n    getQuickFilterText: filterValueGetter as any,\n    // Default value formatter, otherwise react freaks out on objects\n    valueFormatter,\n    ...props,\n    cellRenderer: typeof props.cellRenderer === 'string' ? props.cellRenderer : GridCellRenderer,\n    cellRendererParams: {\n      originalCellRenderer: props.cellRenderer,\n      ...props.cellRendererParams,\n    },\n    headerComponentParams: {\n      exportable,\n      ...props.headerComponentParams,\n    },\n  };\n};\n\nexport interface CellEditorCommon {\n  className?: string | undefined;\n}\n\nexport const GenericCellEditorComponentWrapper = (editor?: (props: any) => ReactElement) => {\n  const obj = { editor };\n  return forwardRef(function GenericCellEditorComponentFr(cellEditorParams: ICellEditorParams, _) {\n    const valueFormatted = cellEditorParams.formatValue\n      ? cellEditorParams.formatValue(cellEditorParams.value)\n      : 'Missing formatter';\n    return (\n      <GridPopoverContextProvider props={cellEditorParams}>\n        <>\n          {\n            <cellEditorParams.colDef.cellRenderer\n              {...cellEditorParams}\n              valueFormatted={valueFormatted}\n              {...cellEditorParams.colDef.cellRendererParams}\n            />\n          }\n          {obj.editor && <obj.editor {...cellEditorParams} />}\n        </>\n      </GridPopoverContextProvider>\n    );\n  });\n};\n","import { ColDef } from 'ag-grid-community';\n\nimport { GridBaseRow } from './types';\n\nexport const GridCellFillerColId = 'gridCellFiller';\n\nexport const isGridCellFiller = (col: ColDef) => col.colId === GridCellFillerColId;\n\nexport const GridCellFiller = <TData extends GridBaseRow>(): ColDef<TData, any> => ({\n  colId: GridCellFillerColId,\n  headerName: '',\n  flex: 1,\n  editable: false,\n});\n","import { CellEditorSelectorResult } from 'ag-grid-community';\nimport { ICellEditorParams } from 'ag-grid-community';\nimport { ComponentProps, ReactElement } from 'react';\n\nimport { GenericCellEditorComponentWrapper, GridCell } from './GridCell';\nimport { GridCellMultiSelectClassRules } from './GridCellMultiSelectClassRules';\nimport { GenericCellColDef } from './gridRender';\nimport { ColDefT, GridBaseRow } from './types';\n\nexport const Editor = <FN extends (param: any) => ReactElement>(props: {\n  multiEdit: boolean;\n  editor: FN;\n  editorParams: ComponentProps<FN>;\n}): CellEditorSelectorResult => ({\n  component: GenericCellEditorComponentWrapper(props.editor),\n  params: { ...props.editorParams, multiEdit: props.multiEdit },\n});\n\nexport interface RowCellEditorParams<TData extends GridBaseRow> extends ICellEditorParams {\n  data: TData;\n}\n\n/**\n * Used to choose between cell editors based in data.\n */\nexport const GridCellMultiEditor = <TData extends GridBaseRow, TValue = any>(\n  props: GenericCellColDef<TData, TValue>,\n  cellEditorSelector: (params: RowCellEditorParams<TData>) => CellEditorSelectorResult,\n): ColDefT<TData, TValue> =>\n  GridCell<TData, TValue>({\n    cellClassRules: GridCellMultiSelectClassRules,\n    cellEditorSelector,\n    editable: props.editable ?? true,\n    ...props,\n  });\n","import { useEffect } from 'react';\n\nimport { GridFilterExternal, useGridContext } from '../../contexts/GridContext';\nimport { GridBaseRow } from '../types';\n\nexport const useGridFilter = <TData extends GridBaseRow>(filter: GridFilterExternal<TData> | undefined) => {\n  const { addExternalFilter, removeExternalFilter } = useGridContext<TData>();\n\n  useEffect(() => {\n    const thisFilter = filter;\n    thisFilter && addExternalFilter(thisFilter);\n    return () => {\n      thisFilter && removeExternalFilter(thisFilter);\n    };\n  }, [addExternalFilter, filter, removeExternalFilter]);\n};\n","import { LuiButton, LuiButtonGroup } from '@linzjs/lui';\nimport { LuiButtonProps } from '@linzjs/lui/dist/components/LuiButton/LuiButton';\nimport clsx, { ClassValue } from 'clsx';\nimport { ReactElement, useMemo, useState } from 'react';\n\nimport { GridFilterExternal } from '../../contexts/GridContext';\nimport { GridBaseRow } from '../types';\nimport { useGridFilter } from './useGridFilter';\n\nexport interface GridFilterButtonsOption<TData extends GridBaseRow> {\n  defaultSelected?: boolean;\n  filter?: GridFilterExternal<TData>;\n  label: string;\n}\n\nexport type GridFilterButtonsProps<TData extends GridBaseRow> = {\n  className?: ClassValue;\n  luiButtonProps?: Partial<LuiButtonProps>;\n  options: GridFilterButtonsOption<TData>[];\n};\n\nexport const GridFilterButtons = <TData extends GridBaseRow>({\n  className,\n  luiButtonProps,\n  options,\n}: GridFilterButtonsProps<TData>): ReactElement => {\n  // Select defaultSelected option, otherwise first option.  If no options select none.\n  const [selectedOption, setSelectedOption] = useState(options.find((option) => option.defaultSelected) ?? options[0]);\n\n  const filter = useMemo(() => selectedOption?.filter, [selectedOption]);\n  useGridFilter(filter);\n\n  return (\n    <div className={clsx(className, 'flex-col-center')}>\n      <LuiButtonGroup>\n        {options.map((option, index) => (\n          <LuiButton\n            key={`${index}`}\n            {...luiButtonProps}\n            className={clsx(\n              `lui-button lui-button-secondary`,\n              selectedOption?.label === option.label && `lui-button-active`,\n              luiButtonProps?.className,\n            )}\n            onClick={() => setSelectedOption(option)}\n          >\n            {option.label}\n          </LuiButton>\n        ))}\n      </LuiButtonGroup>\n    </div>\n  );\n};\n","function styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nexport default styleInject;\n","import './GridFilterColumnsMultiSelect.scss';\n\nimport { LuiCheckboxInput } from '@linzjs/lui';\nimport type { IDoesFilterPassParams, IFilterComp, IFilterParams } from 'ag-grid-community';\nimport React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\n\nexport interface CheckboxMultiFilterParams extends IFilterParams {\n  labels?: Record<string, string>;\n  labelFormatter?: (value: string) => string;\n}\n\nexport interface CheckboxMultiFilterModel {\n  values: string[];\n}\n\ninterface FilterUIProps {\n  allValues: string[];\n  selected: Set<string>;\n  labels: Record<string, string>;\n  labelFormatter?: (value: string) => string;\n  onToggleAll: (checked: boolean) => void;\n  onToggleOne: (value: string, checked: boolean) => void;\n}\n\nconst EMPTY_KEY = '__EMPTY__';\nconst DEFAULT_EMPTY_LABEL = '-';\n\nconst FilterUI: React.FC<FilterUIProps> = ({\n  allValues,\n  selected,\n  labels,\n  labelFormatter,\n  onToggleAll,\n  onToggleOne,\n}) => {\n  const allChecked = allValues.length > 0 && selected.size === allValues.length;\n\n  const getDisplayLabel = (raw: string): string => {\n    const base = raw === EMPTY_KEY ? (labels[EMPTY_KEY] ?? DEFAULT_EMPTY_LABEL) : (labels[raw] ?? raw);\n    return labelFormatter ? labelFormatter(base) : base;\n  };\n\n  return (\n    <div className=\"GridFilterColsMultiSelect\">\n      <span className=\"LuiSelect-label-text\">Filter column</span>\n\n      <LuiCheckboxInput\n        className=\"LuiCheckboxInput-selectAll\"\n        label={'Select All'}\n        value=\"true\"\n        isChecked={allChecked}\n        onChange={(e) => onToggleAll(e.target.checked)}\n      />\n      {allValues.map((val) => (\n        <LuiCheckboxInput\n          key={val}\n          className=\"LuiCheckboxInput-item\"\n          label={getDisplayLabel(val)}\n          value={val}\n          isChecked={selected.has(val)}\n          onChange={(e) => onToggleOne(val, e.target.checked)}\n        />\n      ))}\n    </div>\n  );\n};\n\nexport class GridFilterColumnsMultiSelect implements IFilterComp {\n  private params!: CheckboxMultiFilterParams;\n  private selectedValues = new Set<string>();\n  private labels: Record<string, string> = {};\n  private allValues: string[] = [];\n  private gui!: HTMLElement;\n  private labelFormatter?: (value: string) => string;\n  private reactRoot: Root | null = null;\n\n  private normalizeCellValue(value: unknown): string {\n    if (typeof value === 'string') return value.trim() === '' ? EMPTY_KEY : value;\n    return EMPTY_KEY;\n  }\n\n  private loadFieldValues(): string[] {\n    const field = this.params.colDef.field as string;\n    const values = new Set<string>();\n\n    this.params.api.forEachNode((node) => {\n      const data = node.data ?? {};\n      const raw = (data as Record<string, unknown>)[field];\n      const norm = this.normalizeCellValue(raw);\n      values.add(norm);\n    });\n\n    return Array.from(values).sort((a, b) => {\n      if (a === EMPTY_KEY && b !== EMPTY_KEY) return -1;\n      if (b === EMPTY_KEY && a !== EMPTY_KEY) return 1;\n      return a.localeCompare(b);\n    });\n  }\n\n  init(params: CheckboxMultiFilterParams): void {\n    this.params = params;\n    this.labels = { ...params.labels };\n    this.labelFormatter = params.labelFormatter;\n\n    if (!(EMPTY_KEY in this.labels)) {\n      this.labels[EMPTY_KEY] = DEFAULT_EMPTY_LABEL;\n    }\n\n    this.allValues = this.loadFieldValues();\n    this.selectedValues = new Set(this.allValues);\n\n    this.gui = document.createElement('div');\n    this.reactRoot = createRoot(this.gui);\n    this.render();\n  }\n\n  private render(): void {\n    if (!this.reactRoot) return;\n\n    this.reactRoot.render(\n      <FilterUI\n        allValues={this.allValues}\n        selected={this.selectedValues}\n        labels={this.labels}\n        labelFormatter={this.labelFormatter}\n        onToggleAll={this.handleToggleAll.bind(this)}\n        onToggleOne={this.handleToggleOne.bind(this)}\n      />,\n    );\n  }\n\n  private handleToggleAll(checked: boolean): void {\n    if (checked) {\n      this.allValues.forEach((val) => this.selectedValues.add(val));\n    } else {\n      this.selectedValues.clear();\n    }\n    this.render();\n    this.params.filterChangedCallback();\n  }\n\n  private handleToggleOne(value: string, checked: boolean): void {\n    if (checked) {\n      this.selectedValues.add(value);\n    } else {\n      this.selectedValues.delete(value);\n    }\n    this.render();\n    this.params.filterChangedCallback();\n  }\n\n  getGui(): HTMLElement {\n    return this.gui;\n  }\n\n  isFilterActive(): boolean {\n    return this.selectedValues.size > 0;\n  }\n\n  doesFilterPass(p: IDoesFilterPassParams): boolean {\n    const field = this.params.colDef.field as string;\n    if (!p.data || typeof p.data !== 'object') {\n      return this.selectedValues.has(EMPTY_KEY);\n    }\n\n    const raw = (p.data as Record<string, unknown>)[field];\n    const norm = this.normalizeCellValue(raw);\n    return this.selectedValues.has(norm);\n  }\n\n  getModel(): CheckboxMultiFilterModel | null {\n    return this.selectedValues.size > 0 ? { values: Array.from(this.selectedValues) } : null;\n  }\n\n  setModel(model: CheckboxMultiFilterModel | null): void {\n    this.selectedValues = new Set(model?.values || []);\n    this.render();\n  }\n\n  destroy(): void {\n    if (this.reactRoot) {\n      this.reactRoot.unmount();\n      this.reactRoot = null;\n    }\n  }\n}\n\nexport const createCheckboxMultiFilterParams = (\n  labels: Record<string, string> = {},\n  labelFormatter?: (value: string) => string,\n): Partial<CheckboxMultiFilterParams> => ({\n  labels: { [EMPTY_KEY]: DEFAULT_EMPTY_LABEL, ...labels },\n  labelFormatter,\n});\n","import { LuiButton, LuiIcon } from '@linzjs/lui';\nimport { IconName, IconSize } from '@linzjs/lui/dist/components/LuiIcon/LuiIcon';\nimport { ButtonHTMLAttributes, forwardRef, MouseEvent } from 'react';\n\nexport interface GridFilterHeaderIconButtonProps {\n  icon: IconName;\n  onClick?: (e: MouseEvent) => void;\n  buttonProps?: Partial<ButtonHTMLAttributes<HTMLButtonElement>>;\n  disabled?: boolean;\n  size?: IconSize;\n  title: string;\n}\n\nexport const GridFilterHeaderIconButton = forwardRef<HTMLButtonElement, GridFilterHeaderIconButtonProps>(\n  function columnsButton({ icon, title, onClick, buttonProps, disabled = false, size = 'md' }, ref) {\n    return (\n      <LuiButton\n        {...buttonProps}\n        type={'button'}\n        level={'tertiary'}\n        className={'lui-button-icon-only'}\n        ref={ref}\n        buttonProps={{ 'aria-label': title }}\n        title={title}\n        onClick={onClick}\n        disabled={disabled}\n      >\n        <LuiIcon name={icon} alt={'Menu'} size={size} />\n      </LuiButton>\n    );\n  },\n);\n","import { LuiCheckboxInput, LuiIcon } from '@linzjs/lui';\nimport { ColDef } from 'ag-grid-community';\nimport { isEmpty } from 'lodash-es';\nimport { ReactElement, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { GridContext } from '../../contexts/GridContext';\nimport { Menu, MenuDivider, MenuItem } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { GridFilterHeaderIconButton } from './GridFilterHeaderIconButton';\n\nexport interface GridFilterColumnsToggleProps {\n  saveState?: boolean;\n}\n\nexport const GridFilterColumnsToggle = ({ saveState = true }: GridFilterColumnsToggleProps): ReactElement => {\n  const [loaded, setLoaded] = useState(false);\n  const { getColumns, getColumnIds, invisibleColumnIds, setInvisibleColumnIds } = useContext(GridContext);\n\n  const columnStorageKey = useMemo(\n    () =>\n      isEmpty(getColumnIds())\n        ? null // Grid hasn't been initialised yet\n        : 'stepAgGrid_invisibleColumnIds_' + getColumnIds().join('_'),\n    [getColumnIds],\n  );\n\n  // infer the invisible ids from colDefs\n  const resetColumns = useCallback(\n    () => setInvisibleColumnIds(getColumnIds('initialHide')),\n    [getColumnIds, setInvisibleColumnIds],\n  );\n\n  // Load state on start\n  useEffect(() => {\n    if (!columnStorageKey || loaded) return;\n    if (saveState) {\n      try {\n        const stored = window.localStorage.getItem(columnStorageKey);\n        if (!stored) {\n          resetColumns();\n        } else {\n          const invisibleIds = JSON.parse(stored ?? '[]');\n          if (!Array.isArray(invisibleIds)) {\n            console.error(`stored invisible ids not an array: ${stored}`);\n          } else if (!invisibleIds.every((id) => typeof id === 'string')) {\n            console.error(`stored invisible ids not strings: ${stored}`);\n          } else {\n            invisibleIds && setInvisibleColumnIds(invisibleIds);\n          }\n        }\n      } catch (ex) {\n        console.error(ex);\n      }\n      setLoaded(true);\n    }\n  }, [columnStorageKey, getColumns, loaded, resetColumns, saveState, setInvisibleColumnIds]);\n\n  // Save state on column visibility change\n  useEffect(() => {\n    loaded &&\n      columnStorageKey &&\n      saveState &&\n      window.localStorage.setItem(columnStorageKey, JSON.stringify(invisibleColumnIds));\n  }, [columnStorageKey, invisibleColumnIds, loaded, saveState]);\n\n  const toggleColumn = useCallback(\n    (colId?: string) => {\n      if (!colId || !invisibleColumnIds) return;\n      setInvisibleColumnIds(\n        invisibleColumnIds.includes(colId)\n          ? invisibleColumnIds.filter((id) => id !== colId)\n          : [...invisibleColumnIds, colId],\n      );\n    },\n    [invisibleColumnIds, setInvisibleColumnIds],\n  );\n\n  const numericRegExp = /^\\d+$/;\n  const isNonManageableColumn = (col: ColDef) => col.lockVisible || col.colId == null || numericRegExp.test(col.colId);\n\n  return (\n    <Menu\n      menuButton={<GridFilterHeaderIconButton icon={'ic_columns'} title={'Column visibility'} />}\n      menuClassName={'step-ag-grid-react-menu'}\n      portal={true}\n      unmountOnClose={true}\n    >\n      <div className={'GridFilterColumnsToggle-container'}>\n        {getColumns('headerName').map((col) => (\n          <MenuItem\n            key={col.colId ?? 'no_col_id'}\n            disabled={isNonManageableColumn(col)}\n            onClick={(e: ClickEvent) => {\n              // Global react-menu MenuItem handler handles tabs\n              if (e.key !== 'Tab') {\n                e.keepOpen = true;\n                if (e.key !== 'Enter') {\n                  toggleColumn(col.colId);\n                }\n              }\n            }}\n          >\n            <LuiCheckboxInput\n              isChecked={!!invisibleColumnIds && !invisibleColumnIds.includes(col.colId ?? '')}\n              value={`${col.colId}`}\n              label={col.headerName ?? ''}\n              isDisabled={isNonManageableColumn(col)}\n              inputProps={{\n                onClick: (e) => {\n                  // Click is handled by MenuItem onClick so keyboard events work\n                  e.preventDefault();\n                  e.stopPropagation();\n                },\n              }}\n              onChange={() => {\n                /*Do nothing, change handled by menuItem*/\n              }}\n            />\n          </MenuItem>\n        ))}\n      </div>\n      <MenuDivider key={`$$divider_reset_columns`} />\n      <MenuItem\n        key={'$$reset_columns'}\n        onClick={(e: ClickEvent) => {\n          // Global react-menu MenuItem handler handles tabs\n          if (e.key !== 'Tab') {\n            e.keepOpen = e.key !== 'Enter';\n            resetColumns();\n          }\n        }}\n      >\n        <LuiIcon name={'ic_regenerate'} alt={'Reset columns'} size={'md'} className={'MenuItem-icon'} />\n        Reset columns\n      </MenuItem>\n    </Menu>\n  );\n};\n","import { useCallback, useEffect, useRef } from 'react';\n\n/**\n * Cancels timeouts on scope being destroyed.\n *\n * This could almost be a debounce, but debounce tracks by function reference, this tracks by hook reference.\n * This could have been implemented using debounce if the callers function was wrapped in useCallback,\n * but there's no way to enforce that, so  it would lead to bugs.\n */\nexport const useTimeoutHook = () => {\n  const timeout = useRef<ReturnType<typeof setTimeout>>();\n\n  /**\n   * Clear any pending timeouts.\n   */\n  const clearTimeouts = () => {\n    if (timeout.current) {\n      const tc = timeout.current;\n      timeout.current = undefined;\n      clearTimeout(tc);\n    }\n  };\n\n  /**\n   * Call this when your action has completed.\n   */\n  const invoke = useCallback((fn: () => void, waitTimeMs: number) => {\n    clearTimeouts();\n    timeout.current = setTimeout(fn, waitTimeMs);\n  }, []);\n\n  /**\n   * Clear timeout on loss of scope.\n   */\n  useEffect(() => {\n    return () => clearTimeouts();\n  }, []);\n\n  return invoke;\n};\n\ninterface IntervalHookProps {\n  timeoutMs: number;\n  callback: () => void;\n}\n\nexport const useIntervalHook = ({ callback, timeoutMs }: IntervalHookProps) => {\n  const callbackRef = useRef(callback);\n  callbackRef.current = callback;\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      callbackRef.current && callbackRef.current();\n    }, timeoutMs);\n    return () => {\n      clearInterval(interval);\n    };\n  }, [timeoutMs]);\n};\n","import { useCallback, useRef, useState } from 'react';\n\nimport { useTimeoutHook } from './timeoutHook';\n\n/**\n * Defers state change up to a minimum time since last state change.\n */\nexport const useStateDeferred = <T,>(initialValue: T): [T, (v: T) => void, (v: T, w: number) => void] => {\n  const startTime = useRef<number>(0);\n  const timeoutHook = useTimeoutHook();\n\n  const [value, _setValue] = useState(initialValue);\n\n  const setValue = useCallback((newValue: T) => {\n    startTime.current = Date.now();\n    _setValue(newValue);\n  }, []);\n\n  const setValueDeferred = useCallback(\n    (newValue: T, minimumWaitTimeMs: number) => {\n      const waitTimeMs = Math.max(minimumWaitTimeMs - (Date.now() - startTime.current), 0);\n      timeoutHook(() => _setValue(newValue), waitTimeMs);\n    },\n    [timeoutHook],\n  );\n\n  return [value, setValue, setValueDeferred];\n};\n","import { LuiMiniSpinner } from '@linzjs/lui';\nimport { CsvExportParams } from 'ag-grid-community';\nimport { delay } from 'lodash-es';\nimport { useContext } from 'react';\n\nimport { GridContext } from '../../contexts/GridContext';\nimport { useStateDeferred } from '../../lui/stateDeferredHook';\nimport { GridFilterHeaderIconButton } from './GridFilterHeaderIconButton';\n\nexport const GridFilterDownloadCsvButton = (csvExportParams: CsvExportParams) => {\n  const { downloadCsv } = useContext(GridContext);\n\n  const [downloading, setDownloading, setDownloadingDeferred] = useStateDeferred(false);\n\n  const handleDownloadClick = () => {\n    setDownloading(true);\n    // Defer the download such that the component disabled state can update\n    delay(() => {\n      downloadCsv(csvExportParams);\n      // Defer re-enablement as the browser takes time to process the download\n      setDownloadingDeferred(false, 4000);\n    }, 100);\n  };\n\n  return downloading ? (\n    <LuiMiniSpinner\n      size={22}\n      divProps={{\n        role: 'status',\n        ['aria-label']: 'Downloading...',\n        style: { width: 42, display: 'flex', justifyContent: 'center' },\n      }}\n    />\n  ) : (\n    <GridFilterHeaderIconButton\n      icon={'ic_csv_file'}\n      title={'Download CSV'}\n      onClick={handleDownloadClick}\n      disabled={downloading}\n    />\n  );\n};\n","import { LuiIcon } from '@linzjs/lui';\nimport { useContext, useEffect, useState } from 'react';\n\nimport { GridContext } from '../../contexts/GridContext';\n\nexport interface GridFilterQuickProps {\n  quickFilterPlaceholder?: string;\n  defaultValue?: string;\n}\n\nexport const GridFilterQuick = ({ quickFilterPlaceholder, defaultValue }: GridFilterQuickProps) => {\n  const { setQuickFilter } = useContext(GridContext);\n  const [quickFilterValue, setQuickFilterValue] = useState(defaultValue ?? '');\n\n  useEffect(() => {\n    setQuickFilter(quickFilterValue);\n  }, [quickFilterValue, setQuickFilter]);\n\n  return (\n    <div className=\"GridFilterQuick-container\">\n      <div className=\"GridFilterQuick-icon\">\n        <LuiIcon name={'ic_search'} alt={'Search'} size={'md'} />\n      </div>\n      <input\n        aria-label=\"Search\"\n        className=\"GridFilterQuick-input\"\n        type=\"text\"\n        placeholder={quickFilterPlaceholder ?? 'Search'}\n        value={quickFilterValue}\n        onChange={(event) => {\n          setQuickFilterValue(event.target.value);\n        }}\n      />\n    </div>\n  );\n};\n","import { PropsWithChildren } from 'react';\n\nexport const GridFilters = ({ children }: PropsWithChildren) => (\n  <div className=\"Grid-container-filters\">{children}</div>\n);\n","'use strict';\n\n/* global setTimeout, clearTimeout */\n\nmodule.exports = function debounce(fn) {\n  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  var lastCallAt = void 0;\n  var deferred = void 0;\n  var timer = void 0;\n  var pendingArgs = [];\n  return function debounced() {\n    var currentWait = getWait(wait);\n    var currentTime = new Date().getTime();\n\n    var isCold = !lastCallAt || currentTime - lastCallAt > currentWait;\n\n    lastCallAt = currentTime;\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (isCold && options.leading) {\n      return options.accumulate ? Promise.resolve(fn.call(this, [args])).then(function (result) {\n        return result[0];\n      }) : Promise.resolve(fn.call.apply(fn, [this].concat(args)));\n    }\n\n    if (deferred) {\n      clearTimeout(timer);\n    } else {\n      deferred = defer();\n    }\n\n    pendingArgs.push(args);\n    timer = setTimeout(flush.bind(this), currentWait);\n\n    if (options.accumulate) {\n      var argsIndex = pendingArgs.length - 1;\n      return deferred.promise.then(function (results) {\n        return results[argsIndex];\n      });\n    }\n\n    return deferred.promise;\n  };\n\n  function flush() {\n    var thisDeferred = deferred;\n    clearTimeout(timer);\n\n    Promise.resolve(options.accumulate ? fn.call(this, pendingArgs) : fn.apply(this, pendingArgs[pendingArgs.length - 1])).then(thisDeferred.resolve, thisDeferred.reject);\n\n    pendingArgs = [];\n    deferred = null;\n  }\n};\n\nfunction getWait(wait) {\n  return typeof wait === 'function' ? wait() : wait;\n}\n\nfunction defer() {\n  var deferred = {};\n  deferred.promise = new Promise(function (resolve, reject) {\n    deferred.resolve = resolve;\n    deferred.reject = reject;\n  });\n  return deferred;\n}\n//# sourceMappingURL=index.js.map","import { createContext } from 'react';\n\nexport interface GridSubComponentContextType {\n  value: any;\n  data: any;\n  setValue: (value: string) => void;\n  setValid: (valid: boolean) => void;\n  triggerSave: () => Promise<void>;\n  context: any;\n}\n\nexport const GridSubComponentContext = createContext<GridSubComponentContextType>({\n  value: 'GridSubComponentContext value no context',\n  data: {},\n  setValue: () => {\n    console.error('GridSubComponentContext setValue no context');\n  },\n  setValid: () => {\n    console.error('GridSubComponentContext setValid no context');\n  },\n  // eslint-disable-next-line @typescript-eslint/require-await\n  triggerSave: async () => {\n    console.error('GridSubComponentContext triggerSave no context');\n  },\n  context: null,\n});\n","import './FormError.scss';\n\nimport { LuiIcon } from '@linzjs/lui';\nimport { ReactElement } from 'react';\n\nexport interface FormErrorProps {\n  helpText?: string;\n  error?: ReactElement | string | boolean | null;\n}\n\nexport const FormError = (props: FormErrorProps) => {\n  return (\n    <>\n      {props.error && (\n        <div className=\"FormError\">\n          <LuiIcon alt=\"error\" name=\"ic_error\" className=\"FormError-text-icon\" size=\"sm\" status=\"error\" />\n          <span className=\"FormError-error\">{props.error}</span>\n        </div>\n      )}\n\n      {props.helpText && !props.error && <span className={'FormError-helpText'}>{props.helpText}</span>}\n    </>\n  );\n};\n","import { useEffect, useRef } from 'react';\n\n/**\n * Track previous values of states.\n *\n * @param value Value to track.\n */\nexport const usePrevious = <T,>(value: T): T | undefined => {\n  const ref = useRef<T>();\n  useEffect(() => {\n    ref.current = value;\n  }, [value]);\n  return ref.current;\n};\n\n/**\n * Dump prop differences for components between renders.\n */\nexport const usePropMonitor = (what: string, props: NonNullable<unknown>) => {\n  const prev = usePrevious(props);\n  useEffect(() => {\n    if (prev) {\n      let first = true;\n      Object.keys(props).forEach((p) => {\n        // @ts-expect-error any type\n        if (props[p] !== prev[p]) {\n          if (first) {\n            // eslint-disable-next-line no-console\n            console.log('--- props changed -----');\n            first = false;\n          }\n          // eslint-disable-next-line no-console\n          console.log(`${what} key: ${p} changed`);\n        }\n      });\n    }\n  }, [prev, props, what]);\n};\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","import escapeStringRegexp from 'escape-string-regexp';\n\nconst regexpCache = new Map();\n\nconst sanitizeArray = (input, inputName) => {\n\tif (!Array.isArray(input)) {\n\t\tswitch (typeof input) {\n\t\t\tcase 'string':\n\t\t\t\tinput = [input];\n\t\t\t\tbreak;\n\t\t\tcase 'undefined':\n\t\t\t\tinput = [];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new TypeError(`Expected '${inputName}' to be a string or an array, but got a type of '${typeof input}'`);\n\t\t}\n\t}\n\n\treturn input.filter(string => {\n\t\tif (typeof string !== 'string') {\n\t\t\tif (typeof string === 'undefined') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthrow new TypeError(`Expected '${inputName}' to be an array of strings, but found a type of '${typeof string}' in the array`);\n\t\t}\n\n\t\treturn true;\n\t});\n};\n\nconst makeRegexp = (pattern, options) => {\n\toptions = {\n\t\tcaseSensitive: false,\n\t\t...options,\n\t};\n\n\tconst cacheKey = pattern + JSON.stringify(options);\n\n\tif (regexpCache.has(cacheKey)) {\n\t\treturn regexpCache.get(cacheKey);\n\t}\n\n\tconst negated = pattern[0] === '!';\n\n\tif (negated) {\n\t\tpattern = pattern.slice(1);\n\t}\n\n\tpattern = escapeStringRegexp(pattern).replace(/\\\\\\*/g, '[\\\\s\\\\S]*');\n\n\tconst regexp = new RegExp(`^${pattern}$`, options.caseSensitive ? '' : 'i');\n\tregexp.negated = negated;\n\tregexpCache.set(cacheKey, regexp);\n\n\treturn regexp;\n};\n\nconst baseMatcher = (inputs, patterns, options, firstMatchOnly) => {\n\tinputs = sanitizeArray(inputs, 'inputs');\n\tpatterns = sanitizeArray(patterns, 'patterns');\n\n\tif (patterns.length === 0) {\n\t\treturn [];\n\t}\n\n\tpatterns = patterns.map(pattern => makeRegexp(pattern, options));\n\n\tconst {allPatterns} = options || {};\n\tconst result = [];\n\n\tfor (const input of inputs) {\n\t\t// String is included only if it matches at least one non-negated pattern supplied.\n\t\t// Note: the `allPatterns` option requires every non-negated pattern to be matched once.\n\t\t// Matching a negated pattern excludes the string.\n\t\tlet matches;\n\t\tconst didFit = [...patterns].fill(false);\n\n\t\tfor (const [index, pattern] of patterns.entries()) {\n\t\t\tif (pattern.test(input)) {\n\t\t\t\tdidFit[index] = true;\n\t\t\t\tmatches = !pattern.negated;\n\n\t\t\t\tif (!matches) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t!(\n\t\t\t\tmatches === false\n\t\t\t\t|| (matches === undefined && patterns.some(pattern => !pattern.negated))\n\t\t\t\t|| (allPatterns && didFit.some((yes, index) => !yes && !patterns[index].negated))\n\t\t\t)\n\t\t) {\n\t\t\tresult.push(input);\n\n\t\t\tif (firstMatchOnly) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n};\n\nexport function matcher(inputs, patterns, options) {\n\treturn baseMatcher(inputs, patterns, options, false);\n}\n\nexport function isMatch(inputs, patterns, options) {\n\treturn baseMatcher(inputs, patterns, options, true).length > 0;\n}\n","import { isEmpty, partition } from 'lodash-es';\nimport { isMatch } from 'matcher';\n\n/**\n * Text matching with wildcards and multiple matchers.\n *\n * \"L\" => L*\n * \"=L\" => L\n * \"*L*\" => *L*\n * \"*L\" => *L\n * \"A B\" => A* and B*\n * \"A B, C\" => (A* and B*) or C*\n * \"!A\" => all values must not match A\n * Returns true if there's a text match.\n */\nexport const textMatch = (text: string | undefined | null, filter: string): boolean => {\n  if (text == null) return true;\n\n  const superFilters = filter\n    .split(',')\n    .map((sf) => sf.trim())\n    .filter((sf) => sf)\n    .map((r) =>\n      r\n        .split(/\\s+/)\n        .map((f) => (f.startsWith('=') ? f.slice(1) : f + '*'))\n        .join(' '),\n    );\n  const [negativeFilters, positiveFilters] = partition(superFilters, (superFilters) => superFilters.startsWith('!'));\n\n  const values = text.replaceAll(',', ' ').trim().split(/\\s+/);\n  return (\n    (isEmpty(positiveFilters) || // Not filtered\n      positiveFilters.some((superFilter) => {\n        const subFilters = superFilter.split(/\\s+/).map((s) => s.replaceAll(/([!?])/g, '\\\\$1'));\n        return subFilters.every((subFilter) => values.some((value) => isMatch(value, subFilter)));\n      })) &&\n    (isEmpty(negativeFilters) ||\n      negativeFilters.every((superFilter) => values.every((value) => isMatch(value, superFilter))))\n  );\n};\n","import { ReactElement, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useGridPopoverContext } from '../contexts/GridPopoverContext';\nimport { ControlledMenu } from '../react-menu3';\nimport { MenuCloseEvent } from '../react-menu3/types';\nimport { CloseReason } from '../react-menu3/utils';\nimport { GridBaseRow } from './types';\n\nexport interface GridPopoverHookProps<TData> {\n  className: string | undefined;\n  invalid?: () =>\n    | Promise<ReactElement | boolean | string | null | undefined>\n    | ReactElement\n    | boolean\n    | string\n    | null\n    | undefined;\n  save?: (selectedRows: TData[]) => Promise<boolean>;\n  dontSaveOnExternalClick?: boolean;\n}\n\nexport const CancelPromise = () => Promise.resolve(true);\n\nexport const useGridPopoverHook = <TData extends GridBaseRow>({\n  className,\n  save,\n  invalid,\n  dontSaveOnExternalClick,\n}: GridPopoverHookProps<TData>) => {\n  const { anchorRef, saving, updateValue, stopEditing } = useGridPopoverContext<TData>();\n  const saveButtonRef = useRef<HTMLButtonElement>(null);\n  const [isOpen, setOpen] = useState(false);\n\n  useEffect(() => {\n    setOpen(true);\n  }, []);\n\n  const triggerSave = useCallback(\n    async (reason?: string) => {\n      if (reason == CloseReason.CANCEL) {\n        await updateValue(CancelPromise, 0);\n        stopEditing();\n\n        return;\n      }\n      if (invalid?.()) {\n        // Don't close, don't do anything it's invalid\n        return;\n      }\n\n      if (\n        await updateValue(\n          save ?? (() => Promise.resolve(true)),\n          reason === CloseReason.TAB_FORWARD ? 1 : reason === CloseReason.TAB_BACKWARD ? -1 : 0,\n        )\n      ) {\n        stopEditing();\n      }\n    },\n    [invalid, save, stopEditing, updateValue],\n  );\n\n  const popoverWrapper = useCallback(\n    (children: ReactElement) => {\n      return (\n        <>\n          {anchorRef.current && (\n            <ControlledMenu\n              state={isOpen ? 'open' : 'closed'}\n              portal={true}\n              unmountOnClose={true}\n              anchorRef={anchorRef}\n              saveButtonRef={saveButtonRef}\n              menuClassName={'step-ag-grid-react-menu'}\n              onClose={(event: MenuCloseEvent) => {\n                // Prevent menu from closing when modals are invoked\n                if (event.reason === CloseReason.BLUR) {\n                  return;\n                }\n                void triggerSave(event.reason);\n              }}\n              viewScroll={'auto'}\n              dontShrinkIfDirectionIsTop={true}\n              className={className}\n            >\n              {saving && ( // This is the overlay that prevents editing when the editor is saving\n                <div className={'ComponentLoadingWrapper-saveOverlay'} />\n              )}\n              {children}\n              <button\n                ref={saveButtonRef}\n                data-reason={''}\n                onClick={(e) => {\n                  let reason = e.currentTarget.getAttribute('data-reason') ?? undefined;\n                  if (dontSaveOnExternalClick && reason === CloseReason.BLUR) {\n                    reason = CloseReason.CANCEL;\n                  }\n                  void triggerSave(reason);\n                }}\n                style={{ display: 'none' }}\n              />\n            </ControlledMenu>\n          )}\n        </>\n      );\n    },\n    [anchorRef, isOpen, className, dontSaveOnExternalClick, saving, triggerSave],\n  );\n\n  return {\n    popoverWrapper,\n    triggerSave,\n  };\n};\n","import debounce from 'debounce-promise';\nimport { compact, isEmpty } from 'lodash-es';\nimport { Fragment, ReactElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { GridSubComponentContext } from '../../contexts/GridSubComponentContext';\nimport { FormError } from '../../lui/FormError';\nimport { usePrevious } from '../../lui/reactUtils';\nimport { FocusableItem, MenuDivider, MenuHeader, MenuItem } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { textMatch } from '../../utils/textMatcher';\nimport { isNotEmpty } from '../../utils/util';\nimport { ComponentLoadingWrapper } from '../ComponentLoadingWrapper';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\nimport { GridBaseRow } from '../types';\n\nexport interface GridPopoutEditDropDownSelectedItem<TData extends GridBaseRow, TOption> {\n  // Note the row that was clicked on will be first\n  selectedRows: TData[];\n  selectedRowIds: TData['id'][];\n  value: TOption;\n  subComponentValue?: any;\n}\n\ninterface FinalSelectOption<TOptionValue> {\n  value: TOptionValue;\n  label?: ReactElement | string;\n  disabled?: boolean | string;\n  subComponent?: (props: any, ref: any) => any;\n}\n\nexport const primitiveToSelectOption = <T,>(value: T): SelectOption<T> => {\n  return {\n    value: value,\n    label: value ? String(value) : '-',\n  };\n};\n\nexport const MenuSeparatorString = '_____MENU_SEPARATOR_____';\nexport const MenuSeparator = Object.freeze({ value: MenuSeparatorString });\n\nexport const MenuHeaderString = '_____MENU_HEADER_____';\nexport const MenuHeaderItem = (title: string) => {\n  return { label: title, value: MenuHeaderString };\n};\n\nexport type SelectOption<TOptionValue = any> = FinalSelectOption<TOptionValue>;\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport interface GridFormDropDownProps<TData extends GridBaseRow, TOptionValue> extends CellEditorCommon {\n  // This overrides CellEditorCommon to provide some common class options\n  className?: // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  | 'GridPopoverEditDropDown-containerSmall'\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    | 'GridPopoverEditDropDown-containerMedium'\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    | 'GridPopoverEditDropDown-containerLarge'\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    | 'GridPopoverEditDropDown-containerUnlimited'\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    | 'GridPopoverEditDropDown-containerAutoWidth'\n    | string\n    | undefined;\n  // local means the use the local filter, otherwise it's expected options will be passed a function that takes a filter\n  filtered?: 'local' | 'reload';\n  filterDefaultValue?: string;\n  filterPlaceholder?: string;\n  filterHelpText?: string;\n  noOptionsMessage?: string;\n  onSelectedItem?: (props: GridPopoutEditDropDownSelectedItem<TData, TOptionValue>) => Promise<void> | void;\n  onSelectFilter?: (props: GridPopoutEditDropDownSelectedItem<TData, TOptionValue>) => Promise<void> | void;\n  options:\n    | FinalSelectOption<TOptionValue>[]\n    | ((selectedRows: TData[], filter?: string) => MaybePromise<FinalSelectOption<TOptionValue>[] | undefined>)\n    | undefined;\n  topComponent?: () => ReactElement;\n}\n\nconst fieldToString = (field: any) => {\n  return typeof field === 'symbol' ? field.toString() : `${field}`;\n};\n\nexport const GridFormDropDown = <TData extends GridBaseRow, TOptionValue>(\n  props: GridFormDropDownProps<TData, TOptionValue>,\n) => {\n  const { selectedRows, field, data } = useGridPopoverContext<TData>();\n  const { onSelectFilter, options: propOptions, onSelectedItem } = props;\n\n  // Save triggers during async action processing which triggers another selectItem(), this ref blocks that\n  const [filter, setFilter] = useState(props.filterDefaultValue ?? '');\n  const [filteredValues, setFilteredValues] = useState<any[]>();\n  const [options, setOptions] = useState<FinalSelectOption<TOptionValue>[] | null>(\n    !!propOptions && typeof propOptions !== 'function' ? propOptions : null,\n  );\n  const subComponentIsValid = useRef(false);\n  const subComponentInitialValue = useRef<string | null>(null);\n  const [subSelectedValue, setSubSelectedValue] = useState<any>(null);\n  // Note: null is assumed to be the filter\n  const [selectedItem, setSelectedItem] = useState<FinalSelectOption<TOptionValue> | null>(null);\n\n  const selectItemHandler = useCallback(\n    async (value: any, subComponentValue?: any): Promise<boolean> => {\n      const hasChanged =\n        selectedRows.some((row) => row[field] !== value) ||\n        (subComponentValue !== undefined && subComponentInitialValue.current !== JSON.stringify(subComponentValue));\n      if (hasChanged) {\n        if (onSelectedItem) {\n          await onSelectedItem({\n            selectedRows,\n            selectedRowIds: selectedRows.map((row) => row.id),\n            value,\n            subComponentValue,\n          });\n        } else {\n          selectedRows.forEach((row) => (row[field] = value));\n        }\n      }\n      return true;\n    },\n    [field, onSelectedItem, selectedRows],\n  );\n\n  /**\n   * Saves are wrapped in updateValue and triggered by blur events\n   */\n  const save = useCallback(async () => {\n    if (!options) {\n      return true;\n    }\n\n    // Filter saved\n    if (selectedItem === null) {\n      if (onSelectFilter) {\n        if (!isEmpty(filter)) {\n          await onSelectFilter({\n            selectedRows,\n            selectedRowIds: selectedRows.map((row) => row.id),\n            value: filter as any,\n          });\n        }\n\n        return true;\n      } else {\n        if (filteredValues && filteredValues.length === 1) {\n          if (filteredValues[0].subComponent) return false;\n          return await selectItemHandler(filteredValues[0].value, null);\n        }\n      }\n      return false;\n    }\n    if (selectedItem.subComponent && !subComponentIsValid.current) {\n      return false;\n    }\n    await selectItemHandler(selectedItem.value, subSelectedValue);\n\n    return true;\n  }, [\n    filter,\n    filteredValues,\n    onSelectFilter,\n    options,\n    selectItemHandler,\n    selectedItem,\n    selectedRows,\n    subSelectedValue,\n  ]);\n\n  const { popoverWrapper } = useGridPopoverHook({\n    className: props.className,\n    invalid: () => !options || !!(selectedItem && !subComponentIsValid.current),\n    save,\n    dontSaveOnExternalClick: true,\n  });\n\n  // Load up options list if it's async function\n  useEffect(() => {\n    // If options is null then we need to load/reload\n    // Options will be set to null during a reload based filter, or on open popup\n    if (options !== null) {\n      return;\n    }\n\n    // propOptions is a const list\n    if (typeof propOptions !== 'function') {\n      if (propOptions) {\n        setOptions(propOptions);\n      }\n      return;\n    }\n\n    // propOptions is function, probably loading from web\n    void (async () => {\n      const r = await propOptions(selectedRows, filter);\n      setOptions(r ?? []);\n    })();\n  }, [filter, options, propOptions, selectedRows]);\n\n  // Local filtering.\n  useEffect(() => {\n    if (props.filtered !== 'local') {\n      return;\n    }\n    if (options == null) {\n      setFilteredValues([]);\n      return;\n    }\n\n    setFilteredValues(\n      compact(\n        options.map((option) => {\n          if (option.label != null && typeof option.label !== 'string') {\n            console.warn('GridFormDropDown: Cannot filter non-string labels', option);\n            return undefined;\n          }\n          return textMatch((option.label as string) || '', filter) ? option : undefined;\n        }),\n      ),\n    );\n  }, [props.filtered, filter, options]);\n\n  const reSearchOnFilterChange = useMemo(\n    () =>\n      debounce(() => {\n        setOptions(null);\n      }, 500),\n    [],\n  );\n\n  const previousFilter = usePrevious(filter);\n  useEffect(() => {\n    if (previousFilter != null && previousFilter != filter && props.filtered === 'reload') {\n      void reSearchOnFilterChange();\n    }\n  }, [filter, previousFilter, props.filtered, reSearchOnFilterChange]);\n\n  let lastHeader: ReactElement | null = null;\n  let showHeader: ReactElement | null = null;\n\n  return popoverWrapper(\n    <>\n      {props.filtered && (\n        <div className={'GridFormDropDown-filter'}>\n          <FocusableItem\n            className={'filter-item'}\n            onFocus={() => {\n              setSelectedItem(null);\n              setSubSelectedValue(null);\n              subComponentIsValid.current = true;\n            }}\n          >\n            {({ ref }: any) => (\n              <div style={{ display: 'flex', flexDirection: 'column', width: '100%' }}>\n                <input\n                  className={'LuiTextInput-input'}\n                  ref={ref}\n                  type=\"text\"\n                  placeholder={props.filterPlaceholder ?? 'Filter...'}\n                  data-testid={'filteredMenu-free-text-input'}\n                  defaultValue={filter}\n                  data-allowtabtosave={true}\n                  data-disableenterautosave={\n                    !props.onSelectFilter &&\n                    !(filteredValues && filteredValues.length === 1 && !filteredValues[0].subComponent)\n                  }\n                  onChange={(e) => setFilter(e.target.value.trim())}\n                />\n                {props.filterHelpText && isNotEmpty(filter) && (\n                  <FormError error={null} helpText={props.filterHelpText} />\n                )}\n              </div>\n            )}\n          </FocusableItem>\n          <MenuDivider key={`$$divider_filter`} />\n          {props.topComponent && (\n            <div>\n              <props.topComponent />\n              <MenuDivider key={`$$divider_filter`} />\n            </div>\n          )}\n        </div>\n      )}\n      <ComponentLoadingWrapper loading={!options} className={'GridFormDropDown-options'}>\n        <>\n          {options && (isEmpty(options) || (filteredValues && isEmpty(filteredValues))) && (\n            <MenuItem\n              key={`${fieldToString(field)}-empty`}\n              className={'GridPopoverEditDropDown-noOptions'}\n              disabled={true}\n            >\n              {props.noOptionsMessage ?? 'No Options'}\n            </MenuItem>\n          )}\n          {options?.map((item: FinalSelectOption<TOptionValue>, index) => {\n            showHeader = null;\n            if (item.value === MenuSeparatorString) {\n              return <MenuDivider key={`$$divider_${index}`} />;\n            } else if (item.value === MenuHeaderString) {\n              lastHeader = <MenuHeader key={`$$header_${index}`}>{item.label}</MenuHeader>;\n              return <></>;\n            } else {\n              if (lastHeader) {\n                showHeader = lastHeader;\n                lastHeader = null;\n              }\n            }\n            return (\n              (!filteredValues || filteredValues.includes(item)) && (\n                <Fragment key={`${index}`}>\n                  {showHeader}\n                  <div key={`menu-wrapper-${index}`}>\n                    <MenuItem\n                      key={`${fieldToString(field)}-${index}`}\n                      disabled={!!item.disabled}\n                      title={item.disabled && typeof item.disabled !== 'boolean' ? item.disabled : ''}\n                      value={item.value}\n                      onFocus={() => {\n                        if (selectedItem !== item) {\n                          setSelectedItem(item);\n                          setSubSelectedValue(null);\n                          subComponentIsValid.current = true;\n                          if (item.subComponent) {\n                            subComponentInitialValue.current = null;\n                          }\n                        }\n                      }}\n                      onClick={(e: ClickEvent) => {\n                        e.keepOpen = !!item.subComponent;\n                      }}\n                    >\n                      {item.label ?? (item.value == null ? `<${String(item.value)}>` : `${String(item.value)}`)}\n                      {item.subComponent ? '...' : ''}\n                    </MenuItem>\n\n                    {item.subComponent && selectedItem === item && (\n                      <FocusableItem className={'LuiDeprecatedForms'} key={`${String(item.label)}_subcomponent`}>\n                        {() => (\n                          <GridSubComponentContext.Provider\n                            value={{\n                              context: { options },\n                              data,\n                              value: subSelectedValue,\n                              setValue: (value: any) => {\n                                setSubSelectedValue(value);\n                                if (subComponentInitialValue.current === null) {\n                                  // copy the default value of the subcomponent, so we can change detect on save\n                                  subComponentInitialValue.current = JSON.stringify(value);\n                                }\n                              },\n                              setValid: (valid: boolean) => {\n                                subComponentIsValid.current = valid;\n                              },\n                              triggerSave: async () => {\n                                // empty\n                              },\n                            }}\n                          >\n                            {item.subComponent && (\n                              <div className={'subComponent'}>\n                                <item.subComponent />\n                              </div>\n                            )}\n                          </GridSubComponentContext.Provider>\n                        )}\n                      </FocusableItem>\n                    )}\n                  </div>\n                </Fragment>\n              )\n            );\n          })}\n        </>\n      </ComponentLoadingWrapper>\n    </>,\n  );\n};\n","import './TextInputFormatted.scss';\n\nimport clsx from 'clsx';\nimport { omit } from 'lodash-es';\nimport { DetailedHTMLProps, InputHTMLAttributes, ReactElement } from 'react';\n\nimport { FormError } from './FormError';\n\nexport interface LuiTextInputProps extends DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> {\n  // overrides value in base class to be string type only\n  value: string;\n\n  // Custom fields\n  helpText?: string;\n  error?: ReactElement | string | boolean | null;\n  formatted?: string;\n  allowTabToSave?: boolean;\n}\n\nexport const TextInputFormatted = (props: LuiTextInputProps): ReactElement => {\n  return (\n    <div\n      className={clsx(\n        'LuiTextInput GridLuiTextInput Grid-popoverContainer',\n        props.error && 'hasError',\n        props.className,\n      )}\n    >\n      <span className=\"LuiTextInput-inputWrapper\">\n        {/* wrapper div used for error styling */}\n        <input\n          type={'text'}\n          spellCheck={true}\n          defaultValue={props.value}\n          {...omit(props, ['error', 'value', 'helpText', 'formatted', 'className', 'allowTabToSave'])}\n          className={'LuiTextInput-input'}\n          onMouseEnter={(e) => {\n            e.currentTarget.focus();\n            props.onMouseEnter && props.onMouseEnter(e);\n          }}\n          data-allowtabtosave={props.allowTabToSave}\n        />\n        <span className={'LuiTextInput-formatted'}>{props.formatted}</span>\n      </span>\n\n      <FormError error={props.error} helpText={props.helpText} />\n    </div>\n  );\n};\n","export const bearingValueFormatter = (value: any): string => {\n  const safeValue = typeof value === 'string' ? parseFloat(value) : value;\n  if (safeValue == null) {\n    return '–';\n  }\n  return convertDDToDMS(safeValue, false);\n};\n\nexport const bearingCorrectionValueFormatter = (value: any): string => {\n  const safeValue = value;\n  if (safeValue == null) {\n    return '–';\n  }\n  if (typeof safeValue === 'string') {\n    return convertDDToDMS(bearingNumberParser(safeValue), true, 4);\n  }\n  return convertDDToDMS(safeValue, true, 4);\n};\n\nexport const bearingNumberParser = (value: string): number | null => {\n  if (value === '') return null;\n  return parseFloat(value);\n};\n\nconst validMaskForDmsBearing = /^((-)?\\d+)?(\\.([0-5](\\d([0-5](\\d(\\d+)?)?)?)?)?)?$/;\nexport const bearingStringValidator = (\n  value: string,\n  customInvalid?: (value: number | null) => string | null,\n): string | null => {\n  value = value.trim();\n  if (value === '') return null;\n  const match = value.match(validMaskForDmsBearing);\n  if (!match) return 'Bearing must be a number in D.MMSSS format';\n  const decimalPart = match[4];\n  if (decimalPart != null && decimalPart.length > 5) {\n    return 'Bearing has a maximum of 5 decimal places';\n  }\n\n  const bearing = parseFloat(value);\n  return customInvalid ? customInvalid(bearing) : null;\n};\n\n/**\n *Decimal-ish degrees to Degrees Minutes Seconds converter\n *\n * @param dd Decimal-ish degrees\n * @param showPositiveSymbol whether the + sign appears before the number\n * @param trailingZeroDp 2 | 4 | 5\n * Example:\n * 2 = 300° 00'\n * 4 = 300° 00' 00\"\n * 5 = 300° 00' 00.0\"\n * @returns Degrees Minutes Seconds\n */\nexport const convertDDToDMS = (dd: number | null, showPositiveSymbol = true, trailingZeroDp: 2 | 4 | 5 = 2): string => {\n  if (dd == null) return '–';\n\n  // toFixed rounds parts up greater than 60, which has to be corrected below\n  const [bearingWholeString, bearingDecimalString] = dd.toFixed(5).split('.');\n\n  let bearingWhole = Math.abs(parseInt(bearingWholeString));\n  let minNumeric = parseInt(bearingDecimalString?.substring(0, 2));\n  let secNumeric = parseInt(bearingDecimalString?.substring(2, 4));\n\n  // If the toFixed caused rounding beyond 60 minutes/seconds then apply the carry\n  if (secNumeric >= 60) {\n    minNumeric++;\n    secNumeric -= 60;\n  }\n  if (minNumeric >= 60) {\n    bearingWhole++;\n    minNumeric -= 60;\n  }\n  if (bearingWhole >= 360) {\n    bearingWhole -= 360;\n  }\n\n  const minString = minNumeric.toString().padStart(2, '0');\n  const secString = secNumeric.toString().padStart(2, '0');\n  const deciSecString = bearingDecimalString?.substring(4, 5);\n\n  let dmsString = `${showPositiveSymbol && dd > 0 ? '+' : ''}${dd < 0 ? '-' : ''}${bearingWhole}°`;\n  if (trailingZeroDp === 5 || deciSecString != '0') {\n    dmsString += `\\xa0${minString}'\\xa0${secString}.${deciSecString}\"`; // \"\\xa0\" is here for non-breaking space\n  } else if (trailingZeroDp === 4 || secNumeric != 0) {\n    dmsString += `\\xa0${minString}'\\xa0${secString}\"`;\n  } else {\n    dmsString += `\\xa0${minString}'`;\n  }\n  return dmsString;\n};\n\nexport const bearingRangeValidator = (value: number | null) => {\n  if (value === null) return 'Bearing is required';\n  if (value >= 360) return 'Bearing must be less than 360 degrees';\n  if (value < 0) return 'Bearing must not be negative';\n  return null;\n};\n\nexport const bearingCorrectionRangeValidator = (value: number | null) => {\n  if (value === null) return 'Bearing correction is required';\n  if (value >= 360) return 'Bearing correction must be less than 360 degrees';\n  if (value <= -180) return 'Bearing correction must be greater then -180 degrees';\n  return null;\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { TextInputFormatted } from '../../lui/TextInputFormatted';\nimport { bearingNumberParser, bearingStringValidator } from '../../utils/bearing';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\nimport { GridBaseRow } from '../types';\n\nexport interface GridFormEditBearingProps<TData extends GridBaseRow> extends CellEditorCommon {\n  formatValue?: (value: any) => string;\n  placeHolder?: string;\n  range?: (value: number | null) => string | null;\n  onSave?: (props: { selectedRows: TData[]; value: number | null }) => Promise<boolean>;\n}\n\nexport const GridFormEditBearing = <TData extends GridBaseRow>(props: GridFormEditBearingProps<TData>) => {\n  const { field, value: initialValue } = useGridPopoverContext<TData>();\n\n  // This clears out any scientific precision\n  const defaultValue = useMemo(\n    () => (initialValue == null ? '' : parseFloat(parseFloat(initialValue).toFixed(10)).toString()),\n    [initialValue],\n  );\n\n  const [value, setValue] = useState<string>(defaultValue);\n\n  const invalid = useCallback(() => bearingStringValidator(value, props.range), [props.range, value]);\n\n  const save = useCallback(\n    async (selectedRows: TData[]): Promise<boolean> => {\n      const parsedValue = bearingNumberParser(value);\n      // Value didn't change so don't save just cancel\n      if (parsedValue === bearingNumberParser(defaultValue)) {\n        return true;\n      }\n\n      if (props.onSave) {\n        return await props.onSave({ selectedRows, value: parsedValue });\n      } else {\n        if (field == null) {\n          console.error('field is not defined in ColDef');\n        } else {\n          selectedRows.forEach((row) => {\n            row[field] = parsedValue as any;\n          });\n        }\n      }\n      return true;\n    },\n    [defaultValue, field, props, value],\n  );\n  const { popoverWrapper } = useGridPopoverHook({\n    className: props.className,\n    invalid,\n    save,\n  });\n\n  return popoverWrapper(\n    <div className={'GridFormEditBearing-input'}>\n      <TextInputFormatted\n        value={defaultValue}\n        onChange={(e) => {\n          setValue(e.target.value.trim());\n        }}\n        autoFocus={true}\n        placeholder={props.placeHolder}\n        formatted={\n          bearingStringValidator(value, props.range) || !props.formatValue\n            ? '?'\n            : props.formatValue(bearingNumberParser(value))\n        }\n        error={bearingStringValidator(value, props.range)}\n        helpText={'Press enter or tab to save'}\n      />\n    </div>,\n  );\n};\n","import clsx from 'clsx';\nimport { ReactElement, useEffect, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { ComponentLoadingWrapper } from '../ComponentLoadingWrapper';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\nimport { GridBaseRow } from '../types';\n\nexport interface GridFormMessageProps<TData extends GridBaseRow> extends CellEditorCommon {\n  message: (selectedRows: TData[]) => Promise<string | ReactElement> | string | ReactElement;\n}\n\nexport const GridFormMessage = <TData extends GridBaseRow>(props: GridFormMessageProps<TData>): ReactElement => {\n  const { selectedRows } = useGridPopoverContext<TData>();\n\n  const [message, setMessage] = useState<string | ReactElement | null>(null);\n  const { popoverWrapper } = useGridPopoverHook({ className: props.className });\n\n  useEffect(() => {\n    void (async () => {\n      setMessage(await props.message(selectedRows));\n    })();\n  }, [props, selectedRows]);\n\n  return popoverWrapper(\n    <ComponentLoadingWrapper loading={message === null} className={clsx('GridFormMessage-container', props.className)}>\n      <>{message}</>\n    </ComponentLoadingWrapper>,\n  );\n};\n","import { LuiCheckboxInput } from '@linzjs/lui';\nimport { defer, fromPairs, groupBy, isEmpty, pick, toPairs } from 'lodash-es';\nimport React, {\n  Dispatch,\n  ForwardedRef,\n  Fragment,\n  KeyboardEvent,\n  ReactElement,\n  SetStateAction,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { GridSubComponentContext } from '../../contexts/GridSubComponentContext';\nimport { FormError } from '../../lui/FormError';\nimport { FocusableItem, MenuDivider, MenuHeader, MenuItem } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { textMatch } from '../../utils/textMatcher';\nimport { ComponentLoadingWrapper } from '../ComponentLoadingWrapper';\nimport { CellEditorCommon } from '../GridCell';\nimport { GridIcon } from '../GridIcon';\nimport { useGridPopoverHook } from '../GridPopoverHook';\nimport { GridBaseRow } from '../types';\nimport { MenuSeparatorString } from './GridFormDropDown';\n\ntype HeaderGroupType = Record<string, MultiSelectOption[]> | undefined;\n\nexport interface MultiSelectOption {\n  value: any;\n  label?: string;\n  subComponent?: (props: any) => ReactElement;\n  subValue?: any;\n  filter?: string;\n  checked?: boolean;\n  warning?: string | undefined;\n}\n\nexport interface GridFormMultiSelectGroup {\n  header: string;\n  filter?: string;\n}\n\nexport interface GridFormMultiSelectSaveProps<TData extends GridBaseRow> {\n  selectedRows: TData[];\n  selectedOptions: MultiSelectOption[];\n}\n\nexport interface GridFormMultiSelectProps<TData extends GridBaseRow> extends CellEditorCommon {\n  className?: // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  | 'GridMultiSelect-containerSmall'\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    | 'GridMultiSelect-containerMedium'\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    | 'GridMultiSelect-containerLarge'\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    | 'GridMultiSelect-containerUnlimited'\n    | string\n    | undefined;\n  filtered?: boolean;\n  filterPlaceholder?: string;\n  filterHelpText?: string | ((filter: string, options: MultiSelectOption[]) => string | undefined);\n  noOptionsMessage?: string;\n  onSelectFilter?: (props: { filter: string; options: MultiSelectOption[] }) => void;\n  onSave?: (props: GridFormMultiSelectSaveProps<TData>) => Promise<boolean>;\n  headers?: GridFormMultiSelectGroup[];\n  options: MultiSelectOption[] | ((selectedRows: TData[]) => Promise<MultiSelectOption[]> | MultiSelectOption[]);\n  invalid?: (selectedRows: TData[], selectedOptions: MultiSelectOption[]) => boolean;\n}\n\nexport const GridFormMultiSelect = <TData extends GridBaseRow>(props: GridFormMultiSelectProps<TData>) => {\n  const { selectedRows, data } = useGridPopoverContext<TData>();\n\n  const subComponentIsValidRef = useRef<Record<string, boolean>>({});\n  const optionsInitialising = useRef(false);\n  const firstInputSubComponent = useRef<HTMLInputElement | null>(null);\n\n  const [filter, setFilter] = useState('');\n  const [initialValues, setInitialValues] = useState('');\n  const [options, setOptions] = useState<MultiSelectOption[]>();\n\n  const invalid = useCallback(() => {\n    if (!options) return true;\n    const selectedValues = options.filter((o) => o.checked).map((o) => o.value);\n    const subValidations = pick(subComponentIsValidRef.current, selectedValues);\n    if (Object.values(subValidations).some((v) => !v)) return true;\n    return (\n      props.invalid &&\n      props.invalid(\n        selectedRows,\n        options.filter((o) => o.checked),\n      )\n    );\n  }, [options, props, selectedRows]);\n\n  const save = useCallback(\n    async (selectedRows: TData[]): Promise<boolean> => {\n      if (!options || !props.onSave) {\n        return true;\n      }\n\n      // Any changes to save?\n      if (initialValues === JSON.stringify(options)) {\n        return true;\n      }\n\n      return props.onSave({\n        selectedRows,\n        selectedOptions: options.filter((o) => o.checked),\n      });\n    },\n    [initialValues, options, props],\n  );\n\n  // Load up options list if it's async function\n  useEffect(() => {\n    if (options || optionsInitialising.current) return;\n    optionsInitialising.current = true;\n\n    void (async () => {\n      const optionsList = typeof props.options === 'function' ? await props.options(selectedRows) : props.options;\n      setInitialValues(JSON.stringify(optionsList));\n      setOptions(optionsList);\n      optionsInitialising.current = false;\n    })();\n  }, [options, props, selectedRows]);\n\n  /**\n   * Groups options into their header groups\n   */\n  const headerGroups = useMemo(() => {\n    if (!options) return undefined;\n    const result = groupBy(\n      options.filter((o) => textMatch(o.label, filter) && o.value != null),\n      'filter',\n    );\n    // remove leading/trailing/duplicate dividers\n    return fromPairs(\n      toPairs(result).map(([key, arr]) => {\n        let lastWasDivider = true;\n        return [\n          key,\n          arr\n            .map((row, index) => {\n              if (row.value === MenuSeparatorString) {\n                if (lastWasDivider) return null;\n                if (index === arr.length - 1) return null;\n                lastWasDivider = true;\n              } else {\n                lastWasDivider = false;\n              }\n              return row;\n            })\n            .filter((r) => r),\n        ];\n      }),\n    ) as HeaderGroupType;\n  }, [filter, options]);\n\n  const headers: GridFormMultiSelectGroup[] = useMemo(() => props.headers ?? [{ header: '' }], [props.headers]);\n\n  const { popoverWrapper, triggerSave } = useGridPopoverHook({\n    className: props.className,\n    invalid,\n    save,\n  });\n\n  return popoverWrapper(\n    <ComponentLoadingWrapper loading={!options} className={'GridFormMultiSelect-container'}>\n      {options && (\n        <>\n          {props.filtered && (\n            <FilterInput\n              {...{ headerGroups, options, setOptions, filter, setFilter, triggerSave }}\n              filterHelpText={props.filterHelpText}\n              onSelectFilter={props.onSelectFilter}\n              filterPlaceholder={props.filterPlaceholder}\n            />\n          )}\n          {headerGroups &&\n            (isEmpty(headerGroups) || !toPairs(headerGroups).some(([_, options]) => !isEmpty(options))) && (\n              <MenuItem key={'noOptions'} className={'GridMultiSelect-noOptions'} disabled={true}>\n                {props.noOptionsMessage ?? 'No Options'}\n              </MenuItem>\n            )}\n          {headerGroups && !isEmpty(headerGroups) && (\n            <div className={'GridFormMultiSelect-options'}>\n              {headers.map((header, index) => {\n                const subOptions = headerGroups[`${header.filter}`];\n                return (\n                  !isEmpty(subOptions) && (\n                    <Fragment key={`group_${index}`}>\n                      {header.header && <MenuHeader>{header.header}</MenuHeader>}\n                      {subOptions.map((item, index) =>\n                        item.value === MenuSeparatorString ? (\n                          <MenuDivider key={`div_${index}`} />\n                        ) : (\n                          <Fragment key={`val_${item.value}`}>\n                            <MenuRadioItem\n                              item={item}\n                              options={options}\n                              setOptions={setOptions}\n                              onChecked={() => {\n                                // Default to focus on first input in subComponent\n                                defer(() => {\n                                  firstInputSubComponent.current?.focus();\n                                });\n                              }}\n                            />\n                            {item.checked && item.subComponent && (\n                              <MenuSubComponent\n                                {...{ item, options, setOptions, data, triggerSave }}\n                                ref={firstInputSubComponent}\n                                subComponentIsValid={subComponentIsValidRef.current}\n                              />\n                            )}\n                          </Fragment>\n                        ),\n                      )}\n                    </Fragment>\n                  )\n                );\n              })}\n            </div>\n          )}\n        </>\n      )}\n    </ComponentLoadingWrapper>,\n  );\n};\n\nconst FilterInput = (props: {\n  options: MultiSelectOption[];\n  setOptions: (options: MultiSelectOption[]) => void;\n  onSelectFilter?: (props: { filter: string; options: MultiSelectOption[] }) => void;\n  filter: string;\n  setFilter: Dispatch<SetStateAction<string>>;\n  headerGroups: HeaderGroupType;\n  filterPlaceholder?: string;\n  filterHelpText?: string | ((filter: string, options: MultiSelectOption[]) => string | undefined);\n  triggerSave: () => Promise<void>;\n}) => {\n  const {\n    options,\n    setOptions,\n    onSelectFilter,\n    filter,\n    setFilter,\n    headerGroups,\n    filterPlaceholder,\n    filterHelpText,\n    triggerSave,\n  } = props;\n\n  const enterHasBeenPressed = useRef(false);\n  const lastKeyWasEnter = useRef(false);\n\n  const toggleSelectAllVisible = useCallback(() => {\n    if (!options || !headerGroups) return;\n\n    if (isEmpty(filter.trim())) {\n      // Toggle off if any items are checked otherwise on\n      const anyChecked = options.some((o) => o.checked);\n      options.forEach((o) => {\n        if (o.label !== undefined) o.checked = !anyChecked;\n      });\n    } else {\n      // Toggle on if any filtered items are checked otherwise off\n      const anyChecked = Object.values(headerGroups).some((headerOptions) =>\n        headerOptions.some((o) => o.checked === false),\n      );\n      Object.values(headerGroups).forEach((headerOptions) => {\n        headerOptions.forEach((o) => {\n          if (o.label !== undefined) o.checked = anyChecked;\n        });\n      });\n    }\n    setOptions([...options]);\n  }, [filter, headerGroups, options, setOptions]);\n\n  const addCustomFilterValue = useCallback(() => {\n    if (!options || !onSelectFilter) {\n      return;\n    }\n\n    const filterTrimmed = filter.trim();\n    if (isEmpty(filterTrimmed)) {\n      void triggerSave();\n      return;\n    }\n\n    const preFilterOptions = JSON.stringify(options);\n    onSelectFilter({ filter: filterTrimmed, options });\n    // Detect if options list changed and update\n    if (preFilterOptions === JSON.stringify(options)) {\n      return;\n    }\n\n    setOptions([...options]);\n    setFilter('');\n  }, [filter, onSelectFilter, options, setFilter, setOptions, triggerSave]);\n\n  const handleKeyDown = useCallback((e: KeyboardEvent) => {\n    if (e.key === 'Enter') {\n      enterHasBeenPressed.current = true;\n    }\n  }, []);\n\n  const handleKeyUp = useCallback(\n    (e: KeyboardEvent) => {\n      if (e.key === 'Enter') {\n        e.stopPropagation();\n        e.preventDefault();\n\n        if (e.ctrlKey) toggleSelectAllVisible();\n        else if (enterHasBeenPressed.current) {\n          const filterTrimmed = filter.trim();\n          if (isEmpty(filterTrimmed)) {\n            void triggerSave();\n            return;\n          }\n          onSelectFilter && addCustomFilterValue();\n        }\n        lastKeyWasEnter.current = true;\n      } else if (e.key === 'Control') {\n        lastKeyWasEnter.current && setFilter('');\n        lastKeyWasEnter.current = false;\n      } else {\n        lastKeyWasEnter.current = false;\n      }\n    },\n    [addCustomFilterValue, filter, onSelectFilter, setFilter, toggleSelectAllVisible, triggerSave],\n  );\n\n  return (\n    <>\n      <FocusableItem className={'filter-item'} key={'filter'}>\n        {(_: any) => (\n          <div style={{ width: '100%' }} className={'GridFormMultiSelect-filter'}>\n            <input\n              className={'LuiTextInput-input'}\n              type=\"text\"\n              placeholder={filterPlaceholder ?? 'Filter...'}\n              data-testid={'filteredMenu-free-text-input'}\n              value={filter}\n              data-disableenterautosave={true}\n              data-allowtabtosave={true}\n              onChange={(e) => setFilter(e.target.value)}\n              onKeyDown={handleKeyDown}\n              onKeyUp={handleKeyUp}\n            />\n            {filterHelpText && (\n              <FormError\n                error={null}\n                helpText={\n                  typeof filterHelpText === 'function' ? filterHelpText(filter.trim(), options) : filterHelpText\n                }\n              />\n            )}\n          </div>\n        )}\n      </FocusableItem>\n      <MenuDivider key={`$$divider_filter`} />\n    </>\n  );\n};\n\nconst MenuRadioItem = (props: {\n  item: MultiSelectOption;\n  options: MultiSelectOption[];\n  setOptions: (options: MultiSelectOption[]) => void;\n  onChecked?: () => void;\n}) => {\n  const { item, options, setOptions } = props;\n\n  const toggleValue = useCallback(\n    (item: MultiSelectOption) => {\n      item.checked = !item.checked;\n      setOptions([...options]);\n    },\n    [options, setOptions],\n  );\n\n  return (\n    <MenuItem\n      onClick={(e: ClickEvent) => {\n        // Global react-menu MenuItem handler handles tabs\n        if (e.key !== 'Tab' && e.key !== 'Enter') {\n          e.keepOpen = true;\n          toggleValue(item);\n        }\n        item.checked && props.onChecked && props.onChecked();\n      }}\n    >\n      <LuiCheckboxInput\n        isChecked={item.checked ?? false}\n        value={`${item.value}`}\n        label={\n          <>\n            {item.warning && <GridIcon icon={'ic_warning_outline'} title={item.warning} />}\n            {item.label ?? (item.value == null ? `<${item.value}>` : `${item.value}`)}\n          </>\n        }\n        inputProps={{\n          onClick: (e) => {\n            // Click is handled by MenuItem onClick\n            e.preventDefault();\n            e.stopPropagation();\n          },\n        }}\n        onChange={() => {\n          /*Do nothing, change handled by menuItem*/\n        }}\n      />\n    </MenuItem>\n  );\n};\n\nconst MenuSubComponent = React.forwardRef(MenuSubComponentFr);\n\nfunction MenuSubComponentFr(\n  props: {\n    data: any;\n    item: MultiSelectOption;\n    options: MultiSelectOption[];\n    setOptions: (options: MultiSelectOption[]) => void;\n    subComponentIsValid: Record<string, boolean>;\n    triggerSave: () => Promise<void>;\n  },\n  ref: ForwardedRef<HTMLInputElement>,\n) {\n  const { data, item, options, setOptions, subComponentIsValid, triggerSave } = props;\n  const focusableRef = React.useRef<HTMLElement | null>(null);\n\n  useEffect(() => {\n    if (focusableRef.current) {\n      const firstInputElement = focusableRef.current.querySelectorAll('input')[0] ?? null;\n      if (typeof ref === 'function') {\n        ref(firstInputElement);\n      } else if (ref) {\n        ref.current = firstInputElement;\n      }\n    }\n  }, [ref]);\n\n  return (\n    <FocusableItem className={'LuiDeprecatedForms'} key={`${item.value}_subcomponent`} ref={focusableRef}>\n      {() => (\n        <GridSubComponentContext.Provider\n          value={{\n            context: { options },\n            data,\n            value: item.subValue,\n            setValue: (value: any) => {\n              item.subValue = value;\n              setOptions([...options]);\n            },\n            setValid: (valid: boolean) => {\n              subComponentIsValid[`${item.value}`] = valid;\n            },\n            triggerSave,\n          }}\n        >\n          <div className={'subComponent'}>{item.subComponent && <item.subComponent />}</div>\n        </GridSubComponentContext.Provider>\n      )}\n    </FocusableItem>\n  );\n}\n","import { LuiCheckboxInput } from '@linzjs/lui';\nimport { isEqual } from 'lodash-es';\nimport { ReactElement, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { MenuItem } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { CellEditorCommon } from '../GridCell';\nimport { GridIcon } from '../GridIcon';\nimport { useGridPopoverHook } from '../GridPopoverHook';\nimport { GridBaseRow } from '../types';\n\nexport interface MultiSelectGridOption {\n  value: any;\n  label?: string | ReactElement;\n  checked?: boolean | 'partial';\n  canSelectPartial?: boolean;\n  warning?: string | undefined;\n}\n\nexport interface GridFormMultiSelectGridSaveProps<TData extends GridBaseRow> {\n  selectedRows: TData[];\n  addValues: any[];\n  removeValues: any[];\n}\n\nexport interface GridFormMultiSelectGridProps<TData extends GridBaseRow> extends CellEditorCommon {\n  className?: string | undefined;\n  noOptionsMessage?: string;\n  onSave?: (props: GridFormMultiSelectGridSaveProps<TData>) => Promise<boolean>;\n  options:\n    | MultiSelectGridOption[]\n    | ((selectedRows: TData[]) => Promise<MultiSelectGridOption[]> | MultiSelectGridOption[]);\n  invalid?: (props: GridFormMultiSelectGridSaveProps<TData>) => boolean;\n  maxRowCount?: number;\n}\n\nexport const GridFormMultiSelectGrid = <TData extends GridBaseRow>(\n  props: GridFormMultiSelectGridProps<TData>,\n): ReactElement => {\n  const { selectedRows } = useGridPopoverContext<TData>();\n  const optionsInitialising = useRef(false);\n\n  const [initialValues, setInitialValues] = useState<MultiSelectGridOption[]>();\n  const [options, setOptions] = useState<MultiSelectGridOption[]>();\n\n  const genSave = useCallback(\n    (selectedRows: TData[]): GridFormMultiSelectGridSaveProps<TData> => {\n      if (!options) return { selectedRows, addValues: [], removeValues: [] };\n\n      const preChecked = (initialValues ?? []).filter((o) => o.checked).map((o) => o.value);\n      const postNotChecked = options.filter((o) => o.checked === false).map((o) => o.value);\n      const removeValues = preChecked.filter((p) => postNotChecked.some((c) => c === p));\n\n      const preNotChecked = (initialValues ?? []).filter((o) => o.checked !== true).map((o) => o.value);\n      const postChecked = options.filter((o) => o.checked === true).map((o) => o.value);\n      const addValues = preNotChecked.filter((p) => postChecked.some((c) => c === p));\n\n      return { selectedRows, addValues, removeValues };\n    },\n    [initialValues, options],\n  );\n\n  const save = useCallback(\n    async (selectedRows: TData[]): Promise<boolean> => {\n      if (!options || !props.onSave) return true;\n      // Any changes to save?\n      if (\n        isEqual(\n          initialValues?.map((o) => o.checked),\n          options.map((o) => o.checked),\n        )\n      ) {\n        return true;\n      }\n      if (!props.onSave) return true;\n      return await props.onSave(genSave(selectedRows));\n    },\n    [genSave, initialValues, options, props],\n  );\n\n  const invalid = useCallback(() => {\n    if (!options) return true;\n    return props.invalid && props.invalid(genSave(selectedRows));\n  }, [genSave, options, props, selectedRows]);\n\n  const { popoverWrapper } = useGridPopoverHook({\n    className: props.className,\n    save,\n    invalid,\n  });\n\n  // Load up options list if it's async function\n  useEffect(() => {\n    if (options || optionsInitialising.current) return;\n    optionsInitialising.current = true;\n\n    void (async () => {\n      const optionsList = typeof props.options === 'function' ? await props.options(selectedRows) : props.options;\n      setInitialValues(optionsList.map((o) => ({ ...o, label: '' })));\n      setOptions(optionsList);\n      optionsInitialising.current = false;\n    })();\n  }, [options, props, selectedRows]);\n\n  const toggleValue = useCallback(\n    (item: MultiSelectGridOption) => {\n      if (options) {\n        item.checked = item.checked === true && item.canSelectPartial ? 'partial' : !item.checked;\n        setOptions([...options]);\n      }\n    },\n    [options, setOptions],\n  );\n\n  return popoverWrapper(\n    <>\n      <div className={'Grid-popoverContainer'}>\n        <div\n          style={{\n            display: 'grid',\n            gridAutoFlow: 'column',\n            gridTemplateRows: `repeat(${props.maxRowCount ?? 10}, auto)`,\n            maxWidth: 'calc(min(100vw,500px))',\n            overflowX: 'auto',\n          }}\n        >\n          {options &&\n            options.map((o) => (\n              <>\n                <MenuItem\n                  key={JSON.stringify(o.value)}\n                  onClick={(e: ClickEvent) => {\n                    // Global react-menu MenuItem handler handles tabs\n                    if (e.key !== 'Tab' && e.key !== 'Enter') {\n                      e.keepOpen = true;\n                      toggleValue(o);\n                    }\n                  }}\n                >\n                  <LuiCheckboxInput\n                    isChecked={!!o.checked}\n                    isIndeterminate={o.checked === 'partial'}\n                    value={`${o.value}`}\n                    label={\n                      <>\n                        {o.warning && <GridIcon key={'$$icon$$'} icon={'ic_warning_outline'} title={o.warning} />}\n                        <span key={'$$label$$'} className={'GridMultiSelectGrid-Label'}>\n                          {o.label ?? (o.value == null ? `<${o.value}>` : `${o.value}`)}\n                        </span>\n                      </>\n                    }\n                    inputProps={{\n                      onClick: (e) => {\n                        // Click is handled by MenuItem onClick\n                        e.preventDefault();\n                        e.stopPropagation();\n                      },\n                    }}\n                    onChange={() => {\n                      /*Do nothing, change handled by menuItem*/\n                    }}\n                  />\n                </MenuItem>\n              </>\n            ))}\n        </div>\n      </div>\n    </>,\n  );\n};\n","import { isEmpty } from 'lodash-es';\nimport { Fragment, ReactElement, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { GridSubComponentContext } from '../../contexts/GridSubComponentContext';\nimport { FocusableItem, MenuDivider, MenuItem, SubMenu } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { ComponentLoadingWrapper } from '../ComponentLoadingWrapper';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\nimport { GridBaseRow } from '../types';\n\nexport interface GridFormPopoverMenuProps<TData extends GridBaseRow> extends CellEditorCommon {\n  options: (selectedRows: TData[]) => Promise<MenuOption<TData>[]> | MenuOption<TData>[];\n  defaultAction?: (props: {\n    selectedRows: TData[];\n    menuOption: SelectedMenuOptionResult<TData>;\n  }) => Promise<void> | void;\n}\n\n/** Menu configuration types **/\nconst __isMenuSeparator__ = '__isMenuSeparator__';\nexport const PopoutMenuSeparator = Object.freeze({ label: __isMenuSeparator__ });\n\ninterface MenuSeparatorType {\n  __isMenuSeparator__: boolean;\n}\n\nexport interface SelectedMenuOptionResult<TData extends GridBaseRow> extends MenuOption<TData> {\n  subValue: any;\n}\n\nexport interface MenuOption<TData extends GridBaseRow> {\n  label: ReactElement | string | MenuSeparatorType;\n  subMenu?: () => ReactElement;\n  action?: (props: { selectedRows: TData[]; menuOption: SelectedMenuOptionResult<TData> }) => Promise<void>;\n  disabled?: string | boolean;\n  hidden?: boolean;\n  subComponent?: (props: any) => ReactElement;\n}\n\n/**\n * NOTE: If the popout menu doesn't appear on single click when also selecting row it's because\n * you need a useMemo around your columnDefs\n */\nexport const GridFormPopoverMenu = <TData extends GridBaseRow>(props: GridFormPopoverMenuProps<TData>) => {\n  const { selectedRows, updateValue, data } = useGridPopoverContext<TData>();\n\n  const optionsInitialising = useRef(false);\n  const [options, setOptions] = useState<MenuOption<TData>[]>();\n\n  const [subComponentSelected, setSubComponentSelected] = useState<MenuOption<TData> | null>(null);\n  const subComponentIsValid = useRef(false);\n  const [subSelectedValue, setSubSelectedValue] = useState<any>();\n\n  const defaultAction = useCallback(\n    async (params: { selectedRows: TData[]; menuOption: SelectedMenuOptionResult<TData> }) => {\n      if (props.defaultAction) await props.defaultAction(params);\n      else console.error(`No action specified for ${String(params.menuOption.label)} menu options`);\n    },\n    [props],\n  );\n\n  // Load up options list if it's async function\n  useEffect(() => {\n    if (options || optionsInitialising.current) return;\n    optionsInitialising.current = true;\n    const optionsConf = props.options ?? [];\n\n    void (async () => {\n      const newOptions = typeof optionsConf === 'function' ? await optionsConf(selectedRows) : optionsConf;\n      setOptions(newOptions);\n      if (!props.defaultAction) {\n        const anyOptionsAreMissingAction = newOptions.some((option) => !option.action);\n        if (anyOptionsAreMissingAction) {\n          console.error(\"There's no default action handler and some Menu options are missing an action handler\", {\n            invalidMenuOptions: newOptions.filter((option) => !option.action),\n          });\n        }\n      }\n      optionsInitialising.current = false;\n    })();\n  }, [options, props.defaultAction, props.options, selectedRows]);\n\n  const actionClick = useCallback(\n    async (menuOption: MenuOption<TData>) => {\n      await (menuOption.action ?? defaultAction)({\n        selectedRows,\n        menuOption: { ...menuOption, subValue: subSelectedValue },\n      });\n      return true;\n    },\n    [defaultAction, selectedRows, subSelectedValue],\n  );\n\n  const onMenuItemClick = useCallback(\n    async (e: ClickEvent, item: MenuOption<TData>) => {\n      if (item.subComponent) {\n        subComponentIsValid.current = false;\n        setSubSelectedValue(null);\n        setSubComponentSelected(subComponentSelected === item ? null : item);\n        e.keepOpen = true;\n      } else {\n        subComponentIsValid.current = true;\n        setSubSelectedValue(null);\n        await updateValue(async () => actionClick(item), e.key === 'Tab' ? (e.shiftKey ? -1 : 1) : 0);\n      }\n    },\n    [actionClick, subComponentSelected, updateValue],\n  );\n\n  const save = useCallback(async () => {\n    // if a subcomponent is open we assume that it's meant to be saved.\n    if (subComponentSelected) {\n      if (!subComponentIsValid.current) return false;\n      await actionClick(subComponentSelected);\n    }\n    // Close the menu\n    return true;\n  }, [actionClick, subComponentSelected]);\n\n  const { popoverWrapper, triggerSave } = useGridPopoverHook({\n    className: props.className,\n    invalid: () => subComponentSelected && !subComponentIsValid.current,\n    save,\n  });\n\n  return popoverWrapper(\n    <ComponentLoadingWrapper loading={!options} className={'GridFormPopupMenu'}>\n      <>\n        {isEmpty(options) ? (\n          <MenuItem key={`GridPopoverMenu-empty`} className={'GridPopoverMenu-noOptions'} disabled={true}>\n            No actions\n          </MenuItem>\n        ) : (\n          options?.map((item, index) =>\n            item.label === '__isMenuSeparator__' ? (\n              <MenuDivider key={`$$divider_${index}`} />\n            ) : (\n              !item.hidden && (\n                <Fragment key={`${String(item.label)}`}>\n                  {item.subMenu ? (\n                    <SubMenu\n                      key={`${String(item.label)}`}\n                      disabled={!!item.disabled}\n                      label={item.label as string}\n                      title={item.disabled && typeof item.disabled !== 'boolean' ? item.disabled : ''}\n                    >\n                      <item.subMenu />\n                    </SubMenu>\n                  ) : (\n                    <MenuItem\n                      key={`${String(item.label)}`}\n                      onClick={(e: ClickEvent) => void onMenuItemClick(e, item)}\n                      disabled={!!item.disabled}\n                      title={item.disabled && typeof item.disabled !== 'boolean' ? item.disabled : ''}\n                    >\n                      {item.label as ReactElement | string}\n                    </MenuItem>\n                  )}\n                  {item.subComponent && subComponentSelected === item && (\n                    <FocusableItem className={'LuiDeprecatedForms'} key={`${String(item.label)}_subcomponent`}>\n                      {() => (\n                        <GridSubComponentContext.Provider\n                          value={{\n                            context: {},\n                            data,\n                            value: subSelectedValue,\n                            setValue: (value: any) => {\n                              setSubSelectedValue(value);\n                            },\n                            setValid: (valid: boolean) => {\n                              subComponentIsValid.current = valid;\n                            },\n                            triggerSave,\n                          }}\n                        >\n                          <div className={'subComponent'}>{item.subComponent && <item.subComponent />}</div>\n                        </GridSubComponentContext.Provider>\n                      )}\n                    </FocusableItem>\n                  )}\n                </Fragment>\n              )\n            ),\n          )\n        )}\n      </>\n    </ComponentLoadingWrapper>,\n  );\n};\n","import clsx from 'clsx';\nimport { omit } from 'lodash-es';\nimport { InputHTMLAttributes, ReactElement, useId } from 'react';\n\nimport { FormError } from './FormError';\n\nexport interface LuiTextAreaInputProps extends InputHTMLAttributes<HTMLTextAreaElement> {\n  // overrides value in base class to be string type only\n  value: string;\n\n  // Custom fields\n  label?: ReactElement | string;\n  mandatory?: boolean;\n  helpText?: string;\n  error?: ReactElement | string | boolean | null;\n  allowTabToSave?: boolean;\n}\n\nexport const TextAreaInput = (props: LuiTextAreaInputProps) => {\n  const reactId = useId();\n  const id = props?.id ?? reactId;\n\n  return (\n    <div\n      className={clsx(\n        'LuiTextAreaInput Grid-popoverContainer',\n        props.disabled ? 'isDisabled' : '',\n        props.error ? 'hasError' : '',\n        props.className,\n      )}\n    >\n      <label htmlFor={id}>\n        {props.mandatory != null && <span className=\"LuiTextAreaInput-mandatory\">*</span>}\n        {props.label != null && <span className=\"LuiTextAreaInput-label\">{props.label}</span>}\n        <div className=\"LuiTextAreaInput-wrapper\">\n          {/* wrapper div used for error styling */}\n          <textarea\n            rows={5}\n            {...omit(props, ['error', 'value', 'helpText', 'formatted', 'className', 'allowTabToSave'])}\n            id={id}\n            value={props.value ?? ''}\n            spellCheck={true}\n            onMouseEnter={(e) => {\n              if (document.activeElement != e.currentTarget) {\n                e.currentTarget.focus();\n                e.currentTarget.selectionStart = e.currentTarget.value.length;\n              }\n              props.onMouseEnter && props.onMouseEnter(e);\n            }}\n            data-allowtabtosave={props.allowTabToSave}\n          >\n            {props.value}\n          </textarea>\n        </div>\n      </label>\n\n      <FormError error={props.error} helpText={props.helpText} />\n    </div>\n  );\n};\n","import { ReactElement } from 'react';\n\nimport { GridBaseRow } from '../components/types';\nimport { isFloat, stringByteLengthIsInvalid } from './util';\n\nexport interface TextInputValidatorProps<TData extends GridBaseRow> {\n  required?: boolean;\n  maxLength?: number;\n  maxBytes?: number;\n  invalid?: (value: string, data: TData, context: any) => ReactElement | string | null;\n  numberFormat?: {\n    precision?: number;\n    scale?: number;\n    gtMin?: number;\n    geMin?: number;\n    ltMax?: number;\n    leMax?: number;\n    notZero?: boolean;\n  };\n}\n\nexport const TextInputValidator = <TData extends GridBaseRow>(\n  props: TextInputValidatorProps<TData>,\n  value: string | null,\n  data: TData,\n  context: any,\n) => {\n  if (value == null) return null;\n\n  // This can happen because subcomponent is invoked without type safety\n  if (typeof value !== 'string') {\n    return 'Value is not a string';\n  }\n  if (props.required && value.trim() == '') {\n    return 'Must not be empty';\n  }\n  if (props.maxLength && value.length > props.maxLength) {\n    return `Must be no longer than ${props.maxLength} characters`;\n  }\n  if (props.maxBytes && stringByteLengthIsInvalid(value, props.maxBytes)) {\n    return `Must be no longer than ${props.maxBytes} bytes`;\n  }\n  const nf = props.numberFormat;\n  if (nf) {\n    if (value != '' && !isFloat(value)) {\n      return `Must be a valid number`;\n    }\n    if (value != '') {\n      const number = parseFloat(value);\n      if (nf.notZero && number === 0) {\n        return `Must not be 0`;\n      }\n      if (nf.gtMin != null && number <= nf.gtMin) {\n        return `Must be greater than ${nf.gtMin.toLocaleString()}`;\n      }\n      if (nf.geMin != null && number < nf.geMin) {\n        return `Must not be less than ${nf.geMin.toLocaleString()}`;\n      }\n      if (nf.ltMax != null && number >= nf.ltMax) {\n        return `Must be less than ${nf.ltMax.toLocaleString()}`;\n      }\n      if (nf.leMax != null && number > nf.leMax) {\n        return `Must not be greater than ${nf.leMax.toLocaleString()}`;\n      }\n\n      if (nf.precision != null && value != '') {\n        if (parseFloat(number.toPrecision(nf.precision)) != number) {\n          return `Must have no more than ${nf.precision} digits precision`;\n        }\n      }\n\n      if (nf.scale != null && value != '') {\n        if (parseFloat(number.toFixed(nf.scale)) != number) {\n          return nf.scale == 0 ? `Must be a whole number` : `Must have no more than ${nf.scale} decimal places`;\n        }\n      }\n    }\n  }\n  if (props.invalid) {\n    return props.invalid(value, data, context);\n  }\n  return null;\n};\n","import clsx from 'clsx';\nimport { ReactElement, useCallback, useContext, useEffect } from 'react';\n\nimport { GridSubComponentContext } from '../../contexts/GridSubComponentContext';\nimport { TextAreaInput } from '../../lui/TextAreaInput';\nimport { TextInputValidator, TextInputValidatorProps } from '../../utils/textValidator';\nimport { CellEditorCommon } from '../GridCell';\nimport { GridBaseRow } from '../types';\n\nexport interface GridSubComponentTextAreaProps<TData extends GridBaseRow>\n  extends TextInputValidatorProps<TData>,\n    CellEditorCommon {\n  placeholder?: string;\n  width?: string | number;\n  defaultValue: string;\n  className?: string;\n  helpText?: string;\n}\n\nexport const GridFormSubComponentTextArea = <TData extends GridBaseRow>(\n  props: GridSubComponentTextAreaProps<TData>,\n): ReactElement => {\n  const { value, data, setValue, setValid, context } = useContext(GridSubComponentContext);\n\n  const helpText = props.helpText ?? 'Press tab to save';\n\n  // If is not initialised yet as it's just been created then set the default value\n  useEffect(() => {\n    if (value == null) setValue(props.defaultValue);\n  }, [props.defaultValue, setValue, value]);\n\n  const invalid = useCallback(() => TextInputValidator(props, value, data, context), [data, props, value, context]);\n\n  useEffect(() => {\n    setValid(value != null && invalid() == null);\n  }, [setValid, invalid, value]);\n\n  return (\n    <div className={clsx('FreeTextInput', props.className)}>\n      <TextAreaInput\n        className={'free-text-input'}\n        value={value}\n        onChange={(e) => setValue(e.target.value)}\n        error={invalid()}\n        helpText={helpText}\n        placeholder={props.placeholder}\n        allowTabToSave={true}\n      />\n    </div>\n  );\n};\n","import { ReactElement, useCallback, useContext, useEffect } from 'react';\n\nimport { GridSubComponentContext } from '../../contexts/GridSubComponentContext';\nimport { TextInputFormatted } from '../../lui/TextInputFormatted';\nimport { TextInputValidator, TextInputValidatorProps } from '../../utils/textValidator';\nimport { CellEditorCommon } from '../GridCell';\nimport { GridBaseRow } from '../types';\n\nexport interface GridFormSubComponentTextInputProps<TData extends GridBaseRow>\n  extends TextInputValidatorProps<TData>,\n    CellEditorCommon {\n  placeholder?: string;\n  width?: string | number;\n  defaultValue: string;\n  helpText?: string;\n}\n\nexport const GridFormSubComponentTextInput = <TData extends GridBaseRow>(\n  props: GridFormSubComponentTextInputProps<TData>,\n): ReactElement => {\n  const { value, setValue, setValid, data, context } = useContext(GridSubComponentContext);\n\n  const helpText = props.helpText ?? 'Press enter or tab to save';\n\n  // If is not initialised yet as it's just been created then set the default value\n  useEffect(() => {\n    if (value == null) setValue(props.defaultValue);\n  }, [props.defaultValue, setValue, value]);\n\n  const invalid = useCallback(() => TextInputValidator(props, value, data, context), [context, data, props, value]);\n\n  useEffect(() => {\n    setValid(value != null && invalid() == null);\n  }, [setValid, invalid, value]);\n\n  return (\n    <TextInputFormatted\n      value={value}\n      error={invalid()}\n      onChange={(e) => setValue(e.target.value)}\n      helpText={helpText}\n      placeholder={props.placeholder}\n      style={{ width: '100%' }}\n      allowTabToSave={true}\n    />\n  );\n};\n","import { ReactElement, useCallback, useMemo, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { TextAreaInput } from '../../lui/TextAreaInput';\nimport { TextInputValidator, TextInputValidatorProps } from '../../utils/textValidator';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\nimport { GridBaseRow } from '../types';\n\nexport interface GridFormTextAreaProps<TData extends GridBaseRow>\n  extends TextInputValidatorProps<TData>,\n    CellEditorCommon {\n  placeholder?: string;\n  width?: string | number;\n  onSave?: (props: { selectedRows: TData[]; value: string }) => Promise<boolean>;\n  helpText?: string;\n}\n\nexport const GridFormTextArea = <TData extends GridBaseRow>(props: GridFormTextAreaProps<TData>): ReactElement => {\n  const { field, value: initialVale, data } = useGridPopoverContext<TData>();\n\n  const initValue = useMemo(() => (initialVale == null ? '' : `${initialVale}`), [initialVale]);\n  const [value, setValue] = useState(initValue);\n\n  const helpText = props.helpText ?? 'Press tab to save';\n\n  const invalid = useCallback(() => TextInputValidator(props, value, data, {}), [props, value, data]);\n\n  const save = useCallback(\n    async (selectedRows: TData[]): Promise<boolean> => {\n      if (invalid()) return false;\n\n      const trimmedValue = value.trim();\n      // No change, so don't save\n      if (initValue === trimmedValue) return true;\n\n      if (props.onSave) {\n        return await props.onSave({ selectedRows, value: trimmedValue });\n      }\n\n      selectedRows.forEach((row) => (row[field] = trimmedValue as any));\n      return true;\n    },\n    [invalid, value, initValue, props, field],\n  );\n\n  const { popoverWrapper } = useGridPopoverHook({\n    className: props.className,\n    invalid,\n    save,\n  });\n\n  return popoverWrapper(\n    <div className={'subComponent'} style={{ display: 'flex', flexDirection: 'row', width: props.width ?? 240 }}>\n      <TextAreaInput\n        value={value}\n        onChange={(e) => setValue(e.target.value)}\n        error={invalid()}\n        placeholder={props.placeholder ?? 'Type here'}\n        helpText={helpText}\n      />\n    </div>,\n  );\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { TextInputFormatted } from '../../lui/TextInputFormatted';\nimport { TextInputValidator, TextInputValidatorProps } from '../../utils/textValidator';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\nimport { GridBaseRow } from '../types';\n\nexport interface GridFormTextInputProps<TData extends GridBaseRow>\n  extends TextInputValidatorProps<TData>,\n    CellEditorCommon {\n  placeholder?: string;\n  units?: string;\n  width?: string | number;\n  onSave?: (props: { selectedRows: TData[]; value: string }) => Promise<boolean>;\n  helpText?: string;\n}\n\nexport const GridFormTextInput = <TData extends GridBaseRow>(props: GridFormTextInputProps<TData>) => {\n  const { field, value: initialVale, data } = useGridPopoverContext<TData>();\n\n  const helpText = props.helpText ?? 'Press enter or tab to save';\n\n  const initValue = useMemo(() => (initialVale == null ? '' : `${initialVale}`), [initialVale]);\n  const [value, setValue] = useState(initValue);\n\n  const invalid = useCallback(() => TextInputValidator<TData>(props, value, data, {}), [data, props, value]);\n\n  const save = useCallback(\n    async (selectedRows: TData[]): Promise<boolean> => {\n      if (invalid()) {\n        return false;\n      }\n\n      const trimmedValue = value.trim();\n      // No change, so don't save\n      if (initValue === trimmedValue) {\n        return true;\n      }\n\n      if (props.onSave) {\n        return await props.onSave({ selectedRows, value: trimmedValue });\n      }\n\n      selectedRows.forEach((row) => (row[field] = trimmedValue as any));\n      return true;\n    },\n    [invalid, value, initValue, props, field],\n  );\n  const { popoverWrapper } = useGridPopoverHook({\n    className: props.className,\n    invalid,\n    save,\n  });\n\n  return popoverWrapper(\n    <div style={{ display: 'flex', flexDirection: 'row' }} className={'FormTest subComponent'}>\n      <TextInputFormatted\n        value={value}\n        onChange={(e) => setValue(e.target.value)}\n        error={invalid()}\n        formatted={props.units}\n        style={{ width: props.width ?? 240 }}\n        placeholder={props.placeholder ?? 'Type here'}\n        helpText={helpText}\n      />\n    </div>,\n  );\n};\n","import { LuiButton, LuiIcon } from '@linzjs/lui';\nimport { CellFocusedEvent, ICellEditorParams, ICellRendererParams } from 'ag-grid-community';\nimport { useEffect, useRef } from 'react';\n\nimport { GridCell } from '../GridCell';\nimport { GenericCellColDef } from '../gridRender';\nimport { ColDefT, GridBaseRow } from '../types';\n\nconst ButtonCellRenderer = <TData extends GridBaseRow>(props: ICellRendererParams<TData>) => {\n  const { data, node, column, colDef, api } = props;\n  const inputRef = useRef<HTMLButtonElement>(null);\n\n  useEffect(() => {\n    const checkFocus = (event: CellFocusedEvent) => {\n      if (event.rowIndex === node.rowIndex && event.column === column) {\n        inputRef.current?.focus();\n      }\n    };\n    api.addEventListener('cellFocused', checkFocus);\n    return () => {\n      api.removeEventListener('cellFocused', checkFocus);\n    };\n  }, [api, column, node.rowIndex]);\n\n  return (\n    <LuiButton\n      ref={inputRef}\n      className=\"lui-button-icon-only\"\n      size=\"sm\"\n      level=\"text\"\n      onClick={() => {\n        const selectedRows = [data];\n        const selectedRowIds = selectedRows.map((r) => r!.id);\n        colDef?.cellEditorParams.onClick?.({ selectedRows, selectedRowIds });\n      }}\n      style={{ display: colDef?.cellEditorParams?.visible?.(props) !== false ? '' : 'none' }}\n    >\n      <LuiIcon name=\"ic_redo\" alt=\"revert\" size=\"md\" />\n    </LuiButton>\n  );\n};\n\nexport interface GridButtonProps<TData extends GridBaseRow> {\n  visible?: (cellEditorParams: ICellEditorParams) => boolean;\n  onClick?: (props: { selectedRows: TData[]; selectedRowIds: TData['id'][] }) => void;\n}\n\nexport const GridButton = <TData extends GridBaseRow>(\n  colDef: GenericCellColDef<TData, boolean>,\n  editor: GridButtonProps<TData>,\n): ColDefT<TData> => {\n  return GridCell({\n    minWidth: 72,\n    maxWidth: 72,\n    resizable: false,\n    headerClass: 'GridHeaderAlignCenter',\n    cellClass: 'GridCellAlignCenter',\n    cellRenderer: ButtonCellRenderer,\n    cellEditorParams: {\n      ...editor,\n    },\n    ...colDef,\n  });\n};\n","import { CellFocusedEvent } from 'ag-grid-community';\nimport { CustomCellEditorProps } from 'ag-grid-react';\nimport clsx from 'clsx';\nimport { useEffect, useRef } from 'react';\n\nimport { fnOrVar } from '../../utils/util';\nimport { clickInputWhenContainingCellClicked } from '../clickInputWhenContainingCellClicked';\nimport { CellEditorCommon, GridCell } from '../GridCell';\nimport { GenericCellColDef } from '../gridRender';\nimport { ColDefT, GridBaseRow } from '../types';\n\nconst BooleanCellRenderer = (props: CustomCellEditorProps) => {\n  const { onValueChange, value, api, node, column, colDef, data } = props;\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    const checkFocus = (event: CellFocusedEvent) => {\n      if (event.rowIndex === node.rowIndex && event.column === column) {\n        inputRef.current?.focus();\n      }\n    };\n    api.addEventListener('cellFocused', checkFocus);\n    return () => {\n      api.removeEventListener('cellFocused', checkFocus);\n    };\n  }, [api, column, node.rowIndex]);\n\n  const isDisabled = !fnOrVar(colDef?.editable, props);\n\n  return (\n    <div\n      className={clsx('ag-wrapper ag-input-wrapper ag-checkbox-input-wrapper', {\n        'ag-checked': props.value,\n        'ag-disabled': isDisabled,\n      })}\n    >\n      <input\n        type=\"checkbox\"\n        className=\"ag-input-field-input ag-checkbox-input\"\n        disabled={isDisabled}\n        ref={inputRef}\n        checked={value}\n        onChange={() => {}}\n        onClick={(e) => {\n          e.stopPropagation();\n          // cell has to be in edit mode\n          // if in non-edit mode clickInputWhenContainingCellClicked will click to put it in edit mode\n          if (!onValueChange) return;\n          const params = props?.colDef?.cellEditorParams as GridEditBooleanEditorProps<any> | undefined;\n          if (!params) return;\n          // The data cannot be relied upon if grid changed whilst editing, data will be stale\n          // So I get the data from the node itself which will be up to date.\n          const selectedRows: { id: string | number }[] = [];\n          api.forEachNode((n) => {\n            if (n.data.id === data.id) {\n              selectedRows.push(n.data);\n            }\n          });\n\n          const checked = !value;\n          onValueChange(checked);\n          void params.onClick({ selectedRows, selectedRowIds: selectedRows.map((r) => r.id), checked });\n        }}\n      />\n    </div>\n  );\n};\n\nexport interface GridEditBooleanEditorProps<TData extends GridBaseRow> extends CellEditorCommon {\n  onClick: (props: {\n    selectedRows: TData[];\n    selectedRowIds: TData['id'][];\n    checked: boolean;\n  }) => Promise<boolean> | boolean;\n}\n\nexport const GridEditBoolean = <TData extends GridBaseRow>(\n  colDef: GenericCellColDef<TData, boolean>,\n  editorProps: GridEditBooleanEditorProps<TData>,\n): ColDefT<TData> => {\n  return GridCell({\n    minWidth: 64,\n    maxWidth: 64,\n    cellRenderer: BooleanCellRenderer as any,\n    cellEditor: BooleanCellRenderer,\n    cellEditorParams: editorProps,\n    onCellClicked: clickInputWhenContainingCellClicked,\n    singleClickEdit: true,\n    resizable: false,\n    editable: true,\n    cellClass: 'GridCellAlignCenter',\n    headerClass: 'GridHeaderAlignCenter',\n    ...colDef,\n  });\n};\n","import clsx from 'clsx';\n\nimport { GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormMultiSelect, GridFormMultiSelectProps } from '../gridForm/GridFormMultiSelect';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\nimport { ColDefT, GridBaseRow } from '../types';\n\nexport const GridPopoutEditMultiSelect = <TData extends GridBaseRow, TValue = any>(\n  colDef: GenericCellColDef<TData, TValue>,\n  props: GenericCellEditorProps<GridFormMultiSelectProps<TData>>,\n): ColDefT<TData, TValue> =>\n  GridCell<TData, TValue, GridFormMultiSelectProps<TData>>(colDef, {\n    editor: GridFormMultiSelect,\n    ...props,\n    editorParams: {\n      ...(props.editorParams as GridFormMultiSelectProps<TData>),\n      className: clsx('GridMultiSelect-containerMedium', props.editorParams?.className),\n    },\n  });\n","import clsx from 'clsx';\n\nimport { GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormMultiSelectGrid, GridFormMultiSelectGridProps } from '../gridForm/GridFormMultiSelectGrid';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\nimport { ColDefT, GridBaseRow } from '../types';\n\nexport const GridPopoutEditMultiSelectGrid = <TData extends GridBaseRow, TValue = any>(\n  colDef: GenericCellColDef<TData, TValue>,\n  props: GenericCellEditorProps<GridFormMultiSelectGridProps<TData>>,\n): ColDefT<TData, TValue> =>\n  GridCell<TData, TValue, GridFormMultiSelectGridProps<TData>>(colDef, {\n    editor: GridFormMultiSelectGrid,\n    ...props,\n    editorParams: {\n      ...(props.editorParams as GridFormMultiSelectGridProps<TData>),\n      className: clsx('GridMultiSelect-containerMedium', props.editorParams?.className),\n    },\n  });\n","import { ValueFormatterParams } from 'ag-grid-community';\n\nimport {\n  bearingCorrectionRangeValidator,\n  bearingCorrectionValueFormatter,\n  bearingRangeValidator,\n  bearingValueFormatter,\n} from '../../utils/bearing';\nimport { GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormEditBearing, GridFormEditBearingProps } from '../gridForm/GridFormEditBearing';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\nimport { ColDefT, GridBaseRow } from '../types';\n\nconst GridPopoverEditBearingLike = <TData extends GridBaseRow, TValue = any>(\n  colDef: GenericCellColDef<TData, TValue>,\n  props: GenericCellEditorProps<GridFormEditBearingProps<TData>> & {\n    editorParams: { formatValue: (value: any) => any };\n  },\n): ColDefT<TData, TValue> =>\n  GridCell<TData, TValue, GridFormEditBearingProps<TData>>(\n    {\n      valueFormatter: (params: ValueFormatterParams) => props.editorParams?.formatValue(params.value) ?? '',\n      ...colDef,\n    },\n    {\n      editor: GridFormEditBearing,\n      ...props,\n    },\n  );\n\nexport const GridPopoverEditBearingEditorParams = {\n  placeHolder: 'Enter bearing',\n  formatValue: bearingValueFormatter,\n  range: bearingRangeValidator,\n};\n\nexport const GridPopoverEditBearing = <TData extends GridBaseRow, TValue = any>(\n  colDef: GenericCellColDef<TData, TValue>,\n  props: GenericCellEditorProps<GridFormEditBearingProps<TData>>,\n): ColDefT<TData, TValue> =>\n  GridPopoverEditBearingLike<TData, TValue>(colDef, {\n    multiEdit: !!props.multiEdit,\n    editorParams: {\n      ...GridPopoverEditBearingEditorParams,\n      ...props.editorParams,\n    },\n  });\n\nexport const GridPopoverEditBearingCorrectionEditorParams = {\n  placeHolder: 'Enter bearing correction',\n  formatValue: bearingCorrectionValueFormatter,\n  range: bearingCorrectionRangeValidator,\n};\n\nexport const GridPopoverEditBearingCorrection = <TData extends GridBaseRow, TValue = any>(\n  colDef: GenericCellColDef<TData, TValue>,\n  props: GenericCellEditorProps<GridFormEditBearingProps<TData>>,\n): ColDefT<TData, TValue> =>\n  GridPopoverEditBearingLike<TData, TValue>(colDef, {\n    multiEdit: !!props.multiEdit,\n    editorParams: {\n      ...GridPopoverEditBearingCorrectionEditorParams,\n      ...props.editorParams,\n    },\n  });\n","import clsx from 'clsx';\n\nimport { GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormDropDown, GridFormDropDownProps } from '../gridForm/GridFormDropDown';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\nimport { ColDefT, GridBaseRow } from '../types';\n\nexport const GridPopoverEditDropDown = <TData extends GridBaseRow, TValue = any, TOptionValue = any>(\n  colDef: GenericCellColDef<TData, TValue>,\n  props: GenericCellEditorProps<GridFormDropDownProps<TData, TOptionValue>>,\n): ColDefT<TData, TValue> =>\n  GridCell<TData, TValue, GridFormDropDownProps<TData, TOptionValue>>(colDef, {\n    editor: GridFormDropDown,\n    ...props,\n    editorParams: {\n      ...(props.editorParams as GridFormDropDownProps<TData, TOptionValue>),\n      className: clsx(\n        {\n          'GridPopoverEditDropDown-containerLarge': !props.editorParams?.className?.includes(\n            'GridPopoverEditDropDown-container',\n          ),\n        },\n        props.editorParams?.className,\n      ),\n    },\n  });\n","import { LuiIcon } from '@linzjs/lui';\nimport { ICellRendererParams } from 'ag-grid-community';\nimport clsx from 'clsx';\n\nimport { fnOrVar } from '../../utils/util';\n\nexport const GridRenderPopoutMenuCell = (props: ICellRendererParams) => {\n  const disabled = !fnOrVar(props.colDef?.editable, props);\n\n  return (\n    <LuiIcon\n      name={'ic_more_vert'}\n      alt={'More actions'}\n      size={'md'}\n      className={clsx('GridPopoutMenu-burger', disabled && 'GridPopoutMenu-burgerDisabled')}\n    />\n  );\n};\n","import { GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormPopoverMenu, GridFormPopoverMenuProps } from '../gridForm/GridFormPopoverMenu';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\nimport { GridRenderPopoutMenuCell } from '../gridRender/GridRenderPopoutMenuCell';\nimport { ColDefT, GridBaseRow } from '../types';\n\n/**\n * Popout burger menu\n */\nexport const GridPopoverMenu = <TData extends GridBaseRow>(\n  colDef: GenericCellColDef<TData>,\n  custom: GenericCellEditorProps<GridFormPopoverMenuProps<TData>>,\n): ColDefT<TData> =>\n  GridCell<TData, any, GridFormPopoverMenuProps<TData>>(\n    {\n      minWidth: 48,\n      maxWidth: 48,\n      width: 40,\n      sortable: false,\n      editable: colDef.editable != null ? colDef.editable : true,\n      exportable: false,\n      cellStyle: { flex: 1, justifyContent: 'center' },\n      cellRenderer: GridRenderPopoutMenuCell,\n      // Menus open on single click, this parameter is picked up in Grid.tsx\n      singleClickEdit: true,\n      ...colDef,\n    },\n    {\n      editor: GridFormPopoverMenu,\n      preventAutoEdit: true,\n      ...custom,\n    },\n  );\n","import { GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormMessage, GridFormMessageProps } from '../gridForm/GridFormMessage';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\nimport { ColDefT, GridBaseRow } from '../types';\n\nexport const GridPopoverMessage = <TData extends GridBaseRow, TValue = any>(\n  colDef: GenericCellColDef<TData, TValue>,\n  props: GenericCellEditorProps<GridFormMessageProps<TData>>,\n): ColDefT<TData, TValue> =>\n  GridCell<TData, TValue, GridFormMessageProps<TData>>(\n    {\n      resizable: true,\n      ...colDef,\n      singleClickEdit: true,\n    },\n    {\n      editor: GridFormMessage,\n      preventAutoEdit: true,\n      ...props,\n    },\n  );\n","import { GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormTextArea, GridFormTextAreaProps } from '../gridForm/GridFormTextArea';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\nimport { ColDefT, GridBaseRow } from '../types';\n\nexport const GridPopoverTextArea = <TData extends GridBaseRow, TValue = any>(\n  colDef: GenericCellColDef<TData, TValue>,\n  params: GenericCellEditorProps<GridFormTextAreaProps<TData>>,\n): ColDefT<TData, TValue> =>\n  GridCell<TData, TValue, GridFormTextAreaProps<TData>>(colDef, { editor: GridFormTextArea, ...params });\n","import { GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormTextInput, GridFormTextInputProps } from '../gridForm/GridFormTextInput';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\nimport { ColDefT, GridBaseRow } from '../types';\n\nexport const GridPopoverTextInput = <TData extends GridBaseRow, TValue = any>(\n  colDef: GenericCellColDef<TData, TValue>,\n  params: GenericCellEditorProps<GridFormTextInputProps<TData>>,\n): ColDefT<TData, TValue> =>\n  GridCell<TData, TValue, GridFormTextInputProps<TData>>(colDef, {\n    editor: GridFormTextInput,\n    ...params,\n  });\n","import clsx from 'clsx';\nimport { forwardRef, PropsWithChildren } from 'react';\n\nexport interface GridWrapperProps {\n  className?: string | undefined;\n  maxHeight?: number | string;\n}\n\nexport const GridWrapper = forwardRef<HTMLDivElement, PropsWithChildren<GridWrapperProps>>(function GridWrapperFr(\n  { children, maxHeight, className },\n  ref,\n) {\n  return (\n    <div className={clsx('Grid-wrapper', className)} style={{ maxHeight }} ref={ref}>\n      {children}\n    </div>\n  );\n});\n","import { ColDef } from 'ag-grid-community';\n\nimport { isGridCellFiller } from './GridCellFiller';\n\nexport const getColId = (colDef: ColDef): string => colDef.colId ?? '';\nexport const isFlexColumn = (colDef: ColDef): boolean => !!colDef.flex && !isGridCellFiller(colDef);\n","import { wait } from '../utils/util';\n\nexport const waitForCondition = async (\n  error: string,\n  condition: () => boolean,\n  timeoutMs: number,\n): Promise<boolean> => {\n  const endTime = Date.now() + timeoutMs;\n  while (Date.now() < endTime) {\n    if (condition()) {\n      return true;\n    }\n    await wait(100);\n  }\n  console.warn(error);\n  return false;\n};\n","import {\n  CellPosition,\n  ColDef,\n  ColumnState,\n  CsvExportParams,\n  GridApi,\n  IRowNode,\n  ISizeColumnsToFitParams,\n  ProcessCellForExportParams,\n  RowNode,\n} from 'ag-grid-community';\nimport debounce from 'debounce-promise';\nimport { compact, defer, delay, difference, filter, isEmpty, last, pull, remove, sortBy, sumBy } from 'lodash-es';\nimport { PropsWithChildren, ReactElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { ColDefT, GridBaseRow } from '../components';\nimport { GridCellFillerColId, isGridCellFiller } from '../components/GridCellFiller';\nimport { getColId, isFlexColumn } from '../components/gridUtil';\nimport { fnOrVar, isNotEmpty, sanitiseFileName, wait } from '../utils/util';\nimport { waitForCondition } from '../utils/waitForCondition';\nimport { AutoSizeColumnsProps, AutoSizeColumnsResult, GridContext, GridFilterExternal } from './GridContext';\nimport { GridUpdatingContext } from './GridUpdatingContext';\n\nexport const colStateId = (colState: ColumnState) => colState.colId;\nexport const colStateFlexed = (colState: ColumnState) => !!colState.flex;\nexport const colStateNotFlexed = (colState: ColumnState) => !colState.flex;\n\n/**\n * Context for AgGrid operations.\n * Make sure you wrap AgGrid in this.\n * Also, make sure the provider is created in a separate component, otherwise it won't be found.\n */\nexport const GridContextProvider = <TData extends GridBaseRow>(props: PropsWithChildren): ReactElement => {\n  const { modifyUpdating, anyUpdating } = useContext(GridUpdatingContext);\n  const [gridApi, setGridApi] = useState<GridApi>();\n  const [gridReady, setGridReady] = useState(false);\n  const [quickFilter, _setQuickFilter] = useState('');\n  const [invisibleColumnIds, _setInvisibleColumnIds] = useState<string[]>();\n  const testId = useRef<string | undefined>();\n  const hasExternallySelectedItemsRef = useRef(false);\n  const idsBeforeUpdate = useRef<TData['id'][]>([]);\n  const prePopupFocusedCell = useRef<CellPosition>();\n  const [externallySelectedItemsAreInSync, setExternallySelectedItemsAreInSync] = useState(false);\n  const externalFilters = useRef<GridFilterExternal<TData>[]>([]);\n\n  const setQuickFilter = useCallback(\n    (filter: string) => {\n      // If we don't clear the focused cell focus switches back to grid when typing in the quick filter input\n      gridApi?.clearFocusedCell();\n      _setQuickFilter(filter);\n    },\n    [gridApi],\n  );\n\n  /**\n   * Make extra sure the GridCellFillerColId never gets added to invisibleColumnIds as it's dynamically determined\n   */\n  const setInvisibleColumnIds = useCallback(\n    (invisibleColumnIds: string[]) => _setInvisibleColumnIds(pull(invisibleColumnIds, GridCellFillerColId)),\n    [],\n  );\n\n  /**\n   * Set quick filter directly on grid, based on previously save quickFilter state.\n   */\n  useEffect(() => {\n    gridApi?.setGridOption('quickFilterText', quickFilter);\n  }, [gridApi, quickFilter]);\n\n  /**\n   * Wraps things that require gridApi in common handling, for when gridApi not present.\n   *\n   * @param hasApiFn Execute when api is ready.\n   * @param noApiFn Execute if api is not ready.\n   */\n  const gridApiOp = useCallback(\n    <T, R>(hasApiFn: (gridApi: GridApi) => T, noApiFn?: () => R): T | R => {\n      if (!noApiFn) {\n        noApiFn = (() => {}) as () => R;\n      }\n      return gridApi && !gridApi.isDestroyed() ? hasApiFn(gridApi) : noApiFn();\n    },\n    [gridApi],\n  );\n\n  /**\n   * Scroll row into view by Id.\n   *\n   * @param id Id to scroll into view\n   * @return true if row is found, else false\n   */\n  const ensureRowVisible = useCallback(\n    (id: number | string): boolean => {\n      if (!gridApi) return false;\n      const node = gridApi.getRowNode(`${id}`);\n      if (!node) return false;\n      defer(() => !gridApi.isDestroyed() && gridApi.ensureNodeVisible(node));\n      return true;\n    },\n    [gridApi],\n  );\n\n  const getFirstRowId = useCallback((): number => {\n    let id = 0;\n    try {\n      gridApi?.forEachNodeAfterFilterAndSort((rowNode) => {\n        id = parseInt(rowNode.id ?? '0');\n        // this is the only way to get out of the loop\n        throw 'expected exception - exit_loop';\n      });\n    } catch (ex) {\n      // ignore\n    }\n    return id;\n  }, [gridApi]);\n\n  /**\n   * Set the grid api when the grid is ready.\n   */\n  const setApis = useCallback(\n    (gridApi: GridApi | undefined, hasExternallySelectedItems: boolean, dataTestId?: string) => {\n      hasExternallySelectedItemsRef.current = hasExternallySelectedItems;\n      testId.current = dataTestId;\n      setGridApi(gridApi);\n      gridApi?.setGridOption('quickFilterText', quickFilter);\n      setGridReady(!!gridApi);\n    },\n    [quickFilter],\n  );\n\n  /**\n   * Used to check if it's OK to autosize.\n   */\n  const gridRenderState = useCallback((): null | 'empty' | 'rows-visible' => {\n    if (!gridApi) return null;\n    if (!gridApi.getDisplayedRowCount()) return 'empty';\n    if (!isEmpty(gridApi.getRenderedNodes())) return 'rows-visible';\n    // If there are rows to render, but there are no rendered nodes then we should wait\n    return null;\n  }, [gridApi]);\n\n  /**\n   * Expose scrollRowIntoView for playwright tests.\n   */\n  useEffect(() => {\n    const globalSupport = (window as any).__stepAgGrid || ((window as any).__stepAgGrid = { grids: {} });\n    if (testId.current) {\n      globalSupport.grids[testId.current] = {\n        scrollRowIntoViewById: (rowId: number | string) => {\n          if (!ensureRowVisible(rowId)) {\n            throw `scrollRowIntoView failed on grid '${testId.current}' as row with id: '${rowId}' was not found`;\n          }\n        },\n      };\n    }\n  }, [ensureRowVisible]);\n\n  /**\n   * Before a popup record the currently focused cell.\n   */\n  const prePopupOps = useCallback(() => {\n    if (!gridApi || gridApi.isDestroyed()) {\n      return;\n    }\n    prePopupFocusedCell.current = gridApi.getFocusedCell() ?? undefined;\n  }, [gridApi]);\n\n  /**\n   * Get all row id's in grid.\n   */\n  const _getAllRowIds = useCallback(() => {\n    const result: TData['id'][] = [];\n    return gridApiOp(\n      (gridApi) => {\n        gridApi.forEachNode((node) => result.push(node.data.id));\n        return result;\n      },\n      () => result,\n    );\n  }, [gridApiOp]);\n\n  /**\n   * Record all row id's before update so that we can select/flash the new rows after update.\n   */\n  const beforeUpdate = useCallback(() => {\n    idsBeforeUpdate.current = _getAllRowIds();\n  }, [_getAllRowIds]);\n\n  /**\n   * Find new row ids\n   * Uses beforeUpdate ids to find new nodes.\n   */\n  const _getNewNodes = useCallback((): IRowNode[] => {\n    return gridApiOp(\n      (gridApi) =>\n        compact(difference(_getAllRowIds(), idsBeforeUpdate.current).map((rowId) => gridApi.getRowNode('' + rowId))),\n      () => [],\n    );\n  }, [_getAllRowIds, gridApiOp]);\n\n  /**\n   * Get grid nodes via rowIds.  If rowIds has no matching node the result may be smaller than expected.\n   * This can happen if the grid has not re-rendered yet.\n   *\n   * @param rowIds Row ids to get from grid.\n   */\n  const _rowIdsToNodes = useCallback(\n    (rowIds: TData['id'][]): IRowNode[] => {\n      return gridApiOp(\n        (gridApi) => compact(rowIds.map((rowId) => gridApi.getRowNode('' + rowId))),\n        () => [] as RowNode[],\n      );\n    },\n    [gridApiOp],\n  );\n\n  /**\n   * Get ColDefs, with flattened ColGroupDefs\n   */\n  const getColumns = useCallback(\n    (\n      filterDef: keyof ColDef | ((r: ColDef) => boolean | undefined | null | number | string) = () => true,\n    ): ColDefT<TData>[] =>\n      filter(gridApi?.getColumns()?.map((col) => col.getColDef()) ?? [], filterDef) as ColDefT<TData>[],\n    [gridApi],\n  );\n\n  const getColumnIds = useCallback(\n    (filterDef: keyof ColDef | ((r: ColDef) => boolean | undefined | null | number | string) = () => true): string[] =>\n      compact(getColumns(filterDef).map(getColId)),\n    [getColumns],\n  );\n\n  /**\n   * Internal method for selecting and flashing rows.\n   *\n   * @param rowIds RowIds to select and flash. If undefined a diff is done with beforeUpdate and current state to select\n   * @param select Whether to select rows\n   * @param flash Whether to flash rows\n   * @param retryCount Table updates may not be present when this is called, so retry is needed.\n   */\n  const _selectRowsWithOptionalFlash = useCallback(\n    (\n      {\n        rowIds,\n        select,\n        flash,\n        ifNoCellFocused = false,\n        retryCount = 15,\n      }: {\n        rowIds: TData['id'][] | undefined;\n        select: boolean;\n        flash: boolean;\n        ifNoCellFocused?: boolean;\n        retryCount?: number;\n      }, // We retry for approximately 5x200ms=1s\n    ) => {\n      return gridApiOp((gridApi) => {\n        const rowNodes = rowIds ? _rowIdsToNodes(rowIds) : _getNewNodes();\n        const gridRowIdsNotUpdatedYet = rowIds && rowNodes.length !== rowIds.length; // rowIds are specified\n        const gridRowIdsNotChangedYet = !rowIds && isEmpty(rowNodes); // rowIds are from beforeUpdate\n        const gridHasNotUpdated = gridRowIdsNotUpdatedYet || gridRowIdsNotChangedYet;\n        // After retry count expires we give-up and deselect all rows, then select any subset of rows that have updated\n        if (gridHasNotUpdated && retryCount > 0) {\n          delay(\n            () =>\n              _selectRowsWithOptionalFlash({\n                rowIds,\n                select,\n                flash,\n                ifNoCellFocused,\n                retryCount: retryCount - 1,\n              }),\n            250,\n          );\n          return;\n        }\n\n        const rowsThatNeedSelecting = sortBy(\n          rowNodes.filter((node) => !node.isSelected()),\n          (node) => node.data.id,\n        );\n        const firstNode = rowsThatNeedSelecting[0];\n        if (firstNode) {\n          defer(() => !gridApi.isDestroyed() && gridApi.ensureNodeVisible(firstNode));\n          const colDefs = getColumns();\n          if (!isEmpty(colDefs)) {\n            const col = colDefs[0];\n            const rowIndex = firstNode.rowIndex;\n            if (rowIndex != null && col != null) {\n              const colId = col.colId;\n              // We need to make sure we aren't currently editing a cell otherwise tests will fail\n              // as they will start to edit the cell before this stuff has a chance to run\n              colId &&\n                delay(() => {\n                  if (\n                    !gridApi.isDestroyed() &&\n                    isEmpty(gridApi.getEditingCells()) &&\n                    (!ifNoCellFocused || gridApi.getFocusedCell() == null)\n                  ) {\n                    gridApi.setFocusedCell(rowIndex, colId);\n                    // It may be that the first cell is the selection cell, this doesn't exist as a colDef\n                    // so instead, I just try and select it.  If it doesn't exist selection will stay on the\n                    // previously focused cell\n                    gridApi.setFocusedCell(rowIndex, 'ag-Grid-SelectionColumn');\n                  }\n                }, 100);\n            }\n          }\n        }\n        if (select) {\n          // Select rows that shouldn't be selected\n          rowsThatNeedSelecting.forEach((node) => node.setSelected(true));\n          // Unselect rows that shouldn't be selected\n          gridApi.getSelectedNodes()?.forEach((node) => {\n            if (node && !rowNodes.includes(node)) {\n              node.setSelected(false);\n            }\n          });\n        }\n        if (flash) {\n          delay(() => {\n            try {\n              !gridApi.isDestroyed && gridApi.flashCells({ rowNodes });\n            } catch {\n              // ignore, flash cells sometimes throws errors as nodes have gone out of scope\n            }\n          }, 250);\n        }\n      });\n    },\n    [_getNewNodes, _rowIdsToNodes, getColumns, gridApiOp],\n  );\n\n  const selectRowsById = useCallback(\n    (rowIds?: TData['id'][]) => _selectRowsWithOptionalFlash({ rowIds, select: true, flash: false }),\n    [_selectRowsWithOptionalFlash],\n  );\n\n  const selectRowsByIdWithFlash = useCallback(\n    (rowIds?: TData['id'][]) => _selectRowsWithOptionalFlash({ rowIds, select: true, flash: true }),\n    [_selectRowsWithOptionalFlash],\n  );\n\n  const flashRows = useCallback(\n    (rowIds?: TData['id'][]) => _selectRowsWithOptionalFlash({ rowIds, select: false, flash: true }),\n    [_selectRowsWithOptionalFlash],\n  );\n\n  const selectRowsDiff = useCallback(\n    async (fn: () => Promise<any>) => {\n      beforeUpdate();\n      await fn();\n      _selectRowsWithOptionalFlash({ rowIds: undefined, select: true, flash: false });\n    },\n    [_selectRowsWithOptionalFlash, beforeUpdate],\n  );\n\n  const selectRowsWithFlashDiff = useCallback(\n    async (fn: () => Promise<any>) => {\n      beforeUpdate();\n      await fn();\n      _selectRowsWithOptionalFlash({ rowIds: undefined, select: true, flash: true });\n    },\n    [_selectRowsWithOptionalFlash, beforeUpdate],\n  );\n\n  const flashRowsDiff = useCallback(\n    async (fn: () => Promise<any>) => {\n      beforeUpdate();\n      await fn();\n      _selectRowsWithOptionalFlash({ rowIds: undefined, select: false, flash: true });\n    },\n    [_selectRowsWithOptionalFlash, beforeUpdate],\n  );\n\n  const focusByRowById = useCallback(\n    (rowId: TData['id'], ifNoCellFocused?: boolean) =>\n      _selectRowsWithOptionalFlash({ rowIds: [rowId], select: false, flash: false, ifNoCellFocused }),\n    [_selectRowsWithOptionalFlash],\n  );\n\n  const getSelectedRows = useCallback(<T,>(): T[] => {\n    return gridApiOp(\n      (gridApi) => gridApi.getSelectedRows(),\n      () => [],\n    );\n  }, [gridApiOp]);\n\n  const getFilteredSelectedRows = useCallback(<T,>(): T[] => {\n    return gridApiOp((gridApi) => {\n      const rowData: T[] = [];\n      gridApi.forEachNodeAfterFilter((node) => {\n        if (node.isSelected()) rowData.push(node.data);\n      });\n      return rowData;\n    });\n  }, [gridApiOp]);\n\n  const getSelectedRowIds = useCallback(\n    (): TData['id'][] => getSelectedRows().map((row) => (row as any).id as number),\n    [getSelectedRows],\n  );\n\n  const getFilteredSelectedRowIds = useCallback(\n    (): TData['id'][] => getFilteredSelectedRows().map((row) => (row as any).id as number),\n    [getFilteredSelectedRows],\n  );\n\n  const editingCells = useCallback((): boolean => {\n    return gridApiOp(\n      (gridApi) => isNotEmpty(gridApi.getEditingCells()),\n      () => false,\n    );\n  }, [gridApiOp]);\n\n  /**\n   * Scroll last selected row into view on grid sort change\n   */\n  const ensureSelectedRowIsVisible = useCallback((): void => {\n    gridApiOp((gridApi) => {\n      const selectedNodes = gridApi.getSelectedNodes();\n      if (isEmpty(selectedNodes)) return;\n      defer(() => !gridApi.isDestroyed() && gridApi.ensureNodeVisible(last(selectedNodes)));\n    });\n  }, [gridApiOp]);\n\n  /**\n   * Resize columns to fit container\n   *\n   * This is used to calculate the preferred size of columns.\n   * It sizes the flex columns first and then clears the calculated width.\n   * If you don't clear flex column widths ag-grid gets confused and does random sizing's.\n   * Then we size the flexed columns.\n   */\n  const autoSizeColumns = useCallback(\n    async ({ skipHeader, colIds, userSizedColIds }: AutoSizeColumnsProps = {}): Promise<AutoSizeColumnsResult> => {\n      if (!gridApi || !gridApi.getColumnState()) {\n        return null;\n      }\n\n      try {\n        const colIdsSet = colIds instanceof Set ? colIds : new Set(colIds);\n\n        const getVisibleColStates = () => {\n          const colStates = gridApi.getColumnState();\n          return colStates.filter((colState) => {\n            const colId = colState.colId;\n            return (isEmpty(colIdsSet) || colIdsSet.has(colId)) && !userSizedColIds?.has(colId);\n          });\n        };\n        const getFlexColStates = () => getVisibleColStates().filter(colStateFlexed);\n        const getNonFlexColStates = () => getVisibleColStates().filter(colStateNotFlexed);\n\n        // You cannot autosize flex columns it will break layout randomly\n        // So, a flex column is assumed to be 150 wide, unless width is provided\n        const flexColumns = getFlexColStates().map(colStateId);\n        let width = 0;\n        flexColumns.forEach((colId) => {\n          const colDef = gridApi.getColumnDef(colId) as { flexAutoSizeWidth?: number } | undefined;\n          width += colDef?.flexAutoSizeWidth ?? 200;\n        });\n\n        const nonFlexColumns = getNonFlexColStates();\n        const nonFlexColumnIds = nonFlexColumns.map(colStateId);\n        gridApi.autoSizeColumns({ colIds: nonFlexColumnIds, skipHeader });\n\n        const calcSubWidth = () => {\n          const updatedFlexColumns = getVisibleColStates().filter((colState) =>\n            nonFlexColumnIds.includes(colState.colId),\n          );\n          return sumBy(\n            updatedFlexColumns.filter((col) => !col.hide),\n            'width',\n          );\n        };\n\n        // ag-grid updates widths asynchronously, so we wait here for the default calculated width to change\n        let lastSubWidth = calcSubWidth();\n        const endTime = Date.now() + 1000;\n        while (Date.now() < endTime) {\n          await wait(40);\n          const newSubWidth = calcSubWidth();\n          if (lastSubWidth !== newSubWidth) {\n            lastSubWidth = newSubWidth;\n            break;\n          }\n        }\n\n        width += lastSubWidth;\n\n        gridApi.sizeColumnsToFit();\n        return {\n          width,\n        };\n      } catch (ex) {\n        console.info('autosize failed', ex);\n        return null;\n      }\n    },\n    [gridApi],\n  );\n\n  /**\n   * Resize columns to fit container\n   */\n  const sizeColumnsToFit = useCallback(\n    (paramsOrGridWidth?: ISizeColumnsToFitParams): void => {\n      if (gridApi && !gridApi?.isDestroyed()) {\n        gridApi.sizeColumnsToFit(paramsOrGridWidth);\n      }\n    },\n    [gridApi],\n  );\n\n  /**\n   *\n   */\n  const resetFocusedCellAfterCellEditing = useCallback((): void => {\n    if (!gridApi || gridApi.isDestroyed() || startCellEditingInProgressRef.current) {\n      return;\n    }\n    if (prePopupFocusedCell.current) {\n      gridApi.setFocusedCell(prePopupFocusedCell.current.rowIndex, prePopupFocusedCell.current.column);\n      prePopupFocusedCell.current = undefined;\n    }\n  }, [gridApi]);\n\n  // waitForExternallySelectedItemsToBeInSync can't use the state as it won't be updated during function execution\n  const externallySelectedItemsAreInSyncRef = useRef(false);\n  useEffect(() => {\n    externallySelectedItemsAreInSyncRef.current = externallySelectedItemsAreInSync;\n  }, [externallySelectedItemsAreInSync]);\n\n  const waitForExternallySelectedItemsToBeInSync = useCallback(async () => {\n    if (!hasExternallySelectedItemsRef.current) {\n      externallySelectedItemsAreInSyncRef.current = true;\n      return;\n    }\n    // Wait for up to 5 seconds\n    for (let i = 0; i < 5000 / 200 && !externallySelectedItemsAreInSyncRef.current; i++) {\n      await wait(200);\n    }\n    if (!externallySelectedItemsAreInSyncRef.current) {\n      console.error('externallySelectedItems did not sync with ag-grid selection');\n    }\n  }, []);\n\n  const startCellEditingInProgressRef = useRef(false);\n  const startCellEditing = useCallback(\n    async ({ rowId, colId }: { rowId: TData['id']; colId: string }) => {\n      if (!gridApi || startCellEditingInProgressRef.current) {\n        return;\n      }\n      startCellEditingInProgressRef.current = true;\n\n      try {\n        // Edit in progress so don't edit until finished, timeout waiting after 5s\n        if (\n          !(await waitForCondition(\n            'startCellEditing failed as update still in progress, waited for 15 seconds',\n            () => !anyUpdating(),\n            15000,\n          ))\n        ) {\n          return;\n        }\n\n        const colDef = gridApi.getColumnDef(colId);\n        if (!colDef) {\n          return;\n        }\n\n        const rowNode = gridApi.getRowNode(`${rowId}`);\n        if (!rowNode) {\n          return;\n        }\n\n        prePopupOps();\n        const shouldSelectNode = !rowNode.isSelected();\n        if (shouldSelectNode) {\n          externallySelectedItemsAreInSyncRef.current = false;\n          setExternallySelectedItemsAreInSync(false);\n          rowNode.setSelected(true, true);\n          await waitForExternallySelectedItemsToBeInSync();\n        }\n\n        const rowIndex = rowNode.rowIndex;\n        if (rowIndex != null) {\n          defer(() => {\n            if (!gridApi.isDestroyed()) {\n              gridApi.startEditingCell({\n                rowIndex,\n                colKey: colId,\n              });\n            }\n          });\n        }\n      } finally {\n        startCellEditingInProgressRef.current = false;\n      }\n    },\n    [anyUpdating, gridApi, prePopupOps, waitForExternallySelectedItemsToBeInSync],\n  );\n\n  const bulkEditingCompleteCallbackRef = useRef<() => Promise<void> | void>();\n  const onBulkEditingComplete = useCallback(async () => {\n    resetFocusedCellAfterCellEditing();\n    await bulkEditingCompleteCallbackRef.current?.();\n  }, [resetFocusedCellAfterCellEditing]);\n\n  const setOnBulkEditingComplete = useCallback(\n    (cellEditingCompleteCallback: (() => Promise<void> | void) | undefined) => {\n      bulkEditingCompleteCallbackRef.current = cellEditingCompleteCallback;\n    },\n    [],\n  );\n\n  /**\n   * Returns true if an editable cell on same row was selected, else false.\n   */\n  const selectNextEditableCell = useCallback(\n    async (tabDirection: -1 | 1): Promise<boolean> => {\n      // Pretend it succeeded to prevent unwanted cellEditingCompleteCallback\n      if (!gridApi) {\n        return true;\n      }\n\n      const focusedCellIsEditable = () => {\n        const focusedCell = gridApi.isDestroyed() ? null : gridApi.getFocusedCell();\n        const nextColumn = focusedCell?.column;\n        const nextColDef = nextColumn?.getColDef();\n        const rowNode = focusedCell && gridApi.getDisplayedRowAtIndex(focusedCell?.rowIndex);\n        return (\n          !!(rowNode && nextColumn && nextColDef) &&\n          nextColumn.isCellEditable(rowNode) &&\n          !nextColDef.cellEditorParams?.preventAutoEdit &&\n          !nextColDef.cellRendererParams?.editAction\n        );\n      };\n\n      // Just in case I've missed something, we don't want the loop to hang everything\n      for (let maxIterations = 0; maxIterations < 50; maxIterations++) {\n        if (gridApi.isDestroyed()) {\n          return true;\n        }\n        // Prevent resetting focus to original editing cell\n        prePopupFocusedCell.current = undefined;\n\n        const preRow = gridApi.getFocusedCell();\n        // If we don't do this ag-grid will do its own continuation of an edit on tab, we don't want that as\n        // we are managing it ourselves\n        const didTab = tabDirection === 1 ? gridApi.tabToNextCell() : gridApi.tabToPreviousCell();\n        if (!didTab) {\n          break;\n        }\n\n        if (gridApi.isDestroyed()) {\n          return true;\n        }\n        const postRow = gridApi.getFocusedCell();\n        if (preRow?.rowIndex !== postRow?.rowIndex || preRow?.column === postRow?.column) {\n          // We didn't find an editable cell in the same row, or the cell column didn't change\n          // implying it was start/end of grid\n          break;\n        }\n\n        if (focusedCellIsEditable()) {\n          const focusedCell = gridApi.getFocusedCell();\n          if (focusedCell) {\n            const rowNode = gridApi.getDisplayedRowAtIndex(focusedCell.rowIndex);\n            const rowId = rowNode?.data?.id;\n            if (rowId == null) {\n              return false;\n            }\n            await startCellEditing({ rowId, colId: focusedCell.column.getColId() });\n            return true;\n          }\n        }\n      }\n      return false;\n    },\n    [gridApi, startCellEditing],\n  );\n\n  const updatingCells = useCallback(\n    async (\n      props: { selectedRows: GridBaseRow[]; field?: string },\n      fnUpdate: (selectedRows: any[]) => Promise<boolean>,\n      setSaving?: (saving: boolean) => void,\n      tabDirection?: 1 | 0 | -1,\n    ): Promise<boolean> => {\n      try {\n        setSaving?.(true);\n\n        return await gridApiOp(async (gridApi) => {\n          const selectedRows = props.selectedRows;\n\n          let ok = false;\n\n          await modifyUpdating(\n            props.field ?? '',\n            selectedRows.map((data) => data.id),\n            async () => {\n              // Need to refresh to get spinners to work on all rows\n              gridApi.refreshCells({ rowNodes: props.selectedRows as RowNode[], force: true });\n              ok = await fnUpdate(selectedRows).catch((ex) => {\n                console.error('Exception during modifyUpdating', ex);\n                return false;\n              });\n            },\n          );\n\n          // async processes need to refresh their own rows\n          gridApi.refreshCells({ rowNodes: selectedRows as RowNode[], force: true });\n\n          if (gridApi.isDestroyed()) {\n            return ok;\n          }\n\n          if (ok) {\n            //const cell = gridApi.getFocusedCell();\n            //if (cell && gridApi.getFocusedCell() == null) {\n            //  !gridApi.isDestroyed && gridApi.setFocusedCell(cell.rowIndex, cell.column);\n            // }\n\n            // This is needed to trigger postSortRowsHook\n            !gridApi.isDestroyed && gridApi.refreshClientSideRowModel();\n          }\n\n          void (async () => {\n            // Only focus next cell if user hasn't already manually changed focus\n            const postPopupFocusedCell = gridApi.getFocusedCell();\n            if (\n              prePopupFocusedCell.current &&\n              postPopupFocusedCell &&\n              prePopupFocusedCell.current.rowIndex == postPopupFocusedCell.rowIndex &&\n              prePopupFocusedCell.current.column.getColId() == postPopupFocusedCell.column.getColId()\n            ) {\n              if (!tabDirection || !(await selectNextEditableCell(tabDirection))) {\n                await onBulkEditingComplete();\n              }\n            } else {\n              await onBulkEditingComplete();\n            }\n          })();\n\n          return ok;\n        });\n      } finally {\n        setSaving?.(false);\n      }\n    },\n    [gridApiOp, modifyUpdating, onBulkEditingComplete, selectNextEditableCell],\n  );\n\n  const redrawRows: any = useMemo(\n    () =>\n      debounce((rowNodes?: IRowNode[]) => {\n        try {\n          gridApi && gridApi.redrawRows(rowNodes ? { rowNodes } : undefined);\n        } catch (ex) {\n          console.error(ex);\n        }\n      }, 50),\n    [gridApi],\n  );\n\n  const onFilterChanged = useMemo(\n    () =>\n      debounce(() => {\n        if (!gridApi || gridApi?.isDestroyed()) {\n          return;\n        }\n        // This is terrible, but there's no other way for me to check whether a filter has changed the grid\n        const getDisplayedRowsHash = () => {\n          const arr: any[] = [];\n          gridApi?.forEachNodeAfterFilter((rowNode) => {\n            arr.push(rowNode.id);\n          });\n          return arr.join('|');\n        };\n\n        if (gridApi) {\n          const hasFocusedCell = gridApi.getFocusedCell();\n          const preHash = hasFocusedCell && getDisplayedRowsHash();\n          gridApi.onFilterChanged();\n          const postHash = hasFocusedCell && getDisplayedRowsHash();\n          // Ag-grid has a bug where if a focused cell comes into view after a filter the filter loses focus\n          // So the focus is cleared to prevent this\n          preHash !== postHash && gridApi.clearFocusedCell();\n        }\n      }, 200),\n    [gridApi],\n  );\n\n  const addExternalFilter = useCallback(\n    (filter: GridFilterExternal<TData>) => {\n      externalFilters.current.push(filter);\n      void onFilterChanged();\n    },\n    [onFilterChanged],\n  );\n\n  const removeExternalFilter = useCallback(\n    (filter: GridFilterExternal<TData>) => {\n      remove(externalFilters.current, (v) => v === filter);\n      void onFilterChanged();\n    },\n    [onFilterChanged],\n  );\n\n  const isExternalFilterPresent = useCallback((): boolean => !isEmpty(externalFilters.current), []);\n\n  const doesExternalFilterPass = useCallback(\n    (node: IRowNode): boolean => externalFilters.current.every((filter) => filter(node.data, node)),\n    [],\n  );\n\n  const getColDef = useCallback(\n    (colId?: string): ColDef | undefined => (!!colId && gridApi?.getColumnDef(colId)) || undefined,\n    [gridApi],\n  );\n\n  const showNoRowsOverlay = useCallback((): void => {\n    gridApi?.showNoRowsOverlay();\n  }, [gridApi]);\n\n  /**\n   * Apply column visibility\n   */\n  useEffect(() => {\n    if (!gridApi || !invisibleColumnIds) return;\n\n    // show all columns that aren't invisible\n    const newVisibleColumns = getColumns(\n      (col) => !col.lockVisible && col.colId && !invisibleColumnIds.includes(col.colId) && !isGridCellFiller(col),\n    );\n    // If there's no flex column showing add the filler column if defined\n    const visibleColumnsContainsAFlex = newVisibleColumns.some(isFlexColumn);\n    if (!visibleColumnsContainsAFlex) {\n      const fillerColumn = getColumns(isGridCellFiller)[0];\n      fillerColumn && newVisibleColumns.push(fillerColumn);\n    }\n    gridApi.setColumnsVisible(compact(newVisibleColumns.map(getColId)), true);\n\n    // Hide the filler column if there's already a flex column\n    const invisibleColumnIdsWithOptionalFiller = visibleColumnsContainsAFlex\n      ? [...invisibleColumnIds, GridCellFillerColId]\n      : invisibleColumnIds;\n    gridApi.setColumnsVisible(invisibleColumnIdsWithOptionalFiller, false);\n  }, [invisibleColumnIds, getColumns, gridApi]);\n\n  /**\n   * Download visible columns as a CSV\n   */\n  const downloadCsv = useCallback(\n    (csvExportParams?: CsvExportParams) => {\n      if (!gridApi) return;\n\n      const fileName = csvExportParams?.fileName && sanitiseFileName(fnOrVar(csvExportParams.fileName));\n\n      const columnKeys = gridApi\n        .getColumnState()\n        .filter((cs) => {\n          const colDef = gridApi.getColumnDef(cs.colId);\n          return !cs.hide && colDef && !isGridCellFiller(colDef) && colDef.headerComponentParams?.exportable !== false;\n        })\n        .map((cs) => cs.colId);\n      gridApi.exportDataAsCsv({\n        columnKeys,\n        processCellCallback: downloadCsvUseValueFormattersProcessCellCallback,\n        ...csvExportParams,\n        fileName,\n      });\n    },\n    [gridApi],\n  );\n\n  return (\n    <GridContext.Provider\n      value={{\n        gridRenderState,\n        getColDef,\n        getColumns,\n        getColumnIds,\n        invisibleColumnIds,\n        setInvisibleColumnIds,\n        gridReady,\n        prePopupOps,\n        setApis,\n        setQuickFilter,\n        selectRowsById,\n        selectRowsDiff,\n        selectRowsByIdWithFlash,\n        selectRowsWithFlashDiff,\n        flashRows,\n        flashRowsDiff,\n        focusByRowById,\n        getSelectedRows,\n        getFilteredSelectedRows,\n        getSelectedRowIds,\n        getFilteredSelectedRowIds,\n        getFirstRowId,\n        editingCells,\n        ensureRowVisible,\n        ensureSelectedRowIsVisible,\n        sizeColumnsToFit,\n        autoSizeColumns,\n        startCellEditing,\n        resetFocusedCellAfterCellEditing,\n        updatingCells,\n        redrawRows,\n        externallySelectedItemsAreInSync,\n        setExternallySelectedItemsAreInSync,\n        waitForExternallySelectedItemsToBeInSync,\n        addExternalFilter,\n        removeExternalFilter,\n        isExternalFilterPresent,\n        doesExternalFilterPass,\n        downloadCsv,\n        onBulkEditingComplete,\n        setOnBulkEditingComplete,\n        showNoRowsOverlay,\n      }}\n    >\n      {props.children}\n    </GridContext.Provider>\n  );\n};\n\n/**\n * Aggrid defaults to using getters and ignores formatters.\n * step-ag-grid by default has a valueFormatter for every column that defaults to the getter if no valueFormatter\n * This function uses valueFormatter by default\n */\nexport const downloadCsvUseValueFormattersProcessCellCallback = (params: ProcessCellForExportParams): string => {\n  const encodeToString = (value: any): string => {\n    // Convert nullish values to blank\n    if (value === '-' || value === '–' || value == null) {\n      return '';\n    }\n    if (typeof value === 'string') {\n      return value;\n    }\n    return JSON.stringify(value);\n  };\n\n  // Try to use valueFormatter\n  const colDef = params?.column?.getColDef();\n  if (!colDef) return encodeToString(params.value);\n\n  // All columns in step-ag-grid have a default valueFormatter\n  // If you have custom a renderer you need to define your own valueFormatter to produce the text value\n  const valueFormatter = colDef.valueFormatter;\n  // If no valueFormatter then value _must_ be a string\n  if (valueFormatter == null) {\n    if (params.value != null && typeof params.value !== 'string') {\n      console.error(`downloadCsv: valueFormatter missing and getValue is not a string, colId: ${colDef.colId}`);\n    }\n    return encodeToString(params.value);\n  }\n\n  // We don't have access to registered functions, so we can't call them\n  if (typeof valueFormatter !== 'function') {\n    console.error(\n      `downloadCsv: String type (registered) value formatters are unsupported in downloadCsv, colId: ${colDef.colId}`,\n    );\n    return encodeToString(params.value);\n  }\n\n  const result = valueFormatter({ ...params, data: params.node?.data, colDef, node: null });\n  // type may not be string due to casting, leave the type check in\n  if (params.value != null && typeof result !== 'string') {\n    console.error(`downloadCsv: valueFormatter is returning non string values, colDef:\", colId: ${colDef.colId}`);\n  }\n  // We add an extra encodeToString here just in case valueFormatter is returning non string values\n  return encodeToString(result);\n};\n","import { castArray, flatten, isEmpty, remove } from 'lodash-es';\nimport { PropsWithChildren, useCallback, useRef, useState } from 'react';\n\nimport { GridUpdatingContext } from './GridUpdatingContext';\n\nexport type GridUpdatingContextStatus = Record<string, (number | string)[] | undefined>;\n\ntype FieldName = string;\ntype IdList = (number | string)[];\ntype UpdatingBlock = Record<FieldName, IdList[]>;\n\nexport const GridUpdatingContextProvider = (props: PropsWithChildren) => {\n  const updatingBlocks = useRef<UpdatingBlock>({});\n  const updating = useRef<GridUpdatingContextStatus>({});\n  const [updatedDep, setUpdatedDep] = useState(0);\n\n  const resetUpdating = useCallback(() => {\n    const mergedUpdatingBlocks: GridUpdatingContextStatus = {};\n    for (const key in updatingBlocks.current) {\n      const arr = flatten(updatingBlocks.current[key]);\n      if (arr.length) {\n        mergedUpdatingBlocks[key] = arr;\n      }\n    }\n    updating.current = mergedUpdatingBlocks;\n    setUpdatedDep((updatedDep) => updatedDep + 1);\n  }, []);\n\n  const updatingCols = useCallback(() => Object.keys(updating.current), []);\n\n  const modifyUpdating = useCallback(\n    async (fields: string | string[], ids: (number | string)[], fn: () => void | Promise<void>) => {\n      const idRef = [...ids];\n      castArray(fields).forEach((field) => {\n        const fieldUpdatingIds = updatingBlocks.current[field] ?? (updatingBlocks.current[field] = []);\n        fieldUpdatingIds.push(idRef);\n      });\n      resetUpdating();\n      await fn();\n      castArray(fields).forEach((field) => {\n        const fieldUpdatingIds = updatingBlocks.current[field];\n        remove(fieldUpdatingIds, (idList) => idList === idRef);\n      });\n      resetUpdating();\n    },\n    [resetUpdating],\n  );\n\n  const anyUpdating = useCallback((): boolean => {\n    return !isEmpty(updating.current);\n  }, []);\n\n  const checkUpdating = useCallback(\n    (fields: string | string[], id: number | string): boolean =>\n      castArray(fields).some((f) => updating.current[f]?.includes(id)),\n    [],\n  );\n\n  return (\n    <GridUpdatingContext.Provider value={{ modifyUpdating, anyUpdating, checkUpdating, updatingCols, updatedDep }}>\n      {props.children}\n    </GridUpdatingContext.Provider>\n  );\n};\n","import './ActionButton.scss';\n\nimport { LuiButton, LuiIcon, LuiMiniSpinner } from '@linzjs/lui';\nimport { LuiButtonProps } from '@linzjs/lui/dist/components/LuiButton/LuiButton';\nimport { IconName } from '@linzjs/lui/dist/components/LuiIcon/LuiIcon';\nimport clsx from 'clsx';\nimport { CSSProperties, ReactElement, useEffect, useState } from 'react';\n\nimport { usePrevious } from './reactUtils';\nimport { useStateDeferred } from './stateDeferredHook';\n\nexport interface ActionButtonProps {\n  icon: IconName;\n  name?: string;\n  'aria-label'?: string;\n  inProgressName?: string;\n  title?: string;\n  dataTestId?: string;\n  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'ns';\n  iconPosition?: 'left' | 'right';\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  className?: 'ActionButton-fill' | 'ActionButton-tight' | string;\n  onClick: () => Promise<void> | void;\n  level?: LuiButtonProps['level'];\n  style?: CSSProperties;\n  disabled?: boolean;\n}\n\n// Kept this less than one second, so I don't have issues with waitFor as it defaults to 1s\nconst minimumInProgressTimeMs = 950;\n\nexport const ActionButton = ({\n  icon,\n  name,\n  inProgressName,\n  disabled,\n  dataTestId,\n  style,\n  className,\n  title,\n  onClick,\n  size = 'sm',\n  iconPosition = 'left',\n  level = 'tertiary',\n  'aria-label': ariaLabel,\n}: ActionButtonProps): ReactElement => {\n  const [inProgress, setInProgress] = useState(false);\n  const lastInProgress = usePrevious(inProgress ?? false);\n  const [localInProgress, setLocalInProgress, setLocalInProgressDeferred] = useStateDeferred<boolean>(inProgress);\n\n  useEffect(() => {\n    if (inProgress == lastInProgress) return;\n    inProgress ? setLocalInProgress(true) : setLocalInProgressDeferred(false, minimumInProgressTimeMs);\n  }, [inProgress, lastInProgress, setLocalInProgress, setLocalInProgressDeferred]);\n\n  const buttonText = (\n    <span className={'ActionButton-minimalArea'}>\n      <span className={'ActionButton-minimalAreaDisplay'}>{(localInProgress ? inProgressName : name) ?? name}</span>\n      {/* This makes sure the button expands to fill maximum length text at all times */}\n      <span className={'ActionButton-minimalAreaExpand'}>{name}</span>\n    </span>\n  );\n\n  return (\n    <LuiButton\n      data-testid={dataTestId}\n      type={'button'}\n      level={level}\n      title={title ?? ariaLabel ?? name}\n      buttonProps={{ 'aria-label': ariaLabel ?? name }}\n      className={clsx(\n        'lui-button-icon-right',\n        'ActionButton',\n        className,\n        localInProgress && 'ActionButton-inProgress',\n        name != null && !className?.includes('ActionButton-fill') && 'ActionButton-minimal',\n        name == null && 'ActionButton-iconOnly',\n      )}\n      size={'lg'}\n      style={style}\n      onClick={() => {\n        const promise = onClick();\n        const isPromise = typeof promise !== 'undefined';\n        if (isPromise) {\n          setInProgress(true);\n          void promise.finally(() => {\n            setInProgress(false);\n          });\n        }\n      }}\n      disabled={localInProgress || disabled}\n    >\n      {iconPosition === 'right' && buttonText}\n      {localInProgress && (\n        <div style={{ position: 'relative' }}>\n          <LuiMiniSpinner\n            size={14}\n            divProps={{\n              'data-testid': 'loading-spinner',\n              style: {\n                position: 'absolute',\n                left: 4,\n                top: -10,\n                bottom: 10,\n                right: -4,\n              },\n              role: 'status',\n              'aria-label': 'Loading',\n            }}\n          />\n        </div>\n      )}\n      <LuiIcon name={icon} alt={ariaLabel ?? name ?? ''} size={size} />\n      {iconPosition === 'left' && buttonText}\n    </LuiButton>\n  );\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useDeferredPromise = <T>() => {\n  const promiseResolve = useRef<((value: T | PromiseLike<T>) => void) | undefined>();\n  const promiseReject = useRef<() => void>();\n\n  // End promise on unload\n  useEffect(() => {\n    return () => {\n      promiseReject.current && promiseReject.current();\n    };\n  }, []);\n\n  return {\n    invoke: () =>\n      new Promise<T>((resolve, reject) => {\n        promiseResolve.current = resolve;\n        promiseReject.current = reject;\n      }),\n    resolve: (value: T) => {\n      if (!promiseResolve.current) {\n        console.error(\"Promise not invoked so can't resolve\");\n        return;\n      }\n      const temp = promiseResolve.current;\n      promiseResolve.current = undefined;\n      promiseReject.current = undefined;\n      temp(value);\n    },\n    reject: () => {\n      if (!promiseResolve.current) {\n        console.error(\"Promise not invoked so can't reject\");\n        return;\n      }\n      const reject = promiseReject.current;\n      promiseResolve.current = undefined;\n      promiseReject.current = undefined;\n      if (reject) reject();\n    },\n  };\n};\n"],"names":["_jsx","LuiMiniSpinner","_jsxs","global","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","useRef","createContext","useContext","negate","isEmpty","useState","useMemo","unstable_batchedUpdates","findIndex","memo","forwardRef","_Fragment","useCallback","defer","useTransition","useReducer","flushSync","debounce","createPortal","cloneElement","useImperativeHandle","Fragment","LuiStatusSpinner","LuiIcon","ModuleRegistry","AllCommunityModule","xorBy","last","difference","delay","omit","AgGridReact","sortBy","LuiButtonGroup","LuiButton","LuiCheckboxInput","createRoot","partition","compact","pick","groupBy","fromPairs","toPairs","isEqual","useId","pull","filter","sumBy","remove","flatten","castArray"],"mappings":"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","x_google_ignoreList":[1,2,3,6,25,26,63,72,76,77]}