@linzjs/step-ag-grid 29.11.2 → 29.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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","../node_modules/style-inject/dist/style-inject.es.js","../src/components/gridFilter/GridFilterColumnsMultiSelect.tsx","../src/components/gridFilter/GridFilterHeaderIconButton.tsx","../src/components/gridFilter/GridFilterColumnsToggle.tsx","../src/lui/timeoutHook.tsx","../src/lui/stateDeferredHook.tsx","../src/components/gridFilter/GridFilterDownloadCsvButton.tsx","../src/components/gridFilter/GridFilterQuick.tsx","../src/components/gridFilter/GridFilters.tsx","../node_modules/debounce-promise/dist/index.js","../src/contexts/GridSubComponentContext.ts","../src/lui/FormError.tsx","../src/lui/reactUtils.tsx","../node_modules/matcher/node_modules/escape-string-regexp/index.js","../node_modules/matcher/index.js","../src/utils/textMatcher.ts","../src/components/GridPopoverHook.tsx","../src/components/gridForm/GridFormDropDown.tsx","../src/lui/TextInputFormatted.tsx","../src/utils/bearing.ts","../src/components/gridForm/GridFormEditBearing.tsx","../src/components/gridForm/GridFormMessage.tsx","../src/components/gridForm/GridFormMultiSelect.tsx","../src/components/gridForm/GridFormMultiSelectGrid.tsx","../src/components/gridForm/GridFormPopoverMenu.tsx","../src/lui/TextAreaInput.tsx","../src/utils/textValidator.ts","../src/components/gridForm/GridFormSubComponentTextArea.tsx","../src/components/gridForm/GridFormSubComponentTextInput.tsx","../src/components/gridForm/GridFormTextArea.tsx","../src/components/gridForm/GridFormTextInput.tsx","../src/components/gridPopoverEdit/GridButton.tsx","../src/components/gridPopoverEdit/GridEditBoolean.tsx","../src/components/gridPopoverEdit/GridPopoutEditMultiSelect.ts","../src/components/gridPopoverEdit/GridPopoutEditMultiSelectGrid.ts","../src/components/gridPopoverEdit/GridPopoverEditBearing.ts","../src/components/gridPopoverEdit/GridPopoverEditDropDown.ts","../src/components/gridRender/GridRenderPopoutMenuCell.tsx","../src/components/gridPopoverEdit/GridPopoverMenu.tsx","../src/components/gridPopoverEdit/GridPopoverMessage.ts","../src/components/gridPopoverEdit/GridPopoverTextArea.ts","../src/components/gridPopoverEdit/GridPopoverTextInput.ts","../src/components/GridWrapper.tsx","../src/components/gridUtil.ts","../src/utils/waitForCondition.tsx","../src/contexts/GridContextProvider.tsx","../src/contexts/GridUpdatingContextProvider.tsx","../src/lui/ActionButton.tsx","../src/utils/deferredPromise.ts"],"sourcesContent":["import { LuiMiniSpinner } from '@linzjs/lui';\nimport { PropsWithChildren, ReactElement } from 'react';\n\n/**\n * If loading is true this returns a loading spinner, otherwise it returns its children.\n */\nexport const ComponentLoadingWrapper = (\n props: PropsWithChildren<{\n loading?: boolean;\n saving?: boolean;\n className: string | undefined;\n }>,\n): ReactElement => {\n return props.loading ? (\n <LuiMiniSpinner size={22} divProps={{ role: 'status', ['aria-label']: 'Loading', style: { padding: 16 } }} />\n ) : (\n <div style={{ pointerEvents: props.saving ? 'none' : 'inherit' }} className={props.className}>\n {props.saving && <div className={'ComponentLoadingWrapper-saveOverlay'} />}\n {props.children}\n </div>\n );\n};\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n// src/useBoolean/useBoolean.ts\nfunction useBoolean(defaultValue = false) {\n if (typeof defaultValue !== \"boolean\") {\n throw new Error(\"defaultValue must be `true` or `false`\");\n }\n const [value, setValue] = useState(defaultValue);\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return { value, setValue, setTrue, setFalse, toggle };\n}\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// src/useEventListener/useEventListener.ts\nfunction useEventListener(eventName, handler, element, options) {\n const savedHandler = useRef(handler);\n useIsomorphicLayoutEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n useEffect(() => {\n const targetElement = (element == null ? void 0 : element.current) ?? window;\n if (!(targetElement && targetElement.addEventListener))\n return;\n const listener = (event) => {\n savedHandler.current(event);\n };\n targetElement.addEventListener(eventName, listener, options);\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\n// src/useClickAnyWhere/useClickAnyWhere.ts\nfunction useClickAnyWhere(handler) {\n useEventListener(\"click\", (event) => {\n handler(event);\n });\n}\nfunction useCopyToClipboard() {\n const [copiedText, setCopiedText] = useState(null);\n const copy = useCallback(async (text) => {\n if (!(navigator == null ? void 0 : navigator.clipboard)) {\n console.warn(\"Clipboard not supported\");\n return false;\n }\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText(text);\n return true;\n } catch (error) {\n console.warn(\"Copy failed\", error);\n setCopiedText(null);\n return false;\n }\n }, []);\n return [copiedText, copy];\n}\nfunction useCounter(initialValue) {\n const [count, setCount] = useState(initialValue ?? 0);\n const increment = useCallback(() => {\n setCount((x) => x + 1);\n }, []);\n const decrement = useCallback(() => {\n setCount((x) => x - 1);\n }, []);\n const reset = useCallback(() => {\n setCount(initialValue ?? 0);\n }, [initialValue]);\n return {\n count,\n increment,\n decrement,\n reset,\n setCount\n };\n}\nfunction useInterval(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (delay === null) {\n return;\n }\n const id = setInterval(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearInterval(id);\n };\n }, [delay]);\n}\n\n// src/useCountdown/useCountdown.ts\nfunction useCountdown({\n countStart,\n countStop = 0,\n intervalMs = 1e3,\n isIncrement = false\n}) {\n const {\n count,\n increment,\n decrement,\n reset: resetCounter\n } = useCounter(countStart);\n const {\n value: isCountdownRunning,\n setTrue: startCountdown,\n setFalse: stopCountdown\n } = useBoolean(false);\n const resetCountdown = useCallback(() => {\n stopCountdown();\n resetCounter();\n }, [stopCountdown, resetCounter]);\n const countdownCallback = useCallback(() => {\n if (count === countStop) {\n stopCountdown();\n return;\n }\n if (isIncrement) {\n increment();\n } else {\n decrement();\n }\n }, [count, countStop, decrement, increment, isIncrement, stopCountdown]);\n useInterval(countdownCallback, isCountdownRunning ? intervalMs : null);\n return [count, { startCountdown, stopCountdown, resetCountdown }];\n}\nfunction useEventCallback(fn) {\n const ref = useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n return useCallback((...args) => {\n var _a;\n return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);\n }, [ref]);\n}\n\n// src/useLocalStorage/useLocalStorage.ts\nvar IS_SERVER = typeof window === \"undefined\";\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER) {\n return initialValueToUse;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER) {\n console.warn(\n `Tried setting localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.localStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting localStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER) {\n console.warn(\n `Tried removing localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.localStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nvar IS_SERVER2 = typeof window === \"undefined\";\nfunction useMediaQuery(query, {\n defaultValue = false,\n initializeWithValue = true\n} = {}) {\n const getMatches = (query2) => {\n if (IS_SERVER2) {\n return defaultValue;\n }\n return window.matchMedia(query2).matches;\n };\n const [matches, setMatches] = useState(() => {\n if (initializeWithValue) {\n return getMatches(query);\n }\n return defaultValue;\n });\n function handleChange() {\n setMatches(getMatches(query));\n }\n useIsomorphicLayoutEffect(() => {\n const matchMedia = window.matchMedia(query);\n handleChange();\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener(\"change\", handleChange);\n }\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener(\"change\", handleChange);\n }\n };\n }, [query]);\n return matches;\n}\n\n// src/useDarkMode/useDarkMode.ts\nvar COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY = \"usehooks-ts-dark-mode\";\nfunction useDarkMode(options = {}) {\n const {\n defaultValue,\n localStorageKey = LOCAL_STORAGE_KEY,\n initializeWithValue = true\n } = options;\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, {\n initializeWithValue,\n defaultValue\n });\n const [isDarkMode, setDarkMode] = useLocalStorage(\n localStorageKey,\n defaultValue ?? isDarkOS ?? false,\n { initializeWithValue }\n );\n useIsomorphicLayoutEffect(() => {\n if (isDarkOS !== isDarkMode) {\n setDarkMode(isDarkOS);\n }\n }, [isDarkOS]);\n return {\n isDarkMode,\n toggle: () => {\n setDarkMode((prev) => !prev);\n },\n enable: () => {\n setDarkMode(true);\n },\n disable: () => {\n setDarkMode(false);\n },\n set: (value) => {\n setDarkMode(value);\n }\n };\n}\nfunction useUnmount(func) {\n const funcRef = useRef(func);\n funcRef.current = func;\n useEffect(\n () => () => {\n funcRef.current();\n },\n []\n );\n}\n\n// src/useDebounceCallback/useDebounceCallback.ts\nfunction useDebounceCallback(func, delay = 500, options) {\n const debouncedFunc = useRef();\n useUnmount(() => {\n if (debouncedFunc.current) {\n debouncedFunc.current.cancel();\n }\n });\n const debounced = useMemo(() => {\n const debouncedFuncInstance = debounce(func, delay, options);\n const wrappedFunc = (...args) => {\n return debouncedFuncInstance(...args);\n };\n wrappedFunc.cancel = () => {\n debouncedFuncInstance.cancel();\n };\n wrappedFunc.isPending = () => {\n return !!debouncedFunc.current;\n };\n wrappedFunc.flush = () => {\n return debouncedFuncInstance.flush();\n };\n return wrappedFunc;\n }, [func, delay, options]);\n useEffect(() => {\n debouncedFunc.current = debounce(func, delay, options);\n }, [func, delay, options]);\n return debounced;\n}\nfunction useDebounceValue(initialValue, delay, options) {\n const eq = (options == null ? void 0 : options.equalityFn) ?? ((left, right) => left === right);\n const unwrappedInitialValue = initialValue instanceof Function ? initialValue() : initialValue;\n const [debouncedValue, setDebouncedValue] = useState(unwrappedInitialValue);\n const previousValueRef = useRef(unwrappedInitialValue);\n const updateDebouncedValue = useDebounceCallback(\n setDebouncedValue,\n delay,\n options\n );\n if (!eq(previousValueRef.current, unwrappedInitialValue)) {\n updateDebouncedValue(unwrappedInitialValue);\n previousValueRef.current = unwrappedInitialValue;\n }\n return [debouncedValue, updateDebouncedValue];\n}\nfunction useDocumentTitle(title, options = {}) {\n const { preserveTitleOnUnmount = true } = options;\n const defaultTitle = useRef(null);\n useIsomorphicLayoutEffect(() => {\n defaultTitle.current = window.document.title;\n }, []);\n useIsomorphicLayoutEffect(() => {\n window.document.title = title;\n }, [title]);\n useUnmount(() => {\n if (!preserveTitleOnUnmount && defaultTitle.current) {\n window.document.title = defaultTitle.current;\n }\n });\n}\nfunction useHover(elementRef) {\n const [value, setValue] = useState(false);\n const handleMouseEnter = () => {\n setValue(true);\n };\n const handleMouseLeave = () => {\n setValue(false);\n };\n useEventListener(\"mouseenter\", handleMouseEnter, elementRef);\n useEventListener(\"mouseleave\", handleMouseLeave, elementRef);\n return value;\n}\nfunction useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = useState(null);\n const [state, setState] = useState(() => ({\n isIntersecting: initialIsIntersecting,\n entry: void 0\n }));\n const callbackRef = useRef();\n callbackRef.current = onChange;\n const frozen = ((_a = state.entry) == null ? void 0 : _a.isIntersecting) && freezeOnceVisible;\n useEffect(() => {\n if (!ref)\n return;\n if (!(\"IntersectionObserver\" in window))\n return;\n if (frozen)\n return;\n let unobserve;\n const observer = new IntersectionObserver(\n (entries) => {\n const thresholds = Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n entries.forEach((entry) => {\n const isIntersecting = entry.isIntersecting && thresholds.some((threshold2) => entry.intersectionRatio >= threshold2);\n setState({ isIntersecting, entry });\n if (callbackRef.current) {\n callbackRef.current(isIntersecting, entry);\n }\n if (isIntersecting && freezeOnceVisible && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n });\n },\n { threshold, root, rootMargin }\n );\n observer.observe(ref);\n return () => {\n observer.disconnect();\n };\n }, [\n ref,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n root,\n rootMargin,\n frozen,\n freezeOnceVisible\n ]);\n const prevRef = useRef(null);\n useEffect(() => {\n var _a2;\n if (!ref && ((_a2 = state.entry) == null ? void 0 : _a2.target) && !freezeOnceVisible && !frozen && prevRef.current !== state.entry.target) {\n prevRef.current = state.entry.target;\n setState({ isIntersecting: initialIsIntersecting, entry: void 0 });\n }\n }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n const result = [\n setRef,\n !!state.isIntersecting,\n state.entry\n ];\n result.ref = result[0];\n result.isIntersecting = result[1];\n result.entry = result[2];\n return result;\n}\nfunction useIsClient() {\n const [isClient, setClient] = useState(false);\n useEffect(() => {\n setClient(true);\n }, []);\n return isClient;\n}\nfunction useIsMounted() {\n const isMounted = useRef(false);\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return useCallback(() => isMounted.current, []);\n}\nfunction useMap(initialState = /* @__PURE__ */ new Map()) {\n const [map, setMap] = useState(new Map(initialState));\n const actions = {\n set: useCallback((key, value) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.set(key, value);\n return copy;\n });\n }, []),\n setAll: useCallback((entries) => {\n setMap(() => new Map(entries));\n }, []),\n remove: useCallback((key) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.delete(key);\n return copy;\n });\n }, []),\n reset: useCallback(() => {\n setMap(() => /* @__PURE__ */ new Map());\n }, [])\n };\n return [map, actions];\n}\n\n// src/useOnClickOutside/useOnClickOutside.ts\nfunction useOnClickOutside(ref, handler, eventType = \"mousedown\", eventListenerOptions = {}) {\n useEventListener(\n eventType,\n (event) => {\n const target = event.target;\n if (!target || !target.isConnected) {\n return;\n }\n const isOutside = Array.isArray(ref) ? ref.filter((r) => Boolean(r.current)).every((r) => r.current && !r.current.contains(target)) : ref.current && !ref.current.contains(target);\n if (isOutside) {\n handler(event);\n }\n },\n void 0,\n eventListenerOptions\n );\n}\nvar IS_SERVER3 = typeof window === \"undefined\";\nfunction useReadLocalStorage(key, options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER3) {\n initializeWithValue = false;\n }\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return null;\n }\n return parsed;\n },\n [options]\n );\n const readValue = useCallback(() => {\n if (IS_SERVER3) {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : null;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return null;\n }\n }, [key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return void 0;\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return storedValue;\n}\nvar initialSize = {\n width: void 0,\n height: void 0\n};\nfunction useResizeObserver(options) {\n const { ref, box = \"content-box\" } = options;\n const [{ width, height }, setSize] = useState(initialSize);\n const isMounted = useIsMounted();\n const previousSize = useRef({ ...initialSize });\n const onResize = useRef(void 0);\n onResize.current = options.onResize;\n useEffect(() => {\n if (!ref.current)\n return;\n if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window))\n return;\n const observer = new ResizeObserver(([entry]) => {\n const boxProp = box === \"border-box\" ? \"borderBoxSize\" : box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n const newHeight = extractSize(entry, boxProp, \"blockSize\");\n const hasChanged = previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n if (hasChanged) {\n const newSize = { width: newWidth, height: newHeight };\n previousSize.current.width = newWidth;\n previousSize.current.height = newHeight;\n if (onResize.current) {\n onResize.current(newSize);\n } else {\n if (isMounted()) {\n setSize(newSize);\n }\n }\n }\n });\n observer.observe(ref.current, { box });\n return () => {\n observer.disconnect();\n };\n }, [box, ref, isMounted]);\n return { width, height };\n}\nfunction extractSize(entry, box, sizeType) {\n if (!entry[box]) {\n if (box === \"contentBoxSize\") {\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n return void 0;\n }\n return Array.isArray(entry[box]) ? entry[box][0][sizeType] : (\n // @ts-ignore Support Firefox's non-standard behavior\n entry[box][sizeType]\n );\n}\nvar IS_SERVER4 = typeof window === \"undefined\";\nfunction useScreen(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER4) {\n initializeWithValue = false;\n }\n const readScreen = () => {\n if (IS_SERVER4) {\n return void 0;\n }\n return window.screen;\n };\n const [screen, setScreen] = useState(() => {\n if (initializeWithValue) {\n return readScreen();\n }\n return void 0;\n });\n const debouncedSetScreen = useDebounceCallback(\n setScreen,\n options.debounceDelay\n );\n function handleSize() {\n const newScreen = readScreen();\n const setSize = options.debounceDelay ? debouncedSetScreen : setScreen;\n if (newScreen) {\n const {\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n } = newScreen;\n setSize({\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n });\n }\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return screen;\n}\nvar cachedScriptStatuses = /* @__PURE__ */ new Map();\nfunction getScriptNode(src) {\n const node = document.querySelector(\n `script[src=\"${src}\"]`\n );\n const status = node == null ? void 0 : node.getAttribute(\"data-status\");\n return {\n node,\n status\n };\n}\nfunction useScript(src, options) {\n const [status, setStatus] = useState(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return \"idle\";\n }\n if (typeof window === \"undefined\") {\n return \"loading\";\n }\n return cachedScriptStatuses.get(src) ?? \"loading\";\n });\n useEffect(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return;\n }\n const cachedScriptStatus = cachedScriptStatuses.get(src);\n if (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n setStatus(cachedScriptStatus);\n return;\n }\n const script = getScriptNode(src);\n let scriptNode = script.node;\n if (!scriptNode) {\n scriptNode = document.createElement(\"script\");\n scriptNode.src = src;\n scriptNode.async = true;\n if (options == null ? void 0 : options.id) {\n scriptNode.id = options.id;\n }\n scriptNode.setAttribute(\"data-status\", \"loading\");\n document.body.appendChild(scriptNode);\n const setAttributeFromEvent = (event) => {\n const scriptStatus = event.type === \"load\" ? \"ready\" : \"error\";\n scriptNode == null ? void 0 : scriptNode.setAttribute(\"data-status\", scriptStatus);\n };\n scriptNode.addEventListener(\"load\", setAttributeFromEvent);\n scriptNode.addEventListener(\"error\", setAttributeFromEvent);\n } else {\n setStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n }\n const setStateFromEvent = (event) => {\n const newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n setStatus(newStatus);\n cachedScriptStatuses.set(src, newStatus);\n };\n scriptNode.addEventListener(\"load\", setStateFromEvent);\n scriptNode.addEventListener(\"error\", setStateFromEvent);\n return () => {\n if (scriptNode) {\n scriptNode.removeEventListener(\"load\", setStateFromEvent);\n scriptNode.removeEventListener(\"error\", setStateFromEvent);\n }\n if (scriptNode && (options == null ? void 0 : options.removeOnUnmount)) {\n scriptNode.remove();\n cachedScriptStatuses.delete(src);\n }\n };\n }, [src, options == null ? void 0 : options.shouldPreventLoad, options == null ? void 0 : options.removeOnUnmount, options == null ? void 0 : options.id]);\n return status;\n}\nvar IS_SERVER5 = typeof window === \"undefined\";\nfunction useScrollLock(options = {}) {\n const { autoLock = true, lockTarget, widthReflow = true } = options;\n const [isLocked, setIsLocked] = useState(false);\n const target = useRef(null);\n const originalStyle = useRef(null);\n const lock = () => {\n if (target.current) {\n const { overflow, paddingRight } = target.current.style;\n originalStyle.current = { overflow, paddingRight };\n if (widthReflow) {\n const offsetWidth = target.current === document.body ? window.innerWidth : target.current.offsetWidth;\n const currentPaddingRight = parseInt(window.getComputedStyle(target.current).paddingRight, 10) || 0;\n const scrollbarWidth = offsetWidth - target.current.scrollWidth;\n target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`;\n }\n target.current.style.overflow = \"hidden\";\n setIsLocked(true);\n }\n };\n const unlock = () => {\n if (target.current && originalStyle.current) {\n target.current.style.overflow = originalStyle.current.overflow;\n if (widthReflow) {\n target.current.style.paddingRight = originalStyle.current.paddingRight;\n }\n }\n setIsLocked(false);\n };\n useIsomorphicLayoutEffect(() => {\n if (IS_SERVER5)\n return;\n if (lockTarget) {\n target.current = typeof lockTarget === \"string\" ? document.querySelector(lockTarget) : lockTarget;\n }\n if (!target.current) {\n target.current = document.body;\n }\n if (autoLock) {\n lock();\n }\n return () => {\n unlock();\n };\n }, [autoLock, lockTarget, widthReflow]);\n return { isLocked, lock, unlock };\n}\nvar IS_SERVER6 = typeof window === \"undefined\";\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER6) {\n return initialValueToUse;\n }\n try {\n const raw = window.sessionStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading sessionStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER6) {\n console.warn(\n `Tried setting sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.sessionStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting sessionStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER6) {\n console.warn(\n `Tried removing sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.sessionStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"session-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nfunction useStep(maxStep) {\n const [currentStep, setCurrentStep] = useState(1);\n const canGoToNextStep = currentStep + 1 <= maxStep;\n const canGoToPrevStep = currentStep - 1 > 0;\n const setStep = useCallback(\n (step) => {\n const newStep = step instanceof Function ? step(currentStep) : step;\n if (newStep >= 1 && newStep <= maxStep) {\n setCurrentStep(newStep);\n return;\n }\n throw new Error(\"Step not valid\");\n },\n [maxStep, currentStep]\n );\n const goToNextStep = useCallback(() => {\n if (canGoToNextStep) {\n setCurrentStep((step) => step + 1);\n }\n }, [canGoToNextStep]);\n const goToPrevStep = useCallback(() => {\n if (canGoToPrevStep) {\n setCurrentStep((step) => step - 1);\n }\n }, [canGoToPrevStep]);\n const reset = useCallback(() => {\n setCurrentStep(1);\n }, []);\n return [\n currentStep,\n {\n goToNextStep,\n goToPrevStep,\n canGoToNextStep,\n canGoToPrevStep,\n setStep,\n reset\n }\n ];\n}\n\n// src/useTernaryDarkMode/useTernaryDarkMode.ts\nvar COLOR_SCHEME_QUERY2 = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY2 = \"usehooks-ts-ternary-dark-mode\";\nfunction useTernaryDarkMode({\n defaultValue = \"system\",\n localStorageKey = LOCAL_STORAGE_KEY2,\n initializeWithValue = true\n} = {}) {\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY2, { initializeWithValue });\n const [mode, setMode] = useLocalStorage(localStorageKey, defaultValue, {\n initializeWithValue\n });\n const isDarkMode = mode === \"dark\" || mode === \"system\" && isDarkOS;\n const toggleTernaryDarkMode = () => {\n const modes = [\"light\", \"system\", \"dark\"];\n setMode((prevMode) => {\n const nextIndex = (modes.indexOf(prevMode) + 1) % modes.length;\n return modes[nextIndex];\n });\n };\n return {\n isDarkMode,\n ternaryDarkMode: mode,\n setTernaryDarkMode: setMode,\n toggleTernaryDarkMode\n };\n}\nfunction useTimeout(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (!delay && delay !== 0) {\n return;\n }\n const id = setTimeout(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n}\nfunction useToggle(defaultValue) {\n const [value, setValue] = useState(!!defaultValue);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return [value, toggle, setValue];\n}\nvar IS_SERVER7 = typeof window === \"undefined\";\nfunction useWindowSize(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER7) {\n initializeWithValue = false;\n }\n const [windowSize, setWindowSize] = useState(() => {\n if (initializeWithValue) {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n return {\n width: void 0,\n height: void 0\n };\n });\n const debouncedSetWindowSize = useDebounceCallback(\n setWindowSize,\n options.debounceDelay\n );\n function handleSize() {\n const setSize = options.debounceDelay ? debouncedSetWindowSize : setWindowSize;\n setSize({\n width: window.innerWidth,\n height: window.innerHeight\n });\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return windowSize;\n}\n\nexport { useBoolean, useClickAnyWhere, useCopyToClipboard, useCountdown, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDocumentTitle, useEventCallback, useEventListener, useHover, useIntersectionObserver, useInterval, useIsClient, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useOnClickOutside, useReadLocalStorage, useResizeObserver, useScreen, useScript, useScrollLock, useSessionStorage, useStep, useTernaryDarkMode, useTimeout, useToggle, useUnmount, useWindowSize };\n","import { ColDef, GridApi, IRowNode, ISizeColumnsToFitParams } from 'ag-grid-community';\nimport { CsvExportParams } from 'ag-grid-community';\nimport { createContext, useContext } from 'react';\n\nimport { ColDefT, GridBaseRow } from '../components';\n\nexport type GridFilterExternal<TData extends GridBaseRow> = (data: TData, rowNode: IRowNode) => boolean;\n\nexport interface AutoSizeColumnsProps {\n skipHeader?: boolean;\n colIds?: Set<string> | string[];\n userSizedColIds?: Set<string>;\n}\n\nexport type AutoSizeColumnsResult = { width: number } | null;\n\nexport interface StartCellEditingProps {\n rowId: number;\n colId: string;\n}\n\nexport interface GridContextType<TData extends GridBaseRow> {\n gridReady: boolean;\n gridRenderState: () => null | 'empty' | 'rows-visible';\n getColDef: (colId?: string) => ColDef | undefined;\n getColumns: (\n filter?: keyof ColDef | ((r: ColDef) => boolean | undefined | null | number | string),\n ) => ColDefT<TData, any>[];\n getColumnIds: (filter?: keyof ColDef | ((r: ColDef) => boolean | undefined | null | number | string)) => string[];\n setApis: (gridApi: GridApi | undefined, hasExternallySelectedItems: boolean, dataTestId?: string) => void;\n prePopupOps: () => void;\n setQuickFilter: (quickFilter: string) => void;\n editingCells: () => boolean;\n getSelectedRows: <T extends GridBaseRow>() => T[];\n getFilteredSelectedRows: <T extends GridBaseRow>() => T[];\n getSelectedRowIds: () => 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: (paramsOrGridWidth?: ISizeColumnsToFitParams) => void;\n startCellEditing: ({ rowId, colId }: StartCellEditingProps) => Promise<void>;\n // Restores the previous focus after cell editing\n resetFocusedCellAfterCellEditing: () => void;\n updatingCells: (\n props: { selectedRows: GridBaseRow[]; field?: string },\n fnUpdate: (selectedRows: any[]) => Promise<boolean>,\n setSaving?: (saving: boolean) => void,\n tabDirection?: 1 | 0 | -1,\n ) => Promise<boolean>;\n redrawRows: (rowNodes?: IRowNode[]) => void;\n externallySelectedItemsAreInSync: boolean;\n setExternallySelectedItemsAreInSync: (inSync: boolean) => void;\n waitForExternallySelectedItemsToBeInSync: () => Promise<void>;\n addExternalFilter: (filter: GridFilterExternal<TData>) => void;\n removeExternalFilter: (filter: GridFilterExternal<TData>) => void;\n isExternalFilterPresent: () => boolean;\n doesExternalFilterPass: (node: IRowNode) => boolean;\n invisibleColumnIds: string[] | undefined;\n setInvisibleColumnIds: (colIds: string[]) => void;\n downloadCsv: (csvExportParams?: CsvExportParams) => void;\n onBulkEditingComplete: () => Promise<void> | void;\n setOnBulkEditingComplete: (callback: (() => Promise<void> | void) | undefined) => void;\n showNoRowsOverlay: () => void;\n}\n\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 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 // eslint-disable-next-line @typescript-eslint/require-await\n startCellEditing: async () => {\n console.error('no context provider for startCellEditing');\n },\n resetFocusedCellAfterCellEditing: () => {\n console.error('no context provider for resetFocusedCellAfterCellEditing');\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 onBulkEditingComplete: () => {\n console.error('no context provider for onBulkEditingComplete');\n },\n setOnBulkEditingComplete: () => {\n console.error('no context provider for setOnBulkEditingComplete');\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 anyUpdating: () => boolean;\n checkUpdating: (fields: string | string[], id: number | string) => boolean;\n modifyUpdating: (\n fields: string | string[],\n ids: (number | string)[],\n fn: () => void | Promise<void>,\n ) => Promise<void>;\n updatedDep: number;\n updatingCols: () => string[];\n};\n\nexport const GridUpdatingContext = createContext<GridUpdatingContextType>({\n anyUpdating: () => {\n console.error('Missing GridUpdatingContext');\n return false;\n },\n checkUpdating: () => {\n console.error('Missing GridUpdatingContext');\n return false;\n },\n updatingCols: () => {\n console.error('Missing GridUpdatingContext');\n return [];\n },\n // eslint-disable-next-line @typescript-eslint/require-await\n modifyUpdating: async () => {\n console.error('Missing GridUpdatingContext');\n },\n updatedDep: 0,\n});\n","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 if (!menuRef.current) {\n return;\n }\n const { width, height } = menuRef.current.ownerDocument.body.getBoundingClientRect();\n if (width === 0 || height === 0) return;\n if (\n floatEqual(width, latestWindowSize.current.width, 1) &&\n floatEqual(height, latestWindowSize.current.height, 1)\n ) {\n return;\n }\n latestWindowSize.current = { width, height };\n flushSync(() => {\n latestHandlePosition.current();\n forceReposSubmenu();\n });\n }, 250);\n\n const resizeObserver = new ResizeObserver(callback);\n\n const observeTarget = menuRef.current.ownerDocument.body;\n resizeObserver.observe(observeTarget, { box: 'border-box' });\n return () => {\n callback.cancel();\n resizeObserver.unobserve(observeTarget);\n };\n }, [reposition]);\n\n useEffect(() => {\n if (!isOpen) {\n dispatch(HoverActionTypes.RESET, undefined, 0);\n if (!closeTransition) setOverflowData(undefined);\n return () => {};\n }\n\n const { position, alwaysUpdate } = menuItemFocus || {};\n const setItemFocus = () => {\n if (position === FocusPositions.FIRST) {\n dispatch(HoverActionTypes.FIRST, undefined, 0);\n } else if (position === FocusPositions.LAST) {\n dispatch(HoverActionTypes.LAST, undefined, 0);\n } else if (typeof position === 'number' && position >= -1) {\n dispatch(HoverActionTypes.SET_INDEX, undefined, position);\n }\n };\n\n if (alwaysUpdate) {\n setItemFocus();\n } else if (captureFocus) {\n // Use a timeout here because if set focus immediately, page might scroll unexpectedly.\n const id = setTimeout(\n () => {\n // If focus has already been set to a children element, don't set focus on menu or item\n if (menuRef.current && !menuRef.current.contains(document.activeElement)) {\n // Handle popover portal focus\n const popupElement = focusRef.current?.nextSibling;\n if (!focusFirstInput(popupElement)) {\n focusRef.current?.focus();\n }\n setItemFocus();\n }\n },\n openTransition ? 170 : 100,\n );\n\n return () => clearTimeout(id);\n }\n return () => {};\n }, [isOpen, openTransition, closeTransition, captureFocus, menuItemFocus, dispatch]);\n\n const isSubmenuOpen = openSubmenuCount > 0;\n const itemContext = useMemo(\n () => ({\n isParentOpen: isOpen,\n isSubmenuOpen,\n setOpenSubmenuCount,\n dispatch,\n updateItems,\n }),\n [isOpen, isSubmenuOpen, dispatch, updateItems],\n );\n\n let maxHeight: number | undefined;\n let overflowAmt: number | undefined;\n if (overflowData) {\n setDownOverflow ? (overflowAmt = overflowData.overflowAmt) : (maxHeight = overflowData.height);\n }\n\n const listContext = useMemo(\n () => ({\n reposSubmenu,\n overflow,\n overflowAmt,\n parentMenuRef: menuRef,\n parentDir: expandedDirection,\n }),\n [reposSubmenu, overflow, overflowAmt, expandedDirection],\n );\n const overflowStyle = maxHeight != null && maxHeight >= 0 ? { maxHeight, overflow } : undefined;\n\n const modifiers = useMemo(\n () => ({\n state,\n dir: expandedDirection,\n }),\n [state, expandedDirection],\n );\n const arrowModifiers = useMemo(() => ({ dir: expandedDirection }), [expandedDirection]);\n const _arrowClass = useBEM({\n block: menuClass,\n element: menuArrowClass,\n modifiers: arrowModifiers,\n className: arrowClassName,\n });\n\n const minHeight = useRef(0);\n if (dontShrinkIfDirectionIsTop && menuRef.current?.getBoundingClientRect) {\n const h = menuRef.current?.getBoundingClientRect().height;\n if (minHeight.current < h) minHeight.current = h;\n }\n\n const dontShrinkOps = useMemo(\n () =>\n expandedDirection === 'top' && dontShrinkIfDirectionIsTop\n ? {\n overflowY: isSubmenuOpen ? '' : 'auto',\n minHeight: (isSubmenuOpen ? 0 : minHeight.current) + 'px',\n }\n : undefined,\n [dontShrinkIfDirectionIsTop, expandedDirection, isSubmenuOpen],\n );\n\n return (\n <ul\n role=\"menu\"\n aria-label={ariaLabel}\n {...mergeProps({ onKeyDown, onAnimationEnd }, restProps)}\n {...commonProps(isDisabled)}\n ref={useCombinedRef(externalRef, menuRef)}\n className={useBEM({ block: menuClass, modifiers, className: menuClassName })}\n style={{\n ...menuStyle,\n ...overflowStyle,\n ...dontShrinkOps,\n margin: 0,\n display: state === 'closed' ? 'none' : undefined,\n position: 'absolute',\n left: menuPosition.x,\n top: menuPosition.y,\n }}\n >\n <div\n ref={focusRef}\n tabIndex={-1}\n style={{ position: 'absolute', left: 0, top: 0 }}\n onKeyDown={(event) => {\n if (event.key == 'Tab') {\n event.preventDefault();\n event.stopPropagation();\n safeCall(onClose, {\n key: event.key,\n shiftKey: event.shiftKey,\n reason:\n event.key === 'Tab'\n ? event.shiftKey\n ? CloseReason.TAB_BACKWARD\n : CloseReason.TAB_FORWARD\n : CloseReason.CLICK,\n });\n }\n }}\n />\n {arrow && (\n <div\n className={_arrowClass}\n style={{\n ...arrowStyle,\n position: 'absolute',\n left: arrowPosition.x,\n top: arrowPosition.y,\n }}\n ref={arrowRef}\n />\n )}\n\n <MenuListContext.Provider value={listContext}>\n <MenuListItemContext.Provider value={itemContext}>\n <HoverItemContext.Provider value={hoverItem}>{children}</HoverItemContext.Provider>\n </MenuListItemContext.Provider>\n </MenuListContext.Provider>\n </ul>\n );\n};\n","import { FocusEvent, ForwardedRef, forwardRef, MutableRefObject, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { hasParentClass } from '../../utils/util';\nimport { EventHandlersContext, EventHandlersContextType } from '../contexts/EventHandlersContext';\nimport { ItemSettingsContext } from '../contexts/ItemSettingsContext';\nimport { SettingsContext } from '../contexts/SettingsContext';\nimport { useBEM } from '../hooks';\nimport { ControlledMenuProps, PortalFieldType, RadioChangeEvent } from '../types';\nimport { CloseReason, getTransition, isMenuOpen, Keys, menuContainerClass, mergeProps, safeCall } from '../utils';\nimport { MenuList } from './MenuList';\n\nexport const ControlledMenuFr = (\n {\n 'aria-label': ariaLabel,\n className,\n containerProps,\n initialMounted,\n unmountOnClose,\n transition,\n transitionTimeout,\n boundingBoxRef,\n boundingBoxPadding,\n reposition = 'auto',\n submenuOpenDelay = 300,\n submenuCloseDelay = 150,\n skipOpen,\n viewScroll = 'initial',\n portal,\n theming,\n onItemClick,\n onClose,\n saveButtonRef,\n ...restProps\n }: ControlledMenuProps & { saveButtonRef?: MutableRefObject<HTMLButtonElement | null> },\n externalRef: ForwardedRef<HTMLUListElement>,\n) => {\n const containerRef = useRef<HTMLElement>();\n const scrollNodesRef = useRef<{ anchors?: HTMLDivElement[] }>({});\n const { anchorRef, state } = restProps;\n\n const settings = useMemo(\n () => ({\n initialMounted,\n unmountOnClose,\n transition,\n transitionTimeout,\n boundingBoxRef,\n boundingBoxPadding,\n rootMenuRef: containerRef,\n rootAnchorRef: anchorRef,\n scrollNodesRef,\n reposition,\n viewScroll,\n }),\n [\n initialMounted,\n unmountOnClose,\n transition,\n transitionTimeout,\n anchorRef,\n boundingBoxRef,\n boundingBoxPadding,\n reposition,\n viewScroll,\n ],\n );\n\n const isWithinMenu = useCallback(\n (target: EventTarget | null) =>\n hasParentClass('szh-menu--state-open', target as Node) ||\n // This is temporary, it will be removed when the overlay click is fixed\n hasParentClass('LuiModalPrefab', target as Node) ||\n hasParentClass('prefab-modal', target as Node),\n [],\n );\n\n const handleScreenEventForSave = useCallback(\n (ev: MouseEvent) => {\n if (!isWithinMenu(ev.target)) {\n ev.preventDefault();\n ev.stopPropagation();\n // Note: There's an issue in React17\n // the cell doesn't refresh during update if save is invoked from a native event\n // This doesn't happen in React18\n // To work around it, I invoke the save by clicking on a passed in invisible button ref\n if (saveButtonRef?.current) {\n saveButtonRef.current.setAttribute('data-reason', CloseReason.BLUR);\n saveButtonRef.current.click();\n } else safeCall(onClose, { reason: CloseReason.BLUR });\n\n // If a user clicks on the menu button when a menu is open, we need to close the menu.\n // However, a blur event will be fired prior to the click event on menu button,\n // which makes the menu first close and then open again.\n // If this happens, e.relatedTarget is incorrectly set to null instead of the button in Safari and Firefox,\n // and makes it difficult to determine whether onBlur is fired because of clicking on menu button.\n // This is a workaround approach which sets a flag to skip a following click event.\n if (skipOpen) {\n skipOpen.current = true;\n setTimeout(() => (skipOpen.current = false), 300);\n }\n }\n },\n [isWithinMenu, onClose, saveButtonRef, skipOpen],\n );\n\n const handleScreenEventForCancel = useCallback(\n (ev: MouseEvent) => {\n if (!isWithinMenu(ev.target)) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n },\n [isWithinMenu],\n );\n\n const lastTabDownEl = useRef<Element>();\n const lastEnterDownEl = useRef<Element>();\n const handleKeyboardTabAndEnter = useCallback(\n (isDown: boolean) => (ev: KeyboardEvent) => {\n const thisDocument = anchorRef?.current ? anchorRef?.current.ownerDocument : document;\n const activeElement = thisDocument.activeElement;\n if (!anchorRef?.current || !activeElement) {\n return;\n }\n if (ev.key !== 'Tab' && ev.key !== 'Enter' && ev.key !== 'Esc') {\n return;\n }\n\n if (ev.repeat) {\n ev.preventDefault();\n ev.stopPropagation();\n return;\n }\n\n if (ev.key === 'Esc') {\n ev.preventDefault();\n ev.stopPropagation();\n safeCall(onClose, { key: ev.key, reason: CloseReason.CANCEL });\n return;\n }\n\n const invokeSave = (reason: string) => {\n if (!saveButtonRef?.current) return;\n saveButtonRef.current?.setAttribute('data-reason', reason);\n saveButtonRef?.current?.click();\n };\n\n // data-allowtabtosave is used such that list filter inputs can use tab to save\n const allowTabToSave = activeElement.getAttribute('data-allowtabtosave') == 'true';\n\n const inputElsIterator = thisDocument.querySelectorAll<HTMLElement>('.szh-menu--state-open input,textarea');\n let inputEls: HTMLElement[] = [];\n inputElsIterator.forEach((el) => inputEls.push(el));\n inputEls = inputEls.filter((el) => !(el as any).disabled);\n if (inputEls.length === 0) return;\n const firstInputEl = inputEls[0];\n const lastInputEl = inputEls[inputEls.length - 1];\n\n const isTextArea = activeElement.nodeName === 'TEXTAREA';\n const suppressEnterAutoSave = activeElement.getAttribute('data-disableenterautosave') == 'true' || isTextArea;\n\n if (ev.key === 'Tab') {\n const tabDirection = ev.shiftKey ? CloseReason.TAB_BACKWARD : CloseReason.TAB_FORWARD;\n if (\n (activeElement === lastInputEl && !ev.shiftKey) ||\n (activeElement === firstInputEl && ev.shiftKey) ||\n allowTabToSave\n ) {\n ev.preventDefault();\n ev.stopPropagation();\n\n if (isDown) {\n lastTabDownEl.current = activeElement;\n } else {\n lastTabDownEl.current == activeElement && invokeSave(tabDirection);\n }\n }\n }\n\n const type = activeElement.getAttribute('type');\n const isTextInput = type === 'text' || type == null || type === 'textarea';\n\n switch (activeElement.nodeName) {\n case 'INPUT':\n {\n // If there's only one input element, we support tab and enter\n if (isTextInput && ev.key === 'Enter' && !suppressEnterAutoSave) {\n ev.preventDefault();\n ev.stopPropagation();\n if (isDown) {\n lastEnterDownEl.current = activeElement;\n } else {\n lastEnterDownEl.current == activeElement && invokeSave(CloseReason.CLICK);\n }\n }\n }\n break;\n }\n },\n [anchorRef, onClose, saveButtonRef],\n );\n\n const handleKeydownTabAndEnter = useMemo(() => handleKeyboardTabAndEnter(true), [handleKeyboardTabAndEnter]);\n const handleKeyupTabAndEnter = useMemo(() => handleKeyboardTabAndEnter(false), [handleKeyboardTabAndEnter]);\n\n useEffect(() => {\n if (isMenuOpen(state)) {\n const thisDocument = anchorRef?.current ? anchorRef?.current.ownerDocument : document;\n thisDocument.addEventListener('keydown', handleKeydownTabAndEnter, true);\n thisDocument.addEventListener('keyup', handleKeyupTabAndEnter, true);\n thisDocument.addEventListener('mousedown', handleScreenEventForSave, true);\n thisDocument.addEventListener('mouseup', handleScreenEventForCancel, true);\n thisDocument.addEventListener('click', handleScreenEventForCancel, true);\n thisDocument.addEventListener('dblclick', handleScreenEventForCancel, true);\n return () => {\n thisDocument.removeEventListener('keydown', handleKeydownTabAndEnter, true);\n thisDocument.removeEventListener('keyup', handleKeyupTabAndEnter, true);\n thisDocument.removeEventListener('mousedown', handleScreenEventForSave, true);\n thisDocument.removeEventListener('mouseup', handleScreenEventForCancel, true);\n thisDocument.removeEventListener('click', handleScreenEventForCancel, true);\n thisDocument.removeEventListener('dblclick', handleScreenEventForCancel, true);\n };\n }\n return () => {};\n }, [\n handleScreenEventForSave,\n handleScreenEventForCancel,\n state,\n anchorRef,\n handleKeydownTabAndEnter,\n handleKeyupTabAndEnter,\n ]);\n\n const itemSettings = useMemo(\n () => ({\n submenuOpenDelay,\n submenuCloseDelay,\n }),\n [submenuOpenDelay, submenuCloseDelay],\n );\n\n const eventHandlers = useMemo(\n (): EventHandlersContextType => ({\n handleClick(event: RadioChangeEvent, isCheckOrRadio: boolean) {\n if (!event.stopPropagation) safeCall(onItemClick, event);\n\n let keepOpen = event.keepOpen;\n if (keepOpen === undefined) {\n // if event.keepOpen is undefined, the following default behaviour is used\n // According to WAI-ARIA Authoring Practices 1.1\n // Keep menu open when check or radio is invoked by SPACE key\n keepOpen = isCheckOrRadio && event.key === Keys.SPACE;\n }\n\n if (!keepOpen) {\n safeCall(onClose, {\n value: event.value,\n key: event.key,\n shiftKey: event.shiftKey,\n reason:\n event.key === 'Tab'\n ? event.shiftKey\n ? CloseReason.TAB_BACKWARD\n : CloseReason.TAB_FORWARD\n : CloseReason.CLICK,\n });\n }\n },\n\n handleClose(key?: string) {\n safeCall(onClose, { key, reason: CloseReason.CLICK });\n },\n }),\n [onItemClick, onClose],\n );\n\n const onKeyUp = (e: KeyboardEvent) => {\n switch (e.key) {\n case Keys.ESC:\n e.preventDefault();\n e.stopPropagation();\n safeCall(onClose, { key: e.key, reason: CloseReason.CANCEL });\n break;\n }\n };\n\n const onBlur = (e: FocusEvent) => {\n if (\n isMenuOpen(state) &&\n !e.currentTarget.contains(e.relatedTarget || document.activeElement) &&\n !isWithinMenu(e.relatedTarget)\n ) {\n safeCall(onClose, { reason: CloseReason.BLUR });\n\n // If a user clicks on the menu button when a menu is open, we need to close the menu.\n // However, a blur event will be fired prior to the click event on menu button,\n // which makes the menu first close and then open again.\n // If this happens, e.relatedTarget is incorrectly set to null instead of the button in Safari and Firefox,\n // and makes it difficult to determine whether onBlur is fired because of clicking on menu button.\n // This is a workaround approach which sets a flag to skip a following click event.\n if (skipOpen) {\n skipOpen.current = true;\n setTimeout(() => (skipOpen.current = false), 300);\n }\n }\n };\n\n const itemTransition = getTransition(transition, 'item');\n const modifiers = useMemo(() => ({ theme: theming, itemTransition }), [theming, itemTransition]);\n\n const menuList = (\n <div\n {...mergeProps({ onKeyUp, onBlur }, containerProps)}\n className={useBEM({\n block: menuContainerClass,\n modifiers,\n className,\n })}\n style={{ ...containerProps?.style, position: 'relative' }}\n ref={containerRef}\n >\n {state && (\n <SettingsContext.Provider value={settings}>\n <ItemSettingsContext.Provider value={itemSettings}>\n <EventHandlersContext.Provider value={eventHandlers}>\n <MenuList\n {...restProps}\n ariaLabel={ariaLabel || 'Menu'}\n externalRef={externalRef}\n containerRef={containerRef}\n onClose={onClose}\n />\n </EventHandlersContext.Provider>\n </ItemSettingsContext.Provider>\n </SettingsContext.Provider>\n )}\n </div>\n );\n\n if (portal === true && anchorRef?.current != null) {\n if (hasParentClass('react-menu-inline-test', anchorRef.current)) {\n portal = false;\n } else {\n portal = { target: anchorRef.current.ownerDocument.body } as PortalFieldType;\n }\n }\n\n if (portal) {\n if (typeof portal === 'boolean') {\n if (portal && typeof document !== 'undefined') {\n return createPortal(menuList, document.body);\n }\n } else {\n return portal.target ? createPortal(menuList, portal.target) : portal.stablePosition ? null : menuList;\n }\n }\n return menuList;\n};\n\nexport const ControlledMenu = forwardRef(ControlledMenuFr);\n","import { LegacyRef, ReactElement, useContext, useMemo, useRef } from 'react';\n\nimport { EventHandlersContext } from '../contexts/EventHandlersContext';\nimport { useBEM, useCombinedRef, useItemState } from '../hooks';\nimport { BaseProps } from '../types';\nimport { commonProps, menuClass, menuItemClass, mergeProps, safeCall, withHovering } from '../utils';\nimport { withHoveringResultProps } from '../utils/withHovering';\n\nexport interface FocusableItemProps extends BaseProps, withHoveringResultProps {\n disabled?: boolean;\n children: (ref: LegacyRef<any>) => ReactElement;\n}\n\nexport const FocusableItemFr = ({\n className,\n disabled,\n children,\n isHovering,\n menuItemRef,\n externalRef,\n ...restProps\n}: FocusableItemProps) => {\n const isDisabled = !!disabled;\n const ref = useRef(null);\n const { setHover, onPointerLeave, ...restStateProps } = useItemState(menuItemRef, ref, isHovering, isDisabled);\n const { handleClose } = useContext(EventHandlersContext);\n\n const modifiers = useMemo(\n () => ({\n disabled: isDisabled,\n hover: isHovering,\n focusable: true,\n }),\n [isDisabled, isHovering],\n );\n\n const renderChildren = useMemo(\n () =>\n safeCall(children, {\n ...modifiers,\n ref,\n closeMenu: handleClose,\n }),\n [children, modifiers, handleClose],\n );\n\n const mergedProps = mergeProps(\n {\n ...restStateProps,\n onPointerLeave: (e: PointerEvent) => onPointerLeave(e, true),\n onFocus: setHover,\n },\n restProps,\n );\n\n return (\n <li\n role=\"menuitem\"\n {...mergedProps}\n {...commonProps(isDisabled)}\n ref={useCombinedRef(externalRef, menuItemRef)}\n className={useBEM({ block: menuClass, element: menuItemClass, modifiers, className })}\n >\n {renderChildren}\n </li>\n );\n};\n\nexport const FocusableItem = withHovering('FocusableItem', FocusableItemFr);\n","import {\n cloneElement,\n ForwardedRef,\n forwardRef,\n Fragment,\n ReactElement,\n useCallback,\n useImperativeHandle,\n useRef,\n} from 'react';\n\nimport { useCombinedRef, useMenuChange, useMenuStateAndFocus } from '../hooks';\nimport { MenuButtonModifiers, MenuCloseEvent, RenderProp, RootMenuProps, UncontrolledMenuProps } from '../types';\nimport { FocusPositions, getName, isMenuOpen, Keys, mergeProps, safeCall } from '../utils';\nimport { ControlledMenu } from './ControlledMenu';\n\n//\n// Menu\n// ----------------------------------------------------------------------\nexport interface MenuProps extends RootMenuProps, UncontrolledMenuProps {\n /**\n * Can be a `MenuButton`, a `button` element, or a React component.\n * It also can be a render function that returns one.\n *\n * If a React component is provided, it needs to implement the following contracts:\n * - Accepts a `ref` prop that is forwarded to an element to which menu will be positioned.\n * The element should be able to receive focus.\n * - Accepts `onClick` and `onKeyDown` event props.\n */\n menuButton: RenderProp<MenuButtonModifiers, ReactElement>;\n}\n\nexport function MenuFr(\n { 'aria-label': ariaLabel, menuButton, instanceRef, onMenuChange, ...restProps }: MenuProps,\n externalRef: ForwardedRef<ReactElement>,\n) {\n const [stateProps, toggleMenu, openMenu] = useMenuStateAndFocus(restProps);\n const isOpen = isMenuOpen(stateProps.state);\n const skipOpen = useRef(false);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleClose = useCallback(\n (e: MenuCloseEvent) => {\n toggleMenu(false);\n if (e.key) buttonRef.current && buttonRef.current.focus();\n },\n [toggleMenu],\n );\n\n const onClick = (e: MouseEvent) => {\n if (skipOpen.current) return;\n // Focus (hover) the first menu item when onClick event is trigger by keyboard\n openMenu(e.detail === 0 ? FocusPositions.FIRST : undefined);\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case Keys.UP:\n openMenu(FocusPositions.LAST);\n break;\n\n case Keys.DOWN:\n openMenu(FocusPositions.FIRST);\n break;\n\n default:\n return;\n }\n\n e.preventDefault();\n };\n\n // Too many mixed types here to figure out what to pick for button. Bad code.\n const button: any = safeCall(menuButton, { open: isOpen });\n if (!button || !button.type) throw new Error('Menu requires a menuButton prop.');\n\n const buttonProps = {\n ref: useCombinedRef(button.ref, buttonRef),\n ...mergeProps({ onClick, onKeyDown }, button.props),\n isOpen: false,\n };\n if (getName(button.type) === 'MenuButton') {\n buttonProps.isOpen = isOpen;\n }\n const renderButton = cloneElement(button, buttonProps);\n\n useMenuChange(onMenuChange, isOpen);\n\n useImperativeHandle(instanceRef, () => ({\n openMenu,\n closeMenu: () => toggleMenu(false),\n }));\n\n return (\n <Fragment>\n {renderButton}\n <ControlledMenu\n {...restProps}\n {...stateProps}\n aria-label={ariaLabel || (typeof button.props.children === 'string' ? button.props.children : 'Menu')}\n anchorRef={buttonRef}\n ref={externalRef}\n onClose={handleClose}\n skipOpen={skipOpen}\n />\n </Fragment>\n );\n}\nexport const Menu = forwardRef(MenuFr);\n","import { forwardRef, LegacyRef, ReactNode, useMemo } from 'react';\n\nimport { useBEM } from '../hooks';\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, resetFocusedCellAfterCellEditing, getSelectedRows } = useContext(GridContext);\n\n const [isOpen, setOpen] = useState(false);\n const [anchorPoint, setAnchorPoint] = useState({ x: 0, y: 0 });\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const clickedColDefRef = useRef<ColDef>(null!);\n const selectedRowsRef = useRef<any[]>([]);\n const clickedRowRef = useRef<any>(null);\n\n const openMenu = useCallback(\n (e: PointerEvent | null | undefined) => {\n if (!e) return;\n prePopupOps();\n setAnchorPoint({ x: e.clientX, y: e.clientY });\n setOpen(true);\n },\n [prePopupOps],\n );\n\n const closeMenu = useCallback(() => {\n setOpen(false);\n redrawRows();\n resetFocusedCellAfterCellEditing();\n }, [resetFocusedCellAfterCellEditing, redrawRows]);\n\n const cellContextMenu = useCallback(\n (event: CellContextMenuEvent) => {\n if (contextMenuSelectRow && !event.node.isSelected()) {\n event.node.setSelected(true, true);\n }\n\n clickedColDefRef.current = event.colDef;\n selectedRowsRef.current = getSelectedRows();\n clickedRowRef.current = event.data;\n\n // This is actually a pointer event\n openMenu(event.event as PointerEvent);\n },\n [contextMenuSelectRow, getSelectedRows, openMenu],\n );\n\n return {\n openMenu,\n cellContextMenu,\n component: ContextMenu ? (\n <>\n <ControlledMenu\n anchorPoint={anchorPoint}\n state={isOpen ? 'open' : 'closed'}\n direction=\"right\"\n onClose={closeMenu}\n >\n {isOpen && (\n <ContextMenu\n selectedRows={selectedRowsRef.current}\n clickedRow={clickedRowRef.current}\n colDef={clickedColDefRef.current}\n close={closeMenu}\n />\n )}\n </ControlledMenu>\n </>\n ) : null,\n };\n};\n","import { LuiIcon, LuiStatusSpinner } from '@linzjs/lui';\nimport { ForwardedRef, forwardRef } from 'react';\n\nconst GridLoadingOverlayComponentFr = (\n props: { headerRowHeight: number },\n externalRef: ForwardedRef<HTMLDivElement>,\n) => (\n <div\n ref={externalRef}\n style={{\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n position: 'absolute',\n backgroundColor: 'rgba(255,255,255,0.5)',\n }}\n >\n <div style={{ height: '100%', position: 'relative' }}>\n <div style={{ position: 'absolute', left: 0, top: props.headerRowHeight, right: 0, bottom: 0 }}>\n <LuiStatusSpinner />\n </div>\n </div>\n </div>\n);\n\nconst GridLoadingOverlayComponent = forwardRef(GridLoadingOverlayComponentFr);\n\nexport interface GridNoRowsOverlayProps {\n loading: boolean;\n rowCount: number | undefined | null;\n filteredRowCount: number;\n noRowsOverlayText: string | undefined;\n noRowsMatchingOverlayText: string | undefined;\n headerRowHeight: number;\n}\n\nexport const GridNoRowsOverlayFr = (props: GridNoRowsOverlayProps, externalRef: ForwardedRef<HTMLDivElement>) => {\n if (props.loading) {\n return <GridLoadingOverlayComponent ref={externalRef} headerRowHeight={props.headerRowHeight} />;\n }\n if (props.rowCount === 0) {\n return (\n <div ref={externalRef} className={'GridNoRowsOverlay'}>\n <LuiIcon name=\"ic_info_outline\" alt=\"\" size=\"md\" />\n {props.noRowsOverlayText ?? 'There are currently no rows'}\n </div>\n );\n }\n if (props.filteredRowCount === 0) {\n return (\n <div ref={externalRef} className={'GridNoRowsOverlay'}>\n <LuiIcon name=\"ic_info_outline\" alt=\"\" size=\"md\" />\n {props.noRowsMatchingOverlayText ?? 'All rows have been filtered'}\n </div>\n );\n }\n return <div ref={externalRef} />;\n};\n\nexport const GridNoRowsOverlay = forwardRef(GridNoRowsOverlayFr);\n","import { IRowNode } from 'ag-grid-community';\nimport { ColumnState } from 'ag-grid-community';\nimport { PostSortRowsParams } from 'ag-grid-community';\nimport { isEmpty } from 'lodash-es';\nimport { useCallback, useContext, useRef } from 'react';\n\nimport { GridContext } from '../contexts/GridContext';\n\ninterface PostSortRowsHookProps {\n setStaleGrid: (stale: boolean) => void;\n}\n\n/**\n * Retains last sort order from via <AgGrid postRowSort>.\n * Then applies this sort until next sort column change.\n * Handles stale sort, when you edit a row but don't want to re-sort.\n */\nexport const usePostSortRowsHook = ({ setStaleGrid }: PostSortRowsHookProps) => {\n const { redrawRows } = useContext(GridContext);\n\n // On first run we need to init the first backed up sort order\n const initialised = useRef(false);\n\n // Used to detect sort order has changed since last run\n const lastSortOrderHash = useRef<string>('');\n\n // Used to detect if sort order was the same, has the direction changed\n const previousRowSortIndexRef = useRef<Record<string, { index: number; hash: string } | undefined>>({});\n\n // stale sort is when there's a sort and user edits a row\n // this applies a class to the div wrapping the grid which in turn adds a * beside the sort arrow\n const sortWasStale = useRef(false);\n\n // Previous col sort is stored and reapplied if the sort direction changes on the same column and the sort was stale\n // As a sort on a stale row should just resort, not change sort direction\n const previousColSort = useRef<ColumnState[]>([]);\n\n const previousQuickFilter = useRef('');\n\n return useCallback(\n ({ api, nodes }: PostSortRowsParams) => {\n // Grid is destroyed\n if (!api) return;\n\n const previousRowSortIndex = previousRowSortIndexRef.current;\n\n const hashNode = (node: IRowNode | undefined) => {\n return node ? JSON.stringify(node.data) : '';\n };\n\n const copyCurrentSortSettings = (): ColumnState[] =>\n api.getColumnState().map((row) => ({ colId: row.colId, sort: row.sort, sortIndex: row.sortIndex }));\n\n const backupSortOrder = () => {\n for (const x in previousRowSortIndex) delete previousRowSortIndex[x];\n nodes.forEach((node, index) => (previousRowSortIndex[`${node.data.id}`] = { index, hash: hashNode(node) }));\n };\n\n // Check if column is the first sorted column. Note: column is preconfigured to sort its sortIndex is null not 1\n const isFirstSortColumn = (row: ColumnState) => row.sort && [0, null].includes(row.sortIndex ?? null);\n\n const isSameColumnAndDifferentSort = (col1: ColumnState | undefined, col2: ColumnState | undefined) =>\n col1 && col2 && col1.colId === col2.colId && col1.sort != col2.sort;\n\n const restorePreviousSortColumnState = () => api.applyColumnState({ state: previousColSort.current });\n\n const sortNodesByPreviousSort = () => {\n nodes.sort(\n (a, b) =>\n (previousRowSortIndex[`${a.data.id}`]?.index ?? Number.MAX_SAFE_INTEGER) -\n (previousRowSortIndex[`${b.data.id}`]?.index ?? Number.MAX_SAFE_INTEGER),\n );\n };\n\n // On first load copy the current sort\n if (!initialised.current) {\n initialised.current = true;\n previousColSort.current = copyCurrentSortSettings();\n }\n\n const newSortOrder = JSON.stringify(copyCurrentSortSettings());\n let sortOrderChanged = newSortOrder != lastSortOrderHash.current;\n\n const quickFilter = api.getQuickFilter();\n if (previousQuickFilter.current != quickFilter) {\n previousQuickFilter.current = quickFilter ?? '';\n sortOrderChanged = true;\n }\n\n if (isEmpty(previousRowSortIndex)) {\n backupSortOrder();\n }\n\n if (sortOrderChanged) {\n const thisFirstCol = copyCurrentSortSettings().find(isFirstSortColumn);\n const previousFirstCol = previousColSort.current.find(isFirstSortColumn);\n\n // Change to sort can be: (in the context of stale sort do...)\n // - no sort to sorted (do nothing)\n // - asc to desc (resort as asc, and remove stale sort)\n // - desc to no sort (resort as desc, and remove stale sort)\n const wasSortChangedOnSameColumn =\n previousFirstCol && (!thisFirstCol || isSameColumnAndDifferentSort(previousFirstCol, thisFirstCol));\n\n // if sort was stale, and we're here, someone has clicked a stale sort order (^*) in the column header\n if (sortWasStale.current && wasSortChangedOnSameColumn) {\n // Sort was an existing priority 1 column\n // We want to re-sort with the old sort direction and clear stale sort\n sortWasStale.current = false;\n setStaleGrid(false);\n\n // trigger a recapture of sort order\n lastSortOrderHash.current = '';\n restorePreviousSortColumnState();\n } else {\n // Sort was on a different column so clear sort and sort like normal\n if (sortWasStale.current) {\n sortWasStale.current = false;\n setStaleGrid(false);\n }\n // Columns were sorted so retain the sort\n backupSortOrder();\n lastSortOrderHash.current = newSortOrder;\n }\n } else {\n let firstChangedNodeIndex = -1;\n let lastNewNode: IRowNode | undefined = undefined;\n let changedRowCount = 0;\n let newRowCount = 0;\n let index = 0;\n for (const node of nodes) {\n const psr = previousRowSortIndex[`${node.data.id}`];\n if (psr) {\n if (psr.hash != hashNode(node)) {\n if (firstChangedNodeIndex === -1) firstChangedNodeIndex = index;\n changedRowCount++;\n }\n } else {\n lastNewNode = node;\n newRowCount++;\n }\n index++;\n }\n\n let wasStale = false;\n if (changedRowCount === 0 && newRowCount === 1) {\n // insert new row at end\n const newIndex = index - 1;\n previousRowSortIndex[`${lastNewNode?.data.id}`] = { index: newIndex, hash: hashNode(lastNewNode) };\n wasStale = true;\n } else if (changedRowCount === 2 && newRowCount === 0) {\n // This must be a swap rows (sometimes it's not, needs further attention)\n backupSortOrder();\n wasStale = false;\n } else if (changedRowCount > 1 && newRowCount === 1) {\n // This must be a insert so, insert new row near the row that changed\n previousRowSortIndex[`${lastNewNode?.data.id}`] = {\n index: firstChangedNodeIndex + 0.5,\n hash: hashNode(lastNewNode),\n };\n wasStale = true;\n // For some reason AgGrid mis-positions the inserted row.\n lastNewNode && redrawRows();\n } else if (changedRowCount == 1 && newRowCount === 0) {\n // User edited one row so, do nothing, retain sort\n wasStale = true;\n } else if (changedRowCount !== 0 || newRowCount != 0) {\n // too many rows changed, resort\n backupSortOrder();\n }\n\n if (wasStale) {\n // Check if the sort order the aggrid passed matches our stale sort order\n const stillStale =\n Object.keys(previousRowSortIndex).length != nodes.length ||\n nodes.some((node, index) => previousRowSortIndex[`${node.data.id}`]?.index !== index);\n\n // If we haven't already processed a stale sort then...\n if (stillStale && !sortWasStale.current) {\n // backup sort state, so we can restore it when sort is clicked on a stale column\n previousColSort.current = copyCurrentSortSettings();\n sortWasStale.current = true;\n setStaleGrid(true);\n }\n }\n sortNodesByPreviousSort();\n }\n },\n [redrawRows, setStaleGrid],\n );\n};\n","import {\n AgGridEvent,\n AllCommunityModule,\n CellClassParams,\n CellClickedEvent,\n CellDoubleClickedEvent,\n CellFocusedEvent,\n CellKeyDownEvent,\n ColDef,\n ColGroupDef,\n ColumnResizedEvent,\n EditableCallback,\n EditableCallbackParams,\n GetRowIdParams,\n GridOptions,\n GridReadyEvent,\n ModelUpdatedEvent,\n ModuleRegistry,\n RowClickedEvent,\n RowDoubleClickedEvent,\n RowDragEndEvent,\n RowDragMoveEvent,\n SelectionChangedEvent,\n SelectionColumnDef,\n} from 'ag-grid-community';\nimport { AgGridReact } from 'ag-grid-react';\nimport clsx from 'clsx';\nimport { defer, delay, difference, isEmpty, last, omit, xorBy } from 'lodash-es';\nimport { ReactElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useInterval } from 'usehooks-ts';\n\nimport { AutoSizeColumnsResult, StartCellEditingProps, useGridContext } from '../contexts/GridContext';\nimport { GridUpdatingContext } from '../contexts/GridUpdatingContext';\nimport { 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>[] | ColGroupDef<TData>[];\n rowData: GridOptions['rowData'];\n selectColumnPinned?: ColDef['pinned'];\n noRowsOverlayText?: string;\n noRowsMatchingOverlayText?: string;\n animateRows?: boolean;\n rowHeight?: number;\n rowClassRules?: GridOptions['rowClassRules'];\n rowSelection?: 'single' | 'multiple';\n autoSelectFirstRow?: boolean;\n onCellFocused?: (props: { colDef: ColDef<TData>; data: TData }) => void;\n onColumnMoved?: GridOptions['onColumnMoved'];\n rowDragText?: GridOptions['rowDragText'];\n onRowDragEnd?: (props: GridOnRowDragEndProps<TData>) => Promise<void> | void;\n alwaysShowVerticalScroll?: boolean;\n suppressColumnVirtualization?: GridOptions['suppressColumnVirtualisation'];\n suppressReadOnlyStyle?: boolean;\n /**\n * When the grid is rendered using sizeColumns==\"auto\" this is called initially with the required container size to fit all content.\n * This allows you set the size of the panel to fit perfectly.\n */\n onContentSize?: (props: { width: number }) => void;\n /**\n * <ul>\n * <li>\"none\" to use aggrid defaults.</li>\n * <li>\"fit\" will adjust columns to fit within panel via min/max/initial sizing.\n * <b>Note:</b> This is only really needed if you have auto-height columns which prevents \"auto\" from working.\n * </li>\n * <li>\"auto\" will size columns based on their content but still obeying min/max sizing.</li>\n * <li>\"auto-skip-headers\" (default) same as auto but does not take headers into account.</li>\n * </ul>\n *\n * If you want to stretch to container width if width is greater than the container add a flex column.\n */\n sizeColumns?: 'fit' | 'auto' | 'auto-skip-headers' | 'none';\n /**\n * On first don't return a content size larger than this.\n */\n maxInitialWidth?: number;\n /**\n * When pressing tab whilst editing the grid will select and edit the next cell if available.\n * Once the last cell to edit closes this callback is called.\n */\n onBulkEditingComplete?: () => Promise<void> | void;\n\n /**\n * Context menu definition if required.\n */\n contextMenu?: GridContextMenuComponent<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 onRowClicked?: (event: RowClickedEvent) => void;\n onRowDoubleClicked?: (event: RowDoubleClickedEvent) => void;\n}\n\n/**\n * Wrapper for AgGrid to add commonly used functionality.\n */\nexport const Grid = <TData extends GridBaseRow = GridBaseRow>({\n 'data-testid': dataTestId,\n defaultPostSort = true,\n rowSelection = 'multiple',\n suppressColumnVirtualization = true,\n theme = 'ag-theme-step-default',\n sizeColumns = 'auto',\n selectColumnPinned = 'left',\n contextMenuSelectRow = false,\n singleClickEdit = false,\n rowData,\n rowHeight = theme === 'ag-theme-step-default' ? 40 : theme === 'ag-theme-step-compact' ? 36 : 40,\n selectable,\n onCellFocused: paramsOnCellFocused,\n maxInitialWidth,\n suppressReadOnlyStyle = false,\n ...params\n}: GridProps<TData>): ReactElement => {\n const {\n gridReady,\n gridRenderState,\n setApis,\n ensureRowVisible,\n getFirstRowId,\n selectRowsById,\n focusByRowById,\n ensureSelectedRowIsVisible,\n autoSizeColumns,\n sizeColumnsToFit,\n externallySelectedItemsAreInSync,\n setExternallySelectedItemsAreInSync,\n isExternalFilterPresent,\n doesExternalFilterPass,\n setOnBulkEditingComplete,\n getColDef,\n showNoRowsOverlay,\n prePopupOps,\n startCellEditing: propStartCellEditing,\n } = useGridContext<TData>();\n // CellEditingStop event happens too much for one edit\n const startedEditRef = useRef(false);\n const startCellEditing = useCallback(\n (props: StartCellEditingProps) => {\n startedEditRef.current = true;\n return propStartCellEditing(props);\n },\n [propStartCellEditing],\n );\n\n const { updatedDep, anyUpdating, updatingCols } = useContext(GridUpdatingContext);\n\n const gridDivRef = useRef<HTMLDivElement>(null);\n const lastSelectedIds = useRef<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 autoSizeResultRef = useRef<AutoSizeColumnsResult | null>(null);\n const prevRowsVisibleRef = useRef(false);\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 // 1. First we autosize to get the size of the columns on an infinite grid.\n if (sizeColumns === 'auto' || sizeColumns === 'auto-skip-headers') {\n // You can't skip headers until the grid has content\n const rowsVisible = gridRendered === 'rows-visible';\n const skipHeader = sizeColumns === 'auto-skip-headers' && rowsVisible;\n // If grid was empty and now has content we need to autosize\n if (rowsVisible !== prevRowsVisibleRef.current && rowsVisible) {\n prevRowsVisibleRef.current = rowsVisible;\n autoSizeResultRef.current = null;\n }\n const autoSizeResult =\n autoSizeResultRef.current ??\n autoSizeColumns({\n skipHeader,\n userSizedColIds: new Set(userSizedColIds.current.keys()),\n });\n // Auto-size failed retry later\n if (!autoSizeResult) {\n needsAutoSize.current = true;\n return;\n }\n\n autoSizeResultRef.current = autoSizeResult;\n // Calculate the auto-sized width, limit it to maxInitialWidth\n autoSizeResult.width = maxInitialWidth ? Math.min(autoSizeResult.width, maxInitialWidth) : autoSizeResult.width;\n if (gridRendered === 'empty') {\n // If the grid is empty we still do an onContentSize callback, we will do another callback when grid has data\n // We don't do this callback if we have previously had row data, or have already called back for empty\n if (!hasSetContentSizeEmpty.current && !hasSetContentSize.current) {\n hasSetContentSizeEmpty.current = true;\n params.onContentSize?.(autoSizeResult);\n }\n } else if (gridRendered === 'rows-visible') {\n // we have rows now so callback grid size\n if (!hasSetContentSize.current) {\n hasSetContentSize.current = true;\n params.onContentSize?.(autoSizeResult);\n }\n } else {\n // It should be impossible to get here\n console.error('Unknown value returned from hasGridRendered');\n }\n } else {\n console.log('sizeColumnsToFit 3');\n sizeColumnsToFit();\n }\n\n setAutoSized(true);\n needsAutoSize.current = false;\n }, [autoSizeColumns, gridRenderState, maxInitialWidth, params, rowData, sizeColumns, sizeColumnsToFit]);\n\n const lastOwnerDocumentRef = useRef<Document>();\n const wasVisibleRef = useRef(false);\n\n /**\n * Auto-size windows that had deferred auto-size\n * Reset focus if panel went from invisible to visible.\n */\n useInterval(() => {\n // If grid has become visible after previously being hidden, then refocus the last focused cell.\n const visible = !!gridDivRef.current?.checkVisibility?.();\n if (visible && !wasVisibleRef.current) {\n wasVisibleRef.current = true;\n const el = (window as any).__stepaggrid_lastfocuseventtarget;\n if (el) {\n // Setting this to null will cause a new refocus event\n (window as any).__stepaggrid_lastfocuseventtarget = null;\n // Check element is still part of document\n if (el.checkVisibility()) {\n el.focus();\n }\n }\n }\n wasVisibleRef.current = visible;\n\n // Check if window has been popped out and needs resize\n const currentDocument = gridDivRef.current?.ownerDocument;\n if (currentDocument !== lastOwnerDocumentRef.current) {\n lastOwnerDocumentRef.current = currentDocument;\n if (currentDocument) {\n needsAutoSize.current = true;\n }\n }\n if (\n needsAutoSize.current ||\n (!hasSetContentSize.current && (sizeColumns === 'auto' || sizeColumns === 'auto-skip-headers'))\n ) {\n 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 const mapColDef = useCallback(\n (colDef: ColDef | ColGroupDef): ColDef | ColGroupDef => {\n if ('children' in colDef) {\n return {\n ...colDef,\n children: colDef.children.map(mapColDef),\n };\n } else {\n const colDefEditable = colDef.editable;\n const editable = combineEditables(\n params.loading !== true && params.readOnly !== true,\n params.defaultColDef?.editable,\n colDefEditable,\n );\n return {\n ...colDef,\n editable,\n cellClassRules: {\n ...colDef.cellClassRules,\n 'GridCell-readonly': (ccp: CellClassParams<TData>) =>\n !suppressReadOnlyStyle && !editable(ccp as any as EditableCallbackParams<TData>),\n },\n };\n }\n },\n [params.defaultColDef?.editable, params.loading, params.readOnly, suppressReadOnlyStyle],\n );\n\n /**\n * Add selectable column to colDefs. Adjust column defs to block fit for auto sized columns.\n */\n const columnDefs = useMemo((): (ColDef | ColGroupDef)[] => {\n return params.columnDefs.map(mapColDef);\n }, [params.columnDefs, mapColDef]);\n\n const hasExternallySelectedItems = !!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 onRowDataUpdated = useCallback(() => {\n const length = rowData?.length ?? 0;\n if (previousRowDataLength.current !== length) {\n // We need to autosize all cells again\n autoSizeResultRef.current = null;\n 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 (anyUpdating()) {\n return;\n }\n\n const skipHeader = sizeColumns === 'auto-skip-headers';\n if ((sizeColumns === 'auto' || sizeColumns === 'auto-skip-headers') && hasSetContentSize.current) {\n autoSizeColumns({\n skipHeader,\n userSizedColIds: new Set(userSizedColIds.current.keys()),\n colIds: colIdsEdited.current,\n });\n }\n colIdsEdited.current.clear();\n }, [autoSizeColumns, rowData?.length, setInitialContentSize, sizeColumns, updatedDep, anyUpdating]);\n\n /**\n * Show/hide no rows overlay when model changes.\n */\n const onModelUpdated = useCallback((event: ModelUpdatedEvent) => {\n event.api.showNoRowsOverlay();\n }, []);\n\n /**\n * Handle double click edit\n */\n const onCellDoubleClick = useCallback(\n (event: CellDoubleClickedEvent) => {\n const editable = fnOrVar(event.colDef?.editable, event);\n if (editable && !invokeEditAction(event)) {\n void startCellEditing({ rowId: event.data.id, colId: event.column.getColId() });\n }\n },\n [startCellEditing],\n );\n\n /**\n * Handle single click edits\n */\n const onCellClicked = useCallback(\n (event: CellClickedEvent) => {\n const editable = fnOrVar(event.colDef?.editable, event);\n if ((editable && event.colDef.singleClickEdit) ?? singleClickEdit) {\n void startCellEditing({ rowId: event.data.id, colId: event.column.getColId() });\n }\n },\n [singleClickEdit, startCellEditing],\n );\n\n const onCellEditingStopped = useCallback(\n (event: AgGridEvent<TData>) => {\n if (!startedEditRef.current) {\n return;\n }\n startedEditRef.current = false;\n const api = event.api;\n // We need to redraw on fit as the updated row heights aren't visible\n if (sizeColumns === 'fit') {\n delay(() => {\n // Don't update if currently editing, that will stop the edit\n if (!anyUpdating() && document.querySelectorAll('.szh-menu--state-open').length === 0) {\n if (!api.isDestroyed()) {\n api.redrawRows();\n }\n }\n }, 500);\n }\n },\n [anyUpdating, sizeColumns],\n );\n\n /**\n * If cell has an edit action invoke it (if editable)\n */\n const invokeEditAction = (e: CellDoubleClickedEvent | CellKeyDownEvent): boolean => {\n const editAction = e.colDef?.cellRendererParams?.editAction;\n if (!editAction) return false;\n const editable = fnOrVar(e.colDef?.editable, e);\n if (editable) {\n if (!e.node.isSelected()) {\n e.node.setSelected(true, true);\n }\n editAction([e.data, ...e.api.getSelectedRows().filter((row) => row.id !== e.data.id)]);\n }\n return true;\n };\n\n /**\n * Start editing on pressing Enter\n */\n const onCellKeyPress = useCallback(\n (e: CellKeyDownEvent) => {\n const kbe = e.event as KeyboardEvent;\n if (kbe.key === 'Enter') {\n if (!invokeEditAction(e)) {\n void startCellEditing({ rowId: e.data.id, colId: e.column.getColId() });\n }\n }\n if (kbe.key === 'Tab') {\n prePopupOps();\n }\n },\n [prePopupOps, startCellEditing],\n );\n\n /**\n * Once the grid has auto-sized we want to run fit to fit the grid in its container,\n * but we don't want the non-flex auto-sized columns to \"fit\" size, so suppressSizeToFit is set to true.\n */\n const columnDefsAdjusted = useMemo(() => {\n const adjustColDefOrGroup = (colDef: ColDef<TData> | ColGroupDef<TData>) =>\n 'children' in colDef ? adjustGroupColDef(colDef) : adjustColDef(colDef);\n\n const adjustGroupColDef = (colDef: ColGroupDef<TData>): ColGroupDef<TData> => ({\n ...colDef,\n children: colDef.children.map((colDef) => adjustColDefOrGroup(colDef)),\n });\n\n const adjustColDef = (colDef: ColDef<TData>): ColDef<TData> => ({\n ...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) {\n return;\n }\n lastUpdatedDep.current = updatedDep;\n const colIds = updatingCols();\n // Updating possibly completed\n if (isEmpty(colIds)) {\n // Columns to resize?\n if (!isEmpty(colIdsEdited.current)) {\n const skipHeader = sizeColumns === 'auto-skip-headers';\n if (sizeColumns === 'auto' || skipHeader) {\n defer(() => {\n if (hasSetContentSize.current) {\n autoSizeColumns({\n skipHeader,\n userSizedColIds: new Set(userSizedColIds.current.keys()),\n colIds: colIdsEdited.current,\n });\n }\n });\n }\n colIdsEdited.current.clear();\n }\n } else {\n // Updates not complete, add them to a list of columns needing resize\n colIds.forEach((colId) => {\n if (colId && !getColDef(colId)?.flex) {\n colIdsEdited.current.add(colId);\n }\n });\n }\n }, [autoSizeColumns, getColDef, sizeColumns, updatedDep, updatingCols]);\n\n const prevLoading = useRef(false);\n useEffect(() => {\n const newLoading = !rowData || params.loading === true;\n if (newLoading && !prevLoading.current) {\n showNoRowsOverlay();\n }\n prevLoading.current = newLoading;\n }, [params.loading, rowData, showNoRowsOverlay]);\n\n /**\n * Set of column I'd's that are prevented from auto-sizing as they are user set\n */\n const userSizedColIds = useRef(new Map<string, number>());\n\n /**\n * Lock/unlock column width on user edit/reset.\n */\n const onColumnResized = useCallback((e: ColumnResizedEvent) => {\n const colId = e.column?.getColId();\n if (colId == null) {\n return;\n }\n const width = e.column?.getActualWidth();\n if (width == null) {\n return;\n }\n switch (e.source) {\n case 'uiColumnResized':\n userSizedColIds.current.set(colId, width);\n /*const colDef = e.column?.getColDef();\n if (!colDef?.flex) {\n onGridResize(e);\n }*/\n break;\n case 'autosizeColumns':\n userSizedColIds.current.delete(colId);\n //onGridResize(e);\n break;\n }\n }, []);\n\n const gridContextMenu = useGridContextMenu({ contextMenu: params.contextMenu, contextMenuSelectRow });\n\n const startDragYRef = useRef<number | null>(null);\n\n const clearHighlightRowClasses = useCallback(() => {\n document.querySelectorAll(`.ag-row-highlight-above`)?.forEach((el) => {\n el.classList.remove('ag-row-highlight-above');\n });\n document.querySelectorAll(`.ag-row-highlight-below`)?.forEach((el) => {\n el.classList.remove('ag-row-highlight-below');\n });\n }, []);\n\n const gridElementRef = useRef<Element>();\n const onRowDragMove = useCallback(\n (event: RowDragMoveEvent) => {\n if (startDragYRef.current === null) {\n startDragYRef.current = event.y;\n }\n\n const yDiff = event.y - startDragYRef.current;\n const data = event.overNode?.data;\n if (data) {\n clearHighlightRowClasses();\n // Find the grid element, this can only be found on start drag.\n // Once dragging is no progress the event target is the drag element not the start drag column.\n const targetEl = event.event.target as Element | undefined;\n if (targetEl) {\n const gridElement = targetEl.closest('.ag-body');\n if (gridElement) {\n gridElementRef.current = gridElement;\n }\n }\n gridElementRef.current?.querySelectorAll(`[row-id='${data.id}']`)?.forEach((el) => {\n el.classList.add(yDiff < 0 ? 'ag-row-highlight-above' : 'ag-row-highlight-below');\n });\n }\n },\n [clearHighlightRowClasses],\n );\n\n const onCellFocused = useCallback(\n (event: CellFocusedEvent<TData>) => {\n if (event.rowIndex == null) {\n return;\n }\n const api = event.api;\n const rowNode = api.getDisplayedRowAtIndex(event.rowIndex);\n const data = rowNode?.data;\n const column = event.column;\n if (!data || !column || typeof column === 'string') {\n return;\n }\n const colDef = column.getColDef();\n if (!colDef || typeof colDef === 'string') {\n return;\n }\n // Prevent repeated callbacks to cell focus when focus didn't change\n const { sourceEvent } = event;\n if (sourceEvent) {\n const cell = (sourceEvent.target as Element | undefined)?.closest?.('.ag-cell') ?? null;\n if ((window as any).__stepaggrid_lastfocuseventtarget === cell) {\n return;\n }\n (window as any).__stepaggrid_lastfocuseventtarget = cell;\n }\n\n paramsOnCellFocused?.({ colDef, data });\n },\n [paramsOnCellFocused],\n );\n\n const onRowDragEnd = useCallback(\n (event: RowDragEndEvent<TData>) => {\n clearHighlightRowClasses();\n gridElementRef.current = undefined;\n if (!params.onRowDragEnd || startDragYRef.current === null) {\n return;\n }\n const yDiff = event.y - startDragYRef.current;\n startDragYRef.current = null;\n if (event.node.rowIndex != null) {\n const movedRow = event.node.data;\n const targetRow = event.overNode?.data;\n if (!movedRow || !targetRow || movedRow === targetRow || yDiff === 0) {\n return;\n }\n void params.onRowDragEnd({ movedRow, targetRow, direction: yDiff > 0 ? 1 : -1 });\n }\n },\n [params, clearHighlightRowClasses],\n );\n\n useEffect(() => {\n if (params.setExternalSelectedItems && selectable == null) {\n console.warn(\n '<Grid/> has setExternalSelectedItems parameter, but is missing selectable parameter,' +\n 'this will cause weird delays in editing.\\nIf you need to hide selection column use hideSelectColumn=true',\n );\n }\n }, [params.setExternalSelectedItems, selectable]);\n\n // This is setting a ref in the GridContext so won't be triggering an update loop\n setOnBulkEditingComplete(params.onBulkEditingComplete);\n\n const getRowId = useCallback((params: GetRowIdParams<TData, unknown>) => `${params.data.id}`, []);\n const defaultColDef = useMemo(\n (): ColDef<TData, unknown> => ({\n minWidth: 48,\n ...omit(params.defaultColDef, ['editable', 'field', 'colId', 'tooltipField']),\n }),\n [params.defaultColDef],\n );\n\n const noRowsOverlayComponent = useCallback(\n (event: AgGridEvent) => {\n const headerRowCount = columnDefs.some((c) => (c as any).children) ? 2 : 1;\n\n let rowCount = 0;\n event.api.forEachNode(() => rowCount++);\n return (\n <GridNoRowsOverlay\n loading={!rowData || params.loading === true}\n rowCount={rowCount}\n headerRowHeight={headerRowCount * rowHeight}\n filteredRowCount={event.api.getDisplayedRowCount()}\n noRowsOverlayText={params.noRowsOverlayText}\n noRowsMatchingOverlayText={params.noRowsMatchingOverlayText}\n />\n );\n },\n [columnDefs, params.loading, params.noRowsMatchingOverlayText, params.noRowsOverlayText, rowData, rowHeight],\n );\n\n const selectionColumnDef = useMemo((): SelectionColumnDef => {\n // Note this has to be 1 for hidden otherwise ag-grid does crazy things whilst resizing\n const selectWidth = params.hideSelectColumn ? 0 : selectable && params.onRowDragEnd ? 76 : 48;\n return {\n suppressNavigable: params.hideSelectColumn,\n rowDrag: !!params.onRowDragEnd,\n minWidth: selectWidth,\n maxWidth: selectWidth,\n pinned: selectColumnPinned,\n headerComponentParams: {\n exportable: false,\n },\n 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 params.enableClickSelection,\n params.enableSelectionWithoutKeys,\n params.hideSelectColumn,\n params.onRowDragEnd,\n rowSelection,\n selectColumnPinned,\n selectable,\n ]);\n\n return (\n <div\n data-testid={dataTestId}\n className={clsx(\n 'Grid-container',\n theme,\n 'theme-specific',\n staleGrid && 'Grid-sortIsStale',\n gridReady && rowData && autoSized && 'Grid-ready',\n )}\n >\n {gridContextMenu.component}\n <div style={{ flex: 1 }} ref={gridDivRef}>\n <AgGridReact\n theme={'legacy'}\n rowSelection={\n selectable\n ? {\n enableSelectionWithoutKeys: params.enableSelectionWithoutKeys ?? false,\n enableClickSelection: params.enableClickSelection ?? false,\n mode: rowSelection === 'single' ? 'singleRow' : 'multiRow',\n }\n : undefined\n }\n rowHeight={rowHeight}\n animateRows={params.animateRows ?? false}\n rowClassRules={params.rowClassRules}\n getRowId={getRowId}\n suppressColumnVirtualisation={suppressColumnVirtualization}\n suppressClickEdit={true}\n onColumnVisible={setInitialContentSize}\n onRowDataUpdated={onRowDataUpdated}\n onCellFocused={onCellFocused}\n onCellKeyDown={onCellKeyPress}\n onCellClicked={onCellClicked}\n onCellDoubleClicked={onCellDoubleClick}\n onCellEditingStopped={onCellEditingStopped}\n domLayout={params.domLayout}\n onColumnResized={onColumnResized}\n defaultColDef={defaultColDef}\n columnDefs={columnDefsAdjusted}\n selectionColumnDef={selectionColumnDef}\n rowData={rowData}\n postSortRows={params.onRowDragEnd || !defaultPostSort ? undefined : postSortRows}\n onModelUpdated={onModelUpdated}\n onGridReady={onGridReady}\n onSortChanged={ensureSelectedRowIsVisible}\n quickFilterParser={quickFilterParser}\n onSelectionChanged={synchroniseExternalStateToGridSelection}\n onColumnMoved={params.onColumnMoved}\n noRowsOverlayComponent={noRowsOverlayComponent}\n alwaysShowVerticalScroll={params.alwaysShowVerticalScroll}\n isExternalFilterPresent={isExternalFilterPresent}\n doesExternalFilterPass={doesExternalFilterPass}\n maintainColumnOrder={true}\n preventDefaultOnContextMenu={true}\n onCellContextMenu={gridContextMenu.cellContextMenu}\n rowDragText={params.rowDragText}\n onRowDragCancel={clearHighlightRowClasses}\n onRowDragMove={onRowDragMove}\n onRowDragEnd={onRowDragEnd}\n suppressCellFocus={params.suppressCellFocus}\n pinnedTopRowData={params.pinnedTopRowData}\n pinnedBottomRowData={params.pinnedBottomRowData}\n onRowClicked={params.onRowClicked}\n onRowDoubleClicked={params.onRowDoubleClicked}\n suppressStartEditOnTab={true}\n />\n </div>\n </div>\n );\n};\n\nconst quickFilterParser = (filterStr: string) => {\n // filter is exact matches exactly groups separated by commas\n return filterStr.split(',').map((str) => str.trim());\n};\n","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 stopEditing: () => void;\n colId: string;\n field: keyof TData;\n value: any;\n data: TData;\n selectedRows: TData[];\n updateValue: (\n saveFn: (selectedRows: any[]) => Promise<boolean>,\n tabDirection: 1 | 0 | -1,\n ) => Promise<boolean> | boolean;\n formatValue: (value: any) => any;\n}\n\nexport const GridPopoverContext = createContext<GridPopoverContextType<any>>({\n anchorRef: { current: null },\n saving: false,\n setSaving: () => {},\n stopEditing: () => {},\n colId: '',\n field: '',\n value: null,\n data: {} as GridBaseRow,\n selectedRows: [],\n updateValue: () => false,\n formatValue: () => '! No gridPopoverContextProvider !',\n});\n\nexport const useGridPopoverContext = <TData extends GridBaseRow>() =>\n useContext<GridPopoverContextType<TData>>(GridPopoverContext);\n","import { ICellEditorParams } from 'ag-grid-community';\nimport { sortBy } from 'lodash-es';\nimport { PropsWithChildren, RefObject, useCallback, useContext, useMemo, useRef, useState } from 'react';\n\nimport { GridBaseRow } from '../components/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, stopEditing, formatValue, data, value } = props;\n const { cellEditorParams } = colDef;\n const multiEdit = cellEditorParams?.multiEdit ?? false;\n // Then item that is clicked on will always be first in the list\n const selectedRows = useMemo(\n () =>\n multiEdit ? sortBy(getFilteredSelectedRows(), (row) => row.id !== props.data.id) : [props.data as GridBaseRow],\n [getFilteredSelectedRows, multiEdit, props.data],\n );\n\n const field = props.colDef?.field ?? '';\n const colId = props.colDef?.colId ?? field ?? '';\n\n const updateValue = useCallback(\n async (saveFn: (selectedRows: any[]) => Promise<boolean>, tabDirection: 1 | 0 | -1): Promise<boolean> => {\n if (hasSaved.current) {\n // already called save so ignore\n return true;\n }\n hasSaved.current = true;\n return saving ? false : await updatingCells({ selectedRows, field }, saveFn, setSaving, tabDirection);\n },\n [field, saving, selectedRows, updatingCells],\n );\n\n return (\n <GridPopoverContext.Provider\n value={{\n anchorRef: anchorRef as any as RefObject<Element>,\n saving,\n setSaving,\n selectedRows,\n colId,\n field,\n data,\n value,\n updateValue,\n formatValue,\n stopEditing,\n }}\n >\n {children}\n </GridPopoverContext.Provider>\n );\n};\n","import { CellClassParams, CellClassRules } from 'ag-grid-community';\nimport { ICellEditorParams } from 'ag-grid-community';\n\nexport const GridCellMultiSelectClassRules: CellClassRules = {\n 'ag-selected-for-edit': (params: CellClassParams) => {\n const { api, node, colDef } = params;\n const cep = colDef.cellEditorSelector\n ? colDef.cellEditorSelector(params as ICellEditorParams)?.params\n : colDef.cellEditorParams;\n\n return (\n cep?.multiEdit &&\n api\n .getSelectedNodes()\n ?.map((row) => row.id)\n ?.includes(node.id) &&\n api.getEditingCells().some((cell) => cell.colId === colDef.colId)\n );\n },\n};\n","import { LuiIcon } from '@linzjs/lui';\nimport { IconName, IconSize } from '@linzjs/lui/dist/components/LuiIcon/LuiIcon';\nimport clsx from 'clsx';\nimport { ReactElement } from 'react';\n\nexport const GridIcon = (props: {\n icon: IconName;\n title: string;\n size?: IconSize;\n disabled?: boolean;\n className?: string;\n}): ReactElement => (\n <LuiIcon\n name={props.icon}\n title={props.title}\n alt={props.title}\n size={props.size ?? 'md'}\n className={clsx(\n `step-ag-grid__alert-icon`,\n `AgGridGenericCellRenderer-${props.icon}Icon`,\n props.className,\n props.disabled && 'GridIcon-disabled',\n )}\n />\n);\n","import { LuiMiniSpinner } from '@linzjs/lui';\n\nexport const GridLoadableCell = () => (\n <LuiMiniSpinner\n size={22}\n divProps={{ className: 'GridLoadableCell-container', role: 'status', 'aria-label': 'Loading' }}\n />\n);\n","import {\n ColDef,\n EditableCallback,\n GetQuickFilterTextParams,\n ICellEditorParams,\n ICellRendererParams,\n} from 'ag-grid-community';\nimport {\n SuppressKeyboardEventParams,\n ValueFormatterFunc,\n ValueFormatterParams,\n ValueGetterFunc,\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 errorFn = rendererParams?.error;\n let errorText = props.data !== undefined && errorFn ? errorFn(props) : undefined;\n const warningFn = rendererParams?.warning;\n let warningText = props.data !== undefined && warningFn ? warningFn(props) : undefined;\n const infoFn = rendererParams?.info;\n let infoText = props.data !== undefined && infoFn ? infoFn(props) : undefined;\n if (Array.isArray(errorText)) {\n errorText = errorText.join('\\n');\n }\n if (Array.isArray(warningText)) {\n warningText = warningText.join('\\n');\n }\n if (Array.isArray(infoText)) {\n infoText = infoText.join('\\n');\n }\n\n return checkUpdating(colDef.field ?? colDef.colId ?? '', props.data.id) ? (\n <GridLoadableCell />\n ) : (\n <>\n {!!errorText && (\n <GridIcon icon={'ic_error_outline'} title={typeof errorText === 'string' ? errorText : 'Error'} />\n )}\n {!!warningText && (\n <GridIcon icon={'ic_warning_outline'} title={typeof warningText === 'string' ? warningText : 'Warning'} />\n )}\n {!!infoText && <GridIcon icon={'ic_info_outline'} title={typeof infoText === 'string' ? infoText : 'Info'} />}\n <div className={'GridCell-container'}>\n {colDef.cellRendererParams?.originalCellRenderer ? (\n <colDef.cellRendererParams.originalCellRenderer {...props} />\n ) : (\n <span title={props.valueFormatted ?? undefined}>{props.valueFormatted || '–'}</span>\n )}\n </div>\n {fnOrVar(colDef.editable, props) && rendererParams?.rightHoverElement && (\n <div className={'GridCell-hoverRight'}>{rendererParams?.rightHoverElement}</div>\n )}\n </>\n );\n};\n\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 error?: (props: ICellRendererParams<TData, ValueType>) => ReactElement | string | false | null | undefined;\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 valueFormatter: string | ValueFormatterFunc<TData, ValueType> | undefined,\n): string | ((params: GetQuickFilterTextParams<TData, ValueType>) => string) | undefined => {\n // aggrid will default to valueGetter\n if (typeof valueFormatter !== 'function') {\n return undefined;\n }\n\n return (params: GetQuickFilterTextParams<TData, ValueType>) => valueFormatter(params);\n};\n\nconst stringableValueFormatterTypes = ['number', 'boolean', 'string'];\nexport const defaultValueFormatter = ({ value }: ValueFormatterParams) => {\n if (value == null) {\n return '–';\n }\n return stringableValueFormatterTypes.includes(typeof value) //\n ? String(value)\n : JSON.stringify(value);\n};\n\n// ag-grid doesn't understand the custom editor, when it stops editing it thinks\n// that _it_ was editing and overwrites the user updated data\n// _but_, it only does this if the initial value of the cell was null!?\nconst blockValueSetter = () => true;\n\n/*\n * All cells should use this.\n */\nexport const GridCell = <TData extends GridBaseRow, TValue = any, Props extends CellEditorCommon = any>(\n props: GenericCellColDef<TData, TValue>,\n custom?: {\n multiEdit?: boolean;\n preventAutoEdit?: boolean;\n editor?: (editorProps: Props) => ReactElement;\n editorParams?: Props;\n },\n): ColDefT<TData, TValue> => {\n // Generate a default filter value getter which uses the formatted value plus\n // the editable value if it's a string and different from the formatted value.\n // This is so that e.g. bearings can be searched for by DMS or raw number.\n const valueFormatter = props.valueFormatter ?? defaultValueFormatter;\n const filterValueGetter = props.filterValueGetter ?? generateFilterGetter(valueFormatter as any);\n const exportable = props.exportable;\n // Can't leave this here ag-grid will complain\n delete props.exportable;\n\n return {\n // Will be overridden if specified later\n colId: props.field,\n headerTooltip: props.headerName,\n sortable: true,\n resizable: true,\n valueSetter: custom?.editor ? blockValueSetter : undefined,\n editable: props.editable ?? !!custom?.editor,\n ...(custom?.editor && {\n cellClassRules: GridCellMultiSelectClassRules,\n cellEditor: GenericCellEditorComponentWrapper(custom?.editor),\n }),\n suppressKeyboardEvent: suppressCellKeyboardEvents,\n ...(custom?.editorParams\n ? {\n cellEditorParams: {\n ...custom.editorParams,\n multiEdit: custom.multiEdit,\n preventAutoEdit: custom.preventAutoEdit ?? !custom?.editor,\n },\n }\n : { cellEditorParams: { preventAutoEdit: !custom?.editor } }),\n // If there's a valueFormatter and no filterValueGetter then create a filterValueGetter\n getQuickFilterText: filterValueGetter as any,\n // Default value formatter, otherwise react freaks out on objects\n valueFormatter,\n ...props,\n cellRenderer: typeof props.cellRenderer === 'string' ? props.cellRenderer : GridCellRenderer,\n cellRendererParams: {\n originalCellRenderer: props.cellRenderer,\n ...props.cellRendererParams,\n },\n headerComponentParams: {\n exportable,\n ...props.headerComponentParams,\n },\n };\n};\n\nexport interface CellEditorCommon {\n className?: string | undefined;\n}\n\nexport const GenericCellEditorComponentWrapper = (editor?: (props: any) => ReactElement) => {\n const obj = { editor };\n return forwardRef(function GenericCellEditorComponentFr(cellEditorParams: ICellEditorParams, _) {\n const valueFormatted = cellEditorParams.formatValue\n ? cellEditorParams.formatValue(cellEditorParams.value)\n : 'Missing formatter';\n return (\n <GridPopoverContextProvider props={cellEditorParams}>\n <>\n {\n <cellEditorParams.colDef.cellRenderer\n {...cellEditorParams}\n valueFormatted={valueFormatted}\n {...cellEditorParams.colDef.cellRendererParams}\n />\n }\n {obj.editor && <obj.editor {...cellEditorParams} />}\n </>\n </GridPopoverContextProvider>\n );\n });\n};\n","import { ColDef } from 'ag-grid-community';\n\nimport { GridBaseRow } from './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 { useEffect } from 'react';\n\nimport { GridFilterExternal, useGridContext } from '../../contexts/GridContext';\nimport { GridBaseRow } from '../Grid';\n\nexport const useGridFilter = <TData extends GridBaseRow>(filter: GridFilterExternal<TData> | undefined) => {\n const { addExternalFilter, removeExternalFilter } = useGridContext<TData>();\n\n useEffect(() => {\n const thisFilter = filter;\n thisFilter && addExternalFilter(thisFilter);\n return () => {\n thisFilter && removeExternalFilter(thisFilter);\n };\n }, [addExternalFilter, filter, removeExternalFilter]);\n};\n","import { LuiButton, LuiButtonGroup } from '@linzjs/lui';\nimport { LuiButtonProps } from '@linzjs/lui/dist/components/LuiButton/LuiButton';\nimport clsx, { ClassValue } from 'clsx';\nimport { ReactElement, useMemo, useState } from 'react';\n\nimport { GridFilterExternal } from '../../contexts/GridContext';\nimport { GridBaseRow } from '../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","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import './GridFilterColumnsMultiSelect.scss';\n\nimport { LuiCheckboxInput } from '@linzjs/lui';\nimport type { IDoesFilterPassParams, IFilterComp, IFilterParams } from 'ag-grid-community';\nimport React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\n\nexport interface CheckboxMultiFilterParams extends IFilterParams {\n labels?: Record<string, string>;\n labelFormatter?: (value: string) => string;\n}\n\nexport interface CheckboxMultiFilterModel {\n values: string[];\n}\n\ninterface FilterUIProps {\n allValues: string[];\n selected: Set<string>;\n labels: Record<string, string>;\n labelFormatter?: (value: string) => string;\n onToggleAll: (checked: boolean) => void;\n onToggleOne: (value: string, checked: boolean) => void;\n}\n\nconst EMPTY_KEY = '__EMPTY__';\nconst DEFAULT_EMPTY_LABEL = '-';\n\nconst FilterUI: React.FC<FilterUIProps> = ({\n allValues,\n selected,\n labels,\n labelFormatter,\n onToggleAll,\n onToggleOne,\n}) => {\n const allChecked = allValues.length > 0 && selected.size === allValues.length;\n\n const getDisplayLabel = (raw: string): string => {\n const base = raw === EMPTY_KEY ? (labels[EMPTY_KEY] ?? DEFAULT_EMPTY_LABEL) : (labels[raw] ?? raw);\n return labelFormatter ? labelFormatter(base) : base;\n };\n\n return (\n <div className=\"GridFilterColsMultiSelect\">\n <span className=\"LuiSelect-label-text\">Filter column</span>\n\n <LuiCheckboxInput\n className=\"LuiCheckboxInput-selectAll\"\n label={'Select All'}\n value=\"true\"\n isChecked={allChecked}\n onChange={(e) => onToggleAll(e.target.checked)}\n />\n {allValues.map((val) => (\n <LuiCheckboxInput\n key={val}\n className=\"LuiCheckboxInput-item\"\n label={getDisplayLabel(val)}\n value={val}\n isChecked={selected.has(val)}\n onChange={(e) => onToggleOne(val, e.target.checked)}\n />\n ))}\n </div>\n );\n};\n\nexport class GridFilterColumnsMultiSelect implements IFilterComp {\n private params!: CheckboxMultiFilterParams;\n private selectedValues = new Set<string>();\n private labels: Record<string, string> = {};\n private allValues: string[] = [];\n private gui!: HTMLElement;\n private labelFormatter?: (value: string) => string;\n private reactRoot: Root | null = null;\n\n private normalizeCellValue(value: unknown): string {\n if (typeof value === 'string') return value.trim() === '' ? EMPTY_KEY : value;\n return EMPTY_KEY;\n }\n\n private loadFieldValues(): string[] {\n const field = this.params.colDef.field as string;\n const values = new Set<string>();\n\n this.params.api.forEachNode((node) => {\n const data = node.data ?? {};\n const raw = (data as Record<string, unknown>)[field];\n const norm = this.normalizeCellValue(raw);\n values.add(norm);\n });\n\n return Array.from(values).sort((a, b) => {\n if (a === EMPTY_KEY && b !== EMPTY_KEY) return -1;\n if (b === EMPTY_KEY && a !== EMPTY_KEY) return 1;\n return a.localeCompare(b);\n });\n }\n\n init(params: CheckboxMultiFilterParams): void {\n this.params = params;\n this.labels = { ...params.labels };\n this.labelFormatter = params.labelFormatter;\n\n if (!(EMPTY_KEY in this.labels)) {\n this.labels[EMPTY_KEY] = DEFAULT_EMPTY_LABEL;\n }\n\n this.allValues = this.loadFieldValues();\n this.selectedValues = new Set(this.allValues);\n\n this.gui = document.createElement('div');\n this.reactRoot = createRoot(this.gui);\n this.render();\n }\n\n private render(): void {\n if (!this.reactRoot) return;\n\n this.reactRoot.render(\n <FilterUI\n allValues={this.allValues}\n selected={this.selectedValues}\n labels={this.labels}\n labelFormatter={this.labelFormatter}\n onToggleAll={this.handleToggleAll.bind(this)}\n onToggleOne={this.handleToggleOne.bind(this)}\n />,\n );\n }\n\n private handleToggleAll(checked: boolean): void {\n if (checked) {\n this.allValues.forEach((val) => this.selectedValues.add(val));\n } else {\n this.selectedValues.clear();\n }\n this.render();\n this.params.filterChangedCallback();\n }\n\n private handleToggleOne(value: string, checked: boolean): void {\n if (checked) {\n this.selectedValues.add(value);\n } else {\n this.selectedValues.delete(value);\n }\n this.render();\n this.params.filterChangedCallback();\n }\n\n getGui(): HTMLElement {\n return this.gui;\n }\n\n isFilterActive(): boolean {\n return this.selectedValues.size > 0;\n }\n\n doesFilterPass(p: IDoesFilterPassParams): boolean {\n const field = this.params.colDef.field as string;\n if (!p.data || typeof p.data !== 'object') {\n return this.selectedValues.has(EMPTY_KEY);\n }\n\n const raw = (p.data as Record<string, unknown>)[field];\n const norm = this.normalizeCellValue(raw);\n return this.selectedValues.has(norm);\n }\n\n getModel(): CheckboxMultiFilterModel | null {\n return this.selectedValues.size > 0 ? { values: Array.from(this.selectedValues) } : null;\n }\n\n setModel(model: CheckboxMultiFilterModel | null): void {\n this.selectedValues = new Set(model?.values || []);\n this.render();\n }\n\n destroy(): void {\n if (this.reactRoot) {\n this.reactRoot.unmount();\n this.reactRoot = null;\n }\n }\n}\n\nexport const createCheckboxMultiFilterParams = (\n labels: Record<string, string> = {},\n labelFormatter?: (value: string) => string,\n): Partial<CheckboxMultiFilterParams> => ({\n labels: { [EMPTY_KEY]: DEFAULT_EMPTY_LABEL, ...labels },\n labelFormatter,\n});\n","import { LuiButton, LuiIcon } from '@linzjs/lui';\nimport { IconName, IconSize } from '@linzjs/lui/dist/components/LuiIcon/LuiIcon';\nimport { ButtonHTMLAttributes, forwardRef, MouseEvent } from 'react';\n\nexport interface GridFilterHeaderIconButtonProps {\n icon: IconName;\n onClick?: (e: MouseEvent) => void;\n buttonProps?: Partial<ButtonHTMLAttributes<HTMLButtonElement>>;\n disabled?: boolean;\n size?: IconSize;\n title: string;\n}\n\nexport const GridFilterHeaderIconButton = forwardRef<HTMLButtonElement, GridFilterHeaderIconButtonProps>(\n function columnsButton({ icon, title, onClick, buttonProps, disabled = false, size = 'md' }, ref) {\n return (\n <LuiButton\n {...buttonProps}\n type={'button'}\n level={'tertiary'}\n className={'lui-button-icon-only'}\n ref={ref}\n buttonProps={{ 'aria-label': title }}\n title={title}\n onClick={onClick}\n disabled={disabled}\n >\n <LuiIcon name={icon} alt={'Menu'} size={size} />\n </LuiButton>\n );\n },\n);\n","import { LuiCheckboxInput, LuiIcon } from '@linzjs/lui';\nimport { ColDef } from 'ag-grid-community';\nimport { isEmpty } from 'lodash-es';\nimport { ReactElement, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { GridContext } from '../../contexts/GridContext';\nimport { Menu, MenuDivider, MenuItem } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { GridFilterHeaderIconButton } from './GridFilterHeaderIconButton';\n\nexport interface GridFilterColumnsToggleProps {\n saveState?: boolean;\n}\n\nexport const GridFilterColumnsToggle = ({ saveState = true }: GridFilterColumnsToggleProps): ReactElement => {\n const [loaded, setLoaded] = useState(false);\n const { getColumns, getColumnIds, invisibleColumnIds, setInvisibleColumnIds } = useContext(GridContext);\n\n const columnStorageKey = useMemo(\n () =>\n isEmpty(getColumnIds())\n ? null // Grid hasn't been initialised yet\n : 'stepAgGrid_invisibleColumnIds_' + getColumnIds().join('_'),\n [getColumnIds],\n );\n\n // infer the invisible ids from colDefs\n const resetColumns = useCallback(\n () => setInvisibleColumnIds(getColumnIds('initialHide')),\n [getColumnIds, setInvisibleColumnIds],\n );\n\n // Load state on start\n useEffect(() => {\n if (!columnStorageKey || loaded) return;\n if (saveState) {\n try {\n const stored = window.localStorage.getItem(columnStorageKey);\n if (!stored) {\n resetColumns();\n } else {\n const invisibleIds = JSON.parse(stored ?? '[]');\n if (!Array.isArray(invisibleIds)) {\n console.error(`stored invisible ids not an array: ${stored}`);\n } else if (!invisibleIds.every((id) => typeof id === 'string')) {\n console.error(`stored invisible ids not strings: ${stored}`);\n } else {\n invisibleIds && setInvisibleColumnIds(invisibleIds);\n }\n }\n } catch (ex) {\n console.error(ex);\n }\n setLoaded(true);\n }\n }, [columnStorageKey, getColumns, loaded, resetColumns, saveState, setInvisibleColumnIds]);\n\n // Save state on column visibility change\n useEffect(() => {\n loaded &&\n columnStorageKey &&\n saveState &&\n window.localStorage.setItem(columnStorageKey, JSON.stringify(invisibleColumnIds));\n }, [columnStorageKey, invisibleColumnIds, loaded, saveState]);\n\n const toggleColumn = useCallback(\n (colId?: string) => {\n if (!colId || !invisibleColumnIds) return;\n setInvisibleColumnIds(\n invisibleColumnIds.includes(colId)\n ? invisibleColumnIds.filter((id) => id !== colId)\n : [...invisibleColumnIds, colId],\n );\n },\n [invisibleColumnIds, setInvisibleColumnIds],\n );\n\n const numericRegExp = /^\\d+$/;\n const isNonManageableColumn = (col: ColDef) => col.lockVisible || col.colId == null || numericRegExp.test(col.colId);\n\n return (\n <Menu\n menuButton={<GridFilterHeaderIconButton icon={'ic_columns'} title={'Column visibility'} />}\n menuClassName={'step-ag-grid-react-menu'}\n portal={true}\n unmountOnClose={true}\n >\n <div className={'GridFilterColumnsToggle-container'}>\n {getColumns('headerName').map((col) => (\n <MenuItem\n key={col.colId ?? 'no_col_id'}\n disabled={isNonManageableColumn(col)}\n onClick={(e: ClickEvent) => {\n // Global react-menu MenuItem handler handles tabs\n if (e.key !== 'Tab') {\n e.keepOpen = true;\n if (e.key !== 'Enter') {\n toggleColumn(col.colId);\n }\n }\n }}\n >\n <LuiCheckboxInput\n isChecked={!!invisibleColumnIds && !invisibleColumnIds.includes(col.colId ?? '')}\n value={`${col.colId}`}\n label={col.headerName ?? ''}\n isDisabled={isNonManageableColumn(col)}\n inputProps={{\n onClick: (e) => {\n // Click is handled by MenuItem onClick so keyboard events work\n e.preventDefault();\n e.stopPropagation();\n },\n }}\n onChange={() => {\n /*Do nothing, change handled by menuItem*/\n }}\n />\n </MenuItem>\n ))}\n </div>\n <MenuDivider key={`$$divider_reset_columns`} />\n <MenuItem\n key={'$$reset_columns'}\n onClick={(e: ClickEvent) => {\n // Global react-menu MenuItem handler handles tabs\n if (e.key !== 'Tab') {\n e.keepOpen = e.key !== 'Enter';\n resetColumns();\n }\n }}\n >\n <LuiIcon name={'ic_regenerate'} alt={'Reset columns'} size={'md'} className={'MenuItem-icon'} />\n Reset columns\n </MenuItem>\n </Menu>\n );\n};\n","import { useCallback, useEffect, useRef } from 'react';\n\n/**\n * Cancels timeouts on scope being destroyed.\n *\n * This could almost be a debounce, but debounce tracks by function reference, this tracks by hook reference.\n * This could have been implemented using debounce if the callers function was wrapped in useCallback,\n * but there's no way to enforce that, so it would lead to bugs.\n */\nexport const useTimeoutHook = () => {\n const timeout = useRef<ReturnType<typeof setTimeout>>();\n\n /**\n * Clear any pending timeouts.\n */\n const clearTimeouts = () => {\n if (timeout.current) {\n const tc = timeout.current;\n timeout.current = undefined;\n clearTimeout(tc);\n }\n };\n\n /**\n * Call this when your action has completed.\n */\n const invoke = useCallback((fn: () => void, waitTimeMs: number) => {\n clearTimeouts();\n timeout.current = setTimeout(fn, waitTimeMs);\n }, []);\n\n /**\n * Clear timeout on loss of scope.\n */\n useEffect(() => {\n return () => clearTimeouts();\n }, []);\n\n return invoke;\n};\n\ninterface IntervalHookProps {\n timeoutMs: number;\n callback: () => void;\n}\n\nexport const useIntervalHook = ({ callback, timeoutMs }: IntervalHookProps) => {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n const interval = setInterval(() => {\n callbackRef.current && callbackRef.current();\n }, timeoutMs);\n return () => {\n clearInterval(interval);\n };\n }, [timeoutMs]);\n};\n","import { useCallback, useRef, useState } from 'react';\n\nimport { useTimeoutHook } from './timeoutHook';\n\n/**\n * Defers state change up to a minimum time since last state change.\n */\nexport const useStateDeferred = <T,>(initialValue: T): [T, (v: T) => void, (v: T, w: number) => void] => {\n const startTime = useRef<number>(0);\n const timeoutHook = useTimeoutHook();\n\n const [value, _setValue] = useState(initialValue);\n\n const setValue = useCallback((newValue: T) => {\n startTime.current = Date.now();\n _setValue(newValue);\n }, []);\n\n const setValueDeferred = useCallback(\n (newValue: T, minimumWaitTimeMs: number) => {\n const waitTimeMs = Math.max(minimumWaitTimeMs - (Date.now() - startTime.current), 0);\n timeoutHook(() => _setValue(newValue), waitTimeMs);\n },\n [timeoutHook],\n );\n\n return [value, setValue, setValueDeferred];\n};\n","import { LuiMiniSpinner } from '@linzjs/lui';\nimport { CsvExportParams } from 'ag-grid-community';\nimport { delay } from 'lodash-es';\nimport { useContext } from 'react';\n\nimport { GridContext } from '../../contexts/GridContext';\nimport { useStateDeferred } from '../../lui/stateDeferredHook';\nimport { GridFilterHeaderIconButton } from './GridFilterHeaderIconButton';\n\nexport const GridFilterDownloadCsvButton = (csvExportParams: CsvExportParams) => {\n const { downloadCsv } = useContext(GridContext);\n\n const [downloading, setDownloading, setDownloadingDeferred] = useStateDeferred(false);\n\n const handleDownloadClick = () => {\n setDownloading(true);\n // Defer the download such that the component disabled state can update\n delay(() => {\n downloadCsv(csvExportParams);\n // Defer re-enablement as the browser takes time to process the download\n setDownloadingDeferred(false, 4000);\n }, 100);\n };\n\n return downloading ? (\n <LuiMiniSpinner\n size={22}\n divProps={{\n role: 'status',\n ['aria-label']: 'Downloading...',\n style: { width: 42, display: 'flex', justifyContent: 'center' },\n }}\n />\n ) : (\n <GridFilterHeaderIconButton\n icon={'ic_csv_file'}\n title={'Download CSV'}\n onClick={handleDownloadClick}\n disabled={downloading}\n />\n );\n};\n","import { LuiIcon } from '@linzjs/lui';\nimport { useContext, useEffect, useState } from 'react';\n\nimport { GridContext } from '../../contexts/GridContext';\n\nexport interface GridFilterQuickProps {\n quickFilterPlaceholder?: string;\n defaultValue?: string;\n}\n\nexport const GridFilterQuick = ({ quickFilterPlaceholder, defaultValue }: GridFilterQuickProps) => {\n const { setQuickFilter } = useContext(GridContext);\n const [quickFilterValue, setQuickFilterValue] = useState(defaultValue ?? '');\n\n useEffect(() => {\n setQuickFilter(quickFilterValue);\n }, [quickFilterValue, setQuickFilter]);\n\n return (\n <div className=\"GridFilterQuick-container\">\n <div className=\"GridFilterQuick-icon\">\n <LuiIcon name={'ic_search'} alt={'Search'} size={'md'} />\n </div>\n <input\n aria-label=\"Search\"\n className=\"GridFilterQuick-input\"\n type=\"text\"\n placeholder={quickFilterPlaceholder ?? 'Search'}\n value={quickFilterValue}\n onChange={(event) => {\n setQuickFilterValue(event.target.value);\n }}\n />\n </div>\n );\n};\n","import { PropsWithChildren } from 'react';\n\nexport const GridFilters = ({ children }: PropsWithChildren) => (\n <div className=\"Grid-container-filters\">{children}</div>\n);\n","'use strict';\n\n/* global setTimeout, clearTimeout */\n\nmodule.exports = function debounce(fn) {\n var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var lastCallAt = void 0;\n var deferred = void 0;\n var timer = void 0;\n var pendingArgs = [];\n return function debounced() {\n var currentWait = getWait(wait);\n var currentTime = new Date().getTime();\n\n var isCold = !lastCallAt || currentTime - lastCallAt > currentWait;\n\n lastCallAt = currentTime;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (isCold && options.leading) {\n return options.accumulate ? Promise.resolve(fn.call(this, [args])).then(function (result) {\n return result[0];\n }) : Promise.resolve(fn.call.apply(fn, [this].concat(args)));\n }\n\n if (deferred) {\n clearTimeout(timer);\n } else {\n deferred = defer();\n }\n\n pendingArgs.push(args);\n timer = setTimeout(flush.bind(this), currentWait);\n\n if (options.accumulate) {\n var argsIndex = pendingArgs.length - 1;\n return deferred.promise.then(function (results) {\n return results[argsIndex];\n });\n }\n\n return deferred.promise;\n };\n\n function flush() {\n var thisDeferred = deferred;\n clearTimeout(timer);\n\n Promise.resolve(options.accumulate ? fn.call(this, pendingArgs) : fn.apply(this, pendingArgs[pendingArgs.length - 1])).then(thisDeferred.resolve, thisDeferred.reject);\n\n pendingArgs = [];\n deferred = null;\n }\n};\n\nfunction getWait(wait) {\n return typeof wait === 'function' ? wait() : wait;\n}\n\nfunction defer() {\n var deferred = {};\n deferred.promise = new Promise(function (resolve, reject) {\n deferred.resolve = resolve;\n deferred.reject = reject;\n });\n return deferred;\n}\n//# sourceMappingURL=index.js.map","import { createContext } from 'react';\n\nexport interface GridSubComponentContextType {\n value: any;\n data: any;\n setValue: (value: string) => void;\n setValid: (valid: boolean) => void;\n triggerSave: () => Promise<void>;\n context: any;\n}\n\nexport const GridSubComponentContext = createContext<GridSubComponentContextType>({\n value: 'GridSubComponentContext value no context',\n data: {},\n setValue: () => {\n console.error('GridSubComponentContext setValue no context');\n },\n setValid: () => {\n console.error('GridSubComponentContext setValid no context');\n },\n // eslint-disable-next-line @typescript-eslint/require-await\n triggerSave: async () => {\n console.error('GridSubComponentContext triggerSave no context');\n },\n context: null,\n});\n","import './FormError.scss';\n\nimport { LuiIcon } from '@linzjs/lui';\nimport { ReactElement } from 'react';\n\nexport interface FormErrorProps {\n helpText?: string;\n error?: ReactElement | string | boolean | null;\n}\n\nexport const FormError = (props: FormErrorProps) => {\n return (\n <>\n {props.error && (\n <div className=\"FormError\">\n <LuiIcon alt=\"error\" name=\"ic_error\" className=\"FormError-text-icon\" size=\"sm\" status=\"error\" />\n <span className=\"FormError-error\">{props.error}</span>\n </div>\n )}\n\n {props.helpText && !props.error && <span className={'FormError-helpText'}>{props.helpText}</span>}\n </>\n );\n};\n","import { useEffect, useRef } from 'react';\n\n/**\n * Track previous values of states.\n *\n * @param value Value to track.\n */\nexport const usePrevious = <T,>(value: T): T | undefined => {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n};\n\n/**\n * Dump prop differences for components between renders.\n */\nexport const usePropMonitor = (what: string, props: NonNullable<unknown>) => {\n const prev = usePrevious(props);\n useEffect(() => {\n if (prev) {\n let first = true;\n Object.keys(props).forEach((p) => {\n // @ts-expect-error any type\n if (props[p] !== prev[p]) {\n if (first) {\n // eslint-disable-next-line no-console\n console.log('--- props changed -----');\n first = false;\n }\n // eslint-disable-next-line no-console\n console.log(`${what} key: ${p} changed`);\n }\n });\n }\n }, [prev, props, what]);\n};\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","import escapeStringRegexp from 'escape-string-regexp';\n\nconst regexpCache = new Map();\n\nconst sanitizeArray = (input, inputName) => {\n\tif (!Array.isArray(input)) {\n\t\tswitch (typeof input) {\n\t\t\tcase 'string':\n\t\t\t\tinput = [input];\n\t\t\t\tbreak;\n\t\t\tcase 'undefined':\n\t\t\t\tinput = [];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new TypeError(`Expected '${inputName}' to be a string or an array, but got a type of '${typeof input}'`);\n\t\t}\n\t}\n\n\treturn input.filter(string => {\n\t\tif (typeof string !== 'string') {\n\t\t\tif (typeof string === 'undefined') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthrow new TypeError(`Expected '${inputName}' to be an array of strings, but found a type of '${typeof string}' in the array`);\n\t\t}\n\n\t\treturn true;\n\t});\n};\n\nconst makeRegexp = (pattern, options) => {\n\toptions = {\n\t\tcaseSensitive: false,\n\t\t...options,\n\t};\n\n\tconst cacheKey = pattern + JSON.stringify(options);\n\n\tif (regexpCache.has(cacheKey)) {\n\t\treturn regexpCache.get(cacheKey);\n\t}\n\n\tconst negated = pattern[0] === '!';\n\n\tif (negated) {\n\t\tpattern = pattern.slice(1);\n\t}\n\n\tpattern = escapeStringRegexp(pattern).replace(/\\\\\\*/g, '[\\\\s\\\\S]*');\n\n\tconst regexp = new RegExp(`^${pattern}$`, options.caseSensitive ? '' : 'i');\n\tregexp.negated = negated;\n\tregexpCache.set(cacheKey, regexp);\n\n\treturn regexp;\n};\n\nconst baseMatcher = (inputs, patterns, options, firstMatchOnly) => {\n\tinputs = sanitizeArray(inputs, 'inputs');\n\tpatterns = sanitizeArray(patterns, 'patterns');\n\n\tif (patterns.length === 0) {\n\t\treturn [];\n\t}\n\n\tpatterns = patterns.map(pattern => makeRegexp(pattern, options));\n\n\tconst {allPatterns} = options || {};\n\tconst result = [];\n\n\tfor (const input of inputs) {\n\t\t// String is included only if it matches at least one non-negated pattern supplied.\n\t\t// Note: the `allPatterns` option requires every non-negated pattern to be matched once.\n\t\t// Matching a negated pattern excludes the string.\n\t\tlet matches;\n\t\tconst didFit = [...patterns].fill(false);\n\n\t\tfor (const [index, pattern] of patterns.entries()) {\n\t\t\tif (pattern.test(input)) {\n\t\t\t\tdidFit[index] = true;\n\t\t\t\tmatches = !pattern.negated;\n\n\t\t\t\tif (!matches) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t!(\n\t\t\t\tmatches === false\n\t\t\t\t|| (matches === undefined && patterns.some(pattern => !pattern.negated))\n\t\t\t\t|| (allPatterns && didFit.some((yes, index) => !yes && !patterns[index].negated))\n\t\t\t)\n\t\t) {\n\t\t\tresult.push(input);\n\n\t\t\tif (firstMatchOnly) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n};\n\nexport function matcher(inputs, patterns, options) {\n\treturn baseMatcher(inputs, patterns, options, false);\n}\n\nexport function isMatch(inputs, patterns, options) {\n\treturn baseMatcher(inputs, patterns, options, true).length > 0;\n}\n","import { isEmpty, partition } from 'lodash-es';\nimport { isMatch } from 'matcher';\n\n/**\n * Text matching with wildcards and multiple matchers.\n *\n * \"L\" => L*\n * \"=L\" => L\n * \"*L*\" => *L*\n * \"*L\" => *L\n * \"A B\" => A* and B*\n * \"A B, C\" => (A* and B*) or C*\n * \"!A\" => all values must not match A\n * Returns true if there's a text match.\n */\nexport const textMatch = (text: string | undefined | null, filter: string): boolean => {\n if (text == null) return true;\n\n const superFilters = filter\n .split(',')\n .map((sf) => sf.trim())\n .filter((sf) => sf)\n .map((r) =>\n r\n .split(/\\s+/)\n .map((f) => (f.startsWith('=') ? f.slice(1) : f + '*'))\n .join(' '),\n );\n const [negativeFilters, positiveFilters] = partition(superFilters, (superFilters) => superFilters.startsWith('!'));\n\n const values = text.replaceAll(',', ' ').trim().split(/\\s+/);\n return (\n (isEmpty(positiveFilters) || // Not filtered\n positiveFilters.some((superFilter) => {\n const subFilters = superFilter.split(/\\s+/).map((s) => s.replaceAll(/([!?])/g, '\\\\$1'));\n return subFilters.every((subFilter) => values.some((value) => isMatch(value, subFilter)));\n })) &&\n (isEmpty(negativeFilters) ||\n negativeFilters.every((superFilter) => values.every((value) => isMatch(value, superFilter))))\n );\n};\n","import { ReactElement, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useGridPopoverContext } from '../contexts/GridPopoverContext';\nimport { ControlledMenu } from '../react-menu3';\nimport { MenuCloseEvent } from '../react-menu3/types';\nimport { CloseReason } from '../react-menu3/utils';\nimport { GridBaseRow } from './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 CancelPromise = () => Promise.resolve(true);\n\nexport const useGridPopoverHook = <TData extends GridBaseRow>({\n className,\n save,\n invalid,\n dontSaveOnExternalClick,\n}: GridPopoverHookProps<TData>) => {\n const { anchorRef, saving, updateValue, stopEditing } = useGridPopoverContext<TData>();\n const saveButtonRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setOpen] = useState(false);\n\n useEffect(() => {\n setOpen(true);\n }, []);\n\n const triggerSave = useCallback(\n async (reason?: string) => {\n if (reason == CloseReason.CANCEL) {\n await updateValue(CancelPromise, 0);\n stopEditing();\n\n return;\n }\n if (invalid?.()) {\n // Don't close, don't do anything it's invalid\n return;\n }\n\n if (\n await updateValue(\n save ?? (() => Promise.resolve(true)),\n reason === CloseReason.TAB_FORWARD ? 1 : reason === CloseReason.TAB_BACKWARD ? -1 : 0,\n )\n ) {\n stopEditing();\n }\n },\n [invalid, save, stopEditing, updateValue],\n );\n\n const popoverWrapper = useCallback(\n (children: ReactElement) => {\n return (\n <>\n {anchorRef.current && (\n <ControlledMenu\n state={isOpen ? 'open' : 'closed'}\n portal={true}\n unmountOnClose={true}\n anchorRef={anchorRef}\n saveButtonRef={saveButtonRef}\n menuClassName={'step-ag-grid-react-menu'}\n onClose={(event: MenuCloseEvent) => {\n // Prevent menu from closing when modals are invoked\n if (event.reason === CloseReason.BLUR) {\n return;\n }\n void triggerSave(event.reason);\n }}\n viewScroll={'auto'}\n dontShrinkIfDirectionIsTop={true}\n className={className}\n >\n {saving && ( // This is the overlay that prevents editing when the editor is saving\n <div className={'ComponentLoadingWrapper-saveOverlay'} />\n )}\n {children}\n <button\n ref={saveButtonRef}\n data-reason={''}\n onClick={(e) => {\n let reason = e.currentTarget.getAttribute('data-reason') ?? undefined;\n if (dontSaveOnExternalClick && reason === CloseReason.BLUR) {\n reason = CloseReason.CANCEL;\n }\n void triggerSave(reason);\n }}\n style={{ display: 'none' }}\n />\n </ControlledMenu>\n )}\n </>\n );\n },\n [anchorRef, isOpen, className, dontSaveOnExternalClick, saving, triggerSave],\n );\n\n return {\n popoverWrapper,\n triggerSave,\n };\n};\n","import debounce from 'debounce-promise';\nimport { compact, isEmpty } from 'lodash-es';\nimport { Fragment, ReactElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { GridSubComponentContext } from '../../contexts/GridSubComponentContext';\nimport { FormError } from '../../lui/FormError';\nimport { usePrevious } from '../../lui/reactUtils';\nimport { FocusableItem, MenuDivider, MenuHeader, MenuItem } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { textMatch } from '../../utils/textMatcher';\nimport { isNotEmpty } from '../../utils/util';\nimport { ComponentLoadingWrapper } from '../ComponentLoadingWrapper';\nimport { 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 topComponent?: () => ReactElement;\n}\n\nconst fieldToString = (field: any) => {\n return typeof field === 'symbol' ? field.toString() : `${field}`;\n};\n\nexport const GridFormDropDown = <TData extends GridBaseRow, TOptionValue>(\n props: GridFormDropDownProps<TData, TOptionValue>,\n) => {\n const { selectedRows, field, data } = useGridPopoverContext<TData>();\n const { onSelectFilter, options: propOptions, onSelectedItem } = props;\n\n // Save triggers during async action processing which triggers another selectItem(), this ref blocks that\n const [filter, setFilter] = useState(props.filterDefaultValue ?? '');\n const [filteredValues, setFilteredValues] = useState<any[]>();\n const [options, setOptions] = useState<FinalSelectOption<TOptionValue>[] | null>(\n !!propOptions && typeof propOptions !== 'function' ? propOptions : null,\n );\n const subComponentIsValid = useRef(false);\n const subComponentInitialValue = useRef<string | null>(null);\n const [subSelectedValue, setSubSelectedValue] = useState<any>(null);\n // Note: null is assumed to be the filter\n const [selectedItem, setSelectedItem] = useState<FinalSelectOption<TOptionValue> | null>(null);\n\n const selectItemHandler = useCallback(\n async (value: any, subComponentValue?: any): Promise<boolean> => {\n const hasChanged =\n selectedRows.some((row) => row[field] !== value) ||\n (subComponentValue !== undefined && subComponentInitialValue.current !== JSON.stringify(subComponentValue));\n if (hasChanged) {\n if (onSelectedItem) {\n await onSelectedItem({\n selectedRows,\n selectedRowIds: selectedRows.map((row) => row.id),\n value,\n subComponentValue,\n });\n } else {\n selectedRows.forEach((row) => (row[field] = value));\n }\n }\n return true;\n },\n [field, onSelectedItem, selectedRows],\n );\n\n /**\n * Saves are wrapped in updateValue and triggered by blur events\n */\n const save = useCallback(async () => {\n if (!options) {\n return true;\n }\n\n // Filter saved\n if (selectedItem === null) {\n if (onSelectFilter) {\n if (!isEmpty(filter)) {\n await onSelectFilter({\n selectedRows,\n selectedRowIds: selectedRows.map((row) => row.id),\n value: filter as any,\n });\n }\n\n return true;\n } else {\n if (filteredValues && filteredValues.length === 1) {\n if (filteredValues[0].subComponent) return false;\n return await selectItemHandler(filteredValues[0].value, null);\n }\n }\n return false;\n }\n if (selectedItem.subComponent && !subComponentIsValid.current) {\n return false;\n }\n await selectItemHandler(selectedItem.value, subSelectedValue);\n\n return true;\n }, [\n filter,\n filteredValues,\n onSelectFilter,\n options,\n selectItemHandler,\n selectedItem,\n selectedRows,\n subSelectedValue,\n ]);\n\n const { popoverWrapper } = useGridPopoverHook({\n className: props.className,\n invalid: () => !options || !!(selectedItem && !subComponentIsValid.current),\n save,\n dontSaveOnExternalClick: true,\n });\n\n // Load up options list if it's async function\n useEffect(() => {\n // If options is null then we need to load/reload\n // Options will be set to null during a reload based filter, or on open popup\n if (options !== null) {\n return;\n }\n\n // propOptions is a const list\n if (typeof propOptions !== 'function') {\n if (propOptions) {\n setOptions(propOptions);\n }\n return;\n }\n\n // propOptions is function, probably loading from web\n void (async () => {\n const r = await propOptions(selectedRows, filter);\n setOptions(r ?? []);\n })();\n }, [filter, options, propOptions, selectedRows]);\n\n // Local filtering.\n useEffect(() => {\n if (props.filtered !== 'local') {\n return;\n }\n if (options == null) {\n setFilteredValues([]);\n return;\n }\n\n setFilteredValues(\n compact(\n options.map((option) => {\n if (option.label != null && typeof option.label !== 'string') {\n console.warn('GridFormDropDown: Cannot filter non-string labels', option);\n return undefined;\n }\n return textMatch((option.label as string) || '', filter) ? option : undefined;\n }),\n ),\n );\n }, [props.filtered, filter, options]);\n\n const reSearchOnFilterChange = useMemo(\n () =>\n debounce(() => {\n setOptions(null);\n }, 500),\n [],\n );\n\n const previousFilter = usePrevious(filter);\n useEffect(() => {\n if (previousFilter != null && previousFilter != filter && props.filtered === 'reload') {\n void reSearchOnFilterChange();\n }\n }, [filter, previousFilter, props.filtered, reSearchOnFilterChange]);\n\n let lastHeader: ReactElement | null = null;\n let showHeader: ReactElement | null = null;\n\n return popoverWrapper(\n <>\n {props.filtered && (\n <div className={'GridFormDropDown-filter'}>\n <FocusableItem\n className={'filter-item'}\n onFocus={() => {\n setSelectedItem(null);\n setSubSelectedValue(null);\n subComponentIsValid.current = true;\n }}\n >\n {({ ref }: any) => (\n <div style={{ display: 'flex', flexDirection: 'column', width: '100%' }}>\n <input\n className={'LuiTextInput-input'}\n ref={ref}\n type=\"text\"\n placeholder={props.filterPlaceholder ?? 'Filter...'}\n data-testid={'filteredMenu-free-text-input'}\n defaultValue={filter}\n data-allowtabtosave={true}\n data-disableenterautosave={\n !props.onSelectFilter &&\n !(filteredValues && filteredValues.length === 1 && !filteredValues[0].subComponent)\n }\n onChange={(e) => setFilter(e.target.value.trim())}\n />\n {props.filterHelpText && isNotEmpty(filter) && (\n <FormError error={null} helpText={props.filterHelpText} />\n )}\n </div>\n )}\n </FocusableItem>\n <MenuDivider key={`$$divider_filter`} />\n {props.topComponent && (\n <div>\n <props.topComponent />\n <MenuDivider key={`$$divider_filter`} />\n </div>\n )}\n </div>\n )}\n <ComponentLoadingWrapper loading={!options} className={'GridFormDropDown-options'}>\n <>\n {options && (isEmpty(options) || (filteredValues && isEmpty(filteredValues))) && (\n <MenuItem\n key={`${fieldToString(field)}-empty`}\n className={'GridPopoverEditDropDown-noOptions'}\n disabled={true}\n >\n {props.noOptionsMessage ?? 'No Options'}\n </MenuItem>\n )}\n {options?.map((item: FinalSelectOption<TOptionValue>, index) => {\n showHeader = null;\n if (item.value === MenuSeparatorString) {\n return <MenuDivider key={`$$divider_${index}`} />;\n } else if (item.value === MenuHeaderString) {\n lastHeader = <MenuHeader key={`$$header_${index}`}>{item.label}</MenuHeader>;\n return <></>;\n } else {\n if (lastHeader) {\n showHeader = lastHeader;\n lastHeader = null;\n }\n }\n return (\n (!filteredValues || filteredValues.includes(item)) && (\n <Fragment key={`${index}`}>\n {showHeader}\n <div key={`menu-wrapper-${index}`}>\n <MenuItem\n key={`${fieldToString(field)}-${index}`}\n disabled={!!item.disabled}\n title={item.disabled && typeof item.disabled !== 'boolean' ? item.disabled : ''}\n value={item.value}\n onFocus={() => {\n if (selectedItem !== item) {\n setSelectedItem(item);\n setSubSelectedValue(null);\n subComponentIsValid.current = true;\n if (item.subComponent) {\n subComponentInitialValue.current = null;\n }\n }\n }}\n onClick={(e: ClickEvent) => {\n e.keepOpen = !!item.subComponent;\n }}\n >\n {item.label ?? (item.value == null ? `<${String(item.value)}>` : `${String(item.value)}`)}\n {item.subComponent ? '...' : ''}\n </MenuItem>\n\n {item.subComponent && selectedItem === item && (\n <FocusableItem className={'LuiDeprecatedForms'} key={`${String(item.label)}_subcomponent`}>\n {() => (\n <GridSubComponentContext.Provider\n value={{\n context: { options },\n data,\n value: subSelectedValue,\n setValue: (value: any) => {\n setSubSelectedValue(value);\n if (subComponentInitialValue.current === null) {\n // copy the default value of the subcomponent, so we can change detect on save\n subComponentInitialValue.current = JSON.stringify(value);\n }\n },\n setValid: (valid: boolean) => {\n subComponentIsValid.current = valid;\n },\n triggerSave: async () => {\n // empty\n },\n }}\n >\n {item.subComponent && (\n <div className={'subComponent'}>\n <item.subComponent />\n </div>\n )}\n </GridSubComponentContext.Provider>\n )}\n </FocusableItem>\n )}\n </div>\n </Fragment>\n )\n );\n })}\n </>\n </ComponentLoadingWrapper>\n </>,\n );\n};\n","import './TextInputFormatted.scss';\n\nimport clsx from 'clsx';\nimport { omit } from 'lodash-es';\nimport { DetailedHTMLProps, InputHTMLAttributes, ReactElement } from 'react';\n\nimport { FormError } from './FormError';\n\nexport interface LuiTextInputProps extends DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> {\n // overrides value in base class to be string type only\n value: string;\n\n // Custom fields\n helpText?: string;\n error?: ReactElement | string | boolean | null;\n formatted?: string;\n allowTabToSave?: boolean;\n}\n\nexport const TextInputFormatted = (props: LuiTextInputProps): ReactElement => {\n return (\n <div\n className={clsx(\n 'LuiTextInput GridLuiTextInput Grid-popoverContainer',\n props.error && 'hasError',\n props.className,\n )}\n >\n <span className=\"LuiTextInput-inputWrapper\">\n {/* wrapper div used for error styling */}\n <input\n type={'text'}\n spellCheck={true}\n defaultValue={props.value}\n {...omit(props, ['error', 'value', 'helpText', 'formatted', 'className', 'allowTabToSave'])}\n className={'LuiTextInput-input'}\n onMouseEnter={(e) => {\n e.currentTarget.focus();\n props.onMouseEnter && props.onMouseEnter(e);\n }}\n data-allowtabtosave={props.allowTabToSave}\n />\n <span className={'LuiTextInput-formatted'}>{props.formatted}</span>\n </span>\n\n <FormError error={props.error} helpText={props.helpText} />\n </div>\n );\n};\n","export const bearingValueFormatter = (value: any): string => {\n const safeValue = typeof value === 'string' ? parseFloat(value) : value;\n if (safeValue == null) {\n return '–';\n }\n return convertDDToDMS(safeValue, false);\n};\n\nexport const bearingCorrectionValueFormatter = (value: any): string => {\n const safeValue = value;\n if (safeValue == null) {\n return '–';\n }\n if (typeof safeValue === 'string') {\n return convertDDToDMS(bearingNumberParser(safeValue), true, 4);\n }\n return convertDDToDMS(safeValue, true, 4);\n};\n\nexport const bearingNumberParser = (value: string): number | null => {\n if (value === '') return null;\n return parseFloat(value);\n};\n\nconst validMaskForDmsBearing = /^((-)?\\d+)?(\\.([0-5](\\d([0-5](\\d(\\d+)?)?)?)?)?)?$/;\nexport const bearingStringValidator = (\n value: string,\n customInvalid?: (value: number | null) => string | null,\n): string | null => {\n value = value.trim();\n if (value === '') return null;\n const match = value.match(validMaskForDmsBearing);\n if (!match) return 'Bearing must be a number in D.MMSSS format';\n const decimalPart = match[4];\n if (decimalPart != null && decimalPart.length > 5) {\n return 'Bearing has a maximum of 5 decimal places';\n }\n\n const bearing = parseFloat(value);\n return customInvalid ? customInvalid(bearing) : null;\n};\n\n/**\n *Decimal-ish degrees to Degrees Minutes Seconds converter\n *\n * @param dd Decimal-ish degrees\n * @param showPositiveSymbol whether the + sign appears before the number\n * @param trailingZeroDp 2 | 4 | 5\n * Example:\n * 2 = 300° 00'\n * 4 = 300° 00' 00\"\n * 5 = 300° 00' 00.0\"\n * @returns Degrees Minutes Seconds\n */\nexport const convertDDToDMS = (dd: number | null, showPositiveSymbol = true, trailingZeroDp: 2 | 4 | 5 = 2): string => {\n if (dd == null) return '–';\n\n // toFixed rounds parts up greater than 60, which has to be corrected below\n const [bearingWholeString, bearingDecimalString] = dd.toFixed(5).split('.');\n\n let bearingWhole = Math.abs(parseInt(bearingWholeString));\n let minNumeric = parseInt(bearingDecimalString?.substring(0, 2));\n let secNumeric = parseInt(bearingDecimalString?.substring(2, 4));\n\n // If the toFixed caused rounding beyond 60 minutes/seconds then apply the carry\n if (secNumeric >= 60) {\n minNumeric++;\n secNumeric -= 60;\n }\n if (minNumeric >= 60) {\n bearingWhole++;\n minNumeric -= 60;\n }\n if (bearingWhole >= 360) {\n bearingWhole -= 360;\n }\n\n const minString = minNumeric.toString().padStart(2, '0');\n const secString = secNumeric.toString().padStart(2, '0');\n const deciSecString = bearingDecimalString?.substring(4, 5);\n\n let dmsString = `${showPositiveSymbol && dd > 0 ? '+' : ''}${dd < 0 ? '-' : ''}${bearingWhole}°`;\n if (trailingZeroDp === 5 || deciSecString != '0') {\n dmsString += `\\xa0${minString}'\\xa0${secString}.${deciSecString}\"`; // \"\\xa0\" is here for non-breaking space\n } else if (trailingZeroDp === 4 || secNumeric != 0) {\n dmsString += `\\xa0${minString}'\\xa0${secString}\"`;\n } else {\n dmsString += `\\xa0${minString}'`;\n }\n return dmsString;\n};\n\nexport const bearingRangeValidator = (value: number | null) => {\n if (value === null) return 'Bearing is required';\n if (value >= 360) return 'Bearing must be less than 360 degrees';\n if (value < 0) return 'Bearing must not be negative';\n return null;\n};\n\nexport const bearingCorrectionRangeValidator = (value: number | null) => {\n if (value === null) return 'Bearing correction is required';\n if (value >= 360) return 'Bearing correction must be less than 360 degrees';\n if (value <= -180) return 'Bearing correction must be greater then -180 degrees';\n return null;\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { TextInputFormatted } from '../../lui/TextInputFormatted';\nimport { bearingNumberParser, bearingStringValidator } from '../../utils/bearing';\nimport { 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) {\n return true;\n }\n\n // Any changes to save?\n if (initialValues === JSON.stringify(options)) {\n return true;\n }\n\n return props.onSave({\n selectedRows,\n selectedOptions: options.filter((o) => o.checked),\n });\n },\n [initialValues, options, props],\n );\n\n // Load up options list if it's async function\n useEffect(() => {\n if (options || optionsInitialising.current) return;\n optionsInitialising.current = true;\n\n void (async () => {\n const optionsList = typeof props.options === 'function' ? await props.options(selectedRows) : props.options;\n setInitialValues(JSON.stringify(optionsList));\n setOptions(optionsList);\n optionsInitialising.current = false;\n })();\n }, [options, props, selectedRows]);\n\n /**\n * Groups options into their header groups\n */\n const headerGroups = useMemo(() => {\n if (!options) return undefined;\n const result = groupBy(\n options.filter((o) => textMatch(o.label, filter) && o.value != null),\n 'filter',\n );\n // remove leading/trailing/duplicate dividers\n return fromPairs(\n toPairs(result).map(([key, arr]) => {\n let lastWasDivider = true;\n return [\n key,\n arr\n .map((row, index) => {\n if (row.value === MenuSeparatorString) {\n if (lastWasDivider) return null;\n if (index === arr.length - 1) return null;\n lastWasDivider = true;\n } else {\n lastWasDivider = false;\n }\n return row;\n })\n .filter((r) => r),\n ];\n }),\n ) as HeaderGroupType;\n }, [filter, options]);\n\n const headers: GridFormMultiSelectGroup[] = useMemo(() => props.headers ?? [{ header: '' }], [props.headers]);\n\n const { popoverWrapper, triggerSave } = useGridPopoverHook({\n className: props.className,\n invalid,\n save,\n });\n\n return popoverWrapper(\n <ComponentLoadingWrapper loading={!options} className={'GridFormMultiSelect-container'}>\n {options && (\n <>\n {props.filtered && (\n <FilterInput\n {...{ headerGroups, options, setOptions, filter, setFilter, triggerSave }}\n filterHelpText={props.filterHelpText}\n onSelectFilter={props.onSelectFilter}\n filterPlaceholder={props.filterPlaceholder}\n />\n )}\n {headerGroups &&\n (isEmpty(headerGroups) || !toPairs(headerGroups).some(([_, options]) => !isEmpty(options))) && (\n <MenuItem key={'noOptions'} className={'GridMultiSelect-noOptions'} disabled={true}>\n {props.noOptionsMessage ?? 'No Options'}\n </MenuItem>\n )}\n {headerGroups && !isEmpty(headerGroups) && (\n <div className={'GridFormMultiSelect-options'}>\n {headers.map((header, index) => {\n const subOptions = headerGroups[`${header.filter}`];\n return (\n !isEmpty(subOptions) && (\n <Fragment key={`group_${index}`}>\n {header.header && <MenuHeader>{header.header}</MenuHeader>}\n {subOptions.map((item, index) =>\n item.value === MenuSeparatorString ? (\n <MenuDivider key={`div_${index}`} />\n ) : (\n <Fragment key={`val_${item.value}`}>\n <MenuRadioItem\n item={item}\n options={options}\n setOptions={setOptions}\n onChecked={() => {\n // Default to focus on first input in subComponent\n defer(() => {\n firstInputSubComponent.current?.focus();\n });\n }}\n />\n {item.checked && item.subComponent && (\n <MenuSubComponent\n {...{ item, options, setOptions, data, triggerSave }}\n ref={firstInputSubComponent}\n subComponentIsValid={subComponentIsValidRef.current}\n />\n )}\n </Fragment>\n ),\n )}\n </Fragment>\n )\n );\n })}\n </div>\n )}\n </>\n )}\n </ComponentLoadingWrapper>,\n );\n};\n\nconst FilterInput = (props: {\n options: MultiSelectOption[];\n setOptions: (options: MultiSelectOption[]) => void;\n onSelectFilter?: (props: { filter: string; options: MultiSelectOption[] }) => void;\n filter: string;\n setFilter: Dispatch<SetStateAction<string>>;\n headerGroups: HeaderGroupType;\n filterPlaceholder?: string;\n filterHelpText?: string | ((filter: string, options: MultiSelectOption[]) => string | undefined);\n triggerSave: () => Promise<void>;\n}) => {\n const {\n options,\n setOptions,\n onSelectFilter,\n filter,\n setFilter,\n headerGroups,\n filterPlaceholder,\n filterHelpText,\n triggerSave,\n } = props;\n\n const enterHasBeenPressed = useRef(false);\n const lastKeyWasEnter = useRef(false);\n\n const toggleSelectAllVisible = useCallback(() => {\n if (!options || !headerGroups) return;\n\n if (isEmpty(filter.trim())) {\n // Toggle off if any items are checked otherwise on\n const anyChecked = options.some((o) => o.checked);\n options.forEach((o) => {\n if (o.label !== undefined) o.checked = !anyChecked;\n });\n } else {\n // Toggle on if any filtered items are checked otherwise off\n const anyChecked = Object.values(headerGroups).some((headerOptions) =>\n headerOptions.some((o) => o.checked === false),\n );\n Object.values(headerGroups).forEach((headerOptions) => {\n headerOptions.forEach((o) => {\n if (o.label !== undefined) o.checked = anyChecked;\n });\n });\n }\n setOptions([...options]);\n }, [filter, headerGroups, options, setOptions]);\n\n const addCustomFilterValue = useCallback(() => {\n if (!options || !onSelectFilter) {\n return;\n }\n\n const filterTrimmed = filter.trim();\n if (isEmpty(filterTrimmed)) {\n void triggerSave();\n return;\n }\n\n const preFilterOptions = JSON.stringify(options);\n onSelectFilter({ filter: filterTrimmed, options });\n // Detect if options list changed and update\n if (preFilterOptions === JSON.stringify(options)) {\n return;\n }\n\n setOptions([...options]);\n setFilter('');\n }, [filter, onSelectFilter, options, setFilter, setOptions, triggerSave]);\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n enterHasBeenPressed.current = true;\n }\n }, []);\n\n const handleKeyUp = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n\n if (e.ctrlKey) toggleSelectAllVisible();\n else if (enterHasBeenPressed.current) {\n const filterTrimmed = filter.trim();\n if (isEmpty(filterTrimmed)) {\n void triggerSave();\n return;\n }\n onSelectFilter && addCustomFilterValue();\n }\n lastKeyWasEnter.current = true;\n } else if (e.key === 'Control') {\n lastKeyWasEnter.current && setFilter('');\n lastKeyWasEnter.current = false;\n } else {\n lastKeyWasEnter.current = false;\n }\n },\n [addCustomFilterValue, filter, onSelectFilter, setFilter, toggleSelectAllVisible, triggerSave],\n );\n\n return (\n <>\n <FocusableItem className={'filter-item'} key={'filter'}>\n {(_: any) => (\n <div style={{ width: '100%' }} className={'GridFormMultiSelect-filter'}>\n <input\n className={'LuiTextInput-input'}\n type=\"text\"\n placeholder={filterPlaceholder ?? 'Filter...'}\n data-testid={'filteredMenu-free-text-input'}\n value={filter}\n data-disableenterautosave={true}\n data-allowtabtosave={true}\n onChange={(e) => setFilter(e.target.value)}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n />\n {filterHelpText && (\n <FormError\n error={null}\n helpText={\n typeof filterHelpText === 'function' ? filterHelpText(filter.trim(), options) : filterHelpText\n }\n />\n )}\n </div>\n )}\n </FocusableItem>\n <MenuDivider key={`$$divider_filter`} />\n </>\n );\n};\n\nconst MenuRadioItem = (props: {\n item: MultiSelectOption;\n options: MultiSelectOption[];\n setOptions: (options: MultiSelectOption[]) => void;\n onChecked?: () => void;\n}) => {\n const { item, options, setOptions } = props;\n\n const toggleValue = useCallback(\n (item: MultiSelectOption) => {\n item.checked = !item.checked;\n setOptions([...options]);\n },\n [options, setOptions],\n );\n\n return (\n <MenuItem\n onClick={(e: ClickEvent) => {\n // Global react-menu MenuItem handler handles tabs\n if (e.key !== 'Tab' && e.key !== 'Enter') {\n e.keepOpen = true;\n toggleValue(item);\n }\n item.checked && props.onChecked && props.onChecked();\n }}\n >\n <LuiCheckboxInput\n isChecked={item.checked ?? false}\n value={`${item.value}`}\n label={\n <>\n {item.warning && <GridIcon icon={'ic_warning_outline'} title={item.warning} />}\n {item.label ?? (item.value == null ? `<${item.value}>` : `${item.value}`)}\n </>\n }\n inputProps={{\n onClick: (e) => {\n // Click is handled by MenuItem onClick\n e.preventDefault();\n e.stopPropagation();\n },\n }}\n onChange={() => {\n /*Do nothing, change handled by menuItem*/\n }}\n />\n </MenuItem>\n );\n};\n\nconst MenuSubComponent = React.forwardRef(MenuSubComponentFr);\n\nfunction MenuSubComponentFr(\n props: {\n data: any;\n item: MultiSelectOption;\n options: MultiSelectOption[];\n setOptions: (options: MultiSelectOption[]) => void;\n subComponentIsValid: Record<string, boolean>;\n triggerSave: () => Promise<void>;\n },\n ref: ForwardedRef<HTMLInputElement>,\n) {\n const { data, item, options, setOptions, subComponentIsValid, triggerSave } = props;\n const focusableRef = React.useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (focusableRef.current) {\n const firstInputElement = focusableRef.current.querySelectorAll('input')[0] ?? null;\n if (typeof ref === 'function') {\n ref(firstInputElement);\n } else if (ref) {\n ref.current = firstInputElement;\n }\n }\n }, [ref]);\n\n return (\n <FocusableItem className={'LuiDeprecatedForms'} key={`${item.value}_subcomponent`} ref={focusableRef}>\n {() => (\n <GridSubComponentContext.Provider\n value={{\n context: { options },\n data,\n value: item.subValue,\n setValue: (value: any) => {\n item.subValue = value;\n setOptions([...options]);\n },\n setValid: (valid: boolean) => {\n subComponentIsValid[`${item.value}`] = valid;\n },\n triggerSave,\n }}\n >\n <div className={'subComponent'}>{item.subComponent && <item.subComponent />}</div>\n </GridSubComponentContext.Provider>\n )}\n </FocusableItem>\n );\n}\n","import { LuiCheckboxInput } from '@linzjs/lui';\nimport { isEqual } from 'lodash-es';\nimport { ReactElement, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { MenuItem } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { 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()) {\n return false;\n }\n\n const trimmedValue = value.trim();\n // No change, so don't save\n if (initValue === trimmedValue) {\n return true;\n }\n\n if (props.onSave) {\n return await props.onSave({ selectedRows, value: trimmedValue });\n }\n\n selectedRows.forEach((row) => (row[field] = trimmedValue as any));\n return true;\n },\n [invalid, value, initValue, props, field],\n );\n const { popoverWrapper } = useGridPopoverHook({\n className: props.className,\n invalid,\n save,\n });\n\n return popoverWrapper(\n <div style={{ display: 'flex', flexDirection: 'row' }} className={'FormTest subComponent'}>\n <TextInputFormatted\n value={value}\n onChange={(e) => setValue(e.target.value)}\n error={invalid()}\n formatted={props.units}\n style={{ width: props.width ?? 240 }}\n placeholder={props.placeholder ?? 'Type here'}\n helpText={helpText}\n />\n </div>,\n );\n};\n","import { LuiButton, LuiIcon } from '@linzjs/lui';\nimport { CellFocusedEvent, ICellEditorParams, ICellRendererParams } from 'ag-grid-community';\nimport { useEffect, useRef } from 'react';\n\nimport { 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 preventAutoEdit: true,\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 clsx from 'clsx';\nimport { forwardRef, PropsWithChildren } from 'react';\n\nexport interface GridWrapperProps {\n className?: string | undefined;\n maxHeight?: number | string;\n}\n\nexport const GridWrapper = forwardRef<HTMLDivElement, PropsWithChildren<GridWrapperProps>>(function GridWrapperFr(\n { children, maxHeight, className },\n ref,\n) {\n return (\n <div className={clsx('Grid-wrapper', className)} style={{ maxHeight }} ref={ref}>\n {children}\n </div>\n );\n});\n","import { ColDef } from 'ag-grid-community';\n\nimport { isGridCellFiller } from './GridCellFiller';\n\nexport const getColId = (colDef: ColDef): string => colDef.colId ?? '';\nexport const isFlexColumn = (colDef: ColDef): boolean => !!colDef.flex && !isGridCellFiller(colDef);\n","import { wait } from '../utils/util';\n\nexport const waitForCondition = async (\n error: string,\n condition: () => boolean,\n timeoutMs: number,\n): Promise<boolean> => {\n const endTime = Date.now() + timeoutMs;\n while (Date.now() < endTime) {\n if (condition()) {\n return true;\n }\n await wait(100);\n }\n console.warn(error);\n return false;\n};\n","import {\n CellPosition,\n ColDef,\n ColumnState,\n CsvExportParams,\n GridApi,\n IRowNode,\n ISizeColumnsToFitParams,\n ProcessCellForExportParams,\n RowNode,\n} from 'ag-grid-community';\nimport debounce from 'debounce-promise';\nimport { compact, defer, delay, difference, filter, isEmpty, last, pull, remove, sortBy, sumBy } from 'lodash-es';\nimport { PropsWithChildren, ReactElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { ColDefT, GridBaseRow } from '../components';\nimport { GridCellFillerColId, isGridCellFiller } from '../components/GridCellFiller';\nimport { getColId, isFlexColumn } from '../components/gridUtil';\nimport { fnOrVar, isNotEmpty, sanitiseFileName, wait } from '../utils/util';\nimport { waitForCondition } from '../utils/waitForCondition';\nimport { AutoSizeColumnsProps, AutoSizeColumnsResult, GridContext, GridFilterExternal } from './GridContext';\nimport { GridUpdatingContext } from './GridUpdatingContext';\n\nexport const colStateId = (colState: ColumnState) => colState.colId;\nexport const colStateFlexed = (colState: ColumnState) => !!colState.flex;\nexport const colStateNotFlexed = (colState: ColumnState) => !colState.flex;\n\n/**\n * Context for AgGrid operations.\n * Make sure you wrap AgGrid in this.\n * Also, make sure the provider is created in a separate component, otherwise it won't be found.\n */\nexport const GridContextProvider = <TData extends GridBaseRow>(props: PropsWithChildren): ReactElement => {\n const { modifyUpdating, anyUpdating } = useContext(GridUpdatingContext);\n const [gridApi, setGridApi] = useState<GridApi>();\n const [gridReady, setGridReady] = useState(false);\n const [quickFilter, _setQuickFilter] = useState('');\n const [invisibleColumnIds, _setInvisibleColumnIds] = useState<string[]>();\n const testId = useRef<string | undefined>();\n const hasExternallySelectedItemsRef = useRef(false);\n const idsBeforeUpdate = useRef<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 = useCallback(\n (invisibleColumnIds: string[]) => _setInvisibleColumnIds(pull(invisibleColumnIds, GridCellFillerColId)),\n [],\n );\n\n /**\n * Set quick filter directly on grid, based on previously save quickFilter state.\n */\n useEffect(() => {\n gridApi?.setGridOption('quickFilterText', quickFilter);\n }, [gridApi, quickFilter]);\n\n /**\n * Wraps things that require gridApi in common handling, for when gridApi not present.\n *\n * @param hasApiFn Execute when api is ready.\n * @param noApiFn Execute if api is not ready.\n */\n const gridApiOp = useCallback(\n <T, R>(hasApiFn: (gridApi: GridApi) => T, noApiFn?: () => R): T | R => {\n if (!noApiFn) {\n noApiFn = (() => {}) as () => R;\n }\n return gridApi && !gridApi.isDestroyed() ? hasApiFn(gridApi) : noApiFn();\n },\n [gridApi],\n );\n\n /**\n * Scroll row into view by Id.\n *\n * @param id Id to scroll into view\n * @return true if row is found, else false\n */\n const ensureRowVisible = useCallback(\n (id: number | string): boolean => {\n if (!gridApi) return false;\n const node = gridApi.getRowNode(`${id}`);\n if (!node) return false;\n defer(() => !gridApi.isDestroyed() && gridApi.ensureNodeVisible(node));\n return true;\n },\n [gridApi],\n );\n\n const getFirstRowId = useCallback((): number => {\n let id = 0;\n try {\n gridApi?.forEachNodeAfterFilterAndSort((rowNode) => {\n id = parseInt(rowNode.id ?? '0');\n // this is the only way to get out of the loop\n throw 'expected exception - exit_loop';\n });\n } catch (ex) {\n // ignore\n }\n return id;\n }, [gridApi]);\n\n /**\n * Set the grid api when the grid is ready.\n */\n const setApis = useCallback(\n (gridApi: GridApi | undefined, hasExternallySelectedItems: boolean, dataTestId?: string) => {\n hasExternallySelectedItemsRef.current = hasExternallySelectedItems;\n testId.current = dataTestId;\n setGridApi(gridApi);\n gridApi?.setGridOption('quickFilterText', quickFilter);\n setGridReady(!!gridApi);\n },\n [quickFilter],\n );\n\n /**\n * Used to check if it's OK to autosize.\n */\n const gridRenderState = useCallback((): null | 'empty' | 'rows-visible' => {\n if (!gridApi) return null;\n if (!gridApi.getDisplayedRowCount()) return 'empty';\n if (!isEmpty(gridApi.getRenderedNodes())) return 'rows-visible';\n // If there are rows to render, but there are no rendered nodes then we should wait\n return null;\n }, [gridApi]);\n\n /**\n * Expose scrollRowIntoView for playwright tests.\n */\n useEffect(() => {\n const globalSupport = (window as any).__stepAgGrid || ((window as any).__stepAgGrid = { grids: {} });\n if (testId.current) {\n globalSupport.grids[testId.current] = {\n scrollRowIntoViewById: (rowId: number | string) => {\n if (!ensureRowVisible(rowId)) {\n throw `scrollRowIntoView failed on grid '${testId.current}' as row with id: '${rowId}' was not found`;\n }\n },\n };\n }\n }, [ensureRowVisible]);\n\n /**\n * Before a popup record the currently focused cell.\n */\n const prePopupOps = useCallback(() => {\n if (!gridApi || gridApi.isDestroyed()) {\n return;\n }\n prePopupFocusedCell.current = gridApi.getFocusedCell() ?? undefined;\n }, [gridApi]);\n\n /**\n * Get all row id's in grid.\n */\n const _getAllRowIds = useCallback(() => {\n const result: 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 * This is used to calculate the preferred size of columns.\n * It sizes the flex columns first and then clears the calculated width.\n * If you don't clear flex column widths ag-grid gets confused and does random sizing's.\n * Then we size the flexed columns.\n */\n const autoSizeColumns = useCallback(\n ({ skipHeader, colIds, userSizedColIds }: AutoSizeColumnsProps = {}): AutoSizeColumnsResult => {\n if (!gridApi || !gridApi.getColumnState()) {\n return null;\n }\n const colIdsSet = colIds instanceof Set ? colIds : new Set(colIds);\n\n const getVisibleColStates = () => {\n const colStates = gridApi.getColumnState();\n return colStates.filter((colState) => {\n const colId = colState.colId;\n return (isEmpty(colIdsSet) || colIdsSet.has(colId)) && !userSizedColIds?.has(colId);\n });\n };\n const getFlexColStates = () => getVisibleColStates().filter(colStateFlexed);\n const getNonFlexColStates = () => getVisibleColStates().filter(colStateNotFlexed);\n\n // If we don't reset the flex columns auto size it causes issues with random resizing of flex columns\n let flexColumns = getFlexColStates();\n let width = 0;\n if (!isEmpty(flexColumns)) {\n gridApi.autoSizeColumns(flexColumns.map(colStateId), skipHeader);\n const flexColumnIds = flexColumns.map(colStateId);\n flexColumns = getVisibleColStates().filter((colState) => flexColumnIds.includes(colState.colId));\n width += sumBy(\n flexColumns.filter((col) => !col.hide),\n 'width',\n );\n gridApi.resetColumnState();\n }\n\n let nonFlexColumns = getNonFlexColStates();\n if (!isEmpty(nonFlexColumns)) {\n gridApi.autoSizeColumns(nonFlexColumns.map(colStateId), skipHeader);\n const nonFlexColumnIds = nonFlexColumns.map(colStateId);\n nonFlexColumns = getVisibleColStates().filter((colState) => nonFlexColumnIds.includes(colState.colId));\n width += sumBy(\n nonFlexColumns.filter((col) => !col.hide),\n 'width',\n );\n }\n\n return {\n width,\n };\n },\n [gridApi],\n );\n\n /**\n * Resize columns to fit container\n */\n const sizeColumnsToFit = useCallback(\n (paramsOrGridWidth?: ISizeColumnsToFitParams): void => {\n if (gridApi && !gridApi?.isDestroyed()) {\n gridApi.sizeColumnsToFit(paramsOrGridWidth);\n }\n },\n [gridApi],\n );\n\n /**\n *\n */\n const resetFocusedCellAfterCellEditing = useCallback((): void => {\n if (!gridApi || gridApi.isDestroyed() || startCellEditingInProgressRef.current) {\n return;\n }\n if (prePopupFocusedCell.current) {\n gridApi.setFocusedCell(prePopupFocusedCell.current.rowIndex, prePopupFocusedCell.current.column);\n prePopupFocusedCell.current = undefined;\n }\n }, [gridApi]);\n\n // waitForExternallySelectedItemsToBeInSync can't use the state as it won't be updated during function execution\n const externallySelectedItemsAreInSyncRef = useRef(false);\n useEffect(() => {\n externallySelectedItemsAreInSyncRef.current = externallySelectedItemsAreInSync;\n }, [externallySelectedItemsAreInSync]);\n\n const waitForExternallySelectedItemsToBeInSync = useCallback(async () => {\n if (!hasExternallySelectedItemsRef.current) {\n externallySelectedItemsAreInSyncRef.current = true;\n return;\n }\n // Wait for up to 5 seconds\n for (let i = 0; i < 5000 / 200 && !externallySelectedItemsAreInSyncRef.current; i++) {\n await wait(200);\n }\n if (!externallySelectedItemsAreInSyncRef.current) {\n console.error('externallySelectedItems did not sync with ag-grid selection');\n }\n }, []);\n\n const startCellEditingInProgressRef = useRef(false);\n const startCellEditing = useCallback(\n async ({ rowId, colId }: { rowId: number; colId: string }) => {\n if (!gridApi || startCellEditingInProgressRef.current) {\n return;\n }\n startCellEditingInProgressRef.current = true;\n\n try {\n // Edit in progress so don't edit until finished, timeout waiting after 5s\n if (\n !(await waitForCondition(\n 'startCellEditing failed as update still in progress, waited for 15 seconds',\n () => !anyUpdating(),\n 15000,\n ))\n ) {\n return;\n }\n\n const colDef = gridApi.getColumnDef(colId);\n if (!colDef) {\n return;\n }\n\n const rowNode = gridApi.getRowNode(`${rowId}`);\n if (!rowNode) {\n return;\n }\n\n prePopupOps();\n const shouldSelectNode = !rowNode.isSelected();\n if (shouldSelectNode) {\n externallySelectedItemsAreInSyncRef.current = false;\n setExternallySelectedItemsAreInSync(false);\n rowNode.setSelected(true, true);\n await waitForExternallySelectedItemsToBeInSync();\n }\n\n const rowIndex = rowNode.rowIndex;\n if (rowIndex != null) {\n defer(() => {\n if (!gridApi.isDestroyed()) {\n gridApi.startEditingCell({\n rowIndex,\n colKey: colId,\n });\n }\n });\n }\n } finally {\n startCellEditingInProgressRef.current = false;\n }\n },\n [anyUpdating, gridApi, prePopupOps, waitForExternallySelectedItemsToBeInSync],\n );\n\n const bulkEditingCompleteCallbackRef = useRef<() => Promise<void> | void>();\n const onBulkEditingComplete = useCallback(async () => {\n resetFocusedCellAfterCellEditing();\n await bulkEditingCompleteCallbackRef.current?.();\n }, [resetFocusedCellAfterCellEditing]);\n\n const setOnBulkEditingComplete = useCallback(\n (cellEditingCompleteCallback: (() => Promise<void> | void) | undefined) => {\n bulkEditingCompleteCallbackRef.current = cellEditingCompleteCallback;\n },\n [],\n );\n\n /**\n * Returns true if an editable cell on same row was selected, else false.\n */\n const selectNextEditableCell = useCallback(\n async (tabDirection: -1 | 1): Promise<boolean> => {\n // Pretend it succeeded to prevent unwanted cellEditingCompleteCallback\n if (!gridApi) {\n return true;\n }\n\n const focusedCellIsEditable = () => {\n const focusedCell = gridApi.isDestroyed() ? null : gridApi.getFocusedCell();\n const nextColumn = focusedCell?.column;\n const nextColDef = nextColumn?.getColDef();\n const rowNode = focusedCell && gridApi.getDisplayedRowAtIndex(focusedCell?.rowIndex);\n return (\n !!(rowNode && nextColumn && nextColDef) &&\n nextColumn.isCellEditable(rowNode) &&\n !nextColDef.cellEditorParams?.preventAutoEdit &&\n !nextColDef.cellRendererParams?.editAction\n );\n };\n\n // Just in case I've missed something, we don't want the loop to hang everything\n for (let maxIterations = 0; maxIterations < 50; maxIterations++) {\n if (gridApi.isDestroyed()) {\n return true;\n }\n // Prevent resetting focus to original editing cell\n prePopupFocusedCell.current = undefined;\n\n const preRow = gridApi.getFocusedCell();\n // If we don't do this ag-grid will do its own continuation of an edit on tab, we don't want that as\n // we are managing it ourselves\n const didTab = tabDirection === 1 ? gridApi.tabToNextCell() : gridApi.tabToPreviousCell();\n if (!didTab) {\n break;\n }\n\n if (gridApi.isDestroyed()) {\n return true;\n }\n const postRow = gridApi.getFocusedCell();\n if (preRow?.rowIndex !== postRow?.rowIndex || preRow?.column === postRow?.column) {\n // We didn't find an editable cell in the same row, or the cell column didn't change\n // implying it was start/end of grid\n break;\n }\n\n if (focusedCellIsEditable()) {\n const focusedCell = gridApi.getFocusedCell();\n if (focusedCell) {\n const rowNode = gridApi.getDisplayedRowAtIndex(focusedCell.rowIndex);\n const rowId = rowNode?.data?.id;\n if (rowId == null) {\n return false;\n }\n await startCellEditing({ rowId, colId: focusedCell.column.getColId() });\n return true;\n }\n }\n }\n return false;\n },\n [gridApi, startCellEditing],\n );\n\n const updatingCells = useCallback(\n async (\n props: { selectedRows: GridBaseRow[]; field?: string },\n fnUpdate: (selectedRows: any[]) => Promise<boolean>,\n setSaving?: (saving: boolean) => void,\n tabDirection?: 1 | 0 | -1,\n ): Promise<boolean> => {\n try {\n setSaving?.(true);\n\n return await gridApiOp(async (gridApi) => {\n const selectedRows = props.selectedRows;\n\n let ok = false;\n\n await modifyUpdating(\n props.field ?? '',\n selectedRows.map((data) => data.id),\n async () => {\n // Need to refresh to get spinners to work on all rows\n gridApi.refreshCells({ rowNodes: props.selectedRows as RowNode[], force: true });\n ok = await fnUpdate(selectedRows).catch((ex) => {\n console.error('Exception during modifyUpdating', ex);\n return false;\n });\n },\n );\n\n // async processes need to refresh their own rows\n gridApi.refreshCells({ rowNodes: selectedRows as RowNode[], force: true });\n\n if (gridApi.isDestroyed()) {\n return ok;\n }\n\n if (ok) {\n //const cell = gridApi.getFocusedCell();\n //if (cell && gridApi.getFocusedCell() == null) {\n // !gridApi.isDestroyed && gridApi.setFocusedCell(cell.rowIndex, cell.column);\n // }\n\n // This is needed to trigger postSortRowsHook\n !gridApi.isDestroyed && gridApi.refreshClientSideRowModel();\n }\n\n void (async () => {\n // Only focus next cell if user hasn't already manually changed focus\n const postPopupFocusedCell = gridApi.getFocusedCell();\n if (\n prePopupFocusedCell.current &&\n postPopupFocusedCell &&\n prePopupFocusedCell.current.rowIndex == postPopupFocusedCell.rowIndex &&\n prePopupFocusedCell.current.column.getColId() == postPopupFocusedCell.column.getColId()\n ) {\n if (!tabDirection || !(await selectNextEditableCell(tabDirection))) {\n await onBulkEditingComplete();\n }\n } else {\n await onBulkEditingComplete();\n }\n })();\n\n return ok;\n });\n } finally {\n setSaving?.(false);\n }\n },\n [gridApiOp, modifyUpdating, onBulkEditingComplete, selectNextEditableCell],\n );\n\n const redrawRows: any = useMemo(\n () =>\n debounce((rowNodes?: IRowNode[]) => {\n try {\n gridApi && gridApi.redrawRows(rowNodes ? { rowNodes } : undefined);\n } catch (ex) {\n console.error(ex);\n }\n }, 50),\n [gridApi],\n );\n\n const onFilterChanged = useMemo(\n () =>\n debounce(() => {\n if (!gridApi || gridApi?.isDestroyed()) {\n return;\n }\n // This is terrible, but there's no other way for me to check whether a filter has changed the grid\n const getDisplayedRowsHash = () => {\n const arr: any[] = [];\n gridApi?.forEachNodeAfterFilter((rowNode) => {\n arr.push(rowNode.id);\n });\n return arr.join('|');\n };\n\n if (gridApi) {\n const hasFocusedCell = gridApi.getFocusedCell();\n const preHash = hasFocusedCell && getDisplayedRowsHash();\n gridApi.onFilterChanged();\n const postHash = hasFocusedCell && getDisplayedRowsHash();\n // Ag-grid has a bug where if a focused cell comes into view after a filter the filter loses focus\n // So the focus is cleared to prevent this\n preHash !== postHash && gridApi.clearFocusedCell();\n }\n }, 200),\n [gridApi],\n );\n\n const addExternalFilter = useCallback(\n (filter: GridFilterExternal<TData>) => {\n externalFilters.current.push(filter);\n void onFilterChanged();\n },\n [onFilterChanged],\n );\n\n const removeExternalFilter = useCallback(\n (filter: GridFilterExternal<TData>) => {\n remove(externalFilters.current, (v) => v === filter);\n void onFilterChanged();\n },\n [onFilterChanged],\n );\n\n const isExternalFilterPresent = useCallback((): boolean => !isEmpty(externalFilters.current), []);\n\n const doesExternalFilterPass = useCallback(\n (node: IRowNode): boolean => externalFilters.current.every((filter) => filter(node.data, node)),\n [],\n );\n\n const getColDef = useCallback(\n (colId?: string): ColDef | undefined => (!!colId && gridApi?.getColumnDef(colId)) || undefined,\n [gridApi],\n );\n\n const showNoRowsOverlay = useCallback((): void => {\n gridApi?.showNoRowsOverlay();\n }, [gridApi]);\n\n /**\n * Apply column visibility\n */\n useEffect(() => {\n if (!gridApi || !invisibleColumnIds) return;\n\n // show all columns that aren't invisible\n const newVisibleColumns = getColumns(\n (col) => !col.lockVisible && col.colId && !invisibleColumnIds.includes(col.colId) && !isGridCellFiller(col),\n );\n // If there's no flex column showing add the filler column if defined\n const visibleColumnsContainsAFlex = newVisibleColumns.some(isFlexColumn);\n if (!visibleColumnsContainsAFlex) {\n const fillerColumn = getColumns(isGridCellFiller)[0];\n fillerColumn && newVisibleColumns.push(fillerColumn);\n }\n gridApi.setColumnsVisible(compact(newVisibleColumns.map(getColId)), true);\n\n // Hide the filler column if there's already a flex column\n const invisibleColumnIdsWithOptionalFiller = visibleColumnsContainsAFlex\n ? [...invisibleColumnIds, GridCellFillerColId]\n : invisibleColumnIds;\n gridApi.setColumnsVisible(invisibleColumnIdsWithOptionalFiller, false);\n }, [invisibleColumnIds, getColumns, gridApi]);\n\n /**\n * Download visible columns as a CSV\n */\n const downloadCsv = useCallback(\n (csvExportParams?: CsvExportParams) => {\n if (!gridApi) return;\n\n const fileName = csvExportParams?.fileName && sanitiseFileName(fnOrVar(csvExportParams.fileName));\n\n const columnKeys = gridApi\n .getColumnState()\n .filter((cs) => {\n const colDef = gridApi.getColumnDef(cs.colId);\n return !cs.hide && colDef && !isGridCellFiller(colDef) && colDef.headerComponentParams?.exportable !== false;\n })\n .map((cs) => cs.colId);\n gridApi.exportDataAsCsv({\n columnKeys,\n processCellCallback: downloadCsvUseValueFormattersProcessCellCallback,\n ...csvExportParams,\n fileName,\n });\n },\n [gridApi],\n );\n\n return (\n <GridContext.Provider\n value={{\n gridRenderState,\n getColDef,\n getColumns,\n getColumnIds,\n invisibleColumnIds,\n setInvisibleColumnIds,\n gridReady,\n prePopupOps,\n setApis,\n setQuickFilter,\n selectRowsById,\n selectRowsDiff,\n selectRowsByIdWithFlash,\n selectRowsWithFlashDiff,\n flashRows,\n flashRowsDiff,\n focusByRowById,\n getSelectedRows,\n getFilteredSelectedRows,\n getSelectedRowIds,\n getFilteredSelectedRowIds,\n getFirstRowId,\n editingCells,\n ensureRowVisible,\n ensureSelectedRowIsVisible,\n sizeColumnsToFit,\n autoSizeColumns,\n startCellEditing,\n resetFocusedCellAfterCellEditing,\n updatingCells,\n redrawRows,\n externallySelectedItemsAreInSync,\n setExternallySelectedItemsAreInSync,\n waitForExternallySelectedItemsToBeInSync,\n addExternalFilter,\n removeExternalFilter,\n isExternalFilterPresent,\n doesExternalFilterPass,\n downloadCsv,\n onBulkEditingComplete,\n setOnBulkEditingComplete,\n showNoRowsOverlay,\n }}\n >\n {props.children}\n </GridContext.Provider>\n );\n};\n\n/**\n * Aggrid defaults to using getters and ignores formatters.\n * step-ag-grid by default has a valueFormatter for every column that defaults to the getter if no valueFormatter\n * This function uses valueFormatter by default\n */\nexport const downloadCsvUseValueFormattersProcessCellCallback = (params: ProcessCellForExportParams): string => {\n const encodeToString = (value: any): string => {\n // Convert nullish values to blank\n if (value === '-' || value === '–' || value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value);\n };\n\n // Try to use valueFormatter\n const colDef = params?.column?.getColDef();\n if (!colDef) return encodeToString(params.value);\n\n // All columns in step-ag-grid have a default valueFormatter\n // If you have custom a renderer you need to define your own valueFormatter to produce the text value\n const valueFormatter = colDef.valueFormatter;\n // If no valueFormatter then value _must_ be a string\n if (valueFormatter == null) {\n if (params.value != null && typeof params.value !== 'string') {\n console.error(`downloadCsv: valueFormatter missing and getValue is not a string, colId: ${colDef.colId}`);\n }\n return encodeToString(params.value);\n }\n\n // We don't have access to registered functions, so we can't call them\n if (typeof valueFormatter !== 'function') {\n console.error(\n `downloadCsv: String type (registered) value formatters are unsupported in downloadCsv, colId: ${colDef.colId}`,\n );\n return encodeToString(params.value);\n }\n\n const result = valueFormatter({ ...params, data: params.node?.data, colDef, node: null });\n // type may not be string due to casting, leave the type check in\n if (params.value != null && typeof result !== 'string') {\n console.error(`downloadCsv: valueFormatter is returning non string values, colDef:\", colId: ${colDef.colId}`);\n }\n // We add an extra encodeToString here just in case valueFormatter is returning non string values\n return encodeToString(result);\n};\n","import { castArray, flatten, isEmpty, remove } from 'lodash-es';\nimport { PropsWithChildren, useCallback, useRef, useState } from 'react';\n\nimport { GridUpdatingContext } from './GridUpdatingContext';\n\nexport type GridUpdatingContextStatus = Record<string, (number | string)[] | undefined>;\n\ntype FieldName = string;\ntype IdList = (number | string)[];\ntype UpdatingBlock = Record<FieldName, IdList[]>;\n\nexport const GridUpdatingContextProvider = (props: PropsWithChildren) => {\n const updatingBlocks = useRef<UpdatingBlock>({});\n const updating = useRef<GridUpdatingContextStatus>({});\n const [updatedDep, setUpdatedDep] = useState(0);\n\n const resetUpdating = useCallback(() => {\n const mergedUpdatingBlocks: GridUpdatingContextStatus = {};\n for (const key in updatingBlocks.current) {\n const arr = flatten(updatingBlocks.current[key]);\n if (arr.length) {\n mergedUpdatingBlocks[key] = arr;\n }\n }\n updating.current = mergedUpdatingBlocks;\n setUpdatedDep((updatedDep) => updatedDep + 1);\n }, []);\n\n const updatingCols = useCallback(() => Object.keys(updating.current), []);\n\n const modifyUpdating = useCallback(\n async (fields: string | string[], ids: (number | string)[], fn: () => void | Promise<void>) => {\n const idRef = [...ids];\n castArray(fields).forEach((field) => {\n const fieldUpdatingIds = updatingBlocks.current[field] ?? (updatingBlocks.current[field] = []);\n fieldUpdatingIds.push(idRef);\n });\n resetUpdating();\n await fn();\n castArray(fields).forEach((field) => {\n const fieldUpdatingIds = updatingBlocks.current[field];\n remove(fieldUpdatingIds, (idList) => idList === idRef);\n });\n resetUpdating();\n },\n [resetUpdating],\n );\n\n const anyUpdating = useCallback((): boolean => {\n return !isEmpty(updating.current);\n }, []);\n\n const checkUpdating = useCallback(\n (fields: string | string[], id: number | string): boolean =>\n castArray(fields).some((f) => updating.current[f]?.includes(id)),\n [],\n );\n\n return (\n <GridUpdatingContext.Provider value={{ modifyUpdating, anyUpdating, checkUpdating, updatingCols, updatedDep }}>\n {props.children}\n </GridUpdatingContext.Provider>\n );\n};\n","import './ActionButton.scss';\n\nimport { LuiButton, LuiIcon, LuiMiniSpinner } from '@linzjs/lui';\nimport { LuiButtonProps } from '@linzjs/lui/dist/components/LuiButton/LuiButton';\nimport { IconName } from '@linzjs/lui/dist/components/LuiIcon/LuiIcon';\nimport clsx from 'clsx';\nimport { CSSProperties, ReactElement, useEffect, useState } from 'react';\n\nimport { usePrevious } from './reactUtils';\nimport { useStateDeferred } from './stateDeferredHook';\n\nexport interface ActionButtonProps {\n icon: IconName;\n name?: string;\n 'aria-label'?: string;\n inProgressName?: string;\n title?: string;\n dataTestId?: string;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'ns';\n iconPosition?: 'left' | 'right';\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n className?: 'ActionButton-fill' | 'ActionButton-tight' | string;\n onClick: () => Promise<void> | void;\n level?: LuiButtonProps['level'];\n style?: CSSProperties;\n disabled?: boolean;\n}\n\n// Kept this less than one second, so I don't have issues with waitFor as it defaults to 1s\nconst minimumInProgressTimeMs = 950;\n\nexport const ActionButton = ({\n icon,\n name,\n inProgressName,\n disabled,\n dataTestId,\n style,\n className,\n title,\n onClick,\n size = 'sm',\n iconPosition = 'left',\n level = 'tertiary',\n 'aria-label': ariaLabel,\n}: ActionButtonProps): ReactElement => {\n const [inProgress, setInProgress] = useState(false);\n const lastInProgress = usePrevious(inProgress ?? false);\n const [localInProgress, setLocalInProgress, setLocalInProgressDeferred] = useStateDeferred<boolean>(inProgress);\n\n useEffect(() => {\n if (inProgress == lastInProgress) return;\n inProgress ? setLocalInProgress(true) : setLocalInProgressDeferred(false, minimumInProgressTimeMs);\n }, [inProgress, lastInProgress, setLocalInProgress, setLocalInProgressDeferred]);\n\n const buttonText = (\n <span className={'ActionButton-minimalArea'}>\n <span className={'ActionButton-minimalAreaDisplay'}>{(localInProgress ? inProgressName : name) ?? name}</span>\n {/* This makes sure the button expands to fill maximum length text at all times */}\n <span className={'ActionButton-minimalAreaExpand'}>{name}</span>\n </span>\n );\n\n return (\n <LuiButton\n data-testid={dataTestId}\n type={'button'}\n level={level}\n title={title ?? ariaLabel ?? name}\n buttonProps={{ 'aria-label': ariaLabel ?? name }}\n className={clsx(\n 'lui-button-icon-right',\n 'ActionButton',\n className,\n localInProgress && 'ActionButton-inProgress',\n name != null && !className?.includes('ActionButton-fill') && 'ActionButton-minimal',\n name == null && 'ActionButton-iconOnly',\n )}\n size={'lg'}\n style={style}\n onClick={() => {\n const promise = onClick();\n const isPromise = typeof promise !== 'undefined';\n if (isPromise) {\n setInProgress(true);\n void promise.finally(() => {\n setInProgress(false);\n });\n }\n }}\n disabled={localInProgress || disabled}\n >\n {iconPosition === 'right' && buttonText}\n {localInProgress && (\n <div style={{ position: 'relative' }}>\n <LuiMiniSpinner\n size={14}\n divProps={{\n 'data-testid': 'loading-spinner',\n style: {\n position: 'absolute',\n left: 4,\n top: -10,\n bottom: 10,\n right: -4,\n },\n role: 'status',\n 'aria-label': 'Loading',\n }}\n />\n </div>\n )}\n <LuiIcon name={icon} alt={ariaLabel ?? name ?? ''} size={size} />\n {iconPosition === 'left' && buttonText}\n </LuiButton>\n );\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useDeferredPromise = <T>() => {\n const promiseResolve = useRef<((value: T | PromiseLike<T>) => void) | undefined>();\n const promiseReject = useRef<() => void>();\n\n // End promise on unload\n useEffect(() => {\n return () => {\n promiseReject.current && promiseReject.current();\n };\n }, []);\n\n return {\n invoke: () =>\n new Promise<T>((resolve, reject) => {\n promiseResolve.current = resolve;\n promiseReject.current = reject;\n }),\n resolve: (value: T) => {\n if (!promiseResolve.current) {\n console.error(\"Promise not invoked so can't resolve\");\n return;\n }\n const temp = promiseResolve.current;\n promiseResolve.current = undefined;\n promiseReject.current = undefined;\n temp(value);\n },\n reject: () => {\n if (!promiseResolve.current) {\n console.error(\"Promise not invoked so can't reject\");\n return;\n }\n const reject = promiseReject.current;\n promiseResolve.current = undefined;\n promiseReject.current = undefined;\n if (reject) reject();\n },\n };\n};\n"],"names":["_jsx","LuiMiniSpinner","_jsxs","global","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","useRef","createContext","useContext","negate","isEmpty","useState","useMemo","unstable_batchedUpdates","findIndex","memo","forwardRef","_Fragment","useCallback","defer","useTransition","useReducer","flushSync","debounce","createPortal","cloneElement","useImperativeHandle","Fragment","LuiStatusSpinner","LuiIcon","ModuleRegistry","AllCommunityModule","xorBy","last","difference","delay","omit","AgGridReact","sortBy","LuiButtonGroup","LuiButton","LuiCheckboxInput","createRoot","partition","compact","pick","groupBy","fromPairs","toPairs","isEqual","useId","pull","filter","sumBy","remove","flatten","castArray"],"mappings":"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","x_google_ignoreList":[1,2,3,24,25,62,71,75,76]}
|
|
1
|
+
{"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","../node_modules/style-inject/dist/style-inject.es.js","../src/components/gridFilter/GridFilterColumnsMultiSelect.tsx","../src/components/gridFilter/GridFilterHeaderIconButton.tsx","../src/components/gridFilter/GridFilterColumnsToggle.tsx","../src/lui/timeoutHook.tsx","../src/lui/stateDeferredHook.tsx","../src/components/gridFilter/GridFilterDownloadCsvButton.tsx","../src/components/gridFilter/GridFilterQuick.tsx","../src/components/gridFilter/GridFilters.tsx","../node_modules/debounce-promise/dist/index.js","../src/contexts/GridSubComponentContext.ts","../src/lui/FormError.tsx","../src/lui/reactUtils.tsx","../node_modules/matcher/node_modules/escape-string-regexp/index.js","../node_modules/matcher/index.js","../src/utils/textMatcher.ts","../src/components/GridPopoverHook.tsx","../src/components/gridForm/GridFormDropDown.tsx","../src/lui/TextInputFormatted.tsx","../src/utils/bearing.ts","../src/components/gridForm/GridFormEditBearing.tsx","../src/components/gridForm/GridFormMessage.tsx","../src/components/gridForm/GridFormMultiSelect.tsx","../src/components/gridForm/GridFormMultiSelectGrid.tsx","../src/components/gridForm/GridFormPopoverMenu.tsx","../src/lui/TextAreaInput.tsx","../src/utils/textValidator.ts","../src/components/gridForm/GridFormSubComponentTextArea.tsx","../src/components/gridForm/GridFormSubComponentTextInput.tsx","../src/components/gridForm/GridFormTextArea.tsx","../src/components/gridForm/GridFormTextInput.tsx","../src/components/gridPopoverEdit/GridButton.tsx","../src/components/gridPopoverEdit/GridEditBoolean.tsx","../src/components/gridPopoverEdit/GridPopoutEditMultiSelect.ts","../src/components/gridPopoverEdit/GridPopoutEditMultiSelectGrid.ts","../src/components/gridPopoverEdit/GridPopoverEditBearing.ts","../src/components/gridPopoverEdit/GridPopoverEditDropDown.ts","../src/components/gridRender/GridRenderPopoutMenuCell.tsx","../src/components/gridPopoverEdit/GridPopoverMenu.tsx","../src/components/gridPopoverEdit/GridPopoverMessage.ts","../src/components/gridPopoverEdit/GridPopoverTextArea.ts","../src/components/gridPopoverEdit/GridPopoverTextInput.ts","../src/components/GridWrapper.tsx","../src/components/gridUtil.ts","../src/utils/waitForCondition.tsx","../src/contexts/GridContextProvider.tsx","../src/contexts/GridUpdatingContextProvider.tsx","../src/lui/ActionButton.tsx","../src/utils/deferredPromise.ts"],"sourcesContent":["import { LuiMiniSpinner } from '@linzjs/lui';\nimport { PropsWithChildren, ReactElement } from 'react';\n\n/**\n * If loading is true this returns a loading spinner, otherwise it returns its children.\n */\nexport const ComponentLoadingWrapper = (\n props: PropsWithChildren<{\n loading?: boolean;\n saving?: boolean;\n className: string | undefined;\n }>,\n): ReactElement => {\n return props.loading ? (\n <LuiMiniSpinner size={22} divProps={{ role: 'status', ['aria-label']: 'Loading', style: { padding: 16 } }} />\n ) : (\n <div style={{ pointerEvents: props.saving ? 'none' : 'inherit' }} className={props.className}>\n {props.saving && <div className={'ComponentLoadingWrapper-saveOverlay'} />}\n {props.children}\n </div>\n );\n};\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n// src/useBoolean/useBoolean.ts\nfunction useBoolean(defaultValue = false) {\n if (typeof defaultValue !== \"boolean\") {\n throw new Error(\"defaultValue must be `true` or `false`\");\n }\n const [value, setValue] = useState(defaultValue);\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return { value, setValue, setTrue, setFalse, toggle };\n}\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// src/useEventListener/useEventListener.ts\nfunction useEventListener(eventName, handler, element, options) {\n const savedHandler = useRef(handler);\n useIsomorphicLayoutEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n useEffect(() => {\n const targetElement = (element == null ? void 0 : element.current) ?? window;\n if (!(targetElement && targetElement.addEventListener))\n return;\n const listener = (event) => {\n savedHandler.current(event);\n };\n targetElement.addEventListener(eventName, listener, options);\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\n// src/useClickAnyWhere/useClickAnyWhere.ts\nfunction useClickAnyWhere(handler) {\n useEventListener(\"click\", (event) => {\n handler(event);\n });\n}\nfunction useCopyToClipboard() {\n const [copiedText, setCopiedText] = useState(null);\n const copy = useCallback(async (text) => {\n if (!(navigator == null ? void 0 : navigator.clipboard)) {\n console.warn(\"Clipboard not supported\");\n return false;\n }\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText(text);\n return true;\n } catch (error) {\n console.warn(\"Copy failed\", error);\n setCopiedText(null);\n return false;\n }\n }, []);\n return [copiedText, copy];\n}\nfunction useCounter(initialValue) {\n const [count, setCount] = useState(initialValue ?? 0);\n const increment = useCallback(() => {\n setCount((x) => x + 1);\n }, []);\n const decrement = useCallback(() => {\n setCount((x) => x - 1);\n }, []);\n const reset = useCallback(() => {\n setCount(initialValue ?? 0);\n }, [initialValue]);\n return {\n count,\n increment,\n decrement,\n reset,\n setCount\n };\n}\nfunction useInterval(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (delay === null) {\n return;\n }\n const id = setInterval(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearInterval(id);\n };\n }, [delay]);\n}\n\n// src/useCountdown/useCountdown.ts\nfunction useCountdown({\n countStart,\n countStop = 0,\n intervalMs = 1e3,\n isIncrement = false\n}) {\n const {\n count,\n increment,\n decrement,\n reset: resetCounter\n } = useCounter(countStart);\n const {\n value: isCountdownRunning,\n setTrue: startCountdown,\n setFalse: stopCountdown\n } = useBoolean(false);\n const resetCountdown = useCallback(() => {\n stopCountdown();\n resetCounter();\n }, [stopCountdown, resetCounter]);\n const countdownCallback = useCallback(() => {\n if (count === countStop) {\n stopCountdown();\n return;\n }\n if (isIncrement) {\n increment();\n } else {\n decrement();\n }\n }, [count, countStop, decrement, increment, isIncrement, stopCountdown]);\n useInterval(countdownCallback, isCountdownRunning ? intervalMs : null);\n return [count, { startCountdown, stopCountdown, resetCountdown }];\n}\nfunction useEventCallback(fn) {\n const ref = useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n return useCallback((...args) => {\n var _a;\n return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);\n }, [ref]);\n}\n\n// src/useLocalStorage/useLocalStorage.ts\nvar IS_SERVER = typeof window === \"undefined\";\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER) {\n return initialValueToUse;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER) {\n console.warn(\n `Tried setting localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.localStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting localStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER) {\n console.warn(\n `Tried removing localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.localStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nvar IS_SERVER2 = typeof window === \"undefined\";\nfunction useMediaQuery(query, {\n defaultValue = false,\n initializeWithValue = true\n} = {}) {\n const getMatches = (query2) => {\n if (IS_SERVER2) {\n return defaultValue;\n }\n return window.matchMedia(query2).matches;\n };\n const [matches, setMatches] = useState(() => {\n if (initializeWithValue) {\n return getMatches(query);\n }\n return defaultValue;\n });\n function handleChange() {\n setMatches(getMatches(query));\n }\n useIsomorphicLayoutEffect(() => {\n const matchMedia = window.matchMedia(query);\n handleChange();\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener(\"change\", handleChange);\n }\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener(\"change\", handleChange);\n }\n };\n }, [query]);\n return matches;\n}\n\n// src/useDarkMode/useDarkMode.ts\nvar COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY = \"usehooks-ts-dark-mode\";\nfunction useDarkMode(options = {}) {\n const {\n defaultValue,\n localStorageKey = LOCAL_STORAGE_KEY,\n initializeWithValue = true\n } = options;\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, {\n initializeWithValue,\n defaultValue\n });\n const [isDarkMode, setDarkMode] = useLocalStorage(\n localStorageKey,\n defaultValue ?? isDarkOS ?? false,\n { initializeWithValue }\n );\n useIsomorphicLayoutEffect(() => {\n if (isDarkOS !== isDarkMode) {\n setDarkMode(isDarkOS);\n }\n }, [isDarkOS]);\n return {\n isDarkMode,\n toggle: () => {\n setDarkMode((prev) => !prev);\n },\n enable: () => {\n setDarkMode(true);\n },\n disable: () => {\n setDarkMode(false);\n },\n set: (value) => {\n setDarkMode(value);\n }\n };\n}\nfunction useUnmount(func) {\n const funcRef = useRef(func);\n funcRef.current = func;\n useEffect(\n () => () => {\n funcRef.current();\n },\n []\n );\n}\n\n// src/useDebounceCallback/useDebounceCallback.ts\nfunction useDebounceCallback(func, delay = 500, options) {\n const debouncedFunc = useRef();\n useUnmount(() => {\n if (debouncedFunc.current) {\n debouncedFunc.current.cancel();\n }\n });\n const debounced = useMemo(() => {\n const debouncedFuncInstance = debounce(func, delay, options);\n const wrappedFunc = (...args) => {\n return debouncedFuncInstance(...args);\n };\n wrappedFunc.cancel = () => {\n debouncedFuncInstance.cancel();\n };\n wrappedFunc.isPending = () => {\n return !!debouncedFunc.current;\n };\n wrappedFunc.flush = () => {\n return debouncedFuncInstance.flush();\n };\n return wrappedFunc;\n }, [func, delay, options]);\n useEffect(() => {\n debouncedFunc.current = debounce(func, delay, options);\n }, [func, delay, options]);\n return debounced;\n}\nfunction useDebounceValue(initialValue, delay, options) {\n const eq = (options == null ? void 0 : options.equalityFn) ?? ((left, right) => left === right);\n const unwrappedInitialValue = initialValue instanceof Function ? initialValue() : initialValue;\n const [debouncedValue, setDebouncedValue] = useState(unwrappedInitialValue);\n const previousValueRef = useRef(unwrappedInitialValue);\n const updateDebouncedValue = useDebounceCallback(\n setDebouncedValue,\n delay,\n options\n );\n if (!eq(previousValueRef.current, unwrappedInitialValue)) {\n updateDebouncedValue(unwrappedInitialValue);\n previousValueRef.current = unwrappedInitialValue;\n }\n return [debouncedValue, updateDebouncedValue];\n}\nfunction useDocumentTitle(title, options = {}) {\n const { preserveTitleOnUnmount = true } = options;\n const defaultTitle = useRef(null);\n useIsomorphicLayoutEffect(() => {\n defaultTitle.current = window.document.title;\n }, []);\n useIsomorphicLayoutEffect(() => {\n window.document.title = title;\n }, [title]);\n useUnmount(() => {\n if (!preserveTitleOnUnmount && defaultTitle.current) {\n window.document.title = defaultTitle.current;\n }\n });\n}\nfunction useHover(elementRef) {\n const [value, setValue] = useState(false);\n const handleMouseEnter = () => {\n setValue(true);\n };\n const handleMouseLeave = () => {\n setValue(false);\n };\n useEventListener(\"mouseenter\", handleMouseEnter, elementRef);\n useEventListener(\"mouseleave\", handleMouseLeave, elementRef);\n return value;\n}\nfunction useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = useState(null);\n const [state, setState] = useState(() => ({\n isIntersecting: initialIsIntersecting,\n entry: void 0\n }));\n const callbackRef = useRef();\n callbackRef.current = onChange;\n const frozen = ((_a = state.entry) == null ? void 0 : _a.isIntersecting) && freezeOnceVisible;\n useEffect(() => {\n if (!ref)\n return;\n if (!(\"IntersectionObserver\" in window))\n return;\n if (frozen)\n return;\n let unobserve;\n const observer = new IntersectionObserver(\n (entries) => {\n const thresholds = Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n entries.forEach((entry) => {\n const isIntersecting = entry.isIntersecting && thresholds.some((threshold2) => entry.intersectionRatio >= threshold2);\n setState({ isIntersecting, entry });\n if (callbackRef.current) {\n callbackRef.current(isIntersecting, entry);\n }\n if (isIntersecting && freezeOnceVisible && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n });\n },\n { threshold, root, rootMargin }\n );\n observer.observe(ref);\n return () => {\n observer.disconnect();\n };\n }, [\n ref,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n root,\n rootMargin,\n frozen,\n freezeOnceVisible\n ]);\n const prevRef = useRef(null);\n useEffect(() => {\n var _a2;\n if (!ref && ((_a2 = state.entry) == null ? void 0 : _a2.target) && !freezeOnceVisible && !frozen && prevRef.current !== state.entry.target) {\n prevRef.current = state.entry.target;\n setState({ isIntersecting: initialIsIntersecting, entry: void 0 });\n }\n }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n const result = [\n setRef,\n !!state.isIntersecting,\n state.entry\n ];\n result.ref = result[0];\n result.isIntersecting = result[1];\n result.entry = result[2];\n return result;\n}\nfunction useIsClient() {\n const [isClient, setClient] = useState(false);\n useEffect(() => {\n setClient(true);\n }, []);\n return isClient;\n}\nfunction useIsMounted() {\n const isMounted = useRef(false);\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return useCallback(() => isMounted.current, []);\n}\nfunction useMap(initialState = /* @__PURE__ */ new Map()) {\n const [map, setMap] = useState(new Map(initialState));\n const actions = {\n set: useCallback((key, value) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.set(key, value);\n return copy;\n });\n }, []),\n setAll: useCallback((entries) => {\n setMap(() => new Map(entries));\n }, []),\n remove: useCallback((key) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.delete(key);\n return copy;\n });\n }, []),\n reset: useCallback(() => {\n setMap(() => /* @__PURE__ */ new Map());\n }, [])\n };\n return [map, actions];\n}\n\n// src/useOnClickOutside/useOnClickOutside.ts\nfunction useOnClickOutside(ref, handler, eventType = \"mousedown\", eventListenerOptions = {}) {\n useEventListener(\n eventType,\n (event) => {\n const target = event.target;\n if (!target || !target.isConnected) {\n return;\n }\n const isOutside = Array.isArray(ref) ? ref.filter((r) => Boolean(r.current)).every((r) => r.current && !r.current.contains(target)) : ref.current && !ref.current.contains(target);\n if (isOutside) {\n handler(event);\n }\n },\n void 0,\n eventListenerOptions\n );\n}\nvar IS_SERVER3 = typeof window === \"undefined\";\nfunction useReadLocalStorage(key, options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER3) {\n initializeWithValue = false;\n }\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return null;\n }\n return parsed;\n },\n [options]\n );\n const readValue = useCallback(() => {\n if (IS_SERVER3) {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : null;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return null;\n }\n }, [key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return void 0;\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return storedValue;\n}\nvar initialSize = {\n width: void 0,\n height: void 0\n};\nfunction useResizeObserver(options) {\n const { ref, box = \"content-box\" } = options;\n const [{ width, height }, setSize] = useState(initialSize);\n const isMounted = useIsMounted();\n const previousSize = useRef({ ...initialSize });\n const onResize = useRef(void 0);\n onResize.current = options.onResize;\n useEffect(() => {\n if (!ref.current)\n return;\n if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window))\n return;\n const observer = new ResizeObserver(([entry]) => {\n const boxProp = box === \"border-box\" ? \"borderBoxSize\" : box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n const newHeight = extractSize(entry, boxProp, \"blockSize\");\n const hasChanged = previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n if (hasChanged) {\n const newSize = { width: newWidth, height: newHeight };\n previousSize.current.width = newWidth;\n previousSize.current.height = newHeight;\n if (onResize.current) {\n onResize.current(newSize);\n } else {\n if (isMounted()) {\n setSize(newSize);\n }\n }\n }\n });\n observer.observe(ref.current, { box });\n return () => {\n observer.disconnect();\n };\n }, [box, ref, isMounted]);\n return { width, height };\n}\nfunction extractSize(entry, box, sizeType) {\n if (!entry[box]) {\n if (box === \"contentBoxSize\") {\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n return void 0;\n }\n return Array.isArray(entry[box]) ? entry[box][0][sizeType] : (\n // @ts-ignore Support Firefox's non-standard behavior\n entry[box][sizeType]\n );\n}\nvar IS_SERVER4 = typeof window === \"undefined\";\nfunction useScreen(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER4) {\n initializeWithValue = false;\n }\n const readScreen = () => {\n if (IS_SERVER4) {\n return void 0;\n }\n return window.screen;\n };\n const [screen, setScreen] = useState(() => {\n if (initializeWithValue) {\n return readScreen();\n }\n return void 0;\n });\n const debouncedSetScreen = useDebounceCallback(\n setScreen,\n options.debounceDelay\n );\n function handleSize() {\n const newScreen = readScreen();\n const setSize = options.debounceDelay ? debouncedSetScreen : setScreen;\n if (newScreen) {\n const {\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n } = newScreen;\n setSize({\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n });\n }\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return screen;\n}\nvar cachedScriptStatuses = /* @__PURE__ */ new Map();\nfunction getScriptNode(src) {\n const node = document.querySelector(\n `script[src=\"${src}\"]`\n );\n const status = node == null ? void 0 : node.getAttribute(\"data-status\");\n return {\n node,\n status\n };\n}\nfunction useScript(src, options) {\n const [status, setStatus] = useState(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return \"idle\";\n }\n if (typeof window === \"undefined\") {\n return \"loading\";\n }\n return cachedScriptStatuses.get(src) ?? \"loading\";\n });\n useEffect(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return;\n }\n const cachedScriptStatus = cachedScriptStatuses.get(src);\n if (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n setStatus(cachedScriptStatus);\n return;\n }\n const script = getScriptNode(src);\n let scriptNode = script.node;\n if (!scriptNode) {\n scriptNode = document.createElement(\"script\");\n scriptNode.src = src;\n scriptNode.async = true;\n if (options == null ? void 0 : options.id) {\n scriptNode.id = options.id;\n }\n scriptNode.setAttribute(\"data-status\", \"loading\");\n document.body.appendChild(scriptNode);\n const setAttributeFromEvent = (event) => {\n const scriptStatus = event.type === \"load\" ? \"ready\" : \"error\";\n scriptNode == null ? void 0 : scriptNode.setAttribute(\"data-status\", scriptStatus);\n };\n scriptNode.addEventListener(\"load\", setAttributeFromEvent);\n scriptNode.addEventListener(\"error\", setAttributeFromEvent);\n } else {\n setStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n }\n const setStateFromEvent = (event) => {\n const newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n setStatus(newStatus);\n cachedScriptStatuses.set(src, newStatus);\n };\n scriptNode.addEventListener(\"load\", setStateFromEvent);\n scriptNode.addEventListener(\"error\", setStateFromEvent);\n return () => {\n if (scriptNode) {\n scriptNode.removeEventListener(\"load\", setStateFromEvent);\n scriptNode.removeEventListener(\"error\", setStateFromEvent);\n }\n if (scriptNode && (options == null ? void 0 : options.removeOnUnmount)) {\n scriptNode.remove();\n cachedScriptStatuses.delete(src);\n }\n };\n }, [src, options == null ? void 0 : options.shouldPreventLoad, options == null ? void 0 : options.removeOnUnmount, options == null ? void 0 : options.id]);\n return status;\n}\nvar IS_SERVER5 = typeof window === \"undefined\";\nfunction useScrollLock(options = {}) {\n const { autoLock = true, lockTarget, widthReflow = true } = options;\n const [isLocked, setIsLocked] = useState(false);\n const target = useRef(null);\n const originalStyle = useRef(null);\n const lock = () => {\n if (target.current) {\n const { overflow, paddingRight } = target.current.style;\n originalStyle.current = { overflow, paddingRight };\n if (widthReflow) {\n const offsetWidth = target.current === document.body ? window.innerWidth : target.current.offsetWidth;\n const currentPaddingRight = parseInt(window.getComputedStyle(target.current).paddingRight, 10) || 0;\n const scrollbarWidth = offsetWidth - target.current.scrollWidth;\n target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`;\n }\n target.current.style.overflow = \"hidden\";\n setIsLocked(true);\n }\n };\n const unlock = () => {\n if (target.current && originalStyle.current) {\n target.current.style.overflow = originalStyle.current.overflow;\n if (widthReflow) {\n target.current.style.paddingRight = originalStyle.current.paddingRight;\n }\n }\n setIsLocked(false);\n };\n useIsomorphicLayoutEffect(() => {\n if (IS_SERVER5)\n return;\n if (lockTarget) {\n target.current = typeof lockTarget === \"string\" ? document.querySelector(lockTarget) : lockTarget;\n }\n if (!target.current) {\n target.current = document.body;\n }\n if (autoLock) {\n lock();\n }\n return () => {\n unlock();\n };\n }, [autoLock, lockTarget, widthReflow]);\n return { isLocked, lock, unlock };\n}\nvar IS_SERVER6 = typeof window === \"undefined\";\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER6) {\n return initialValueToUse;\n }\n try {\n const raw = window.sessionStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading sessionStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER6) {\n console.warn(\n `Tried setting sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.sessionStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting sessionStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER6) {\n console.warn(\n `Tried removing sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.sessionStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"session-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nfunction useStep(maxStep) {\n const [currentStep, setCurrentStep] = useState(1);\n const canGoToNextStep = currentStep + 1 <= maxStep;\n const canGoToPrevStep = currentStep - 1 > 0;\n const setStep = useCallback(\n (step) => {\n const newStep = step instanceof Function ? step(currentStep) : step;\n if (newStep >= 1 && newStep <= maxStep) {\n setCurrentStep(newStep);\n return;\n }\n throw new Error(\"Step not valid\");\n },\n [maxStep, currentStep]\n );\n const goToNextStep = useCallback(() => {\n if (canGoToNextStep) {\n setCurrentStep((step) => step + 1);\n }\n }, [canGoToNextStep]);\n const goToPrevStep = useCallback(() => {\n if (canGoToPrevStep) {\n setCurrentStep((step) => step - 1);\n }\n }, [canGoToPrevStep]);\n const reset = useCallback(() => {\n setCurrentStep(1);\n }, []);\n return [\n currentStep,\n {\n goToNextStep,\n goToPrevStep,\n canGoToNextStep,\n canGoToPrevStep,\n setStep,\n reset\n }\n ];\n}\n\n// src/useTernaryDarkMode/useTernaryDarkMode.ts\nvar COLOR_SCHEME_QUERY2 = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY2 = \"usehooks-ts-ternary-dark-mode\";\nfunction useTernaryDarkMode({\n defaultValue = \"system\",\n localStorageKey = LOCAL_STORAGE_KEY2,\n initializeWithValue = true\n} = {}) {\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY2, { initializeWithValue });\n const [mode, setMode] = useLocalStorage(localStorageKey, defaultValue, {\n initializeWithValue\n });\n const isDarkMode = mode === \"dark\" || mode === \"system\" && isDarkOS;\n const toggleTernaryDarkMode = () => {\n const modes = [\"light\", \"system\", \"dark\"];\n setMode((prevMode) => {\n const nextIndex = (modes.indexOf(prevMode) + 1) % modes.length;\n return modes[nextIndex];\n });\n };\n return {\n isDarkMode,\n ternaryDarkMode: mode,\n setTernaryDarkMode: setMode,\n toggleTernaryDarkMode\n };\n}\nfunction useTimeout(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (!delay && delay !== 0) {\n return;\n }\n const id = setTimeout(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n}\nfunction useToggle(defaultValue) {\n const [value, setValue] = useState(!!defaultValue);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return [value, toggle, setValue];\n}\nvar IS_SERVER7 = typeof window === \"undefined\";\nfunction useWindowSize(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER7) {\n initializeWithValue = false;\n }\n const [windowSize, setWindowSize] = useState(() => {\n if (initializeWithValue) {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n return {\n width: void 0,\n height: void 0\n };\n });\n const debouncedSetWindowSize = useDebounceCallback(\n setWindowSize,\n options.debounceDelay\n );\n function handleSize() {\n const setSize = options.debounceDelay ? debouncedSetWindowSize : setWindowSize;\n setSize({\n width: window.innerWidth,\n height: window.innerHeight\n });\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return windowSize;\n}\n\nexport { useBoolean, useClickAnyWhere, useCopyToClipboard, useCountdown, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDocumentTitle, useEventCallback, useEventListener, useHover, useIntersectionObserver, useInterval, useIsClient, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useOnClickOutside, useReadLocalStorage, useResizeObserver, useScreen, useScript, useScrollLock, useSessionStorage, useStep, useTernaryDarkMode, useTimeout, useToggle, useUnmount, useWindowSize };\n","import { ColDef, GridApi, IRowNode, ISizeColumnsToFitParams } from 'ag-grid-community';\nimport { CsvExportParams } from 'ag-grid-community';\nimport { createContext, useContext } from 'react';\n\nimport { ColDefT, GridBaseRow } from '../components';\n\nexport type GridFilterExternal<TData extends GridBaseRow> = (data: TData, rowNode: IRowNode) => boolean;\n\nexport interface AutoSizeColumnsProps {\n skipHeader?: boolean;\n colIds?: Set<string> | string[];\n userSizedColIds?: Set<string>;\n}\n\nexport type AutoSizeColumnsResult = { width: number } | null;\n\nexport interface StartCellEditingProps {\n rowId: number;\n colId: string;\n}\n\nexport interface GridContextType<TData extends GridBaseRow> {\n gridReady: boolean;\n gridRenderState: () => null | 'empty' | 'rows-visible';\n getColDef: (colId?: string) => ColDef | undefined;\n getColumns: (\n filter?: keyof ColDef | ((r: ColDef) => boolean | undefined | null | number | string),\n ) => ColDefT<TData, any>[];\n getColumnIds: (filter?: keyof ColDef | ((r: ColDef) => boolean | undefined | null | number | string)) => string[];\n setApis: (gridApi: GridApi | undefined, hasExternallySelectedItems: boolean, dataTestId?: string) => void;\n prePopupOps: () => void;\n setQuickFilter: (quickFilter: string) => void;\n editingCells: () => boolean;\n getSelectedRows: <T extends GridBaseRow>() => T[];\n getFilteredSelectedRows: <T extends GridBaseRow>() => T[];\n getSelectedRowIds: () => 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: (paramsOrGridWidth?: ISizeColumnsToFitParams) => void;\n startCellEditing: ({ rowId, colId }: StartCellEditingProps) => Promise<void>;\n // Restores the previous focus after cell editing\n resetFocusedCellAfterCellEditing: () => void;\n updatingCells: (\n props: { selectedRows: GridBaseRow[]; field?: string },\n fnUpdate: (selectedRows: any[]) => Promise<boolean>,\n setSaving?: (saving: boolean) => void,\n tabDirection?: 1 | 0 | -1,\n ) => Promise<boolean>;\n redrawRows: (rowNodes?: IRowNode[]) => void;\n externallySelectedItemsAreInSync: boolean;\n setExternallySelectedItemsAreInSync: (inSync: boolean) => void;\n waitForExternallySelectedItemsToBeInSync: () => Promise<void>;\n addExternalFilter: (filter: GridFilterExternal<TData>) => void;\n removeExternalFilter: (filter: GridFilterExternal<TData>) => void;\n isExternalFilterPresent: () => boolean;\n doesExternalFilterPass: (node: IRowNode) => boolean;\n invisibleColumnIds: string[] | undefined;\n setInvisibleColumnIds: (colIds: string[]) => void;\n downloadCsv: (csvExportParams?: CsvExportParams) => void;\n onBulkEditingComplete: () => Promise<void> | void;\n setOnBulkEditingComplete: (callback: (() => Promise<void> | void) | undefined) => void;\n showNoRowsOverlay: () => void;\n}\n\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 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 // eslint-disable-next-line @typescript-eslint/require-await\n startCellEditing: async () => {\n console.error('no context provider for startCellEditing');\n },\n resetFocusedCellAfterCellEditing: () => {\n console.error('no context provider for resetFocusedCellAfterCellEditing');\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 onBulkEditingComplete: () => {\n console.error('no context provider for onBulkEditingComplete');\n },\n setOnBulkEditingComplete: () => {\n console.error('no context provider for setOnBulkEditingComplete');\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 anyUpdating: () => boolean;\n checkUpdating: (fields: string | string[], id: number | string) => boolean;\n modifyUpdating: (\n fields: string | string[],\n ids: (number | string)[],\n fn: () => void | Promise<void>,\n ) => Promise<void>;\n updatedDep: number;\n updatingCols: () => string[];\n};\n\nexport const GridUpdatingContext = createContext<GridUpdatingContextType>({\n anyUpdating: () => {\n console.error('Missing GridUpdatingContext');\n return false;\n },\n checkUpdating: () => {\n console.error('Missing GridUpdatingContext');\n return false;\n },\n updatingCols: () => {\n console.error('Missing GridUpdatingContext');\n return [];\n },\n // eslint-disable-next-line @typescript-eslint/require-await\n modifyUpdating: async () => {\n console.error('Missing GridUpdatingContext');\n },\n updatedDep: 0,\n});\n","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 if (!menuRef.current) {\n return;\n }\n const { width, height } = menuRef.current.ownerDocument.body.getBoundingClientRect();\n if (width === 0 || height === 0) return;\n if (\n floatEqual(width, latestWindowSize.current.width, 1) &&\n floatEqual(height, latestWindowSize.current.height, 1)\n ) {\n return;\n }\n latestWindowSize.current = { width, height };\n flushSync(() => {\n latestHandlePosition.current();\n forceReposSubmenu();\n });\n }, 250);\n\n const resizeObserver = new ResizeObserver(callback);\n\n const observeTarget = menuRef.current.ownerDocument.body;\n resizeObserver.observe(observeTarget, { box: 'border-box' });\n return () => {\n callback.cancel();\n resizeObserver.unobserve(observeTarget);\n };\n }, [reposition]);\n\n useEffect(() => {\n if (!isOpen) {\n dispatch(HoverActionTypes.RESET, undefined, 0);\n if (!closeTransition) setOverflowData(undefined);\n return () => {};\n }\n\n const { position, alwaysUpdate } = menuItemFocus || {};\n const setItemFocus = () => {\n if (position === FocusPositions.FIRST) {\n dispatch(HoverActionTypes.FIRST, undefined, 0);\n } else if (position === FocusPositions.LAST) {\n dispatch(HoverActionTypes.LAST, undefined, 0);\n } else if (typeof position === 'number' && position >= -1) {\n dispatch(HoverActionTypes.SET_INDEX, undefined, position);\n }\n };\n\n if (alwaysUpdate) {\n setItemFocus();\n } else if (captureFocus) {\n // Use a timeout here because if set focus immediately, page might scroll unexpectedly.\n const id = setTimeout(\n () => {\n // If focus has already been set to a children element, don't set focus on menu or item\n if (menuRef.current && !menuRef.current.contains(document.activeElement)) {\n // Handle popover portal focus\n const popupElement = focusRef.current?.nextSibling;\n if (!focusFirstInput(popupElement)) {\n focusRef.current?.focus();\n }\n setItemFocus();\n }\n },\n openTransition ? 170 : 100,\n );\n\n return () => clearTimeout(id);\n }\n return () => {};\n }, [isOpen, openTransition, closeTransition, captureFocus, menuItemFocus, dispatch]);\n\n const isSubmenuOpen = openSubmenuCount > 0;\n const itemContext = useMemo(\n () => ({\n isParentOpen: isOpen,\n isSubmenuOpen,\n setOpenSubmenuCount,\n dispatch,\n updateItems,\n }),\n [isOpen, isSubmenuOpen, dispatch, updateItems],\n );\n\n let maxHeight: number | undefined;\n let overflowAmt: number | undefined;\n if (overflowData) {\n setDownOverflow ? (overflowAmt = overflowData.overflowAmt) : (maxHeight = overflowData.height);\n }\n\n const listContext = useMemo(\n () => ({\n reposSubmenu,\n overflow,\n overflowAmt,\n parentMenuRef: menuRef,\n parentDir: expandedDirection,\n }),\n [reposSubmenu, overflow, overflowAmt, expandedDirection],\n );\n const overflowStyle = maxHeight != null && maxHeight >= 0 ? { maxHeight, overflow } : undefined;\n\n const modifiers = useMemo(\n () => ({\n state,\n dir: expandedDirection,\n }),\n [state, expandedDirection],\n );\n const arrowModifiers = useMemo(() => ({ dir: expandedDirection }), [expandedDirection]);\n const _arrowClass = useBEM({\n block: menuClass,\n element: menuArrowClass,\n modifiers: arrowModifiers,\n className: arrowClassName,\n });\n\n const minHeight = useRef(0);\n if (dontShrinkIfDirectionIsTop && menuRef.current?.getBoundingClientRect) {\n const h = menuRef.current?.getBoundingClientRect().height;\n if (minHeight.current < h) minHeight.current = h;\n }\n\n const dontShrinkOps = useMemo(\n () =>\n expandedDirection === 'top' && dontShrinkIfDirectionIsTop\n ? {\n overflowY: isSubmenuOpen ? '' : 'auto',\n minHeight: (isSubmenuOpen ? 0 : minHeight.current) + 'px',\n }\n : undefined,\n [dontShrinkIfDirectionIsTop, expandedDirection, isSubmenuOpen],\n );\n\n return (\n <ul\n role=\"menu\"\n aria-label={ariaLabel}\n {...mergeProps({ onKeyDown, onAnimationEnd }, restProps)}\n {...commonProps(isDisabled)}\n ref={useCombinedRef(externalRef, menuRef)}\n className={useBEM({ block: menuClass, modifiers, className: menuClassName })}\n style={{\n ...menuStyle,\n ...overflowStyle,\n ...dontShrinkOps,\n margin: 0,\n display: state === 'closed' ? 'none' : undefined,\n position: 'absolute',\n left: menuPosition.x,\n top: menuPosition.y,\n }}\n >\n <div\n ref={focusRef}\n tabIndex={-1}\n style={{ position: 'absolute', left: 0, top: 0 }}\n onKeyDown={(event) => {\n if (event.key == 'Tab') {\n event.preventDefault();\n event.stopPropagation();\n safeCall(onClose, {\n key: event.key,\n shiftKey: event.shiftKey,\n reason:\n event.key === 'Tab'\n ? event.shiftKey\n ? CloseReason.TAB_BACKWARD\n : CloseReason.TAB_FORWARD\n : CloseReason.CLICK,\n });\n }\n }}\n />\n {arrow && (\n <div\n className={_arrowClass}\n style={{\n ...arrowStyle,\n position: 'absolute',\n left: arrowPosition.x,\n top: arrowPosition.y,\n }}\n ref={arrowRef}\n />\n )}\n\n <MenuListContext.Provider value={listContext}>\n <MenuListItemContext.Provider value={itemContext}>\n <HoverItemContext.Provider value={hoverItem}>{children}</HoverItemContext.Provider>\n </MenuListItemContext.Provider>\n </MenuListContext.Provider>\n </ul>\n );\n};\n","import { FocusEvent, ForwardedRef, forwardRef, MutableRefObject, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { hasParentClass } from '../../utils/util';\nimport { EventHandlersContext, EventHandlersContextType } from '../contexts/EventHandlersContext';\nimport { ItemSettingsContext } from '../contexts/ItemSettingsContext';\nimport { SettingsContext } from '../contexts/SettingsContext';\nimport { useBEM } from '../hooks';\nimport { ControlledMenuProps, PortalFieldType, RadioChangeEvent } from '../types';\nimport { CloseReason, getTransition, isMenuOpen, Keys, menuContainerClass, mergeProps, safeCall } from '../utils';\nimport { MenuList } from './MenuList';\n\nexport const ControlledMenuFr = (\n {\n 'aria-label': ariaLabel,\n className,\n containerProps,\n initialMounted,\n unmountOnClose,\n transition,\n transitionTimeout,\n boundingBoxRef,\n boundingBoxPadding,\n reposition = 'auto',\n submenuOpenDelay = 300,\n submenuCloseDelay = 150,\n skipOpen,\n viewScroll = 'initial',\n portal,\n theming,\n onItemClick,\n onClose,\n saveButtonRef,\n ...restProps\n }: ControlledMenuProps & { saveButtonRef?: MutableRefObject<HTMLButtonElement | null> },\n externalRef: ForwardedRef<HTMLUListElement>,\n) => {\n const containerRef = useRef<HTMLElement>();\n const scrollNodesRef = useRef<{ anchors?: HTMLDivElement[] }>({});\n const { anchorRef, state } = restProps;\n\n const settings = useMemo(\n () => ({\n initialMounted,\n unmountOnClose,\n transition,\n transitionTimeout,\n boundingBoxRef,\n boundingBoxPadding,\n rootMenuRef: containerRef,\n rootAnchorRef: anchorRef,\n scrollNodesRef,\n reposition,\n viewScroll,\n }),\n [\n initialMounted,\n unmountOnClose,\n transition,\n transitionTimeout,\n anchorRef,\n boundingBoxRef,\n boundingBoxPadding,\n reposition,\n viewScroll,\n ],\n );\n\n const isWithinMenu = useCallback(\n (target: EventTarget | null) =>\n hasParentClass('szh-menu--state-open', target as Node) ||\n // This is temporary, it will be removed when the overlay click is fixed\n hasParentClass('LuiModalPrefab', target as Node) ||\n hasParentClass('prefab-modal', target as Node),\n [],\n );\n\n const handleScreenEventForSave = useCallback(\n (ev: MouseEvent) => {\n if (!isWithinMenu(ev.target)) {\n ev.preventDefault();\n ev.stopPropagation();\n // Note: There's an issue in React17\n // the cell doesn't refresh during update if save is invoked from a native event\n // This doesn't happen in React18\n // To work around it, I invoke the save by clicking on a passed in invisible button ref\n if (saveButtonRef?.current) {\n saveButtonRef.current.setAttribute('data-reason', CloseReason.BLUR);\n saveButtonRef.current.click();\n } else safeCall(onClose, { reason: CloseReason.BLUR });\n\n // If a user clicks on the menu button when a menu is open, we need to close the menu.\n // However, a blur event will be fired prior to the click event on menu button,\n // which makes the menu first close and then open again.\n // If this happens, e.relatedTarget is incorrectly set to null instead of the button in Safari and Firefox,\n // and makes it difficult to determine whether onBlur is fired because of clicking on menu button.\n // This is a workaround approach which sets a flag to skip a following click event.\n if (skipOpen) {\n skipOpen.current = true;\n setTimeout(() => (skipOpen.current = false), 300);\n }\n }\n },\n [isWithinMenu, onClose, saveButtonRef, skipOpen],\n );\n\n const handleScreenEventForCancel = useCallback(\n (ev: MouseEvent) => {\n if (!isWithinMenu(ev.target)) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n },\n [isWithinMenu],\n );\n\n const lastTabDownEl = useRef<Element>();\n const lastEnterDownEl = useRef<Element>();\n const handleKeyboardTabAndEnter = useCallback(\n (isDown: boolean) => (ev: KeyboardEvent) => {\n const thisDocument = anchorRef?.current ? anchorRef?.current.ownerDocument : document;\n const activeElement = thisDocument.activeElement;\n if (!anchorRef?.current || !activeElement) {\n return;\n }\n if (ev.key !== 'Tab' && ev.key !== 'Enter' && ev.key !== 'Esc') {\n return;\n }\n\n if (ev.repeat) {\n ev.preventDefault();\n ev.stopPropagation();\n return;\n }\n\n if (ev.key === 'Esc') {\n ev.preventDefault();\n ev.stopPropagation();\n safeCall(onClose, { key: ev.key, reason: CloseReason.CANCEL });\n return;\n }\n\n const invokeSave = (reason: string) => {\n if (!saveButtonRef?.current) return;\n saveButtonRef.current?.setAttribute('data-reason', reason);\n saveButtonRef?.current?.click();\n };\n\n // data-allowtabtosave is used such that list filter inputs can use tab to save\n const allowTabToSave = activeElement.getAttribute('data-allowtabtosave') == 'true';\n\n const inputElsIterator = thisDocument.querySelectorAll<HTMLElement>('.szh-menu--state-open input,textarea');\n let inputEls: HTMLElement[] = [];\n inputElsIterator.forEach((el) => inputEls.push(el));\n inputEls = inputEls.filter((el) => !(el as any).disabled);\n if (inputEls.length === 0) return;\n const firstInputEl = inputEls[0];\n const lastInputEl = inputEls[inputEls.length - 1];\n\n const isTextArea = activeElement.nodeName === 'TEXTAREA';\n const suppressEnterAutoSave = activeElement.getAttribute('data-disableenterautosave') == 'true' || isTextArea;\n\n if (ev.key === 'Tab') {\n const tabDirection = ev.shiftKey ? CloseReason.TAB_BACKWARD : CloseReason.TAB_FORWARD;\n if (\n (activeElement === lastInputEl && !ev.shiftKey) ||\n (activeElement === firstInputEl && ev.shiftKey) ||\n allowTabToSave\n ) {\n ev.preventDefault();\n ev.stopPropagation();\n\n if (isDown) {\n lastTabDownEl.current = activeElement;\n } else {\n lastTabDownEl.current == activeElement && invokeSave(tabDirection);\n }\n }\n }\n\n const type = activeElement.getAttribute('type');\n const isTextInput = type === 'text' || type == null || type === 'textarea';\n\n switch (activeElement.nodeName) {\n case 'INPUT':\n {\n // If there's only one input element, we support tab and enter\n if (isTextInput && ev.key === 'Enter' && !suppressEnterAutoSave) {\n ev.preventDefault();\n ev.stopPropagation();\n if (isDown) {\n lastEnterDownEl.current = activeElement;\n } else {\n lastEnterDownEl.current == activeElement && invokeSave(CloseReason.CLICK);\n }\n }\n }\n break;\n }\n },\n [anchorRef, onClose, saveButtonRef],\n );\n\n const handleKeydownTabAndEnter = useMemo(() => handleKeyboardTabAndEnter(true), [handleKeyboardTabAndEnter]);\n const handleKeyupTabAndEnter = useMemo(() => handleKeyboardTabAndEnter(false), [handleKeyboardTabAndEnter]);\n\n useEffect(() => {\n if (isMenuOpen(state)) {\n const thisDocument = anchorRef?.current ? anchorRef?.current.ownerDocument : document;\n thisDocument.addEventListener('keydown', handleKeydownTabAndEnter, true);\n thisDocument.addEventListener('keyup', handleKeyupTabAndEnter, true);\n thisDocument.addEventListener('mousedown', handleScreenEventForSave, true);\n thisDocument.addEventListener('mouseup', handleScreenEventForCancel, true);\n thisDocument.addEventListener('click', handleScreenEventForCancel, true);\n thisDocument.addEventListener('dblclick', handleScreenEventForCancel, true);\n return () => {\n thisDocument.removeEventListener('keydown', handleKeydownTabAndEnter, true);\n thisDocument.removeEventListener('keyup', handleKeyupTabAndEnter, true);\n thisDocument.removeEventListener('mousedown', handleScreenEventForSave, true);\n thisDocument.removeEventListener('mouseup', handleScreenEventForCancel, true);\n thisDocument.removeEventListener('click', handleScreenEventForCancel, true);\n thisDocument.removeEventListener('dblclick', handleScreenEventForCancel, true);\n };\n }\n return () => {};\n }, [\n handleScreenEventForSave,\n handleScreenEventForCancel,\n state,\n anchorRef,\n handleKeydownTabAndEnter,\n handleKeyupTabAndEnter,\n ]);\n\n const itemSettings = useMemo(\n () => ({\n submenuOpenDelay,\n submenuCloseDelay,\n }),\n [submenuOpenDelay, submenuCloseDelay],\n );\n\n const eventHandlers = useMemo(\n (): EventHandlersContextType => ({\n handleClick(event: RadioChangeEvent, isCheckOrRadio: boolean) {\n if (!event.stopPropagation) safeCall(onItemClick, event);\n\n let keepOpen = event.keepOpen;\n if (keepOpen === undefined) {\n // if event.keepOpen is undefined, the following default behaviour is used\n // According to WAI-ARIA Authoring Practices 1.1\n // Keep menu open when check or radio is invoked by SPACE key\n keepOpen = isCheckOrRadio && event.key === Keys.SPACE;\n }\n\n if (!keepOpen) {\n safeCall(onClose, {\n value: event.value,\n key: event.key,\n shiftKey: event.shiftKey,\n reason:\n event.key === 'Tab'\n ? event.shiftKey\n ? CloseReason.TAB_BACKWARD\n : CloseReason.TAB_FORWARD\n : CloseReason.CLICK,\n });\n }\n },\n\n handleClose(key?: string) {\n safeCall(onClose, { key, reason: CloseReason.CLICK });\n },\n }),\n [onItemClick, onClose],\n );\n\n const onKeyUp = (e: KeyboardEvent) => {\n switch (e.key) {\n case Keys.ESC:\n e.preventDefault();\n e.stopPropagation();\n safeCall(onClose, { key: e.key, reason: CloseReason.CANCEL });\n break;\n }\n };\n\n const onBlur = (e: FocusEvent) => {\n if (\n isMenuOpen(state) &&\n !e.currentTarget.contains(e.relatedTarget || document.activeElement) &&\n !isWithinMenu(e.relatedTarget)\n ) {\n safeCall(onClose, { reason: CloseReason.BLUR });\n\n // If a user clicks on the menu button when a menu is open, we need to close the menu.\n // However, a blur event will be fired prior to the click event on menu button,\n // which makes the menu first close and then open again.\n // If this happens, e.relatedTarget is incorrectly set to null instead of the button in Safari and Firefox,\n // and makes it difficult to determine whether onBlur is fired because of clicking on menu button.\n // This is a workaround approach which sets a flag to skip a following click event.\n if (skipOpen) {\n skipOpen.current = true;\n setTimeout(() => (skipOpen.current = false), 300);\n }\n }\n };\n\n const itemTransition = getTransition(transition, 'item');\n const modifiers = useMemo(() => ({ theme: theming, itemTransition }), [theming, itemTransition]);\n\n const menuList = (\n <div\n {...mergeProps({ onKeyUp, onBlur }, containerProps)}\n className={useBEM({\n block: menuContainerClass,\n modifiers,\n className,\n })}\n style={{ ...containerProps?.style, position: 'relative' }}\n ref={containerRef}\n >\n {state && (\n <SettingsContext.Provider value={settings}>\n <ItemSettingsContext.Provider value={itemSettings}>\n <EventHandlersContext.Provider value={eventHandlers}>\n <MenuList\n {...restProps}\n ariaLabel={ariaLabel || 'Menu'}\n externalRef={externalRef}\n containerRef={containerRef}\n onClose={onClose}\n />\n </EventHandlersContext.Provider>\n </ItemSettingsContext.Provider>\n </SettingsContext.Provider>\n )}\n </div>\n );\n\n if (portal === true && anchorRef?.current != null) {\n if (hasParentClass('react-menu-inline-test', anchorRef.current)) {\n portal = false;\n } else {\n portal = { target: anchorRef.current.ownerDocument.body } as PortalFieldType;\n }\n }\n\n if (portal) {\n if (typeof portal === 'boolean') {\n if (portal && typeof document !== 'undefined') {\n return createPortal(menuList, document.body);\n }\n } else {\n return portal.target ? createPortal(menuList, portal.target) : portal.stablePosition ? null : menuList;\n }\n }\n return menuList;\n};\n\nexport const ControlledMenu = forwardRef(ControlledMenuFr);\n","import { LegacyRef, ReactElement, useContext, useMemo, useRef } from 'react';\n\nimport { EventHandlersContext } from '../contexts/EventHandlersContext';\nimport { useBEM, useCombinedRef, useItemState } from '../hooks';\nimport { BaseProps } from '../types';\nimport { commonProps, menuClass, menuItemClass, mergeProps, safeCall, withHovering } from '../utils';\nimport { withHoveringResultProps } from '../utils/withHovering';\n\nexport interface FocusableItemProps extends BaseProps, withHoveringResultProps {\n disabled?: boolean;\n children: (ref: LegacyRef<any>) => ReactElement;\n}\n\nexport const FocusableItemFr = ({\n className,\n disabled,\n children,\n isHovering,\n menuItemRef,\n externalRef,\n ...restProps\n}: FocusableItemProps) => {\n const isDisabled = !!disabled;\n const ref = useRef(null);\n const { setHover, onPointerLeave, ...restStateProps } = useItemState(menuItemRef, ref, isHovering, isDisabled);\n const { handleClose } = useContext(EventHandlersContext);\n\n const modifiers = useMemo(\n () => ({\n disabled: isDisabled,\n hover: isHovering,\n focusable: true,\n }),\n [isDisabled, isHovering],\n );\n\n const renderChildren = useMemo(\n () =>\n safeCall(children, {\n ...modifiers,\n ref,\n closeMenu: handleClose,\n }),\n [children, modifiers, handleClose],\n );\n\n const mergedProps = mergeProps(\n {\n ...restStateProps,\n onPointerLeave: (e: PointerEvent) => onPointerLeave(e, true),\n onFocus: setHover,\n },\n restProps,\n );\n\n return (\n <li\n role=\"menuitem\"\n {...mergedProps}\n {...commonProps(isDisabled)}\n ref={useCombinedRef(externalRef, menuItemRef)}\n className={useBEM({ block: menuClass, element: menuItemClass, modifiers, className })}\n >\n {renderChildren}\n </li>\n );\n};\n\nexport const FocusableItem = withHovering('FocusableItem', FocusableItemFr);\n","import {\n cloneElement,\n ForwardedRef,\n forwardRef,\n Fragment,\n ReactElement,\n useCallback,\n useImperativeHandle,\n useRef,\n} from 'react';\n\nimport { useCombinedRef, useMenuChange, useMenuStateAndFocus } from '../hooks';\nimport { MenuButtonModifiers, MenuCloseEvent, RenderProp, RootMenuProps, UncontrolledMenuProps } from '../types';\nimport { FocusPositions, getName, isMenuOpen, Keys, mergeProps, safeCall } from '../utils';\nimport { ControlledMenu } from './ControlledMenu';\n\n//\n// Menu\n// ----------------------------------------------------------------------\nexport interface MenuProps extends RootMenuProps, UncontrolledMenuProps {\n /**\n * Can be a `MenuButton`, a `button` element, or a React component.\n * It also can be a render function that returns one.\n *\n * If a React component is provided, it needs to implement the following contracts:\n * - Accepts a `ref` prop that is forwarded to an element to which menu will be positioned.\n * The element should be able to receive focus.\n * - Accepts `onClick` and `onKeyDown` event props.\n */\n menuButton: RenderProp<MenuButtonModifiers, ReactElement>;\n}\n\nexport function MenuFr(\n { 'aria-label': ariaLabel, menuButton, instanceRef, onMenuChange, ...restProps }: MenuProps,\n externalRef: ForwardedRef<ReactElement>,\n) {\n const [stateProps, toggleMenu, openMenu] = useMenuStateAndFocus(restProps);\n const isOpen = isMenuOpen(stateProps.state);\n const skipOpen = useRef(false);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleClose = useCallback(\n (e: MenuCloseEvent) => {\n toggleMenu(false);\n if (e.key) buttonRef.current && buttonRef.current.focus();\n },\n [toggleMenu],\n );\n\n const onClick = (e: MouseEvent) => {\n if (skipOpen.current) return;\n // Focus (hover) the first menu item when onClick event is trigger by keyboard\n openMenu(e.detail === 0 ? FocusPositions.FIRST : undefined);\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case Keys.UP:\n openMenu(FocusPositions.LAST);\n break;\n\n case Keys.DOWN:\n openMenu(FocusPositions.FIRST);\n break;\n\n default:\n return;\n }\n\n e.preventDefault();\n };\n\n // Too many mixed types here to figure out what to pick for button. Bad code.\n const button: any = safeCall(menuButton, { open: isOpen });\n if (!button || !button.type) throw new Error('Menu requires a menuButton prop.');\n\n const buttonProps = {\n ref: useCombinedRef(button.ref, buttonRef),\n ...mergeProps({ onClick, onKeyDown }, button.props),\n isOpen: false,\n };\n if (getName(button.type) === 'MenuButton') {\n buttonProps.isOpen = isOpen;\n }\n const renderButton = cloneElement(button, buttonProps);\n\n useMenuChange(onMenuChange, isOpen);\n\n useImperativeHandle(instanceRef, () => ({\n openMenu,\n closeMenu: () => toggleMenu(false),\n }));\n\n return (\n <Fragment>\n {renderButton}\n <ControlledMenu\n {...restProps}\n {...stateProps}\n aria-label={ariaLabel || (typeof button.props.children === 'string' ? button.props.children : 'Menu')}\n anchorRef={buttonRef}\n ref={externalRef}\n onClose={handleClose}\n skipOpen={skipOpen}\n />\n </Fragment>\n );\n}\nexport const Menu = forwardRef(MenuFr);\n","import { forwardRef, LegacyRef, ReactNode, useMemo } from 'react';\n\nimport { useBEM } from '../hooks';\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, resetFocusedCellAfterCellEditing, getSelectedRows } = useContext(GridContext);\n\n const [isOpen, setOpen] = useState(false);\n const [anchorPoint, setAnchorPoint] = useState({ x: 0, y: 0 });\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const clickedColDefRef = useRef<ColDef>(null!);\n const selectedRowsRef = useRef<any[]>([]);\n const clickedRowRef = useRef<any>(null);\n\n const openMenu = useCallback(\n (e: PointerEvent | null | undefined) => {\n if (!e) return;\n prePopupOps();\n setAnchorPoint({ x: e.clientX, y: e.clientY });\n setOpen(true);\n },\n [prePopupOps],\n );\n\n const closeMenu = useCallback(() => {\n setOpen(false);\n redrawRows();\n resetFocusedCellAfterCellEditing();\n }, [resetFocusedCellAfterCellEditing, redrawRows]);\n\n const cellContextMenu = useCallback(\n (event: CellContextMenuEvent) => {\n if (contextMenuSelectRow && !event.node.isSelected()) {\n event.node.setSelected(true, true);\n }\n\n clickedColDefRef.current = event.colDef;\n selectedRowsRef.current = getSelectedRows();\n clickedRowRef.current = event.data;\n\n // This is actually a pointer event\n openMenu(event.event as PointerEvent);\n },\n [contextMenuSelectRow, getSelectedRows, openMenu],\n );\n\n return {\n openMenu,\n cellContextMenu,\n component: ContextMenu ? (\n <>\n <ControlledMenu\n anchorPoint={anchorPoint}\n state={isOpen ? 'open' : 'closed'}\n direction=\"right\"\n onClose={closeMenu}\n >\n {isOpen && (\n <ContextMenu\n selectedRows={selectedRowsRef.current}\n clickedRow={clickedRowRef.current}\n colDef={clickedColDefRef.current}\n close={closeMenu}\n />\n )}\n </ControlledMenu>\n </>\n ) : null,\n };\n};\n","import { LuiIcon, LuiStatusSpinner } from '@linzjs/lui';\nimport { ForwardedRef, forwardRef } from 'react';\n\nconst GridLoadingOverlayComponentFr = (\n props: { headerRowHeight: number },\n externalRef: ForwardedRef<HTMLDivElement>,\n) => (\n <div\n ref={externalRef}\n style={{\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n position: 'absolute',\n backgroundColor: 'rgba(255,255,255,0.5)',\n }}\n >\n <div style={{ height: '100%', position: 'relative' }}>\n <div style={{ position: 'absolute', left: 0, top: props.headerRowHeight, right: 0, bottom: 0 }}>\n <LuiStatusSpinner />\n </div>\n </div>\n </div>\n);\n\nconst GridLoadingOverlayComponent = forwardRef(GridLoadingOverlayComponentFr);\n\nexport interface GridNoRowsOverlayProps {\n loading: boolean;\n rowCount: number | undefined | null;\n filteredRowCount: number;\n noRowsOverlayText: string | undefined;\n noRowsMatchingOverlayText: string | undefined;\n headerRowHeight: number;\n}\n\nexport const GridNoRowsOverlayFr = (props: GridNoRowsOverlayProps, externalRef: ForwardedRef<HTMLDivElement>) => {\n if (props.loading) {\n return <GridLoadingOverlayComponent ref={externalRef} headerRowHeight={props.headerRowHeight} />;\n }\n if (props.rowCount === 0) {\n return (\n <div ref={externalRef} className={'GridNoRowsOverlay'}>\n <LuiIcon name=\"ic_info_outline\" alt=\"\" size=\"md\" />\n {props.noRowsOverlayText ?? 'There are currently no rows'}\n </div>\n );\n }\n if (props.filteredRowCount === 0) {\n return (\n <div ref={externalRef} className={'GridNoRowsOverlay'}>\n <LuiIcon name=\"ic_info_outline\" alt=\"\" size=\"md\" />\n {props.noRowsMatchingOverlayText ?? 'All rows have been filtered'}\n </div>\n );\n }\n return <div ref={externalRef} />;\n};\n\nexport const GridNoRowsOverlay = forwardRef(GridNoRowsOverlayFr);\n","import { IRowNode } from 'ag-grid-community';\nimport { ColumnState } from 'ag-grid-community';\nimport { PostSortRowsParams } from 'ag-grid-community';\nimport { isEmpty } from 'lodash-es';\nimport { useCallback, useContext, useRef } from 'react';\n\nimport { GridContext } from '../contexts/GridContext';\n\ninterface PostSortRowsHookProps {\n setStaleGrid: (stale: boolean) => void;\n}\n\n/**\n * Retains last sort order from via <AgGrid postRowSort>.\n * Then applies this sort until next sort column change.\n * Handles stale sort, when you edit a row but don't want to re-sort.\n */\nexport const usePostSortRowsHook = ({ setStaleGrid }: PostSortRowsHookProps) => {\n const { redrawRows } = useContext(GridContext);\n\n // On first run we need to init the first backed up sort order\n const initialised = useRef(false);\n\n // Used to detect sort order has changed since last run\n const lastSortOrderHash = useRef<string>('');\n\n // Used to detect if sort order was the same, has the direction changed\n const previousRowSortIndexRef = useRef<Record<string, { index: number; hash: string } | undefined>>({});\n\n // stale sort is when there's a sort and user edits a row\n // this applies a class to the div wrapping the grid which in turn adds a * beside the sort arrow\n const sortWasStale = useRef(false);\n\n // Previous col sort is stored and reapplied if the sort direction changes on the same column and the sort was stale\n // As a sort on a stale row should just resort, not change sort direction\n const previousColSort = useRef<ColumnState[]>([]);\n\n const previousQuickFilter = useRef('');\n\n return useCallback(\n ({ api, nodes }: PostSortRowsParams) => {\n // Grid is destroyed\n if (!api) return;\n\n const previousRowSortIndex = previousRowSortIndexRef.current;\n\n const hashNode = (node: IRowNode | undefined) => {\n return node ? JSON.stringify(node.data) : '';\n };\n\n const copyCurrentSortSettings = (): ColumnState[] =>\n api.getColumnState().map((row) => ({ colId: row.colId, sort: row.sort, sortIndex: row.sortIndex }));\n\n const backupSortOrder = () => {\n for (const x in previousRowSortIndex) delete previousRowSortIndex[x];\n nodes.forEach((node, index) => (previousRowSortIndex[`${node.data.id}`] = { index, hash: hashNode(node) }));\n };\n\n // Check if column is the first sorted column. Note: column is preconfigured to sort its sortIndex is null not 1\n const isFirstSortColumn = (row: ColumnState) => row.sort && [0, null].includes(row.sortIndex ?? null);\n\n const isSameColumnAndDifferentSort = (col1: ColumnState | undefined, col2: ColumnState | undefined) =>\n col1 && col2 && col1.colId === col2.colId && col1.sort != col2.sort;\n\n const restorePreviousSortColumnState = () => api.applyColumnState({ state: previousColSort.current });\n\n const sortNodesByPreviousSort = () => {\n nodes.sort(\n (a, b) =>\n (previousRowSortIndex[`${a.data.id}`]?.index ?? Number.MAX_SAFE_INTEGER) -\n (previousRowSortIndex[`${b.data.id}`]?.index ?? Number.MAX_SAFE_INTEGER),\n );\n };\n\n // On first load copy the current sort\n if (!initialised.current) {\n initialised.current = true;\n previousColSort.current = copyCurrentSortSettings();\n }\n\n const newSortOrder = JSON.stringify(copyCurrentSortSettings());\n let sortOrderChanged = newSortOrder != lastSortOrderHash.current;\n\n const quickFilter = api.getQuickFilter();\n if (previousQuickFilter.current != quickFilter) {\n previousQuickFilter.current = quickFilter ?? '';\n sortOrderChanged = true;\n }\n\n if (isEmpty(previousRowSortIndex)) {\n backupSortOrder();\n }\n\n if (sortOrderChanged) {\n const thisFirstCol = copyCurrentSortSettings().find(isFirstSortColumn);\n const previousFirstCol = previousColSort.current.find(isFirstSortColumn);\n\n // Change to sort can be: (in the context of stale sort do...)\n // - no sort to sorted (do nothing)\n // - asc to desc (resort as asc, and remove stale sort)\n // - desc to no sort (resort as desc, and remove stale sort)\n const wasSortChangedOnSameColumn =\n previousFirstCol && (!thisFirstCol || isSameColumnAndDifferentSort(previousFirstCol, thisFirstCol));\n\n // if sort was stale, and we're here, someone has clicked a stale sort order (^*) in the column header\n if (sortWasStale.current && wasSortChangedOnSameColumn) {\n // Sort was an existing priority 1 column\n // We want to re-sort with the old sort direction and clear stale sort\n sortWasStale.current = false;\n setStaleGrid(false);\n\n // trigger a recapture of sort order\n lastSortOrderHash.current = '';\n restorePreviousSortColumnState();\n } else {\n // Sort was on a different column so clear sort and sort like normal\n if (sortWasStale.current) {\n sortWasStale.current = false;\n setStaleGrid(false);\n }\n // Columns were sorted so retain the sort\n backupSortOrder();\n lastSortOrderHash.current = newSortOrder;\n }\n } else {\n let firstChangedNodeIndex = -1;\n let lastNewNode: IRowNode | undefined = undefined;\n let changedRowCount = 0;\n let newRowCount = 0;\n let index = 0;\n for (const node of nodes) {\n const psr = previousRowSortIndex[`${node.data.id}`];\n if (psr) {\n if (psr.hash != hashNode(node)) {\n if (firstChangedNodeIndex === -1) firstChangedNodeIndex = index;\n changedRowCount++;\n }\n } else {\n lastNewNode = node;\n newRowCount++;\n }\n index++;\n }\n\n let wasStale = false;\n if (changedRowCount === 0 && newRowCount === 1) {\n // insert new row at end\n const newIndex = index - 1;\n previousRowSortIndex[`${lastNewNode?.data.id}`] = { index: newIndex, hash: hashNode(lastNewNode) };\n wasStale = true;\n } else if (changedRowCount === 2 && newRowCount === 0) {\n // This must be a swap rows (sometimes it's not, needs further attention)\n backupSortOrder();\n wasStale = false;\n } else if (changedRowCount > 1 && newRowCount === 1) {\n // This must be a insert so, insert new row near the row that changed\n previousRowSortIndex[`${lastNewNode?.data.id}`] = {\n index: firstChangedNodeIndex + 0.5,\n hash: hashNode(lastNewNode),\n };\n wasStale = true;\n // For some reason AgGrid mis-positions the inserted row.\n lastNewNode && redrawRows();\n } else if (changedRowCount == 1 && newRowCount === 0) {\n // User edited one row so, do nothing, retain sort\n wasStale = true;\n } else if (changedRowCount !== 0 || newRowCount != 0) {\n // too many rows changed, resort\n backupSortOrder();\n }\n\n if (wasStale) {\n // Check if the sort order the aggrid passed matches our stale sort order\n const stillStale =\n Object.keys(previousRowSortIndex).length != nodes.length ||\n nodes.some((node, index) => previousRowSortIndex[`${node.data.id}`]?.index !== index);\n\n // If we haven't already processed a stale sort then...\n if (stillStale && !sortWasStale.current) {\n // backup sort state, so we can restore it when sort is clicked on a stale column\n previousColSort.current = copyCurrentSortSettings();\n sortWasStale.current = true;\n setStaleGrid(true);\n }\n }\n sortNodesByPreviousSort();\n }\n },\n [redrawRows, setStaleGrid],\n );\n};\n","import {\n AgGridEvent,\n AllCommunityModule,\n CellClassParams,\n CellClickedEvent,\n CellDoubleClickedEvent,\n CellFocusedEvent,\n CellKeyDownEvent,\n ColDef,\n ColGroupDef,\n ColumnResizedEvent,\n EditableCallback,\n EditableCallbackParams,\n GetRowIdParams,\n GridOptions,\n GridReadyEvent,\n GridSizeChangedEvent,\n ModelUpdatedEvent,\n ModuleRegistry,\n RowClickedEvent,\n RowDoubleClickedEvent,\n RowDragEndEvent,\n RowDragMoveEvent,\n SelectionChangedEvent,\n SelectionColumnDef,\n} from 'ag-grid-community';\nimport { AgGridReact } from 'ag-grid-react';\nimport clsx from 'clsx';\nimport { defer, delay, difference, isEmpty, last, omit, xorBy } from 'lodash-es';\nimport { ReactElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useInterval } from 'usehooks-ts';\n\nimport { AutoSizeColumnsResult, StartCellEditingProps, useGridContext } from '../contexts/GridContext';\nimport { GridUpdatingContext } from '../contexts/GridUpdatingContext';\nimport { 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>[] | ColGroupDef<TData>[];\n rowData: GridOptions['rowData'];\n selectColumnPinned?: ColDef['pinned'];\n noRowsOverlayText?: string;\n noRowsMatchingOverlayText?: string;\n animateRows?: boolean;\n rowHeight?: number;\n rowClassRules?: GridOptions['rowClassRules'];\n rowSelection?: 'single' | 'multiple';\n autoSelectFirstRow?: boolean;\n onCellFocused?: (props: { colDef: ColDef<TData>; data: TData }) => void;\n onColumnMoved?: GridOptions['onColumnMoved'];\n rowDragText?: GridOptions['rowDragText'];\n onRowDragEnd?: (props: GridOnRowDragEndProps<TData>) => Promise<void> | void;\n alwaysShowVerticalScroll?: boolean;\n suppressColumnVirtualization?: GridOptions['suppressColumnVirtualisation'];\n suppressReadOnlyStyle?: boolean;\n /**\n * When the grid is rendered using sizeColumns==\"auto\" this is called initially with the required container size to fit all content.\n * This allows you set the size of the panel to fit perfectly.\n */\n onContentSize?: (props: { width: number }) => void;\n /**\n * <ul>\n * <li>\"none\" to use aggrid defaults.</li>\n * <li>\"fit\" will adjust columns to fit within panel via min/max/initial sizing.\n * <b>Note:</b> This is only really needed if you have auto-height columns which prevents \"auto\" from working.\n * </li>\n * <li>\"auto\" will size columns based on their content but still obeying min/max sizing.</li>\n * <li>\"auto-skip-headers\" (default) same as auto but does not take headers into account.</li>\n * </ul>\n *\n * If you want to stretch to container width if width is greater than the container add a flex column.\n */\n sizeColumns?: 'fit' | 'auto' | 'auto-skip-headers' | 'none';\n /**\n * On first don't return a content size larger than this.\n */\n maxInitialWidth?: number;\n /**\n * When pressing tab whilst editing the grid will select and edit the next cell if available.\n * Once the last cell to edit closes this callback is called.\n */\n onBulkEditingComplete?: () => Promise<void> | void;\n\n /**\n * Context menu definition if required.\n */\n contextMenu?: GridContextMenuComponent<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 onRowClicked?: (event: RowClickedEvent) => void;\n onRowDoubleClicked?: (event: RowDoubleClickedEvent) => void;\n}\n\n/**\n * Wrapper for AgGrid to add commonly used functionality.\n */\nexport const Grid = <TData extends GridBaseRow = GridBaseRow>({\n 'data-testid': dataTestId,\n defaultPostSort = true,\n rowSelection = 'multiple',\n suppressColumnVirtualization = true,\n theme = 'ag-theme-step-default',\n sizeColumns = 'auto',\n selectColumnPinned = 'left',\n contextMenuSelectRow = false,\n singleClickEdit = false,\n rowData,\n rowHeight = theme === 'ag-theme-step-default' ? 40 : theme === 'ag-theme-step-compact' ? 36 : 40,\n selectable,\n onCellFocused: paramsOnCellFocused,\n maxInitialWidth,\n suppressReadOnlyStyle = false,\n ...params\n}: GridProps<TData>): ReactElement => {\n const {\n gridReady,\n gridRenderState,\n setApis,\n ensureRowVisible,\n getFirstRowId,\n selectRowsById,\n focusByRowById,\n ensureSelectedRowIsVisible,\n autoSizeColumns,\n sizeColumnsToFit,\n externallySelectedItemsAreInSync,\n setExternallySelectedItemsAreInSync,\n isExternalFilterPresent,\n doesExternalFilterPass,\n setOnBulkEditingComplete,\n getColDef,\n showNoRowsOverlay,\n prePopupOps,\n startCellEditing: propStartCellEditing,\n } = useGridContext<TData>();\n // CellEditingStop event happens too much for one edit\n const startedEditRef = useRef(false);\n const startCellEditing = useCallback(\n (props: StartCellEditingProps) => {\n startedEditRef.current = true;\n return propStartCellEditing(props);\n },\n [propStartCellEditing],\n );\n\n const { updatedDep, anyUpdating, updatingCols } = useContext(GridUpdatingContext);\n\n const gridDivRef = useRef<HTMLDivElement>(null);\n const lastSelectedIds = useRef<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 autoSizeResultRef = useRef<AutoSizeColumnsResult | null>(null);\n const prevRowsVisibleRef = useRef(false);\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 // 1. First we autosize to get the size of the columns on an infinite grid.\n if (sizeColumns === 'auto' || sizeColumns === 'auto-skip-headers') {\n // You can't skip headers until the grid has content\n const rowsVisible = gridRendered === 'rows-visible';\n const skipHeader = sizeColumns === 'auto-skip-headers' && rowsVisible;\n // If grid was empty and now has content we need to autosize\n if (rowsVisible !== prevRowsVisibleRef.current && rowsVisible) {\n prevRowsVisibleRef.current = rowsVisible;\n autoSizeResultRef.current = null;\n }\n const autoSizeResult =\n autoSizeResultRef.current ??\n autoSizeColumns({\n skipHeader,\n userSizedColIds: new Set(userSizedColIds.current.keys()),\n });\n // Auto-size failed retry later\n if (!autoSizeResult) {\n needsAutoSize.current = true;\n return;\n }\n\n autoSizeResultRef.current = autoSizeResult;\n // Calculate the auto-sized width, limit it to maxInitialWidth\n autoSizeResult.width = maxInitialWidth ? Math.min(autoSizeResult.width, maxInitialWidth) : autoSizeResult.width;\n if (gridRendered === 'empty') {\n // If the grid is empty we still do an onContentSize callback, we will do another callback when grid has data\n // We don't do this callback if we have previously had row data, or have already called back for empty\n if (!hasSetContentSizeEmpty.current && !hasSetContentSize.current) {\n hasSetContentSizeEmpty.current = true;\n params.onContentSize?.(autoSizeResult);\n }\n } else if (gridRendered === 'rows-visible') {\n // we have rows now so callback grid size\n if (!hasSetContentSize.current) {\n hasSetContentSize.current = true;\n params.onContentSize?.(autoSizeResult);\n }\n } else {\n // It should be impossible to get here\n console.error('Unknown value returned from hasGridRendered');\n }\n } else {\n sizeColumnsToFit();\n }\n\n setAutoSized(true);\n needsAutoSize.current = false;\n }, [autoSizeColumns, gridRenderState, maxInitialWidth, params, rowData, sizeColumns, sizeColumnsToFit]);\n\n const lastOwnerDocumentRef = useRef<Document>();\n const wasVisibleRef = useRef(false);\n\n /**\n * Auto-size windows that had deferred auto-size\n * Reset focus if panel went from invisible to visible.\n */\n useInterval(() => {\n // If grid has become visible after previously being hidden, then refocus the last focused cell.\n const visible = !!gridDivRef.current?.checkVisibility?.();\n if (visible && !wasVisibleRef.current) {\n wasVisibleRef.current = true;\n const el = (window as any).__stepaggrid_lastfocuseventtarget;\n if (el) {\n // Setting this to null will cause a new refocus event\n (window as any).__stepaggrid_lastfocuseventtarget = null;\n // Check element is still part of document\n if (el.checkVisibility()) {\n el.focus();\n }\n }\n }\n wasVisibleRef.current = visible;\n\n // Check if window has been popped out and needs resize\n const currentDocument = gridDivRef.current?.ownerDocument;\n if (currentDocument !== lastOwnerDocumentRef.current) {\n lastOwnerDocumentRef.current = currentDocument;\n if (currentDocument) {\n needsAutoSize.current = true;\n }\n }\n if (\n needsAutoSize.current ||\n (!hasSetContentSize.current && (sizeColumns === 'auto' || sizeColumns === 'auto-skip-headers'))\n ) {\n 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 const mapColDef = useCallback(\n (colDef: ColDef | ColGroupDef): ColDef | ColGroupDef => {\n if ('children' in colDef) {\n return {\n ...colDef,\n children: colDef.children.map(mapColDef),\n };\n } else {\n const colDefEditable = colDef.editable;\n const editable = combineEditables(\n params.loading !== true && params.readOnly !== true,\n params.defaultColDef?.editable,\n colDefEditable,\n );\n return {\n ...colDef,\n editable,\n cellClassRules: {\n ...colDef.cellClassRules,\n 'GridCell-readonly': (ccp: CellClassParams<TData>) =>\n !suppressReadOnlyStyle && !editable(ccp as any as EditableCallbackParams<TData>),\n },\n };\n }\n },\n [params.defaultColDef?.editable, params.loading, params.readOnly, suppressReadOnlyStyle],\n );\n\n /**\n * Add selectable column to colDefs. Adjust column defs to block fit for auto sized columns.\n */\n const columnDefs = useMemo((): (ColDef | ColGroupDef)[] => {\n return params.columnDefs.map(mapColDef);\n }, [params.columnDefs, mapColDef]);\n\n const hasExternallySelectedItems = !!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 onRowDataUpdated = useCallback(() => {\n const length = rowData?.length ?? 0;\n if (previousRowDataLength.current !== length) {\n // We need to autosize all cells again\n autoSizeResultRef.current = null;\n 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 (anyUpdating()) {\n return;\n }\n\n const skipHeader = sizeColumns === 'auto-skip-headers';\n if ((sizeColumns === 'auto' || sizeColumns === 'auto-skip-headers') && hasSetContentSize.current) {\n autoSizeColumns({\n skipHeader,\n userSizedColIds: new Set(userSizedColIds.current.keys()),\n colIds: colIdsEdited.current,\n });\n }\n colIdsEdited.current.clear();\n }, [autoSizeColumns, rowData?.length, setInitialContentSize, sizeColumns, updatedDep, anyUpdating]);\n\n /**\n * Show/hide no rows overlay when model changes.\n */\n const onModelUpdated = useCallback((event: ModelUpdatedEvent) => {\n event.api.showNoRowsOverlay();\n }, []);\n\n /**\n * Handle double click edit\n */\n const onCellDoubleClick = useCallback(\n (event: CellDoubleClickedEvent) => {\n const editable = fnOrVar(event.colDef?.editable, event);\n if (editable && !invokeEditAction(event)) {\n void startCellEditing({ rowId: event.data.id, colId: event.column.getColId() });\n }\n },\n [startCellEditing],\n );\n\n /**\n * Handle single click edits\n */\n const onCellClicked = useCallback(\n (event: CellClickedEvent) => {\n const editable = fnOrVar(event.colDef?.editable, event);\n if ((editable && event.colDef.singleClickEdit) ?? singleClickEdit) {\n void startCellEditing({ rowId: event.data.id, colId: event.column.getColId() });\n }\n },\n [singleClickEdit, startCellEditing],\n );\n\n const onCellEditingStopped = useCallback(\n (event: AgGridEvent<TData>) => {\n if (!startedEditRef.current) {\n return;\n }\n startedEditRef.current = false;\n const api = event.api;\n // We need to redraw on fit as the updated row heights aren't visible\n if (sizeColumns === 'fit') {\n delay(() => {\n // Don't update if currently editing, that will stop the edit\n if (!anyUpdating() && document.querySelectorAll('.szh-menu--state-open').length === 0) {\n if (!api.isDestroyed()) {\n api.redrawRows();\n }\n }\n }, 500);\n }\n },\n [anyUpdating, sizeColumns],\n );\n\n /**\n * If cell has an edit action invoke it (if editable)\n */\n const invokeEditAction = (e: CellDoubleClickedEvent | CellKeyDownEvent): boolean => {\n const editAction = e.colDef?.cellRendererParams?.editAction;\n if (!editAction) return false;\n const editable = fnOrVar(e.colDef?.editable, e);\n if (editable) {\n if (!e.node.isSelected()) {\n e.node.setSelected(true, true);\n }\n editAction([e.data, ...e.api.getSelectedRows().filter((row) => row.id !== e.data.id)]);\n }\n return true;\n };\n\n /**\n * Start editing on pressing Enter\n */\n const onCellKeyPress = useCallback(\n (e: CellKeyDownEvent) => {\n const kbe = e.event as KeyboardEvent;\n if (kbe.key === 'Enter') {\n if (!invokeEditAction(e)) {\n void startCellEditing({ rowId: e.data.id, colId: e.column.getColId() });\n }\n }\n if (kbe.key === 'Tab') {\n prePopupOps();\n }\n },\n [prePopupOps, startCellEditing],\n );\n\n /**\n * Once the grid has auto-sized we want to run fit to fit the grid in its container,\n * but we don't want the non-flex auto-sized columns to \"fit\" size, so suppressSizeToFit is set to true.\n */\n const columnDefsAdjusted = useMemo(() => {\n const adjustColDefOrGroup = (colDef: ColDef<TData> | ColGroupDef<TData>) =>\n 'children' in colDef ? adjustGroupColDef(colDef) : adjustColDef(colDef);\n\n const adjustGroupColDef = (colDef: ColGroupDef<TData>): ColGroupDef<TData> => ({\n ...colDef,\n children: colDef.children.map((colDef) => adjustColDefOrGroup(colDef)),\n });\n\n const adjustColDef = (colDef: ColDef<TData>): ColDef<TData> => ({\n ...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) {\n return;\n }\n lastUpdatedDep.current = updatedDep;\n const colIds = updatingCols();\n // Updating possibly completed\n if (isEmpty(colIds)) {\n // Columns to resize?\n if (!isEmpty(colIdsEdited.current)) {\n const skipHeader = sizeColumns === 'auto-skip-headers';\n if (sizeColumns === 'auto' || skipHeader) {\n defer(() => {\n if (hasSetContentSize.current) {\n autoSizeColumns({\n skipHeader,\n userSizedColIds: new Set(userSizedColIds.current.keys()),\n colIds: colIdsEdited.current,\n });\n }\n });\n }\n colIdsEdited.current.clear();\n }\n } else {\n // Updates not complete, add them to a list of columns needing resize\n colIds.forEach((colId) => {\n if (colId && !getColDef(colId)?.flex) {\n colIdsEdited.current.add(colId);\n }\n });\n }\n }, [autoSizeColumns, getColDef, sizeColumns, updatedDep, updatingCols]);\n\n const prevLoading = useRef(false);\n useEffect(() => {\n const newLoading = !rowData || params.loading === true;\n if (newLoading && !prevLoading.current) {\n showNoRowsOverlay();\n }\n prevLoading.current = newLoading;\n }, [params.loading, rowData, showNoRowsOverlay]);\n\n /**\n * Set of column I'd's that are prevented from auto-sizing as they are user set\n */\n const userSizedColIds = useRef(new Map<string, number>());\n\n /**\n * Lock/unlock column width on user edit/reset.\n */\n const onColumnResized = useCallback((e: ColumnResizedEvent) => {\n const colId = e.column?.getColId();\n if (colId == null) {\n return;\n }\n const width = e.column?.getActualWidth();\n if (width == null) {\n return;\n }\n switch (e.source) {\n case 'uiColumnResized':\n userSizedColIds.current.set(colId, width);\n /*const colDef = e.column?.getColDef();\n if (!colDef?.flex) {\n onGridResize(e);\n }*/\n break;\n case 'autosizeColumns':\n userSizedColIds.current.delete(colId);\n //onGridResize(e);\n break;\n }\n }, []);\n\n const gridContextMenu = useGridContextMenu({ contextMenu: params.contextMenu, contextMenuSelectRow });\n\n const startDragYRef = useRef<number | null>(null);\n\n const clearHighlightRowClasses = useCallback(() => {\n document.querySelectorAll(`.ag-row-highlight-above`)?.forEach((el) => {\n el.classList.remove('ag-row-highlight-above');\n });\n document.querySelectorAll(`.ag-row-highlight-below`)?.forEach((el) => {\n el.classList.remove('ag-row-highlight-below');\n });\n }, []);\n\n const gridElementRef = useRef<Element>();\n const onRowDragMove = useCallback(\n (event: RowDragMoveEvent) => {\n if (startDragYRef.current === null) {\n startDragYRef.current = event.y;\n }\n\n const yDiff = event.y - startDragYRef.current;\n const data = event.overNode?.data;\n if (data) {\n clearHighlightRowClasses();\n // Find the grid element, this can only be found on start drag.\n // Once dragging is no progress the event target is the drag element not the start drag column.\n const targetEl = event.event.target as Element | undefined;\n if (targetEl) {\n const gridElement = targetEl.closest('.ag-body');\n if (gridElement) {\n gridElementRef.current = gridElement;\n }\n }\n gridElementRef.current?.querySelectorAll(`[row-id='${data.id}']`)?.forEach((el) => {\n el.classList.add(yDiff < 0 ? 'ag-row-highlight-above' : 'ag-row-highlight-below');\n });\n }\n },\n [clearHighlightRowClasses],\n );\n\n const onCellFocused = useCallback(\n (event: CellFocusedEvent<TData>) => {\n if (event.rowIndex == null) {\n return;\n }\n const api = event.api;\n const rowNode = api.getDisplayedRowAtIndex(event.rowIndex);\n const data = rowNode?.data;\n const column = event.column;\n if (!data || !column || typeof column === 'string') {\n return;\n }\n const colDef = column.getColDef();\n if (!colDef || typeof colDef === 'string') {\n return;\n }\n // Prevent repeated callbacks to cell focus when focus didn't change\n const { sourceEvent } = event;\n if (sourceEvent) {\n const cell = (sourceEvent.target as Element | undefined)?.closest?.('.ag-cell') ?? null;\n if ((window as any).__stepaggrid_lastfocuseventtarget === cell) {\n return;\n }\n (window as any).__stepaggrid_lastfocuseventtarget = cell;\n }\n\n paramsOnCellFocused?.({ colDef, data });\n },\n [paramsOnCellFocused],\n );\n\n const onRowDragEnd = useCallback(\n (event: RowDragEndEvent<TData>) => {\n clearHighlightRowClasses();\n gridElementRef.current = undefined;\n if (!params.onRowDragEnd || startDragYRef.current === null) {\n return;\n }\n const yDiff = event.y - startDragYRef.current;\n startDragYRef.current = null;\n if (event.node.rowIndex != null) {\n const movedRow = event.node.data;\n const targetRow = event.overNode?.data;\n if (!movedRow || !targetRow || movedRow === targetRow || yDiff === 0) {\n return;\n }\n void params.onRowDragEnd({ movedRow, targetRow, direction: yDiff > 0 ? 1 : -1 });\n }\n },\n [params, clearHighlightRowClasses],\n );\n\n useEffect(() => {\n if (params.setExternalSelectedItems && selectable == null) {\n console.warn(\n '<Grid/> has setExternalSelectedItems parameter, but is missing selectable parameter,' +\n 'this will cause weird delays in editing.\\nIf you need to hide selection column use hideSelectColumn=true',\n );\n }\n }, [params.setExternalSelectedItems, selectable]);\n\n // This is setting a ref in the GridContext so won't be triggering an update loop\n setOnBulkEditingComplete(params.onBulkEditingComplete);\n\n const getRowId = useCallback((params: GetRowIdParams<TData, unknown>) => `${params.data.id}`, []);\n const defaultColDef = useMemo(\n (): ColDef<TData, unknown> => ({\n minWidth: 48,\n ...omit(params.defaultColDef, ['editable', 'field', 'colId', 'tooltipField']),\n }),\n [params.defaultColDef],\n );\n\n const noRowsOverlayComponent = useCallback(\n (event: AgGridEvent) => {\n const headerRowCount = columnDefs.some((c) => (c as any).children) ? 2 : 1;\n\n let rowCount = 0;\n event.api.forEachNode(() => rowCount++);\n return (\n <GridNoRowsOverlay\n loading={!rowData || params.loading === true}\n rowCount={rowCount}\n headerRowHeight={headerRowCount * rowHeight}\n filteredRowCount={event.api.getDisplayedRowCount()}\n noRowsOverlayText={params.noRowsOverlayText}\n noRowsMatchingOverlayText={params.noRowsMatchingOverlayText}\n />\n );\n },\n [columnDefs, params.loading, params.noRowsMatchingOverlayText, params.noRowsOverlayText, rowData, rowHeight],\n );\n\n const selectionColumnDef = useMemo((): SelectionColumnDef => {\n // Note this has to be 1 for hidden otherwise ag-grid does crazy things whilst resizing\n const selectWidth = params.hideSelectColumn ? 0 : selectable && params.onRowDragEnd ? 76 : 48;\n return {\n suppressNavigable: params.hideSelectColumn,\n rowDrag: !!params.onRowDragEnd,\n minWidth: selectWidth,\n maxWidth: selectWidth,\n pinned: selectColumnPinned,\n headerComponentParams: {\n exportable: false,\n },\n 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 params.enableClickSelection,\n params.enableSelectionWithoutKeys,\n params.hideSelectColumn,\n params.onRowDragEnd,\n rowSelection,\n selectColumnPinned,\n selectable,\n ]);\n\n const onGridSizeChanged = useCallback(\n (event: GridSizeChangedEvent<TData>) => {\n if (sizeColumns === 'fit') {\n event.api.sizeColumnsToFit();\n }\n },\n [sizeColumns],\n );\n\n return (\n <div\n data-testid={dataTestId}\n className={clsx(\n 'Grid-container',\n theme,\n 'theme-specific',\n staleGrid && 'Grid-sortIsStale',\n gridReady && rowData && autoSized && 'Grid-ready',\n )}\n >\n {gridContextMenu.component}\n <div style={{ flex: 1 }} ref={gridDivRef}>\n <AgGridReact\n theme={'legacy'}\n rowSelection={\n selectable\n ? {\n enableSelectionWithoutKeys: params.enableSelectionWithoutKeys ?? false,\n enableClickSelection: params.enableClickSelection ?? false,\n mode: rowSelection === 'single' ? 'singleRow' : 'multiRow',\n }\n : undefined\n }\n rowHeight={rowHeight}\n animateRows={params.animateRows ?? false}\n rowClassRules={params.rowClassRules}\n getRowId={getRowId}\n suppressColumnVirtualisation={suppressColumnVirtualization}\n suppressClickEdit={true}\n onGridSizeChanged={onGridSizeChanged}\n onColumnVisible={setInitialContentSize}\n onRowDataUpdated={onRowDataUpdated}\n onCellFocused={onCellFocused}\n onCellKeyDown={onCellKeyPress}\n onCellClicked={onCellClicked}\n onCellDoubleClicked={onCellDoubleClick}\n onCellEditingStopped={onCellEditingStopped}\n domLayout={params.domLayout}\n onColumnResized={onColumnResized}\n defaultColDef={defaultColDef}\n columnDefs={columnDefsAdjusted}\n selectionColumnDef={selectionColumnDef}\n rowData={rowData}\n postSortRows={params.onRowDragEnd || !defaultPostSort ? undefined : postSortRows}\n onModelUpdated={onModelUpdated}\n onGridReady={onGridReady}\n onSortChanged={ensureSelectedRowIsVisible}\n quickFilterParser={quickFilterParser}\n onSelectionChanged={synchroniseExternalStateToGridSelection}\n onColumnMoved={params.onColumnMoved}\n noRowsOverlayComponent={noRowsOverlayComponent}\n alwaysShowVerticalScroll={params.alwaysShowVerticalScroll}\n isExternalFilterPresent={isExternalFilterPresent}\n doesExternalFilterPass={doesExternalFilterPass}\n maintainColumnOrder={true}\n preventDefaultOnContextMenu={true}\n onCellContextMenu={gridContextMenu.cellContextMenu}\n rowDragText={params.rowDragText}\n onRowDragCancel={clearHighlightRowClasses}\n onRowDragMove={onRowDragMove}\n onRowDragEnd={onRowDragEnd}\n suppressCellFocus={params.suppressCellFocus}\n pinnedTopRowData={params.pinnedTopRowData}\n pinnedBottomRowData={params.pinnedBottomRowData}\n onRowClicked={params.onRowClicked}\n onRowDoubleClicked={params.onRowDoubleClicked}\n suppressStartEditOnTab={true}\n />\n </div>\n </div>\n );\n};\n\nconst quickFilterParser = (filterStr: string) => {\n // filter is exact matches exactly groups separated by commas\n return filterStr.split(',').map((str) => str.trim());\n};\n","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 stopEditing: () => void;\n colId: string;\n field: keyof TData;\n value: any;\n data: TData;\n selectedRows: TData[];\n updateValue: (\n saveFn: (selectedRows: any[]) => Promise<boolean>,\n tabDirection: 1 | 0 | -1,\n ) => Promise<boolean> | boolean;\n formatValue: (value: any) => any;\n}\n\nexport const GridPopoverContext = createContext<GridPopoverContextType<any>>({\n anchorRef: { current: null },\n saving: false,\n setSaving: () => {},\n stopEditing: () => {},\n colId: '',\n field: '',\n value: null,\n data: {} as GridBaseRow,\n selectedRows: [],\n updateValue: () => false,\n formatValue: () => '! No gridPopoverContextProvider !',\n});\n\nexport const useGridPopoverContext = <TData extends GridBaseRow>() =>\n useContext<GridPopoverContextType<TData>>(GridPopoverContext);\n","import { ICellEditorParams } from 'ag-grid-community';\nimport { sortBy } from 'lodash-es';\nimport { PropsWithChildren, RefObject, useCallback, useContext, useMemo, useRef, useState } from 'react';\n\nimport { GridBaseRow } from '../components/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, stopEditing, formatValue, data, value } = props;\n const { cellEditorParams } = colDef;\n const multiEdit = cellEditorParams?.multiEdit ?? false;\n // Then item that is clicked on will always be first in the list\n const selectedRows = useMemo(\n () =>\n multiEdit ? sortBy(getFilteredSelectedRows(), (row) => row.id !== props.data.id) : [props.data as GridBaseRow],\n [getFilteredSelectedRows, multiEdit, props.data],\n );\n\n const field = props.colDef?.field ?? '';\n const colId = props.colDef?.colId ?? field ?? '';\n\n const updateValue = useCallback(\n async (saveFn: (selectedRows: any[]) => Promise<boolean>, tabDirection: 1 | 0 | -1): Promise<boolean> => {\n if (hasSaved.current) {\n // already called save so ignore\n return true;\n }\n hasSaved.current = true;\n return saving ? false : await updatingCells({ selectedRows, field }, saveFn, setSaving, tabDirection);\n },\n [field, saving, selectedRows, updatingCells],\n );\n\n return (\n <GridPopoverContext.Provider\n value={{\n anchorRef: anchorRef as any as RefObject<Element>,\n saving,\n setSaving,\n selectedRows,\n colId,\n field,\n data,\n value,\n updateValue,\n formatValue,\n stopEditing,\n }}\n >\n {children}\n </GridPopoverContext.Provider>\n );\n};\n","import { CellClassParams, CellClassRules } from 'ag-grid-community';\nimport { ICellEditorParams } from 'ag-grid-community';\n\nexport const GridCellMultiSelectClassRules: CellClassRules = {\n 'ag-selected-for-edit': (params: CellClassParams) => {\n const { api, node, colDef } = params;\n const cep = colDef.cellEditorSelector\n ? colDef.cellEditorSelector(params as ICellEditorParams)?.params\n : colDef.cellEditorParams;\n\n return (\n cep?.multiEdit &&\n api\n .getSelectedNodes()\n ?.map((row) => row.id)\n ?.includes(node.id) &&\n api.getEditingCells().some((cell) => cell.colId === colDef.colId)\n );\n },\n};\n","import { LuiIcon } from '@linzjs/lui';\nimport { IconName, IconSize } from '@linzjs/lui/dist/components/LuiIcon/LuiIcon';\nimport clsx from 'clsx';\nimport { ReactElement } from 'react';\n\nexport const GridIcon = (props: {\n icon: IconName;\n title: string;\n size?: IconSize;\n disabled?: boolean;\n className?: string;\n}): ReactElement => (\n <LuiIcon\n name={props.icon}\n title={props.title}\n alt={props.title}\n size={props.size ?? 'md'}\n className={clsx(\n `step-ag-grid__alert-icon`,\n `AgGridGenericCellRenderer-${props.icon}Icon`,\n props.className,\n props.disabled && 'GridIcon-disabled',\n )}\n />\n);\n","import { LuiMiniSpinner } from '@linzjs/lui';\n\nexport const GridLoadableCell = () => (\n <LuiMiniSpinner\n size={22}\n divProps={{ className: 'GridLoadableCell-container', role: 'status', 'aria-label': 'Loading' }}\n />\n);\n","import {\n ColDef,\n EditableCallback,\n GetQuickFilterTextParams,\n ICellEditorParams,\n ICellRendererParams,\n} from 'ag-grid-community';\nimport {\n SuppressKeyboardEventParams,\n ValueFormatterFunc,\n ValueFormatterParams,\n ValueGetterFunc,\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 errorFn = rendererParams?.error;\n let errorText = props.data !== undefined && errorFn ? errorFn(props) : undefined;\n const warningFn = rendererParams?.warning;\n let warningText = props.data !== undefined && warningFn ? warningFn(props) : undefined;\n const infoFn = rendererParams?.info;\n let infoText = props.data !== undefined && infoFn ? infoFn(props) : undefined;\n if (Array.isArray(errorText)) {\n errorText = errorText.join('\\n');\n }\n if (Array.isArray(warningText)) {\n warningText = warningText.join('\\n');\n }\n if (Array.isArray(infoText)) {\n infoText = infoText.join('\\n');\n }\n\n return checkUpdating(colDef.field ?? colDef.colId ?? '', props.data.id) ? (\n <GridLoadableCell />\n ) : (\n <>\n {!!errorText && (\n <GridIcon icon={'ic_error_outline'} title={typeof errorText === 'string' ? errorText : 'Error'} />\n )}\n {!!warningText && (\n <GridIcon icon={'ic_warning_outline'} title={typeof warningText === 'string' ? warningText : 'Warning'} />\n )}\n {!!infoText && <GridIcon icon={'ic_info_outline'} title={typeof infoText === 'string' ? infoText : 'Info'} />}\n <div className={'GridCell-container'}>\n {colDef.cellRendererParams?.originalCellRenderer ? (\n <colDef.cellRendererParams.originalCellRenderer {...props} />\n ) : (\n <span title={props.valueFormatted ?? undefined}>{props.valueFormatted || '–'}</span>\n )}\n </div>\n {fnOrVar(colDef.editable, props) && rendererParams?.rightHoverElement && (\n <div className={'GridCell-hoverRight'}>{rendererParams?.rightHoverElement}</div>\n )}\n </>\n );\n};\n\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 error?: (props: ICellRendererParams<TData, ValueType>) => ReactElement | string | false | null | undefined;\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 valueFormatter: string | ValueFormatterFunc<TData, ValueType> | undefined,\n): string | ((params: GetQuickFilterTextParams<TData, ValueType>) => string) | undefined => {\n // aggrid will default to valueGetter\n if (typeof valueFormatter !== 'function') {\n return undefined;\n }\n\n return (params: GetQuickFilterTextParams<TData, ValueType>) => valueFormatter(params);\n};\n\nconst stringableValueFormatterTypes = ['number', 'boolean', 'string'];\nexport const defaultValueFormatter = ({ value }: ValueFormatterParams) => {\n if (value == null) {\n return '–';\n }\n return stringableValueFormatterTypes.includes(typeof value) //\n ? String(value)\n : JSON.stringify(value);\n};\n\n// ag-grid doesn't understand the custom editor, when it stops editing it thinks\n// that _it_ was editing and overwrites the user updated data\n// _but_, it only does this if the initial value of the cell was null!?\nconst blockValueSetter = () => true;\n\n/*\n * All cells should use this.\n */\nexport const GridCell = <TData extends GridBaseRow, TValue = any, Props extends CellEditorCommon = any>(\n props: GenericCellColDef<TData, TValue>,\n custom?: {\n multiEdit?: boolean;\n preventAutoEdit?: boolean;\n editor?: (editorProps: Props) => ReactElement;\n editorParams?: Props;\n },\n): ColDefT<TData, TValue> => {\n // Generate a default filter value getter which uses the formatted value plus\n // the editable value if it's a string and different from the formatted value.\n // This is so that e.g. bearings can be searched for by DMS or raw number.\n const valueFormatter = props.valueFormatter ?? defaultValueFormatter;\n const filterValueGetter = props.filterValueGetter ?? generateFilterGetter(valueFormatter as any);\n const exportable = props.exportable;\n // Can't leave this here ag-grid will complain\n delete props.exportable;\n\n return {\n // Will be overridden if specified later\n colId: props.field,\n headerTooltip: props.headerName,\n sortable: true,\n resizable: true,\n valueSetter: custom?.editor ? blockValueSetter : undefined,\n editable: props.editable ?? !!custom?.editor,\n ...(custom?.editor && {\n cellClassRules: GridCellMultiSelectClassRules,\n cellEditor: GenericCellEditorComponentWrapper(custom?.editor),\n }),\n suppressKeyboardEvent: suppressCellKeyboardEvents,\n ...(custom?.editorParams\n ? {\n cellEditorParams: {\n ...custom.editorParams,\n multiEdit: custom.multiEdit,\n preventAutoEdit: custom.preventAutoEdit ?? !custom?.editor,\n },\n }\n : { cellEditorParams: { preventAutoEdit: !custom?.editor } }),\n // If there's a valueFormatter and no filterValueGetter then create a filterValueGetter\n getQuickFilterText: filterValueGetter as any,\n // Default value formatter, otherwise react freaks out on objects\n valueFormatter,\n ...props,\n cellRenderer: typeof props.cellRenderer === 'string' ? props.cellRenderer : GridCellRenderer,\n cellRendererParams: {\n originalCellRenderer: props.cellRenderer,\n ...props.cellRendererParams,\n },\n headerComponentParams: {\n exportable,\n ...props.headerComponentParams,\n },\n };\n};\n\nexport interface CellEditorCommon {\n className?: string | undefined;\n}\n\nexport const GenericCellEditorComponentWrapper = (editor?: (props: any) => ReactElement) => {\n const obj = { editor };\n return forwardRef(function GenericCellEditorComponentFr(cellEditorParams: ICellEditorParams, _) {\n const valueFormatted = cellEditorParams.formatValue\n ? cellEditorParams.formatValue(cellEditorParams.value)\n : 'Missing formatter';\n return (\n <GridPopoverContextProvider props={cellEditorParams}>\n <>\n {\n <cellEditorParams.colDef.cellRenderer\n {...cellEditorParams}\n valueFormatted={valueFormatted}\n {...cellEditorParams.colDef.cellRendererParams}\n />\n }\n {obj.editor && <obj.editor {...cellEditorParams} />}\n </>\n </GridPopoverContextProvider>\n );\n });\n};\n","import { ColDef } from 'ag-grid-community';\n\nimport { GridBaseRow } from './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 { useEffect } from 'react';\n\nimport { GridFilterExternal, useGridContext } from '../../contexts/GridContext';\nimport { GridBaseRow } from '../Grid';\n\nexport const useGridFilter = <TData extends GridBaseRow>(filter: GridFilterExternal<TData> | undefined) => {\n const { addExternalFilter, removeExternalFilter } = useGridContext<TData>();\n\n useEffect(() => {\n const thisFilter = filter;\n thisFilter && addExternalFilter(thisFilter);\n return () => {\n thisFilter && removeExternalFilter(thisFilter);\n };\n }, [addExternalFilter, filter, removeExternalFilter]);\n};\n","import { LuiButton, LuiButtonGroup } from '@linzjs/lui';\nimport { LuiButtonProps } from '@linzjs/lui/dist/components/LuiButton/LuiButton';\nimport clsx, { ClassValue } from 'clsx';\nimport { ReactElement, useMemo, useState } from 'react';\n\nimport { GridFilterExternal } from '../../contexts/GridContext';\nimport { GridBaseRow } from '../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","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import './GridFilterColumnsMultiSelect.scss';\n\nimport { LuiCheckboxInput } from '@linzjs/lui';\nimport type { IDoesFilterPassParams, IFilterComp, IFilterParams } from 'ag-grid-community';\nimport React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\n\nexport interface CheckboxMultiFilterParams extends IFilterParams {\n labels?: Record<string, string>;\n labelFormatter?: (value: string) => string;\n}\n\nexport interface CheckboxMultiFilterModel {\n values: string[];\n}\n\ninterface FilterUIProps {\n allValues: string[];\n selected: Set<string>;\n labels: Record<string, string>;\n labelFormatter?: (value: string) => string;\n onToggleAll: (checked: boolean) => void;\n onToggleOne: (value: string, checked: boolean) => void;\n}\n\nconst EMPTY_KEY = '__EMPTY__';\nconst DEFAULT_EMPTY_LABEL = '-';\n\nconst FilterUI: React.FC<FilterUIProps> = ({\n allValues,\n selected,\n labels,\n labelFormatter,\n onToggleAll,\n onToggleOne,\n}) => {\n const allChecked = allValues.length > 0 && selected.size === allValues.length;\n\n const getDisplayLabel = (raw: string): string => {\n const base = raw === EMPTY_KEY ? (labels[EMPTY_KEY] ?? DEFAULT_EMPTY_LABEL) : (labels[raw] ?? raw);\n return labelFormatter ? labelFormatter(base) : base;\n };\n\n return (\n <div className=\"GridFilterColsMultiSelect\">\n <span className=\"LuiSelect-label-text\">Filter column</span>\n\n <LuiCheckboxInput\n className=\"LuiCheckboxInput-selectAll\"\n label={'Select All'}\n value=\"true\"\n isChecked={allChecked}\n onChange={(e) => onToggleAll(e.target.checked)}\n />\n {allValues.map((val) => (\n <LuiCheckboxInput\n key={val}\n className=\"LuiCheckboxInput-item\"\n label={getDisplayLabel(val)}\n value={val}\n isChecked={selected.has(val)}\n onChange={(e) => onToggleOne(val, e.target.checked)}\n />\n ))}\n </div>\n );\n};\n\nexport class GridFilterColumnsMultiSelect implements IFilterComp {\n private params!: CheckboxMultiFilterParams;\n private selectedValues = new Set<string>();\n private labels: Record<string, string> = {};\n private allValues: string[] = [];\n private gui!: HTMLElement;\n private labelFormatter?: (value: string) => string;\n private reactRoot: Root | null = null;\n\n private normalizeCellValue(value: unknown): string {\n if (typeof value === 'string') return value.trim() === '' ? EMPTY_KEY : value;\n return EMPTY_KEY;\n }\n\n private loadFieldValues(): string[] {\n const field = this.params.colDef.field as string;\n const values = new Set<string>();\n\n this.params.api.forEachNode((node) => {\n const data = node.data ?? {};\n const raw = (data as Record<string, unknown>)[field];\n const norm = this.normalizeCellValue(raw);\n values.add(norm);\n });\n\n return Array.from(values).sort((a, b) => {\n if (a === EMPTY_KEY && b !== EMPTY_KEY) return -1;\n if (b === EMPTY_KEY && a !== EMPTY_KEY) return 1;\n return a.localeCompare(b);\n });\n }\n\n init(params: CheckboxMultiFilterParams): void {\n this.params = params;\n this.labels = { ...params.labels };\n this.labelFormatter = params.labelFormatter;\n\n if (!(EMPTY_KEY in this.labels)) {\n this.labels[EMPTY_KEY] = DEFAULT_EMPTY_LABEL;\n }\n\n this.allValues = this.loadFieldValues();\n this.selectedValues = new Set(this.allValues);\n\n this.gui = document.createElement('div');\n this.reactRoot = createRoot(this.gui);\n this.render();\n }\n\n private render(): void {\n if (!this.reactRoot) return;\n\n this.reactRoot.render(\n <FilterUI\n allValues={this.allValues}\n selected={this.selectedValues}\n labels={this.labels}\n labelFormatter={this.labelFormatter}\n onToggleAll={this.handleToggleAll.bind(this)}\n onToggleOne={this.handleToggleOne.bind(this)}\n />,\n );\n }\n\n private handleToggleAll(checked: boolean): void {\n if (checked) {\n this.allValues.forEach((val) => this.selectedValues.add(val));\n } else {\n this.selectedValues.clear();\n }\n this.render();\n this.params.filterChangedCallback();\n }\n\n private handleToggleOne(value: string, checked: boolean): void {\n if (checked) {\n this.selectedValues.add(value);\n } else {\n this.selectedValues.delete(value);\n }\n this.render();\n this.params.filterChangedCallback();\n }\n\n getGui(): HTMLElement {\n return this.gui;\n }\n\n isFilterActive(): boolean {\n return this.selectedValues.size > 0;\n }\n\n doesFilterPass(p: IDoesFilterPassParams): boolean {\n const field = this.params.colDef.field as string;\n if (!p.data || typeof p.data !== 'object') {\n return this.selectedValues.has(EMPTY_KEY);\n }\n\n const raw = (p.data as Record<string, unknown>)[field];\n const norm = this.normalizeCellValue(raw);\n return this.selectedValues.has(norm);\n }\n\n getModel(): CheckboxMultiFilterModel | null {\n return this.selectedValues.size > 0 ? { values: Array.from(this.selectedValues) } : null;\n }\n\n setModel(model: CheckboxMultiFilterModel | null): void {\n this.selectedValues = new Set(model?.values || []);\n this.render();\n }\n\n destroy(): void {\n if (this.reactRoot) {\n this.reactRoot.unmount();\n this.reactRoot = null;\n }\n }\n}\n\nexport const createCheckboxMultiFilterParams = (\n labels: Record<string, string> = {},\n labelFormatter?: (value: string) => string,\n): Partial<CheckboxMultiFilterParams> => ({\n labels: { [EMPTY_KEY]: DEFAULT_EMPTY_LABEL, ...labels },\n labelFormatter,\n});\n","import { LuiButton, LuiIcon } from '@linzjs/lui';\nimport { IconName, IconSize } from '@linzjs/lui/dist/components/LuiIcon/LuiIcon';\nimport { ButtonHTMLAttributes, forwardRef, MouseEvent } from 'react';\n\nexport interface GridFilterHeaderIconButtonProps {\n icon: IconName;\n onClick?: (e: MouseEvent) => void;\n buttonProps?: Partial<ButtonHTMLAttributes<HTMLButtonElement>>;\n disabled?: boolean;\n size?: IconSize;\n title: string;\n}\n\nexport const GridFilterHeaderIconButton = forwardRef<HTMLButtonElement, GridFilterHeaderIconButtonProps>(\n function columnsButton({ icon, title, onClick, buttonProps, disabled = false, size = 'md' }, ref) {\n return (\n <LuiButton\n {...buttonProps}\n type={'button'}\n level={'tertiary'}\n className={'lui-button-icon-only'}\n ref={ref}\n buttonProps={{ 'aria-label': title }}\n title={title}\n onClick={onClick}\n disabled={disabled}\n >\n <LuiIcon name={icon} alt={'Menu'} size={size} />\n </LuiButton>\n );\n },\n);\n","import { LuiCheckboxInput, LuiIcon } from '@linzjs/lui';\nimport { ColDef } from 'ag-grid-community';\nimport { isEmpty } from 'lodash-es';\nimport { ReactElement, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { GridContext } from '../../contexts/GridContext';\nimport { Menu, MenuDivider, MenuItem } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { GridFilterHeaderIconButton } from './GridFilterHeaderIconButton';\n\nexport interface GridFilterColumnsToggleProps {\n saveState?: boolean;\n}\n\nexport const GridFilterColumnsToggle = ({ saveState = true }: GridFilterColumnsToggleProps): ReactElement => {\n const [loaded, setLoaded] = useState(false);\n const { getColumns, getColumnIds, invisibleColumnIds, setInvisibleColumnIds } = useContext(GridContext);\n\n const columnStorageKey = useMemo(\n () =>\n isEmpty(getColumnIds())\n ? null // Grid hasn't been initialised yet\n : 'stepAgGrid_invisibleColumnIds_' + getColumnIds().join('_'),\n [getColumnIds],\n );\n\n // infer the invisible ids from colDefs\n const resetColumns = useCallback(\n () => setInvisibleColumnIds(getColumnIds('initialHide')),\n [getColumnIds, setInvisibleColumnIds],\n );\n\n // Load state on start\n useEffect(() => {\n if (!columnStorageKey || loaded) return;\n if (saveState) {\n try {\n const stored = window.localStorage.getItem(columnStorageKey);\n if (!stored) {\n resetColumns();\n } else {\n const invisibleIds = JSON.parse(stored ?? '[]');\n if (!Array.isArray(invisibleIds)) {\n console.error(`stored invisible ids not an array: ${stored}`);\n } else if (!invisibleIds.every((id) => typeof id === 'string')) {\n console.error(`stored invisible ids not strings: ${stored}`);\n } else {\n invisibleIds && setInvisibleColumnIds(invisibleIds);\n }\n }\n } catch (ex) {\n console.error(ex);\n }\n setLoaded(true);\n }\n }, [columnStorageKey, getColumns, loaded, resetColumns, saveState, setInvisibleColumnIds]);\n\n // Save state on column visibility change\n useEffect(() => {\n loaded &&\n columnStorageKey &&\n saveState &&\n window.localStorage.setItem(columnStorageKey, JSON.stringify(invisibleColumnIds));\n }, [columnStorageKey, invisibleColumnIds, loaded, saveState]);\n\n const toggleColumn = useCallback(\n (colId?: string) => {\n if (!colId || !invisibleColumnIds) return;\n setInvisibleColumnIds(\n invisibleColumnIds.includes(colId)\n ? invisibleColumnIds.filter((id) => id !== colId)\n : [...invisibleColumnIds, colId],\n );\n },\n [invisibleColumnIds, setInvisibleColumnIds],\n );\n\n const numericRegExp = /^\\d+$/;\n const isNonManageableColumn = (col: ColDef) => col.lockVisible || col.colId == null || numericRegExp.test(col.colId);\n\n return (\n <Menu\n menuButton={<GridFilterHeaderIconButton icon={'ic_columns'} title={'Column visibility'} />}\n menuClassName={'step-ag-grid-react-menu'}\n portal={true}\n unmountOnClose={true}\n >\n <div className={'GridFilterColumnsToggle-container'}>\n {getColumns('headerName').map((col) => (\n <MenuItem\n key={col.colId ?? 'no_col_id'}\n disabled={isNonManageableColumn(col)}\n onClick={(e: ClickEvent) => {\n // Global react-menu MenuItem handler handles tabs\n if (e.key !== 'Tab') {\n e.keepOpen = true;\n if (e.key !== 'Enter') {\n toggleColumn(col.colId);\n }\n }\n }}\n >\n <LuiCheckboxInput\n isChecked={!!invisibleColumnIds && !invisibleColumnIds.includes(col.colId ?? '')}\n value={`${col.colId}`}\n label={col.headerName ?? ''}\n isDisabled={isNonManageableColumn(col)}\n inputProps={{\n onClick: (e) => {\n // Click is handled by MenuItem onClick so keyboard events work\n e.preventDefault();\n e.stopPropagation();\n },\n }}\n onChange={() => {\n /*Do nothing, change handled by menuItem*/\n }}\n />\n </MenuItem>\n ))}\n </div>\n <MenuDivider key={`$$divider_reset_columns`} />\n <MenuItem\n key={'$$reset_columns'}\n onClick={(e: ClickEvent) => {\n // Global react-menu MenuItem handler handles tabs\n if (e.key !== 'Tab') {\n e.keepOpen = e.key !== 'Enter';\n resetColumns();\n }\n }}\n >\n <LuiIcon name={'ic_regenerate'} alt={'Reset columns'} size={'md'} className={'MenuItem-icon'} />\n Reset columns\n </MenuItem>\n </Menu>\n );\n};\n","import { useCallback, useEffect, useRef } from 'react';\n\n/**\n * Cancels timeouts on scope being destroyed.\n *\n * This could almost be a debounce, but debounce tracks by function reference, this tracks by hook reference.\n * This could have been implemented using debounce if the callers function was wrapped in useCallback,\n * but there's no way to enforce that, so it would lead to bugs.\n */\nexport const useTimeoutHook = () => {\n const timeout = useRef<ReturnType<typeof setTimeout>>();\n\n /**\n * Clear any pending timeouts.\n */\n const clearTimeouts = () => {\n if (timeout.current) {\n const tc = timeout.current;\n timeout.current = undefined;\n clearTimeout(tc);\n }\n };\n\n /**\n * Call this when your action has completed.\n */\n const invoke = useCallback((fn: () => void, waitTimeMs: number) => {\n clearTimeouts();\n timeout.current = setTimeout(fn, waitTimeMs);\n }, []);\n\n /**\n * Clear timeout on loss of scope.\n */\n useEffect(() => {\n return () => clearTimeouts();\n }, []);\n\n return invoke;\n};\n\ninterface IntervalHookProps {\n timeoutMs: number;\n callback: () => void;\n}\n\nexport const useIntervalHook = ({ callback, timeoutMs }: IntervalHookProps) => {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n const interval = setInterval(() => {\n callbackRef.current && callbackRef.current();\n }, timeoutMs);\n return () => {\n clearInterval(interval);\n };\n }, [timeoutMs]);\n};\n","import { useCallback, useRef, useState } from 'react';\n\nimport { useTimeoutHook } from './timeoutHook';\n\n/**\n * Defers state change up to a minimum time since last state change.\n */\nexport const useStateDeferred = <T,>(initialValue: T): [T, (v: T) => void, (v: T, w: number) => void] => {\n const startTime = useRef<number>(0);\n const timeoutHook = useTimeoutHook();\n\n const [value, _setValue] = useState(initialValue);\n\n const setValue = useCallback((newValue: T) => {\n startTime.current = Date.now();\n _setValue(newValue);\n }, []);\n\n const setValueDeferred = useCallback(\n (newValue: T, minimumWaitTimeMs: number) => {\n const waitTimeMs = Math.max(minimumWaitTimeMs - (Date.now() - startTime.current), 0);\n timeoutHook(() => _setValue(newValue), waitTimeMs);\n },\n [timeoutHook],\n );\n\n return [value, setValue, setValueDeferred];\n};\n","import { LuiMiniSpinner } from '@linzjs/lui';\nimport { CsvExportParams } from 'ag-grid-community';\nimport { delay } from 'lodash-es';\nimport { useContext } from 'react';\n\nimport { GridContext } from '../../contexts/GridContext';\nimport { useStateDeferred } from '../../lui/stateDeferredHook';\nimport { GridFilterHeaderIconButton } from './GridFilterHeaderIconButton';\n\nexport const GridFilterDownloadCsvButton = (csvExportParams: CsvExportParams) => {\n const { downloadCsv } = useContext(GridContext);\n\n const [downloading, setDownloading, setDownloadingDeferred] = useStateDeferred(false);\n\n const handleDownloadClick = () => {\n setDownloading(true);\n // Defer the download such that the component disabled state can update\n delay(() => {\n downloadCsv(csvExportParams);\n // Defer re-enablement as the browser takes time to process the download\n setDownloadingDeferred(false, 4000);\n }, 100);\n };\n\n return downloading ? (\n <LuiMiniSpinner\n size={22}\n divProps={{\n role: 'status',\n ['aria-label']: 'Downloading...',\n style: { width: 42, display: 'flex', justifyContent: 'center' },\n }}\n />\n ) : (\n <GridFilterHeaderIconButton\n icon={'ic_csv_file'}\n title={'Download CSV'}\n onClick={handleDownloadClick}\n disabled={downloading}\n />\n );\n};\n","import { LuiIcon } from '@linzjs/lui';\nimport { useContext, useEffect, useState } from 'react';\n\nimport { GridContext } from '../../contexts/GridContext';\n\nexport interface GridFilterQuickProps {\n quickFilterPlaceholder?: string;\n defaultValue?: string;\n}\n\nexport const GridFilterQuick = ({ quickFilterPlaceholder, defaultValue }: GridFilterQuickProps) => {\n const { setQuickFilter } = useContext(GridContext);\n const [quickFilterValue, setQuickFilterValue] = useState(defaultValue ?? '');\n\n useEffect(() => {\n setQuickFilter(quickFilterValue);\n }, [quickFilterValue, setQuickFilter]);\n\n return (\n <div className=\"GridFilterQuick-container\">\n <div className=\"GridFilterQuick-icon\">\n <LuiIcon name={'ic_search'} alt={'Search'} size={'md'} />\n </div>\n <input\n aria-label=\"Search\"\n className=\"GridFilterQuick-input\"\n type=\"text\"\n placeholder={quickFilterPlaceholder ?? 'Search'}\n value={quickFilterValue}\n onChange={(event) => {\n setQuickFilterValue(event.target.value);\n }}\n />\n </div>\n );\n};\n","import { PropsWithChildren } from 'react';\n\nexport const GridFilters = ({ children }: PropsWithChildren) => (\n <div className=\"Grid-container-filters\">{children}</div>\n);\n","'use strict';\n\n/* global setTimeout, clearTimeout */\n\nmodule.exports = function debounce(fn) {\n var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var lastCallAt = void 0;\n var deferred = void 0;\n var timer = void 0;\n var pendingArgs = [];\n return function debounced() {\n var currentWait = getWait(wait);\n var currentTime = new Date().getTime();\n\n var isCold = !lastCallAt || currentTime - lastCallAt > currentWait;\n\n lastCallAt = currentTime;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (isCold && options.leading) {\n return options.accumulate ? Promise.resolve(fn.call(this, [args])).then(function (result) {\n return result[0];\n }) : Promise.resolve(fn.call.apply(fn, [this].concat(args)));\n }\n\n if (deferred) {\n clearTimeout(timer);\n } else {\n deferred = defer();\n }\n\n pendingArgs.push(args);\n timer = setTimeout(flush.bind(this), currentWait);\n\n if (options.accumulate) {\n var argsIndex = pendingArgs.length - 1;\n return deferred.promise.then(function (results) {\n return results[argsIndex];\n });\n }\n\n return deferred.promise;\n };\n\n function flush() {\n var thisDeferred = deferred;\n clearTimeout(timer);\n\n Promise.resolve(options.accumulate ? fn.call(this, pendingArgs) : fn.apply(this, pendingArgs[pendingArgs.length - 1])).then(thisDeferred.resolve, thisDeferred.reject);\n\n pendingArgs = [];\n deferred = null;\n }\n};\n\nfunction getWait(wait) {\n return typeof wait === 'function' ? wait() : wait;\n}\n\nfunction defer() {\n var deferred = {};\n deferred.promise = new Promise(function (resolve, reject) {\n deferred.resolve = resolve;\n deferred.reject = reject;\n });\n return deferred;\n}\n//# sourceMappingURL=index.js.map","import { createContext } from 'react';\n\nexport interface GridSubComponentContextType {\n value: any;\n data: any;\n setValue: (value: string) => void;\n setValid: (valid: boolean) => void;\n triggerSave: () => Promise<void>;\n context: any;\n}\n\nexport const GridSubComponentContext = createContext<GridSubComponentContextType>({\n value: 'GridSubComponentContext value no context',\n data: {},\n setValue: () => {\n console.error('GridSubComponentContext setValue no context');\n },\n setValid: () => {\n console.error('GridSubComponentContext setValid no context');\n },\n // eslint-disable-next-line @typescript-eslint/require-await\n triggerSave: async () => {\n console.error('GridSubComponentContext triggerSave no context');\n },\n context: null,\n});\n","import './FormError.scss';\n\nimport { LuiIcon } from '@linzjs/lui';\nimport { ReactElement } from 'react';\n\nexport interface FormErrorProps {\n helpText?: string;\n error?: ReactElement | string | boolean | null;\n}\n\nexport const FormError = (props: FormErrorProps) => {\n return (\n <>\n {props.error && (\n <div className=\"FormError\">\n <LuiIcon alt=\"error\" name=\"ic_error\" className=\"FormError-text-icon\" size=\"sm\" status=\"error\" />\n <span className=\"FormError-error\">{props.error}</span>\n </div>\n )}\n\n {props.helpText && !props.error && <span className={'FormError-helpText'}>{props.helpText}</span>}\n </>\n );\n};\n","import { useEffect, useRef } from 'react';\n\n/**\n * Track previous values of states.\n *\n * @param value Value to track.\n */\nexport const usePrevious = <T,>(value: T): T | undefined => {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n};\n\n/**\n * Dump prop differences for components between renders.\n */\nexport const usePropMonitor = (what: string, props: NonNullable<unknown>) => {\n const prev = usePrevious(props);\n useEffect(() => {\n if (prev) {\n let first = true;\n Object.keys(props).forEach((p) => {\n // @ts-expect-error any type\n if (props[p] !== prev[p]) {\n if (first) {\n // eslint-disable-next-line no-console\n console.log('--- props changed -----');\n first = false;\n }\n // eslint-disable-next-line no-console\n console.log(`${what} key: ${p} changed`);\n }\n });\n }\n }, [prev, props, what]);\n};\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","import escapeStringRegexp from 'escape-string-regexp';\n\nconst regexpCache = new Map();\n\nconst sanitizeArray = (input, inputName) => {\n\tif (!Array.isArray(input)) {\n\t\tswitch (typeof input) {\n\t\t\tcase 'string':\n\t\t\t\tinput = [input];\n\t\t\t\tbreak;\n\t\t\tcase 'undefined':\n\t\t\t\tinput = [];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new TypeError(`Expected '${inputName}' to be a string or an array, but got a type of '${typeof input}'`);\n\t\t}\n\t}\n\n\treturn input.filter(string => {\n\t\tif (typeof string !== 'string') {\n\t\t\tif (typeof string === 'undefined') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthrow new TypeError(`Expected '${inputName}' to be an array of strings, but found a type of '${typeof string}' in the array`);\n\t\t}\n\n\t\treturn true;\n\t});\n};\n\nconst makeRegexp = (pattern, options) => {\n\toptions = {\n\t\tcaseSensitive: false,\n\t\t...options,\n\t};\n\n\tconst cacheKey = pattern + JSON.stringify(options);\n\n\tif (regexpCache.has(cacheKey)) {\n\t\treturn regexpCache.get(cacheKey);\n\t}\n\n\tconst negated = pattern[0] === '!';\n\n\tif (negated) {\n\t\tpattern = pattern.slice(1);\n\t}\n\n\tpattern = escapeStringRegexp(pattern).replace(/\\\\\\*/g, '[\\\\s\\\\S]*');\n\n\tconst regexp = new RegExp(`^${pattern}$`, options.caseSensitive ? '' : 'i');\n\tregexp.negated = negated;\n\tregexpCache.set(cacheKey, regexp);\n\n\treturn regexp;\n};\n\nconst baseMatcher = (inputs, patterns, options, firstMatchOnly) => {\n\tinputs = sanitizeArray(inputs, 'inputs');\n\tpatterns = sanitizeArray(patterns, 'patterns');\n\n\tif (patterns.length === 0) {\n\t\treturn [];\n\t}\n\n\tpatterns = patterns.map(pattern => makeRegexp(pattern, options));\n\n\tconst {allPatterns} = options || {};\n\tconst result = [];\n\n\tfor (const input of inputs) {\n\t\t// String is included only if it matches at least one non-negated pattern supplied.\n\t\t// Note: the `allPatterns` option requires every non-negated pattern to be matched once.\n\t\t// Matching a negated pattern excludes the string.\n\t\tlet matches;\n\t\tconst didFit = [...patterns].fill(false);\n\n\t\tfor (const [index, pattern] of patterns.entries()) {\n\t\t\tif (pattern.test(input)) {\n\t\t\t\tdidFit[index] = true;\n\t\t\t\tmatches = !pattern.negated;\n\n\t\t\t\tif (!matches) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t!(\n\t\t\t\tmatches === false\n\t\t\t\t|| (matches === undefined && patterns.some(pattern => !pattern.negated))\n\t\t\t\t|| (allPatterns && didFit.some((yes, index) => !yes && !patterns[index].negated))\n\t\t\t)\n\t\t) {\n\t\t\tresult.push(input);\n\n\t\t\tif (firstMatchOnly) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n};\n\nexport function matcher(inputs, patterns, options) {\n\treturn baseMatcher(inputs, patterns, options, false);\n}\n\nexport function isMatch(inputs, patterns, options) {\n\treturn baseMatcher(inputs, patterns, options, true).length > 0;\n}\n","import { isEmpty, partition } from 'lodash-es';\nimport { isMatch } from 'matcher';\n\n/**\n * Text matching with wildcards and multiple matchers.\n *\n * \"L\" => L*\n * \"=L\" => L\n * \"*L*\" => *L*\n * \"*L\" => *L\n * \"A B\" => A* and B*\n * \"A B, C\" => (A* and B*) or C*\n * \"!A\" => all values must not match A\n * Returns true if there's a text match.\n */\nexport const textMatch = (text: string | undefined | null, filter: string): boolean => {\n if (text == null) return true;\n\n const superFilters = filter\n .split(',')\n .map((sf) => sf.trim())\n .filter((sf) => sf)\n .map((r) =>\n r\n .split(/\\s+/)\n .map((f) => (f.startsWith('=') ? f.slice(1) : f + '*'))\n .join(' '),\n );\n const [negativeFilters, positiveFilters] = partition(superFilters, (superFilters) => superFilters.startsWith('!'));\n\n const values = text.replaceAll(',', ' ').trim().split(/\\s+/);\n return (\n (isEmpty(positiveFilters) || // Not filtered\n positiveFilters.some((superFilter) => {\n const subFilters = superFilter.split(/\\s+/).map((s) => s.replaceAll(/([!?])/g, '\\\\$1'));\n return subFilters.every((subFilter) => values.some((value) => isMatch(value, subFilter)));\n })) &&\n (isEmpty(negativeFilters) ||\n negativeFilters.every((superFilter) => values.every((value) => isMatch(value, superFilter))))\n );\n};\n","import { ReactElement, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useGridPopoverContext } from '../contexts/GridPopoverContext';\nimport { ControlledMenu } from '../react-menu3';\nimport { MenuCloseEvent } from '../react-menu3/types';\nimport { CloseReason } from '../react-menu3/utils';\nimport { GridBaseRow } from './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 CancelPromise = () => Promise.resolve(true);\n\nexport const useGridPopoverHook = <TData extends GridBaseRow>({\n className,\n save,\n invalid,\n dontSaveOnExternalClick,\n}: GridPopoverHookProps<TData>) => {\n const { anchorRef, saving, updateValue, stopEditing } = useGridPopoverContext<TData>();\n const saveButtonRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setOpen] = useState(false);\n\n useEffect(() => {\n setOpen(true);\n }, []);\n\n const triggerSave = useCallback(\n async (reason?: string) => {\n if (reason == CloseReason.CANCEL) {\n await updateValue(CancelPromise, 0);\n stopEditing();\n\n return;\n }\n if (invalid?.()) {\n // Don't close, don't do anything it's invalid\n return;\n }\n\n if (\n await updateValue(\n save ?? (() => Promise.resolve(true)),\n reason === CloseReason.TAB_FORWARD ? 1 : reason === CloseReason.TAB_BACKWARD ? -1 : 0,\n )\n ) {\n stopEditing();\n }\n },\n [invalid, save, stopEditing, updateValue],\n );\n\n const popoverWrapper = useCallback(\n (children: ReactElement) => {\n return (\n <>\n {anchorRef.current && (\n <ControlledMenu\n state={isOpen ? 'open' : 'closed'}\n portal={true}\n unmountOnClose={true}\n anchorRef={anchorRef}\n saveButtonRef={saveButtonRef}\n menuClassName={'step-ag-grid-react-menu'}\n onClose={(event: MenuCloseEvent) => {\n // Prevent menu from closing when modals are invoked\n if (event.reason === CloseReason.BLUR) {\n return;\n }\n void triggerSave(event.reason);\n }}\n viewScroll={'auto'}\n dontShrinkIfDirectionIsTop={true}\n className={className}\n >\n {saving && ( // This is the overlay that prevents editing when the editor is saving\n <div className={'ComponentLoadingWrapper-saveOverlay'} />\n )}\n {children}\n <button\n ref={saveButtonRef}\n data-reason={''}\n onClick={(e) => {\n let reason = e.currentTarget.getAttribute('data-reason') ?? undefined;\n if (dontSaveOnExternalClick && reason === CloseReason.BLUR) {\n reason = CloseReason.CANCEL;\n }\n void triggerSave(reason);\n }}\n style={{ display: 'none' }}\n />\n </ControlledMenu>\n )}\n </>\n );\n },\n [anchorRef, isOpen, className, dontSaveOnExternalClick, saving, triggerSave],\n );\n\n return {\n popoverWrapper,\n triggerSave,\n };\n};\n","import debounce from 'debounce-promise';\nimport { compact, isEmpty } from 'lodash-es';\nimport { Fragment, ReactElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { GridSubComponentContext } from '../../contexts/GridSubComponentContext';\nimport { FormError } from '../../lui/FormError';\nimport { usePrevious } from '../../lui/reactUtils';\nimport { FocusableItem, MenuDivider, MenuHeader, MenuItem } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { textMatch } from '../../utils/textMatcher';\nimport { isNotEmpty } from '../../utils/util';\nimport { ComponentLoadingWrapper } from '../ComponentLoadingWrapper';\nimport { 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 topComponent?: () => ReactElement;\n}\n\nconst fieldToString = (field: any) => {\n return typeof field === 'symbol' ? field.toString() : `${field}`;\n};\n\nexport const GridFormDropDown = <TData extends GridBaseRow, TOptionValue>(\n props: GridFormDropDownProps<TData, TOptionValue>,\n) => {\n const { selectedRows, field, data } = useGridPopoverContext<TData>();\n const { onSelectFilter, options: propOptions, onSelectedItem } = props;\n\n // Save triggers during async action processing which triggers another selectItem(), this ref blocks that\n const [filter, setFilter] = useState(props.filterDefaultValue ?? '');\n const [filteredValues, setFilteredValues] = useState<any[]>();\n const [options, setOptions] = useState<FinalSelectOption<TOptionValue>[] | null>(\n !!propOptions && typeof propOptions !== 'function' ? propOptions : null,\n );\n const subComponentIsValid = useRef(false);\n const subComponentInitialValue = useRef<string | null>(null);\n const [subSelectedValue, setSubSelectedValue] = useState<any>(null);\n // Note: null is assumed to be the filter\n const [selectedItem, setSelectedItem] = useState<FinalSelectOption<TOptionValue> | null>(null);\n\n const selectItemHandler = useCallback(\n async (value: any, subComponentValue?: any): Promise<boolean> => {\n const hasChanged =\n selectedRows.some((row) => row[field] !== value) ||\n (subComponentValue !== undefined && subComponentInitialValue.current !== JSON.stringify(subComponentValue));\n if (hasChanged) {\n if (onSelectedItem) {\n await onSelectedItem({\n selectedRows,\n selectedRowIds: selectedRows.map((row) => row.id),\n value,\n subComponentValue,\n });\n } else {\n selectedRows.forEach((row) => (row[field] = value));\n }\n }\n return true;\n },\n [field, onSelectedItem, selectedRows],\n );\n\n /**\n * Saves are wrapped in updateValue and triggered by blur events\n */\n const save = useCallback(async () => {\n if (!options) {\n return true;\n }\n\n // Filter saved\n if (selectedItem === null) {\n if (onSelectFilter) {\n if (!isEmpty(filter)) {\n await onSelectFilter({\n selectedRows,\n selectedRowIds: selectedRows.map((row) => row.id),\n value: filter as any,\n });\n }\n\n return true;\n } else {\n if (filteredValues && filteredValues.length === 1) {\n if (filteredValues[0].subComponent) return false;\n return await selectItemHandler(filteredValues[0].value, null);\n }\n }\n return false;\n }\n if (selectedItem.subComponent && !subComponentIsValid.current) {\n return false;\n }\n await selectItemHandler(selectedItem.value, subSelectedValue);\n\n return true;\n }, [\n filter,\n filteredValues,\n onSelectFilter,\n options,\n selectItemHandler,\n selectedItem,\n selectedRows,\n subSelectedValue,\n ]);\n\n const { popoverWrapper } = useGridPopoverHook({\n className: props.className,\n invalid: () => !options || !!(selectedItem && !subComponentIsValid.current),\n save,\n dontSaveOnExternalClick: true,\n });\n\n // Load up options list if it's async function\n useEffect(() => {\n // If options is null then we need to load/reload\n // Options will be set to null during a reload based filter, or on open popup\n if (options !== null) {\n return;\n }\n\n // propOptions is a const list\n if (typeof propOptions !== 'function') {\n if (propOptions) {\n setOptions(propOptions);\n }\n return;\n }\n\n // propOptions is function, probably loading from web\n void (async () => {\n const r = await propOptions(selectedRows, filter);\n setOptions(r ?? []);\n })();\n }, [filter, options, propOptions, selectedRows]);\n\n // Local filtering.\n useEffect(() => {\n if (props.filtered !== 'local') {\n return;\n }\n if (options == null) {\n setFilteredValues([]);\n return;\n }\n\n setFilteredValues(\n compact(\n options.map((option) => {\n if (option.label != null && typeof option.label !== 'string') {\n console.warn('GridFormDropDown: Cannot filter non-string labels', option);\n return undefined;\n }\n return textMatch((option.label as string) || '', filter) ? option : undefined;\n }),\n ),\n );\n }, [props.filtered, filter, options]);\n\n const reSearchOnFilterChange = useMemo(\n () =>\n debounce(() => {\n setOptions(null);\n }, 500),\n [],\n );\n\n const previousFilter = usePrevious(filter);\n useEffect(() => {\n if (previousFilter != null && previousFilter != filter && props.filtered === 'reload') {\n void reSearchOnFilterChange();\n }\n }, [filter, previousFilter, props.filtered, reSearchOnFilterChange]);\n\n let lastHeader: ReactElement | null = null;\n let showHeader: ReactElement | null = null;\n\n return popoverWrapper(\n <>\n {props.filtered && (\n <div className={'GridFormDropDown-filter'}>\n <FocusableItem\n className={'filter-item'}\n onFocus={() => {\n setSelectedItem(null);\n setSubSelectedValue(null);\n subComponentIsValid.current = true;\n }}\n >\n {({ ref }: any) => (\n <div style={{ display: 'flex', flexDirection: 'column', width: '100%' }}>\n <input\n className={'LuiTextInput-input'}\n ref={ref}\n type=\"text\"\n placeholder={props.filterPlaceholder ?? 'Filter...'}\n data-testid={'filteredMenu-free-text-input'}\n defaultValue={filter}\n data-allowtabtosave={true}\n data-disableenterautosave={\n !props.onSelectFilter &&\n !(filteredValues && filteredValues.length === 1 && !filteredValues[0].subComponent)\n }\n onChange={(e) => setFilter(e.target.value.trim())}\n />\n {props.filterHelpText && isNotEmpty(filter) && (\n <FormError error={null} helpText={props.filterHelpText} />\n )}\n </div>\n )}\n </FocusableItem>\n <MenuDivider key={`$$divider_filter`} />\n {props.topComponent && (\n <div>\n <props.topComponent />\n <MenuDivider key={`$$divider_filter`} />\n </div>\n )}\n </div>\n )}\n <ComponentLoadingWrapper loading={!options} className={'GridFormDropDown-options'}>\n <>\n {options && (isEmpty(options) || (filteredValues && isEmpty(filteredValues))) && (\n <MenuItem\n key={`${fieldToString(field)}-empty`}\n className={'GridPopoverEditDropDown-noOptions'}\n disabled={true}\n >\n {props.noOptionsMessage ?? 'No Options'}\n </MenuItem>\n )}\n {options?.map((item: FinalSelectOption<TOptionValue>, index) => {\n showHeader = null;\n if (item.value === MenuSeparatorString) {\n return <MenuDivider key={`$$divider_${index}`} />;\n } else if (item.value === MenuHeaderString) {\n lastHeader = <MenuHeader key={`$$header_${index}`}>{item.label}</MenuHeader>;\n return <></>;\n } else {\n if (lastHeader) {\n showHeader = lastHeader;\n lastHeader = null;\n }\n }\n return (\n (!filteredValues || filteredValues.includes(item)) && (\n <Fragment key={`${index}`}>\n {showHeader}\n <div key={`menu-wrapper-${index}`}>\n <MenuItem\n key={`${fieldToString(field)}-${index}`}\n disabled={!!item.disabled}\n title={item.disabled && typeof item.disabled !== 'boolean' ? item.disabled : ''}\n value={item.value}\n onFocus={() => {\n if (selectedItem !== item) {\n setSelectedItem(item);\n setSubSelectedValue(null);\n subComponentIsValid.current = true;\n if (item.subComponent) {\n subComponentInitialValue.current = null;\n }\n }\n }}\n onClick={(e: ClickEvent) => {\n e.keepOpen = !!item.subComponent;\n }}\n >\n {item.label ?? (item.value == null ? `<${String(item.value)}>` : `${String(item.value)}`)}\n {item.subComponent ? '...' : ''}\n </MenuItem>\n\n {item.subComponent && selectedItem === item && (\n <FocusableItem className={'LuiDeprecatedForms'} key={`${String(item.label)}_subcomponent`}>\n {() => (\n <GridSubComponentContext.Provider\n value={{\n context: { options },\n data,\n value: subSelectedValue,\n setValue: (value: any) => {\n setSubSelectedValue(value);\n if (subComponentInitialValue.current === null) {\n // copy the default value of the subcomponent, so we can change detect on save\n subComponentInitialValue.current = JSON.stringify(value);\n }\n },\n setValid: (valid: boolean) => {\n subComponentIsValid.current = valid;\n },\n triggerSave: async () => {\n // empty\n },\n }}\n >\n {item.subComponent && (\n <div className={'subComponent'}>\n <item.subComponent />\n </div>\n )}\n </GridSubComponentContext.Provider>\n )}\n </FocusableItem>\n )}\n </div>\n </Fragment>\n )\n );\n })}\n </>\n </ComponentLoadingWrapper>\n </>,\n );\n};\n","import './TextInputFormatted.scss';\n\nimport clsx from 'clsx';\nimport { omit } from 'lodash-es';\nimport { DetailedHTMLProps, InputHTMLAttributes, ReactElement } from 'react';\n\nimport { FormError } from './FormError';\n\nexport interface LuiTextInputProps extends DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> {\n // overrides value in base class to be string type only\n value: string;\n\n // Custom fields\n helpText?: string;\n error?: ReactElement | string | boolean | null;\n formatted?: string;\n allowTabToSave?: boolean;\n}\n\nexport const TextInputFormatted = (props: LuiTextInputProps): ReactElement => {\n return (\n <div\n className={clsx(\n 'LuiTextInput GridLuiTextInput Grid-popoverContainer',\n props.error && 'hasError',\n props.className,\n )}\n >\n <span className=\"LuiTextInput-inputWrapper\">\n {/* wrapper div used for error styling */}\n <input\n type={'text'}\n spellCheck={true}\n defaultValue={props.value}\n {...omit(props, ['error', 'value', 'helpText', 'formatted', 'className', 'allowTabToSave'])}\n className={'LuiTextInput-input'}\n onMouseEnter={(e) => {\n e.currentTarget.focus();\n props.onMouseEnter && props.onMouseEnter(e);\n }}\n data-allowtabtosave={props.allowTabToSave}\n />\n <span className={'LuiTextInput-formatted'}>{props.formatted}</span>\n </span>\n\n <FormError error={props.error} helpText={props.helpText} />\n </div>\n );\n};\n","export const bearingValueFormatter = (value: any): string => {\n const safeValue = typeof value === 'string' ? parseFloat(value) : value;\n if (safeValue == null) {\n return '–';\n }\n return convertDDToDMS(safeValue, false);\n};\n\nexport const bearingCorrectionValueFormatter = (value: any): string => {\n const safeValue = value;\n if (safeValue == null) {\n return '–';\n }\n if (typeof safeValue === 'string') {\n return convertDDToDMS(bearingNumberParser(safeValue), true, 4);\n }\n return convertDDToDMS(safeValue, true, 4);\n};\n\nexport const bearingNumberParser = (value: string): number | null => {\n if (value === '') return null;\n return parseFloat(value);\n};\n\nconst validMaskForDmsBearing = /^((-)?\\d+)?(\\.([0-5](\\d([0-5](\\d(\\d+)?)?)?)?)?)?$/;\nexport const bearingStringValidator = (\n value: string,\n customInvalid?: (value: number | null) => string | null,\n): string | null => {\n value = value.trim();\n if (value === '') return null;\n const match = value.match(validMaskForDmsBearing);\n if (!match) return 'Bearing must be a number in D.MMSSS format';\n const decimalPart = match[4];\n if (decimalPart != null && decimalPart.length > 5) {\n return 'Bearing has a maximum of 5 decimal places';\n }\n\n const bearing = parseFloat(value);\n return customInvalid ? customInvalid(bearing) : null;\n};\n\n/**\n *Decimal-ish degrees to Degrees Minutes Seconds converter\n *\n * @param dd Decimal-ish degrees\n * @param showPositiveSymbol whether the + sign appears before the number\n * @param trailingZeroDp 2 | 4 | 5\n * Example:\n * 2 = 300° 00'\n * 4 = 300° 00' 00\"\n * 5 = 300° 00' 00.0\"\n * @returns Degrees Minutes Seconds\n */\nexport const convertDDToDMS = (dd: number | null, showPositiveSymbol = true, trailingZeroDp: 2 | 4 | 5 = 2): string => {\n if (dd == null) return '–';\n\n // toFixed rounds parts up greater than 60, which has to be corrected below\n const [bearingWholeString, bearingDecimalString] = dd.toFixed(5).split('.');\n\n let bearingWhole = Math.abs(parseInt(bearingWholeString));\n let minNumeric = parseInt(bearingDecimalString?.substring(0, 2));\n let secNumeric = parseInt(bearingDecimalString?.substring(2, 4));\n\n // If the toFixed caused rounding beyond 60 minutes/seconds then apply the carry\n if (secNumeric >= 60) {\n minNumeric++;\n secNumeric -= 60;\n }\n if (minNumeric >= 60) {\n bearingWhole++;\n minNumeric -= 60;\n }\n if (bearingWhole >= 360) {\n bearingWhole -= 360;\n }\n\n const minString = minNumeric.toString().padStart(2, '0');\n const secString = secNumeric.toString().padStart(2, '0');\n const deciSecString = bearingDecimalString?.substring(4, 5);\n\n let dmsString = `${showPositiveSymbol && dd > 0 ? '+' : ''}${dd < 0 ? '-' : ''}${bearingWhole}°`;\n if (trailingZeroDp === 5 || deciSecString != '0') {\n dmsString += `\\xa0${minString}'\\xa0${secString}.${deciSecString}\"`; // \"\\xa0\" is here for non-breaking space\n } else if (trailingZeroDp === 4 || secNumeric != 0) {\n dmsString += `\\xa0${minString}'\\xa0${secString}\"`;\n } else {\n dmsString += `\\xa0${minString}'`;\n }\n return dmsString;\n};\n\nexport const bearingRangeValidator = (value: number | null) => {\n if (value === null) return 'Bearing is required';\n if (value >= 360) return 'Bearing must be less than 360 degrees';\n if (value < 0) return 'Bearing must not be negative';\n return null;\n};\n\nexport const bearingCorrectionRangeValidator = (value: number | null) => {\n if (value === null) return 'Bearing correction is required';\n if (value >= 360) return 'Bearing correction must be less than 360 degrees';\n if (value <= -180) return 'Bearing correction must be greater then -180 degrees';\n return null;\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { TextInputFormatted } from '../../lui/TextInputFormatted';\nimport { bearingNumberParser, bearingStringValidator } from '../../utils/bearing';\nimport { 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) {\n return true;\n }\n\n // Any changes to save?\n if (initialValues === JSON.stringify(options)) {\n return true;\n }\n\n return props.onSave({\n selectedRows,\n selectedOptions: options.filter((o) => o.checked),\n });\n },\n [initialValues, options, props],\n );\n\n // Load up options list if it's async function\n useEffect(() => {\n if (options || optionsInitialising.current) return;\n optionsInitialising.current = true;\n\n void (async () => {\n const optionsList = typeof props.options === 'function' ? await props.options(selectedRows) : props.options;\n setInitialValues(JSON.stringify(optionsList));\n setOptions(optionsList);\n optionsInitialising.current = false;\n })();\n }, [options, props, selectedRows]);\n\n /**\n * Groups options into their header groups\n */\n const headerGroups = useMemo(() => {\n if (!options) return undefined;\n const result = groupBy(\n options.filter((o) => textMatch(o.label, filter) && o.value != null),\n 'filter',\n );\n // remove leading/trailing/duplicate dividers\n return fromPairs(\n toPairs(result).map(([key, arr]) => {\n let lastWasDivider = true;\n return [\n key,\n arr\n .map((row, index) => {\n if (row.value === MenuSeparatorString) {\n if (lastWasDivider) return null;\n if (index === arr.length - 1) return null;\n lastWasDivider = true;\n } else {\n lastWasDivider = false;\n }\n return row;\n })\n .filter((r) => r),\n ];\n }),\n ) as HeaderGroupType;\n }, [filter, options]);\n\n const headers: GridFormMultiSelectGroup[] = useMemo(() => props.headers ?? [{ header: '' }], [props.headers]);\n\n const { popoverWrapper, triggerSave } = useGridPopoverHook({\n className: props.className,\n invalid,\n save,\n });\n\n return popoverWrapper(\n <ComponentLoadingWrapper loading={!options} className={'GridFormMultiSelect-container'}>\n {options && (\n <>\n {props.filtered && (\n <FilterInput\n {...{ headerGroups, options, setOptions, filter, setFilter, triggerSave }}\n filterHelpText={props.filterHelpText}\n onSelectFilter={props.onSelectFilter}\n filterPlaceholder={props.filterPlaceholder}\n />\n )}\n {headerGroups &&\n (isEmpty(headerGroups) || !toPairs(headerGroups).some(([_, options]) => !isEmpty(options))) && (\n <MenuItem key={'noOptions'} className={'GridMultiSelect-noOptions'} disabled={true}>\n {props.noOptionsMessage ?? 'No Options'}\n </MenuItem>\n )}\n {headerGroups && !isEmpty(headerGroups) && (\n <div className={'GridFormMultiSelect-options'}>\n {headers.map((header, index) => {\n const subOptions = headerGroups[`${header.filter}`];\n return (\n !isEmpty(subOptions) && (\n <Fragment key={`group_${index}`}>\n {header.header && <MenuHeader>{header.header}</MenuHeader>}\n {subOptions.map((item, index) =>\n item.value === MenuSeparatorString ? (\n <MenuDivider key={`div_${index}`} />\n ) : (\n <Fragment key={`val_${item.value}`}>\n <MenuRadioItem\n item={item}\n options={options}\n setOptions={setOptions}\n onChecked={() => {\n // Default to focus on first input in subComponent\n defer(() => {\n firstInputSubComponent.current?.focus();\n });\n }}\n />\n {item.checked && item.subComponent && (\n <MenuSubComponent\n {...{ item, options, setOptions, data, triggerSave }}\n ref={firstInputSubComponent}\n subComponentIsValid={subComponentIsValidRef.current}\n />\n )}\n </Fragment>\n ),\n )}\n </Fragment>\n )\n );\n })}\n </div>\n )}\n </>\n )}\n </ComponentLoadingWrapper>,\n );\n};\n\nconst FilterInput = (props: {\n options: MultiSelectOption[];\n setOptions: (options: MultiSelectOption[]) => void;\n onSelectFilter?: (props: { filter: string; options: MultiSelectOption[] }) => void;\n filter: string;\n setFilter: Dispatch<SetStateAction<string>>;\n headerGroups: HeaderGroupType;\n filterPlaceholder?: string;\n filterHelpText?: string | ((filter: string, options: MultiSelectOption[]) => string | undefined);\n triggerSave: () => Promise<void>;\n}) => {\n const {\n options,\n setOptions,\n onSelectFilter,\n filter,\n setFilter,\n headerGroups,\n filterPlaceholder,\n filterHelpText,\n triggerSave,\n } = props;\n\n const enterHasBeenPressed = useRef(false);\n const lastKeyWasEnter = useRef(false);\n\n const toggleSelectAllVisible = useCallback(() => {\n if (!options || !headerGroups) return;\n\n if (isEmpty(filter.trim())) {\n // Toggle off if any items are checked otherwise on\n const anyChecked = options.some((o) => o.checked);\n options.forEach((o) => {\n if (o.label !== undefined) o.checked = !anyChecked;\n });\n } else {\n // Toggle on if any filtered items are checked otherwise off\n const anyChecked = Object.values(headerGroups).some((headerOptions) =>\n headerOptions.some((o) => o.checked === false),\n );\n Object.values(headerGroups).forEach((headerOptions) => {\n headerOptions.forEach((o) => {\n if (o.label !== undefined) o.checked = anyChecked;\n });\n });\n }\n setOptions([...options]);\n }, [filter, headerGroups, options, setOptions]);\n\n const addCustomFilterValue = useCallback(() => {\n if (!options || !onSelectFilter) {\n return;\n }\n\n const filterTrimmed = filter.trim();\n if (isEmpty(filterTrimmed)) {\n void triggerSave();\n return;\n }\n\n const preFilterOptions = JSON.stringify(options);\n onSelectFilter({ filter: filterTrimmed, options });\n // Detect if options list changed and update\n if (preFilterOptions === JSON.stringify(options)) {\n return;\n }\n\n setOptions([...options]);\n setFilter('');\n }, [filter, onSelectFilter, options, setFilter, setOptions, triggerSave]);\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n enterHasBeenPressed.current = true;\n }\n }, []);\n\n const handleKeyUp = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n\n if (e.ctrlKey) toggleSelectAllVisible();\n else if (enterHasBeenPressed.current) {\n const filterTrimmed = filter.trim();\n if (isEmpty(filterTrimmed)) {\n void triggerSave();\n return;\n }\n onSelectFilter && addCustomFilterValue();\n }\n lastKeyWasEnter.current = true;\n } else if (e.key === 'Control') {\n lastKeyWasEnter.current && setFilter('');\n lastKeyWasEnter.current = false;\n } else {\n lastKeyWasEnter.current = false;\n }\n },\n [addCustomFilterValue, filter, onSelectFilter, setFilter, toggleSelectAllVisible, triggerSave],\n );\n\n return (\n <>\n <FocusableItem className={'filter-item'} key={'filter'}>\n {(_: any) => (\n <div style={{ width: '100%' }} className={'GridFormMultiSelect-filter'}>\n <input\n className={'LuiTextInput-input'}\n type=\"text\"\n placeholder={filterPlaceholder ?? 'Filter...'}\n data-testid={'filteredMenu-free-text-input'}\n value={filter}\n data-disableenterautosave={true}\n data-allowtabtosave={true}\n onChange={(e) => setFilter(e.target.value)}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n />\n {filterHelpText && (\n <FormError\n error={null}\n helpText={\n typeof filterHelpText === 'function' ? filterHelpText(filter.trim(), options) : filterHelpText\n }\n />\n )}\n </div>\n )}\n </FocusableItem>\n <MenuDivider key={`$$divider_filter`} />\n </>\n );\n};\n\nconst MenuRadioItem = (props: {\n item: MultiSelectOption;\n options: MultiSelectOption[];\n setOptions: (options: MultiSelectOption[]) => void;\n onChecked?: () => void;\n}) => {\n const { item, options, setOptions } = props;\n\n const toggleValue = useCallback(\n (item: MultiSelectOption) => {\n item.checked = !item.checked;\n setOptions([...options]);\n },\n [options, setOptions],\n );\n\n return (\n <MenuItem\n onClick={(e: ClickEvent) => {\n // Global react-menu MenuItem handler handles tabs\n if (e.key !== 'Tab' && e.key !== 'Enter') {\n e.keepOpen = true;\n toggleValue(item);\n }\n item.checked && props.onChecked && props.onChecked();\n }}\n >\n <LuiCheckboxInput\n isChecked={item.checked ?? false}\n value={`${item.value}`}\n label={\n <>\n {item.warning && <GridIcon icon={'ic_warning_outline'} title={item.warning} />}\n {item.label ?? (item.value == null ? `<${item.value}>` : `${item.value}`)}\n </>\n }\n inputProps={{\n onClick: (e) => {\n // Click is handled by MenuItem onClick\n e.preventDefault();\n e.stopPropagation();\n },\n }}\n onChange={() => {\n /*Do nothing, change handled by menuItem*/\n }}\n />\n </MenuItem>\n );\n};\n\nconst MenuSubComponent = React.forwardRef(MenuSubComponentFr);\n\nfunction MenuSubComponentFr(\n props: {\n data: any;\n item: MultiSelectOption;\n options: MultiSelectOption[];\n setOptions: (options: MultiSelectOption[]) => void;\n subComponentIsValid: Record<string, boolean>;\n triggerSave: () => Promise<void>;\n },\n ref: ForwardedRef<HTMLInputElement>,\n) {\n const { data, item, options, setOptions, subComponentIsValid, triggerSave } = props;\n const focusableRef = React.useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (focusableRef.current) {\n const firstInputElement = focusableRef.current.querySelectorAll('input')[0] ?? null;\n if (typeof ref === 'function') {\n ref(firstInputElement);\n } else if (ref) {\n ref.current = firstInputElement;\n }\n }\n }, [ref]);\n\n return (\n <FocusableItem className={'LuiDeprecatedForms'} key={`${item.value}_subcomponent`} ref={focusableRef}>\n {() => (\n <GridSubComponentContext.Provider\n value={{\n context: { options },\n data,\n value: item.subValue,\n setValue: (value: any) => {\n item.subValue = value;\n setOptions([...options]);\n },\n setValid: (valid: boolean) => {\n subComponentIsValid[`${item.value}`] = valid;\n },\n triggerSave,\n }}\n >\n <div className={'subComponent'}>{item.subComponent && <item.subComponent />}</div>\n </GridSubComponentContext.Provider>\n )}\n </FocusableItem>\n );\n}\n","import { LuiCheckboxInput } from '@linzjs/lui';\nimport { isEqual } from 'lodash-es';\nimport { ReactElement, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useGridPopoverContext } from '../../contexts/GridPopoverContext';\nimport { MenuItem } from '../../react-menu3';\nimport { ClickEvent } from '../../react-menu3/types';\nimport { 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()) {\n return false;\n }\n\n const trimmedValue = value.trim();\n // No change, so don't save\n if (initValue === trimmedValue) {\n return true;\n }\n\n if (props.onSave) {\n return await props.onSave({ selectedRows, value: trimmedValue });\n }\n\n selectedRows.forEach((row) => (row[field] = trimmedValue as any));\n return true;\n },\n [invalid, value, initValue, props, field],\n );\n const { popoverWrapper } = useGridPopoverHook({\n className: props.className,\n invalid,\n save,\n });\n\n return popoverWrapper(\n <div style={{ display: 'flex', flexDirection: 'row' }} className={'FormTest subComponent'}>\n <TextInputFormatted\n value={value}\n onChange={(e) => setValue(e.target.value)}\n error={invalid()}\n formatted={props.units}\n style={{ width: props.width ?? 240 }}\n placeholder={props.placeholder ?? 'Type here'}\n helpText={helpText}\n />\n </div>,\n );\n};\n","import { LuiButton, LuiIcon } from '@linzjs/lui';\nimport { CellFocusedEvent, ICellEditorParams, ICellRendererParams } from 'ag-grid-community';\nimport { useEffect, useRef } from 'react';\n\nimport { 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 preventAutoEdit: true,\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 clsx from 'clsx';\nimport { forwardRef, PropsWithChildren } from 'react';\n\nexport interface GridWrapperProps {\n className?: string | undefined;\n maxHeight?: number | string;\n}\n\nexport const GridWrapper = forwardRef<HTMLDivElement, PropsWithChildren<GridWrapperProps>>(function GridWrapperFr(\n { children, maxHeight, className },\n ref,\n) {\n return (\n <div className={clsx('Grid-wrapper', className)} style={{ maxHeight }} ref={ref}>\n {children}\n </div>\n );\n});\n","import { ColDef } from 'ag-grid-community';\n\nimport { isGridCellFiller } from './GridCellFiller';\n\nexport const getColId = (colDef: ColDef): string => colDef.colId ?? '';\nexport const isFlexColumn = (colDef: ColDef): boolean => !!colDef.flex && !isGridCellFiller(colDef);\n","import { wait } from '../utils/util';\n\nexport const waitForCondition = async (\n error: string,\n condition: () => boolean,\n timeoutMs: number,\n): Promise<boolean> => {\n const endTime = Date.now() + timeoutMs;\n while (Date.now() < endTime) {\n if (condition()) {\n return true;\n }\n await wait(100);\n }\n console.warn(error);\n return false;\n};\n","import {\n CellPosition,\n ColDef,\n ColumnState,\n CsvExportParams,\n GridApi,\n IRowNode,\n ISizeColumnsToFitParams,\n ProcessCellForExportParams,\n RowNode,\n} from 'ag-grid-community';\nimport debounce from 'debounce-promise';\nimport { compact, defer, delay, difference, filter, isEmpty, last, pull, remove, sortBy, sumBy } from 'lodash-es';\nimport { PropsWithChildren, ReactElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { ColDefT, GridBaseRow } from '../components';\nimport { GridCellFillerColId, isGridCellFiller } from '../components/GridCellFiller';\nimport { getColId, isFlexColumn } from '../components/gridUtil';\nimport { fnOrVar, isNotEmpty, sanitiseFileName, wait } from '../utils/util';\nimport { waitForCondition } from '../utils/waitForCondition';\nimport { AutoSizeColumnsProps, AutoSizeColumnsResult, GridContext, GridFilterExternal } from './GridContext';\nimport { GridUpdatingContext } from './GridUpdatingContext';\n\nexport const colStateId = (colState: ColumnState) => colState.colId;\nexport const colStateFlexed = (colState: ColumnState) => !!colState.flex;\nexport const colStateNotFlexed = (colState: ColumnState) => !colState.flex;\n\n/**\n * Context for AgGrid operations.\n * Make sure you wrap AgGrid in this.\n * Also, make sure the provider is created in a separate component, otherwise it won't be found.\n */\nexport const GridContextProvider = <TData extends GridBaseRow>(props: PropsWithChildren): ReactElement => {\n const { modifyUpdating, anyUpdating } = useContext(GridUpdatingContext);\n const [gridApi, setGridApi] = useState<GridApi>();\n const [gridReady, setGridReady] = useState(false);\n const [quickFilter, _setQuickFilter] = useState('');\n const [invisibleColumnIds, _setInvisibleColumnIds] = useState<string[]>();\n const testId = useRef<string | undefined>();\n const hasExternallySelectedItemsRef = useRef(false);\n const idsBeforeUpdate = useRef<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 = useCallback(\n (invisibleColumnIds: string[]) => _setInvisibleColumnIds(pull(invisibleColumnIds, GridCellFillerColId)),\n [],\n );\n\n /**\n * Set quick filter directly on grid, based on previously save quickFilter state.\n */\n useEffect(() => {\n gridApi?.setGridOption('quickFilterText', quickFilter);\n }, [gridApi, quickFilter]);\n\n /**\n * Wraps things that require gridApi in common handling, for when gridApi not present.\n *\n * @param hasApiFn Execute when api is ready.\n * @param noApiFn Execute if api is not ready.\n */\n const gridApiOp = useCallback(\n <T, R>(hasApiFn: (gridApi: GridApi) => T, noApiFn?: () => R): T | R => {\n if (!noApiFn) {\n noApiFn = (() => {}) as () => R;\n }\n return gridApi && !gridApi.isDestroyed() ? hasApiFn(gridApi) : noApiFn();\n },\n [gridApi],\n );\n\n /**\n * Scroll row into view by Id.\n *\n * @param id Id to scroll into view\n * @return true if row is found, else false\n */\n const ensureRowVisible = useCallback(\n (id: number | string): boolean => {\n if (!gridApi) return false;\n const node = gridApi.getRowNode(`${id}`);\n if (!node) return false;\n defer(() => !gridApi.isDestroyed() && gridApi.ensureNodeVisible(node));\n return true;\n },\n [gridApi],\n );\n\n const getFirstRowId = useCallback((): number => {\n let id = 0;\n try {\n gridApi?.forEachNodeAfterFilterAndSort((rowNode) => {\n id = parseInt(rowNode.id ?? '0');\n // this is the only way to get out of the loop\n throw 'expected exception - exit_loop';\n });\n } catch (ex) {\n // ignore\n }\n return id;\n }, [gridApi]);\n\n /**\n * Set the grid api when the grid is ready.\n */\n const setApis = useCallback(\n (gridApi: GridApi | undefined, hasExternallySelectedItems: boolean, dataTestId?: string) => {\n hasExternallySelectedItemsRef.current = hasExternallySelectedItems;\n testId.current = dataTestId;\n setGridApi(gridApi);\n gridApi?.setGridOption('quickFilterText', quickFilter);\n setGridReady(!!gridApi);\n },\n [quickFilter],\n );\n\n /**\n * Used to check if it's OK to autosize.\n */\n const gridRenderState = useCallback((): null | 'empty' | 'rows-visible' => {\n if (!gridApi) return null;\n if (!gridApi.getDisplayedRowCount()) return 'empty';\n if (!isEmpty(gridApi.getRenderedNodes())) return 'rows-visible';\n // If there are rows to render, but there are no rendered nodes then we should wait\n return null;\n }, [gridApi]);\n\n /**\n * Expose scrollRowIntoView for playwright tests.\n */\n useEffect(() => {\n const globalSupport = (window as any).__stepAgGrid || ((window as any).__stepAgGrid = { grids: {} });\n if (testId.current) {\n globalSupport.grids[testId.current] = {\n scrollRowIntoViewById: (rowId: number | string) => {\n if (!ensureRowVisible(rowId)) {\n throw `scrollRowIntoView failed on grid '${testId.current}' as row with id: '${rowId}' was not found`;\n }\n },\n };\n }\n }, [ensureRowVisible]);\n\n /**\n * Before a popup record the currently focused cell.\n */\n const prePopupOps = useCallback(() => {\n if (!gridApi || gridApi.isDestroyed()) {\n return;\n }\n prePopupFocusedCell.current = gridApi.getFocusedCell() ?? undefined;\n }, [gridApi]);\n\n /**\n * Get all row id's in grid.\n */\n const _getAllRowIds = useCallback(() => {\n const result: 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 * This is used to calculate the preferred size of columns.\n * It sizes the flex columns first and then clears the calculated width.\n * If you don't clear flex column widths ag-grid gets confused and does random sizing's.\n * Then we size the flexed columns.\n */\n const autoSizeColumns = useCallback(\n ({ skipHeader, colIds, userSizedColIds }: AutoSizeColumnsProps = {}): AutoSizeColumnsResult => {\n if (!gridApi || !gridApi.getColumnState()) {\n return null;\n }\n const colIdsSet = colIds instanceof Set ? colIds : new Set(colIds);\n\n const getVisibleColStates = () => {\n const colStates = gridApi.getColumnState();\n return colStates.filter((colState) => {\n const colId = colState.colId;\n return (isEmpty(colIdsSet) || colIdsSet.has(colId)) && !userSizedColIds?.has(colId);\n });\n };\n const getFlexColStates = () => getVisibleColStates().filter(colStateFlexed);\n const getNonFlexColStates = () => getVisibleColStates().filter(colStateNotFlexed);\n\n // If we don't reset the flex columns auto size it causes issues with random resizing of flex columns\n let flexColumns = getFlexColStates();\n let width = 0;\n if (!isEmpty(flexColumns)) {\n gridApi.autoSizeColumns(flexColumns.map(colStateId), skipHeader);\n const flexColumnIds = flexColumns.map(colStateId);\n flexColumns = getVisibleColStates().filter((colState) => flexColumnIds.includes(colState.colId));\n width += sumBy(\n flexColumns.filter((col) => !col.hide),\n 'width',\n );\n gridApi.resetColumnState();\n }\n\n let nonFlexColumns = getNonFlexColStates();\n if (!isEmpty(nonFlexColumns)) {\n gridApi.autoSizeColumns(nonFlexColumns.map(colStateId), skipHeader);\n const nonFlexColumnIds = nonFlexColumns.map(colStateId);\n nonFlexColumns = getVisibleColStates().filter((colState) => nonFlexColumnIds.includes(colState.colId));\n width += sumBy(\n nonFlexColumns.filter((col) => !col.hide),\n 'width',\n );\n }\n\n return {\n width,\n };\n },\n [gridApi],\n );\n\n /**\n * Resize columns to fit container\n */\n const sizeColumnsToFit = useCallback(\n (paramsOrGridWidth?: ISizeColumnsToFitParams): void => {\n if (gridApi && !gridApi?.isDestroyed()) {\n gridApi.sizeColumnsToFit(paramsOrGridWidth);\n }\n },\n [gridApi],\n );\n\n /**\n *\n */\n const resetFocusedCellAfterCellEditing = useCallback((): void => {\n if (!gridApi || gridApi.isDestroyed() || startCellEditingInProgressRef.current) {\n return;\n }\n if (prePopupFocusedCell.current) {\n gridApi.setFocusedCell(prePopupFocusedCell.current.rowIndex, prePopupFocusedCell.current.column);\n prePopupFocusedCell.current = undefined;\n }\n }, [gridApi]);\n\n // waitForExternallySelectedItemsToBeInSync can't use the state as it won't be updated during function execution\n const externallySelectedItemsAreInSyncRef = useRef(false);\n useEffect(() => {\n externallySelectedItemsAreInSyncRef.current = externallySelectedItemsAreInSync;\n }, [externallySelectedItemsAreInSync]);\n\n const waitForExternallySelectedItemsToBeInSync = useCallback(async () => {\n if (!hasExternallySelectedItemsRef.current) {\n externallySelectedItemsAreInSyncRef.current = true;\n return;\n }\n // Wait for up to 5 seconds\n for (let i = 0; i < 5000 / 200 && !externallySelectedItemsAreInSyncRef.current; i++) {\n await wait(200);\n }\n if (!externallySelectedItemsAreInSyncRef.current) {\n console.error('externallySelectedItems did not sync with ag-grid selection');\n }\n }, []);\n\n const startCellEditingInProgressRef = useRef(false);\n const startCellEditing = useCallback(\n async ({ rowId, colId }: { rowId: number; colId: string }) => {\n if (!gridApi || startCellEditingInProgressRef.current) {\n return;\n }\n startCellEditingInProgressRef.current = true;\n\n try {\n // Edit in progress so don't edit until finished, timeout waiting after 5s\n if (\n !(await waitForCondition(\n 'startCellEditing failed as update still in progress, waited for 15 seconds',\n () => !anyUpdating(),\n 15000,\n ))\n ) {\n return;\n }\n\n const colDef = gridApi.getColumnDef(colId);\n if (!colDef) {\n return;\n }\n\n const rowNode = gridApi.getRowNode(`${rowId}`);\n if (!rowNode) {\n return;\n }\n\n prePopupOps();\n const shouldSelectNode = !rowNode.isSelected();\n if (shouldSelectNode) {\n externallySelectedItemsAreInSyncRef.current = false;\n setExternallySelectedItemsAreInSync(false);\n rowNode.setSelected(true, true);\n await waitForExternallySelectedItemsToBeInSync();\n }\n\n const rowIndex = rowNode.rowIndex;\n if (rowIndex != null) {\n defer(() => {\n if (!gridApi.isDestroyed()) {\n gridApi.startEditingCell({\n rowIndex,\n colKey: colId,\n });\n }\n });\n }\n } finally {\n startCellEditingInProgressRef.current = false;\n }\n },\n [anyUpdating, gridApi, prePopupOps, waitForExternallySelectedItemsToBeInSync],\n );\n\n const bulkEditingCompleteCallbackRef = useRef<() => Promise<void> | void>();\n const onBulkEditingComplete = useCallback(async () => {\n resetFocusedCellAfterCellEditing();\n await bulkEditingCompleteCallbackRef.current?.();\n }, [resetFocusedCellAfterCellEditing]);\n\n const setOnBulkEditingComplete = useCallback(\n (cellEditingCompleteCallback: (() => Promise<void> | void) | undefined) => {\n bulkEditingCompleteCallbackRef.current = cellEditingCompleteCallback;\n },\n [],\n );\n\n /**\n * Returns true if an editable cell on same row was selected, else false.\n */\n const selectNextEditableCell = useCallback(\n async (tabDirection: -1 | 1): Promise<boolean> => {\n // Pretend it succeeded to prevent unwanted cellEditingCompleteCallback\n if (!gridApi) {\n return true;\n }\n\n const focusedCellIsEditable = () => {\n const focusedCell = gridApi.isDestroyed() ? null : gridApi.getFocusedCell();\n const nextColumn = focusedCell?.column;\n const nextColDef = nextColumn?.getColDef();\n const rowNode = focusedCell && gridApi.getDisplayedRowAtIndex(focusedCell?.rowIndex);\n return (\n !!(rowNode && nextColumn && nextColDef) &&\n nextColumn.isCellEditable(rowNode) &&\n !nextColDef.cellEditorParams?.preventAutoEdit &&\n !nextColDef.cellRendererParams?.editAction\n );\n };\n\n // Just in case I've missed something, we don't want the loop to hang everything\n for (let maxIterations = 0; maxIterations < 50; maxIterations++) {\n if (gridApi.isDestroyed()) {\n return true;\n }\n // Prevent resetting focus to original editing cell\n prePopupFocusedCell.current = undefined;\n\n const preRow = gridApi.getFocusedCell();\n // If we don't do this ag-grid will do its own continuation of an edit on tab, we don't want that as\n // we are managing it ourselves\n const didTab = tabDirection === 1 ? gridApi.tabToNextCell() : gridApi.tabToPreviousCell();\n if (!didTab) {\n break;\n }\n\n if (gridApi.isDestroyed()) {\n return true;\n }\n const postRow = gridApi.getFocusedCell();\n if (preRow?.rowIndex !== postRow?.rowIndex || preRow?.column === postRow?.column) {\n // We didn't find an editable cell in the same row, or the cell column didn't change\n // implying it was start/end of grid\n break;\n }\n\n if (focusedCellIsEditable()) {\n const focusedCell = gridApi.getFocusedCell();\n if (focusedCell) {\n const rowNode = gridApi.getDisplayedRowAtIndex(focusedCell.rowIndex);\n const rowId = rowNode?.data?.id;\n if (rowId == null) {\n return false;\n }\n await startCellEditing({ rowId, colId: focusedCell.column.getColId() });\n return true;\n }\n }\n }\n return false;\n },\n [gridApi, startCellEditing],\n );\n\n const updatingCells = useCallback(\n async (\n props: { selectedRows: GridBaseRow[]; field?: string },\n fnUpdate: (selectedRows: any[]) => Promise<boolean>,\n setSaving?: (saving: boolean) => void,\n tabDirection?: 1 | 0 | -1,\n ): Promise<boolean> => {\n try {\n setSaving?.(true);\n\n return await gridApiOp(async (gridApi) => {\n const selectedRows = props.selectedRows;\n\n let ok = false;\n\n await modifyUpdating(\n props.field ?? '',\n selectedRows.map((data) => data.id),\n async () => {\n // Need to refresh to get spinners to work on all rows\n gridApi.refreshCells({ rowNodes: props.selectedRows as RowNode[], force: true });\n ok = await fnUpdate(selectedRows).catch((ex) => {\n console.error('Exception during modifyUpdating', ex);\n return false;\n });\n },\n );\n\n // async processes need to refresh their own rows\n gridApi.refreshCells({ rowNodes: selectedRows as RowNode[], force: true });\n\n if (gridApi.isDestroyed()) {\n return ok;\n }\n\n if (ok) {\n //const cell = gridApi.getFocusedCell();\n //if (cell && gridApi.getFocusedCell() == null) {\n // !gridApi.isDestroyed && gridApi.setFocusedCell(cell.rowIndex, cell.column);\n // }\n\n // This is needed to trigger postSortRowsHook\n !gridApi.isDestroyed && gridApi.refreshClientSideRowModel();\n }\n\n void (async () => {\n // Only focus next cell if user hasn't already manually changed focus\n const postPopupFocusedCell = gridApi.getFocusedCell();\n if (\n prePopupFocusedCell.current &&\n postPopupFocusedCell &&\n prePopupFocusedCell.current.rowIndex == postPopupFocusedCell.rowIndex &&\n prePopupFocusedCell.current.column.getColId() == postPopupFocusedCell.column.getColId()\n ) {\n if (!tabDirection || !(await selectNextEditableCell(tabDirection))) {\n await onBulkEditingComplete();\n }\n } else {\n await onBulkEditingComplete();\n }\n })();\n\n return ok;\n });\n } finally {\n setSaving?.(false);\n }\n },\n [gridApiOp, modifyUpdating, onBulkEditingComplete, selectNextEditableCell],\n );\n\n const redrawRows: any = useMemo(\n () =>\n debounce((rowNodes?: IRowNode[]) => {\n try {\n gridApi && gridApi.redrawRows(rowNodes ? { rowNodes } : undefined);\n } catch (ex) {\n console.error(ex);\n }\n }, 50),\n [gridApi],\n );\n\n const onFilterChanged = useMemo(\n () =>\n debounce(() => {\n if (!gridApi || gridApi?.isDestroyed()) {\n return;\n }\n // This is terrible, but there's no other way for me to check whether a filter has changed the grid\n const getDisplayedRowsHash = () => {\n const arr: any[] = [];\n gridApi?.forEachNodeAfterFilter((rowNode) => {\n arr.push(rowNode.id);\n });\n return arr.join('|');\n };\n\n if (gridApi) {\n const hasFocusedCell = gridApi.getFocusedCell();\n const preHash = hasFocusedCell && getDisplayedRowsHash();\n gridApi.onFilterChanged();\n const postHash = hasFocusedCell && getDisplayedRowsHash();\n // Ag-grid has a bug where if a focused cell comes into view after a filter the filter loses focus\n // So the focus is cleared to prevent this\n preHash !== postHash && gridApi.clearFocusedCell();\n }\n }, 200),\n [gridApi],\n );\n\n const addExternalFilter = useCallback(\n (filter: GridFilterExternal<TData>) => {\n externalFilters.current.push(filter);\n void onFilterChanged();\n },\n [onFilterChanged],\n );\n\n const removeExternalFilter = useCallback(\n (filter: GridFilterExternal<TData>) => {\n remove(externalFilters.current, (v) => v === filter);\n void onFilterChanged();\n },\n [onFilterChanged],\n );\n\n const isExternalFilterPresent = useCallback((): boolean => !isEmpty(externalFilters.current), []);\n\n const doesExternalFilterPass = useCallback(\n (node: IRowNode): boolean => externalFilters.current.every((filter) => filter(node.data, node)),\n [],\n );\n\n const getColDef = useCallback(\n (colId?: string): ColDef | undefined => (!!colId && gridApi?.getColumnDef(colId)) || undefined,\n [gridApi],\n );\n\n const showNoRowsOverlay = useCallback((): void => {\n gridApi?.showNoRowsOverlay();\n }, [gridApi]);\n\n /**\n * Apply column visibility\n */\n useEffect(() => {\n if (!gridApi || !invisibleColumnIds) return;\n\n // show all columns that aren't invisible\n const newVisibleColumns = getColumns(\n (col) => !col.lockVisible && col.colId && !invisibleColumnIds.includes(col.colId) && !isGridCellFiller(col),\n );\n // If there's no flex column showing add the filler column if defined\n const visibleColumnsContainsAFlex = newVisibleColumns.some(isFlexColumn);\n if (!visibleColumnsContainsAFlex) {\n const fillerColumn = getColumns(isGridCellFiller)[0];\n fillerColumn && newVisibleColumns.push(fillerColumn);\n }\n gridApi.setColumnsVisible(compact(newVisibleColumns.map(getColId)), true);\n\n // Hide the filler column if there's already a flex column\n const invisibleColumnIdsWithOptionalFiller = visibleColumnsContainsAFlex\n ? [...invisibleColumnIds, GridCellFillerColId]\n : invisibleColumnIds;\n gridApi.setColumnsVisible(invisibleColumnIdsWithOptionalFiller, false);\n }, [invisibleColumnIds, getColumns, gridApi]);\n\n /**\n * Download visible columns as a CSV\n */\n const downloadCsv = useCallback(\n (csvExportParams?: CsvExportParams) => {\n if (!gridApi) return;\n\n const fileName = csvExportParams?.fileName && sanitiseFileName(fnOrVar(csvExportParams.fileName));\n\n const columnKeys = gridApi\n .getColumnState()\n .filter((cs) => {\n const colDef = gridApi.getColumnDef(cs.colId);\n return !cs.hide && colDef && !isGridCellFiller(colDef) && colDef.headerComponentParams?.exportable !== false;\n })\n .map((cs) => cs.colId);\n gridApi.exportDataAsCsv({\n columnKeys,\n processCellCallback: downloadCsvUseValueFormattersProcessCellCallback,\n ...csvExportParams,\n fileName,\n });\n },\n [gridApi],\n );\n\n return (\n <GridContext.Provider\n value={{\n gridRenderState,\n getColDef,\n getColumns,\n getColumnIds,\n invisibleColumnIds,\n setInvisibleColumnIds,\n gridReady,\n prePopupOps,\n setApis,\n setQuickFilter,\n selectRowsById,\n selectRowsDiff,\n selectRowsByIdWithFlash,\n selectRowsWithFlashDiff,\n flashRows,\n flashRowsDiff,\n focusByRowById,\n getSelectedRows,\n getFilteredSelectedRows,\n getSelectedRowIds,\n getFilteredSelectedRowIds,\n getFirstRowId,\n editingCells,\n ensureRowVisible,\n ensureSelectedRowIsVisible,\n sizeColumnsToFit,\n autoSizeColumns,\n startCellEditing,\n resetFocusedCellAfterCellEditing,\n updatingCells,\n redrawRows,\n externallySelectedItemsAreInSync,\n setExternallySelectedItemsAreInSync,\n waitForExternallySelectedItemsToBeInSync,\n addExternalFilter,\n removeExternalFilter,\n isExternalFilterPresent,\n doesExternalFilterPass,\n downloadCsv,\n onBulkEditingComplete,\n setOnBulkEditingComplete,\n showNoRowsOverlay,\n }}\n >\n {props.children}\n </GridContext.Provider>\n );\n};\n\n/**\n * Aggrid defaults to using getters and ignores formatters.\n * step-ag-grid by default has a valueFormatter for every column that defaults to the getter if no valueFormatter\n * This function uses valueFormatter by default\n */\nexport const downloadCsvUseValueFormattersProcessCellCallback = (params: ProcessCellForExportParams): string => {\n const encodeToString = (value: any): string => {\n // Convert nullish values to blank\n if (value === '-' || value === '–' || value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value);\n };\n\n // Try to use valueFormatter\n const colDef = params?.column?.getColDef();\n if (!colDef) return encodeToString(params.value);\n\n // All columns in step-ag-grid have a default valueFormatter\n // If you have custom a renderer you need to define your own valueFormatter to produce the text value\n const valueFormatter = colDef.valueFormatter;\n // If no valueFormatter then value _must_ be a string\n if (valueFormatter == null) {\n if (params.value != null && typeof params.value !== 'string') {\n console.error(`downloadCsv: valueFormatter missing and getValue is not a string, colId: ${colDef.colId}`);\n }\n return encodeToString(params.value);\n }\n\n // We don't have access to registered functions, so we can't call them\n if (typeof valueFormatter !== 'function') {\n console.error(\n `downloadCsv: String type (registered) value formatters are unsupported in downloadCsv, colId: ${colDef.colId}`,\n );\n return encodeToString(params.value);\n }\n\n const result = valueFormatter({ ...params, data: params.node?.data, colDef, node: null });\n // type may not be string due to casting, leave the type check in\n if (params.value != null && typeof result !== 'string') {\n console.error(`downloadCsv: valueFormatter is returning non string values, colDef:\", colId: ${colDef.colId}`);\n }\n // We add an extra encodeToString here just in case valueFormatter is returning non string values\n return encodeToString(result);\n};\n","import { castArray, flatten, isEmpty, remove } from 'lodash-es';\nimport { PropsWithChildren, useCallback, useRef, useState } from 'react';\n\nimport { GridUpdatingContext } from './GridUpdatingContext';\n\nexport type GridUpdatingContextStatus = Record<string, (number | string)[] | undefined>;\n\ntype FieldName = string;\ntype IdList = (number | string)[];\ntype UpdatingBlock = Record<FieldName, IdList[]>;\n\nexport const GridUpdatingContextProvider = (props: PropsWithChildren) => {\n const updatingBlocks = useRef<UpdatingBlock>({});\n const updating = useRef<GridUpdatingContextStatus>({});\n const [updatedDep, setUpdatedDep] = useState(0);\n\n const resetUpdating = useCallback(() => {\n const mergedUpdatingBlocks: GridUpdatingContextStatus = {};\n for (const key in updatingBlocks.current) {\n const arr = flatten(updatingBlocks.current[key]);\n if (arr.length) {\n mergedUpdatingBlocks[key] = arr;\n }\n }\n updating.current = mergedUpdatingBlocks;\n setUpdatedDep((updatedDep) => updatedDep + 1);\n }, []);\n\n const updatingCols = useCallback(() => Object.keys(updating.current), []);\n\n const modifyUpdating = useCallback(\n async (fields: string | string[], ids: (number | string)[], fn: () => void | Promise<void>) => {\n const idRef = [...ids];\n castArray(fields).forEach((field) => {\n const fieldUpdatingIds = updatingBlocks.current[field] ?? (updatingBlocks.current[field] = []);\n fieldUpdatingIds.push(idRef);\n });\n resetUpdating();\n await fn();\n castArray(fields).forEach((field) => {\n const fieldUpdatingIds = updatingBlocks.current[field];\n remove(fieldUpdatingIds, (idList) => idList === idRef);\n });\n resetUpdating();\n },\n [resetUpdating],\n );\n\n const anyUpdating = useCallback((): boolean => {\n return !isEmpty(updating.current);\n }, []);\n\n const checkUpdating = useCallback(\n (fields: string | string[], id: number | string): boolean =>\n castArray(fields).some((f) => updating.current[f]?.includes(id)),\n [],\n );\n\n return (\n <GridUpdatingContext.Provider value={{ modifyUpdating, anyUpdating, checkUpdating, updatingCols, updatedDep }}>\n {props.children}\n </GridUpdatingContext.Provider>\n );\n};\n","import './ActionButton.scss';\n\nimport { LuiButton, LuiIcon, LuiMiniSpinner } from '@linzjs/lui';\nimport { LuiButtonProps } from '@linzjs/lui/dist/components/LuiButton/LuiButton';\nimport { IconName } from '@linzjs/lui/dist/components/LuiIcon/LuiIcon';\nimport clsx from 'clsx';\nimport { CSSProperties, ReactElement, useEffect, useState } from 'react';\n\nimport { usePrevious } from './reactUtils';\nimport { useStateDeferred } from './stateDeferredHook';\n\nexport interface ActionButtonProps {\n icon: IconName;\n name?: string;\n 'aria-label'?: string;\n inProgressName?: string;\n title?: string;\n dataTestId?: string;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'ns';\n iconPosition?: 'left' | 'right';\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n className?: 'ActionButton-fill' | 'ActionButton-tight' | string;\n onClick: () => Promise<void> | void;\n level?: LuiButtonProps['level'];\n style?: CSSProperties;\n disabled?: boolean;\n}\n\n// Kept this less than one second, so I don't have issues with waitFor as it defaults to 1s\nconst minimumInProgressTimeMs = 950;\n\nexport const ActionButton = ({\n icon,\n name,\n inProgressName,\n disabled,\n dataTestId,\n style,\n className,\n title,\n onClick,\n size = 'sm',\n iconPosition = 'left',\n level = 'tertiary',\n 'aria-label': ariaLabel,\n}: ActionButtonProps): ReactElement => {\n const [inProgress, setInProgress] = useState(false);\n const lastInProgress = usePrevious(inProgress ?? false);\n const [localInProgress, setLocalInProgress, setLocalInProgressDeferred] = useStateDeferred<boolean>(inProgress);\n\n useEffect(() => {\n if (inProgress == lastInProgress) return;\n inProgress ? setLocalInProgress(true) : setLocalInProgressDeferred(false, minimumInProgressTimeMs);\n }, [inProgress, lastInProgress, setLocalInProgress, setLocalInProgressDeferred]);\n\n const buttonText = (\n <span className={'ActionButton-minimalArea'}>\n <span className={'ActionButton-minimalAreaDisplay'}>{(localInProgress ? inProgressName : name) ?? name}</span>\n {/* This makes sure the button expands to fill maximum length text at all times */}\n <span className={'ActionButton-minimalAreaExpand'}>{name}</span>\n </span>\n );\n\n return (\n <LuiButton\n data-testid={dataTestId}\n type={'button'}\n level={level}\n title={title ?? ariaLabel ?? name}\n buttonProps={{ 'aria-label': ariaLabel ?? name }}\n className={clsx(\n 'lui-button-icon-right',\n 'ActionButton',\n className,\n localInProgress && 'ActionButton-inProgress',\n name != null && !className?.includes('ActionButton-fill') && 'ActionButton-minimal',\n name == null && 'ActionButton-iconOnly',\n )}\n size={'lg'}\n style={style}\n onClick={() => {\n const promise = onClick();\n const isPromise = typeof promise !== 'undefined';\n if (isPromise) {\n setInProgress(true);\n void promise.finally(() => {\n setInProgress(false);\n });\n }\n }}\n disabled={localInProgress || disabled}\n >\n {iconPosition === 'right' && buttonText}\n {localInProgress && (\n <div style={{ position: 'relative' }}>\n <LuiMiniSpinner\n size={14}\n divProps={{\n 'data-testid': 'loading-spinner',\n style: {\n position: 'absolute',\n left: 4,\n top: -10,\n bottom: 10,\n right: -4,\n },\n role: 'status',\n 'aria-label': 'Loading',\n }}\n />\n </div>\n )}\n <LuiIcon name={icon} alt={ariaLabel ?? name ?? ''} size={size} />\n {iconPosition === 'left' && buttonText}\n </LuiButton>\n );\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useDeferredPromise = <T>() => {\n const promiseResolve = useRef<((value: T | PromiseLike<T>) => void) | undefined>();\n const promiseReject = useRef<() => void>();\n\n // End promise on unload\n useEffect(() => {\n return () => {\n promiseReject.current && promiseReject.current();\n };\n }, []);\n\n return {\n invoke: () =>\n new Promise<T>((resolve, reject) => {\n promiseResolve.current = resolve;\n promiseReject.current = reject;\n }),\n resolve: (value: T) => {\n if (!promiseResolve.current) {\n console.error(\"Promise not invoked so can't resolve\");\n return;\n }\n const temp = promiseResolve.current;\n promiseResolve.current = undefined;\n promiseReject.current = undefined;\n temp(value);\n },\n reject: () => {\n if (!promiseResolve.current) {\n console.error(\"Promise not invoked so can't reject\");\n return;\n }\n const reject = promiseReject.current;\n promiseResolve.current = undefined;\n promiseReject.current = undefined;\n if (reject) reject();\n },\n };\n};\n"],"names":["_jsx","LuiMiniSpinner","_jsxs","global","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","useRef","createContext","useContext","negate","isEmpty","useState","useMemo","unstable_batchedUpdates","findIndex","memo","forwardRef","_Fragment","useCallback","defer","useTransition","useReducer","flushSync","debounce","createPortal","cloneElement","useImperativeHandle","Fragment","LuiStatusSpinner","LuiIcon","ModuleRegistry","AllCommunityModule","xorBy","last","difference","delay","omit","AgGridReact","sortBy","LuiButtonGroup","LuiButton","LuiCheckboxInput","createRoot","partition","compact","pick","groupBy","fromPairs","toPairs","isEqual","useId","pull","filter","sumBy","remove","flatten","castArray"],"mappings":"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","x_google_ignoreList":[1,2,3,24,25,62,71,75,76]}
|