{"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","../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","../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","../node_modules/style-inject/dist/style-inject.es.js","../src/lui/FormError.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/contexts/GridContextProvider.tsx","../src/contexts/GridUpdatingContextProvider.tsx","../src/lui/reactUtils.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 } from 'ag-grid-community';\nimport { CsvExportParams } from 'ag-grid-community';\nimport { createContext, useContext } from 'react';\n\nimport { ColDefT, GridBaseRow } from '../components';\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  includeFlex?: boolean;\n}\n\nexport type AutoSizeColumnsResult = { width: number } | null;\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  postPopupOps: () => void;\n  setQuickFilter: (quickFilter: string) => void;\n  editingCells: () => boolean;\n  getSelectedRows: <T extends GridBaseRow>() => T[];\n  getFilteredSelectedRows: <T extends GridBaseRow>() => T[];\n  getSelectedRowIds: () => number[];\n  getFilteredSelectedRowIds: () => number[];\n  selectRowsDiff: (updateFn: () => Promise<any>) => Promise<void>;\n  selectRowsWithFlashDiff: (updateFn: () => Promise<any>) => Promise<void>;\n  selectRowsById: (rowIds?: number[]) => void;\n  selectRowsByIdWithFlash: (rowIds?: number[]) => void;\n  flashRows: (rowIds?: number[]) => void;\n  flashRowsDiff: (updateFn: () => Promise<any>) => Promise<void>;\n  focusByRowById: (rowId: number, ifNoCellFocused?: boolean) => void;\n  ensureRowVisible: (id: number | string) => boolean;\n  ensureSelectedRowIsVisible: () => void;\n  getFirstRowId: () => number;\n  autoSizeColumns: (props?: AutoSizeColumnsProps) => AutoSizeColumnsResult;\n  sizeColumnsToFit: () => void;\n  cancelEdit: () => void;\n  startCellEditing: ({ rowId, colId }: { rowId: number; colId: string }) => Promise<void>;\n  stopEditing: () => 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  setOnCellEditingComplete: (callback: (() => void) | undefined) => void;\n  showNoRowsOverlay: () => void;\n}\n\nexport const GridContext = createContext<GridContextType<any>>({\n  gridReady: false,\n  gridRenderState: () => null,\n  getColDef: () => {\n    console.error('no context provider for getColDef');\n    return undefined;\n  },\n  getColumns: () => {\n    console.error('no context provider for getColumns');\n    return [];\n  },\n  getColumnIds: () => {\n    console.error('no context provider for getColumnIds');\n    return [];\n  },\n  invisibleColumnIds: undefined,\n  setInvisibleColumnIds: () => {\n    console.error('no context provider for setInvisibleColumnIds');\n  },\n  prePopupOps: () => {\n    console.error('no context provider for prePopupOps');\n  },\n  postPopupOps: () => {\n    console.error('no context provider for prePopupOps');\n  },\n  externallySelectedItemsAreInSync: false,\n  setApis: () => {\n    console.error('no context provider for setApis');\n  },\n  setQuickFilter: () => {\n    console.error('no context provider for setQuickFilter');\n  },\n  selectRowsById: () => {\n    console.error('no context provider for selectRows');\n  },\n  getSelectedRows: <T,>(): T[] => {\n    console.error('no context provider for getSelectedRows');\n    return [];\n  },\n  getFilteredSelectedRows: <T,>(): T[] => {\n    console.error('no context provider for getFilteredSelectedRows');\n    return [];\n  },\n  getSelectedRowIds: () => {\n    console.error('no context provider for getSelectedRowIds');\n    return [];\n  },\n  getFilteredSelectedRowIds: () => {\n    console.error('no context provider for getFilteredSelectedRowIds');\n    return [];\n  },\n  // eslint-disable-next-line @typescript-eslint/require-await\n  selectRowsDiff: async () => {\n    console.error('no context provider for selectRowsDiff');\n  },\n  selectRowsByIdWithFlash: () => {\n    console.error('no context provider for selectRowsWithFlash');\n  },\n  // eslint-disable-next-line @typescript-eslint/require-await\n  selectRowsWithFlashDiff: async () => {\n    console.error('no context provider for selectRowsWithFlashDiff');\n  },\n  flashRows: () => {\n    console.error('no context provider for flashRows');\n  },\n  // eslint-disable-next-line @typescript-eslint/require-await\n  flashRowsDiff: async () => {\n    console.error('no context provider for flashRows');\n  },\n  // eslint-disable-next-line @typescript-eslint/require-await,@typescript-eslint/no-misused-promises\n  focusByRowById: async () => {\n    console.error('no context provider for focusByRowById');\n  },\n  ensureRowVisible: () => {\n    console.error('no context provider for ensureRowVisible');\n    return true;\n  },\n  ensureSelectedRowIsVisible: () => {\n    console.error('no context provider for ensureSelectedRowIsVisible');\n  },\n  getFirstRowId: () => {\n    console.error('no context provider for getFirstRowId');\n    return -1;\n  },\n  autoSizeColumns: () => {\n    console.error('no context provider for autoSizeColumns');\n    return null;\n  },\n  sizeColumnsToFit: () => {\n    console.error('no context provider for autoSizeAllColumns');\n    return null;\n  },\n  editingCells: () => {\n    console.error('no context provider for editingCells');\n    return false;\n  },\n  cancelEdit: () => {\n    console.error('no context provider for cancelEdit');\n  },\n  // eslint-disable-next-line @typescript-eslint/require-await\n  startCellEditing: async () => {\n    console.error('no context provider for startCellEditing');\n  },\n  stopEditing: () => {\n    console.error('no context provider for stopEditing');\n  },\n  // eslint-disable-next-line @typescript-eslint/require-await\n  updatingCells: async () => {\n    console.error('no context provider for modifyUpdating');\n    return false;\n  },\n  redrawRows: () => {\n    console.error('no context provider for redrawRows');\n  },\n  setExternallySelectedItemsAreInSync: () => {\n    console.error('no context provider for setExternallySelectedItemsAreInSync');\n  },\n  // eslint-disable-next-line @typescript-eslint/require-await\n  waitForExternallySelectedItemsToBeInSync: async () => {\n    console.error('no context provider for waitForExternallySelectedItemsToBeInSync');\n  },\n  addExternalFilter: () => {\n    console.error('no context provider for addExternalFilter');\n  },\n  removeExternalFilter: () => {\n    console.error('no context provider for removeExternalFilter');\n  },\n  isExternalFilterPresent: () => {\n    console.error('no context provider for isExternalFilterPresent');\n    return false;\n  },\n  doesExternalFilterPass: () => {\n    console.error('no context provider for doesExternalFilterPass');\n    return true;\n  },\n  downloadCsv: () => {\n    console.error('no context provider for downloadCsv');\n  },\n  setOnCellEditingComplete: () => {\n    console.error('no context provider for setOnCellEditingComplete');\n  },\n  showNoRowsOverlay: () => {\n    console.error('no context provider for showLoadingOverlay');\n  },\n});\n\nexport const useGridContext = <TData extends GridBaseRow>() => useContext<GridContextType<TData>>(GridContext);\n","import { createContext } from 'react';\n\nexport type GridUpdatingContextType = {\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  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","import { isEmpty, negate } from 'lodash-es';\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","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';\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      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    console.log(e);\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';\nimport { BaseProps, MenuButtonModifiers } from '../types';\nimport { menuButtonClass } from '../utils';\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 '../Grid';\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, postPopupOps, 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    postPopupOps();\n  }, [postPopupOps, 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 { 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 <div ref={externalRef}>{props.noRowsOverlayText ?? 'There are currently no rows'}</div>;\n  }\n  if (props.filteredRowCount === 0) {\n    return <div ref={externalRef}>{props.noRowsMatchingOverlayText ?? 'All rows have been filtered'}</div>;\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  CellEditingStartedEvent,\n  CellKeyDownEvent,\n  ColDef,\n  ColGroupDef,\n  ColumnResizedEvent,\n  EditableCallback,\n  EditableCallbackParams,\n  GridOptions,\n  GridReadyEvent,\n  ModelUpdatedEvent,\n  ModuleRegistry,\n  RowDragEndEvent,\n  RowDragMoveEvent,\n  SelectionChangedEvent,\n} from 'ag-grid-community';\nimport { AgGridReact } from 'ag-grid-react';\nimport clsx from 'clsx';\nimport { defer, 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 { GridContext, useGridContext } from '../contexts/GridContext';\nimport { GridUpdatingContext } from '../contexts/GridUpdatingContext';\nimport { 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';\n\nModuleRegistry.registerModules([AllCommunityModule]);\n\nexport interface GridBaseRow {\n  id: string | number;\n}\n\nexport interface GridOnRowDragEndProps<TData extends GridBaseRow> {\n  movedRow: TData;\n  targetRow: TData;\n  direction: -1 | 1;\n}\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?: any[];\n  setExternalSelectedItems?: (items: any[]) => void;\n  defaultColDef?: GridOptions['defaultColDef'];\n  columnDefs: ColDef<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  onColumnMoved?: GridOptions['onColumnMoved'];\n  rowDragText?: GridOptions['rowDragText'];\n  onRowDragEnd?: (props: GridOnRowDragEndProps<TData>) => Promise<void> | void;\n  alwaysShowVerticalScroll?: boolean;\n  suppressColumnVirtualization?: GridOptions['suppressColumnVirtualisation'];\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   * 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  onCellEditingComplete?: () => void;\n\n  /**\n   * Context menu definition if required.\n   */\n  contextMenu?: GridContextMenuComponent<any>;\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}\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  ...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    setOnCellEditingComplete,\n    getColDef,\n    showNoRowsOverlay,\n    prePopupOps,\n    stopEditing,\n  } = useContext(GridContext);\n  const { startCellEditing } = useGridContext();\n  const { updatedDep, updatingCols } = useContext(GridUpdatingContext);\n\n  const gridDivRef = useRef<HTMLDivElement>(null);\n  const lastSelectedIds = useRef<number[]>([]);\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 lastFullResize = useRef<number>();\n\n  const setInitialContentSize = useCallback(() => {\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    const skipHeader = sizeColumns === 'auto-skip-headers' && gridRendered === 'rows-visible';\n    if (sizeColumns === 'auto' || skipHeader) {\n      const result = autoSizeColumns({ skipHeader, userSizedColIds: userSizedColIds.current, includeFlex: true });\n      if (!result) {\n        needsAutoSize.current = true;\n        return;\n      }\n      if (gridRendered === 'empty') {\n        if (!hasSetContentSizeEmpty.current && !hasSetContentSize.current) {\n          hasSetContentSizeEmpty.current = true;\n          params.onContentSize?.(result);\n        }\n      } else if (gridRendered === 'rows-visible') {\n        if (!hasSetContentSize.current) {\n          if (lastFullResize.current === result.width) {\n            hasSetContentSize.current = true;\n            params.onContentSize?.(result);\n          } else {\n            needsAutoSize.current = true;\n          }\n          lastFullResize.current = result.width;\n        }\n      } else {\n        // It should be impossible to get here\n        console.error('Unknown value returned from hasGridRendered');\n      }\n    }\n\n    if (sizeColumns !== 'none') {\n      sizeColumnsToFit();\n    }\n    setAutoSized(true);\n    needsAutoSize.current = false;\n  }, [autoSizeColumns, gridRenderState, params, rowData, sizeColumns, sizeColumnsToFit]);\n\n  const lastOwnerDocumentRef = useRef<Document>();\n\n  /**\n   * Auto-size windows that had deferred auto-size\n   */\n  useInterval(() => {\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 (needsAutoSize.current || (!hasSetContentSize.current && sizeColumns === 'auto')) {\n      needsAutoSize.current = false;\n      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) return;\n    hasSelectedFirstItem.current = true;\n    if (isNotEmpty(rowData) && isEmpty(params.externalSelectedItems)) {\n      const firstRowId = getFirstRowId();\n      if (params.autoSelectFirstRow) {\n        selectRowsById([firstRowId]);\n      } else {\n        focusByRowById(firstRowId, true);\n      }\n    }\n  }, [\n    externallySelectedItemsAreInSync,\n    focusByRowById,\n    gridReady,\n    params.externalSelectedItems,\n    params.autoSelectFirstRow,\n    rowData,\n    selectRowsById,\n    getFirstRowId,\n  ]);\n\n  /**\n   * Ensure external selected items list is in sync with panel.\n   */\n  const synchroniseExternalStateToGridSelection = useCallback(\n    ({ api }: SelectionChangedEvent) => {\n      if (!params.externalSelectedItems || !params.setExternalSelectedItems) {\n        setExternallySelectedItemsAreInSync(true);\n        return;\n      }\n\n      const selectedRows = api.getSelectedRows();\n      // We don't want to update selected Items if it hasn't changed to prevent excess renders\n      if (\n        params.externalSelectedItems.length !== selectedRows.length ||\n        isNotEmpty(xorBy(selectedRows, params.externalSelectedItems, (row) => row.id))\n      ) {\n        setExternallySelectedItemsAreInSync(false);\n        params.setExternalSelectedItems([...selectedRows]);\n      } else {\n        setExternallySelectedItemsAreInSync(true);\n      }\n    },\n    [params, setExternallySelectedItemsAreInSync],\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 (!params.externalSelectedItems) {\n      setExternallySelectedItemsAreInSync(true);\n      return;\n    }\n\n    const selectedIds = params.externalSelectedItems.map((row) => row.id) as number[];\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  }, [gridReady, params.externalSelectedItems, ensureRowVisible, selectRowsById, setExternallySelectedItemsAreInSync]);\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  /**\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((colDef) => {\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) => !editable(ccp as any as EditableCallbackParams),\n        },\n      };\n    });\n  }, [params.columnDefs, params.loading, params.readOnly, params.defaultColDef?.editable]);\n\n  const hasExternallySelectedItems = !!params.setExternalSelectedItems;\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 onRowDataChanged = useCallback(() => {\n    const length = rowData?.length ?? 0;\n    if (previousRowDataLength.current !== length) {\n      setInitialContentSize();\n      previousRowDataLength.current = length;\n    }\n\n    if (lastUpdatedDep.current === updatedDep || isEmpty(colIdsEdited.current)) return;\n    lastUpdatedDep.current = updatedDep;\n\n    // Don't update while there are spinners\n    if (!isEmpty(updatingCols())) return;\n\n    const skipHeader = sizeColumns === 'auto-skip-headers';\n    if (hasSetContentSize.current) {\n      autoSizeColumns({ skipHeader, userSizedColIds: userSizedColIds.current, colIds: colIdsEdited.current });\n    }\n    colIdsEdited.current.clear();\n  }, [autoSizeColumns, rowData?.length, setInitialContentSize, sizeColumns, updatedDep, updatingCols]);\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   * Force-refresh all selected rows to re-run class function, to update selection highlighting\n   */\n  const refreshSelectedRows = useCallback((_event: CellEditingStartedEvent): void => {\n    // MATT Disabled I don't believe these are needed anymore\n    // I've left them here just in case they are\n    /*event.api.refreshCells({\n      force: true,\n      rowNodes: event.api.getSelectedNodes(),\n    });*/\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  /**\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\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      ...colDef,\n      suppressSizeToFit: (sizeColumns === 'auto' || sizeColumns === 'auto-skip-headers') && !colDef.flex,\n      sortable: colDef.sortable && params.defaultColDef?.sortable !== false,\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) return;\n    lastUpdatedDep.current = updatedDep;\n\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              autoSizeColumns({\n                skipHeader,\n                userSizedColIds: userSizedColIds.current,\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      stopEditing();\n      showNoRowsOverlay();\n    }\n    prevLoading.current = newLoading;\n  }, [params.loading, rowData, showNoRowsOverlay, stopEditing]);\n\n  /**\n   * Resize columns to fit if required on window/container resize\n   */\n  const onGridSizeChanged = useCallback(() => {\n    if (sizeColumns !== 'none') {\n      sizeColumnsToFit();\n    }\n  }, [sizeColumns, sizeColumnsToFit]);\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 Set<string>());\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) return;\n    switch (e.source) {\n      case 'uiColumnDragged':\n        userSizedColIds.current.add(colId);\n        break;\n      case 'autosizeColumns':\n        userSizedColIds.current.delete(colId);\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 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  // This is setting a ref in the GridContext so won't be triggering an update loop\n  setOnCellEditingComplete(params.onCellEditingComplete);\n\n  const selectWidth = params.hideSelectColumn ? 0 : selectable && params.onRowDragEnd ? 76 : 48;\n  const headerRowCount = columnDefs.some((c) => (c as any).children) ? 2 : 1;\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                }\n              : undefined\n          }\n          rowHeight={rowHeight}\n          animateRows={params.animateRows ?? false}\n          rowClassRules={params.rowClassRules}\n          getRowId={(params) => `${params.data.id}`}\n          onGridSizeChanged={onGridSizeChanged}\n          suppressColumnVirtualisation={suppressColumnVirtualization}\n          suppressClickEdit={true}\n          onColumnVisible={setInitialContentSize}\n          onRowDataUpdated={onRowDataChanged}\n          onCellKeyDown={onCellKeyPress}\n          onCellClicked={onCellClicked}\n          onCellDoubleClicked={onCellDoubleClick}\n          onCellEditingStarted={refreshSelectedRows}\n          domLayout={params.domLayout}\n          onColumnResized={onColumnResized}\n          defaultColDef={{ minWidth: 48, ...omit(params.defaultColDef, ['editable']) }}\n          columnDefs={columnDefsAdjusted}\n          rowData={rowData}\n          noRowsOverlayComponent={(event: AgGridEvent) => {\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          onModelUpdated={onModelUpdated}\n          onGridReady={onGridReady}\n          onSortChanged={ensureSelectedRowIsVisible}\n          postSortRows={params.onRowDragEnd || !defaultPostSort ? undefined : postSortRows}\n          onSelectionChanged={synchroniseExternalStateToGridSelection}\n          onColumnMoved={params.onColumnMoved}\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          selectionColumnDef={{\n            suppressNavigable: params.hideSelectColumn,\n            rowDrag: !!params.onRowDragEnd,\n            minWidth: selectWidth,\n            maxWidth: selectWidth,\n            pinned: selectColumnPinned,\n            headerComponentParams: {\n              exportable: false,\n            },\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:\n              params.enableSelectionWithoutKeys || params.enableClickSelection\n                ? undefined\n                : clickInputWhenContainingCellClicked,\n          }}\n        />\n      </div>\n    </div>\n  );\n};\n","import { createContext, RefObject, useContext } from 'react';\n\nimport { GridBaseRow } from '../components/Grid';\n\nexport interface GridPopoverContextType<TData extends GridBaseRow> {\n  anchorRef: RefObject<Element>;\n  saving: boolean;\n  setSaving: (saving: boolean) => 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  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/Grid';\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 } = 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) return true;\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: props.data,\n        value: props.value,\n        updateValue,\n        formatValue: props.formatValue,\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.column.getColDef() === colDef)\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      `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 { ColDef, EditableCallback, ICellEditorParams, ICellRendererParams } from 'ag-grid-community';\nimport {\n  SuppressKeyboardEventParams,\n  ValueFormatterFunc,\n  ValueFormatterParams,\n  ValueGetterFunc,\n  ValueGetterParams,\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 { GridBaseRow } from './Grid';\nimport { GridCellMultiSelectClassRules } from './GridCellMultiSelectClassRules';\nimport { GridIcon } from './GridIcon';\nimport { GridLoadableCell } from './GridLoadableCell';\nimport { GenericCellColDef, GenericCellRendererParams } from './gridRender';\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 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(warningText)) warningText = warningText.join('\\n');\n  if (Array.isArray(infoText)) infoText = infoText.join('\\n');\n\n  return checkUpdating(colDef.field ?? colDef.colId ?? '', props.data.id) ? (\n    <GridLoadableCell />\n  ) : (\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\n// This is so that typescript retains the row type to pass to the GridCells\nexport interface ColDefT<TData extends GridBaseRow, ValueType = any> extends ColDef<TData, ValueType> {\n  editable?: boolean | EditableCallback<TData, ValueType>;\n  valueGetter?: string | ValueGetterFunc<TData, ValueType>;\n  valueFormatter?: string | ValueFormatterFunc<TData, ValueType>;\n  cellRenderer?:\n    | ((props: ICellRendererParams<TData, ValueType>) => ReactElement | string | false | null | undefined)\n    | string;\n  cellRendererParams?: {\n    rightHoverElement?: ReactElement;\n    originalCellRenderer?: any;\n    editAction?: (selectedRows: TData[]) => void;\n    shortcutKeys?: Record<string, () => void>;\n    warning?: (props: ICellRendererParams<TData, ValueType>) => ReactElement | string | false | null | undefined;\n    info?: (props: ICellRendererParams<TData, ValueType>) => ReactElement | string | false | null | undefined;\n  };\n  editor?: (editorProps: any) => ReactElement;\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  field: string | undefined,\n  filterValueGetter: string | ValueGetterFunc<TData, ValueType> | undefined,\n  valueFormatter: string | ValueFormatterFunc<TData, ValueType> | undefined,\n): string | ValueGetterFunc<TData, ValueType> | undefined => {\n  if (filterValueGetter) return filterValueGetter;\n  // aggrid will default to valueGetter\n  if (typeof valueFormatter !== 'function' || !field) return undefined;\n\n  return (params: ValueGetterParams<TData, ValueType>): any => {\n    const value = params.getValue(field);\n    let formattedValue = valueFormatter({ ...params, value });\n    // Search for null values using standard dash\n    if (formattedValue === '–') formattedValue += ' -';\n    // Search by raw value as well as formatted\n    const gotValue = ['string', 'number'].includes(typeof value) ? value : undefined;\n    return (formattedValue + (gotValue != null && formattedValue != gotValue ? ' ' + gotValue : '')) //\n      .replace(/\\s+/g, ' ')\n      .trim();\n  };\n};\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  // props.field = ;\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;\n  // FIXME\n  const filterValueGetter = generateFilterGetter(props.field, props.filterValueGetter as any, 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    colId: props.field ?? props.field,\n    headerTooltip: props.headerName,\n    sortable: !!(props?.field || props?.valueGetter),\n    resizable: true,\n    editable: props.editable ?? false,\n    ...(custom?.editor && {\n      cellClassRules: GridCellMultiSelectClassRules,\n      editable: props.editable ?? true,\n      cellEditor: GenericCellEditorComponentWrapper(custom?.editor),\n    }),\n    suppressKeyboardEvent: suppressCellKeyboardEvents,\n    ...(custom?.editorParams && {\n      cellEditorParams: {\n        ...custom.editorParams,\n        multiEdit: custom.multiEdit,\n        preventAutoEdit: custom.preventAutoEdit ?? false,\n      },\n    }),\n    // If there's a valueFormatter and no filterValueGetter then create a filterValueGetter\n    // FIXME\n    filterValueGetter: filterValueGetter as any,\n    // Default value formatter, otherwise react freaks out on objects\n    valueFormatter: (params: ValueFormatterParams) => {\n      if (params.value == null) return '–';\n      const types = ['number', 'boolean', 'string'];\n      if (types.includes(typeof params.value)) return `${params.value}`;\n      else return JSON.stringify(params.value);\n    },\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 './Grid';\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 { GridBaseRow } from './Grid';\nimport { ColDefT, GenericCellEditorComponentWrapper, GridCell } from './GridCell';\nimport { GridCellMultiSelectClassRules } from './GridCellMultiSelectClassRules';\nimport { GenericCellColDef } from './gridRender';\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 { useContext, useEffect } from 'react';\n\nimport { GridContext, GridFilterExternal } from '../../contexts/GridContext';\nimport { GridBaseRow } from '../Grid';\n\nexport const useGridFilter = <TData extends GridBaseRow>(filter: GridFilterExternal<TData> | undefined) => {\n  const { addExternalFilter, removeExternalFilter } = useContext(GridContext);\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 '../Grid';\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","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","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 './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","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, useContext, useEffect, useRef, useState } from 'react';\n\nimport { GridContext } from '../contexts/GridContext';\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 './Grid';\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 useGridPopoverHook = <TData extends GridBaseRow>(props: GridPopoverHookProps<TData>) => {\n  const { stopEditing, cancelEdit } = useContext(GridContext);\n  const { anchorRef, saving, updateValue } = 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        cancelEdit();\n        return;\n      }\n      if (props.invalid && props.invalid()) {\n        return;\n      }\n\n      if (!props.save) {\n        cancelEdit();\n      } else if (props.save) {\n        // forms that don't provide an invalid fn must wait until they have saved to close\n        if (props.invalid) stopEditing();\n        if (\n          await updateValue(\n            props.save,\n            reason === CloseReason.TAB_FORWARD ? 1 : reason === CloseReason.TAB_BACKWARD ? -1 : 0,\n          )\n        ) {\n          if (!props.invalid) stopEditing();\n        }\n      }\n    },\n    [cancelEdit, props, 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) return;\n                void triggerSave(event.reason);\n              }}\n              viewScroll={'auto'}\n              dontShrinkIfDirectionIsTop={true}\n              className={props.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 (props.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, props.className, props.dontSaveOnExternalClick, saving, triggerSave],\n  );\n\n  return {\n    popoverWrapper,\n    triggerSave,\n  };\n};\n","import debounce from 'debounce-promise';\nimport { 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 { 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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\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}\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\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>(null);\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 (props.onSelectedItem) {\n          await props.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, props, selectedRows],\n  );\n\n  // Load up options list if it's async function\n  useEffect(() => {\n    if (options) return;\n    let optionsConf = props.options;\n\n    void (async () => {\n      if (typeof optionsConf === 'function') {\n        optionsConf = await optionsConf(selectedRows, filter);\n      }\n      if (optionsConf !== undefined) {\n        setOptions(optionsConf);\n      }\n    })();\n  }, [filter, options, props, selectedRows]);\n\n  // Local filtering.\n  useEffect(() => {\n    if (props.filtered == 'local') {\n      if (options == null) return;\n      setFilteredValues(\n        options\n          .map((option) => {\n            if (option.label != null && typeof option.label !== 'string') {\n              console.error('Cannot filter non-string labels', option);\n              return undefined;\n            }\n            return textMatch((option.label as string) || '', filter) ? option : undefined;\n          })\n          .filter((r) => r !== undefined),\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 = useRef<string>(filter);\n\n  // Reload filtering.\n  useEffect(() => {\n    if (previousFilter.current != filter && props.filtered == 'reload') {\n      previousFilter.current = filter;\n      void reSearchOnFilterChange();\n    }\n  }, [filter, props, reSearchOnFilterChange]);\n\n  /**\n   * Saves are wrapped in updateValue and triggered by blur events\n   */\n  const save = useCallback(async () => {\n    if (!options) return true;\n\n    // Filter saved\n    if (selectedItem === null) {\n      if (props.onSelectFilter) {\n        const { onSelectFilter } = props;\n        await onSelectFilter({ selectedRows, selectedRowIds: selectedRows.map((row) => row.id), value: filter as any });\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) return false;\n    await selectItemHandler(selectedItem.value, subSelectedValue);\n\n    return true;\n  }, [filter, filteredValues, options, props, selectItemHandler, selectedItem, selectedRows, subSelectedValue]);\n\n  const { popoverWrapper } = useGridPopoverHook({\n    className: props.className,\n    invalid: () => !options || !!(selectedItem && !subComponentIsValid.current),\n    save,\n    dontSaveOnExternalClick: true,\n  });\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)}\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        </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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon } from '../GridCell';\nimport { GridIcon } from '../GridIcon';\nimport { useGridPopoverHook } from '../GridPopoverHook';\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) return true;\n\n      // Any changes to save?\n      if (initialValues === JSON.stringify(options)) return true;\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) return;\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)) return;\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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon } from '../GridCell';\nimport { GridIcon } from '../GridIcon';\nimport { useGridPopoverHook } from '../GridPopoverHook';\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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\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/Grid';\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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon } from '../GridCell';\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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon } from '../GridCell';\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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon } from '../GridCell';\nimport { useGridPopoverHook } from '../GridPopoverHook';\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()) 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  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 { GridBaseRow } from '../Grid';\nimport { ColDefT, GridCell } from '../GridCell';\nimport { GenericCellColDef } from '../gridRender';\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 { GridBaseRow } from '../Grid';\nimport { CellEditorCommon, ColDefT, GridCell } from '../GridCell';\nimport { GenericCellColDef } from '../gridRender';\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 { GridBaseRow } from '../Grid';\nimport { ColDefT, GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormMultiSelect, GridFormMultiSelectProps } from '../gridForm/GridFormMultiSelect';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\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 { GridBaseRow } from '../Grid';\nimport { ColDefT, GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormMultiSelectGrid, GridFormMultiSelectGridProps } from '../gridForm/GridFormMultiSelectGrid';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\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 { GridBaseRow } from '../Grid';\nimport { ColDefT, GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormEditBearing, GridFormEditBearingProps } from '../gridForm/GridFormEditBearing';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\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 { GridBaseRow } from '../Grid';\nimport { ColDefT, GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormDropDown, GridFormDropDownProps } from '../gridForm/GridFormDropDown';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\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 { GridBaseRow } from '../Grid';\nimport { ColDefT, GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormPopoverMenu, GridFormPopoverMenuProps } from '../gridForm/GridFormPopoverMenu';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\nimport { GridRenderPopoutMenuCell } from '../gridRender/GridRenderPopoutMenuCell';\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 { GridBaseRow } from '../Grid';\nimport { ColDefT, GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormMessage, GridFormMessageProps } from '../gridForm/GridFormMessage';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\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      ...props,\n    },\n  );\n","import { GridBaseRow } from '../Grid';\nimport { ColDefT, GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormTextArea, GridFormTextAreaProps } from '../gridForm/GridFormTextArea';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\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 { GridBaseRow } from '../Grid';\nimport { ColDefT, GenericCellEditorProps, GridCell } from '../GridCell';\nimport { GridFormTextInput, GridFormTextInputProps } from '../gridForm/GridFormTextInput';\nimport { GenericCellColDef } from '../gridRender/GridRenderGenericCell';\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 { PropsWithChildren } from 'react';\n\nexport interface GridWrapperProps {\n  maxHeight?: number | string;\n}\n\nexport const GridWrapper = ({ children, maxHeight }: PropsWithChildren<GridWrapperProps>) => (\n  <div className={'Grid-wrapper'} style={{ maxHeight }}>\n    {children}\n  </div>\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 { CellPosition, ColDef, GridApi, IRowNode, RowNode } from 'ag-grid-community';\nimport { CsvExportParams, ProcessCellForExportParams } 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 { AutoSizeColumnsProps, AutoSizeColumnsResult, GridContext, GridFilterExternal } from './GridContext';\nimport { GridUpdatingContext } from './GridUpdatingContext';\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, checkUpdating } = 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<number[]>([]);\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 = (invisibleColumnIds: string[]) =>\n    _setInvisibleColumnIds(pull(invisibleColumnIds, GridCellFillerColId));\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   * After a popup refocus the cell.\n   */\n  const postPopupOps = useCallback(() => {\n    if (!gridApi || gridApi.isDestroyed()) {\n      return;\n    }\n    if (prePopupFocusedCell.current) {\n      gridApi.setFocusedCell(prePopupFocusedCell.current.rowIndex, prePopupFocusedCell.current.column);\n    }\n  }, [gridApi]);\n\n  /**\n   * Get all row id's in grid.\n   */\n  const _getAllRowIds = useCallback(() => {\n    const result: number[] = [];\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: number[]): 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: number[] | 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?: number[]) => _selectRowsWithOptionalFlash({ rowIds, select: true, flash: false }),\n    [_selectRowsWithOptionalFlash],\n  );\n\n  const selectRowsByIdWithFlash = useCallback(\n    (rowIds?: number[]) => _selectRowsWithOptionalFlash({ rowIds, select: true, flash: true }),\n    [_selectRowsWithOptionalFlash],\n  );\n\n  const flashRows = useCallback(\n    (rowIds?: number[]) => _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: number, 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    (): number[] => getSelectedRows().map((row) => (row as any).id as number),\n    [getSelectedRows],\n  );\n\n  const getFilteredSelectedRowIds = useCallback(\n    (): number[] => 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  const autoSizeColumns = useCallback(\n    ({ skipHeader, colIds, userSizedColIds, includeFlex }: AutoSizeColumnsProps = {}): AutoSizeColumnsResult => {\n      if (!gridApi || !gridApi.getColumnState()) return null;\n      const colIdsSet = colIds instanceof Set ? colIds : new Set(colIds);\n      const colsToResize = gridApi.getColumnState()?.filter?.((colState) => {\n        const colId = colState.colId;\n        return (\n          (isEmpty(colIdsSet) || colIdsSet.has(colId)) &&\n          !userSizedColIds?.has(colId) &&\n          (includeFlex || !colState.flex)\n        );\n      });\n      if (!isEmpty(colsToResize)) {\n        gridApi.autoSizeColumns(\n          colsToResize.map((colState) => colState.colId),\n          skipHeader,\n        );\n      }\n      return {\n        width: sumBy(\n          gridApi.getColumnState().filter((col) => !col.hide),\n          'width',\n        ),\n      };\n    },\n    [gridApi],\n  );\n\n  /**\n   * Resize columns to fit container\n   */\n  const sizeColumnsToFit = useCallback((): void => {\n    if (gridApi && !gridApi?.isDestroyed()) {\n      gridApi.sizeColumnsToFit();\n    }\n  }, [gridApi]);\n\n  const stopEditing = useCallback((): void => {\n    if (!gridApi || gridApi.isDestroyed()) {\n      return;\n    }\n    gridApi.stopEditing();\n    if (prePopupFocusedCell.current) {\n      gridApi.setFocusedCell(prePopupFocusedCell.current.rowIndex, prePopupFocusedCell.current.column);\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 startCellEditing = useCallback(\n    async ({ rowId, colId }: { rowId: number; colId: string }) => {\n      if (!gridApi) return;\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      // Cell already being edited, so don't re-edit until finished\n      if (checkUpdating([colDef.field ?? colDef.colId ?? ''], rowId)) {\n        return;\n      }\n\n      const rowIndex = rowNode.rowIndex;\n      if (rowIndex != null) {\n        defer(() => {\n          !gridApi.isDestroyed() &&\n            gridApi.startEditingCell({\n              rowIndex,\n              colKey: colId,\n            });\n        });\n      }\n    },\n    [checkUpdating, gridApi, prePopupOps, waitForExternallySelectedItemsToBeInSync],\n  );\n\n  /**\n   * This differs from stopEdit in that it will also invoke cellEditingCompleteCallback\n   */\n  const cancelEdit = useCallback((): void => {\n    stopEditing();\n    cellEditingCompleteCallbackRef.current?.();\n  }, [stopEditing]);\n\n  const cellEditingCompleteCallbackRef = useRef<() => void>();\n  const setOnCellEditingComplete = useCallback((cellEditingCompleteCallback: (() => void) | undefined) => {\n    cellEditingCompleteCallbackRef.current = cellEditingCompleteCallback;\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) return true;\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        const preRow = gridApi.getFocusedCell();\n        if (tabDirection === 1) {\n          gridApi.tabToNextCell();\n        } else {\n          gridApi.tabToPreviousCell();\n        }\n\n        // If we don't wait the tab to next element won't work\n        // I think this is due to the grid resizing\n        await wait(150);\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            prePopupOps();\n            gridApi.startEditingCell({\n              rowIndex: focusedCell.rowIndex,\n              colKey: focusedCell.column.getColId(),\n            });\n            return true;\n          }\n        }\n      }\n      return false;\n    },\n    [gridApi, prePopupOps],\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      setSaving && setSaving(true);\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            // MATT Disabled I don't believe these are needed anymore\n            // I've left them here just in case they are\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        // MATT Disabled I don't believe these are needed anymore\n        // I've left them here just in case they are\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          // This is needed to trigger postSortRowsHook\n          gridApi.refreshClientSideRowModel();\n        } else {\n          // Don't set saving if ok as the form has already closed\n          setSaving?.(false);\n        }\n\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            cellEditingCompleteCallbackRef.current && cellEditingCompleteCallbackRef.current();\n          }\n        }\n\n        return ok;\n      });\n    },\n    [gridApiOp, modifyUpdating, 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 = (filter: GridFilterExternal<TData>) => {\n    externalFilters.current.push(filter);\n    void onFilterChanged();\n  };\n\n  const removeExternalFilter = (filter: GridFilterExternal<TData>) => {\n    remove(externalFilters.current, (v) => v === filter);\n    void onFilterChanged();\n  };\n\n  const isExternalFilterPresent = (): boolean => !isEmpty(externalFilters.current);\n\n  const doesExternalFilterPass = (node: IRowNode): boolean =>\n    externalFilters.current.every((filter) => filter(node.data, node));\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        postPopupOps,\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        stopEditing,\n        cancelEdit,\n        updatingCells,\n        redrawRows,\n        externallySelectedItemsAreInSync,\n        setExternallySelectedItemsAreInSync,\n        waitForExternallySelectedItemsToBeInSync,\n        addExternalFilter,\n        removeExternalFilter,\n        isExternalFilterPresent,\n        doesExternalFilterPass,\n        downloadCsv,\n        setOnCellEditingComplete,\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, remove } from 'lodash-es';\nimport { PropsWithChildren, 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 = () => {\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  const updatingCols = () => Object.keys(updating.current);\n\n  const modifyUpdating = async (\n    fields: string | string[],\n    ids: (number | string)[],\n    fn: () => void | Promise<void>,\n  ) => {\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\n  const checkUpdating = (fields: string | string[], id: number | string): boolean =>\n    castArray(fields).some((f) => updating.current[f]?.includes(id));\n\n  return (\n    <GridUpdatingContext.Provider value={{ modifyUpdating, checkUpdating, updatingCols, updatedDep }}>\n      {props.children}\n    </GridUpdatingContext.Provider>\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","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","ModuleRegistry","AllCommunityModule","xorBy","last","difference","AgGridReact","omit","sortBy","LuiIcon","LuiButtonGroup","LuiButton","LuiCheckboxInput","delay","partition","pick","groupBy","fromPairs","toPairs","isEqual","useId","pull","compact","filter","sumBy","remove","flatten","castArray"],"mappings":"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","x_google_ignoreList":[1,2,3,24,25,69,71,73,74]}