@overmap-ai/blocks 1.0.9-form-table-view.1 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocks.js.map +1 -1
- package/dist/blocks.umd.cjs.map +1 -1
- package/package.json +1 -1
package/dist/blocks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.js","sources":["../node_modules/classnames/index.js","../src/utils.ts","../src/Badge/Badge.tsx","../src/Flex/Flex.tsx","../src/Breadcrumb/context.ts","../src/Breadcrumb/Breadcrumb.tsx","../src/Buttons/constants.ts","../src/constants.ts","../src/ButtonGroup/context.ts","../src/Spinner/Spinner.tsx","../src/Buttons/Button.tsx","../src/Buttons/IconButton.tsx","../src/ButtonGroup/ButtonGroup.tsx","../src/ButtonGroup/ButtonList.tsx","../src/Dialogs/Dialog/DialogContent.tsx","../src/Dialogs/Dialog/Dialog.tsx","../src/Dialogs/Dialog/utils.ts","../src/Dialogs/AlertDialog/AlertDialogContent.tsx","../src/Dialogs/AlertDialog/AlertDialog.tsx","../src/Dialogs/AlertDialog/context.tsx","../src/Dialogs/AlertDialog/hooks.ts","../src/DropdownMenu/DropdownMenu.tsx","../src/BaseMenuGroups/BaseMenuComponents.tsx","../src/BaseMenuGroups/utils.ts","../src/BaseMenuGroups/BaseItemGroup/BaseItemGroup.tsx","../src/BaseMenuGroups/BaseSelectGroup/BaseSelectGroup.tsx","../src/BaseMenuGroups/BaseMultiSelectGroup/BaseMultiSelectGroup.tsx","../src/BaseMenuGroups/BaseSubMenuGroup/BaseSubMenuGroup.tsx","../src/DropdownMenu/DropdownMenuGroups.tsx","../src/DropdownItemMenu/DropdownItemMenu.tsx","../src/DropdownSelect/DropdownSelect.tsx","../src/DropdownMultiSelect/DropdownMultiSelect.tsx","../src/HoverUtility/HoverUtility.tsx","../src/Select/Select.tsx","../src/MultiSelect/MultiSelectItem.tsx","../src/MultiSelect/MultiSelect.tsx","../src/Switch/Switch.tsx","../src/Sidebar/Sidebar.tsx","../src/SlideOut/SlideOut.tsx","../src/Input/Input.tsx","../src/IconColorUtility/IconColorUtility.tsx","../src/Popover/Popover.tsx","../src/LeftAndRightPanels/LeftAndRightPanels.tsx","../src/MultiPagePopover/MultiPagePopover.tsx","../src/TextArea/TextArea.tsx","../src/ToggleGroup/ToggleGroup.tsx","../src/Toolbar/Toolbar.tsx","../src/Toast/Toast.tsx","../src/Toast/ToastContext.ts","../src/Toast/ToastProvider.tsx","../src/Tooltip/Tooltip.tsx","../src/Text/Text.tsx","../src/Theme/DefaultTheme.tsx","../src/Separator/Separator.tsx","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/primitive/dist/index.mjs","../node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../node_modules/@radix-ui/react-use-previous/dist/index.mjs","../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../node_modules/@radix-ui/react-use-size/dist/index.mjs","../node_modules/@radix-ui/react-presence/dist/index.mjs","../node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-checkbox/dist/index.mjs","../src/Checkbox/Checkbox.tsx","../src/Checkbox/SelectAllCheckbox.tsx","../src/Table/Table.tsx","../src/ConfirmEditInput/ConfirmEditInput.tsx"],"sourcesContent":["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { Responsive, ThemeOptions, useThemeContext } from \"@radix-ui/themes\"\r\nimport {\r\n\tuseEffect,\r\n\tuseLayoutEffect,\r\n\tuseMemo,\r\n\tuseState,\r\n\tuseCallback,\r\n\tReactNode,\r\n\tReactElement,\r\n\tChildren,\r\n\tisValidElement,\r\n\tmemo,\r\n\tSetStateAction,\r\n\tDispatch,\r\n} from \"react\"\r\nimport { useMediaQuery } from \"react-responsive\"\r\nimport { Severity } from \"./typings\"\r\n\r\n// useResponsiveMapping is a helper function used to map the keys of a Radix Responsive type that can be understood\r\n// by a Radix component or primitive. The point of this is to leverage our own custom prop names and values while still\r\n// using Radix's built in Responsiveness functionality.\r\n/**\r\n * Returns an object with mapped key values or a single mapped value\r\n * @param value an object or string\r\n * @param mapping a Record mapping the object values of param value\r\n */\r\nexport function useResponsiveMapping<T extends string, K>(\r\n\tvalue: Responsive<T> | undefined,\r\n\tmapping: Record<T, K>,\r\n): Responsive<K> | undefined {\r\n\treturn useMemo(() => {\r\n\t\tif (value === undefined) return undefined\r\n\t\tif (typeof value === \"object\") {\r\n\t\t\tif (!(\"initial\" in value)) {\r\n\t\t\t\t// Responsive objects require an 'initial' property to be set that acts as a default\r\n\t\t\t\tthrow new Error(\"Expected initial property to be set in Responsive object\")\r\n\t\t\t}\r\n\t\t\treturn Object.fromEntries(Object.entries(value).map(([breakpoint, value]) => [breakpoint, mapping[value]]))\r\n\t\t} else {\r\n\t\t\treturn mapping[value]\r\n\t\t}\r\n\t}, [mapping, value])\r\n}\r\n\r\nconst nonThemeSeverityMapping = {\r\n\tsuccess: \"green\",\r\n\tdanger: \"red\",\r\n\twarning: \"amber\",\r\n\tinfo: \"gray\",\r\n} as const\r\n\r\nexport type AccentColor = ThemeOptions[\"accentColor\"]\r\n\r\n/** Performs theme-sensitive mapping of a severity to radix color */\r\nexport const useSeverityColor = (severity?: Severity): AccentColor | undefined => {\r\n\tconst theme = useThemeContext()\r\n\tif (!severity) return undefined\r\n\tif (severity === \"primary\") return theme.accentColor\r\n\r\n\treturn nonThemeSeverityMapping[severity]\r\n}\r\n\r\nexport interface ViewportSize {\r\n\tsize: \"initial\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\r\n\tprevSize: \"initial\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\r\n\txs: boolean\r\n\tsm: boolean\r\n\tmd: boolean\r\n\tlg: boolean\r\n\txl: boolean\r\n}\r\n\r\n/** Return value needs to be deconstructed since the object returned is not memoized */\r\nexport const useViewportSize = (): ViewportSize => {\r\n\tconst [prevSize, setPrevSize] = useState<ViewportSize[\"size\"]>(\"initial\")\r\n\tconst [size, setSize] = useState<ViewportSize[\"size\"]>(\"initial\")\r\n\t// These specific Breakpoints are from Radix, see https://www.radix-ui.com/themes/docs/theme/breakpoints\r\n\tconst xs = useMediaQuery({ minWidth: \"520px\" })\r\n\tconst sm = useMediaQuery({ minWidth: \"768px\" })\r\n\tconst md = useMediaQuery({ minWidth: \"1024px\" })\r\n\tconst lg = useMediaQuery({ minWidth: \"1280px\" })\r\n\tconst xl = useMediaQuery({ minWidth: \"1640px\" })\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\tsetSize((prev) => {\r\n\t\t\tsetPrevSize(prev)\r\n\t\t\treturn xl ? \"xl\" : lg ? \"lg\" : md ? \"md\" : sm ? \"sm\" : xs ? \"xs\" : \"initial\"\r\n\t\t})\r\n\t}, [lg, md, sm, xl, xs])\r\n\r\n\treturn { size, prevSize, xs, sm, md, lg, xl }\r\n}\r\n\r\n/** custom hook for executing a callback based on a set of keys representing a keyboard shortcut\r\n * @param shortcutKeys an array of strings representing keyboard keys\r\n * @param disable a boolean value indicating whether the keyboard shortcut is disabled or not\r\n * @param callback a callback to be run whenever all keys in shortcutKeys are being pressed\r\n * @return allKeysPressed a boolean value indicating if all keys in shortcutKeys are currently being pressed\r\n * */\r\nexport const useKeyboardShortcut = (shortcutKeys: string[], disable: boolean, callback: () => void) => {\r\n\tconst [keys, setKeys] = useState<string[]>([])\r\n\t// state used to track if last action was a key down rather than a key up\r\n\tconst [lastWasKeyDown, setLastWasKeyDown] = useState<boolean>(true)\r\n\r\n\t// keydown event handler passed to document, add the pressed key to the keys array\r\n\tconst handleKeyDown = useCallback(\r\n\t\t(event: KeyboardEvent) => {\r\n\t\t\tconst { repeat, key } = event\r\n\t\t\tsetLastWasKeyDown(true)\r\n\t\t\tif (repeat || keys.includes(key)) return\r\n\t\t\tsetKeys((prevKeys) => [...prevKeys, key])\r\n\t\t},\r\n\t\t[keys],\r\n\t)\r\n\r\n\t// keyup event handler passed to document, remove the pressed key if it exists in keys array\r\n\tconst handleKeyUp = useCallback(\r\n\t\t(event: KeyboardEvent) => {\r\n\t\t\tconst { key } = event\r\n\t\t\tsetLastWasKeyDown(false)\r\n\t\t\tif (!keys.includes(key)) return\r\n\t\t\tsetKeys((prevKeys) => {\r\n\t\t\t\tconst tempKeys = [...prevKeys]\r\n\t\t\t\ttempKeys.splice(prevKeys.indexOf(key), 1)\r\n\t\t\t\treturn tempKeys\r\n\t\t\t})\r\n\t\t},\r\n\t\t[keys],\r\n\t)\r\n\r\n\t// Setting up key down document handler\r\n\tuseEffect(() => {\r\n\t\tif (!disable) document.addEventListener(\"keydown\", handleKeyDown, true)\r\n\t\treturn () => {\r\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown, true)\r\n\t\t}\r\n\t}, [disable, handleKeyDown])\r\n\r\n\t// Setting up key up document handler\r\n\tuseEffect(() => {\r\n\t\tif (!disable) document.addEventListener(\"keyup\", handleKeyUp, true)\r\n\t\treturn () => {\r\n\t\t\tdocument.removeEventListener(\"keyup\", handleKeyUp, true)\r\n\t\t}\r\n\t}, [disable, handleKeyUp])\r\n\r\n\t// variable determining if shortcut action should be triggered or not\r\n\tconst triggerAction = useMemo(() => {\r\n\t\treturn (\r\n\t\t\t!disable &&\r\n\t\t\tlastWasKeyDown &&\r\n\t\t\tkeys.length === shortcutKeys.length &&\r\n\t\t\tkeys.every((key) => shortcutKeys.includes(key))\r\n\t\t)\r\n\t}, [disable, lastWasKeyDown, keys, shortcutKeys])\r\n\r\n\t// If all keys are currently being pressed, execute the callback\r\n\tuseEffect(() => {\r\n\t\tif (triggerAction) callback()\r\n\t}, [triggerAction, callback])\r\n\r\n\treturn triggerAction\r\n}\r\n\r\n/** utility for removing number or string types after applying React.Children. React.Children method tacks on types\r\n * number and string which causes type errors when calling clone element on the result of React.Children. therefore this\r\n * function acts as a type stripper to remove any children of type string or number (which if using this function, are most\r\n * likely unwanted children). */\r\nexport const childrenToArray = (children: ReactNode) => {\r\n\tconst tempChildrenToArray: ReactElement[] = []\r\n\tfor (const child of Children.toArray(children)) {\r\n\t\tif (isValidElement(child)) tempChildrenToArray.push(child)\r\n\t}\r\n\treturn tempChildrenToArray\r\n}\r\n\r\n/** utility used for stopping Event propagation.\r\n * @return stopPropagation a callback that calls stopPropagation on a general event */\r\nexport const useStopEventPropagation = () => {\r\n\treturn useCallback((event: Event) => {\r\n\t\tevent.stopPropagation()\r\n\t}, [])\r\n}\r\n\r\n/** custom hook use for providing filter functionality based on a text input field\r\n * @param filterFunction make sure this is wrapped in a useCallback\r\n * @param values items that should be filtered on (of type T) */\r\nexport function useTextFilter<T>(\r\n\tvalues: T[],\r\n\tfilterFunction: (value: T, filterValue: string) => boolean,\r\n): [T[], string, Dispatch<SetStateAction<string>>] {\r\n\tconst [filteredOptions, setFilteredOptions] = useState<T[]>([])\r\n\tconst [filterValue, setFilterValue] = useState<string>(\"\")\r\n\r\n\tuseEffect(() => {\r\n\t\tsetFilteredOptions(values.filter((value) => filterFunction(value, filterValue)))\r\n\t}, [filterFunction, filterValue, values])\r\n\r\n\treturn [filteredOptions, filterValue, setFilterValue]\r\n}\r\n\r\nexport const genericMemo: <T>(component: T) => T = memo\r\n\r\nexport type AllOrNone<T> = T | { [K in keyof T]?: never }\r\n","import { Badge as RadixBadge } from \"@radix-ui/themes\"\r\nimport { FC, forwardRef, memo, Ref } from \"react\"\r\nimport { BadgeProps } from \"./typings.ts\"\r\nimport classNames from \"classnames\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\n\r\nconst _Badge = forwardRef(function Badge(\r\n\t{ className, severity = \"primary\", color, children, ...rest }: BadgeProps,\r\n\tref: Ref<HTMLSpanElement>,\r\n) {\r\n\tconst severityColor = useSeverityColor(severity)\r\n\r\n\treturn (\r\n\t\t<RadixBadge\r\n\t\t\tclassName={classNames(\"overmap-badge\", className)}\r\n\t\t\tref={ref}\r\n\t\t\tcolor={color ? color : severityColor}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</RadixBadge>\r\n\t)\r\n})\r\n\r\n/** The Badge Component is a user interface element that provides visual feedback, typically displaying a small amount\r\n * of information. It is commonly used to indicate counts, statuses, or labels in a concise and visually appealing\r\n * manner. This Badge components wraps the Badge component from Radix-ui found here https://www.radix-ui.com/themes/docs/components/badge */\r\nexport const Badge: FC<BadgeProps> = memo(_Badge)\r\n","import { ComponentProps, forwardRef, memo } from \"react\"\r\nimport { Flex as RadixFlex } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"./Flex.module.sass\"\r\n\r\nexport interface FlexProps extends ComponentProps<typeof RadixFlex> {\r\n\t/** if true the border radius of the Flex container will match the one specified by the Theme\r\n\t * @default false\r\n\t * */\r\n\tradius?: boolean\r\n\t/** if true sets the min-width of the Flex container to 0\r\n\t * @default false\r\n\t * */\r\n\tzeroMinWidth?: boolean\r\n\t/** if true sets the min-height of the Flex container to 0\r\n\t * @default false\r\n\t * */\r\n\tzeroMinHeight?: boolean\r\n}\r\nexport const Flex = memo(\r\n\tforwardRef<HTMLDivElement, FlexProps>(\r\n\t\t({ className, radius = false, children, zeroMinWidth = false, zeroMinHeight = false, ...rest }, ref) => {\r\n\t\t\treturn (\r\n\t\t\t\t<RadixFlex\r\n\t\t\t\t\tclassName={classNames(className, {\r\n\t\t\t\t\t\t[styles.radius!]: radius,\r\n\t\t\t\t\t\t[styles.zeroMinWidth!]: zeroMinWidth,\r\n\t\t\t\t\t\t[styles.zeroMinHeight!]: zeroMinHeight,\r\n\t\t\t\t\t})}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\t{...rest}\r\n\t\t\t\t>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</RadixFlex>\r\n\t\t\t)\r\n\t\t},\r\n\t),\r\n)\r\n","import type { Severity } from \"../typings.ts\"\r\nimport { ComponentProps, createContext, useContext } from \"react\"\r\nimport { Link } from \"@radix-ui/themes\"\r\n\r\ninterface IBreadcrumbContext {\r\n\tseverity: Severity\r\n\tsize: ComponentProps<typeof Link>[\"size\"]\r\n}\r\n\r\nexport const BreadcrumbContext = createContext({} as IBreadcrumbContext)\r\n\r\nexport const useBreadcrumbContext = () => useContext(BreadcrumbContext)\r\n","import { Link, Box, Text } from \"@radix-ui/themes\"\r\nimport { Flex, FlexProps } from \"../Flex\"\r\nimport { cloneElement, ComponentProps, forwardRef, HTMLProps, memo, ReactNode } from \"react\"\r\nimport classNames from \"classnames\"\r\nimport { childrenToArray } from \"../utils.ts\"\r\nimport { Severity } from \"../typings.ts\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\nimport { BreadcrumbContext, useBreadcrumbContext } from \"./context.ts\"\r\nexport interface BreadcrumbItemProps extends Omit<HTMLProps<HTMLAnchorElement>, \"size\" | \"ref\" | \"color\"> {}\r\nexport const Item = memo(\r\n\tforwardRef<HTMLAnchorElement, BreadcrumbItemProps>(({ className, children, ...rest }, ref) => {\r\n\t\tconst { size, severity } = useBreadcrumbContext()\r\n\t\tconst severityColor = useSeverityColor(severity)\r\n\t\treturn (\r\n\t\t\t<Box className={classNames(\"overmap-breadcrumb-item\", className)} height=\"max-content\" width=\"max-content\">\r\n\t\t\t\t<Link ref={ref} size={size} color={severityColor} {...rest}>\r\n\t\t\t\t\t<Flex height=\"100%\" width=\"100%\" align=\"center\" gap=\"1\">\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</Link>\r\n\t\t\t</Box>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\nexport interface BreadcrumbGroupProps\r\n\textends Omit<HTMLProps<HTMLDivElement>, \"height\" | \"width\" | \"wrap\" | \"ref\" | \"size\"> {\r\n\tchildren: ReactNode\r\n\t/** The separator used in between Breadcrumb items*/\r\n\tseparator: ReactNode\r\n\t/** The severity of the items in the Breadcrumb\r\n\t * @default \"info\"\r\n\t * */\r\n\tseverity?: Severity\r\n\t/** The text size of the items in the Breadcrumb */\r\n\tsize?: ComponentProps<typeof Link>[\"size\"]\r\n\t/** The gap between Breadcrumb items\r\n\t * @default \"2\"\r\n\t * */\r\n\tgap?: FlexProps[\"gap\"]\r\n}\r\n\r\nexport const Group = memo(\r\n\tforwardRef<HTMLDivElement, BreadcrumbGroupProps>(\r\n\t\t({ className, children, separator, severity = \"info\", size, gap = \"2\", ...rest }, ref) => {\r\n\t\t\tconst severityColor = useSeverityColor(severity)\r\n\r\n\t\t\tconst childrenAsArray = childrenToArray(children)\r\n\t\t\treturn (\r\n\t\t\t\t<BreadcrumbContext.Provider value={{ size, severity }}>\r\n\t\t\t\t\t<Flex\r\n\t\t\t\t\t\tclassName={classNames(\"overmap-breadcrumb-group\", className)}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\tgap={gap}\r\n\t\t\t\t\t\trole=\"breadcrumb\"\r\n\t\t\t\t\t\theight=\"max-content\"\r\n\t\t\t\t\t\twidth=\"max-content\"\r\n\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{childrenAsArray.map((child, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t{cloneElement(child, { key: index })}\r\n\t\t\t\t\t\t\t\t\t{childrenAsArray.length - 1 !== index && (\r\n\t\t\t\t\t\t\t\t\t\t<Text color={severityColor}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Flex height=\"100%\" width=\"100%\" align=\"center\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t{separator}\r\n\t\t\t\t\t\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</BreadcrumbContext.Provider>\r\n\t\t\t)\r\n\t\t},\r\n\t),\r\n)\r\n\r\nexport const Breadcrumb = {\r\n\tGroup,\r\n\tItem,\r\n}\r\n","import { ButtonHoverEffect } from \"./typings.ts\"\r\nimport styles from \"./Button.module.sass\"\r\nimport { KeyboardEvent } from \"react\"\r\n\r\nexport const hoverEffectClassNameMapping: Record<ButtonHoverEffect, string | undefined> = {\r\n\tspin90Clockwise: styles.hoverSpin90Clockwise,\r\n\tspin180Clockwise: styles.hoverSpin180Clockwise,\r\n\tspin360Clockwise: styles.hoverSpin360Clockwise,\r\n}\r\n\r\nconst clickOnEnterOrSpace = (e: KeyboardEvent<HTMLDivElement>) => {\r\n\tif (e.key === \"Enter\" || e.key === \" \") {\r\n\t\te.currentTarget.click()\r\n\t}\r\n}\r\n\r\n/** Passing this to a `div` will make it behave like a `button`. However, it will **NOT** support the disabled state. */\r\nexport const divButtonProps = {\r\n\trole: \"button\",\r\n\ttabIndex: 0,\r\n\tonKeyDown: clickOnEnterOrSpace,\r\n}\r\n","import { Size } from \"./typings.ts\"\r\n\r\n// Mappings\r\nexport const SizeMapping: Record<Size, \"1\" | \"2\" | \"3\"> = {\r\n\tsmall: \"1\",\r\n\tmedium: \"2\",\r\n\tlarge: \"3\",\r\n}\r\n","import { ButtonProps } from \"../Buttons/typings\"\r\nimport { createContext, useContext } from \"react\"\r\n\r\nexport type ButtonContextType = Pick<ButtonProps, \"variant\" | \"size\" | \"severity\" | \"hoverEffects\" | \"fluid\">\r\n\r\nexport const ButtonGroupContext = createContext<ButtonContextType>({})\r\n\r\nexport const useButtonGroupContext = () => useContext(ButtonGroupContext)\r\n","import styles from \"./Spinner.module.sass\"\r\nimport { memo } from \"react\"\r\n\r\nexport const Spinner = memo(() => {\r\n\treturn <div className={styles.spinner} />\r\n})\r\n\r\nSpinner.displayName = \"Spinner\"\r\n","import React, { FC, forwardRef } from \"react\"\r\nimport { ButtonProps } from \"./typings.ts\"\r\nimport styles from \"./Button.module.sass\"\r\nimport classNames from \"classnames\"\r\nimport { Button as RadixButton } from \"@radix-ui/themes\"\r\nimport { hoverEffectClassNameMapping } from \"./constants.ts\"\r\nimport { useKeyboardShortcut, useResponsiveMapping, useSeverityColor } from \"../utils.ts\"\r\nimport { SizeMapping } from \"../constants.ts\"\r\nimport { useButtonGroupContext } from \"../ButtonGroup/context.ts\"\r\nimport { Spinner } from \"../Spinner/Spinner.tsx\"\r\n\r\nconst _Button = forwardRef(function Button(props: ButtonProps, ref: React.Ref<HTMLButtonElement>) {\r\n\tconst buttonGroupContext = useButtonGroupContext()\r\n\tconst {\r\n\t\tclassName,\r\n\t\ttype = \"button\",\r\n\t\tfluid = buttonGroupContext.fluid ?? false,\r\n\t\tsize = buttonGroupContext.size ?? \"medium\",\r\n\t\tseverity = buttonGroupContext.severity ?? \"primary\",\r\n\t\thoverEffects = buttonGroupContext.hoverEffects ?? [],\r\n\t\tvariant = buttonGroupContext.variant,\r\n\t\tshortcut = {\r\n\t\t\tkeys: [],\r\n\t\t\taction: () => {},\r\n\t\t\tdisabled: false,\r\n\t\t},\r\n\t\tloading,\r\n\t\tchildren,\r\n\t\tdisabled,\r\n\t\t...rest\r\n\t} = props\r\n\tconst color = useSeverityColor(severity)\r\n\tconst hoverEffectClasses = hoverEffects.map((hoverEffect) => {\r\n\t\treturn hoverEffectClassNameMapping[hoverEffect]\r\n\t})\r\n\tuseKeyboardShortcut(shortcut.keys, shortcut.disabled || shortcut.keys.length === 0, shortcut.action)\r\n\r\n\treturn (\r\n\t\t<RadixButton\r\n\t\t\tref={ref}\r\n\t\t\ttype={type}\r\n\t\t\tclassName={classNames(className, hoverEffectClasses, {\r\n\t\t\t\t[styles.fluid!]: fluid,\r\n\t\t\t})}\r\n\t\t\tcolor={color}\r\n\t\t\tsize={useResponsiveMapping(size, SizeMapping)}\r\n\t\t\tvariant={variant}\r\n\t\t\tdisabled={loading || disabled}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t{loading ? <Spinner /> : children}\r\n\t\t</RadixButton>\r\n\t)\r\n})\r\n\r\n// using FC so storybook correctly displays the component props\r\nconst Button: FC<ButtonProps> = React.memo(_Button)\r\n\r\nexport default Button\r\n","import React, { FC, forwardRef } from \"react\"\r\nimport { ButtonProps } from \"./typings.ts\"\r\nimport classNames from \"classnames\"\r\nimport { IconButton as RadixIconButton } from \"@radix-ui/themes\"\r\nimport { hoverEffectClassNameMapping } from \"./constants.ts\"\r\nimport { useKeyboardShortcut, useResponsiveMapping, useSeverityColor } from \"../utils.ts\"\r\nimport { SizeMapping } from \"../constants.ts\"\r\nimport { useButtonGroupContext } from \"../ButtonGroup/context.ts\"\r\n\r\nimport styles from \"./Button.module.sass\"\r\n\r\ninterface IconButtonProps extends ButtonProps {\r\n\t\"aria-label\": string\r\n}\r\n\r\nconst _Button = forwardRef(function Button(props: IconButtonProps, ref: React.Ref<HTMLButtonElement>) {\r\n\tconst buttonGroupContext = useButtonGroupContext()\r\n\tconst {\r\n\t\tclassName,\r\n\t\tchildren,\r\n\t\ttype = \"button\",\r\n\t\tfluid = buttonGroupContext.fluid ?? false,\r\n\t\tsize = buttonGroupContext.size ?? \"medium\",\r\n\t\tseverity = buttonGroupContext.severity ?? \"primary\",\r\n\t\thoverEffects = buttonGroupContext.hoverEffects ?? [],\r\n\t\tvariant = buttonGroupContext.variant,\r\n\t\tshortcut = {\r\n\t\t\tkeys: [],\r\n\t\t\taction: () => {},\r\n\t\t\tdisabled: false,\r\n\t\t},\r\n\t\t...rest\r\n\t} = props\r\n\tconst color = useSeverityColor(severity)\r\n\tconst hoverEffectClasses =\r\n\t\thoverEffects?.map((hoverEffect) => {\r\n\t\t\treturn hoverEffectClassNameMapping[hoverEffect]\r\n\t\t}) || []\r\n\r\n\tuseKeyboardShortcut(shortcut.keys, shortcut.disabled || shortcut.keys.length === 0, shortcut.action)\r\n\r\n\treturn (\r\n\t\t<RadixIconButton\r\n\t\t\tclassName={classNames(className, hoverEffectClasses, {\r\n\t\t\t\t[styles.fluid!]: fluid,\r\n\t\t\t})}\r\n\t\t\tref={ref}\r\n\t\t\tcolor={color}\r\n\t\t\tsize={useResponsiveMapping(size, SizeMapping)}\r\n\t\t\tvariant={variant}\r\n\t\t\ttype={type}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</RadixIconButton>\r\n\t)\r\n})\r\n\r\n// using FC so storybook correctly displays the component props\r\n/** The `IconButton` is a `Button` variant specifically designed for single icons. */\r\nconst IconButton: FC<IconButtonProps> = React.memo(_Button)\r\n\r\nexport default IconButton\r\n","import { FC, forwardRef, memo, Ref } from \"react\"\r\nimport { Flex } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { ButtonGroupProps } from \"./typings.ts\"\r\n\r\nimport styles from \"./ButtonGroup.module.sass\"\r\nimport { Size } from \"../typings.ts\"\r\nimport { useResponsiveMapping } from \"../utils.ts\"\r\nimport { ButtonGroupContext } from \"./context.ts\"\r\n\r\nconst GhostVariantSizeToGapMapping = {\r\n\trow: { small: \"4\", medium: \"4\", large: \"5\" },\r\n\tcolumn: { small: \"2\", medium: \"3\", large: \"4\" },\r\n} as const satisfies Record<\"row\" | \"column\", Record<Size, ButtonGroupProps[\"gap\"]>>\r\n\r\nconst _ButtonGroup = forwardRef(function ButtonGroup(\r\n\t{\r\n\t\tclassName,\r\n\t\tmerged = false,\r\n\t\tchildren,\r\n\t\tgap,\r\n\t\tdirection = \"row\",\r\n\t\tseverity,\r\n\t\tsize = \"medium\",\r\n\t\tvariant,\r\n\t\thoverEffects,\r\n\t\tfluid,\r\n\t\t...rest\r\n\t}: ButtonGroupProps,\r\n\tref: Ref<HTMLDivElement>,\r\n) {\r\n\tconst ghostSize = useResponsiveMapping(size, GhostVariantSizeToGapMapping[direction])\r\n\t// without a larger gap, ghost buttons overlap\r\n\tconst mergedAutoGap = variant === \"ghost\" ? ghostSize : \"0\"\r\n\treturn (\r\n\t\t<Flex\r\n\t\t\tclassName={classNames(\"overmap-button-group\", className, {\r\n\t\t\t\t[styles.merged!]: merged,\r\n\t\t\t})}\r\n\t\t\tref={ref}\r\n\t\t\tgap={merged ? gap ?? mergedAutoGap : gap ?? \"2\"}\r\n\t\t\tdirection={direction}\r\n\t\t\tdata-direction={direction}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t<ButtonGroupContext.Provider value={{ size, severity, variant, hoverEffects, fluid }}>\r\n\t\t\t\t{children}\r\n\t\t\t</ButtonGroupContext.Provider>\r\n\t\t</Flex>\r\n\t)\r\n})\r\n\r\n/** The ButtonGroup Component is a user interface element that groups multiple buttons together for improved user\r\n * interaction and visual clarity. It is commonly used to present related actions or options in a compact and organized\r\n * manner. The ButtonGroup supports all props of the RadixUI Flex layout component besides MarginProps,\r\n * further documentation for the Flex layout component can be found here https://www.radix-ui.com/themes/docs/components/flex */\r\nexport const ButtonGroup: FC<ButtonGroupProps> = memo(_ButtonGroup)\r\n","import { FC, forwardRef, memo, ReactNode } from \"react\"\r\nimport { ButtonGroup, ButtonGroupProps } from \".\"\r\nimport { ButtonProps } from \"../Buttons/typings\"\r\nimport { useButtonGroupContext } from \"./context\"\r\nimport { Button } from \"../Buttons\"\r\nimport { Size } from \"..\"\r\nimport { useResponsiveMapping } from \"../utils\"\r\nimport { SizeMapping } from \"../constants\"\r\nimport styles from \"./ButtonList.module.sass\"\r\nimport classNames from \"classnames\"\r\nimport { Box, Card, Inset, Responsive } from \"@radix-ui/themes\"\r\n\r\ninterface ButtonListRootProps extends Pick<ButtonGroupProps, \"size\" | \"variant\" | \"children\"> {\r\n\t// not including `large` because large ghost buttons have a non-standard margin\r\n\t/** @default \"medium\" */\r\n\tsize?: Responsive<Exclude<Size, \"large\">>\r\n\t// not including solid as it doesn't look good\r\n\t/** @default outline */\r\n\tvariant?: Exclude<ButtonGroupProps[\"variant\"], \"solid\">\r\n\t/** Content to display before the list but within the card */\r\n\tbefore?: ReactNode\r\n\t/** Content to display after the list but within the card */\r\n\tafter?: ReactNode\r\n\tclassName?: string\r\n}\r\n\r\ninterface ButtonListBorderProps extends Pick<ButtonListRootProps, \"before\" | \"after\" | \"size\" | \"children\"> {\r\n\tborder: boolean\r\n}\r\n\r\nconst ButtonListBorder = memo(\r\n\tforwardRef<HTMLDivElement, ButtonListBorderProps>((props, ref) => {\r\n\t\tconst { children, border, before, after, size } = props\r\n\t\tconst variant = border ? \"surface\" : \"ghost\"\r\n\t\tconst radixSize = useResponsiveMapping(size, SizeMapping)\r\n\r\n\t\tconst inset =\r\n\t\t\tbefore && after ? (\r\n\t\t\t\t<Inset side=\"x\" pt=\"current\" pb=\"current\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</Inset>\r\n\t\t\t) : before ? (\r\n\t\t\t\t<Inset side=\"bottom\" pt=\"current\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</Inset>\r\n\t\t\t) : after ? (\r\n\t\t\t\t<Inset side=\"top\" pb=\"current\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</Inset>\r\n\t\t\t) : (\r\n\t\t\t\t<Inset>{children}</Inset>\r\n\t\t\t)\r\n\r\n\t\tconst ret = (\r\n\t\t\t<Card ref={ref} size={radixSize} variant={variant}>\r\n\t\t\t\t{before}\r\n\t\t\t\t{inset}\r\n\t\t\t\t{after}\r\n\t\t\t</Card>\r\n\t\t)\r\n\r\n\t\t// offset negative margin from the ghost card by adding a container\r\n\t\t// with padding of equal size\r\n\t\tif (variant === \"ghost\") {\r\n\t\t\treturn <Box p=\"3\">{ret}</Box>\r\n\t\t}\r\n\r\n\t\treturn ret\r\n\t}),\r\n)\r\n\r\n/** A specialized version of `ButtonGroup` for vertical list of block-like buttons. */\r\nexport const ButtonListRoot: FC<ButtonListRootProps> = memo(\r\n\tforwardRef<HTMLDivElement, ButtonListRootProps>((props, ref) => {\r\n\t\tconst { children, variant = \"outline\", size, className, ...borderProps } = props\r\n\t\tconst showBorder = variant === \"outline\" || variant === \"surface\"\r\n\r\n\t\t// remove the border from the buttons\r\n\t\t// as the border is handled by the Separator component\r\n\t\tconst buttonVariant = variant === \"outline\" ? \"ghost\" : variant === \"surface\" ? \"soft\" : variant\r\n\r\n\t\treturn (\r\n\t\t\t<ButtonListBorder {...borderProps} border={showBorder} size={size}>\r\n\t\t\t\t<ButtonGroup\r\n\t\t\t\t\tsize={size}\r\n\t\t\t\t\tseverity=\"info\"\r\n\t\t\t\t\tvariant={buttonVariant}\r\n\t\t\t\t\tclassName={classNames(className, styles.separators)}\r\n\t\t\t\t\tmerged\r\n\t\t\t\t\tgap=\"0\"\r\n\t\t\t\t\tdirection=\"column\"\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</ButtonGroup>\r\n\t\t\t</ButtonListBorder>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\ninterface ButtonListItemProps extends Omit<ButtonProps, \"size\" | \"variant\" | \"severity\" | \"fluid\"> {}\r\n\r\nconst ButtonListItem = memo(\r\n\tforwardRef<HTMLButtonElement, ButtonListItemProps>((props, ref) => {\r\n\t\tconst { variant } = useButtonGroupContext()\r\n\r\n\t\t// rely on the card container to provide the radius - which is never full\r\n\t\tconst ret = <Button ref={ref} {...props} radius=\"large\" variant={variant} />\r\n\r\n\t\t// remove the negative margin from the ghost button\r\n\t\tif (variant === \"ghost\") {\r\n\t\t\treturn (\r\n\t\t\t\t<Box asChild my=\"1\" mx=\"2\">\r\n\t\t\t\t\t{ret}\r\n\t\t\t\t</Box>\r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\treturn ret\r\n\t}),\r\n)\r\n\r\nexport const ButtonList = {\r\n\tRoot: ButtonListRoot,\r\n\tItem: ButtonListItem,\r\n}\r\n","import { memo } from \"react\"\r\nimport { Dialog, Flex, IconButton } from \"@radix-ui/themes\"\r\nimport { Cross1Icon } from \"@radix-ui/react-icons\"\r\nimport { DialogContentProps } from \"./typings\"\r\n\r\nexport const DialogContent = memo(function DialogContent(props: DialogContentProps) {\r\n\tconst { title, description, content, closeDialog } = props\r\n\treturn (\r\n\t\t<Flex direction=\"column\" gap=\"2\">\r\n\t\t\t<Flex direction=\"column\" gap=\"1\">\r\n\t\t\t\t<Flex justify=\"between\">\r\n\t\t\t\t\t<Dialog.Title mb=\"0\">{title}</Dialog.Title>\r\n\t\t\t\t\t<Dialog.Close>\r\n\t\t\t\t\t\t<IconButton color=\"gray\" variant=\"ghost\" aria-label=\"Close\">\r\n\t\t\t\t\t\t\t<Cross1Icon />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Dialog.Close>\r\n\t\t\t\t</Flex>\r\n\t\t\t\t{description && <Dialog.Description>{description}</Dialog.Description>}\r\n\t\t\t</Flex>\r\n\t\t\t{content(closeDialog)}\r\n\t\t</Flex>\r\n\t)\r\n})\r\n","import { memo, useState, useCallback, forwardRef } from \"react\"\r\nimport { Dialog as RadixDialog } from \"@radix-ui/themes\"\r\nimport { DialogContent } from \"./DialogContent\"\r\nimport { CloseDialogWithOptions, DialogProps } from \"./typings\"\r\n\r\n/**\r\n * Display or collect information in a modal. Unlike the `AlertDialog`, the `Dialog`'s can be nested\r\n * and close when clicking outside of the dialog content.\r\n */\r\nexport const Dialog = memo(\r\n\tforwardRef<HTMLDivElement, DialogProps>((props, ref) => {\r\n\t\tconst {\r\n\t\t\tchildren,\r\n\t\t\tcontent,\r\n\t\t\ttitle,\r\n\t\t\tdescription,\r\n\t\t\tonOpen,\r\n\t\t\tonClose,\r\n\t\t\tdefaultOpen,\r\n\t\t\tonCloseInterrupt,\r\n\t\t\topen: externalOpen,\r\n\t\t\tonOpenChange: externalOpenChange,\r\n\t\t\t...contentProps\r\n\t\t} = props\r\n\t\t// `innerOpen` used to track the open state of the dialog when `externalOpen` is undefined\r\n\t\tconst [innerOpen, setInnerOpen] = useState(defaultOpen ?? false)\r\n\t\tconst open = externalOpen ?? innerOpen\r\n\r\n\t\tif ((!!onCloseInterrupt || !!onOpen) && !!externalOpenChange) {\r\n\t\t\tthrow new Error(\"Neither the `onCloseInterrupt` nor `onOpen` props can be used with `onOpenChange`.\")\r\n\t\t}\r\n\r\n\t\tif (externalOpen !== undefined && externalOpenChange === undefined) {\r\n\t\t\tthrow new Error(\"The `open` prop requires the `onOpenChange` prop.\")\r\n\t\t}\r\n\r\n\t\tif (!children && externalOpen === undefined) {\r\n\t\t\tthrow new Error(\"Either the `children` or `open` prop must be defined.\")\r\n\t\t} else if (children && externalOpen !== undefined) {\r\n\t\t\tthrow new Error(\"The `children` and `open` props cannot be used together.\")\r\n\t\t}\r\n\r\n\t\tconst handleOpenChange = useCallback(\r\n\t\t\t(next: boolean) => {\r\n\t\t\t\tif (externalOpenChange) return externalOpenChange(next)\r\n\r\n\t\t\t\tif (next && onOpen) {\r\n\t\t\t\t\tonOpen()\r\n\t\t\t\t} else if (!next && onCloseInterrupt) {\r\n\t\t\t\t\t// closes the dialog, bypassing the checks in `handleOpenChange`\r\n\t\t\t\t\tconst confirmClose = () => {\r\n\t\t\t\t\t\tsetInnerOpen(false)\r\n\t\t\t\t\t\tif (onClose) onClose()\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// if onCloseInterrupt is passed, bypass the standard close behavior and require\r\n\t\t\t\t\t// the passed `confirmClose` to close the dialog\r\n\t\t\t\t\treturn onCloseInterrupt(confirmClose)\r\n\t\t\t\t} else if (!next && onClose) {\r\n\t\t\t\t\tonClose()\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetInnerOpen(next)\r\n\t\t\t},\r\n\t\t\t[externalOpenChange, onOpen, onClose, onCloseInterrupt],\r\n\t\t)\r\n\r\n\t\tconst closeDialog = useCallback<CloseDialogWithOptions>(\r\n\t\t\t(options) => {\r\n\t\t\t\tif (options?.force) {\r\n\t\t\t\t\t// bypass the checks in the `handleOpenChange` function\r\n\t\t\t\t\treturn setInnerOpen(false)\r\n\t\t\t\t}\r\n\r\n\t\t\t\thandleOpenChange(false)\r\n\t\t\t},\r\n\t\t\t[handleOpenChange],\r\n\t\t)\r\n\r\n\t\treturn (\r\n\t\t\t<RadixDialog.Root open={open} onOpenChange={handleOpenChange}>\r\n\t\t\t\t<RadixDialog.Trigger>{children}</RadixDialog.Trigger>\r\n\t\t\t\t<RadixDialog.Content ref={ref} {...contentProps}>\r\n\t\t\t\t\t<DialogContent\r\n\t\t\t\t\t\tcloseDialog={closeDialog}\r\n\t\t\t\t\t\tcontent={content}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\tdescription={description}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</RadixDialog.Content>\r\n\t\t\t</RadixDialog.Root>\r\n\t\t)\r\n\t}),\r\n)\r\n","import { CloseDialogOptions, CloseDialogWithOptions } from \"./typings.ts\"\r\nimport { useCallback } from \"react\"\r\n\r\n/** This custom hook is used as a utility for wrapping a general callback in callback that accepts a close function for the\r\n * Blocks dialog component. Sometimes a side effect callback needs to be run upon the closure of a Dialog. This provides\r\n * a hook to wrap a callback with the returned close function passed to the Dialog Content. This allows the closure of\r\n * the Dialog and the callback to be run simultaneously. It also saves the developer from attaching callback logic with\r\n * the close functionality of the Dialog. */\r\nexport const useWrapCallbackInDialogClose = (callback: (...arg: never[]) => void, closeOptions: CloseDialogOptions) => {\r\n\treturn useCallback(\r\n\t\t(...arg: never[]) =>\r\n\t\t\t(closeDialog: CloseDialogWithOptions) => {\r\n\t\t\t\tcallback(...arg)\r\n\t\t\t\tcloseDialog(closeOptions)\r\n\t\t\t},\r\n\t\t[callback, closeOptions],\r\n\t)\r\n}\r\n","import { AlertDialog, Flex } from \"@radix-ui/themes\"\r\nimport { AlertDialogStandardContent } from \"./typings\"\r\nimport { Button } from \"../../Buttons\"\r\n\r\n// remove the margin-bottom from the title so that Flex works as expected\r\nexport const Title: typeof AlertDialog.Title = ((props) => (\r\n\t<AlertDialog.Title mb=\"0\" {...props} />\r\n)) as typeof AlertDialog.Title\r\n\r\nexport const AlertDialogContent = (props: AlertDialogStandardContent) => {\r\n\tconst { title, description, actionText = \"Confirm\", cancelText = \"Cancel\", onAction, onCancel, severity } = props\r\n\treturn (\r\n\t\t<Flex direction=\"column\" gap=\"2\">\r\n\t\t\t<Flex direction=\"column\" gap=\"1\">\r\n\t\t\t\t<Title>{title}</Title>\r\n\t\t\t\t<AlertDialog.Description>{description}</AlertDialog.Description>\r\n\t\t\t</Flex>\r\n\r\n\t\t\t<Flex gap=\"3\" mt=\"4\" justify=\"end\">\r\n\t\t\t\t<AlertDialog.Cancel>\r\n\t\t\t\t\t<Button variant=\"soft\" severity=\"info\" onClick={onCancel}>\r\n\t\t\t\t\t\t{cancelText}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</AlertDialog.Cancel>\r\n\t\t\t\t<AlertDialog.Action>\r\n\t\t\t\t\t<Button variant=\"solid\" severity={severity} onClick={onAction}>\r\n\t\t\t\t\t\t{actionText}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</AlertDialog.Action>\r\n\t\t\t</Flex>\r\n\t\t</Flex>\r\n\t)\r\n}\r\n","import { memo, useMemo } from \"react\"\r\nimport { AlertDialog as RadixAlertDialog } from \"@radix-ui/themes\"\r\nimport { AlertDialogContentHelpers, AlertDialogProps } from \"./typings\"\r\nimport { AlertDialogContent, Title } from \"./AlertDialogContent\"\r\n\r\n/**\r\n * The AlertDialog is used to confirm an action or prompt the user for a decision.\r\n * Unlike the Dialog, the AlertDialog is not dismissible by clicking outside of the dialog, nor can it be nested.\r\n *\r\n * To use, place the `AlertDialogProvider` at the root of your app and use the `useAlertDialog` hook to open the dialog.\r\n *\r\n * To set the content of the dialog, use the `content` prop or pass values for the `title`, `description`, and `onAction` props.\r\n */\r\nexport const AlertDialog = memo(function AlertDialog(props: AlertDialogProps) {\r\n\tconst { open, setOpen, children, ...contentProps } = props\r\n\r\n\tconst helpers: AlertDialogContentHelpers = useMemo(() => {\r\n\t\treturn {\r\n\t\t\tclose: () => setOpen(false),\r\n\t\t\tTitle,\r\n\t\t\tDescription: RadixAlertDialog.Description,\r\n\t\t}\r\n\t}, [setOpen])\r\n\r\n\treturn (\r\n\t\t<RadixAlertDialog.Root open={open} onOpenChange={setOpen}>\r\n\t\t\t<RadixAlertDialog.Content>\r\n\t\t\t\t{\"content\" in contentProps ? contentProps.content(helpers) : <AlertDialogContent {...contentProps} />}\r\n\t\t\t</RadixAlertDialog.Content>\r\n\t\t\t{children}\r\n\t\t</RadixAlertDialog.Root>\r\n\t)\r\n})\r\n","import { createContext, memo, useState, useCallback } from \"react\"\r\nimport { AlertDialogContextType, AlertDialogOptions } from \"./typings\"\r\nimport { AlertDialog } from \"./AlertDialog\"\r\n\r\ninterface AlertDialogProviderProps {\r\n\tchildren: React.ReactNode\r\n}\r\n\r\nexport const AlertDialogContent = createContext<AlertDialogContextType>(() => {\r\n\tthrow new Error(\"No AlertDialogProvider found\")\r\n})\r\n\r\nconst initialState: AlertDialogOptions = {\r\n\tcontent: () => null,\r\n}\r\n\r\nexport const AlertDialogProvider = memo(function AlertDialogProvider({ children }: AlertDialogProviderProps) {\r\n\tconst [open, setOpen] = useState(false)\r\n\tconst [state, setState] = useState<AlertDialogOptions>(initialState)\r\n\r\n\tconst openDialog = useCallback<AlertDialogContextType>(\r\n\t\t(options) => {\r\n\t\t\tif (open) throw new Error(\"AlertDialog is already open\")\r\n\r\n\t\t\tsetState(options)\r\n\t\t\tsetOpen(true)\r\n\t\t},\r\n\t\t[open],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<AlertDialog open={open} setOpen={setOpen} {...state}>\r\n\t\t\t<AlertDialogContent.Provider value={openDialog}>{children}</AlertDialogContent.Provider>\r\n\t\t</AlertDialog>\r\n\t)\r\n})\r\n","import { useCallback, useContext } from \"react\"\r\nimport { AlertDialogContent } from \"./context\"\r\n\r\nexport const useAlertDialog = () => {\r\n\treturn useContext(AlertDialogContent)\r\n}\r\n\r\ninterface useDiscardAlertDialogProps {\r\n\tonDiscard: () => void\r\n\tonCancel?: () => void\r\n}\r\n\r\nexport const useDiscardAlertDialog = () => {\r\n\tconst openAlertDialog = useAlertDialog()\r\n\r\n\treturn useCallback(\r\n\t\t(props: useDiscardAlertDialogProps) =>\r\n\t\t\topenAlertDialog({\r\n\t\t\t\ttitle: \"Discard changes?\",\r\n\t\t\t\tdescription: \"You have unsaved changes. Are you sure you want to discard them?\",\r\n\t\t\t\tactionText: \"Discard\",\r\n\t\t\t\tseverity: \"danger\",\r\n\t\t\t\tonAction: props.onDiscard,\r\n\t\t\t\tonCancel: props.onCancel,\r\n\t\t\t}),\r\n\t\t[openAlertDialog],\r\n\t)\r\n}\r\n","import { FC, forwardRef, memo, PropsWithChildren } from \"react\"\r\nimport { DropdownMenu as RadixDropdownMenu } from \"@radix-ui/themes\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\nimport { DropdownMenuItemGroupItemProps } from \"./DropdownMenuGroups.tsx\"\r\nimport { BaseMenuProps } from \"../BaseMenuGroups\"\r\n\r\nexport type DropdownMenuItemProps = DropdownMenuItemGroupItemProps\r\n\r\nexport type DropdownMenuProps = PropsWithChildren & BaseMenuProps\r\n\r\n/** The DropdownMenu component is a user interface element that provides a list of options for the user to choose from.\r\n * It is commonly used in web applications to present a set of related choices in a compact and organized manner.\r\n * This DropdownMenu component is a wrapper around the Radix-UI DropdownMenu component that can be found here https://www.radix-ui.com/themes/docs/components/dropdown-menu */\r\nexport const DropdownMenu: FC<DropdownMenuProps> = memo(\r\n\tforwardRef<HTMLDivElement, DropdownMenuProps>(({ trigger, disabled, children, ...rest }) => {\r\n\t\tconst infoColor = useSeverityColor(\"info\")\r\n\r\n\t\treturn (\r\n\t\t\t<RadixDropdownMenu.Root>\r\n\t\t\t\t<RadixDropdownMenu.Trigger disabled={disabled}>{trigger}</RadixDropdownMenu.Trigger>\r\n\t\t\t\t<RadixDropdownMenu.Content variant=\"soft\" color={infoColor} {...rest}>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</RadixDropdownMenu.Content>\r\n\t\t\t</RadixDropdownMenu.Root>\r\n\t\t)\r\n\t}),\r\n)\r\n","import { FC, forwardRef, memo, PropsWithChildren, ReactNode } from \"react\"\r\nimport { Flex, Input, InputProps } from \"..\"\r\nimport { Box } from \"@radix-ui/themes\"\r\n\r\nimport styles from \"./BaseMenuComponents.module.sass\"\r\n\r\n// TODO: Consider making a named export for this Base Visual/Layout components\r\n// ex. BaseMenu.Item, BaseMenu.Input, BaseMenu.Separator\r\nexport interface BaseMenuItem extends PropsWithChildren {\r\n\trightSlot?: ReactNode\r\n}\r\nexport const BaseMenuItem: FC<BaseMenuItem> = memo(\r\n\tforwardRef<HTMLDivElement, BaseMenuItem>(({ children, rightSlot }, ref) => {\r\n\t\treturn (\r\n\t\t\t<Box className={styles.BaseMenuItem} ref={ref} position=\"relative\" px=\"2\" height=\"6\">\r\n\t\t\t\t<Flex gap=\"6\" height=\"100%\" align=\"center\">\r\n\t\t\t\t\t<Flex grow=\"1\" height=\"100%\" align=\"center\" gap=\"1\">\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t\t<Flex height=\"100%\" width=\"4\" align=\"center\" justify=\"end\">\r\n\t\t\t\t\t\t{rightSlot}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</Flex>\r\n\t\t\t</Box>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\nexport interface BaseMenuInputProps extends Omit<InputProps, \"showInputLength\"> {}\r\nexport const BaseMenuInput: FC<BaseMenuInputProps> = memo(\r\n\tforwardRef<HTMLInputElement, BaseMenuInputProps>((props) => {\r\n\t\treturn (\r\n\t\t\t<Box className={styles.BaseMenuInput} px=\"2\" height=\"6\" width=\"max-content\">\r\n\t\t\t\t<Input {...props} variant=\"ghost\" />\r\n\t\t\t</Box>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\n/** Separator component used for Base Menus */\r\nexport const BaseMenuSeparator: FC = memo(function BaseMenuSeparator() {\r\n\treturn (\r\n\t\t<Box className={styles.BaseMenuSeparator} width=\"100%\" py=\"1\">\r\n\t\t\t<Box height=\"0\" width=\"100%\" />\r\n\t\t</Box>\r\n\t)\r\n})\r\n","import { MenuItemProps } from \"@radix-ui/react-menu\"\r\nimport { ChangeEvent, useCallback } from \"react\"\r\nimport { TextFilterProps } from \"./typings.ts\"\r\n\r\n// These hooks are simply used to endorse the DRY principle. Should not be used elsewhere as they are simply helpers for\r\n// the base menu group components\r\nexport const useCloseOnSelectHandler = (closeOnSelect: boolean) => {\r\n\treturn useCallback(\r\n\t\t(onSelect: MenuItemProps[\"onSelect\"]) => (event: Event) => {\r\n\t\t\tif (!closeOnSelect) {\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t}\r\n\t\t\tif (onSelect) onSelect(event)\r\n\t\t},\r\n\t\t[closeOnSelect],\r\n\t)\r\n}\r\n\r\nexport const useTextFilterChangeHandler = () => {\r\n\treturn useCallback(\r\n\t\t(onTextFilterChange: TextFilterProps[\"onFilterValueChange\"]) => (event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\tif (onTextFilterChange) onTextFilterChange(event.target.value)\r\n\t\t},\r\n\t\t[],\r\n\t)\r\n}\r\n","import { memo, useEffect } from \"react\"\r\nimport { Kbd } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { Flex } from \"../../Flex\"\r\nimport { BaseMenuInput, BaseMenuItem, BaseMenuSeparator } from \"../BaseMenuComponents.tsx\"\r\nimport { BaseItemGroupElementProps, BaseItemGroupProps } from \"./typings.ts\"\r\nimport { useCloseOnSelectHandler, useTextFilterChangeHandler } from \"../utils.ts\"\r\n\r\nimport styles from \"../BaseMenuComponents.module.sass\"\r\n\r\n// TODO: Add numItems prop that determines the number of items displayed before scrolling\r\nexport const BaseItemGroup = memo(function BaseItemGroup({\r\n\titems,\r\n\tcloseOnSelect = true,\r\n\tgroupElement: GroupElement,\r\n\titemElement: ItemElement,\r\n\tfilterValue,\r\n\tonFilterValueChange,\r\n\tplaceholder,\r\n\ticons,\r\n\tseparator,\r\n\t...rest\r\n}: BaseItemGroupProps & BaseItemGroupElementProps) {\r\n\tconst closeOnSelectHandler = useCloseOnSelectHandler(closeOnSelect)\r\n\tconst textFilterChangeHandler = useTextFilterChangeHandler()\r\n\r\n\tuseEffect(() => {\r\n\t\treturn () => {\r\n\t\t\tif (onFilterValueChange) {\r\n\t\t\t\tonFilterValueChange(\"\")\r\n\t\t\t}\r\n\t\t}\r\n\t\t// REASON: Don't include onFilterValueChange in a dependency array, if it is required in the future, it must be ensured that\r\n\t\t// users wrap there onFilterChange callback function in a useCallback otherwise typing will trigger many re-renders\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [])\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<GroupElement {...rest}>\r\n\t\t\t\t<Flex direction=\"column\">\r\n\t\t\t\t\t{filterValue !== undefined && !!onFilterValueChange && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<BaseMenuInput\r\n\t\t\t\t\t\t\t\tvalue={filterValue}\r\n\t\t\t\t\t\t\t\tonChange={textFilterChangeHandler(onFilterValueChange)}\r\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\t\tleftSlot={icons?.left}\r\n\t\t\t\t\t\t\t\trightSlot={icons?.right}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{items.length !== 0 && <BaseMenuSeparator />}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{items.map(({ content, shortcut, className, onSelect, ...rest }, index) => (\r\n\t\t\t\t\t\t<ItemElement\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tclassName={classNames(className, styles.RemoveOutline)}\r\n\t\t\t\t\t\t\tonSelect={closeOnSelectHandler(onSelect)}\r\n\t\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<BaseMenuItem rightSlot={shortcut?.map((key, index) => <Kbd key={index}>{key}</Kbd>)}>\r\n\t\t\t\t\t\t\t\t{content}\r\n\t\t\t\t\t\t\t</BaseMenuItem>\r\n\t\t\t\t\t\t</ItemElement>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Flex>\r\n\t\t\t</GroupElement>\r\n\t\t\t{separator && <BaseMenuSeparator />}\r\n\t\t</>\r\n\t)\r\n})\r\n","import { memo, useCallback, useEffect } from \"react\"\r\nimport { BaseMenuInput, BaseMenuItem, BaseMenuSeparator } from \"../BaseMenuComponents.tsx\"\r\nimport { Flex } from \"../../Flex\"\r\n\r\nimport styles from \"../BaseMenuComponents.module.sass\"\r\nimport { BaseSelectGroupProps, BaseSelectGroupElementProps } from \"./typings.ts\"\r\nimport { useCloseOnSelectHandler, useTextFilterChangeHandler } from \"../utils.ts\"\r\nimport { CheckIcon, MagnifyingGlassIcon } from \"@radix-ui/react-icons\"\r\n\r\n// TODO: Add numItems prop that determines the number of items displayed before scrolling\r\nexport const BaseSelectGroup = memo(function BaseSelectGroup({\r\n\titems,\r\n\tvalue,\r\n\tcloseOnSelect = false,\r\n\tonValueChange,\r\n\tgroupElement: GroupElement,\r\n\tselectedIndicator,\r\n\titemElement: ItemElement,\r\n\titemIndicatorElement: ItemIndicatorElement,\r\n\tfilterValue,\r\n\tonFilterValueChange,\r\n\tplaceholder,\r\n\ticons,\r\n\tseparator,\r\n}: BaseSelectGroupProps & BaseSelectGroupElementProps) {\r\n\tconst textFilterChangeHandler = useTextFilterChangeHandler()\r\n\tconst closeOnSelectHandler = useCloseOnSelectHandler(closeOnSelect)\r\n\r\n\tuseEffect(() => {\r\n\t\treturn () => {\r\n\t\t\tif (onFilterValueChange) {\r\n\t\t\t\tonFilterValueChange(\"\")\r\n\t\t\t}\r\n\t\t}\r\n\t\t// REASON: Don't include onFilterValueChange in a dependency array, if it is required in the future, it must be ensured that\r\n\t\t// users wrap there onFilterChange callback function in a useCallback otherwise typing will trigger many re-renders\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [])\r\n\r\n\tconst handleCheckedChange = useCallback(\r\n\t\t(value: string) => (checked: boolean) => {\r\n\t\t\tonValueChange(checked ? value : null)\r\n\t\t},\r\n\t\t[onValueChange],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<GroupElement>\r\n\t\t\t\t<Flex direction=\"column\">\r\n\t\t\t\t\t{filterValue !== undefined && !!onFilterValueChange && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<BaseMenuInput\r\n\t\t\t\t\t\t\t\tvalue={filterValue}\r\n\t\t\t\t\t\t\t\tonChange={textFilterChangeHandler(onFilterValueChange)}\r\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\t\tleftSlot={icons?.left}\r\n\t\t\t\t\t\t\t\trightSlot={icons?.right || <MagnifyingGlassIcon />}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{items.length !== 0 && <BaseMenuSeparator />}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{items.map(({ content, value: itemValue, onSelect, ...rest }, index) => (\r\n\t\t\t\t\t\t<ItemElement\r\n\t\t\t\t\t\t\tclassName={styles.RemoveOutline}\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tchecked={itemValue === value}\r\n\t\t\t\t\t\t\tonCheckedChange={handleCheckedChange(itemValue)}\r\n\t\t\t\t\t\t\tonSelect={closeOnSelectHandler(onSelect)}\r\n\t\t\t\t\t\t\t/** this causes input issues if left unset */\r\n\t\t\t\t\t\t\ttextValue=\"\"\r\n\t\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<BaseMenuItem\r\n\t\t\t\t\t\t\t\trightSlot={\r\n\t\t\t\t\t\t\t\t\t<ItemIndicatorElement asChild>\r\n\t\t\t\t\t\t\t\t\t\t{selectedIndicator || <CheckIcon />}\r\n\t\t\t\t\t\t\t\t\t</ItemIndicatorElement>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{content}\r\n\t\t\t\t\t\t\t</BaseMenuItem>\r\n\t\t\t\t\t\t</ItemElement>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Flex>\r\n\t\t\t</GroupElement>\r\n\t\t\t{separator && <BaseMenuSeparator />}\r\n\t\t</>\r\n\t)\r\n})\r\n","import { memo, useCallback, useEffect } from \"react\"\r\nimport classNames from \"classnames\"\r\nimport { CheckIcon } from \"@radix-ui/react-icons\"\r\nimport { Flex } from \"../../Flex\"\r\nimport { BaseMenuInput, BaseMenuItem, BaseMenuSeparator } from \"../BaseMenuComponents.tsx\"\r\nimport { BaseMultiSelectGroupProps, BaseMultiSelectGroupElementProps } from \"./typings.ts\"\r\nimport { useCloseOnSelectHandler, useTextFilterChangeHandler } from \"../utils.ts\"\r\n\r\nimport styles from \"../BaseMenuComponents.module.sass\"\r\n\r\n// TODO: Add numItems prop that determines the number of items displayed before scrolling\r\nexport const BaseMultiSelectGroup = memo(function BaseMultiSelectGroup({\r\n\titems,\r\n\tvalues,\r\n\tonValueChange,\r\n\tcloseOnSelect = false,\r\n\tgroupElement: GroupElement,\r\n\tselectedIndicator,\r\n\titemElement: ItemElement,\r\n\titemIndicatorElement: ItemIndicatorElement,\r\n\tfilterValue,\r\n\tonFilterValueChange,\r\n\tplaceholder,\r\n\ticons,\r\n\tseparator = false,\r\n}: BaseMultiSelectGroupProps & BaseMultiSelectGroupElementProps) {\r\n\tconst closeOnSelectHandler = useCloseOnSelectHandler(closeOnSelect)\r\n\tconst textFilterChangeHandler = useTextFilterChangeHandler()\r\n\r\n\tuseEffect(() => {\r\n\t\treturn () => {\r\n\t\t\tif (onFilterValueChange) {\r\n\t\t\t\tonFilterValueChange(\"\")\r\n\t\t\t}\r\n\t\t}\r\n\t\t// REASON: Don't include onFilterValueChange in a dependency array, if it is required in the future, it must be ensured that\r\n\t\t// users wrap there onFilterChange callback function in a useCallback otherwise typing will trigger many re-renders\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [])\r\n\r\n\tconst handleCheckedChange = useCallback(\r\n\t\t(value: string) => (checked: boolean) => {\r\n\t\t\tif (checked) {\r\n\t\t\t\tonValueChange([...values, value])\r\n\t\t\t} else {\r\n\t\t\t\tconst valueIndex = values.indexOf(value)\r\n\t\t\t\tif (valueIndex < 0) {\r\n\t\t\t\t\tthrow new Error(\"unexpected value not found within values array\")\r\n\t\t\t\t}\r\n\t\t\t\tconst tempValues = [...values]\r\n\t\t\t\ttempValues.splice(valueIndex, 1)\r\n\t\t\t\tonValueChange(tempValues)\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onValueChange, values],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<GroupElement>\r\n\t\t\t\t<Flex direction=\"column\">\r\n\t\t\t\t\t{filterValue !== undefined && !!onFilterValueChange && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<BaseMenuInput\r\n\t\t\t\t\t\t\t\tvalue={filterValue}\r\n\t\t\t\t\t\t\t\tonChange={textFilterChangeHandler(onFilterValueChange)}\r\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\t\tleftSlot={icons?.left}\r\n\t\t\t\t\t\t\t\trightSlot={icons?.right}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{items.length !== 0 && <BaseMenuSeparator />}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{items.map(({ value, content, className, onSelect, ...rest }, index) => (\r\n\t\t\t\t\t\t<ItemElement\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tclassName={classNames(className, styles.RemoveOutline)}\r\n\t\t\t\t\t\t\tonSelect={closeOnSelectHandler(onSelect)}\r\n\t\t\t\t\t\t\tonCheckedChange={handleCheckedChange(value)}\r\n\t\t\t\t\t\t\tchecked={values.includes(value)}\r\n\t\t\t\t\t\t\t/** this causes input issues if left unset */\r\n\t\t\t\t\t\t\ttextValue=\"\"\r\n\t\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<BaseMenuItem\r\n\t\t\t\t\t\t\t\trightSlot={\r\n\t\t\t\t\t\t\t\t\t<ItemIndicatorElement asChild>\r\n\t\t\t\t\t\t\t\t\t\t{selectedIndicator || <CheckIcon />}\r\n\t\t\t\t\t\t\t\t\t</ItemIndicatorElement>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{content}\r\n\t\t\t\t\t\t\t</BaseMenuItem>\r\n\t\t\t\t\t\t</ItemElement>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Flex>\r\n\t\t\t</GroupElement>\r\n\t\t\t{separator && <BaseMenuSeparator />}\r\n\t\t</>\r\n\t)\r\n})\r\n","import { memo } from \"react\"\r\nimport { BaseSubMenuGroupElementProps, BaseSubMenuGroupProps } from \"./typings.ts\"\r\nimport { BaseMenuItem, BaseMenuSeparator } from \"../BaseMenuComponents.tsx\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"../BaseMenuComponents.module.sass\"\r\n\r\nexport const BaseSubMenuGroup = memo(function BaseSubMenuGroup({\r\n\tsubTriggerElement: SubTriggerElement,\r\n\tgroupElement: GroupElement,\r\n\tsubContentElement: SubContentElement,\r\n\tsubElement: SubElement,\r\n\titems,\r\n\tseparator = false,\r\n\t...rest\r\n}: BaseSubMenuGroupProps & BaseSubMenuGroupElementProps) {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<GroupElement {...rest}>\r\n\t\t\t\t{items.map(({ triggerIndicator, content, subContent, className, ...rest }, index) => (\r\n\t\t\t\t\t<SubElement key={index}>\r\n\t\t\t\t\t\t<SubTriggerElement className={classNames(className, styles.RemoveOutline)} {...rest}>\r\n\t\t\t\t\t\t\t<BaseMenuItem rightSlot={triggerIndicator}>{content}</BaseMenuItem>\r\n\t\t\t\t\t\t</SubTriggerElement>\r\n\t\t\t\t\t\t{/* sideOffset ensures the Sub Content does not overlap the main menu*/}\r\n\t\t\t\t\t\t<SubContentElement sideOffset={10}>{subContent}</SubContentElement>\r\n\t\t\t\t\t</SubElement>\r\n\t\t\t\t))}\r\n\t\t\t</GroupElement>\r\n\t\t\t{separator && <BaseMenuSeparator />}\r\n\t\t</>\r\n\t)\r\n})\r\n","import { memo } from \"react\"\r\nimport { DropdownMenu } from \"@radix-ui/themes\"\r\nimport * as RadixDropdownMenu from \"@radix-ui/react-dropdown-menu\"\r\nimport {\r\n\tBaseItemGroup,\r\n\tBaseSelectGroup,\r\n\tBaseMultiSelectGroup,\r\n\tBaseSubMenuGroup,\r\n\tBaseItemGroupProps,\r\n\tBaseSelectGroupProps,\r\n\tBaseMultiSelectGroupProps,\r\n\tBaseSelectItemProps,\r\n\tBaseItemProps,\r\n\tBaseMultiSelectItemProps,\r\n\tBaseSubMenuGroupProps,\r\n\tBaseSubMenuItemProps,\r\n} from \"../BaseMenuGroups\"\r\n\r\n// TODO: A similar pattern must be created for Radix Context Menu, that is, creating the Item Group, MultiSelect Group and Select Group\r\n\r\n/** Item Group */\r\nexport type DropdownMenuItemGroupItemProps = BaseItemProps\r\nexport type DropdownMenuItemGroupProps = BaseItemGroupProps\r\nexport const DropdownMenuItemGroup = memo(function DropdownMenuItemGroup(props: DropdownMenuItemGroupProps) {\r\n\treturn <BaseItemGroup {...props} itemElement={RadixDropdownMenu.Item} groupElement={RadixDropdownMenu.Group} />\r\n})\r\n\r\n/** Select Group */\r\nexport type DropdownMenuSelectGroupItemProps = BaseSelectItemProps\r\nexport type DropdownMenuSelectGroupProps = BaseSelectGroupProps\r\nexport const DropdownMenuSelectGroup = memo(function DropdownMenuSelectGroup(props: DropdownMenuSelectGroupProps) {\r\n\treturn (\r\n\t\t<BaseSelectGroup\r\n\t\t\t{...props}\r\n\t\t\titemElement={RadixDropdownMenu.CheckboxItem}\r\n\t\t\tgroupElement={RadixDropdownMenu.Group}\r\n\t\t\titemIndicatorElement={RadixDropdownMenu.ItemIndicator}\r\n\t\t/>\r\n\t)\r\n})\r\n\r\n/** MultiSelect Group */\r\nexport type DropdownMenuMultiSelectGroupItemProps = BaseMultiSelectItemProps\r\nexport type DropdownMenuMultiSelectGroupProps = BaseMultiSelectGroupProps\r\nexport const DropdownMenuMultiSelectGroup = memo(function DropdownMenuMultiSelectGroup(\r\n\tprops: DropdownMenuMultiSelectGroupProps,\r\n) {\r\n\treturn (\r\n\t\t<BaseMultiSelectGroup\r\n\t\t\t{...props}\r\n\t\t\titemElement={RadixDropdownMenu.CheckboxItem}\r\n\t\t\tgroupElement={RadixDropdownMenu.Group}\r\n\t\t\titemIndicatorElement={RadixDropdownMenu.ItemIndicator}\r\n\t\t/>\r\n\t)\r\n})\r\n\r\n/** SubMenu Group */\r\nexport type DropdownMenuSubMenuGroupItemProps = BaseSubMenuItemProps\r\nexport type DropdownMenuSubMenuGroupProps = BaseSubMenuGroupProps\r\nexport const DropdownMenuSubMenuGroup = memo(function DropdownMenuSubMenuGroup(props: DropdownMenuSubMenuGroupProps) {\r\n\treturn (\r\n\t\t<BaseSubMenuGroup\r\n\t\t\t{...props}\r\n\t\t\tgroupElement={RadixDropdownMenu.Group}\r\n\t\t\tsubElement={DropdownMenu.Sub}\r\n\t\t\tsubTriggerElement={RadixDropdownMenu.SubTrigger}\r\n\t\t\tsubContentElement={DropdownMenu.SubContent}\r\n\t\t/>\r\n\t)\r\n})\r\n","import { DropdownMenu as RadixDropdownMenu } from \"@radix-ui/themes\"\r\nimport { FC, forwardRef, memo } from \"react\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\n\r\nimport {\r\n\tDropdownMenuItemGroup,\r\n\tDropdownMenuItemGroupItemProps,\r\n\tDropdownMenuItemGroupProps,\r\n} from \"../DropdownMenu/DropdownMenuGroups.tsx\"\r\nimport { BaseMenuProps } from \"../BaseMenuGroups\"\r\n\r\nexport type DropdownItemMenuItemProps = DropdownMenuItemGroupItemProps\r\n\r\nexport type DropdownItemMenuProps = DropdownMenuItemGroupProps & BaseMenuProps\r\n\r\n/** The DropdownItemMenu component is a user interface element that provides a list of options for the user to choose from.\r\n * It is commonly used in web applications to present a set of related choices in a compact and organized manner.\r\n * This DropdownItemMenu component is a wrapper around the Radix-UI DropdownItemMenu component that can be found here https://www.radix-ui.com/themes/docs/components/dropdown-menu */\r\nexport const DropdownItemMenu: FC<DropdownItemMenuProps> = memo(\r\n\tforwardRef<HTMLDivElement, DropdownItemMenuProps>(\r\n\t\t({\r\n\t\t\ttrigger,\r\n\t\t\titems,\r\n\t\t\tdisabled,\r\n\t\t\tcloseOnSelect = true,\r\n\t\t\tfilterValue,\r\n\t\t\tonFilterValueChange,\r\n\t\t\tplaceholder,\r\n\t\t\t...rest\r\n\t\t}) => {\r\n\t\t\tconst infoColor = useSeverityColor(\"info\")\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<RadixDropdownMenu.Root>\r\n\t\t\t\t\t<RadixDropdownMenu.Trigger disabled={disabled}>{trigger}</RadixDropdownMenu.Trigger>\r\n\t\t\t\t\t<RadixDropdownMenu.Content variant=\"soft\" {...rest} color={infoColor}>\r\n\t\t\t\t\t\t<DropdownMenuItemGroup\r\n\t\t\t\t\t\t\titems={items}\r\n\t\t\t\t\t\t\tfilterValue={filterValue}\r\n\t\t\t\t\t\t\tonFilterValueChange={onFilterValueChange}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\tcloseOnSelect={closeOnSelect}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</RadixDropdownMenu.Content>\r\n\t\t\t\t</RadixDropdownMenu.Root>\r\n\t\t\t)\r\n\t\t},\r\n\t),\r\n)\r\n","import { FC, forwardRef, memo } from \"react\"\r\nimport { DropdownMenu as RadixDropdownMenu } from \"@radix-ui/themes\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\nimport {\r\n\tDropdownMenuItemGroupItemProps,\r\n\tDropdownMenuSelectGroup,\r\n\tDropdownMenuSelectGroupProps,\r\n} from \"../DropdownMenu/DropdownMenuGroups.tsx\"\r\nimport { BaseMenuProps } from \"../BaseMenuGroups\"\r\n\r\nexport type DropdownSelectItemProps = DropdownMenuItemGroupItemProps\r\n\r\nexport type DropdownSelectProps = DropdownMenuSelectGroupProps & BaseMenuProps\r\n\r\nexport const DropdownSelect: FC<DropdownSelectProps> = memo(\r\n\tforwardRef<HTMLDivElement, DropdownSelectProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\ttrigger,\r\n\t\t\t\titems,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonValueChange,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tfilterValue,\r\n\t\t\t\tonFilterValueChange,\r\n\t\t\t\tcloseOnSelect = true,\r\n\t\t\t\ticons,\r\n\t\t\t\tside,\r\n\t\t\t},\r\n\t\t\tref,\r\n\t\t) => {\r\n\t\t\tconst infoColor = useSeverityColor(\"info\")\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<RadixDropdownMenu.Root>\r\n\t\t\t\t\t<RadixDropdownMenu.Trigger disabled={disabled}>{trigger}</RadixDropdownMenu.Trigger>\r\n\t\t\t\t\t<RadixDropdownMenu.Content ref={ref} variant=\"soft\" color={infoColor} side={side}>\r\n\t\t\t\t\t\t<DropdownMenuSelectGroup\r\n\t\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\t\tonValueChange={onValueChange}\r\n\t\t\t\t\t\t\titems={items}\r\n\t\t\t\t\t\t\tcloseOnSelect={closeOnSelect}\r\n\t\t\t\t\t\t\tfilterValue={filterValue}\r\n\t\t\t\t\t\t\tonFilterValueChange={onFilterValueChange}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\ticons={icons}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</RadixDropdownMenu.Content>\r\n\t\t\t\t</RadixDropdownMenu.Root>\r\n\t\t\t)\r\n\t\t},\r\n\t),\r\n)\r\n","import { FC, forwardRef, memo } from \"react\"\r\nimport { DropdownMenu as RadixDropdownMenu } from \"@radix-ui/themes\"\r\nimport {\r\n\tDropdownMenuMultiSelectGroup,\r\n\tDropdownMenuMultiSelectGroupItemProps,\r\n\tDropdownMenuMultiSelectGroupProps,\r\n} from \"../DropdownMenu\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\nimport { BaseMenuProps } from \"../BaseMenuGroups\"\r\n\r\nexport type DropdownMultiSelectItemProps = DropdownMenuMultiSelectGroupItemProps\r\n\r\nexport type DropdownMultiSelectProps = DropdownMenuMultiSelectGroupProps & BaseMenuProps\r\nexport const DropdownMultiSelect: FC<DropdownMultiSelectProps> = memo(\r\n\tforwardRef<HTMLDivElement, DropdownMultiSelectProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\ttrigger,\r\n\t\t\t\titems,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tvalues,\r\n\t\t\t\tonValueChange,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tfilterValue,\r\n\t\t\t\tonFilterValueChange,\r\n\t\t\t\tcloseOnSelect = false,\r\n\t\t\t\ticons,\r\n\t\t\t\tside,\r\n\t\t\t},\r\n\t\t\tref,\r\n\t\t) => {\r\n\t\t\tconst infoColor = useSeverityColor(\"info\")\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<RadixDropdownMenu.Root>\r\n\t\t\t\t\t<RadixDropdownMenu.Trigger disabled={disabled}>{trigger}</RadixDropdownMenu.Trigger>\r\n\t\t\t\t\t<RadixDropdownMenu.Content ref={ref} variant=\"soft\" color={infoColor} side={side}>\r\n\t\t\t\t\t\t<DropdownMenuMultiSelectGroup\r\n\t\t\t\t\t\t\tvalues={values}\r\n\t\t\t\t\t\t\tonValueChange={onValueChange}\r\n\t\t\t\t\t\t\titems={items}\r\n\t\t\t\t\t\t\tcloseOnSelect={closeOnSelect}\r\n\t\t\t\t\t\t\tfilterValue={filterValue}\r\n\t\t\t\t\t\t\tonFilterValueChange={onFilterValueChange}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\ticons={icons}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</RadixDropdownMenu.Content>\r\n\t\t\t\t</RadixDropdownMenu.Root>\r\n\t\t\t)\r\n\t\t},\r\n\t),\r\n)\r\n","import { FC, memo, PointerEventHandler, ReactElement, useCallback, useState } from \"react\"\r\ninterface ChildProps {\r\n\tisHovered: boolean\r\n\tonPointerEnter: PointerEventHandler<HTMLElement>\r\n\tonPointerLeave: PointerEventHandler<HTMLElement>\r\n}\r\ninterface HoverUtilityProps {\r\n\tchildren: (props: ChildProps) => ReactElement\r\n}\r\n\r\n/** HoverUtility is a utility component used for detecting when an element is being hovered over or not, is passes a\r\n * isHovered variable to its children as well as props onPointerEnter and onPointerLeave that can be spread on any\r\n * child component that should be used as the element to observe hovering on. See stories of examples of its use. */\r\nexport const HoverUtility: FC<HoverUtilityProps> = memo(function Root({ children }: HoverUtilityProps) {\r\n\tconst [isHovered, setIsHovered] = useState<boolean>(false)\r\n\r\n\tconst handlePointerEnter = useCallback(() => {\r\n\t\tsetIsHovered(true)\r\n\t}, [])\r\n\r\n\tconst handlePointerLeave = useCallback(() => {\r\n\t\tsetIsHovered(false)\r\n\t}, [])\r\n\r\n\treturn children({\r\n\t\tisHovered: isHovered,\r\n\t\tonPointerEnter: handlePointerEnter,\r\n\t\tonPointerLeave: handlePointerLeave,\r\n\t})\r\n})\r\n","import React, { FC, forwardRef } from \"react\"\r\nimport { Select as RadixSelect } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { useResponsiveMapping, useSeverityColor } from \"../utils.ts\"\r\nimport { SizeMapping } from \"../constants.ts\"\r\nimport { SelectItemProps, SelectProps } from \"./typings.ts\"\r\n\r\nimport styles from \"./Select.module.sass\"\r\n\r\nconst _Select = forwardRef(function Select(\r\n\t{\r\n\t\tclassName,\r\n\t\tfluid,\r\n\t\tsize = \"medium\",\r\n\t\tvariant = \"surface\",\r\n\t\tseverity = \"primary\",\r\n\t\titemSeverity = \"info\",\r\n\t\tplaceholder = \"Select\",\r\n\t\tside,\r\n\t\titems = [],\r\n\t\tvalue,\r\n\t\tid,\r\n\t\t...rest\r\n\t}: SelectProps,\r\n\tref: React.Ref<HTMLButtonElement>,\r\n) {\r\n\tconst mappedSize = useResponsiveMapping(size, SizeMapping)\r\n\tconst severityColor = useSeverityColor(severity)\r\n\tconst itemSeverityColor = useSeverityColor(itemSeverity)\r\n\r\n\t// TODO: extend functionality to support grouping of items\r\n\t// TODO: remove key change based on value once placeholder issue it fixed in radix-ui/themes\r\n\treturn (\r\n\t\t<RadixSelect.Root size={mappedSize} {...rest} key={value === undefined ? 1 : 0} value={value}>\r\n\t\t\t<RadixSelect.Trigger\r\n\t\t\t\tclassName={classNames(className, {\r\n\t\t\t\t\t[styles.fluid!]: fluid,\r\n\t\t\t\t})}\r\n\t\t\t\tid={id}\r\n\t\t\t\tref={ref}\r\n\t\t\t\tvariant={variant}\r\n\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\tcolor={severityColor}\r\n\t\t\t/>\r\n\t\t\t<RadixSelect.Content\r\n\t\t\t\tside={side}\r\n\t\t\t\tclassName={styles.contentDefault}\r\n\t\t\t\tposition=\"popper\"\r\n\t\t\t\tvariant={variant !== \"surface\" ? \"soft\" : \"solid\"}\r\n\t\t\t\tcolor={itemSeverityColor}\r\n\t\t\t>\r\n\t\t\t\t{items.map(({ itemContent, value, ...rest }: SelectItemProps) => (\r\n\t\t\t\t\t<RadixSelect.Item className=\"overmap-select-item\" key={value} value={value} {...rest}>\r\n\t\t\t\t\t\t{itemContent}\r\n\t\t\t\t\t</RadixSelect.Item>\r\n\t\t\t\t))}\r\n\t\t\t</RadixSelect.Content>\r\n\t\t</RadixSelect.Root>\r\n\t)\r\n})\r\nexport const Select: FC<SelectProps> = React.memo(_Select)\r\n","import { FC, ReactNode, forwardRef, memo } from \"react\"\r\nimport { SizeMapping } from \"../constants\"\r\nimport { Size } from \"../typings\"\r\nimport { Box, Checkbox, Flex, Responsive, Select } from \"@radix-ui/themes\"\r\n\r\nexport interface MultiSelectOption {\r\n\tlabel: ReactNode\r\n\tvalue: string\r\n}\r\n\r\ninterface MultiSelectItemProps extends MultiSelectOption {\r\n\tchecked: boolean\r\n\tsize?: Responsive<(typeof SizeMapping)[Size]>\r\n}\r\n\r\nexport const MultiSelectItem: FC<MultiSelectItemProps> = memo(\r\n\tforwardRef<HTMLDivElement, MultiSelectItemProps>((props, ref) => {\r\n\t\tconst { checked, label, value, size = \"2\" } = props\r\n\t\treturn (\r\n\t\t\t<Box asChild px={size}>\r\n\t\t\t\t<Select.Item value={value} ref={ref}>\r\n\t\t\t\t\t<Flex gap={size} align=\"center\">\r\n\t\t\t\t\t\t<Checkbox checked={checked} />\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</Select.Item>\r\n\t\t\t</Box>\r\n\t\t)\r\n\t}),\r\n)\r\n","import { Select } from \"@radix-ui/themes\"\r\nimport { ComponentProps, FC, forwardRef, memo, useCallback, useEffect, useMemo, useState } from \"react\"\r\nimport { Severity, Size } from \"../typings\"\r\nimport { useResponsiveMapping, useSeverityColor } from \"../utils\"\r\nimport { SizeMapping } from \"../constants\"\r\nimport { MultiSelectItem, MultiSelectOption } from \"./MultiSelectItem\"\r\n\r\ntype RadixTriggerProps = ComponentProps<typeof Select.Trigger>\r\n\r\nexport interface MultiSelectProps {\r\n\tvalue: string[]\r\n\tonValueChange: (value: string[]) => void\r\n\toptions: MultiSelectOption[]\r\n\r\n\t// root props\r\n\tdisabled?: boolean\r\n\t/** @default medium */\r\n\tsize?: Size\r\n\tname?: string\r\n\r\n\t// trigger props\r\n\tplaceholder?: string\r\n\tid?: string\r\n\t/** @default surface */\r\n\tvariant?: Exclude<RadixTriggerProps[\"variant\"], \"classic\">\r\n\tradius?: RadixTriggerProps[\"radius\"]\r\n\t/** @default primary */\r\n\tseverity?: Severity\r\n\tclassName?: string\r\n}\r\n\r\nconst SELECT_ALL_VALUE = \"__select_all__\"\r\n\r\n/**\r\n * `MultiSelect` does not support being used as an uncontrolled component,\r\n * hence `onValueChange` and `value` are required.\r\n */\r\nexport const MultiSelect: FC<MultiSelectProps> = memo(\r\n\tforwardRef<HTMLButtonElement, MultiSelectProps>((props, ref) => {\r\n\t\tconst [open, setOpen] = useState(false)\r\n\r\n\t\tconst { placeholder, value, onValueChange, options, disabled, name, ...triggerProps } = props\r\n\t\tconst size = useResponsiveMapping(props.size, SizeMapping)\r\n\t\tconst color = useSeverityColor(props.severity)\r\n\r\n\t\t// option value => label\r\n\t\tconst optionsMap = useMemo(() => new Map(options.map((o) => [o.value, o.label])), [options])\r\n\r\n\t\t// ex: \"label 1, label 2\" OR \"6 options selected\"\r\n\t\tconst displayValue =\r\n\t\t\tvalue.length > 4 ? (\r\n\t\t\t\t// to ensure the width of the select doesn't get too big\r\n\t\t\t\t`${value.length} options selected`\r\n\t\t\t) : (\r\n\t\t\t\t// convert the values to labels\r\n\t\t\t\t<span>{value.flatMap((v) => [optionsMap.get(v), \", \"]).slice(0, -1)}</span>\r\n\t\t\t)\r\n\r\n\t\tconst close = useCallback(() => setOpen(false), [])\r\n\r\n\t\tconst handleOpenChange = useCallback((open: boolean) => {\r\n\t\t\t// dismiss the internal close events\r\n\t\t\t// require clicking outside of the popup to close or pressing escape\r\n\t\t\tif (open) setOpen(true)\r\n\t\t}, [])\r\n\r\n\t\tconst handleValueChange = useCallback(\r\n\t\t\t(selected: string) => {\r\n\t\t\t\tlet next: string[]\r\n\t\t\t\tif (selected === SELECT_ALL_VALUE) {\r\n\t\t\t\t\tconst isAllSelected = value.length === options.length\r\n\t\t\t\t\tnext = isAllSelected ? [] : options.map((o) => o.value)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnext = value.includes(selected) ? value.filter((v) => v !== selected) : [...value, selected]\r\n\t\t\t\t}\r\n\r\n\t\t\t\tonValueChange(next)\r\n\t\t\t},\r\n\t\t\t[onValueChange, options, value],\r\n\t\t)\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (options.some(({ value }) => value === SELECT_ALL_VALUE)) {\r\n\t\t\t\tthrow new Error(`Cannot have an option with the value \"${SELECT_ALL_VALUE}\"`)\r\n\t\t\t}\r\n\t\t}, [options])\r\n\r\n\t\treturn (\r\n\t\t\t<Select.Root\r\n\t\t\t\topen={open}\r\n\t\t\t\tvalue=\"\"\r\n\t\t\t\tonOpenChange={handleOpenChange}\r\n\t\t\t\tonValueChange={handleValueChange}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tsize={size}\r\n\t\t\t\tname={name}\r\n\t\t\t\tautoComplete=\"off\"\r\n\t\t\t>\r\n\t\t\t\t<Select.Trigger\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tcolor={color}\r\n\t\t\t\t\tplaceholder={value.length > 0 ? (displayValue as string) : placeholder}\r\n\t\t\t\t\t// remove the placeholder styling when there is a value\r\n\t\t\t\t\tdata-placeholder={value.length > 0 ? undefined : true}\r\n\t\t\t\t\t{...triggerProps}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t<Select.Content\r\n\t\t\t\t\tcolor=\"gray\"\r\n\t\t\t\t\tvariant=\"soft\"\r\n\t\t\t\t\tposition=\"popper\"\r\n\t\t\t\t\tonEscapeKeyDown={close}\r\n\t\t\t\t\tonPointerDownOutside={close}\r\n\t\t\t\t>\r\n\t\t\t\t\t<MultiSelectItem\r\n\t\t\t\t\t\tvalue={SELECT_ALL_VALUE}\r\n\t\t\t\t\t\tlabel=\"Select all\"\r\n\t\t\t\t\t\tchecked={value.length === options.length}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{options.map((option) => (\r\n\t\t\t\t\t\t<MultiSelectItem\r\n\t\t\t\t\t\t\tkey={option.value}\r\n\t\t\t\t\t\t\t{...option}\r\n\t\t\t\t\t\t\tchecked={value.includes(option.value)}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Select.Content>\r\n\t\t\t</Select.Root>\r\n\t\t)\r\n\t}),\r\n)\r\n","import { FC, forwardRef, memo, Ref, useCallback, useLayoutEffect, useRef, useState } from \"react\"\r\nimport { Switch as RadixSwitch, Portal } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { SwitchProps } from \"./typings.ts\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\n\r\nimport styles from \"./Switch.module.sass\"\r\n\r\nconst _Switch = forwardRef(function Switch(\r\n\t{ className, severity = \"primary\", icon, defaultChecked = false, onCheckedChange, ...rest }: SwitchProps,\r\n\tref: Ref<HTMLButtonElement>,\r\n) {\r\n\t// fallbackRef used in case user does not pass in a ref\r\n\tconst fallbackRef = useRef<HTMLButtonElement>(null)\r\n\t// uncontrolled state to keep track of whether the Switch is checked or not, not passed to the Switch itself\r\n\tconst [checked, setChecked] = useState(rest.checked ? rest.checked : defaultChecked)\r\n\t// iconContainer is used to store the switch Thumb span element so that an Icon can be rendered within it\r\n\tconst [iconContainer, setIconContainer] = useState<HTMLSpanElement | undefined>()\r\n\tconst severityColor = useSeverityColor(severity)\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\tconst usedRef = ref ? ref : fallbackRef\r\n\t\tif (\"current\" in usedRef && usedRef.current) {\r\n\t\t\tsetIconContainer(usedRef.current?.querySelector(\"span.rt-SwitchThumb\") as HTMLSpanElement)\r\n\t\t}\r\n\t}, [ref])\r\n\r\n\tconst handleValueChange = useCallback(\r\n\t\t(checked: boolean) => {\r\n\t\t\tsetChecked(checked)\r\n\t\t\tif (onCheckedChange) onCheckedChange(checked)\r\n\t\t},\r\n\t\t[onCheckedChange],\r\n\t)\r\n\r\n\tconst _checked = rest.checked ? rest.checked : checked\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<RadixSwitch\r\n\t\t\t\tclassName={classNames(\"overmap-switch\", className, styles.default)}\r\n\t\t\t\tref={ref ? ref : fallbackRef}\r\n\t\t\t\tcolor={severityColor}\r\n\t\t\t\tradius=\"full\"\r\n\t\t\t\tdefaultChecked={defaultChecked}\r\n\t\t\t\tonCheckedChange={handleValueChange}\r\n\t\t\t\t{...rest}\r\n\t\t\t/>\r\n\t\t\t<Portal container={iconContainer} asChild>\r\n\t\t\t\t{icon && \"checked\" in icon ? (_checked ? icon[\"checked\"] : icon[\"unchecked\"]) : icon}\r\n\t\t\t</Portal>\r\n\t\t</>\r\n\t)\r\n})\r\n\r\n/** The Switch Component is a user interface element that allows users to toggle between two states, typically\r\n * representing \"on\" and \"off\" or \"enabled\" and \"disabled\". It is commonly used for settings, preferences, or any\r\n * binary options. This Switch component is a wrapper around the Radix-ui Switch component found here https://www.radix-ui.com/themes/docs/components/switch\r\n */\r\nexport const Switch: FC<SwitchProps> = memo(_Switch)\r\n","import { forwardRef, memo, Ref, useEffect, useState } from \"react\"\r\nimport { Box } from \"@radix-ui/themes\"\r\nimport { DragHandleDots2Icon } from \"@radix-ui/react-icons\"\r\nimport * as RadixDialogPrimitive from \"@radix-ui/react-dialog\"\r\nimport { DialogContentProps } from \"@radix-ui/react-dialog\"\r\nimport { Resizable } from \"re-resizable\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"./Sidebar.module.sass\"\r\n\r\ninterface SidebarProps extends Omit<DialogContentProps, \"asChild\" | \"forceMount\"> {\r\n\t/** determines what side the Sidebar appears from within its rendered container */\r\n\tside?: \"left\" | \"right\"\r\n\t/** when true, interactions with any elements outside the Sidebar will be disabled */\r\n\tmodal?: boolean\r\n\t/** The minimum width to which the Sidebar can be resized to\r\n\t * @default 300px\r\n\t * */\r\n\tminWidth?: number | string\r\n\t/** The maximum width to which the Sidebar can be resized to\r\n\t * @default 500px\r\n\t * */\r\n\tmaxWidth?: number | string\r\n\t/** determines if the Sidebar can be resized\r\n\t * @default true\r\n\t * */\r\n\tresizable?: boolean\r\n\t/** prop to control whether the Sidebar is open or not */\r\n\topen?: boolean\r\n\t/** a selector string for the desired container for the Sidebar to render within\r\n\t * @default '[data-is-root-theme=\"true\"]'\r\n\t * */\r\n\tcontainerSelector?: string\r\n\t/** determine whether the Sidebar also renders with an Overlay*/\r\n\toverlay?: boolean\r\n}\r\n\r\nconst defaultSidebarSize = { width: \"auto\", height: \"100%\" }\r\n\r\nconst _Sidebar = forwardRef(function Sidebar(\r\n\t{\r\n\t\tside = \"left\",\r\n\t\tmodal = true,\r\n\t\tchildren,\r\n\t\topen,\r\n\t\tcontainerSelector,\r\n\t\toverlay = true,\r\n\t\tresizable = true,\r\n\t\t// Props related to Resizable\r\n\t\tminWidth = \"300px\",\r\n\t\tmaxWidth = \"500px\",\r\n\t\t...rest\r\n\t}: SidebarProps,\r\n\tref: Ref<HTMLDivElement>,\r\n) {\r\n\tconst isRight = side === \"right\"\r\n\tconst isLeft = side === \"left\"\r\n\tconst [container, setContainer] = useState<HTMLElement>()\r\n\r\n\tuseEffect(() => {\r\n\t\tconst selector = containerSelector ?? '[data-is-root-theme=\"true\"]'\r\n\t\tconst tempContainer = document.querySelector(selector) as HTMLElement\r\n\r\n\t\tif (tempContainer === undefined) {\r\n\t\t\tthrow new Error(`Could not find a container element using the following selector ${selector}`)\r\n\t\t}\r\n\t\tsetContainer(tempContainer)\r\n\t}, [containerSelector])\r\n\r\n\treturn (\r\n\t\t<RadixDialogPrimitive.Root open={open} modal={modal}>\r\n\t\t\t<RadixDialogPrimitive.Portal container={container}>\r\n\t\t\t\t{overlay && <RadixDialogPrimitive.Overlay className={classNames(styles.overlay)} />}\r\n\t\t\t\t<RadixDialogPrimitive.Content\r\n\t\t\t\t\tclassName={classNames(\"overmap-sidebar\", \"rt-DialogContent\", styles.sidebarContent, {\r\n\t\t\t\t\t\t[styles.left!]: isLeft,\r\n\t\t\t\t\t\t[styles.right!]: isRight,\r\n\t\t\t\t\t})}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tasChild\r\n\t\t\t\t\t{...rest}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Box width=\"auto\">\r\n\t\t\t\t\t\t<Resizable\r\n\t\t\t\t\t\t\tminWidth={minWidth}\r\n\t\t\t\t\t\t\tmaxWidth={maxWidth}\r\n\t\t\t\t\t\t\tdefaultSize={defaultSidebarSize}\r\n\t\t\t\t\t\t\tenable={{ right: resizable && isLeft, left: resizable && isRight }}\r\n\t\t\t\t\t\t\thandleClasses={{ left: styles.resizeHandle, right: styles.resizeHandle }}\r\n\t\t\t\t\t\t\thandleComponent={{\r\n\t\t\t\t\t\t\t\tright: <DragHandleDots2Icon />,\r\n\t\t\t\t\t\t\t\tleft: <DragHandleDots2Icon />,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{children}\r\n\t\t\t\t\t\t</Resizable>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</RadixDialogPrimitive.Content>\r\n\t\t\t</RadixDialogPrimitive.Portal>\r\n\t\t</RadixDialogPrimitive.Root>\r\n\t)\r\n})\r\n\r\nexport const Sidebar = memo(_Sidebar)\r\n","import { CSSProperties, FC, memo, ReactElement, useCallback, useRef, useState } from \"react\"\r\nimport { Flex } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { NumberSize, Resizable, ResizeDirection } from \"re-resizable\"\r\nimport { DismissableLayer, DismissableLayerProps } from \"@radix-ui/react-dismissable-layer\"\r\nimport { CSSTransition } from \"react-transition-group\"\r\n\r\nimport styles from \"./SlideOut.module.sass\"\r\n\r\ninterface SlideOutProps extends Omit<DismissableLayerProps, \"disableOutsidePointerEvents\"> {\r\n\t/** The controlled state of whether the SlideOut is open or not */\r\n\topen?: boolean\r\n\t/** Used to specify what side of the container the SlideOut appears on\r\n\t * @default \"left\"\r\n\t * */\r\n\tside?: \"left\" | \"right\"\r\n\t/** The minimum width of the SlideOut, this must be specified and will be the default width the SlideOut\r\n\t * first opens with. Note the developer is responsible for adapting this as the screen size or size of the container\r\n\t * the SlideOut appears in changes in width */\r\n\tminWidth: number\r\n\t/** An optional max width of the SlideOut when resizing, like minWidth, the Developer is responsible for adapting\r\n\t * this value as the screen size or size of the container of the SlideOut changes width*/\r\n\tmaxWidth?: number\r\n\t/** Renders an overlay with the SlideOut, should be used when the SlideOut should have modality\r\n\t * @default false\r\n\t * */\r\n\toverlay?: boolean\r\n\t/** Determines if the SlideOut has modality, should be used in combination with overlay\r\n\t * @default false\r\n\t * */\r\n\tmodal?: boolean\r\n\t/** Controls whether the SlideOut can be resized\r\n\t * @default true\r\n\t * */\r\n\tresizable?: boolean\r\n\t/** Component to be used as the resize handle for the SlideOut */\r\n\tresizeHandle?: ReactElement\r\n\t/** if set to relative, the SlideOut will push any content contained within its container when open/closed\r\n\t * @default \"absolute\"\r\n\t * */\r\n\tposition?: \"absolute\" | \"relative\"\r\n}\r\n\r\nconst TRANSITION_DURATION = 200\r\n\r\n/** The SlideOut component is a UI element that allows you to create a slide-in/slide-out effect for content within\r\n * your application. It provides a smooth transition animation for revealing and hiding content. */\r\nexport const SlideOut: FC<SlideOutProps> = memo(function SlideOut({\r\n\tclassName,\r\n\topen,\r\n\tside = \"left\",\r\n\tchildren,\r\n\tminWidth,\r\n\tmaxWidth,\r\n\tresizable = true,\r\n\toverlay = false,\r\n\tmodal = false,\r\n\tresizeHandle,\r\n\tposition = \"absolute\",\r\n\t...rest\r\n}: SlideOutProps) {\r\n\tconst contentRef = useRef<HTMLDivElement>(null)\r\n\tconst [slideOutWidth, setSideBarWith] = useState<number>(minWidth)\r\n\r\n\tconst isSideLeft = side === \"left\"\r\n\tconst isSideRight = side === \"right\"\r\n\r\n\t// callback used to track the width of the SlideOut\r\n\tconst handleResize = useCallback(\r\n\t\t(_event: MouseEvent | TouchEvent, _dir: ResizeDirection, ref: HTMLElement, _delta: NumberSize) => {\r\n\t\t\tsetSideBarWith(ref.clientWidth)\r\n\t\t\tif (contentRef.current) {\r\n\t\t\t\tcontentRef.current.style.width = `${ref.clientWidth}px`\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<CSSTransition\r\n\t\t\tin={open}\r\n\t\t\tclassNames={{\r\n\t\t\t\tenter: styles.enter,\r\n\t\t\t\tenterActive: styles.enterActive,\r\n\t\t\t\texitActive: styles.exitActive,\r\n\t\t\t\texitDone: styles.exitDone,\r\n\t\t\t}}\r\n\t\t\ttimeout={TRANSITION_DURATION}\r\n\t\t\tnodeRef={contentRef}\r\n\t\t\tunmountOnExit\r\n\t\t\tmountOnEnter\r\n\t\t>\r\n\t\t\t<>\r\n\t\t\t\t{overlay && <div className={classNames(\"overamp-slide-out-overlay\", styles.slideOutOverlay)} />}\r\n\t\t\t\t<DismissableLayer disableOutsidePointerEvents={modal} asChild {...rest}>\r\n\t\t\t\t\t<Flex\r\n\t\t\t\t\t\tclassName={classNames(\"overmap-slide-out\", className, styles.outerContent, {\r\n\t\t\t\t\t\t\t[styles.left!]: isSideLeft,\r\n\t\t\t\t\t\t\t[styles.right!]: isSideRight,\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t\tstyle={{ \"--slide-out-width\": `${slideOutWidth}px` } as CSSProperties}\r\n\t\t\t\t\t\theight=\"100%\"\r\n\t\t\t\t\t\twidth=\"auto\"\r\n\t\t\t\t\t\tposition={position}\r\n\t\t\t\t\t\ttop=\"0\"\r\n\t\t\t\t\t\tbottom=\"0\"\r\n\t\t\t\t\t\tleft={isSideLeft ? \"0\" : undefined}\r\n\t\t\t\t\t\tright={isSideRight ? \"0\" : undefined}\r\n\t\t\t\t\t\tref={contentRef}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Resizable\r\n\t\t\t\t\t\t\tclassName={styles.resizable}\r\n\t\t\t\t\t\t\tdefaultSize={{ width: slideOutWidth, height: \"100%\" }}\r\n\t\t\t\t\t\t\tonResize={handleResize}\r\n\t\t\t\t\t\t\tenable={{ right: resizable && isSideLeft, left: resizable && isSideRight }}\r\n\t\t\t\t\t\t\thandleComponent={{ left: resizeHandle, right: resizeHandle }}\r\n\t\t\t\t\t\t\tminWidth={minWidth}\r\n\t\t\t\t\t\t\tmaxWidth={maxWidth}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{children}\r\n\t\t\t\t\t\t</Resizable>\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</DismissableLayer>\r\n\t\t\t</>\r\n\t\t</CSSTransition>\r\n\t)\r\n})\r\n","import React, { FC, forwardRef } from \"react\"\r\nimport { Text, TextField as RadixTextField } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { useResponsiveMapping, useSeverityColor } from \"../utils.ts\"\r\nimport { SizeMapping } from \"../constants.ts\"\r\nimport { InputProps } from \"./typings.ts\"\r\n\r\nimport styles from \"./Input.module.sass\"\r\n\r\nconst _Input = forwardRef(function Input(\r\n\t{\r\n\t\tclassName,\r\n\t\tleftSlot,\r\n\t\trightSlot,\r\n\t\tsize = \"medium\",\r\n\t\tshowInputLength,\r\n\t\tvalue,\r\n\t\tvariant,\r\n\t\tseverity = \"primary\",\r\n\t\t...rest\r\n\t}: InputProps,\r\n\tref: React.Ref<HTMLInputElement>,\r\n) {\r\n\tconst computedSize = useResponsiveMapping(size, SizeMapping)\r\n\r\n\tconst color = useSeverityColor(severity)\r\n\r\n\tconst displayInputLength = showInputLength || (showInputLength === undefined && rest.maxLength !== undefined)\r\n\tconst valueAsString = value !== undefined ? value.toString() : undefined\r\n\r\n\treturn (\r\n\t\t<RadixTextField.Root\r\n\t\t\tclassName={classNames(styles.wrapper, className, {\r\n\t\t\t\t[styles.ghost!]: variant === \"ghost\",\r\n\t\t\t\t[styles.accommodateCharCount!]: displayInputLength,\r\n\t\t\t})}\r\n\t\t\tsize={computedSize}\r\n\t\t\tvariant={variant !== \"ghost\" ? variant : undefined}\r\n\t\t\tcolor={color}\r\n\t\t>\r\n\t\t\t{leftSlot && <RadixTextField.Slot>{leftSlot}</RadixTextField.Slot>}\r\n\t\t\t<RadixTextField.Input\r\n\t\t\t\tclassName={classNames(styles.default, {\r\n\t\t\t\t\t[styles.noLeftIcon!]: !leftSlot,\r\n\t\t\t\t\t[styles.noRightIcon!]: !rightSlot,\r\n\t\t\t\t})}\r\n\t\t\t\tref={ref}\r\n\t\t\t\tvalue={value}\r\n\t\t\t\tsize={computedSize}\r\n\t\t\t\tvariant={variant !== \"ghost\" ? variant : undefined}\r\n\t\t\t\tcolor={color}\r\n\t\t\t\t{...rest}\r\n\t\t\t/>\r\n\t\t\t{rightSlot && <RadixTextField.Slot>{rightSlot}</RadixTextField.Slot>}\r\n\t\t\t{displayInputLength && (\r\n\t\t\t\t<Text as=\"p\" className={styles.charCount} size=\"1\" color=\"gray\">\r\n\t\t\t\t\t{rest.maxLength !== undefined\r\n\t\t\t\t\t\t? `${valueAsString?.length}/${rest.maxLength}`\r\n\t\t\t\t\t\t: `${valueAsString?.length}`}\r\n\t\t\t\t</Text>\r\n\t\t\t)}\r\n\t\t</RadixTextField.Root>\r\n\t)\r\n})\r\nexport const Input: FC<InputProps> = React.memo(_Input)\r\n","import { cloneElement, ComponentProps, CSSProperties, memo, ReactElement, useMemo } from \"react\"\r\nimport { Theme } from \"@radix-ui/themes\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\nimport { Severity } from \"../typings.ts\"\r\n\r\ninterface ChildProps {\r\n\t\"data-accent-color\": string\r\n\tstyle: CSSProperties\r\n}\r\ninterface IconColorUtilityProps {\r\n\tchildren: ReactElement\r\n}\r\ninterface IconColorUtilitySeverityProps extends IconColorUtilityProps {\r\n\tseverity: Severity\r\n\tcolor?: undefined\r\n}\r\n\r\ninterface IconColorUtilityColorProps extends IconColorUtilityProps {\r\n\tcolor: Exclude<ComponentProps<typeof Theme>[\"accentColor\"], undefined>\r\n\tseverity?: undefined\r\n}\r\n\r\n/** This component is used to provide Icons color based on Severity or a Radix theme accentColor */\r\nexport const IconColorUtility = memo(function IconColorUtility({\r\n\tcolor,\r\n\tseverity,\r\n\tchildren,\r\n}: IconColorUtilitySeverityProps | IconColorUtilityColorProps) {\r\n\tconst severityColor = useSeverityColor(severity ?? \"primary\")\r\n\r\n\tconst childProps: ChildProps = useMemo(\r\n\t\t() => ({\r\n\t\t\t\"data-accent-color\": severity && severityColor ? severityColor : color ? color : \"gray\",\r\n\t\t\tstyle: {\r\n\t\t\t\tcolor: \"var(--accent-a9)\",\r\n\t\t\t},\r\n\t\t}),\r\n\t\t[color, severity, severityColor],\r\n\t)\r\n\r\n\treturn cloneElement(children, { ...childProps })\r\n})\r\n","import React, { forwardRef, FC } from \"react\"\r\nimport { Popover as RadixPopover } from \"@radix-ui/themes\"\r\nimport { PopoverProps } from \"./typings.ts\"\r\n\r\nimport styles from \"./Popover.module.sass\"\r\nimport classNames from \"classnames\"\r\n\r\nconst _Popover = forwardRef(function Popover(\r\n\t{ className, trigger, open, onOpenChange, defaultOpen = false, modal = false, children, ...rest }: PopoverProps,\r\n\tref: React.Ref<HTMLDivElement>,\r\n) {\r\n\treturn (\r\n\t\t<RadixPopover.Root defaultOpen={defaultOpen} modal={modal} open={open} onOpenChange={onOpenChange}>\r\n\t\t\t<RadixPopover.Trigger>{trigger}</RadixPopover.Trigger>\r\n\t\t\t<RadixPopover.Content\r\n\t\t\t\tref={ref}\r\n\t\t\t\tclassName={classNames(\"overmap-popover\", className, styles.wrapper)}\r\n\t\t\t\t{...rest}\r\n\t\t\t>\r\n\t\t\t\t{children(RadixPopover.Close)}\r\n\t\t\t</RadixPopover.Content>\r\n\t\t</RadixPopover.Root>\r\n\t)\r\n})\r\nexport const Popover: FC<PopoverProps> = React.memo(_Popover)\r\n","import {\r\n\tCSSProperties,\r\n\tFC,\r\n\tmemo,\r\n\tuseCallback,\r\n\tuseEffect,\r\n\tuseMemo,\r\n\tuseRef,\r\n\tuseState,\r\n\tDispatch,\r\n\tSetStateAction,\r\n\tReactNode,\r\n\tReactElement,\r\n} from \"react\"\r\nimport { Box, Flex } from \"@radix-ui/themes\"\r\nimport { DragHandleDots2Icon } from \"@radix-ui/react-icons\"\r\nimport { NumberSize, Resizable, ResizeDirection } from \"re-resizable\"\r\nimport { Transition, TransitionStatus } from \"react-transition-group\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"./LeftAndRightPanels.module.sass\"\r\n\r\nconst DEFAULT_MIN_WIDTH = 200\r\nconst TRANSITION_DURATION = 150\r\n\r\nexport interface LeftAndRightPanelsProps {\r\n\t/** content to be rendered within the center panel */\r\n\tchildren: ReactNode\r\n\t/** state to determine whether to show or hide the left panel*/\r\n\tshowLeft?: boolean\r\n\t/** content to be rendered within the left panel*/\r\n\tleftPanel?: ReactElement\r\n\t/** minimum width of the left panel when resizing */\r\n\tleftMinWidth?: number\r\n\t/** maximum width of the left panel when resizing */\r\n\tleftMaxWidth?: number\r\n\t/** state to determine whether to show or hide the right panel*/\r\n\tshowRight?: boolean\r\n\t/** content to be rendered within the left panel*/\r\n\trightPanel?: ReactElement\r\n\t/** minimum width of the left panel when resizing */\r\n\trightMinWidth?: number\r\n\t/** maximum width of the left panel when resizing */\r\n\trightMaxWidth?: number\r\n\t/** used to disable or enable resizing on the left and right panels */\r\n\tresizeable?: { left?: boolean; right?: boolean }\r\n}\r\n\r\n/** Panels are graphical elements that divide a screen or window into distinct sections, each of which can contain\r\n * different types of content or functionality. They are often used to organize and present information in a structured\r\n * manner. In many graphical user interfaces (GUIs), panels are draggable and resizable, allowing users to customize\r\n * the layout to suit their preferences. Panels can be used for a variety of purposes, such as displaying navigation\r\n * menus, presenting data, providing tools or controls, or hosting multimedia content. LeftAndRightPanels renders main\r\n * content and provides left and right resizable, toggleable panels. This component can be rendered within any element\r\n * as its container and the Panels will be scoped to the height and appear to the left and right of that container. */\r\nexport const LeftAndRightPanels: FC<LeftAndRightPanelsProps> = memo(function Panels({\r\n\tchildren,\r\n\tshowLeft,\r\n\tleftPanel,\r\n\tleftMinWidth = DEFAULT_MIN_WIDTH,\r\n\tshowRight,\r\n\trightPanel,\r\n\trightMinWidth = DEFAULT_MIN_WIDTH,\r\n\tresizeable,\r\n}: LeftAndRightPanelsProps) {\r\n\tconst wrapperRef = useRef<HTMLDivElement>(null)\r\n\t// Left panel related state\r\n\tconst leftPanelRef = useRef<HTMLDivElement>(null)\r\n\tconst [leftPanelWidth, setLeftPanelWidth] = useState<number>(0)\r\n\tconst [leftPanelMaxWidth, setLeftPanelMaxWidth] = useState<number>()\r\n\t// Right panel related state\r\n\tconst rightPanelRef = useRef<HTMLDivElement>(null)\r\n\tconst [rightPanelWidth, setRightPanelWidth] = useState<number>(0)\r\n\tconst [rightPanelMaxWidth, setRightPanelMaxWidth] = useState<number>()\r\n\r\n\tconst handleResizePanel = useCallback(\r\n\t\t(\r\n\t\t\tresizedPanelWidth: number,\r\n\t\t\tsetResizedPanelWidth: Dispatch<SetStateAction<number>>,\r\n\t\t\tsetOtherPanelMaxWidth: Dispatch<SetStateAction<number | undefined>>,\r\n\t\t) => {\r\n\t\t\treturn (_event: MouseEvent | TouchEvent, _dir: ResizeDirection, _ref: HTMLElement, delta: NumberSize) => {\r\n\t\t\t\tif (!wrapperRef.current) return\r\n\t\t\t\tconst newWidth = resizedPanelWidth + delta.width\r\n\t\t\t\tsetOtherPanelMaxWidth(wrapperRef.current.clientWidth - newWidth)\r\n\t\t\t\tsetResizedPanelWidth(() => newWidth)\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t)\r\n\r\n\tconst handleResizeLeftPanel = useCallback(\r\n\t\t(_event: MouseEvent | TouchEvent, _dir: ResizeDirection, _ref: HTMLElement, delta: NumberSize) =>\r\n\t\t\thandleResizePanel(leftPanelWidth, setLeftPanelWidth, setRightPanelMaxWidth)(_event, _dir, _ref, delta),\r\n\t\t[handleResizePanel, leftPanelWidth],\r\n\t)\r\n\r\n\tconst handleResizeRightPanel = useCallback(\r\n\t\t(_event: MouseEvent | TouchEvent, _dir: ResizeDirection, _ref: HTMLElement, delta: NumberSize) =>\r\n\t\t\thandleResizePanel(rightPanelWidth, setRightPanelWidth, setLeftPanelMaxWidth)(_event, _dir, _ref, delta),\r\n\t\t[handleResizePanel, rightPanelWidth],\r\n\t)\r\n\r\n\t// Used to resize and update the other panel when a panel is opened\r\n\tconst handleResizeOtherPanelOnPanelOpen = useCallback(\r\n\t\t(\r\n\t\t\topeningPanelWidth: number,\r\n\t\t\topeningPanelMinWidth: number,\r\n\t\t\tsetOpeningPanelWidth: Dispatch<SetStateAction<number>>,\r\n\t\t\tsetOpeningPanelMaxWidth: Dispatch<SetStateAction<number | undefined>>,\r\n\t\t\totherPanelWidth: number,\r\n\t\t\totherPanelOpen: boolean | undefined,\r\n\t\t\tsetOtherPanelWidth: Dispatch<SetStateAction<number>>,\r\n\t\t\tsetOtherPanelMaxWidth: Dispatch<SetStateAction<number | undefined>>,\r\n\t\t) => {\r\n\t\t\tif (!wrapperRef.current) return\r\n\t\t\tlet newOpeningPanelWidth = openingPanelWidth\r\n\r\n\t\t\t// If first time opening, set its width to the specified min width\r\n\t\t\tif (newOpeningPanelWidth === 0) {\r\n\t\t\t\tnewOpeningPanelWidth = openingPanelMinWidth\r\n\t\t\t\tsetOpeningPanelWidth(newOpeningPanelWidth)\r\n\t\t\t}\r\n\r\n\t\t\tif (otherPanelOpen) {\r\n\t\t\t\t// calculate the new max width of the other panel based on the opened panels new width\r\n\t\t\t\tconst newOtherPanelMaxWidth = wrapperRef.current.clientWidth - newOpeningPanelWidth\r\n\t\t\t\tsetOtherPanelMaxWidth(newOtherPanelMaxWidth)\r\n\r\n\t\t\t\t// if the current width of the other panel exceeds its new max, set its width to its new max\r\n\t\t\t\tif (otherPanelWidth > newOtherPanelMaxWidth) {\r\n\t\t\t\t\tsetOtherPanelWidth(newOtherPanelMaxWidth)\r\n\t\t\t\t\t// now update the new max width of the opened panel after other panel has been resized\r\n\t\t\t\t\tsetOpeningPanelMaxWidth(wrapperRef.current.clientWidth - newOtherPanelMaxWidth)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t)\r\n\r\n\tconst handleResizeLeftPanelOnRightPanelOpen = useCallback(\r\n\t\t() =>\r\n\t\t\thandleResizeOtherPanelOnPanelOpen(\r\n\t\t\t\trightPanelWidth,\r\n\t\t\t\trightMinWidth,\r\n\t\t\t\tsetRightPanelWidth,\r\n\t\t\t\tsetRightPanelMaxWidth,\r\n\t\t\t\tleftPanelWidth,\r\n\t\t\t\tshowLeft,\r\n\t\t\t\tsetLeftPanelWidth,\r\n\t\t\t\tsetLeftPanelMaxWidth,\r\n\t\t\t),\r\n\t\t[handleResizeOtherPanelOnPanelOpen, leftPanelWidth, rightMinWidth, rightPanelWidth, showLeft],\r\n\t)\r\n\r\n\tconst handleResizeRightPanelOnLeftPanelOpen = useCallback(\r\n\t\t() =>\r\n\t\t\thandleResizeOtherPanelOnPanelOpen(\r\n\t\t\t\tleftPanelWidth,\r\n\t\t\t\tleftMinWidth,\r\n\t\t\t\tsetLeftPanelWidth,\r\n\t\t\t\tsetLeftPanelMaxWidth,\r\n\t\t\t\trightPanelWidth,\r\n\t\t\t\tshowRight,\r\n\t\t\t\tsetRightPanelWidth,\r\n\t\t\t\tsetRightPanelMaxWidth,\r\n\t\t\t),\r\n\t\t[handleResizeOtherPanelOnPanelOpen, leftMinWidth, leftPanelWidth, rightPanelWidth, showRight],\r\n\t)\r\n\r\n\tconst handleResizeOtherPanelOnPanelClose = useCallback(\r\n\t\t(otherPanelOpen: boolean | undefined, setOtherPanelMaxWidth: Dispatch<SetStateAction<number | undefined>>) => {\r\n\t\t\tif (!wrapperRef.current) return\r\n\t\t\t// Allow ability fpr other panel to fill entire wrapper container if open\r\n\t\t\tif (otherPanelOpen) setOtherPanelMaxWidth(wrapperRef.current.clientWidth)\r\n\t\t},\r\n\t\t[],\r\n\t)\r\n\r\n\tconst handleResizeLeftPanelOnRightPanelClose = useCallback(\r\n\t\t() => handleResizeOtherPanelOnPanelClose(showLeft, setLeftPanelMaxWidth),\r\n\t\t[handleResizeOtherPanelOnPanelClose, showLeft],\r\n\t)\r\n\r\n\tconst handleResizeRightPanelOnLeftPanelClose = useCallback(\r\n\t\t() => handleResizeOtherPanelOnPanelClose(showRight, setRightPanelMaxWidth),\r\n\t\t[handleResizeOtherPanelOnPanelClose, showRight],\r\n\t)\r\n\r\n\tconst resizeObserverCallback: ResizeObserverCallback = useCallback(() => {\r\n\t\tif (!wrapperRef.current) return\r\n\t\tsetLeftPanelMaxWidth(wrapperRef.current.clientWidth - (rightPanelRef.current?.clientWidth || 0))\r\n\t\tsetRightPanelMaxWidth(wrapperRef.current.clientWidth - (leftPanelRef.current?.clientWidth || 0))\r\n\t\tsetLeftPanelWidth(leftPanelRef.current?.clientWidth || 0)\r\n\t\tsetRightPanelWidth(rightPanelRef.current?.clientWidth || 0)\r\n\t}, [])\r\n\r\n\t// Set up resize observer on wrapper element to adjust width upon resizing\r\n\tuseEffect(() => {\r\n\t\tif (!wrapperRef.current) return\r\n\t\tconst resizeObserver = new ResizeObserver(resizeObserverCallback)\r\n\t\tresizeObserver.observe(wrapperRef.current)\r\n\t\treturn () => {\r\n\t\t\tresizeObserver.disconnect()\r\n\t\t}\r\n\t}, [resizeObserverCallback])\r\n\r\n\tconst leftPanelTransitionStyles: Record<TransitionStatus, CSSProperties> = useMemo(() => {\r\n\t\treturn {\r\n\t\t\tentering: {\r\n\t\t\t\ttransform: `translateX(-${leftPanelWidth}px)`,\r\n\t\t\t\tmarginRight: `-${leftPanelWidth}px`,\r\n\t\t\t\ttransitionProperty: \"transform, margin-right\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\tentered: {\r\n\t\t\t\ttransform: `translateX(0)`,\r\n\t\t\t\tmarginRight: 0,\r\n\t\t\t\ttransitionProperty: \"transform, margin-right\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\texiting: {\r\n\t\t\t\ttransform: `translateX(-${leftPanelWidth}px)`,\r\n\t\t\t\tmarginRight: `-${leftPanelWidth}px`,\r\n\t\t\t\ttransitionProperty: \"transform, margin-right\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\texited: {},\r\n\t\t\tunmounted: {},\r\n\t\t}\r\n\t}, [leftPanelWidth])\r\n\r\n\tconst rightPanelTransitionStyles: Record<TransitionStatus, CSSProperties> = useMemo(() => {\r\n\t\treturn {\r\n\t\t\tentering: {\r\n\t\t\t\ttransform: `translateX(${rightPanelWidth}px)`,\r\n\t\t\t\tmarginLeft: `${-rightPanelWidth}px`,\r\n\t\t\t\ttransitionProperty: \"transform, margin-left\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\tentered: {\r\n\t\t\t\ttransform: `translateX(0)`,\r\n\t\t\t\tmarginLeft: 0,\r\n\t\t\t\ttransitionProperty: \"transform, margin-left\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\texiting: {\r\n\t\t\t\ttransform: `translateX(${rightPanelWidth}px)`,\r\n\t\t\t\tmarginLeft: `${-rightPanelWidth}px`,\r\n\t\t\t\ttransitionProperty: \"transform, margin-left\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\texited: {},\r\n\t\t\tunmounted: {},\r\n\t\t}\r\n\t}, [rightPanelWidth])\r\n\r\n\treturn (\r\n\t\t<Flex\r\n\t\t\tclassName={styles.wrapper}\r\n\t\t\tstyle={{ minWidth: `${leftMinWidth + rightMinWidth}px` }}\r\n\t\t\tref={wrapperRef}\r\n\t\t\twidth=\"100%\"\r\n\t\t\theight=\"100%\"\r\n\t\t\tjustify=\"center\"\r\n\t\t\tm=\"0\"\r\n\t\t\tp=\"0\"\r\n\t\t>\r\n\t\t\t<Transition\r\n\t\t\t\tnodeRef={leftPanelRef}\r\n\t\t\t\ttimeout={!showLeft ? TRANSITION_DURATION : 0}\r\n\t\t\t\tin={showLeft}\r\n\t\t\t\tunmountOnExit\r\n\t\t\t\tonEntering={handleResizeRightPanelOnLeftPanelOpen}\r\n\t\t\t\tonExited={handleResizeRightPanelOnLeftPanelClose}\r\n\t\t\t>\r\n\t\t\t\t{(state) => (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tref={leftPanelRef}\r\n\t\t\t\t\t\tclassName={classNames(styles.panelContent, styles.left)}\r\n\t\t\t\t\t\tstyle={leftPanelTransitionStyles[state]}\r\n\t\t\t\t\t\twidth=\"auto\"\r\n\t\t\t\t\t\theight=\"100%\"\r\n\t\t\t\t\t\tm=\"0\"\r\n\t\t\t\t\t\tp=\"0\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Resizable\r\n\t\t\t\t\t\t\tclassName={styles.resizable}\r\n\t\t\t\t\t\t\tsize={{\r\n\t\t\t\t\t\t\t\twidth: leftPanelWidth,\r\n\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonResizeStop={handleResizeLeftPanel}\r\n\t\t\t\t\t\t\tenable={{ right: resizeable?.left !== undefined ? resizeable.left : true }}\r\n\t\t\t\t\t\t\tminWidth={leftMinWidth}\r\n\t\t\t\t\t\t\tmaxWidth={leftPanelMaxWidth}\r\n\t\t\t\t\t\t\thandleClasses={{ right: classNames(styles.resizeHandle, styles.left) }}\r\n\t\t\t\t\t\t\thandleComponent={{\r\n\t\t\t\t\t\t\t\tright: <DragHandleDots2Icon height=\"14px\" width=\"14px\" />,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{leftPanel}\r\n\t\t\t\t\t\t</Resizable>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Transition>\r\n\t\t\t<div className={styles.panelMainContent}>{children}</div>\r\n\t\t\t<Transition\r\n\t\t\t\tnodeRef={rightPanelRef}\r\n\t\t\t\ttimeout={!showRight ? TRANSITION_DURATION : 0}\r\n\t\t\t\tin={showRight}\r\n\t\t\t\tunmountOnExit\r\n\t\t\t\tonEntering={handleResizeLeftPanelOnRightPanelOpen}\r\n\t\t\t\tonExited={handleResizeLeftPanelOnRightPanelClose}\r\n\t\t\t>\r\n\t\t\t\t{(state) => (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tref={rightPanelRef}\r\n\t\t\t\t\t\tclassName={classNames(styles.panelContent, styles.right)}\r\n\t\t\t\t\t\tstyle={rightPanelTransitionStyles[state]}\r\n\t\t\t\t\t\twidth=\"auto\"\r\n\t\t\t\t\t\theight=\"100%\"\r\n\t\t\t\t\t\tm=\"0\"\r\n\t\t\t\t\t\tp=\"0\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Resizable\r\n\t\t\t\t\t\t\tclassName={styles.resizable}\r\n\t\t\t\t\t\t\tsize={{ width: rightPanelWidth, height: \"100%\" }}\r\n\t\t\t\t\t\t\tonResizeStop={handleResizeRightPanel}\r\n\t\t\t\t\t\t\tenable={{ left: resizeable?.right !== undefined ? resizeable.right : true }}\r\n\t\t\t\t\t\t\tminWidth={rightMinWidth}\r\n\t\t\t\t\t\t\tmaxWidth={rightPanelMaxWidth}\r\n\t\t\t\t\t\t\thandleClasses={{ left: classNames(styles.resizeHandle, styles.right) }}\r\n\t\t\t\t\t\t\thandleComponent={{ left: <DragHandleDots2Icon height=\"14px\" width=\"14px\" /> }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{rightPanel}\r\n\t\t\t\t\t\t</Resizable>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Transition>\r\n\t\t</Flex>\r\n\t)\r\n})\r\n","import React, { forwardRef, FC, useState, useCallback } from \"react\"\r\nimport { MultiPagePopoverOption, MultiPagePopoverPage, MultiPagePopoverProps } from \"./typings\"\r\nimport { Popover } from \"../Popover\"\r\nimport { Button } from \"../Buttons\"\r\nimport styles from \"./MultiPagePopover.module.sass\"\r\nimport classNames from \"classnames\"\r\nimport { Popover as RadixPopover } from \"@radix-ui/themes\"\r\n\r\nfunction getMultiPagePopoverContent(\r\n\tpopoverOption: MultiPagePopoverPage,\r\n\tsetMultiPagePopoverContent: React.Dispatch<React.SetStateAction<React.ReactNode>>,\r\n\tdirection: \"vertical\" | \"horizontal\",\r\n\tpage = 0,\r\n) {\r\n\tif (!popoverOption.options) {\r\n\t\treturn popoverOption.content || <></>\r\n\t}\r\n\tconst optionButtons = popoverOption.options.map((option: MultiPagePopoverOption, i) => (\r\n\t\t<Button\r\n\t\t\tkey={`${option.value}-page-${page}-button-${i}`}\r\n\t\t\tclassName={classNames(styles.optionsButton, option.buttonClassName)}\r\n\t\t\tvariant=\"ghost\"\r\n\t\t\tradius=\"large\"\r\n\t\t\tstyle={{\r\n\t\t\t\twidth: direction === \"vertical\" ? \"100%\" : \"auto\",\r\n\t\t\t}}\r\n\t\t\tseverity=\"info\"\r\n\t\t\thighContrast\r\n\t\t\tonClick={\r\n\t\t\t\toption.onClick ||\r\n\t\t\t\t(() =>\r\n\t\t\t\t\tsetMultiPagePopoverContent(\r\n\t\t\t\t\t\tgetMultiPagePopoverContent(option.page || {}, setMultiPagePopoverContent, direction, page + 1),\r\n\t\t\t\t\t))\r\n\t\t\t}\r\n\t\t>\r\n\t\t\t{option.label}\r\n\t\t</Button>\r\n\t))\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{popoverOption.title && <div className={styles.pageTitle}>{popoverOption.title}</div>}\r\n\t\t\t{popoverOption.content}\r\n\t\t\t<div\r\n\t\t\t\tclassName={classNames(styles.optionsButtonContainer, popoverOption.buttonsContainerClassName)}\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tflexDirection: direction === \"vertical\" ? \"column\" : \"row\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{optionButtons}\r\n\t\t\t</div>\r\n\t\t</>\r\n\t)\r\n}\r\n\r\nconst _MultiPagePopover = forwardRef(function MultiPagePopover(\r\n\t{ page, className, direction = \"vertical\", ...rest }: MultiPagePopoverProps,\r\n\tref: React.Ref<HTMLDivElement>,\r\n) {\r\n\tconst [popoverContent, setPopoverContent] = useState<React.ReactNode>(undefined)\r\n\r\n\tconst resetPopoverContent = useCallback(() => {\r\n\t\tsetPopoverContent(getMultiPagePopoverContent(page, setPopoverContent, direction, 0))\r\n\t}, [direction, page])\r\n\r\n\tconst multiPagePopoverContent = useCallback((_Close: typeof RadixPopover.Close) => popoverContent, [popoverContent])\r\n\r\n\treturn (\r\n\t\t<Popover\r\n\t\t\tclassName={classNames(styles.multiPagePopover, className)}\r\n\t\t\tref={ref}\r\n\t\t\tonOpenAutoFocus={resetPopoverContent}\r\n\t\t\tonCloseAutoFocus={resetPopoverContent}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t{(Close) => multiPagePopoverContent(Close)}\r\n\t\t</Popover>\r\n\t)\r\n})\r\nexport const MultiPagePopover: FC<MultiPagePopoverProps> = React.memo(_MultiPagePopover)\r\n","import { FC, forwardRef, memo, Ref, useMemo } from \"react\"\r\nimport { Text, TextArea as RadixTextArea } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { TextAreaProps } from \"./typings.ts\"\r\n\r\nimport styles from \"./Textarea.module.sass\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\n\r\nconst _TextArea = forwardRef(function TextArea(\r\n\t{\r\n\t\tclassName,\r\n\t\tshowInputLength,\r\n\t\tinputLengthTemplate,\r\n\t\tvalue,\r\n\t\tseverity = \"primary\",\r\n\t\tresize,\r\n\t\tvariant,\r\n\t\t...rest\r\n\t}: TextAreaProps,\r\n\tref: Ref<HTMLTextAreaElement>,\r\n) {\r\n\tconst severityColor = useSeverityColor(severity)\r\n\tconst infoColor = useSeverityColor(\"info\")\r\n\r\n\tconst displayInputLength =\r\n\t\tshowInputLength ||\r\n\t\t(showInputLength === undefined && (rest.maxLength !== undefined || rest.minLength !== undefined))\r\n\tconst valueAsString = value !== undefined ? value.toString() : \"\"\r\n\r\n\tconst displayInputLengthValue = useMemo(() => {\r\n\t\tif (inputLengthTemplate) {\r\n\t\t\tlet template = inputLengthTemplate.replace(\"{current}\", valueAsString.length.toString())\r\n\t\t\tif (rest.minLength !== undefined) {\r\n\t\t\t\ttemplate = template.replace(\"{min}\", rest.minLength.toString())\r\n\t\t\t}\r\n\t\t\tif (rest.maxLength !== undefined) {\r\n\t\t\t\ttemplate = template.replace(\"{max}\", rest.maxLength.toString())\r\n\t\t\t}\r\n\t\t\treturn template\r\n\t\t}\r\n\t\treturn valueAsString.length\r\n\t}, [inputLengthTemplate, rest.maxLength, rest.minLength, valueAsString.length])\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<RadixTextArea\r\n\t\t\t\tclassName={classNames(\"overmap-textarea\", className, {\r\n\t\t\t\t\t[styles.ghost!]: variant === \"ghost\",\r\n\t\t\t\t})}\r\n\t\t\t\tstyle={{ resize: resize }}\r\n\t\t\t\tvariant={variant !== \"ghost\" ? variant : undefined}\r\n\t\t\t\tref={ref}\r\n\t\t\t\tvalue={value}\r\n\t\t\t\tcolor={severityColor}\r\n\t\t\t\t{...rest}\r\n\t\t\t/>\r\n\t\t\t{displayInputLength && (\r\n\t\t\t\t<Text as=\"p\" className={styles.charCount} color={infoColor} align=\"right\">\r\n\t\t\t\t\t{displayInputLengthValue}\r\n\t\t\t\t</Text>\r\n\t\t\t)}\r\n\t\t</>\r\n\t)\r\n})\r\n\r\n/** The TextArea Component is a user interface element that allows users to input and edit multi-line text.\r\n It is commonly used in forms, chat applications, and other scenarios where longer text inputs are required.\r\n This TextArea is a wrapper of the RadixUI TextArea component found here https://www.radix-ui.com/themes/docs/components/text-area.\r\n */\r\nexport const TextArea: FC<TextAreaProps> = memo(_TextArea)\r\n","import { FC, forwardRef, memo, Ref } from \"react\"\r\nimport { Item, Root } from \"@radix-ui/react-toggle-group\"\r\nimport { ToggleGroupItemProps, ToggleGroupSingleProps } from \"./typings.ts\"\r\nimport { IconButton } from \"../Buttons\"\r\nimport classNames from \"classnames\"\r\nimport { ButtonGroup } from \"../ButtonGroup\"\r\n\r\nconst _ToggleGroup = forwardRef(function ToggleGroup(\r\n\t{\r\n\t\t// ToggleGroup Primitive Props\r\n\t\tloop,\r\n\t\ttype,\r\n\t\trovingFocus,\r\n\t\tvalue,\r\n\t\tonValueChange,\r\n\t\tdefaultValue,\r\n\t\tdisabled,\r\n\t\titems,\r\n\t\t// ButtonGroup Props\r\n\t\tclassName,\r\n\t\tdirection = \"row\",\r\n\t\t...rest\r\n\t}: ToggleGroupSingleProps,\r\n\tref: Ref<HTMLDivElement>,\r\n) {\r\n\treturn (\r\n\t\t<Root\r\n\t\t\ttype={type}\r\n\t\t\tclassName={classNames(\"overmap-toggle-group\", className)}\r\n\t\t\tref={ref}\r\n\t\t\tvalue={value}\r\n\t\t\tonValueChange={onValueChange}\r\n\t\t\tdisabled={disabled}\r\n\t\t\torientation={direction === \"column\" ? \"vertical\" : \"horizontal\"}\r\n\t\t\tloop={loop}\r\n\t\t\trovingFocus={rovingFocus}\r\n\t\t\tdefaultValue={defaultValue}\r\n\t\t\tasChild\r\n\t\t>\r\n\t\t\t<ButtonGroup direction={direction} {...rest}>\r\n\t\t\t\t{items.map(({ children, ...rest }: ToggleGroupItemProps) => (\r\n\t\t\t\t\t<Item asChild {...rest} key={rest.value}>\r\n\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\tclassName={classNames(\"overmap-toggle-group-button\")}\r\n\t\t\t\t\t\t\taria-label={rest.value}\r\n\t\t\t\t\t\t\tvariant={rest.value === value ? \"solid\" : \"soft\"}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{children}\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Item>\r\n\t\t\t\t))}\r\n\t\t\t</ButtonGroup>\r\n\t\t</Root>\r\n\t)\r\n})\r\n\r\n/** The Toggle Group Component is a user interface element that allows users to select a single option from a set of\r\n * mutually exclusive choices. It is commonly used in situations where users need to make a single selection from a\r\n * predefined list of options. This component is built using the ButtonGroup and IconButton components in combination\r\n * with the Radix Toggle Group primitive found here https://www.radix-ui.com/primitives/docs/components/toggle-group */\r\nexport const ToggleGroup: FC<ToggleGroupSingleProps> = memo(_ToggleGroup)\r\n","import { Root as ToolBarRoot, ToolbarProps } from \"@radix-ui/react-toolbar\"\r\nimport { ComponentProps, FC, forwardRef, memo, ReactNode } from \"react\"\r\nimport { Flex } from \"../Flex\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"./Toolbar.module.sass\"\r\n\r\n// TODO: Could possibly add vertical orientation to this\r\ninterface ToolBarRootProps extends Omit<ToolbarProps, \"dir\" | \"asChild\" | \"orientation\"> {\r\n\t/** the minimum gap between the left and right content in the Toolbar*/\r\n\tminContentGap?: ComponentProps<typeof Flex>[\"gap\"]\r\n}\r\n\r\n/** The Toolbar component is commonly used in web development to create a horizontal bar that contains various UI\r\n * elements, typically used for navigation, actions, or other functionalities. */\r\nexport const Root: FC<ToolBarRootProps> = memo(\r\n\tforwardRef<HTMLDivElement, ToolBarRootProps>(({ className, minContentGap = \"2\", children, ...rest }, ref) => {\r\n\t\treturn (\r\n\t\t\t<ToolBarRoot\r\n\t\t\t\tclassName={classNames(className, \"overmap-toolbar\", styles.default)}\r\n\t\t\t\tref={ref}\r\n\t\t\t\tasChild\r\n\t\t\t\t{...rest}\r\n\t\t\t>\r\n\t\t\t\t<Flex grow=\"1\" width=\"100%\" height=\"max-content\" align=\"center\" gap={minContentGap} wrap=\"nowrap\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</Flex>\r\n\t\t\t</ToolBarRoot>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\ninterface ContentProps {\r\n\tchildren: ReactNode\r\n\t/** spacing between the items in the content of the Toolbar\r\n\t * @default \"2\"\r\n\t * */\r\n\tgap?: ComponentProps<typeof Flex>[\"gap\"]\r\n}\r\n/** Container for content aligned to the left of the Toolbar */\r\nconst LeftContent: FC<ContentProps> = memo(\r\n\tforwardRef<HTMLDivElement, ContentProps>(({ children, gap = \"2\" }, ref) => {\r\n\t\treturn (\r\n\t\t\t<Flex ref={ref} grow=\"1\" width=\"max-content\" height=\"100%\" align=\"center\" gap={gap}>\r\n\t\t\t\t{children}\r\n\t\t\t</Flex>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\n/** Container for content aligned to the right of the Toolbar */\r\nconst RightContent: FC<ContentProps> = memo(\r\n\tforwardRef<HTMLDivElement, ContentProps>(({ children, gap }, ref) => {\r\n\t\treturn (\r\n\t\t\t<Flex\r\n\t\t\t\tref={ref}\r\n\t\t\t\tgrow=\"1\"\r\n\t\t\t\twidth=\"max-content\"\r\n\t\t\t\tdirection=\"row-reverse\"\r\n\t\t\t\theight=\"100%\"\r\n\t\t\t\talign=\"center\"\r\n\t\t\t\tgap={gap ? gap : \"2\"}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</Flex>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\nexport const Toolbar = {\r\n\tRoot,\r\n\tLeftContent,\r\n\tRightContent,\r\n}\r\n","import { FC, forwardRef, memo, useCallback, useState } from \"react\"\r\nimport * as RadixToast from \"@radix-ui/react-toast\"\r\nimport { Callout, Flex } from \"@radix-ui/themes\"\r\nimport { Cross2Icon } from \"@radix-ui/react-icons\"\r\nimport { IconButton } from \"../Buttons\"\r\nimport { ToastProps } from \"./typings\"\r\nimport { useSeverityColor } from \"../utils\"\r\n\r\nimport styles from \"./Toast.module.sass\"\r\n\r\nconst _Toast = forwardRef<HTMLLIElement, ToastProps>(function Toast(\r\n\t{ title, description, icon, severity = \"primary\", size, onClose, sensitivity, action, ...rest },\r\n\tref,\r\n) {\r\n\tconst [open, setOpen] = useState(true)\r\n\tconst color = useSeverityColor(severity)\r\n\r\n\tconst handleOpenChange = useCallback(\r\n\t\t(open: boolean) => {\r\n\t\t\tif (!open && onClose) onClose()\r\n\t\t\tsetOpen(open)\r\n\t\t},\r\n\t\t[onClose],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<RadixToast.Root asChild ref={ref} {...rest} open={open} type={sensitivity} onOpenChange={handleOpenChange}>\r\n\t\t\t<Callout.Root className={styles.ToastRoot} variant=\"surface\" color={color} size={size}>\r\n\t\t\t\t<Flex width=\"100%\" align=\"center\" gap=\"4\" justify=\"between\">\r\n\t\t\t\t\t<Flex align=\"center\" gap=\"3\">\r\n\t\t\t\t\t\t<Callout.Icon>{icon}</Callout.Icon>\r\n\t\t\t\t\t\t<Flex direction=\"column\" gap=\"2\">\r\n\t\t\t\t\t\t\t<Flex direction=\"column\" gap=\"0\">\r\n\t\t\t\t\t\t\t\t<RadixToast.Title asChild>\r\n\t\t\t\t\t\t\t\t\t<Callout.Text size=\"3\" weight=\"medium\">\r\n\t\t\t\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t\t\t\t</Callout.Text>\r\n\t\t\t\t\t\t\t\t</RadixToast.Title>\r\n\t\t\t\t\t\t\t\t<RadixToast.Description asChild>\r\n\t\t\t\t\t\t\t\t\t<Callout.Text>{description}</Callout.Text>\r\n\t\t\t\t\t\t\t\t</RadixToast.Description>\r\n\t\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t\t\t{action && (\r\n\t\t\t\t\t\t\t\t<RadixToast.Action className={styles.actionButton} altText={action.altText} asChild>\r\n\t\t\t\t\t\t\t\t\t{action.content}\r\n\t\t\t\t\t\t\t\t</RadixToast.Action>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t</Flex>\r\n\r\n\t\t\t\t\t<RadixToast.Close asChild>\r\n\t\t\t\t\t\t<IconButton aria-label=\"Close\" variant=\"ghost\" severity={severity}>\r\n\t\t\t\t\t\t\t<Cross2Icon />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</RadixToast.Close>\r\n\t\t\t\t</Flex>\r\n\t\t\t</Callout.Root>\r\n\t\t</RadixToast.Root>\r\n\t)\r\n})\r\n\r\nexport const Toast: FC<ToastProps> = memo(_Toast)\r\n","import { createContext, useContext } from \"react\"\r\nimport { IToastContext } from \"./typings\"\r\n\r\nexport const ToastContext = createContext({} as IToastContext)\r\n\r\nexport const useToast = (): IToastContext => {\r\n\tconst context = useContext(ToastContext)\r\n\r\n\tif (!context) {\r\n\t\tthrow new Error(\"useToast must be used within a ToastProvider\")\r\n\t}\r\n\r\n\treturn context\r\n}\r\n","import { memo, useState, FC, useMemo, useCallback, useEffect } from \"react\"\r\nimport { IToastContext, SimpleToastProps, ToastContextProviderProps, ToastProps } from \"./typings\"\r\nimport { Toast } from \"./Toast\"\r\nimport { ToastProvider as RadixToastProvider, ToastViewport } from \"@radix-ui/react-toast\"\r\nimport { ToastContext } from \"./ToastContext\"\r\nimport styles from \"./Toast.module.sass\"\r\nimport classNames from \"classnames\"\r\n\r\ninterface ToastArgs extends ToastProps {\r\n\tid: string\r\n\ttimeout: NodeJS.Timeout\r\n}\r\n\r\n// average reading speed is 240 words per minute\r\nconst WORDS_PER_SECOND = 240 / 60\r\n// 5 seconds is the minimum duration for a toast\r\nconst MIN_DURATION = 5000\r\n\r\nenum CloseReason {\r\n\tManual,\r\n\tTimeout,\r\n}\r\n\r\nconst calculatedDuration = (toast: ToastProps) => {\r\n\t// if the user has passed a duration valid, use that instead\r\n\tif (toast.duration && toast.duration >= MIN_DURATION) return toast.duration\r\n\r\n\t// error messages should be displayed for longer\r\n\tconst severityFactor = toast.severity === \"danger\" ? 1.5 : 1\r\n\t// count the number of words in the title and description\r\n\tconst words = toast.description.split(\" \").length + toast.title.split(\" \").length\r\n\t// calculate the duration based on the number of words and the severity\r\n\tconst duration = (MIN_DURATION + words / WORDS_PER_SECOND) * severityFactor\r\n\treturn duration\r\n}\r\n\r\n/** this is a hack to allow toasts to be shown outside of components where hooks cannot be used */\r\n// eslint-disable-next-line react-refresh/only-export-components\r\nexport let unsafeShowToast: ((toastProps: ToastProps) => void) | undefined = undefined\r\n\r\n/** Toasts will be displayed in the top-right handle corner of the screen */\r\nexport const ToastProvider: FC<ToastContextProviderProps> = memo(function ToastContextProvider({\r\n\tchildren,\r\n\t// Use this class to change where the viewport for the toasts should be\r\n\tclassName,\r\n\thotkey,\r\n\t...rest\r\n}: ToastContextProviderProps) {\r\n\tconst [toasts, setToasts] = useState<ToastArgs[]>([])\r\n\r\n\tconst handleCloseToast = useCallback((id: string, reason: CloseReason, callback?: () => void) => {\r\n\t\tsetToasts((prevToasts) => {\r\n\t\t\tconst toast = prevToasts.find((toast) => toast.id === id)\r\n\t\t\t// clear the timeout if the toast is being closed manually\r\n\t\t\tif (toast && reason === CloseReason.Manual) clearTimeout(toast.timeout)\r\n\r\n\t\t\treturn prevToasts.filter((toast) => toast.id !== id)\r\n\t\t})\r\n\r\n\t\tif (callback) callback()\r\n\t}, [])\r\n\r\n\tconst toastContextValue = useMemo<IToastContext>(() => {\r\n\t\tlet counter = 0\r\n\r\n\t\tconst showToast = (toastProps: ToastProps) => {\r\n\t\t\tconst duration = calculatedDuration(toastProps)\r\n\t\t\tconst id = counter.toString()\r\n\t\t\tcounter += 1 // increment the counter so that ids are unique\r\n\r\n\t\t\t// manually close the toast after the duration has passed\r\n\t\t\t// this is necessary because the duration prop is reset on re-render\r\n\t\t\tconst pending = setTimeout(() => handleCloseToast(id, CloseReason.Timeout, toastProps.onClose), duration)\r\n\r\n\t\t\tsetToasts((prevToasts) => [...prevToasts, { ...toastProps, timeout: pending, duration, id }])\r\n\t\t}\r\n\t\tconst showPrimary = (toastProps: SimpleToastProps) => showToast({ ...toastProps, severity: \"primary\" })\r\n\t\tconst showSuccess = (toastProps: SimpleToastProps) => showToast({ ...toastProps, severity: \"success\" })\r\n\t\tconst showError = (toastProps: SimpleToastProps) => showToast({ ...toastProps, severity: \"danger\" })\r\n\t\tconst showInfo = (toastProps: SimpleToastProps) => showToast({ ...toastProps, severity: \"info\" })\r\n\t\tconst showWarning = (toastProps: SimpleToastProps) => showToast({ ...toastProps, severity: \"warning\" })\r\n\r\n\t\tunsafeShowToast = showToast\r\n\r\n\t\treturn {\r\n\t\t\tshowToast,\r\n\t\t\tshowPrimary,\r\n\t\t\tshowSuccess,\r\n\t\t\tshowError,\r\n\t\t\tshowInfo,\r\n\t\t\tshowWarning,\r\n\t\t}\r\n\t}, [handleCloseToast])\r\n\r\n\t// clear all timeouts when the component unmounts\r\n\tuseEffect(() => {\r\n\t\treturn () => {\r\n\t\t\tfor (const { timeout } of toasts) clearTimeout(timeout)\r\n\t\t}\r\n\t\t// only run this effect when the component unmounts\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [])\r\n\r\n\treturn (\r\n\t\t<ToastContext.Provider value={toastContextValue}>\r\n\t\t\t<RadixToastProvider {...rest}>\r\n\t\t\t\t{children}\r\n\r\n\t\t\t\t<ToastViewport className={classNames(className, styles.ToastViewport)} hotkey={hotkey} />\r\n\r\n\t\t\t\t{toasts.map(({ id, onClose, ...toastProps }) => (\r\n\t\t\t\t\t<Toast key={id} {...toastProps} onClose={() => handleCloseToast(id, CloseReason.Manual, onClose)} />\r\n\t\t\t\t))}\r\n\t\t\t</RadixToastProvider>\r\n\t\t</ToastContext.Provider>\r\n\t)\r\n})\r\n","import { ComponentProps, forwardRef, memo } from \"react\"\r\nimport { Flex, Tooltip as RadixToolTip } from \"@radix-ui/themes\"\r\n\r\nimport classNames from \"classnames\"\r\nimport styles from \"./Tooltip.module.sass\"\r\ninterface TooltipProps extends Omit<ComponentProps<typeof RadixToolTip>, \"asChild\"> {}\r\nexport const Tooltip = memo(\r\n\tforwardRef<HTMLDivElement, TooltipProps>(({ className, children, content, ...rest }, ref) => {\r\n\t\treturn (\r\n\t\t\t<RadixToolTip\r\n\t\t\t\tclassName={classNames(\"overmap-tooltip\", className, styles.default)}\r\n\t\t\t\tref={ref}\r\n\t\t\t\tcontent={\r\n\t\t\t\t\t<Flex align=\"center\" gap=\"1\" width=\"max-content\" height=\"max-content\" justify=\"center\">\r\n\t\t\t\t\t\t{content}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t}\r\n\t\t\t\t{...rest}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</RadixToolTip>\r\n\t\t)\r\n\t}),\r\n)\r\n","import { ElementRef, FC, ForwardRefExoticComponent, forwardRef, memo } from \"react\"\r\nimport { MarginProps, Text as RadixText } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport styles from \"./ Text.module.sass\"\r\nimport { Severity } from \"../typings\"\r\nimport { useSeverityColor } from \"..\"\r\n\r\ntype RadixTextProps = typeof RadixText extends ForwardRefExoticComponent<infer P> ? P : never\r\n\r\nexport type TextProps = Omit<RadixTextProps, keyof MarginProps | \"ref\" | \"asChild\" | \"color\"> & {\r\n\t/** If true, the text will not wrap, but instead will truncate with a text overflow ellipsis.\r\n\t * @default false\r\n\t */\r\n\tnoWrap?: boolean\r\n\tseverity?: Severity\r\n\t/** @default span */\r\n\tas?: RadixTextProps[\"as\"]\r\n\t/** @default 3 */\r\n\tsize?: RadixTextProps[\"size\"]\r\n}\r\n\r\n/**\r\n * A foundational text primitive.\r\n *\r\n * Use the `as` prop to render text as a `p`, `label`, `div` or `span`. This prop is purely semantic and does not alter visual appearance.\r\n *\r\n * For the complete documentation, refer to https://www.radix-ui.com/themes/docs/components/text.\r\n */\r\nexport const Text: FC<TextProps> = memo(\r\n\tforwardRef<ElementRef<\"span\">, TextProps>(({ className, noWrap, severity, as, ...props }, ref) => {\r\n\t\tconst color = useSeverityColor(severity)\r\n\t\treturn (\r\n\t\t\t<RadixText\r\n\t\t\t\tref={ref}\r\n\t\t\t\t// bypassing incorrect TS error\r\n\t\t\t\tas={as as undefined}\r\n\t\t\t\tclassName={classNames(className, { [styles.noWrap!]: noWrap })}\r\n\t\t\t\tcolor={color}\r\n\t\t\t\t{...props}\r\n\t\t\t/>\r\n\t\t)\r\n\t}),\r\n)\r\n","import { Theme } from \"@radix-ui/themes\"\r\nimport { ComponentProps, FC, forwardRef, memo } from \"react\"\r\n// css file contains updates to the default radix tokens\r\nimport \"./DefaultTheme.css\"\r\n\r\nexport type DefaultThemeProps = ComponentProps<typeof Theme>\r\n\r\nexport const DefaultTheme: FC<DefaultThemeProps> = memo(\r\n\tforwardRef<HTMLDivElement, DefaultThemeProps>((props, ref) => {\r\n\t\tconst { panelBackground = \"solid\", radius = \"full\", ...rest } = props\r\n\t\treturn <Theme panelBackground={panelBackground} radius={radius} ref={ref} {...rest} />\r\n\t}),\r\n)\r\n","import { FC, forwardRef, memo } from \"react\"\r\nimport { Separator as RadixSeparator, Text, Flex } from \"@radix-ui/themes\"\r\nimport { SeparatorProps } from \"./typings.ts\"\r\nimport { useResponsiveMapping, useSeverityColor } from \"../utils.ts\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"./Separator.module.sass\"\r\n\r\n/** This mapping is required to ensure that size \"4\" of the Radix-UI Separator has the same functionality in this\r\n * Separator component, that is, to fill all space in its container */\r\nconst SeparatorSizeMapping: Record<\"1\" | \"2\" | \"3\" | \"4\", \"max-content\" | \"100%\"> = {\r\n\t\"1\": \"max-content\",\r\n\t\"2\": \"max-content\",\r\n\t\"3\": \"max-content\",\r\n\t\"4\": \"100%\",\r\n}\r\n\r\nconst _Separator = forwardRef<HTMLDivElement, SeparatorProps>(function Separator(\r\n\t{\r\n\t\tclassName,\r\n\t\tseverity = \"info\",\r\n\t\ttextWeight = \"light\",\r\n\t\tgap = \"1\",\r\n\t\ttext,\r\n\t\torientation = \"horizontal\",\r\n\t\tsize,\r\n\t\tweight = \"medium\",\r\n\t\t...rest\r\n\t},\r\n\tref,\r\n) {\r\n\tconst computedSizing = useResponsiveMapping(size, SeparatorSizeMapping)\r\n\tconst severityColor = useSeverityColor(severity)\r\n\treturn (\r\n\t\t<Flex\r\n\t\t\tclassName={classNames(\"overmap-separator\", className, {\r\n\t\t\t\t[styles.light!]: weight === \"light\",\r\n\t\t\t\t[styles.bold!]: weight === \"bold\",\r\n\t\t\t\t[styles.full!]: weight === \"full\",\r\n\t\t\t})}\r\n\t\t\tref={ref}\r\n\t\t\twidth={orientation === \"horizontal\" ? computedSizing : \"max-content\"}\r\n\t\t\theight={orientation === \"vertical\" ? computedSizing : \"max-content\"}\r\n\t\t\tdirection={orientation === \"vertical\" ? \"column\" : \"row\"}\r\n\t\t\talign=\"center\"\r\n\t\t\tgap={gap}\r\n\t\t>\r\n\t\t\t<RadixSeparator size={size} orientation={orientation} color={severityColor} {...rest} />\r\n\t\t\t{text && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<Text className={styles.Text} as=\"span\" size=\"1\" weight={textWeight} color={severityColor}>\r\n\t\t\t\t\t\t{text}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t\t<RadixSeparator size={size} orientation={orientation} color={severityColor} {...rest} />\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t</Flex>\r\n\t)\r\n})\r\n\r\nexport const Separator: FC<SeparatorProps> = memo(_Separator)\r\n","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","import {useCallback as $3vqmr$useCallback} from \"react\";\n\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */ function $6ed0406888f73fc4$var$setRef(ref, value) {\n if (typeof ref === 'function') ref(value);\n else if (ref !== null && ref !== undefined) ref.current = value;\n}\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */ function $6ed0406888f73fc4$export$43e446d32b3d21af(...refs) {\n return (node)=>refs.forEach((ref)=>$6ed0406888f73fc4$var$setRef(ref, node)\n )\n ;\n}\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */ function $6ed0406888f73fc4$export$c7b2cbe3552a0d05(...refs) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return $3vqmr$useCallback($6ed0406888f73fc4$export$43e446d32b3d21af(...refs), refs);\n}\n\n\n\n\nexport {$6ed0406888f73fc4$export$43e446d32b3d21af as composeRefs, $6ed0406888f73fc4$export$c7b2cbe3552a0d05 as useComposedRefs};\n//# sourceMappingURL=index.mjs.map\n","import {createContext as $3bkAK$createContext, useMemo as $3bkAK$useMemo, createElement as $3bkAK$createElement, useContext as $3bkAK$useContext} from \"react\";\n\n\nfunction $c512c27ab02ef895$export$fd42f52fd3ae1109(rootComponentName, defaultContext) {\n const Context = /*#__PURE__*/ $3bkAK$createContext(defaultContext);\n function Provider(props) {\n const { children: children , ...context } = props; // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = $3bkAK$useMemo(()=>context\n , Object.values(context));\n return /*#__PURE__*/ $3bkAK$createElement(Context.Provider, {\n value: value\n }, children);\n }\n function useContext(consumerName) {\n const context = $3bkAK$useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext; // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n Provider.displayName = rootComponentName + 'Provider';\n return [\n Provider,\n useContext\n ];\n}\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/ function $c512c27ab02ef895$export$50c7b4e9d9f19c1(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/ function $c512c27ab02ef895$export$fd42f52fd3ae1109(rootComponentName, defaultContext) {\n const BaseContext = /*#__PURE__*/ $3bkAK$createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [\n ...defaultContexts,\n defaultContext\n ];\n function Provider(props) {\n const { scope: scope , children: children , ...context } = props;\n const Context = (scope === null || scope === void 0 ? void 0 : scope[scopeName][index]) || BaseContext; // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = $3bkAK$useMemo(()=>context\n , Object.values(context));\n return /*#__PURE__*/ $3bkAK$createElement(Context.Provider, {\n value: value\n }, children);\n }\n function useContext(consumerName, scope) {\n const Context = (scope === null || scope === void 0 ? void 0 : scope[scopeName][index]) || BaseContext;\n const context = $3bkAK$useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext; // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n Provider.displayName = rootComponentName + 'Provider';\n return [\n Provider,\n useContext\n ];\n }\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/ const createScope = ()=>{\n const scopeContexts = defaultContexts.map((defaultContext)=>{\n return /*#__PURE__*/ $3bkAK$createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = (scope === null || scope === void 0 ? void 0 : scope[scopeName]) || scopeContexts;\n return $3bkAK$useMemo(()=>({\n [`__scope${scopeName}`]: {\n ...scope,\n [scopeName]: contexts\n }\n })\n , [\n scope,\n contexts\n ]);\n };\n };\n createScope.scopeName = scopeName;\n return [\n $c512c27ab02ef895$export$fd42f52fd3ae1109,\n $c512c27ab02ef895$var$composeContextScopes(createScope, ...createContextScopeDeps)\n ];\n}\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/ function $c512c27ab02ef895$var$composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope1 = ()=>{\n const scopeHooks = scopes.map((createScope)=>({\n useScope: createScope(),\n scopeName: createScope.scopeName\n })\n );\n return function useComposedScopes(overrideScopes) {\n const nextScopes1 = scopeHooks.reduce((nextScopes, { useScope: useScope , scopeName: scopeName })=>{\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return {\n ...nextScopes,\n ...currentScope\n };\n }, {});\n return $3bkAK$useMemo(()=>({\n [`__scope${baseScope.scopeName}`]: nextScopes1\n })\n , [\n nextScopes1\n ]);\n };\n };\n createScope1.scopeName = baseScope.scopeName;\n return createScope1;\n}\n\n\n\n\nexport {$c512c27ab02ef895$export$fd42f52fd3ae1109 as createContext, $c512c27ab02ef895$export$50c7b4e9d9f19c1 as createContextScope};\n//# sourceMappingURL=index.mjs.map\n","function $e42e1063c40fb3ef$export$b9ecd428b558ff10(originalEventHandler, ourEventHandler, { checkForDefaultPrevented: checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler === null || originalEventHandler === void 0 || originalEventHandler(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) return ourEventHandler === null || ourEventHandler === void 0 ? void 0 : ourEventHandler(event);\n };\n}\n\n\n\n\nexport {$e42e1063c40fb3ef$export$b9ecd428b558ff10 as composeEventHandlers};\n//# sourceMappingURL=index.mjs.map\n","import {useRef as $lwiWj$useRef, useEffect as $lwiWj$useEffect, useMemo as $lwiWj$useMemo} from \"react\";\n\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */ function $b1b2314f5f9a1d84$export$25bec8c6f54ee79a(callback) {\n const callbackRef = $lwiWj$useRef(callback);\n $lwiWj$useEffect(()=>{\n callbackRef.current = callback;\n }); // https://github.com/facebook/react/issues/19240\n return $lwiWj$useMemo(()=>(...args)=>{\n var _callbackRef$current;\n return (_callbackRef$current = callbackRef.current) === null || _callbackRef$current === void 0 ? void 0 : _callbackRef$current.call(callbackRef, ...args);\n }\n , []);\n}\n\n\n\n\nexport {$b1b2314f5f9a1d84$export$25bec8c6f54ee79a as useCallbackRef};\n//# sourceMappingURL=index.mjs.map\n","import {useCallback as $bnPw9$useCallback, useState as $bnPw9$useState, useRef as $bnPw9$useRef, useEffect as $bnPw9$useEffect} from \"react\";\nimport {useCallbackRef as $bnPw9$useCallbackRef} from \"@radix-ui/react-use-callback-ref\";\n\n\n\nfunction $71cd76cc60e0454e$export$6f32135080cb4c3({ prop: prop , defaultProp: defaultProp , onChange: onChange = ()=>{} }) {\n const [uncontrolledProp, setUncontrolledProp] = $71cd76cc60e0454e$var$useUncontrolledState({\n defaultProp: defaultProp,\n onChange: onChange\n });\n const isControlled = prop !== undefined;\n const value1 = isControlled ? prop : uncontrolledProp;\n const handleChange = $bnPw9$useCallbackRef(onChange);\n const setValue = $bnPw9$useCallback((nextValue)=>{\n if (isControlled) {\n const setter = nextValue;\n const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n if (value !== prop) handleChange(value);\n } else setUncontrolledProp(nextValue);\n }, [\n isControlled,\n prop,\n setUncontrolledProp,\n handleChange\n ]);\n return [\n value1,\n setValue\n ];\n}\nfunction $71cd76cc60e0454e$var$useUncontrolledState({ defaultProp: defaultProp , onChange: onChange }) {\n const uncontrolledState = $bnPw9$useState(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = $bnPw9$useRef(value);\n const handleChange = $bnPw9$useCallbackRef(onChange);\n $bnPw9$useEffect(()=>{\n if (prevValueRef.current !== value) {\n handleChange(value);\n prevValueRef.current = value;\n }\n }, [\n value,\n prevValueRef,\n handleChange\n ]);\n return uncontrolledState;\n}\n\n\n\n\nexport {$71cd76cc60e0454e$export$6f32135080cb4c3 as useControllableState};\n//# sourceMappingURL=index.mjs.map\n","import {useRef as $8LvvK$useRef, useMemo as $8LvvK$useMemo} from \"react\";\n\n\nfunction $010c2913dbd2fe3d$export$5cae361ad82dce8b(value) {\n const ref = $8LvvK$useRef({\n value: value,\n previous: value\n }); // We compare values before making an update to ensure that\n // a change has been made. This ensures the previous value is\n // persisted correctly between renders.\n return $8LvvK$useMemo(()=>{\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [\n value\n ]);\n}\n\n\n\n\nexport {$010c2913dbd2fe3d$export$5cae361ad82dce8b as usePrevious};\n//# sourceMappingURL=index.mjs.map\n","import {useLayoutEffect as $dxlwH$useLayoutEffect} from \"react\";\n\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */ const $9f79659886946c16$export$e5c5a5f917a5871c = Boolean(globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) ? $dxlwH$useLayoutEffect : ()=>{};\n\n\n\n\nexport {$9f79659886946c16$export$e5c5a5f917a5871c as useLayoutEffect};\n//# sourceMappingURL=index.mjs.map\n","import {useState as $9gyGR$useState} from \"react\";\nimport {useLayoutEffect as $9gyGR$useLayoutEffect} from \"@radix-ui/react-use-layout-effect\";\n\n\n\nfunction $db6c3485150b8e66$export$1ab7ae714698c4b8(element) {\n const [size, setSize] = $9gyGR$useState(undefined);\n $9gyGR$useLayoutEffect(()=>{\n if (element) {\n // provide size as early as possible\n setSize({\n width: element.offsetWidth,\n height: element.offsetHeight\n });\n const resizeObserver = new ResizeObserver((entries)=>{\n if (!Array.isArray(entries)) return;\n // Since we only observe the one element, we don't need to loop over the\n // array\n if (!entries.length) return;\n const entry = entries[0];\n let width;\n let height;\n if ('borderBoxSize' in entry) {\n const borderSizeEntry = entry['borderBoxSize']; // iron out differences between browsers\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize['inlineSize'];\n height = borderSize['blockSize'];\n } else {\n // for browsers that don't support `borderBoxSize`\n // we calculate it ourselves to get the correct border box.\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({\n width: width,\n height: height\n });\n });\n resizeObserver.observe(element, {\n box: 'border-box'\n });\n return ()=>resizeObserver.unobserve(element)\n ;\n } else // We only want to reset to `undefined` when the element becomes `null`,\n // not if it changes to another element.\n setSize(undefined);\n }, [\n element\n ]);\n return size;\n}\n\n\n\n\nexport {$db6c3485150b8e66$export$1ab7ae714698c4b8 as useSize};\n//# sourceMappingURL=index.mjs.map\n","import {Children as $iqq3r$Children, cloneElement as $iqq3r$cloneElement, useState as $iqq3r$useState, useRef as $iqq3r$useRef, useEffect as $iqq3r$useEffect, useCallback as $iqq3r$useCallback, useReducer as $iqq3r$useReducer} from \"react\";\nimport {flushSync as $iqq3r$flushSync} from \"react-dom\";\nimport {useComposedRefs as $iqq3r$useComposedRefs} from \"@radix-ui/react-compose-refs\";\nimport {useLayoutEffect as $iqq3r$useLayoutEffect} from \"@radix-ui/react-use-layout-effect\";\n\n\n\n\n\n\nfunction $fe963b355347cc68$export$3e6543de14f8614f(initialState, machine) {\n return $iqq3r$useReducer((state, event)=>{\n const nextState = machine[state][event];\n return nextState !== null && nextState !== void 0 ? nextState : state;\n }, initialState);\n}\n\n\nconst $921a889cee6df7e8$export$99c2b779aa4e8b8b = (props)=>{\n const { present: present , children: children } = props;\n const presence = $921a889cee6df7e8$var$usePresence(present);\n const child = typeof children === 'function' ? children({\n present: presence.isPresent\n }) : $iqq3r$Children.only(children);\n const ref = $iqq3r$useComposedRefs(presence.ref, child.ref);\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? /*#__PURE__*/ $iqq3r$cloneElement(child, {\n ref: ref\n }) : null;\n};\n$921a889cee6df7e8$export$99c2b779aa4e8b8b.displayName = 'Presence';\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/ function $921a889cee6df7e8$var$usePresence(present) {\n const [node1, setNode] = $iqq3r$useState();\n const stylesRef = $iqq3r$useRef({});\n const prevPresentRef = $iqq3r$useRef(present);\n const prevAnimationNameRef = $iqq3r$useRef('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = $fe963b355347cc68$export$3e6543de14f8614f(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended'\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted'\n },\n unmounted: {\n MOUNT: 'mounted'\n }\n });\n $iqq3r$useEffect(()=>{\n const currentAnimationName = $921a889cee6df7e8$var$getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [\n state\n ]);\n $iqq3r$useLayoutEffect(()=>{\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = $921a889cee6df7e8$var$getAnimationName(styles);\n if (present) send('MOUNT');\n else if (currentAnimationName === 'none' || (styles === null || styles === void 0 ? void 0 : styles.display) === 'none') // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */ const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) send('ANIMATION_OUT');\n else send('UNMOUNT');\n }\n prevPresentRef.current = present;\n }\n }, [\n present,\n send\n ]);\n $iqq3r$useLayoutEffect(()=>{\n if (node1) {\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */ const handleAnimationEnd = (event)=>{\n const currentAnimationName = $921a889cee6df7e8$var$getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node1 && isCurrentAnimation) // With React 18 concurrency this update is applied\n // a frame after the animation ends, creating a flash of visible content.\n // By manually flushing we ensure they sync within a frame, removing the flash.\n $iqq3r$flushSync(()=>send('ANIMATION_END')\n );\n };\n const handleAnimationStart = (event)=>{\n if (event.target === node1) // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = $921a889cee6df7e8$var$getAnimationName(stylesRef.current);\n };\n node1.addEventListener('animationstart', handleAnimationStart);\n node1.addEventListener('animationcancel', handleAnimationEnd);\n node1.addEventListener('animationend', handleAnimationEnd);\n return ()=>{\n node1.removeEventListener('animationstart', handleAnimationStart);\n node1.removeEventListener('animationcancel', handleAnimationEnd);\n node1.removeEventListener('animationend', handleAnimationEnd);\n };\n } else // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }, [\n node1,\n send\n ]);\n return {\n isPresent: [\n 'mounted',\n 'unmountSuspended'\n ].includes(state),\n ref: $iqq3r$useCallback((node)=>{\n if (node) stylesRef.current = getComputedStyle(node);\n setNode(node);\n }, [])\n };\n}\n/* -----------------------------------------------------------------------------------------------*/ function $921a889cee6df7e8$var$getAnimationName(styles) {\n return (styles === null || styles === void 0 ? void 0 : styles.animationName) || 'none';\n}\n\n\n\n\nexport {$921a889cee6df7e8$export$99c2b779aa4e8b8b as Presence};\n//# sourceMappingURL=index.mjs.map\n","import $9IrjX$babelruntimehelpersesmextends from \"@babel/runtime/helpers/esm/extends\";\nimport {forwardRef as $9IrjX$forwardRef, Children as $9IrjX$Children, isValidElement as $9IrjX$isValidElement, createElement as $9IrjX$createElement, cloneElement as $9IrjX$cloneElement, Fragment as $9IrjX$Fragment} from \"react\";\nimport {composeRefs as $9IrjX$composeRefs} from \"@radix-ui/react-compose-refs\";\n\n\n\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/ const $5e63c961fc1ce211$export$8c6ed5c666ac1360 = /*#__PURE__*/ $9IrjX$forwardRef((props, forwardedRef)=>{\n const { children: children , ...slotProps } = props;\n const childrenArray = $9IrjX$Children.toArray(children);\n const slottable = childrenArray.find($5e63c961fc1ce211$var$isSlottable);\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child)=>{\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if ($9IrjX$Children.count(newElement) > 1) return $9IrjX$Children.only(null);\n return /*#__PURE__*/ $9IrjX$isValidElement(newElement) ? newElement.props.children : null;\n } else return child;\n });\n return /*#__PURE__*/ $9IrjX$createElement($5e63c961fc1ce211$var$SlotClone, $9IrjX$babelruntimehelpersesmextends({}, slotProps, {\n ref: forwardedRef\n }), /*#__PURE__*/ $9IrjX$isValidElement(newElement) ? /*#__PURE__*/ $9IrjX$cloneElement(newElement, undefined, newChildren) : null);\n }\n return /*#__PURE__*/ $9IrjX$createElement($5e63c961fc1ce211$var$SlotClone, $9IrjX$babelruntimehelpersesmextends({}, slotProps, {\n ref: forwardedRef\n }), children);\n});\n$5e63c961fc1ce211$export$8c6ed5c666ac1360.displayName = 'Slot';\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/ const $5e63c961fc1ce211$var$SlotClone = /*#__PURE__*/ $9IrjX$forwardRef((props, forwardedRef)=>{\n const { children: children , ...slotProps } = props;\n if (/*#__PURE__*/ $9IrjX$isValidElement(children)) return /*#__PURE__*/ $9IrjX$cloneElement(children, {\n ...$5e63c961fc1ce211$var$mergeProps(slotProps, children.props),\n ref: forwardedRef ? $9IrjX$composeRefs(forwardedRef, children.ref) : children.ref\n });\n return $9IrjX$Children.count(children) > 1 ? $9IrjX$Children.only(null) : null;\n});\n$5e63c961fc1ce211$var$SlotClone.displayName = 'SlotClone';\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/ const $5e63c961fc1ce211$export$d9f1ccf0bdb05d45 = ({ children: children })=>{\n return /*#__PURE__*/ $9IrjX$createElement($9IrjX$Fragment, null, children);\n};\n/* ---------------------------------------------------------------------------------------------- */ function $5e63c961fc1ce211$var$isSlottable(child) {\n return /*#__PURE__*/ $9IrjX$isValidElement(child) && child.type === $5e63c961fc1ce211$export$d9f1ccf0bdb05d45;\n}\nfunction $5e63c961fc1ce211$var$mergeProps(slotProps, childProps) {\n // all child props should override\n const overrideProps = {\n ...childProps\n };\n for(const propName in childProps){\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) overrideProps[propName] = (...args)=>{\n childPropValue(...args);\n slotPropValue(...args);\n };\n else if (slotPropValue) overrideProps[propName] = slotPropValue;\n } else if (propName === 'style') overrideProps[propName] = {\n ...slotPropValue,\n ...childPropValue\n };\n else if (propName === 'className') overrideProps[propName] = [\n slotPropValue,\n childPropValue\n ].filter(Boolean).join(' ');\n }\n return {\n ...slotProps,\n ...overrideProps\n };\n}\nconst $5e63c961fc1ce211$export$be92b6f5f03c0fe9 = $5e63c961fc1ce211$export$8c6ed5c666ac1360;\n\n\n\n\nexport {$5e63c961fc1ce211$export$8c6ed5c666ac1360 as Slot, $5e63c961fc1ce211$export$d9f1ccf0bdb05d45 as Slottable, $5e63c961fc1ce211$export$be92b6f5f03c0fe9 as Root};\n//# sourceMappingURL=index.mjs.map\n","import $4q5Fq$babelruntimehelpersesmextends from \"@babel/runtime/helpers/esm/extends\";\nimport {forwardRef as $4q5Fq$forwardRef, useEffect as $4q5Fq$useEffect, createElement as $4q5Fq$createElement} from \"react\";\nimport {flushSync as $4q5Fq$flushSync} from \"react-dom\";\nimport {Slot as $4q5Fq$Slot} from \"@radix-ui/react-slot\";\n\n\n\n\n\nconst $8927f6f2acc4f386$var$NODES = [\n 'a',\n 'button',\n 'div',\n 'form',\n 'h2',\n 'h3',\n 'img',\n 'input',\n 'label',\n 'li',\n 'nav',\n 'ol',\n 'p',\n 'span',\n 'svg',\n 'ul'\n]; // Temporary while we await merge of this fix:\n// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55396\n// prettier-ignore\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/ const $8927f6f2acc4f386$export$250ffa63cdc0d034 = $8927f6f2acc4f386$var$NODES.reduce((primitive, node)=>{\n const Node = /*#__PURE__*/ $4q5Fq$forwardRef((props, forwardedRef)=>{\n const { asChild: asChild , ...primitiveProps } = props;\n const Comp = asChild ? $4q5Fq$Slot : node;\n $4q5Fq$useEffect(()=>{\n window[Symbol.for('radix-ui')] = true;\n }, []);\n return /*#__PURE__*/ $4q5Fq$createElement(Comp, $4q5Fq$babelruntimehelpersesmextends({}, primitiveProps, {\n ref: forwardedRef\n }));\n });\n Node.displayName = `Primitive.${node}`;\n return {\n ...primitive,\n [node]: Node\n };\n}, {});\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/ /**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n * - discrete\n * - continuous\n * - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not nessesary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */ function $8927f6f2acc4f386$export$6d1a0317bde7de7f(target, event) {\n if (target) $4q5Fq$flushSync(()=>target.dispatchEvent(event)\n );\n}\n/* -----------------------------------------------------------------------------------------------*/ const $8927f6f2acc4f386$export$be92b6f5f03c0fe9 = $8927f6f2acc4f386$export$250ffa63cdc0d034;\n\n\n\n\nexport {$8927f6f2acc4f386$export$250ffa63cdc0d034 as Primitive, $8927f6f2acc4f386$export$be92b6f5f03c0fe9 as Root, $8927f6f2acc4f386$export$6d1a0317bde7de7f as dispatchDiscreteCustomEvent};\n//# sourceMappingURL=index.mjs.map\n","import $1bpvS$babelruntimehelpersesmextends from \"@babel/runtime/helpers/esm/extends\";\nimport {forwardRef as $1bpvS$forwardRef, useState as $1bpvS$useState, useRef as $1bpvS$useRef, useEffect as $1bpvS$useEffect, createElement as $1bpvS$createElement} from \"react\";\nimport {useComposedRefs as $1bpvS$useComposedRefs} from \"@radix-ui/react-compose-refs\";\nimport {createContextScope as $1bpvS$createContextScope} from \"@radix-ui/react-context\";\nimport {composeEventHandlers as $1bpvS$composeEventHandlers} from \"@radix-ui/primitive\";\nimport {useControllableState as $1bpvS$useControllableState} from \"@radix-ui/react-use-controllable-state\";\nimport {usePrevious as $1bpvS$usePrevious} from \"@radix-ui/react-use-previous\";\nimport {useSize as $1bpvS$useSize} from \"@radix-ui/react-use-size\";\nimport {Presence as $1bpvS$Presence} from \"@radix-ui/react-presence\";\nimport {Primitive as $1bpvS$Primitive} from \"@radix-ui/react-primitive\";\n\n\n\n\n\n\n\n\n\n\n\n/* -------------------------------------------------------------------------------------------------\n * Checkbox\n * -----------------------------------------------------------------------------------------------*/ const $e698a72e93240346$var$CHECKBOX_NAME = 'Checkbox';\nconst [$e698a72e93240346$var$createCheckboxContext, $e698a72e93240346$export$b566c4ff5488ea01] = $1bpvS$createContextScope($e698a72e93240346$var$CHECKBOX_NAME);\nconst [$e698a72e93240346$var$CheckboxProvider, $e698a72e93240346$var$useCheckboxContext] = $e698a72e93240346$var$createCheckboxContext($e698a72e93240346$var$CHECKBOX_NAME);\nconst $e698a72e93240346$export$48513f6b9f8ce62d = /*#__PURE__*/ $1bpvS$forwardRef((props, forwardedRef)=>{\n const { __scopeCheckbox: __scopeCheckbox , name: name , checked: checkedProp , defaultChecked: defaultChecked , required: required , disabled: disabled , value: value = 'on' , onCheckedChange: onCheckedChange , ...checkboxProps } = props;\n const [button, setButton] = $1bpvS$useState(null);\n const composedRefs = $1bpvS$useComposedRefs(forwardedRef, (node)=>setButton(node)\n );\n const hasConsumerStoppedPropagationRef = $1bpvS$useRef(false); // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = button ? Boolean(button.closest('form')) : true;\n const [checked = false, setChecked] = $1bpvS$useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked,\n onChange: onCheckedChange\n });\n const initialCheckedStateRef = $1bpvS$useRef(checked);\n $1bpvS$useEffect(()=>{\n const form = button === null || button === void 0 ? void 0 : button.form;\n if (form) {\n const reset = ()=>setChecked(initialCheckedStateRef.current)\n ;\n form.addEventListener('reset', reset);\n return ()=>form.removeEventListener('reset', reset)\n ;\n }\n }, [\n button,\n setChecked\n ]);\n return /*#__PURE__*/ $1bpvS$createElement($e698a72e93240346$var$CheckboxProvider, {\n scope: __scopeCheckbox,\n state: checked,\n disabled: disabled\n }, /*#__PURE__*/ $1bpvS$createElement($1bpvS$Primitive.button, $1bpvS$babelruntimehelpersesmextends({\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": $e698a72e93240346$var$isIndeterminate(checked) ? 'mixed' : checked,\n \"aria-required\": required,\n \"data-state\": $e698a72e93240346$var$getState(checked),\n \"data-disabled\": disabled ? '' : undefined,\n disabled: disabled,\n value: value\n }, checkboxProps, {\n ref: composedRefs,\n onKeyDown: $1bpvS$composeEventHandlers(props.onKeyDown, (event)=>{\n // According to WAI ARIA, Checkboxes don't activate on enter keypress\n if (event.key === 'Enter') event.preventDefault();\n }),\n onClick: $1bpvS$composeEventHandlers(props.onClick, (event)=>{\n setChecked((prevChecked)=>$e698a72e93240346$var$isIndeterminate(prevChecked) ? true : !prevChecked\n );\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(); // if checkbox is in a form, stop propagation from the button so that we only propagate\n // one click event (from the input). We propagate changes from an input so that native\n // form validation works and form events reflect checkbox updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n })), isFormControl && /*#__PURE__*/ $1bpvS$createElement($e698a72e93240346$var$BubbleInput, {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name: name,\n value: value,\n checked: checked,\n required: required,\n disabled: disabled // We transform because the input is absolutely positioned but we have\n ,\n style: {\n transform: 'translateX(-100%)'\n }\n }));\n});\n/*#__PURE__*/ Object.assign($e698a72e93240346$export$48513f6b9f8ce62d, {\n displayName: $e698a72e93240346$var$CHECKBOX_NAME\n});\n/* -------------------------------------------------------------------------------------------------\n * CheckboxIndicator\n * -----------------------------------------------------------------------------------------------*/ const $e698a72e93240346$var$INDICATOR_NAME = 'CheckboxIndicator';\nconst $e698a72e93240346$export$59aad738f51d1c05 = /*#__PURE__*/ $1bpvS$forwardRef((props, forwardedRef)=>{\n const { __scopeCheckbox: __scopeCheckbox , forceMount: forceMount , ...indicatorProps } = props;\n const context = $e698a72e93240346$var$useCheckboxContext($e698a72e93240346$var$INDICATOR_NAME, __scopeCheckbox);\n return /*#__PURE__*/ $1bpvS$createElement($1bpvS$Presence, {\n present: forceMount || $e698a72e93240346$var$isIndeterminate(context.state) || context.state === true\n }, /*#__PURE__*/ $1bpvS$createElement($1bpvS$Primitive.span, $1bpvS$babelruntimehelpersesmextends({\n \"data-state\": $e698a72e93240346$var$getState(context.state),\n \"data-disabled\": context.disabled ? '' : undefined\n }, indicatorProps, {\n ref: forwardedRef,\n style: {\n pointerEvents: 'none',\n ...props.style\n }\n })));\n});\n/*#__PURE__*/ Object.assign($e698a72e93240346$export$59aad738f51d1c05, {\n displayName: $e698a72e93240346$var$INDICATOR_NAME\n});\n/* ---------------------------------------------------------------------------------------------- */ const $e698a72e93240346$var$BubbleInput = (props)=>{\n const { control: control , checked: checked , bubbles: bubbles = true , ...inputProps } = props;\n const ref = $1bpvS$useRef(null);\n const prevChecked = $1bpvS$usePrevious(checked);\n const controlSize = $1bpvS$useSize(control); // Bubble checked change to parents (e.g form change event)\n $1bpvS$useEffect(()=>{\n const input = ref.current;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'checked');\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', {\n bubbles: bubbles\n });\n input.indeterminate = $e698a72e93240346$var$isIndeterminate(checked);\n setChecked.call(input, $e698a72e93240346$var$isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [\n prevChecked,\n checked,\n bubbles\n ]);\n return /*#__PURE__*/ $1bpvS$createElement(\"input\", $1bpvS$babelruntimehelpersesmextends({\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: $e698a72e93240346$var$isIndeterminate(checked) ? false : checked\n }, inputProps, {\n tabIndex: -1,\n ref: ref,\n style: {\n ...props.style,\n ...controlSize,\n position: 'absolute',\n pointerEvents: 'none',\n opacity: 0,\n margin: 0\n }\n }));\n};\nfunction $e698a72e93240346$var$isIndeterminate(checked) {\n return checked === 'indeterminate';\n}\nfunction $e698a72e93240346$var$getState(checked) {\n return $e698a72e93240346$var$isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n}\nconst $e698a72e93240346$export$be92b6f5f03c0fe9 = $e698a72e93240346$export$48513f6b9f8ce62d;\nconst $e698a72e93240346$export$adb584737d712b70 = $e698a72e93240346$export$59aad738f51d1c05;\n\n\n\n\nexport {$e698a72e93240346$export$b566c4ff5488ea01 as createCheckboxScope, $e698a72e93240346$export$48513f6b9f8ce62d as Checkbox, $e698a72e93240346$export$59aad738f51d1c05 as CheckboxIndicator, $e698a72e93240346$export$be92b6f5f03c0fe9 as Root, $e698a72e93240346$export$adb584737d712b70 as Indicator};\n//# sourceMappingURL=index.mjs.map\n","import { FC, forwardRef, memo, Ref } from \"react\"\r\nimport { CheckboxProps, CheckboxValue } from \"./typings\"\r\nimport * as RadixCheckbox from \"@radix-ui/react-checkbox\"\r\nimport styles from \"./Checkbox.module.sass\"\r\nimport classNames from \"classnames\"\r\nimport { CheckIcon, DividerHorizontalIcon } from \"@radix-ui/react-icons\"\r\nimport { Flex } from \"@radix-ui/themes\"\r\nimport { HoverUtility } from \"../HoverUtility\"\r\n\r\nconst _Checkbox = forwardRef(function Checkbox(\r\n\t{ className, labelClassName, label, checked, onCheckedChange, ...rest }: CheckboxProps,\r\n\tref: Ref<HTMLButtonElement>,\r\n) {\r\n\treturn (\r\n\t\t<HoverUtility>\r\n\t\t\t{({ isHovered, ...props }) => (\r\n\t\t\t\t<Flex className={styles.checkboxContainer} {...props}>\r\n\t\t\t\t\t<RadixCheckbox.Root\r\n\t\t\t\t\t\tclassName={classNames(\r\n\t\t\t\t\t\t\tstyles.checkbox,\r\n\t\t\t\t\t\t\t!isHovered && !checked && styles.checkboxHidden,\r\n\t\t\t\t\t\t\tclassName,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\tchecked={checked}\r\n\t\t\t\t\t\tonCheckedChange={(checked: CheckboxValue) => {\r\n\t\t\t\t\t\t\tif (onCheckedChange) {\r\n\t\t\t\t\t\t\t\tonCheckedChange(checked)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<RadixCheckbox.Indicator className={styles.checkboxIndicator}>\r\n\t\t\t\t\t\t\t{checked === \"indeterminate\" ? <DividerHorizontalIcon width=\"13px\" /> : <CheckIcon />}\r\n\t\t\t\t\t\t</RadixCheckbox.Indicator>\r\n\t\t\t\t\t</RadixCheckbox.Root>\r\n\t\t\t\t\t{label && (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName={classNames(styles.checkboxLabel, labelClassName, styles.noTextHighlight)}\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\tif (onCheckedChange) {\r\n\t\t\t\t\t\t\t\t\tonCheckedChange(!checked)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{label}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Flex>\r\n\t\t\t)}\r\n\t\t</HoverUtility>\r\n\t)\r\n})\r\n\r\nexport const Checkbox: FC<CheckboxProps> = memo(_Checkbox)\r\n// To fix Storybook source code showing the component as [object Object]\r\nCheckbox.displayName = \"Checkbox\"\r\n","import React, { FC, memo, useEffect, useState } from \"react\"\r\nimport { CheckboxValue, SelectAllCheckboxProps } from \"./typings\"\r\nimport { Checkbox } from \"./Checkbox\"\r\n\r\nexport const SelectAllCheckbox: FC<SelectAllCheckboxProps> = memo(function SelectAllCheckbox({\r\n\tclassName,\r\n\tlabelClassName,\r\n\tlabel,\r\n\tonCheckedChange,\r\n\tchildren,\r\n\t...rest\r\n}: SelectAllCheckboxProps) {\r\n\tconst [isChecked, setIsChecked] = useState<CheckboxValue>(\r\n\t\tReact.Children.toArray(children).every((child) => React.isValidElement(child) && child.props.checked)\r\n\t\t\t? true\r\n\t\t\t: React.Children.toArray(children).some((child) => React.isValidElement(child) && child.props.checked)\r\n\t\t\t? \"indeterminate\"\r\n\t\t\t: false,\r\n\t)\r\n\tconst [isChildChecked, setIsChildChecked] = useState<CheckboxValue[]>(\r\n\t\tReact.Children.map(children, (child) => child.props.checked),\r\n\t)\r\n\tconst handleOnCheckedChange = (checked: CheckboxValue) => {\r\n\t\tconst isAllSelected = isChecked === \"indeterminate\" || !checked\r\n\r\n\t\tif (isChecked === \"indeterminate\") {\r\n\t\t\tchecked = false\r\n\t\t}\r\n\r\n\t\tsetIsChildChecked(isChildChecked.map((_child) => !isAllSelected))\r\n\r\n\t\tif (onCheckedChange) {\r\n\t\t\tonCheckedChange(checked)\r\n\t\t}\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tconst numSelected = isChildChecked.filter((child) => child).length\r\n\t\tif (numSelected === 0) {\r\n\t\t\tsetIsChecked(false)\r\n\t\t} else if (numSelected === children!.length) {\r\n\t\t\tsetIsChecked(true)\r\n\t\t} else {\r\n\t\t\tsetIsChecked(\"indeterminate\")\r\n\t\t}\r\n\t}, [children, isChildChecked])\r\n\r\n\t// TODO: More performant solution would be as follows:\r\n\t// 1. Create a context that wraps the checkboxes\r\n\t// 2. In the checkboxes, consume that context: const { onChildCheckboxChange } = useSelectAllCheckbox()\r\n\t// 3. Call it using onChildCheckboxChange?.()\r\n\tconst childrenWithProps = React.Children.map(children, (child, i) =>\r\n\t\tReact.cloneElement(child, {\r\n\t\t\t...child.props,\r\n\t\t\tchecked: isChildChecked[i],\r\n\t\t\tonCheckedChange: (checked: CheckboxValue) => {\r\n\t\t\t\tconst _isChildChecked = [...isChildChecked]\r\n\t\t\t\t_isChildChecked[i] = checked\r\n\t\t\t\tsetIsChildChecked(_isChildChecked)\r\n\t\t\t\tif (child.props.onCheckedChange) {\r\n\t\t\t\t\tchild.props.onCheckedChange(checked)\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t}),\r\n\t)\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Checkbox\r\n\t\t\t\tclassName={className}\r\n\t\t\t\tlabelClassName={labelClassName}\r\n\t\t\t\tlabel={label}\r\n\t\t\t\tchecked={isChecked}\r\n\t\t\t\tonCheckedChange={handleOnCheckedChange}\r\n\t\t\t\t{...rest}\r\n\t\t\t/>\r\n\t\t\t{childrenWithProps}\r\n\t\t</>\r\n\t)\r\n})\r\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\r\n\r\nimport React, { FC, forwardRef, useCallback, useEffect, useMemo, useState } from \"react\"\r\nimport {\r\n\tBody,\r\n\tCell,\r\n\tHeader,\r\n\tHeaderCell,\r\n\tHeaderRow,\r\n\tRow,\r\n\tTable as ReactLibraryTable,\r\n\t// @ts-ignore\r\n} from \"@table-library/react-table-library/table.js\"\r\n// @ts-ignore\r\nimport { useTheme } from \"@table-library/react-table-library/theme.js\"\r\n// @ts-ignore\r\nimport { HeaderCellSort, useSort } from \"@table-library/react-table-library/sort.js\"\r\nimport {\r\n\tCellSelect,\r\n\tHeaderCellSelect,\r\n\tSelectClickTypes,\r\n\tSelectTypes,\r\n\tuseRowSelect,\r\n\t// @ts-ignore\r\n} from \"@table-library/react-table-library/select.js\"\r\n// @ts-ignore\r\nimport { usePagination } from \"@table-library/react-table-library/pagination.js\"\r\n// @ts-ignore\r\nimport { Action } from \"@table-library/react-table-library/common.js\"\r\nimport type { TableNode } from \"@table-library/react-table-library/types/table.d.ts\"\r\nimport { Button, IconButton, Input, Select } from \"../\"\r\nimport styles from \"./Table.module.sass\"\r\nimport {\r\n\tArrowDownIcon,\r\n\tArrowUpIcon,\r\n\tCaretSortIcon,\r\n\tChevronLeftIcon,\r\n\tChevronRightIcon,\r\n\tCross2Icon,\r\n\tDoubleArrowLeftIcon,\r\n\tDoubleArrowRightIcon,\r\n\tMagnifyingGlassIcon,\r\n\tMixerHorizontalIcon,\r\n\tPencil1Icon,\r\n\tTrashIcon,\r\n} from \"@radix-ui/react-icons\"\r\nimport { isMobile } from \"react-device-detect\"\r\nimport { FilterValue, IdLabel, TableCell, TableColumn, TableProps } from \"./typings\"\r\nimport { Checkbox, CheckboxValue, SelectAllCheckbox } from \"../Checkbox\"\r\nimport { MultiPagePopover } from \"../MultiPagePopover\"\r\nimport classNames from \"classnames\"\r\nimport { Text } from \"../Text\"\r\nimport { Flex, TableRow } from \"@radix-ui/themes\"\r\n\r\nconst _Table = forwardRef(function Table(props: TableProps, ref: React.Ref<HTMLTableElement>) {\r\n\tconst {\r\n\t\tcolumns,\r\n\t\tdata,\r\n\t\tcolor = \"light\",\r\n\t\ttitle = \"\",\r\n\t\tdescription = \"\",\r\n\t\trowsPerPage = [10, 20, 30, 40, 50],\r\n\t\tshowSearchBar,\r\n\t\tsearchBarPlaceholder,\r\n\t\tshowSelect,\r\n\t\tshowFilterButton,\r\n\t\tshowContainer,\r\n\t\tshowRowsPerPage,\r\n\t\tshowPageNumber,\r\n\t\tshowPageNavigation,\r\n\t\tshowTopBar = true,\r\n\t\tshowBottomBar = true,\r\n\t\tshowTopButtons,\r\n\t\ttopButtons,\r\n\t\temptyMessage = \"There is no data\",\r\n\t\tchildren,\r\n\t\tclassName,\r\n\t\tcolumnClassName,\r\n\t\trowClassName,\r\n\t\tcellClassName,\r\n\t} = props\r\n\t// Search bar input\r\n\tconst [search, setSearch] = useState<string>(\"\")\r\n\t// Selected rows\r\n\tconst [selected, setSelected] = useState<string[]>([])\r\n\r\n\t// Ensures correct format of data[row].columns AKA: columns declared in columns are all in data[row].columns\r\n\tconst rowsColumnsHaveAllColumns = data.every(\r\n\t\t(row) =>\r\n\t\t\tObject.keys(row.columns).length === columns.length &&\r\n\t\t\tObject.values(columns).every((column) => Object.keys(row.columns).includes(column.id.toString())),\r\n\t)\r\n\r\n\tif (!rowsColumnsHaveAllColumns) {\r\n\t\tthrow new Error(\"Columns in rows do not match ones declared in columns variable.\")\r\n\t}\r\n\r\n\t// Variable that maps the columns prop from [ { id: x, ... }, { id: y, ... }, ... ] to { x: [], y: [], ... }\r\n\t// This variable is the default mapping of the columnFilterValues state. The keys are columns, while the array\r\n\t// stores the values to filter by for that column. The ordering or context doesn't matter, the filter function just\r\n\t// filters for any cells containing any of the strings in the array for that particular column\r\n\tconst defaultColumnFilterValues = useMemo(\r\n\t\t() =>\r\n\t\t\tcolumns\r\n\t\t\t\t.filter((column) => column.filter)\r\n\t\t\t\t.map((column) => ({ [column.id]: [] }))\r\n\t\t\t\t.reduce((arr, column) => Object.assign(arr, column), {}) as { [x: string]: string[] },\r\n\t\t[columns],\r\n\t)\r\n\t// Selected column filter values. Note that every column with a filter prop has a key in this state,\r\n\t// but columns selected for filtering are ones that have a non-empty array\r\n\tconst [columnFilterValues, setColumnFilterValues] = useState(defaultColumnFilterValues)\r\n\t// Selected number of rows per pae\r\n\tconst [numRowsPerPage, setNumRowsPerPage] = useState<number>(rowsPerPage[0] ?? 10)\r\n\t// Value & ItemContent array of options for the rows per page Select component (because this is format required by\r\n\t// the Select component\r\n\tconst rowsPerPageOptions = useMemo(\r\n\t\t() =>\r\n\t\t\trowsPerPage.map((numRows) => ({\r\n\t\t\t\tvalue: numRows.toString(),\r\n\t\t\t\titemContent: numRows.toString(),\r\n\t\t\t})),\r\n\t\t[rowsPerPage],\r\n\t)\r\n\t// Checks if any of the rows have an onClick option (If they do, then all rows will have a cursor pointer)\r\n\tconst rowsHaveOnClick = data.some((row) => row.onClick)\r\n\t// Function to filter for values in the search bar input\r\n\tconst searchFilter = useCallback(\r\n\t\t(cell: TableCell) => {\r\n\t\t\tconst cellVal = cell.searchValue?.toString() || cell.value?.toString() || \"\"\r\n\t\t\treturn cellVal.toLowerCase().includes(search.toLowerCase())\r\n\t\t},\r\n\t\t[search],\r\n\t)\r\n\t// Function to sort cells based on the sortValue if provided, else the value\r\n\tconst sortFilter = useCallback((a: TableCell, b: TableCell) => {\r\n\t\tconst aVal = a.sortValue?.toString() || a.value?.toString() || \"\"\r\n\t\tconst bVal = b.sortValue?.toString() || b.value?.toString() || \"\"\r\n\t\treturn aVal.toLowerCase().localeCompare(bVal.toLowerCase(), undefined, { numeric: true })\r\n\t}, [])\r\n\t// Function to filter values based on the selected column filters\r\n\tconst columnFilter = useCallback(\r\n\t\t(cell: TableCell, column: TableColumn) => {\r\n\t\t\tconst cellVal = cell.filterValue?.toString() || cell.value?.toString() || \"\"\r\n\t\t\treturn columnFilterValues[column.id]?.some(\r\n\t\t\t\t(filter) => cellVal.toString().toLowerCase() === filter.toString().toLowerCase(),\r\n\t\t\t)\r\n\t\t},\r\n\t\t[columnFilterValues],\r\n\t)\r\n\t// Get columns data in the format required by React Table Library\r\n\tconst columnsData = useMemo(\r\n\t\t() =>\r\n\t\t\tcolumns.map((column) => ({\r\n\t\t\t\t...column,\r\n\t\t\t\tsort: column.sort ? { sortKey: column.id.toString().toUpperCase() } : false,\r\n\t\t\t})),\r\n\t\t[columns],\r\n\t)\r\n\t// Check if any column filter values are selected (by checking if the array of a column is not empty)\r\n\tconst isColumnFilterValueSelected = columns.some(\r\n\t\t(column) => column.filter && column.id in columnFilterValues && columnFilterValues[column.id]?.length !== 0,\r\n\t)\r\n\t// Get rows data in format required by React Table Library\r\n\tconst rows = useMemo(\r\n\t\t() =>\r\n\t\t\tdata\r\n\t\t\t\t// Filter by search\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(row) =>\r\n\t\t\t\t\t\t!search || columns.some((column) => column.search && searchFilter(row.columns[column.id]!)),\r\n\t\t\t\t)\r\n\t\t\t\t// Filter by column values\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(row) =>\r\n\t\t\t\t\t\t// If no column filter is selected, then return true AKA: show all rows\r\n\t\t\t\t\t\t!isColumnFilterValueSelected ||\r\n\t\t\t\t\t\t// Check if any of the table values match the selected column filters. First return true if that\r\n\t\t\t\t\t\t// column is not selected for filtering (has a filter prop). Second, return true if that column\r\n\t\t\t\t\t\t// has any values in it selected for filtering, lastly, return if row has that filter value\r\n\t\t\t\t\t\tcolumns.every((column) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t!column.filter ||\r\n\t\t\t\t\t\t\t\tcolumnFilterValues[column.id]?.length === 0 ||\r\n\t\t\t\t\t\t\t\tcolumnFilter(row.columns[column.id]!, column)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t)\r\n\t\t\t\t// Moving key:value pairs from row.columns into row and removing row.columns (this is the format required by React Table Library)\r\n\t\t\t\t// Ex: { id: 1, columns: { x : { ... } ...} } => { id: 1, x: { ... }, ... }\r\n\t\t\t\t.map((row) => {\r\n\t\t\t\t\tconst destructedRow = { ...row.columns, ...row }\r\n\t\t\t\t\tconst { columns: _, ...newRow } = destructedRow\r\n\t\t\t\t\treturn newRow\r\n\t\t\t\t}),\r\n\t\t[columnFilter, columnFilterValues, columns, data, isColumnFilterValueSelected, search, searchFilter],\r\n\t)\r\n\t// Variable that holds the total number of pages (Note this can change based on filter values or rows per page)\r\n\tconst [totalPages, setTotalPages] = useState(Math.ceil(rows.length / numRowsPerPage))\r\n\t// Get the available filter options for each column. If this is not passed in by the user (in column.filterValues),\r\n\t// then they will be automatically generated by getting all values for the column in a sorted set\r\n\tconst getFilterValues = useCallback(\r\n\t\t(column: TableColumn) => {\r\n\t\t\tif (column.filterValues) {\r\n\t\t\t\treturn column.filterValues\r\n\t\t\t}\r\n\t\t\tconst uniqueFilterValues = new Set(\r\n\t\t\t\tdata.map(\r\n\t\t\t\t\t(row) =>\r\n\t\t\t\t\t\trow.columns[column.id]!.filterValue?.toString() ||\r\n\t\t\t\t\t\trow.columns[column.id]!.value?.toString() ||\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t),\r\n\t\t\t)\r\n\t\t\treturn [...uniqueFilterValues].sort().map((rowVal) => ({\r\n\t\t\t\tvalue: rowVal,\r\n\t\t\t\tlabel: rowVal,\r\n\t\t\t}))\r\n\t\t},\r\n\t\t[data],\r\n\t)\r\n\t// Get the grid template for the columns in the table. If the user does not pass in any custom width for\r\n\t// a column, then it will be set to auto. This also accounts for the select column if that is activated\r\n\tconst gridTemplateColumns = useMemo(\r\n\t\t() =>\r\n\t\t\t(showSelect ? \"auto \" : \"\") +\r\n\t\t\tcolumnsData.reduce(\r\n\t\t\t\t(accum, column) =>\r\n\t\t\t\t\taccum +\r\n\t\t\t\t\t`${column.width ? column.width : column.maxWidth ? `minmax(auto, ${column.maxWidth})` : \"auto\"} `,\r\n\t\t\t\t\"\",\r\n\t\t\t),\r\n\t\t[columnsData, showSelect],\r\n\t)\r\n\t// Callback function to update search value when search bar input is changed\r\n\tconst handleSearch = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n\t\tsetSearch(e.target.value)\r\n\t}, [])\r\n\t// Get table data in format required by React Table Library\r\n\tconst tableData = { nodes: rows }\r\n\t// Setup row select for React Table Library\r\n\tconst tableSelect = useRowSelect(\r\n\t\ttableData,\r\n\t\t{\r\n\t\t\tonChange: (_action: Action, state: { ids: string[] }) => {\r\n\t\t\t\tsetSelected(state.ids)\r\n\t\t\t},\r\n\t\t},\r\n\t\t{\r\n\t\t\trowSelect: SelectTypes.MultiSelect,\r\n\t\t\tbuttonSelect: SelectTypes.MultiSelect,\r\n\t\t\tclickType: SelectClickTypes.ButtonClick,\r\n\t\t\tisCarryForward: false,\r\n\t\t},\r\n\t)\r\n\t// Setup pagination for React Table Library\r\n\tconst pagination = usePagination(\r\n\t\ttableData,\r\n\t\t{\r\n\t\t\tstate: {\r\n\t\t\t\tpage: 0,\r\n\t\t\t\tsize: rowsPerPage[0],\r\n\t\t\t},\r\n\t\t},\r\n\t\t{\r\n\t\t\tisServer: false,\r\n\t\t},\r\n\t)\r\n\t// Setup sorting for React Table Library\r\n\tconst sort = useSort(\r\n\t\ttableData,\r\n\t\t{ onChange: () => null },\r\n\t\t{\r\n\t\t\tsortIcon: {\r\n\t\t\t\tmargin: \"10px\",\r\n\t\t\t\tsize: \"15px\",\r\n\t\t\t\ticonDefault: <CaretSortIcon width=\"20px\" />,\r\n\t\t\t\ticonUp: <ArrowUpIcon />,\r\n\t\t\t\ticonDown: <ArrowDownIcon />,\r\n\t\t\t},\r\n\t\t\tsortFns: Object.assign(\r\n\t\t\t\t{},\r\n\t\t\t\t...columnsData.map((column) => ({\r\n\t\t\t\t\t[column.id.toString().toUpperCase()]: (array: { [key: IdLabel]: TableCell }[]) =>\r\n\t\t\t\t\t\tarray.sort((a, b) => sortFilter(a[column.id]!, b[column.id]!)),\r\n\t\t\t\t})),\r\n\t\t\t),\r\n\t\t},\r\n\t)\r\n\tconst columnFilterPopoverContent = useMemo(\r\n\t\t() => ({\r\n\t\t\toptions: columns\r\n\t\t\t\t.filter((column) => column.filter)\r\n\t\t\t\t.map((column) => ({\r\n\t\t\t\t\tlabel: column.label,\r\n\t\t\t\t\tvalue: column.id.toString(),\r\n\t\t\t\t\tpage: {\r\n\t\t\t\t\t\tcontent: (\r\n\t\t\t\t\t\t\t<SelectAllCheckbox\r\n\t\t\t\t\t\t\t\tkey={`select-all-checkbox-${column.id}`}\r\n\t\t\t\t\t\t\t\tlabel=\"Select all\"\r\n\t\t\t\t\t\t\t\tonCheckedChange={(checked) => {\r\n\t\t\t\t\t\t\t\t\tconst _columnFilterValues = JSON.parse(JSON.stringify(columnFilterValues))\r\n\t\t\t\t\t\t\t\t\t// There could be indeterminate state, so must check true specifically\r\n\t\t\t\t\t\t\t\t\tif (checked === true) {\r\n\t\t\t\t\t\t\t\t\t\t_columnFilterValues[column.id] = getFilterValues(column).map(\r\n\t\t\t\t\t\t\t\t\t\t\t(filterValue) => filterValue.value,\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t_columnFilterValues[column.id] = []\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tsetColumnFilterValues(_columnFilterValues)\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{(getFilterValues(column) as FilterValue[]).map((filterValue, i) => (\r\n\t\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\t\tkey={`checkbox-filter-${column.id}-${i}`}\r\n\t\t\t\t\t\t\t\t\t\tlabel={filterValue.label}\r\n\t\t\t\t\t\t\t\t\t\tchecked={columnFilterValues[column.id]?.includes(\r\n\t\t\t\t\t\t\t\t\t\t\tfilterValue.value?.toString() || \"\",\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\tonCheckedChange={(checked: CheckboxValue) => {\r\n\t\t\t\t\t\t\t\t\t\t\tsetColumnFilterValues((prevColumnFilterValues) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tconst _columnFilterValues = { ...prevColumnFilterValues }\r\n\t\t\t\t\t\t\t\t\t\t\t\tconst values = _columnFilterValues[column.id] || []\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (checked) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t_columnFilterValues[column.id] = [\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...values,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilterValue.value?.toString() || \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t_columnFilterValues[column.id] = values.filter(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(fValue) => fValue !== (filterValue.value ?? \"\").toString(),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn _columnFilterValues\r\n\t\t\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</SelectAllCheckbox>\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t},\r\n\t\t\t\t})),\r\n\t\t}),\r\n\t\t[columnFilterValues, columns, getFilterValues],\r\n\t)\r\n\r\n\t// Create table header cell components for React Table Library (there are two different headers, one normal, and\r\n\t// one specifically for a header cell that is sortable)\r\n\tconst columnCells = columnsData.map((column) => {\r\n\t\tconst Component = column.sort ? HeaderCellSort : HeaderCell\r\n\t\treturn (\r\n\t\t\t<Component\r\n\t\t\t\tkey={column.id}\r\n\t\t\t\tclassName={classNames(styles.tableHeaderCell, columnClassName, column.className)}\r\n\t\t\t\tsortKey={column.sort ? column.id.toString().toUpperCase() : \"\"}\r\n\t\t\t>\r\n\t\t\t\t{column.label}\r\n\t\t\t</Component>\r\n\t\t)\r\n\t})\r\n\tconst SelectedModeButton = isMobile ? IconButton : Button\r\n\tconst layout = useMemo(() => ({ custom: true }), [])\r\n\t// React Table Library default method of applying different styles to the table. These styles specifically could not\r\n\t// be applied in the SASS file or through style prop so must use the themes feature instead\r\n\tconst theme = useTheme({\r\n\t\tTable: `\r\n\t\t\t --data-table-library_grid-template-columns: ${gridTemplateColumns};\r\n\t\t`,\r\n\t\tRow: `\r\n\t\t\t&:hover {\r\n\t\t\t\tcursor: ${rowsHaveOnClick ? \"pointer\" : \"inherit\"};\r\n\t\t\t}\r\n\t\t\t&.row-select-selected {\r\n\t\t\t\tbackground-color: var(--gray-a4);\r\n\t\t\t}\r\n\t\t\t&:not(:last-of-type) .td {\r\n \t\t\tborder-bottom: 1px solid var(--gray-a4);\r\n\t\t\t}\t\r\n\t\t`,\r\n\t\tBaseRow: `\r\n\t\t\tbackground-color: inherit;\r\n\t\t`,\r\n\t})\r\n\t// Updates the total pages based on if the rows per page has changed, or if rows.length has changed (which is\r\n\t// affected by search and filtering)\r\n\tuseEffect(() => {\r\n\t\tif (showPageNavigation) {\r\n\t\t\tconst numTotalPages = Math.ceil(rows.length / numRowsPerPage)\r\n\t\t\tsetTotalPages(numTotalPages)\r\n\t\t\tif (pagination.state.page < 0) {\r\n\t\t\t\tpagination.fns.onSetPage(0)\r\n\t\t\t}\r\n\t\t\tif (pagination.state.page > numTotalPages - 1) {\r\n\t\t\t\tpagination.fns.onSetPage(numTotalPages - 1)\r\n\t\t\t}\r\n\t\t}\r\n\t}, [rowsPerPage, rows.length, numRowsPerPage, pagination, showPageNavigation])\r\n\treturn (\r\n\t\t<div className={classNames({ [styles.tableContainer!]: showContainer })}>\r\n\t\t\t{(!!title || !!description) && (\r\n\t\t\t\t<div className={styles.headerContainer}>\r\n\t\t\t\t\t{!!title && (\r\n\t\t\t\t\t\t<Text weight=\"bold\" size=\"5\">\r\n\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{!!description && <Text as=\"div\">{description}</Text>}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t{showTopBar && (\r\n\t\t\t\t<Flex direction=\"column\">\r\n\t\t\t\t\t<Flex gap=\"2\">\r\n\t\t\t\t\t\t{showSearchBar && (\r\n\t\t\t\t\t\t\t<Flex direction=\"column\">\r\n\t\t\t\t\t\t\t\t<div className={styles.searchContainer}>\r\n\t\t\t\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\t\t\t\tvalue={search}\r\n\t\t\t\t\t\t\t\t\t\tonChange={handleSearch}\r\n\t\t\t\t\t\t\t\t\t\tleftSlot={<MagnifyingGlassIcon />}\r\n\t\t\t\t\t\t\t\t\t\tplaceholder={searchBarPlaceholder || \"Filter tasks...\"}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFilterButton && (\r\n\t\t\t\t\t\t\t<MultiPagePopover\r\n\t\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\t\tpage={columnFilterPopoverContent}\r\n\t\t\t\t\t\t\t\ttrigger={\r\n\t\t\t\t\t\t\t\t\t<IconButton variant=\"surface\" aria-label=\"Filter columns\">\r\n\t\t\t\t\t\t\t\t\t\t<MixerHorizontalIcon />\r\n\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{(_Close) => \"\"}\r\n\t\t\t\t\t\t\t</MultiPagePopover>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFilterButton && isColumnFilterValueSelected && (\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant=\"surface\"\r\n\t\t\t\t\t\t\t\tcolor=\"crimson\"\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetColumnFilterValues(defaultColumnFilterValues)\r\n\t\t\t\t\t\t\t\t\t// Bug where if you set multiple filters with no results, then clearing filter will\r\n\t\t\t\t\t\t\t\t\t// not take you to first page, so must do it manually\r\n\t\t\t\t\t\t\t\t\tpagination.fns.onSetPage(0)\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Cross2Icon />\r\n\t\t\t\t\t\t\t\tClear filters\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t\t<Flex justify=\"between\" className={styles.tableTopContainer}>\r\n\t\t\t\t\t\t{showTopButtons && topButtons && <Flex gap=\"2\">{...topButtons}</Flex>}\r\n\t\t\t\t\t\t{showSelect && selected.length !== 0 && (\r\n\t\t\t\t\t\t\t<Flex gap=\"2\">\r\n\t\t\t\t\t\t\t\t<SelectedModeButton variant=\"soft\" aria-label=\"Edit rows\">\r\n\t\t\t\t\t\t\t\t\t<Pencil1Icon />\r\n\t\t\t\t\t\t\t\t\t{!isMobile && \"Edit\"}\r\n\t\t\t\t\t\t\t\t</SelectedModeButton>\r\n\t\t\t\t\t\t\t\t<SelectedModeButton color=\"red\" aria-label=\"Delete rows\">\r\n\t\t\t\t\t\t\t\t\t<TrashIcon />\r\n\t\t\t\t\t\t\t\t\t{!isMobile && \"Delete\"}\r\n\t\t\t\t\t\t\t\t</SelectedModeButton>\r\n\t\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</Flex>\r\n\t\t\t)}\r\n\t\t\t{children}\r\n\t\t\t<ReactLibraryTable\r\n\t\t\t\tclassName={classNames(styles.table, className)}\r\n\t\t\t\tdata={tableData}\r\n\t\t\t\ttheme={theme}\r\n\t\t\t\tsort={sort}\r\n\t\t\t\tpagination={showPageNavigation && pagination}\r\n\t\t\t\tselect={tableSelect}\r\n\t\t\t\tlayout={layout}\r\n\t\t\t\tref={ref}\r\n\t\t\t>\r\n\t\t\t\t{(tableList: TableNode[]) => (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Header>\r\n\t\t\t\t\t\t\t<HeaderRow>\r\n\t\t\t\t\t\t\t\t{showSelect && <HeaderCellSelect className={styles.tableHeaderCell} />}\r\n\t\t\t\t\t\t\t\t{...columnCells}\r\n\t\t\t\t\t\t\t</HeaderRow>\r\n\t\t\t\t\t\t</Header>\r\n\t\t\t\t\t\t<Body>\r\n\t\t\t\t\t\t\t{tableList.length === 0 && (\r\n\t\t\t\t\t\t\t\t<TableRow className={styles.noDataTextContainer}>\r\n\t\t\t\t\t\t\t\t\t<Cell>{emptyMessage}</Cell>\r\n\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{tableList.map((row) => (\r\n\t\t\t\t\t\t\t\t<Row\r\n\t\t\t\t\t\t\t\t\tkey={row.id}\r\n\t\t\t\t\t\t\t\t\titem={row}\r\n\t\t\t\t\t\t\t\t\tclassName={classNames(styles.tableRow, rowClassName, row.className)}\r\n\t\t\t\t\t\t\t\t\tonClick={row.onClick}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{showSelect && <CellSelect key={row.id} item={row} />}\r\n\t\t\t\t\t\t\t\t\t{columns.map((column, i) => (\r\n\t\t\t\t\t\t\t\t\t\t<Cell\r\n\t\t\t\t\t\t\t\t\t\t\tkey={i}\r\n\t\t\t\t\t\t\t\t\t\t\tclassName={classNames(\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyles.tableCell,\r\n\t\t\t\t\t\t\t\t\t\t\t\tcellClassName,\r\n\t\t\t\t\t\t\t\t\t\t\t\trow[column.id].className,\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={row[column.id].onClick}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Text>{row[column.id].label}</Text>\r\n\t\t\t\t\t\t\t\t\t\t</Cell>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</Body>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</ReactLibraryTable>\r\n\t\t\t{showBottomBar && (\r\n\t\t\t\t<Flex className={styles.tableBottomContainer} wrap=\"wrap\" direction={isMobile ? \"column\" : \"row\"}>\r\n\t\t\t\t\t{showRowsPerPage && (\r\n\t\t\t\t\t\t<Flex className={styles.rowsPerPageContainer}>\r\n\t\t\t\t\t\t\t<div className={styles.rowsPerPageText}>Rows per page:</div>\r\n\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\titems={rowsPerPageOptions}\r\n\t\t\t\t\t\t\t\tdefaultValue={rowsPerPageOptions[0]!.value.toString()}\r\n\t\t\t\t\t\t\t\tonValueChange={(v: string) => {\r\n\t\t\t\t\t\t\t\t\tpagination.fns.onSetSize(Number(v))\r\n\t\t\t\t\t\t\t\t\tsetNumRowsPerPage(Number(v))\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tplaceholder={rowsPerPageOptions[0]!.itemContent}\r\n\t\t\t\t\t\t\t\taria-label=\"Select number of rows per page\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showPageNumber && (\r\n\t\t\t\t\t\t<Flex justify=\"center\">\r\n\t\t\t\t\t\t\t{totalPages > 0 && `Page ${pagination.state.page + 1} of ${totalPages}`}\r\n\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showPageNavigation && (\r\n\t\t\t\t\t\t<Flex className={styles.rowsPerPageContainer} gap=\"2\" justify=\"end\">\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tvariant=\"surface\"\r\n\t\t\t\t\t\t\t\tonClick={() => pagination.fns.onSetPage(0)}\r\n\t\t\t\t\t\t\t\tdisabled={pagination.state.page === 0 || totalPages === 0}\r\n\t\t\t\t\t\t\t\taria-label=\"Go to first page\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<DoubleArrowLeftIcon />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tvariant=\"surface\"\r\n\t\t\t\t\t\t\t\tdisabled={pagination.state.page === 0 || totalPages === 0}\r\n\t\t\t\t\t\t\t\tonClick={() => pagination.fns.onSetPage(pagination.state.page - 1)}\r\n\t\t\t\t\t\t\t\taria-label=\"Previous page\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<ChevronLeftIcon />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tvariant=\"surface\"\r\n\t\t\t\t\t\t\t\tdisabled={pagination.state.page + 1 === totalPages || totalPages === 0}\r\n\t\t\t\t\t\t\t\tonClick={() => pagination.fns.onSetPage(pagination.state.page + 1)}\r\n\t\t\t\t\t\t\t\taria-label=\"Next page\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<ChevronRightIcon />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tvariant=\"surface\"\r\n\t\t\t\t\t\t\t\tdisabled={pagination.state.page + 1 === totalPages || totalPages === 0}\r\n\t\t\t\t\t\t\t\tonClick={() => pagination.fns.onSetPage(totalPages - 1)}\r\n\t\t\t\t\t\t\t\taria-label=\"Go to last page\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<DoubleArrowRightIcon />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Flex>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t)\r\n})\r\n\r\nexport const Table: FC<TableProps> = React.memo(_Table)\r\n","import React, { ChangeEvent, FC, forwardRef, useCallback, useState } from \"react\"\r\nimport { ConfirmEditInputProps } from \"./typings\"\r\nimport { Flex, HoverUtility, IconButton, Input } from \"../index\"\r\nimport classNames from \"classnames\"\r\nimport { CheckIcon, Cross1Icon, Pencil1Icon } from \"@radix-ui/react-icons\"\r\nimport styles from \"./ConfirmEditInput.module.sass\"\r\n\r\nconst _ConfirmEditInput = forwardRef(function ConfirmEditInput(\r\n\t{\r\n\t\tvalue,\r\n\t\tonChange,\r\n\t\tonEditActivate,\r\n\t\tonEditConfirm,\r\n\t\tonEditCancel,\r\n\t\ttextClassName,\r\n\t\tinputClassName,\r\n\t\ticonClassName,\r\n\t\tbuttonVariant,\r\n\t\tvariant,\r\n\t\tseverity,\r\n\t\tsize,\r\n\t\tmode = \"buttons\",\r\n\t\t...rest\r\n\t}: ConfirmEditInputProps,\r\n\tref: React.Ref<HTMLInputElement>,\r\n) {\r\n\tconst [text, setText] = useState<string | undefined>(value?.toString())\r\n\tconst [input, setInput] = useState<string | undefined>(value?.toString())\r\n\tconst [isEditMode, setIsEditMode] = useState<boolean>(false)\r\n\r\n\tconst isConfirmDisabled = !input || text === input\r\n\r\n\tconst onInputChange = useCallback(\r\n\t\t(e: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\tsetInput(e.target.value?.toString())\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(e)\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onChange],\r\n\t)\r\n\r\n\tconst onPencilClick = useCallback(() => {\r\n\t\tsetIsEditMode(true)\r\n\t\tif (onEditActivate) {\r\n\t\t\tonEditActivate(text)\r\n\t\t}\r\n\t}, [onEditActivate, text])\r\n\r\n\tconst onCheckClick = useCallback(() => {\r\n\t\tsetText(input)\r\n\t\tsetIsEditMode(false)\r\n\t\tif (onEditConfirm) {\r\n\t\t\tonEditConfirm(input)\r\n\t\t}\r\n\t}, [onEditConfirm, input])\r\n\r\n\tconst onCancelClick = useCallback(() => {\r\n\t\tsetIsEditMode(false)\r\n\t\tconst prevInput = input\r\n\t\tsetInput(text)\r\n\t\tif (onEditCancel) {\r\n\t\t\tonEditCancel(prevInput)\r\n\t\t}\r\n\t}, [text, input, onEditCancel])\r\n\r\n\tconst handleKeyDown = useCallback(\r\n\t\t(e: React.KeyboardEvent<HTMLInputElement>) => {\r\n\t\t\tif (mode !== \"keys\") {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tswitch (e.key) {\r\n\t\t\t\tcase \"Enter\":\r\n\t\t\t\t\tif (!isConfirmDisabled) onCheckClick()\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase \"Escape\":\r\n\t\t\t\t\tonCancelClick()\r\n\t\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onCheckClick, onCancelClick, isConfirmDisabled, mode],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<HoverUtility>\r\n\t\t\t{({ isHovered, ...props }) => (\r\n\t\t\t\t<Flex className={styles.editableTextContainer} gap=\"3\" {...props}>\r\n\t\t\t\t\t<Input\r\n\t\t\t\t\t\tclassName={classNames(\r\n\t\t\t\t\t\t\tisEditMode ? styles.editableTextInput : styles.editableTextText,\r\n\t\t\t\t\t\t\tisEditMode ? inputClassName : textClassName,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\tonClick={() => !isEditMode && mode === \"keys\" && onPencilClick()}\r\n\t\t\t\t\t\tvalue={isEditMode ? input : text}\r\n\t\t\t\t\t\tonChange={onInputChange}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tautoFocus\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\t\treadOnly={!isEditMode}\r\n\t\t\t\t\t\tstyle={\r\n\t\t\t\t\t\t\tisEditMode\r\n\t\t\t\t\t\t\t\t? undefined\r\n\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\tcursor: mode === \"keys\" ? \"text\" : \"unset\",\r\n\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{mode === \"buttons\" &&\r\n\t\t\t\t\t\t(isEditMode ? (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tclassName={classNames(iconClassName, styles.icon, !isHovered && styles.iconHidden)}\r\n\t\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\t\tvariant={buttonVariant}\r\n\t\t\t\t\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\t\t\t\t\tdisabled={isConfirmDisabled}\r\n\t\t\t\t\t\t\t\t\tonClick={onCheckClick}\r\n\t\t\t\t\t\t\t\t\taria-label=\"Confirm edit\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<CheckIcon />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tclassName={classNames(iconClassName, styles.icon, !isHovered && styles.iconHidden)}\r\n\t\t\t\t\t\t\t\t\tcolor=\"red\"\r\n\t\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\t\tvariant={buttonVariant}\r\n\t\t\t\t\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\t\t\t\t\tonClick={onCancelClick}\r\n\t\t\t\t\t\t\t\t\taria-label=\"Cancel edit\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Cross1Icon />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tclassName={classNames(\r\n\t\t\t\t\t\t\t\t\ticonClassName,\r\n\t\t\t\t\t\t\t\t\tstyles.editIcon,\r\n\t\t\t\t\t\t\t\t\tstyles.icon,\r\n\t\t\t\t\t\t\t\t\t!isHovered && styles.iconHidden,\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\tvariant={buttonVariant}\r\n\t\t\t\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\t\t\t\tonClick={onPencilClick}\r\n\t\t\t\t\t\t\t\taria-label=\"Edit text\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Pencil1Icon />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t</Flex>\r\n\t\t\t)}\r\n\t\t</HoverUtility>\r\n\t)\r\n})\r\n\r\nexport const ConfirmEditInput: FC<ConfirmEditInputProps> = React.memo(_ConfirmEditInput)\r\n"],"names":["classNames","value","Badge","RadixBadge","radius","zeroMinWidth","zeroMinHeight","RadixFlex","styles","Text","_Button","Button","fluid","RadixButton","RadixIconButton","ButtonGroup","merged","Flex","DialogContent","Dialog","IconButton","RadixDialog","AlertDialog","AlertDialogContent","RadixAlertDialog","AlertDialogProvider","RadixDropdownMenu","BaseMenuSeparator","BaseItemGroup","rest","index","BaseSelectGroup","BaseMultiSelectGroup","BaseSubMenuGroup","DropdownMenuItemGroup","DropdownMenuSelectGroup","DropdownMenuMultiSelectGroup","DropdownMenuSubMenuGroup","DropdownMenu","Select","RadixSelect","Checkbox","open","Switch","checked","RadixSwitch","Sidebar","overlay","resizable","TRANSITION_DURATION","SlideOut","resizeHandle","Input","RadixTextField","IconColorUtility","Popover","RadixPopover","MultiPagePopover","TextArea","RadixTextArea","ToggleGroup","Root","Item","ToolBarRoot","Toast","toast","RadixToastProvider","ToastViewport","RadixToolTip","noWrap","RadixText","Separator","RadixSeparator","$3vqmr$useCallback","$3bkAK$createContext","$3bkAK$useMemo","$3bkAK$createElement","useContext","$3bkAK$useContext","$lwiWj$useRef","$lwiWj$useEffect","$lwiWj$useMemo","$bnPw9$useCallbackRef","$bnPw9$useCallback","$bnPw9$useState","$bnPw9$useRef","$bnPw9$useEffect","$8LvvK$useRef","$8LvvK$useMemo","$dxlwH$useLayoutEffect","$9gyGR$useState","$9gyGR$useLayoutEffect","initialState","$iqq3r$useReducer","$iqq3r$Children","$iqq3r$useComposedRefs","$iqq3r$cloneElement","$iqq3r$useState","$iqq3r$useRef","$iqq3r$useEffect","$iqq3r$useLayoutEffect","$iqq3r$flushSync","$iqq3r$useCallback","$9IrjX$forwardRef","$9IrjX$Children","$9IrjX$isValidElement","$9IrjX$createElement","$9IrjX$babelruntimehelpersesmextends","$9IrjX$cloneElement","$9IrjX$composeRefs","$9IrjX$Fragment","$4q5Fq$forwardRef","$4q5Fq$Slot","$4q5Fq$useEffect","$4q5Fq$createElement","$4q5Fq$babelruntimehelpersesmextends","$1bpvS$createContextScope","$1bpvS$forwardRef","$1bpvS$useState","$1bpvS$useComposedRefs","$1bpvS$useRef","$1bpvS$useControllableState","$1bpvS$useEffect","$1bpvS$createElement","$1bpvS$Primitive","$1bpvS$babelruntimehelpersesmextends","$1bpvS$composeEventHandlers","$1bpvS$Presence","$1bpvS$usePrevious","$1bpvS$useSize","RadixCheckbox.Root","RadixCheckbox.Indicator","SelectAllCheckbox","Table","_a","ReactLibraryTable","ConfirmEditInput"],"mappings":"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","x_google_ignoreList":[0,54,55,56,57,58,59,60,61,62,63,64,65,66]}
|
|
1
|
+
{"version":3,"file":"blocks.js","sources":["../node_modules/classnames/index.js","../src/utils.ts","../src/Badge/Badge.tsx","../src/Flex/Flex.tsx","../src/Breadcrumb/context.ts","../src/Breadcrumb/Breadcrumb.tsx","../src/Buttons/constants.ts","../src/constants.ts","../src/ButtonGroup/context.ts","../src/Spinner/Spinner.tsx","../src/Buttons/Button.tsx","../src/Buttons/IconButton.tsx","../src/ButtonGroup/ButtonGroup.tsx","../src/ButtonGroup/ButtonList.tsx","../src/Dialogs/Dialog/DialogContent.tsx","../src/Dialogs/Dialog/Dialog.tsx","../src/Dialogs/Dialog/utils.ts","../src/Dialogs/AlertDialog/AlertDialogContent.tsx","../src/Dialogs/AlertDialog/AlertDialog.tsx","../src/Dialogs/AlertDialog/context.tsx","../src/Dialogs/AlertDialog/hooks.ts","../src/DropdownMenu/DropdownMenu.tsx","../src/BaseMenuGroups/BaseMenuComponents.tsx","../src/BaseMenuGroups/utils.ts","../src/BaseMenuGroups/BaseItemGroup/BaseItemGroup.tsx","../src/BaseMenuGroups/BaseSelectGroup/BaseSelectGroup.tsx","../src/BaseMenuGroups/BaseMultiSelectGroup/BaseMultiSelectGroup.tsx","../src/BaseMenuGroups/BaseSubMenuGroup/BaseSubMenuGroup.tsx","../src/DropdownMenu/DropdownMenuGroups.tsx","../src/DropdownItemMenu/DropdownItemMenu.tsx","../src/DropdownSelect/DropdownSelect.tsx","../src/DropdownMultiSelect/DropdownMultiSelect.tsx","../src/HoverUtility/HoverUtility.tsx","../src/Select/Select.tsx","../src/MultiSelect/MultiSelectItem.tsx","../src/MultiSelect/MultiSelect.tsx","../src/Switch/Switch.tsx","../src/Sidebar/Sidebar.tsx","../src/SlideOut/SlideOut.tsx","../src/Input/Input.tsx","../src/IconColorUtility/IconColorUtility.tsx","../src/Popover/Popover.tsx","../src/LeftAndRightPanels/LeftAndRightPanels.tsx","../src/MultiPagePopover/MultiPagePopover.tsx","../src/TextArea/TextArea.tsx","../src/ToggleGroup/ToggleGroup.tsx","../src/Toolbar/Toolbar.tsx","../src/Toast/Toast.tsx","../src/Toast/ToastContext.ts","../src/Toast/ToastProvider.tsx","../src/Tooltip/Tooltip.tsx","../src/Text/Text.tsx","../src/Theme/DefaultTheme.tsx","../src/Separator/Separator.tsx","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/primitive/dist/index.mjs","../node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../node_modules/@radix-ui/react-use-previous/dist/index.mjs","../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../node_modules/@radix-ui/react-use-size/dist/index.mjs","../node_modules/@radix-ui/react-presence/dist/index.mjs","../node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-checkbox/dist/index.mjs","../src/Checkbox/Checkbox.tsx","../src/Checkbox/SelectAllCheckbox.tsx","../src/Table/Table.tsx","../src/ConfirmEditInput/ConfirmEditInput.tsx"],"sourcesContent":["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { Responsive, ThemeOptions, useThemeContext } from \"@radix-ui/themes\"\r\nimport {\r\n\tuseEffect,\r\n\tuseLayoutEffect,\r\n\tuseMemo,\r\n\tuseState,\r\n\tuseCallback,\r\n\tReactNode,\r\n\tReactElement,\r\n\tChildren,\r\n\tisValidElement,\r\n\tmemo,\r\n\tSetStateAction,\r\n\tDispatch,\r\n} from \"react\"\r\nimport { useMediaQuery } from \"react-responsive\"\r\nimport { Severity } from \"./typings\"\r\n\r\n// useResponsiveMapping is a helper function used to map the keys of a Radix Responsive type that can be understood\r\n// by a Radix component or primitive. The point of this is to leverage our own custom prop names and values while still\r\n// using Radix's built in Responsiveness functionality.\r\n/**\r\n * Returns an object with mapped key values or a single mapped value\r\n * @param value an object or string\r\n * @param mapping a Record mapping the object values of param value\r\n */\r\nexport function useResponsiveMapping<T extends string, K>(\r\n\tvalue: Responsive<T> | undefined,\r\n\tmapping: Record<T, K>,\r\n): Responsive<K> | undefined {\r\n\treturn useMemo(() => {\r\n\t\tif (value === undefined) return undefined\r\n\t\tif (typeof value === \"object\") {\r\n\t\t\tif (!(\"initial\" in value)) {\r\n\t\t\t\t// Responsive objects require an 'initial' property to be set that acts as a default\r\n\t\t\t\tthrow new Error(\"Expected initial property to be set in Responsive object\")\r\n\t\t\t}\r\n\t\t\treturn Object.fromEntries(Object.entries(value).map(([breakpoint, value]) => [breakpoint, mapping[value]]))\r\n\t\t} else {\r\n\t\t\treturn mapping[value]\r\n\t\t}\r\n\t}, [mapping, value])\r\n}\r\n\r\nconst nonThemeSeverityMapping = {\r\n\tsuccess: \"green\",\r\n\tdanger: \"red\",\r\n\twarning: \"amber\",\r\n\tinfo: \"gray\",\r\n} as const\r\n\r\nexport type AccentColor = ThemeOptions[\"accentColor\"]\r\n\r\n/** Performs theme-sensitive mapping of a severity to radix color */\r\nexport const useSeverityColor = (severity?: Severity): AccentColor | undefined => {\r\n\tconst theme = useThemeContext()\r\n\tif (!severity) return undefined\r\n\tif (severity === \"primary\") return theme.accentColor\r\n\r\n\treturn nonThemeSeverityMapping[severity]\r\n}\r\n\r\nexport interface ViewportSize {\r\n\tsize: \"initial\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\r\n\tprevSize: \"initial\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\r\n\txs: boolean\r\n\tsm: boolean\r\n\tmd: boolean\r\n\tlg: boolean\r\n\txl: boolean\r\n}\r\n\r\n/** Return value needs to be deconstructed since the object returned is not memoized */\r\nexport const useViewportSize = (): ViewportSize => {\r\n\tconst [prevSize, setPrevSize] = useState<ViewportSize[\"size\"]>(\"initial\")\r\n\tconst [size, setSize] = useState<ViewportSize[\"size\"]>(\"initial\")\r\n\t// These specific Breakpoints are from Radix, see https://www.radix-ui.com/themes/docs/theme/breakpoints\r\n\tconst xs = useMediaQuery({ minWidth: \"520px\" })\r\n\tconst sm = useMediaQuery({ minWidth: \"768px\" })\r\n\tconst md = useMediaQuery({ minWidth: \"1024px\" })\r\n\tconst lg = useMediaQuery({ minWidth: \"1280px\" })\r\n\tconst xl = useMediaQuery({ minWidth: \"1640px\" })\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\tsetSize((prev) => {\r\n\t\t\tsetPrevSize(prev)\r\n\t\t\treturn xl ? \"xl\" : lg ? \"lg\" : md ? \"md\" : sm ? \"sm\" : xs ? \"xs\" : \"initial\"\r\n\t\t})\r\n\t}, [lg, md, sm, xl, xs])\r\n\r\n\treturn { size, prevSize, xs, sm, md, lg, xl }\r\n}\r\n\r\n/** custom hook for executing a callback based on a set of keys representing a keyboard shortcut\r\n * @param shortcutKeys an array of strings representing keyboard keys\r\n * @param disable a boolean value indicating whether the keyboard shortcut is disabled or not\r\n * @param callback a callback to be run whenever all keys in shortcutKeys are being pressed\r\n * @return allKeysPressed a boolean value indicating if all keys in shortcutKeys are currently being pressed\r\n * */\r\nexport const useKeyboardShortcut = (shortcutKeys: string[], disable: boolean, callback: () => void) => {\r\n\tconst [keys, setKeys] = useState<string[]>([])\r\n\t// state used to track if last action was a key down rather than a key up\r\n\tconst [lastWasKeyDown, setLastWasKeyDown] = useState<boolean>(true)\r\n\r\n\t// keydown event handler passed to document, add the pressed key to the keys array\r\n\tconst handleKeyDown = useCallback(\r\n\t\t(event: KeyboardEvent) => {\r\n\t\t\tconst { repeat, key } = event\r\n\t\t\tsetLastWasKeyDown(true)\r\n\t\t\tif (repeat || keys.includes(key)) return\r\n\t\t\tsetKeys((prevKeys) => [...prevKeys, key])\r\n\t\t},\r\n\t\t[keys],\r\n\t)\r\n\r\n\t// keyup event handler passed to document, remove the pressed key if it exists in keys array\r\n\tconst handleKeyUp = useCallback(\r\n\t\t(event: KeyboardEvent) => {\r\n\t\t\tconst { key } = event\r\n\t\t\tsetLastWasKeyDown(false)\r\n\t\t\tif (!keys.includes(key)) return\r\n\t\t\tsetKeys((prevKeys) => {\r\n\t\t\t\tconst tempKeys = [...prevKeys]\r\n\t\t\t\ttempKeys.splice(prevKeys.indexOf(key), 1)\r\n\t\t\t\treturn tempKeys\r\n\t\t\t})\r\n\t\t},\r\n\t\t[keys],\r\n\t)\r\n\r\n\t// Setting up key down document handler\r\n\tuseEffect(() => {\r\n\t\tif (!disable) document.addEventListener(\"keydown\", handleKeyDown, true)\r\n\t\treturn () => {\r\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown, true)\r\n\t\t}\r\n\t}, [disable, handleKeyDown])\r\n\r\n\t// Setting up key up document handler\r\n\tuseEffect(() => {\r\n\t\tif (!disable) document.addEventListener(\"keyup\", handleKeyUp, true)\r\n\t\treturn () => {\r\n\t\t\tdocument.removeEventListener(\"keyup\", handleKeyUp, true)\r\n\t\t}\r\n\t}, [disable, handleKeyUp])\r\n\r\n\t// variable determining if shortcut action should be triggered or not\r\n\tconst triggerAction = useMemo(() => {\r\n\t\treturn (\r\n\t\t\t!disable &&\r\n\t\t\tlastWasKeyDown &&\r\n\t\t\tkeys.length === shortcutKeys.length &&\r\n\t\t\tkeys.every((key) => shortcutKeys.includes(key))\r\n\t\t)\r\n\t}, [disable, lastWasKeyDown, keys, shortcutKeys])\r\n\r\n\t// If all keys are currently being pressed, execute the callback\r\n\tuseEffect(() => {\r\n\t\tif (triggerAction) callback()\r\n\t}, [triggerAction, callback])\r\n\r\n\treturn triggerAction\r\n}\r\n\r\n/** utility for removing number or string types after applying React.Children. React.Children method tacks on types\r\n * number and string which causes type errors when calling clone element on the result of React.Children. therefore this\r\n * function acts as a type stripper to remove any children of type string or number (which if using this function, are most\r\n * likely unwanted children). */\r\nexport const childrenToArray = (children: ReactNode) => {\r\n\tconst tempChildrenToArray: ReactElement[] = []\r\n\tfor (const child of Children.toArray(children)) {\r\n\t\tif (isValidElement(child)) tempChildrenToArray.push(child)\r\n\t}\r\n\treturn tempChildrenToArray\r\n}\r\n\r\n/** utility used for stopping Event propagation.\r\n * @return stopPropagation a callback that calls stopPropagation on a general event */\r\nexport const useStopEventPropagation = () => {\r\n\treturn useCallback((event: Event) => {\r\n\t\tevent.stopPropagation()\r\n\t}, [])\r\n}\r\n\r\n/** custom hook use for providing filter functionality based on a text input field\r\n * @param filterFunction make sure this is wrapped in a useCallback\r\n * @param values items that should be filtered on (of type T) */\r\nexport function useTextFilter<T>(\r\n\tvalues: T[],\r\n\tfilterFunction: (value: T, filterValue: string) => boolean,\r\n): [T[], string, Dispatch<SetStateAction<string>>] {\r\n\tconst [filteredOptions, setFilteredOptions] = useState<T[]>([])\r\n\tconst [filterValue, setFilterValue] = useState<string>(\"\")\r\n\r\n\tuseEffect(() => {\r\n\t\tsetFilteredOptions(values.filter((value) => filterFunction(value, filterValue)))\r\n\t}, [filterFunction, filterValue, values])\r\n\r\n\treturn [filteredOptions, filterValue, setFilterValue]\r\n}\r\n\r\nexport const genericMemo: <T>(component: T) => T = memo\r\n\r\nexport type AllOrNone<T> = T | { [K in keyof T]?: never }\r\n","import { Badge as RadixBadge } from \"@radix-ui/themes\"\nimport { FC, forwardRef, memo, Ref } from \"react\"\nimport { BadgeProps } from \"./typings.ts\"\nimport classNames from \"classnames\"\nimport { useSeverityColor } from \"../utils.ts\"\n\nconst _Badge = forwardRef(function Badge(\n\t{ className, severity = \"primary\", color, children, ...rest }: BadgeProps,\n\tref: Ref<HTMLSpanElement>,\n) {\n\tconst severityColor = useSeverityColor(severity)\n\n\treturn (\n\t\t<RadixBadge\n\t\t\tclassName={classNames(\"overmap-badge\", className)}\n\t\t\tref={ref}\n\t\t\tcolor={color ? color : severityColor}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{children}\n\t\t</RadixBadge>\n\t)\n})\n\n/** The Badge Component is a user interface element that provides visual feedback, typically displaying a small amount\n * of information. It is commonly used to indicate counts, statuses, or labels in a concise and visually appealing\n * manner. This Badge components wraps the Badge component from Radix-ui found here https://www.radix-ui.com/themes/docs/components/badge */\nexport const Badge: FC<BadgeProps> = memo(_Badge)\n","import { ComponentProps, forwardRef, memo } from \"react\"\r\nimport { Flex as RadixFlex } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"./Flex.module.sass\"\r\n\r\nexport interface FlexProps extends ComponentProps<typeof RadixFlex> {\r\n\t/** if true the border radius of the Flex container will match the one specified by the Theme\r\n\t * @default false\r\n\t * */\r\n\tradius?: boolean\r\n\t/** if true sets the min-width of the Flex container to 0\r\n\t * @default false\r\n\t * */\r\n\tzeroMinWidth?: boolean\r\n\t/** if true sets the min-height of the Flex container to 0\r\n\t * @default false\r\n\t * */\r\n\tzeroMinHeight?: boolean\r\n}\r\nexport const Flex = memo(\r\n\tforwardRef<HTMLDivElement, FlexProps>(\r\n\t\t({ className, radius = false, children, zeroMinWidth = false, zeroMinHeight = false, ...rest }, ref) => {\r\n\t\t\treturn (\r\n\t\t\t\t<RadixFlex\r\n\t\t\t\t\tclassName={classNames(className, {\r\n\t\t\t\t\t\t[styles.radius!]: radius,\r\n\t\t\t\t\t\t[styles.zeroMinWidth!]: zeroMinWidth,\r\n\t\t\t\t\t\t[styles.zeroMinHeight!]: zeroMinHeight,\r\n\t\t\t\t\t})}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\t{...rest}\r\n\t\t\t\t>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</RadixFlex>\r\n\t\t\t)\r\n\t\t},\r\n\t),\r\n)\r\n","import type { Severity } from \"../typings.ts\"\r\nimport { ComponentProps, createContext, useContext } from \"react\"\r\nimport { Link } from \"@radix-ui/themes\"\r\n\r\ninterface IBreadcrumbContext {\r\n\tseverity: Severity\r\n\tsize: ComponentProps<typeof Link>[\"size\"]\r\n}\r\n\r\nexport const BreadcrumbContext = createContext({} as IBreadcrumbContext)\r\n\r\nexport const useBreadcrumbContext = () => useContext(BreadcrumbContext)\r\n","import { Link, Box, Text } from \"@radix-ui/themes\"\r\nimport { Flex, FlexProps } from \"../Flex\"\r\nimport { cloneElement, ComponentProps, forwardRef, HTMLProps, memo, ReactNode } from \"react\"\r\nimport classNames from \"classnames\"\r\nimport { childrenToArray } from \"../utils.ts\"\r\nimport { Severity } from \"../typings.ts\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\nimport { BreadcrumbContext, useBreadcrumbContext } from \"./context.ts\"\r\nexport interface BreadcrumbItemProps extends Omit<HTMLProps<HTMLAnchorElement>, \"size\" | \"ref\" | \"color\"> {}\r\nexport const Item = memo(\r\n\tforwardRef<HTMLAnchorElement, BreadcrumbItemProps>(({ className, children, ...rest }, ref) => {\r\n\t\tconst { size, severity } = useBreadcrumbContext()\r\n\t\tconst severityColor = useSeverityColor(severity)\r\n\t\treturn (\r\n\t\t\t<Box className={classNames(\"overmap-breadcrumb-item\", className)} height=\"max-content\" width=\"max-content\">\r\n\t\t\t\t<Link ref={ref} size={size} color={severityColor} {...rest}>\r\n\t\t\t\t\t<Flex height=\"100%\" width=\"100%\" align=\"center\" gap=\"1\">\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</Link>\r\n\t\t\t</Box>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\nexport interface BreadcrumbGroupProps\r\n\textends Omit<HTMLProps<HTMLDivElement>, \"height\" | \"width\" | \"wrap\" | \"ref\" | \"size\"> {\r\n\tchildren: ReactNode\r\n\t/** The separator used in between Breadcrumb items*/\r\n\tseparator: ReactNode\r\n\t/** The severity of the items in the Breadcrumb\r\n\t * @default \"info\"\r\n\t * */\r\n\tseverity?: Severity\r\n\t/** The text size of the items in the Breadcrumb */\r\n\tsize?: ComponentProps<typeof Link>[\"size\"]\r\n\t/** The gap between Breadcrumb items\r\n\t * @default \"2\"\r\n\t * */\r\n\tgap?: FlexProps[\"gap\"]\r\n}\r\n\r\nexport const Group = memo(\r\n\tforwardRef<HTMLDivElement, BreadcrumbGroupProps>(\r\n\t\t({ className, children, separator, severity = \"info\", size, gap = \"2\", ...rest }, ref) => {\r\n\t\t\tconst severityColor = useSeverityColor(severity)\r\n\r\n\t\t\tconst childrenAsArray = childrenToArray(children)\r\n\t\t\treturn (\r\n\t\t\t\t<BreadcrumbContext.Provider value={{ size, severity }}>\r\n\t\t\t\t\t<Flex\r\n\t\t\t\t\t\tclassName={classNames(\"overmap-breadcrumb-group\", className)}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\tgap={gap}\r\n\t\t\t\t\t\trole=\"breadcrumb\"\r\n\t\t\t\t\t\theight=\"max-content\"\r\n\t\t\t\t\t\twidth=\"max-content\"\r\n\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{childrenAsArray.map((child, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t{cloneElement(child, { key: index })}\r\n\t\t\t\t\t\t\t\t\t{childrenAsArray.length - 1 !== index && (\r\n\t\t\t\t\t\t\t\t\t\t<Text color={severityColor}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Flex height=\"100%\" width=\"100%\" align=\"center\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t{separator}\r\n\t\t\t\t\t\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</BreadcrumbContext.Provider>\r\n\t\t\t)\r\n\t\t},\r\n\t),\r\n)\r\n\r\nexport const Breadcrumb = {\r\n\tGroup,\r\n\tItem,\r\n}\r\n","import { ButtonHoverEffect } from \"./typings.ts\"\r\nimport styles from \"./Button.module.sass\"\r\nimport { KeyboardEvent } from \"react\"\r\n\r\nexport const hoverEffectClassNameMapping: Record<ButtonHoverEffect, string | undefined> = {\r\n\tspin90Clockwise: styles.hoverSpin90Clockwise,\r\n\tspin180Clockwise: styles.hoverSpin180Clockwise,\r\n\tspin360Clockwise: styles.hoverSpin360Clockwise,\r\n}\r\n\r\nconst clickOnEnterOrSpace = (e: KeyboardEvent<HTMLDivElement>) => {\r\n\tif (e.key === \"Enter\" || e.key === \" \") {\r\n\t\te.currentTarget.click()\r\n\t}\r\n}\r\n\r\n/** Passing this to a `div` will make it behave like a `button`. However, it will **NOT** support the disabled state. */\r\nexport const divButtonProps = {\r\n\trole: \"button\",\r\n\ttabIndex: 0,\r\n\tonKeyDown: clickOnEnterOrSpace,\r\n}\r\n","import { Size } from \"./typings.ts\"\r\n\r\n// Mappings\r\nexport const SizeMapping: Record<Size, \"1\" | \"2\" | \"3\"> = {\r\n\tsmall: \"1\",\r\n\tmedium: \"2\",\r\n\tlarge: \"3\",\r\n}\r\n","import { ButtonProps } from \"../Buttons/typings\"\nimport { createContext, useContext } from \"react\"\n\nexport type ButtonContextType = Pick<ButtonProps, \"variant\" | \"size\" | \"severity\" | \"hoverEffects\" | \"fluid\">\n\nexport const ButtonGroupContext = createContext<ButtonContextType>({})\n\nexport const useButtonGroupContext = () => useContext(ButtonGroupContext)\n","import styles from \"./Spinner.module.sass\"\r\nimport { memo } from \"react\"\r\n\r\nexport const Spinner = memo(() => {\r\n\treturn <div className={styles.spinner} />\r\n})\r\n\r\nSpinner.displayName = \"Spinner\"\r\n","import React, { FC, forwardRef } from \"react\"\nimport { ButtonProps } from \"./typings.ts\"\nimport styles from \"./Button.module.sass\"\nimport classNames from \"classnames\"\nimport { Button as RadixButton } from \"@radix-ui/themes\"\nimport { hoverEffectClassNameMapping } from \"./constants.ts\"\nimport { useKeyboardShortcut, useResponsiveMapping, useSeverityColor } from \"../utils.ts\"\nimport { SizeMapping } from \"../constants.ts\"\nimport { useButtonGroupContext } from \"../ButtonGroup/context.ts\"\nimport { Spinner } from \"../Spinner/Spinner.tsx\"\n\nconst _Button = forwardRef(function Button(props: ButtonProps, ref: React.Ref<HTMLButtonElement>) {\n\tconst buttonGroupContext = useButtonGroupContext()\n\tconst {\n\t\tclassName,\n\t\ttype = \"button\",\n\t\tfluid = buttonGroupContext.fluid ?? false,\n\t\tsize = buttonGroupContext.size ?? \"medium\",\n\t\tseverity = buttonGroupContext.severity ?? \"primary\",\n\t\thoverEffects = buttonGroupContext.hoverEffects ?? [],\n\t\tvariant = buttonGroupContext.variant,\n\t\tshortcut = {\n\t\t\tkeys: [],\n\t\t\taction: () => {},\n\t\t\tdisabled: false,\n\t\t},\n\t\tloading,\n\t\tchildren,\n\t\tdisabled,\n\t\t...rest\n\t} = props\n\tconst color = useSeverityColor(severity)\n\tconst hoverEffectClasses = hoverEffects.map((hoverEffect) => {\n\t\treturn hoverEffectClassNameMapping[hoverEffect]\n\t})\n\tuseKeyboardShortcut(shortcut.keys, shortcut.disabled || shortcut.keys.length === 0, shortcut.action)\n\n\treturn (\n\t\t<RadixButton\n\t\t\tref={ref}\n\t\t\ttype={type}\n\t\t\tclassName={classNames(className, hoverEffectClasses, {\n\t\t\t\t[styles.fluid!]: fluid,\n\t\t\t})}\n\t\t\tcolor={color}\n\t\t\tsize={useResponsiveMapping(size, SizeMapping)}\n\t\t\tvariant={variant}\n\t\t\tdisabled={loading || disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{loading ? <Spinner /> : children}\n\t\t</RadixButton>\n\t)\n})\n\n// using FC so storybook correctly displays the component props\nconst Button: FC<ButtonProps> = React.memo(_Button)\n\nexport default Button\n","import React, { FC, forwardRef } from \"react\"\r\nimport { ButtonProps } from \"./typings.ts\"\r\nimport classNames from \"classnames\"\r\nimport { IconButton as RadixIconButton } from \"@radix-ui/themes\"\r\nimport { hoverEffectClassNameMapping } from \"./constants.ts\"\r\nimport { useKeyboardShortcut, useResponsiveMapping, useSeverityColor } from \"../utils.ts\"\r\nimport { SizeMapping } from \"../constants.ts\"\r\nimport { useButtonGroupContext } from \"../ButtonGroup/context.ts\"\r\n\r\nimport styles from \"./Button.module.sass\"\r\n\r\ninterface IconButtonProps extends ButtonProps {\r\n\t\"aria-label\": string\r\n}\r\n\r\nconst _Button = forwardRef(function Button(props: IconButtonProps, ref: React.Ref<HTMLButtonElement>) {\r\n\tconst buttonGroupContext = useButtonGroupContext()\r\n\tconst {\r\n\t\tclassName,\r\n\t\tchildren,\r\n\t\ttype = \"button\",\r\n\t\tfluid = buttonGroupContext.fluid ?? false,\r\n\t\tsize = buttonGroupContext.size ?? \"medium\",\r\n\t\tseverity = buttonGroupContext.severity ?? \"primary\",\r\n\t\thoverEffects = buttonGroupContext.hoverEffects ?? [],\r\n\t\tvariant = buttonGroupContext.variant,\r\n\t\tshortcut = {\r\n\t\t\tkeys: [],\r\n\t\t\taction: () => {},\r\n\t\t\tdisabled: false,\r\n\t\t},\r\n\t\t...rest\r\n\t} = props\r\n\tconst color = useSeverityColor(severity)\r\n\tconst hoverEffectClasses =\r\n\t\thoverEffects?.map((hoverEffect) => {\r\n\t\t\treturn hoverEffectClassNameMapping[hoverEffect]\r\n\t\t}) || []\r\n\r\n\tuseKeyboardShortcut(shortcut.keys, shortcut.disabled || shortcut.keys.length === 0, shortcut.action)\r\n\r\n\treturn (\r\n\t\t<RadixIconButton\r\n\t\t\tclassName={classNames(className, hoverEffectClasses, {\r\n\t\t\t\t[styles.fluid!]: fluid,\r\n\t\t\t})}\r\n\t\t\tref={ref}\r\n\t\t\tcolor={color}\r\n\t\t\tsize={useResponsiveMapping(size, SizeMapping)}\r\n\t\t\tvariant={variant}\r\n\t\t\ttype={type}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</RadixIconButton>\r\n\t)\r\n})\r\n\r\n// using FC so storybook correctly displays the component props\r\n/** The `IconButton` is a `Button` variant specifically designed for single icons. */\r\nconst IconButton: FC<IconButtonProps> = React.memo(_Button)\r\n\r\nexport default IconButton\r\n","import { FC, forwardRef, memo, Ref } from \"react\"\nimport { Flex } from \"@radix-ui/themes\"\nimport classNames from \"classnames\"\nimport { ButtonGroupProps } from \"./typings.ts\"\n\nimport styles from \"./ButtonGroup.module.sass\"\nimport { Size } from \"../typings.ts\"\nimport { useResponsiveMapping } from \"../utils.ts\"\nimport { ButtonGroupContext } from \"./context.ts\"\n\nconst GhostVariantSizeToGapMapping = {\n\trow: { small: \"4\", medium: \"4\", large: \"5\" },\n\tcolumn: { small: \"2\", medium: \"3\", large: \"4\" },\n} as const satisfies Record<\"row\" | \"column\", Record<Size, ButtonGroupProps[\"gap\"]>>\n\nconst _ButtonGroup = forwardRef(function ButtonGroup(\n\t{\n\t\tclassName,\n\t\tmerged = false,\n\t\tchildren,\n\t\tgap,\n\t\tdirection = \"row\",\n\t\tseverity,\n\t\tsize = \"medium\",\n\t\tvariant,\n\t\thoverEffects,\n\t\tfluid,\n\t\t...rest\n\t}: ButtonGroupProps,\n\tref: Ref<HTMLDivElement>,\n) {\n\tconst ghostSize = useResponsiveMapping(size, GhostVariantSizeToGapMapping[direction])\n\t// without a larger gap, ghost buttons overlap\n\tconst mergedAutoGap = variant === \"ghost\" ? ghostSize : \"0\"\n\treturn (\n\t\t<Flex\n\t\t\tclassName={classNames(\"overmap-button-group\", className, {\n\t\t\t\t[styles.merged!]: merged,\n\t\t\t})}\n\t\t\tref={ref}\n\t\t\tgap={merged ? gap ?? mergedAutoGap : gap ?? \"2\"}\n\t\t\tdirection={direction}\n\t\t\tdata-direction={direction}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<ButtonGroupContext.Provider value={{ size, severity, variant, hoverEffects, fluid }}>\n\t\t\t\t{children}\n\t\t\t</ButtonGroupContext.Provider>\n\t\t</Flex>\n\t)\n})\n\n/** The ButtonGroup Component is a user interface element that groups multiple buttons together for improved user\n * interaction and visual clarity. It is commonly used to present related actions or options in a compact and organized\n * manner. The ButtonGroup supports all props of the RadixUI Flex layout component besides MarginProps,\n * further documentation for the Flex layout component can be found here https://www.radix-ui.com/themes/docs/components/flex */\nexport const ButtonGroup: FC<ButtonGroupProps> = memo(_ButtonGroup)\n","import { FC, forwardRef, memo, ReactNode } from \"react\"\r\nimport { ButtonGroup, ButtonGroupProps } from \".\"\r\nimport { ButtonProps } from \"../Buttons/typings\"\r\nimport { useButtonGroupContext } from \"./context\"\r\nimport { Button } from \"../Buttons\"\r\nimport { Size } from \"..\"\r\nimport { useResponsiveMapping } from \"../utils\"\r\nimport { SizeMapping } from \"../constants\"\r\nimport styles from \"./ButtonList.module.sass\"\r\nimport classNames from \"classnames\"\r\nimport { Box, Card, Inset, Responsive } from \"@radix-ui/themes\"\r\n\r\ninterface ButtonListRootProps extends Pick<ButtonGroupProps, \"size\" | \"variant\" | \"children\"> {\r\n\t// not including `large` because large ghost buttons have a non-standard margin\r\n\t/** @default \"medium\" */\r\n\tsize?: Responsive<Exclude<Size, \"large\">>\r\n\t// not including solid as it doesn't look good\r\n\t/** @default outline */\r\n\tvariant?: Exclude<ButtonGroupProps[\"variant\"], \"solid\">\r\n\t/** Content to display before the list but within the card */\r\n\tbefore?: ReactNode\r\n\t/** Content to display after the list but within the card */\r\n\tafter?: ReactNode\r\n\tclassName?: string\r\n}\r\n\r\ninterface ButtonListBorderProps extends Pick<ButtonListRootProps, \"before\" | \"after\" | \"size\" | \"children\"> {\r\n\tborder: boolean\r\n}\r\n\r\nconst ButtonListBorder = memo(\r\n\tforwardRef<HTMLDivElement, ButtonListBorderProps>((props, ref) => {\r\n\t\tconst { children, border, before, after, size } = props\r\n\t\tconst variant = border ? \"surface\" : \"ghost\"\r\n\t\tconst radixSize = useResponsiveMapping(size, SizeMapping)\r\n\r\n\t\tconst inset =\r\n\t\t\tbefore && after ? (\r\n\t\t\t\t<Inset side=\"x\" pt=\"current\" pb=\"current\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</Inset>\r\n\t\t\t) : before ? (\r\n\t\t\t\t<Inset side=\"bottom\" pt=\"current\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</Inset>\r\n\t\t\t) : after ? (\r\n\t\t\t\t<Inset side=\"top\" pb=\"current\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</Inset>\r\n\t\t\t) : (\r\n\t\t\t\t<Inset>{children}</Inset>\r\n\t\t\t)\r\n\r\n\t\tconst ret = (\r\n\t\t\t<Card ref={ref} size={radixSize} variant={variant}>\r\n\t\t\t\t{before}\r\n\t\t\t\t{inset}\r\n\t\t\t\t{after}\r\n\t\t\t</Card>\r\n\t\t)\r\n\r\n\t\t// offset negative margin from the ghost card by adding a container\r\n\t\t// with padding of equal size\r\n\t\tif (variant === \"ghost\") {\r\n\t\t\treturn <Box p=\"3\">{ret}</Box>\r\n\t\t}\r\n\r\n\t\treturn ret\r\n\t}),\r\n)\r\n\r\n/** A specialized version of `ButtonGroup` for vertical list of block-like buttons. */\r\nexport const ButtonListRoot: FC<ButtonListRootProps> = memo(\r\n\tforwardRef<HTMLDivElement, ButtonListRootProps>((props, ref) => {\r\n\t\tconst { children, variant = \"outline\", size, className, ...borderProps } = props\r\n\t\tconst showBorder = variant === \"outline\" || variant === \"surface\"\r\n\r\n\t\t// remove the border from the buttons\r\n\t\t// as the border is handled by the Separator component\r\n\t\tconst buttonVariant = variant === \"outline\" ? \"ghost\" : variant === \"surface\" ? \"soft\" : variant\r\n\r\n\t\treturn (\r\n\t\t\t<ButtonListBorder {...borderProps} border={showBorder} size={size}>\r\n\t\t\t\t<ButtonGroup\r\n\t\t\t\t\tsize={size}\r\n\t\t\t\t\tseverity=\"info\"\r\n\t\t\t\t\tvariant={buttonVariant}\r\n\t\t\t\t\tclassName={classNames(className, styles.separators)}\r\n\t\t\t\t\tmerged\r\n\t\t\t\t\tgap=\"0\"\r\n\t\t\t\t\tdirection=\"column\"\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</ButtonGroup>\r\n\t\t\t</ButtonListBorder>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\ninterface ButtonListItemProps extends Omit<ButtonProps, \"size\" | \"variant\" | \"severity\" | \"fluid\"> {}\r\n\r\nconst ButtonListItem = memo(\r\n\tforwardRef<HTMLButtonElement, ButtonListItemProps>((props, ref) => {\r\n\t\tconst { variant } = useButtonGroupContext()\r\n\r\n\t\t// rely on the card container to provide the radius - which is never full\r\n\t\tconst ret = <Button ref={ref} {...props} radius=\"large\" variant={variant} />\r\n\r\n\t\t// remove the negative margin from the ghost button\r\n\t\tif (variant === \"ghost\") {\r\n\t\t\treturn (\r\n\t\t\t\t<Box asChild my=\"1\" mx=\"2\">\r\n\t\t\t\t\t{ret}\r\n\t\t\t\t</Box>\r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\treturn ret\r\n\t}),\r\n)\r\n\r\nexport const ButtonList = {\r\n\tRoot: ButtonListRoot,\r\n\tItem: ButtonListItem,\r\n}\r\n","import { memo } from \"react\"\r\nimport { Dialog, Flex, IconButton } from \"@radix-ui/themes\"\r\nimport { Cross1Icon } from \"@radix-ui/react-icons\"\r\nimport { DialogContentProps } from \"./typings\"\r\n\r\nexport const DialogContent = memo(function DialogContent(props: DialogContentProps) {\r\n\tconst { title, description, content, closeDialog } = props\r\n\treturn (\r\n\t\t<Flex direction=\"column\" gap=\"2\">\r\n\t\t\t<Flex direction=\"column\" gap=\"1\">\r\n\t\t\t\t<Flex justify=\"between\">\r\n\t\t\t\t\t<Dialog.Title mb=\"0\">{title}</Dialog.Title>\r\n\t\t\t\t\t<Dialog.Close>\r\n\t\t\t\t\t\t<IconButton color=\"gray\" variant=\"ghost\" aria-label=\"Close\">\r\n\t\t\t\t\t\t\t<Cross1Icon />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Dialog.Close>\r\n\t\t\t\t</Flex>\r\n\t\t\t\t{description && <Dialog.Description>{description}</Dialog.Description>}\r\n\t\t\t</Flex>\r\n\t\t\t{content(closeDialog)}\r\n\t\t</Flex>\r\n\t)\r\n})\r\n","import { memo, useState, useCallback, forwardRef } from \"react\"\r\nimport { Dialog as RadixDialog } from \"@radix-ui/themes\"\r\nimport { DialogContent } from \"./DialogContent\"\r\nimport { CloseDialogWithOptions, DialogProps } from \"./typings\"\r\n\r\n/**\r\n * Display or collect information in a modal. Unlike the `AlertDialog`, the `Dialog`'s can be nested\r\n * and close when clicking outside of the dialog content.\r\n */\r\nexport const Dialog = memo(\r\n\tforwardRef<HTMLDivElement, DialogProps>((props, ref) => {\r\n\t\tconst {\r\n\t\t\tchildren,\r\n\t\t\tcontent,\r\n\t\t\ttitle,\r\n\t\t\tdescription,\r\n\t\t\tonOpen,\r\n\t\t\tonClose,\r\n\t\t\tdefaultOpen,\r\n\t\t\tonCloseInterrupt,\r\n\t\t\topen: externalOpen,\r\n\t\t\tonOpenChange: externalOpenChange,\r\n\t\t\t...contentProps\r\n\t\t} = props\r\n\t\t// `innerOpen` used to track the open state of the dialog when `externalOpen` is undefined\r\n\t\tconst [innerOpen, setInnerOpen] = useState(defaultOpen ?? false)\r\n\t\tconst open = externalOpen ?? innerOpen\r\n\r\n\t\tif ((!!onCloseInterrupt || !!onOpen) && !!externalOpenChange) {\r\n\t\t\tthrow new Error(\"Neither the `onCloseInterrupt` nor `onOpen` props can be used with `onOpenChange`.\")\r\n\t\t}\r\n\r\n\t\tif (externalOpen !== undefined && externalOpenChange === undefined) {\r\n\t\t\tthrow new Error(\"The `open` prop requires the `onOpenChange` prop.\")\r\n\t\t}\r\n\r\n\t\tif (!children && externalOpen === undefined) {\r\n\t\t\tthrow new Error(\"Either the `children` or `open` prop must be defined.\")\r\n\t\t} else if (children && externalOpen !== undefined) {\r\n\t\t\tthrow new Error(\"The `children` and `open` props cannot be used together.\")\r\n\t\t}\r\n\r\n\t\tconst handleOpenChange = useCallback(\r\n\t\t\t(next: boolean) => {\r\n\t\t\t\tif (externalOpenChange) return externalOpenChange(next)\r\n\r\n\t\t\t\tif (next && onOpen) {\r\n\t\t\t\t\tonOpen()\r\n\t\t\t\t} else if (!next && onCloseInterrupt) {\r\n\t\t\t\t\t// closes the dialog, bypassing the checks in `handleOpenChange`\r\n\t\t\t\t\tconst confirmClose = () => {\r\n\t\t\t\t\t\tsetInnerOpen(false)\r\n\t\t\t\t\t\tif (onClose) onClose()\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// if onCloseInterrupt is passed, bypass the standard close behavior and require\r\n\t\t\t\t\t// the passed `confirmClose` to close the dialog\r\n\t\t\t\t\treturn onCloseInterrupt(confirmClose)\r\n\t\t\t\t} else if (!next && onClose) {\r\n\t\t\t\t\tonClose()\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetInnerOpen(next)\r\n\t\t\t},\r\n\t\t\t[externalOpenChange, onOpen, onClose, onCloseInterrupt],\r\n\t\t)\r\n\r\n\t\tconst closeDialog = useCallback<CloseDialogWithOptions>(\r\n\t\t\t(options) => {\r\n\t\t\t\tif (options?.force) {\r\n\t\t\t\t\t// bypass the checks in the `handleOpenChange` function\r\n\t\t\t\t\treturn setInnerOpen(false)\r\n\t\t\t\t}\r\n\r\n\t\t\t\thandleOpenChange(false)\r\n\t\t\t},\r\n\t\t\t[handleOpenChange],\r\n\t\t)\r\n\r\n\t\treturn (\r\n\t\t\t<RadixDialog.Root open={open} onOpenChange={handleOpenChange}>\r\n\t\t\t\t<RadixDialog.Trigger>{children}</RadixDialog.Trigger>\r\n\t\t\t\t<RadixDialog.Content ref={ref} {...contentProps}>\r\n\t\t\t\t\t<DialogContent\r\n\t\t\t\t\t\tcloseDialog={closeDialog}\r\n\t\t\t\t\t\tcontent={content}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\tdescription={description}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</RadixDialog.Content>\r\n\t\t\t</RadixDialog.Root>\r\n\t\t)\r\n\t}),\r\n)\r\n","import { CloseDialogOptions, CloseDialogWithOptions } from \"./typings.ts\"\r\nimport { useCallback } from \"react\"\r\n\r\n/** This custom hook is used as a utility for wrapping a general callback in callback that accepts a close function for the\r\n * Blocks dialog component. Sometimes a side effect callback needs to be run upon the closure of a Dialog. This provides\r\n * a hook to wrap a callback with the returned close function passed to the Dialog Content. This allows the closure of\r\n * the Dialog and the callback to be run simultaneously. It also saves the developer from attaching callback logic with\r\n * the close functionality of the Dialog. */\r\nexport const useWrapCallbackInDialogClose = (callback: (...arg: never[]) => void, closeOptions: CloseDialogOptions) => {\r\n\treturn useCallback(\r\n\t\t(...arg: never[]) =>\r\n\t\t\t(closeDialog: CloseDialogWithOptions) => {\r\n\t\t\t\tcallback(...arg)\r\n\t\t\t\tcloseDialog(closeOptions)\r\n\t\t\t},\r\n\t\t[callback, closeOptions],\r\n\t)\r\n}\r\n","import { AlertDialog, Flex } from \"@radix-ui/themes\"\r\nimport { AlertDialogStandardContent } from \"./typings\"\r\nimport { Button } from \"../../Buttons\"\r\n\r\n// remove the margin-bottom from the title so that Flex works as expected\r\nexport const Title: typeof AlertDialog.Title = ((props) => (\r\n\t<AlertDialog.Title mb=\"0\" {...props} />\r\n)) as typeof AlertDialog.Title\r\n\r\nexport const AlertDialogContent = (props: AlertDialogStandardContent) => {\r\n\tconst { title, description, actionText = \"Confirm\", cancelText = \"Cancel\", onAction, onCancel, severity } = props\r\n\treturn (\r\n\t\t<Flex direction=\"column\" gap=\"2\">\r\n\t\t\t<Flex direction=\"column\" gap=\"1\">\r\n\t\t\t\t<Title>{title}</Title>\r\n\t\t\t\t<AlertDialog.Description>{description}</AlertDialog.Description>\r\n\t\t\t</Flex>\r\n\r\n\t\t\t<Flex gap=\"3\" mt=\"4\" justify=\"end\">\r\n\t\t\t\t<AlertDialog.Cancel>\r\n\t\t\t\t\t<Button variant=\"soft\" severity=\"info\" onClick={onCancel}>\r\n\t\t\t\t\t\t{cancelText}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</AlertDialog.Cancel>\r\n\t\t\t\t<AlertDialog.Action>\r\n\t\t\t\t\t<Button variant=\"solid\" severity={severity} onClick={onAction}>\r\n\t\t\t\t\t\t{actionText}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</AlertDialog.Action>\r\n\t\t\t</Flex>\r\n\t\t</Flex>\r\n\t)\r\n}\r\n","import { memo, useMemo } from \"react\"\r\nimport { AlertDialog as RadixAlertDialog } from \"@radix-ui/themes\"\r\nimport { AlertDialogContentHelpers, AlertDialogProps } from \"./typings\"\r\nimport { AlertDialogContent, Title } from \"./AlertDialogContent\"\r\n\r\n/**\r\n * The AlertDialog is used to confirm an action or prompt the user for a decision.\r\n * Unlike the Dialog, the AlertDialog is not dismissible by clicking outside of the dialog, nor can it be nested.\r\n *\r\n * To use, place the `AlertDialogProvider` at the root of your app and use the `useAlertDialog` hook to open the dialog.\r\n *\r\n * To set the content of the dialog, use the `content` prop or pass values for the `title`, `description`, and `onAction` props.\r\n */\r\nexport const AlertDialog = memo(function AlertDialog(props: AlertDialogProps) {\r\n\tconst { open, setOpen, children, ...contentProps } = props\r\n\r\n\tconst helpers: AlertDialogContentHelpers = useMemo(() => {\r\n\t\treturn {\r\n\t\t\tclose: () => setOpen(false),\r\n\t\t\tTitle,\r\n\t\t\tDescription: RadixAlertDialog.Description,\r\n\t\t}\r\n\t}, [setOpen])\r\n\r\n\treturn (\r\n\t\t<RadixAlertDialog.Root open={open} onOpenChange={setOpen}>\r\n\t\t\t<RadixAlertDialog.Content>\r\n\t\t\t\t{\"content\" in contentProps ? contentProps.content(helpers) : <AlertDialogContent {...contentProps} />}\r\n\t\t\t</RadixAlertDialog.Content>\r\n\t\t\t{children}\r\n\t\t</RadixAlertDialog.Root>\r\n\t)\r\n})\r\n","import { createContext, memo, useState, useCallback } from \"react\"\r\nimport { AlertDialogContextType, AlertDialogOptions } from \"./typings\"\r\nimport { AlertDialog } from \"./AlertDialog\"\r\n\r\ninterface AlertDialogProviderProps {\r\n\tchildren: React.ReactNode\r\n}\r\n\r\nexport const AlertDialogContent = createContext<AlertDialogContextType>(() => {\r\n\tthrow new Error(\"No AlertDialogProvider found\")\r\n})\r\n\r\nconst initialState: AlertDialogOptions = {\r\n\tcontent: () => null,\r\n}\r\n\r\nexport const AlertDialogProvider = memo(function AlertDialogProvider({ children }: AlertDialogProviderProps) {\r\n\tconst [open, setOpen] = useState(false)\r\n\tconst [state, setState] = useState<AlertDialogOptions>(initialState)\r\n\r\n\tconst openDialog = useCallback<AlertDialogContextType>(\r\n\t\t(options) => {\r\n\t\t\tif (open) throw new Error(\"AlertDialog is already open\")\r\n\r\n\t\t\tsetState(options)\r\n\t\t\tsetOpen(true)\r\n\t\t},\r\n\t\t[open],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<AlertDialog open={open} setOpen={setOpen} {...state}>\r\n\t\t\t<AlertDialogContent.Provider value={openDialog}>{children}</AlertDialogContent.Provider>\r\n\t\t</AlertDialog>\r\n\t)\r\n})\r\n","import { useCallback, useContext } from \"react\"\r\nimport { AlertDialogContent } from \"./context\"\r\n\r\nexport const useAlertDialog = () => {\r\n\treturn useContext(AlertDialogContent)\r\n}\r\n\r\ninterface useDiscardAlertDialogProps {\r\n\tonDiscard: () => void\r\n\tonCancel?: () => void\r\n}\r\n\r\nexport const useDiscardAlertDialog = () => {\r\n\tconst openAlertDialog = useAlertDialog()\r\n\r\n\treturn useCallback(\r\n\t\t(props: useDiscardAlertDialogProps) =>\r\n\t\t\topenAlertDialog({\r\n\t\t\t\ttitle: \"Discard changes?\",\r\n\t\t\t\tdescription: \"You have unsaved changes. Are you sure you want to discard them?\",\r\n\t\t\t\tactionText: \"Discard\",\r\n\t\t\t\tseverity: \"danger\",\r\n\t\t\t\tonAction: props.onDiscard,\r\n\t\t\t\tonCancel: props.onCancel,\r\n\t\t\t}),\r\n\t\t[openAlertDialog],\r\n\t)\r\n}\r\n","import { FC, forwardRef, memo, PropsWithChildren } from \"react\"\r\nimport { DropdownMenu as RadixDropdownMenu } from \"@radix-ui/themes\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\nimport { DropdownMenuItemGroupItemProps } from \"./DropdownMenuGroups.tsx\"\r\nimport { BaseMenuProps } from \"../BaseMenuGroups\"\r\n\r\nexport type DropdownMenuItemProps = DropdownMenuItemGroupItemProps\r\n\r\nexport type DropdownMenuProps = PropsWithChildren & BaseMenuProps\r\n\r\n/** The DropdownMenu component is a user interface element that provides a list of options for the user to choose from.\r\n * It is commonly used in web applications to present a set of related choices in a compact and organized manner.\r\n * This DropdownMenu component is a wrapper around the Radix-UI DropdownMenu component that can be found here https://www.radix-ui.com/themes/docs/components/dropdown-menu */\r\nexport const DropdownMenu: FC<DropdownMenuProps> = memo(\r\n\tforwardRef<HTMLDivElement, DropdownMenuProps>(({ trigger, disabled, children, ...rest }) => {\r\n\t\tconst infoColor = useSeverityColor(\"info\")\r\n\r\n\t\treturn (\r\n\t\t\t<RadixDropdownMenu.Root>\r\n\t\t\t\t<RadixDropdownMenu.Trigger disabled={disabled}>{trigger}</RadixDropdownMenu.Trigger>\r\n\t\t\t\t<RadixDropdownMenu.Content variant=\"soft\" color={infoColor} {...rest}>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</RadixDropdownMenu.Content>\r\n\t\t\t</RadixDropdownMenu.Root>\r\n\t\t)\r\n\t}),\r\n)\r\n","import { FC, forwardRef, memo, PropsWithChildren, ReactNode } from \"react\"\r\nimport { Flex, Input, InputProps } from \"..\"\r\nimport { Box } from \"@radix-ui/themes\"\r\n\r\nimport styles from \"./BaseMenuComponents.module.sass\"\r\n\r\n// TODO: Consider making a named export for this Base Visual/Layout components\r\n// ex. BaseMenu.Item, BaseMenu.Input, BaseMenu.Separator\r\nexport interface BaseMenuItem extends PropsWithChildren {\r\n\trightSlot?: ReactNode\r\n}\r\nexport const BaseMenuItem: FC<BaseMenuItem> = memo(\r\n\tforwardRef<HTMLDivElement, BaseMenuItem>(({ children, rightSlot }, ref) => {\r\n\t\treturn (\r\n\t\t\t<Box className={styles.BaseMenuItem} ref={ref} position=\"relative\" px=\"2\" height=\"6\">\r\n\t\t\t\t<Flex gap=\"6\" height=\"100%\" align=\"center\">\r\n\t\t\t\t\t<Flex grow=\"1\" height=\"100%\" align=\"center\" gap=\"1\">\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t\t<Flex height=\"100%\" width=\"4\" align=\"center\" justify=\"end\">\r\n\t\t\t\t\t\t{rightSlot}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</Flex>\r\n\t\t\t</Box>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\nexport interface BaseMenuInputProps extends Omit<InputProps, \"showInputLength\"> {}\r\nexport const BaseMenuInput: FC<BaseMenuInputProps> = memo(\r\n\tforwardRef<HTMLInputElement, BaseMenuInputProps>((props) => {\r\n\t\treturn (\r\n\t\t\t<Box className={styles.BaseMenuInput} px=\"2\" height=\"6\" width=\"max-content\">\r\n\t\t\t\t<Input {...props} variant=\"ghost\" />\r\n\t\t\t</Box>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\n/** Separator component used for Base Menus */\r\nexport const BaseMenuSeparator: FC = memo(function BaseMenuSeparator() {\r\n\treturn (\r\n\t\t<Box className={styles.BaseMenuSeparator} width=\"100%\" py=\"1\">\r\n\t\t\t<Box height=\"0\" width=\"100%\" />\r\n\t\t</Box>\r\n\t)\r\n})\r\n","import { MenuItemProps } from \"@radix-ui/react-menu\"\r\nimport { ChangeEvent, useCallback } from \"react\"\r\nimport { TextFilterProps } from \"./typings.ts\"\r\n\r\n// These hooks are simply used to endorse the DRY principle. Should not be used elsewhere as they are simply helpers for\r\n// the base menu group components\r\nexport const useCloseOnSelectHandler = (closeOnSelect: boolean) => {\r\n\treturn useCallback(\r\n\t\t(onSelect: MenuItemProps[\"onSelect\"]) => (event: Event) => {\r\n\t\t\tif (!closeOnSelect) {\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t}\r\n\t\t\tif (onSelect) onSelect(event)\r\n\t\t},\r\n\t\t[closeOnSelect],\r\n\t)\r\n}\r\n\r\nexport const useTextFilterChangeHandler = () => {\r\n\treturn useCallback(\r\n\t\t(onTextFilterChange: TextFilterProps[\"onFilterValueChange\"]) => (event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\tif (onTextFilterChange) onTextFilterChange(event.target.value)\r\n\t\t},\r\n\t\t[],\r\n\t)\r\n}\r\n","import { memo, useEffect } from \"react\"\r\nimport { Kbd } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { Flex } from \"../../Flex\"\r\nimport { BaseMenuInput, BaseMenuItem, BaseMenuSeparator } from \"../BaseMenuComponents.tsx\"\r\nimport { BaseItemGroupElementProps, BaseItemGroupProps } from \"./typings.ts\"\r\nimport { useCloseOnSelectHandler, useTextFilterChangeHandler } from \"../utils.ts\"\r\n\r\nimport styles from \"../BaseMenuComponents.module.sass\"\r\n\r\n// TODO: Add numItems prop that determines the number of items displayed before scrolling\r\nexport const BaseItemGroup = memo(function BaseItemGroup({\r\n\titems,\r\n\tcloseOnSelect = true,\r\n\tgroupElement: GroupElement,\r\n\titemElement: ItemElement,\r\n\tfilterValue,\r\n\tonFilterValueChange,\r\n\tplaceholder,\r\n\ticons,\r\n\tseparator,\r\n\t...rest\r\n}: BaseItemGroupProps & BaseItemGroupElementProps) {\r\n\tconst closeOnSelectHandler = useCloseOnSelectHandler(closeOnSelect)\r\n\tconst textFilterChangeHandler = useTextFilterChangeHandler()\r\n\r\n\tuseEffect(() => {\r\n\t\treturn () => {\r\n\t\t\tif (onFilterValueChange) {\r\n\t\t\t\tonFilterValueChange(\"\")\r\n\t\t\t}\r\n\t\t}\r\n\t\t// REASON: Don't include onFilterValueChange in a dependency array, if it is required in the future, it must be ensured that\r\n\t\t// users wrap there onFilterChange callback function in a useCallback otherwise typing will trigger many re-renders\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [])\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<GroupElement {...rest}>\r\n\t\t\t\t<Flex direction=\"column\">\r\n\t\t\t\t\t{filterValue !== undefined && !!onFilterValueChange && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<BaseMenuInput\r\n\t\t\t\t\t\t\t\tvalue={filterValue}\r\n\t\t\t\t\t\t\t\tonChange={textFilterChangeHandler(onFilterValueChange)}\r\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\t\tleftSlot={icons?.left}\r\n\t\t\t\t\t\t\t\trightSlot={icons?.right}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{items.length !== 0 && <BaseMenuSeparator />}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{items.map(({ content, shortcut, className, onSelect, ...rest }, index) => (\r\n\t\t\t\t\t\t<ItemElement\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tclassName={classNames(className, styles.RemoveOutline)}\r\n\t\t\t\t\t\t\tonSelect={closeOnSelectHandler(onSelect)}\r\n\t\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<BaseMenuItem rightSlot={shortcut?.map((key, index) => <Kbd key={index}>{key}</Kbd>)}>\r\n\t\t\t\t\t\t\t\t{content}\r\n\t\t\t\t\t\t\t</BaseMenuItem>\r\n\t\t\t\t\t\t</ItemElement>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Flex>\r\n\t\t\t</GroupElement>\r\n\t\t\t{separator && <BaseMenuSeparator />}\r\n\t\t</>\r\n\t)\r\n})\r\n","import { memo, useCallback, useEffect } from \"react\"\r\nimport { BaseMenuInput, BaseMenuItem, BaseMenuSeparator } from \"../BaseMenuComponents.tsx\"\r\nimport { Flex } from \"../../Flex\"\r\n\r\nimport styles from \"../BaseMenuComponents.module.sass\"\r\nimport { BaseSelectGroupProps, BaseSelectGroupElementProps } from \"./typings.ts\"\r\nimport { useCloseOnSelectHandler, useTextFilterChangeHandler } from \"../utils.ts\"\r\nimport { CheckIcon, MagnifyingGlassIcon } from \"@radix-ui/react-icons\"\r\n\r\n// TODO: Add numItems prop that determines the number of items displayed before scrolling\r\nexport const BaseSelectGroup = memo(function BaseSelectGroup({\r\n\titems,\r\n\tvalue,\r\n\tcloseOnSelect = false,\r\n\tonValueChange,\r\n\tgroupElement: GroupElement,\r\n\tselectedIndicator,\r\n\titemElement: ItemElement,\r\n\titemIndicatorElement: ItemIndicatorElement,\r\n\tfilterValue,\r\n\tonFilterValueChange,\r\n\tplaceholder,\r\n\ticons,\r\n\tseparator,\r\n}: BaseSelectGroupProps & BaseSelectGroupElementProps) {\r\n\tconst textFilterChangeHandler = useTextFilterChangeHandler()\r\n\tconst closeOnSelectHandler = useCloseOnSelectHandler(closeOnSelect)\r\n\r\n\tuseEffect(() => {\r\n\t\treturn () => {\r\n\t\t\tif (onFilterValueChange) {\r\n\t\t\t\tonFilterValueChange(\"\")\r\n\t\t\t}\r\n\t\t}\r\n\t\t// REASON: Don't include onFilterValueChange in a dependency array, if it is required in the future, it must be ensured that\r\n\t\t// users wrap there onFilterChange callback function in a useCallback otherwise typing will trigger many re-renders\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [])\r\n\r\n\tconst handleCheckedChange = useCallback(\r\n\t\t(value: string) => (checked: boolean) => {\r\n\t\t\tonValueChange(checked ? value : null)\r\n\t\t},\r\n\t\t[onValueChange],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<GroupElement>\r\n\t\t\t\t<Flex direction=\"column\">\r\n\t\t\t\t\t{filterValue !== undefined && !!onFilterValueChange && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<BaseMenuInput\r\n\t\t\t\t\t\t\t\tvalue={filterValue}\r\n\t\t\t\t\t\t\t\tonChange={textFilterChangeHandler(onFilterValueChange)}\r\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\t\tleftSlot={icons?.left}\r\n\t\t\t\t\t\t\t\trightSlot={icons?.right || <MagnifyingGlassIcon />}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{items.length !== 0 && <BaseMenuSeparator />}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{items.map(({ content, value: itemValue, onSelect, ...rest }, index) => (\r\n\t\t\t\t\t\t<ItemElement\r\n\t\t\t\t\t\t\tclassName={styles.RemoveOutline}\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tchecked={itemValue === value}\r\n\t\t\t\t\t\t\tonCheckedChange={handleCheckedChange(itemValue)}\r\n\t\t\t\t\t\t\tonSelect={closeOnSelectHandler(onSelect)}\r\n\t\t\t\t\t\t\t/** this causes input issues if left unset */\r\n\t\t\t\t\t\t\ttextValue=\"\"\r\n\t\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<BaseMenuItem\r\n\t\t\t\t\t\t\t\trightSlot={\r\n\t\t\t\t\t\t\t\t\t<ItemIndicatorElement asChild>\r\n\t\t\t\t\t\t\t\t\t\t{selectedIndicator || <CheckIcon />}\r\n\t\t\t\t\t\t\t\t\t</ItemIndicatorElement>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{content}\r\n\t\t\t\t\t\t\t</BaseMenuItem>\r\n\t\t\t\t\t\t</ItemElement>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Flex>\r\n\t\t\t</GroupElement>\r\n\t\t\t{separator && <BaseMenuSeparator />}\r\n\t\t</>\r\n\t)\r\n})\r\n","import { memo, useCallback, useEffect } from \"react\"\r\nimport classNames from \"classnames\"\r\nimport { CheckIcon } from \"@radix-ui/react-icons\"\r\nimport { Flex } from \"../../Flex\"\r\nimport { BaseMenuInput, BaseMenuItem, BaseMenuSeparator } from \"../BaseMenuComponents.tsx\"\r\nimport { BaseMultiSelectGroupProps, BaseMultiSelectGroupElementProps } from \"./typings.ts\"\r\nimport { useCloseOnSelectHandler, useTextFilterChangeHandler } from \"../utils.ts\"\r\n\r\nimport styles from \"../BaseMenuComponents.module.sass\"\r\n\r\n// TODO: Add numItems prop that determines the number of items displayed before scrolling\r\nexport const BaseMultiSelectGroup = memo(function BaseMultiSelectGroup({\r\n\titems,\r\n\tvalues,\r\n\tonValueChange,\r\n\tcloseOnSelect = false,\r\n\tgroupElement: GroupElement,\r\n\tselectedIndicator,\r\n\titemElement: ItemElement,\r\n\titemIndicatorElement: ItemIndicatorElement,\r\n\tfilterValue,\r\n\tonFilterValueChange,\r\n\tplaceholder,\r\n\ticons,\r\n\tseparator = false,\r\n}: BaseMultiSelectGroupProps & BaseMultiSelectGroupElementProps) {\r\n\tconst closeOnSelectHandler = useCloseOnSelectHandler(closeOnSelect)\r\n\tconst textFilterChangeHandler = useTextFilterChangeHandler()\r\n\r\n\tuseEffect(() => {\r\n\t\treturn () => {\r\n\t\t\tif (onFilterValueChange) {\r\n\t\t\t\tonFilterValueChange(\"\")\r\n\t\t\t}\r\n\t\t}\r\n\t\t// REASON: Don't include onFilterValueChange in a dependency array, if it is required in the future, it must be ensured that\r\n\t\t// users wrap there onFilterChange callback function in a useCallback otherwise typing will trigger many re-renders\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [])\r\n\r\n\tconst handleCheckedChange = useCallback(\r\n\t\t(value: string) => (checked: boolean) => {\r\n\t\t\tif (checked) {\r\n\t\t\t\tonValueChange([...values, value])\r\n\t\t\t} else {\r\n\t\t\t\tconst valueIndex = values.indexOf(value)\r\n\t\t\t\tif (valueIndex < 0) {\r\n\t\t\t\t\tthrow new Error(\"unexpected value not found within values array\")\r\n\t\t\t\t}\r\n\t\t\t\tconst tempValues = [...values]\r\n\t\t\t\ttempValues.splice(valueIndex, 1)\r\n\t\t\t\tonValueChange(tempValues)\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onValueChange, values],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<GroupElement>\r\n\t\t\t\t<Flex direction=\"column\">\r\n\t\t\t\t\t{filterValue !== undefined && !!onFilterValueChange && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<BaseMenuInput\r\n\t\t\t\t\t\t\t\tvalue={filterValue}\r\n\t\t\t\t\t\t\t\tonChange={textFilterChangeHandler(onFilterValueChange)}\r\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\t\tleftSlot={icons?.left}\r\n\t\t\t\t\t\t\t\trightSlot={icons?.right}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{items.length !== 0 && <BaseMenuSeparator />}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{items.map(({ value, content, className, onSelect, ...rest }, index) => (\r\n\t\t\t\t\t\t<ItemElement\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tclassName={classNames(className, styles.RemoveOutline)}\r\n\t\t\t\t\t\t\tonSelect={closeOnSelectHandler(onSelect)}\r\n\t\t\t\t\t\t\tonCheckedChange={handleCheckedChange(value)}\r\n\t\t\t\t\t\t\tchecked={values.includes(value)}\r\n\t\t\t\t\t\t\t/** this causes input issues if left unset */\r\n\t\t\t\t\t\t\ttextValue=\"\"\r\n\t\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<BaseMenuItem\r\n\t\t\t\t\t\t\t\trightSlot={\r\n\t\t\t\t\t\t\t\t\t<ItemIndicatorElement asChild>\r\n\t\t\t\t\t\t\t\t\t\t{selectedIndicator || <CheckIcon />}\r\n\t\t\t\t\t\t\t\t\t</ItemIndicatorElement>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{content}\r\n\t\t\t\t\t\t\t</BaseMenuItem>\r\n\t\t\t\t\t\t</ItemElement>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Flex>\r\n\t\t\t</GroupElement>\r\n\t\t\t{separator && <BaseMenuSeparator />}\r\n\t\t</>\r\n\t)\r\n})\r\n","import { memo } from \"react\"\r\nimport { BaseSubMenuGroupElementProps, BaseSubMenuGroupProps } from \"./typings.ts\"\r\nimport { BaseMenuItem, BaseMenuSeparator } from \"../BaseMenuComponents.tsx\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"../BaseMenuComponents.module.sass\"\r\n\r\nexport const BaseSubMenuGroup = memo(function BaseSubMenuGroup({\r\n\tsubTriggerElement: SubTriggerElement,\r\n\tgroupElement: GroupElement,\r\n\tsubContentElement: SubContentElement,\r\n\tsubElement: SubElement,\r\n\titems,\r\n\tseparator = false,\r\n\t...rest\r\n}: BaseSubMenuGroupProps & BaseSubMenuGroupElementProps) {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<GroupElement {...rest}>\r\n\t\t\t\t{items.map(({ triggerIndicator, content, subContent, className, ...rest }, index) => (\r\n\t\t\t\t\t<SubElement key={index}>\r\n\t\t\t\t\t\t<SubTriggerElement className={classNames(className, styles.RemoveOutline)} {...rest}>\r\n\t\t\t\t\t\t\t<BaseMenuItem rightSlot={triggerIndicator}>{content}</BaseMenuItem>\r\n\t\t\t\t\t\t</SubTriggerElement>\r\n\t\t\t\t\t\t{/* sideOffset ensures the Sub Content does not overlap the main menu*/}\r\n\t\t\t\t\t\t<SubContentElement sideOffset={10}>{subContent}</SubContentElement>\r\n\t\t\t\t\t</SubElement>\r\n\t\t\t\t))}\r\n\t\t\t</GroupElement>\r\n\t\t\t{separator && <BaseMenuSeparator />}\r\n\t\t</>\r\n\t)\r\n})\r\n","import { memo } from \"react\"\r\nimport { DropdownMenu } from \"@radix-ui/themes\"\r\nimport * as RadixDropdownMenu from \"@radix-ui/react-dropdown-menu\"\r\nimport {\r\n\tBaseItemGroup,\r\n\tBaseSelectGroup,\r\n\tBaseMultiSelectGroup,\r\n\tBaseSubMenuGroup,\r\n\tBaseItemGroupProps,\r\n\tBaseSelectGroupProps,\r\n\tBaseMultiSelectGroupProps,\r\n\tBaseSelectItemProps,\r\n\tBaseItemProps,\r\n\tBaseMultiSelectItemProps,\r\n\tBaseSubMenuGroupProps,\r\n\tBaseSubMenuItemProps,\r\n} from \"../BaseMenuGroups\"\r\n\r\n// TODO: A similar pattern must be created for Radix Context Menu, that is, creating the Item Group, MultiSelect Group and Select Group\r\n\r\n/** Item Group */\r\nexport type DropdownMenuItemGroupItemProps = BaseItemProps\r\nexport type DropdownMenuItemGroupProps = BaseItemGroupProps\r\nexport const DropdownMenuItemGroup = memo(function DropdownMenuItemGroup(props: DropdownMenuItemGroupProps) {\r\n\treturn <BaseItemGroup {...props} itemElement={RadixDropdownMenu.Item} groupElement={RadixDropdownMenu.Group} />\r\n})\r\n\r\n/** Select Group */\r\nexport type DropdownMenuSelectGroupItemProps = BaseSelectItemProps\r\nexport type DropdownMenuSelectGroupProps = BaseSelectGroupProps\r\nexport const DropdownMenuSelectGroup = memo(function DropdownMenuSelectGroup(props: DropdownMenuSelectGroupProps) {\r\n\treturn (\r\n\t\t<BaseSelectGroup\r\n\t\t\t{...props}\r\n\t\t\titemElement={RadixDropdownMenu.CheckboxItem}\r\n\t\t\tgroupElement={RadixDropdownMenu.Group}\r\n\t\t\titemIndicatorElement={RadixDropdownMenu.ItemIndicator}\r\n\t\t/>\r\n\t)\r\n})\r\n\r\n/** MultiSelect Group */\r\nexport type DropdownMenuMultiSelectGroupItemProps = BaseMultiSelectItemProps\r\nexport type DropdownMenuMultiSelectGroupProps = BaseMultiSelectGroupProps\r\nexport const DropdownMenuMultiSelectGroup = memo(function DropdownMenuMultiSelectGroup(\r\n\tprops: DropdownMenuMultiSelectGroupProps,\r\n) {\r\n\treturn (\r\n\t\t<BaseMultiSelectGroup\r\n\t\t\t{...props}\r\n\t\t\titemElement={RadixDropdownMenu.CheckboxItem}\r\n\t\t\tgroupElement={RadixDropdownMenu.Group}\r\n\t\t\titemIndicatorElement={RadixDropdownMenu.ItemIndicator}\r\n\t\t/>\r\n\t)\r\n})\r\n\r\n/** SubMenu Group */\r\nexport type DropdownMenuSubMenuGroupItemProps = BaseSubMenuItemProps\r\nexport type DropdownMenuSubMenuGroupProps = BaseSubMenuGroupProps\r\nexport const DropdownMenuSubMenuGroup = memo(function DropdownMenuSubMenuGroup(props: DropdownMenuSubMenuGroupProps) {\r\n\treturn (\r\n\t\t<BaseSubMenuGroup\r\n\t\t\t{...props}\r\n\t\t\tgroupElement={RadixDropdownMenu.Group}\r\n\t\t\tsubElement={DropdownMenu.Sub}\r\n\t\t\tsubTriggerElement={RadixDropdownMenu.SubTrigger}\r\n\t\t\tsubContentElement={DropdownMenu.SubContent}\r\n\t\t/>\r\n\t)\r\n})\r\n","import { DropdownMenu as RadixDropdownMenu } from \"@radix-ui/themes\"\r\nimport { FC, forwardRef, memo } from \"react\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\n\r\nimport {\r\n\tDropdownMenuItemGroup,\r\n\tDropdownMenuItemGroupItemProps,\r\n\tDropdownMenuItemGroupProps,\r\n} from \"../DropdownMenu/DropdownMenuGroups.tsx\"\r\nimport { BaseMenuProps } from \"../BaseMenuGroups\"\r\n\r\nexport type DropdownItemMenuItemProps = DropdownMenuItemGroupItemProps\r\n\r\nexport type DropdownItemMenuProps = DropdownMenuItemGroupProps & BaseMenuProps\r\n\r\n/** The DropdownItemMenu component is a user interface element that provides a list of options for the user to choose from.\r\n * It is commonly used in web applications to present a set of related choices in a compact and organized manner.\r\n * This DropdownItemMenu component is a wrapper around the Radix-UI DropdownItemMenu component that can be found here https://www.radix-ui.com/themes/docs/components/dropdown-menu */\r\nexport const DropdownItemMenu: FC<DropdownItemMenuProps> = memo(\r\n\tforwardRef<HTMLDivElement, DropdownItemMenuProps>(\r\n\t\t({\r\n\t\t\ttrigger,\r\n\t\t\titems,\r\n\t\t\tdisabled,\r\n\t\t\tcloseOnSelect = true,\r\n\t\t\tfilterValue,\r\n\t\t\tonFilterValueChange,\r\n\t\t\tplaceholder,\r\n\t\t\t...rest\r\n\t\t}) => {\r\n\t\t\tconst infoColor = useSeverityColor(\"info\")\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<RadixDropdownMenu.Root>\r\n\t\t\t\t\t<RadixDropdownMenu.Trigger disabled={disabled}>{trigger}</RadixDropdownMenu.Trigger>\r\n\t\t\t\t\t<RadixDropdownMenu.Content variant=\"soft\" {...rest} color={infoColor}>\r\n\t\t\t\t\t\t<DropdownMenuItemGroup\r\n\t\t\t\t\t\t\titems={items}\r\n\t\t\t\t\t\t\tfilterValue={filterValue}\r\n\t\t\t\t\t\t\tonFilterValueChange={onFilterValueChange}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\tcloseOnSelect={closeOnSelect}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</RadixDropdownMenu.Content>\r\n\t\t\t\t</RadixDropdownMenu.Root>\r\n\t\t\t)\r\n\t\t},\r\n\t),\r\n)\r\n","import { FC, forwardRef, memo } from \"react\"\r\nimport { DropdownMenu as RadixDropdownMenu } from \"@radix-ui/themes\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\nimport {\r\n\tDropdownMenuItemGroupItemProps,\r\n\tDropdownMenuSelectGroup,\r\n\tDropdownMenuSelectGroupProps,\r\n} from \"../DropdownMenu/DropdownMenuGroups.tsx\"\r\nimport { BaseMenuProps } from \"../BaseMenuGroups\"\r\n\r\nexport type DropdownSelectItemProps = DropdownMenuItemGroupItemProps\r\n\r\nexport type DropdownSelectProps = DropdownMenuSelectGroupProps & BaseMenuProps\r\n\r\nexport const DropdownSelect: FC<DropdownSelectProps> = memo(\r\n\tforwardRef<HTMLDivElement, DropdownSelectProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\ttrigger,\r\n\t\t\t\titems,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonValueChange,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tfilterValue,\r\n\t\t\t\tonFilterValueChange,\r\n\t\t\t\tcloseOnSelect = true,\r\n\t\t\t\ticons,\r\n\t\t\t\tside,\r\n\t\t\t},\r\n\t\t\tref,\r\n\t\t) => {\r\n\t\t\tconst infoColor = useSeverityColor(\"info\")\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<RadixDropdownMenu.Root>\r\n\t\t\t\t\t<RadixDropdownMenu.Trigger disabled={disabled}>{trigger}</RadixDropdownMenu.Trigger>\r\n\t\t\t\t\t<RadixDropdownMenu.Content ref={ref} variant=\"soft\" color={infoColor} side={side}>\r\n\t\t\t\t\t\t<DropdownMenuSelectGroup\r\n\t\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\t\tonValueChange={onValueChange}\r\n\t\t\t\t\t\t\titems={items}\r\n\t\t\t\t\t\t\tcloseOnSelect={closeOnSelect}\r\n\t\t\t\t\t\t\tfilterValue={filterValue}\r\n\t\t\t\t\t\t\tonFilterValueChange={onFilterValueChange}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\ticons={icons}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</RadixDropdownMenu.Content>\r\n\t\t\t\t</RadixDropdownMenu.Root>\r\n\t\t\t)\r\n\t\t},\r\n\t),\r\n)\r\n","import { FC, forwardRef, memo } from \"react\"\r\nimport { DropdownMenu as RadixDropdownMenu } from \"@radix-ui/themes\"\r\nimport {\r\n\tDropdownMenuMultiSelectGroup,\r\n\tDropdownMenuMultiSelectGroupItemProps,\r\n\tDropdownMenuMultiSelectGroupProps,\r\n} from \"../DropdownMenu\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\nimport { BaseMenuProps } from \"../BaseMenuGroups\"\r\n\r\nexport type DropdownMultiSelectItemProps = DropdownMenuMultiSelectGroupItemProps\r\n\r\nexport type DropdownMultiSelectProps = DropdownMenuMultiSelectGroupProps & BaseMenuProps\r\nexport const DropdownMultiSelect: FC<DropdownMultiSelectProps> = memo(\r\n\tforwardRef<HTMLDivElement, DropdownMultiSelectProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\ttrigger,\r\n\t\t\t\titems,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tvalues,\r\n\t\t\t\tonValueChange,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tfilterValue,\r\n\t\t\t\tonFilterValueChange,\r\n\t\t\t\tcloseOnSelect = false,\r\n\t\t\t\ticons,\r\n\t\t\t\tside,\r\n\t\t\t},\r\n\t\t\tref,\r\n\t\t) => {\r\n\t\t\tconst infoColor = useSeverityColor(\"info\")\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<RadixDropdownMenu.Root>\r\n\t\t\t\t\t<RadixDropdownMenu.Trigger disabled={disabled}>{trigger}</RadixDropdownMenu.Trigger>\r\n\t\t\t\t\t<RadixDropdownMenu.Content ref={ref} variant=\"soft\" color={infoColor} side={side}>\r\n\t\t\t\t\t\t<DropdownMenuMultiSelectGroup\r\n\t\t\t\t\t\t\tvalues={values}\r\n\t\t\t\t\t\t\tonValueChange={onValueChange}\r\n\t\t\t\t\t\t\titems={items}\r\n\t\t\t\t\t\t\tcloseOnSelect={closeOnSelect}\r\n\t\t\t\t\t\t\tfilterValue={filterValue}\r\n\t\t\t\t\t\t\tonFilterValueChange={onFilterValueChange}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\ticons={icons}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</RadixDropdownMenu.Content>\r\n\t\t\t\t</RadixDropdownMenu.Root>\r\n\t\t\t)\r\n\t\t},\r\n\t),\r\n)\r\n","import { FC, memo, PointerEventHandler, ReactElement, useCallback, useState } from \"react\"\r\ninterface ChildProps {\r\n\tisHovered: boolean\r\n\tonPointerEnter: PointerEventHandler<HTMLElement>\r\n\tonPointerLeave: PointerEventHandler<HTMLElement>\r\n}\r\ninterface HoverUtilityProps {\r\n\tchildren: (props: ChildProps) => ReactElement\r\n}\r\n\r\n/** HoverUtility is a utility component used for detecting when an element is being hovered over or not, is passes a\r\n * isHovered variable to its children as well as props onPointerEnter and onPointerLeave that can be spread on any\r\n * child component that should be used as the element to observe hovering on. See stories of examples of its use. */\r\nexport const HoverUtility: FC<HoverUtilityProps> = memo(function Root({ children }: HoverUtilityProps) {\r\n\tconst [isHovered, setIsHovered] = useState<boolean>(false)\r\n\r\n\tconst handlePointerEnter = useCallback(() => {\r\n\t\tsetIsHovered(true)\r\n\t}, [])\r\n\r\n\tconst handlePointerLeave = useCallback(() => {\r\n\t\tsetIsHovered(false)\r\n\t}, [])\r\n\r\n\treturn children({\r\n\t\tisHovered: isHovered,\r\n\t\tonPointerEnter: handlePointerEnter,\r\n\t\tonPointerLeave: handlePointerLeave,\r\n\t})\r\n})\r\n","import React, { FC, forwardRef } from \"react\"\r\nimport { Select as RadixSelect } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { useResponsiveMapping, useSeverityColor } from \"../utils.ts\"\r\nimport { SizeMapping } from \"../constants.ts\"\r\nimport { SelectItemProps, SelectProps } from \"./typings.ts\"\r\n\r\nimport styles from \"./Select.module.sass\"\r\n\r\nconst _Select = forwardRef(function Select(\r\n\t{\r\n\t\tclassName,\r\n\t\tfluid,\r\n\t\tsize = \"medium\",\r\n\t\tvariant = \"surface\",\r\n\t\tseverity = \"primary\",\r\n\t\titemSeverity = \"info\",\r\n\t\tplaceholder = \"Select\",\r\n\t\tside,\r\n\t\titems = [],\r\n\t\tvalue,\r\n\t\tid,\r\n\t\t...rest\r\n\t}: SelectProps,\r\n\tref: React.Ref<HTMLButtonElement>,\r\n) {\r\n\tconst mappedSize = useResponsiveMapping(size, SizeMapping)\r\n\tconst severityColor = useSeverityColor(severity)\r\n\tconst itemSeverityColor = useSeverityColor(itemSeverity)\r\n\r\n\t// TODO: extend functionality to support grouping of items\r\n\t// TODO: remove key change based on value once placeholder issue it fixed in radix-ui/themes\r\n\treturn (\r\n\t\t<RadixSelect.Root size={mappedSize} {...rest} key={value === undefined ? 1 : 0} value={value}>\r\n\t\t\t<RadixSelect.Trigger\r\n\t\t\t\tclassName={classNames(className, {\r\n\t\t\t\t\t[styles.fluid!]: fluid,\r\n\t\t\t\t})}\r\n\t\t\t\tid={id}\r\n\t\t\t\tref={ref}\r\n\t\t\t\tvariant={variant}\r\n\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\tcolor={severityColor}\r\n\t\t\t/>\r\n\t\t\t<RadixSelect.Content\r\n\t\t\t\tside={side}\r\n\t\t\t\tclassName={styles.contentDefault}\r\n\t\t\t\tposition=\"popper\"\r\n\t\t\t\tvariant={variant !== \"surface\" ? \"soft\" : \"solid\"}\r\n\t\t\t\tcolor={itemSeverityColor}\r\n\t\t\t>\r\n\t\t\t\t{items.map(({ itemContent, value, ...rest }: SelectItemProps) => (\r\n\t\t\t\t\t<RadixSelect.Item className=\"overmap-select-item\" key={value} value={value} {...rest}>\r\n\t\t\t\t\t\t{itemContent}\r\n\t\t\t\t\t</RadixSelect.Item>\r\n\t\t\t\t))}\r\n\t\t\t</RadixSelect.Content>\r\n\t\t</RadixSelect.Root>\r\n\t)\r\n})\r\nexport const Select: FC<SelectProps> = React.memo(_Select)\r\n","import { FC, ReactNode, forwardRef, memo } from \"react\"\nimport { SizeMapping } from \"../constants\"\nimport { Size } from \"../typings\"\nimport { Box, Checkbox, Flex, Responsive, Select } from \"@radix-ui/themes\"\n\nexport interface MultiSelectOption {\n\tlabel: ReactNode\n\tvalue: string\n}\n\ninterface MultiSelectItemProps extends MultiSelectOption {\n\tchecked: boolean\n\tsize?: Responsive<(typeof SizeMapping)[Size]>\n}\n\nexport const MultiSelectItem: FC<MultiSelectItemProps> = memo(\n\tforwardRef<HTMLDivElement, MultiSelectItemProps>((props, ref) => {\n\t\tconst { checked, label, value, size = \"2\" } = props\n\t\treturn (\n\t\t\t<Box asChild px={size}>\n\t\t\t\t<Select.Item value={value} ref={ref}>\n\t\t\t\t\t<Flex gap={size} align=\"center\">\n\t\t\t\t\t\t<Checkbox checked={checked} />\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</Flex>\n\t\t\t\t</Select.Item>\n\t\t\t</Box>\n\t\t)\n\t}),\n)\n","import { Select } from \"@radix-ui/themes\"\r\nimport { ComponentProps, FC, forwardRef, memo, useCallback, useEffect, useMemo, useState } from \"react\"\r\nimport { Severity, Size } from \"../typings\"\r\nimport { useResponsiveMapping, useSeverityColor } from \"../utils\"\r\nimport { SizeMapping } from \"../constants\"\r\nimport { MultiSelectItem, MultiSelectOption } from \"./MultiSelectItem\"\r\n\r\ntype RadixTriggerProps = ComponentProps<typeof Select.Trigger>\r\n\r\nexport interface MultiSelectProps {\r\n\tvalue: string[]\r\n\tonValueChange: (value: string[]) => void\r\n\toptions: MultiSelectOption[]\r\n\r\n\t// root props\r\n\tdisabled?: boolean\r\n\t/** @default medium */\r\n\tsize?: Size\r\n\tname?: string\r\n\r\n\t// trigger props\r\n\tplaceholder?: string\r\n\tid?: string\r\n\t/** @default surface */\r\n\tvariant?: Exclude<RadixTriggerProps[\"variant\"], \"classic\">\r\n\tradius?: RadixTriggerProps[\"radius\"]\r\n\t/** @default primary */\r\n\tseverity?: Severity\r\n\tclassName?: string\r\n}\r\n\r\nconst SELECT_ALL_VALUE = \"__select_all__\"\r\n\r\n/**\r\n * `MultiSelect` does not support being used as an uncontrolled component,\r\n * hence `onValueChange` and `value` are required.\r\n */\r\nexport const MultiSelect: FC<MultiSelectProps> = memo(\r\n\tforwardRef<HTMLButtonElement, MultiSelectProps>((props, ref) => {\r\n\t\tconst [open, setOpen] = useState(false)\r\n\r\n\t\tconst { placeholder, value, onValueChange, options, disabled, name, ...triggerProps } = props\r\n\t\tconst size = useResponsiveMapping(props.size, SizeMapping)\r\n\t\tconst color = useSeverityColor(props.severity)\r\n\r\n\t\t// option value => label\r\n\t\tconst optionsMap = useMemo(() => new Map(options.map((o) => [o.value, o.label])), [options])\r\n\r\n\t\t// ex: \"label 1, label 2\" OR \"6 options selected\"\r\n\t\tconst displayValue =\r\n\t\t\tvalue.length > 4 ? (\r\n\t\t\t\t// to ensure the width of the select doesn't get too big\r\n\t\t\t\t`${value.length} options selected`\r\n\t\t\t) : (\r\n\t\t\t\t// convert the values to labels\r\n\t\t\t\t<span>{value.flatMap((v) => [optionsMap.get(v), \", \"]).slice(0, -1)}</span>\r\n\t\t\t)\r\n\r\n\t\tconst close = useCallback(() => setOpen(false), [])\r\n\r\n\t\tconst handleOpenChange = useCallback((open: boolean) => {\r\n\t\t\t// dismiss the internal close events\r\n\t\t\t// require clicking outside of the popup to close or pressing escape\r\n\t\t\tif (open) setOpen(true)\r\n\t\t}, [])\r\n\r\n\t\tconst handleValueChange = useCallback(\r\n\t\t\t(selected: string) => {\r\n\t\t\t\tlet next: string[]\r\n\t\t\t\tif (selected === SELECT_ALL_VALUE) {\r\n\t\t\t\t\tconst isAllSelected = value.length === options.length\r\n\t\t\t\t\tnext = isAllSelected ? [] : options.map((o) => o.value)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnext = value.includes(selected) ? value.filter((v) => v !== selected) : [...value, selected]\r\n\t\t\t\t}\r\n\r\n\t\t\t\tonValueChange(next)\r\n\t\t\t},\r\n\t\t\t[onValueChange, options, value],\r\n\t\t)\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (options.some(({ value }) => value === SELECT_ALL_VALUE)) {\r\n\t\t\t\tthrow new Error(`Cannot have an option with the value \"${SELECT_ALL_VALUE}\"`)\r\n\t\t\t}\r\n\t\t}, [options])\r\n\r\n\t\treturn (\r\n\t\t\t<Select.Root\r\n\t\t\t\topen={open}\r\n\t\t\t\tvalue=\"\"\r\n\t\t\t\tonOpenChange={handleOpenChange}\r\n\t\t\t\tonValueChange={handleValueChange}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tsize={size}\r\n\t\t\t\tname={name}\r\n\t\t\t\tautoComplete=\"off\"\r\n\t\t\t>\r\n\t\t\t\t<Select.Trigger\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tcolor={color}\r\n\t\t\t\t\tplaceholder={value.length > 0 ? (displayValue as string) : placeholder}\r\n\t\t\t\t\t// remove the placeholder styling when there is a value\r\n\t\t\t\t\tdata-placeholder={value.length > 0 ? undefined : true}\r\n\t\t\t\t\t{...triggerProps}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t<Select.Content\r\n\t\t\t\t\tcolor=\"gray\"\r\n\t\t\t\t\tvariant=\"soft\"\r\n\t\t\t\t\tposition=\"popper\"\r\n\t\t\t\t\tonEscapeKeyDown={close}\r\n\t\t\t\t\tonPointerDownOutside={close}\r\n\t\t\t\t>\r\n\t\t\t\t\t<MultiSelectItem\r\n\t\t\t\t\t\tvalue={SELECT_ALL_VALUE}\r\n\t\t\t\t\t\tlabel=\"Select all\"\r\n\t\t\t\t\t\tchecked={value.length === options.length}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{options.map((option) => (\r\n\t\t\t\t\t\t<MultiSelectItem\r\n\t\t\t\t\t\t\tkey={option.value}\r\n\t\t\t\t\t\t\t{...option}\r\n\t\t\t\t\t\t\tchecked={value.includes(option.value)}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Select.Content>\r\n\t\t\t</Select.Root>\r\n\t\t)\r\n\t}),\r\n)\r\n","import { FC, forwardRef, memo, Ref, useCallback, useLayoutEffect, useRef, useState } from \"react\"\nimport { Switch as RadixSwitch, Portal } from \"@radix-ui/themes\"\nimport classNames from \"classnames\"\nimport { SwitchProps } from \"./typings.ts\"\nimport { useSeverityColor } from \"../utils.ts\"\n\nimport styles from \"./Switch.module.sass\"\n\nconst _Switch = forwardRef(function Switch(\n\t{ className, severity = \"primary\", icon, defaultChecked = false, onCheckedChange, ...rest }: SwitchProps,\n\tref: Ref<HTMLButtonElement>,\n) {\n\t// fallbackRef used in case user does not pass in a ref\n\tconst fallbackRef = useRef<HTMLButtonElement>(null)\n\t// uncontrolled state to keep track of whether the Switch is checked or not, not passed to the Switch itself\n\tconst [checked, setChecked] = useState(rest.checked ? rest.checked : defaultChecked)\n\t// iconContainer is used to store the switch Thumb span element so that an Icon can be rendered within it\n\tconst [iconContainer, setIconContainer] = useState<HTMLSpanElement | undefined>()\n\tconst severityColor = useSeverityColor(severity)\n\n\tuseLayoutEffect(() => {\n\t\tconst usedRef = ref ? ref : fallbackRef\n\t\tif (\"current\" in usedRef && usedRef.current) {\n\t\t\tsetIconContainer(usedRef.current?.querySelector(\"span.rt-SwitchThumb\") as HTMLSpanElement)\n\t\t}\n\t}, [ref])\n\n\tconst handleValueChange = useCallback(\n\t\t(checked: boolean) => {\n\t\t\tsetChecked(checked)\n\t\t\tif (onCheckedChange) onCheckedChange(checked)\n\t\t},\n\t\t[onCheckedChange],\n\t)\n\n\tconst _checked = rest.checked ? rest.checked : checked\n\n\treturn (\n\t\t<>\n\t\t\t<RadixSwitch\n\t\t\t\tclassName={classNames(\"overmap-switch\", className, styles.default)}\n\t\t\t\tref={ref ? ref : fallbackRef}\n\t\t\t\tcolor={severityColor}\n\t\t\t\tradius=\"full\"\n\t\t\t\tdefaultChecked={defaultChecked}\n\t\t\t\tonCheckedChange={handleValueChange}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t\t<Portal container={iconContainer} asChild>\n\t\t\t\t{icon && \"checked\" in icon ? (_checked ? icon[\"checked\"] : icon[\"unchecked\"]) : icon}\n\t\t\t</Portal>\n\t\t</>\n\t)\n})\n\n/** The Switch Component is a user interface element that allows users to toggle between two states, typically\n * representing \"on\" and \"off\" or \"enabled\" and \"disabled\". It is commonly used for settings, preferences, or any\n * binary options. This Switch component is a wrapper around the Radix-ui Switch component found here https://www.radix-ui.com/themes/docs/components/switch\n */\nexport const Switch: FC<SwitchProps> = memo(_Switch)\n","import { forwardRef, memo, Ref, useEffect, useState } from \"react\"\r\nimport { Box } from \"@radix-ui/themes\"\r\nimport { DragHandleDots2Icon } from \"@radix-ui/react-icons\"\r\nimport * as RadixDialogPrimitive from \"@radix-ui/react-dialog\"\r\nimport { DialogContentProps } from \"@radix-ui/react-dialog\"\r\nimport { Resizable } from \"re-resizable\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"./Sidebar.module.sass\"\r\n\r\ninterface SidebarProps extends Omit<DialogContentProps, \"asChild\" | \"forceMount\"> {\r\n\t/** determines what side the Sidebar appears from within its rendered container */\r\n\tside?: \"left\" | \"right\"\r\n\t/** when true, interactions with any elements outside the Sidebar will be disabled */\r\n\tmodal?: boolean\r\n\t/** The minimum width to which the Sidebar can be resized to\r\n\t * @default 300px\r\n\t * */\r\n\tminWidth?: number | string\r\n\t/** The maximum width to which the Sidebar can be resized to\r\n\t * @default 500px\r\n\t * */\r\n\tmaxWidth?: number | string\r\n\t/** determines if the Sidebar can be resized\r\n\t * @default true\r\n\t * */\r\n\tresizable?: boolean\r\n\t/** prop to control whether the Sidebar is open or not */\r\n\topen?: boolean\r\n\t/** a selector string for the desired container for the Sidebar to render within\r\n\t * @default '[data-is-root-theme=\"true\"]'\r\n\t * */\r\n\tcontainerSelector?: string\r\n\t/** determine whether the Sidebar also renders with an Overlay*/\r\n\toverlay?: boolean\r\n}\r\n\r\nconst defaultSidebarSize = { width: \"auto\", height: \"100%\" }\r\n\r\nconst _Sidebar = forwardRef(function Sidebar(\r\n\t{\r\n\t\tside = \"left\",\r\n\t\tmodal = true,\r\n\t\tchildren,\r\n\t\topen,\r\n\t\tcontainerSelector,\r\n\t\toverlay = true,\r\n\t\tresizable = true,\r\n\t\t// Props related to Resizable\r\n\t\tminWidth = \"300px\",\r\n\t\tmaxWidth = \"500px\",\r\n\t\t...rest\r\n\t}: SidebarProps,\r\n\tref: Ref<HTMLDivElement>,\r\n) {\r\n\tconst isRight = side === \"right\"\r\n\tconst isLeft = side === \"left\"\r\n\tconst [container, setContainer] = useState<HTMLElement>()\r\n\r\n\tuseEffect(() => {\r\n\t\tconst selector = containerSelector ?? '[data-is-root-theme=\"true\"]'\r\n\t\tconst tempContainer = document.querySelector(selector) as HTMLElement\r\n\r\n\t\tif (tempContainer === undefined) {\r\n\t\t\tthrow new Error(`Could not find a container element using the following selector ${selector}`)\r\n\t\t}\r\n\t\tsetContainer(tempContainer)\r\n\t}, [containerSelector])\r\n\r\n\treturn (\r\n\t\t<RadixDialogPrimitive.Root open={open} modal={modal}>\r\n\t\t\t<RadixDialogPrimitive.Portal container={container}>\r\n\t\t\t\t{overlay && <RadixDialogPrimitive.Overlay className={classNames(styles.overlay)} />}\r\n\t\t\t\t<RadixDialogPrimitive.Content\r\n\t\t\t\t\tclassName={classNames(\"overmap-sidebar\", \"rt-DialogContent\", styles.sidebarContent, {\r\n\t\t\t\t\t\t[styles.left!]: isLeft,\r\n\t\t\t\t\t\t[styles.right!]: isRight,\r\n\t\t\t\t\t})}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tasChild\r\n\t\t\t\t\t{...rest}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Box width=\"auto\">\r\n\t\t\t\t\t\t<Resizable\r\n\t\t\t\t\t\t\tminWidth={minWidth}\r\n\t\t\t\t\t\t\tmaxWidth={maxWidth}\r\n\t\t\t\t\t\t\tdefaultSize={defaultSidebarSize}\r\n\t\t\t\t\t\t\tenable={{ right: resizable && isLeft, left: resizable && isRight }}\r\n\t\t\t\t\t\t\thandleClasses={{ left: styles.resizeHandle, right: styles.resizeHandle }}\r\n\t\t\t\t\t\t\thandleComponent={{\r\n\t\t\t\t\t\t\t\tright: <DragHandleDots2Icon />,\r\n\t\t\t\t\t\t\t\tleft: <DragHandleDots2Icon />,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{children}\r\n\t\t\t\t\t\t</Resizable>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</RadixDialogPrimitive.Content>\r\n\t\t\t</RadixDialogPrimitive.Portal>\r\n\t\t</RadixDialogPrimitive.Root>\r\n\t)\r\n})\r\n\r\nexport const Sidebar = memo(_Sidebar)\r\n","import { CSSProperties, FC, memo, ReactElement, useCallback, useRef, useState } from \"react\"\r\nimport { Flex } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { NumberSize, Resizable, ResizeDirection } from \"re-resizable\"\r\nimport { DismissableLayer, DismissableLayerProps } from \"@radix-ui/react-dismissable-layer\"\r\nimport { CSSTransition } from \"react-transition-group\"\r\n\r\nimport styles from \"./SlideOut.module.sass\"\r\n\r\ninterface SlideOutProps extends Omit<DismissableLayerProps, \"disableOutsidePointerEvents\"> {\r\n\t/** The controlled state of whether the SlideOut is open or not */\r\n\topen?: boolean\r\n\t/** Used to specify what side of the container the SlideOut appears on\r\n\t * @default \"left\"\r\n\t * */\r\n\tside?: \"left\" | \"right\"\r\n\t/** The minimum width of the SlideOut, this must be specified and will be the default width the SlideOut\r\n\t * first opens with. Note the developer is responsible for adapting this as the screen size or size of the container\r\n\t * the SlideOut appears in changes in width */\r\n\tminWidth: number\r\n\t/** An optional max width of the SlideOut when resizing, like minWidth, the Developer is responsible for adapting\r\n\t * this value as the screen size or size of the container of the SlideOut changes width*/\r\n\tmaxWidth?: number\r\n\t/** Renders an overlay with the SlideOut, should be used when the SlideOut should have modality\r\n\t * @default false\r\n\t * */\r\n\toverlay?: boolean\r\n\t/** Determines if the SlideOut has modality, should be used in combination with overlay\r\n\t * @default false\r\n\t * */\r\n\tmodal?: boolean\r\n\t/** Controls whether the SlideOut can be resized\r\n\t * @default true\r\n\t * */\r\n\tresizable?: boolean\r\n\t/** Component to be used as the resize handle for the SlideOut */\r\n\tresizeHandle?: ReactElement\r\n\t/** if set to relative, the SlideOut will push any content contained within its container when open/closed\r\n\t * @default \"absolute\"\r\n\t * */\r\n\tposition?: \"absolute\" | \"relative\"\r\n}\r\n\r\nconst TRANSITION_DURATION = 200\r\n\r\n/** The SlideOut component is a UI element that allows you to create a slide-in/slide-out effect for content within\r\n * your application. It provides a smooth transition animation for revealing and hiding content. */\r\nexport const SlideOut: FC<SlideOutProps> = memo(function SlideOut({\r\n\tclassName,\r\n\topen,\r\n\tside = \"left\",\r\n\tchildren,\r\n\tminWidth,\r\n\tmaxWidth,\r\n\tresizable = true,\r\n\toverlay = false,\r\n\tmodal = false,\r\n\tresizeHandle,\r\n\tposition = \"absolute\",\r\n\t...rest\r\n}: SlideOutProps) {\r\n\tconst contentRef = useRef<HTMLDivElement>(null)\r\n\tconst [slideOutWidth, setSideBarWith] = useState<number>(minWidth)\r\n\r\n\tconst isSideLeft = side === \"left\"\r\n\tconst isSideRight = side === \"right\"\r\n\r\n\t// callback used to track the width of the SlideOut\r\n\tconst handleResize = useCallback(\r\n\t\t(_event: MouseEvent | TouchEvent, _dir: ResizeDirection, ref: HTMLElement, _delta: NumberSize) => {\r\n\t\t\tsetSideBarWith(ref.clientWidth)\r\n\t\t\tif (contentRef.current) {\r\n\t\t\t\tcontentRef.current.style.width = `${ref.clientWidth}px`\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<CSSTransition\r\n\t\t\tin={open}\r\n\t\t\tclassNames={{\r\n\t\t\t\tenter: styles.enter,\r\n\t\t\t\tenterActive: styles.enterActive,\r\n\t\t\t\texitActive: styles.exitActive,\r\n\t\t\t\texitDone: styles.exitDone,\r\n\t\t\t}}\r\n\t\t\ttimeout={TRANSITION_DURATION}\r\n\t\t\tnodeRef={contentRef}\r\n\t\t\tunmountOnExit\r\n\t\t\tmountOnEnter\r\n\t\t>\r\n\t\t\t<>\r\n\t\t\t\t{overlay && <div className={classNames(\"overamp-slide-out-overlay\", styles.slideOutOverlay)} />}\r\n\t\t\t\t<DismissableLayer disableOutsidePointerEvents={modal} asChild {...rest}>\r\n\t\t\t\t\t<Flex\r\n\t\t\t\t\t\tclassName={classNames(\"overmap-slide-out\", className, styles.outerContent, {\r\n\t\t\t\t\t\t\t[styles.left!]: isSideLeft,\r\n\t\t\t\t\t\t\t[styles.right!]: isSideRight,\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t\tstyle={{ \"--slide-out-width\": `${slideOutWidth}px` } as CSSProperties}\r\n\t\t\t\t\t\theight=\"100%\"\r\n\t\t\t\t\t\twidth=\"auto\"\r\n\t\t\t\t\t\tposition={position}\r\n\t\t\t\t\t\ttop=\"0\"\r\n\t\t\t\t\t\tbottom=\"0\"\r\n\t\t\t\t\t\tleft={isSideLeft ? \"0\" : undefined}\r\n\t\t\t\t\t\tright={isSideRight ? \"0\" : undefined}\r\n\t\t\t\t\t\tref={contentRef}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Resizable\r\n\t\t\t\t\t\t\tclassName={styles.resizable}\r\n\t\t\t\t\t\t\tdefaultSize={{ width: slideOutWidth, height: \"100%\" }}\r\n\t\t\t\t\t\t\tonResize={handleResize}\r\n\t\t\t\t\t\t\tenable={{ right: resizable && isSideLeft, left: resizable && isSideRight }}\r\n\t\t\t\t\t\t\thandleComponent={{ left: resizeHandle, right: resizeHandle }}\r\n\t\t\t\t\t\t\tminWidth={minWidth}\r\n\t\t\t\t\t\t\tmaxWidth={maxWidth}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{children}\r\n\t\t\t\t\t\t</Resizable>\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</DismissableLayer>\r\n\t\t\t</>\r\n\t\t</CSSTransition>\r\n\t)\r\n})\r\n","import React, { FC, forwardRef } from \"react\"\r\nimport { Text, TextField as RadixTextField } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { useResponsiveMapping, useSeverityColor } from \"../utils.ts\"\r\nimport { SizeMapping } from \"../constants.ts\"\r\nimport { InputProps } from \"./typings.ts\"\r\n\r\nimport styles from \"./Input.module.sass\"\r\n\r\nconst _Input = forwardRef(function Input(\r\n\t{\r\n\t\tclassName,\r\n\t\tleftSlot,\r\n\t\trightSlot,\r\n\t\tsize = \"medium\",\r\n\t\tshowInputLength,\r\n\t\tvalue,\r\n\t\tvariant,\r\n\t\tseverity = \"primary\",\r\n\t\t...rest\r\n\t}: InputProps,\r\n\tref: React.Ref<HTMLInputElement>,\r\n) {\r\n\tconst computedSize = useResponsiveMapping(size, SizeMapping)\r\n\r\n\tconst color = useSeverityColor(severity)\r\n\r\n\tconst displayInputLength = showInputLength || (showInputLength === undefined && rest.maxLength !== undefined)\r\n\tconst valueAsString = value !== undefined ? value.toString() : undefined\r\n\r\n\treturn (\r\n\t\t<RadixTextField.Root\r\n\t\t\tclassName={classNames(styles.wrapper, className, {\r\n\t\t\t\t[styles.ghost!]: variant === \"ghost\",\r\n\t\t\t\t[styles.accommodateCharCount!]: displayInputLength,\r\n\t\t\t})}\r\n\t\t\tsize={computedSize}\r\n\t\t\tvariant={variant !== \"ghost\" ? variant : undefined}\r\n\t\t\tcolor={color}\r\n\t\t>\r\n\t\t\t{leftSlot && <RadixTextField.Slot>{leftSlot}</RadixTextField.Slot>}\r\n\t\t\t<RadixTextField.Input\r\n\t\t\t\tclassName={classNames(styles.default, {\r\n\t\t\t\t\t[styles.noLeftIcon!]: !leftSlot,\r\n\t\t\t\t\t[styles.noRightIcon!]: !rightSlot,\r\n\t\t\t\t})}\r\n\t\t\t\tref={ref}\r\n\t\t\t\tvalue={value}\r\n\t\t\t\tsize={computedSize}\r\n\t\t\t\tvariant={variant !== \"ghost\" ? variant : undefined}\r\n\t\t\t\tcolor={color}\r\n\t\t\t\t{...rest}\r\n\t\t\t/>\r\n\t\t\t{rightSlot && <RadixTextField.Slot>{rightSlot}</RadixTextField.Slot>}\r\n\t\t\t{displayInputLength && (\r\n\t\t\t\t<Text as=\"p\" className={styles.charCount} size=\"1\" color=\"gray\">\r\n\t\t\t\t\t{rest.maxLength !== undefined\r\n\t\t\t\t\t\t? `${valueAsString?.length}/${rest.maxLength}`\r\n\t\t\t\t\t\t: `${valueAsString?.length}`}\r\n\t\t\t\t</Text>\r\n\t\t\t)}\r\n\t\t</RadixTextField.Root>\r\n\t)\r\n})\r\nexport const Input: FC<InputProps> = React.memo(_Input)\r\n","import { cloneElement, ComponentProps, CSSProperties, memo, ReactElement, useMemo } from \"react\"\r\nimport { Theme } from \"@radix-ui/themes\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\nimport { Severity } from \"../typings.ts\"\r\n\r\ninterface ChildProps {\r\n\t\"data-accent-color\": string\r\n\tstyle: CSSProperties\r\n}\r\ninterface IconColorUtilityProps {\r\n\tchildren: ReactElement\r\n}\r\ninterface IconColorUtilitySeverityProps extends IconColorUtilityProps {\r\n\tseverity: Severity\r\n\tcolor?: undefined\r\n}\r\n\r\ninterface IconColorUtilityColorProps extends IconColorUtilityProps {\r\n\tcolor: Exclude<ComponentProps<typeof Theme>[\"accentColor\"], undefined>\r\n\tseverity?: undefined\r\n}\r\n\r\n/** This component is used to provide Icons color based on Severity or a Radix theme accentColor */\r\nexport const IconColorUtility = memo(function IconColorUtility({\r\n\tcolor,\r\n\tseverity,\r\n\tchildren,\r\n}: IconColorUtilitySeverityProps | IconColorUtilityColorProps) {\r\n\tconst severityColor = useSeverityColor(severity ?? \"primary\")\r\n\r\n\tconst childProps: ChildProps = useMemo(\r\n\t\t() => ({\r\n\t\t\t\"data-accent-color\": severity && severityColor ? severityColor : color ? color : \"gray\",\r\n\t\t\tstyle: {\r\n\t\t\t\tcolor: \"var(--accent-a9)\",\r\n\t\t\t},\r\n\t\t}),\r\n\t\t[color, severity, severityColor],\r\n\t)\r\n\r\n\treturn cloneElement(children, { ...childProps })\r\n})\r\n","import React, { forwardRef, FC } from \"react\"\r\nimport { Popover as RadixPopover } from \"@radix-ui/themes\"\r\nimport { PopoverProps } from \"./typings.ts\"\r\n\r\nimport styles from \"./Popover.module.sass\"\r\nimport classNames from \"classnames\"\r\n\r\nconst _Popover = forwardRef(function Popover(\r\n\t{ className, trigger, open, onOpenChange, defaultOpen = false, modal = false, children, ...rest }: PopoverProps,\r\n\tref: React.Ref<HTMLDivElement>,\r\n) {\r\n\treturn (\r\n\t\t<RadixPopover.Root defaultOpen={defaultOpen} modal={modal} open={open} onOpenChange={onOpenChange}>\r\n\t\t\t<RadixPopover.Trigger>{trigger}</RadixPopover.Trigger>\r\n\t\t\t<RadixPopover.Content\r\n\t\t\t\tref={ref}\r\n\t\t\t\tclassName={classNames(\"overmap-popover\", className, styles.wrapper)}\r\n\t\t\t\t{...rest}\r\n\t\t\t>\r\n\t\t\t\t{children(RadixPopover.Close)}\r\n\t\t\t</RadixPopover.Content>\r\n\t\t</RadixPopover.Root>\r\n\t)\r\n})\r\nexport const Popover: FC<PopoverProps> = React.memo(_Popover)\r\n","import {\r\n\tCSSProperties,\r\n\tFC,\r\n\tmemo,\r\n\tuseCallback,\r\n\tuseEffect,\r\n\tuseMemo,\r\n\tuseRef,\r\n\tuseState,\r\n\tDispatch,\r\n\tSetStateAction,\r\n\tReactNode,\r\n\tReactElement,\r\n} from \"react\"\r\nimport { Box, Flex } from \"@radix-ui/themes\"\r\nimport { DragHandleDots2Icon } from \"@radix-ui/react-icons\"\r\nimport { NumberSize, Resizable, ResizeDirection } from \"re-resizable\"\r\nimport { Transition, TransitionStatus } from \"react-transition-group\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"./LeftAndRightPanels.module.sass\"\r\n\r\nconst DEFAULT_MIN_WIDTH = 200\r\nconst TRANSITION_DURATION = 150\r\n\r\nexport interface LeftAndRightPanelsProps {\r\n\t/** content to be rendered within the center panel */\r\n\tchildren: ReactNode\r\n\t/** state to determine whether to show or hide the left panel*/\r\n\tshowLeft?: boolean\r\n\t/** content to be rendered within the left panel*/\r\n\tleftPanel?: ReactElement\r\n\t/** minimum width of the left panel when resizing */\r\n\tleftMinWidth?: number\r\n\t/** maximum width of the left panel when resizing */\r\n\tleftMaxWidth?: number\r\n\t/** state to determine whether to show or hide the right panel*/\r\n\tshowRight?: boolean\r\n\t/** content to be rendered within the left panel*/\r\n\trightPanel?: ReactElement\r\n\t/** minimum width of the left panel when resizing */\r\n\trightMinWidth?: number\r\n\t/** maximum width of the left panel when resizing */\r\n\trightMaxWidth?: number\r\n\t/** used to disable or enable resizing on the left and right panels */\r\n\tresizeable?: { left?: boolean; right?: boolean }\r\n}\r\n\r\n/** Panels are graphical elements that divide a screen or window into distinct sections, each of which can contain\r\n * different types of content or functionality. They are often used to organize and present information in a structured\r\n * manner. In many graphical user interfaces (GUIs), panels are draggable and resizable, allowing users to customize\r\n * the layout to suit their preferences. Panels can be used for a variety of purposes, such as displaying navigation\r\n * menus, presenting data, providing tools or controls, or hosting multimedia content. LeftAndRightPanels renders main\r\n * content and provides left and right resizable, toggleable panels. This component can be rendered within any element\r\n * as its container and the Panels will be scoped to the height and appear to the left and right of that container. */\r\nexport const LeftAndRightPanels: FC<LeftAndRightPanelsProps> = memo(function Panels({\r\n\tchildren,\r\n\tshowLeft,\r\n\tleftPanel,\r\n\tleftMinWidth = DEFAULT_MIN_WIDTH,\r\n\tshowRight,\r\n\trightPanel,\r\n\trightMinWidth = DEFAULT_MIN_WIDTH,\r\n\tresizeable,\r\n}: LeftAndRightPanelsProps) {\r\n\tconst wrapperRef = useRef<HTMLDivElement>(null)\r\n\t// Left panel related state\r\n\tconst leftPanelRef = useRef<HTMLDivElement>(null)\r\n\tconst [leftPanelWidth, setLeftPanelWidth] = useState<number>(0)\r\n\tconst [leftPanelMaxWidth, setLeftPanelMaxWidth] = useState<number>()\r\n\t// Right panel related state\r\n\tconst rightPanelRef = useRef<HTMLDivElement>(null)\r\n\tconst [rightPanelWidth, setRightPanelWidth] = useState<number>(0)\r\n\tconst [rightPanelMaxWidth, setRightPanelMaxWidth] = useState<number>()\r\n\r\n\tconst handleResizePanel = useCallback(\r\n\t\t(\r\n\t\t\tresizedPanelWidth: number,\r\n\t\t\tsetResizedPanelWidth: Dispatch<SetStateAction<number>>,\r\n\t\t\tsetOtherPanelMaxWidth: Dispatch<SetStateAction<number | undefined>>,\r\n\t\t) => {\r\n\t\t\treturn (_event: MouseEvent | TouchEvent, _dir: ResizeDirection, _ref: HTMLElement, delta: NumberSize) => {\r\n\t\t\t\tif (!wrapperRef.current) return\r\n\t\t\t\tconst newWidth = resizedPanelWidth + delta.width\r\n\t\t\t\tsetOtherPanelMaxWidth(wrapperRef.current.clientWidth - newWidth)\r\n\t\t\t\tsetResizedPanelWidth(() => newWidth)\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t)\r\n\r\n\tconst handleResizeLeftPanel = useCallback(\r\n\t\t(_event: MouseEvent | TouchEvent, _dir: ResizeDirection, _ref: HTMLElement, delta: NumberSize) =>\r\n\t\t\thandleResizePanel(leftPanelWidth, setLeftPanelWidth, setRightPanelMaxWidth)(_event, _dir, _ref, delta),\r\n\t\t[handleResizePanel, leftPanelWidth],\r\n\t)\r\n\r\n\tconst handleResizeRightPanel = useCallback(\r\n\t\t(_event: MouseEvent | TouchEvent, _dir: ResizeDirection, _ref: HTMLElement, delta: NumberSize) =>\r\n\t\t\thandleResizePanel(rightPanelWidth, setRightPanelWidth, setLeftPanelMaxWidth)(_event, _dir, _ref, delta),\r\n\t\t[handleResizePanel, rightPanelWidth],\r\n\t)\r\n\r\n\t// Used to resize and update the other panel when a panel is opened\r\n\tconst handleResizeOtherPanelOnPanelOpen = useCallback(\r\n\t\t(\r\n\t\t\topeningPanelWidth: number,\r\n\t\t\topeningPanelMinWidth: number,\r\n\t\t\tsetOpeningPanelWidth: Dispatch<SetStateAction<number>>,\r\n\t\t\tsetOpeningPanelMaxWidth: Dispatch<SetStateAction<number | undefined>>,\r\n\t\t\totherPanelWidth: number,\r\n\t\t\totherPanelOpen: boolean | undefined,\r\n\t\t\tsetOtherPanelWidth: Dispatch<SetStateAction<number>>,\r\n\t\t\tsetOtherPanelMaxWidth: Dispatch<SetStateAction<number | undefined>>,\r\n\t\t) => {\r\n\t\t\tif (!wrapperRef.current) return\r\n\t\t\tlet newOpeningPanelWidth = openingPanelWidth\r\n\r\n\t\t\t// If first time opening, set its width to the specified min width\r\n\t\t\tif (newOpeningPanelWidth === 0) {\r\n\t\t\t\tnewOpeningPanelWidth = openingPanelMinWidth\r\n\t\t\t\tsetOpeningPanelWidth(newOpeningPanelWidth)\r\n\t\t\t}\r\n\r\n\t\t\tif (otherPanelOpen) {\r\n\t\t\t\t// calculate the new max width of the other panel based on the opened panels new width\r\n\t\t\t\tconst newOtherPanelMaxWidth = wrapperRef.current.clientWidth - newOpeningPanelWidth\r\n\t\t\t\tsetOtherPanelMaxWidth(newOtherPanelMaxWidth)\r\n\r\n\t\t\t\t// if the current width of the other panel exceeds its new max, set its width to its new max\r\n\t\t\t\tif (otherPanelWidth > newOtherPanelMaxWidth) {\r\n\t\t\t\t\tsetOtherPanelWidth(newOtherPanelMaxWidth)\r\n\t\t\t\t\t// now update the new max width of the opened panel after other panel has been resized\r\n\t\t\t\t\tsetOpeningPanelMaxWidth(wrapperRef.current.clientWidth - newOtherPanelMaxWidth)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t)\r\n\r\n\tconst handleResizeLeftPanelOnRightPanelOpen = useCallback(\r\n\t\t() =>\r\n\t\t\thandleResizeOtherPanelOnPanelOpen(\r\n\t\t\t\trightPanelWidth,\r\n\t\t\t\trightMinWidth,\r\n\t\t\t\tsetRightPanelWidth,\r\n\t\t\t\tsetRightPanelMaxWidth,\r\n\t\t\t\tleftPanelWidth,\r\n\t\t\t\tshowLeft,\r\n\t\t\t\tsetLeftPanelWidth,\r\n\t\t\t\tsetLeftPanelMaxWidth,\r\n\t\t\t),\r\n\t\t[handleResizeOtherPanelOnPanelOpen, leftPanelWidth, rightMinWidth, rightPanelWidth, showLeft],\r\n\t)\r\n\r\n\tconst handleResizeRightPanelOnLeftPanelOpen = useCallback(\r\n\t\t() =>\r\n\t\t\thandleResizeOtherPanelOnPanelOpen(\r\n\t\t\t\tleftPanelWidth,\r\n\t\t\t\tleftMinWidth,\r\n\t\t\t\tsetLeftPanelWidth,\r\n\t\t\t\tsetLeftPanelMaxWidth,\r\n\t\t\t\trightPanelWidth,\r\n\t\t\t\tshowRight,\r\n\t\t\t\tsetRightPanelWidth,\r\n\t\t\t\tsetRightPanelMaxWidth,\r\n\t\t\t),\r\n\t\t[handleResizeOtherPanelOnPanelOpen, leftMinWidth, leftPanelWidth, rightPanelWidth, showRight],\r\n\t)\r\n\r\n\tconst handleResizeOtherPanelOnPanelClose = useCallback(\r\n\t\t(otherPanelOpen: boolean | undefined, setOtherPanelMaxWidth: Dispatch<SetStateAction<number | undefined>>) => {\r\n\t\t\tif (!wrapperRef.current) return\r\n\t\t\t// Allow ability fpr other panel to fill entire wrapper container if open\r\n\t\t\tif (otherPanelOpen) setOtherPanelMaxWidth(wrapperRef.current.clientWidth)\r\n\t\t},\r\n\t\t[],\r\n\t)\r\n\r\n\tconst handleResizeLeftPanelOnRightPanelClose = useCallback(\r\n\t\t() => handleResizeOtherPanelOnPanelClose(showLeft, setLeftPanelMaxWidth),\r\n\t\t[handleResizeOtherPanelOnPanelClose, showLeft],\r\n\t)\r\n\r\n\tconst handleResizeRightPanelOnLeftPanelClose = useCallback(\r\n\t\t() => handleResizeOtherPanelOnPanelClose(showRight, setRightPanelMaxWidth),\r\n\t\t[handleResizeOtherPanelOnPanelClose, showRight],\r\n\t)\r\n\r\n\tconst resizeObserverCallback: ResizeObserverCallback = useCallback(() => {\r\n\t\tif (!wrapperRef.current) return\r\n\t\tsetLeftPanelMaxWidth(wrapperRef.current.clientWidth - (rightPanelRef.current?.clientWidth || 0))\r\n\t\tsetRightPanelMaxWidth(wrapperRef.current.clientWidth - (leftPanelRef.current?.clientWidth || 0))\r\n\t\tsetLeftPanelWidth(leftPanelRef.current?.clientWidth || 0)\r\n\t\tsetRightPanelWidth(rightPanelRef.current?.clientWidth || 0)\r\n\t}, [])\r\n\r\n\t// Set up resize observer on wrapper element to adjust width upon resizing\r\n\tuseEffect(() => {\r\n\t\tif (!wrapperRef.current) return\r\n\t\tconst resizeObserver = new ResizeObserver(resizeObserverCallback)\r\n\t\tresizeObserver.observe(wrapperRef.current)\r\n\t\treturn () => {\r\n\t\t\tresizeObserver.disconnect()\r\n\t\t}\r\n\t}, [resizeObserverCallback])\r\n\r\n\tconst leftPanelTransitionStyles: Record<TransitionStatus, CSSProperties> = useMemo(() => {\r\n\t\treturn {\r\n\t\t\tentering: {\r\n\t\t\t\ttransform: `translateX(-${leftPanelWidth}px)`,\r\n\t\t\t\tmarginRight: `-${leftPanelWidth}px`,\r\n\t\t\t\ttransitionProperty: \"transform, margin-right\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\tentered: {\r\n\t\t\t\ttransform: `translateX(0)`,\r\n\t\t\t\tmarginRight: 0,\r\n\t\t\t\ttransitionProperty: \"transform, margin-right\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\texiting: {\r\n\t\t\t\ttransform: `translateX(-${leftPanelWidth}px)`,\r\n\t\t\t\tmarginRight: `-${leftPanelWidth}px`,\r\n\t\t\t\ttransitionProperty: \"transform, margin-right\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\texited: {},\r\n\t\t\tunmounted: {},\r\n\t\t}\r\n\t}, [leftPanelWidth])\r\n\r\n\tconst rightPanelTransitionStyles: Record<TransitionStatus, CSSProperties> = useMemo(() => {\r\n\t\treturn {\r\n\t\t\tentering: {\r\n\t\t\t\ttransform: `translateX(${rightPanelWidth}px)`,\r\n\t\t\t\tmarginLeft: `${-rightPanelWidth}px`,\r\n\t\t\t\ttransitionProperty: \"transform, margin-left\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\tentered: {\r\n\t\t\t\ttransform: `translateX(0)`,\r\n\t\t\t\tmarginLeft: 0,\r\n\t\t\t\ttransitionProperty: \"transform, margin-left\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\texiting: {\r\n\t\t\t\ttransform: `translateX(${rightPanelWidth}px)`,\r\n\t\t\t\tmarginLeft: `${-rightPanelWidth}px`,\r\n\t\t\t\ttransitionProperty: \"transform, margin-left\",\r\n\t\t\t\ttransitionDuration: `${TRANSITION_DURATION}ms`,\r\n\t\t\t\ttransitionTimingFunction: \"linear\",\r\n\t\t\t},\r\n\t\t\texited: {},\r\n\t\t\tunmounted: {},\r\n\t\t}\r\n\t}, [rightPanelWidth])\r\n\r\n\treturn (\r\n\t\t<Flex\r\n\t\t\tclassName={styles.wrapper}\r\n\t\t\tstyle={{ minWidth: `${leftMinWidth + rightMinWidth}px` }}\r\n\t\t\tref={wrapperRef}\r\n\t\t\twidth=\"100%\"\r\n\t\t\theight=\"100%\"\r\n\t\t\tjustify=\"center\"\r\n\t\t\tm=\"0\"\r\n\t\t\tp=\"0\"\r\n\t\t>\r\n\t\t\t<Transition\r\n\t\t\t\tnodeRef={leftPanelRef}\r\n\t\t\t\ttimeout={!showLeft ? TRANSITION_DURATION : 0}\r\n\t\t\t\tin={showLeft}\r\n\t\t\t\tunmountOnExit\r\n\t\t\t\tonEntering={handleResizeRightPanelOnLeftPanelOpen}\r\n\t\t\t\tonExited={handleResizeRightPanelOnLeftPanelClose}\r\n\t\t\t>\r\n\t\t\t\t{(state) => (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tref={leftPanelRef}\r\n\t\t\t\t\t\tclassName={classNames(styles.panelContent, styles.left)}\r\n\t\t\t\t\t\tstyle={leftPanelTransitionStyles[state]}\r\n\t\t\t\t\t\twidth=\"auto\"\r\n\t\t\t\t\t\theight=\"100%\"\r\n\t\t\t\t\t\tm=\"0\"\r\n\t\t\t\t\t\tp=\"0\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Resizable\r\n\t\t\t\t\t\t\tclassName={styles.resizable}\r\n\t\t\t\t\t\t\tsize={{\r\n\t\t\t\t\t\t\t\twidth: leftPanelWidth,\r\n\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonResizeStop={handleResizeLeftPanel}\r\n\t\t\t\t\t\t\tenable={{ right: resizeable?.left !== undefined ? resizeable.left : true }}\r\n\t\t\t\t\t\t\tminWidth={leftMinWidth}\r\n\t\t\t\t\t\t\tmaxWidth={leftPanelMaxWidth}\r\n\t\t\t\t\t\t\thandleClasses={{ right: classNames(styles.resizeHandle, styles.left) }}\r\n\t\t\t\t\t\t\thandleComponent={{\r\n\t\t\t\t\t\t\t\tright: <DragHandleDots2Icon height=\"14px\" width=\"14px\" />,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{leftPanel}\r\n\t\t\t\t\t\t</Resizable>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Transition>\r\n\t\t\t<div className={styles.panelMainContent}>{children}</div>\r\n\t\t\t<Transition\r\n\t\t\t\tnodeRef={rightPanelRef}\r\n\t\t\t\ttimeout={!showRight ? TRANSITION_DURATION : 0}\r\n\t\t\t\tin={showRight}\r\n\t\t\t\tunmountOnExit\r\n\t\t\t\tonEntering={handleResizeLeftPanelOnRightPanelOpen}\r\n\t\t\t\tonExited={handleResizeLeftPanelOnRightPanelClose}\r\n\t\t\t>\r\n\t\t\t\t{(state) => (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tref={rightPanelRef}\r\n\t\t\t\t\t\tclassName={classNames(styles.panelContent, styles.right)}\r\n\t\t\t\t\t\tstyle={rightPanelTransitionStyles[state]}\r\n\t\t\t\t\t\twidth=\"auto\"\r\n\t\t\t\t\t\theight=\"100%\"\r\n\t\t\t\t\t\tm=\"0\"\r\n\t\t\t\t\t\tp=\"0\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Resizable\r\n\t\t\t\t\t\t\tclassName={styles.resizable}\r\n\t\t\t\t\t\t\tsize={{ width: rightPanelWidth, height: \"100%\" }}\r\n\t\t\t\t\t\t\tonResizeStop={handleResizeRightPanel}\r\n\t\t\t\t\t\t\tenable={{ left: resizeable?.right !== undefined ? resizeable.right : true }}\r\n\t\t\t\t\t\t\tminWidth={rightMinWidth}\r\n\t\t\t\t\t\t\tmaxWidth={rightPanelMaxWidth}\r\n\t\t\t\t\t\t\thandleClasses={{ left: classNames(styles.resizeHandle, styles.right) }}\r\n\t\t\t\t\t\t\thandleComponent={{ left: <DragHandleDots2Icon height=\"14px\" width=\"14px\" /> }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{rightPanel}\r\n\t\t\t\t\t\t</Resizable>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Transition>\r\n\t\t</Flex>\r\n\t)\r\n})\r\n","import React, { forwardRef, FC, useState, useCallback } from \"react\"\r\nimport { MultiPagePopoverOption, MultiPagePopoverPage, MultiPagePopoverProps } from \"./typings\"\r\nimport { Popover } from \"../Popover\"\r\nimport { Button } from \"../Buttons\"\r\nimport styles from \"./MultiPagePopover.module.sass\"\r\nimport classNames from \"classnames\"\r\nimport { Popover as RadixPopover } from \"@radix-ui/themes\"\r\n\r\nfunction getMultiPagePopoverContent(\r\n\tpopoverOption: MultiPagePopoverPage,\r\n\tsetMultiPagePopoverContent: React.Dispatch<React.SetStateAction<React.ReactNode>>,\r\n\tdirection: \"vertical\" | \"horizontal\",\r\n\tpage = 0,\r\n) {\r\n\tif (!popoverOption.options) {\r\n\t\treturn popoverOption.content || <></>\r\n\t}\r\n\tconst optionButtons = popoverOption.options.map((option: MultiPagePopoverOption, i) => (\r\n\t\t<Button\r\n\t\t\tkey={`${option.value}-page-${page}-button-${i}`}\r\n\t\t\tclassName={classNames(styles.optionsButton, option.buttonClassName)}\r\n\t\t\tvariant=\"ghost\"\r\n\t\t\tradius=\"large\"\r\n\t\t\tstyle={{\r\n\t\t\t\twidth: direction === \"vertical\" ? \"100%\" : \"auto\",\r\n\t\t\t}}\r\n\t\t\tseverity=\"info\"\r\n\t\t\thighContrast\r\n\t\t\tonClick={\r\n\t\t\t\toption.onClick ||\r\n\t\t\t\t(() =>\r\n\t\t\t\t\tsetMultiPagePopoverContent(\r\n\t\t\t\t\t\tgetMultiPagePopoverContent(option.page || {}, setMultiPagePopoverContent, direction, page + 1),\r\n\t\t\t\t\t))\r\n\t\t\t}\r\n\t\t>\r\n\t\t\t{option.label}\r\n\t\t</Button>\r\n\t))\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{popoverOption.title && <div className={styles.pageTitle}>{popoverOption.title}</div>}\r\n\t\t\t{popoverOption.content}\r\n\t\t\t<div\r\n\t\t\t\tclassName={classNames(styles.optionsButtonContainer, popoverOption.buttonsContainerClassName)}\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tflexDirection: direction === \"vertical\" ? \"column\" : \"row\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{optionButtons}\r\n\t\t\t</div>\r\n\t\t</>\r\n\t)\r\n}\r\n\r\nconst _MultiPagePopover = forwardRef(function MultiPagePopover(\r\n\t{ page, className, direction = \"vertical\", ...rest }: MultiPagePopoverProps,\r\n\tref: React.Ref<HTMLDivElement>,\r\n) {\r\n\tconst [popoverContent, setPopoverContent] = useState<React.ReactNode>(undefined)\r\n\r\n\tconst resetPopoverContent = useCallback(() => {\r\n\t\tsetPopoverContent(getMultiPagePopoverContent(page, setPopoverContent, direction, 0))\r\n\t}, [direction, page])\r\n\r\n\tconst multiPagePopoverContent = useCallback((_Close: typeof RadixPopover.Close) => popoverContent, [popoverContent])\r\n\r\n\treturn (\r\n\t\t<Popover\r\n\t\t\tclassName={classNames(styles.multiPagePopover, className)}\r\n\t\t\tref={ref}\r\n\t\t\tonOpenAutoFocus={resetPopoverContent}\r\n\t\t\tonCloseAutoFocus={resetPopoverContent}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t{(Close) => multiPagePopoverContent(Close)}\r\n\t\t</Popover>\r\n\t)\r\n})\r\nexport const MultiPagePopover: FC<MultiPagePopoverProps> = React.memo(_MultiPagePopover)\r\n","import { FC, forwardRef, memo, Ref, useMemo } from \"react\"\r\nimport { Text, TextArea as RadixTextArea } from \"@radix-ui/themes\"\r\nimport classNames from \"classnames\"\r\nimport { TextAreaProps } from \"./typings.ts\"\r\n\r\nimport styles from \"./Textarea.module.sass\"\r\nimport { useSeverityColor } from \"../utils.ts\"\r\n\r\nconst _TextArea = forwardRef(function TextArea(\r\n\t{\r\n\t\tclassName,\r\n\t\tshowInputLength,\r\n\t\tinputLengthTemplate,\r\n\t\tvalue,\r\n\t\tseverity = \"primary\",\r\n\t\tresize,\r\n\t\tvariant,\r\n\t\t...rest\r\n\t}: TextAreaProps,\r\n\tref: Ref<HTMLTextAreaElement>,\r\n) {\r\n\tconst severityColor = useSeverityColor(severity)\r\n\tconst infoColor = useSeverityColor(\"info\")\r\n\r\n\tconst displayInputLength =\r\n\t\tshowInputLength ||\r\n\t\t(showInputLength === undefined && (rest.maxLength !== undefined || rest.minLength !== undefined))\r\n\tconst valueAsString = value !== undefined ? value.toString() : \"\"\r\n\r\n\tconst displayInputLengthValue = useMemo(() => {\r\n\t\tif (inputLengthTemplate) {\r\n\t\t\tlet template = inputLengthTemplate.replace(\"{current}\", valueAsString.length.toString())\r\n\t\t\tif (rest.minLength !== undefined) {\r\n\t\t\t\ttemplate = template.replace(\"{min}\", rest.minLength.toString())\r\n\t\t\t}\r\n\t\t\tif (rest.maxLength !== undefined) {\r\n\t\t\t\ttemplate = template.replace(\"{max}\", rest.maxLength.toString())\r\n\t\t\t}\r\n\t\t\treturn template\r\n\t\t}\r\n\t\treturn valueAsString.length\r\n\t}, [inputLengthTemplate, rest.maxLength, rest.minLength, valueAsString.length])\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<RadixTextArea\r\n\t\t\t\tclassName={classNames(\"overmap-textarea\", className, {\r\n\t\t\t\t\t[styles.ghost!]: variant === \"ghost\",\r\n\t\t\t\t})}\r\n\t\t\t\tstyle={{ resize: resize }}\r\n\t\t\t\tvariant={variant !== \"ghost\" ? variant : undefined}\r\n\t\t\t\tref={ref}\r\n\t\t\t\tvalue={value}\r\n\t\t\t\tcolor={severityColor}\r\n\t\t\t\t{...rest}\r\n\t\t\t/>\r\n\t\t\t{displayInputLength && (\r\n\t\t\t\t<Text as=\"p\" className={styles.charCount} color={infoColor} align=\"right\">\r\n\t\t\t\t\t{displayInputLengthValue}\r\n\t\t\t\t</Text>\r\n\t\t\t)}\r\n\t\t</>\r\n\t)\r\n})\r\n\r\n/** The TextArea Component is a user interface element that allows users to input and edit multi-line text.\r\n It is commonly used in forms, chat applications, and other scenarios where longer text inputs are required.\r\n This TextArea is a wrapper of the RadixUI TextArea component found here https://www.radix-ui.com/themes/docs/components/text-area.\r\n */\r\nexport const TextArea: FC<TextAreaProps> = memo(_TextArea)\r\n","import { FC, forwardRef, memo, Ref } from \"react\"\nimport { Item, Root } from \"@radix-ui/react-toggle-group\"\nimport { ToggleGroupItemProps, ToggleGroupSingleProps } from \"./typings.ts\"\nimport { IconButton } from \"../Buttons\"\nimport classNames from \"classnames\"\nimport { ButtonGroup } from \"../ButtonGroup\"\n\nconst _ToggleGroup = forwardRef(function ToggleGroup(\n\t{\n\t\t// ToggleGroup Primitive Props\n\t\tloop,\n\t\ttype,\n\t\trovingFocus,\n\t\tvalue,\n\t\tonValueChange,\n\t\tdefaultValue,\n\t\tdisabled,\n\t\titems,\n\t\t// ButtonGroup Props\n\t\tclassName,\n\t\tdirection = \"row\",\n\t\t...rest\n\t}: ToggleGroupSingleProps,\n\tref: Ref<HTMLDivElement>,\n) {\n\treturn (\n\t\t<Root\n\t\t\ttype={type}\n\t\t\tclassName={classNames(\"overmap-toggle-group\", className)}\n\t\t\tref={ref}\n\t\t\tvalue={value}\n\t\t\tonValueChange={onValueChange}\n\t\t\tdisabled={disabled}\n\t\t\torientation={direction === \"column\" ? \"vertical\" : \"horizontal\"}\n\t\t\tloop={loop}\n\t\t\trovingFocus={rovingFocus}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tasChild\n\t\t>\n\t\t\t<ButtonGroup direction={direction} {...rest}>\n\t\t\t\t{items.map(({ children, ...rest }: ToggleGroupItemProps) => (\n\t\t\t\t\t<Item asChild {...rest} key={rest.value}>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tclassName={classNames(\"overmap-toggle-group-button\")}\n\t\t\t\t\t\t\taria-label={rest.value}\n\t\t\t\t\t\t\tvariant={rest.value === value ? \"solid\" : \"soft\"}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Item>\n\t\t\t\t))}\n\t\t\t</ButtonGroup>\n\t\t</Root>\n\t)\n})\n\n/** The Toggle Group Component is a user interface element that allows users to select a single option from a set of\n * mutually exclusive choices. It is commonly used in situations where users need to make a single selection from a\n * predefined list of options. This component is built using the ButtonGroup and IconButton components in combination\n * with the Radix Toggle Group primitive found here https://www.radix-ui.com/primitives/docs/components/toggle-group */\nexport const ToggleGroup: FC<ToggleGroupSingleProps> = memo(_ToggleGroup)\n","import { Root as ToolBarRoot, ToolbarProps } from \"@radix-ui/react-toolbar\"\r\nimport { ComponentProps, FC, forwardRef, memo, ReactNode } from \"react\"\r\nimport { Flex } from \"../Flex\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"./Toolbar.module.sass\"\r\n\r\n// TODO: Could possibly add vertical orientation to this\r\ninterface ToolBarRootProps extends Omit<ToolbarProps, \"dir\" | \"asChild\" | \"orientation\"> {\r\n\t/** the minimum gap between the left and right content in the Toolbar*/\r\n\tminContentGap?: ComponentProps<typeof Flex>[\"gap\"]\r\n}\r\n\r\n/** The Toolbar component is commonly used in web development to create a horizontal bar that contains various UI\r\n * elements, typically used for navigation, actions, or other functionalities. */\r\nexport const Root: FC<ToolBarRootProps> = memo(\r\n\tforwardRef<HTMLDivElement, ToolBarRootProps>(({ className, minContentGap = \"2\", children, ...rest }, ref) => {\r\n\t\treturn (\r\n\t\t\t<ToolBarRoot\r\n\t\t\t\tclassName={classNames(className, \"overmap-toolbar\", styles.default)}\r\n\t\t\t\tref={ref}\r\n\t\t\t\tasChild\r\n\t\t\t\t{...rest}\r\n\t\t\t>\r\n\t\t\t\t<Flex grow=\"1\" width=\"100%\" height=\"max-content\" align=\"center\" gap={minContentGap} wrap=\"nowrap\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</Flex>\r\n\t\t\t</ToolBarRoot>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\ninterface ContentProps {\r\n\tchildren: ReactNode\r\n\t/** spacing between the items in the content of the Toolbar\r\n\t * @default \"2\"\r\n\t * */\r\n\tgap?: ComponentProps<typeof Flex>[\"gap\"]\r\n}\r\n/** Container for content aligned to the left of the Toolbar */\r\nconst LeftContent: FC<ContentProps> = memo(\r\n\tforwardRef<HTMLDivElement, ContentProps>(({ children, gap = \"2\" }, ref) => {\r\n\t\treturn (\r\n\t\t\t<Flex ref={ref} grow=\"1\" width=\"max-content\" height=\"100%\" align=\"center\" gap={gap}>\r\n\t\t\t\t{children}\r\n\t\t\t</Flex>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\n/** Container for content aligned to the right of the Toolbar */\r\nconst RightContent: FC<ContentProps> = memo(\r\n\tforwardRef<HTMLDivElement, ContentProps>(({ children, gap }, ref) => {\r\n\t\treturn (\r\n\t\t\t<Flex\r\n\t\t\t\tref={ref}\r\n\t\t\t\tgrow=\"1\"\r\n\t\t\t\twidth=\"max-content\"\r\n\t\t\t\tdirection=\"row-reverse\"\r\n\t\t\t\theight=\"100%\"\r\n\t\t\t\talign=\"center\"\r\n\t\t\t\tgap={gap ? gap : \"2\"}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</Flex>\r\n\t\t)\r\n\t}),\r\n)\r\n\r\nexport const Toolbar = {\r\n\tRoot,\r\n\tLeftContent,\r\n\tRightContent,\r\n}\r\n","import { FC, forwardRef, memo, useCallback, useState } from \"react\"\r\nimport * as RadixToast from \"@radix-ui/react-toast\"\r\nimport { Callout, Flex } from \"@radix-ui/themes\"\r\nimport { Cross2Icon } from \"@radix-ui/react-icons\"\r\nimport { IconButton } from \"../Buttons\"\r\nimport { ToastProps } from \"./typings\"\r\nimport { useSeverityColor } from \"../utils\"\r\n\r\nimport styles from \"./Toast.module.sass\"\r\n\r\nconst _Toast = forwardRef<HTMLLIElement, ToastProps>(function Toast(\r\n\t{ title, description, icon, severity = \"primary\", size, onClose, sensitivity, action, ...rest },\r\n\tref,\r\n) {\r\n\tconst [open, setOpen] = useState(true)\r\n\tconst color = useSeverityColor(severity)\r\n\r\n\tconst handleOpenChange = useCallback(\r\n\t\t(open: boolean) => {\r\n\t\t\tif (!open && onClose) onClose()\r\n\t\t\tsetOpen(open)\r\n\t\t},\r\n\t\t[onClose],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<RadixToast.Root asChild ref={ref} {...rest} open={open} type={sensitivity} onOpenChange={handleOpenChange}>\r\n\t\t\t<Callout.Root className={styles.ToastRoot} variant=\"surface\" color={color} size={size}>\r\n\t\t\t\t<Flex width=\"100%\" align=\"center\" gap=\"4\" justify=\"between\">\r\n\t\t\t\t\t<Flex align=\"center\" gap=\"3\">\r\n\t\t\t\t\t\t<Callout.Icon>{icon}</Callout.Icon>\r\n\t\t\t\t\t\t<Flex direction=\"column\" gap=\"2\">\r\n\t\t\t\t\t\t\t<Flex direction=\"column\" gap=\"0\">\r\n\t\t\t\t\t\t\t\t<RadixToast.Title asChild>\r\n\t\t\t\t\t\t\t\t\t<Callout.Text size=\"3\" weight=\"medium\">\r\n\t\t\t\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t\t\t\t</Callout.Text>\r\n\t\t\t\t\t\t\t\t</RadixToast.Title>\r\n\t\t\t\t\t\t\t\t<RadixToast.Description asChild>\r\n\t\t\t\t\t\t\t\t\t<Callout.Text>{description}</Callout.Text>\r\n\t\t\t\t\t\t\t\t</RadixToast.Description>\r\n\t\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t\t\t{action && (\r\n\t\t\t\t\t\t\t\t<RadixToast.Action className={styles.actionButton} altText={action.altText} asChild>\r\n\t\t\t\t\t\t\t\t\t{action.content}\r\n\t\t\t\t\t\t\t\t</RadixToast.Action>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t</Flex>\r\n\r\n\t\t\t\t\t<RadixToast.Close asChild>\r\n\t\t\t\t\t\t<IconButton aria-label=\"Close\" variant=\"ghost\" severity={severity}>\r\n\t\t\t\t\t\t\t<Cross2Icon />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</RadixToast.Close>\r\n\t\t\t\t</Flex>\r\n\t\t\t</Callout.Root>\r\n\t\t</RadixToast.Root>\r\n\t)\r\n})\r\n\r\nexport const Toast: FC<ToastProps> = memo(_Toast)\r\n","import { createContext, useContext } from \"react\"\r\nimport { IToastContext } from \"./typings\"\r\n\r\nexport const ToastContext = createContext({} as IToastContext)\r\n\r\nexport const useToast = (): IToastContext => {\r\n\tconst context = useContext(ToastContext)\r\n\r\n\tif (!context) {\r\n\t\tthrow new Error(\"useToast must be used within a ToastProvider\")\r\n\t}\r\n\r\n\treturn context\r\n}\r\n","import { memo, useState, FC, useMemo, useCallback, useEffect } from \"react\"\r\nimport { IToastContext, SimpleToastProps, ToastContextProviderProps, ToastProps } from \"./typings\"\r\nimport { Toast } from \"./Toast\"\r\nimport { ToastProvider as RadixToastProvider, ToastViewport } from \"@radix-ui/react-toast\"\r\nimport { ToastContext } from \"./ToastContext\"\r\nimport styles from \"./Toast.module.sass\"\r\nimport classNames from \"classnames\"\r\n\r\ninterface ToastArgs extends ToastProps {\r\n\tid: string\r\n\ttimeout: NodeJS.Timeout\r\n}\r\n\r\n// average reading speed is 240 words per minute\r\nconst WORDS_PER_SECOND = 240 / 60\r\n// 5 seconds is the minimum duration for a toast\r\nconst MIN_DURATION = 5000\r\n\r\nenum CloseReason {\r\n\tManual,\r\n\tTimeout,\r\n}\r\n\r\nconst calculatedDuration = (toast: ToastProps) => {\r\n\t// if the user has passed a duration valid, use that instead\r\n\tif (toast.duration && toast.duration >= MIN_DURATION) return toast.duration\r\n\r\n\t// error messages should be displayed for longer\r\n\tconst severityFactor = toast.severity === \"danger\" ? 1.5 : 1\r\n\t// count the number of words in the title and description\r\n\tconst words = toast.description.split(\" \").length + toast.title.split(\" \").length\r\n\t// calculate the duration based on the number of words and the severity\r\n\tconst duration = (MIN_DURATION + words / WORDS_PER_SECOND) * severityFactor\r\n\treturn duration\r\n}\r\n\r\n/** this is a hack to allow toasts to be shown outside of components where hooks cannot be used */\r\n// eslint-disable-next-line react-refresh/only-export-components\r\nexport let unsafeShowToast: ((toastProps: ToastProps) => void) | undefined = undefined\r\n\r\n/** Toasts will be displayed in the top-right handle corner of the screen */\r\nexport const ToastProvider: FC<ToastContextProviderProps> = memo(function ToastContextProvider({\r\n\tchildren,\r\n\t// Use this class to change where the viewport for the toasts should be\r\n\tclassName,\r\n\thotkey,\r\n\t...rest\r\n}: ToastContextProviderProps) {\r\n\tconst [toasts, setToasts] = useState<ToastArgs[]>([])\r\n\r\n\tconst handleCloseToast = useCallback((id: string, reason: CloseReason, callback?: () => void) => {\r\n\t\tsetToasts((prevToasts) => {\r\n\t\t\tconst toast = prevToasts.find((toast) => toast.id === id)\r\n\t\t\t// clear the timeout if the toast is being closed manually\r\n\t\t\tif (toast && reason === CloseReason.Manual) clearTimeout(toast.timeout)\r\n\r\n\t\t\treturn prevToasts.filter((toast) => toast.id !== id)\r\n\t\t})\r\n\r\n\t\tif (callback) callback()\r\n\t}, [])\r\n\r\n\tconst toastContextValue = useMemo<IToastContext>(() => {\r\n\t\tlet counter = 0\r\n\r\n\t\tconst showToast = (toastProps: ToastProps) => {\r\n\t\t\tconst duration = calculatedDuration(toastProps)\r\n\t\t\tconst id = counter.toString()\r\n\t\t\tcounter += 1 // increment the counter so that ids are unique\r\n\r\n\t\t\t// manually close the toast after the duration has passed\r\n\t\t\t// this is necessary because the duration prop is reset on re-render\r\n\t\t\tconst pending = setTimeout(() => handleCloseToast(id, CloseReason.Timeout, toastProps.onClose), duration)\r\n\r\n\t\t\tsetToasts((prevToasts) => [...prevToasts, { ...toastProps, timeout: pending, duration, id }])\r\n\t\t}\r\n\t\tconst showPrimary = (toastProps: SimpleToastProps) => showToast({ ...toastProps, severity: \"primary\" })\r\n\t\tconst showSuccess = (toastProps: SimpleToastProps) => showToast({ ...toastProps, severity: \"success\" })\r\n\t\tconst showError = (toastProps: SimpleToastProps) => showToast({ ...toastProps, severity: \"danger\" })\r\n\t\tconst showInfo = (toastProps: SimpleToastProps) => showToast({ ...toastProps, severity: \"info\" })\r\n\t\tconst showWarning = (toastProps: SimpleToastProps) => showToast({ ...toastProps, severity: \"warning\" })\r\n\r\n\t\tunsafeShowToast = showToast\r\n\r\n\t\treturn {\r\n\t\t\tshowToast,\r\n\t\t\tshowPrimary,\r\n\t\t\tshowSuccess,\r\n\t\t\tshowError,\r\n\t\t\tshowInfo,\r\n\t\t\tshowWarning,\r\n\t\t}\r\n\t}, [handleCloseToast])\r\n\r\n\t// clear all timeouts when the component unmounts\r\n\tuseEffect(() => {\r\n\t\treturn () => {\r\n\t\t\tfor (const { timeout } of toasts) clearTimeout(timeout)\r\n\t\t}\r\n\t\t// only run this effect when the component unmounts\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [])\r\n\r\n\treturn (\r\n\t\t<ToastContext.Provider value={toastContextValue}>\r\n\t\t\t<RadixToastProvider {...rest}>\r\n\t\t\t\t{children}\r\n\r\n\t\t\t\t<ToastViewport className={classNames(className, styles.ToastViewport)} hotkey={hotkey} />\r\n\r\n\t\t\t\t{toasts.map(({ id, onClose, ...toastProps }) => (\r\n\t\t\t\t\t<Toast key={id} {...toastProps} onClose={() => handleCloseToast(id, CloseReason.Manual, onClose)} />\r\n\t\t\t\t))}\r\n\t\t\t</RadixToastProvider>\r\n\t\t</ToastContext.Provider>\r\n\t)\r\n})\r\n","import { ComponentProps, forwardRef, memo } from \"react\"\r\nimport { Flex, Tooltip as RadixToolTip } from \"@radix-ui/themes\"\r\n\r\nimport classNames from \"classnames\"\r\nimport styles from \"./Tooltip.module.sass\"\r\ninterface TooltipProps extends Omit<ComponentProps<typeof RadixToolTip>, \"asChild\"> {}\r\nexport const Tooltip = memo(\r\n\tforwardRef<HTMLDivElement, TooltipProps>(({ className, children, content, ...rest }, ref) => {\r\n\t\treturn (\r\n\t\t\t<RadixToolTip\r\n\t\t\t\tclassName={classNames(\"overmap-tooltip\", className, styles.default)}\r\n\t\t\t\tref={ref}\r\n\t\t\t\tcontent={\r\n\t\t\t\t\t<Flex align=\"center\" gap=\"1\" width=\"max-content\" height=\"max-content\" justify=\"center\">\r\n\t\t\t\t\t\t{content}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t}\r\n\t\t\t\t{...rest}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</RadixToolTip>\r\n\t\t)\r\n\t}),\r\n)\r\n","import { ElementRef, FC, ForwardRefExoticComponent, forwardRef, memo } from \"react\"\nimport { MarginProps, Text as RadixText } from \"@radix-ui/themes\"\nimport classNames from \"classnames\"\nimport styles from \"./ Text.module.sass\"\nimport { Severity } from \"../typings\"\nimport { useSeverityColor } from \"..\"\n\ntype RadixTextProps = typeof RadixText extends ForwardRefExoticComponent<infer P> ? P : never\n\nexport type TextProps = Omit<RadixTextProps, keyof MarginProps | \"ref\" | \"asChild\" | \"color\"> & {\n\t/** If true, the text will not wrap, but instead will truncate with a text overflow ellipsis.\n\t * @default false\n\t */\n\tnoWrap?: boolean\n\tseverity?: Severity\n\t/** @default span */\n\tas?: RadixTextProps[\"as\"]\n\t/** @default 3 */\n\tsize?: RadixTextProps[\"size\"]\n}\n\n/**\n * A foundational text primitive.\n *\n * Use the `as` prop to render text as a `p`, `label`, `div` or `span`. This prop is purely semantic and does not alter visual appearance.\n *\n * For the complete documentation, refer to https://www.radix-ui.com/themes/docs/components/text.\n */\nexport const Text: FC<TextProps> = memo(\n\tforwardRef<ElementRef<\"span\">, TextProps>(({ className, noWrap, severity, as, ...props }, ref) => {\n\t\tconst color = useSeverityColor(severity)\n\t\treturn (\n\t\t\t<RadixText\n\t\t\t\tref={ref}\n\t\t\t\t// bypassing incorrect TS error\n\t\t\t\tas={as as undefined}\n\t\t\t\tclassName={classNames(className, { [styles.noWrap!]: noWrap })}\n\t\t\t\tcolor={color}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t)\n\t}),\n)\n","import { Theme } from \"@radix-ui/themes\"\r\nimport { ComponentProps, FC, forwardRef, memo } from \"react\"\r\n// css file contains updates to the default radix tokens\r\nimport \"./DefaultTheme.css\"\r\n\r\nexport type DefaultThemeProps = ComponentProps<typeof Theme>\r\n\r\nexport const DefaultTheme: FC<DefaultThemeProps> = memo(\r\n\tforwardRef<HTMLDivElement, DefaultThemeProps>((props, ref) => {\r\n\t\tconst { panelBackground = \"solid\", radius = \"full\", ...rest } = props\r\n\t\treturn <Theme panelBackground={panelBackground} radius={radius} ref={ref} {...rest} />\r\n\t}),\r\n)\r\n","import { FC, forwardRef, memo } from \"react\"\r\nimport { Separator as RadixSeparator, Text, Flex } from \"@radix-ui/themes\"\r\nimport { SeparatorProps } from \"./typings.ts\"\r\nimport { useResponsiveMapping, useSeverityColor } from \"../utils.ts\"\r\nimport classNames from \"classnames\"\r\n\r\nimport styles from \"./Separator.module.sass\"\r\n\r\n/** This mapping is required to ensure that size \"4\" of the Radix-UI Separator has the same functionality in this\r\n * Separator component, that is, to fill all space in its container */\r\nconst SeparatorSizeMapping: Record<\"1\" | \"2\" | \"3\" | \"4\", \"max-content\" | \"100%\"> = {\r\n\t\"1\": \"max-content\",\r\n\t\"2\": \"max-content\",\r\n\t\"3\": \"max-content\",\r\n\t\"4\": \"100%\",\r\n}\r\n\r\nconst _Separator = forwardRef<HTMLDivElement, SeparatorProps>(function Separator(\r\n\t{\r\n\t\tclassName,\r\n\t\tseverity = \"info\",\r\n\t\ttextWeight = \"light\",\r\n\t\tgap = \"1\",\r\n\t\ttext,\r\n\t\torientation = \"horizontal\",\r\n\t\tsize,\r\n\t\tweight = \"medium\",\r\n\t\t...rest\r\n\t},\r\n\tref,\r\n) {\r\n\tconst computedSizing = useResponsiveMapping(size, SeparatorSizeMapping)\r\n\tconst severityColor = useSeverityColor(severity)\r\n\treturn (\r\n\t\t<Flex\r\n\t\t\tclassName={classNames(\"overmap-separator\", className, {\r\n\t\t\t\t[styles.light!]: weight === \"light\",\r\n\t\t\t\t[styles.bold!]: weight === \"bold\",\r\n\t\t\t\t[styles.full!]: weight === \"full\",\r\n\t\t\t})}\r\n\t\t\tref={ref}\r\n\t\t\twidth={orientation === \"horizontal\" ? computedSizing : \"max-content\"}\r\n\t\t\theight={orientation === \"vertical\" ? computedSizing : \"max-content\"}\r\n\t\t\tdirection={orientation === \"vertical\" ? \"column\" : \"row\"}\r\n\t\t\talign=\"center\"\r\n\t\t\tgap={gap}\r\n\t\t>\r\n\t\t\t<RadixSeparator size={size} orientation={orientation} color={severityColor} {...rest} />\r\n\t\t\t{text && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<Text className={styles.Text} as=\"span\" size=\"1\" weight={textWeight} color={severityColor}>\r\n\t\t\t\t\t\t{text}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t\t<RadixSeparator size={size} orientation={orientation} color={severityColor} {...rest} />\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t</Flex>\r\n\t)\r\n})\r\n\r\nexport const Separator: FC<SeparatorProps> = memo(_Separator)\r\n","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","import {useCallback as $3vqmr$useCallback} from \"react\";\n\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */ function $6ed0406888f73fc4$var$setRef(ref, value) {\n if (typeof ref === 'function') ref(value);\n else if (ref !== null && ref !== undefined) ref.current = value;\n}\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */ function $6ed0406888f73fc4$export$43e446d32b3d21af(...refs) {\n return (node)=>refs.forEach((ref)=>$6ed0406888f73fc4$var$setRef(ref, node)\n )\n ;\n}\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */ function $6ed0406888f73fc4$export$c7b2cbe3552a0d05(...refs) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return $3vqmr$useCallback($6ed0406888f73fc4$export$43e446d32b3d21af(...refs), refs);\n}\n\n\n\n\nexport {$6ed0406888f73fc4$export$43e446d32b3d21af as composeRefs, $6ed0406888f73fc4$export$c7b2cbe3552a0d05 as useComposedRefs};\n//# sourceMappingURL=index.mjs.map\n","import {createContext as $3bkAK$createContext, useMemo as $3bkAK$useMemo, createElement as $3bkAK$createElement, useContext as $3bkAK$useContext} from \"react\";\n\n\nfunction $c512c27ab02ef895$export$fd42f52fd3ae1109(rootComponentName, defaultContext) {\n const Context = /*#__PURE__*/ $3bkAK$createContext(defaultContext);\n function Provider(props) {\n const { children: children , ...context } = props; // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = $3bkAK$useMemo(()=>context\n , Object.values(context));\n return /*#__PURE__*/ $3bkAK$createElement(Context.Provider, {\n value: value\n }, children);\n }\n function useContext(consumerName) {\n const context = $3bkAK$useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext; // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n Provider.displayName = rootComponentName + 'Provider';\n return [\n Provider,\n useContext\n ];\n}\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/ function $c512c27ab02ef895$export$50c7b4e9d9f19c1(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/ function $c512c27ab02ef895$export$fd42f52fd3ae1109(rootComponentName, defaultContext) {\n const BaseContext = /*#__PURE__*/ $3bkAK$createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [\n ...defaultContexts,\n defaultContext\n ];\n function Provider(props) {\n const { scope: scope , children: children , ...context } = props;\n const Context = (scope === null || scope === void 0 ? void 0 : scope[scopeName][index]) || BaseContext; // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = $3bkAK$useMemo(()=>context\n , Object.values(context));\n return /*#__PURE__*/ $3bkAK$createElement(Context.Provider, {\n value: value\n }, children);\n }\n function useContext(consumerName, scope) {\n const Context = (scope === null || scope === void 0 ? void 0 : scope[scopeName][index]) || BaseContext;\n const context = $3bkAK$useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext; // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n Provider.displayName = rootComponentName + 'Provider';\n return [\n Provider,\n useContext\n ];\n }\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/ const createScope = ()=>{\n const scopeContexts = defaultContexts.map((defaultContext)=>{\n return /*#__PURE__*/ $3bkAK$createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = (scope === null || scope === void 0 ? void 0 : scope[scopeName]) || scopeContexts;\n return $3bkAK$useMemo(()=>({\n [`__scope${scopeName}`]: {\n ...scope,\n [scopeName]: contexts\n }\n })\n , [\n scope,\n contexts\n ]);\n };\n };\n createScope.scopeName = scopeName;\n return [\n $c512c27ab02ef895$export$fd42f52fd3ae1109,\n $c512c27ab02ef895$var$composeContextScopes(createScope, ...createContextScopeDeps)\n ];\n}\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/ function $c512c27ab02ef895$var$composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope1 = ()=>{\n const scopeHooks = scopes.map((createScope)=>({\n useScope: createScope(),\n scopeName: createScope.scopeName\n })\n );\n return function useComposedScopes(overrideScopes) {\n const nextScopes1 = scopeHooks.reduce((nextScopes, { useScope: useScope , scopeName: scopeName })=>{\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return {\n ...nextScopes,\n ...currentScope\n };\n }, {});\n return $3bkAK$useMemo(()=>({\n [`__scope${baseScope.scopeName}`]: nextScopes1\n })\n , [\n nextScopes1\n ]);\n };\n };\n createScope1.scopeName = baseScope.scopeName;\n return createScope1;\n}\n\n\n\n\nexport {$c512c27ab02ef895$export$fd42f52fd3ae1109 as createContext, $c512c27ab02ef895$export$50c7b4e9d9f19c1 as createContextScope};\n//# sourceMappingURL=index.mjs.map\n","function $e42e1063c40fb3ef$export$b9ecd428b558ff10(originalEventHandler, ourEventHandler, { checkForDefaultPrevented: checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler === null || originalEventHandler === void 0 || originalEventHandler(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) return ourEventHandler === null || ourEventHandler === void 0 ? void 0 : ourEventHandler(event);\n };\n}\n\n\n\n\nexport {$e42e1063c40fb3ef$export$b9ecd428b558ff10 as composeEventHandlers};\n//# sourceMappingURL=index.mjs.map\n","import {useRef as $lwiWj$useRef, useEffect as $lwiWj$useEffect, useMemo as $lwiWj$useMemo} from \"react\";\n\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */ function $b1b2314f5f9a1d84$export$25bec8c6f54ee79a(callback) {\n const callbackRef = $lwiWj$useRef(callback);\n $lwiWj$useEffect(()=>{\n callbackRef.current = callback;\n }); // https://github.com/facebook/react/issues/19240\n return $lwiWj$useMemo(()=>(...args)=>{\n var _callbackRef$current;\n return (_callbackRef$current = callbackRef.current) === null || _callbackRef$current === void 0 ? void 0 : _callbackRef$current.call(callbackRef, ...args);\n }\n , []);\n}\n\n\n\n\nexport {$b1b2314f5f9a1d84$export$25bec8c6f54ee79a as useCallbackRef};\n//# sourceMappingURL=index.mjs.map\n","import {useCallback as $bnPw9$useCallback, useState as $bnPw9$useState, useRef as $bnPw9$useRef, useEffect as $bnPw9$useEffect} from \"react\";\nimport {useCallbackRef as $bnPw9$useCallbackRef} from \"@radix-ui/react-use-callback-ref\";\n\n\n\nfunction $71cd76cc60e0454e$export$6f32135080cb4c3({ prop: prop , defaultProp: defaultProp , onChange: onChange = ()=>{} }) {\n const [uncontrolledProp, setUncontrolledProp] = $71cd76cc60e0454e$var$useUncontrolledState({\n defaultProp: defaultProp,\n onChange: onChange\n });\n const isControlled = prop !== undefined;\n const value1 = isControlled ? prop : uncontrolledProp;\n const handleChange = $bnPw9$useCallbackRef(onChange);\n const setValue = $bnPw9$useCallback((nextValue)=>{\n if (isControlled) {\n const setter = nextValue;\n const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n if (value !== prop) handleChange(value);\n } else setUncontrolledProp(nextValue);\n }, [\n isControlled,\n prop,\n setUncontrolledProp,\n handleChange\n ]);\n return [\n value1,\n setValue\n ];\n}\nfunction $71cd76cc60e0454e$var$useUncontrolledState({ defaultProp: defaultProp , onChange: onChange }) {\n const uncontrolledState = $bnPw9$useState(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = $bnPw9$useRef(value);\n const handleChange = $bnPw9$useCallbackRef(onChange);\n $bnPw9$useEffect(()=>{\n if (prevValueRef.current !== value) {\n handleChange(value);\n prevValueRef.current = value;\n }\n }, [\n value,\n prevValueRef,\n handleChange\n ]);\n return uncontrolledState;\n}\n\n\n\n\nexport {$71cd76cc60e0454e$export$6f32135080cb4c3 as useControllableState};\n//# sourceMappingURL=index.mjs.map\n","import {useRef as $8LvvK$useRef, useMemo as $8LvvK$useMemo} from \"react\";\n\n\nfunction $010c2913dbd2fe3d$export$5cae361ad82dce8b(value) {\n const ref = $8LvvK$useRef({\n value: value,\n previous: value\n }); // We compare values before making an update to ensure that\n // a change has been made. This ensures the previous value is\n // persisted correctly between renders.\n return $8LvvK$useMemo(()=>{\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [\n value\n ]);\n}\n\n\n\n\nexport {$010c2913dbd2fe3d$export$5cae361ad82dce8b as usePrevious};\n//# sourceMappingURL=index.mjs.map\n","import {useLayoutEffect as $dxlwH$useLayoutEffect} from \"react\";\n\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */ const $9f79659886946c16$export$e5c5a5f917a5871c = Boolean(globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) ? $dxlwH$useLayoutEffect : ()=>{};\n\n\n\n\nexport {$9f79659886946c16$export$e5c5a5f917a5871c as useLayoutEffect};\n//# sourceMappingURL=index.mjs.map\n","import {useState as $9gyGR$useState} from \"react\";\nimport {useLayoutEffect as $9gyGR$useLayoutEffect} from \"@radix-ui/react-use-layout-effect\";\n\n\n\nfunction $db6c3485150b8e66$export$1ab7ae714698c4b8(element) {\n const [size, setSize] = $9gyGR$useState(undefined);\n $9gyGR$useLayoutEffect(()=>{\n if (element) {\n // provide size as early as possible\n setSize({\n width: element.offsetWidth,\n height: element.offsetHeight\n });\n const resizeObserver = new ResizeObserver((entries)=>{\n if (!Array.isArray(entries)) return;\n // Since we only observe the one element, we don't need to loop over the\n // array\n if (!entries.length) return;\n const entry = entries[0];\n let width;\n let height;\n if ('borderBoxSize' in entry) {\n const borderSizeEntry = entry['borderBoxSize']; // iron out differences between browsers\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize['inlineSize'];\n height = borderSize['blockSize'];\n } else {\n // for browsers that don't support `borderBoxSize`\n // we calculate it ourselves to get the correct border box.\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({\n width: width,\n height: height\n });\n });\n resizeObserver.observe(element, {\n box: 'border-box'\n });\n return ()=>resizeObserver.unobserve(element)\n ;\n } else // We only want to reset to `undefined` when the element becomes `null`,\n // not if it changes to another element.\n setSize(undefined);\n }, [\n element\n ]);\n return size;\n}\n\n\n\n\nexport {$db6c3485150b8e66$export$1ab7ae714698c4b8 as useSize};\n//# sourceMappingURL=index.mjs.map\n","import {Children as $iqq3r$Children, cloneElement as $iqq3r$cloneElement, useState as $iqq3r$useState, useRef as $iqq3r$useRef, useEffect as $iqq3r$useEffect, useCallback as $iqq3r$useCallback, useReducer as $iqq3r$useReducer} from \"react\";\nimport {flushSync as $iqq3r$flushSync} from \"react-dom\";\nimport {useComposedRefs as $iqq3r$useComposedRefs} from \"@radix-ui/react-compose-refs\";\nimport {useLayoutEffect as $iqq3r$useLayoutEffect} from \"@radix-ui/react-use-layout-effect\";\n\n\n\n\n\n\nfunction $fe963b355347cc68$export$3e6543de14f8614f(initialState, machine) {\n return $iqq3r$useReducer((state, event)=>{\n const nextState = machine[state][event];\n return nextState !== null && nextState !== void 0 ? nextState : state;\n }, initialState);\n}\n\n\nconst $921a889cee6df7e8$export$99c2b779aa4e8b8b = (props)=>{\n const { present: present , children: children } = props;\n const presence = $921a889cee6df7e8$var$usePresence(present);\n const child = typeof children === 'function' ? children({\n present: presence.isPresent\n }) : $iqq3r$Children.only(children);\n const ref = $iqq3r$useComposedRefs(presence.ref, child.ref);\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? /*#__PURE__*/ $iqq3r$cloneElement(child, {\n ref: ref\n }) : null;\n};\n$921a889cee6df7e8$export$99c2b779aa4e8b8b.displayName = 'Presence';\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/ function $921a889cee6df7e8$var$usePresence(present) {\n const [node1, setNode] = $iqq3r$useState();\n const stylesRef = $iqq3r$useRef({});\n const prevPresentRef = $iqq3r$useRef(present);\n const prevAnimationNameRef = $iqq3r$useRef('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = $fe963b355347cc68$export$3e6543de14f8614f(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended'\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted'\n },\n unmounted: {\n MOUNT: 'mounted'\n }\n });\n $iqq3r$useEffect(()=>{\n const currentAnimationName = $921a889cee6df7e8$var$getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [\n state\n ]);\n $iqq3r$useLayoutEffect(()=>{\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = $921a889cee6df7e8$var$getAnimationName(styles);\n if (present) send('MOUNT');\n else if (currentAnimationName === 'none' || (styles === null || styles === void 0 ? void 0 : styles.display) === 'none') // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */ const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) send('ANIMATION_OUT');\n else send('UNMOUNT');\n }\n prevPresentRef.current = present;\n }\n }, [\n present,\n send\n ]);\n $iqq3r$useLayoutEffect(()=>{\n if (node1) {\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */ const handleAnimationEnd = (event)=>{\n const currentAnimationName = $921a889cee6df7e8$var$getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node1 && isCurrentAnimation) // With React 18 concurrency this update is applied\n // a frame after the animation ends, creating a flash of visible content.\n // By manually flushing we ensure they sync within a frame, removing the flash.\n $iqq3r$flushSync(()=>send('ANIMATION_END')\n );\n };\n const handleAnimationStart = (event)=>{\n if (event.target === node1) // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = $921a889cee6df7e8$var$getAnimationName(stylesRef.current);\n };\n node1.addEventListener('animationstart', handleAnimationStart);\n node1.addEventListener('animationcancel', handleAnimationEnd);\n node1.addEventListener('animationend', handleAnimationEnd);\n return ()=>{\n node1.removeEventListener('animationstart', handleAnimationStart);\n node1.removeEventListener('animationcancel', handleAnimationEnd);\n node1.removeEventListener('animationend', handleAnimationEnd);\n };\n } else // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }, [\n node1,\n send\n ]);\n return {\n isPresent: [\n 'mounted',\n 'unmountSuspended'\n ].includes(state),\n ref: $iqq3r$useCallback((node)=>{\n if (node) stylesRef.current = getComputedStyle(node);\n setNode(node);\n }, [])\n };\n}\n/* -----------------------------------------------------------------------------------------------*/ function $921a889cee6df7e8$var$getAnimationName(styles) {\n return (styles === null || styles === void 0 ? void 0 : styles.animationName) || 'none';\n}\n\n\n\n\nexport {$921a889cee6df7e8$export$99c2b779aa4e8b8b as Presence};\n//# sourceMappingURL=index.mjs.map\n","import $9IrjX$babelruntimehelpersesmextends from \"@babel/runtime/helpers/esm/extends\";\nimport {forwardRef as $9IrjX$forwardRef, Children as $9IrjX$Children, isValidElement as $9IrjX$isValidElement, createElement as $9IrjX$createElement, cloneElement as $9IrjX$cloneElement, Fragment as $9IrjX$Fragment} from \"react\";\nimport {composeRefs as $9IrjX$composeRefs} from \"@radix-ui/react-compose-refs\";\n\n\n\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/ const $5e63c961fc1ce211$export$8c6ed5c666ac1360 = /*#__PURE__*/ $9IrjX$forwardRef((props, forwardedRef)=>{\n const { children: children , ...slotProps } = props;\n const childrenArray = $9IrjX$Children.toArray(children);\n const slottable = childrenArray.find($5e63c961fc1ce211$var$isSlottable);\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child)=>{\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if ($9IrjX$Children.count(newElement) > 1) return $9IrjX$Children.only(null);\n return /*#__PURE__*/ $9IrjX$isValidElement(newElement) ? newElement.props.children : null;\n } else return child;\n });\n return /*#__PURE__*/ $9IrjX$createElement($5e63c961fc1ce211$var$SlotClone, $9IrjX$babelruntimehelpersesmextends({}, slotProps, {\n ref: forwardedRef\n }), /*#__PURE__*/ $9IrjX$isValidElement(newElement) ? /*#__PURE__*/ $9IrjX$cloneElement(newElement, undefined, newChildren) : null);\n }\n return /*#__PURE__*/ $9IrjX$createElement($5e63c961fc1ce211$var$SlotClone, $9IrjX$babelruntimehelpersesmextends({}, slotProps, {\n ref: forwardedRef\n }), children);\n});\n$5e63c961fc1ce211$export$8c6ed5c666ac1360.displayName = 'Slot';\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/ const $5e63c961fc1ce211$var$SlotClone = /*#__PURE__*/ $9IrjX$forwardRef((props, forwardedRef)=>{\n const { children: children , ...slotProps } = props;\n if (/*#__PURE__*/ $9IrjX$isValidElement(children)) return /*#__PURE__*/ $9IrjX$cloneElement(children, {\n ...$5e63c961fc1ce211$var$mergeProps(slotProps, children.props),\n ref: forwardedRef ? $9IrjX$composeRefs(forwardedRef, children.ref) : children.ref\n });\n return $9IrjX$Children.count(children) > 1 ? $9IrjX$Children.only(null) : null;\n});\n$5e63c961fc1ce211$var$SlotClone.displayName = 'SlotClone';\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/ const $5e63c961fc1ce211$export$d9f1ccf0bdb05d45 = ({ children: children })=>{\n return /*#__PURE__*/ $9IrjX$createElement($9IrjX$Fragment, null, children);\n};\n/* ---------------------------------------------------------------------------------------------- */ function $5e63c961fc1ce211$var$isSlottable(child) {\n return /*#__PURE__*/ $9IrjX$isValidElement(child) && child.type === $5e63c961fc1ce211$export$d9f1ccf0bdb05d45;\n}\nfunction $5e63c961fc1ce211$var$mergeProps(slotProps, childProps) {\n // all child props should override\n const overrideProps = {\n ...childProps\n };\n for(const propName in childProps){\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) overrideProps[propName] = (...args)=>{\n childPropValue(...args);\n slotPropValue(...args);\n };\n else if (slotPropValue) overrideProps[propName] = slotPropValue;\n } else if (propName === 'style') overrideProps[propName] = {\n ...slotPropValue,\n ...childPropValue\n };\n else if (propName === 'className') overrideProps[propName] = [\n slotPropValue,\n childPropValue\n ].filter(Boolean).join(' ');\n }\n return {\n ...slotProps,\n ...overrideProps\n };\n}\nconst $5e63c961fc1ce211$export$be92b6f5f03c0fe9 = $5e63c961fc1ce211$export$8c6ed5c666ac1360;\n\n\n\n\nexport {$5e63c961fc1ce211$export$8c6ed5c666ac1360 as Slot, $5e63c961fc1ce211$export$d9f1ccf0bdb05d45 as Slottable, $5e63c961fc1ce211$export$be92b6f5f03c0fe9 as Root};\n//# sourceMappingURL=index.mjs.map\n","import $4q5Fq$babelruntimehelpersesmextends from \"@babel/runtime/helpers/esm/extends\";\nimport {forwardRef as $4q5Fq$forwardRef, useEffect as $4q5Fq$useEffect, createElement as $4q5Fq$createElement} from \"react\";\nimport {flushSync as $4q5Fq$flushSync} from \"react-dom\";\nimport {Slot as $4q5Fq$Slot} from \"@radix-ui/react-slot\";\n\n\n\n\n\nconst $8927f6f2acc4f386$var$NODES = [\n 'a',\n 'button',\n 'div',\n 'form',\n 'h2',\n 'h3',\n 'img',\n 'input',\n 'label',\n 'li',\n 'nav',\n 'ol',\n 'p',\n 'span',\n 'svg',\n 'ul'\n]; // Temporary while we await merge of this fix:\n// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55396\n// prettier-ignore\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/ const $8927f6f2acc4f386$export$250ffa63cdc0d034 = $8927f6f2acc4f386$var$NODES.reduce((primitive, node)=>{\n const Node = /*#__PURE__*/ $4q5Fq$forwardRef((props, forwardedRef)=>{\n const { asChild: asChild , ...primitiveProps } = props;\n const Comp = asChild ? $4q5Fq$Slot : node;\n $4q5Fq$useEffect(()=>{\n window[Symbol.for('radix-ui')] = true;\n }, []);\n return /*#__PURE__*/ $4q5Fq$createElement(Comp, $4q5Fq$babelruntimehelpersesmextends({}, primitiveProps, {\n ref: forwardedRef\n }));\n });\n Node.displayName = `Primitive.${node}`;\n return {\n ...primitive,\n [node]: Node\n };\n}, {});\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/ /**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n * - discrete\n * - continuous\n * - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not nessesary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */ function $8927f6f2acc4f386$export$6d1a0317bde7de7f(target, event) {\n if (target) $4q5Fq$flushSync(()=>target.dispatchEvent(event)\n );\n}\n/* -----------------------------------------------------------------------------------------------*/ const $8927f6f2acc4f386$export$be92b6f5f03c0fe9 = $8927f6f2acc4f386$export$250ffa63cdc0d034;\n\n\n\n\nexport {$8927f6f2acc4f386$export$250ffa63cdc0d034 as Primitive, $8927f6f2acc4f386$export$be92b6f5f03c0fe9 as Root, $8927f6f2acc4f386$export$6d1a0317bde7de7f as dispatchDiscreteCustomEvent};\n//# sourceMappingURL=index.mjs.map\n","import $1bpvS$babelruntimehelpersesmextends from \"@babel/runtime/helpers/esm/extends\";\nimport {forwardRef as $1bpvS$forwardRef, useState as $1bpvS$useState, useRef as $1bpvS$useRef, useEffect as $1bpvS$useEffect, createElement as $1bpvS$createElement} from \"react\";\nimport {useComposedRefs as $1bpvS$useComposedRefs} from \"@radix-ui/react-compose-refs\";\nimport {createContextScope as $1bpvS$createContextScope} from \"@radix-ui/react-context\";\nimport {composeEventHandlers as $1bpvS$composeEventHandlers} from \"@radix-ui/primitive\";\nimport {useControllableState as $1bpvS$useControllableState} from \"@radix-ui/react-use-controllable-state\";\nimport {usePrevious as $1bpvS$usePrevious} from \"@radix-ui/react-use-previous\";\nimport {useSize as $1bpvS$useSize} from \"@radix-ui/react-use-size\";\nimport {Presence as $1bpvS$Presence} from \"@radix-ui/react-presence\";\nimport {Primitive as $1bpvS$Primitive} from \"@radix-ui/react-primitive\";\n\n\n\n\n\n\n\n\n\n\n\n/* -------------------------------------------------------------------------------------------------\n * Checkbox\n * -----------------------------------------------------------------------------------------------*/ const $e698a72e93240346$var$CHECKBOX_NAME = 'Checkbox';\nconst [$e698a72e93240346$var$createCheckboxContext, $e698a72e93240346$export$b566c4ff5488ea01] = $1bpvS$createContextScope($e698a72e93240346$var$CHECKBOX_NAME);\nconst [$e698a72e93240346$var$CheckboxProvider, $e698a72e93240346$var$useCheckboxContext] = $e698a72e93240346$var$createCheckboxContext($e698a72e93240346$var$CHECKBOX_NAME);\nconst $e698a72e93240346$export$48513f6b9f8ce62d = /*#__PURE__*/ $1bpvS$forwardRef((props, forwardedRef)=>{\n const { __scopeCheckbox: __scopeCheckbox , name: name , checked: checkedProp , defaultChecked: defaultChecked , required: required , disabled: disabled , value: value = 'on' , onCheckedChange: onCheckedChange , ...checkboxProps } = props;\n const [button, setButton] = $1bpvS$useState(null);\n const composedRefs = $1bpvS$useComposedRefs(forwardedRef, (node)=>setButton(node)\n );\n const hasConsumerStoppedPropagationRef = $1bpvS$useRef(false); // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = button ? Boolean(button.closest('form')) : true;\n const [checked = false, setChecked] = $1bpvS$useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked,\n onChange: onCheckedChange\n });\n const initialCheckedStateRef = $1bpvS$useRef(checked);\n $1bpvS$useEffect(()=>{\n const form = button === null || button === void 0 ? void 0 : button.form;\n if (form) {\n const reset = ()=>setChecked(initialCheckedStateRef.current)\n ;\n form.addEventListener('reset', reset);\n return ()=>form.removeEventListener('reset', reset)\n ;\n }\n }, [\n button,\n setChecked\n ]);\n return /*#__PURE__*/ $1bpvS$createElement($e698a72e93240346$var$CheckboxProvider, {\n scope: __scopeCheckbox,\n state: checked,\n disabled: disabled\n }, /*#__PURE__*/ $1bpvS$createElement($1bpvS$Primitive.button, $1bpvS$babelruntimehelpersesmextends({\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": $e698a72e93240346$var$isIndeterminate(checked) ? 'mixed' : checked,\n \"aria-required\": required,\n \"data-state\": $e698a72e93240346$var$getState(checked),\n \"data-disabled\": disabled ? '' : undefined,\n disabled: disabled,\n value: value\n }, checkboxProps, {\n ref: composedRefs,\n onKeyDown: $1bpvS$composeEventHandlers(props.onKeyDown, (event)=>{\n // According to WAI ARIA, Checkboxes don't activate on enter keypress\n if (event.key === 'Enter') event.preventDefault();\n }),\n onClick: $1bpvS$composeEventHandlers(props.onClick, (event)=>{\n setChecked((prevChecked)=>$e698a72e93240346$var$isIndeterminate(prevChecked) ? true : !prevChecked\n );\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(); // if checkbox is in a form, stop propagation from the button so that we only propagate\n // one click event (from the input). We propagate changes from an input so that native\n // form validation works and form events reflect checkbox updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n })), isFormControl && /*#__PURE__*/ $1bpvS$createElement($e698a72e93240346$var$BubbleInput, {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name: name,\n value: value,\n checked: checked,\n required: required,\n disabled: disabled // We transform because the input is absolutely positioned but we have\n ,\n style: {\n transform: 'translateX(-100%)'\n }\n }));\n});\n/*#__PURE__*/ Object.assign($e698a72e93240346$export$48513f6b9f8ce62d, {\n displayName: $e698a72e93240346$var$CHECKBOX_NAME\n});\n/* -------------------------------------------------------------------------------------------------\n * CheckboxIndicator\n * -----------------------------------------------------------------------------------------------*/ const $e698a72e93240346$var$INDICATOR_NAME = 'CheckboxIndicator';\nconst $e698a72e93240346$export$59aad738f51d1c05 = /*#__PURE__*/ $1bpvS$forwardRef((props, forwardedRef)=>{\n const { __scopeCheckbox: __scopeCheckbox , forceMount: forceMount , ...indicatorProps } = props;\n const context = $e698a72e93240346$var$useCheckboxContext($e698a72e93240346$var$INDICATOR_NAME, __scopeCheckbox);\n return /*#__PURE__*/ $1bpvS$createElement($1bpvS$Presence, {\n present: forceMount || $e698a72e93240346$var$isIndeterminate(context.state) || context.state === true\n }, /*#__PURE__*/ $1bpvS$createElement($1bpvS$Primitive.span, $1bpvS$babelruntimehelpersesmextends({\n \"data-state\": $e698a72e93240346$var$getState(context.state),\n \"data-disabled\": context.disabled ? '' : undefined\n }, indicatorProps, {\n ref: forwardedRef,\n style: {\n pointerEvents: 'none',\n ...props.style\n }\n })));\n});\n/*#__PURE__*/ Object.assign($e698a72e93240346$export$59aad738f51d1c05, {\n displayName: $e698a72e93240346$var$INDICATOR_NAME\n});\n/* ---------------------------------------------------------------------------------------------- */ const $e698a72e93240346$var$BubbleInput = (props)=>{\n const { control: control , checked: checked , bubbles: bubbles = true , ...inputProps } = props;\n const ref = $1bpvS$useRef(null);\n const prevChecked = $1bpvS$usePrevious(checked);\n const controlSize = $1bpvS$useSize(control); // Bubble checked change to parents (e.g form change event)\n $1bpvS$useEffect(()=>{\n const input = ref.current;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'checked');\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', {\n bubbles: bubbles\n });\n input.indeterminate = $e698a72e93240346$var$isIndeterminate(checked);\n setChecked.call(input, $e698a72e93240346$var$isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [\n prevChecked,\n checked,\n bubbles\n ]);\n return /*#__PURE__*/ $1bpvS$createElement(\"input\", $1bpvS$babelruntimehelpersesmextends({\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: $e698a72e93240346$var$isIndeterminate(checked) ? false : checked\n }, inputProps, {\n tabIndex: -1,\n ref: ref,\n style: {\n ...props.style,\n ...controlSize,\n position: 'absolute',\n pointerEvents: 'none',\n opacity: 0,\n margin: 0\n }\n }));\n};\nfunction $e698a72e93240346$var$isIndeterminate(checked) {\n return checked === 'indeterminate';\n}\nfunction $e698a72e93240346$var$getState(checked) {\n return $e698a72e93240346$var$isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n}\nconst $e698a72e93240346$export$be92b6f5f03c0fe9 = $e698a72e93240346$export$48513f6b9f8ce62d;\nconst $e698a72e93240346$export$adb584737d712b70 = $e698a72e93240346$export$59aad738f51d1c05;\n\n\n\n\nexport {$e698a72e93240346$export$b566c4ff5488ea01 as createCheckboxScope, $e698a72e93240346$export$48513f6b9f8ce62d as Checkbox, $e698a72e93240346$export$59aad738f51d1c05 as CheckboxIndicator, $e698a72e93240346$export$be92b6f5f03c0fe9 as Root, $e698a72e93240346$export$adb584737d712b70 as Indicator};\n//# sourceMappingURL=index.mjs.map\n","import { FC, forwardRef, memo, Ref } from \"react\"\r\nimport { CheckboxProps, CheckboxValue } from \"./typings\"\r\nimport * as RadixCheckbox from \"@radix-ui/react-checkbox\"\r\nimport styles from \"./Checkbox.module.sass\"\r\nimport classNames from \"classnames\"\r\nimport { CheckIcon, DividerHorizontalIcon } from \"@radix-ui/react-icons\"\r\nimport { Flex } from \"@radix-ui/themes\"\r\nimport { HoverUtility } from \"../HoverUtility\"\r\n\r\nconst _Checkbox = forwardRef(function Checkbox(\r\n\t{ className, labelClassName, label, checked, onCheckedChange, ...rest }: CheckboxProps,\r\n\tref: Ref<HTMLButtonElement>,\r\n) {\r\n\treturn (\r\n\t\t<HoverUtility>\r\n\t\t\t{({ isHovered, ...props }) => (\r\n\t\t\t\t<Flex className={styles.checkboxContainer} {...props}>\r\n\t\t\t\t\t<RadixCheckbox.Root\r\n\t\t\t\t\t\tclassName={classNames(\r\n\t\t\t\t\t\t\tstyles.checkbox,\r\n\t\t\t\t\t\t\t!isHovered && !checked && styles.checkboxHidden,\r\n\t\t\t\t\t\t\tclassName,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\tchecked={checked}\r\n\t\t\t\t\t\tonCheckedChange={(checked: CheckboxValue) => {\r\n\t\t\t\t\t\t\tif (onCheckedChange) {\r\n\t\t\t\t\t\t\t\tonCheckedChange(checked)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<RadixCheckbox.Indicator className={styles.checkboxIndicator}>\r\n\t\t\t\t\t\t\t{checked === \"indeterminate\" ? <DividerHorizontalIcon width=\"13px\" /> : <CheckIcon />}\r\n\t\t\t\t\t\t</RadixCheckbox.Indicator>\r\n\t\t\t\t\t</RadixCheckbox.Root>\r\n\t\t\t\t\t{label && (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName={classNames(styles.checkboxLabel, labelClassName, styles.noTextHighlight)}\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\tif (onCheckedChange) {\r\n\t\t\t\t\t\t\t\t\tonCheckedChange(!checked)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{label}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Flex>\r\n\t\t\t)}\r\n\t\t</HoverUtility>\r\n\t)\r\n})\r\n\r\nexport const Checkbox: FC<CheckboxProps> = memo(_Checkbox)\r\n// To fix Storybook source code showing the component as [object Object]\r\nCheckbox.displayName = \"Checkbox\"\r\n","import React, { FC, memo, useEffect, useState } from \"react\"\r\nimport { CheckboxValue, SelectAllCheckboxProps } from \"./typings\"\r\nimport { Checkbox } from \"./Checkbox\"\r\n\r\nexport const SelectAllCheckbox: FC<SelectAllCheckboxProps> = memo(function SelectAllCheckbox({\r\n\tclassName,\r\n\tlabelClassName,\r\n\tlabel,\r\n\tonCheckedChange,\r\n\tchildren,\r\n\t...rest\r\n}: SelectAllCheckboxProps) {\r\n\tconst [isChecked, setIsChecked] = useState<CheckboxValue>(\r\n\t\tReact.Children.toArray(children).every((child) => React.isValidElement(child) && child.props.checked)\r\n\t\t\t? true\r\n\t\t\t: React.Children.toArray(children).some((child) => React.isValidElement(child) && child.props.checked)\r\n\t\t\t? \"indeterminate\"\r\n\t\t\t: false,\r\n\t)\r\n\tconst [isChildChecked, setIsChildChecked] = useState<CheckboxValue[]>(\r\n\t\tReact.Children.map(children, (child) => child.props.checked),\r\n\t)\r\n\tconst handleOnCheckedChange = (checked: CheckboxValue) => {\r\n\t\tconst isAllSelected = isChecked === \"indeterminate\" || !checked\r\n\r\n\t\tif (isChecked === \"indeterminate\") {\r\n\t\t\tchecked = false\r\n\t\t}\r\n\r\n\t\tsetIsChildChecked(isChildChecked.map((_child) => !isAllSelected))\r\n\r\n\t\tif (onCheckedChange) {\r\n\t\t\tonCheckedChange(checked)\r\n\t\t}\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tconst numSelected = isChildChecked.filter((child) => child).length\r\n\t\tif (numSelected === 0) {\r\n\t\t\tsetIsChecked(false)\r\n\t\t} else if (numSelected === children!.length) {\r\n\t\t\tsetIsChecked(true)\r\n\t\t} else {\r\n\t\t\tsetIsChecked(\"indeterminate\")\r\n\t\t}\r\n\t}, [children, isChildChecked])\r\n\r\n\t// TODO: More performant solution would be as follows:\r\n\t// 1. Create a context that wraps the checkboxes\r\n\t// 2. In the checkboxes, consume that context: const { onChildCheckboxChange } = useSelectAllCheckbox()\r\n\t// 3. Call it using onChildCheckboxChange?.()\r\n\tconst childrenWithProps = React.Children.map(children, (child, i) =>\r\n\t\tReact.cloneElement(child, {\r\n\t\t\t...child.props,\r\n\t\t\tchecked: isChildChecked[i],\r\n\t\t\tonCheckedChange: (checked: CheckboxValue) => {\r\n\t\t\t\tconst _isChildChecked = [...isChildChecked]\r\n\t\t\t\t_isChildChecked[i] = checked\r\n\t\t\t\tsetIsChildChecked(_isChildChecked)\r\n\t\t\t\tif (child.props.onCheckedChange) {\r\n\t\t\t\t\tchild.props.onCheckedChange(checked)\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t}),\r\n\t)\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Checkbox\r\n\t\t\t\tclassName={className}\r\n\t\t\t\tlabelClassName={labelClassName}\r\n\t\t\t\tlabel={label}\r\n\t\t\t\tchecked={isChecked}\r\n\t\t\t\tonCheckedChange={handleOnCheckedChange}\r\n\t\t\t\t{...rest}\r\n\t\t\t/>\r\n\t\t\t{childrenWithProps}\r\n\t\t</>\r\n\t)\r\n})\r\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\r\n\r\nimport React, { FC, forwardRef, useCallback, useEffect, useMemo, useState } from \"react\"\r\nimport {\r\n\tBody,\r\n\tCell,\r\n\tHeader,\r\n\tHeaderCell,\r\n\tHeaderRow,\r\n\tRow,\r\n\tTable as ReactLibraryTable,\r\n\t// @ts-ignore\r\n} from \"@table-library/react-table-library/table.js\"\r\n// @ts-ignore\r\nimport { useTheme } from \"@table-library/react-table-library/theme.js\"\r\n// @ts-ignore\r\nimport { HeaderCellSort, useSort } from \"@table-library/react-table-library/sort.js\"\r\nimport {\r\n\tCellSelect,\r\n\tHeaderCellSelect,\r\n\tSelectClickTypes,\r\n\tSelectTypes,\r\n\tuseRowSelect,\r\n\t// @ts-ignore\r\n} from \"@table-library/react-table-library/select.js\"\r\n// @ts-ignore\r\nimport { usePagination } from \"@table-library/react-table-library/pagination.js\"\r\n// @ts-ignore\r\nimport { Action } from \"@table-library/react-table-library/common.js\"\r\nimport type { TableNode } from \"@table-library/react-table-library/types/table.d.ts\"\r\nimport { Button, IconButton, Input, Select } from \"../\"\r\nimport styles from \"./Table.module.sass\"\r\nimport {\r\n\tArrowDownIcon,\r\n\tArrowUpIcon,\r\n\tCaretSortIcon,\r\n\tChevronLeftIcon,\r\n\tChevronRightIcon,\r\n\tCross2Icon,\r\n\tDoubleArrowLeftIcon,\r\n\tDoubleArrowRightIcon,\r\n\tMagnifyingGlassIcon,\r\n\tMixerHorizontalIcon,\r\n\tPencil1Icon,\r\n\tTrashIcon,\r\n} from \"@radix-ui/react-icons\"\r\nimport { isMobile } from \"react-device-detect\"\r\nimport { FilterValue, IdLabel, TableCell, TableColumn, TableProps } from \"./typings\"\r\nimport { Checkbox, CheckboxValue, SelectAllCheckbox } from \"../Checkbox\"\r\nimport { MultiPagePopover } from \"../MultiPagePopover\"\r\nimport classNames from \"classnames\"\r\nimport { Text } from \"../Text\"\r\nimport { Flex, TableRow } from \"@radix-ui/themes\"\r\n\r\nconst _Table = forwardRef(function Table(props: TableProps, ref: React.Ref<HTMLTableElement>) {\r\n\tconst {\r\n\t\tcolumns,\r\n\t\tdata,\r\n\t\tcolor = \"light\",\r\n\t\ttitle = \"\",\r\n\t\tdescription = \"\",\r\n\t\trowsPerPage = [10, 20, 30, 40, 50],\r\n\t\tshowSearchBar,\r\n\t\tsearchBarPlaceholder,\r\n\t\tshowSelect,\r\n\t\tshowFilterButton,\r\n\t\tshowContainer,\r\n\t\tshowRowsPerPage,\r\n\t\tshowPageNumber,\r\n\t\tshowPageNavigation,\r\n\t\tshowTopBar = true,\r\n\t\tshowBottomBar = true,\r\n\t\tshowTopButtons,\r\n\t\ttopButtons,\r\n\t\temptyMessage = \"There is no data\",\r\n\t\tchildren,\r\n\t\tclassName,\r\n\t\tcolumnClassName,\r\n\t\trowClassName,\r\n\t\tcellClassName,\r\n\t} = props\r\n\t// Search bar input\r\n\tconst [search, setSearch] = useState<string>(\"\")\r\n\t// Selected rows\r\n\tconst [selected, setSelected] = useState<string[]>([])\r\n\r\n\t// Ensures correct format of data[row].columns AKA: columns declared in columns are all in data[row].columns\r\n\tconst rowsColumnsHaveAllColumns = data.every(\r\n\t\t(row) =>\r\n\t\t\tObject.keys(row.columns).length === columns.length &&\r\n\t\t\tObject.values(columns).every((column) => Object.keys(row.columns).includes(column.id.toString())),\r\n\t)\r\n\r\n\tif (!rowsColumnsHaveAllColumns) {\r\n\t\tthrow new Error(\"Columns in rows do not match ones declared in columns variable.\")\r\n\t}\r\n\r\n\t// Variable that maps the columns prop from [ { id: x, ... }, { id: y, ... }, ... ] to { x: [], y: [], ... }\r\n\t// This variable is the default mapping of the columnFilterValues state. The keys are columns, while the array\r\n\t// stores the values to filter by for that column. The ordering or context doesn't matter, the filter function just\r\n\t// filters for any cells containing any of the strings in the array for that particular column\r\n\tconst defaultColumnFilterValues = useMemo(\r\n\t\t() =>\r\n\t\t\tcolumns\r\n\t\t\t\t.filter((column) => column.filter)\r\n\t\t\t\t.map((column) => ({ [column.id]: [] }))\r\n\t\t\t\t.reduce((arr, column) => Object.assign(arr, column), {}) as { [x: string]: string[] },\r\n\t\t[columns],\r\n\t)\r\n\t// Selected column filter values. Note that every column with a filter prop has a key in this state,\r\n\t// but columns selected for filtering are ones that have a non-empty array\r\n\tconst [columnFilterValues, setColumnFilterValues] = useState(defaultColumnFilterValues)\r\n\t// Selected number of rows per pae\r\n\tconst [numRowsPerPage, setNumRowsPerPage] = useState<number>(rowsPerPage[0] ?? 10)\r\n\t// Value & ItemContent array of options for the rows per page Select component (because this is format required by\r\n\t// the Select component\r\n\tconst rowsPerPageOptions = useMemo(\r\n\t\t() =>\r\n\t\t\trowsPerPage.map((numRows) => ({\r\n\t\t\t\tvalue: numRows.toString(),\r\n\t\t\t\titemContent: numRows.toString(),\r\n\t\t\t})),\r\n\t\t[rowsPerPage],\r\n\t)\r\n\t// Checks if any of the rows have an onClick option (If they do, then all rows will have a cursor pointer)\r\n\tconst rowsHaveOnClick = data.some((row) => row.onClick)\r\n\t// Function to filter for values in the search bar input\r\n\tconst searchFilter = useCallback(\r\n\t\t(cell: TableCell) => {\r\n\t\t\tconst cellVal = cell.searchValue?.toString() || cell.value?.toString() || \"\"\r\n\t\t\treturn cellVal.toLowerCase().includes(search.toLowerCase())\r\n\t\t},\r\n\t\t[search],\r\n\t)\r\n\t// Function to sort cells based on the sortValue if provided, else the value\r\n\tconst sortFilter = useCallback((a: TableCell, b: TableCell) => {\r\n\t\tconst aVal = a.sortValue?.toString() || a.value?.toString() || \"\"\r\n\t\tconst bVal = b.sortValue?.toString() || b.value?.toString() || \"\"\r\n\t\treturn aVal.toLowerCase().localeCompare(bVal.toLowerCase(), undefined, { numeric: true })\r\n\t}, [])\r\n\t// Function to filter values based on the selected column filters\r\n\tconst columnFilter = useCallback(\r\n\t\t(cell: TableCell, column: TableColumn) => {\r\n\t\t\tconst cellVal = cell.filterValue?.toString() || cell.value?.toString() || \"\"\r\n\t\t\treturn columnFilterValues[column.id]?.some(\r\n\t\t\t\t(filter) => cellVal.toString().toLowerCase() === filter.toString().toLowerCase(),\r\n\t\t\t)\r\n\t\t},\r\n\t\t[columnFilterValues],\r\n\t)\r\n\t// Get columns data in the format required by React Table Library\r\n\tconst columnsData = useMemo(\r\n\t\t() =>\r\n\t\t\tcolumns.map((column) => ({\r\n\t\t\t\t...column,\r\n\t\t\t\tsort: column.sort ? { sortKey: column.id.toString().toUpperCase() } : false,\r\n\t\t\t})),\r\n\t\t[columns],\r\n\t)\r\n\t// Check if any column filter values are selected (by checking if the array of a column is not empty)\r\n\tconst isColumnFilterValueSelected = columns.some(\r\n\t\t(column) => column.filter && column.id in columnFilterValues && columnFilterValues[column.id]?.length !== 0,\r\n\t)\r\n\t// Get rows data in format required by React Table Library\r\n\tconst rows = useMemo(\r\n\t\t() =>\r\n\t\t\tdata\r\n\t\t\t\t// Filter by search\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(row) =>\r\n\t\t\t\t\t\t!search || columns.some((column) => column.search && searchFilter(row.columns[column.id]!)),\r\n\t\t\t\t)\r\n\t\t\t\t// Filter by column values\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(row) =>\r\n\t\t\t\t\t\t// If no column filter is selected, then return true AKA: show all rows\r\n\t\t\t\t\t\t!isColumnFilterValueSelected ||\r\n\t\t\t\t\t\t// Check if any of the table values match the selected column filters. First return true if that\r\n\t\t\t\t\t\t// column is not selected for filtering (has a filter prop). Second, return true if that column\r\n\t\t\t\t\t\t// has any values in it selected for filtering, lastly, return if row has that filter value\r\n\t\t\t\t\t\tcolumns.every((column) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t!column.filter ||\r\n\t\t\t\t\t\t\t\tcolumnFilterValues[column.id]?.length === 0 ||\r\n\t\t\t\t\t\t\t\tcolumnFilter(row.columns[column.id]!, column)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t)\r\n\t\t\t\t// Moving key:value pairs from row.columns into row and removing row.columns (this is the format required by React Table Library)\r\n\t\t\t\t// Ex: { id: 1, columns: { x : { ... } ...} } => { id: 1, x: { ... }, ... }\r\n\t\t\t\t.map((row) => {\r\n\t\t\t\t\tconst destructedRow = { ...row.columns, ...row }\r\n\t\t\t\t\tconst { columns: _, ...newRow } = destructedRow\r\n\t\t\t\t\treturn newRow\r\n\t\t\t\t}),\r\n\t\t[columnFilter, columnFilterValues, columns, data, isColumnFilterValueSelected, search, searchFilter],\r\n\t)\r\n\t// Variable that holds the total number of pages (Note this can change based on filter values or rows per page)\r\n\tconst [totalPages, setTotalPages] = useState(Math.ceil(rows.length / numRowsPerPage))\r\n\t// Get the available filter options for each column. If this is not passed in by the user (in column.filterValues),\r\n\t// then they will be automatically generated by getting all values for the column in a sorted set\r\n\tconst getFilterValues = useCallback(\r\n\t\t(column: TableColumn) => {\r\n\t\t\tif (column.filterValues) {\r\n\t\t\t\treturn column.filterValues\r\n\t\t\t}\r\n\t\t\tconst uniqueFilterValues = new Set(\r\n\t\t\t\tdata.map(\r\n\t\t\t\t\t(row) =>\r\n\t\t\t\t\t\trow.columns[column.id]!.filterValue?.toString() ||\r\n\t\t\t\t\t\trow.columns[column.id]!.value?.toString() ||\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t),\r\n\t\t\t)\r\n\t\t\treturn [...uniqueFilterValues].sort().map((rowVal) => ({\r\n\t\t\t\tvalue: rowVal,\r\n\t\t\t\tlabel: rowVal,\r\n\t\t\t}))\r\n\t\t},\r\n\t\t[data],\r\n\t)\r\n\t// Get the grid template for the columns in the table. If the user does not pass in any custom width for\r\n\t// a column, then it will be set to auto. This also accounts for the select column if that is activated\r\n\tconst gridTemplateColumns = useMemo(\r\n\t\t() =>\r\n\t\t\t(showSelect ? \"auto \" : \"\") +\r\n\t\t\tcolumnsData.reduce(\r\n\t\t\t\t(accum, column) =>\r\n\t\t\t\t\taccum +\r\n\t\t\t\t\t`${column.width ? column.width : column.maxWidth ? `minmax(auto, ${column.maxWidth})` : \"auto\"} `,\r\n\t\t\t\t\"\",\r\n\t\t\t),\r\n\t\t[columnsData, showSelect],\r\n\t)\r\n\t// Callback function to update search value when search bar input is changed\r\n\tconst handleSearch = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n\t\tsetSearch(e.target.value)\r\n\t}, [])\r\n\t// Get table data in format required by React Table Library\r\n\tconst tableData = { nodes: rows }\r\n\t// Setup row select for React Table Library\r\n\tconst tableSelect = useRowSelect(\r\n\t\ttableData,\r\n\t\t{\r\n\t\t\tonChange: (_action: Action, state: { ids: string[] }) => {\r\n\t\t\t\tsetSelected(state.ids)\r\n\t\t\t},\r\n\t\t},\r\n\t\t{\r\n\t\t\trowSelect: SelectTypes.MultiSelect,\r\n\t\t\tbuttonSelect: SelectTypes.MultiSelect,\r\n\t\t\tclickType: SelectClickTypes.ButtonClick,\r\n\t\t\tisCarryForward: false,\r\n\t\t},\r\n\t)\r\n\t// Setup pagination for React Table Library\r\n\tconst pagination = usePagination(\r\n\t\ttableData,\r\n\t\t{\r\n\t\t\tstate: {\r\n\t\t\t\tpage: 0,\r\n\t\t\t\tsize: rowsPerPage[0],\r\n\t\t\t},\r\n\t\t},\r\n\t\t{\r\n\t\t\tisServer: false,\r\n\t\t},\r\n\t)\r\n\t// Setup sorting for React Table Library\r\n\tconst sort = useSort(\r\n\t\ttableData,\r\n\t\t{ onChange: () => null },\r\n\t\t{\r\n\t\t\tsortIcon: {\r\n\t\t\t\tmargin: \"10px\",\r\n\t\t\t\tsize: \"15px\",\r\n\t\t\t\ticonDefault: <CaretSortIcon width=\"20px\" />,\r\n\t\t\t\ticonUp: <ArrowUpIcon />,\r\n\t\t\t\ticonDown: <ArrowDownIcon />,\r\n\t\t\t},\r\n\t\t\tsortFns: Object.assign(\r\n\t\t\t\t{},\r\n\t\t\t\t...columnsData.map((column) => ({\r\n\t\t\t\t\t[column.id.toString().toUpperCase()]: (array: { [key: IdLabel]: TableCell }[]) =>\r\n\t\t\t\t\t\tarray.sort((a, b) => sortFilter(a[column.id]!, b[column.id]!)),\r\n\t\t\t\t})),\r\n\t\t\t),\r\n\t\t},\r\n\t)\r\n\tconst columnFilterPopoverContent = useMemo(\r\n\t\t() => ({\r\n\t\t\toptions: columns\r\n\t\t\t\t.filter((column) => column.filter)\r\n\t\t\t\t.map((column) => ({\r\n\t\t\t\t\tlabel: column.label,\r\n\t\t\t\t\tvalue: column.id.toString(),\r\n\t\t\t\t\tpage: {\r\n\t\t\t\t\t\tcontent: (\r\n\t\t\t\t\t\t\t<SelectAllCheckbox\r\n\t\t\t\t\t\t\t\tkey={`select-all-checkbox-${column.id}`}\r\n\t\t\t\t\t\t\t\tlabel=\"Select all\"\r\n\t\t\t\t\t\t\t\tonCheckedChange={(checked) => {\r\n\t\t\t\t\t\t\t\t\tconst _columnFilterValues = JSON.parse(JSON.stringify(columnFilterValues))\r\n\t\t\t\t\t\t\t\t\t// There could be indeterminate state, so must check true specifically\r\n\t\t\t\t\t\t\t\t\tif (checked === true) {\r\n\t\t\t\t\t\t\t\t\t\t_columnFilterValues[column.id] = getFilterValues(column).map(\r\n\t\t\t\t\t\t\t\t\t\t\t(filterValue) => filterValue.value,\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t_columnFilterValues[column.id] = []\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tsetColumnFilterValues(_columnFilterValues)\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{(getFilterValues(column) as FilterValue[]).map((filterValue, i) => (\r\n\t\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\t\tkey={`checkbox-filter-${column.id}-${i}`}\r\n\t\t\t\t\t\t\t\t\t\tlabel={filterValue.label}\r\n\t\t\t\t\t\t\t\t\t\tchecked={columnFilterValues[column.id]?.includes(\r\n\t\t\t\t\t\t\t\t\t\t\tfilterValue.value?.toString() || \"\",\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\tonCheckedChange={(checked: CheckboxValue) => {\r\n\t\t\t\t\t\t\t\t\t\t\tsetColumnFilterValues((prevColumnFilterValues) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tconst _columnFilterValues = { ...prevColumnFilterValues }\r\n\t\t\t\t\t\t\t\t\t\t\t\tconst values = _columnFilterValues[column.id] || []\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (checked) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t_columnFilterValues[column.id] = [\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...values,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilterValue.value?.toString() || \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t_columnFilterValues[column.id] = values.filter(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(fValue) => fValue !== (filterValue.value ?? \"\").toString(),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn _columnFilterValues\r\n\t\t\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</SelectAllCheckbox>\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t},\r\n\t\t\t\t})),\r\n\t\t}),\r\n\t\t[columnFilterValues, columns, getFilterValues],\r\n\t)\r\n\r\n\t// Create table header cell components for React Table Library (there are two different headers, one normal, and\r\n\t// one specifically for a header cell that is sortable)\r\n\tconst columnCells = columnsData.map((column) => {\r\n\t\tconst Component = column.sort ? HeaderCellSort : HeaderCell\r\n\t\treturn (\r\n\t\t\t<Component\r\n\t\t\t\tkey={column.id}\r\n\t\t\t\tclassName={classNames(styles.tableHeaderCell, columnClassName, column.className)}\r\n\t\t\t\tsortKey={column.sort ? column.id.toString().toUpperCase() : \"\"}\r\n\t\t\t>\r\n\t\t\t\t{column.label}\r\n\t\t\t</Component>\r\n\t\t)\r\n\t})\r\n\tconst SelectedModeButton = isMobile ? IconButton : Button\r\n\tconst layout = useMemo(() => ({ custom: true }), [])\r\n\t// React Table Library default method of applying different styles to the table. These styles specifically could not\r\n\t// be applied in the SASS file or through style prop so must use the themes feature instead\r\n\tconst theme = useTheme({\r\n\t\tTable: `\r\n\t\t\t --data-table-library_grid-template-columns: ${gridTemplateColumns};\r\n\t\t`,\r\n\t\tRow: `\r\n\t\t\t&:hover {\r\n\t\t\t\tcursor: ${rowsHaveOnClick ? \"pointer\" : \"inherit\"};\r\n\t\t\t}\r\n\t\t\t&.row-select-selected {\r\n\t\t\t\tbackground-color: var(--gray-a4);\r\n\t\t\t}\r\n\t\t\t&:not(:last-of-type) .td {\r\n \t\t\tborder-bottom: 1px solid var(--gray-a4);\r\n\t\t\t}\t\r\n\t\t`,\r\n\t\tBaseRow: `\r\n\t\t\tbackground-color: inherit;\r\n\t\t`,\r\n\t})\r\n\t// Updates the total pages based on if the rows per page has changed, or if rows.length has changed (which is\r\n\t// affected by search and filtering)\r\n\tuseEffect(() => {\r\n\t\tif (showPageNavigation) {\r\n\t\t\tconst numTotalPages = Math.ceil(rows.length / numRowsPerPage)\r\n\t\t\tsetTotalPages(numTotalPages)\r\n\t\t\tif (pagination.state.page < 0) {\r\n\t\t\t\tpagination.fns.onSetPage(0)\r\n\t\t\t}\r\n\t\t\tif (pagination.state.page > numTotalPages - 1) {\r\n\t\t\t\tpagination.fns.onSetPage(numTotalPages - 1)\r\n\t\t\t}\r\n\t\t}\r\n\t}, [rowsPerPage, rows.length, numRowsPerPage, pagination, showPageNavigation])\r\n\treturn (\r\n\t\t<div className={classNames({ [styles.tableContainer!]: showContainer })}>\r\n\t\t\t{(!!title || !!description) && (\r\n\t\t\t\t<div className={styles.headerContainer}>\r\n\t\t\t\t\t{!!title && (\r\n\t\t\t\t\t\t<Text weight=\"bold\" size=\"5\">\r\n\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{!!description && <Text as=\"div\">{description}</Text>}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t{showTopBar && (\r\n\t\t\t\t<Flex direction=\"column\">\r\n\t\t\t\t\t<Flex gap=\"2\">\r\n\t\t\t\t\t\t{showSearchBar && (\r\n\t\t\t\t\t\t\t<Flex direction=\"column\">\r\n\t\t\t\t\t\t\t\t<div className={styles.searchContainer}>\r\n\t\t\t\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\t\t\t\tvalue={search}\r\n\t\t\t\t\t\t\t\t\t\tonChange={handleSearch}\r\n\t\t\t\t\t\t\t\t\t\tleftSlot={<MagnifyingGlassIcon />}\r\n\t\t\t\t\t\t\t\t\t\tplaceholder={searchBarPlaceholder || \"Filter tasks...\"}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFilterButton && (\r\n\t\t\t\t\t\t\t<MultiPagePopover\r\n\t\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\t\tpage={columnFilterPopoverContent}\r\n\t\t\t\t\t\t\t\ttrigger={\r\n\t\t\t\t\t\t\t\t\t<IconButton variant=\"surface\" aria-label=\"Filter columns\">\r\n\t\t\t\t\t\t\t\t\t\t<MixerHorizontalIcon />\r\n\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{(_Close) => \"\"}\r\n\t\t\t\t\t\t\t</MultiPagePopover>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFilterButton && isColumnFilterValueSelected && (\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant=\"surface\"\r\n\t\t\t\t\t\t\t\tcolor=\"crimson\"\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetColumnFilterValues(defaultColumnFilterValues)\r\n\t\t\t\t\t\t\t\t\t// Bug where if you set multiple filters with no results, then clearing filter will\r\n\t\t\t\t\t\t\t\t\t// not take you to first page, so must do it manually\r\n\t\t\t\t\t\t\t\t\tpagination.fns.onSetPage(0)\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Cross2Icon />\r\n\t\t\t\t\t\t\t\tClear filters\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t\t<Flex justify=\"between\" className={styles.tableTopContainer}>\r\n\t\t\t\t\t\t{showTopButtons && topButtons && <Flex gap=\"2\">{...topButtons}</Flex>}\r\n\t\t\t\t\t\t{showSelect && selected.length !== 0 && (\r\n\t\t\t\t\t\t\t<Flex gap=\"2\">\r\n\t\t\t\t\t\t\t\t<SelectedModeButton variant=\"soft\" aria-label=\"Edit rows\">\r\n\t\t\t\t\t\t\t\t\t<Pencil1Icon />\r\n\t\t\t\t\t\t\t\t\t{!isMobile && \"Edit\"}\r\n\t\t\t\t\t\t\t\t</SelectedModeButton>\r\n\t\t\t\t\t\t\t\t<SelectedModeButton color=\"red\" aria-label=\"Delete rows\">\r\n\t\t\t\t\t\t\t\t\t<TrashIcon />\r\n\t\t\t\t\t\t\t\t\t{!isMobile && \"Delete\"}\r\n\t\t\t\t\t\t\t\t</SelectedModeButton>\r\n\t\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</Flex>\r\n\t\t\t)}\r\n\t\t\t{children}\r\n\t\t\t<ReactLibraryTable\r\n\t\t\t\tclassName={classNames(styles.table, className)}\r\n\t\t\t\tdata={tableData}\r\n\t\t\t\ttheme={theme}\r\n\t\t\t\tsort={sort}\r\n\t\t\t\tpagination={showPageNavigation && pagination}\r\n\t\t\t\tselect={tableSelect}\r\n\t\t\t\tlayout={layout}\r\n\t\t\t\tref={ref}\r\n\t\t\t>\r\n\t\t\t\t{(tableList: TableNode[]) => (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Header>\r\n\t\t\t\t\t\t\t<HeaderRow>\r\n\t\t\t\t\t\t\t\t{showSelect && <HeaderCellSelect className={styles.tableHeaderCell} />}\r\n\t\t\t\t\t\t\t\t{...columnCells}\r\n\t\t\t\t\t\t\t</HeaderRow>\r\n\t\t\t\t\t\t</Header>\r\n\t\t\t\t\t\t<Body>\r\n\t\t\t\t\t\t\t{tableList.length === 0 && (\r\n\t\t\t\t\t\t\t\t<TableRow className={styles.noDataTextContainer}>\r\n\t\t\t\t\t\t\t\t\t<Cell>{emptyMessage}</Cell>\r\n\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{tableList.map((row) => (\r\n\t\t\t\t\t\t\t\t<Row\r\n\t\t\t\t\t\t\t\t\tkey={row.id}\r\n\t\t\t\t\t\t\t\t\titem={row}\r\n\t\t\t\t\t\t\t\t\tclassName={classNames(styles.tableRow, rowClassName, row.className)}\r\n\t\t\t\t\t\t\t\t\tonClick={row.onClick}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{showSelect && <CellSelect key={row.id} item={row} />}\r\n\t\t\t\t\t\t\t\t\t{columns.map((column, i) => (\r\n\t\t\t\t\t\t\t\t\t\t<Cell\r\n\t\t\t\t\t\t\t\t\t\t\tkey={i}\r\n\t\t\t\t\t\t\t\t\t\t\tclassName={classNames(\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyles.tableCell,\r\n\t\t\t\t\t\t\t\t\t\t\t\tcellClassName,\r\n\t\t\t\t\t\t\t\t\t\t\t\trow[column.id].className,\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={row[column.id].onClick}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Text>{row[column.id].label}</Text>\r\n\t\t\t\t\t\t\t\t\t\t</Cell>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Row>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</Body>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</ReactLibraryTable>\r\n\t\t\t{showBottomBar && (\r\n\t\t\t\t<Flex className={styles.tableBottomContainer} wrap=\"wrap\" direction={isMobile ? \"column\" : \"row\"}>\r\n\t\t\t\t\t{showRowsPerPage && (\r\n\t\t\t\t\t\t<Flex className={styles.rowsPerPageContainer}>\r\n\t\t\t\t\t\t\t<div className={styles.rowsPerPageText}>Rows per page:</div>\r\n\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\titems={rowsPerPageOptions}\r\n\t\t\t\t\t\t\t\tdefaultValue={rowsPerPageOptions[0]!.value.toString()}\r\n\t\t\t\t\t\t\t\tonValueChange={(v: string) => {\r\n\t\t\t\t\t\t\t\t\tpagination.fns.onSetSize(Number(v))\r\n\t\t\t\t\t\t\t\t\tsetNumRowsPerPage(Number(v))\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tplaceholder={rowsPerPageOptions[0]!.itemContent}\r\n\t\t\t\t\t\t\t\taria-label=\"Select number of rows per page\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showPageNumber && (\r\n\t\t\t\t\t\t<Flex justify=\"center\">\r\n\t\t\t\t\t\t\t{totalPages > 0 && `Page ${pagination.state.page + 1} of ${totalPages}`}\r\n\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showPageNavigation && (\r\n\t\t\t\t\t\t<Flex className={styles.rowsPerPageContainer} gap=\"2\" justify=\"end\">\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tvariant=\"surface\"\r\n\t\t\t\t\t\t\t\tonClick={() => pagination.fns.onSetPage(0)}\r\n\t\t\t\t\t\t\t\tdisabled={pagination.state.page === 0 || totalPages === 0}\r\n\t\t\t\t\t\t\t\taria-label=\"Go to first page\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<DoubleArrowLeftIcon />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tvariant=\"surface\"\r\n\t\t\t\t\t\t\t\tdisabled={pagination.state.page === 0 || totalPages === 0}\r\n\t\t\t\t\t\t\t\tonClick={() => pagination.fns.onSetPage(pagination.state.page - 1)}\r\n\t\t\t\t\t\t\t\taria-label=\"Previous page\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<ChevronLeftIcon />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tvariant=\"surface\"\r\n\t\t\t\t\t\t\t\tdisabled={pagination.state.page + 1 === totalPages || totalPages === 0}\r\n\t\t\t\t\t\t\t\tonClick={() => pagination.fns.onSetPage(pagination.state.page + 1)}\r\n\t\t\t\t\t\t\t\taria-label=\"Next page\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<ChevronRightIcon />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tvariant=\"surface\"\r\n\t\t\t\t\t\t\t\tdisabled={pagination.state.page + 1 === totalPages || totalPages === 0}\r\n\t\t\t\t\t\t\t\tonClick={() => pagination.fns.onSetPage(totalPages - 1)}\r\n\t\t\t\t\t\t\t\taria-label=\"Go to last page\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<DoubleArrowRightIcon />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Flex>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t)\r\n})\r\n\r\nexport const Table: FC<TableProps> = React.memo(_Table)\r\n","import React, { ChangeEvent, FC, forwardRef, useCallback, useState } from \"react\"\r\nimport { ConfirmEditInputProps } from \"./typings\"\r\nimport { Flex, HoverUtility, IconButton, Input } from \"../index\"\r\nimport classNames from \"classnames\"\r\nimport { CheckIcon, Cross1Icon, Pencil1Icon } from \"@radix-ui/react-icons\"\r\nimport styles from \"./ConfirmEditInput.module.sass\"\r\n\r\nconst _ConfirmEditInput = forwardRef(function ConfirmEditInput(\r\n\t{\r\n\t\tvalue,\r\n\t\tonChange,\r\n\t\tonEditActivate,\r\n\t\tonEditConfirm,\r\n\t\tonEditCancel,\r\n\t\ttextClassName,\r\n\t\tinputClassName,\r\n\t\ticonClassName,\r\n\t\tbuttonVariant,\r\n\t\tvariant,\r\n\t\tseverity,\r\n\t\tsize,\r\n\t\tmode = \"buttons\",\r\n\t\t...rest\r\n\t}: ConfirmEditInputProps,\r\n\tref: React.Ref<HTMLInputElement>,\r\n) {\r\n\tconst [text, setText] = useState<string | undefined>(value?.toString())\r\n\tconst [input, setInput] = useState<string | undefined>(value?.toString())\r\n\tconst [isEditMode, setIsEditMode] = useState<boolean>(false)\r\n\r\n\tconst isConfirmDisabled = !input || text === input\r\n\r\n\tconst onInputChange = useCallback(\r\n\t\t(e: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\tsetInput(e.target.value?.toString())\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(e)\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onChange],\r\n\t)\r\n\r\n\tconst onPencilClick = useCallback(() => {\r\n\t\tsetIsEditMode(true)\r\n\t\tif (onEditActivate) {\r\n\t\t\tonEditActivate(text)\r\n\t\t}\r\n\t}, [onEditActivate, text])\r\n\r\n\tconst onCheckClick = useCallback(() => {\r\n\t\tsetText(input)\r\n\t\tsetIsEditMode(false)\r\n\t\tif (onEditConfirm) {\r\n\t\t\tonEditConfirm(input)\r\n\t\t}\r\n\t}, [onEditConfirm, input])\r\n\r\n\tconst onCancelClick = useCallback(() => {\r\n\t\tsetIsEditMode(false)\r\n\t\tconst prevInput = input\r\n\t\tsetInput(text)\r\n\t\tif (onEditCancel) {\r\n\t\t\tonEditCancel(prevInput)\r\n\t\t}\r\n\t}, [text, input, onEditCancel])\r\n\r\n\tconst handleKeyDown = useCallback(\r\n\t\t(e: React.KeyboardEvent<HTMLInputElement>) => {\r\n\t\t\tif (mode !== \"keys\") {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tswitch (e.key) {\r\n\t\t\t\tcase \"Enter\":\r\n\t\t\t\t\tif (!isConfirmDisabled) onCheckClick()\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase \"Escape\":\r\n\t\t\t\t\tonCancelClick()\r\n\t\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onCheckClick, onCancelClick, isConfirmDisabled, mode],\r\n\t)\r\n\r\n\treturn (\r\n\t\t<HoverUtility>\r\n\t\t\t{({ isHovered, ...props }) => (\r\n\t\t\t\t<Flex className={styles.editableTextContainer} gap=\"3\" {...props}>\r\n\t\t\t\t\t<Input\r\n\t\t\t\t\t\tclassName={classNames(\r\n\t\t\t\t\t\t\tisEditMode ? styles.editableTextInput : styles.editableTextText,\r\n\t\t\t\t\t\t\tisEditMode ? inputClassName : textClassName,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\tonClick={() => !isEditMode && mode === \"keys\" && onPencilClick()}\r\n\t\t\t\t\t\tvalue={isEditMode ? input : text}\r\n\t\t\t\t\t\tonChange={onInputChange}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tautoFocus\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\t\treadOnly={!isEditMode}\r\n\t\t\t\t\t\tstyle={\r\n\t\t\t\t\t\t\tisEditMode\r\n\t\t\t\t\t\t\t\t? undefined\r\n\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\tcursor: mode === \"keys\" ? \"text\" : \"unset\",\r\n\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{mode === \"buttons\" &&\r\n\t\t\t\t\t\t(isEditMode ? (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tclassName={classNames(iconClassName, styles.icon, !isHovered && styles.iconHidden)}\r\n\t\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\t\tvariant={buttonVariant}\r\n\t\t\t\t\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\t\t\t\t\tdisabled={isConfirmDisabled}\r\n\t\t\t\t\t\t\t\t\tonClick={onCheckClick}\r\n\t\t\t\t\t\t\t\t\taria-label=\"Confirm edit\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<CheckIcon />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tclassName={classNames(iconClassName, styles.icon, !isHovered && styles.iconHidden)}\r\n\t\t\t\t\t\t\t\t\tcolor=\"red\"\r\n\t\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\t\tvariant={buttonVariant}\r\n\t\t\t\t\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\t\t\t\t\tonClick={onCancelClick}\r\n\t\t\t\t\t\t\t\t\taria-label=\"Cancel edit\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Cross1Icon />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tclassName={classNames(\r\n\t\t\t\t\t\t\t\t\ticonClassName,\r\n\t\t\t\t\t\t\t\t\tstyles.editIcon,\r\n\t\t\t\t\t\t\t\t\tstyles.icon,\r\n\t\t\t\t\t\t\t\t\t!isHovered && styles.iconHidden,\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\tvariant={buttonVariant}\r\n\t\t\t\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\t\t\t\tonClick={onPencilClick}\r\n\t\t\t\t\t\t\t\taria-label=\"Edit text\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Pencil1Icon />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t</Flex>\r\n\t\t\t)}\r\n\t\t</HoverUtility>\r\n\t)\r\n})\r\n\r\nexport const ConfirmEditInput: FC<ConfirmEditInputProps> = React.memo(_ConfirmEditInput)\r\n"],"names":["classNames","value","Badge","RadixBadge","radius","zeroMinWidth","zeroMinHeight","RadixFlex","styles","Text","_Button","Button","fluid","RadixButton","RadixIconButton","ButtonGroup","merged","Flex","DialogContent","Dialog","IconButton","RadixDialog","AlertDialog","AlertDialogContent","RadixAlertDialog","AlertDialogProvider","RadixDropdownMenu","BaseMenuSeparator","BaseItemGroup","rest","index","BaseSelectGroup","BaseMultiSelectGroup","BaseSubMenuGroup","DropdownMenuItemGroup","DropdownMenuSelectGroup","DropdownMenuMultiSelectGroup","DropdownMenuSubMenuGroup","DropdownMenu","Select","RadixSelect","Checkbox","open","Switch","checked","RadixSwitch","Sidebar","overlay","resizable","TRANSITION_DURATION","SlideOut","resizeHandle","Input","RadixTextField","IconColorUtility","Popover","RadixPopover","MultiPagePopover","TextArea","RadixTextArea","ToggleGroup","Root","Item","ToolBarRoot","Toast","toast","RadixToastProvider","ToastViewport","RadixToolTip","noWrap","RadixText","Separator","RadixSeparator","$3vqmr$useCallback","$3bkAK$createContext","$3bkAK$useMemo","$3bkAK$createElement","useContext","$3bkAK$useContext","$lwiWj$useRef","$lwiWj$useEffect","$lwiWj$useMemo","$bnPw9$useCallbackRef","$bnPw9$useCallback","$bnPw9$useState","$bnPw9$useRef","$bnPw9$useEffect","$8LvvK$useRef","$8LvvK$useMemo","$dxlwH$useLayoutEffect","$9gyGR$useState","$9gyGR$useLayoutEffect","initialState","$iqq3r$useReducer","$iqq3r$Children","$iqq3r$useComposedRefs","$iqq3r$cloneElement","$iqq3r$useState","$iqq3r$useRef","$iqq3r$useEffect","$iqq3r$useLayoutEffect","$iqq3r$flushSync","$iqq3r$useCallback","$9IrjX$forwardRef","$9IrjX$Children","$9IrjX$isValidElement","$9IrjX$createElement","$9IrjX$babelruntimehelpersesmextends","$9IrjX$cloneElement","$9IrjX$composeRefs","$9IrjX$Fragment","$4q5Fq$forwardRef","$4q5Fq$Slot","$4q5Fq$useEffect","$4q5Fq$createElement","$4q5Fq$babelruntimehelpersesmextends","$1bpvS$createContextScope","$1bpvS$forwardRef","$1bpvS$useState","$1bpvS$useComposedRefs","$1bpvS$useRef","$1bpvS$useControllableState","$1bpvS$useEffect","$1bpvS$createElement","$1bpvS$Primitive","$1bpvS$babelruntimehelpersesmextends","$1bpvS$composeEventHandlers","$1bpvS$Presence","$1bpvS$usePrevious","$1bpvS$useSize","RadixCheckbox.Root","RadixCheckbox.Indicator","SelectAllCheckbox","Table","_a","ReactLibraryTable","ConfirmEditInput"],"mappings":"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","x_google_ignoreList":[0,54,55,56,57,58,59,60,61,62,63,64,65,66]}
|