@loadsmart/loadsmart-ui 7.2.0 → 7.3.0
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/README.md +2 -0
- package/dist/DragDropFile.context-bbb7d631.js +1 -1
- package/dist/DragDropFile.context-bbb7d631.js.map +1 -1
- package/dist/index.js +472 -472
- package/dist/index.js.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Calendar/DateFormat.helper.test.ts +6 -0
- package/src/components/Calendar/DateFormat.helper.ts +1 -1
- package/src/stories/introduction.stories.mdx +2 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/styles/transition.tsx","../src/components/IconFactory/IconFactory.tsx","../src/components/Icon/assets/back.svg","../src/components/Icon/assets/burger-menu.svg","../src/components/Icon/assets/calendar.svg","../src/components/Icon/assets/caret-down.svg","../src/components/Icon/assets/caret-left.svg","../src/components/Icon/assets/check.svg","../src/components/Icon/assets/chevron-down.svg","../src/components/Icon/assets/caret-right.svg","../src/components/Icon/assets/circle.svg","../src/components/Icon/assets/close.svg","../src/components/Icon/assets/information.svg","../src/components/Icon/assets/minus.svg","../src/components/Icon/assets/plus.svg","../src/components/Icon/assets/refresh.svg","../src/components/Icon/assets/sort-asc.svg","../src/components/Icon/assets/sort-desc.svg","../src/components/Icon/assets/sort.svg","../src/components/Icon/assets/upload.svg","../src/components/Icon/assets/warning.svg","../src/components/Icon/assets/dots-horizontal.svg","../src/components/Icon/assets/caret-right-last.svg","../src/components/Icon/Icon.tsx","../node_modules/lodash.flatten/index.js","../node_modules/lodash.isempty/index.js","../src/utils/toolset/interleave.ts","../src/styles/activatable.tsx","../src/styles/disableable.tsx","../src/styles/focusable.tsx","../src/styles/hoverable.tsx","../node_modules/lodash.omit/index.js","../src/styles/font.tsx","../src/styles/typography.ts","../src/components/Loaders/Spinner.tsx","../src/components/Layout/Layout.utils.ts","../src/components/Layout/Group.tsx","../src/components/Layout/Stack.tsx","../src/components/Layout/Box.tsx","../src/components/Layout/Sidebar.tsx","../src/components/Layout/Switcher.tsx","../src/components/Layout/Grid.tsx","../src/components/Layout/Layout.tsx","../src/components/Loaders/LoadingBar.tsx","../src/components/Loaders/LoadingDots.tsx","../src/components/Button/Button.tsx","../src/styles/ellipsizable.tsx","../src/common/CloseButton/CloseButton.tsx","../src/common/BackButton/BackButton.tsx","../node_modules/clsx/dist/clsx.m.js","../src/common/SelectionWrapper.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/hooks/useFocusWithin/useFocusWithin.ts","../src/utils/types/Status.ts","../src/components/TextField/TextField.tsx","../src/components/Textarea/Textarea.tsx","../node_modules/@loadsmart/utils-string/lib/objectFromQueryString.js","../node_modules/@loadsmart/utils-string/lib/queryStringFromObject.js","../node_modules/@loadsmart/utils-string/lib/toCapitalizeFirstLetter.js","../node_modules/@loadsmart/utils-string/lib/toLocaleCapitalizeFirstLetter.js","../node_modules/@loadsmart/utils-string/lib/isBlank.js","../node_modules/@loadsmart/utils-string/lib/index.js","../src/components/Link/useSafeLink.ts","../src/components/Link/Link.tsx","../src/components/Breadcrumbs/Breadcrumb.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/hooks/useDidMount/useDidMount.ts","../src/hooks/useSelectable/SelectableStrategy.ts","../node_modules/lodash.range/index.js","../src/utils/toolset/getID.ts","../src/hooks/useSelectable/useSelectable.ts","../src/hooks/useFingerprint/useFingerprint.ts","../src/components/ToggleGroup/ToggleGroupContext.ts","../src/components/ToggleGroup/Toggle.tsx","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Tabs/TabsContext.ts","../src/hooks/useID/useID.ts","../src/components/Tabs/Tabs.tsx","../src/components/Section/Section.tsx","../src/styles/hidden.tsx","../src/components/Accordion/Accordion.context.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Banner/Banner.tsx","../src/components/Text/Text.tsx","../src/components/Modal/Modal.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Dialog/useDialog.tsx","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js","../src/components/Popover/Popover.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Label/Label.tsx","../src/components/Pagination/Pagination.constants.ts","../src/components/Pagination/PaginationItem.tsx","../src/components/Pagination/Pagination.helper.ts","../src/components/Pagination/usePagination.ts","../src/components/ProgressBar/ProgressBar.tsx","../src/components/Switch/Switch.tsx","../src/components/Tag/Tag.tsx","../src/components/Toast/Toast.tsx","../src/components/Steps/Steps.helpers.ts","../src/components/Steps/StepsContext.ts","../src/components/Steps/ProgressSteps/ProgressStep.tsx","../src/components/Steps/ProgressSteps/ProgressSteps.tsx","../src/components/Steps/StepsStep.tsx","../src/components/Steps/Steps.tsx","../src/components/Card/CardTitle.tsx","../src/components/Card/Card.tsx","../src/components/Dropdown/Dropdown.context.ts","../src/components/Dropdown/DropdownMenu.tsx","../src/utils/toolset/keyboard.ts","../src/hooks/useClickOutside/useClickOutside.ts","../src/components/Dropdown/DropdownTrigger.tsx","../src/components/Dropdown/useDropdown.ts","../src/components/Dropdown/Dropdown.tsx","../src/components/Select/Select.context.ts","../src/utils/toolset/pluralize.ts","../src/components/Select/SelectTrigger.tsx","../src/hooks/useFocusTrap/useFocusTrap.ts","../src/components/Select/Select.constants.ts","../src/components/Select/useSelect.helpers.ts","../src/components/Select/useSelect.ts","../src/utils/toolset/isThenable.ts","../src/components/HighlightMatch/HighlightMatch.tsx","../src/utils/toolset/highlightMatch.tsx","../src/components/Select/SelectOption.tsx","../src/components/Select/SelectEmpty.tsx","../src/components/Select/SelectCreatableOption.tsx","../src/components/Select/components.tsx","../src/components/Select/Select.tsx","../src/components/SideNavigation/Logo/Logo.tsx","../src/hooks/useHeightExpansionToggler/useHeightExpansionToggler.ts","../src/components/SideNavigation/Menu/MenuBaseItem.tsx","../src/components/SideNavigation/Menu/MenuLink.tsx","../src/components/SideNavigation/Menu/MenuExpandable.tsx","../src/components/SideNavigation/Menu/Menu.tsx","../src/utils/toolset/styledCompounds.ts","../src/components/SideNavigation/Separator/Separator.tsx","../src/components/SideNavigation/SideNavigation.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Table/Selection.tsx","../src/components/Table/TableSortHandle.tsx","../src/components/Table/Table.tsx","../src/components/TopNavigation/Logo/Logo.tsx","../src/components/TopNavigation/Menu/MenuItemDropdown.tsx","../src/components/TopNavigation/Menu/MenuItemIcon.tsx","../src/components/TopNavigation/Menu/Menu.tsx","../src/components/TopNavigation/OpenSideNavButton/OpenSideNavButton.tsx","../src/components/TopNavigation/TopNavigation.tsx","../src/components/EmptyState/EmptyStateWithIcon.tsx","../src/components/EmptyState/Illustration.tsx","../src/components/EmptyState/EmptyStateWithIllustration.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Calendar/Month.helper.ts","../src/components/Calendar/PickerModeToggle.tsx","../src/components/Calendar/Date.helper.ts","../src/components/Calendar/useCalendar.ts","../src/utils/toolset/getOrdinalSuffix.ts","../src/components/Calendar/DateFormat.helper.ts","../src/components/Calendar/Pickers/PickerButton.tsx","../src/components/Calendar/Pickers/DayPicker.tsx","../src/components/Calendar/Pickers/MonthPicker.tsx","../src/components/Calendar/Pickers/YearPicker.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Calendar/usePickerMode.ts","../src/components/Calendar/Calendar.helpers.ts","../src/components/DatePicker/useDatePicker.ts","../src/components/DatePicker/DatePicker.tsx","../src/components/DatePicker/useDateRangePicker.ts","../src/components/DatePicker/DateRangePicker.tsx","../src/components/ErrorMessage/ErrorMessage.tsx","../src/components/DragDropFile/styles.tsx","../src/utils/toolset/formatBytes.ts","../src/components/DragDropFile/components/FileItem.tsx","../src/components/DragDropFile/DragDropFile.tsx","../src/components/DragDropFile/components/Wrapper.tsx","../src/components/DragDropFile/components/DropZone.tsx","../src/components/DragDropFile/components/FileList.tsx","../src/components/TablePagination/TablePagination.styles.ts","../src/components/TablePagination/TablePaginationActions.tsx","../src/components/TablePagination/RowsPerPage.tsx","../src/components/VisuallyHidden/VisuallyHidden.tsx","../src/components/Pagination/Pagination.tsx","../src/components/TablePagination/TablePagination.tsx","../src/components/Select/useSelectExternal.ts","../src/components/SideNavigation/useSideNavigation.ts","../src/hooks/useWindowResize/useWindowResize.ts","../src/components/Steps/useSteps.ts","../src/components/TextField/useTextField.tsx"],"sourcesContent":["interface TransitionStyleOptions {\n property?: string\n timingFunction?: string\n duration?: string\n}\n\n/**\n * Add basic CSS style for default transition parameters\n * @returns {string}\n */\nfunction transitionStyle(options?: TransitionStyleOptions): string {\n // TODO: add parameter to type of transition\n\n return `\n transition-property: ${\n options?.property ||\n 'background, border-color, box-shadow, color, fill, left, stroke, transform, opacity'\n };\n transition-timing-function: ${options?.timingFunction || 'cubic-bezier(0.4, 0, 0.2, 1)'};\n transition-duration: ${options?.duration || '450ms'};\n transition-delay: 0ms;\n `\n}\n\nexport default transitionStyle\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\n\nimport transition from 'styles/transition'\nimport { getToken as token } from 'theming'\n\nimport type { ThemeToken } from 'theming'\n\ntype ThemeColors = keyof {\n [ColorToken in ThemeToken as ColorToken extends `color-${infer Token}`\n ? Token\n : never]: ColorToken\n}\n\nconst Wrapper = styled.span<{ $color?: ThemeColors }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n &,\n & > svg {\n ${transition({\n property: 'transform',\n })}\n\n /*\n * prop('$color', 'currentColor')\n * Not using the prop helper function since we can't return\n * an evaluated token from it\n */\n color: ${(props) =>\n props.$color ? token(`color-${props.$color}` as ThemeToken, props) : 'currentColor'};\n\n fill: currentColor;\n }\n`\n\nexport interface IconProps<T> {\n name: keyof T\n size?: string | number\n width?: string | number\n height?: string | number\n className?: string\n color?: ThemeColors\n}\n\nexport type IconMapping = Record<string, JSX.Element | ((props: never) => JSX.Element)>\n\nexport function UnknownIcon(): JSX.Element {\n return <span aria-label=\"Unknown icon\">☹</span>\n}\n\nfunction IconFactory(map: IconMapping): (props: IconProps<typeof map>) => JSX.Element {\n function getIcon(name: keyof typeof map): ReactNode | null {\n // eslint-disable-next-line no-param-reassign\n name = String(name || '').toLowerCase()\n\n if (!(name in map)) return UnknownIcon\n\n return map[name]\n }\n\n return function Icon(props: IconProps<typeof map>) {\n const { name, size, width = '1em', height = '1em', className, color, ...rest } = props\n\n const I = getIcon(name) as typeof React.Component\n return (\n <Wrapper className={className} $color={color}>\n <I width={size || width} height={size || height} {...rest} />\n </Wrapper>\n )\n }\n}\n\nexport default IconFactory\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\" />\n</svg>\n","<svg viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4 37.6667H44V33.2222H4V37.6667ZM4 26.5556H44V22.1111H4V26.5556ZM4 11V15.4444H44V11H4Z\" fill=\"#313336\"/>\n</svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path\n d=\"M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V10h16v11zm0-13H4V5h16v3z\" />\n</svg>\n","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M24 30L13 19H35L24 30Z\" clip-rule=\"evenodd\" />\n</svg>\n","<svg viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M30 42.3848L34.2426 38.1421L20.1005 24L34.2426 9.85786L30 5.61522L15.8579 19.7574L11.6152 24L15.8579 28.2426L30 42.3848Z\" />\n</svg>\n","<svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M44.4203 13.3431L40.1777 9.1005L18.9645 30.3137L9.06496 20.4142L4.82232 24.6569L14.7218 34.5563L18.9645 38.799L23.2071 34.5563L44.4203 13.3431Z\" />\n</svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z\" />\n</svg>\n","<svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M18 5.61522L13.7574 9.85786L27.8995 24L13.7574 38.1421L18 42.3848L32.1421 28.2426L36.3848 24L32.1421 19.7574L18 5.61522Z\" />\n</svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\">\n <circle cx=\"9\" cy=\"9\" r=\"9\" fill-rule=\"evenodd\" />\n</svg>\n","<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M17.0711 4.69671L15.3033 2.92894L10 8.23224L4.6967 2.92894L2.92893 4.69671L8.23223 10L2.92893 15.3033L4.6967 17.0711L10 11.7678L15.3033 17.0711L17.0711 15.3033L11.7678 10L17.0711 4.69671Z\" />\n</svg>\n","<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M12 2C6.48625 2 2 6.48625 2 12C2 17.5138 6.48625 22 12 22C17.5138 22 22 17.5138 22 12C22 6.48625 17.5138 2 12 2ZM12 19.2727C11.2473 19.2727 10.6364 18.6618 10.6364 17.9091C10.6364 17.1564 11.2473 16.5455 12 16.5455C12.7527 16.5455 13.3636 17.1564 13.3636 17.9091C13.3636 18.6618 12.7527 19.2727 12 19.2727ZM13.3636 14.2727H10.6364L10.6364 5.18182L13.3636 5.18182L13.3636 14.2727Z\" />\n</svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 13H5v-2h14v2z\" />\n</svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <rect fill=\"none\" height=\"24\" width=\"24\" />\n <path d=\"M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6V13z\" />\n</svg>\n","<svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.782 1.5a4.499 4.499 0 0 0-4.437 3.785l-.89-.888-.705.705 2.123 2.123 2.12-2.122-.708-.708-.935.935A3.503 3.503 0 0 1 6.782 2.5c1.93 0 3.5 1.57 3.5 3.5s-1.57 3.5-3.5 3.5v1a4.5 4.5 0 0 0 0-9Z\" />\n</svg>\n","<svg viewBox=\"0 0 10 11\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\">\n <path id=\"svg_1\" fill=\"#313336\" d=\"m4.58334,0l4.58332,4.41667l-9.16666,0l4.58334,-4.41667z\" clip-rule=\"evenodd\"\n fill-rule=\"evenodd\" />\n <path id=\"svg_2\" fill=\"#CACCCF\" d=\"m4.58335,10.83337l-4.58333,-4.4167l9.16664,0l-4.58331,4.4167z\"\n clip-rule=\"evenodd\" fill-rule=\"evenodd\" />\n\n</svg>\n","<svg viewBox=\"0 0 10 11\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\">\n <path id=\"svg_1\" fill=\"#CACCCF\" d=\"m4.58334,0l4.58332,4.41667l-9.16666,0l4.58334,-4.41667z\" clip-rule=\"evenodd\"\n fill-rule=\"evenodd\" />\n <path id=\"svg_2\" fill=\"#313336\" d=\"m4.58335,10.83337l-4.58333,-4.4167l9.16664,0l-4.58331,4.4167z\"\n clip-rule=\"evenodd\" fill-rule=\"evenodd\" />\n\n</svg>\n","<svg viewBox=\"0 0 10 11\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\">\n <path id=\"svg_1\" fill=\"#313336\" d=\"m4.58334,0l4.58332,4.41667l-9.16666,0l4.58334,-4.41667z\" clip-rule=\"evenodd\"\n fill-rule=\"evenodd\" />\n <path id=\"svg_2\" fill=\"#313336\" d=\"m4.58335,10.83337l-4.58333,-4.4167l9.16664,0l-4.58331,4.4167z\"\n clip-rule=\"evenodd\" fill-rule=\"evenodd\" />\n\n</svg>\n","<svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M39.0129 20.0894H29.9817V36.097H19.0291V20.0894H9.01953L24.1351 5L39.0129 20.0894ZM9 40V44H39V40H9Z\" />\n</svg>\n","<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path clip-rule=\"evenodd\"\n d=\"M3.79753 20.9444H20.2031C21.1809 20.9444 21.8064 19.9034 21.3454 19.0421L13.142 3.68477C12.655 2.77174 11.3443 2.77174 10.856 3.68477L2.65392 19.0421C2.19415 19.9034 2.8197 20.9444 3.79753 20.9444ZM10.7045 9.30522H13.2948V14.4782H10.7045V9.30522ZM11.9996 15.7715C12.7146 15.7715 13.2948 16.3508 13.2948 17.0647C13.2948 17.7786 12.7146 18.358 11.9996 18.358C11.2847 18.358 10.7045 17.7786 10.7045 17.0647C10.7045 16.3508 11.2847 15.7715 11.9996 15.7715Z\" />\n</svg>\n","<svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14 24a5 5 0 11-10 0 5 5 0 0110 0zm15 0a5 5 0 11-10 0 5 5 0 0110 0zm15 0a5 5 0 11-10 0 5 5 0 0110 0z\" fill=\"currentColor\" fill-rule=\"evenodd\"/></svg>","<svg viewBox=\"0 0 48 48\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18.2501 6.38126L14.1842 10.4471L27.7371 24L14.1842 37.5529L18.2501 41.6187L31.803 28.0659L35.8688 24L31.803 19.9341L18.2501 6.38126Z\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M40.2922 38.375L44.1256 38.375L44.1256 9.625L40.2922 9.625L40.2922 38.375Z\"/>\n</svg>\n","import { IconFactory } from '../IconFactory'\n\nimport BackIcon from './assets/back.svg'\nimport BurguerMenuIcon from './assets/burger-menu.svg'\nimport CalendarIcon from './assets/calendar.svg'\nimport CaretDownIcon from './assets/caret-down.svg'\nimport CaretLeftIcon from './assets/caret-left.svg'\nimport CheckIcon from './assets/check.svg'\nimport ChevronDownIcon from './assets/chevron-down.svg'\nimport ChevronRightIcon from './assets/caret-right.svg'\nimport CircleIcon from './assets/circle.svg'\nimport CloseIcon from './assets/close.svg'\nimport InformationIcon from './assets/information.svg'\nimport MinusIcon from './assets/minus.svg'\nimport PlusIcon from './assets/plus.svg'\nimport RefreshIcon from './assets/refresh.svg'\nimport SortAscIcon from './assets/sort-asc.svg'\nimport SortDescIcon from './assets/sort-desc.svg'\nimport SortIcon from './assets/sort.svg'\nimport UploadIcon from './assets/upload.svg'\nimport WarningIcon from './assets/warning.svg'\nimport DotsHorizontalIcon from './assets/dots-horizontal.svg'\nimport CaretRightLastIcon from './assets/caret-right-last.svg'\n\nimport type { IconProps as GenericIconProps } from '../IconFactory'\n\nconst icons = {\n 'burguer-menu': BurguerMenuIcon as JSX.Element,\n calendar: CalendarIcon as JSX.Element,\n 'caret-down': CaretDownIcon as JSX.Element,\n 'caret-left': CaretLeftIcon as JSX.Element,\n 'caret-right': ChevronRightIcon as JSX.Element,\n 'chevron-down': ChevronDownIcon as JSX.Element,\n back: BackIcon as JSX.Element,\n check: CheckIcon as JSX.Element,\n circle: CircleIcon as JSX.Element,\n close: CloseIcon as JSX.Element,\n information: InformationIcon as JSX.Element,\n minus: MinusIcon as JSX.Element,\n plus: PlusIcon as JSX.Element,\n refresh: RefreshIcon as JSX.Element,\n sort: SortIcon as JSX.Element,\n 'sort-asc': SortAscIcon as JSX.Element,\n 'sort-desc': SortDescIcon as JSX.Element,\n upload: UploadIcon as JSX.Element,\n warning: WarningIcon as JSX.Element,\n 'dots-horizontal': DotsHorizontalIcon as JSX.Element,\n 'caret-right-last': CaretRightLastIcon as JSX.Element,\n}\n\nconst Icon = IconFactory(icons)\n\nexport type IconProps = GenericIconProps<typeof icons>\n\nexport default Icon\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array ? array.length : 0;\n return length ? baseFlatten(array, 1) : [];\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = flatten;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap');\n\n/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */\nvar nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' ||\n typeof value.splice == 'function' || isBuffer(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (nonEnumShadows || isPrototype(value)) {\n return !nativeKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEmpty;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport flatten from './flatten'\nimport isEmpty from './isEmpty'\nimport toArray from './toArray'\n\n// TODO: add this helper to @loadsmart/utils\n\nfunction interleave<T>(array1: Array<T>, array2: Array<T>): T[] {\n const safeArray1 = toArray(array1)\n const safeArray2 = toArray(array2)\n\n if (isEmpty(safeArray1) && isEmpty(safeArray2)) {\n return []\n } else if (isEmpty(safeArray1)) {\n return safeArray2\n } else if (isEmpty(safeArray2)) {\n return safeArray1\n }\n\n return flatten(safeArray1.map((element, index) => [element, safeArray2[index]]))\n}\n\nexport default interleave\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport interleave from 'utils/toolset/interleave'\nimport type { InterpolatedStyle } from 'utils/types/InterpolatedStyle'\n\n/**\n * Add basic CSS style wrapping block for `:active` state.\n * It returns an array to allow handling of nested interpolation\n * @param {ReadonlyArray<string> | Array<string>} strings - String parts for the interpolation.\n * @param {any[]} args - Interpolated items.\n * @returns {any[]}\n */\nfunction activatableStyle(\n strings?: ReadonlyArray<string> | Array<string>,\n ...args: any[]\n): InterpolatedStyle {\n const safeStrings = (strings || []).concat() // ReadonlyArray -> Array\n\n return [\n `\n &:enabled:not(.is-disabled) {\n &:active {`,\n ...(interleave(safeStrings, args) as InterpolatedStyle),\n `\n }\n }\n `,\n ]\n}\n\nexport default activatableStyle\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport interleave from 'utils/toolset/interleave'\nimport type { InterpolatedStyle } from 'utils/types/InterpolatedStyle'\n\n/**\n * Add basic CSS style wrapping block for `:disabled` state or `.is-disabled` class.\n * It returns an array to allow handling of nested interpolation\n * @param {ReadonlyArray<string> | Array<string>} strings - String parts for the interpolation.\n * @param {any[]} args - Interpolated items.\n * @returns {any[]}\n */\nfunction disableableStyle(\n strings?: ReadonlyArray<string> | Array<string>,\n ...args: any[]\n): InterpolatedStyle {\n const safeStrings = (strings || []).concat() // ReadonlyArray -> Array\n\n return [\n `\n &.is-disabled,\n &:disabled {\n cursor: not-allowed;\n opacity: 0.40;\n\n user-select: none;\n\n &:active {\n pointer-events: none;\n }`,\n ...(interleave(safeStrings, args) as InterpolatedStyle),\n `\n }\n\n // prevent overlapping the opacity for nested disabled elements\n .is-disabled &.is-disabled,\n .is-disabled &[disabled],\n [disabled] &[disabled],\n [disabled] &.is-disabled {\n opacity: 1 !important;\n }\n `,\n ]\n}\n\nexport default disableableStyle\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport interleave from 'utils/toolset/interleave'\nimport type { InterpolatedStyle } from 'utils/types/InterpolatedStyle'\n/**\n * Add basic CSS style wrapping block for `:active` state.\n * It returns an array to allow handling of nested interpolation\n * @param {ReadonlyArray<string> | Array<string>} strings - String parts for the interpolation.\n * @param {any[]} args - Interpolated items.\n * @returns {any[]}\n */\nfunction focusableStyle(\n strings?: ReadonlyArray<string> | Array<string>,\n ...args: any[]\n): InterpolatedStyle {\n const safeStrings = (strings || []).concat() // ReadonlyArray -> Aray\n\n return [\n `\n outline: none;\n\n &:focus,\n &:focus-within,\n &.is-focused {\n outline: none;`,\n ...(interleave(safeStrings, args) as InterpolatedStyle),\n `\n }\n `,\n ]\n}\n\nexport default focusableStyle\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport interleave from 'utils/toolset/interleave'\nimport type { InterpolatedStyle } from 'utils/types/InterpolatedStyle'\n\n/**\n * Add basic CSS style wrapping block for `:hover` state; it includes check for non-disabled (`:enabled` or not `.is-disabled`) elements.\n * It returns an array to allow handling of nested interpolation\n * @param {ReadonlyArray<string> | Array<string>} strings - String parts for the interpolation.\n * @param {any[]} args - Interpolated items.\n * @returns {any[]}\n */\nfunction hoverableStyle(\n strings?: ReadonlyArray<string> | Array<string>,\n ...args: any[]\n): InterpolatedStyle {\n const safeStrings = (strings || []).concat() // ReadonlyArray -> Array\n\n return [\n `\n &:not(.is-disabled):not(:disabled) {\n &:hover {`,\n ...(interleave(safeStrings, args) as InterpolatedStyle),\n `\n }\n }\n `,\n ]\n}\n\nexport default hoverableStyle\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeMax = Math.max;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, props) {\n object = Object(object);\n return basePickBy(object, props, function(value, key) {\n return key in object;\n });\n}\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick from.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, props, predicate) {\n var index = -1,\n length = props.length,\n result = {};\n\n while (++index < length) {\n var key = props[index],\n value = object[key];\n\n if (predicate(value, key)) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Creates an array of the own and inherited enumerable symbol properties\n * of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable string keyed properties of `object` that are\n * not omitted.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [props] The property identifiers to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = baseRest(function(object, props) {\n if (object == null) {\n return {};\n }\n props = arrayMap(baseFlatten(props, 1), toKey);\n return basePick(object, baseDifference(getAllKeysIn(object), props));\n});\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = omit;\n","import { css } from 'styled-components'\nimport type { FlattenInterpolation } from 'styled-components'\n\nimport { getToken } from 'theming'\nimport type { ThemedProps, ThemeToken } from 'theming'\n\ninterface FontStyleOptions {\n size?: ThemeToken\n family?: ThemeToken\n weight?: ThemeToken\n height?: ThemeToken\n color?: ThemeToken\n transform?: 'uppercase' | 'none'\n}\n\n/**\n * Add basic CSS style for default font\n * @returns {FlattenInterpolation}\n */\nfunction fontStyle({\n color = 'color-neutral-darkest',\n weight = 'font-weight-regular',\n size = 'font-size-4',\n family = 'font-family-default',\n height = 'font-height-3',\n transform = 'none',\n}: FontStyleOptions): FlattenInterpolation<ThemedProps> {\n return css`\n color: ${getToken(color)};\n font-weight: ${getToken(weight)};\n font-size: ${getToken(size)};\n font-family: ${getToken(family)};\n line-height: ${getToken(height)};\n text-transform: ${transform};\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n `\n}\n\nexport default fontStyle\n","import { css, ThemedStyledProps } from 'styled-components'\nimport type { FlattenInterpolation } from 'styled-components'\nimport { isFunction } from '@loadsmart/utils-function'\n\nimport conditional from 'tools/conditional'\nimport type { CustomTheme, ThemeToken } from 'theming'\nimport fontStyle from './font'\n\nexport type TypographyOptions = {\n italic?: boolean\n color?: ThemeToken\n}\n\ntype PropertiesToken = {\n fontSize: ThemeToken\n lineHeight: ThemeToken\n fontWeight: ThemeToken\n fontFamily?: ThemeToken\n textTransform?: 'none' | 'uppercase'\n color?: ThemeToken\n}\n\nexport type TypographyVariants =\n | 'heading-lg'\n | 'heading-md'\n | 'heading-md-bold'\n | 'heading-sm'\n | 'heading-sm-bold'\n | 'body'\n | 'body-bold'\n | 'caption'\n | 'caption-bold'\n | 'number-sm'\n | 'number-md'\n | 'button-sm'\n | 'button-md'\n | 'button-lg'\n | 'table-header-sm'\n | 'table-header-md'\n | 'chips-sm'\n | 'link'\n\ntype TypographyProperties = Record<TypographyVariants, PropertiesToken>\n\nexport const typographyProperties: TypographyProperties = {\n 'heading-lg': {\n fontSize: 'font-size-1',\n lineHeight: 'font-height-1',\n fontWeight: 'font-weight-bold',\n },\n 'heading-md': {\n fontSize: 'font-size-2',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-medium',\n },\n 'heading-md-bold': {\n fontSize: 'font-size-2',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-bold',\n },\n 'heading-sm': {\n fontSize: 'font-size-3',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-medium',\n },\n 'heading-sm-bold': {\n fontSize: 'font-size-3',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-bold',\n },\n body: {\n fontSize: 'font-size-4',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-medium',\n },\n 'body-bold': {\n fontSize: 'font-size-4',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-bold',\n },\n caption: {\n fontSize: 'font-size-5',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-medium',\n },\n 'caption-bold': {\n fontSize: 'font-size-5',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-bold',\n },\n 'number-sm': {\n fontFamily: 'font-family-monospace',\n fontSize: 'font-size-5',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-medium',\n },\n 'number-md': {\n fontFamily: 'font-family-monospace',\n fontSize: 'font-size-4',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-medium',\n },\n 'button-sm': {\n fontSize: 'font-size-5',\n lineHeight: 'font-height-1',\n fontWeight: 'font-weight-bold',\n textTransform: 'uppercase',\n },\n 'button-md': {\n fontSize: 'font-size-4',\n lineHeight: 'font-height-1',\n fontWeight: 'font-weight-bold',\n textTransform: 'uppercase',\n },\n 'button-lg': {\n fontSize: 'font-size-3',\n lineHeight: 'font-height-1',\n fontWeight: 'font-weight-bold',\n textTransform: 'uppercase',\n },\n 'table-header-sm': {\n fontSize: 'font-size-5',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-bold',\n },\n 'table-header-md': {\n fontSize: 'font-size-4',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-bold',\n textTransform: 'uppercase',\n },\n 'chips-sm': {\n fontSize: 'font-size-6',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-bold',\n textTransform: 'uppercase',\n },\n link: {\n fontSize: 'font-size-4',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-medium',\n color: 'color-accent',\n },\n}\n\nconst DEFAULT_VARIANT: TypographyVariants = 'body'\n\nfunction getPropertiesByVariant(variant: TypographyVariants) {\n return variant in typographyProperties\n ? typographyProperties[variant]\n : typographyProperties[DEFAULT_VARIANT]\n}\n\ntype StyledTemplate<P> = FlattenInterpolation<ThemedStyledProps<P, CustomTheme>>\n\n/**\n * Standard styles for screen-rendered text\n * @param {TypographyVariants} variant Name of the variant\n * @param {TypographyOptions} options Add boldness, italics and color\n * @returns {FlattenInterpolation}\n */\nfunction typography<P>(\n variant: TypographyVariants | ((props: P) => string) = DEFAULT_VARIANT,\n options?: TypographyOptions\n): StyledTemplate<P> | ((props: P) => StyledTemplate<P>) {\n if (isFunction(variant)) {\n return ((props: P) => typography(variant(props) as TypographyVariants, options)) as (\n props: P\n ) => StyledTemplate<P>\n }\n\n const properties = getPropertiesByVariant(variant)\n\n return css`\n ${fontStyle({\n family: properties.fontFamily,\n height: properties.lineHeight,\n size: properties.fontSize,\n weight: properties.fontWeight,\n transform: properties.textTransform,\n color: properties.color || options?.color,\n })}\n\n ${conditional({\n 'font-style: italic;': options?.italic,\n })};\n `\n}\n\nexport default typography\n","import React from 'react'\nimport styled, { keyframes } from 'styled-components'\n\nconst ANIMATION_DURATION = 0.8\n\nconst animation = keyframes`\n 0% { opacity: 0 }\n 25% { opacity: 1 }\n 50% { opacity: 0.66 }\n 75% { opacity: 0.33; }\n 100% { opacity: 0 }\n`\n\ninterface LayerProps {\n index: number\n}\n\nconst Layer = styled.path<LayerProps>`\n animation-name: ${animation};\n animation-duration: ${ANIMATION_DURATION}s;\n animation-delay: -${(props) => props.index * (ANIMATION_DURATION / 4)}s;\n animation-iteration-count: infinite;\n`\n\nexport interface SpinnerProps {\n title?: string\n size: number\n}\n\nexport default function Spinner({ title, size, ...props }: SpinnerProps): JSX.Element {\n return (\n <svg\n {...props}\n viewBox=\"0 0 48 48\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n strokeMiterlimit=\"2\"\n clipRule=\"evenodd\"\n width={size}\n height={size}\n >\n <title>{title || 'Loading'}</title>\n <g\n id=\"surface1\"\n transform=\"matrix(0.0806777,0,0,0.0806777,0,-9.96047)\"\n fill=\"#33CC60\"\n fillRule=\"nonzero\"\n >\n <Layer\n index={0}\n d=\"M362.176,638.695C366.445,638.695 370.535,637 373.527,633.996L505.332,502.211L224.305,502.211C222.074,502.211 220.066,501.316 218.617,499.855L84.488,633.996C87.395,636.902 91.406,638.695 95.82,638.695L362.176,638.695Z\"\n />\n <Layer\n index={1}\n d=\"M376.164,482.289L512.648,482.289L512.648,217.34C512.648,212.906 510.855,208.898 507.945,205.988L373.809,340.121C375.266,341.578 376.164,343.59 376.164,345.805L376.164,482.289Z\"\n />\n <Layer\n index={2}\n d=\"M500.48,201.746L235.535,201.746L235.535,338.23L372.02,338.23C374.234,338.23 376.246,339.129 377.703,340.586L511.832,206.445C508.926,203.539 504.918,201.746 500.48,201.746Z\"\n />\n <Layer\n index={3}\n d=\"M215.449,495.488L215.449,214.461L83.668,346.262C80.66,349.289 78.965,353.359 78.965,357.625L78.965,623.973C78.965,628.398 80.758,632.406 83.668,635.313L217.805,501.176C216.348,499.715 215.449,497.707 215.449,495.488Z\"\n />\n </g>\n </svg>\n )\n}\n","import { css } from 'styled-components'\n\nimport type { FlattenInterpolation } from 'styled-components'\nimport type { ThemedProps } from 'theming'\n\nimport conditional, { whenProps } from 'tools/conditional'\n\nexport const getSpace = (prop: string): FlattenInterpolation<ThemedProps> => css`\n ${conditional({\n 'space-none': whenProps({ [prop]: 'none' }),\n 'space-2xs': whenProps({ [prop]: '2xs' }),\n 'space-xs': whenProps({ [prop]: 'xs' }),\n 'space-s': whenProps({ [prop]: 's' }),\n 'space-m': whenProps({ [prop]: 'm' }),\n 'space-l': whenProps({ [prop]: 'l' }),\n 'space-xl': whenProps({ [prop]: 'xl' }),\n 'space-2xl': whenProps({ [prop]: '2xl' }),\n 'space-3xl': whenProps({ [prop]: '3xl' }),\n })}\n`\n","import React from 'react'\nimport type { HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\n\nimport { getSpace } from './Layout.utils'\nimport type { Spacing, JustifyValue, AlignValue } from './Layout.types'\n\nexport interface GroupProps extends HTMLAttributes<HTMLElement> {\n space?: Spacing\n justify?: JustifyValue\n align?: AlignValue\n as?: string | React.ComponentType<any>\n}\n\nconst GroupContainer = styled.div<{\n $space: GroupProps['space']\n $justify: GroupProps['justify']\n $align: GroupProps['align']\n}>`\n display: flex;\n flex-wrap: wrap;\n gap: ${getSpace('$space')};\n\n align-items: ${conditional({\n center: whenProps({ $align: 'center' }),\n 'flex-start': whenProps({ $align: 'flex-start' }),\n 'flex-end': whenProps({ $align: 'flex-end' }),\n stretch: whenProps({ $align: 'stretch' }),\n })};\n\n justify-content: ${conditional({\n center: whenProps({ $justify: 'center' }),\n 'flex-start': whenProps({ $justify: 'flex-start' }),\n 'flex-end': whenProps({ $justify: 'flex-end' }),\n 'space-between': whenProps({ $justify: 'space-between' }),\n 'space-around': whenProps({ $justify: 'space-around' }),\n 'space-evenly': whenProps({ $justify: 'space-evenly' }),\n })};\n`\n\n/**\n * Group layout component.\n * @param {GroupProps} props\n */\nexport function Group(props: GroupProps): JSX.Element {\n const { space = 'm', justify = 'flex-start', align = 'flex-start', children, ...rest } = props\n\n return (\n <GroupContainer $space={space} $justify={justify} $align={align} {...rest}>\n {children}\n </GroupContainer>\n )\n}\n","import React from 'react'\nimport type { HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\n\nimport { getSpace } from './Layout.utils'\nimport type { Spacing, JustifyValue, AlignValue } from './Layout.types'\n\nexport interface StackProps extends HTMLAttributes<HTMLElement> {\n space?: Spacing\n justify?: JustifyValue\n align?: AlignValue\n as?: string | React.ComponentType<any>\n}\n\nexport const StackContainer = styled.div<{\n $space: StackProps['space']\n $justify: StackProps['justify']\n $align: StackProps['align']\n}>`\n display: flex;\n flex-direction: column;\n\n align-items: ${conditional({\n center: whenProps({ $align: 'center' }),\n 'flex-start': whenProps({ $align: 'flex-start' }),\n 'flex-end': whenProps({ $align: 'flex-end' }),\n stretch: whenProps({ $align: 'stretch' }),\n })};\n\n justify-content: ${conditional({\n center: whenProps({ $justify: 'center' }),\n 'flex-start': whenProps({ $justify: 'flex-start' }),\n 'flex-end': whenProps({ $justify: 'flex-end' }),\n 'space-between': whenProps({ $justify: 'space-between' }),\n 'space-around': whenProps({ $justify: 'space-around' }),\n 'space-evenly': whenProps({ $justify: 'space-evenly' }),\n })};\n\n & > * {\n margin-top: 0;\n margin-bottom: 0;\n }\n\n & > * + * {\n margin-top: ${getSpace('$space')};\n }\n`\n\n/**\n * Stack layout component.\n * @param {StackProps} props\n */\nexport function Stack(props: StackProps): JSX.Element {\n const { space = 'm', justify = 'flex-start', align = 'stretch', children, ...rest } = props\n\n return (\n <StackContainer $space={space} $justify={justify} $align={align} {...rest}>\n {children}\n </StackContainer>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport type { Spacing } from './Layout.types'\nimport { getSpace } from './Layout.utils'\n\nimport type { HTMLAttributes } from 'react'\n\nexport interface BoxProps extends HTMLAttributes<HTMLElement> {\n background?: 'transparent' | 'neutral-white' | 'neutral-lighter' | 'neutral-lightest'\n padding?: Spacing\n borderRadius?: 'none' | 's' | 'm' | 'l'\n borderWidth?: 'medium' | 'thin' | 'none'\n borderColor?: 'neutral-darker' | 'neutral-light' | 'neutral-lighter' | 'neutral-white' | 'primary'\n textAlign?: 'left' | 'center' | 'right'\n}\n\nconst BoxContainer = styled.div<{\n $background: BoxProps['background']\n $padding: BoxProps['padding']\n $borderRadius: BoxProps['borderRadius']\n $borderWidth: BoxProps['borderWidth']\n $borderColor: BoxProps['borderColor']\n $textAlign: BoxProps['textAlign']\n}>`\n padding: ${getSpace('$padding')};\n\n color: ${token('color-neutral-darker')};\n\n text-align: ${conditional({\n left: whenProps({ $textAlign: 'left' }),\n center: whenProps({ $textAlign: 'center' }),\n right: whenProps({ $textAlign: 'right' }),\n })};\n\n background-color: ${conditional({\n 'color-transparent': whenProps({ $background: 'transparent' }),\n 'color-neutral-white': whenProps({ $background: 'neutral-white' }),\n 'color-neutral-lighter': whenProps({ $background: 'neutral-lighter' }),\n 'color-neutral-lightest': whenProps({ $background: 'neutral-lightest' }),\n })};\n\n border-color: ${conditional({\n 'color-neutral-darker': whenProps({ $borderColor: 'neutral-darker' }),\n 'color-neutral-light': whenProps({ $borderColor: 'neutral-light' }),\n 'color-neutral-lighter': whenProps({ $borderColor: 'neutral-lighter' }),\n 'color-neutral-white': whenProps({ $borderColor: 'neutral-white' }),\n 'color-primary': whenProps({ $borderColor: 'primary' }),\n })};\n\n border-style: solid;\n\n border-width: ${conditional({\n 'border-width-medium': whenProps({ $borderWidth: 'medium' }),\n 'border-width-thin': whenProps({ $borderWidth: 'thin' }),\n 'border-width-none': whenProps({ $borderWidth: 'none' }),\n })};\n\n border-radius: ${conditional({\n 'border-radius-none': whenProps({ $borderRadius: 'none' }),\n 'border-radius-s': whenProps({ $borderRadius: 's' }),\n 'border-radius-m': whenProps({ $borderRadius: 'm' }),\n 'border-radius-l': whenProps({ $borderRadius: 'l' }),\n })};\n`\n\n/**\n * Box layout component.\n * @param {BoxProps} props\n */\nexport function Box(props: BoxProps): JSX.Element {\n const {\n background = 'transparent',\n borderColor = 'neutral-light',\n borderRadius = 's',\n borderWidth = 'none',\n padding = 'm',\n textAlign = 'left',\n children,\n ...rest\n } = props\n\n return (\n <BoxContainer\n $background={background}\n $borderColor={borderColor}\n $borderRadius={borderRadius}\n $borderWidth={borderWidth}\n $padding={padding}\n $textAlign={textAlign}\n {...rest}\n >\n {children}\n </BoxContainer>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\nimport prop from 'tools/prop'\n\nimport type { Spacing } from './Layout.types'\nimport { getSpace } from './Layout.utils'\n\nimport type { HTMLAttributes } from 'react'\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement> {\n space?: Spacing\n reversed?: boolean\n sideWidth?: string\n minContentWidth?: string\n}\n\nconst SidebarContainer = styled.div<{\n $space: SidebarProps['space']\n $reversed: SidebarProps['reversed']\n $sideWidth: SidebarProps['sideWidth']\n $minContentWidth: SidebarProps['minContentWidth']\n}>`\n display: flex;\n flex-wrap: wrap;\n\n gap: ${getSpace('$space')};\n\n &\n > ${conditional({\n ':first-child': whenProps({ $reversed: false }),\n ':last-child': whenProps({ $reversed: true }),\n })} {\n flex-basis: ${prop('$sideWidth')};\n flex-grow: 1;\n }\n\n &\n > ${conditional({\n ':first-child': whenProps({ $reversed: true }),\n ':last-child': whenProps({ $reversed: false }),\n })} {\n flex-basis: 0;\n flex-grow: 999;\n min-width: ${prop('$minContentWidth')};\n }\n`\n\n/**\n * Sidebar layout component.\n * @param {SidebarProps} props\n */\nexport function Sidebar(props: SidebarProps): JSX.Element {\n const {\n minContentWidth = '50%',\n reversed = false,\n sideWidth = 'auto',\n space = 'm',\n children,\n ...rest\n } = props\n\n return (\n <SidebarContainer\n $minContentWidth={minContentWidth}\n $reversed={reversed}\n $sideWidth={sideWidth}\n $space={space}\n {...rest}\n >\n {children}\n </SidebarContainer>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport prop from 'tools/prop'\n\nimport type { Spacing } from './Layout.types'\nimport { getSpace } from './Layout.utils'\n\nimport type { HTMLAttributes } from 'react'\n\nexport interface SwitcherProps extends HTMLAttributes<HTMLElement> {\n space?: Spacing\n threshold?: string\n limit?: number\n}\n\nconst SwitcherContainer = styled.div<{\n $space: SwitcherProps['space']\n $threshold: SwitcherProps['threshold']\n $limit: SwitcherProps['limit']\n}>`\n display: flex;\n flex-wrap: wrap;\n gap: ${getSpace('$space')};\n\n > * {\n flex-basis: calc((${prop('$threshold')} - 100%) * 999);\n flex-grow: 1;\n }\n\n & > :nth-last-child(n + ${prop('$limit')}),\n & > :nth-last-child(n + ${prop('$limit')}) ~ * {\n flex-basis: 100%;\n }\n`\n\n/**\n * Switcher layout component.\n * @param {SwitcherProps} props\n */\nexport function Switcher(props: SwitcherProps): JSX.Element {\n const { limit = 4, space = 's', threshold = '10rem', children, ...rest } = props\n\n return (\n <SwitcherContainer $space={space} $threshold={threshold} $limit={limit + 1} {...rest}>\n {children}\n </SwitcherContainer>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport prop from 'tools/prop'\n\nimport { getSpace } from 'components/Layout/Layout.utils'\nimport type { Spacing } from './Layout.types'\n\nimport type { HTMLAttributes } from 'react'\n\nexport interface GridProps extends HTMLAttributes<HTMLElement> {\n space?: Spacing\n minColumnWidth?: string\n}\n\nconst GridContainer = styled.div<{\n $space: GridProps['space']\n $minColumnWidth: GridProps['minColumnWidth']\n}>`\n display: grid;\n grid-gap: ${getSpace('$space')};\n\n @supports (width: min(${prop('$minColumnWidth')}, 100%)) {\n & {\n grid-template-columns: repeat(auto-fit, minmax(min(${prop('$minColumnWidth')}, 100%), 1fr));\n }\n }\n`\n\n/**\n * Grid layout component.\n * @param {GridProps} props\n */\nexport function Grid(props: GridProps): JSX.Element {\n const { space = 'm', minColumnWidth = '50%', children, ...rest } = props\n\n return (\n <GridContainer $space={space} $minColumnWidth={minColumnWidth} {...rest}>\n {children}\n </GridContainer>\n )\n}\n","import { Group } from './Group'\nimport { Stack } from './Stack'\nimport { Box } from './Box'\nimport { Sidebar } from './Sidebar'\nimport { Switcher } from './Switcher'\nimport { Grid } from './Grid'\n\nconst Layout = (): null => {\n return null\n}\n\nLayout.Group = Group\nLayout.Stack = Stack\nLayout.Box = Box\nLayout.Sidebar = Sidebar\nLayout.Switcher = Switcher\nLayout.Grid = Grid\n\nexport default Layout\n","import { Layout } from 'components/Layout'\nimport React from 'react'\nimport styled, { keyframes } from 'styled-components'\nimport { getToken as token } from 'theming'\n\nconst loading = keyframes` \n from {\n width: 0\n }\n to {\n width: 100%\n } \n`\n\nexport const Bar = styled.div<{ width?: number; velocity?: number }>`\n position: relative;\n\n width: ${({ width }) => (width ? `${width}px` : '100%')};\n height: ${token('space-s')};\n overflow: hidden;\n\n background-color: ${token('color-neutral-light')};\n border-radius: ${token('border-radius-m')};\n\n &:before {\n position: absolute;\n\n display: block;\n width: 100%;\n height: ${token('space-s')};\n\n background-color: ${token('color-primary')};\n\n animation: ${loading} ${({ velocity }) => (velocity && velocity > 0 ? velocity : 2.5)}s linear\n infinite;\n\n content: '';\n }\n`\n\nexport interface LoadingBarProps {\n alignment?: 'left' | 'center' | 'right'\n title?: React.ReactNode\n secondaryTitle?: React.ReactNode\n width?: number | undefined\n velocity?: number | undefined\n}\n\nexport default function LoadingBar({\n alignment,\n title,\n secondaryTitle,\n width = undefined,\n velocity = 2.5,\n}: LoadingBarProps): JSX.Element {\n return (\n <Layout.Box textAlign={alignment}>\n <Layout.Stack space=\"s\">\n {title}\n <Bar width={width} velocity={velocity} />\n {secondaryTitle}\n </Layout.Stack>\n </Layout.Box>\n )\n}\n","import React from 'react'\nimport styled, { keyframes } from 'styled-components'\nimport conditional, { whenProps } from 'tools/conditional'\nimport prop from 'tools/prop'\nimport { getToken as token } from 'theming'\n\nconst pulse = keyframes`\n 50% {\n opacity: 0.2;\n }\n\n 100% {\n opacity: 1;\n }\n`\n\nconst Wrapper = styled.div`\n text-align: center;\n\n div:nth-child(1) {\n animation: ${pulse} 1s infinite ease-in-out -0.2s;\n }\n\n div:nth-child(2) {\n animation: ${pulse} 1s infinite ease-in-out -0.1s;\n }\n\n div:nth-child(3) {\n animation: ${pulse} 1s infinite ease-in-out 0s;\n }\n`\n\ninterface DotProps {\n size?: number\n variant?: 'light' | 'dark'\n}\n\nconst Dot = styled.div<DotProps>`\n display: inline-block;\n width: ${prop('size')}px;\n height: ${prop('size')}px;\n margin: ${token('space-2xs')};\n\n background-color: ${conditional({\n 'color-neutral-white': whenProps({ variant: 'light' }),\n 'color-neutral-dark': whenProps({ variant: 'dark' }),\n })};\n border-radius: ${token('border-radius-circle')};\n`\n\nexport interface LoadingDotsProps {\n size?: number\n variant?: 'dark' | 'light'\n}\n\nexport default function LoadingDots({\n size = 10,\n variant = 'dark',\n ...props\n}: LoadingDotsProps): JSX.Element {\n return (\n <Wrapper role=\"progressbar\" aria-label=\"Loading\" {...props}>\n <Dot size={size} variant={variant} />\n <Dot size={size} variant={variant} />\n <Dot size={size} variant={variant} />\n </Wrapper>\n )\n}\n","import React, { forwardRef } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\nimport activatable from 'styles/activatable'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport ellipsizable from 'styles/ellipsizable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport omit from 'utils/toolset/omit'\nimport rem from 'utils/toolset/rem'\nimport transition from 'styles/transition'\nimport typography from 'styles/typography'\n\nimport { LoadingDots } from 'components/Loaders'\n\nimport type { ButtonHTMLAttributes, ForwardedRef, ReactNode } from 'react'\nimport type { IconProps } from 'components/Icon'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport type { LoadingDotsProps } from 'components/Loaders'\n\nexport type ButtonVariants = 'primary' | 'secondary' | 'warning' | 'icon' | 'tertiary'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n className?: string\n leading?: ReactNode\n scheme?: ColorScheme\n trailing?: ReactNode\n variant?: ButtonVariants\n scale?: 'small' | 'default' | 'large'\n loading?: boolean\n}\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n padding: ${rem('6px')} 0;\n`\n\nconst Leading = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst Trailing = styled(StyledSpan)`\n /* placeholder */\n`\n\nexport const Children = styled.span<ButtonProps>`\n ${({ children }) =>\n typeof children === 'string'\n ? ellipsizable()\n : `\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n `}\n\n padding: ${rem('6px')} 0;\n`\n\nconst BaseStyledButton = styled.button<{\n $scale: ButtonProps['scale']\n $loading?: ButtonProps['loading']\n}>`\n ${transition()}\n\n ${typography(\n conditional({\n 'button-md': whenProps({ $scale: 'default' }),\n 'button-sm': whenProps({ $scale: 'small' }),\n 'button-lg': whenProps({ $scale: 'large' }),\n })\n )}\n\n box-sizing: border-box;\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n text-transform: uppercase;\n text-align: center;\n\n cursor: pointer;\n\n border-radius: ${token('border-radius-s')};\n border-width: ${token('border-width-thin')};\n border-style: solid;\n border-color: ${token('color-neutral-darker')};\n\n height: ${conditional({\n 'button-height': whenProps({ $scale: 'default' }),\n 'button-small-height': whenProps({ $scale: 'small' }),\n 'button-large-height': whenProps({ $scale: 'large' }),\n })};\n\n padding: 0 8px;\n\n ${disableable()}\n\n ${({ $loading }) =>\n $loading\n ? css`\n pointer-events: none;\n position: relative;\n `\n : ''}\n\n ${Leading} {\n margin: 0 ${token('space-xs')} 0 0;\n }\n\n ${Trailing} {\n margin: 0 0 0 ${token('space-xs')};\n }\n`\n\nconst StyledButton = styled(BaseStyledButton)<{\n $variant: ButtonProps['variant']\n $scale: ButtonProps['scale']\n $scheme: ButtonProps['scheme']\n}>`\n width: ${conditional({\n 'button-width': whenProps({ $variant: ['primary', 'secondary', 'warning', 'tertiary'] }),\n 'button-icon-width': whenProps({ $variant: 'icon', $scale: 'default' }),\n 'button-icon-small-width': whenProps({ $variant: 'icon', $scale: 'small' }),\n 'button-icon-large-width': whenProps({ $variant: 'icon', $scale: 'large' }),\n })};\n\n height: ${conditional({\n 'button-height': whenProps({ $scale: 'default' }),\n 'button-small-height': whenProps({ $scale: 'small' }),\n 'button-large-height': whenProps({ $scale: 'large' }),\n })};\n\n color: ${conditional({\n 'button-primary-color': whenProps({ $variant: 'primary' }),\n 'button-secondary-color': whenProps({ $variant: 'secondary', $scheme: 'light' }),\n 'button-secondary-dark-color': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-color': whenProps({ $variant: 'tertiary' }),\n 'button-warning-color': whenProps({ $variant: 'warning' }),\n 'button-icon-color': whenProps({ $variant: 'icon' }),\n })};\n\n background: ${conditional({\n 'button-primary-background': whenProps({ $variant: 'primary' }),\n 'button-secondary-background': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-background': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-background': whenProps({\n $variant: 'tertiary',\n }),\n 'button-warning-background': whenProps({ $variant: 'warning' }),\n 'button-icon-background': whenProps({ $variant: 'icon' }),\n })};\n\n border-color: ${conditional({\n 'button-primary-border-color': whenProps({ $variant: 'primary' }),\n 'button-secondary-border-color': whenProps({ $variant: 'secondary', $scheme: 'light' }),\n 'button-secondary-dark-border-color': whenProps({ $variant: 'secondary', $scheme: 'dark' }),\n 'button-tertiary-border-color': whenProps({ $variant: 'tertiary' }),\n 'button-warning-border-color': whenProps({ $variant: 'warning' }),\n 'button-icon-border-color': whenProps({ $variant: 'icon' }),\n })};\n border-radius: ${conditional({\n 'button-border-radius': whenProps({ $variant: ['primary', 'secondary', 'warning'] }),\n 'button-icon-border-radius': whenProps({ $variant: 'icon' }),\n })};\n\n ${hoverable`\n background: ${conditional({\n 'button-primary-background--hover': whenProps({ $variant: 'primary' }),\n 'button-secondary-background--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-background--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-background--hover': whenProps({\n $variant: 'tertiary',\n }),\n 'button-warning-background--hover': whenProps({ $variant: 'warning' }),\n 'button-icon-background--hover': whenProps({ $variant: 'icon' }),\n })};\n border-color: ${conditional({\n 'button-primary-border-color--hover': whenProps({ $variant: 'primary' }),\n 'button-secondary-border-color--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-border-color--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-border-color--hover': whenProps({ $variant: 'tertiary' }),\n 'button-warning-border-color--hover': whenProps({ $variant: 'warning' }),\n 'button-icon-border-color--hover': whenProps({ $variant: 'icon' }),\n })};\n color: ${conditional({\n 'button-primary-color--hover': whenProps({ $variant: 'primary' }),\n 'button-secondary-color--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-color--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-color--hover': whenProps({ $variant: 'tertiary' }),\n 'button-warning-color--hover': whenProps({ $variant: 'warning' }),\n 'button-icon-color--hover': whenProps({ $variant: 'icon' }),\n })};\n `}\n\n ${disableable`\n background: ${conditional({\n 'button-primary-background--disabled': whenProps({ $variant: 'primary' }),\n 'button-secondary-background--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-background--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-background--disabled': whenProps({ $variant: 'tertiary' }),\n 'button-warning-background--disabled': whenProps({ $variant: 'warning' }),\n 'button-icon-background--disabled': whenProps({ $variant: 'icon' }),\n })};\n border-color: ${conditional({\n 'button-primary-border-color--disabled': whenProps({ $variant: 'primary' }),\n 'button-secondary-border-color--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-border-color--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-border-color--disabled': whenProps({ $variant: 'tertiary' }),\n 'button-warning-border-color--disabled': whenProps({ $variant: 'warning' }),\n 'button-icon-border-color--disabled': whenProps({ $variant: 'icon' }),\n })};\n color: ${conditional({\n 'button-primary-color--disabled': whenProps({ $variant: 'primary' }),\n 'button-secondary-color--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-color--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-color--disabled': whenProps({ $variant: 'tertiary' }),\n 'button-warning-color--disabled': whenProps({ $variant: 'warning' }),\n 'button-icon-color--disabled': whenProps({ $variant: 'icon' }),\n })};\n `}\n\n ${focusable`\n background: ${conditional({\n 'button-primary-background--focus': whenProps({ $variant: 'primary' }),\n 'button-secondary-background--focus': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-background--focus': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-background--focus': whenProps({ $variant: 'tertiary' }),\n 'button-warning-background--focus': whenProps({ $variant: 'warning' }),\n 'button-icon-background--focus': whenProps({ $variant: 'icon' }),\n })};\n border-color: ${conditional({\n 'button-primary-border-color--focus': whenProps({ $variant: 'primary' }),\n 'button-secondary-border-color--focus': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-border-color--focus': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-border-color--focus': whenProps({ $variant: 'tertiary' }),\n 'button-warning-border-color--focus': whenProps({ $variant: 'warning' }),\n 'button-icon-border-color--focus': whenProps({ $variant: 'icon' }),\n })};\n color: ${conditional({\n 'button-primary-color--focus': whenProps({ $variant: 'primary' }),\n 'button-secondary-color--focus': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-color--focus': whenProps({ $variant: 'secondary', $scheme: 'dark' }),\n 'button-tertiary-color--focus': whenProps({ $variant: 'tertiary' }),\n 'button-warning-color--focus': whenProps({ $variant: 'warning' }),\n 'button-icon-color--focus': whenProps({ $variant: 'icon' }),\n })};\n\n box-shadow: ${conditional({\n 'button-primary-box-shadow': whenProps({ $variant: 'primary' }),\n 'button-secondary-box-shadow': whenProps({ $variant: 'secondary' }),\n 'button-warning-box-shadow': whenProps({ $variant: 'warning' }),\n 'button-tertiary-box-shadow': whenProps({ $variant: 'tertiary' }),\n 'button-icon-box-shadow': whenProps({ $variant: 'icon' }),\n })};\n\n outline: ${conditional({\n 'button-primary-outline': whenProps({ $variant: 'primary' }),\n 'button-secondary-outline': whenProps({ $variant: 'secondary' }),\n 'button-tertiary-outline': whenProps({ $variant: 'tertiary' }),\n 'button-warning-outline': whenProps({ $variant: 'warning' }),\n 'button-icon-outline': whenProps({ $variant: 'icon' }),\n })};\n\n outline-offset: ${token('button-outline-offset')};\n `}\n\n ${activatable`\n background: ${conditional({\n 'button-primary-background--active': whenProps({ $variant: 'primary' }),\n 'button-secondary-background--active': whenProps({\n $variant: ['secondary', 'tertiary'],\n $scheme: 'light',\n }),\n 'button-secondary-dark-background--active': whenProps({\n $variant: ['secondary', 'tertiary'],\n $scheme: 'dark',\n }),\n 'button-warning-background--active': whenProps({ $variant: 'warning' }),\n 'button-icon-background--active': whenProps({ $variant: 'icon' }),\n })};\n border-color: ${conditional({\n 'button-primary-border-color--active': whenProps({ $variant: 'primary' }),\n 'button-secondary-border-color--active': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-border-color--active': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-warning-border-color--active': whenProps({ $variant: 'warning' }),\n 'button-icon-border-color--active': whenProps({ $variant: 'icon' }),\n 'color-transparent': whenProps({ $variant: 'tertiary' }),\n })};\n color: ${conditional({\n 'button-primary-color--active': whenProps({ $variant: 'primary' }),\n 'button-secondary-color--active': whenProps({\n $variant: ['secondary', 'tertiary'],\n $scheme: 'light',\n }),\n 'button-secondary-dark-color--active': whenProps({ $variant: 'secondary', $scheme: 'dark' }),\n 'button-warning-color--active': whenProps({ $variant: 'warning' }),\n 'button-icon-color--active': whenProps({ $variant: 'icon' }),\n })};\n `}\n\n ${Children} {\n margin: 0 ${token('button-spacing-x')};\n }\n\n ${Leading} {\n margin: 0 0 0 ${token('button-spacing-x')};\n }\n\n ${Trailing} {\n margin: 0 ${token('button-spacing-x')} 0 0;\n }\n`\n\nconst StyledSelector = styled(StyledButton)`\n ${Children} {\n flex: 1;\n }\n\n ${Trailing} {\n margin: 0;\n }\n`\n\nconst TextHidden = styled.span`\n transform: scale(0);\n`\n\n/**\n * Accessible attributes in `LoadingDots` aren't necessary\n * because the `Button` will keep its content, but invisible\n */\nconst StyledLoadingDots = styled(LoadingDots).attrs({\n 'aria-label': undefined,\n role: 'presentation',\n})`\n position: absolute;\n left: 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 100%;\n`\n\nconst ButtonLoadingDots = ({\n buttonVariant = 'secondary',\n ...remainingProps\n}: Omit<LoadingDotsProps, 'variant'> & { buttonVariant?: ButtonVariants }) => {\n const buttonLightVariants = new Set(['secondary', 'warning', 'icon', 'tertiary'])\n /**\n * Change LoadingDots variant between `light` and `dark` to have contrast with Button's variant\n */\n const loadingDotsVariant: 'dark' | 'light' = buttonLightVariants.has(buttonVariant)\n ? 'dark'\n : 'light'\n\n return <StyledLoadingDots {...remainingProps} variant={loadingDotsVariant} />\n}\n\nfunction ButtonChildrenWrapper({\n loading,\n children,\n variant,\n}: Pick<ButtonProps, 'loading' | 'children' | 'variant'>) {\n if (loading) {\n return (\n <>\n <ButtonLoadingDots buttonVariant={variant} />\n <TextHidden>{children}</TextHidden>\n </>\n )\n }\n\n return <>{children}</>\n}\n\nexport const BaseButton = forwardRef<HTMLButtonElement, ButtonProps>(function BaseButton(\n {\n scale = 'default',\n children,\n leading,\n trailing,\n loading,\n disabled,\n variant,\n ...others\n }: ButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) {\n return (\n <BaseStyledButton\n ref={ref}\n {...others}\n aria-disabled={loading ? 'true' : undefined}\n disabled={disabled}\n $scale={scale}\n $loading={loading}\n >\n <ButtonChildrenWrapper loading={loading} variant={variant}>\n {leading && <Leading aria-hidden=\"true\">{leading}</Leading>}\n <Children loading={loading}>{children}</Children>\n {trailing && <Trailing aria-hidden=\"true\">{trailing}</Trailing>}\n </ButtonChildrenWrapper>\n </BaseStyledButton>\n )\n})\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n type = 'button',\n scheme = 'light',\n scale = 'default',\n variant = 'secondary',\n children,\n leading,\n trailing,\n disabled,\n loading,\n ...others\n }: ButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) {\n return (\n <StyledButton\n ref={ref}\n {...others}\n type={type}\n aria-disabled={loading ? 'true' : undefined}\n disabled={disabled}\n $scheme={scheme}\n $scale={scale}\n $variant={variant}\n $loading={loading}\n >\n <ButtonChildrenWrapper loading={loading} variant={variant}>\n {leading && <Leading>{leading}</Leading>}\n <Children>{children}</Children>\n {trailing && <Trailing>{trailing}</Trailing>}\n </ButtonChildrenWrapper>\n </StyledButton>\n )\n})\n\nexport function Caret(props: Omit<IconProps, 'name'>): JSX.Element {\n return <Icon size={20} {...props} name=\"caret-down\" />\n}\n\nexport const SelectorButton = forwardRef<HTMLButtonElement, ButtonProps>(function SelectorButton(\n {\n scheme = 'light',\n scale = 'default',\n type = 'button',\n variant = 'secondary',\n children,\n trailing,\n disabled,\n loading,\n ...others\n }: ButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) {\n others = omit<ButtonProps>(others, ['leading'])\n\n return (\n <StyledSelector\n ref={ref}\n {...others}\n type={type}\n aria-disabled={loading ? 'true' : undefined}\n disabled={disabled}\n $loading={loading}\n $scheme={scheme}\n $scale={scale}\n $variant={variant}\n >\n <ButtonChildrenWrapper loading={loading} variant={variant}>\n <Children>{children}</Children>\n {trailing && <Trailing>{trailing}</Trailing>}\n </ButtonChildrenWrapper>\n </StyledSelector>\n )\n})\n\nexport type IconButtonProps = Omit<ButtonProps, 'leading' | 'trailing' | 'variant' | 'loading'>\n\nexport const IconButton = forwardRef<HTMLButtonElement, ButtonProps>(function IconButton(\n { scheme = 'light', scale = 'default', type = 'button', children, ...others }: IconButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) {\n others = omit<ButtonProps>(others, ['leading', 'trailing', 'variant'])\n\n return (\n <StyledButton ref={ref} {...others} type={type} $scheme={scheme} $scale={scale} $variant=\"icon\">\n <Children>{children}</Children>\n </StyledButton>\n )\n})\n\nexport default Button\n","/**\n * Add basic CSS style for ellipsizing the content of an element.\n * Setting `max-width` is a responsability of the caller.\n * @returns {string}\n */\nfunction ellipsizableStyle(): string {\n return `\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n `\n}\n\nexport default ellipsizableStyle\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { BaseButton } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\nimport conditional, { whenProps } from 'tools/conditional'\nimport focusable from 'styles/focusable'\n\nimport type { ButtonProps } from 'components/Button'\n\nexport interface CloseButtonProps extends ButtonProps {\n size?: string | number\n}\n\nconst Button = styled(BaseButton)`\n border: none;\n border-radius: ${token('border-radius-circle')};\n\n color: ${token('color-neutral-darker')};\n\n background: ${token('color-transparent')};\n\n padding: ${token('space-xs')};\n\n font-size: ${token('font-size-3')};\n\n /*\n * button height is set in the BaseButton component\n * we set width here to ensure a perfectly rounded button\n */\n width: ${conditional({\n 'button-height': whenProps({ scale: 'default' }),\n 'button-small-height': whenProps({ scale: 'small' }),\n 'button-large-height': whenProps({ scale: 'large' }),\n })};\n\n ${focusable`\n box-shadow: ${token('button-icon-box-shadow')};\n\n outline: ${token('button-icon-outline')};\n outline-offset: ${token('button-outline-offset')};\n `}\n`\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction CloseButton({ scale = 'small', size = 16, ...others }: CloseButtonProps): JSX.Element {\n return (\n <Button scale={scale} {...others}>\n <Icon name=\"close\" size={size} />\n </Button>\n )\n}\n\nexport default CloseButton\n","import React from 'react'\n\nimport { IconButton } from 'components/Button'\nimport { Icon } from 'components/Icon'\n\nimport type { ButtonProps } from 'components/Button'\n\nexport type BackButtonProps = Omit<ButtonProps, 'children'>\n\nfunction BackButton({ scale = 'small', ...others }: BackButtonProps): JSX.Element {\n return (\n <IconButton scale={scale} {...others}>\n <Icon name=\"back\" size={16} />\n </IconButton>\n )\n}\n\nexport default BackButton\n","function toVal(mix) {\n\tvar k, y, str='';\n\n\tif (typeof mix === 'string' || typeof mix === 'number') {\n\t\tstr += mix;\n\t} else if (typeof mix === 'object') {\n\t\tif (Array.isArray(mix)) {\n\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tif (y = toVal(mix[k])) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (k in mix) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\tstr += k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn str;\n}\n\nexport default function () {\n\tvar i=0, tmp, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (tmp = arguments[i++]) {\n\t\t\tif (x = toVal(tmp)) {\n\t\t\t\tstr && (str += ' ');\n\t\t\t\tstr += x\n\t\t\t}\n\t\t}\n\t}\n\treturn str;\n}\n","import React, { LabelHTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport styled from 'styled-components'\n\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport font from 'styles/font'\nimport { getToken as token } from 'theming'\nimport transition from 'styles/transition'\n\nexport interface SelectionStyleProps {\n scale?: 'small' | 'default'\n scheme?: ColorScheme\n disabled?: boolean\n}\n\nexport interface SelectionWrapperProps\n extends LabelHTMLAttributes<HTMLLabelElement>,\n SelectionStyleProps {\n selector: ReactNode\n leading?: ReactNode\n trailing?: ReactNode\n}\n\nconst SelectorWrapper = styled.span`\n position: relative;\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n`\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n`\n\nconst Leading = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst Trailing = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst Children = styled.span`\n /* placeholder */\n`\n\nconst StyledLabel = styled.label<SelectionStyleProps>`\n box-sizing: border-box;\n\n ${transition()}\n ${font({\n weight: 'checkbox-font-weight',\n })}\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: flex-start;\n\n cursor: pointer;\n\n border-radius: ${token('border-radius-s')};\n\n font-size: ${conditional({\n 'checkbox-font-size': whenProps({ scale: 'default' }),\n 'checkbox-small-font-size': whenProps({ scale: 'small' }),\n })};\n\n color: ${conditional({\n 'checkbox-color': whenProps({ scheme: 'light' }),\n 'checkbox-dark-color': whenProps({ scheme: 'dark' }),\n })};\n\n ${Children} {\n margin: 0 ${token('space-xs')};\n }\n\n ${SelectorWrapper} {\n margin: 0 ${token('space-xs')} 0 0;\n }\n\n ${Leading} {\n margin: 0 ${token('space-xs')};\n }\n\n ${Trailing} {\n margin: 0 0 0 ${token('space-xs')};\n }\n\n ${disableable()}\n\n ${focusable`\n outline: ${token('checkbox-selector-outline')};\n outline-offset: ${token('checkbox-selector-outline-offset')};\n `}\n`\n\nfunction SelectionWrapper({\n selector,\n children,\n leading,\n trailing,\n className,\n disabled = false,\n ...others\n}: SelectionWrapperProps): JSX.Element {\n return (\n <StyledLabel\n className={clsx(className, {\n 'is-disabled': disabled,\n })}\n {...others}\n >\n {selector && <SelectorWrapper>{selector}</SelectorWrapper>}\n {leading && <Leading data-testid=\"selection-leading\">{leading}</Leading>}\n <Children>{children}</Children>\n {trailing && <Trailing data-testid=\"selection-trailing\">{trailing}</Trailing>}\n </StyledLabel>\n )\n}\n\nexport default SelectionWrapper\n","import React, { Fragment, InputHTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nimport { Icon } from 'components/Icon'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport SelectionWrapper, { SelectionStyleProps } from 'common/SelectionWrapper'\nimport styled from 'styled-components'\nimport { getToken as token } from 'theming'\nimport transition from 'styles/transition'\n\nexport interface CheckboxProps extends InputHTMLAttributes<HTMLInputElement>, SelectionStyleProps {\n leading?: ReactNode\n scheme?: ColorScheme\n trailing?: ReactNode\n}\n\nconst Check = styled(Icon)<SelectionStyleProps>`\n position: absolute;\n top: 50%;\n\n left: 50%;\n\n transform: translate(-50%, -50%);\n\n pointer-events: none;\n`\n\nconst Selector = styled.input<SelectionStyleProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n\n cursor: pointer;\n\n appearance: none;\n\n outline: none;\n\n color: white;\n\n height: ${token('checkbox-selector-size')};\n width: ${token('checkbox-selector-size')};\n\n border-radius: ${token('checkbox-selector-border-radius')};\n border-width: ${token('button-border-width')};\n border-style: solid;\n\n border-color: ${conditional({\n 'checkbox-selector-border-color': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-border-color': whenProps({ scheme: 'dark' }),\n })};\n\n background: ${conditional({\n 'checkbox-selector-background': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-background': whenProps({ scheme: 'dark' }),\n })};\n\n :checked {\n background-color: ${token('checkbox-selector-checked-background')};\n border-color: ${token('checkbox-selector-checked-border-color')};\n }\n\n :checked + ${Check} {\n color: ${token('checkbox-selector-icon-color')};\n }\n\n :not(:checked) + ${Check} {\n color: transparent;\n }\n\n ${disableable`\n background: ${conditional({\n 'checkbox-selector-background--disabled': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-background--disabled': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'checkbox-selector-border-color--disabled': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-border-color--disabled': whenProps({ scheme: 'dark' }),\n })};\n :checked {\n background-color: ${token('checkbox-selector-checked-background--disabled')};\n border-color: ${token('checkbox-selector-checked-border-color--disabled')};\n }\n `}\n\n ${hoverable`\n background: ${conditional({\n 'checkbox-selector-background--hover': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-background--hover': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'checkbox-selector-border-color--hover': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-border-color--hover': whenProps({ scheme: 'dark' }),\n })};\n\n :checked {\n background-color: ${token('checkbox-selector-checked-background--hover')};\n border-color: ${token('checkbox-selector-checked-border-color--hover')};\n }\n\n :checked + ${Check} {\n color: ${token('checkbox-selector-icon-color')};\n }\n `}\n\n ${focusable`\n background: ${conditional({\n 'checkbox-selector-background--focus': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-background--focus': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'checkbox-selector-border-color--focus': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-border-color--focus': whenProps({ scheme: 'dark' }),\n })};\n\n :checked {\n background-color: ${token('checkbox-selector-checked-background--focus')};\n border-color: ${token('checkbox-selector-checked-border-color--focus')};\n }\n :checked + ${Check} {\n color: ${token('checkbox-selector-icon-color')};\n }\n\n box-shadow: ${token('checkbox-selector-box-shadow')};\n `}\n`\n\nfunction Checkbox({\n className,\n disabled,\n children,\n leading,\n trailing,\n scheme = 'light',\n scale = 'default',\n ...others\n}: CheckboxProps): JSX.Element {\n return (\n <SelectionWrapper\n scheme={scheme}\n scale={scale}\n selector={\n <Fragment>\n <Selector\n data-testid=\"selector\"\n {...others}\n scheme={scheme}\n disabled={disabled}\n type=\"checkbox\"\n />\n <Check name=\"check\" size={14} className=\"check\" />\n </Fragment>\n }\n leading={leading}\n trailing={trailing}\n className={clsx({ 'is-disabled': disabled }, className)}\n data-testid=\"checkbox\"\n >\n {children}\n </SelectionWrapper>\n )\n}\n\nexport default Checkbox\n","import React, { Fragment, InputHTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nimport { Icon } from 'components/Icon'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport SelectionWrapper, { SelectionStyleProps } from 'common/SelectionWrapper'\nimport styled from 'styled-components'\nimport { getToken as token } from 'theming'\nimport transition from 'styles/transition'\n\nexport interface RadioProps extends InputHTMLAttributes<HTMLInputElement>, SelectionStyleProps {\n leading?: ReactNode\n scheme?: ColorScheme\n trailing?: ReactNode\n}\n\nconst Check = styled(Icon)<SelectionStyleProps>`\n position: absolute;\n top: 50%;\n\n left: 50%;\n\n width: 10px;\n height: 10px;\n\n transform: translate(-50%, -50%);\n\n pointer-events: none;\n\n fill: currentColor;\n`\n\nconst Selector = styled.input<SelectionStyleProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n\n cursor: pointer;\n\n appearance: none;\n\n outline: none;\n\n color: white;\n\n height: ${token('radio-small-selector-size')};\n width: ${token('radio-small-selector-size')};\n\n border-radius: ${token('radio-selector-border-radius')};\n border-width: ${token('button-border-width')};\n border-style: solid;\n\n background: ${conditional({\n 'radio-selector-background': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-background': whenProps({ scheme: 'dark' }),\n })};\n\n &:not(:checked) {\n border-color: ${conditional({\n 'radio-selector-border-color': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-border-color': whenProps({ scheme: 'dark' }),\n })};\n\n + ${Check} {\n color: transparent;\n }\n }\n\n &:checked {\n border-color: ${token('radio-selector-border-color--checked')};\n\n + ${Check} {\n color: ${token('radio-selector-border-color--checked')};\n }\n }\n\n ${disableable`\n background: ${conditional({\n 'radio-selector-background--disabled': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-background--disabled': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'radio-selector-border-color--disabled': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-border-color--disabled': whenProps({ scheme: 'dark' }),\n })};\n `}\n\n ${hoverable`\n background: ${conditional({\n 'radio-selector-background--hover': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-background--hover': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'radio-selector-border-color--hover': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-border-color--hover': whenProps({ scheme: 'dark' }),\n })};\n `}\n\n ${focusable`\n background: ${conditional({\n 'radio-selector-background--focus': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-background--focus': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'radio-selector-border-color--focus': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-border-color--focus': whenProps({ scheme: 'dark' }),\n })};\n\n box-shadow: ${token('radio-selector-box-shadow')};\n `}\n`\n\nfunction Radio({\n className,\n disabled,\n children,\n leading,\n trailing,\n scheme = 'light',\n ...others\n}: RadioProps): JSX.Element {\n return (\n <SelectionWrapper\n scheme={scheme}\n selector={\n <Fragment>\n <Selector\n data-testid=\"selector\"\n {...others}\n scheme={scheme}\n disabled={disabled}\n type=\"radio\"\n />\n <Check name=\"circle\" className=\"check\" />\n </Fragment>\n }\n leading={leading}\n trailing={trailing}\n className={clsx({ 'is-disabled': disabled }, className)}\n data-testid=\"radio\"\n >\n {children}\n </SelectionWrapper>\n )\n}\n\nexport default Radio\n","import { useEffect, useState, useCallback, useRef } from 'react'\n\nimport type { RefObject } from 'react'\n\nexport interface useFocusWithinProps {\n onFocus?: () => void\n onBlur?: () => void\n}\n\n/**\n * As CSS's focus-within is not fully supported, this hook\n * helps with identifying focus within elements.\n * @param {Object} props - Hook props\n */\nfunction useFocusWithin<T>(props: useFocusWithinProps = {}): {\n ref: RefObject<T>\n focused: boolean\n} {\n const { onFocus, onBlur } = props\n const [focused, setFocused] = useState(false)\n const containerRef = useRef<T>(null)\n\n function getContainer() {\n return containerRef.current as unknown as HTMLElement\n }\n\n const handleFocus = useCallback(\n function handleFocus() {\n onFocus?.()\n setFocused(true)\n },\n [onFocus]\n )\n\n const handleBlur = useCallback(\n function handleBlur() {\n onBlur?.()\n setFocused(false)\n },\n [onBlur]\n )\n\n useEffect(\n function updateContainerRef() {\n getContainer()?.addEventListener('focusin', handleFocus)\n getContainer()?.addEventListener('focusout', handleBlur)\n\n return function unsubscribe() {\n getContainer()?.removeEventListener('focusin', handleFocus)\n getContainer()?.removeEventListener('focusout', handleBlur)\n }\n },\n [containerRef, handleBlur, handleFocus]\n )\n\n return {\n ref: containerRef,\n focused,\n }\n}\n\nexport default useFocusWithin\n","enum Status {\n Success = 'success',\n Danger = 'danger',\n Warn = 'warn',\n Neutral = 'neutral',\n}\n\nexport default Status\n","import React, { forwardRef } from 'react'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nimport { getToken as token } from 'theming'\nimport { useFocusWithin } from 'hooks/useFocusWithin'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport font from 'styles/font'\nimport hoverable from 'styles/hoverable'\nimport Status from 'utils/types/Status'\nimport transition from 'styles/transition'\n\nimport type { InputHTMLAttributes, ReactNode } from 'react'\n\ninterface WithAdditionalProps {\n scale?: 'small' | 'default' | 'large'\n status?: Status\n scheme?: ColorScheme\n leading?: ReactNode\n trailing?: ReactNode\n}\n\nexport interface TextFieldProps extends InputHTMLAttributes<HTMLInputElement>, WithAdditionalProps {\n className?: string\n children?: ReactNode\n}\n\nconst InputWrapper = styled.div<WithAdditionalProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n\n height: ${conditional({\n 'text-field-height': whenProps({ scale: 'default' }),\n 'text-field-small-height': whenProps({ scale: 'small' }),\n 'text-field-large-height': whenProps({ scale: 'large' }),\n })};\n min-width: 0;\n\n ${font({\n height: 'text-field-font-height',\n })}\n\n font-size: ${conditional({\n 'text-field-font-size': whenProps({ scale: 'default' }),\n 'text-field-small-font-size': whenProps({ scale: 'small' }),\n 'text-field-large-font-size': whenProps({ scale: 'large' }),\n })};\n\n border-radius: ${token('text-field-border-radius')};\n border-width: 1px;\n border-style: solid;\n\n background: ${conditional({\n 'text-field-background': whenProps({ scheme: 'light' }),\n 'text-field-dark-background': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'text-field-border-color': whenProps({ scheme: 'light', status: Status.Neutral }),\n 'text-field-dark-border-color': whenProps({ scheme: 'dark', status: Status.Neutral }),\n 'text-field-danger-border-color': whenProps({ status: Status.Danger }),\n 'text-field-success-border-color': whenProps({ status: Status.Success }),\n })};\n\n color: ${conditional({\n 'text-field-color': whenProps({ scheme: 'light' }),\n 'text-field-dark-color': whenProps({ scheme: 'dark' }),\n })};\n\n ${hoverable`\n background: ${conditional({\n 'text-field-background--hover': whenProps({ scheme: 'light' }),\n 'text-field-dark-background--hover': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'text-field-border-color--hover': whenProps({ scheme: 'light' }),\n 'text-field-dark-border-color--hover': whenProps({ scheme: 'dark' }),\n })};\n `}\n\n ${focusable`\n background: ${conditional({\n 'text-field-background--focus': whenProps({ scheme: 'light' }),\n 'text-field-dark-background--focus': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'text-field-border-color--focus': whenProps({ scheme: 'light' }),\n 'text-field-dark-border-color--focus': whenProps({ scheme: 'dark' }),\n })};\n\n box-shadow: ${conditional({\n 'text-field-box-shadow': whenProps({ scheme: 'light' }),\n 'text-field-dark-box-shadow': whenProps({ scheme: 'dark' }),\n })};\n\n outline: ${token('text-field-outline')};\n outline-offset: ${token('text-field-outline-offset')};\n `}\n\n ${disableable()}\n`\n\nconst StyledSpan = styled.span<WithAdditionalProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n color: ${conditional({\n 'text-field-border-color': whenProps({ scheme: 'light', status: Status.Neutral }),\n 'text-field-dark-border-color': whenProps({ scheme: 'dark', status: Status.Neutral }),\n 'text-field-danger-border-color': whenProps({ status: Status.Danger }),\n 'text-field-success-border-color': whenProps({ status: Status.Success }),\n })};\n`\n\nexport const Leading = styled(StyledSpan)<WithAdditionalProps>`\n margin: 0 0 0\n ${conditional({\n 'text-field-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'text-field-small-padding-x': whenProps({ scale: 'small' }),\n })};\n`\n\nexport const Trailing = styled(StyledSpan)<WithAdditionalProps>`\n margin: 0\n ${conditional({\n 'text-field-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'text-field-small-padding-x': whenProps({ scale: 'small' }),\n })}\n 0 0;\n`\n\nconst StyledInput = styled.input<WithAdditionalProps>`\n ${transition()}\n\n ${font({\n height: 'text-field-font-height',\n })}\n\n background: transparent;\n\n padding: ${conditional({\n 'text-field-padding-y': whenProps({ scale: 'default' }),\n 'text-field-small-padding-y': whenProps({ scale: 'small' }),\n 'text-field-large-padding-y': whenProps({ scale: 'large' }),\n })}\n 0;\n\n margin: 0\n ${conditional({\n 'text-field-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'text-field-small-padding-x': whenProps({ scale: 'small' }),\n })};\n\n border: none;\n\n flex: 1;\n\n min-width: 0;\n\n ${focusable()}\n ${disableable()}\n\n /* suppress the clear button for IE */\n &[type=\"search\"]::-ms-clear,\n &[type=\"search\"]::-ms-reveal {\n display: none;\n width: 0;\n height: 0;\n }\n\n /* suppress the clear button for Chromium-based browsers */\n &[type='search']::-webkit-search-decoration,\n &[type='search']::-webkit-search-cancel-button,\n &[type='search']::-webkit-search-results-button,\n &[type='search']::-webkit-search-results-decoration {\n display: none;\n }\n`\n\nconst TextField = forwardRef<HTMLInputElement, TextFieldProps>(function TextField(\n props: TextFieldProps,\n ref\n): JSX.Element {\n const {\n disabled = false,\n status = Status.Neutral,\n scheme = 'light',\n scale = 'default',\n className,\n leading,\n trailing,\n ...others\n } = props\n const { ref: containerRef, focused } = useFocusWithin<HTMLDivElement>()\n\n return (\n <InputWrapper\n className={clsx(className, {\n 'is-disabled': disabled,\n 'is-focused': focused,\n })}\n scheme={scheme}\n status={status}\n scale={scale}\n ref={containerRef}\n >\n {leading && (\n <Leading status={status} scheme={scheme} scale={scale}>\n {leading}\n </Leading>\n )}\n <StyledInput\n ref={ref}\n type=\"text\"\n data-testid=\"input\"\n {...others}\n scale={scale}\n status={status}\n scheme={scheme}\n leading={leading}\n trailing={trailing}\n disabled={disabled}\n />\n {trailing && (\n <Trailing status={status} scheme={scheme} scale={scale}>\n {trailing}\n </Trailing>\n )}\n </InputWrapper>\n )\n})\n\nexport default TextField\n","import React, { forwardRef } from 'react'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nimport { getToken as token } from 'theming'\nimport { useFocusWithin } from 'hooks/useFocusWithin'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport font from 'styles/font'\nimport hoverable from 'styles/hoverable'\nimport Status from 'utils/types/Status'\nimport transition from 'styles/transition'\n\nimport type { TextareaHTMLAttributes, ReactNode } from 'react'\n\ninterface WithAdditionalProps {\n scale?: 'small' | 'default' | 'large'\n status?: Status\n scheme?: ColorScheme\n leading?: ReactNode\n trailing?: ReactNode\n}\n\nexport interface TextareaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement>,\n WithAdditionalProps {\n className?: string\n children?: ReactNode\n}\n\nconst TextareaWrapper = styled.div<WithAdditionalProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n\n min-height: ${token('textarea-min-height')};\n\n ${font({\n height: 'textarea-font-height',\n })}\n\n font-size: ${conditional({\n 'textarea-font-size': whenProps({ scale: 'default' }),\n 'textarea-small-font-size': whenProps({ scale: 'small' }),\n 'textarea-large-font-size': whenProps({ scale: 'large' }),\n })};\n\n border-radius: ${token('textarea-border-radius')};\n border-width: 1px;\n border-style: solid;\n\n background: ${conditional({\n 'textarea-background': whenProps({ scheme: 'light' }),\n 'textarea-dark-background': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'textarea-border-color': whenProps({ scheme: 'light', status: Status.Neutral }),\n 'textarea-dark-border-color': whenProps({ scheme: 'dark', status: Status.Neutral }),\n 'textarea-danger-border-color': whenProps({ status: Status.Danger }),\n 'textarea-success-border-color': whenProps({ status: Status.Success }),\n })};\n\n color: ${conditional({\n 'textarea-color': whenProps({ scheme: 'light' }),\n 'textarea-dark-color': whenProps({ scheme: 'dark' }),\n })};\n\n ${hoverable`\n background: ${conditional({\n 'textarea-background--hover': whenProps({ scheme: 'light' }),\n 'textarea-dark-background--hover': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'textarea-border-color--hover': whenProps({ scheme: 'light' }),\n 'textarea-dark-border-color--hover': whenProps({ scheme: 'dark' }),\n })};\n `}\n\n ${focusable`\n background: ${conditional({\n 'textarea-background--focus': whenProps({ scheme: 'light' }),\n 'textarea-dark-background--focus': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'textarea-border-color--focus': whenProps({ scheme: 'light' }),\n 'textarea-dark-border-color--focus': whenProps({ scheme: 'dark' }),\n })};\n\n box-shadow: ${conditional({\n 'textarea-box-shadow': whenProps({ scheme: 'light' }),\n 'textarea-dark-box-shadow': whenProps({ scheme: 'dark' }),\n })};\n\n outline: ${token('textarea-outline')};\n outline-offset: ${token('textarea-outline-offset')};\n `}\n\n ${disableable()}\n`\n\nconst StyledSpan = styled.span<WithAdditionalProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n color: ${conditional({\n 'textarea-border-color': whenProps({ scheme: 'light', status: Status.Neutral }),\n 'textarea-dark-border-color': whenProps({ scheme: 'dark', status: Status.Neutral }),\n 'textarea-danger-border-color': whenProps({ status: Status.Danger }),\n 'textarea-success-border-color': whenProps({ status: Status.Success }),\n })};\n`\n\nconst Leading = styled(StyledSpan)<WithAdditionalProps>`\n align-items: flex-start;\n\n margin: 0 0 0\n ${conditional({\n 'text-field-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'text-field-small-padding-x': whenProps({ scale: 'small' }),\n })};\n\n padding: ${token('space-s')} 0;\n`\n\nconst Trailing = styled(StyledSpan)<WithAdditionalProps>`\n align-items: flex-start;\n\n margin: 0\n ${conditional({\n 'text-field-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'text-field-small-padding-x': whenProps({ scale: 'small' }),\n })}\n 0 0;\n\n padding: ${token('space-s')} 0;\n`\n\nconst StyledTextarea = styled.textarea<WithAdditionalProps>`\n ${transition()}\n\n ${font({\n height: 'textarea-font-height',\n })}\n\n background: transparent;\n\n padding: ${conditional({\n 'textarea-padding-y': whenProps({ scale: 'default' }),\n 'textarea-small-padding-y': whenProps({ scale: 'small' }),\n 'textarea-large-padding-y': whenProps({ scale: 'large' }),\n })}\n 0;\n\n margin: 0\n ${conditional({\n 'textarea-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'textarea-small-padding-x': whenProps({ scale: 'small' }),\n })};\n\n border: none;\n\n flex: 1 0 auto;\n\n ${focusable()}\n ${disableable()}\n`\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n props: TextareaProps,\n ref\n): JSX.Element {\n const {\n disabled = false,\n status = Status.Neutral,\n scheme = 'light',\n scale = 'default',\n className,\n leading,\n trailing,\n ...others\n } = props\n const { ref: containerRef, focused } = useFocusWithin<HTMLDivElement>()\n\n return (\n <TextareaWrapper\n className={clsx(className, {\n 'is-disabled': disabled,\n 'is-focused': focused,\n })}\n scheme={scheme}\n scale={scale}\n status={status}\n ref={containerRef}\n >\n {leading && (\n <Leading status={status} scheme={scheme} scale={scale}>\n {leading}\n </Leading>\n )}\n <StyledTextarea\n ref={ref}\n data-testid=\"textarea\"\n {...others}\n scale={scale}\n status={status}\n scheme={scheme}\n leading={leading}\n trailing={trailing}\n disabled={disabled}\n />\n {trailing && (\n <Trailing status={status} scheme={scheme} scale={scale}>\n {trailing}\n </Trailing>\n )}\n </TextareaWrapper>\n )\n})\n\nexport default Textarea\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nexports.objectFromQueryString = void 0\nexports.objectFromQueryString = function (qs) {\n if (!qs) return null\n if (qs[0] === '?') {\n qs = qs.slice(1)\n }\n return JSON.parse(\n '{\"' + qs.replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}',\n function (key, value) {\n return key === '' ? value : decodeURIComponent(value)\n }\n )\n}\n//# sourceMappingURL=objectFromQueryString.js.map\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nexports.queryStringFromObject = void 0\nexports.queryStringFromObject = function (obj) {\n if (!obj || Object.keys(obj).length === 0) return null\n var qs =\n '?' +\n Object.keys(obj)\n .filter(function (key) {\n return obj[key] !== null && obj[key] !== undefined\n })\n .filter(function (key) {\n return (\n typeof obj[key] === 'string' ||\n typeof obj[key] === 'number' ||\n typeof obj[key] === 'boolean'\n )\n })\n .map(function (key) {\n return key + '=' + obj[key]\n })\n .join('&')\n return qs === '?' ? null : qs\n}\n//# sourceMappingURL=queryStringFromObject.js.map\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nexports.toCapitalizeFirstLetter = void 0\nvar toUpperCaseFirstLetter = function (word) {\n return word.charAt(0).toUpperCase() + word.slice(1)\n}\nvar toCapitalizeFirstLetter = function (word) {\n if (!word) return ''\n return word.split(' ').map(toUpperCaseFirstLetter).join(' ')\n}\nexports.toCapitalizeFirstLetter = toCapitalizeFirstLetter\n//# sourceMappingURL=toCapitalizeFirstLetter.js.map\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nexports.toLocaleCapitalizeFirstLetter = void 0\nvar toLocaleUpperCaseFirstLetter = function (word, locale) {\n return word.charAt(0).toLocaleUpperCase(locale) + word.slice(1)\n}\nvar toLocaleCapitalizeFirstLetter = function (word, locale) {\n if (!word) return ''\n var localeDefined = locale || navigator.language\n return word\n .split(' ')\n .map(function (item) {\n return toLocaleUpperCaseFirstLetter(item, localeDefined)\n })\n .join(' ')\n}\nexports.toLocaleCapitalizeFirstLetter = toLocaleCapitalizeFirstLetter\n//# sourceMappingURL=toLocaleCapitalizeFirstLetter.js.map\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nfunction isBlank(text) {\n if (text == null) {\n return true\n }\n var trimmedText = String(text).trim()\n return trimmedText == ''\n}\nexports.default = isBlank\n//# sourceMappingURL=isBlank.js.map\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nexports.toCapitalizeFirstLetter = exports.toLocaleCapitalizeFirstLetter = exports.queryStringFromObject = exports.objectFromQueryString = exports.isBlank = void 0\nvar objectFromQueryString_1 = require('./objectFromQueryString')\nObject.defineProperty(exports, 'objectFromQueryString', {\n enumerable: true,\n get: function () {\n return objectFromQueryString_1.objectFromQueryString\n },\n})\nvar queryStringFromObject_1 = require('./queryStringFromObject')\nObject.defineProperty(exports, 'queryStringFromObject', {\n enumerable: true,\n get: function () {\n return queryStringFromObject_1.queryStringFromObject\n },\n})\nvar toCapitalizeFirstLetter_1 = require('./toCapitalizeFirstLetter')\nObject.defineProperty(exports, 'toCapitalizeFirstLetter', {\n enumerable: true,\n get: function () {\n return toCapitalizeFirstLetter_1.toCapitalizeFirstLetter\n },\n})\nvar toLocaleCapitalizeFirstLetter_1 = require('./toLocaleCapitalizeFirstLetter')\nObject.defineProperty(exports, 'toLocaleCapitalizeFirstLetter', {\n enumerable: true,\n get: function () {\n return toLocaleCapitalizeFirstLetter_1.toLocaleCapitalizeFirstLetter\n },\n})\nvar isBlank_1 = require('./isBlank')\nexports.isBlank = isBlank_1.default\n//# sourceMappingURL=index.js.map\n","import type { AnchorHTMLAttributes } from 'react'\nimport { isBlank } from '@loadsmart/utils-string'\n\nconst INSECURE_HREF = /^javascript:/i\n\nfunction checkHref(props: AnchorHTMLAttributes<HTMLAnchorElement>) {\n const { href, ...others } = props\n\n if (isBlank(href || '')) {\n return props\n }\n\n if (INSECURE_HREF.test(`${href || ''}`)) {\n // security risk, thus, removing it\n return others\n }\n\n return props\n}\n\nfunction checkTarget({ target, rel }: AnchorHTMLAttributes<HTMLAnchorElement>) {\n if (isBlank(target || '')) {\n return { target, rel }\n }\n\n const sanitizedRel = new Set((rel || '').split(/\\s+/).filter(Boolean))\n\n if (target === '_blank') {\n sanitizedRel.add('noopener')\n }\n\n /**\n * To avoid exploitation of the window.opener API, Adding noreferrer,\n * as recommended in https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a\n */\n sanitizedRel.add('noreferrer')\n\n return { rel: Array.from(sanitizedRel).join(' '), target }\n}\n\nfunction useSafeLink(\n props: AnchorHTMLAttributes<HTMLAnchorElement>\n): AnchorHTMLAttributes<HTMLAnchorElement> {\n const { rel, target } = checkTarget(props) || {}\n\n return { ...checkHref(props), rel, target }\n}\n\nexport default useSafeLink\n","import React, { forwardRef } from 'react'\nimport type { AnchorHTMLAttributes, ForwardedRef } from 'react'\nimport clsx from 'clsx'\nimport styled, { css } from 'styled-components'\n\nimport useSafeLink from './useSafeLink'\nimport font from 'styles/font'\nimport transition from 'styles/transition'\nimport ellipsizable from 'styles/ellipsizable'\nimport hoverable from 'styles/hoverable'\nimport focusable from 'styles/focusable'\nimport disableable from 'styles/disableable'\nimport { getToken as token } from 'theming'\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n className?: string\n disabled?: boolean\n}\n\nconst StyledBaseAnchor = styled.a`\n ${font({\n height: 'link-font-height',\n weight: 'link-font-weight',\n })}\n ${transition()}\n\n ${ellipsizable()}\n\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n text-align: center;\n font-size: ${token('link-font-size')};\n color: ${token('color-neutral-darker')};\n text-decoration: none;\n\n min-height: 24px;\n\n border-radius: ${token('border-radius-s')};\n\n ${hoverable`\n text-decoration: underline;\n font-weight: ${token('link-font-weight--hover')};\n `}\n\n ${focusable`\n box-shadow: ${token('link-box-shadow')};\n outline: ${token('link-outline')};\n outline-offset: ${token('link-outline-offset')};\n `}\n\n ${disableable``}\n\n ${({ children }) =>\n 'string' == typeof children &&\n // to prevent layout shift on hover, https://css-tricks.com/bold-on-hover-without-the-layout-shift/\n css`\n &::after {\n height: 0;\n overflow: hidden;\n\n font-weight: ${token('link-font-weight--hover')};\n\n visibility: hidden;\n\n content: attr(data-text);\n content: attr(data-text) / '';\n user-select: none;\n pointer-events: none;\n\n @media speech {\n display: none;\n }\n }\n `}\n`\n\nexport const BaseLink = forwardRef(function BaseLink(\n { disabled = false, ...props }: LinkProps,\n forwardedRef: ForwardedRef<HTMLAnchorElement>\n): JSX.Element {\n const { href = '/', children, className, target = '_self', ...others } = useSafeLink(props)\n\n return (\n <StyledBaseAnchor\n className={clsx(\n {\n 'is-disabled': disabled,\n },\n className\n )}\n href={href}\n target={target}\n {...others}\n ref={forwardedRef}\n data-text={'string' == typeof children ? children : ''}\n data-testid=\"link\"\n >\n {children}\n </StyledBaseAnchor>\n )\n})\n\nconst StyledAnchor = styled(BaseLink)<LinkProps>`\n color: ${token('link-color')};\n`\n\nfunction Link(props: LinkProps): JSX.Element {\n return <StyledAnchor {...props} />\n}\n\nexport default Link\n","import React, { HTMLAttributes } from 'react'\nimport { isNil } from '@loadsmart/utils-object'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nimport conditional, { whenProps } from 'tools/conditional'\nimport font from 'styles/font'\nimport { getToken as token } from 'theming'\n\nimport { Link } from '../Link'\n\nexport interface BreadcrumbProps extends HTMLAttributes<HTMLElement> {\n active?: boolean\n label: string\n url?: string\n}\n\nconst StyledLink = styled(Link)`\n font-size: ${token('breadcrumbs-font-size')};\n line-height: ${token('breadcrumbs-font-height')};\n`\n\nconst StyledLi = styled.li<BreadcrumbProps>`\n ${font({\n height: 'breadcrumbs-font-height',\n weight: 'breadcrumbs-font-weight',\n })}\n\n position: relative;\n\n display: inline-flex;\n align-items: center;\n\n font-weight: ${conditional({\n 'breadcrumbs-font-weight': whenProps({ active: false }),\n 'breadcrumbs-font-weight--active': whenProps({ active: true }),\n })};\n\n font-size: ${token('breadcrumbs-font-size')};\n line-height: ${token('breadcrumbs-font-height')};\n\n & + & {\n margin: 0 0 0 ${token('breadcrumbs-spacing-x')};\n }\n\n &:not(:only-child):not(:last-child)::after {\n position: absolute;\n left: calc(100% + 14px);\n\n font-weight: ${token('font-weight-bold')};\n font-size: ${token('breadcrumbs-font-size')};\n\n line-height: ${token('breadcrumbs-font-height')};\n\n content: '/';\n }\n`\n\nfunction getWrappedLabel(props: Partial<BreadcrumbProps>) {\n const { url, label, onClick, active, ...rest } = props\n\n if (isNil(url) && !onClick) {\n return label\n }\n\n return (\n <StyledLink\n href={url}\n target=\"_self\"\n onClick={onClick}\n {...(active && { 'aria-current': 'page' })}\n {...rest}\n >\n {label}\n </StyledLink>\n )\n}\n\nfunction Breadcrumb({ active, label, url, ...rest }: BreadcrumbProps): JSX.Element {\n return (\n <StyledLi\n className={clsx({ 'is-active': active })}\n label={label}\n data-testid=\"breadcrumb\"\n active={active}\n >\n {getWrappedLabel({ label, url, active, ...rest })}\n </StyledLi>\n )\n}\n\nexport default Breadcrumb\n","import React, { MouseEvent } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport Breadcrumb, { BreadcrumbProps } from './Breadcrumb'\nimport BackButton from 'common/BackButton'\n\nexport interface BreadcrumbsProps {\n className?: string\n disabled?: boolean\n entries: BreadcrumbProps[]\n onBack?: (e: MouseEvent<HTMLButtonElement>) => void\n}\n\nconst StyledWrapper = styled.nav`\n display: flex;\n flex-direction: row;\n`\n\nconst StyledOl = styled.ol`\n display: flex;\n flex-direction: row;\n margin: 0;\n\n padding: 0;\n\n list-style: none;\n`\n\nconst StyledBackButton = styled(BackButton)`\n margin: 0 ${token('space-m')} 0 0;\n`\n\nfunction Breadcrumbs({ entries = [], onBack, disabled, ...others }: BreadcrumbsProps): JSX.Element {\n return (\n <StyledWrapper aria-label=\"Breadcrumb\" {...others}>\n {onBack && (\n <StyledBackButton\n data-testid=\"breadcrumbs-back\"\n onClick={onBack}\n disabled={disabled}\n aria-label=\"Back to previous page\"\n />\n )}\n\n <StyledOl data-testid=\"breadcrumbs\">\n {entries.map((entry: BreadcrumbProps) => {\n return <Breadcrumb key={entry.label} {...entry} />\n })}\n </StyledOl>\n </StyledWrapper>\n )\n}\nexport default Breadcrumbs\n","import { useRef, useEffect } from 'react'\n\n/**\n * Hook useful to trigger action conditionally based\n * on if the component is mounted.\n * Be aware that your effect, callback, memo, etc cannot list is\n * as a dependency, otherwise it will be triggered at the wrong moment.\n * @returns {boolean} Whether the component is mounted or not.\n */\nfunction useDidMount(): boolean {\n const counter = useRef(0)\n\n useEffect(function onMount() {\n counter.current = 1\n }, [])\n\n return counter.current > 0\n}\n\nexport default useDidMount\n","import get from 'utils/toolset/get'\n\nimport type {\n Selectable,\n SelectableAdapter,\n SelectableKeyType,\n SelectableState,\n SelectableStrategy,\n} from './useSelectable.types'\n\nexport type SelectableStrategyContext<T extends Selectable> = {\n getAdapter: (type?: string) => SelectableAdapter<T>\n}\n\nconst GenericAdapter: SelectableAdapter<unknown> = {\n getKey(o): string {\n return get(o, 'value') as string\n },\n}\n\nfunction createSelectionStrategy<T extends Selectable>(props: {\n multiple?: boolean\n adapters: Record<string, SelectableAdapter<T>>\n}): SelectableStrategy<T> {\n const { adapters, multiple } = props\n\n const context: SelectableStrategyContext<T> = {\n getAdapter(type?: string) {\n if (type == null) {\n return GenericAdapter\n }\n\n return adapters[type] || GenericAdapter\n },\n }\n\n if (multiple) {\n return MultipleSelectionStrategy(context)\n }\n\n return SingleSelectionStrategy(context)\n}\n\nexport function SingleSelectionStrategy<T extends Selectable>(\n context: SelectableStrategyContext<T>\n): SelectableStrategy<T> {\n return {\n type() {\n return 'single'\n },\n init(items: T[]) {\n return this.select(items, new Map())\n },\n select(items: T[]) {\n const newSelection = new Map<SelectableKeyType, T>()\n\n for (let i = 0; i < items.slice(0, 1).length; i++) {\n const adapter = context.getAdapter(items[i]._type)\n newSelection.set(adapter.getKey(items[i]), items[i])\n }\n\n return newSelection\n },\n unselect(keys: SelectableKeyType[], selection: SelectableState<T>) {\n const newSelection = new Map<SelectableKeyType, T>(selection)\n\n for (let i = 0; i < keys.length; i++) {\n newSelection.delete(keys[i])\n }\n\n return newSelection\n },\n toggle(items: T[], selection: SelectableState<T>) {\n const newSelection = new Map<SelectableKeyType, T>()\n\n for (let i = 0; i < items.slice(0, 1).length; i++) {\n const adapter = context.getAdapter(items[i]._type)\n\n if (!selection.has(adapter.getKey(items[i]))) {\n newSelection.set(adapter.getKey(items[i]), items[i])\n }\n }\n\n return newSelection\n },\n clear() {\n return new Map<SelectableKeyType, T>()\n },\n }\n}\n\nexport function MultipleSelectionStrategy<T extends Selectable>(\n context: SelectableStrategyContext<T>\n): SelectableStrategy<T> {\n return {\n type() {\n return 'multiple'\n },\n init(items: T[]) {\n return this.select(items, new Map<SelectableKeyType, T>())\n },\n select(items: T[], selection: SelectableState<T>) {\n const newSelection = new Map<SelectableKeyType, T>(selection)\n\n for (let i = 0; i < items.length; i++) {\n const adapter = context.getAdapter(items[i]._type)\n newSelection.set(adapter.getKey(items[i]), items[i])\n }\n\n return newSelection\n },\n unselect(keys: SelectableKeyType[], selection: SelectableState<T>) {\n const newSelection = new Map<SelectableKeyType, T>(selection)\n\n for (let i = 0; i < keys.length; i++) {\n newSelection.delete(keys[i])\n }\n\n return newSelection\n },\n toggle(items: T[], selection: SelectableState<T>) {\n const newSelection = new Map<SelectableKeyType, T>(selection)\n\n for (let i = 0; i < items.length; i++) {\n const adapter = context.getAdapter(items[i]._type)\n const key = adapter.getKey(items[i])\n\n if (!selection.has(key)) {\n newSelection.set(key, items[i])\n } else {\n newSelection.delete(key)\n }\n }\n\n return newSelection\n },\n clear() {\n return new Map<SelectableKeyType, T>()\n },\n }\n}\n\nexport default createSelectionStrategy\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n","import range from './range'\n\nconst MAX_LENGTH = 15\nconst INITIAL_LENGTH = 2\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-'\n\n/**\n *\n * @param {Object} options - Options\n * @param\n * @returns\n */\nexport function IDGenerator({\n maxIDLength,\n initialIDLength,\n alphabet,\n}: {\n maxIDLength: number\n initialIDLength: number\n alphabet: string\n}): () => string {\n let currentLength = initialIDLength\n\n // eslint-disable-next-line prefer-const\n let filledCharacters = [\n ...(Array(maxIDLength - currentLength).fill(-1) as number[]),\n ...(Array(currentLength).fill(0) as number[]),\n ]\n\n let availableIDs = range(initialIDLength, maxIDLength + 1).reduce(\n // using arrangement with repetition formula\n (acc: number, n: number) => acc + Math.pow(alphabet.length, n),\n 0\n )\n\n return function getID() {\n if (availableIDs == 0) {\n throw new Error(`No more IDs available with the provided alphabet and max length`)\n }\n\n availableIDs--\n const newID = filledCharacters.slice(-1 * currentLength).map((at: number) => alphabet[at])\n\n /**\n * [0, 0, 0, 0]\n * ^ at\n */\n let at = filledCharacters.length\n\n /**\n * move to the left in the `filledCharacters` array if\n * we have surpassed the last possible character in `alphabet`.\n * That means:\n * [0,0,0,(alphabet.length - 1)]\n * Becomes:\n * [0,0,1,0]\n */\n\n do {\n at--\n filledCharacters[at] = (filledCharacters[at] + 1) % alphabet.length\n } while (filledCharacters[at] == 0 && at >= filledCharacters.length - currentLength)\n\n /**\n * if we moved to the left as much as `currentLength` allowed,\n * and we have incremented as many times as we could, for each\n * position so we're back to `0`, due to the module operation,\n * i.e., if `currentLength = 3`, for example:\n *\n * [0, 0, 0, 0]\n * ^ currentLength\n * ^at\n *\n * So we need to increase `currentLength` to start incrementing from there:\n * [0, 0, 0, 0]\n * ^ currentLength\n */\n if (filledCharacters.length - at > currentLength) {\n currentLength++\n }\n\n return `genid-${newID.join('')}`\n }\n}\n\n// this configuration is capable of generating 469172025408063600 different IDs.\nconst getID = IDGenerator({\n maxIDLength: MAX_LENGTH,\n alphabet: ALPHABET,\n initialIDLength: INITIAL_LENGTH,\n})\n\nexport default getID\n","import { createContext, useEffect, useMemo, useReducer, useRef } from 'react'\nimport { identity } from '@loadsmart/utils-function'\n\nimport { useDidMount } from 'hooks/useDidMount'\nimport createSelectionStrategy from './SelectableStrategy'\nimport toArray from 'utils/toolset/toArray'\nimport useFingerprint from 'hooks/useFingerprint'\n\nimport type { Context } from 'react'\nimport type {\n Selectable,\n SelectableAction,\n SelectableKeyType,\n SelectableState,\n SelectableStrategy,\n useSelectableProps,\n useSelectableReturn,\n} from './useSelectable.types'\n\nconst DEFAULT_ADAPTERS = {}\n\n/**\n * Create a generic manager for collection selection.\n * @returns\n */\nfunction createUseSelectable<T extends Selectable>() {\n return function useSelectable(props: useSelectableProps<T>): useSelectableReturn<T> {\n const { adapters, multiple, onChange } = props\n\n const didMount = useDidMount()\n\n const strategy = useMemo<SelectableStrategy<T>>(() => {\n return createSelectionStrategy<T>({\n adapters: adapters || DEFAULT_ADAPTERS,\n multiple: Boolean(multiple),\n })\n }, [adapters, multiple])\n\n function reducer(state: SelectableState<T>, action: SelectableAction<T>) {\n switch (action.type) {\n case 'select':\n return strategy.select(action.payload, state)\n case 'unselect':\n return strategy.unselect(action.payload, state)\n case 'toggle':\n return strategy.toggle(action.payload, state)\n case 'clear':\n return strategy.clear(state)\n case 'reset':\n return action.payload\n }\n }\n\n function initializer() {\n return strategy.init(toArray(props.selected))\n }\n\n const [selected, dispatch] = useReducer(reducer, new Map<SelectableKeyType, T>(), initializer)\n const { resetFingerprint, hasSameFingerprint } = useFingerprint<string>(\n identity,\n [...selected.keys()].map(String)\n )\n const propagateChangeRef = useRef(false)\n\n function type() {\n return strategy.type()\n }\n\n function select(items: T | T[]) {\n propagateChangeRef.current = true\n\n dispatch({\n type: 'select',\n payload: toArray(items),\n })\n }\n\n function unselect(keys: SelectableKeyType | SelectableKeyType[]) {\n propagateChangeRef.current = true\n\n dispatch({\n type: 'unselect',\n payload: toArray(keys),\n })\n }\n\n function toggle(items: T | T[]) {\n propagateChangeRef.current = true\n\n dispatch({\n type: 'toggle',\n payload: toArray(items),\n })\n }\n\n function clear() {\n propagateChangeRef.current = true\n\n dispatch({\n type: 'clear',\n })\n }\n\n useEffect(\n function handleChange() {\n if (didMount && propagateChangeRef.current) {\n onChange?.(selected)\n }\n\n propagateChangeRef.current = false\n },\n /**\n * We don't want to update when didMount or the onChange callback changes, because we're only interested\n * in changes to the selected state.\n */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [selected]\n )\n\n useEffect(\n function updateOnSelectedPropChange() {\n const newSelected = initializer()\n const keys = [...newSelected.keys()].map(String)\n\n if (hasSameFingerprint(keys)) {\n return\n }\n\n propagateChangeRef.current = false\n\n resetFingerprint(keys)\n dispatch({\n type: 'reset',\n payload: newSelected,\n })\n },\n /**\n * initializer is not relevant for our changes, that's why its ommitted.\n */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.selected, hasSameFingerprint, resetFingerprint]\n )\n\n return { type, selected, select, unselect, toggle, clear }\n }\n}\n\nexport function createSelectable<T extends Selectable>(): {\n SelectableContext: Context<useSelectableReturn<T>>\n useSelectable: (props: useSelectableProps<T>) => useSelectableReturn<T>\n} {\n const SelectableContext = createContext<useSelectableReturn<T>>({} as useSelectableReturn<T>)\n const useSelectable = createUseSelectable<T>()\n\n return { SelectableContext, useSelectable }\n}\n","import { useState, useRef } from 'react'\n\nimport getID from 'utils/toolset/getID'\nimport isEmpty from 'utils/toolset/isEmpty'\n\ntype FingerprintAdapter<T> = (item: T) => string\n\n/**\n * This hook helps with stabilizing changes for components that rely on non-primitive props, more specifically, arrays,\n * objects, maps, sets and so on; when we need to update an internal state based on such types of prop, we might run into an infinite loop.\n * By creating a fingerprint - a string that identifies that set of items - we can garantee that the same set of items will\n * always return the same fingerprint, thus, making check for changes more predictable.\n *\n * @param adapter - adapter function that gets a unique identifier for each item in the `items` prop\n * @param items - list of items whose fingerprint should be checked.\n * @returns\n */\nfunction useFingerprint<T>(\n adapter: FingerprintAdapter<T>,\n items: T[]\n): {\n fingerprint: string\n getFingerprint: (items?: T[] | null, insert?: boolean) => string\n resetFingerprint: (items: T[]) => void\n hasSameFingerprint: (otherItems: T[]) => boolean\n} {\n const knownRef = useRef({} as Record<string, T | string>)\n const [fingerprint, setFingerprint] = useState(() => getFingerprint('', items, true))\n\n /**\n * Get a fingerprint based on the sorted items identifiers.\n *\n * @param {string[]} items - array of items\n * @param {boolean} update - update `known` with the provided `items`, if it contains different set of items.\n * @returns {string}\n */\n function getFingerprint(currentFingerprint: string, items?: T[] | null, update = false) {\n const known = knownRef.current\n\n const safeItems = items || []\n\n let newKnown: Record<string, T | string> = {}\n let hasSameItems = Object.keys(known).length === safeItems.length\n\n for (let i = 0; i < safeItems.length; i++) {\n const item = safeItems[i]\n const key = adapter(item)\n\n hasSameItems = hasSameItems && known[key] != null\n\n newKnown = {\n ...newKnown,\n // we associate a previously created or a new random value to compose the fingerprint\n [key]: known[key] ?? getID(),\n }\n }\n\n if (hasSameItems) {\n return currentFingerprint\n }\n\n if (update) {\n knownRef.current = newKnown\n }\n\n const fingerprint = Object.keys(newKnown)\n .sort()\n .reduce((fingerprint, item) => {\n return `${fingerprint}${newKnown[item] as string}`\n }, '')\n\n return fingerprint\n }\n\n return {\n fingerprint,\n getFingerprint(items?: T[] | null, update = false) {\n return getFingerprint(fingerprint, items, update)\n },\n resetFingerprint(items: T[]) {\n setFingerprint(getFingerprint(fingerprint, items, true))\n },\n /**\n * Check if the provided items have the same fingerprint.\n * @param {string[]} otherItems - items\n * @returns {boolean}\n */\n hasSameFingerprint(otherItems: T[]) {\n return fingerprint === getFingerprint(fingerprint, otherItems)\n },\n }\n}\n\nexport default useFingerprint\n","import React from 'react'\nimport { createSelectable } from 'hooks/useSelectable'\n\nimport type { ToggleGroupProps, ToggleOption } from './ToggleGroup.types'\n\nconst ToggleGroupContext = React.createContext<Pick<ToggleGroupProps, 'scale' | 'disabled'>>({\n scale: 'default',\n disabled: false,\n})\n\nexport const { SelectableContext, useSelectable } = createSelectable<ToggleOption>()\n\nexport default ToggleGroupContext\n","import React, { useContext } from 'react'\nimport styled from 'styled-components'\n\nimport { BaseButton } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport activatable from 'styles/activatable'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport isEmpty from 'utils/toolset/isEmpty'\nimport ToggleGroupContext, { SelectableContext } from './ToggleGroupContext'\n\nimport type { ToggleGroupOptionProps, ToggleGroupType } from './ToggleGroup.types'\n\nconst ToggleButton = styled(BaseButton)<{ $type: ToggleGroupType }>`\n text-transform: ${token('toggle-text-transform')};\n\n background-color: ${conditional({\n 'toggle-background-color': whenProps({ 'aria-checked': false }),\n 'toggle-checked-background-color': whenProps({ 'aria-checked': true }),\n })};\n\n border-color: ${conditional({\n 'toggle-single-border-color': whenProps({ $type: 'single', 'aria-checked': false }),\n 'toggle-single-checked-border-color': whenProps({ $type: 'single', 'aria-checked': true }),\n 'toggle-multiple-border-color': whenProps({ $type: 'multiple', 'aria-checked': false }),\n 'toggle-multiple-checked-border-color': whenProps({ $type: 'multiple', 'aria-checked': true }),\n })};\n\n color: ${conditional({\n 'toggle-color': whenProps({ 'aria-checked': false }),\n 'toggle-checked-color': whenProps({ 'aria-checked': true }),\n })};\n\n padding: ${token('space-xs')} ${token('space-s')};\n\n ${hoverable`\n border-color: ${conditional({\n 'toggle-multiple-border-color--hover': whenProps({ $type: 'multiple' }),\n 'toggle-single-border-color--hover': whenProps({ $type: 'single' }),\n })};\n\n background-color: ${conditional({\n 'toggle-background-color--hover': whenProps({ 'aria-checked': false }),\n 'toggle-checked-background-color--hover': whenProps({ 'aria-checked': true }),\n })};\n\n color: ${conditional({\n 'toggle-color--hover': whenProps({ 'aria-checked': false }),\n 'toggle-checked-color--hover': whenProps({ 'aria-checked': true }),\n })};\n `}\n\n ${focusable`\n border-color: ${conditional({\n 'toggle-multiple-border-color--focus': whenProps({ $type: 'multiple' }),\n 'toggle-single-border-color--focus': whenProps({ $type: 'single' }),\n })};\n\n background-color: ${conditional({\n 'toggle-background-color--focus': whenProps({ 'aria-checked': false }),\n 'toggle-checked-background-color--focus': whenProps({ 'aria-checked': true }),\n })};\n\n color: ${conditional({\n 'toggle-color--focus': whenProps({ 'aria-checked': false }),\n 'toggle-checked-color--focus': whenProps({ 'aria-checked': true }),\n })};\n\n box-shadow: ${token('toggle-box-shadow')};\n outline: ${token('toggle-outline')};\n outline-offset: ${token('toggle-outline-offset')};\n `}\n\n ${activatable`\n border-color: ${conditional({\n 'toggle-multiple-border-color--active': whenProps({ $type: 'multiple' }),\n 'toggle-single-border-color--active': whenProps({ $type: 'single' }),\n })};\n\n background-color: ${conditional({\n 'toggle-background-color--active': whenProps({ 'aria-checked': false }),\n 'toggle-checked-background-color--active': whenProps({ 'aria-checked': true }),\n })};\n\n color: ${conditional({\n 'toggle-color--active': whenProps({ 'aria-checked': false }),\n 'toggle-checked-color--active': whenProps({ 'aria-checked': true }),\n })};\n `}\n\n ${disableable`\n background-color: ${conditional({\n 'toggle-background-color--disabled': whenProps({ 'aria-checked': false }),\n 'toggle-checked-background-color--disabled': whenProps({ 'aria-checked': true }),\n })};\n\n border-color: ${conditional({\n 'toggle-single-border-color--disabled': whenProps({ $type: 'single', 'aria-checked': false }),\n 'toggle-single-checked-border-color--disabled': whenProps({\n $type: 'single',\n 'aria-checked': true,\n }),\n 'toggle-multiple-border-color--disabled': whenProps({\n $type: 'multiple',\n 'aria-checked': false,\n }),\n 'toggle-multiple-checked-border-color--disabled': whenProps({\n $type: 'multiple',\n 'aria-checked': true,\n }),\n })};\n\n color: ${conditional({\n 'toggle-color--disabled': whenProps({ 'aria-checked': false }),\n 'toggle-checked-color--disabled': whenProps({ 'aria-checked': true }),\n })};\n `}\n`\n\nfunction isMultiple(type: ToggleGroupType) {\n return type === 'multiple'\n}\n\nfunction Toggle({ value, children, disabled, ...others }: ToggleGroupOptionProps): JSX.Element {\n const group = useContext(ToggleGroupContext)\n const selectable = useContext(SelectableContext)\n\n if (isEmpty(selectable)) {\n throw Error('A Toggle options must be rendered inside a ToggleGroup')\n }\n\n const selected = selectable.selected.has(value)\n\n return (\n <ToggleButton\n {...others}\n $type={selectable.type()}\n type=\"button\"\n role={isMultiple(selectable.type()) ? 'checkbox' : 'radio'}\n aria-checked={selected}\n disabled={Boolean(disabled || group.disabled)}\n onClick={() => {\n if (isMultiple(selectable.type())) {\n selectable.toggle({ value })\n } else {\n selectable.select({ value })\n }\n }}\n scale={group.scale}\n >\n {children}\n </ToggleButton>\n )\n}\n\nexport default styled(Toggle)({})\n","import React, { useCallback } from 'react'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nimport { getToken as token } from 'theming'\nimport { Group } from 'components/Layout'\nimport conditional, { whenProps } from 'tools/conditional'\nimport isEmpty from 'utils/toolset/isEmpty'\nimport toArray from 'utils/toolset/toArray'\nimport Toggle from './Toggle'\nimport ToggleGroupContext, { SelectableContext, useSelectable } from './ToggleGroupContext'\n\nimport type {\n ToggleGroupOptionProps,\n ToggleGroupProps,\n ToggleOption,\n ToggleGroupOptionValue,\n SelectedToggleGroupOptions,\n} from './ToggleGroup.types'\n\nconst Container = styled(Group)<{ $multiple: boolean; $scale: ToggleGroupProps['scale'] }>`\n padding: ${conditional({\n 'toggle-group-multiple-padding': whenProps({ $multiple: true }),\n 'toggle-group-single-padding': whenProps({ $multiple: false }),\n })};\n\n border-color: ${conditional({\n 'toggle-group-multiple-border-color': whenProps({ $multiple: true }),\n 'toggle-group-single-border-color': whenProps({ $multiple: false }),\n })};\n\n border-style: ${conditional({\n 'toggle-group-multiple-border-style': whenProps({ $multiple: true }),\n 'toggle-group-single-border-style': whenProps({ $multiple: false }),\n })};\n\n border-width: ${conditional({\n 'toggle-group-multiple-border-width': whenProps({ $multiple: true }),\n 'toggle-group-single-border-width': whenProps({ $multiple: false }),\n })};\n\n border-radius: ${conditional({\n 'toggle-group-multiple-border-radius': whenProps({ $multiple: true }),\n 'toggle-group-single-border-radius': whenProps({ $multiple: false }),\n })};\n\n &.are-disabled {\n border-color: ${token('toggle-group-border-color--disabled')};\n }\n\n ${Toggle} {\n height: ${conditional({\n 'toggle-single-height': whenProps({ $multiple: false, $scale: 'default' }),\n 'toggle-single-small-height': whenProps({ $multiple: false, $scale: 'small' }),\n 'toggle-multiple-height': whenProps({ $multiple: true, $scale: 'default' }),\n 'toggle-multiple-small-height': whenProps({ $multiple: true, $scale: 'small' }),\n })};\n\n font-size: ${conditional({\n 'toggle-single-font-size': whenProps({ $multiple: false, $scale: 'default' }),\n 'toggle-single-small-font-size': whenProps({ $multiple: false, $scale: 'small' }),\n 'toggle-multiple-font-size': whenProps({ $multiple: true, $scale: 'default' }),\n 'toggle-multiple-small-font-size': whenProps({ $multiple: true, $scale: 'small' }),\n })};\n }\n`\n\nfunction fromValueToSelected(\n value: ToggleGroupOptionValue | ToggleGroupOptionValue[]\n): ToggleOption[] {\n const valueAsArray = toArray(value)\n\n return valueAsArray.map((value) => ({ value }))\n}\n\nfunction fromSelectedToValue(\n selected: SelectedToggleGroupOptions,\n multiple: boolean\n): ToggleGroupOptionValue | ToggleGroupOptionValue[] | null {\n const pairs = Array.from(selected)\n\n if (multiple) {\n const value: ToggleGroupOptionValue[] = []\n for (const [, option] of pairs) {\n value.push(option.value)\n }\n\n return value\n } else {\n if (isEmpty(pairs)) {\n return null\n }\n const [[, option]] = pairs\n return option.value\n }\n}\n\nconst DEFAULT_SELECTED = [] as ToggleGroupOptionValue[]\n\nfunction ToggleGroup(props: ToggleGroupProps): JSX.Element {\n const {\n disabled = false,\n multiple = false,\n scale = 'default',\n id,\n name,\n onChange,\n options,\n children,\n className,\n ...others\n } = props\n const selectable = useSelectable({\n multiple,\n selected: fromValueToSelected(props.value ?? DEFAULT_SELECTED),\n onChange: useCallback(\n function handleSelectionChange(selected) {\n onChange?.({\n target: { id, name: name ?? '', value: fromSelectedToValue(selected, multiple) },\n })\n },\n [id, multiple, name, onChange]\n ),\n })\n\n return (\n <Container\n {...others}\n className={clsx(className, {\n 'are-disabled': disabled,\n })}\n id={id}\n role={multiple ? 'group' : 'radiogroup'}\n align=\"center\"\n space=\"xs\"\n $multiple={multiple}\n $scale={scale}\n >\n <ToggleGroupContext.Provider value={{ scale, disabled }}>\n <SelectableContext.Provider value={selectable}>\n {children ??\n (options || []).map(function renderOption(option: ToggleGroupOptionProps) {\n const { label, value, ...others } = option\n const key = String(value)\n\n return (\n <Toggle\n key={key}\n {...others}\n disabled={Boolean(disabled || option.disabled)}\n value={value}\n >\n {label}\n </Toggle>\n )\n })}\n </SelectableContext.Provider>\n </ToggleGroupContext.Provider>\n </Container>\n )\n}\n\nToggleGroup.Option = Toggle\n\nexport default ToggleGroup\n","import { createContext } from 'react'\n\ninterface TabContextValue {\n id: string\n activeTab: string\n setActiveTab: (name: string) => void\n direction?: 'horizontal' | 'vertical'\n}\n\nexport const TabContext = createContext<TabContextValue>({} as TabContextValue)\n","import React from 'react'\n\nimport getID from 'utils/toolset/getID'\n\nfunction useID(propId?: string): string {\n const [id, setID] = React.useState(() => propId || getID())\n\n React.useEffect(\n function updateID() {\n setID(propId || getID())\n },\n [propId]\n )\n\n return id\n}\n\nexport default useID\n","import React, {\n HTMLAttributes,\n useContext,\n useState,\n useEffect,\n ChangeEvent,\n ReactNode,\n} from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { TabContext } from './TabsContext'\nimport conditional, { whenProps } from 'tools/conditional'\nimport font from 'styles/font'\nimport hoverable from 'styles/hoverable'\nimport disableable from 'styles/disableable'\nimport transition from 'styles/transition'\nimport useID from 'hooks/useID'\n\nimport type { WithDirectionProps, WithActiveProps } from './Tabs.types'\nimport clsx from 'clsx'\n\nconst TabsItemsWrapper = styled.ul`\n display: flex;\n\n padding: 0;\n\n border-bottom-color: ${token('color-neutral-lighter')};\n border-bottom-width: 2px;\n border-bottom-style: solid;\n`\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n pointer-events: none;\n`\n\nconst Children = styled(StyledSpan)`\n flex: 1;\n`\n\nconst Leading = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst StyledListItem = styled.li`\n display: flex;\n`\n\nconst StyledLabel = styled.label<WithActiveProps & WithDirectionProps>`\n ${font({\n height: 'font-height-2',\n weight: 'font-weight-bold',\n })}\n ${transition()}\n\n font-size: ${token('font-size-4')};\n text-transform: uppercase;\n text-align: ${conditional({\n center: whenProps({ direction: 'vertical' }),\n justify: whenProps({ direction: 'horizontal' }),\n })};\n\n ${hoverable`\n color: ${token('color-neutral-darker')};\n background-color: ${token('color-neutral-light')}33;\n `}\n\n ${disableable`\n color: ${token('color-neutral-dark')}33;\n background-color: ${token('color-neutral-light')};\n `}\n\n padding: ${token('space-m')} ${token('space-l')};\n display: inline-flex;\n flex-direction: ${conditional({\n row: whenProps({ direction: 'horizontal' }),\n column: whenProps({ direction: 'vertical' }),\n })};\n\n cursor: pointer;\n\n position: relative;\n bottom: -2px;\n\n border-bottom-width: 2px;\n border-bottom-style: solid;\n\n border-color: ${conditional({\n 'color-transparent': whenProps({ active: false }),\n 'color-primary': whenProps({ active: true }),\n })};\n\n color: ${conditional({\n 'color-neutral': whenProps({ active: false }),\n 'neutral-darker': whenProps({ active: true }),\n })};\n\n ${Leading} + ${Children} {\n margin: ${conditional({\n '0': whenProps({ direction: 'horizontal' }),\n 'space-2xs': whenProps({ direction: 'vertical' }),\n })}\n 0 0\n ${conditional({\n 'space-s': whenProps({ direction: 'horizontal' }),\n '0': whenProps({ direction: 'vertical' }),\n })};\n }\n`\n\ntype TabsItemsProps = HTMLAttributes<HTMLUListElement>\n\nfunction TabsItems({ children, ...props }: TabsItemsProps) {\n return (\n <TabsItemsWrapper {...props} role=\"tablist\">\n {children}\n </TabsItemsWrapper>\n )\n}\n\ninterface TabsItemProps extends HTMLAttributes<HTMLInputElement> {\n name: string\n default?: boolean\n leading?: ReactNode\n disabled?: boolean\n}\n\nfunction TabsItem({\n children,\n name,\n default: isDefault,\n className,\n onChange,\n leading,\n disabled = false,\n ...props\n}: TabsItemProps) {\n const { id: tabId, setActiveTab, activeTab, direction } = useContext(TabContext)\n\n const isActive = activeTab === name\n\n function handleSelect(event: ChangeEvent<HTMLInputElement>) {\n setActiveTab(name)\n onChange?.(event)\n }\n\n useEffect(() => {\n if (!activeTab && isDefault) {\n setActiveTab(name)\n }\n }, [activeTab, name, setActiveTab, isDefault])\n\n return (\n <StyledListItem role=\"tab\" aria-selected={isActive ? 'true' : 'false'}>\n <StyledLabel\n className={clsx(\n {\n 'is-disabled': disabled,\n },\n className\n )}\n active={activeTab === name}\n direction={direction}\n >\n <input\n {...props}\n value={name}\n checked={isActive}\n disabled={disabled}\n type=\"radio\"\n name={tabId}\n onChange={handleSelect}\n hidden\n />\n {leading && <Leading>{leading}</Leading>}\n {children && <Children>{children}</Children>}\n </StyledLabel>\n </StyledListItem>\n )\n}\n\ntype PanelsItemsProps = HTMLAttributes<HTMLDivElement>\n\nconst PanelsItemsWrapper = styled.div`\n /* placeholder */\n`\n\nconst PanelsItemWrapper = styled.article`\n display: ${conditional({\n block: whenProps({ 'aria-hidden': false }),\n none: whenProps({ 'aria-hidden': true }),\n })};\n`\n\nfunction PanelsItems({ children, ...props }: PanelsItemsProps) {\n return <PanelsItemsWrapper {...props}>{children}</PanelsItemsWrapper>\n}\n\ninterface PanelsItemProps extends HTMLAttributes<HTMLElement> {\n name: string\n /**\n * Renders the Panel.Item only when is visible\n * @default false\n */\n lazy?: boolean\n}\n\nfunction PanelsItem({ children, name, lazy, ...props }: PanelsItemProps) {\n const { activeTab } = useContext(TabContext)\n\n const hidden = activeTab !== name\n\n return (\n <PanelsItemWrapper {...props} role=\"tabpanel\" aria-hidden={hidden}>\n {lazy && hidden ? null : children}\n </PanelsItemWrapper>\n )\n}\n\nPanelsItem.defaultProps = {\n lazy: false,\n}\n\nexport interface TabsProps extends HTMLAttributes<HTMLElement>, WithDirectionProps {\n activeTab?: string\n onTabChange?: (tab: string) => void\n}\n\nconst TabsWrapper = styled.div`\n ${TabsItemsWrapper} + ${PanelsItemsWrapper} {\n margin: ${token('space-xl')} 0 0 0;\n }\n`\n\n/**\n * @example\n * <Tabs>\n <Tabs.Items>\n <Tabs.Item name=\"tab-1\" default>\n Tabs 1\n </Tabs.Item>\n <Tabs.Item name=\"tab-2\">Tabs 2</Tabs.Item>\n </Tabs.Items>\n <Tabs.Panels>\n <Tabs.Panel name=\"tab-1\">first content</Tabs.Panel>\n <Tabs.Panel name=\"tab-2\">second content</Tabs.Panel>\n </Tabs.Panels>\n * </Tabs>\n */\nfunction Tabs({\n children,\n direction = 'horizontal',\n id: propId,\n activeTab: propTab = '',\n onTabChange,\n ...props\n}: TabsProps): JSX.Element {\n const [activeTab, setActiveTab] = useState(propTab)\n const id = useID(propId)\n\n useEffect(() => {\n if (propTab) {\n setActiveTab(propTab)\n }\n }, [propTab])\n\n useEffect(() => {\n onTabChange?.(activeTab)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeTab])\n\n return (\n <TabsWrapper {...props}>\n <TabContext.Provider value={{ activeTab, setActiveTab, id, direction }}>\n {children}\n </TabContext.Provider>\n </TabsWrapper>\n )\n}\n\nTabs.Items = TabsItems\nTabs.Item = TabsItem\nTabs.Panels = PanelsItems\nTabs.Panel = PanelsItem\n\nexport default Tabs\n","import React, { HTMLAttributes, ReactNode } from 'react'\nimport styled from 'styled-components'\nimport font from 'styles/font'\nimport { getToken as token } from 'theming'\n\nexport type SectionProps = HTMLAttributes<HTMLElement>\n\nconst StyledSection = styled.section`\n ${font({\n height: 'font-height-2',\n })}\n`\n\nconst StyledSectionTitle = styled.section`\n ${font({\n weight: 'font-weight-bold',\n height: 'font-height-2',\n })}\n\n font-size: ${token('font-size-3')};\n color: ${token('color-neutral-darker')};\n\n border-bottom: 2px solid ${token('color-neutral-light')};\n\n padding: ${token('space-s')} ${token('space-xs')};\n margin-bottom: ${token('space-l')};\n`\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n pointer-events: none;\n`\n\nconst Leading = styled(StyledSpan)`\n margin: 0 ${token('button-spacing-x')} 0 0;\n`\n\nexport interface SectionTitleProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode\n leading?: ReactNode\n}\n\nfunction SectionTitle({ children, leading, ...others }: SectionTitleProps) {\n return (\n <StyledSectionTitle data-testid=\"section-title\" {...others}>\n {leading && <Leading>{leading}</Leading>}\n {children}\n </StyledSectionTitle>\n )\n}\n\nfunction Section({ children, ...others }: SectionProps): JSX.Element {\n return (\n <StyledSection data-testid=\"section\" {...others}>\n {children}\n </StyledSection>\n )\n}\n\nSection.Title = SectionTitle\n\nexport default Section\n","/**\n * Add basic CSS style for hide elements\n * @param {boolean} accessible - should keep element visible for screen readers\n * @returns {string}\n */\nfunction hiddenStyle(accessible = false): string {\n if (accessible) {\n return `\n border: 0 !important;\n clip: rect(0 0 0 0) !important;\n clip-path: inset(50%) !important;\n height: 1px !important;\n margin: -1px !important;\n overflow: hidden !important;\n padding: 0 !important;\n position: absolute !important;\n white-space: nowrap !important;\n width: 1px !important;\n pointer-events: none;\n `\n }\n\n return `\n display: none !important;\n opacity: 0 !important;\n `\n}\n\nexport default hiddenStyle\n","import React, { createContext, ReactNode, useState } from 'react'\n\ntype AccordionContextType = [boolean, () => void]\nconst AccordionContext = createContext<AccordionContextType | undefined>(undefined)\n\nfunction AccordionProvider({\n expanded,\n children,\n onExpandedChange,\n initialExpanded = false,\n}: {\n children: ReactNode\n initialExpanded?: boolean\n expanded?: boolean\n onExpandedChange?: (expanded: boolean) => void\n}): JSX.Element {\n const [openState, setOpenState] = useState(initialExpanded)\n const open = expanded ?? openState\n\n function toggle() {\n onExpandedChange?.(!open)\n setOpenState(!open)\n }\n\n return <AccordionContext.Provider value={[open, toggle]}>{children}</AccordionContext.Provider>\n}\n\nfunction useAccordionContext(): AccordionContextType {\n const context = React.useContext(AccordionContext)\n if (!context) {\n throw new Error('useAccordionContext must be used within an AccordionProvider')\n }\n return context\n}\n\nexport { AccordionProvider, useAccordionContext }\n","import React, { Fragment } from 'react'\nimport type { PropsWithChildren, HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport styled from 'styled-components'\nimport { identity, isFunction } from '@loadsmart/utils-function'\n\nimport font from 'styles/font'\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\nimport conditional, { whenProps } from 'tools/conditional'\nimport hoverable from 'styles/hoverable'\nimport focusable from 'styles/focusable'\nimport transition from 'styles/transition'\nimport ellipsizable from 'styles/ellipsizable'\nimport hidden from 'styles/hidden'\n\nimport { AccordionProvider, useAccordionContext } from './Accordion.context'\n\nconst StyledWrapper = styled.article<{ open: boolean }>`\n background: ${token('color-neutral-white')};\n border: 1px solid\n ${conditional({\n 'color-neutral-light': whenProps({ open: false }),\n 'color-accent': whenProps({ open: true }),\n })};\n border-radius: ${token('border-radius-s')};\n\n ${hoverable`\n border-color: ${token('color-accent')};\n `}\n`\n\nconst StyledToggle = styled.button<{ open: boolean }>`\n ${font({\n height: 'font-height-2',\n })}\n\n ${transition()}\n\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n\n font-size: ${token('font-size-3')};\n font-weight: ${conditional({\n 'font-weight-regular': whenProps({ open: false }),\n 'font-weight-bold': whenProps({ open: true }),\n })};\n text-align: left;\n\n cursor: pointer;\n\n color: ${token('color-neutral-darker')};\n\n background-color: ${token('color-transparent')};\n border-radius: ${token('border-radius-s')};\n border: none;\n box-sizing: border-box;\n\n padding: ${token('space-s')} ${token('space-m')};\n\n width: 100%;\n\n ${hoverable`\n background: ${token('color-neutral-lighter')};\n `}\n\n ${focusable`\n box-shadow: ${token('shadow-glow-primary')};\n `}\n`\n\nconst StyledContent = styled.section<{ open: boolean }>`\n ${font({\n height: 'font-height-2',\n weight: 'font-weight-medium',\n })}\n\n padding-left: ${conditional({\n '0': whenProps({ open: false }),\n 'space-m': whenProps({ open: true }),\n })};\n padding-right: ${conditional({\n '0': whenProps({ open: false }),\n 'space-m': whenProps({ open: true }),\n })};\n padding-top: ${conditional({\n '0': whenProps({ open: false }),\n 'space-xl': whenProps({ open: true }),\n })};\n padding-bottom: ${conditional({\n '0': whenProps({ open: false }),\n 'space-s': whenProps({ open: true }),\n })};\n\n overflow-x: hidden;\n overflow-y: auto;\n`\n\nconst HiddenInput = styled.input`\n ${hidden()}\n\n &:not(:checked) + ${StyledContent} {\n height: 0;\n }\n\n &:checked + ${StyledContent} {\n height: 100%;\n }\n`\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n pointer-events: none;\n`\n\nconst Leading = styled(StyledSpan)`\n margin: 0 ${token('space-xs')} 0 0;\n`\n\nconst Trailing = styled(StyledSpan)`\n margin: 0 0 0 auto;\n`\n\nconst Children = styled.span`\n pointer-events: none;\n\n ${ellipsizable()}\n`\n\nfunction ToggleIndicator({ open }: { open: boolean }) {\n return <Icon name={open ? 'minus' : 'plus'} size={16} />\n}\n\nfunction AccordionWrapper({\n children,\n ...others\n}: PropsWithChildren<HTMLAttributes<HTMLElement>>): JSX.Element {\n const [open] = useAccordionContext()\n return (\n <StyledWrapper data-testid=\"accordion\" open={open} {...others}>\n {children}\n </StyledWrapper>\n )\n}\n\nexport type AccordionToggleProps = {\n leading?: ReactNode | ((expanded: boolean) => ReactNode)\n trailing?: ReactNode | ((expanded: boolean) => ReactNode)\n}\n\nfunction AccordionToggle({\n leading,\n trailing: propsTrailing,\n children,\n}: PropsWithChildren<AccordionToggleProps>): JSX.Element {\n const [open, toggle] = useAccordionContext()\n\n const trailing = propsTrailing === undefined ? <ToggleIndicator open={open} /> : propsTrailing\n\n return (\n <StyledToggle open={open} onClick={toggle} type=\"button\" data-testid=\"accordion-toggle\">\n {leading && (\n <Leading data-testid=\"accordion-toggle-leading\">\n {isFunction(leading) ? leading(open) : leading}\n </Leading>\n )}\n <Children>{children}</Children>\n {trailing && (\n <Trailing data-testid=\"accordion-toggle-trailing\">\n {isFunction(trailing) ? trailing(open) : trailing}\n </Trailing>\n )}\n </StyledToggle>\n )\n}\n\nexport type AccordionBodyProps = HTMLAttributes<HTMLElement>\n\nfunction AccordionBody({ children, ...props }: PropsWithChildren<AccordionBodyProps>): JSX.Element {\n const [open] = useAccordionContext()\n\n return (\n <Fragment>\n <HiddenInput type=\"checkbox\" checked={open} onChange={identity} />\n <StyledContent\n open={open}\n className={clsx({\n 'is-open': open,\n })}\n aria-hidden={!open ? 'true' : 'false'}\n data-testid=\"accordion-content\"\n {...props}\n >\n {children}\n </StyledContent>\n </Fragment>\n )\n}\n\nexport interface AccordionProps extends HTMLAttributes<HTMLElement> {\n expanded?: boolean\n initialExpanded?: boolean\n onExpandedChange?: (expanded: boolean) => void\n}\n\nfunction Accordion({\n children,\n expanded,\n initialExpanded,\n onExpandedChange,\n ...others\n}: AccordionProps): JSX.Element {\n return (\n <AccordionProvider\n expanded={expanded}\n initialExpanded={initialExpanded}\n onExpandedChange={onExpandedChange}\n >\n <AccordionWrapper {...others}>{children}</AccordionWrapper>\n </AccordionProvider>\n )\n}\n\nAccordion.Toggle = AccordionToggle\nAccordion.Body = AccordionBody\n\nexport default Accordion\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport React, { ReactElement, useState } from 'react'\nimport styled from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\nimport { getToken as token } from 'theming'\nimport { Icon as DefaultIcon } from 'components/Icon'\n\nimport { BaseButton } from 'components/Button'\nimport DefaultCloseButton from 'common/CloseButton'\n\nexport interface BannerProps {\n className?: string\n variant?: 'success' | 'danger' | 'warning' | 'neutral'\n icon?: JSX.Element\n scale?: 'default' | 'large'\n title?: string | ReactElement\n description?: string | ReactElement\n onClose?: () => void\n dismissible?: boolean\n}\n\nexport interface BannerActionProps extends BannerProps {\n action?: string\n secondaryAction?: string\n onActionButtonClick?: () => void\n onSecondaryActionButtonClick?: () => void\n}\n\ninterface VariantProps {\n variant?: 'success' | 'danger' | 'warning' | 'neutral'\n}\n\nconst Description = styled.div`\n color: ${token('banner-description-color')};\n font-size: ${token('banner-font-size')};\n line-height: ${token('banner-font-height')};\n text-align: left;\n`\n\nconst Title = styled.div<VariantProps>`\n font-weight: ${token('banner-title-font-weight')};\n font-size: ${token('banner-font-size')};\n line-height: ${token('banner-font-height')};\n text-align: left;\n`\n\nconst TextSection = styled.div<{ $dismissible?: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-items: center;\n padding-right: ${conditional({\n 'space-xl': whenProps({ $dismissible: true }),\n })};\n`\n\nconst StyledBanner = styled.div<Omit<BannerProps, 'dismissible'>>`\n position: relative;\n\n display: flex;\n flex-wrap: ${conditional({\n wrap: whenProps({ scale: 'default' }),\n 'no-wrap': whenProps({ scale: 'large' }),\n })};\n align-items: center;\n min-width: ${token('banner-min-width')};\n\n min-height: ${conditional({\n 'banner-default-height': whenProps({ scale: 'default' }),\n })};\n padding: ${conditional({\n 'banner-default-padding-y': whenProps({ scale: 'default' }),\n 'banner-large-padding': whenProps({ scale: 'large' }),\n })}\n ${conditional({\n 'banner-default-padding-x': whenProps({ scale: 'default' }),\n 'banner-large-padding': whenProps({ scale: 'large' }),\n })};\n\n color: ${conditional({\n 'banner-title-color-success': whenProps({ variant: 'success' }),\n 'banner-title-color-danger': whenProps({ variant: 'danger' }),\n 'banner-title-color-warning': whenProps({ variant: 'warning' }),\n 'banner-title-color-neutral': whenProps({ variant: 'neutral' }),\n })};\n\n background: ${conditional({\n 'banner-background-success': whenProps({ variant: 'success' }),\n 'banner-background-warning': whenProps({ variant: 'warning' }),\n 'banner-background-danger': whenProps({ variant: 'danger' }),\n 'banner-background-neutral': whenProps({ variant: 'neutral' }),\n })};\n\n border-color: ${conditional({\n 'banner-border-color-success': whenProps({ variant: 'success' }),\n 'banner-border-color-warning': whenProps({ variant: 'warning' }),\n 'banner-border-color-danger': whenProps({ variant: 'danger' }),\n 'banner-border-color-neutral': whenProps({ variant: 'neutral' }),\n })};\n border-style: solid;\n border-width: ${token('banner-border-width')};\n\n border-radius: ${token('banner-border-radius')};\n`\n\nexport const CloseButton = styled(DefaultCloseButton)`\n position: absolute;\n top: ${conditional({\n 'banner-default-close-top': whenProps({ scale: 'default' }),\n 'banner-large-close-top': whenProps({ scale: 'large' }),\n })};\n right: ${conditional({\n 'banner-default-close-right': whenProps({ scale: 'default' }),\n 'banner-large-close-right': whenProps({ scale: 'large' }),\n })};\n\n width: ${token('banner-icon-width')};\n height: ${token('banner-icon-height')};\n`\n\nconst IconWrapper = styled.span<{ scale: string }>`\n display: inline-flex;\n align-items: center;\n\n align-self: ${conditional({\n 'banner-default-icon-alignment': whenProps({ scale: 'default' }),\n 'banner-large-icon-alignment': whenProps({ scale: 'large' }),\n })};\n justify-content: center;\n\n margin-right: ${token('banner-icon-margin-right')};\n`\n\nexport const Icon = styled(DefaultIcon)`\n width: ${token('banner-icon-width')};\n height: ${token('banner-icon-height')};\n`\n\nconst Button = styled(BaseButton)`\n min-width: 88px;\n margin-top: ${token('space-s')};\n margin-left: ${conditional({\n '0': whenProps({ variant: 'primary' }),\n 'banner-secondary-button-margin-left': whenProps({ variant: 'secondary' }),\n })};\n\n color: ${conditional({\n 'banner-button-text-color': whenProps({ variant: 'primary' }),\n 'banner-button-background-danger': whenProps({ variant: 'secondary', className: 'danger' }),\n 'banner-button-background-warning': whenProps({ variant: 'secondary', className: 'warning' }),\n 'banner-button-background-neutral': whenProps({ variant: 'secondary', className: 'neutral' }),\n 'banner-button-background-success': whenProps({ variant: 'secondary', className: 'success' }),\n })};\n\n background-color: ${conditional({\n 'banner-button-background-success': whenProps({ variant: 'primary', className: 'success' }),\n 'banner-button-background-danger': whenProps({ variant: 'primary', className: 'danger' }),\n 'banner-button-background-warning': whenProps({ variant: 'primary', className: 'warning' }),\n 'banner-button-background-neutral': whenProps({ variant: 'primary', className: 'neutral' }),\n 'banner-button-background-secondary': whenProps({ variant: 'secondary' }),\n })};\n\n border-color: ${conditional({\n 'banner-button-background-success': whenProps({ className: 'success' }),\n 'banner-button-background-danger': whenProps({ className: 'danger' }),\n 'banner-button-background-warning': whenProps({ className: 'warning' }),\n 'banner-button-background-neutral': whenProps({ className: 'neutral' }),\n })};\n`\nconst InlineButton = styled(Button)`\n flex-shrink: 0;\n align-self: center;\n`\n\nconst ButtonWrapper = styled.div`\n display: flex;\n margin-top: -${token('space-s')};\n margin-right: 0;\n margin-left: auto;\n`\n\nconst LargeButtonWrapper = styled.div`\n display: flex;\n margin-left: 0;\n`\n\nconst TextWrapper = styled.div`\n display: flex;\n align-items: center;\n margin-right: ${token('space-s')};\n`\n\nconst getAlertIcon = (variant: string, scale: string, icon?: JSX.Element) => {\n if (icon) {\n return <IconWrapper scale={scale}>{icon}</IconWrapper>\n }\n\n let iconName = ''\n switch (variant) {\n case 'success':\n iconName = 'check'\n break\n case 'danger':\n case 'warning':\n iconName = 'warning'\n break\n default:\n iconName = 'information'\n }\n\n return (\n <IconWrapper scale={scale}>\n <Icon name={iconName} size={24} />\n </IconWrapper>\n )\n}\n\nfunction Banner({\n scale = 'default',\n variant = 'neutral',\n icon,\n title,\n description,\n onClose,\n dismissible = true,\n ...others\n}: BannerProps) {\n const [visible, setVisible] = useState<boolean>(true)\n\n if (!visible) return null\n\n return (\n <StyledBanner {...others} scale={scale} variant={variant}>\n <TextWrapper>\n {getAlertIcon(variant, scale, icon)}\n <TextSection $dismissible={dismissible}>\n {scale === 'default' ? (\n React.isValidElement(title) ? (\n title\n ) : (\n <Title variant={variant}>{title}</Title>\n )\n ) : (\n <>\n {React.isValidElement(title) ? title : <Title>{title}</Title>}\n {description &&\n (React.isValidElement(description) ? (\n description\n ) : (\n <Description>{description}</Description>\n ))}\n </>\n )}\n </TextSection>\n </TextWrapper>\n {dismissible && (\n <CloseButton\n scale={scale}\n onClick={() => {\n onClose?.()\n setVisible(false)\n }}\n type=\"button\"\n data-testid=\"close-button\"\n >\n <Icon name=\"close\" size={20} />\n </CloseButton>\n )}\n </StyledBanner>\n )\n}\n\nexport function BannerLarge({\n scale = 'large',\n variant = 'neutral',\n icon,\n title,\n description,\n onClose,\n dismissible = true,\n ...others\n}: BannerProps) {\n const [visible, setVisible] = useState<boolean>(true)\n\n if (!visible) return null\n\n return (\n <StyledBanner {...others} scale={scale} variant={variant}>\n {getAlertIcon(variant, scale, icon)}\n <TextSection $dismissible={dismissible}>\n {React.isValidElement(title) ? title : <Title>{title}</Title>}\n {React.isValidElement(description) ? description : <Description>{description}</Description>}\n </TextSection>\n {dismissible && (\n <CloseButton\n scale={scale}\n onClick={() => {\n onClose?.()\n setVisible(false)\n }}\n type=\"button\"\n >\n <Icon name=\"close\" size={16} />\n </CloseButton>\n )}\n </StyledBanner>\n )\n}\n\nexport function BannerAction({\n scale = 'default',\n variant = 'neutral',\n icon,\n title,\n action,\n secondaryAction,\n onActionButtonClick,\n onSecondaryActionButtonClick,\n ...others\n}: BannerActionProps): JSX.Element {\n return (\n <StyledBanner {...others} scale={scale} variant={variant}>\n <TextWrapper>\n {getAlertIcon(variant, scale, icon)}\n <TextSection>\n {React.isValidElement(title) ? title : <Title variant={variant}>{title}</Title>}\n </TextSection>\n </TextWrapper>\n <ButtonWrapper>\n <InlineButton\n scale=\"small\"\n variant=\"primary\"\n className={variant}\n type=\"button\"\n onClick={onActionButtonClick}\n >\n {action}\n </InlineButton>\n {secondaryAction && (\n <InlineButton\n scale=\"small\"\n className={variant}\n variant=\"secondary\"\n type=\"button\"\n onClick={onSecondaryActionButtonClick}\n >\n {secondaryAction}\n </InlineButton>\n )}\n </ButtonWrapper>\n </StyledBanner>\n )\n}\n\nexport function BannerActionLarge({\n scale = 'large',\n variant = 'neutral',\n icon,\n title,\n description,\n action,\n secondaryAction,\n onActionButtonClick,\n onSecondaryActionButtonClick,\n onClose,\n dismissible = false,\n ...others\n}: BannerActionProps) {\n const [visible, setVisible] = useState<boolean>(true)\n\n if (!visible) return null\n\n return (\n <StyledBanner {...others} scale={scale} variant={variant}>\n {getAlertIcon(variant, scale, icon)}\n <TextSection $dismissible={dismissible}>\n {React.isValidElement(title) ? title : <Title>{title}</Title>}\n {React.isValidElement(description) ? description : <Description>{description}</Description>}\n <LargeButtonWrapper>\n <Button\n scale=\"small\"\n variant=\"primary\"\n className={variant}\n type=\"button\"\n onClick={onActionButtonClick}\n >\n {action}\n </Button>\n {secondaryAction && (\n <Button\n scale=\"small\"\n className={variant}\n variant=\"secondary\"\n type=\"button\"\n onClick={onSecondaryActionButtonClick}\n >\n {secondaryAction}\n </Button>\n )}\n </LargeButtonWrapper>\n </TextSection>\n {dismissible && (\n <CloseButton\n scale={scale}\n onClick={() => {\n onClose?.()\n setVisible(false)\n }}\n >\n <Icon name=\"close\" size={16} />\n </CloseButton>\n )}\n </StyledBanner>\n )\n}\n\nexport default Banner\n","import type { PropsWithChildren } from 'react'\nimport styled from 'styled-components'\n\nimport typography, { TypographyOptions, TypographyVariants } from 'styles/typography'\n\nexport type TextProps = PropsWithChildren<{\n variant?: TypographyVariants\n italic?: TypographyOptions['italic']\n color?: TypographyOptions['color']\n}>\n\nexport default styled.span<TextProps>`\n ${({ variant, italic, color }) => typography(variant, { italic, color })}\n`\n","import React, { PropsWithChildren } from 'react'\nimport ReactDOM from 'react-dom'\nimport styled, { css } from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\nimport { getToken as token } from 'theming'\nimport { Text } from 'components/Text'\nimport CloseButton from 'common/CloseButton'\nimport rem from 'utils/toolset/rem'\n\ninterface WithScaleProps {\n scale?: 'small' | 'default' | 'large'\n}\n\nexport interface ModalProps extends WithScaleProps {\n className?: string\n id?: string\n open: boolean\n fullscreen?: boolean\n onOverlayClick?: () => void\n}\n\ninterface ModalWrapperProps {\n className?: string\n id?: string\n open: boolean\n fullscreen: boolean\n}\n\ninterface ContentProps extends WithScaleProps {\n fullscreen: boolean\n}\n\nconst ModalWrapper = styled.div<ModalWrapperProps>`\n position: fixed;\n top: 0;\n left: 0;\n\n z-index: ${token('z-index-overlay')};\n\n display: ${conditional({\n flex: whenProps({ open: true }),\n none: whenProps({ open: false }),\n })};\n align-items: center;\n justify-content: center;\n width: 100%;\n\n height: 100%;\n\n background: ${token('modal-overlay-background')};\n`\n\nconst HeaderWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: content-box;\n height: ${token('space-xl')};\n margin-bottom: ${token('space-l')};\n padding-bottom: ${token('space-s')};\n\n border-bottom: 1px solid ${token('color-neutral-light')};\n`\nconst Close = styled(CloseButton).attrs({\n size: 16,\n})`\n position: absolute;\n top: ${rem('36px')};\n right: ${rem('36px')};\n`\n\nconst Content = styled.div<ContentProps>`\n background: white;\n border-radius: ${token('border-radius-s')};\n box-shadow: ${token('shadow-modal')};\n\n padding: ${token('space-xl')};\n\n margin: 0 auto;\n\n position: relative;\n\n outline: none;\n\n z-index: ${token('z-index-modal')};\n\n ${({ fullscreen }) =>\n fullscreen &&\n css`\n position: absolute;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 100vh;\n `}\n\n ${({ fullscreen }) =>\n !fullscreen &&\n css`\n position: relative;\n left: auto;\n\n width: 80%;\n max-width: ${conditional({\n 'modal-small-max-width': whenProps({ scale: 'small' }),\n 'modal-max-width': whenProps({ scale: 'default' }),\n 'modal-large-max-width': whenProps({ scale: 'large' }),\n })};\n height: auto;\n `}\n`\n\nconst Header = ({ title, children }: PropsWithChildren<{ title: string }>) => {\n return (\n <HeaderWrapper>\n {title && (\n <Text variant=\"heading-md-bold\" color=\"color-neutral-darkest\">\n {title}\n </Text>\n )}\n {children}\n </HeaderWrapper>\n )\n}\n\nfunction Modal({\n scale = 'default',\n children,\n open,\n fullscreen = false,\n onOverlayClick = () => null,\n ...others\n}: PropsWithChildren<ModalProps>): JSX.Element {\n return ReactDOM.createPortal(\n <ModalWrapper\n open={open}\n fullscreen={fullscreen}\n onClick={onOverlayClick}\n data-testid=\"modal-overlay\"\n {...others}\n >\n <Content\n role=\"dialog\"\n aria-modal=\"true\"\n fullscreen={fullscreen}\n scale={scale}\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n {children}\n </Content>\n </ModalWrapper>,\n document.body\n )\n}\n\nModal.Header = Header\nModal.Close = Close\n\nexport default Modal\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\n\nimport { Modal } from '../Modal'\nimport { Button } from '../Button'\nimport type { ButtonProps } from '../Button'\nimport conditional, { whenProps } from 'tools/conditional'\nimport rem from 'utils/toolset/rem'\n\ninterface WithScaleProps {\n scale?: 'small' | 'default' | 'large'\n}\n\nexport interface DialogProps extends WithScaleProps {\n className?: string\n id?: string\n open: boolean\n children: ReactNode\n onOverlayClick?: () => void\n}\n\nconst Header = styled.h1`\n padding-bottom: ${token('space-s')};\n\n color: ${token('dialog-header-color')};\n font-weight: ${token('font-weight-bold')};\n font-size: ${token('font-size-2')};\n line-height: ${token('font-height-2')};\n text-align: center;\n\n border-bottom: 1px solid ${token('dialog-header-border-color')};\n`\nconst Body = styled.div`\n margin-top: ${token('space-l')};\n margin-bottom: ${token('space-l')};\n\n color: ${token('dialog-body-font-color')};\n font-size: ${token('font-size-4')};\n line-height: ${token('font-height-3')};\n text-align: center;\n`\n\nconst ActionWrapper = styled.div`\n button {\n width: 100%;\n margin-bottom: ${token('space-s')};\n }\n`\n\nconst Close = styled(Modal.Close)`\n top: ${token('space-xl')};\n right: ${rem('36px')};\n`\n\nconst StyledDialogActions = styled.div<{ $scale: string; $direction: string }>`\n display: flex;\n flex-flow: ${conditional({\n 'row-reverse': whenProps({ $direction: 'horizontal' }),\n column: whenProps({ $direction: 'vertical' }),\n })};\n justify-content: ${conditional({\n center: whenProps({ $scale: 'small' }),\n end: whenProps({ $scale: ['default', 'large'] }),\n })};\n\n ${ActionWrapper}:last-child {\n margin-right: ${conditional({\n 'space-m': whenProps({ $direction: 'horizontal' }),\n initial: whenProps({ $direction: 'vertical' }),\n })}};\n }\n`\n\nfunction DialogActions({\n scale = 'default',\n direction = 'vertical',\n children,\n}: {\n scale?: 'small' | 'default' | 'large'\n direction?: 'vertical' | 'horizontal'\n children: ReactNode\n}) {\n return (\n <StyledDialogActions $scale={scale} $direction={direction}>\n {children}\n </StyledDialogActions>\n )\n}\n\nexport interface DialogActionConfirmProps extends Omit<ButtonProps, 'onClick' | 'variant'> {\n onConfirm: () => void\n}\n\nfunction DialogActionConfirm({\n onConfirm = () => void 0,\n children = 'CONFIRM',\n ...others\n}: DialogActionConfirmProps) {\n return (\n <ActionWrapper>\n <Button {...others} onClick={onConfirm} variant=\"primary\">\n {children}\n </Button>\n </ActionWrapper>\n )\n}\n\nexport interface DialogActionCancelProps extends Omit<ButtonProps, 'onClick' | 'variant'> {\n onCancel: () => void\n}\n\nfunction DialogActionCancel({\n onCancel = () => void 0,\n children = 'CANCEL',\n ...others\n}: DialogActionCancelProps) {\n return (\n <ActionWrapper>\n <Button {...others} onClick={onCancel} variant=\"secondary\">\n {children}\n </Button>\n </ActionWrapper>\n )\n}\n\nfunction Dialog({ scale = 'default', open, ...others }: DialogProps): JSX.Element {\n return <Modal open={open} scale={scale} {...others} />\n}\n\nDialog.Header = Header\nDialog.Body = Body\nDialog.ActionConfirm = DialogActionConfirm\nDialog.ActionCancel = DialogActionCancel\nDialog.Actions = DialogActions\nDialog.Close = Close\n\nexport default Dialog\n","import { useCallback, useEffect, useState } from 'react'\n\nexport interface useDialogProps {\n open: boolean\n onOpen?: () => void\n onClose?: () => void\n}\n\nfunction useDialog({ open: openProp, onOpen, onClose }: useDialogProps): {\n open: boolean\n show: () => void\n hide: () => void\n toggle: () => void\n} {\n const [open, setOpen] = useState(openProp)\n\n const show = useCallback(\n function show() {\n setOpen(true)\n onOpen?.()\n },\n [onOpen]\n )\n\n const hide = useCallback(\n function hide() {\n setOpen(false)\n onClose?.()\n },\n [onClose]\n )\n\n const toggle = useCallback(\n function toggle() {\n if (open) {\n hide()\n } else {\n show()\n }\n },\n [hide, open, show]\n )\n\n useEffect(\n function updateState() {\n setOpen(openProp)\n },\n [openProp]\n )\n\n return {\n open,\n show,\n hide,\n toggle,\n }\n}\n\nexport default useDialog\n","function getAlignment(placement) {\n return placement.split('-')[1];\n}\n\nfunction getLengthFromAxis(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\n\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\n\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y';\n}\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n const commonAlign = reference[length] / 2 - floating[length] / 2;\n const side = getSide(placement);\n const isVertical = mainAxis === 'x';\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain positioning strategy.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n continue;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\n\nfunction getSideObjectFromPadding(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\n\nfunction rectToClientRect(rect) {\n return {\n ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = options;\n const paddingObject = getSideObjectFromPadding(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n ...rects.floating,\n x,\n y\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\nconst min = Math.min;\nconst max = Math.max;\n\nfunction within(min$1, value, max$1) {\n return max(min$1, min(value, max$1));\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = options || {};\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements\n } = state;\n if (element == null) {\n return {};\n }\n const paddingObject = getSideObjectFromPadding(padding);\n const coords = {\n x,\n y\n };\n const axis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min = paddingObject[minProp];\n const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = within(min, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. This stops `shift()` from taking action, but can\n // be worked around by calling it again after the `arrow()` if desired.\n const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min ? paddingObject[minProp] : paddingObject[maxProp]) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min ? min - center : max - center : 0;\n return {\n [axis]: coords[axis] - alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset\n }\n };\n }\n});\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst allPlacements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-start\", side + \"-end\"), []);\n\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\n\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return {\n main: mainAlignmentSide,\n cross: getOppositePlacement(mainAlignmentSide)\n };\n}\n\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = allPlacements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = options;\n const placements = alignment !== undefined || allowedPlacements === allPlacements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const {\n main,\n cross\n } = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[main], overflow[cross]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\n\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = options;\n const side = getSide(placement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const {\n main,\n cross\n } = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[main], overflow[cross]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$map$so;\n const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = options;\n const {\n rects\n } = state;\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = options;\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getSideObjectFromPadding(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getMainAxisFromPlacement(placement) === 'x') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nasync function convertValueToCoords(state, value) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getMainAxisFromPlacement(placement) === 'x';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = typeof value === 'function' ? value(state) : value;\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null,\n ...rawValue\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (value) {\n if (value === void 0) {\n value = 0;\n }\n return {\n name: 'offset',\n options: value,\n async fn(state) {\n const {\n x,\n y\n } = state;\n const diffCoords = await convertValueToCoords(state, value);\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: diffCoords\n };\n }\n };\n};\n\nfunction getCrossAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = options;\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const mainAxis = getMainAxisFromPlacement(getSide(placement));\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = within(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = within(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = options;\n const coords = {\n x,\n y\n };\n const mainAxis = getMainAxisFromPlacement(placement);\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = typeof offset === 'function' ? offset(state) : offset;\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = options;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const axis = getMainAxisFromPlacement(placement);\n const isXAxis = axis === 'x';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const overflowAvailableHeight = height - overflow[heightSide];\n const overflowAvailableWidth = width - overflow[widthSide];\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if (isXAxis) {\n const maximumClippingWidth = width - overflow.left - overflow.right;\n availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n } else {\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isXAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, rectToClientRect, shift, size };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\n\nfunction getWindow(node) {\n var _node$ownerDocument;\n return ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\n\nfunction getComputedStyle$1(element) {\n return getWindow(element).getComputedStyle(element);\n}\n\nfunction isNode(value) {\n return value instanceof getWindow(value).Node;\n}\nfunction getNodeName(node) {\n return isNode(node) ? (node.nodeName || '').toLowerCase() : '';\n}\n\nlet uaString;\nfunction getUAString() {\n if (uaString) {\n return uaString;\n }\n const uaData = navigator.userAgentData;\n if (uaData && Array.isArray(uaData.brands)) {\n uaString = uaData.brands.map(item => item.brand + \"/\" + item.version).join(' ');\n return uaString;\n }\n return navigator.userAgent;\n}\n\nfunction isHTMLElement(value) {\n return value instanceof getWindow(value).HTMLElement;\n}\nfunction isElement(value) {\n return value instanceof getWindow(value).Element;\n}\nfunction isShadowRoot(node) {\n // Browsers without `ShadowRoot` support.\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n const OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle$1(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n // TODO: Try to use feature detection here instead.\n const isFirefox = /firefox/i.test(getUAString());\n const css = getComputedStyle$1(element);\n const backdropFilter = css.backdropFilter || css.WebkitBackdropFilter;\n\n // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n return css.transform !== 'none' || css.perspective !== 'none' || (backdropFilter ? backdropFilter !== 'none' : false) || isFirefox && css.willChange === 'filter' || isFirefox && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective'].some(value => css.willChange.includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => {\n // Add type check for old browsers.\n const contain = css.contain;\n return contain != null ? contain.includes(value) : false;\n });\n}\n\n/**\n * Determines whether or not `.getBoundingClientRect()` is affected by visual\n * viewport offsets. In Safari, the `x`/`y` offsets are values relative to the\n * visual viewport, while in other engines, they are values relative to the\n * layout viewport.\n */\nfunction isClientRectVisualViewportBased() {\n // TODO: Try to use feature detection here instead. Feature detection for\n // this can fail in various ways, making the userAgent check the most\n // reliable:\n // • Always-visible scrollbar or not\n // • Width of <html>\n\n // Is Safari.\n return /^((?!chrome|android).)*safari/i.test(getUAString());\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\n\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n fallback: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nconst FALLBACK_SCALE = {\n x: 1,\n y: 1\n};\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return FALLBACK_SCALE;\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n fallback\n } = getCssDimensions(domElement);\n let x = (fallback ? round(rect.width) : rect.width) / width;\n let y = (fallback ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n var _win$visualViewport, _win$visualViewport2;\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = FALLBACK_SCALE;\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const win = domElement ? getWindow(domElement) : window;\n const addVisualOffsets = isClientRectVisualViewportBased() && isFixedStrategy;\n let x = (clientRect.left + (addVisualOffsets ? ((_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) || 0 : 0)) / scale.x;\n let y = (clientRect.top + (addVisualOffsets ? ((_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) || 0 : 0)) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentIFrame = win.frameElement;\n while (currentIFrame && offsetParent && offsetWin !== win) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle(currentIFrame);\n iframeRect.x += (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n iframeRect.y += (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += iframeRect.x;\n y += iframeRect.y;\n currentIFrame = getWindow(currentIFrame).frameElement;\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\nfunction getDocumentElement(node) {\n return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;\n}\n\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n if (offsetParent === documentElement) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = {\n x: 1,\n y: 1\n };\n const offsets = {\n x: 0,\n y: 0\n };\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n };\n}\n\nfunction getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\n\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n // `getParentNode` will never return a `Document` due to the fallback\n // check, so it's either the <html> or <body> element.\n return parentNode.ownerDocument.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\n\nfunction getOverflowAncestors(node, list) {\n var _node$ownerDocument;\n if (list === void 0) {\n list = [];\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor));\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isClientRectVisualViewportBased();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : {\n x: 1,\n y: 1\n };\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const mutableRect = {\n ...clippingAncestor\n };\n if (isClientRectVisualViewportBased()) {\n var _win$visualViewport, _win$visualViewport2;\n const win = getWindow(element);\n mutableRect.x -= ((_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) || 0;\n mutableRect.y -= ((_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) || 0;\n }\n rect = mutableRect;\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n return getCssDimensions(element);\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n return element.offsetParent;\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n currentNode = getParentNode(currentNode);\n }\n }\n return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const window = getWindow(element);\n if (!isHTMLElement(element)) {\n return window;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n return window;\n }\n return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const rect = getBoundingClientRect(element, true, strategy === 'fixed', offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = {\n x: 0,\n y: 0\n };\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent, true);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\nconst platform = {\n getClippingRect,\n convertOffsetParentRelativeRectToViewportRelativeRect,\n isElement,\n getDimensions,\n getOffsetParent,\n getDocumentElement,\n getScale,\n async getElementRects(_ref) {\n let {\n reference,\n floating,\n strategy\n } = _ref;\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n return {\n reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n floating: {\n x: 0,\n y: 0,\n ...(await getDimensionsFn(floating))\n }\n };\n },\n getClientRects: element => Array.from(element.getClientRects()),\n isRTL: element => getComputedStyle$1(element).direction === 'rtl'\n};\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = true,\n animationFrame = false\n } = options;\n const ancestors = ancestorScroll || ancestorResize ? [...(isElement(reference) ? getOverflowAncestors(reference) : reference.contextElement ? getOverflowAncestors(reference.contextElement) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n // ignores Window, checks for [object VisualViewport]\n const isVisualViewport = !isElement(ancestor) && ancestor.toString().includes('V');\n if (ancestorScroll && (animationFrame ? isVisualViewport : true)) {\n ancestor.addEventListener('scroll', update, {\n passive: true\n });\n }\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n let observer = null;\n if (elementResize) {\n observer = new ResizeObserver(() => {\n update();\n });\n isElement(reference) && !animationFrame && observer.observe(reference);\n if (!isElement(reference) && reference.contextElement && !animationFrame) {\n observer.observe(reference.contextElement);\n }\n observer.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _observer;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n (_observer = observer) == null ? void 0 : _observer.disconnect();\n observer = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain CSS positioning\n * strategy.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { autoUpdate, computePosition, getOverflowAncestors, platform };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => {\n const {\n element,\n padding\n } = options;\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(args) {\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$1({\n element: element.current,\n padding\n }).fn(args);\n }\n return {};\n } else if (element) {\n return arrow$1({\n element,\n padding\n }).fn(args);\n }\n return {};\n }\n };\n};\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length, i, keys;\n if (a && b && typeof a == 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/react\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node != referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, [_setReference]);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, [_setFloating]);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n isPositioned: true\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n } else {\n update();\n }\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\nexport { arrow, useFloating };\n","import React, { CSSProperties, useMemo, useRef } from 'react'\nimport { useFloating, offset, flip, shift, arrow, autoUpdate } from '@floating-ui/react-dom'\nimport type { Placement } from '@floating-ui/react-dom'\n\nimport type {\n PopoverAlign,\n PopoverFloatingProps,\n PopoverPosition,\n PopoverProps,\n PopoverReferenceProps,\n UsePopoverReturn,\n} from './Popover.types'\n\nconst PopoverContext = React.createContext<UsePopoverReturn | undefined>(undefined)\n\nexport function usePopover(): UsePopoverReturn {\n const value = React.useContext(PopoverContext)\n\n if (!value) {\n throw new Error('usePopover must be used within a <Popover> Provider')\n }\n\n return value\n}\n\nfunction Popover(props: PopoverProps): JSX.Element {\n const arrowRef = useRef<HTMLElement | null>(null)\n\n const { position = 'bottom', align = 'start', strategy = 'fixed' } = props\n\n const desiredPlacement: Placement = `${position}${\n align === 'center' ? '' : `-${align}`\n }` as Placement\n\n const floating = useFloating({\n placement: desiredPlacement,\n strategy,\n middleware: [offset(10), flip(), shift(), arrow({ element: arrowRef, padding: 8 })],\n // TODO: FloatingUI docs states that `autoUpdate` is expensive.\n // This should be properly investidated since it's the way to\n // update fixed positions after scrolling.\n whileElementsMounted: autoUpdate,\n })\n\n const [resultPosition = position, resultAlign = align] = floating.placement.split('-') as [\n PopoverPosition,\n PopoverAlign\n ]\n\n const value = useMemo<UsePopoverReturn>(\n () => ({\n strategy,\n register: {\n setReference: floating.refs.setReference,\n setFloating: floating.refs.setFloating,\n setArrow: arrowRef,\n },\n result: {\n floatingStyles: floating.floatingStyles,\n arrow: { top: floating.middlewareData.arrow?.y, left: floating.middlewareData.arrow?.x },\n position: resultPosition,\n align: resultAlign,\n },\n }),\n [\n floating.refs.setFloating,\n floating.middlewareData.arrow?.x,\n floating.middlewareData.arrow?.y,\n floating.refs.setReference,\n floating.floatingStyles,\n resultAlign,\n resultPosition,\n strategy,\n ]\n )\n\n return <PopoverContext.Provider value={value}>{props.children}</PopoverContext.Provider>\n}\n\nfunction PopoverReference({ children, ...others }: PopoverReferenceProps): JSX.Element {\n const { register } = usePopover()\n\n return (\n <div ref={register.setReference} {...others}>\n {children}\n </div>\n )\n}\n\nfunction PopoverFloating({ children, style, ...others }: PopoverFloatingProps): JSX.Element {\n const { register, result } = usePopover()\n\n return (\n <div\n ref={register.setFloating}\n {...others}\n style={{\n ...result.floatingStyles,\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n\nPopover.Floating = PopoverFloating\nPopover.Reference = PopoverReference\n\nexport default Popover\n","import React, { HTMLAttributes, ReactNode, useCallback, useState } from 'react'\nimport type { PropsWithChildren } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport focusable from 'styles/focusable'\nimport conditional, { whenProps } from 'tools/conditional'\nimport { getToken as token } from 'theming'\nimport { Popover, usePopover } from 'components/Popover'\nimport typography from 'styles/typography'\n\nimport type { PopoverAlign, PopoverPosition } from 'components/Popover'\n\nexport enum TooltipPosition {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n}\n\nexport enum TooltipAlign {\n Start = 'start',\n Center = 'center',\n End = 'end',\n}\n\nexport interface TooltipProps extends HTMLAttributes<HTMLDivElement> {\n message: ReactNode\n scheme?: ColorScheme\n position?: TooltipPosition | PopoverPosition\n align?: TooltipAlign | PopoverAlign\n}\n\ntype ContainerProps = Pick<TooltipProps, 'scheme'>\n\nconst Container = styled.div<ContainerProps>`\n display: inline-block;\n\n position: relative;\n\n cursor: help;\n\n ${focusable`\n outline: ${conditional({\n '$tooltip-outline': whenProps({ scheme: 'light' }),\n '$tooltip-dark-outline': whenProps({ scheme: 'dark' }),\n })};\n `}\n`\n\nconst Bubble = styled(Popover.Floating)`\n ${typography('body')}\n\n white-space: initial;\n\n min-width: ${token('tooltip-min-width')};\n max-width: ${token('tooltip-max-width')};\n width: max-content;\n\n z-index: ${token('z-index-tooltip')};\n\n background: ${token('tooltip-background')};\n box-shadow: ${token('tooltip-shadow')};\n border-radius: ${token('tooltip-border-radius')};\n\n padding: ${token('tooltip-padding-y')} ${token('tooltip-padding-x')};\n\n color: ${token('tooltip-color')};\n font-size: ${token('tooltip-font-size')};\n line-height: ${token('tooltip-font-height')};\n`\n\ntype ArrowProps = Pick<TooltipProps, 'position'> & {\n top?: number\n left?: number\n}\n\nconst StyledArrow = styled.span<ArrowProps>`\n position: absolute;\n\n width: 0;\n height: 0;\n display: block;\n\n background: transparent;\n border-style: solid;\n\n z-index: ${token('z-index-tooltip')};\n\n ${({ top }) => top && `top: ${top}px;`}\n ${({ left }) => left && `left: ${left}px;`}\n\n ${({ position }) =>\n position === 'top' &&\n css`\n bottom: -8px;\n\n border-color: ${token('tooltip-background')} transparent transparent transparent;\n border-width: 12px 10px 0 10px;\n `}\n\n ${({ position }) =>\n position === 'bottom' &&\n css`\n top: -8px;\n\n border-color: transparent transparent ${token('tooltip-background')} transparent;\n border-width: 0 10px 12px 10px;\n `}\n\n ${({ position }) =>\n position === 'left' &&\n css`\n right: -8px;\n\n border-color: transparent transparent transparent ${token('tooltip-background')};\n border-width: 10px 0 10px 12px;\n `}\n\n ${({ position }) =>\n position === 'right' &&\n css`\n left: -8px;\n\n border-color: transparent ${token('tooltip-background')} transparent transparent;\n border-width: 10px 12px 10px 0;\n `}\n`\n\nfunction Arrow() {\n const { register, result } = usePopover()\n\n return (\n <StyledArrow\n ref={(element) => (register.setArrow.current = element)}\n position={result.position}\n top={result.arrow.top}\n left={result.arrow.left}\n />\n )\n}\n\nfunction Tooltip({\n children,\n message,\n scheme,\n position = TooltipPosition.Top,\n align = TooltipAlign.Center,\n ...rest\n}: PropsWithChildren<TooltipProps>): JSX.Element {\n const [visible, setVisible] = useState(false)\n\n const showTooltip = useCallback(() => {\n setVisible(true)\n }, [])\n\n const hideTooltip = useCallback(() => {\n setVisible(false)\n }, [])\n\n return (\n <Container\n {...rest}\n onFocus={showTooltip}\n onBlur={hideTooltip}\n onMouseEnter={showTooltip}\n onMouseLeave={hideTooltip}\n tabIndex={0}\n scheme={scheme}\n >\n <Popover position={position} align={align}>\n {visible && (\n <Bubble role=\"tooltip\">\n {message}\n <Arrow />\n </Bubble>\n )}\n\n <Popover.Reference>{children}</Popover.Reference>\n </Popover>\n </Container>\n )\n}\n\nexport default Tooltip\n","import React, { ReactNode } from 'react'\nimport type { LabelHTMLAttributes } from 'react'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\nimport { isNil } from '@loadsmart/utils-object'\n\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport ellipsizable from 'styles/ellipsizable'\nimport font from 'styles/font'\nimport { getToken as token } from 'theming'\n\nimport { Tooltip, TooltipProps } from '../Tooltip'\n\ntype AcceptedType = 'label' | 'div' | 'span'\n\ninterface WithAdditionalProps {\n as?: AcceptedType\n disabled?: boolean\n required?: boolean\n scheme?: ColorScheme\n tip?: ReactNode\n tipProps?: Omit<TooltipProps, 'message'>\n}\n\nexport interface LabelProps\n extends LabelHTMLAttributes<HTMLLabelElement | HTMLDivElement | HTMLSpanElement>,\n WithAdditionalProps {\n className?: string\n}\n\nconst StyledWrapper = styled.div`\n display: inline-flex;\n align-items: center;\n justify-content: flex-start;\n\n line-height: ${token('font-height-2')};\n ${disableable()}\n`\n\nconst StyledChildren = styled.span<WithAdditionalProps>`\n display: inline-block;\n\n ${font({\n height: 'label-font-height',\n weight: 'label-font-weight',\n })}\n\n font-size: ${token('label-font-size')};\n color: ${conditional({\n 'label-font-color': whenProps({ scheme: 'light' }),\n 'color-neutral-white': whenProps({ scheme: 'dark' }),\n })};\n ${ellipsizable()}\n`\n\nconst StyledRequired = styled.sup`\n top: 0;\n\n color: ${token('label-required-color')};\n font-size: ${token('label-font-size')};\n`\n\nconst StyledTooltipAnchor = styled.span<WithAdditionalProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin: 0 0 0 ${token('label-tooltip-margin-left')};\n\n color: ${conditional({\n 'label-tooltip-font-color': whenProps({ scheme: 'light' }),\n 'label-tooltip-dark-font-color': whenProps({ scheme: 'dark' }),\n })};\n font-weight: ${token('label-tooltip-font-weight')};\n font-size: ${token('label-tooltip-font-size')};\n\n background: ${conditional({\n 'label-tooltip-background-color': whenProps({ scheme: 'light' }),\n 'label-tooltip-dark-background-color': whenProps({ scheme: 'dark' }),\n })};\n border-radius: ${token('border-radius-circle')};\n`\n\nfunction Label({\n as = 'label',\n children,\n className,\n disabled = false,\n required,\n scheme = 'light',\n tip,\n tipProps = {},\n ...others\n}: LabelProps): JSX.Element {\n const tag = String(as || 'label') as AcceptedType\n\n return (\n <StyledWrapper\n data-testid=\"label\"\n as={tag}\n className={clsx(className, {\n 'is-disabled': disabled,\n })}\n {...others}\n >\n <StyledChildren scheme={scheme}>{children}</StyledChildren>\n {required && <StyledRequired>*</StyledRequired>}\n {!isNil(tip) && (\n <Tooltip scheme={scheme} message={tip || ''} {...tipProps}>\n <StyledTooltipAnchor scheme={scheme}>?</StyledTooltipAnchor>\n </Tooltip>\n )}\n </StyledWrapper>\n )\n}\n\nexport default Label\n","export const PAGINATION_ITEM_TYPE = {\n endEllipsis: 'end-ellipsis',\n next: 'next',\n page: 'page',\n previous: 'previous',\n startEllipsis: 'start-ellipsis',\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport hoverable from 'styles/hoverable'\nimport focusable from 'styles/focusable'\n\nimport { BaseButton, IconButton as IconButtonDefault } from 'components/Button'\nimport { Icon } from 'components/Icon'\nimport { Text } from 'components/Text'\n\nimport type { PaginationItemProps } from './Pagination.types'\nimport { PAGINATION_ITEM_TYPE } from './Pagination.constants'\n\nconst IconButton = styled(IconButtonDefault)`\n margin: ${token('space-xs')};\n`\n\nconst PageButton = styled(BaseButton)`\n background-color: transparent;\n border: none;\n\n ${focusable`\n box-shadow: ${token('button-primary-outline')};\n `}\n\n ${hoverable`\n * {\n text-decoration: underline;\n color: ${token('color-neutral-dark')};\n }\n `}\n\n ${Text} {\n color: ${conditional({\n 'color-accent': whenProps({ 'aria-current': true }),\n })};\n text-decoration: ${conditional({\n underline: whenProps({ 'aria-current': true }),\n })};\n }\n`\n\nconst ICONS_NAME: Record<string, string> = {\n previous: 'caret-left',\n next: 'caret-right',\n}\n\nfunction PaginationItem(props: PaginationItemProps): JSX.Element {\n const { itemType: type, page, ...others } = props\n\n const iconName = ICONS_NAME[type]\n\n if (iconName) {\n return (\n <IconButton {...others} id={iconName} aria-label={`Go to ${type} page`}>\n <Icon name={iconName} size={16} />\n </IconButton>\n )\n }\n\n return (\n <PageButton {...others} aria-label={`Go to page ${page?.toString() ?? ''}`}>\n <Text variant=\"body\">\n {[PAGINATION_ITEM_TYPE.endEllipsis, PAGINATION_ITEM_TYPE.startEllipsis].includes(type)\n ? '...'\n : page}\n </Text>\n </PageButton>\n )\n}\n\nexport default PaginationItem\n","import { PAGINATION_ITEM_TYPE } from './Pagination.constants'\nimport type { PaginationHelperArgs } from './Pagination.types'\n\nexport class PaginationHelper {\n boundaryCount: number\n count: number\n page: number\n siblingCount: number\n\n constructor({ boundaryCount, count, page, siblingCount }: PaginationHelperArgs) {\n this.boundaryCount = boundaryCount\n this.count = count\n this.page = page\n this.siblingCount = siblingCount\n }\n\n range(start: number, end: number): number[] {\n const length = end - start + 1\n return Array.from({ length }, (_, i) => start + i)\n }\n\n getStartPages(): number[] {\n return this.range(1, Math.min(this.boundaryCount, this.count))\n }\n\n getEndPages(): number[] {\n return this.range(\n Math.max(this.count - this.boundaryCount + 1, this.boundaryCount + 1),\n this.count\n )\n }\n\n getSibilingsStart(): number {\n return Math.max(\n Math.min(\n // Natural start\n this.page - this.siblingCount,\n // Lower boundary when page is high\n this.count - this.boundaryCount - this.siblingCount * 2 - 1\n ),\n // Greater than startPages\n this.boundaryCount + 2\n )\n }\n\n getSibilingsEnd(): number {\n const endPages = this.getEndPages()\n\n return Math.min(\n Math.max(\n // Natural end\n this.page + this.siblingCount,\n // Upper boundary when page is low\n this.boundaryCount + this.siblingCount * 2 + 2\n ),\n // Less than endPages\n endPages.length > 0 ? endPages[0] - 2 : this.count - 1\n )\n }\n\n getStartEllipsis(): number[] | string[] {\n const siblingsStart = this.getSibilingsStart()\n\n if (siblingsStart > this.boundaryCount + 2) {\n return [PAGINATION_ITEM_TYPE.startEllipsis]\n }\n\n if (this.boundaryCount + 1 < this.count - this.boundaryCount) {\n return [this.boundaryCount + 1]\n }\n\n return []\n }\n\n getEndEllipsis(): number[] | string[] {\n const siblingsEnd = this.getSibilingsEnd()\n\n if (siblingsEnd < this.count - this.boundaryCount - 1) {\n return [PAGINATION_ITEM_TYPE.endEllipsis]\n }\n\n if (this.count - this.boundaryCount > this.boundaryCount) {\n return [this.count - this.boundaryCount]\n }\n\n return []\n }\n}\n","import { PAGINATION_ITEM_TYPE } from './Pagination.constants'\nimport { PaginationHelper } from './Pagination.helper'\nimport type { usePaginationProps, usePaginationReturn } from './Pagination.types'\n\nfunction usePagination(props: usePaginationProps): usePaginationReturn[] {\n const {\n boundaryCount = 1,\n count,\n disabled = false,\n onChange: handleChange,\n page,\n siblingCount = 1,\n } = props\n\n const paginationHelper = new PaginationHelper({ boundaryCount, count, page, siblingCount })\n\n function handleClick({ page }: { page: number | null }) {\n if (page) {\n handleChange({ page })\n }\n }\n\n const startPages = paginationHelper.getStartPages()\n const endPages = paginationHelper.getEndPages()\n\n const siblingsStart = paginationHelper.getSibilingsStart()\n const siblingsEnd = paginationHelper.getSibilingsEnd()\n\n // Basic list of items to render\n // e.g. itemList = ['previous', 1, 'ellipsis', 4, 5, 6, 'ellipsis', 10, 'next']\n const itemList = [\n PAGINATION_ITEM_TYPE.previous,\n ...startPages,\n\n // Start ellipsis\n ...paginationHelper.getStartEllipsis(),\n\n // Sibling pages\n ...paginationHelper.range(siblingsStart, siblingsEnd),\n\n // End ellipsis\n ...paginationHelper.getEndEllipsis(),\n\n ...endPages,\n PAGINATION_ITEM_TYPE.next,\n ]\n\n function getButtonPage(item: string | number): number | null {\n if (typeof item === 'number') {\n return item\n } else {\n switch (item) {\n case PAGINATION_ITEM_TYPE.previous:\n return page - 1\n case PAGINATION_ITEM_TYPE.next:\n return page + 1\n case PAGINATION_ITEM_TYPE.startEllipsis:\n return siblingsStart - 1\n case PAGINATION_ITEM_TYPE.endEllipsis:\n return siblingsEnd + 1\n default:\n return null\n }\n }\n }\n\n function isDisabled(item: string | number): boolean {\n if (item === PAGINATION_ITEM_TYPE.previous) return page <= 1\n if (item === PAGINATION_ITEM_TYPE.next) return page >= count\n\n return false\n }\n\n return itemList.map((item) => {\n const isNumber = typeof item === 'number'\n\n return {\n onClick: () => handleClick({ page: getButtonPage(item) }),\n itemType: isNumber ? PAGINATION_ITEM_TYPE.page : item.toString(),\n page: getButtonPage(item),\n disabled: disabled || isDisabled(item),\n ...(isNumber && { 'aria-current': item === page }),\n }\n })\n}\n\nexport default usePagination\n","import React, { BaseHTMLAttributes } from 'react'\nimport styled, { css } from 'styled-components'\nimport { getToken as token } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport Status from 'utils/types/Status'\n\nconst Bar = styled.div<{ rounded: boolean }>`\n align-items: center;\n display: flex;\n flex-grow: 0;\n flex-shrink: 1;\n\n justify-content: center;\n overflow: hidden;\n width: 100%;\n\n position: relative;\n\n height: ${token('progressbar-height')};\n\n ${({ rounded }) =>\n rounded &&\n css`\n border-radius: ${token('progressbar-height')};\n `}\n`\n\nconst Line = styled.span`\n width: 100%;\n height: 1px;\n\n background: ${token('progressbar-line')};\n background: black;\n`\n\ntype ProgressProps = Pick<ProgressBarProps, 'value' | 'rounded' | 'status'>\nconst Progress = styled.span<ProgressProps>`\n position: absolute;\n top: 0;\n left: 0;\n\n width: ${({ value }) => value}%;\n height: ${token('progressbar-height')};\n\n background: ${conditional({\n 'progressbar-neutral-fill': whenProps({ status: Status.Neutral }),\n 'progressbar-success-fill': whenProps({ status: Status.Success }),\n 'progressbar-warning-fill': whenProps({ status: Status.Warn }),\n 'progressbar-danger-fill': whenProps({ status: Status.Danger }),\n })};\n border-radius: ${conditional({\n ['progressbar-height']: whenProps({ rounded: true }),\n })};\n\n transition: 600ms ease;\n`\n\nexport interface ProgressBarProps extends BaseHTMLAttributes<HTMLDivElement> {\n value?: number\n status?: string\n rounded?: boolean\n showLine?: boolean\n}\n\nexport function ProgressBar({\n value = 60,\n status = Status.Neutral,\n rounded = false,\n showLine = false,\n ...extra\n}: ProgressBarProps): JSX.Element {\n const clampedValue = Math.max(0, Math.min(value, 100))\n\n return (\n <Bar\n role=\"progressBar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n rounded={rounded}\n {...extra}\n >\n {showLine && <Line />}\n <Progress value={clampedValue} rounded={rounded} status={status} />\n </Bar>\n )\n}\n\nexport default ProgressBar\n","import React, { ChangeEvent, InputHTMLAttributes } from 'react'\nimport clsx from 'clsx'\nimport styled from 'styled-components'\n\nimport { Icon } from 'components/Icon'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport font from 'styles/font'\nimport hidden from 'styles/hidden'\nimport hoverable from 'styles/hoverable'\nimport { getToken as token } from 'theming'\n\nimport transition from 'styles/transition'\n\ninterface WithAdditionalProps {\n active?: boolean\n onToggle?: (event: ChangeEvent<HTMLInputElement>) => void\n scale?: 'default' | 'large'\n}\n\nexport interface SwitchProps extends InputHTMLAttributes<HTMLInputElement>, WithAdditionalProps {\n className?: string\n}\n\nconst SwitchWrapper = styled.label<WithAdditionalProps>`\n ${transition()}\n\n ${font({})};\n\n user-select: none;\n\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n position: relative;\n\n display: inline-flex;\n\n width: ${conditional({\n 'switch-width': whenProps({ scale: 'default' }),\n 'switch-large-width': whenProps({ scale: 'large' }),\n })};\n height: ${conditional({\n 'switch-height': whenProps({ scale: 'default' }),\n 'switch-large-height': whenProps({ scale: 'large' }),\n })};\n\n background-color: ${conditional({\n 'switch-inactive-background-color': whenProps({ active: false }),\n 'switch-active-background-color': whenProps({ active: true }),\n })};\n\n border-radius: ${conditional({\n 'switch-border-radius': whenProps({ scale: 'default' }),\n 'switch-large-border-radius': whenProps({ scale: 'large' }),\n })};\n\n ${hoverable`\n background: ${conditional({\n 'switch-inactive-background-color--hover': whenProps({ active: false }),\n 'switch-active-background-color--hover': whenProps({ active: true }),\n })};\n `}\n\n ${focusable`\n box-shadow: ${token('switch-box-shadow')};\n outline: ${token('switch-outline')};\n outline-offset: ${token('switch-outline-offset')};\n `}\n\n ${disableable``}\n`\n\nconst Slider = styled.span<WithAdditionalProps>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n :before {\n position: absolute;\n bottom: ${conditional({\n 'switch-slider-y': whenProps({ scale: 'default', active: false }),\n 'switch-slider-active-y': whenProps({ scale: 'default', active: true }),\n 'switch-slider-large-y': whenProps({ scale: 'large', active: false }),\n 'switch-slider-large-active-y': whenProps({ scale: 'large', active: true }),\n })};\n left: ${conditional({\n 'switch-slider-x': whenProps({ scale: 'default', active: false }),\n 'switch-slider-active-x': whenProps({ scale: 'default', active: true }),\n 'switch-slider-large-x': whenProps({ scale: 'large', active: false }),\n 'switch-slider-large-active-x': whenProps({ scale: 'large', active: true }),\n })};\n\n width: ${conditional({\n 'switch-slider-size': whenProps({ scale: 'default' }),\n 'switch-slider-large-size': whenProps({ scale: 'large' }),\n })};\n\n height: ${conditional({\n 'switch-slider-size': whenProps({ scale: 'default' }),\n 'switch-slider-large-size': whenProps({ scale: 'large' }),\n })};\n\n background-color: ${token('switch-slider-background-color')};\n border-radius: ${token('switch-slider-border-radius')};\n\n ${transition({\n timingFunction: 'ease-out',\n duration: '150ms',\n })}\n\n content: '';\n }\n`\n\nconst HiddenInput = styled.input`\n ${hidden(true)}\n`\n\nconst ActiveIcon = styled(Icon)<WithAdditionalProps>`\n position: absolute;\n top: ${conditional({\n 'switch-icon-active-y': whenProps({ scale: 'default' }),\n 'switch-large-icon-active-y': whenProps({ scale: 'large' }),\n })};\n left: ${conditional({\n 'switch-icon-active-x': whenProps({ scale: 'default' }),\n 'switch-large-icon-active-x': whenProps({ scale: 'large' }),\n })};\n\n width: ${conditional({\n 'switch-icon-width': whenProps({ scale: 'default' }),\n 'switch-large-icon-width': whenProps({ scale: 'large' }),\n })};\n\n height: ${conditional({\n 'switch-icon-height': whenProps({ scale: 'default' }),\n 'switch-large-icon-height': whenProps({ scale: 'large' }),\n })};\n\n color: ${token('switch-icon-color')};\n`\n\nconst InactiveIcon = styled(Icon)<WithAdditionalProps>`\n position: absolute;\n top: ${conditional({\n 'switch-icon-inactive-y': whenProps({ scale: 'default' }),\n 'switch-large-icon-inactive-y': whenProps({ scale: 'large' }),\n })};\n left: ${conditional({\n 'switch-icon-inactive-x': whenProps({ scale: 'default' }),\n 'switch-large-icon-inactive-x': whenProps({ scale: 'large' }),\n })};\n\n width: ${conditional({\n 'switch-icon-width': whenProps({ scale: 'default' }),\n 'switch-large-icon-width': whenProps({ scale: 'large' }),\n })};\n\n height: ${conditional({\n 'switch-icon-height': whenProps({ scale: 'default' }),\n 'switch-large-icon-height': whenProps({ scale: 'large' }),\n })};\n\n color: ${token('switch-icon-color')};\n`\n\nfunction Switch({\n active = false,\n className,\n disabled = false,\n name,\n onToggle,\n scale = 'default',\n ...others\n}: SwitchProps): JSX.Element {\n return (\n <SwitchWrapper\n htmlFor={name}\n title={active ? 'active' : 'inactive'}\n active={active}\n className={clsx(className, {\n 'is-disabled': disabled,\n })}\n scale={scale}\n >\n {active ? (\n <ActiveIcon name=\"check\" scale={scale} data-testid=\"switch-icon-active\" />\n ) : (\n <InactiveIcon name=\"close\" scale={scale} data-testid=\"switch-icon-inactive\" />\n )}\n <Slider active={active} scale={scale} />\n <HiddenInput\n type=\"checkbox\"\n {...others}\n id={name}\n name={name}\n checked={active}\n disabled={disabled}\n onChange={onToggle}\n />\n </SwitchWrapper>\n )\n}\n\nexport default Switch\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\n\nimport { Icon } from 'components/Icon'\n\n// tools\nimport conditional, { whenProps } from 'tools/conditional'\n// styles\nimport typography from 'styles/typography'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport transition from 'styles/transition'\nimport { getToken as token } from 'theming'\n\nimport type { ButtonHTMLAttributes } from 'react'\n\n// interfaces\ninterface WithSizeProps {\n size?: 'small' | 'default' | 'large'\n}\n\ninterface WithVariantProps {\n variant?: 'accent' | 'danger' | 'default' | 'outlined' | 'success' | 'warning'\n}\n\nexport interface TagProps extends React.HTMLAttributes<HTMLElement>, WithSizeProps {\n className?: string\n children?: ReactNode\n disabled?: boolean\n leading?: ReactNode\n removable?: boolean\n variant?: 'accent' | 'danger' | 'default' | 'outlined' | 'success' | 'warning'\n onRemove?: () => void\n getRemoveButtonProps?: () => Partial<ButtonHTMLAttributes<HTMLButtonElement>> & {\n 'data-testid'?: string\n }\n}\n\n// styled elements\nconst StyledTag = styled.span`\n display: inline-flex;\n\n position: relative;\n\n width: auto;\n\n z-index: 0;\n\n ${disableable`\n opacity: ${token('opacity-60')};\n `}\n`\n\nconst StyledSpan = styled.span<TagProps>`\n ${transition()}\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n box-sizing: border-box;\n\n text-decoration: none;\n\n ${typography(\n conditional({\n 'chips-sm': whenProps({ size: 'small' }),\n 'caption-bold': whenProps({ size: 'default' }),\n 'body-bold': whenProps({ size: 'large' }),\n })\n )}\n\n line-height: initial;\n\n text-transform: ${conditional({\n 'tag-transform': whenProps({ size: 'default' }),\n 'tag-small-transform': whenProps({ size: 'small' }),\n 'tag-large-transform': whenProps({ size: 'large' }),\n })};\n\n padding: ${conditional({\n 'tag-small-spacing': whenProps({ size: 'small', removable: (removable) => !removable }),\n 'tag-spacing': whenProps({\n size: (size) => !['small', 'large'].includes(size ?? ''),\n removable: (removable) => !removable,\n }),\n 'tag-large-spacing': whenProps({ size: 'large', removable: (removable) => !removable }),\n 'tag-removable-spacing': whenProps([{ size: (size) => size !== 'small', removable: true }]),\n 'tag-small-removable-spacing': whenProps([{ size: 'small', removable: true }]),\n })};\n\n min-width: ${token('tag-width')};\n height: ${conditional({\n 'tag-height': whenProps({ size: 'default' }),\n 'tag-small-height': whenProps({ size: 'small' }),\n 'tag-large-height': whenProps({ size: 'large' }),\n })};\n\n font-weight: ${conditional({\n 'tag-font-weight': whenProps({ size: 'default' }),\n 'tag-small-font-weight': whenProps({ size: 'small' }),\n 'tag-large-font-weight': whenProps({ size: 'large' }),\n })};\n\n color: ${conditional({\n 'tag-default-color': whenProps({ variant: 'default' }),\n 'tag-outlined-color': whenProps({ variant: 'outlined' }),\n 'tag-accent-color': whenProps({ variant: 'accent' }),\n 'tag-success-color': whenProps({ variant: 'success' }),\n 'tag-warning-color': whenProps({ variant: 'warning' }),\n 'tag-danger-color': whenProps({ variant: 'danger' }),\n })};\n\n background: ${conditional({\n 'tag-default-background': whenProps({ variant: 'default' }),\n 'tag-outlined-background': whenProps({ variant: 'outlined' }),\n 'tag-accent-background': whenProps({ variant: 'accent' }),\n 'tag-success-background': whenProps({ variant: 'success' }),\n 'tag-warning-background': whenProps({ variant: 'warning' }),\n 'tag-danger-background': whenProps({ variant: 'danger' }),\n })};\n\n border-radius: ${token('tag-border-radius')};\n border-width: ${token('tag-border-width')};\n border-style: solid;\n\n border-color: ${conditional({\n 'tag-default-border-color': whenProps({ variant: 'default' }),\n 'tag-outlined-border-color': whenProps({ variant: 'outlined' }),\n 'tag-accent-border-color': whenProps({ variant: 'accent' }),\n 'tag-success-border-color': whenProps({ variant: 'success' }),\n 'tag-warning-border-color': whenProps({ variant: 'warning' }),\n 'tag-danger-border-color': whenProps({ variant: 'danger' }),\n })};\n\n ${hoverable`\n background: ${conditional({\n 'tag-default-background--hover': whenProps([\n { variant: 'default', removable: true },\n { variant: 'default', href: Boolean },\n ]),\n 'tag-outlined-background--hover': whenProps([\n { variant: 'outlined', removable: true },\n { variant: 'outlined', href: Boolean },\n ]),\n 'tag-accent-background--hover': whenProps([\n { variant: 'accent', removable: true },\n { variant: 'accent', href: Boolean },\n ]),\n 'tag-success-background--hover': whenProps([\n { variant: 'success', removable: true },\n { variant: 'success', href: Boolean },\n ]),\n 'tag-warning-background--hover': whenProps([\n { variant: 'warning', removable: true },\n { variant: 'warning', href: Boolean },\n ]),\n 'tag-danger-background--hover': whenProps([\n { variant: 'danger', removable: true },\n { variant: 'danger', href: Boolean },\n ]),\n })};\n\n border-color: ${conditional({\n 'tag-default-border-color--hover': whenProps([\n { variant: 'default', removable: true },\n { variant: 'default', href: Boolean },\n ]),\n 'tag-outlined-border-color--hover': whenProps([\n { variant: 'outlined', removable: true },\n { variant: 'outlined', href: Boolean },\n ]),\n 'tag-accent-border-color--hover': whenProps([\n { variant: 'accent', removable: true },\n { variant: 'accent', href: Boolean },\n ]),\n 'tag-success-border-color--hover': whenProps([\n { variant: 'success', removable: true },\n { variant: 'success', href: Boolean },\n ]),\n 'tag-warning-border-color--hover': whenProps([\n { variant: 'warning', removable: true },\n { variant: 'warning', href: Boolean },\n ]),\n 'tag-danger-border-color--hover': whenProps([\n { variant: 'danger', removable: true },\n { variant: 'danger', href: Boolean },\n ]),\n })};\n\n color: ${conditional({\n 'tag-default-color--hover': whenProps([\n { variant: 'default', removable: true },\n { variant: 'default', href: Boolean },\n ]),\n 'tag-outlined-color--hover': whenProps([\n { variant: 'outlined', removable: true },\n { variant: 'outlined', href: Boolean },\n ]),\n 'tag-accent-color--hover': whenProps([\n { variant: 'accent', removable: true },\n { variant: 'accent', href: Boolean },\n ]),\n 'tag-success-color--hover': whenProps([\n { variant: 'success', removable: true },\n { variant: 'success', href: Boolean },\n ]),\n 'tag-warning-color--hover': whenProps([\n { variant: 'warning', removable: true },\n { variant: 'warning', href: Boolean },\n ]),\n 'tag-danger-color--hover': whenProps([\n { variant: 'danger', removable: true },\n { variant: 'danger', href: Boolean },\n ]),\n })};\n `}\n\n ${focusable`\n color: ${conditional({\n 'tag-default-color--focus': whenProps({ variant: 'default' }),\n 'tag-outlined-color--focus': whenProps({ variant: 'outlined' }),\n 'tag-accent-color--focus': whenProps({ variant: 'accent' }),\n 'tag-success-color--focus': whenProps({ variant: 'success' }),\n 'tag-warning-color--focus': whenProps({ variant: 'warning' }),\n 'tag-danger-color--focus': whenProps({ variant: 'danger' }),\n })};\n background: ${conditional({\n 'tag-default-background--focus': whenProps({ variant: 'default' }),\n 'tag-outlined-background--focus': whenProps({ variant: 'outlined' }),\n 'tag-accent-background--focus': whenProps({ variant: 'accent' }),\n 'tag-success-background--focus': whenProps({ variant: 'success' }),\n 'tag-warning-background--focus': whenProps({ variant: 'warning' }),\n 'tag-danger-background--focus': whenProps({ variant: 'danger' }),\n })};\n box-shadow: ${token('tag-box-shadow')};\n outline: ${conditional({\n 'tag-default-outline': whenProps({ variant: 'default' }),\n 'tag-outlined-outline': whenProps({ variant: 'outlined' }),\n 'tag-accent-outline': whenProps({ variant: 'accent' }),\n 'tag-success-outline': whenProps({ variant: 'success' }),\n 'tag-warning-outline': whenProps({ variant: 'warning' }),\n 'tag-danger-outline': whenProps({ variant: 'danger' }),\n })};\n outline-offset: ${token('tag-outline-offset')};\n `}\n\n ${disableable`\n opacity: ${token('opacity-60')};\n `}\n`\n\nconst Leading = styled.span<WithSizeProps>`\n display: ${conditional({\n 'tag-leading-display': whenProps({ size: 'default' }),\n 'tag-small-leading-display': whenProps({ size: 'small' }),\n 'tag-large-leading-display': whenProps({ size: 'large' }),\n })};\n margin: 0 ${token('tag-icon-spacing')} 0 0;\n\n color: currentColor;\n\n fill: currentColor;\n`\n\nconst StyledCloseButton = styled.button<WithSizeProps & WithVariantProps>`\n z-index: 2;\n\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n cursor: pointer;\n\n background: ${token('tag-remove-button-background')};\n border-radius: ${token('tag-remove-button-border-radius')};\n border: 0;\n\n width: ${conditional({\n 'tag-remove-button-size': whenProps({ size: 'default' }),\n 'tag-small-remove-button-size': whenProps({ size: 'small' }),\n 'tag-large-remove-button-size': whenProps({ size: 'large' }),\n })};\n\n height: ${conditional({\n 'tag-remove-button-size': whenProps({ size: 'default' }),\n 'tag-small-remove-button-size': whenProps({ size: 'small' }),\n 'tag-large-remove-button-size': whenProps({ size: 'large' }),\n })};\n\n padding: 0;\n\n ${disableable`\n opacity: ${token('opacity-60')};\n `}\n\n ${focusable``}\n\n &:focus + ${StyledSpan} {\n color: ${conditional({\n 'tag-default-color--focus': whenProps({ variant: 'default' }),\n 'tag-outlined-color--focus': whenProps({ variant: 'outlined' }),\n 'tag-accent-color--focus': whenProps({ variant: 'accent' }),\n 'tag-success-color--focus': whenProps({ variant: 'success' }),\n 'tag-warning-color--focus': whenProps({ variant: 'warning' }),\n 'tag-danger-color--focus': whenProps({ variant: 'danger' }),\n })};\n\n background: ${conditional({\n 'tag-default-background--focus': whenProps({ variant: 'default' }),\n 'tag-outlined-background--focus': whenProps({ variant: 'outlined' }),\n 'tag-accent-background--focus': whenProps({ variant: 'accent' }),\n 'tag-success-background--focus': whenProps({ variant: 'success' }),\n 'tag-warning-background--focus': whenProps({ variant: 'warning' }),\n 'tag-danger-background--focus': whenProps({ variant: 'danger' }),\n })};\n box-shadow: ${token('tag-outline')};\n }\n`\n\nconst CloseIcon = styled(Icon)<WithSizeProps & WithVariantProps>`\n width: ${conditional({\n 'tag-remove-button-icon-size': whenProps({ size: 'default' }),\n 'tag-small-remove-button-icon-size': whenProps({ size: 'small' }),\n 'tag-large-remove-button-icon-size': whenProps({ size: 'large' }),\n })};\n\n height: ${conditional({\n 'tag-remove-button-icon-size': whenProps({ size: 'default' }),\n 'tag-small-remove-button-icon-size': whenProps({ size: 'small' }),\n 'tag-large-remove-button-icon-size': whenProps({ size: 'large' }),\n })};\n\n color: ${conditional({\n 'tag-default-color': whenProps({ variant: 'default' }),\n 'tag-outlined-color': whenProps({ variant: 'outlined' }),\n 'tag-accent-color': whenProps({ variant: 'accent' }),\n 'tag-success-color': whenProps({ variant: 'success' }),\n 'tag-warning-color': whenProps({ variant: 'warning' }),\n 'tag-danger-color': whenProps({ variant: 'danger' }),\n })};\n\n fill: currentColor;\n`\n\nconst StyledSpacer = styled.span<WithSizeProps>`\n display: inline-block;\n width: ${conditional({\n '0': whenProps({ size: 'small' }),\n 'space-xs': whenProps({ size: 'default' }),\n 'space-s': whenProps({ size: 'large' }),\n })};\n`\n\n// components\nfunction Tag(props: TagProps): JSX.Element {\n const {\n children,\n leading,\n size = 'default',\n onRemove,\n variant,\n removable,\n getRemoveButtonProps,\n disabled = false,\n ...others\n } = props\n\n return (\n <StyledTag>\n <StyledSpan size={size} variant={variant} {...others}>\n {leading && <Leading size={size}>{leading}</Leading>}\n {children}\n {removable && !disabled && (\n <>\n <StyledSpacer aria-hidden=\"true\" size={size} />\n <StyledCloseButton\n type=\"button\"\n {...getRemoveButtonProps?.()}\n size={size}\n onClick={onRemove}\n >\n <CloseIcon name=\"close\" variant={variant} size={size} />\n </StyledCloseButton>\n </>\n )}\n </StyledSpan>\n </StyledTag>\n )\n}\n\nexport default Tag\n","import React, { BaseHTMLAttributes, useEffect, useState } from 'react'\nimport styled from 'styled-components'\n\nimport { Icon } from 'components/Icon'\nimport { getToken as token } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport Status from 'utils/types/Status'\n\nimport DefaultCloseButton from 'common/CloseButton'\n\nimport { ProgressBar } from 'components/ProgressBar'\n\ntype ContainerProps = Pick<ToastProps, 'status'>\nconst Container = styled.div<ContainerProps>`\n position: relative;\n\n width: ${token('toast-width')};\n max-width: 100%;\n padding: ${token('toast-padding-y')} ${token('toast-padding-x')};\n overflow: hidden;\n\n color: ${token('toast-font-color')};\n font-weight: ${token('toast-font-weight')};\n font-size: ${token('toast-font-size')};\n line-height: ${token('toast-font-height')};\n\n background: ${conditional({\n 'toast-neutral-background': whenProps({ status: Status.Neutral }),\n 'toast-success-background': whenProps({ status: Status.Success }),\n 'toast-warning-background': whenProps({ status: Status.Warn }),\n 'toast-danger-background': whenProps({ status: Status.Danger }),\n })};\n border-radius: ${token('toast-border-radius')};\n box-shadow: ${token('toast-shadow')};\n`\n\nconst Content = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-around;\n`\n\nconst Leading = styled.span`\n position: absolute;\n`\n\nconst ToastCountDown = styled(ProgressBar)`\n position: absolute;\n bottom: 0;\n left: 0;\n`\nconst CloseButton = styled(DefaultCloseButton)`\n position: absolute;\n\n top: ${token('toast-close-y')};\n right: ${token('toast-close-x')};\n\n color: ${token('color-neutral-white')};\n`\n\nexport interface ToastProps extends BaseHTMLAttributes<HTMLDivElement> {\n message: string\n status?: Status\n timeout?: number\n showIcon?: boolean\n onClose: () => void\n}\n\nconst INTERVAL = 300 //ms\n\nfunction Toast({\n message,\n onClose,\n timeout,\n showIcon = false,\n status = Status.Neutral,\n}: ToastProps): JSX.Element {\n const [count, setCount] = useState(100)\n\n /**\n * this is a quick solution for the progress/countdown effect,\n * we can use requestAnimationFrame or some other library to\n * better implement this in the future\n */\n useEffect(() => {\n if (!timeout) return\n\n const decrementBy = (INTERVAL * 100) / timeout\n const interval = window.setTimeout(() => {\n if (count <= 0) {\n window.clearTimeout(interval)\n onClose()\n } else {\n setCount((value) => value - decrementBy)\n }\n }, INTERVAL)\n\n return () => {\n window.clearTimeout(interval)\n }\n }, [count, onClose, timeout])\n\n return (\n <Container status={status} aria-live=\"polite\" role=\"alert\">\n {showIcon && (\n <Leading>\n <ToastIcon status={status} />\n </Leading>\n )}\n <Content>{message}</Content>\n {Boolean(timeout) && <ToastCountDown value={count} status={status} />}\n {onClose && <CloseButton onClick={onClose} size={14} />}\n </Container>\n )\n}\n\ninterface ToastIconProps {\n status: Status\n}\n\nfunction ToastIcon({ status }: ToastIconProps) {\n let iconName = ''\n\n switch (status) {\n case Status.Success:\n iconName = 'check'\n break\n\n case Status.Warn:\n case Status.Danger:\n iconName = 'warning'\n break\n\n default:\n iconName = 'information'\n }\n\n return <Icon name={iconName} size={20} />\n}\n\nexport default Toast\n","export function check(id: string): void {\n const radioElement = document.getElementById(id) as HTMLInputElement\n\n if (radioElement) {\n radioElement.checked = true\n }\n}\n\nexport function getPanelRadioID(id: number | string): string {\n return `rg-wizard-step-radio-${id}`\n}\n","import React from 'react'\n\nconst StepsContext = React.createContext<string | number>('')\n\nexport default StepsContext\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nimport { getToken as token } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport font from 'styles/font'\nimport transition from 'styles/transition'\n\nimport type { Step } from '../Steps.types'\n\nexport interface StepsProgressProps {\n steps: Array<Step>\n current: number | string\n}\n\nconst StepConnector = styled.span<{ complete: boolean }>`\n position: absolute;\n top: ${conditional({\n 'steps-conector-top': whenProps({ complete: false }),\n 'steps-conector-top--complete': whenProps({ complete: true }),\n })};\n right: calc(-50% + ${token('steps-indicator-size')} / 2);\n left: calc(50% + ${token('steps-indicator-size')} / 2);\n\n z-index: 0;\n\n height: ${conditional({\n 'steps-conector-height': whenProps({ complete: false }),\n 'steps-conector-height--complete': whenProps({ complete: true }),\n })};\n\n background: ${conditional({\n 'steps-progress-step-background-color': whenProps({ complete: false }),\n 'steps-progress-step-background-color--complete': whenProps({ complete: true }),\n })};\n`\n\nconst ProgressStepWrapper = styled.li`\n position: relative;\n\n flex: 1;\n\n text-align: center;\n\n list-style: none;\n\n &:last-child ${StepConnector} {\n display: none;\n }\n`\n\nconst ProgressStepContainer = styled.div`\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n padding: 0 ${token('space-s')};\n`\n\nconst StepIndicator = styled.span<{ current: boolean; complete: boolean }>`\n ${transition()}\n\n ${font({\n weight: 'font-weight-bold',\n height: 'steps-indicator-size',\n })}\n\n font-size: ${token('font-size-4')};\n\n height: ${token('steps-indicator-size')};\n width: ${token('steps-indicator-size')};\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border-width: 2px;\n border-style: solid;\n border-color: ${conditional({\n 'steps-progress-step-background-color--complete': whenProps([\n { current: true, complete: [true, false] },\n { current: false, complete: true },\n ]),\n 'steps-progress-step-background-color': whenProps({ current: false, complete: false }),\n })};\n border-radius: ${token('border-radius-circle')};\n\n background: ${conditional({\n 'steps-progress-step-background-color--complete': whenProps([\n { current: false, complete: true },\n ]),\n 'color-neutral-white': whenProps([\n { current: true, complete: [true, false] },\n { current: false, complete: false },\n ]),\n })};\n\n color: ${conditional({\n 'steps-progress-step-background-color': whenProps({ current: false, complete: false }),\n 'color-neutral-white': whenProps({ current: false, complete: true }),\n 'steps-progress-step-background-color--complete': whenProps({ current: true }),\n })};\n`\n\nconst StepLabel = styled.span<{ current: boolean; complete: boolean }>`\n ${font({\n height: 'font-height-2',\n })}\n\n position: relative;\n\n font-weight: ${conditional({\n 'font-weight-medium': whenProps({ current: false }),\n 'font-weight-bold': whenProps({ current: true }),\n })};\n\n color: ${conditional({\n 'color-neutral-darker': whenProps([{ current: true }, { current: false, complete: true }]),\n 'color-neutral': whenProps({ current: false, complete: false }),\n })};\n\n font-size: ${token('font-size-4')};\n\n display: flex;\n flex-direction: row;\n\n align-items: center;\n justify-content: center;\n\n text-align: center;\n\n margin: ${token('space-xs')} 0 0 0;\n`\n\nfunction ProgressStep(props: { step: Step; current: boolean; indicator: ReactNode }): JSX.Element {\n const { step, current, indicator } = props\n\n return (\n <ProgressStepWrapper>\n <ProgressStepContainer\n data-testid=\"steps-timeline-entry\"\n className={clsx({\n 'is-current': current,\n 'is-complete': step.complete,\n })}\n >\n <StepIndicator aria-hidden=\"true\" current={current} complete={step.complete}>\n {indicator}\n </StepIndicator>\n\n <StepLabel current={current} complete={step.complete}>\n {step.label}\n </StepLabel>\n\n <StepConnector complete={step.complete} />\n </ProgressStepContainer>\n </ProgressStepWrapper>\n )\n}\n\nexport default ProgressStep\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport ProgressStep from './ProgressStep'\n\nimport type { Step } from '../Steps.types'\n\nexport interface StepsProgressProps {\n steps: Array<Step>\n current: number | string\n}\n\nconst ProgressWrapper = styled.ol<{ steps: Step[] }>`\n position: relative;\n\n display: flex;\n flex-direction: row;\n\n padding: ${token('steps-progress-padding-y')} ${token('steps-progress-padding-x')};\n`\n\nfunction StepsProgress(props: StepsProgressProps): JSX.Element {\n const { steps, current } = props\n\n return (\n <ProgressWrapper steps={steps || []}>\n {(steps || []).map(function renderStep(step, index) {\n const { id } = step\n\n return <ProgressStep key={id} current={current === id} indicator={index + 1} step={step} />\n })}\n </ProgressWrapper>\n )\n}\n\nexport default StepsProgress\n","import React, { Fragment, useContext } from 'react'\nimport type { PropsWithChildren } from 'react'\nimport styled from 'styled-components'\n\nimport { getPanelRadioID } from './Steps.helpers'\nimport { getToken as token } from 'theming'\nimport font from 'styles/font'\nimport hidden from 'styles/hidden'\nimport StepsContext from './StepsContext'\n\nexport interface StepsStepProps {\n id: number | string\n className?: string\n}\n\nconst Selector = styled.input`\n ${hidden(true)}\n`\n\nexport const StepWrapper = styled.article`\n ${font({\n weight: 'font-weight-medium',\n height: 'font-height-2',\n })}\n\n padding: 0 ${token('steps-step-padding-x')} ${token('steps-step-padding-y')};\n\n ${Selector} + & {\n display: none;\n }\n\n ${Selector}:checked + & {\n display: block;\n }\n`\n\nfunction StepsStep({ children, id, ...others }: PropsWithChildren<StepsStepProps>): JSX.Element {\n const StepsID = useContext(StepsContext)\n\n return (\n <Fragment>\n <Selector\n type=\"radio\"\n className=\"visually-hidden\"\n id={getPanelRadioID(id)}\n name={String(StepsID)}\n value={id}\n data-testid=\"panel-radio\"\n tabIndex={-1}\n />\n <StepWrapper data-testid=\"steps-step\" {...others} id={String(id)}>\n {children}\n </StepWrapper>\n </Fragment>\n )\n}\n\nexport default StepsStep\n","import React, { useEffect } from 'react'\nimport type { PropsWithChildren } from 'react'\nimport styled from 'styled-components'\n\nimport { check, getPanelRadioID } from './Steps.helpers'\nimport { getToken as token } from 'theming'\nimport StepsContext from './StepsContext'\nimport StepsProgress from './ProgressSteps'\nimport StepsStep from './StepsStep'\n\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport type { Step } from './Steps.types'\nexport interface StepsProps {\n current: number | string\n id: number | string\n steps: Array<Step>\n className?: string\n scheme?: ColorScheme\n}\n\nconst StepsWrapper = styled.section`\n display: block;\n width: 100%;\n\n color: ${token('steps-color')};\n`\n\n// TODO: improve by extracting steps props right from children.\nfunction Steps({\n id,\n children,\n current,\n steps,\n ...others\n}: PropsWithChildren<StepsProps>): JSX.Element {\n useEffect(\n function showCurrentStep() {\n check(getPanelRadioID(current))\n },\n [current]\n )\n\n return (\n <StepsWrapper id={String(id)} {...others}>\n <StepsProgress current={current} steps={steps} />\n <StepsContext.Provider value={id}>{children}</StepsContext.Provider>\n </StepsWrapper>\n )\n}\n\nSteps.defaultProps = {\n scheme: 'light',\n}\n\nSteps.Step = StepsStep\n\nexport default Steps\n","import React, { ReactNode, HTMLAttributes } from 'react'\n\nimport styled from 'styled-components'\nimport { getToken as token } from 'theming'\n\nexport interface CardTitleProps extends HTMLAttributes<HTMLElement> {\n leading?: ReactNode\n}\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n pointer-events: none;\n`\n\nconst Leading = styled(StyledSpan)`\n margin-right: ${token('space-xs')};\n`\n\nconst Wrapper = styled.div`\n padding: ${token('card-padding-y')} ${token('card-padding-x')} 0;\n\n color: ${token('card-color')};\n font-weight: ${token('card-title-font-weight')};\n font-size: ${token('card-title-font-size')};\n line-height: ${token('card-title-font-height')};\n`\n\nfunction CardTitle({ children, leading, ...others }: CardTitleProps): JSX.Element {\n return (\n <Wrapper {...others}>\n {leading && <Leading>{leading}</Leading>}\n {children}\n </Wrapper>\n )\n}\n\nexport { Wrapper as CardTitleWrapper }\n\nexport default CardTitle\n","import React, { HTMLAttributes, ReactNode } from 'react'\n\nimport { getToken as token } from 'theming'\nimport CardTitle, { CardTitleWrapper } from './CardTitle'\nimport conditional, { whenProps } from 'tools/conditional'\nimport font from 'styles/font'\nimport Status from 'utils/types/Status'\nimport styled, { css } from 'styled-components'\n\nexport interface CardProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode\n status?: Status\n flagged?: boolean\n}\n\nconst CardSubtitle = styled.div`\n padding: 0 ${token('card-padding-x')} ${token('card-padding-y')};\n\n color: ${token('card-color')};\n font-weight: ${token('card-subtitle-font-weight')};\n font-size: ${token('card-subtitle-font-size')};\n`\n\nconst CardSeparator = styled.hr`\n display: block;\n height: 1px;\n margin: 0;\n\n border: 0;\n border-bottom: 1px solid ${token('card-separator-background')};\n`\n\nconst CardBody = styled.div`\n padding: ${token('card-padding-y')} ${token('card-padding-x')};\n`\n\nconst Wrapper = styled.div`\n ${font({})}\n\n display: flex;\n flex-direction: row;\n\n color: ${token('card-color')};\n\n ${CardTitleWrapper} + ${CardSubtitle} {\n margin-top: ${token('space-xs')};\n }\n\n ${CardTitleWrapper} + ${CardSeparator} {\n margin-top: ${token('card-padding-y')};\n }\n\n border: 1px solid ${token('card-border-color')};\n border-radius: ${token('card-border-radius')};\n background: ${token('card-background')};\n`\n\nconst Container = styled.div<{ flagged: boolean }>`\n display: flex;\n flex: 1;\n flex-direction: column;\n\n line-height: ${token('card-font-height')};\n\n ${({ flagged }) =>\n flagged &&\n css`\n ${CardSeparator} {\n margin-left: calc(-1 * ${token('space-s')});\n }\n `}\n`\n\nconst Flag = styled.span<{ status: Status }>`\n display: block;\n flex: 0 0 ${token('card-flag-width')};\n\n background: ${conditional({\n 'card-flag-background-neutral': whenProps({ status: Status.Neutral }),\n 'card-flag-background-danger': whenProps({ status: Status.Danger }),\n 'card-flag-background-warning': whenProps({ status: Status.Warn }),\n 'card-flag-background-success': whenProps({ status: Status.Success }),\n })};\n border-radius: ${token('card-border-radius')} 0 0 ${token('card-border-radius')};\n`\n\nfunction Card({\n flagged = false,\n status = Status.Neutral,\n children,\n ...others\n}: CardProps): JSX.Element {\n return (\n <Wrapper {...others}>\n {flagged && <Flag status={status} aria-label={status} />}\n <Container flagged={flagged}>{children}</Container>\n </Wrapper>\n )\n}\n\nCard.Title = CardTitle\nCard.Subtitle = CardSubtitle\nCard.Separator = CardSeparator\nCard.Body = CardBody\n\nexport default Card\n","import { createContext } from 'react'\nimport type { DropdownContextReturn } from './Dropdown.types'\n\nconst DropdownContext = createContext<DropdownContextReturn>({\n disabled: false,\n expandDisabled: false,\n expanded: false,\n toggle: function () {\n // nothing\n },\n})\n\nexport default DropdownContext\n","import React, { forwardRef, useContext } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Popover } from 'components/Popover'\nimport disableable from 'styles/disableable'\nimport DropdownContext from './Dropdown.context'\nimport focusable from 'styles/focusable'\nimport font from 'styles/font'\nimport hoverable from 'styles/hoverable'\nimport transition from 'styles/transition'\nimport useID from 'hooks/useID'\n\nimport type {\n DropdownMenuItemProps,\n DropdownMenuProps,\n DropdownMenuSectionProps,\n} from './Dropdown.types'\n\n/**\n * TODO: add aria-labelledby that should refer to the dropdown label to the role=\"menu\" container.\n * TODO: navigate through items using arrow keys.\n * TODO: add animation for a smooth open/close effect.\n */\n\nconst StyledPopover = styled(Popover.Floating)`\n z-index: ${token('z-index-droplist')};\n\n min-width: 10em;\n\n background: ${token('dropdown-background')};\n border: 1px solid ${token('dropdown-border-color')};\n border-radius: ${token('dropdown-border-radius')};\n box-shadow: ${token('dropdown-shadow')};\n width: max-content;\n`\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n font-size: 1em;\n`\n\nconst Leading = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst Trailing = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst Children = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: flex-start;\n padding: ${token('space-s')} 0;\n\n white-space: nowrap;\n`\n\nconst DropdownItemWrapper = styled.button`\n ${transition()}\n\n display: inline-flex;\n justify-content: flex-start;\n align-items: center;\n\n ${font({\n height: 'font-height-3',\n weight: 'font-weight-medium',\n })}\n font-size: ${token('font-size-4')};\n\n min-height: 36px;\n flex: 1 0;\n\n border: none;\n border-radius: ${token('border-radius-s')};\n background: ${token('color-neutral-white')};\n\n color: ${token('color-neutral-darker')};\n\n padding: 0 ${token('space-s')};\n\n margin: 0 ${token('space-s')};\n\n cursor: pointer;\n\n ${hoverable`\n background: ${token('color-neutral-lighter')};\n `}\n\n ${focusable`\n background: ${token('color-neutral-lighter')};\n `}\n\n ${disableable()}\n\n ${Children} {\n flex: 1 0 auto;\n\n text-align: left;\n }\n\n ${Leading}, ${Trailing} {\n flex: 0 1 auto;\n }\n\n ${Leading} + ${Children} {\n margin: 0 0 0 ${token('space-s')};\n }\n\n ${Children} + ${Trailing} {\n margin: 0 0 0 ${token('space-s')};\n }\n`\n\nconst DropdownSectionHeader = styled.strong`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n ${font({\n height: 'font-height-3',\n weight: 'font-weight-bold',\n })}\n\n font-size: ${token('font-size-4')};\n\n margin: 0 ${token('space-s')};\n`\n\nconst DropdownSectionWrapper = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nconst GenericDropdownMenuWrapper = styled.div`\n display: flex;\n flex-direction: column;\n padding: ${token('space-s')} 0;\n\n ${font({\n height: 'font-height-3',\n weight: 'font-weight-medium',\n })}\n\n font-size: ${token('font-size-4')};\n`\n\nconst DropdownMenuWrapper = styled(GenericDropdownMenuWrapper)`\n max-height: 240px;\n overflow-y: auto;\n max-width: 100%;\n width: 100%;\n\n ${DropdownItemWrapper} + ${DropdownItemWrapper},\n ${DropdownSectionHeader} + ${DropdownItemWrapper} {\n margin-top: ${token('space-2xs')};\n }\n\n ${DropdownSectionWrapper} + ${DropdownSectionWrapper} {\n margin: ${token('space-m')} 0 0 0;\n }\n\n ${GenericDropdownMenuWrapper} + &,\n & + ${GenericDropdownMenuWrapper},\n ${GenericDropdownMenuWrapper} + ${GenericDropdownMenuWrapper} {\n border-top: 2px solid ${token('color-neutral-lighter')};\n }\n`\n\nexport const DropdownSeparator = styled.hr.attrs({\n 'aria-hidden': true,\n})`\n display: block;\n height: 2px;\n\n margin: ${token('space-s')} 0;\n\n border: 0;\n border-bottom: 2px solid ${token('card-separator-background')};\n`\n\nexport const DropdownMenu = forwardRef<HTMLDivElement, DropdownMenuProps>(function DropdownMenu(\n props: DropdownMenuProps,\n ref\n): JSX.Element | null {\n const context = useContext(DropdownContext)\n\n if (!context) {\n throw new Error('DropdownMenu must be inside a DropdownContext')\n }\n\n const { children, header, footer, ...others } = props\n const { expanded } = context\n\n if (!expanded) {\n return null\n }\n\n return (\n <StyledPopover role=\"presentation\">\n {header && <GenericDropdownMenuWrapper>{header}</GenericDropdownMenuWrapper>}\n {children && (\n <DropdownMenuWrapper ref={ref} role=\"menu\" data-testid=\"dropdown-menu\" {...others}>\n {children}\n </DropdownMenuWrapper>\n )}\n {footer && <GenericDropdownMenuWrapper>{footer}</GenericDropdownMenuWrapper>}\n </StyledPopover>\n )\n})\n\nexport function DropdownMenuItem(props: DropdownMenuItemProps): JSX.Element {\n const context = useContext(DropdownContext)\n const { leading, children, trailing, onClick, ...others } = props\n const id = useID(others.id)\n\n if (!context) {\n throw new Error('DropdownMenuItem must be inside a DropdownContext')\n }\n\n const { toggle } = context\n\n return (\n <DropdownItemWrapper\n role=\"menuitem\"\n type=\"button\"\n data-testid=\"dropdown-menu-item\"\n {...others}\n aria-labelledby={id}\n onClick={(e) => {\n e.persist()\n\n const shouldKeepOpen = onClick?.(e)\n\n if (!shouldKeepOpen) {\n toggle()\n }\n }}\n >\n {leading && <Leading>{leading}</Leading>}\n <Children id={id}>{children}</Children>\n {trailing && <Trailing>{trailing}</Trailing>}\n </DropdownItemWrapper>\n )\n}\n\nexport function DropdownMenuSection(props: DropdownMenuSectionProps): JSX.Element {\n const { children, header, ...others } = props\n\n return (\n <DropdownSectionWrapper data-testid=\"dropdown-menu-section\" {...others} role=\"presentation\">\n <DropdownSectionHeader>{header}</DropdownSectionHeader>\n {children}\n </DropdownSectionWrapper>\n )\n}\n","import toArray from './toArray'\n\nimport type { KeyboardEvent } from 'react'\n\n// this is merely a helper for key code names\nconst SUPPORTED_KEYS = {\n ALT: 'Alt',\n ARROW_DOWN: 'ArrowDown',\n ARROW_LEFT: 'ArrowLeft',\n ARROW_RIGHT: 'ArrowRight',\n ARROW_UP: 'ArrowUp',\n CONTROL: 'Control',\n ENTER: 'Enter',\n ESCAPE: 'Escape',\n SHIFT: 'Shift',\n SPACE: ' ',\n TAB: 'Tab',\n E_LOWERCASE: 'e',\n DOT: '.',\n PLUS: '+',\n MINUS: '-',\n}\n\nexport type SupportedKey = keyof typeof SUPPORTED_KEYS\n\n// Based on https://github.com/downshift-js/downshift/blob/26c93a539dad09e41adba69ddc3a7d7ecccfc8bb/src/utils.js#L285\nexport function getKeyboardKey(e: KeyboardEvent): KeyboardEvent['key'] {\n // IE\n if (e.keyCode >= 37 && e.keyCode <= 40 && e.key.indexOf('Arrow') !== 0) {\n return `Arrow${e.key}`\n }\n\n return e.key\n}\n\nfunction KeyboardKey(e: KeyboardEvent): {\n is(otherKeys: SupportedKey | SupportedKey[]): boolean\n} {\n const key = getKeyboardKey(e)\n\n return {\n is(otherKeys: SupportedKey | SupportedKey[]) {\n const expectedKeys = toArray(otherKeys).map((otherKey) => SUPPORTED_KEYS[otherKey])\n\n return toArray(expectedKeys).includes(key)\n },\n }\n}\n\nexport default KeyboardKey\n","import React, { useCallback, useEffect, useState } from 'react'\n\nimport KeyboardKey from 'utils/toolset/keyboard'\n\nimport type { RefObject } from 'react'\n\nfunction useClickOutside<T extends HTMLElement>(\n container: RefObject<T>,\n callback: (event?: MouseEvent | TouchEvent | KeyboardEvent) => void,\n disabled = false\n): void {\n const [active, setActive] = useState(false)\n\n const getContainer = useCallback(\n function getContainer() {\n return container.current\n },\n [container]\n )\n\n const handleEvent = useCallback(\n function handleEvent(event: MouseEvent | TouchEvent | KeyboardEvent) {\n function hasPressedEsc() {\n return KeyboardKey(event as unknown as React.KeyboardEvent).is('ESCAPE')\n }\n\n if (!getContainer() || disabled) {\n return\n }\n\n const target = event.target as Node\n const hasTarget = getContainer()?.contains(target)\n\n if (!active && hasTarget) {\n setActive(true)\n } else if (active && (!hasTarget || hasPressedEsc())) {\n setActive(false)\n callback(event)\n }\n },\n [active, callback, disabled, getContainer]\n )\n\n useEffect(() => {\n function subscribe() {\n document.addEventListener('mousedown', handleEvent, true)\n document.addEventListener('touchend', handleEvent, true)\n document.addEventListener('keyup', handleEvent)\n }\n\n function unsubscribe() {\n document.removeEventListener('mousedown', handleEvent, true)\n document.removeEventListener('touchend', handleEvent, true)\n document.removeEventListener('keyup', handleEvent)\n }\n\n subscribe()\n\n return () => {\n unsubscribe()\n }\n }, [handleEvent])\n}\n\nexport default useClickOutside\n","import React, { useContext } from 'react'\nimport clsx from 'clsx'\nimport styled, { css } from 'styled-components'\nimport { isFunction } from '@loadsmart/utils-function'\n\nimport { BaseButton, SelectorButton, ButtonProps } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport { Icon as DefaultIcon } from 'components/Icon'\nimport { useFocusWithin } from 'hooks/useFocusWithin'\nimport activatable from 'styles/activatable'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport DropdownContext from './Dropdown.context'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport transition from 'styles/transition'\nimport typography from 'styles/typography'\n\nimport type { ButtonHTMLAttributes, HTMLAttributes, MouseEvent } from 'react'\nimport type { DropdownTriggerProps, DropdownContextReturn } from './Dropdown.types'\nimport type { IconProps } from 'components/Icon'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport { Popover } from 'components/Popover'\n\n/**\n * TODO: throw an error if context is not available\n */\n\ntype DropdownTriggerWrapperProps = {\n disabled: boolean\n scheme: ColorScheme\n $outlined: boolean\n $scale: DropdownTriggerProps['scale']\n}\n\ntype TriggerButtonProps = ButtonProps & {\n outlined: boolean\n}\n\nconst dropdownExpandedStyle = css`\n &[aria-expanded='true'] {\n color: ${token('dropdown-trigger-expanded-color')};\n }\n`\n\nconst triggerButtonAttrs = (props: { outlined: boolean }) => {\n const outlined = typeof props.outlined === 'boolean' ? props.outlined : true\n if (outlined) {\n return props\n }\n\n return {\n ...props,\n variant: 'tertiary',\n }\n}\n\nconst TriggerButton = styled(\n SelectorButton as React.ForwardRefExoticComponent<TriggerButtonProps>\n).attrs(triggerButtonAttrs)`\n flex: 1;\n\n justify-content: flex-start;\n\n border: none;\n\n height: ${token('dropdown-trigger-height')};\n\n text-transform: ${conditional({\n capitalize: whenProps({ outlined: false, variant: 'tertiary' }),\n uppercase: whenProps({ outlined: true }),\n })};\n\n font-weight: ${conditional({\n 'font-weight-regular': whenProps({ outlined: false }),\n })};\n\n ${hoverable`\n border-color: ${conditional({\n 'color-transparent': whenProps({ outlined: false }),\n })};\n\n font-weight: ${conditional({\n 'font-weight-bold': whenProps({ outlined: false }),\n })};\n\n ${dropdownExpandedStyle}\n `}\n\n ${focusable`\n box-shadow: ${conditional({\n none: whenProps({ outlined: false }),\n })};\n\n background-color: ${conditional({\n 'color-transparent': whenProps({ outlined: false }),\n })};\n\n font-weight: ${conditional({\n 'font-weight-bold': whenProps({ outlined: false }),\n })};\n\n\n ${dropdownExpandedStyle}\n `}\n\n ${({ children, outlined }) => {\n if (outlined === false && typeof children === 'string') {\n return css`\n & > span:first-child {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n\n text-decoration: none;\n }\n\n & > span:first-child::after {\n height: 0;\n overflow: hidden;\n\n font-weight: ${token('font-weight-bold')};\n\n visibility: hidden;\n\n /* @REVIEW: since this is a span descendant of a button\n I'm using the direct value of children the solution inside Link\n relies on data-text attribute */\n\n content: '${children}';\n content: '${children}' / '';\n user-select: none;\n pointer-events: none;\n\n @media speech {\n display: none;\n }\n }\n `\n }\n }}\n`\n\nconst DropdownTriggerWrapper = styled.div<DropdownTriggerWrapperProps>`\n ${transition()}\n\n ${typography(\n conditional({\n 'button-md': whenProps({ $scale: 'default' }),\n 'button-sm': whenProps({ $scale: 'small' }),\n 'button-lg': whenProps({ $scale: 'large' }),\n })\n )}\n\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n border-radius: ${token('button-border-radius')};\n border-width: ${token('button-border-width')};\n border-style: solid;\n border-color: ${conditional({\n 'dropdown-trigger-border-color': whenProps({ scheme: 'light', $outlined: true }),\n 'dropdown-trigger-dark-border-color': whenProps({ scheme: 'dark', $outlined: true }),\n 'dropdown-trigger-outlined-border-color': whenProps({ $outlined: false }),\n })};\n\n font-size: ${token('font-size-4')};\n\n color: ${token('color-neutral-darker')};\n\n box-sizing: border-box;\n\n flex: 1;\n\n ${hoverable`\n border-color: ${conditional({\n 'button-secondary-border-color--hover': whenProps({ scheme: 'light', $outlined: true }),\n 'button-secondary-dark-border-color--hover': whenProps({\n scheme: 'dark',\n $outlined: true,\n }),\n })};\n `}\n\n ${disableable`\n border-color: ${conditional({\n 'button-secondary-border-color--disabled': whenProps({ scheme: 'light' }),\n 'button-secondary-dark-border-color--disabled': whenProps({\n scheme: 'dark',\n }),\n })};\n `}\n\n ${focusable`\n border-color: ${conditional({\n 'button-primary-border-color--focus': whenProps({ variant: 'primary', $outlined: true }),\n 'button-secondary-border-color--focus': whenProps({ scheme: 'light', $outlined: true }),\n 'button-secondary-dark-border-color--focus': whenProps({\n scheme: 'dark',\n $outlined: true,\n }),\n 'button-warning-border-color--focus': whenProps({ variant: 'warning', $outlined: true }),\n 'button-icon-border-color--focus': whenProps({ variant: 'icon', $outlined: true }),\n 'color-transparent': whenProps({ $outlined: false }),\n })};\n\n box-shadow: ${conditional({ 'dropdown-trigger-box-shadow': whenProps({ $outlined: true }) })};\n outline: ${token('dropdown-trigger-outline')};\n outline-offset: ${token('dropdown-trigger-outline-offset')};\n `}\n\n ${activatable`\n border-color: ${conditional({\n 'button-secondary-border-color--active': whenProps({ scheme: 'light', $outlined: true }),\n 'button-secondary-dark-border-color--active': whenProps({\n scheme: 'dark',\n $outlined: true,\n }),\n })};\n `}\n`\n\nconst TriggerHandle = styled(BaseButton)`\n ${focusable()}\n\n background: ${token('color-transparent')};\n border-radius: 0 ${token('border-radius-s')} ${token('border-radius-s')} 0;\n border: none;\n\n height: ${token('dropdown-trigger-height')};\n`\n\nconst RotatableIcon = styled(DefaultIcon)<{ $rotate: boolean }>`\n ${conditional({\n 'transform: rotate(180deg);': whenProps({ $rotate: true }),\n })}\n`\n\nexport interface DropdownTriggerButtonProps extends DropdownTriggerProps {\n children: DropdownTriggerProps['children'] | ((args: DropdownContextReturn) => React.ReactNode)\n}\n\nfunction Caret(props: Omit<IconProps, 'name'> & { $rotate: boolean }) {\n return <RotatableIcon size={20} {...props} name=\"chevron-down\" />\n}\n\nfunction DropdownTriggerButton(props: DropdownTriggerButtonProps): JSX.Element {\n const contextValue = useContext(DropdownContext)\n const { toggle, disabled, expanded } = contextValue\n const { children, onClick, ...others } = props\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n e.persist()\n\n toggle()\n onClick?.(e)\n }\n\n function renderChildren() {\n if (isFunction(children)) {\n return children(contextValue)\n }\n\n return children\n }\n\n // TODO: add aria-labelledby that should refer to the button and the dropdown label\n return (\n <TriggerButton\n trailing={<Caret $rotate={expanded} />}\n onClick={handleClick}\n {...others}\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded={expanded}\n aria-disabled={disabled}\n disabled={disabled}\n >\n {renderChildren()}\n </TriggerButton>\n )\n}\n\nfunction DropdownTriggerHandle(props: ButtonHTMLAttributes<HTMLButtonElement>): JSX.Element {\n const { toggle, expanded, disabled, expandDisabled } = useContext(DropdownContext)\n const { onClick, ...others } = props\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n e.persist()\n\n toggle()\n onClick?.(e)\n }\n\n return (\n <TriggerHandle\n onClick={handleClick}\n data-testid=\"dropdown-trigger-handle\"\n {...others}\n disabled={disabled || expandDisabled}\n type=\"button\"\n tabIndex={-1}\n >\n <Caret $rotate={expanded} />\n </TriggerHandle>\n )\n}\n\nexport interface GenericDropdownTriggerProps extends HTMLAttributes<HTMLDivElement> {\n disabled?: boolean\n scheme?: ColorScheme\n outlined?: boolean\n scale?: DropdownTriggerProps['scale']\n}\n\nexport function GenericDropdownTrigger(props: GenericDropdownTriggerProps): JSX.Element {\n const context = useContext(DropdownContext)\n const { ref, focused } = useFocusWithin<HTMLDivElement>()\n\n if (!context) {\n throw new Error('DropdownTrigger must be inside a DropdownContext')\n }\n\n const { children, className, scheme = 'light', outlined = true, scale, ...others } = props\n const { disabled } = context\n\n return (\n <DropdownTriggerWrapper\n role=\"presentation\"\n {...others}\n ref={ref}\n className={clsx(\n {\n 'is-disabled': disabled,\n 'is-focused': focused,\n },\n className\n )}\n disabled={disabled}\n scheme={scheme}\n $scale={scale}\n $outlined={outlined}\n >\n {children}\n </DropdownTriggerWrapper>\n )\n}\n\nfunction DropdownTrigger(props: DropdownTriggerProps): JSX.Element {\n const { children, className, ...others } = props\n\n return (\n <Popover.Reference>\n <GenericDropdownTrigger className={className} outlined={props.outlined} scale={props.scale}>\n <DropdownTriggerButton {...others} data-text={children}>\n {children}\n </DropdownTriggerButton>\n </GenericDropdownTrigger>\n </Popover.Reference>\n )\n}\n\nDropdownTrigger.Button = DropdownTriggerButton\nDropdownTrigger.Handle = DropdownTriggerHandle\n\nexport default DropdownTrigger\n","import { useCallback, useEffect, useState } from 'react'\n\nimport type { DropdownProps } from './Dropdown.types'\n\nexport interface useDropdownProps {\n expanded: boolean\n toggle: () => void\n}\n\nexport interface GenericDropdownProps extends DropdownProps, useDropdownProps {}\n\nfunction useDropdown({ disabled, expandDisabled }: DropdownProps): {\n expanded: boolean\n toggle: () => void\n expand: () => void\n collapse: () => void\n} {\n const [expanded, setExpanded] = useState(false)\n\n const toggle = useCallback(\n function toggle() {\n if (disabled || expandDisabled) {\n return\n }\n\n setExpanded((isExpanded) => !isExpanded)\n },\n [disabled, expandDisabled]\n )\n\n const expand = useCallback(\n function toggle() {\n if (disabled || expandDisabled) {\n return\n }\n\n setExpanded(true)\n },\n [disabled, expandDisabled]\n )\n\n const collapse = useCallback(\n function toggle() {\n if (disabled || expandDisabled) {\n return\n }\n\n setExpanded(false)\n },\n [disabled, expandDisabled]\n )\n\n useEffect(\n function closeWhenDisabled() {\n if ((disabled || expandDisabled) && expanded) {\n setExpanded(false)\n }\n },\n [disabled, expandDisabled, expanded]\n )\n\n return { expanded, toggle, expand, collapse }\n}\n\nexport default useDropdown\n","import React, { useMemo, useRef } from 'react'\nimport styled from 'styled-components'\n\nimport {\n DropdownMenu,\n DropdownMenuItem,\n DropdownMenuSection,\n DropdownSeparator,\n} from './DropdownMenu'\nimport { useClickOutside } from 'hooks/useClickOutside'\nimport DropdownContext from './Dropdown.context'\nimport DropdownTrigger from './DropdownTrigger'\nimport hidden from 'styles/hidden'\nimport useDropdown from './useDropdown'\nimport { Popover } from 'components/Popover'\n\nimport type { DropdownProps, GenericDropdownProps, DropdownMenuProps } from './Dropdown.types'\nimport type { PopoverAlign } from 'components/Popover'\n\nconst DropdownWrapper = styled.div`\n position: relative;\n`\n\nconst HiddenCloseButton = styled.button.attrs({\n type: 'button',\n tabIndex: -1,\n})`\n ${hidden(true)}\n`\n\nfunction useDeprecatedAlignFromMenu({\n children,\n align,\n}: React.PropsWithChildren<{ align?: PopoverAlign }>): PopoverAlign {\n let result: PopoverAlign | undefined\n\n if (align) {\n return align\n }\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<DropdownMenuProps>(child) && child.type === DropdownMenu) {\n result = child.props.align\n }\n })\n\n return (result || align) as PopoverAlign\n}\n\n// TODO: add focus trap here to allow navigating options with keyboard\n\n/**\n * Generic dropdown component that allows composing its pieces as desired.\n *\n * Based on:\n * - https://www.w3.org/TR/2017/REC-wai-aria-1.1-20171214/#menu\n * - https://www.w3.org/WAI/tutorials/menus/application-menus/\n *\n * @param props\n * @returns\n */\nexport function GenericDropdown(props: GenericDropdownProps): JSX.Element {\n const {\n children,\n expanded,\n toggle,\n disabled = false,\n expandDisabled = false,\n onBlur,\n position,\n ...others\n } = props\n const contextValue = useMemo(\n () => ({ expanded, toggle, disabled, expandDisabled }),\n [expanded, toggle, disabled, expandDisabled]\n )\n const ref = useRef(null)\n\n const align = useDeprecatedAlignFromMenu(props)\n\n useClickOutside(\n ref,\n function handleClickOutside(event?: MouseEvent | TouchEvent | KeyboardEvent) {\n onBlur?.(event)\n\n if (!expanded) {\n return\n }\n\n toggle()\n }\n )\n\n return (\n <DropdownWrapper {...others} role=\"menubar\" ref={ref}>\n <DropdownContext.Provider value={contextValue}>\n <HiddenCloseButton disabled={disabled} onClick={toggle}>\n Close\n </HiddenCloseButton>\n <Popover strategy=\"fixed\" position={position} align={align}>\n {children}\n </Popover>\n </DropdownContext.Provider>\n </DropdownWrapper>\n )\n}\n\n/**\n * @example\n <Dropdown>\n <Dropdown.Trigger>Download</Dropdown.Trigger>\n <Dropdown.Menu\n header={<p className=\"px-2\">Header</p>}\n footer={<p className=\"px-2\">A cool footer</p>}\n >\n {[{label: 'Hello', value: 'hi'}, { label: 'World', value: 'planet' }].map(({ label, value }) => (\n <Dropdown.Item\n key={value}\n onClick={() => {\n setMessage(label)\n }}\n >\n {label}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n */\nfunction Dropdown(props: DropdownProps): JSX.Element {\n const dropdownProps = useDropdown(props)\n\n return <GenericDropdown {...props} {...dropdownProps} />\n}\n\nDropdown.Trigger = DropdownTrigger\nDropdown.Menu = DropdownMenu\nDropdown.Section = DropdownMenuSection\nDropdown.Item = DropdownMenuItem\nDropdown.Separator = DropdownSeparator\n\nexport default Dropdown\n","import { createContext } from 'react'\nimport { createSelectable } from 'hooks/useSelectable'\n\nimport type { Option, useSelectReturn } from './Select.types'\n\nconst { SelectableContext, useSelectable } = createSelectable<Option>()\n\nexport { SelectableContext, useSelectable }\n\nconst SelectContext = createContext<useSelectReturn | null>(null)\nexport { SelectContext }\n","/**\n * Helper that returns the plural form if count is different than 1, otherwise the singular one.\n * @example\n * let total = 3\n * `Item${pluralize(total)}` // \"Items\"\n * `Child${pluralize(total, 'ren')}` // \"Children\"\n * `Pe${pluralize(total, 'ople', 'rson')}` // \"People\"\n * `${pluralize(total, 'People', 'Person')}` // \"People\"\n * @param count - total of items\n * @param plural - defaults to \"s\"\n * @param singular - defaults to \"\"\n * @returns plural or singular.\n */\nexport default function pluralize(count: number, plural = 's', singular = ''): string {\n return count !== 1 ? plural : singular\n}\n","import React, { useContext, forwardRef } from 'react'\nimport styled from 'styled-components'\n\nimport { DropdownContext, DropdownTrigger, GenericDropdownTrigger } from 'components/Dropdown'\nimport { getToken as token } from 'theming'\nimport { TextField, Trailing } from 'components/TextField'\nimport focusable from 'styles/focusable'\n\nimport type { SelectTriggerProps } from './Select.types'\nimport { isFunction } from '@loadsmart/utils-function'\nimport { usePopover } from 'components/Popover'\n\nconst GenericSelectTrigger = styled(GenericDropdownTrigger)`\n background: ${token('color-neutral-white')};\n`\n\nconst SelectTriggerSearchField = styled(TextField)`\n ${focusable`\n box-shadow: none;\n `}\n\n background-color: transparent;\n\n border: none;\n border-radius: ${token('border-radius-s')} 0 0 ${token('border-radius-s')};\n\n height: ${token('select-trigger-height')};\n\n flex: 1;\n\n ${Trailing} {\n margin: 0 ${token('space-xs')} 0 0;\n }\n`\n\nconst Separator = styled.span`\n height: 100%;\n\n margin: 0;\n\n border-right-color: ${token('color-neutral-light')};\n border-right-width: 1px;\n border-right-style: solid;\n`\n\nconst SelectTrigger = forwardRef<HTMLInputElement, SelectTriggerProps>(function SelectTrigger(\n props: SelectTriggerProps,\n ref\n) {\n const { className, ...others } = props\n const { disabled, expanded, toggle } = useContext(DropdownContext)\n\n const { register } = usePopover()\n\n function handleClick() {\n if (!expanded) {\n toggle()\n }\n }\n\n return (\n <GenericSelectTrigger className={className}>\n <SelectTriggerSearchField\n {...others}\n data-testid=\"select-trigger-search-field\"\n ref={(node) => {\n if (isFunction(ref)) {\n ref(node)\n }\n\n register.setReference(node)\n }}\n type=\"search\"\n disabled={disabled}\n onClick={handleClick}\n />\n <Separator />\n <DropdownTrigger.Handle data-testid=\"select-trigger-handle\" />\n </GenericSelectTrigger>\n )\n})\n\nexport default SelectTrigger\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport KeyboardKey, { getKeyboardKey } from 'utils/toolset/keyboard'\nimport isEmpty from 'utils/toolset/isEmpty'\n\nimport type { SupportedKey } from 'utils/toolset/keyboard'\n\nexport interface useFocusTrapProps {\n onActivate?: () => void\n onDeactivate?: () => void\n keys?: SupportedKey[]\n}\n\nfunction getFocusedIndexAfterKeyPress(\n e: React.KeyboardEvent,\n currentFocused: number,\n focusableCounter: number\n): number {\n const keyHandler: Record<React.KeyboardEvent['key'], (e: React.KeyboardEvent) => number> = {\n Tab(e: React.KeyboardEvent): number {\n return e.shiftKey ? -1 : 1\n },\n ArrowUp() {\n return -1\n },\n ArrowDown() {\n return 1\n },\n }\n\n function unknownKey() {\n return 0\n }\n\n const key = getKeyboardKey(e)\n const increment = (keyHandler[key] || unknownKey)(e)\n\n if (currentFocused === -1 && increment === -1) {\n /**\n * Prevent to skip one element when the initial increment is -1\n * and `currentFocused` is -1, we don't .\n * e.g.: focus has just been activated and user presses arrow up.\n */\n return (increment + focusableCounter) % focusableCounter\n }\n\n return (currentFocused + increment + focusableCounter) % focusableCounter\n}\n\nfunction getTabbableDescendants<T extends HTMLElement>(container: T | null) {\n if (container == null) {\n return []\n }\n\n // TODO: add support for other focusable elements\n return Array.from(container.querySelectorAll('button') || [])\n}\n\n/**\n * Custom hook that limits the focusable elements within a container, when activated.\n *\n * Based on https://developer.mozilla.org/en-US/docs/Web/Accessibility/Keyboard-navigable_JavaScript_widgets.\n *\n * @param {useFocusTrapProps} props\n * @param {RefObject} props.containerRef - Ref to the container that will be the boundary for the focus trap.\n * @param {() => void} props.onActivate - Called when the focus trap is activated.\n * @param {() => void} props.onDeactivate - Called when the focus trap is deactivated.\n * @param {(KeyboardEvent['key'])[]} props.keys - Keys that will move the focus inside\n * the container (The current implementation only track focus for button elements). We current\n * support `Tab`, `ArrowUp`, and `ArrowDown` keys. If not provided, only the `Tab` key will be used.\n * @returns {Object}\n */\nfunction useFocusTrap<T extends HTMLElement>(\n props: useFocusTrapProps\n): {\n containerRef: (container: T | null) => void\n active: boolean\n activate: () => void\n deactivate: () => void\n} {\n const { keys, onActivate, onDeactivate } = props\n\n const [active, setActive] = useState(false)\n const [currentFocused, setCurrentFocused] = useState(-1)\n const mutationObserverRef = useRef<MutationObserver>()\n const [focusableDescendants, setFocusableDescendants] = useState<HTMLElement[]>([])\n\n function subscribeToDOMMutationEvents(container: HTMLElement) {\n mutationObserverRef.current = new MutationObserver(function () {\n setFocusableDescendants(getTabbableDescendants(container))\n })\n\n mutationObserverRef.current.observe(container, { childList: true })\n }\n\n function unsubscribeToDOMMutationEvents() {\n setCurrentFocused(-1)\n if (mutationObserverRef.current) {\n mutationObserverRef.current?.disconnect()\n }\n }\n\n const containerRef = useCallback(function initialize(container: HTMLElement | null) {\n if (container != null) {\n setFocusableDescendants(getTabbableDescendants(container))\n subscribeToDOMMutationEvents(container)\n } else {\n unsubscribeToDOMMutationEvents()\n }\n }, [])\n\n useEffect(function onMount() {\n return function onUnmount() {\n unsubscribeToDOMMutationEvents()\n }\n }, [])\n\n useEffect(\n function subscribeToKeyEvents() {\n function handleKeyDownEvent(evt: KeyboardEvent) {\n /**\n * Brace yourselves for the nasty casting from globalThis.KeyboardEvent, which is\n * the type used in the `addEventListener` callback, to React.KeyboardEvent ¯\\_(ツ)_/¯\n */\n const e = evt as unknown as React.KeyboardEvent\n\n const supportedKeys = [...(keys || ['TAB'])]\n\n if (!KeyboardKey(e).is(supportedKeys) || isEmpty(focusableDescendants)) {\n return\n }\n\n e.preventDefault()\n\n const newCurrentFocused = getFocusedIndexAfterKeyPress(\n e,\n currentFocused,\n focusableDescendants.length\n )\n setCurrentFocused(newCurrentFocused)\n focusableDescendants[newCurrentFocused].focus()\n }\n\n function subscribe() {\n document.addEventListener('keydown', handleKeyDownEvent)\n }\n\n function unsubscribe() {\n document.removeEventListener('keydown', handleKeyDownEvent)\n }\n\n if (active) {\n subscribe()\n }\n\n return function unsubscribeToKeyEvents() {\n unsubscribe()\n }\n },\n [active, keys, currentFocused, focusableDescendants]\n )\n\n const activate = useCallback(\n function activate() {\n setActive(true)\n onActivate?.()\n },\n [onActivate]\n )\n\n const deactivate = useCallback(\n function deactivate() {\n setActive(false)\n onDeactivate?.()\n },\n [onDeactivate]\n )\n\n return {\n containerRef,\n active,\n activate,\n deactivate,\n }\n}\n\nexport default useFocusTrap\n","import get from 'utils/toolset/get'\n\nimport type { SelectAdapter } from './Select.types'\n\nexport const GenericAdapter: SelectAdapter<unknown> = {\n getKey(o): string {\n return get(o, 'value') as string\n },\n getLabel(o): string {\n return get(o, 'label') as string\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { GenericAdapter } from './Select.constants'\nimport isEmpty from 'utils/toolset/isEmpty'\nimport toArray from 'utils/toolset/toArray'\n\nimport type { SelectAdapter, SelectValue, Option, Adapters, SelectProps } from './Select.types'\n\nexport function getAdapter(adapters: Adapters, type?: string): SelectAdapter<any> {\n if (type == null) {\n return GenericAdapter\n }\n\n return adapters[type] || GenericAdapter\n}\n\nexport function getValue(selection: SelectValue, multiple?: boolean): Option | Option[] | null {\n const pairs = Array.from(selection)\n\n if (isEmpty(pairs)) {\n return null\n }\n\n if (multiple) {\n const options = []\n for (const [, option] of pairs) {\n options.push(option)\n }\n\n return options\n } else {\n const [[, option]] = pairs\n return option\n }\n}\n\nexport function toSelection(value: SelectProps['value']): Option[] {\n const safeValue = toArray(value || [])\n\n return safeValue.filter((option) => !isEmpty(option))\n}\n\nexport function getDisplayValue(\n adapters: Adapters,\n selection: SelectValue,\n multiple?: boolean\n): string {\n if (selection.size == 0) {\n return ''\n }\n\n if (multiple) {\n return ''\n } else {\n const value = getValue(selection, multiple)\n const adapter = getAdapter(adapters, (value as Option)._type)\n return adapter.getLabel(value) ?? ''\n }\n}\n\n// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\nexport function escapeRegExp(value: string): string {\n return String(value || '').replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isFunction } from '@loadsmart/utils-function'\nimport { isNil } from '@loadsmart/utils-object'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport isEmpty from 'utils/toolset/isEmpty'\nimport { useDropdown } from 'components/Dropdown'\nimport { useDidMount } from 'hooks/useDidMount'\nimport { useFocusTrap } from 'hooks/useFocusTrap'\nimport type { SelectableKeyType } from 'hooks/useSelectable'\nimport to from 'utils/toolset/awaitTo'\nimport { isThenable } from 'utils/toolset/isThenable'\nimport toArray from 'utils/toolset/toArray'\nimport { GenericAdapter } from './Select.constants'\nimport { useSelectable } from './Select.context'\nimport {\n escapeRegExp,\n getAdapter,\n getDisplayValue,\n getValue,\n toSelection,\n} from './useSelect.helpers'\n\nimport type { ChangeEvent, FocusEvent } from 'react'\nimport type {\n Adapters,\n GenericOption,\n Option,\n SelectDatasource,\n SelectDatasourceFunction,\n SelectProps,\n SelectStatus,\n SelectValue,\n useSelectReturn,\n} from './Select.types'\n\nasync function getData(datasources: SelectDatasource<any>[], query: string) {\n const regex = new RegExp(escapeRegExp(query), 'i')\n\n const promises = []\n const types: string[] = []\n\n for (const ds of datasources) {\n promises.push(Promise.resolve(ds.fetch({ query, regex })))\n types.push(ds.type)\n }\n\n // We use Promise.allSettled here because Promise.all rejects as soon as one promise fails\n // But we want to continue with the next datasource when one fails.\n const results = await Promise.allSettled(promises)\n\n let items: Option[] = []\n\n results.forEach((result, index) => {\n if (result.status === 'rejected') {\n return\n }\n\n const type = types[index]\n\n items = items.concat(\n (result.value || []).map((item) => {\n return {\n ...item,\n _type: type,\n } as Option\n })\n )\n })\n\n return items\n}\n\nfunction getDatasources(props: SelectProps) {\n function getDatasourceFromOptions(\n options?: GenericOption[] | null\n ): SelectDatasourceFunction<any>[] {\n if (!options) {\n return []\n }\n\n return [\n function useGenericDatasource() {\n return {\n type: 'generic',\n adapter: GenericAdapter,\n fetch: function fetch({ regex }) {\n return options.filter(({ label }) => regex.test(label))\n },\n }\n },\n ]\n }\n\n let datasources: SelectDatasourceFunction<any>[] = []\n\n datasources = datasources.concat(props.datasources || [])\n datasources = datasources.concat(getDatasourceFromOptions(props.options))\n\n return datasources.map((ds) => ds())\n}\n\nfunction extractAdapters(datasources: SelectDatasource<any>[]) {\n return toArray(datasources).reduce((map, ds) => {\n return {\n ...map,\n [ds.type]: ds.adapter,\n }\n }, {})\n}\n\nfunction TriggerOnFocusHandler(e: FocusEvent<HTMLInputElement>) {\n e.target.select()\n}\n\nfunction mapOptions(items: Option[], adapters: Adapters) {\n const options = new Map<SelectableKeyType, Option>()\n\n items.forEach((item) => {\n const adapter = getAdapter(adapters, item._type)\n options.set(adapter.getKey(item), item)\n })\n\n return options\n}\n\nfunction useOptions<T = any>(props: { datasources: SelectDatasource<T>[]; adapters: Adapters }) {\n const { datasources, adapters } = props\n const [options, setOptions] = useState(new Map<SelectableKeyType, Option>())\n const [status, setStatus] = useState<SelectStatus>('idle')\n\n const timeoutRef = useRef<NodeJS.Timeout>()\n\n function cancelPendingFetch() {\n if (timeoutRef.current != null) {\n clearTimeout(timeoutRef.current)\n }\n }\n\n const fetchAfterTimeout = useCallback(\n function fetchAfterTimeout(query: string) {\n cancelPendingFetch()\n /**\n * The `pending-query` status represents that the 'fetching' has been started\n * but it has been debounced and the internal fetch has not yet been called.\n * This is important because at this point the status is not idle\n * as the fetching has already started.\n */\n setStatus('pending-query')\n\n async function fetch() {\n setOptions(new Map<SelectableKeyType, Option>())\n setStatus('querying')\n\n const items = await getData(datasources, query)\n\n setOptions(mapOptions(items, adapters))\n setStatus('queried')\n }\n\n timeoutRef.current = setTimeout(() => void fetch(), 750)\n },\n [adapters, datasources]\n )\n\n const clear = useCallback(function clear() {\n setStatus('idle')\n setOptions(new Map<SelectableKeyType, Option>())\n }, [])\n\n const get = useCallback(\n function get() {\n return Array.from(options.values())\n },\n [options]\n )\n\n const reset = useCallback(\n function reset() {\n clear()\n fetchAfterTimeout('')\n },\n [clear, fetchAfterTimeout]\n )\n\n const getOptionByKey = useCallback(\n function getOptionByKey(key: SelectableKeyType) {\n return options.get(key)\n },\n [options]\n )\n\n useEffect(() => {\n return () => {\n cancelPendingFetch()\n }\n }, [])\n\n return {\n get,\n fetch: fetchAfterTimeout,\n clear,\n status,\n getOptionByKey,\n reset,\n }\n}\n\n// TODO: keep adapter resolution in a single place\n// TODO: prevent state changes after unmount (`useMounted` hook from Alice Frontend)\n/**\n * Based on https://www.w3.org/TR/wai-aria-practices-1.1/examples/combobox/aria1.1pattern/listbox-combo.html\n * @param props\n * @returns\n */\nfunction useSelect(props: SelectProps): useSelectReturn {\n const didMount = useDidMount()\n const {\n multiple,\n onQueryChange,\n onChange,\n onCreate,\n getInputProps,\n id,\n name,\n disabled = false,\n onBlur,\n isValidNewOption = (query: string) => Boolean(query),\n createOptionPosition = 'last',\n } = props\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const datasources = useMemo<SelectDatasource<any>[]>(\n () => getDatasources(props),\n [props.datasources, props.options]\n )\n const adapters = useMemo<Adapters>(() => extractAdapters(datasources), [datasources])\n\n const selectable = useSelectable({\n selected: toSelection(props.value),\n multiple,\n adapters,\n onChange: useCallback(\n function handleSelectionChange(selected: SelectValue) {\n onChange?.({ target: { id, name, value: getValue(selected, multiple) } })\n },\n [id, multiple, name, onChange]\n ),\n })\n\n const triggerRef = useRef<HTMLInputElement>()\n const focusTrap = useFocusTrap({\n keys: ['ARROW_UP', 'ARROW_DOWN'],\n onDeactivate() {\n triggerRef.current?.focus()\n },\n })\n\n const [queryTyped, setQueryTyped] = useState(false)\n const [query, setQuery] = useState<string>(\n getDisplayValue(adapters, selectable.selected, multiple)\n )\n const options = useOptions({ datasources, adapters })\n\n const expandDisabled = useMemo(\n () =>\n !query.length &&\n isEmpty(options.get()) &&\n isEmpty(selectable.selected) &&\n isFunction(isValidNewOption)\n ? !isValidNewOption(query)\n : !isValidNewOption,\n [query, options, selectable.selected, isValidNewOption]\n )\n\n const dropdown = useDropdown({ ...props, expandDisabled })\n\n useEffect(() => {\n if (queryTyped) {\n options.fetch(query)\n dropdown.expand()\n }\n }, [query, queryTyped])\n\n const getSelectableOption = useCallback(\n function getSelectableOption(option: Option) {\n const adapter = getAdapter(adapters, option._type)\n\n const value = adapter.getKey(option)\n const label = adapter.getLabel(option)\n const checked = selectable.selected.has(value)\n\n return { label, value, checked }\n },\n [adapters, selectable.selected]\n )\n\n const getOption = useCallback(\n function getOption(value: SelectableKeyType) {\n let option = options.getOptionByKey(value)\n\n if (!option) {\n option = selectable.selected.get(value)\n }\n\n return option\n },\n [options, selectable.selected]\n )\n\n const toggleOption = useCallback(\n function toggleOption(option: Option) {\n selectable.toggle(option)\n },\n [selectable]\n )\n\n const getDropdownProps = useCallback(\n function getDropdownProps() {\n return {\n toggle: dropdown.toggle,\n expanded: dropdown.expanded,\n onBlur(event?: MouseEvent | TouchEvent | KeyboardEvent) {\n setQueryTyped(false)\n\n if (!multiple) {\n setQuery(getDisplayValue(adapters, selectable.selected, multiple))\n } else {\n setQuery('')\n }\n options.reset()\n onBlur?.(event)\n },\n expandDisabled,\n }\n },\n [\n adapters,\n dropdown.expanded,\n dropdown.toggle,\n multiple,\n options,\n selectable.selected,\n onBlur,\n expandDisabled,\n ]\n )\n\n const getTriggerProps = useCallback(\n function getTriggerProps() {\n return {\n ...getInputProps?.(),\n id,\n ref(node: HTMLInputElement | null) {\n if (node != null) {\n triggerRef.current = node\n }\n },\n value: query,\n onChange(e: ChangeEvent<HTMLInputElement>) {\n const sanitizedValue = e.target.value.replace(/\\s+/, '')\n\n setQueryTyped(sanitizedValue !== '')\n onQueryChange?.(e)\n setQuery(e.target.value)\n },\n onFocus: TriggerOnFocusHandler,\n }\n },\n [id, query, onQueryChange, dropdown, options, selectable.selected]\n )\n\n const getClearProps = useCallback(\n function getClearProps() {\n return {\n onClick() {\n setQueryTyped(false)\n setQuery('')\n selectable.clear()\n options.reset()\n triggerRef.current?.focus()\n },\n }\n },\n [options, selectable]\n )\n\n const getMenuProps = useCallback(\n function getMenuProps() {\n return {\n ref: focusTrap.containerRef,\n role: 'listbox',\n }\n },\n [focusTrap.containerRef]\n )\n\n const getOptionProps = useCallback(\n function getOptionProps({ option }: { option: Option }) {\n const { value, checked, label } = getSelectableOption(option)\n\n return {\n role: 'option',\n 'aria-selected': checked,\n id: String(value),\n onClick() {\n setQueryTyped(false)\n\n if (!multiple) {\n setQueryTyped(false)\n }\n toggleOption(option)\n\n return multiple\n },\n tabIndex: -1,\n }\n },\n [getSelectableOption, toggleOption, multiple]\n )\n\n const getCreatebleProps = useCallback(\n function getCreatebleProps() {\n return {\n onClick: function onClick() {\n async function asyncOnClick() {\n if (!isFunction(onCreate)) return\n\n const onCreateReturn = onCreate(query)\n\n let option\n if (onCreateReturn) {\n if (isThenable(onCreateReturn)) {\n option = await onCreateReturn\n } else {\n option = onCreateReturn\n }\n }\n\n options.fetch(query)\n\n if (option) {\n toggleOption(option)\n }\n }\n\n void asyncOnClick()\n\n return multiple\n },\n tabIndex: -1,\n }\n },\n [multiple, onCreate, query, options, toggleOption]\n )\n\n const isCreatable = useCallback(\n function isCreatable() {\n const findByLabel = (item: Option) =>\n getSelectableOption(item).label.toLocaleLowerCase() === query.toLocaleLowerCase()\n\n function isQueryEqualAnOption() {\n return !isNil(\n [...options.get(), ...Array.from(selectable.selected.values())].find(findByLabel)\n )\n }\n\n function getIsValidNewOption() {\n if (isFunction(isValidNewOption)) {\n return isValidNewOption(query) && !isQueryEqualAnOption()\n }\n\n return isValidNewOption\n }\n\n return isFunction(onCreate) && options.status === 'queried' && getIsValidNewOption()\n },\n [getSelectableOption, isValidNewOption, onCreate, options, query, selectable.selected]\n )\n\n useEffect(\n function onInit() {\n options.fetch('')\n },\n // we just want to load any initial options that a datasource may have available\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [datasources]\n )\n\n useEffect(\n function onDropdownToggle() {\n if (!props.autoFocus && !didMount) {\n return\n }\n if (dropdown.expanded) {\n focusTrap.activate()\n } else {\n focusTrap.deactivate()\n }\n },\n /**\n * We are interested in activating/deactivating our\n * focus trap when the dropdown changes its expanded state.\n */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dropdown.expanded]\n )\n\n useEffect(\n function updateOnSelectedChange() {\n if (!multiple) {\n setQuery(getDisplayValue(adapters, selectable.selected, multiple))\n }\n },\n [adapters, multiple, selectable.selected]\n )\n\n return {\n status: options.status,\n options: options.get(),\n value: getValue(selectable.selected, multiple),\n query,\n disabled,\n\n selectable,\n\n getMenuProps,\n getSelectableOption,\n getOption,\n getOptionProps,\n getTriggerProps,\n getClearProps,\n getDropdownProps,\n getCreatebleProps,\n isCreatable,\n createOptionPosition,\n }\n}\n\nexport default useSelect\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { isObject } from '@loadsmart/utils-object'\nimport { isFunction } from '@loadsmart/utils-function'\n\ninterface Thenable {\n then(): any\n}\n\n// TODO: add this helper to @loadsmart/utils\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function isThenable(object: any): object is Thenable {\n return isObject(object) && isFunction((object as Thenable)['then'])\n}\n","import React, { HTMLAttributes } from 'react'\nimport styled from 'styled-components'\nimport { getToken as token } from 'theming'\n\nimport highlightMatch from 'utils/toolset/highlightMatch'\n\nexport type HighlightMatchProps = {\n text: string\n match: string\n} & HTMLAttributes<HTMLSpanElement>\n\nconst HighlightMatchWrapper = styled.span`\n /* highlightMatch splits the label into separate HTML elements, thus we need\n to preserve white-spaces, otherwise the browser wouldn't render them. */\n white-space: pre;\n\n mark {\n color: inherit;\n font-weight: ${token('font-weight-bold')};\n\n background-color: ${token('color-transparent')};\n }\n`\n\nconst HighlightMatch = ({ text, match, ...props }: HighlightMatchProps): JSX.Element => {\n return <HighlightMatchWrapper {...props}>{highlightMatch(text, match)}</HighlightMatchWrapper>\n}\n\nexport default HighlightMatch\n","import React from 'react'\n\n/**\n * A function that wraps a match into `mark` element to be highlighted.\n * @example\n *\n * @param {string} - label to be split\n * @param {string} - match to be found\n * @returns {ReactNode} - an element with marked match\n */\nexport default function highlightMatch(str: string, match: string): JSX.Element {\n if (str == null || match == null) {\n return <>{str}</>\n }\n\n // the explicit coercion here ensures that we'll be dealing with strings even in vanilla JS code\n const index = String(str).toLowerCase().indexOf(String(match).toLowerCase())\n\n if (index === -1) return <>{str}</>\n\n const pre = str.slice(0, index)\n const mid = str.slice(index, index + match.length)\n const post = str.slice(index + match.length)\n\n return (\n <>\n {pre}\n <mark>{mid}</mark>\n {post}\n </>\n )\n}\n","import React, { useContext } from 'react'\nimport styled from 'styled-components'\n\nimport { Checkbox } from 'components/Checkbox'\nimport { Dropdown } from 'components/Dropdown'\nimport { HighlightMatch } from 'components/HighlightMatch'\nimport { Icon as DefaultIcon } from 'components/Icon'\nimport { Group as DefaultGroup } from 'components/Layout'\nimport conditional, { whenProps } from 'tools/conditional'\nimport { getToken as token } from 'theming'\n\nimport { SelectContext } from './Select.context'\n\nimport type { DropdownMenuItemProps } from 'components/Dropdown'\nimport type { SelectOptionProps } from './Select.types'\n\nconst Group = styled(DefaultGroup).attrs({\n as: 'span',\n})`\n /* placeholder */\n`\n\nconst Icon = styled(DefaultIcon)`\n color: ${token('select-selected-option-check-color')};\n`\n\nconst DefaultSelectOption = styled(Dropdown.Item)<DropdownMenuItemProps>`\n background: ${conditional({\n 'select-selected-option-background-color': whenProps({ 'aria-selected': true }),\n 'color-neutral-white': whenProps({ 'aria-selected': false }),\n })};\n`\n\nfunction SelectOption({\n children,\n value,\n leading,\n trailing,\n ...rest\n}: SelectOptionProps): JSX.Element {\n const select =\n useContext(SelectContext) ||\n (() => {\n throw new Error('Options should be wrapped in a SelectContext')\n })()\n\n const type = select.selectable.type()\n const option = select.getOption(value) || {}\n const { checked, label } = select.getSelectableOption(option)\n\n function renderContent() {\n if (children) return children\n if (checked && type === 'multiple') return label\n\n return <HighlightMatch text={label} match={select.query} />\n }\n\n return (\n <DefaultSelectOption\n {...rest}\n {...select.getOptionProps({ option })}\n leading={\n type === 'multiple' ? (\n <Group align=\"center\" space=\"s\">\n <Checkbox scale=\"small\" defaultChecked={checked} />\n {leading}\n </Group>\n ) : (\n leading\n )\n }\n trailing={type === 'single' ? checked ? <Icon name=\"check\" /> : null : trailing}\n >\n {renderContent()}\n </DefaultSelectOption>\n )\n}\n\nexport default SelectOption\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport type { SelectEmptyProps } from './Select.types'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n box-sizing: border-box;\n margin: 0 ${token('space-s')};\n padding: ${token('space-s')};\n\n color: ${token('color-neutral')};\n\n font-size: 1em;\n line-height: ${token('font-height-3')};\n\n background: ${token('color-transparent')};\n`\n\nfunction SelectEmpty({ children, ...others }: SelectEmptyProps): JSX.Element {\n return <Wrapper {...others}>{children}</Wrapper>\n}\n\nexport default SelectEmpty\n","import React, { useContext } from 'react'\nimport { Dropdown } from 'components/Dropdown'\nimport { SelectContext } from './Select.context'\nimport type { SelectCreatableOptionProps } from './Select.types'\n\nfunction SelectCreatableOption({ children, ...rest }: SelectCreatableOptionProps): JSX.Element {\n const select =\n useContext(SelectContext) ||\n (() => {\n throw new Error('SelectCreatableOption should be wrapped in a SelectContext')\n })()\n\n return (\n <Dropdown.Item {...rest} {...select.getCreatebleProps()}>\n {children || `Add \"${select.query}\"`}\n </Dropdown.Item>\n )\n}\n\nexport default SelectCreatableOption\n","import type { Components, CreatableOptionType } from './Select.types'\nimport SelectCreatableOption from './SelectCreatableOption'\nimport SelectEmpty from './SelectEmpty'\nimport SelectOption from './SelectOption'\n\nconst defaultComponents = {\n Option: SelectOption,\n Empty: SelectEmpty,\n CreatableOption: SelectCreatableOption as CreatableOptionType,\n}\n\nexport function getComponents(components?: Components): Required<Components> {\n return { ...defaultComponents, ...components }\n}\n","import React, { Fragment, forwardRef } from 'react'\nimport styled from 'styled-components'\n\nimport { Dropdown, GenericDropdown } from 'components/Dropdown'\nimport { getToken as token } from 'theming'\nimport { SelectableContext, SelectContext } from './Select.context'\nimport { Tag } from 'components/Tag'\nimport { Text } from 'components/Text'\nimport CloseButton from 'common/CloseButton'\nimport isEmpty from 'utils/toolset/isEmpty'\nimport omit from 'utils/toolset/omit'\nimport pluralize from 'utils/toolset/pluralize'\nimport SelectTrigger from './SelectTrigger'\nimport toArray from 'utils/toolset/toArray'\nimport useSelect from './useSelect'\nimport SelectOption from './SelectOption'\nimport SelectEmpty from './SelectEmpty'\nimport SelectCreatableOption from './SelectCreatableOption'\nimport { getComponents } from './components'\n\nimport type { DropdownMenuProps } from 'components/Dropdown'\nimport type {\n SelectProps,\n useSelectReturn,\n SelectStatus,\n Components,\n SelectableOption,\n} from './Select.types'\n\nconst OMITTED_PROPS = [\n 'id',\n 'name',\n 'datasources',\n 'onChange',\n 'onQueryChange',\n 'onCreate',\n 'options',\n 'value',\n]\n\nconst Loading = styled.span`\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n width: 2em;\n\n height: 2em;\n padding: ${token('space-xs')};\n\n font-size: ${token('font-size-3')};\n`\n\nfunction getCommonClearButtonProps() {\n return {\n 'data-testid': 'select-trigger-clear',\n }\n}\n\nconst SelectMenu = forwardRef<HTMLDivElement, DropdownMenuProps>(function SelectMenu(\n props: DropdownMenuProps,\n ref\n): JSX.Element {\n return <Dropdown.Menu ref={ref} {...props} role=\"listbox\" />\n})\n\nfunction ClearMultiple({ select }: { select: useSelectReturn }) {\n const { onClick } = select.getClearProps()\n const total = toArray(select.value).length\n\n return (\n <div data-testid=\"select-trigger-clear-counter\">\n <Tag\n removable\n size=\"default\"\n variant=\"accent\"\n onRemove={onClick}\n title={`${total} selected option${pluralize(total)}`}\n getRemoveButtonProps={getCommonClearButtonProps}\n disabled={select.disabled}\n >\n {total}\n </Tag>\n </div>\n )\n}\n\nconst Divider = styled.hr`\n width: calc(100% - ${token('space-m')});\n height: 1px;\n margin: ${token('space-m')} ${token('space-s')};\n\n background-color: ${token('color-neutral-lighter')};\n border: 0;\n`\n\nconst DividerText = styled(Text)`\n position: absolute;\n top: ${token('space-s')};\n\n padding-right: ${token('space-xs')};\n padding-left: ${token('space-m')};\n\n background-color: ${token('color-neutral-white')};\n`\n\nfunction isQuerying(status: SelectStatus) {\n return ['pending-query', 'querying'].includes(status)\n}\n\ntype SeparatorProps = {\n status: SelectStatus\n after?: unknown[]\n before?: unknown[]\n}\n\nfunction Separator({ status, after = [], before = [] }: SeparatorProps): JSX.Element {\n if (!isQuerying(status)) {\n if (isEmpty(after) && !isEmpty(before)) return <Divider />\n if (isEmpty(after)) return <Fragment />\n }\n\n return (\n <div style={{ position: 'relative' }}>\n <Divider />\n <DividerText variant=\"caption-bold\" color=\"color-neutral-light\">\n {isQuerying(status) ? 'Loading...' : `${after.length} option${pluralize(after.length)}`}\n </DividerText>\n </div>\n )\n}\n\nfunction renderOptionsSingle(select: useSelectReturn, components?: Components): JSX.Element {\n const { Option, Empty, CreatableOption } = getComponents(components)\n const isCreatable = select.isCreatable()\n\n if (isQuerying(select.status) && isEmpty(select.options)) {\n return <SelectEmpty>Loading...</SelectEmpty>\n }\n\n if (isEmpty(select.options)) {\n if (isCreatable) {\n return <CreatableOption />\n }\n\n return <Empty>No results found.</Empty>\n }\n\n return (\n <>\n {select.createOptionPosition === 'first' && isCreatable ? <CreatableOption /> : null}\n {select.options.map((option) => {\n const { value } = select.getSelectableOption(option)\n return <Option key={String(value)} value={value} />\n })}\n {select.createOptionPosition === 'last' && isCreatable ? <CreatableOption /> : null}\n </>\n )\n}\n\nfunction renderOptionsMultiple(select: useSelectReturn, components?: Components): JSX.Element {\n const { Option, Empty, CreatableOption } = getComponents(components)\n const isCreatable = select.isCreatable()\n\n const selectedOptions = Array.from(select.selectable.selected.values()).map((selectable) =>\n select.getSelectableOption(selectable)\n )\n\n const remainingOptions = select.options.reduce((remaining, selectable) => {\n const option = select.getSelectableOption(selectable)\n\n if (option.checked) {\n return remaining\n }\n\n return [...remaining, option]\n }, [] as SelectableOption[])\n\n let remaining = (\n <Fragment>\n {select.createOptionPosition === 'first' && isCreatable ? <CreatableOption /> : null}\n {remainingOptions.map((option) => (\n <Option key={String(option.value)} value={option.value} />\n ))}\n {select.createOptionPosition === 'last' && isCreatable ? <CreatableOption /> : null}\n </Fragment>\n )\n\n if (!isQuerying(select.status) && isEmpty(remainingOptions)) {\n remaining = isCreatable ? <CreatableOption /> : <Empty>No more options.</Empty>\n }\n\n if (!isQuerying(select.status) && isEmpty(select.options)) {\n remaining = isCreatable ? <CreatableOption /> : <Empty>No results found.</Empty>\n }\n\n return (\n <Fragment>\n {selectedOptions.map((option) => (\n <Option key={String(option.value)} value={option.value} />\n ))}\n <Separator status={select.status} before={selectedOptions} after={remainingOptions} />\n {remaining}\n </Fragment>\n )\n}\n\nfunction Select(props: SelectProps): JSX.Element {\n const { multiple, placeholder, components, hideClear = false, ...others } = props\n\n const select = useSelect(props)\n\n function renderOptions() {\n if (multiple) {\n return renderOptionsMultiple(select, components)\n }\n\n return renderOptionsSingle(select, components)\n }\n\n function getTrailing() {\n if (isQuerying(select.status)) {\n return <Loading data-testid=\"select-trigger-loading\">···</Loading>\n }\n\n if (!select.value) {\n return null\n }\n\n if (multiple) {\n return <ClearMultiple select={select} />\n }\n\n if (select.disabled || hideClear) {\n return null\n }\n\n return (\n <CloseButton\n size={12}\n {...getCommonClearButtonProps()}\n {...select.getClearProps()}\n type=\"button\"\n />\n )\n }\n\n return (\n <GenericDropdown {...omit(others, OMITTED_PROPS)} {...select.getDropdownProps()}>\n <SelectableContext.Provider value={select.selectable}>\n <SelectTrigger\n {...select.getTriggerProps()}\n trailing={getTrailing()}\n placeholder={placeholder}\n autoComplete=\"off\"\n aria-autocomplete=\"none\"\n />\n <SelectMenu {...select.getMenuProps()}>\n <SelectContext.Provider value={select}>{renderOptions()}</SelectContext.Provider>\n </SelectMenu>\n </SelectableContext.Provider>\n </GenericDropdown>\n )\n}\n\nSelect.Trigger = SelectTrigger\nSelect.Option = SelectOption\nSelect.Empty = SelectEmpty\nSelect.CreatableOption = SelectCreatableOption\n\nexport default Select\n","import React from 'react'\nimport type { PropsWithChildren } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { BaseLink } from 'components/Link'\n\nexport type LogoProps = PropsWithChildren<{\n url: string\n className?: string\n}>\n\nconst Container = styled.div`\n padding-right: ${token('space-l')};\n padding-left: ${token('space-l')};\n`\n\nfunction Logo({ className, url, children }: LogoProps): JSX.Element {\n return (\n <Container className={className}>\n <BaseLink href={url}>{children}</BaseLink>\n </Container>\n )\n}\n\nexport default styled(Logo)<LogoProps>({})\n","import { RefObject, useEffect, useLayoutEffect, useReducer, useState } from 'react'\nimport type { CSSProperties } from 'styled-components'\n\nimport { useDidMount } from 'hooks/useDidMount'\n\nfunction updateHeight(set: (value: number) => void, el: HTMLElement | null) {\n if (el) {\n const { height } = el.getBoundingClientRect()\n set(height)\n }\n}\n\nexport type HeightExpansionToggler = {\n expanded: boolean\n toggle: () => void\n height: CSSProperties['height']\n}\n\n/**\n * A React Hook to help you expand or collapse an element by\n * checking its total height and controlling a boolean flag\n * @param {React.RefObject} targetElRef - Ref of the wrapper element\n */\nfunction useHeightExpansionToggler(targetElRef: RefObject<HTMLElement>): HeightExpansionToggler {\n const [state, toggleState] = useReducer((prevState) => !prevState, false)\n const [totalHeight, setTotalHeight] = useState<CSSProperties['height']>(0)\n\n useLayoutEffect(() => {\n updateHeight(setTotalHeight, targetElRef.current)\n }, [targetElRef])\n\n useEffect(() => {\n const observer = new MutationObserver(() => {\n updateHeight(setTotalHeight, targetElRef.current)\n })\n\n if (targetElRef.current) {\n observer.observe(targetElRef.current, { childList: true })\n }\n\n return () => observer.disconnect()\n }, [targetElRef])\n\n const mounted = useDidMount()\n const finalHeight = !mounted ? 'auto' : state ? totalHeight : 0\n\n return {\n expanded: state,\n toggle: toggleState,\n height: finalHeight,\n }\n}\n\nexport default useHeightExpansionToggler\n","import React from 'react'\nimport type { ReactNode, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nimport focusable from 'styles/focusable'\nimport transition from 'styles/transition'\nimport { getToken as token } from 'theming'\nimport rem from 'utils/toolset/rem'\nimport type { MenuLinkProps } from './MenuLink'\n\nexport type MenuBaseItemProps = HTMLAttributes<HTMLElement> & {\n label: string\n leading?: ReactNode\n trailing?: ReactNode\n url?: string\n subItems?: MenuLinkProps[]\n}\n\nconst StyledMenuItem = styled.button`\n ${transition({ duration: '0.25s' })};\n\n display: flex;\n width: 100%;\n align-items: center;\n justify-content: space-between;\n padding: ${token('space-s')} 0;\n padding-right: ${rem('12px')};\n padding-left: ${token('space-l')};\n\n color: ${token('color-neutral-white')};\n font-weight: ${token('font-weight-bold')};\n font-size: ${token('font-size-4')};\n line-height: ${token('font-height-3')};\n\n cursor: pointer;\n\n ${focusable`\n color: ${token('side-navigation-menu-item-color--focus')};\n `}\n`\n\nconst Leading = styled.div`\n display: flex;\n align-items: center;\n padding-right: ${token('space-s')};\n`\n\nconst Flex = styled.div`\n display: flex;\n`\n\nfunction MenuBaseItem({ label, leading, trailing, ...props }: MenuBaseItemProps): JSX.Element {\n return (\n <StyledMenuItem {...props}>\n <Flex>\n {leading && <Leading>{leading}</Leading>}\n {label}\n </Flex>\n {trailing && trailing}\n </StyledMenuItem>\n )\n}\n\nexport default MenuBaseItem\n","import React from 'react'\nimport type { ReactNode } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport hoverable from 'styles/hoverable'\nimport MenuBaseItem from './MenuBaseItem'\n\nconst StyledMenuItem = styled(({ url, ...props }) => (\n <MenuBaseItem as={url ? 'a' : 'button'} {...props} />\n))`\n ${hoverable`\n color: ${token('side-navigation-menu-link-color--hover')};\n `}\n\n ${({ active }) =>\n active\n ? css`\n background-color: ${token('side-navigation-menu-link-background-color--active')};\n box-shadow: inset ${token('space-xs')} 0\n ${token('side-navigation-menu-link-box-shadow-color--active')};\n `\n : ''}\n`\n\nexport type MenuLinkProps = React.HTMLAttributes<HTMLAnchorElement> & {\n label: string\n leading?: ReactNode\n trailing?: ReactNode\n url?: string\n}\n\nfunction MenuLink({ url, ...props }: MenuLinkProps): JSX.Element {\n return <StyledMenuItem href={url} url={url} {...props} role=\"menuitem\" />\n}\n\nexport default styled(MenuLink)({})\n","import React, { Fragment, useRef } from 'react'\nimport type { PropsWithChildren, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\nimport type { CSSProperties } from 'styled-components'\n\nimport { Icon } from 'components/Icon'\nimport { conditional, whenProps, prop } from 'tools/index'\nimport { getToken as token } from 'theming'\nimport transition from 'styles/transition'\nimport { useHeightExpansionToggler } from 'hooks/useHeightExpansionToggler'\n\nimport MenuLink from './MenuLink'\nimport MenuBaseItem from './MenuBaseItem'\n\ninterface IExpandable {\n $expanded?: boolean\n $height?: CSSProperties['height']\n}\n\nconst IconWrapper = styled.div`\n display: flex;\n align-items: center;\n margin-left: ${token('space-s')};\n`\n\nconst StyledIcon = styled(Icon)<IExpandable>`\n color: ${token('color-neutral')};\n\n transform: rotate(\n ${conditional({\n '0deg': whenProps({ $expanded: true }),\n '-90deg': whenProps({ $expanded: false }),\n })}\n );\n`\n\nconst ExpandableItems = styled.div<IExpandable>`\n overflow: hidden;\n ${transition({ property: 'height' })}\n\n height: ${prop('$height', 0)}px;\n\n ${MenuLink} {\n padding-left: ${token('space-xl')};\n }\n`\n\nconst ItemsWrapper = styled.div<IExpandable>`\n ${transition()}\n\n opacity: ${conditional({\n 0: whenProps({ $expanded: false }),\n 1: whenProps({ $expanded: true }),\n })};\n\n transform: translateY(\n ${conditional({\n '-10%': whenProps({ $expanded: false }),\n '0%': whenProps({ $expanded: true }),\n })}\n );\n`\n\nexport type MenuExpandableProps = HTMLAttributes<HTMLDivElement> &\n PropsWithChildren<{\n label: string\n }>\n\nfunction MenuExpandable({ label, children, ...props }: MenuExpandableProps): JSX.Element {\n const expandableItemsRef = useRef<HTMLDivElement>(null)\n const { expanded, toggle, height } = useHeightExpansionToggler(expandableItemsRef)\n\n return (\n <div {...props} role=\"none\">\n <MenuBaseItem\n onClick={toggle}\n label={label}\n trailing={\n <IconWrapper>\n <StyledIcon $expanded={expanded} name=\"chevron-down\" size={16} />\n </IconWrapper>\n }\n aria-haspopup=\"true\"\n aria-expanded={expanded}\n />\n <ExpandableItems $height={height} role=\"menu\">\n <ItemsWrapper $expanded={expanded} ref={expandableItemsRef} role=\"presentation\">\n {React.Children.map(children, (child) => {\n if (!child) return Fragment\n\n if (typeof child === 'object' && 'type' in child) {\n return React.cloneElement(child, {\n key: label,\n tabIndex: expanded ? 0 : -1,\n ariaHidden: !expanded,\n })\n }\n\n return child\n })}\n </ItemsWrapper>\n </ExpandableItems>\n </div>\n )\n}\n\nexport default MenuExpandable\n","import React, { PropsWithChildren } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\n\nimport MenuExpandable from './MenuExpandable'\nimport type { MenuExpandableProps } from './MenuExpandable'\nimport MenuLink from './MenuLink'\nimport type { MenuLinkProps } from './MenuLink'\nimport useID from 'hooks/useID'\nimport { styledCompounds } from 'utils/toolset/styledCompounds'\n\nconst MenuTitle = styled.div`\n padding: ${token('space-s')} 0;\n padding-left: ${token('space-l')};\n\n color: ${token('color-neutral')};\n\n font-weight: ${token('side-navigation-menu-title-font-weight')};\n font-size: ${token('side-navigation-menu-title-font-size')};\n line-height: ${token('side-navigation-menu-title-line-height')};\n text-transform: uppercase;\n`\n\nexport interface MenuProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: string\n}\n\nfunction Menu({ label, children, ...props }: MenuProps): JSX.Element {\n const menuId = useID()\n\n return (\n <div role=\"menubar\" aria-labelledby={menuId} {...props}>\n {label && <MenuTitle id={menuId}>{label}</MenuTitle>}\n\n {children}\n </div>\n )\n}\n\ntype MenuItemProps = { active?: boolean } & PropsWithChildren<MenuLinkProps & MenuExpandableProps>\n\nfunction MenuItem(props: MenuItemProps) {\n if (props.children) {\n return <MenuExpandable {...props} />\n }\n\n return <MenuLink {...props} />\n}\n\nconst StyledMenu = styled(Menu)({})\n\nexport default styledCompounds(StyledMenu, { Item: MenuItem, SubItem: MenuLink })\n","import type { StyledComponent } from 'styled-components'\n\n/**\n * Helper that returns the plural form if count is different than 1, otherwise the singular one.\n * @example\n * const StyledParent = styled.div``\n * styledCompounds(StyledParent, { Child: (props) => <div /> })\n * <StyledParent.Child />\n * @param StyledComponent - Parent instance of a styled-component\n * @param compounds - Object with compound components\n * @returns Parent component with type-safe accessable compound components\n */\nexport function styledCompounds<\n A extends StyledComponent<React.ComponentType, Record<string, unknown>>,\n B extends Record<string, unknown>\n>(Parent: A, compounds: B): A & B {\n Object.keys(compounds).forEach((key) => {\n // @ts-expect-error StyledComponent is read-only\n Parent[key] = compounds[key]\n })\n return Parent as A & B\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\n\nconst Line = styled.hr`\n margin: ${token('side-navigation-component-margin-top')} 0;\n\n color: ${token('side-navigation-separator-color')};\n`\n\nexport interface SeparatorProps {\n className?: string\n}\n\nfunction Separator(props: SeparatorProps): JSX.Element {\n return <Line {...props} role=\"separator\" />\n}\n\nexport default Separator\n","import CloseButton from 'common/CloseButton'\nimport type { CloseButtonProps } from 'common/CloseButton'\nimport React, { ReactNode } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport { getToken as token } from 'theming'\n\nimport { Logo } from './Logo'\nimport { Menu } from './Menu'\nimport { Separator } from './Separator'\n\nconst Container = styled.aside`\n z-index: ${token('z-index-overlay')};\n /* this was needed to force the side-navigation-width inside flex containers */\n flex: 0 0 ${token('side-navigation-width')};\n width: ${token('side-navigation-width')};\n min-height: 100vh;\n padding-top: ${token('space-l')};\n padding-bottom: ${token('space-l')};\n overflow: auto;\n\n background-color: ${token('side-navigation-background-color')};\n\n ${Logo} + * {\n margin-top: ${token('space-xl')};\n }\n\n ${Menu} + ${Menu} {\n margin-top: ${token('space-m')};\n }\n`\n\nexport interface SideNavigationProps {\n className?: string\n children: ReactNode\n}\n\nfunction SideNavigation({ className, children }: SideNavigationProps): JSX.Element {\n return <Container className={className}>{children}</Container>\n}\n\nSideNavigation.Logo = Logo\nSideNavigation.Menu = Menu\nSideNavigation.Separator = Separator\nSideNavigation.CloseButton = styled(CloseButton)<CloseButtonProps>({})\n\nexport default SideNavigation\n","import type { PropsWithChildren } from 'react'\nimport React, { ReactNode, useEffect, useRef, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport styled from 'styled-components'\n\nimport transition from 'styles/transition'\nimport conditional, { whenProps } from 'tools/conditional'\nimport { getToken as token } from 'theming'\nimport DefaultCloseButton from 'common/CloseButton'\n\nexport interface DrawerProps {\n children?: ReactNode\n className?: string\n open: boolean\n onClose?: () => void\n onClickOutside?: () => void\n}\n\nconst StyledAside = styled.aside<Pick<DrawerProps, 'open'>>`\n position: fixed;\n top: 0;\n left: 0;\n\n z-index: ${token('z-index-overlay')};\n\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n\n background: ${token('modal-overlay-background')};\n\n visibility: ${conditional({\n visible: whenProps({ open: true }),\n hidden: whenProps({ open: false }),\n })};\n`\n\nconst CloseButton = styled(DefaultCloseButton)`\n position: absolute;\n top: 32px;\n left: -48px;\n\n background-color: ${token('color-neutral-lighter')};\n`\n\nconst StyledSection = styled.section<Pick<DrawerProps, 'open'>>`\n position: fixed;\n top: 0;\n right: 0;\n\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n width: 40vw;\n height: 100%;\n\n background-color: ${token('color-neutral-lightest')};\n border-radius: ${token('border-radius-s')};\n box-shadow: ${token('shadow-modal')};\n\n transform: ${conditional({\n 'translateX(100%)': whenProps({\n open: false,\n }),\n 'translateX(0px)': whenProps({\n open: true,\n }),\n })};\n\n ${transition({\n property: 'transform',\n duration: '200ms',\n })}\n`\n\nconst StyledHeader = styled.header`\n display: flex;\n align-items: center;\n justify-content: center;\n\n padding: ${token('space-xl')};\n\n color: ${token('color-neutral-darker')};\n font-weight: ${token('font-weight-bold')};\n font-size: ${token('font-size-2')};\n text-align: center;\n\n border-bottom-color: ${token('color-neutral-light')};\n border-bottom-width: 1px;\n border-bottom-style: solid;\n`\n\nconst StyledBody = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n\n padding: ${token('space-xl')};\n\n overflow: auto;\n`\n\nconst StyledFooter = styled.footer`\n display: flex;\n\n padding: ${token('space-xl')};\n\n border-top-color: ${token('color-neutral-light')};\n border-top-width: 1px;\n border-top-style: solid;\n`\n\nexport interface DrawerHeaderProps {\n className?: string\n}\n\nfunction DrawerHeader({\n children,\n className,\n ...others\n}: PropsWithChildren<DrawerHeaderProps>): JSX.Element {\n return (\n <StyledHeader {...others} className={className}>\n {children}\n </StyledHeader>\n )\n}\n\nexport interface DrawerBodyProps {\n className?: string\n}\n\nfunction DrawerBody({\n children,\n className,\n ...others\n}: PropsWithChildren<DrawerHeaderProps>): JSX.Element {\n return (\n <StyledBody {...others} className={className}>\n {children}\n </StyledBody>\n )\n}\n\nexport interface DrawerFooterProps {\n className?: string\n}\n\nfunction DrawerFooter({\n children,\n className,\n ...others\n}: PropsWithChildren<DrawerFooterProps>): JSX.Element {\n return (\n <StyledFooter {...others} className={className}>\n {children}\n </StyledFooter>\n )\n}\n\nfunction Drawer({\n className,\n children,\n open,\n onClose,\n onClickOutside,\n ...others\n}: DrawerProps): JSX.Element {\n const [invisible, setInvisible] = useState(!open)\n const ref = useRef<HTMLElement>(null)\n\n function handleTransitionEnd() {\n if (!open) {\n setInvisible(true)\n }\n }\n\n useEffect(() => {\n if (open) {\n setInvisible(false)\n }\n }, [open])\n\n useEffect(() => {\n const currentRef = ref.current\n\n if (currentRef && onClickOutside) {\n const handleClick = (event: MouseEvent) => {\n const hasClickedOutside = currentRef.isSameNode(event.target as Element)\n\n if (hasClickedOutside) onClickOutside()\n }\n\n currentRef.addEventListener('mouseup', handleClick)\n\n return () => currentRef.removeEventListener('mouseup', handleClick)\n }\n }, [onClickOutside])\n\n return ReactDOM.createPortal(\n <StyledAside open={!invisible} ref={ref}>\n <StyledSection\n {...others}\n className={className}\n open={open}\n onTransitionEnd={handleTransitionEnd}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"drawer\"\n >\n {Boolean(onClose) && <CloseButton onClick={onClose} aria-label=\"close\" />}\n {children}\n </StyledSection>\n </StyledAside>,\n document.body\n )\n}\n\nDrawer.Header = DrawerHeader\nDrawer.Body = DrawerBody\nDrawer.Footer = DrawerFooter\n\nexport default Drawer\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport React, { useCallback, useState, createContext, useContext } from 'react'\nimport type { PropsWithChildren } from 'react'\n\nimport { createSelectable } from 'hooks/useSelectable'\nimport type { Selectable, SelectableState, SelectableKeyType } from 'hooks/useSelectable'\nimport type { useSelectableProps } from 'hooks/useSelectable/useSelectable.types'\n\nexport type TableSelectableRow = Selectable & {\n value?: string | number | boolean\n}\n\nexport type TableSelectionSelectable<T extends Selectable = TableSelectableRow> = Omit<\n useSelectableProps<T>,\n 'onChange'\n> & {\n onChange: (selected: T[]) => void\n}\n\nexport type TableSelectionConfig<T extends Selectable = TableSelectableRow> =\n | boolean\n | Partial<TableSelectionSelectable<T>>\n\nexport interface TableSelectionCore<T extends Selectable = TableSelectableRow> {\n selected?: SelectableState<T>\n config: TableSelectionSelectable<T>\n allRowsAreSelected: boolean\n toggle: (key: T) => void\n toggleAll: () => void\n clear: () => void\n register: (key?: T) => void\n}\n\nfunction getSelectableProps<T extends Selectable = TableSelectableRow>(\n config?: TableSelectionConfig<T>\n): TableSelectionSelectable<T> {\n const defaults: TableSelectionSelectable<T> = {\n multiple: true,\n selected: [],\n onChange() {},\n adapters: {\n generic: {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n getKey: (row) => row.value as string,\n },\n },\n }\n\n if (!config || config === true) return defaults\n\n return {\n ...defaults,\n ...config,\n }\n}\n\nexport function useTableSelectionCore<T extends Selectable>(\n config?: TableSelectionConfig<T>\n): TableSelectionCore<T> {\n const { useSelectable } = createSelectable<T>()\n\n const [registered, setRegistered] = useState<T[]>([])\n\n const selectableProps = getSelectableProps(config)\n\n const { selected, toggle, select, unselect, clear } = useSelectable({\n ...selectableProps,\n onChange(value) {\n return selectableProps.onChange(value ? [...value.values()] : [])\n },\n })\n\n const allRowsAreSelected = selected.size === registered.length\n\n const getKey = useCallback(\n (row: T): SelectableKeyType => {\n const { adapters } = selectableProps\n\n const adapter = adapters?.[row._type || 'generic']\n const key = adapter?.getKey(row) ?? ''\n\n return key\n },\n [selectableProps]\n )\n\n const register = useCallback(\n (row?: T) => {\n if (!row) return\n\n const key = getKey(row)\n\n setRegistered((prev) => {\n const alreadyRegistered = prev.some((prevRow) => getKey(prevRow) === key)\n\n if (alreadyRegistered) {\n return prev\n }\n\n return [...prev, row]\n })\n },\n [getKey]\n )\n\n function toggleAll() {\n if (allRowsAreSelected) {\n registered.forEach((row) => {\n const key = getKey(row)\n\n if (!key) return\n\n unselect(key)\n })\n } else {\n registered.forEach((row) => select(row))\n }\n }\n\n return {\n allRowsAreSelected,\n config: selectableProps,\n selected,\n toggle,\n toggleAll,\n clear,\n register,\n }\n}\n\nexport const TableSelectionContext = createContext<TableSelectionCore>({\n selected: undefined,\n config: {} as TableSelectionSelectable,\n allRowsAreSelected: false,\n toggle() {},\n toggleAll() {},\n clear() {},\n register() {},\n})\n\ntype TableSelectionProviderProps = PropsWithChildren<{\n selection?: TableSelectionConfig\n}>\n\nexport function TableSelectionProvider({\n children,\n selection,\n}: TableSelectionProviderProps): JSX.Element {\n const selectionCore = useTableSelectionCore(selection)\n\n return (\n <TableSelectionContext.Provider value={selectionCore}>\n {children}\n </TableSelectionContext.Provider>\n )\n}\n\nexport function useTableSelection<\n T extends Selectable = TableSelectableRow\n>(): TableSelectionCore<T> {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return useContext(TableSelectionContext)\n}\n\ntype TableSelectionHook<T extends Selectable = TableSelectableRow> = {\n values: T[]\n clear: TableSelectionCore<T>['clear']\n}\n\nexport function useSelection<T extends Selectable = TableSelectableRow>(): TableSelectionHook<T> {\n const { selected, clear } = useTableSelection<T>()\n\n return {\n values: selected ? [...selected.values()] : [],\n clear,\n }\n}\n\nexport function isCellSelected<T extends Selectable>(\n value: T,\n selectedRows: SelectableState<T>,\n config: TableSelectionSelectable<T>\n): boolean {\n const { adapters } = config\n\n const adapter = adapters?.[value._type || 'generic']\n const key = adapter?.getKey(value)\n\n if (!key) return false\n\n return selectedRows.has(key)\n}\n\nexport function useIsCellSelected<T extends Selectable = TableSelectableRow>(value?: T): boolean {\n const { selected, config } = useTableSelection<T>()\n\n if (!value || !selected) return false\n\n return isCellSelected(value, selected, config)\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\nimport { Box as DefaultBox } from 'components/Layout'\nimport type { SortDirection } from './useSortBy.types'\n\nimport type { BoxProps } from 'components/Layout/Box'\n\ninterface TableSortHandleProps extends BoxProps {\n order?: SortDirection | null\n}\n\nconst Box = styled(DefaultBox)`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n\n margin-left: ${token('space-xs')};\n`\n\nfunction TableSortHandle({ order, ...rest }: TableSortHandleProps): JSX.Element | null {\n return (\n <Box {...rest} padding=\"none\">\n <Icon name={order != null ? `sort-${order}` : 'sort'} width=\"0.75em\" height=\"0.85em\" />\n </Box>\n )\n}\n\nexport default TableSortHandle\n","import React, { Children, Fragment, isValidElement, useEffect, useState } from 'react'\nimport styled, { css } from 'styled-components'\nimport type { ReactNode } from 'react'\nimport { isFunction } from '@loadsmart/utils-function'\n\nimport { getToken as token } from 'theming'\nimport { conditional, whenProps, prop } from 'tools/index'\nimport hoverable from 'styles/hoverable'\nimport focusable from 'styles/focusable'\nimport { Checkbox } from 'components/Checkbox'\nimport { Radio } from 'components/Radio'\nimport { Link } from 'components/Link'\nimport { Text } from 'components/Text'\nimport { Dropdown } from 'components/Dropdown'\nimport { Layout } from 'components/Layout'\nimport { Icon } from 'components/Icon'\nimport { Children as InternalButton } from 'components/Button/Button'\n\nimport {\n isCellSelected,\n TableSelectionProvider,\n useIsCellSelected,\n useSelection,\n useTableSelection,\n} from './Selection'\nimport TableSortHandle from './TableSortHandle'\n\nimport type {\n TableProps,\n TableSectionProps,\n TableRowProps,\n TableCellProps,\n TableCaptionProps,\n TableSelectionProps,\n SelectionCellProps,\n TablePickerItemProps,\n TablePickerProps,\n ExpandableTableRowProps,\n} from './Table.types'\n\nconst StyledTableBody = styled.tbody`\n /* placeholder */\n`\n\nconst StyledTableFoot = styled.tfoot`\n box-shadow: 0 -1px 0 ${token('color-neutral')};\n`\n\nconst StyledTableCaption = styled.caption<{ $position?: 'top' | 'bottom' }>`\n ${conditional({\n ['border-bottom']: whenProps([{ $position: ['top', undefined] }]),\n ['border-top']: whenProps({ $position: 'bottom' }),\n })}: solid 1px ${token('color-neutral-lighter')};\n\n ${conditional({\n ['margin-bottom']: whenProps([{ $position: ['top', undefined] }]),\n ['margin-top']: whenProps({ $position: 'bottom' }),\n })}: ${token('space-m')};\n padding: ${token('space-m')} ${token('space-s')};\n\n text-align: left;\n\n caption-side: ${prop('$position', 'top')};\n background-color: ${token('color-neutral-white')};\n`\n\nconst StyledCell = css<{ alignment?: string }>`\n color: ${token('color-neutral-darker')};\n text-align: ${prop('alignment', 'left')};\n vertical-align: middle;\n`\n\nconst StyledTableCell = styled.td<{ alignment?: string; format?: string }>`\n ${StyledCell}\n\n font-family: ${conditional({\n 'font-family-monospace': whenProps({ format: ['number', 'currency'] }),\n 'font-family-default': whenProps({ format: 'default' }),\n })};\n`\n\nconst StyledTableHeadCell = styled.th<{\n alignment?: string\n clickable: boolean\n}>`\n ${StyledCell}\n\n font-family: ${token('font-family-default')};\n\n font-weight: ${token('font-weight-bold')};\n\n text-transform: capitalize;\n\n cursor: ${conditional({\n pointer: whenProps({ clickable: true }),\n normal: whenProps({ clickable: false }),\n })};\n`\n\nconst StyledTableHead = styled.thead`\n border: 1px solid ${token('color-neutral-lighter')};\n\n ${StyledTableCell} {\n padding: ${token('space-s')};\n\n font-weight: ${token('font-weight-bold')};\n text-transform: capitalize;\n }\n`\n\nconst StyledTableRow = styled.tr<{ selected: boolean; isExpanded: boolean }>`\n ${StyledTableHead} > & {\n background-color: ${token('color-neutral-lightest')};\n }\n\n ${StyledTableFoot} > & {\n background-color: ${token('color-neutral-lightest')};\n }\n\n background-color: ${conditional({\n 'table-row-selected-color': whenProps({ selected: true }),\n 'color-neutral-white': whenProps({ selected: false }),\n })};\n ${hoverable`\n background-color: ${conditional({\n 'table-row-selected-color': whenProps({ selected: true }),\n })} !important;\n `}\n\n border-color: ${token('color-neutral-lighter')};\n border-width: 1px;\n border-top-style: solid;\n border-right-style: solid;\n border-left-style: solid;\n border-bottom-style: ${conditional({\n solid: whenProps({ isExpanded: false }),\n hidden: whenProps({ isExpanded: true }),\n })};\n\n box-shadow: ${conditional({\n '0px 3px 3px 0px #C1CED9': whenProps({ isExpanded: true }),\n none: whenProps({ isExpanded: false }),\n })};\n\n ${StyledTableBody} > & {\n ${hoverable`\n background-color: ${token('color-neutral-lighter')};\n `}\n\n ${focusable`\n box-shadow: inset ${token('shadow-glow-primary')};\n `}\n }\n`\n\nconst StyledExpandableContentRow = styled.tr`\n border-color: ${token('color-neutral-lighter')};\n border-width: 1px;\n border-top-style: hidden;\n border-right-style: solid;\n border-left-style: solid;\n border-bottom-style: solid;\n`\n\nconst StyledTable = styled.table<{ scale?: string }>`\n width: 100%;\n\n white-space: nowrap;\n\n background-color: ${token('color-neutral-lightest')};\n\n border-collapse: collapse;\n\n ${StyledTableBody} ${StyledTableRow} {\n height: ${conditional({\n '24px': whenProps({ scale: 'small' }),\n '48px': whenProps({ scale: 'default' }),\n '80px': whenProps({ scale: 'large' }),\n })};\n }\n\n ${StyledTableHeadCell},\n ${StyledTableCell} {\n padding: ${conditional({\n 'space-xs': whenProps({ scale: 'small' }),\n 'space-s': whenProps({ scale: ['default', 'large'] }),\n })};\n\n font-size: ${conditional({\n 'font-size-5': whenProps({ scale: 'small' }),\n 'font-size-4': whenProps({ scale: ['default', 'large'] }),\n })};\n }\n`\n\nconst RotatableIcon = styled(Icon)<{ $rotate: boolean }>`\n ${conditional({\n 'transform: rotate(90deg);': whenProps({ $rotate: true }),\n })}\n`\n\nfunction Table<T>({\n children,\n selection,\n scale = 'default',\n ...others\n}: TableProps<T>): JSX.Element {\n return (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n <TableSelectionProvider selection={selection}>\n <StyledTable scale={scale} {...others}>\n {children}\n </StyledTable>\n </TableSelectionProvider>\n )\n}\n\nconst TableCaptionInner = styled.div<{ $height?: number }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: ${prop('$height', 36)}px;\n`\n\nfunction TableCaption({ children, position, height }: TableCaptionProps): JSX.Element {\n return (\n <StyledTableCaption $position={position}>\n <TableCaptionInner $height={height}>{children}</TableCaptionInner>\n </StyledTableCaption>\n )\n}\n\nfunction TableHead({ children, ...others }: TableSectionProps): JSX.Element {\n return <StyledTableHead {...others}>{children}</StyledTableHead>\n}\n\nfunction TableBody({ children, ...others }: TableSectionProps): JSX.Element {\n return <StyledTableBody {...others}>{children}</StyledTableBody>\n}\n\nfunction TableCell({\n children,\n alignment = 'left',\n format = 'default',\n ...others\n}: TableCellProps): JSX.Element {\n return (\n <StyledTableCell alignment={alignment} format={format} {...others}>\n {children}\n </StyledTableCell>\n )\n}\n\nfunction SelectionCell<T>({ value, ...props }: SelectionCellProps<T>): JSX.Element {\n const { toggle, register, config } = useTableSelection()\n\n const selected = useIsCellSelected(value)\n\n const action = () => toggle(value as T)\n\n useEffect(() => {\n register(value)\n }, [value, register])\n\n if (props.children) {\n return (\n <TableCell>\n {props.children({\n selected,\n toggle: action,\n })}\n </TableCell>\n )\n }\n\n const Input = config.multiple ? Checkbox : Radio\n\n return (\n <TableCell {...props}>\n {value ? <Input checked={selected} scale=\"small\" onChange={action} /> : null}\n </TableCell>\n )\n}\n\nfunction SelectionHeadCell<T>(props: SelectionCellProps<T>): JSX.Element {\n const { allRowsAreSelected, toggleAll, config } = useTableSelection()\n\n const selected = allRowsAreSelected\n const action = () => toggleAll()\n\n if (props.children) {\n return <TableHeadCell {...props}>{props.children({ selected, toggle: action })}</TableHeadCell>\n }\n\n const Input = config.multiple ? Checkbox : Fragment\n\n return (\n <TableHeadCell {...props}>\n <Input checked={selected} scale=\"small\" onChange={action} />\n </TableHeadCell>\n )\n}\n\nfunction TableRow({ children, ...others }: TableRowProps): JSX.Element {\n const selected = useIsRowSelected(children)\n\n return (\n <StyledTableRow {...others} selected={selected} isExpanded={false}>\n {children}\n </StyledTableRow>\n )\n}\n\nfunction ExpandableTableRow({\n expandableContent,\n expanded,\n leading: propsLeading,\n children,\n onExpandedChange,\n initialExpanded = false,\n ...others\n}: ExpandableTableRowProps): JSX.Element {\n const [openState, setOpenState] = useState(initialExpanded)\n\n const selected = useIsRowSelected(children)\n\n const open = expanded ?? openState\n const isExpanded = Boolean(open && expandableContent)\n const colSpan = Array.isArray(children) ? children.length + 1 : 1\n\n let leading: ReactNode = <RotatableIcon name=\"caret-right\" $rotate={open} />\n if (propsLeading) {\n leading = isFunction(propsLeading) ? propsLeading(open) : propsLeading\n }\n\n function toggle() {\n if (!expandableContent) return\n\n onExpandedChange?.(!open)\n setOpenState(!open)\n }\n\n return (\n <>\n <StyledTableRow {...others} onClick={toggle} isExpanded={isExpanded} selected={selected}>\n <TableCell>{expandableContent && leading}</TableCell>\n {children}\n </StyledTableRow>\n {isExpanded && (\n <StyledExpandableContentRow>\n <StyledTableCell colSpan={colSpan}>{expandableContent}</StyledTableCell>\n </StyledExpandableContentRow>\n )}\n </>\n )\n}\n\nfunction TableHeadCell({\n alignment = 'left',\n children,\n onClick,\n ...others\n}: TableCellProps): JSX.Element {\n return (\n <StyledTableHeadCell\n clickable={onClick != null}\n alignment={alignment}\n onClick={onClick}\n {...others}\n >\n <Layout.Group space=\"xs\" align=\"center\">\n {children}\n </Layout.Group>\n </StyledTableHeadCell>\n )\n}\n\nconst ActionsWrapper = styled.div`\n display: flex;\n gap: ${token('space-s')};\n margin-left: auto;\n`\n\nfunction TableSelectionActions({ buttons, children, ...others }: TableSelectionProps): JSX.Element {\n const { values, clear } = useSelection()\n\n return (\n <ActionsWrapper {...others}>\n {values.length > 0 ? (\n <>\n {buttons.map((Action, i) => (\n <Action key={i} values={values} />\n ))}\n <Link\n onClick={(e) => {\n e.preventDefault()\n clear()\n }}\n >\n <Text variant=\"link\">CANCEL</Text>\n </Link>\n </>\n ) : (\n children\n )}\n </ActionsWrapper>\n )\n}\n\nconst StyledPickerTrigger = styled(Dropdown.Trigger.Button)`\n padding: 0;\n\n ${InternalButton} {\n margin: ${token('space-2xs')};\n }\n`\n\nfunction TablePickerItem<T>({\n option,\n checked,\n children,\n ...props\n}: TablePickerItemProps<T>): JSX.Element {\n return (\n <Dropdown.Item\n leading={\n checked ? (\n <Icon name=\"check\" size=\"16\" color=\"neutral-darker\" />\n ) : (\n <Layout.Box padding=\"s\" />\n )\n }\n role=\"option\"\n aria-selected={checked ? 'true' : 'false'}\n {...props}\n >\n {children || (option && (option.option || option.title || option.key)) || 'Column'}\n </Dropdown.Item>\n )\n}\n\nconst TriggerIcon = styled(Icon).attrs({\n name: 'dots-horizontal',\n size: '12',\n color: 'neutral-darker',\n})`\n transform: rotate(90deg);\n`\n\nfunction TablePicker<T>({\n value,\n onChange,\n options,\n align,\n children,\n trigger: propsTrigger,\n ...props\n}: TablePickerProps<T>): JSX.Element {\n return (\n <Dropdown align={align}>\n <StyledPickerTrigger trailing={null} scale=\"small\" {...props}>\n {propsTrigger !== undefined ? (\n ({ expanded }) => (isFunction(propsTrigger) ? propsTrigger(expanded) : propsTrigger)\n ) : (\n <TriggerIcon />\n )}\n </StyledPickerTrigger>\n <Dropdown.Menu role=\"listbox\">\n {children ||\n options?.map((option, i) => (\n <TablePickerItem\n key={i}\n option={option}\n checked={option.key === value?.key}\n onClick={() => onChange?.(option)}\n />\n ))}\n </Dropdown.Menu>\n </Dropdown>\n )\n}\n\nfunction useIsRowSelected(children: ReactNode): boolean {\n const { selected, config } = useTableSelection()\n\n if (!selected) return false\n\n const arrChildren = Children.toArray(children)\n\n const selectionCellChild = arrChildren.find((child) => {\n return isValidElement(child) && child.type === SelectionCell\n })\n\n if (!selectionCellChild) return false\n\n const { value } = (selectionCellChild as React.ReactElement).props as SelectionCellProps\n\n if (!value) return false\n\n return isCellSelected(value, selected, config)\n}\n\nTable.Head = TableHead\nTable.Body = TableBody\nTable.Row = TableRow\nTable.Cell = TableCell\nTable.HeadCell = TableHeadCell\nTable.Foot = StyledTableFoot\nTable.Caption = TableCaption\nTable.Selection = {\n Actions: TableSelectionActions,\n Cell: SelectionCell,\n HeadCell: SelectionHeadCell,\n}\nTable.ExpandableRow = ExpandableTableRow\nTable.SortHandle = TableSortHandle\nTablePicker.Item = TablePickerItem\nTable.Picker = TablePicker\n\nexport { useSelection }\n\nexport default Table\n","import React from 'react'\nimport type { PropsWithChildren } from 'react'\n\nimport { BaseLink } from 'components/Link'\nimport styled from 'styled-components'\n\nexport type LogoProps = PropsWithChildren<{\n url: string\n className?: string\n}>\n\nfunction Logo({ url, className, children }: LogoProps): JSX.Element {\n return (\n <BaseLink className={className} href={url}>\n {children}\n </BaseLink>\n )\n}\n\nexport default styled(Logo)<LogoProps>({})\n","import React from 'react'\nimport type { PropsWithChildren, ReactNode, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport transition from 'styles/transition'\nimport { Dropdown, DropdownMenu, DropdownMenuItem, DropdownTrigger } from 'components/Dropdown'\nimport { BaseLink } from 'components/Link'\nimport useID from 'hooks/useID'\nimport ellipsizable from 'styles/ellipsizable'\nimport typography from 'styles/typography'\nimport { Popover } from 'components/Popover'\n\nexport const MenuDropdown = styled(Dropdown)({})\n\nexport const MenuDropdownSeparator = styled.hr`\n margin: ${token('space-s')} ${token('space-m')};\n\n color: ${token('top-navigation-dropdown-separator-color')};\n`\n\nconst MenuDropdownTrigger = styled(DropdownTrigger.Handle)`\n color: ${token('top-navigation-dropdown-trigger-color')};\n`\n\nexport const MenuDropdownLabel = styled.label`\n ${transition()}\n\n align-items: center;\n display: flex;\n\n ${typography('body-bold', { color: 'top-navigation-item-color' })}\n\n cursor: pointer;\n\n ${focusable`\n color: ${token('top-navigation-item-color--hover')};\n `}\n`\n\nconst Ellipsizable = styled.span<{ $max: number }>`\n ${ellipsizable()}\n\n max-width: ${(props) => props.$max}px;\n`\n\nconst IconWrapper = styled.div`\n width: ${token('space-m')};\n`\n\nconst MenuDropdownSubItemLink = styled(BaseLink)`\n align-items: stretch;\n ${typography('body', { color: 'top-navigation-dropdown-subitem-color' })}\n\n ${hoverable`\n text-decoration: none;\n font-weight: inherit;\n `}\n\n ${focusable`\n > * {\n background-color: ${token('color-neutral-lighter')}\n }\n `}\n`\n\ntype MenuDropdownSubItemProps = HTMLAttributes<HTMLElement> & {\n label: string\n url?: string\n icon?: ReactNode\n separator?: boolean\n}\n\nexport function MenuDropdownSubItem({\n icon,\n label,\n url,\n ...rest\n}: MenuDropdownSubItemProps): JSX.Element {\n return url ? (\n <MenuDropdownSubItemLink {...rest} href={url}>\n <DropdownMenuItem tabIndex={-1} leading={<IconWrapper>{icon}</IconWrapper>}>\n {label}\n </DropdownMenuItem>\n </MenuDropdownSubItemLink>\n ) : (\n <DropdownMenuItem leading={<IconWrapper>{icon}</IconWrapper>} {...rest}>\n {label}\n </DropdownMenuItem>\n )\n}\n\nexport type MenuItemDropdownProps = PropsWithChildren<{\n label: string\n}>\n\nfunction MenuItemDropdown(props: MenuItemDropdownProps): JSX.Element {\n const { label, children, ...rest } = props\n const labelId = useID()\n\n return (\n <MenuDropdown align=\"end\" key={label}>\n <Popover.Reference>\n <MenuDropdownLabel>\n <Ellipsizable $max={120} id={labelId}>\n {label}\n </Ellipsizable>\n <MenuDropdownTrigger {...rest} tabIndex={0} aria-labelledby={labelId} />\n </MenuDropdownLabel>\n </Popover.Reference>\n <DropdownMenu>{children}</DropdownMenu>\n </MenuDropdown>\n )\n}\n\nexport { MenuItemDropdown }\n","import React from 'react'\nimport type { ReactNode } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport { BaseLink } from 'components/Link'\nimport conditional, { whenProps } from 'tools/conditional'\nimport typography from 'styles/typography'\n\nconst MenuLink = styled(BaseLink)<{ hasIcon?: boolean }>`\n ${typography('body-bold')}\n\n color: ${conditional({\n 'top-navigation-item-icon-color': whenProps({ hasIcon: true }),\n 'top-navigation-item-color': whenProps({ hasIcon: false }),\n })};\n\n ${hoverable`\n text-decoration: none;\n color: ${token('top-navigation-item-color--hover')};\n `}\n\n ${focusable`\n color: ${token('top-navigation-item-color--hover')};\n `}\n`\n\ntype MenuItemIconProps = {\n label: string\n icon?: ReactNode\n url?: string\n}\n\nexport function MenuItemIcon({ url, icon, label, ...rest }: MenuItemIconProps): JSX.Element {\n if (icon) {\n return (\n <MenuLink {...rest} href={url} hasIcon title={label}>\n {icon}\n </MenuLink>\n )\n }\n\n return (\n <MenuLink {...rest} href={url}>\n {label}\n </MenuLink>\n )\n}\n","import React from 'react'\nimport type { PropsWithChildren, ReactNode, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport {\n MenuItemDropdown,\n MenuDropdown,\n MenuDropdownSubItem,\n MenuDropdownSeparator,\n} from './MenuItemDropdown'\nimport { MenuItemIcon } from './MenuItemIcon'\nimport conditional, { whenProps } from 'tools/conditional'\n\ntype MenuItemProps = HTMLAttributes<HTMLElement> &\n PropsWithChildren<{\n label: string\n icon?: ReactNode\n url?: string\n }>\n\nexport type MenuProps = PropsWithChildren<{\n align?: 'left' | 'right'\n}>\n\nconst MenuContainer = styled.nav<{ $align: MenuProps['align'] }>`\n ${conditional({\n 'margin-left: auto;': whenProps({ $align: 'right' }),\n })}\n\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${token('space-m')};\n }\n\n & > * + ${MenuDropdown} {\n margin-left: ${token('space-xl')};\n }\n`\n\nfunction MenuItem(props: MenuItemProps): JSX.Element {\n if (props.children) {\n return <MenuItemDropdown {...props} />\n }\n\n return <MenuItemIcon {...props} />\n}\n\nfunction Menu(props: MenuProps): JSX.Element {\n const { align = 'left' } = props\n\n return <MenuContainer $align={align}>{props.children}</MenuContainer>\n}\n\nMenu.Item = MenuItem\nMenu.SubItem = MenuDropdownSubItem\nMenu.Separator = MenuDropdownSeparator\n\nexport default Menu\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\n\nexport type OpenSideNavButtonProps = {\n className?: string\n onClick: () => void\n}\n\nconst Container = styled.button`\n margin-right: ${token('space-2xl')};\n\n background: none;\n border: none;\n cursor: pointer;\n`\n\nfunction OpenSideNavButton({ className, onClick }: OpenSideNavButtonProps): JSX.Element {\n return (\n <Container className={className} onClick={onClick}>\n <Icon name=\"burguer-menu\" size={24} data-testid=\"toggle-sidenav\" />\n </Container>\n )\n}\n\nexport default styled(OpenSideNavButton)<OpenSideNavButtonProps>({})\n","import React from 'react'\nimport type { ReactNode } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Logo } from './Logo'\nimport { Menu } from './Menu'\nimport { MenuDropdownLabel } from './Menu/MenuItemDropdown'\nimport { OpenSideNavButton } from './OpenSideNavButton'\n\n/* We need to remove the 8px padding-right that DropdownTrigger adds (because of\n BaseStyledButton), in order to keep it always 40px to the right, but only when\n it's the last child. DropdownTigger isn't a StyledComponent so we need to use\n MenuDropdownLabel here since it's the one that wraps DropdownTigger */\nconst removeRightPadding = css`\n > :last-child ${MenuDropdownLabel} {\n margin-right: -${token('space-m')};\n }\n`\n\nconst Container = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n height: ${token('top-navigation-height')};\n padding: 0 ${token('space-2xl')};\n\n background-color: ${token('top-navigation-background-color')};\n border-bottom: solid 1px ${token('top-navigation-border-color')};\n\n ${removeRightPadding}\n`\n\nexport interface TopNavigationProps {\n children?: ReactNode\n}\n\nfunction TopNavigation({ children }: TopNavigationProps): JSX.Element {\n return <Container>{children}</Container>\n}\n\nTopNavigation.Logo = Logo\nTopNavigation.Menu = Menu\nTopNavigation.OpenSideNavButton = OpenSideNavButton\n\nexport default TopNavigation\n","import React, { FC, Fragment } from 'react'\nimport styled from 'styled-components'\n\nimport type { EmptyStateWithIconProps } from './EmptyState.types'\n\nimport { Stack, Group } from 'components/Layout'\nimport Text from 'components/Text/Text'\nimport Button from 'components/Button/Button'\n\nconst VerticalWrapper = styled(Stack)`\n text-align: center;\n`\n\nconst EmptyStateWithIcon: FC<EmptyStateWithIconProps> = ({\n variant = 'card',\n icon,\n title,\n action,\n children,\n ...props\n}: EmptyStateWithIconProps) => {\n const isHorizontal = variant === 'horizontal-card'\n const Wrapper = isHorizontal ? Group : VerticalWrapper\n\n return (\n <Wrapper {...props} space={isHorizontal ? 's' : 'xs'} align=\"center\" justify=\"center\">\n {children || (\n <Fragment>\n {icon}\n <Text variant=\"caption-bold\">{title}</Text>\n {action && (\n <Button variant=\"primary\" scale=\"small\" {...action}>\n {action.label}\n </Button>\n )}\n </Fragment>\n )}\n </Wrapper>\n )\n}\n\nexport default EmptyStateWithIcon\n","import React, { FC } from 'react'\nimport styled from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\n\nimport type { IllustrationProps } from './EmptyState.types'\n\nconst Wrapper = styled.div<Pick<IllustrationProps, 'scale'>>`\n & > img:first-of-type,\n SVG:first-of-type {\n height: ${conditional({\n '240px': whenProps({ scale: 'large' }),\n '120px': whenProps({ scale: 'default' }),\n })};\n object-fit: cover;\n }\n`\n\nexport const Illustration: FC<IllustrationProps> = ({\n illustration,\n scale,\n ...props\n}: IllustrationProps) => (\n <Wrapper scale={scale} {...props}>\n {typeof illustration === 'string' ? <img src={illustration} alt=\"\" /> : illustration}\n </Wrapper>\n)\n\nexport default Illustration\n","import React, { FC, Fragment } from 'react'\nimport styled from 'styled-components'\n\nimport { Stack } from 'components/Layout'\nimport Text from 'components/Text/Text'\nimport Button from 'components/Button/Button'\n\nimport type { EmptyStateWithIllustrationProps } from './EmptyState.types'\nimport Illustration from './Illustration'\n\nconst Wrapper = styled(Stack)`\n max-width: 320px;\n\n text-align: center;\n`\n\nconst EmptyStateWithIllustration: FC<EmptyStateWithIllustrationProps> = ({\n variant = 'page',\n illustration,\n title,\n description,\n action,\n children,\n ...props\n}: EmptyStateWithIllustrationProps) => {\n const isPageVariant = variant === 'page'\n\n return (\n <Wrapper {...props} align=\"center\" justify=\"center\" space=\"m\">\n {children || (\n <Fragment>\n {illustration && (\n <Illustration illustration={illustration} scale={isPageVariant ? 'large' : 'default'} />\n )}\n {(title || description) && (\n <Stack space=\"xs\">\n {title && (\n <Text\n variant={isPageVariant ? 'heading-sm-bold' : 'body-bold'}\n color={isPageVariant ? 'color-neutral-darkest' : 'color-neutral-darker'}\n >\n {title}\n </Text>\n )}\n {description && (\n <Text\n data-testid=\"empty-state-description\"\n variant={isPageVariant ? 'body' : 'caption'}\n color=\"color-neutral-darkest\"\n >\n {description}\n </Text>\n )}\n </Stack>\n )}\n {action && (\n <Button\n className=\"empty-state-action\"\n variant=\"primary\"\n scale={isPageVariant ? 'default' : 'small'}\n {...action}\n >\n {action.label}\n </Button>\n )}\n </Fragment>\n )}\n </Wrapper>\n )\n}\n\nexport default EmptyStateWithIllustration\n","import React from 'react'\n\nimport type {\n EmptyStateProps,\n EmptyStateWithIconProps,\n EmptyStateWithIllustrationProps,\n} from './EmptyState.types'\n\nimport EmptyStateWithIcon from './EmptyStateWithIcon'\nimport EmptyStateWithIllustration from './EmptyStateWithIllustration'\nimport Illustration from './Illustration'\n\nconst EmptyState = (props: EmptyStateProps): JSX.Element => {\n if (['card', 'horizontal-card'].includes(props.variant)) {\n return <EmptyStateWithIcon {...(props as EmptyStateWithIconProps)} />\n }\n return <EmptyStateWithIllustration {...(props as EmptyStateWithIllustrationProps)} />\n}\n\nEmptyState.Illustration = Illustration\n\nexport default EmptyState\n","export function aliased<T>(aliasMap: Record<number | string, T>, alias: number | string): T {\n return aliasMap[String(alias).toLowerCase()]\n}\n\nexport const MONTH_BY_ALIAS = {\n 0: 'january',\n jan: 'january',\n january: 'january',\n\n 1: 'february',\n feb: 'february',\n february: 'february',\n\n 2: 'march',\n mar: 'march',\n march: 'march',\n\n 3: 'april',\n apr: 'april',\n april: 'april',\n\n 4: 'may',\n may: 'may',\n\n 5: 'june',\n jun: 'june',\n june: 'june',\n\n 6: 'july',\n jul: 'july',\n july: 'july',\n\n 7: 'august',\n aug: 'august',\n august: 'august',\n\n 8: 'september',\n sep: 'september',\n september: 'september',\n\n 9: 'october',\n oct: 'october',\n october: 'october',\n\n 10: 'november',\n nov: 'november',\n november: 'november',\n\n 11: 'december',\n dec: 'december',\n december: 'december',\n}\n\nexport type CalendarMonthAlias = keyof typeof MONTH_BY_ALIAS\n\nexport type CalendarMonth = {\n name: string\n /**\n * Integer value representing the month, beginning with 0 for January to 11 for December.\n * Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date\n */\n index: number\n}\n\nexport const MONTH_BY_NAME: Record<string, CalendarMonth> = {\n january: {\n name: 'January',\n index: 0,\n },\n february: {\n name: 'February',\n index: 1,\n },\n march: {\n name: 'March',\n index: 2,\n },\n april: {\n name: 'April',\n index: 3,\n },\n may: {\n name: 'May',\n index: 4,\n },\n june: {\n name: 'June',\n index: 5,\n },\n july: {\n name: 'July',\n index: 6,\n },\n august: {\n name: 'August',\n index: 7,\n },\n september: {\n name: 'September',\n index: 8,\n },\n october: {\n name: 'October',\n index: 9,\n },\n november: {\n name: 'November',\n index: 10,\n },\n december: {\n name: 'December',\n index: 11,\n },\n}\n\nfunction getMonthByAlias(alias: CalendarMonthAlias): CalendarMonth {\n alias = aliased(MONTH_BY_ALIAS, alias) as CalendarMonthAlias\n\n return MONTH_BY_NAME[alias]\n}\n\nfunction getAllMonths() {\n return (Object.keys(MONTH_BY_NAME) as CalendarMonthAlias[]).map((alias) => {\n return getMonthByAlias(alias)\n })\n}\n\nfunction MonthHelper(alias: CalendarMonthAlias): {\n get(): CalendarMonth\n format(representation?: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow'): string\n is(other: CalendarMonthAlias): boolean\n} {\n const month = getMonthByAlias(alias)\n\n return {\n get() {\n return month\n },\n /**\n * Follows same values available in https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat.\n * * \"numeric\" (e.g., 3)\n * * \"2-digit\" (e.g., 03)\n * * \"long\" (e.g., March)\n * * \"short\" (e.g., Mar)\n * * \"narrow\" (e.g., M)\n */\n format(representation: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow' = 'long') {\n switch (representation) {\n case 'numeric':\n return String(month.index + 1)\n case '2-digit':\n return String(month.index + 1).padStart(2, '0')\n case 'short':\n return month.name.slice(0, 3)\n case 'narrow':\n return month.name.slice(0, 1)\n default:\n return month.name\n }\n },\n is(other: CalendarMonthAlias) {\n return (\n getMonthByAlias(other) != null &&\n aliased(MONTH_BY_ALIAS, alias) === aliased(MONTH_BY_ALIAS, other)\n )\n },\n }\n}\n\nMonthHelper.getAll = getAllMonths\n\nexport default MonthHelper\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { BaseButton } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\nimport conditional, { whenProps } from 'tools/conditional'\nimport focusable from 'styles/focusable'\nimport disableable from 'styles/disableable'\nimport typography from 'styles/typography'\n\nimport type { ButtonProps } from 'components/Button'\n\nconst Button = styled(BaseButton)`\n user-select: none;\n\n ${typography(\n conditional({\n 'body-bold': whenProps({ 'aria-expanded': true }),\n body: whenProps({ 'aria-expanded': false }),\n })\n )};\n border-color: transparent;\n background-color: transparent;\n\n color: ${token('color-neutral-dark')};\n\n ${focusable`\n box-shadow: ${token('button-primary-outline')};\n `}\n\n ${disableable`\n pointer-events: none;\n opacity: 1;\n `}\n`\n\nconst Caret = styled(Icon)<{ $rotate: boolean }>`\n ${conditional({\n 'transform: rotate(180deg);': whenProps({ $rotate: true }),\n })}\n`\n\nfunction PickerModeToggle(\n props: Omit<ButtonProps & { expanded: boolean }, 'trailing'>\n): JSX.Element {\n const { expanded, disabled, ...others } = props\n\n return (\n <Button\n type=\"button\"\n {...others}\n aria-haspopup=\"true\"\n aria-expanded={expanded}\n disabled={disabled}\n trailing={!disabled && <Caret name=\"chevron-down\" size={16} $rotate={expanded} />}\n />\n )\n}\n\nexport default PickerModeToggle\n","import { isFunction } from '@loadsmart/utils-function'\nimport isEmpty from 'utils/toolset/isEmpty'\n\nexport type DateHelperOptions = {\n normalize?: boolean\n}\n\nexport const DEFAULT_OPTIONS: DateHelperOptions = {\n normalize: true,\n}\n\nexport type InputDate = string | number | Date\n\ntype Unit = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'millisecond'\ntype Operator = '>=' | '>' | '=' | '<' | '<='\n\nexport type DateConstraint =\n | InputDate\n | [InputDate, InputDate]\n | [null, InputDate]\n | [InputDate, null]\n\nexport type FunctionConstraint = (day: CalendarDate) => boolean\n\nexport type CalendarConstraint = DateConstraint | FunctionConstraint\n\nexport interface CalendarDate {\n /**\n * Get `Date` object representing this date.\n * @returns {Date}\n */\n get(): Date\n /**\n * Get the year using Universal Coordinated Time (UTC).\n * @returns {number}\n */\n getYear(): number\n /**\n * Gets the month using Universal Coordinated Time (UTC).\n * @returns {number}\n */\n getMonth(): number\n /**\n * Get the day-of-the-month, using Universal Coordinated Time (UTC).\n * @returns {number}\n */\n getDate(): number\n /**\n * Get the time value in milliseconds.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getTime(): number\n /**\n * Get the day of the week.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getWeekday(): number\n /**\n * Get the hours value.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getHours(): number\n /**\n * Get the minutes value.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getMinutes(): number\n /**\n * Get the seconds value.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getSeconds(): number\n /**\n * Get the milliseconds value.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getMilliseconds(): number\n /**\n * Check if the current date matches **at least one** of the provided constraints.\n *\n * [!] Be aware that all dates in this comparison will be normalized to 12:00:00 (UTC).\n *\n * @param {...CalendarConstraint[]} constraintsArg\n * @returns {boolean}\n */\n matches(...constraints: CalendarConstraint[]): boolean\n /**\n * Set the given `value` to the `unit` property of this instance.\n * This function mutates the internal date instance.\n * @param {Unit} unit\n * @param {number} value\n * @returns {CalendarDate}\n */\n set(unit: Unit, value: number): CalendarDate\n /**\n * Return a copy of this instance, adding the given `value` to the `unit` property.\n * @param {Unit} unit\n * @param {number} value\n * @returns {CalendarDate}\n */\n add(unit: Unit, value: number): CalendarDate\n /**\n * Return a copy of this instance, subtracting the given `value` from the `unit` property.\n * @param {Unit} unit\n * @param {number} value\n * @returns {CalendarDate}\n */\n subtract(unit: Unit, value: number): CalendarDate\n /**\n * Compare this date with the given `other`.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @param {Operator} operator - type of comparison to be performed.\n * @param {CalendarDate} other - Other `CalendarDate` to compare with.\n * @param {Unit} [precision] - notice that the precision increases with the evaluated period, so year < month < day < hour < minute < second < millisecond. Default is 'day'.\n * @return {boolean} comparison result\n */\n is(operator: Operator, other: CalendarDate, precision?: string): boolean\n /**\n * Return this date as a string value in ISO format.\n * @returns {string}\n */\n toString(): string\n}\n\nexport type CalendarDateRange = [CalendarDate | null, CalendarDate | null]\n\n/**\n * Ideally, follow the date/time string formats:\n * * `YYYY-MM-DD`\n * * `YYYY-MM-DDTHH:mm:ss.sssZ`\n * * `YYYY-MM-DDTHH:mm:ss.sss+00:00`\n *\n * `dateArg` is expected to have timezone information or to be UTC.\n *\n * By default, we normalize the input date to 12:00:00 (UTC); this simplifies comparison of dates; be mindful\n * of this when using this helper for time relate logic.\n * You can disable this behavior by passing `options.normalize: false`.\n *\n * @param {InputDate} [dateArg]\n * @return {CalendarDate}\n */\nfunction DateHelper(dateArg?: InputDate, optionsArg = DEFAULT_OPTIONS): CalendarDate {\n const options = { ...DEFAULT_OPTIONS, ...optionsArg }\n const utcDate = (function normalizeToUTC() {\n let date = new Date()\n\n if (dateArg != null) {\n date = new Date(dateArg)\n }\n\n // create a date with local timezone based on the UTC input date\n const utcDate = new Date(\n Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n options.normalize ? 12 : date.getUTCHours(),\n options.normalize ? 0 : date.getUTCMinutes(),\n options.normalize ? 0 : date.getUTCSeconds(),\n options.normalize ? 0 : date.getUTCMilliseconds()\n )\n )\n\n return utcDate\n })()\n\n return {\n get() {\n return utcDate\n },\n getYear() {\n return utcDate.getUTCFullYear()\n },\n getMonth() {\n return utcDate.getUTCMonth()\n },\n getDate() {\n return utcDate.getUTCDate()\n },\n getTime() {\n return utcDate.getTime()\n },\n getWeekday() {\n return utcDate.getUTCDay()\n },\n getHours() {\n return utcDate.getUTCHours()\n },\n getMinutes() {\n return utcDate.getUTCMinutes()\n },\n getSeconds() {\n return utcDate.getUTCSeconds()\n },\n getMilliseconds() {\n return utcDate.getUTCMilliseconds()\n },\n matches(...constraints: CalendarConstraint[]): boolean {\n if (isEmpty(constraints)) {\n return false\n }\n\n const constraintEvaluators = constraints.map(getConstraintEvaluator)\n const date = DateHelper(utcDate)\n\n return constraintEvaluators.some((evaluator) => {\n return evaluator(date)\n })\n },\n add(unit: Unit, value: number) {\n return add(utcDate, unit, value)\n },\n subtract(unit: Unit, value: number) {\n return add(utcDate, unit, -1 * value)\n },\n set(unit: Unit, value: number) {\n const newValue = {\n year: utcDate.getUTCFullYear(),\n month: utcDate.getUTCMonth(),\n day: utcDate.getUTCDate(),\n hour: utcDate.getUTCHours(),\n minute: utcDate.getUTCMinutes(),\n second: utcDate.getUTCSeconds(),\n millisecond: utcDate.getUTCMilliseconds(),\n [unit]: value,\n }\n\n utcDate.setUTCFullYear(newValue.year)\n utcDate.setUTCMonth(newValue.month)\n utcDate.setUTCDate(newValue.day)\n utcDate.setUTCHours(newValue.hour)\n utcDate.setUTCMinutes(newValue.minute)\n utcDate.setUTCSeconds(newValue.second)\n utcDate.setUTCMilliseconds(newValue.millisecond)\n\n return this\n },\n is(operator: Operator, other: CalendarDate, precision?: Unit): boolean {\n function compare(a: number, b: number) {\n let result\n\n switch (operator) {\n case '>=':\n result = a >= b\n break\n case '>':\n result = a > b\n break\n case '<':\n result = a < b\n break\n case '<=':\n result = a <= b\n break\n default:\n result = a === b\n break\n }\n\n return result\n }\n\n return compare(\n getComparableDate(utcDate, precision),\n getComparableDate(other.get(), precision)\n )\n },\n toString(): string {\n return utcDate.toISOString()\n },\n }\n}\n\n/**\n * This method takes a date and a unit of precision and then normalizes the given date based on that precision.\n * The return will be the timestamp of the normalized date\n *\n * @example\n * ```js\n * getComparableDate(new Date('2022-10-13T17:42:19.948Z'), 'hour')) // returns 1665680400000\n *\n * // '2022-10-13T17:42:19.948Z' will be normalized to '2022-10-13T17:00:00.000Z'\n * // 1665680400000 is equal to: new Date('2022-10-13T17:00:00.000Z').getTime()\n * ```\n *\n * @param {Date} date\n * @param {Unit} precision\n * @returns {number}\n */\nexport function getComparableDate(date: Date, precision: Unit = 'day'): number {\n const DATE_ZERO = MIN_SUPPORTED_DATE.toString()\n const COMPARE_TO = {\n year: 4,\n month: 7,\n day: 10,\n hour: 13,\n minute: 16,\n second: 19,\n millisecond: 24,\n }\n const sliceIndex = COMPARE_TO[precision]\n\n if (sliceIndex == null) {\n throw new Error(`precision ${precision} is not supported`)\n }\n\n const normalizedPart = DATE_ZERO.slice(sliceIndex)\n const datePart = date.toISOString().slice(0, sliceIndex)\n const normalizedDate = `${datePart}${normalizedPart}`\n\n return new Date(normalizedDate).getTime()\n}\n\n/**\n * Constraints represent ranges of dates, inclusive in both ends.\n * Returns an array representing the initial and final timestamps (after the transformations applied by `DateHelper`).\n *\n * @example\n * ```js\n * // to represent a range that starts and ends in the same date\n * getConstraintRange(1643371200000) // returns [1643371200000, 1643371200000]\n * getConstraintRange([1643371200000, 1643371200000]) // returns [1643371200000, 1643371200000]\n * getConstraintRange('2022-01-28T12:00:00.000Z') // returns [1643371200000, 1643371200000]\n * getConstraintRange(['2022-01-28T12:00:00.000Z', '2022-01-28T12:00:00.000Z']) // returns [1643371200000, 1643371200000]\n *\n * // to represent a range that starts at one date and ends at another\n * getConstraintRange([1641038400000, 1643371200000]) // returns [1641038400000, 1643371200000]\n * getConstraintRange(['2022-01-01T12:00:00.000Z', '2022-01-28T12:00:00.000Z']) // returns [1641038400000, 1643371200000]\n *\n * // to represent a range that starts at one date and has no end\n * getConstraintRange([1641038400000, null]) // returns [1641038400000, `MAX_SUPPORTED_DATE`]\n * getConstraintRange(['2022-01-01T12:00:00.000Z', null]) // returns [1641038400000, `MAX_SUPPORTED_DATE`]\n *\n * // to represent a range that ends at one date and has no start\n * getConstraintRange([null, 1643371200000]) // returns [0, 1643371200000]\n * getConstraintRange([null, '2022-01-28T12:00:00.000Z']) // returns [0, 1643371200000]\n * ```\n * @param rangeArg\n * @returns\n */\nexport function getConstraintRange(rangeArg: DateConstraint): [number, number] {\n let range: [number, number]\n\n if (!Array.isArray(rangeArg)) {\n const timestamp = DateHelper(rangeArg).getTime()\n range = [timestamp, timestamp]\n } else {\n const rangeStart = rangeArg[0] != null ? DateHelper(rangeArg[0]) : MIN_SUPPORTED_DATE\n const rangeEnd = rangeArg[1] != null ? DateHelper(rangeArg[1]) : MAX_SUPPORTED_DATE\n\n range = [rangeStart.getTime(), rangeEnd.getTime()]\n }\n\n return range\n}\n\n/**\n * Add the given `value` to the provided `unit` of the provided `date`.\n * @param {Date} date - Date where the operation should be performed.\n * @param {Unit} unit - period\n * @param {number} value - value to be added\n * @returns {Date} new date after the operation.\n */\nfunction add(date: Date, unit: Unit, value: number): CalendarDate {\n const increment = {\n year: 0,\n month: 0,\n day: 0,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n [unit]: value,\n }\n\n const newDate = new Date(\n Date.UTC(\n date.getUTCFullYear() + increment.year,\n date.getUTCMonth() + increment.month,\n date.getUTCDate() + increment.day,\n date.getUTCHours() + increment.hour,\n date.getUTCMinutes() + increment.minute,\n date.getUTCSeconds() + increment.second,\n date.getUTCMilliseconds() + increment.millisecond\n )\n )\n\n // Do not normalize the clone since all units must be preserved.\n return DateHelper(newDate, { normalize: false })\n}\n\n/**\n * Wrap range constraint into a function and return a function constraint untouched.\n * @param {CalendarConstraint} constraint\n * @returns {(day: CalendarDate) => boolean}\n */\nexport function getConstraintEvaluator(\n constraint: CalendarConstraint\n): (day: CalendarDate) => boolean {\n if (isFunction(constraint)) {\n return constraint\n }\n\n const [start, end] = getConstraintRange(constraint)\n\n return function matches(day: CalendarDate): boolean {\n if (start > end) {\n throw new InvalidDateConstraintError([start, end])\n }\n\n return start <= day.getTime() && day.getTime() <= end\n }\n}\n\nexport function padded(value: number | string, maxLength = 2): string {\n return String(value).padStart(maxLength, '0')\n}\n\nexport class InvalidDateConstraintError extends Error {\n constructor([start, end]: [number, number]) {\n super(`Invalid constraint: [${start}, ${end}]`)\n }\n}\n\nexport const TODAY = DateHelper()\n\n/**\n * Maximum and minimum supported `Date`.\n * Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#the_ecmascript_epoch_and_timestamps\n */\nexport const MIN_SUPPORTED_DATE = DateHelper(0, { normalize: false })\nexport const MAX_SUPPORTED_DATE = DateHelper(8.64e15 - 1)\n\nexport default DateHelper\n","import { useEffect, useState } from 'react'\n\nimport { useDidMount } from 'hooks/useDidMount'\nimport toArray from 'utils/toolset/toArray'\n\nimport DateHelper, { TODAY } from './Date.helper'\nimport type { useCalendarProps, useCalendarReturn, RenderableMonth } from './Calendar.types'\n\nfunction useCalendar(props: useCalendarProps): useCalendarReturn {\n const { constraints, onSelect, mode = 'single' } = props\n const amountOfMonthsToRender = mode == 'single' ? 1 : 2\n\n const didMount = useDidMount()\n const [selected, setSelected] = useState<ReturnType<typeof getSelectionPair>>(() =>\n getSelectionPair(props.selected)\n )\n const [renderableMonths, setRenderableMonths] = useState<ReturnType<typeof getRenderableMonths>>(\n () => {\n const month = props.month != null ? props.month : TODAY.getMonth()\n const year = props.year != null ? props.year : TODAY.getYear()\n\n return getRenderableMonths(year, month, amountOfMonthsToRender)\n }\n )\n\n /**\n * Set the month to be rendered (or initial month when calendar is in range mode).\n * @param {Object} args\n * @param {number} [args.month] - Initial month to be rendered, if not provided, the current initial month will be used.\n * @param {number} [args.year] - Initial year to be rendered, if not provided, the current initial month will be used.\n */\n function set(args: { month?: number; year?: number }) {\n const [initialMonth] = renderableMonths\n const date = new Date(args.year ?? initialMonth.year, args.month ?? initialMonth.month)\n\n setRenderableMonths(\n getRenderableMonths(date.getFullYear(), date.getMonth(), amountOfMonthsToRender)\n )\n }\n\n /**\n * Select day or day range.\n * @param range `null` to clear selection, selection range start, or an array with selection start and end.\n */\n function select(range: useCalendarProps['selected']) {\n const [start, end] = getSelectionPair(range)\n\n function getSelectionBoundary(boundary?: string | number | null): string | null {\n if (boundary != null) {\n return DateHelper(boundary).toString()\n }\n\n return null\n }\n\n setSelected([start, end])\n\n if (didMount) {\n // prevent calling onSelect when initialized with value\n onSelect?.([getSelectionBoundary(start), getSelectionBoundary(end)])\n }\n }\n\n /**\n * Clear calendar selection.\n */\n function clear() {\n select([null, null])\n }\n\n useEffect(\n function onMonthOrYearPropsChange() {\n set({\n month: props.month,\n year: props.year,\n })\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.month, props.year]\n )\n\n useEffect(\n function onSelectedPropChange() {\n const newSelected = getSelectionPair(props.selected)\n\n if (newSelected[0] != selected[0] || newSelected[1] != selected[1]) {\n setSelected(newSelected)\n }\n },\n // we just intend to update the internal state when the prop changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.selected]\n )\n\n return {\n mode,\n months: renderableMonths,\n selected,\n constraints: toArray(constraints || []),\n clear,\n set,\n select,\n }\n}\n\nconst DAY_IN_MILLISECONDS = 24 * 60 * 60 * 1000\n\n/**\n * Generate the whole grid of days,\n * @param {number} year\n * @param {number }month\n * @returns {RenderableMonth}\n */\nexport function getRenderableMonth(year: number, month: number): RenderableMonth {\n const date = DateHelper(Date.UTC(year, month))\n\n const firstDayOfTheWeek = date.getWeekday()\n const totalDaysInMonth = 32 - new Date(Date.UTC(year, month, 32)).getUTCDate()\n\n const days = []\n\n /**\n * Filling days of previous month.\n * If the month does not start on Sunday, then we need to generate only the days of\n * the previous month to fill out the grid.\n */\n for (let index = firstDayOfTheWeek; index > 0; index--) {\n days.push(DateHelper(date.getTime() - index * DAY_IN_MILLISECONDS))\n }\n\n // Filling days of current month\n for (let index = 0; index < totalDaysInMonth; index++) {\n days.push(DateHelper(date.getTime() + index * DAY_IN_MILLISECONDS))\n }\n\n /**\n * Filling days of next month, just enough to complete the grid.\n */\n for (let index = 0; (firstDayOfTheWeek + totalDaysInMonth + index) % 7 != 0; index++) {\n days.push(DateHelper(date.getTime() + (totalDaysInMonth + index) * DAY_IN_MILLISECONDS))\n }\n\n return {\n month: date.getMonth(),\n year: date.getYear(),\n days,\n }\n}\n\n/**\n *\n * @param {number} year\n * @param {number} month\n * @param {number?} amount - number of months to be generated. Default value is 1.\n * @returns\n */\nexport function getRenderableMonths(\n year: number,\n month: number,\n amount = 1\n): ReturnType<typeof getRenderableMonth>[] {\n if (month < 0 || month > 11) {\n throw new Error(\n 'Invalid month! Please, provide a number between 0 (January) and 11 (December).'\n )\n }\n\n // TODO: validate accepted year range?\n\n const months = new Array<ReturnType<typeof getRenderableMonth>>()\n\n for (let i = 0; i < amount; i++) {\n months.push(getRenderableMonth(year, month + i))\n }\n\n return months\n}\n\nexport function getSelectionPair(\n selected?: null | [string | number | null, string | number | null]\n): [number | null, number | null] {\n const [start, end] = toArray(selected)\n\n return [\n start != null ? DateHelper(start).getTime() : null,\n end != null ? DateHelper(end ?? start).getTime() : null,\n ]\n}\n\nexport default useCalendar\n","export const getOrdinalSuffix = (number: number): 'st' | 'nd' | 'rd' | 'th' => {\n if (number % 10 === 1 && number !== 11) {\n return 'st'\n }\n\n if (number % 10 === 2 && number !== 12) {\n return 'nd'\n }\n\n if (number % 10 === 3 && number !== 13) {\n return 'rd'\n }\n\n return 'th'\n}\n","import { identity } from '@loadsmart/utils-function'\nimport { padded } from './Date.helper'\n\nimport type { CalendarDate } from './Date.helper'\nimport { getOrdinalSuffix } from 'utils/toolset/getOrdinalSuffix'\n\nexport interface DateFormat {\n format(date: CalendarDate): string\n}\n\nconst getTokenValue = (date: CalendarDate, token: string) => {\n const value = DEFAULT_FORMATTERS[token].format(date.get())\n\n return (ADDITIONAL_FORMATTERS[token] || identity)(value)\n}\n\n/**\n * This helpers provides a convenient layer on top of `Intl.DateTimeFormat`,\n * using common tokens (based on `momentjs`) to format dates.\n */\nexport default function DateFormatHelper(format: string): DateFormat {\n const tokens = tokenizer(format)\n\n return {\n format(date: CalendarDate) {\n return tokens\n .map((token, index) => {\n const previousIndex = index - 1\n const previousToken = tokens[previousIndex]\n\n if (token in DEFAULT_FORMATTERS) {\n return getTokenValue(date, token)\n }\n\n if (token in COMPOUND_FORMATTERS && COMPOUND_FORMATTERS[token].valid(previousToken)) {\n return COMPOUND_FORMATTERS[token].format(getTokenValue(date, previousToken))\n }\n\n return token\n })\n .join('')\n },\n }\n}\n\n/**\n * Supported tokens:\n *\n *| | Token | Output |\n *| :----------------------------- | :---- | :---------------------------------------- |\n *| Month | MM | 01, 02, ..., 11, 12 |\n *| | MMM | Jan, Feb, ..., Nov, Dec |\n *| | MMMM | January, February, ..., November,December |\n *| Day of Month | D | 1, 2, ..., 30, 31 |\n *| Day of Month with leading 0 | DD | 01, 02, ..., 30, 31 |\n *| Day of week | ddd | Sun, Mon, ... Fri, Sat |\n *| | dddd | Sunday, Monday, ..., Friday, Saturday |\n *| Year | YYYY | 1970, 1971, ..., 2029, 2030 |\n *| Hour | HH | 00, 01, ..., 22, 23 |\n *| | hh | 00, 01, ..., 11, 12 |\n *| Minute | mm | 01, 02, ..., 58, 59 |\n *| Seconds | ss | 01, 02, ..., 58, 59 |\n *| Post or ante meridiem | a | am, pm |\n *| | A | AM, PM |\n *| Ordinal numbers | o | 1st, 2nd, 3rd, ..., 10th |\n *| Scaped sequence | [] | |\n *\n * @param format\n * @returns\n */\nexport function tokenizer(format: string): string[] {\n function getType(char?: string): string {\n if (\n char != undefined &&\n ['M', 'd', 'D', 'Y', 'H', 'h', 'm', 's', 'A', 'a', 'o'].includes(char)\n ) {\n return 'token'\n }\n\n return 'string'\n }\n\n const tokens: string[] = []\n\n let i = 0\n let prev\n let isEscaping = false\n\n while (i < format.length) {\n const at = Math.max(0, tokens.length - 1)\n\n const char = format.charAt(i)\n i++\n\n if (['[', ']'].includes(char)) {\n isEscaping = char === '['\n } else if (isEscaping) {\n tokens[at] = `${tokens[at] || ''}${char}`\n } else if (prev !== char && [getType(prev), getType(char)].includes('token')) {\n // we just need to start a new piece of string if we found a possible valid token\n tokens.push(char)\n } else {\n tokens[at] = `${tokens[at] || ''}${char}`\n }\n\n prev = char\n }\n\n return tokens\n}\n\n/**\n * TODO: Evaluate the need to add the following pollyfills:\n * - https://formatjs.io/docs/polyfills/intl-datetimeformat/\n * - https://formatjs.io/docs/polyfills/intl-getcanonicallocales/\n * - https://formatjs.io/docs/polyfills/intl-locale/\n * - https://formatjs.io/docs/polyfills/intl-numberformat/\n * - https://formatjs.io/docs/polyfills/intl-pluralrules/\n */\nconst DEFAULT_FORMATTERS: Record<string, Intl.DateTimeFormat> = {\n MM: new Intl.DateTimeFormat('en-US', {\n month: '2-digit',\n }),\n MMM: new Intl.DateTimeFormat('en-US', {\n month: 'short',\n }),\n MMMM: new Intl.DateTimeFormat('en-US', {\n month: 'long',\n }),\n D: new Intl.DateTimeFormat('en-US', {\n day: 'numeric',\n }),\n DD: new Intl.DateTimeFormat('en-US', {\n day: '2-digit',\n }),\n ddd: new Intl.DateTimeFormat('en-US', {\n weekday: 'short',\n }),\n dddd: new Intl.DateTimeFormat('en-US', {\n weekday: 'long',\n }),\n YYYY: new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n }),\n HH: new Intl.DateTimeFormat('en-US', {\n hour: '2-digit',\n hour12: false,\n }),\n hh: new Intl.DateTimeFormat('en-US', {\n hour: '2-digit',\n hour12: true,\n }),\n mm: new Intl.DateTimeFormat('en-US', {\n minute: '2-digit',\n hour12: false,\n }),\n ss: new Intl.DateTimeFormat('en-US', {\n second: '2-digit',\n hour12: false,\n }),\n a: new Intl.DateTimeFormat('en-US', {\n hour: '2-digit',\n hour12: true,\n }),\n A: new Intl.DateTimeFormat('en-US', {\n hour: '2-digit',\n hour12: true,\n }),\n}\n\n/**\n * Apply additional formatting.\n *\n * Padding, for example, is applied in some cases due to [this](https://bugs.chromium.org/p/chromium/issues/detail?id=527926) bug.\n */\nconst ADDITIONAL_FORMATTERS: Record<string, (value: string) => string> = {\n hh: (value: string) => (value ? padded(value.split(/\\s/)[0], 2) : value),\n HH: (value: string) => (value ? padded(value, 2) : value),\n mm: (value: string) => (value ? padded(value, 2) : value),\n ss: (value: string) => (value ? padded(value, 2) : value),\n a: (value: string) => (value ? (value.split(/\\s/)[1] || '').toLowerCase() : value),\n A: (value: string) => (value ? (value.split(/\\s/)[1] || '').toUpperCase() : value),\n}\n\ntype CompoundFormatter = {\n valid: (token: string) => boolean\n format: (value: string) => string\n}\n\nconst COMPOUND_FORMATTERS: Record<string, CompoundFormatter> = {\n o: {\n valid: (token) => new Set(['D', 'DD']).has(token),\n format: (value: string) => getOrdinalSuffix(parseInt(value, 10)),\n },\n}\n","import styled from 'styled-components'\n\nimport { BaseButton } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport activatable from 'styles/activatable'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport typography from 'styles/typography'\n\nconst PickerButton = styled(BaseButton)<{\n $status:\n | 'default'\n | 'current-day'\n | 'faded'\n | 'selection-start'\n | 'selection-end'\n | 'selection'\n | 'next-month-day'\n}>`\n ${typography(\n conditional({\n body: whenProps({ $status: ['default', 'faded'] }),\n 'body-bold': whenProps({\n $status: ['current-day', 'selection-start', 'selection', 'selection-end'],\n }),\n })\n )}\n\n user-select: none;\n\n height: 100%;\n\n border-radius: 0;\n\n color: ${conditional({\n 'color-neutral-lighter': whenProps({\n $status: ['selection-start', 'selection', 'selection-end'],\n }),\n 'color-neutral-darker': whenProps({ $status: ['default', 'faded'] }),\n 'color-neutral-dark': whenProps({ $status: 'next-month-day' }),\n 'color-accent': whenProps({ $status: 'current-day' }),\n })};\n\n background: ${conditional({\n 'color-transparent': whenProps({ $status: ['default', 'faded', 'next-month-day'] }),\n 'color-neutral-darker': whenProps({ $status: ['selection-start', 'selection-end'] }),\n 'color-neutral': whenProps({ $status: 'selection' }),\n 'color-neutral-lightest': whenProps({ $status: 'current-day' }),\n })};\n\n border-color: ${conditional({\n 'color-transparent': whenProps({ $status: ['default', 'faded', 'next-month-day'] }),\n 'color-neutral-darker': whenProps({ $status: ['selection-start', 'selection-end'] }),\n 'color-neutral': whenProps({ $status: 'selection' }),\n 'color-neutral-light': whenProps({ $status: 'current-day' }),\n })};\n\n ${conditional({\n 'opacity: 0.4;': whenProps({ $status: 'faded' }),\n 'opacity: 1;': whenProps({ $status: (status) => status !== 'faded' }),\n })}\n\n padding: ${token('space-xs')} ${token('space-s')};\n\n ${hoverable`\n border-color: ${token('color-neutral')};\n background-color: ${conditional({\n 'color-transparent': whenProps({ $status: ['default', 'faded', 'next-month-day'] }),\n 'color-neutral-dark': whenProps({\n $status: ['selection-start', 'selection', 'selection-end'],\n }),\n 'color-neutral-lightest': whenProps({ $status: 'current-day' }),\n })};\n color: ${conditional({\n 'color-neutral-dark': whenProps({ $status: ['default', 'faded'] }),\n 'color-neutral-lightest': whenProps({\n $status: ['selection-start', 'selection', 'selection-end'],\n }),\n })};\n\n font-weight: ${token('font-weight-bold')};\n `}\n\n ${focusable`\n box-shadow: ${token('button-primary-outline')};\n font-weight: ${token('font-weight-bold')};\n `}\n\n ${activatable`\n border-color: ${token('color-neutral')};\n background-color: ${conditional({\n 'color-transparent': whenProps({ 'aria-checked': false }),\n 'color-neutral': whenProps({ 'aria-checked': true }),\n })};\n color: ${conditional({\n 'color-neutral': whenProps({ 'aria-checked': false }),\n 'color-neutral-white': whenProps({ 'aria-checked': true }),\n })};\n `}\n\n ${disableable`\n background-color: ${token('color-transparent')};\n border-color: ${conditional({\n 'color-neutral-darkest': whenProps({ 'aria-checked': true }),\n 'color-transparent': whenProps({ 'aria-checked': false }),\n })};\n\n color: ${token('color-neutral-darker')};\n `}\n\n visibility: ${conditional({\n visible: whenProps({ 'aria-hidden': false }),\n hidden: whenProps({ 'aria-hidden': true }),\n })};\n`\n\nexport default styled(PickerButton)({})\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Group } from 'components/Layout'\nimport { Text as DefaultText } from 'components/Text'\nimport { TODAY } from '../Date.helper'\nimport DateFormatHelper from '../DateFormat.helper'\nimport PickerButton from './PickerButton'\n\nimport type { CalendarDate } from '../Date.helper'\nimport type { CalendarPickerProps, RenderableMonth, useCalendarReturn } from '../Calendar.types'\n\nexport const WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nexport const formatter = DateFormatHelper('MM/DD/YYYY')\n\nfunction getStatus(calendar: useCalendarReturn, date: CalendarDate) {\n const isPastYearDay =\n date.getYear() < calendar.months[0].year && date.getMonth() > calendar.months[0].month\n\n if (calendar.selected[0] == date.getTime()) {\n return 'selection-start'\n } else if (calendar.selected[1] == date.getTime()) {\n return 'selection-end'\n } else if (\n calendar.selected[0] != null &&\n date.getTime() > calendar.selected[0] &&\n calendar.selected[1] != null &&\n date.getTime() < calendar.selected[1]\n ) {\n return 'selection'\n } else if (\n calendar.mode === 'single' &&\n (isPastYearDay || date.getMonth() < calendar.months[0].month)\n ) {\n return 'faded'\n } else if (calendar.mode === 'single' && date.getMonth() > calendar.months[0].month) {\n return 'next-month-day'\n } else if (date.getTime() == TODAY.getTime()) {\n return 'current-day'\n }\n\n return 'default'\n}\n\nconst Text = styled(DefaultText)`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n user-select: none;\n`\n\nconst Grid = styled.div`\n display: grid;\n grid-gap: ${token('space-2xs')};\n grid-template-rows: 1.25rem repeat(auto-fill, 2.5rem);\n grid-template-columns: repeat(7, 2.5rem);\n`\n\n/**\n * filling days of previous month\n * TODO: supress this for range selection\n */\nfunction CalendarDayPicker({ calendar, onDayClick }: CalendarPickerProps): JSX.Element {\n function renderDaysOfWeek() {\n return WEEKDAYS.map((weekday) => (\n <Text\n key={weekday}\n as=\"abbr\"\n variant=\"chips-sm\"\n color=\"color-neutral\"\n style={{ textDecoration: 'none' }}\n >\n {weekday}\n </Text>\n ))\n }\n\n function renderDaysOfMonth(month: RenderableMonth) {\n const constraints = calendar.constraints || []\n\n return month.days.map((day) => {\n const status = getStatus(calendar, day)\n const formatted = formatter.format(day)\n const isDisabled = day.matches(...constraints)\n\n if (calendar.mode === 'range' && day.getMonth() !== month.month) {\n return <span key={formatted} aria-hidden></span>\n }\n\n return (\n <PickerButton\n key={formatted}\n type=\"button\"\n role=\"checkbox\"\n aria-checked={['selection-start', 'selection', 'selection-end'].includes(status)}\n aria-label={formatted}\n disabled={isDisabled}\n onClick={() => {\n if (!isDisabled && onDayClick) {\n onDayClick(day.getTime())\n }\n }}\n $status={status}\n >\n <time dateTime={day.toString()}>{day.getDate()}</time>\n </PickerButton>\n )\n })\n }\n\n return (\n <Group>\n {calendar.months.map((month) => {\n return (\n <Grid key={`${month.year}${month.month}`} role=\"group\" data-testid=\"calendar-day-picker\">\n {renderDaysOfWeek()}\n {renderDaysOfMonth(month)}\n </Grid>\n )\n })}\n </Group>\n )\n}\n\nexport default CalendarDayPicker\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport MonthHelper from '../Month.helper'\nimport PickerButton from './PickerButton'\n\nimport type { useCalendarReturn, CalendarPickerProps } from '../Calendar.types'\nimport type { CalendarMonth, CalendarMonthAlias } from '../Month.helper'\n\nconst Container = styled.div`\n display: grid;\n grid-auto-rows: 3.75rem;\n grid-gap: ${token('space-2xs')};\n grid-template-columns: repeat(3, 1fr);\n`\n\nfunction getStatus(calendar: useCalendarReturn, month: CalendarMonth) {\n if (calendar.months[0].month == month.index) {\n return 'selection-start'\n }\n\n return 'default'\n}\n\nfunction CalendarMonthPicker({ calendar, mode }: CalendarPickerProps): JSX.Element {\n return (\n <Container role=\"radiogroup\" data-testid=\"calendar-month-picker\">\n {MonthHelper.getAll().map((month) => (\n <PickerButton\n key={month.index}\n type=\"button\"\n role=\"radio\"\n aria-checked={month.index == calendar.months[0].month}\n aria-label={`Select month ${month.name}`}\n onClick={() => {\n calendar.set({ month: month.index })\n mode.dispatch({ type: 'set-mode', payload: 'day-picker' })\n }}\n $status={getStatus(calendar, month)}\n >\n <time dateTime={`${calendar.months[0].year}-${month.index + 1}`}>\n {MonthHelper(month.name as CalendarMonthAlias).format('short')}\n </time>\n </PickerButton>\n ))}\n </Container>\n )\n}\n\nexport default CalendarMonthPicker\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport DefaultPickerButton from './PickerButton'\nimport range from 'utils/toolset/range'\n\nimport type { useCalendarReturn, CalendarPickerProps } from '../Calendar.types'\n\nconst Container = styled.div`\n display: grid;\n grid-auto-rows: 2.875rem;\n grid-gap: ${token('space-2xs')};\n grid-template-columns: repeat(4, 1fr);\n`\n\nconst PickerButton = styled(DefaultPickerButton)`\n block-size: 46px;\n`\n\nfunction getStatus(calendar: useCalendarReturn, year: number) {\n if (calendar.months[0].year == year) {\n return 'selection-start'\n }\n\n return 'default'\n}\n\nfunction CalendarYearPicker({ calendar, mode }: CalendarPickerProps): JSX.Element {\n return (\n <Container role=\"radiogroup\" data-testid=\"calendar-year-picker\">\n {range(2012, 2032).map((year) => (\n <PickerButton\n key={year}\n type=\"button\"\n role=\"radio\"\n aria-checked={year == calendar.months[0].year}\n aria-label={`Select year ${year}`}\n onClick={() => {\n calendar.set({ year })\n mode.dispatch({ type: 'set-mode', payload: 'month-picker' })\n }}\n $status={getStatus(calendar, year)}\n >\n {year}\n </PickerButton>\n ))}\n </Container>\n )\n}\n\nexport default CalendarYearPicker\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { BaseButton } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport { Group, Stack } from 'components/Layout'\nimport { Icon } from 'components/Icon'\nimport conditional, { whenProps } from 'tools/conditional'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport MonthHelper from './Month.helper'\nimport PickerModeToggle from './PickerModeToggle'\nimport typography from 'styles/typography'\nimport useCalendar from './useCalendar'\nimport usePickerMode from './usePickerMode'\n\nimport type { CalendarMonthAlias } from './Month.helper'\nimport type { CalendarProps, GenericCalendarProps } from './Calendar.types'\n\nconst Container = styled(Stack)`\n ${typography('body')}\n min-width: calc((7 * 2.5rem) + (6 * ${token('space-2xs')}));\n`\n\nconst BorderlessButton = styled(BaseButton)`\n ${typography('body-bold')}\n border-color: transparent;\n background-color: transparent;\n\n color: ${token('color-neutral')};\n\n inline-size: 40px;\n\n visibility: ${conditional({\n visible: whenProps({ 'aria-hidden': false }),\n hidden: whenProps({ 'aria-hidden': true }),\n })};\n\n ${hoverable`\n color: ${token('color-neutral-dark')};\n `}\n\n ${focusable`\n box-shadow: ${token('button-primary-outline')};\n `}\n`\n\n/**\n * Implementation based on\n * * https://medium.com/swlh/build-a-date-picker-in-15mins-using-javascript-react-from-scratch-f6932c77db09\n * * https://codepen.io/zellwk/pen/xNpKwp\n */\nexport function GenericCalendar(props: GenericCalendarProps): JSX.Element {\n const { calendar, onDayClick, onMonthClick, onYearClick, ...others } = props\n const mode = usePickerMode()\n\n const { Picker } = mode\n\n return (\n <Container space=\"xs\" {...others}>\n <Group>\n <BorderlessButton\n type=\"button\"\n aria-label=\"Navigate to previous month\"\n aria-hidden={!mode.is('day-picker')}\n onClick={() => {\n calendar.set({ month: calendar.months[0].month - 1 })\n }}\n >\n <Icon name=\"caret-left\" size={16} />\n </BorderlessButton>\n\n {calendar.months.map((month) => {\n return (\n <Group key={month.month} space=\"xs\" align=\"center\" justify=\"center\" style={{ flex: 1 }}>\n <PickerModeToggle\n aria-label=\"Open month selection\"\n onClick={() => {\n mode.dispatch({ type: 'toggle-mode', payload: 'month-picker' })\n }}\n expanded={mode.is('month-picker')}\n disabled={calendar.mode == 'range'}\n >\n {MonthHelper(month.month as CalendarMonthAlias).format('long')}\n </PickerModeToggle>\n\n <PickerModeToggle\n aria-label=\"Open year selection\"\n onClick={() => {\n mode.dispatch({ type: 'toggle-mode', payload: 'year-picker' })\n }}\n expanded={mode.is('year-picker')}\n disabled={calendar.mode == 'range'}\n >\n {month.year}\n </PickerModeToggle>\n </Group>\n )\n })}\n <BorderlessButton\n type=\"button\"\n aria-label=\"Navigate to next month\"\n aria-hidden={!mode.is('day-picker')}\n onClick={() => {\n calendar.set({ month: calendar.months[0].month + 1 })\n }}\n >\n <Icon name=\"caret-right\" size={16} />\n </BorderlessButton>\n </Group>\n\n <Picker\n calendar={calendar}\n mode={mode}\n onDayClick={onDayClick}\n onMonthClick={onMonthClick}\n onYearClick={onYearClick}\n />\n </Container>\n )\n}\n\nfunction Calendar(props: CalendarProps): JSX.Element {\n const { year, month, selected, constraints, onSelect, mode, ...rest } = props\n const calendar = useCalendar({ year, month, selected, constraints, mode, onSelect })\n\n return <GenericCalendar calendar={calendar} {...rest} />\n}\n\nexport default Calendar\n","import { useReducer } from 'react'\n\nimport DayPicker from './Pickers/DayPicker'\nimport MonthPicker from './Pickers/MonthPicker'\nimport YearPicker from './Pickers/YearPicker'\n\nimport type {\n PickerMode,\n PickerModeAction,\n usePickerModeProps,\n usePickerModeReturn,\n} from './Calendar.types'\n\nfunction usePickerMode(props?: usePickerModeProps): usePickerModeReturn {\n function reducer(state: PickerMode, action: PickerModeAction) {\n switch (action.type) {\n case 'set-mode':\n return action.payload\n case 'toggle-mode':\n if (state != action.payload) {\n return action.payload\n }\n\n return 'day-picker'\n default:\n return state\n }\n }\n\n const [mode, dispatch] = useReducer(reducer, props?.mode || 'day-picker')\n\n return {\n get() {\n return mode\n },\n is(other: PickerMode) {\n return other != null && other === mode\n },\n dispatch,\n Picker: {\n 'day-picker': DayPicker,\n 'month-picker': MonthPicker,\n 'year-picker': YearPicker,\n }[mode],\n }\n}\n\nexport default usePickerMode\n","import DateFormatHelper from './DateFormat.helper'\nimport DateHelper from './Date.helper'\n\nexport const formatter = DateFormatHelper('MM/DD/YYYY')\n\nexport function getSelection(\n selection?: number | string | null | [number | string | null, number | string | null]\n): [null | number, null | number] {\n const [start, end] = Array.isArray(selection) ? selection : [selection, selection]\n\n return [\n start != null ? DateHelper(start).getTime() : null,\n end != null ? DateHelper(end).getTime() : null,\n ]\n}\n","import { useEffect, useRef } from 'react'\n\nimport { useDropdown } from 'components/Dropdown'\nimport { TODAY, DateFormatHelper, DateHelper, useCalendar } from 'components/Calendar'\n\nimport { getSelection } from '../Calendar/Calendar.helpers'\n\nimport type { CalendarDate } from 'components/Calendar'\nimport type { DatePickerProps } from './DatePicker.types'\n\nexport const formatter = DateFormatHelper('MM/DD/YYYY')\n\nexport function formatDate(date?: number | string | null): string {\n if (!date || Number.isNaN(new Date(date).getTime())) {\n return ''\n }\n\n return formatter.format(DateHelper(date))\n}\n\nexport function getInitialCalendarSetup(\n selection: number | string | null | [number | string | null, number | string | null]\n) {\n const [selectionStart] = getSelection(selection)\n\n if (!selectionStart) {\n return {\n month: TODAY.getMonth(),\n year: TODAY.getYear(),\n }\n }\n\n const startDate = DateHelper(selectionStart)\n\n return {\n month: startDate.getMonth(),\n year: startDate.getYear(),\n }\n}\n\nexport function setInputValue(input: HTMLInputElement | null, value: string) {\n if (input != null) {\n input.value = value\n }\n}\n\nexport function getInputValue(input?: HTMLInputElement | null) {\n if (input != null) {\n return input.value\n }\n\n return null\n}\n\nfunction useDatePicker(props: DatePickerProps) {\n const { constraints, disabled, id, name, onChange, value, ...rest } = props\n\n const dropdown = useDropdown({ disabled })\n const calendar = useCalendar({\n mode: 'single',\n constraints,\n onSelect: handleDateSelect,\n })\n\n const inputRef = useRef<HTMLInputElement>()\n\n function handleDateSelect(selection: [string | null, string | null]) {\n if (!inputRef.current) {\n return\n }\n\n const [formattedDate] = getSelection(selection).map(formatDate)\n\n /**\n * This check ensures we will keep the valid date the user typed as-is and, since we're using\n * an uncontrolled input, ensures that the formatting that happens in `getFormattedSelection`\n * will not interfere with cursor position when we set the input value.\n * Bottom line is: if the input already contains the select date, no change is necessary.\n */\n if (formattedDate != formatDate(getInputValue(inputRef.current))) {\n setInputValue(inputRef.current, formattedDate)\n }\n\n onChange?.({ target: { id, name, value: selection[0] } })\n }\n\n function handleDateInputChange(date: CalendarDate) {\n if (date != null) {\n const timestamp = date.getTime()\n\n calendar.select([timestamp, timestamp])\n } else {\n calendar.clear()\n }\n }\n\n function handleDateInputClick() {\n if (!dropdown.expanded) {\n calendar.set(getInitialCalendarSetup(calendar.selected))\n dropdown.toggle()\n }\n }\n\n function handleDayClick(timestamp: number) {\n calendar.select([timestamp, timestamp])\n dropdown.collapse()\n }\n\n function handleClearClick() {\n calendar.clear()\n inputRef.current?.focus()\n }\n\n function getDropdownProps() {\n return {\n disabled,\n toggle: dropdown.toggle,\n expanded: dropdown.expanded,\n onBlur() {\n if (!inputRef.current) {\n return\n }\n\n const [currSelectedDate] = getSelection(calendar.selected).map(formatDate)\n const currInputValue = getInputValue(inputRef.current)\n\n if (currInputValue == currSelectedDate) {\n return\n }\n\n if (!currInputValue) {\n calendar.clear()\n } else {\n setInputValue(inputRef.current, currSelectedDate)\n }\n },\n }\n }\n\n function getCalendarProps() {\n return {\n ...rest.getCalendarProps?.(),\n calendar,\n onDayClick: handleDayClick,\n }\n }\n\n function getInputProps() {\n return {\n ...rest.getInputProps?.(),\n id,\n name,\n disabled,\n onChange: handleDateInputChange,\n onClick: handleDateInputClick,\n ref(node: HTMLInputElement | null) {\n if (node != null) {\n inputRef.current = node\n }\n },\n }\n }\n\n function getClearProps() {\n return {\n onClick: handleClearClick,\n }\n }\n\n useEffect(\n function onValuePropChange() {\n if (!inputRef.current) {\n return\n }\n\n const [newSelection] = getSelection(value)\n const [currSelection] = calendar.selected\n\n if (newSelection != currSelection) {\n setInputValue(inputRef.current, formatDate(newSelection))\n\n calendar.select([newSelection, newSelection])\n calendar.set(getInitialCalendarSetup([newSelection, newSelection]))\n }\n },\n // we just intend to update the selection when the prop changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [value]\n )\n\n return {\n value: getSelection(calendar.selected).map(formatDate),\n\n getDropdownProps,\n getInputProps,\n getClearProps,\n getCalendarProps,\n }\n}\n\nexport default useDatePicker\n","import React, { useContext, forwardRef } from 'react'\nimport styled from 'styled-components'\n\nimport { DateFormatHelper, DateHelper, GenericCalendar } from 'components/Calendar'\nimport { Dropdown, DropdownContext, GenericDropdown } from 'components/Dropdown'\nimport { getToken as token } from 'theming'\nimport { Group } from 'components/Layout'\nimport { Icon } from 'components/Icon'\nimport { TextField as DefaultTextField } from 'components/TextField'\nimport CloseButton from 'common/CloseButton'\nimport useDatePicker from './useDatePicker'\nimport { Popover } from 'components/Popover'\n\nimport type { CalendarDate } from 'components/Calendar'\nimport type { ChangeEvent } from 'react'\nimport type { DatePickerProps } from './DatePicker.types'\nimport type { TextFieldProps } from 'components/TextField'\n\n/**\n * https://www.regular-expressions.info/dates.html\n * https://learning.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s04.html#validation-dates-problem\n */\nconst DATE_REGEX = /^(1[0-2]|0?[1-9])\\/(3[01]|[12][0-9]|0?[1-9])\\/(19|20)\\d{2}$/\n\nexport const formatter = DateFormatHelper('MM/DD/YYYY')\n\nconst TextField = styled(DefaultTextField)`\n & > input {\n width: 10ch;\n }\n`\n\nconst DropdownMenu = styled(Dropdown.Menu)`\n width: max-content;\n min-width: initial;\n max-height: initial;\n padding: ${token('space-m')};\n overflow-y: initial;\n`\n\nexport const ClearButton = styled(CloseButton)`\n width: 1em;\n height: 1em;\n\n margin-left: calc(-1 * ${token('space-s')}); // compensate for input's padding-left\n`\n\ninterface DateInputProps extends Omit<TextFieldProps, 'onChange'> {\n onChange: (date: CalendarDate) => void\n}\n\nexport const DateInput = forwardRef<HTMLInputElement, DateInputProps>(function DateInput(\n props: DateInputProps,\n ref\n): JSX.Element {\n const { onChange, ...rest } = props\n const dropdown = useContext(DropdownContext)\n\n function handleInputChange(event: ChangeEvent<HTMLInputElement>) {\n const {\n target: { value },\n } = event\n\n if (!DATE_REGEX.test(value)) {\n return\n }\n\n onChange(DateHelper(value))\n }\n\n // TODO: use type=\"date\" when IE is no longer in the way\n return (\n <TextField\n placeholder=\"00/00/0000\"\n {...rest}\n ref={ref}\n type=\"text\"\n disabled={dropdown.disabled}\n leading={<Icon name=\"calendar\" />}\n onChange={handleInputChange}\n />\n )\n})\n\nfunction DatePicker(props: DatePickerProps): JSX.Element {\n const {\n id,\n name,\n value,\n onChange,\n disabled,\n constraints,\n getInputProps,\n getCalendarProps,\n placement,\n } = props\n\n const datePicker = useDatePicker({\n constraints,\n disabled,\n id,\n name,\n value,\n onChange,\n getInputProps,\n getCalendarProps,\n })\n\n function renderTrailing() {\n const [currSelectedDate] = datePicker.value\n\n if (!disabled && currSelectedDate) {\n return (\n <ClearButton\n size={12}\n type=\"button\"\n aria-label=\"Clear selection\"\n {...datePicker.getClearProps()}\n />\n )\n }\n\n return null\n }\n\n return (\n <GenericDropdown {...placement} {...datePicker.getDropdownProps()}>\n <Popover.Reference>\n <Group space=\"s\">\n <DateInput trailing={renderTrailing()} {...datePicker.getInputProps()} />\n </Group>\n </Popover.Reference>\n <DropdownMenu>\n <GenericCalendar {...datePicker.getCalendarProps()} />\n </DropdownMenu>\n </GenericDropdown>\n )\n}\n\nexport default DatePicker\n","import { useEffect, useRef } from 'react'\n\nimport { formatDate, getInitialCalendarSetup, getInputValue, setInputValue } from './useDatePicker'\nimport { getSelection } from '../Calendar/Calendar.helpers'\nimport { useCalendar } from 'components/Calendar'\nimport { useDropdown } from 'components/Dropdown'\n\nimport type { CalendarDate } from 'components/Calendar'\nimport type { DateRangePickerProps } from './DatePicker.types'\n\nconst AT_RANGE_START = 0\nconst AT_RANGE_END = 1\n\nfunction useDateRangePicker(props: DateRangePickerProps) {\n const { constraints, disabled, id, name, onChange, value, ...rest } = props\n\n const dropdown = useDropdown({ disabled })\n const calendar = useCalendar({\n mode: 'range',\n constraints,\n onSelect: handleDateSelect,\n })\n\n const inputsRef = useRef<[HTMLInputElement | null, HTMLInputElement | null]>([null, null])\n const currentlyPickingRef = useRef<'range-start' | 'range-end' | 'none'>('none')\n\n function handleDateSelect(selected: [string | null, string | null]) {\n ;[AT_RANGE_START, AT_RANGE_END].forEach((index) => {\n const input = inputsRef.current[index]\n const formattedDate = formatDate(selected[index])\n\n /**\n * This check ensures we will keep the valid date the user typed as-is and, since we're using\n * an uncontrolled input, ensures that the formatting that happens in `formatDate`\n * will not interfere with cursor position when we set the input value.\n * Bottom line is: if the input already contains the select date, no change is necessary.\n */\n if (formattedDate != formatDate(getInputValue(input))) {\n setInputValue(input, formattedDate)\n }\n })\n\n onChange?.({ target: { id, name, value: selected } })\n }\n\n function getDateInputChangeHandler(index: number) {\n return function handleDateInputChange(date: CalendarDate) {\n if (date != null) {\n const timestamp = date.getTime()\n\n const newSelected: typeof calendar.selected = [...calendar.selected]\n newSelected[index] = timestamp\n\n calendar.select(newSelected)\n } else {\n calendar.clear()\n }\n }\n }\n\n function handleDateInputClick() {\n if (!dropdown.expanded) {\n calendar.set(getInitialCalendarSetup(calendar.selected))\n dropdown.toggle()\n }\n }\n\n function handleDayClick(timestamp: number) {\n const [rangeStart, rangeEnd] = calendar.selected\n\n if (currentlyPickingRef.current == 'range-start') {\n if (rangeEnd != null) {\n calendar.select([timestamp, rangeEnd].sort() as [number, number])\n inputsRef.current[AT_RANGE_START]?.focus()\n } else {\n calendar.select([timestamp, rangeEnd])\n inputsRef.current[AT_RANGE_END]?.focus()\n }\n } else if (currentlyPickingRef.current == 'range-end') {\n if (rangeStart != null) {\n calendar.select([rangeStart, timestamp].sort() as [number, number])\n } else {\n calendar.select([rangeStart, timestamp])\n }\n\n inputsRef.current[AT_RANGE_END]?.focus()\n }\n }\n\n function handleClearClick() {\n calendar.clear()\n inputsRef.current[AT_RANGE_START]?.focus()\n }\n\n function handleDropdownBlur() {\n currentlyPickingRef.current = 'none'\n\n if ([AT_RANGE_START, AT_RANGE_END].some((index) => !inputsRef.current[index])) {\n return\n }\n\n if ([AT_RANGE_START, AT_RANGE_END].every((index) => !getInputValue(inputsRef.current[index]))) {\n calendar.clear()\n } else {\n const selected = getSelection(calendar.selected).map(formatDate)\n\n ;[AT_RANGE_START, AT_RANGE_END].forEach((index) => {\n setInputValue(inputsRef.current[index], selected[index])\n })\n }\n }\n\n function handleDoneClick() {\n handleDropdownBlur()\n dropdown.collapse()\n }\n\n function getDropdownProps() {\n return {\n disabled,\n toggle: dropdown.toggle,\n expanded: dropdown.expanded,\n onBlur: handleDropdownBlur,\n }\n }\n\n function getCalendarProps() {\n return {\n ...rest.getCalendarProps?.(),\n calendar,\n onDayClick: handleDayClick,\n }\n }\n\n function getRangeStartInputProps() {\n return {\n ...rest.getRangeStartInputProps?.(),\n id: id != null ? `${id}-start` : id,\n name: name != null ? `${name}-start` : name,\n disabled,\n onChange: getDateInputChangeHandler(AT_RANGE_START),\n onClick: handleDateInputClick,\n onFocus() {\n currentlyPickingRef.current = 'range-start'\n },\n ref(node: HTMLInputElement | null) {\n if (node != null) {\n inputsRef.current[AT_RANGE_START] = node\n }\n },\n }\n }\n\n function getRangeEndInputProps() {\n return {\n ...rest.getRangeEndInputProps?.(),\n id: id != null ? `${id}-end` : id,\n name: name != null ? `${name}-end` : name,\n disabled,\n onChange: getDateInputChangeHandler(AT_RANGE_END),\n onClick: handleDateInputClick,\n onFocus() {\n currentlyPickingRef.current = 'range-end'\n },\n ref(node: HTMLInputElement | null) {\n if (node != null) {\n inputsRef.current[AT_RANGE_END] = node\n }\n },\n }\n }\n\n function getClearProps() {\n return {\n onClick: handleClearClick,\n }\n }\n\n function getDoneProps() {\n return {\n onClick: handleDoneClick,\n }\n }\n\n useEffect(\n function onValuePropChange() {\n if ([AT_RANGE_START, AT_RANGE_END].some((index) => !inputsRef.current[index])) {\n return\n }\n\n const newSelected = getSelection(value)\n const currSelected = calendar.selected\n\n const hasChanged = [AT_RANGE_START, AT_RANGE_END].some((index) => {\n return newSelected[index] != currSelected[index]\n })\n\n if (hasChanged) {\n ;[AT_RANGE_START, AT_RANGE_END].forEach((index) => {\n setInputValue(inputsRef.current[index], formatDate(newSelected[index]))\n })\n\n calendar.select(newSelected)\n calendar.set(getInitialCalendarSetup(newSelected))\n }\n },\n // we just intend to update the selection when the prop changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [value]\n )\n\n return {\n value: getSelection(calendar.selected).map(formatDate),\n\n getDropdownProps,\n getRangeStartInputProps,\n getRangeEndInputProps,\n getClearProps,\n getCalendarProps,\n getDoneProps,\n }\n}\n\nexport default useDateRangePicker\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { Button } from 'components/Button'\nimport { ClearButton, DateInput } from './DatePicker'\nimport { DateFormatHelper, GenericCalendar } from 'components/Calendar'\nimport { Dropdown, GenericDropdown } from 'components/Dropdown'\nimport { getToken as token } from 'theming'\nimport { Group } from 'components/Layout'\nimport { Popover } from 'components/Popover'\nimport useDateRangePicker from './useDateRangePicker'\n\nimport type { DateRangePickerProps } from './DatePicker.types'\n\nexport const formatter = DateFormatHelper('MM/DD/YYYY')\n\nconst DropdownMenu = styled(Dropdown.Menu)`\n width: max-content;\n min-width: initial;\n max-height: initial;\n padding: ${token('space-m')};\n overflow-y: initial;\n`\n\nconst DropdownFooter = styled.div`\n padding-right: ${token('space-m')};\n padding-left: ${token('space-m')};\n`\n\nfunction DateRangePicker(props: DateRangePickerProps): JSX.Element {\n const {\n id,\n name,\n value,\n onChange,\n disabled,\n constraints,\n getRangeStartInputProps,\n getRangeEndInputProps,\n getCalendarProps,\n placement,\n } = props\n\n const dateRangePicker = useDateRangePicker({\n constraints,\n disabled,\n id,\n name,\n value,\n onChange,\n getRangeStartInputProps,\n getRangeEndInputProps,\n getCalendarProps,\n })\n\n function renderRangeEndTrailing() {\n const [currRangeStart, currRangeEnd] = dateRangePicker.value\n\n if (!disabled && (currRangeStart || currRangeEnd)) {\n return (\n <ClearButton\n size={12}\n type=\"button\"\n aria-label=\"Clear selection\"\n {...dateRangePicker.getClearProps()}\n />\n )\n }\n\n return null\n }\n\n function renderDropdownFooter() {\n return (\n <DropdownFooter>\n <Group space=\"s\" justify=\"flex-end\">\n <Button type=\"button\" scale=\"small\" {...dateRangePicker.getClearProps()}>\n Clear\n </Button>\n <Button type=\"button\" scale=\"small\" variant=\"primary\" {...dateRangePicker.getDoneProps()}>\n Done\n </Button>\n </Group>\n </DropdownFooter>\n )\n }\n\n return (\n <GenericDropdown {...placement} {...dateRangePicker.getDropdownProps()}>\n <Popover.Reference>\n <Group space=\"s\">\n <DateInput\n {...dateRangePicker.getRangeStartInputProps()}\n data-testid=\"input-date-range-start\"\n />\n <DateInput\n trailing={renderRangeEndTrailing()}\n {...dateRangePicker.getRangeEndInputProps()}\n data-testid=\"input-date-range-end\"\n />\n </Group>\n </Popover.Reference>\n <DropdownMenu footer={renderDropdownFooter()}>\n <GenericCalendar {...dateRangePicker.getCalendarProps()} />\n </DropdownMenu>\n </GenericDropdown>\n )\n}\n\nexport default DateRangePicker\n","import React from 'react'\n\nimport { TextProps, Text } from 'components/Text'\n\nexport type ErrorMessageProps = Partial<TextProps>\n\nconst ErrorMessage = ({ children, ...props }: ErrorMessageProps) => {\n if (!children) {\n return null\n }\n\n return (\n <Text as=\"p\" variant=\"caption-bold\" color=\"color-danger\" {...props}>\n {children}\n </Text>\n )\n}\n\nexport default ErrorMessage\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport prop from 'tools/prop'\nimport transition from 'styles/transition'\nimport hoverable from 'styles/hoverable'\nimport focusable from 'styles/focusable'\nimport disableable from 'styles/disableable'\nimport hidden from 'styles/hidden'\n\nimport { StackProps, Stack } from 'components/Layout/Stack'\nimport { Icon } from 'components/Icon'\n\nimport type { DropZoneProps } from './types'\n\nexport const DragDropFileWrapper = styled(Stack)<{ withFileList: boolean }>`\n width: 100%;\n\n & > label + p {\n margin-top: ${conditional({\n 'space-m': whenProps({ withFileList: true }),\n 'space-l': whenProps({ withFileList: false }),\n })};\n }\n`\n\nexport const DropZoneWrapper = styled((props: StackProps) => <Stack as=\"label\" {...props} />)<\n Pick<DropZoneProps, 'disabled' | 'error'>\n>`\n ${transition({ property: 'border-color, box-shadow, opacity' })}\n\n cursor: pointer;\n\n background-color: ${getToken('color-neutral-white')};\n border-radius: ${getToken('border-radius-s')};\n border: 2px dashed;\n border-color: ${conditional({\n 'color-neutral-light': whenProps({ error: false }),\n 'color-danger': whenProps({ disabled: false, error: true }),\n })};\n\n padding: ${getToken('space-l')} ${getToken('space-3xl')};\n\n text-align: center;\n\n ${hoverable`\n border-color: ${conditional({\n 'color-accent': whenProps({ disabled: false, error: false }),\n })};\n `}\n\n ${focusable`\n border-color: ${conditional({\n 'color-accent': whenProps({ disabled: false, error: false }),\n })};\n box-shadow: ${getToken('shadow-glow-primary')};\n `}\n\n ${disableable()}\n`\n\nexport const HiddenInput = styled.input`\n ${hidden()}\n`\n\nexport const UploadIcon = styled(Icon)`\n color: ${getToken('color-neutral')};\n`\n\nexport const FileListUL = styled((props: StackProps) => <Stack as=\"ul\" {...props} />)`\n padding: 0;\n`\n\nexport const Divider = styled.div`\n width: 1px;\n height: 16px;\n\n background-color: ${getToken('color-neutral-darker')};\n`\n","export const BYTES_PER_KILOBYTE = 1024\nexport const FILE_SIZE_ABBREVIATIONS = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']\n\nconst formatBytes = (bytes: number, decimals = 2) => {\n const bytesValue = Number(bytes)\n\n if (!bytesValue || bytesValue < 0) {\n return '0B'\n }\n\n const dm = Math.max(0, decimals)\n const unit = Math.floor(Math.log(bytesValue) / Math.log(BYTES_PER_KILOBYTE))\n const unitAbbr = FILE_SIZE_ABBREVIATIONS[Math.min(unit, FILE_SIZE_ABBREVIATIONS.length - 1)]\n\n return `${parseFloat((bytesValue / Math.pow(BYTES_PER_KILOBYTE, unit)).toFixed(dm))}${unitAbbr}`\n}\n\nexport default formatBytes\n","import React from 'react'\n\nimport formatBytes from 'utils/toolset/formatBytes'\n\nimport { Stack, Group } from 'components/Layout'\nimport { Bar } from 'components/Loaders/LoadingBar'\nimport { Button } from 'components/Button'\nimport { Icon } from 'components/Icon'\nimport { Text } from 'components/Text'\n\nimport type { FileItemProps, FileStatus } from '../types'\nimport { Divider } from '../styles'\n\nconst FileName = ({ file }: Pick<FileItemProps, 'file'>): JSX.Element =>\n file.size ? (\n <Group space=\"m\" align=\"center\">\n <Text variant=\"caption\">{file.name}</Text>\n <Text variant=\"number-sm\">{formatBytes(file.size)}</Text>\n </Group>\n ) : (\n <Text variant=\"caption\">{file.name}</Text>\n )\n\ntype FileActionButtonProps = Pick<FileItemProps, 'onRemove' | 'onRetry' | 'disabled'> & {\n type: 'remove' | 'retry'\n}\n\nconst FileActionButton = ({\n type,\n onRemove,\n onRetry,\n disabled,\n}: FileActionButtonProps): JSX.Element => {\n const { iconName, label, onClick } =\n type === 'remove'\n ? {\n iconName: 'close',\n label: 'REMOVE',\n onClick: onRemove,\n }\n : {\n iconName: 'refresh',\n label: 'RETRY',\n onClick: onRetry,\n }\n\n return (\n <Button\n scale=\"small\"\n variant=\"tertiary\"\n leading={<Icon name={iconName} size={12} />}\n onClick={onClick}\n disabled={disabled}\n >\n {label}\n </Button>\n )\n}\n\nconst LoadingFile = ({ file, ...actionProps }: FileItemProps): JSX.Element => (\n <Stack as=\"li\" space=\"s\">\n <Group align=\"center\" justify=\"space-between\">\n <FileName file={file} />\n <FileActionButton type=\"remove\" {...actionProps} />\n </Group>\n <Bar />\n </Stack>\n)\n\nconst ErrorFile = ({ file, errorMessage, ...actionProps }: FileItemProps): JSX.Element => (\n <Stack as=\"li\" space=\"s\">\n <Group align=\"center\" justify=\"space-between\">\n <Group space=\"s\" align=\"center\">\n <Icon name=\"warning\" size={12} />\n <FileName file={file} />\n </Group>\n {actionProps.onRetry ? (\n <Group space=\"none\" align=\"center\">\n <FileActionButton type=\"retry\" {...actionProps} />\n <Divider />\n <FileActionButton type=\"remove\" {...actionProps} />\n </Group>\n ) : (\n <FileActionButton type=\"remove\" {...actionProps} />\n )}\n </Group>\n {errorMessage && (\n <Text variant=\"caption\" color=\"color-danger\">\n {errorMessage}\n </Text>\n )}\n </Stack>\n)\n\nconst SuccessFile = ({ file, ...actionProps }: FileItemProps): JSX.Element => (\n <Group as=\"li\" align=\"center\" justify=\"space-between\">\n <Group space=\"s\" align=\"center\">\n <Icon name=\"check\" size={12} />\n <FileName file={file} />\n </Group>\n <FileActionButton type=\"remove\" {...actionProps} />\n </Group>\n)\n\nconst FILE_ITEM_BY_STATUS: Record<FileStatus, (props: FileItemProps) => JSX.Element> = {\n loading: LoadingFile,\n error: ErrorFile,\n success: SuccessFile,\n}\n\nconst FileItem = (props: FileItemProps): JSX.Element => {\n const FileItemComponent = FILE_ITEM_BY_STATUS[props.status]\n\n return <FileItemComponent {...props} />\n}\n\nexport default FileItem\n","import Wrapper from './components/Wrapper'\nimport DropZone from './components/DropZone'\nimport FileList from './components/FileList'\n\nconst DragDropFile = (): null => null\n\nDragDropFile.Wrapper = Wrapper\nDragDropFile.DropZone = DropZone\nDragDropFile.FileList = FileList\n\nexport default DragDropFile\n","import React from 'react'\n\nimport isEmpty from 'utils/toolset/isEmpty'\n\nimport { useDragDropFileContext } from '../DragDropFile.context'\nimport { DragDropFileWrapper } from '../styles'\nimport type { WrapperProps } from '../types'\n\n/**\n * This is a `Stack` component customized with the needed spacing between the DragDropFile inner components\n */\nconst Wrapper = ({ children, ...props }: WrapperProps) => {\n const { fileList } = useDragDropFileContext()\n\n return (\n <DragDropFileWrapper space=\"l\" withFileList={!isEmpty(fileList)} {...props}>\n {children}\n </DragDropFileWrapper>\n )\n}\n\nexport default Wrapper\n","import React, { useRef, useState, useCallback } from 'react'\nimport clsx from 'clsx'\n\nimport toArray from 'utils/toolset/toArray'\nimport KeyboardKey from 'utils/toolset/keyboard'\nimport pluralize from 'utils/toolset/pluralize'\n\nimport { Text } from 'components/Text'\n\nimport { useDragDropFileContext } from '../DragDropFile.context'\n\nimport { DropZoneWrapper, HiddenInput, UploadIcon } from '../styles'\nimport type { DropZoneProps } from '../types'\n\nconst DropZone = ({\n className,\n hint,\n multiple = false,\n accept,\n disabled = false,\n error = false,\n renderCustomContent,\n ...props\n}: DropZoneProps): JSX.Element => {\n const { onFilesAdded } = useDragDropFileContext()\n\n const inputRef = useRef<HTMLInputElement>(null)\n const [isDragging, setIsDragging] = useState(false)\n\n const onChangeInput = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault()\n event.stopPropagation()\n\n onFilesAdded(Array.from(event.currentTarget.files || []))\n },\n [onFilesAdded]\n )\n\n const onKeyPress = useCallback(\n (event: React.KeyboardEvent) => {\n if (!disabled && inputRef.current && KeyboardKey(event).is('ENTER')) {\n inputRef.current.click()\n }\n },\n [disabled, inputRef]\n )\n\n const onDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!disabled) {\n if (isDragging) {\n setIsDragging(false)\n }\n\n onFilesAdded(Array.from(event.dataTransfer.files || []))\n }\n },\n [disabled, isDragging, onFilesAdded]\n )\n\n const onDragStart = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n }, [])\n\n const onDragOver = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n\n if (!disabled && !isDragging) {\n setIsDragging(true)\n }\n },\n [disabled, isDragging]\n )\n\n const onDragLeave = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n\n if (isDragging) {\n setIsDragging(false)\n }\n },\n [isDragging]\n )\n\n const renderDefaultContent = useCallback(\n () => (\n <>\n <UploadIcon name=\"upload\" size={48} />\n <Text variant=\"body\" color=\"color-neutral-darker\">\n {`Drag and drop your ${pluralize(Number(!multiple), 'files', 'file')} here or `}\n <Text as=\"a\" color={disabled ? 'color-neutral' : 'color-accent'} variant=\"body-bold\">\n {`Browse ${pluralize(Number(!multiple), 'Files', 'File')}`}\n </Text>\n </Text>\n {hint && (\n <Text variant=\"caption\" color=\"color-neutral-dark\">\n {hint}\n </Text>\n )}\n </>\n ),\n [multiple, disabled, hint]\n )\n\n return (\n <DropZoneWrapper\n space=\"m\"\n align=\"center\"\n justify=\"center\"\n className={clsx(className, {\n 'is-disabled': disabled,\n 'is-focused': isDragging,\n })}\n disabled={disabled}\n error={error}\n tabIndex={0}\n role=\"button\"\n aria-pressed=\"false\"\n onKeyPress={onKeyPress}\n onDrop={onDrop}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n >\n {(renderCustomContent || renderDefaultContent)({ isDragging })}\n <HiddenInput\n onInput={onChangeInput}\n type=\"file\"\n ref={inputRef}\n accept={accept ? toArray(accept).join(',') : undefined}\n disabled={disabled}\n multiple={multiple}\n {...props}\n />\n </DropZoneWrapper>\n )\n}\n\nexport default DropZone\n","import React from 'react'\n\nimport isEmpty from 'utils/toolset/isEmpty'\nimport pluralize from 'utils/toolset/pluralize'\n\nimport { Stack } from 'components/Layout'\nimport { Text } from 'components/Text'\n\nimport { useDragDropFileContext } from '../DragDropFile.context'\n\nimport type { FileListProps } from '../types'\nimport { FileListUL } from '../styles'\n\nimport FileItem from './FileItem'\n\nconst FileList = ({ disabled, ...props }: FileListProps): JSX.Element | null => {\n const { fileList, onRemoveFile, onRetryUpload } = useDragDropFileContext()\n\n if (isEmpty(fileList)) {\n return null\n }\n\n const uploadedFiles = fileList.filter((file) => file.status === 'success').length\n\n return (\n <Stack space=\"m\" {...props}>\n <Text variant=\"heading-sm-bold\">{`${uploadedFiles} ${pluralize(\n uploadedFiles,\n 'Files',\n 'File'\n )} uploaded`}</Text>\n <FileListUL space=\"m\">\n {fileList.map((item, index) => (\n <FileItem\n key={`file-${item.file.name}-${index}`}\n disabled={disabled}\n onRemove={() => onRemoveFile(item, index)}\n onRetry={onRetryUpload ? () => onRetryUpload(item, index) : undefined}\n {...item}\n />\n ))}\n </FileListUL>\n </Stack>\n )\n}\n\nexport default FileList\n","import styled from 'styled-components'\nimport { Button } from 'components/Button'\n\nexport const NoPaddingButton = styled(Button).attrs({\n variant: 'tertiary',\n scale: 'small',\n})`\n padding: 0;\n\n > span {\n margin: 0 !important;\n }\n`\n","import React, { ChangeEvent, KeyboardEvent, useEffect, useState } from 'react'\n\nimport { Layout } from 'components/Layout'\nimport { Text } from 'components/Text'\nimport { TextField } from 'components/TextField'\nimport type { TablePaginationActionsProps } from 'components/TablePagination/TablePagination.types'\nimport styled from 'styled-components'\nimport { Icon, IconProps } from 'components/Icon'\nimport Keyboard from 'utils/toolset/keyboard'\nimport { NoPaddingButton } from './TablePagination.styles'\nimport { prop } from 'tools/index'\n\nexport const ActionIcon = styled(Icon).attrs({\n color: 'neutral-darker',\n size: '16',\n})<IconProps & { rotate?: number }>`\n transform: rotate(${prop('rotate', 0)}deg);\n`\n\nfunction TablePaginationActions({\n variant = 'default',\n disabled = false,\n onPageChange,\n page,\n count,\n rowsPerPage,\n}: TablePaginationActionsProps): JSX.Element {\n const totalPages = Math.ceil(count / rowsPerPage)\n const [pageValue, setPageValue] = useState<number | ''>(page + 1)\n const isCompact = variant === 'compact'\n\n useEffect(() => {\n setPageValue(page + 1)\n }, [page])\n\n const handleFirstPageClick = () => {\n onPageChange(0)\n }\n\n const handlePreviousPageClick = () => {\n onPageChange(page - 1)\n }\n\n const handleNextPageClick = () => {\n onPageChange(page + 1)\n }\n\n const handleLastPageClick = () => {\n onPageChange(totalPages - 1)\n }\n\n const publishPageChange = () => {\n if (pageValue && pageValue - 1 !== page) {\n onPageChange(pageValue - 1)\n }\n }\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (Keyboard(e).is('ENTER')) {\n publishPageChange()\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (Keyboard(e).is(['E_LOWERCASE', 'DOT', 'MINUS', 'PLUS'])) {\n e.preventDefault()\n }\n }\n\n const handlePageChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.value === '') {\n setPageValue('')\n return\n }\n\n const numberValue = Number(e.target.value)\n\n if (!numberValue || numberValue < 1 || numberValue > totalPages) return\n\n setPageValue(numberValue)\n }\n\n return (\n <Layout.Group space=\"s\" align=\"center\">\n {!isCompact && (\n <NoPaddingButton\n onClick={handleFirstPageClick}\n disabled={page === 0 || disabled}\n title=\"First page\"\n >\n <ActionIcon name=\"caret-right-last\" rotate={180} />\n </NoPaddingButton>\n )}\n <NoPaddingButton\n onClick={handlePreviousPageClick}\n disabled={page === 0 || disabled}\n title=\"Previous page\"\n >\n <ActionIcon name=\"caret-left\" />\n </NoPaddingButton>\n {!isCompact && (\n <>\n <TextField\n type=\"number\"\n min={1}\n max={totalPages}\n disabled={disabled || totalPages === 1}\n onChange={handlePageChange}\n onBlur={publishPageChange}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDown}\n scale=\"small\"\n value={count ? pageValue : 0}\n title=\"Page\"\n />\n <Text variant=\"body\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n of{' '}\n <Text variant=\"body-bold\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n {totalPages}\n </Text>\n </Text>\n </>\n )}\n <NoPaddingButton\n onClick={handleNextPageClick}\n disabled={page >= totalPages - 1 || disabled}\n title=\"Next page\"\n >\n <ActionIcon name=\"caret-right\" />\n </NoPaddingButton>\n {!isCompact && (\n <NoPaddingButton\n onClick={handleLastPageClick}\n disabled={page >= totalPages - 1 || disabled}\n title=\"Last page\"\n >\n <ActionIcon name=\"caret-right-last\" />\n </NoPaddingButton>\n )}\n </Layout.Group>\n )\n}\n\nexport default TablePaginationActions\n","import React from 'react'\nimport { Text } from 'components/Text'\nimport { Dropdown, DropdownContext } from 'components/Dropdown'\nimport { Layout } from 'components/Layout'\nimport { Icon } from 'components/Icon'\nimport type { RowsPerPageProps } from './TablePagination.types'\nimport type { ButtonProps } from 'components/Button'\nimport { NoPaddingButton } from './TablePagination.styles'\nimport { Popover } from 'components/Popover'\n\nconst TriggerButton = (props: Omit<ButtonProps, 'scale' | 'variant'>) => {\n const { toggle } = React.useContext(DropdownContext)\n\n return (\n <Popover.Reference>\n <NoPaddingButton data-testid=\"rows-per-page-button\" onClick={toggle} {...props}>\n <Icon name=\"caret-down\" size={16} color=\"neutral-darker\" />\n </NoPaddingButton>\n </Popover.Reference>\n )\n}\n\nfunction RowsPerPage({\n page,\n rowsPerPage,\n onRowsPerPageChange,\n labelRowsPerPage,\n count,\n rowsPerPageOptions,\n disabled = false,\n position = 'bottom',\n align = 'start',\n}: RowsPerPageProps): JSX.Element {\n const getItemsRange = () => {\n if (!count) {\n return 0\n }\n\n const from = page * rowsPerPage + 1\n let to = (page + 1) * rowsPerPage\n\n if (to > count) {\n to = count\n }\n\n return `${from}-${to}`\n }\n\n return (\n <Layout.Group space=\"s\" align=\"center\">\n <Text variant=\"caption\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n {labelRowsPerPage}\n </Text>\n <Text variant=\"body\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n <Text variant=\"body-bold\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n {getItemsRange()}\n </Text>{' '}\n of{' '}\n <Text variant=\"body-bold\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n {count}\n </Text>\n </Text>\n <Dropdown position={position} align={align}>\n <TriggerButton disabled={disabled} />\n <Dropdown.Menu>\n {rowsPerPageOptions.map((option) => (\n <Dropdown.Item\n key={option}\n onClick={() => onRowsPerPageChange(option)}\n trailing={option === rowsPerPage && <Icon name=\"check\" size={20} color=\"accent\" />}\n >\n {option} per page\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </Layout.Group>\n )\n}\n\nexport default RowsPerPage\n","import styled from 'styled-components'\nimport hiddenStyle from 'styles/hidden'\n\nexport const VisuallyHidden = styled.span`\n ${hiddenStyle(true)}\n`\n","import React from 'react'\n\nimport { Layout } from 'components/Layout'\n\nimport PaginationItem from './PaginationItem'\nimport usePagination from './usePagination'\n\nimport type { PaginationProps } from './Pagination.types'\n\nfunction Pagination(props: PaginationProps): JSX.Element {\n const {\n boundaryCount = 1,\n count,\n disabled = false,\n onChange,\n page,\n siblingCount = 1,\n ...others\n } = props\n\n const items = usePagination({ boundaryCount, count, disabled, onChange, page, siblingCount })\n\n return (\n <nav aria-label=\"pagination navigation\" {...others}>\n <Layout.Group space=\"none\" align=\"center\">\n {items.map((item) => (\n <PaginationItem {...item} key={`${item.itemType}${item.page || ''}`} />\n ))}\n </Layout.Group>\n </nav>\n )\n}\n\nexport default Pagination\n","import React from 'react'\n\nimport { Layout } from 'components/Layout'\n\nimport type { TablePaginationProps } from './TablePagination.types'\nimport TablePaginationActions from 'components/TablePagination/TablePaginationActions'\nimport RowsPerPage from 'components/TablePagination/RowsPerPage'\n\nfunction TablePagination(props: TablePaginationProps): JSX.Element {\n const {\n variant = 'default',\n count,\n labelRowsPerPage = 'Rows per page:',\n onPageChange,\n onRowsPerPageChange,\n page,\n rowsPerPage = 50,\n rowsPerPageOptions = [10, 25, 50, 100],\n disabled = false,\n rowsPerPagePlacement,\n ...rest\n } = props\n\n return (\n <Layout.Group space=\"xl\" align=\"center\" justify=\"space-between\" {...rest}>\n <RowsPerPage\n page={page}\n count={count}\n onRowsPerPageChange={onRowsPerPageChange}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={rowsPerPageOptions}\n labelRowsPerPage={labelRowsPerPage}\n disabled={disabled || !count}\n position={rowsPerPagePlacement?.position}\n align={rowsPerPagePlacement?.align}\n />\n <TablePaginationActions\n variant={variant}\n page={page}\n onPageChange={onPageChange}\n rowsPerPage={rowsPerPage}\n count={count}\n disabled={disabled || !count}\n />\n </Layout.Group>\n )\n}\n\nexport default TablePagination\n","import { useCallback, useContext } from 'react'\n\nimport { SelectContext } from './Select.context'\nimport type { Option, useSelectExternalReturn } from './Select.types'\n\nexport function useSelectExternal(): useSelectExternalReturn {\n const select =\n useContext(SelectContext) ||\n (() => {\n throw new Error('useSelect should be wrapped in a SelectContext')\n })()\n\n const isChecked = useCallback(\n function isChecked(option: Option) {\n const { checked } = select.getSelectableOption(option)\n return checked\n },\n [select]\n )\n\n return {\n query: select.query,\n getOption: select.getOption,\n isChecked,\n }\n}\n","import { CustomTheme, getToken as token } from 'theming'\nimport { useTheme } from 'styled-components'\nimport useDialog from 'components/Dialog/useDialog'\nimport { useMemo } from 'react'\nimport useWindowResize from 'hooks/useWindowResize'\nimport { BASE_PIXELS } from 'utils/toolset/rem'\n\nexport interface useSideNavigationProps {\n open: boolean\n show: () => void\n hide: () => void\n toggle: () => void\n}\n\nfunction transformInPixels(value: string): number {\n if (value.indexOf('rem') >= 0) {\n return parseFloat(value) * BASE_PIXELS\n }\n\n return parseFloat(value)\n}\n\nfunction useSideNavigation(): useSideNavigationProps {\n const size = useWindowResize()\n const theme = useTheme() as CustomTheme\n\n const shouldOpen = useMemo(() => {\n const breakpoint = token('side-navigation-collapsing-breakpoint', { theme }) as string\n const breakpointInPixels = transformInPixels(breakpoint)\n return size.width > breakpointInPixels\n }, [size])\n\n return useDialog({ open: shouldOpen })\n}\n\nexport default useSideNavigation\n","import { useState, useEffect } from 'react'\n\nfunction useWindowSize() {\n const [windowSize, setWindowSize] = useState<{\n width: number\n height: number\n }>({\n width: window.innerWidth,\n height: window.innerHeight,\n })\n\n useEffect(() => {\n function handleResize() {\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight,\n })\n }\n\n window.addEventListener('resize', handleResize)\n\n return () => window.removeEventListener('resize', handleResize)\n }, [])\n return windowSize\n}\n\nexport default useWindowSize\n","import { useEffect, useReducer, useRef, Dispatch } from 'react'\n\nimport get from 'utils/toolset/get'\nimport type { Step } from './Steps.types'\n\nexport interface useStepsProps {\n steps: Array<Step>\n current?: number | string\n}\n\ntype State = { current: number | string; steps: Array<Step> }\ntype Action =\n | { type: 'navigate'; payload: { stepID: number | string } }\n | { type: 'next' }\n | { type: 'previous' }\n | { type: 'complete'; payload: { stepID: number | string } }\n | { type: 'reset'; payload: State }\n\nfunction useSteps({ steps, current: currentProp }: useStepsProps): [State, Dispatch<Action>] {\n const stepIndexByID = useRef<Record<number | string, number>>({})\n\n useEffect(\n function initStepIndexByIDMap() {\n stepIndexByID.current = {}\n ;(steps || []).forEach((step, index) => {\n stepIndexByID.current[step.id] = index\n })\n },\n [steps]\n )\n\n const [state, dispatch] = useReducer(reducer, init(steps, currentProp))\n\n function reducer(state: State, action: Action): State {\n const { current } = state\n\n // TODO: improve using object to map each case as individual functions\n switch (action.type) {\n case 'previous': {\n const currentIndex = getStepIndex(current)\n\n if (currentIndex == null) {\n return state\n }\n\n const newCurrentIndex = Math.max(currentIndex - 1, 0)\n\n return {\n ...state,\n current: steps[newCurrentIndex]?.id,\n }\n }\n case 'next': {\n const currentIndex = getStepIndex(current)\n\n if (currentIndex == null) {\n return state\n }\n\n const newCurrentIndex = Math.min(currentIndex + 1, steps.length - 1)\n\n return {\n ...state,\n current: steps[newCurrentIndex]?.id,\n }\n }\n case 'navigate': {\n const { stepID } = action.payload\n const currentIndex = getStepIndex(current)\n const stepIndex = getStepIndex(stepID)\n const step = get(steps, stepIndex)\n\n if (!step) {\n return state\n }\n\n return {\n ...state,\n current: steps[stepIndex]?.id || steps[currentIndex]?.id,\n }\n }\n case 'complete': {\n const { stepID } = action.payload\n const { steps } = state\n\n const stepIndex = getStepIndex(stepID)\n const step = get(steps, stepIndex)\n\n if (!step) {\n return state\n }\n\n return {\n ...state,\n steps: [\n ...steps.slice(0, stepIndex),\n { ...step, complete: true },\n ...steps.slice(stepIndex + 1),\n ],\n }\n }\n case 'reset': {\n const { steps, current } = action.payload\n\n return {\n ...state,\n ...init(steps, current),\n }\n }\n default:\n return state\n }\n }\n\n // TODO: gather step info to feed Steps component\n function init(steps: Array<Step>, current?: number | string): State {\n return {\n current: current || (get(steps, '0.id') as number | string),\n steps,\n }\n }\n\n function getStepIndex(stepID: number | string): number {\n return stepIndexByID.current[stepID]\n }\n\n // TODO: write helper functions to abstract inner dispatch mechanism\n return [state, dispatch]\n}\n\nexport default useSteps\n","import { useCallback, useState } from 'react'\n\nimport type { ChangeEvent } from 'react'\nimport type { TextFieldProps } from './TextField'\n\ntype InputValue = string | number | readonly string[] | undefined\ntype ReturnType = [InputValue, (e: ChangeEvent<HTMLInputElement>) => void]\n\nfunction useTextField({ onChange: onChangeProp, value: valueProp }: TextFieldProps): ReturnType {\n const [value, setValue] = useState(valueProp || '')\n\n const onChange = useCallback(\n function handleChange(e: ChangeEvent<HTMLInputElement>) {\n const {\n target: { value },\n } = e\n setValue(value)\n onChangeProp?.(e)\n },\n [onChangeProp]\n )\n\n return [value, onChange]\n}\n\nexport default useTextField\n"],"names":["transitionStyle","options","property","timingFunction","duration","Wrapper","styled","span","transition","props","$color","token","UnknownIcon","React","createElement","IconFactory","map","name","size","width","height","className","color","rest","__rest","I","String","toLowerCase","getIcon","Object","assign","_path","_path2","_extends","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_circle","Icon","viewBox","fill","xmlns","d","calendar","clipRule","fillRule","back","check","circle","cx","cy","r","close","information","minus","plus","refresh","sort","upload","warning","MAX_SAFE_INTEGER","argsTag","funcTag","genTag","freeGlobal","global","commonjsGlobal","freeSelf","self","root","Function","arrayPush","array","values","index","offset","objectProto","objectToString","toString","Symbol","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","undefined","baseFlatten","depth","predicate","isStrict","result","isFlattenable","value","isArray","isObjectLike","isLength","tag","type","isObject","isFunction","isArrayLike","isArrayLikeObject","isArguments","Array","lodash_flatten","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","reIsHostCtor","freeExports","exports","nodeType","freeModule","module","moduleExports","uid","func","transform","funcProto","coreJsData","maskSrcKey","exec","keys","IE_PROTO","funcToString","reIsNative","RegExp","replace","Buffer","nativeIsBuffer","isBuffer","nativeKeys","arg","DataView","getNative","Map","Promise","Set","WeakMap","nonEnumShadows","valueOf","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","baseIsNative","isMasked","pattern","e","isHostObject","test","object","getValue","getTag","ArrayBuffer","resolve","Ctor","constructor","ctorString","splice","isPrototype","interleave","array1","array2","safeArray1","toArray","safeArray2","isEmpty","flatten","element","activatableStyle","strings","args","concat","disableableStyle","focusableStyle","hoverableStyle","HASH_UNDEFINED","symbolTag","reIsUint","arrayIncludes","fromIndex","fromRight","baseFindIndex","baseIsNaN","baseIndexOf","arrayIncludesWith","comparator","arrayMap","iteratee","cacheHas","cache","has","overArg","arrayProto","getPrototype","getPrototypeOf","nativeGetSymbols","getOwnPropertySymbols","nativeMax","Math","max","nativeCreate","Hash","entries","clear","entry","set","ListCache","MapCache","SetCache","__data__","add","arrayLikeKeys","inherited","n","baseTimes","skipIndexes","isIndex","push","assocIndexOf","other","baseKeysIn","nativeKeysIn","proto","isProto","getAllKeysIn","keysFunc","symbolsFunc","baseGetAllKeys","keysIn","getSymbolsIn","getMapData","data","get","pop","hash","string","getSymbols","stubArray","toKey","isSymbol","start","omit","basePickBy","basePick","includes","isCommon","valuesLength","outer","computed","valuesIndex","baseDifference","otherArgs","thisArg","lodash_omit","fontStyle","weight","family","css","getToken","typographyProperties","fontSize","lineHeight","fontWeight","body","caption","fontFamily","textTransform","link","DEFAULT_VARIANT","typography","variant","properties","getPropertiesByVariant","conditional","italic","animation","keyframes","Layer","path","getSpace","prop","whenProps","prop$1","GroupContainer","div","center","$align","stretch","$justify","Group","space","justify","align","children","$space","StackContainer","Stack","BoxContainer","left","$textAlign","right","$background","$borderColor","$borderWidth","$borderRadius","Box","background","borderColor","borderRadius","borderWidth","padding","textAlign","$padding","SidebarContainer","$reversed","SwitcherContainer","GridContainer","Layout","Sidebar","minContentWidth","reversed","sideWidth","$minContentWidth","$sideWidth","Switcher","limit","threshold","$limit","Grid","minColumnWidth","$minColumnWidth","loading","Bar","velocity","pulse","Dot","LoadingDots","_a","role","StyledSpan","rem","Leading","Trailing","Children","BaseStyledButton","button","$scale","disableable","$loading","StyledButton","$variant","$scheme","hoverable","focusable","activatable","StyledSelector","TextHidden","StyledLoadingDots","attrs","ButtonLoadingDots","buttonVariant","remainingProps","loadingDotsVariant","ButtonChildrenWrapper","Fragment","BaseButton","forwardRef","ref","scale","leading","trailing","disabled","others","Button","scheme","SelectorButton","IconButton","CloseButton","BackButton","toVal","mix","k","y","str","clsx","tmp","x","SelectorWrapper","StyledLabel","label","font","SelectionWrapper","selector","Check","Selector","input","Checkbox","Radio","useFocusWithin","onFocus","onBlur","focused","setFocused","useState","containerRef","useRef","getContainer","current","handleFocus","useCallback","handleBlur","useEffect","addEventListener","_b","removeEventListener","Status","Status$1","InputWrapper","status","Neutral","Danger","Success","StyledInput","TextField","TextareaWrapper","StyledTextarea","textarea","Textarea","defineProperty","objectFromQueryString","qs","slice","JSON","parse","decodeURIComponent","queryStringFromObject","obj","filter","join","toCapitalizeFirstLetter_1","toCapitalizeFirstLetter","toUpperCaseFirstLetter","word","charAt","toUpperCase","split","toLocaleCapitalizeFirstLetter_1","toLocaleCapitalizeFirstLetter","locale","localeDefined","navigator","language","item","toLocaleUpperCase","toLocaleUpperCaseFirstLetter","isBlank_1","default","text","trim","isBlank","objectFromQueryString_1","require$$0","enumerable","queryStringFromObject_1","require$$1","require$$2","require$$3","require$$4","INSECURE_HREF","useSafeLink","rel","sanitizedRel","Boolean","from","checkTarget","href","checkHref","StyledBaseAnchor","a","BaseLink","forwardedRef","StyledAnchor","Link","StyledLink","StyledLi","li","active","Breadcrumb","url","onClick","isNil","getWrappedLabel","StyledWrapper","nav","StyledOl","ol","StyledBackButton","useDidMount","counter","GenericAdapter","getKey","o","lodash_get","createSelectionStrategy","adapters","multiple","context","getAdapter","init","items","select","selection","newSelection","adapter","_type","unselect","delete","toggle","MultipleSelectionStrategy","SingleSelectionStrategy","INFINITY","MAX_INTEGER","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","nativeCeil","ceil","toFinite","isBinary","toNumber","range","end","step","eq","isIterateeCall","baseRange","lodash_range","getID","maxIDLength","initialIDLength","alphabet","currentLength","filledCharacters","availableIDs","reduce","acc","pow","Error","newID","at","IDGenerator","DEFAULT_ADAPTERS","createUseSelectable","onChange","didMount","strategy","useMemo","initializer","selected","dispatch","useReducer","state","action","payload","resetFingerprint","hasSameFingerprint","knownRef","fingerprint","setFingerprint","getFingerprint","currentFingerprint","update","known","safeItems","newKnown","hasSameItems","otherItems","useFingerprint","identity","propagateChangeRef","newSelected","createSelectable","SelectableContext","createContext","useSelectable","ToggleGroupContext","ToggleButton","$type","isMultiple","Toggle$1","group","useContext","selectable","Container","$multiple","Toggle","fromSelectedToValue","pairs","option","DEFAULT_SELECTED","ToggleGroup","id","Provider","Option","TabContext","useID","propId","setID","TabsItemsWrapper","ul","StyledListItem","direction","row","column","PanelsItemsWrapper","PanelsItemWrapper","article","block","none","PanelsItem","lazy","activeTab","hidden","defaultProps","TabsWrapper","Tabs","propTab","onTabChange","setActiveTab","Items","Item","isDefault","tabId","isActive","checked","event","Panels","Panel","StyledSection","section","StyledSectionTitle","Section","hiddenStyle","accessible","Title","AccordionContext","AccordionProvider","expanded","onExpandedChange","initialExpanded","openState","setOpenState","open","useAccordionContext","StyledToggle","StyledContent","HiddenInput","ToggleIndicator","AccordionWrapper","Accordion","propsTrailing","Body","Description","TextSection","$dismissible","StyledBanner","wrap","DefaultCloseButton","IconWrapper","DefaultIcon","InlineButton","ButtonWrapper","LargeButtonWrapper","TextWrapper","getAlertIcon","icon","iconName","Text$1","ModalWrapper","flex","HeaderWrapper","Close","Content","fullscreen","Modal","onOverlayClick","ReactDOM","createPortal","stopPropagation","document","Header","title","Text","h1","ActionWrapper","StyledDialogActions","$direction","initial","Dialog","useDialog","openProp","onOpen","onClose","setOpen","show","hide","getAlignment","placement","getLengthFromAxis","axis","getSide","getMainAxisFromPlacement","computeCoordsFromPlacement","_ref","rtl","reference","floating","commonX","commonY","mainAxis","commonAlign","isVertical","coords","ActionConfirm","onConfirm","ActionCancel","onCancel","Actions","getSideObjectFromPadding","top","bottom","expandPaddingObject","rectToClientRect","rect","async","detectOverflow","_await$platform$isEle","platform","rects","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","min","within","min$1","max$1","arrow","arrowDimensions","getDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","shouldAddOffset","centerOffset","oppositeSideMap","getOppositePlacement","side","oppositeAlignmentMap","getOppositeAlignmentPlacement","alignment","flip","_middlewareData$flip","middlewareData","initialPlacement","checkMainAxis","crossAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","isBasePlacement","isRTL","oppositePlacement","getExpandedPlacements","list","isStart","lr","rl","tb","bt","getSideList","getOppositeAxisPlacements","placements","overflow","overflows","overflowsData","main","cross","mainAlignmentSide","getAlignmentSides","every","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","reset","resetPlacement","b","_overflowsData$map$so","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","alignmentAxis","convertValueToCoords","shift","limiter","fn","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","getWindow","node","_node$ownerDocument","ownerDocument","defaultView","window","getComputedStyle$1","getComputedStyle","isNode","Node","getNodeName","nodeName","uaString","getUAString","uaData","userAgentData","brands","brand","version","userAgent","isHTMLElement","HTMLElement","Element","isShadowRoot","ShadowRoot","isOverflowElement","overflowX","overflowY","display","isTableElement","isContainingBlock","isFirefox","backdropFilter","WebkitBackdropFilter","perspective","willChange","some","contain","isClientRectVisualViewportBased","isLastTraversableNode","round","getCssDimensions","parseFloat","hasOffset","offsetWidth","offsetHeight","shouldFallback","fallback","unwrapElement","FALLBACK_SCALE","domElement","getBoundingClientRect","Number","isFinite","includeScale","isFixedStrategy","_win$visualViewport","_win$visualViewport2","clientRect","win","addVisualOffsets","visualViewport","offsetLeft","offsetTop","offsetWin","currentIFrame","frameElement","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","documentElement","getNodeScroll","scrollLeft","scrollTop","pageXOffset","pageYOffset","getWindowScrollBarX","getParentNode","assignedSlot","parentNode","host","getNearestOverflowAncestor","getOverflowAncestors","scrollableAncestor","isBody","getClientRectFromClippingAncestor","clippingAncestor","html","clientWidth","clientHeight","visualViewportBased","getViewportRect","scroll","scrollWidth","scrollHeight","getDocumentRect","getInnerBoundingClientRect","mutableRect","hasFixedPositionAncestor","stopNode","position","getTrueOffsetParent","polyfill","currentNode","getContainingBlock","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","offsetRect","clippingAncestors","cachedResult","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingElementAncestors","_c","firstClippingAncestor","clippingRect","accRect","getOffsetParentFn","getDimensionsFn","getClientRects","autoUpdate","ancestorScroll","ancestorResize","elementResize","animationFrame","ancestors","forEach","isVisualViewport","passive","frameId","observer","ResizeObserver","observe","prevRefRect","frameLoop","nextRefRect","requestAnimationFrame","_observer","disconnect","cancelAnimationFrame","computePosition","mergedOptions","platformWithCache","config","middleware","validMiddleware","getElementRects","statefulPlacement","resetCount","nextX","nextY","computePosition$1","arrow$1","useLayoutEffect","deepEqual","$$typeof","getDPR","devicePixelRatio","roundByDPR","dpr","useLatestRef","PopoverContext","usePopover","Popover","arrowRef","externalReference","externalFloating","whileElementsMounted","setData","isPositioned","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","referenceEl","floatingEl","dataRef","whileElementsMountedRef","platformRef","then","fullData","isMountedRef","flushSync","refs","floatingStyles","initialStyles","useFloating","resultPosition","resultAlign","register","setArrow","TooltipPosition","TooltipAlign","Floating","style","Reference","Bubble","StyledArrow","Arrow","Tooltip","message","Top","Center","visible","setVisible","showTooltip","hideTooltip","onMouseEnter","onMouseLeave","tabIndex","StyledChildren","StyledRequired","sup","StyledTooltipAnchor","PAGINATION_ITEM_TYPE","endEllipsis","next","page","previous","startEllipsis","IconButtonDefault","PageButton","underline","ICONS_NAME","PaginationItem","itemType","PaginationHelper","boundaryCount","count","siblingCount","_","getStartPages","getEndPages","getSibilingsStart","getSibilingsEnd","endPages","getStartEllipsis","getEndEllipsis","usePagination","handleChange","paginationHelper","startPages","siblingsStart","siblingsEnd","getButtonPage","isDisabled","isNumber","handleClick","rounded","Line","Progress","Warn","ProgressBar","showLine","extra","clampedValue","SwitchWrapper","Slider","ActiveIcon","InactiveIcon","StyledTag","removable","StyledCloseButton","CloseIcon","StyledSpacer","Tag","onRemove","getRemoveButtonProps","ToastCountDown","ToastIcon","getPanelRadioID","StepsContext","StepConnector","complete","ProgressStepWrapper","ProgressStepContainer","StepIndicator","StepLabel","ProgressStep","indicator","ProgressWrapper","StepsProgress","steps","StepWrapper","StepsWrapper","Steps","radioElement","getElementById","Step","StepsID","CardSubtitle","CardSeparator","hr","CardBody","CardTitleWrapper","flagged","Flag","Card","Subtitle","Separator","DropdownContext","expandDisabled","StyledPopover","DropdownItemWrapper","DropdownSectionHeader","strong","DropdownSectionWrapper","GenericDropdownMenuWrapper","DropdownMenuWrapper","DropdownSeparator","DropdownMenu","header","footer","DropdownMenuItem","persist","SUPPORTED_KEYS","ALT","ARROW_DOWN","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","CONTROL","ENTER","ESCAPE","SHIFT","SPACE","TAB","E_LOWERCASE","DOT","PLUS","MINUS","getKeyboardKey","keyCode","indexOf","KeyboardKey","is","otherKeys","expectedKeys","otherKey","useClickOutside","container","callback","setActive","handleEvent","hasTarget","contains","dropdownExpandedStyle","TriggerButton","outlined","capitalize","uppercase","DropdownTriggerWrapper","$outlined","TriggerHandle","RotatableIcon","$rotate","Caret","DropdownTriggerButton","contextValue","GenericDropdownTrigger","DropdownTrigger","useDropdown","setExpanded","isExpanded","expand","collapse","Handle","DropdownWrapper","HiddenCloseButton","GenericDropdown","child","isValidElement","useDeprecatedAlignFromMenu","Dropdown","dropdownProps","Trigger","Menu","SelectContext","pluralize","plural","singular","GenericSelectTrigger","SelectTriggerSearchField","SelectTrigger","getTabbableDescendants","querySelectorAll","useFocusTrap","onActivate","onDeactivate","currentFocused","setCurrentFocused","mutationObserverRef","focusableDescendants","setFocusableDescendants","unsubscribeToDOMMutationEvents","MutationObserver","childList","subscribeToDOMMutationEvents","handleKeyDownEvent","evt","supportedKeys","preventDefault","newCurrentFocused","focusableCounter","keyHandler","Tab","shiftKey","ArrowUp","ArrowDown","increment","getFocusedIndexAfterKeyPress","focus","activate","deactivate","getLabel","getDisplayValue","getData","datasources","query","regex","promises","types","ds","fetch","results","allSettled","TriggerOnFocusHandler","useOptions","setOptions","setStatus","timeoutRef","cancelPendingFetch","clearTimeout","fetchAfterTimeout","mapOptions","setTimeout","getOptionByKey","useSelect","onQueryChange","onCreate","getInputProps","isValidNewOption","createOptionPosition","getDatasources","extractAdapters","triggerRef","focusTrap","queryTyped","setQueryTyped","setQuery","dropdown","getSelectableOption","getOption","toggleOption","getDropdownProps","getTriggerProps","sanitizedValue","getClearProps","getMenuProps","getOptionProps","getCreatebleProps","onCreateReturn","asyncOnClick","isCreatable","findByLabel","toLocaleLowerCase","find","autoFocus","HighlightMatchWrapper","HighlightMatch","match","pre","mid","post","highlightMatch","DefaultGroup","as","DefaultSelectOption","SelectOption","defaultChecked","SelectEmpty","SelectCreatableOption","defaultComponents","Empty","CreatableOption","getComponents","components","OMITTED_PROPS","Loading","getCommonClearButtonProps","SelectMenu","ClearMultiple","total","Divider","DividerText","isQuerying","after","before","Select","placeholder","hideClear","autoComplete","selectedOptions","remainingOptions","remaining","renderOptionsMultiple","renderOptionsSingle","Logo$3","updateHeight","StyledMenuItem","Flex","MenuBaseItem","MenuLink$2","StyledIcon","$expanded","ExpandableItems","MenuLink","ItemsWrapper","MenuExpandable","expandableItemsRef","targetElRef","toggleState","prevState","totalHeight","setTotalHeight","useHeightExpansionToggler","$height","cloneElement","ariaHidden","MenuTitle","StyledMenu","menuId","Parent","compounds","Menu$2","SubItem","aside","Logo","SideNavigation","StyledAside","StyledHeader","StyledBody","StyledFooter","Drawer","onClickOutside","invisible","setInvisible","currentRef","isSameNode","onTransitionEnd","useTableSelectionCore","registered","setRegistered","selectableProps","defaults","generic","getSelectableProps","allRowsAreSelected","prev","prevRow","toggleAll","Footer","TableSelectionContext","TableSelectionProvider","selectionCore","useTableSelection","isCellSelected","selectedRows","DefaultBox","StyledTableBody","tbody","StyledTableFoot","tfoot","StyledTableCaption","$position","StyledCell","StyledTableCell","td","format","StyledTableHeadCell","th","pointer","clickable","normal","StyledTableHead","thead","StyledTableRow","tr","solid","StyledExpandableContentRow","StyledTable","table","Table","TableCaptionInner","TableCell","SelectionCell","useIsCellSelected","Input","TableHeadCell","ActionsWrapper","StyledPickerTrigger","InternalButton","TablePickerItem","TriggerIcon","TablePicker","trigger","propsTrigger","useIsRowSelected","selectionCellChild","Head","Row","Cell","HeadCell","Foot","Caption","Selection","buttons","useSelection","Action","ExpandableRow","expandableContent","propsLeading","colSpan","SortHandle","order","Picker","Logo$1","MenuDropdown","MenuDropdownSeparator","MenuDropdownTrigger","MenuDropdownLabel","Ellipsizable","$max","MenuDropdownSubItemLink","MenuItemDropdown","labelId","hasIcon","MenuItemIcon","MenuContainer","OpenSideNavButton$1","removeRightPadding","TopNavigation","OpenSideNavButton","VerticalWrapper","EmptyStateWithIcon","isHorizontal","Illustration","illustration","src","alt","EmptyStateWithIllustration","description","isPageVariant","EmptyState","aliased","aliasMap","alias","MONTH_BY_ALIAS","jan","january","feb","february","mar","march","apr","april","may","jun","june","jul","july","aug","august","sep","september","oct","october","nov","november","dec","december","MONTH_BY_NAME","getMonthByAlias","MonthHelper","month","representation","padStart","getAll","PickerModeToggle","DEFAULT_OPTIONS","normalize","DateHelper","dateArg","optionsArg","utcDate","date","Date","UTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","getYear","getMonth","getDate","getTime","getWeekday","getUTCDay","getHours","getMinutes","getSeconds","getMilliseconds","matches","constraints","constraintEvaluators","getConstraintEvaluator","evaluator","unit","subtract","newValue","year","day","hour","minute","second","millisecond","setUTCFullYear","setUTCMonth","setUTCDate","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","operator","precision","compare","getComparableDate","toISOString","DATE_ZERO","MIN_SUPPORTED_DATE","sliceIndex","normalizedPart","datePart","constraint","rangeArg","rangeStart","rangeEnd","MAX_SUPPORTED_DATE","timestamp","getConstraintRange","InvalidDateConstraintError","padded","maxLength","super","TODAY","useCalendar","onSelect","mode","amountOfMonthsToRender","setSelected","getSelectionPair","renderableMonths","setRenderableMonths","getRenderableMonths","initialMonth","getFullYear","getSelectionBoundary","months","DAY_IN_MILLISECONDS","getRenderableMonth","firstDayOfTheWeek","totalDaysInMonth","days","amount","getTokenValue","DEFAULT_FORMATTERS","ADDITIONAL_FORMATTERS","DateFormatHelper","tokens","getType","char","isEscaping","tokenizer","previousToken","COMPOUND_FORMATTERS","valid","MM","Intl","DateTimeFormat","MMM","MMMM","D","DD","ddd","weekday","dddd","YYYY","HH","hour12","hh","mm","ss","A","getOrdinalSuffix","number","PickerButton","$status","DefaultPickerButton","WEEKDAYS","formatter","DefaultText","CalendarDayPicker","onDayClick","renderDaysOfMonth","isPastYearDay","getStatus","formatted","dateTime","textDecoration","CalendarMonthPicker","CalendarYearPicker","BorderlessButton","GenericCalendar","onMonthClick","onYearClick","DayPicker","MonthPicker","YearPicker","usePickerMode","getSelection","formatDate","isNaN","getInitialCalendarSetup","selectionStart","startDate","setInputValue","getInputValue","DATE_REGEX","DefaultTextField","ClearButton","DateInput","AT_RANGE_START","AT_RANGE_END","DropdownFooter","DragDropFileWrapper","withFileList","DropZoneWrapper","error","UploadIcon","FileListUL","FILE_SIZE_ABBREVIATIONS","FileName","file","bytes","decimals","bytesValue","dm","floor","log","unitAbbr","toFixed","formatBytes","FileActionButton","onRetry","FILE_ITEM_BY_STATUS","actionProps","errorMessage","success","FileItem","FileItemComponent","DragDropFile","fileList","useDragDropFileContext","DropZone","hint","accept","renderCustomContent","onFilesAdded","inputRef","isDragging","setIsDragging","onChangeInput","currentTarget","files","onKeyPress","click","onDrop","dataTransfer","onDragStart","onDragOver","onDragLeave","renderDefaultContent","onInput","FileList","onRemoveFile","onRetryUpload","uploadedFiles","NoPaddingButton","ActionIcon","TablePaginationActions","onPageChange","rowsPerPage","totalPages","pageValue","setPageValue","isCompact","publishPageChange","rotate","numberValue","onKeyUp","Keyboard","onKeyDown","RowsPerPage","onRowsPerPageChange","labelRowsPerPage","rowsPerPageOptions","to","getItemsRange","VisuallyHidden","dismissible","secondaryAction","onActionButtonClick","onSecondaryActionButtonClick","onBack","getCalendarProps","datePicker","formattedDate","handleDateInputChange","handleDateInputClick","handleDayClick","handleClearClick","currSelection","currSelectedDate","currInputValue","useDatePicker","renderTrailing","getRangeStartInputProps","getRangeEndInputProps","dateRangePicker","inputsRef","currentlyPickingRef","getDateInputChangeHandler","handleDropdownBlur","handleDoneClick","currSelected","hasChanged","getDoneProps","useDateRangePicker","currRangeStart","currRangeEnd","renderRangeEndTrailing","required","tip","tipProps","secondaryTitle","strokeLinejoin","strokeMiterlimit","onToggle","htmlFor","rowsPerPagePlacement","timeout","showIcon","setCount","decrementBy","interval","isChecked","windowSize","setWindowSize","innerWidth","innerHeight","handleResize","useWindowResize","theme","useTheme","breakpoint","breakpointInPixels","BASE_PIXELS","currentProp","stepIndexByID","currentIndex","getStepIndex","newCurrentIndex","stepID","stepIndex","_d","onChangeProp","valueProp","setValue"],"mappings":"8wBAUA,SAASA,EAAgBC,GAGvB,MAAO,+BAEHA,aAAA,EAAAA,EAASC,WACT,4HAE4BD,aAAO,EAAPA,EAASE,iBAAkB,8DAClCF,aAAO,EAAPA,EAASG,WAAY,0CAGhD,CCRA,MAAMC,EAAUC,EAAAA,QAAOC,IAA8B;;;;;;;MAO/CC,EAAW,CACXN,SAAU;;;;;;;aAQFO,GACRA,EAAMC,OAASC,EAAAA,SAAM,SAASF,EAAMC,SAAwBD,GAAS;;;;WAiB3DG,IACd,OAAOC,EAAAA,QAAAC,cAAA,OAAA,CAAA,aAAiB,gBAAc,IACxC,CAEA,SAASC,EAAYC,GAUnB,OAAO,SAAcP,GACnB,MAAMQ,KAAEA,EAAIC,KAAEA,EAAIC,MAAEA,EAAQ,MAAKC,OAAEA,EAAS,MAAKC,UAAEA,EAASC,MAAEA,GAAmBb,EAATc,EAAIC,EAAAA,OAAKf,EAA3E,CAAwE,OAAA,OAAA,QAAA,SAAA,YAAA,UAExEgB,EAZR,SAAiBR,GAIf,OAFAA,EAAOS,OAAOT,GAAQ,IAAIU,iBAEZX,EAEPA,EAAIC,GAFgBL,CAG5B,CAKWgB,CAAQX,GAClB,OACEJ,EAAAA,sBAACR,EAAO,CAACgB,UAAWA,SAAmBC,GACrCT,EAAA,QAAAC,cAACW,EAAEI,OAAAC,OAAA,CAAAX,MAAOD,GAAQC,EAAOC,OAAQF,GAAQE,GAAYG,IAG3D,CACF,CCxEA,IAAIQ,EAAOC,EACX,SAASC,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EACJ,SAASE,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EAAOC,EACX,SAASC,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EACJ,SAASE,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EACJ,SAASE,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EACJ,SAASE,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EACJ,SAASE,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EACJ,SAASE,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIS,EACJ,SAASb,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EACJ,SAASE,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EACJ,SAASE,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EAAOC,EACX,SAASC,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EAAOC,EACX,SAASC,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EACJ,SAASE,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,EAAOC,EACX,SAASC,IAAiS,OAApRA,EAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,EAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,GAAOC,GACX,SAASC,KAAiS,OAApRA,GAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,GAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,GACJ,SAASE,KAAiS,OAApRA,GAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,GAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,GACJ,SAASE,KAAiS,OAApRA,GAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,GAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,GACJ,SAASE,KAAiS,OAApRA,GAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,GAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,GACJ,SAASE,KAAiS,OAApRA,GAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,GAASW,MAAMC,KAAMR,UAAa,CAEnV,ICHIN,GACJ,SAASE,KAAiS,OAApRA,GAAWJ,OAAOC,OAASD,OAAOC,OAAOI,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcV,OAAOY,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,CAAS,EAASF,GAASW,MAAMC,KAAMR,UAAa,CCyBnV,MAwBMU,GAAOhC,EAxBC,CACZ,epBxBkB,SAAuBN,GACzC,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDe,QAAS,YACTC,KAAM,OACNC,MAAO,8BACNzC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEqC,EAAG,8EACHF,KAAM,aAEV,EoBgBEG,SnBzBgB,SAAqB3C,GACrC,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDiB,MAAO,6BACPF,QAAS,aACRvC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEqC,EAAG,kBACHF,KAAM,UACHjB,IAAWA,EAAsBnB,EAAMC,cAAc,OAAQ,CAChEqC,EAAG,oIAEP,EmBgBE,alB1BiB,SAAsB1C,GACvC,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDe,QAAS,YACTE,MAAO,8BACNzC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEqC,EAAG,yBACHE,SAAU,aAEd,EkBmBE,ajB3BiB,SAAsB5C,GACvC,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDe,QAAS,YACTC,KAAM,OACNC,MAAO,8BACNzC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEuC,SAAU,UACVF,EAAG,yGAEP,EiBmBE,cd5BkB,SAAuB1C,GACzC,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDe,QAAS,YACTE,MAAO,8BACNzC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEwC,SAAU,UACVD,SAAU,UACVF,EAAG,0GAEP,EcoBE,ef7BmB,SAAwB1C,GAC3C,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDiB,MAAO,6BACPF,QAAS,aACRvC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEqC,EAAG,4DAEP,EeuBEI,KrB9BY,SAAiB9C,GAC7B,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDiB,MAAO,6BACPF,QAAS,aACRvC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEqC,EAAG,kBACHF,KAAM,UACHjB,IAAWA,EAAsBnB,EAAMC,cAAc,OAAQ,CAChEqC,EAAG,kEAEP,EqBqBEK,MhB/Ba,SAAkB/C,GAC/B,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDe,QAAS,YACTE,MAAO,8BACNzC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEwC,SAAU,UACVD,SAAU,UACVF,EAAG,+GAEP,EgBuBEM,ObhCc,SAAmBhD,GACjC,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDiB,MAAO,6BACPF,QAAS,aACRvC,GAAQqC,IAAYA,EAAuBjC,EAAMC,cAAc,SAAU,CAC1E4C,GAAI,EACJC,GAAI,EACJC,EAAG,EACHN,SAAU,aAEd,EauBEO,MZjCa,SAAkBpD,GAC/B,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDe,QAAS,YACTE,MAAO,8BACNzC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEqC,EAAG,yJAEP,EY2BEW,YXlCmB,SAAwBrD,GAC3C,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDe,QAAS,YACTE,MAAO,8BACNzC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEwC,SAAU,UACVD,SAAU,UACVF,EAAG,iLAEP,EW0BEY,MVnCa,SAAkBtD,GAC/B,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDiB,MAAO,6BACPF,QAAS,aACRvC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEqC,EAAG,kBACHF,KAAM,UACHjB,IAAWA,EAAsBnB,EAAMC,cAAc,OAAQ,CAChEqC,EAAG,uBAEP,EU0BEa,KTpCY,SAAiBvD,GAC7B,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDiB,MAAO,6BACPF,QAAS,aACRvC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEmC,KAAM,OACNE,EAAG,mBACAnB,IAAWA,EAAsBnB,EAAMC,cAAc,OAAQ,CAChEqC,EAAG,yCAEP,ES2BEc,QRrCe,SAAoBxD,GACnC,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDe,QAAS,YACTE,MAAO,8BACNzC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEqC,EAAG,sMAEP,EQ+BEe,KLtCY,SAAiBzD,GAC7B,OAAoBI,EAAMC,cAAc,MAAOmB,GAAS,CACtDe,QAAS,YACTE,MAAO,6BACPD,KAAM,QACLxC,GAAQsB,KAAUA,GAAqBlB,EAAMC,cAAc,OAAQ,CACpEmC,KAAM,UACNE,EAAG,2EACHE,SAAU,UACVC,SAAU,aAEd,EK4BE,WPvCe,SAAoB7C,GACnC,OAAoBI,EAAMC,cAAc,MAAOmB,EAAS,CACtDe,QAAS,YACTE,MAAO,6BACPD,KAAM,QACLxC,GAAQsB,IAAUA,EAAqBlB,EAAMC,cAAc,OAAQ,CACpEmC,KAAM,UACNE,EAAG,kCACHE,SAAU,UACVC,SAAU,aACPtB,IAAWA,EAAsBnB,EAAMC,cAAc,OAAQ,CAChEmC,KAAM,UACNE,EAAG,4CACHE,SAAU,UACVC,SAAU,aAEd,EOwBE,YNxCgB,SAAqB7C,GACrC,OAAoBI,EAAMC,cAAc,MAAOmB,GAAS,CACtDe,QAAS,YACTE,MAAO,6BACPD,KAAM,QACLxC,GAAQsB,KAAUA,GAAqBlB,EAAMC,cAAc,OAAQ,CACpEmC,KAAM,UACNE,EAAG,kCACHE,SAAU,UACVC,SAAU,aACPtB,KAAWA,GAAsBnB,EAAMC,cAAc,OAAQ,CAChEmC,KAAM,UACNE,EAAG,4CACHE,SAAU,UACVC,SAAU,aAEd,EMyBEa,OJzCc,SAAmB1D,GACjC,OAAoBI,EAAMC,cAAc,MAAOmB,GAAS,CACtDe,QAAS,YACTE,MAAO,8BACNzC,GAAQsB,KAAUA,GAAqBlB,EAAMC,cAAc,OAAQ,CACpEwC,SAAU,UACVD,SAAU,UACVF,EAAG,2FAEP,EIiCEiB,QH1Ce,SAAoB3D,GACnC,OAAoBI,EAAMC,cAAc,MAAOmB,GAAS,CACtDe,QAAS,YACTE,MAAO,8BACNzC,GAAQsB,KAAUA,GAAqBlB,EAAMC,cAAc,OAAQ,CACpEuC,SAAU,UACVF,EAAG,yPAEP,EGmCE,kBF3CsB,SAA2B1C,GACjD,OAAoBI,EAAMC,cAAc,MAAOmB,GAAS,CACtDe,QAAS,YACTE,MAAO,8BACNzC,GAAQsB,KAAUA,GAAqBlB,EAAMC,cAAc,OAAQ,CACpEqC,EAAG,gHACHF,KAAM,eACNK,SAAU,aAEd,EEmCE,mBD5CsB,SAA2B7C,GACjD,OAAoBI,EAAMC,cAAc,MAAOmB,GAAS,CACtDe,QAAS,YACTC,KAAM,eACNC,MAAO,8BACNzC,GAAQsB,KAAUA,GAAqBlB,EAAMC,cAAc,OAAQ,CACpEwC,SAAU,UACVD,SAAU,UACVF,EAAG,4JAEP,IEHA,IAAIkB,GAAmB,iBAGnBC,GAAU,qBACVC,GAAU,oBACVC,GAAS,6BAGTC,GAA8B,iBAAVC,EAAMC,gBAAgBD,EAAAA,gBAAUA,EAAAA,eAAO7C,SAAWA,QAAU6C,iBAGhFE,GAA0B,iBAARC,MAAoBA,MAAQA,KAAKhD,SAAWA,QAAUgD,KAGxEC,GAAOL,IAAcG,IAAYG,SAAS,cAATA,GAUrC,SAASC,GAAUC,EAAOC,GAKxB,IAJA,IAAIC,GAAS,EACT7C,EAAS4C,EAAO5C,OAChB8C,EAASH,EAAM3C,SAEV6C,EAAQ7C,GACf2C,EAAMG,EAASD,GAASD,EAAOC,GAEjC,OAAOF,CACT,CAGA,IAAII,GAAcxD,OAAOY,UAGrBC,GAAiB2C,GAAY3C,eAO7B4C,GAAiBD,GAAYE,SAG7BC,GAASV,GAAKU,OACdC,GAAuBJ,GAAYI,qBACnCC,GAAmBF,GAASA,GAAOG,wBAAqBC,EAa5D,SAASC,GAAYZ,EAAOa,EAAOC,EAAWC,EAAUC,GACtD,IAAId,GAAS,EACT7C,EAAS2C,EAAM3C,OAKnB,IAHAyD,IAAcA,EAAYG,IAC1BD,IAAWA,EAAS,MAEXd,EAAQ7C,GAAQ,CACvB,IAAI6D,EAAQlB,EAAME,GACdW,EAAQ,GAAKC,EAAUI,GACrBL,EAAQ,EAEVD,GAAYM,EAAOL,EAAQ,EAAGC,EAAWC,EAAUC,GAEnDjB,GAAUiB,EAAQE,GAEVH,IACVC,EAAOA,EAAO3D,QAAU6D,EAE3B,CACD,OAAOF,CACT,CASA,SAASC,GAAcC,GACrB,OAAOC,GAAQD,IAyCjB,SAAqBA,GAEnB,OAmFF,SAA2BA,GACzB,OAgHF,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC3B,CAlHSE,CAAaF,IA9BtB,SAAqBA,GACnB,OAAgB,MAATA,GAkFT,SAAkBA,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GAAS9B,EAC7C,CArF0BiC,CAASH,EAAM7D,UAiDzC,SAAoB6D,GAGlB,IAAII,EA4DN,SAAkBJ,GAChB,IAAIK,SAAcL,EAClB,QAASA,IAAkB,UAARK,GAA4B,YAARA,EACzC,CA/DYC,CAASN,GAASb,GAAe3C,KAAKwD,GAAS,GACzD,OAAOI,GAAOhC,IAAWgC,GAAO/B,EAClC,CAtDqDkC,CAAWP,EAChE,CA4BgCQ,CAAYR,EAC5C,CArFSS,CAAkBT,IAAUzD,GAAeC,KAAKwD,EAAO,aAC1DV,GAAqB9C,KAAKwD,EAAO,WAAab,GAAe3C,KAAKwD,IAAU7B,GAClF,CA7C2BuC,CAAYV,OAChCT,IAAoBS,GAASA,EAAMT,IAC1C,CAoEA,IAAIU,GAAUU,MAAMV,QA6KpB,IAAAW,GAjOA,SAAiB9B,GAEf,OADaA,EAAQA,EAAM3C,OAAS,GACpBuD,GAAYZ,EAAO,GAAK,EAC1C,iCCpHA,IAAIZ,EAAmB,iBAGnBC,EAAU,qBACVC,EAAU,oBACVC,EAAS,6BACTwC,EAAS,eAETC,EAAa,mBACbC,EAAS,eACTC,EAAa,mBAEbC,EAAc,oBASdC,EAAe,8BAGf5C,EAA8B,iBAAVC,EAAMC,gBAAgBD,EAAAA,gBAAUA,EAAAA,eAAO7C,SAAWA,QAAU6C,iBAGhFE,EAA0B,iBAARC,MAAoBA,MAAQA,KAAKhD,SAAWA,QAAUgD,KAGxEC,EAAOL,GAAcG,GAAYG,SAAS,cAATA,GAGjCuC,EAA4CC,IAAYA,EAAQC,UAAYD,EAG5EE,EAAaH,GAA4CI,IAAWA,EAAOF,UAAYE,EAGvFC,EAAgBF,GAAcA,EAAWF,UAAYD,EAgDzD,IAQMM,EAfWC,EAAMC,EAOnBC,EAAYhD,SAAStC,UACrB4C,EAAcxD,OAAOY,UAGrBuF,EAAalD,EAAK,sBAGlBmD,GACEL,EAAM,SAASM,KAAKF,GAAcA,EAAWG,MAAQH,EAAWG,KAAKC,UAAY,KACvE,iBAAmBR,EAAO,GAItCS,EAAeN,EAAUxC,SAGzB7C,EAAiB2C,EAAY3C,eAO7B4C,EAAiBD,EAAYE,SAG7B+C,EAAaC,OAAO,IACtBF,EAAa1F,KAAKD,GAAgB8F,QAhGjB,sBAgGuC,QACvDA,QAAQ,yDAA0D,SAAW,KAI5EC,EAASd,EAAgB7C,EAAK2D,YAAS7C,EACvCH,EAAuBJ,EAAYI,qBAGnCiD,EAAiBD,EAASA,EAAOE,cAAW/C,EAC5CgD,GA5Caf,EA4CQhG,OAAOsG,KA5CTL,EA4CejG,OA3C7B,SAASgH,GACd,OAAOhB,EAAKC,EAAUe,GAC1B,GA4CIC,EAAWC,EAAUjE,EAAM,YAC3BkE,EAAMD,EAAUjE,EAAM,OACtBmE,EAAUF,EAAUjE,EAAM,WAC1BoE,EAAMH,EAAUjE,EAAM,OACtBqE,EAAUJ,EAAUjE,EAAM,WAG1BsE,GAAkB3D,EAAqB9C,KAAK,CAAE0G,QAAW,GAAK,WAG9DC,EAAqBC,EAAST,GAC9BU,EAAgBD,EAASP,GACzBS,EAAoBF,EAASN,GAC7BS,EAAgBH,EAASL,GACzBS,EAAoBJ,EAASJ,GAqBjC,SAASS,EAAazD,GACpB,IAAKM,GAASN,IA6DhB,SAAkB0B,GAChB,QAASI,GAAeA,KAAcJ,CACxC,CA/D0BgC,CAAS1D,GAC/B,OAAO,EAET,IAAI2D,EAAWpD,EAAWP,IA1G5B,SAAsBA,GAGpB,IAAIF,GAAS,EACb,GAAa,MAATE,GAA0C,mBAAlBA,EAAMZ,SAChC,IACEU,KAAYE,EAAQ,GAC1B,CAAM,MAAO4D,GAAK,CAEhB,OAAO9D,CACT,CAgGsC+D,CAAa7D,GAAUmC,EAAajB,EACxE,OAAOyC,EAAQG,KAAKV,EAASpD,GAC/B,CAUA,SAAS4C,EAAUmB,EAAQ1H,GACzB,IAAI2D,EAlIN,SAAkB+D,EAAQ1H,GACxB,OAAiB,MAAV0H,OAAiBtE,EAAYsE,EAAO1H,EAC7C,CAgIc2H,CAASD,EAAQ1H,GAC7B,OAAOoH,EAAazD,GAASA,OAAQP,CACvC,CASA,IAAIwE,EAxCJ,SAAoBjE,GAClB,OAAOb,EAAe3C,KAAKwD,EAC7B,EAiGA,SAASoD,EAAS1B,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOQ,EAAa1F,KAAKkF,EAC/B,CAAM,MAAOkC,GAAK,CACd,IACE,OAAQlC,EAAO,EACrB,CAAM,MAAOkC,GAAK,CACf,CACD,MAAO,EACT,CAoBA,SAASlD,EAAYV,GAEnB,OAmFF,SAA2BA,GACzB,OAyLF,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC3B,CA3LSE,CAAaF,IAAUQ,EAAYR,EAC5C,CArFSS,CAAkBT,IAAUzD,EAAeC,KAAKwD,EAAO,aAC1DV,EAAqB9C,KAAKwD,EAAO,WAAab,EAAe3C,KAAKwD,IAAU7B,EAClF,EAzFKwE,GAAYsB,EAAO,IAAItB,EAAS,IAAIuB,YAAY,MAAQjD,GACxD4B,GAAOoB,EAAO,IAAIpB,IAAQhC,GAC1BiC,GAAWmB,EAAOnB,EAAQqB,YAAcrD,GACxCiC,GAAOkB,EAAO,IAAIlB,IAAQhC,GAC1BiC,GAAWiB,EAAO,IAAIjB,IAAYhC,KACrCiD,EAAS,SAASjE,GAChB,IAAIF,EAASX,EAAe3C,KAAKwD,GAC7BoE,EAlMQ,mBAkMDtE,EAAsBE,EAAMqE,iBAAc5E,EACjD6E,EAAaF,EAAOhB,EAASgB,QAAQ3E,EAEzC,GAAI6E,EACF,OAAQA,GACN,KAAKnB,EAAoB,OAAOlC,EAChC,KAAKoC,EAAe,OAAOxC,EAC3B,KAAKyC,EAAmB,OAAOxC,EAC/B,KAAKyC,EAAe,OAAOxC,EAC3B,KAAKyC,EAAmB,OAAOxC,EAGnC,OAAOlB,CACX,GA8FA,IAAIG,EAAUU,MAAMV,QA2BpB,SAASO,EAAYR,GACnB,OAAgB,MAATA,GA2JT,SAAkBA,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GAAS9B,CAC7C,CA9J0BiC,CAASH,EAAM7D,UAAYoE,EAAWP,EAChE,CAgDA,IAAIwC,EAAWD,GAsLf,WACE,OAAO,CACT,EA/GA,SAAShC,EAAWP,GAGlB,IAAII,EAAME,GAASN,GAASb,EAAe3C,KAAKwD,GAAS,GACzD,OAAOI,GAAOhC,GAAWgC,GAAO/B,CAClC,CA0DA,SAASiC,GAASN,GAChB,IAAIK,SAAcL,EAClB,QAASA,IAAkB,UAARK,GAA4B,YAARA,EACzC,CA+CAkB,EAAAH,QAvJA,SAAiBpB,GACf,GAAIQ,EAAYR,KACXC,EAAQD,IAA0B,iBAATA,GACD,mBAAhBA,EAAMuE,QAAwB/B,EAASxC,IAAUU,EAAYV,IACxE,OAAQA,EAAM7D,OAEhB,IAAIiE,EAAM6D,EAAOjE,GACjB,GAAII,GAAOS,GAAUT,GAAOW,EAC1B,OAAQf,EAAMjF,KAEhB,GAAIkI,GAnMN,SAAqBjD,GACnB,IAAIoE,EAAOpE,GAASA,EAAMqE,YAG1B,OAAOrE,KAFqB,mBAARoE,GAAsBA,EAAK9H,WAAc4C,EAG/D,CA8LwBsF,CAAYxE,GAChC,OAAQyC,EAAWzC,GAAO7D,OAE5B,IAAK,IAAIE,KAAO2D,EACd,GAAIzD,EAAeC,KAAKwD,EAAO3D,GAC7B,OAAO,EAGX,OAAO,CACT,oCC1bA,SAASoI,GAAcC,EAAkBC,GACvC,MAAMC,EAAaC,UAAQH,GACrBI,EAAaD,UAAQF,GAE3B,OAAII,GAAQH,IAAeG,GAAQD,GAC1B,GACEC,GAAQH,GACVE,EACEC,GAAQD,GACVF,EAGFI,GAAQJ,EAAW/J,KAAI,CAACoK,EAASjG,IAAU,CAACiG,EAASH,EAAW9F,MACzE,CCTA,SAASkG,GACPC,KACGC,GAIH,MAAO,CACL,2DAGIX,IANeU,GAAW,IAAIE,SAMND,GAC5B,uBAKJ,CChBA,SAASE,GACPH,KACGC,GAIH,MAAO,CACL,sLAWIX,IAdeU,GAAW,IAAIE,SAcND,GAC5B,yPAYJ,CChCA,SAASG,GACPJ,KACGC,GAIH,MAAO,CACL,yGAOIX,IAVeU,GAAW,IAAIE,SAUND,GAC5B,cAIJ,CClBA,SAASI,GACPL,KACGC,GAIH,MAAO,CACL,iEAGIX,IANeU,GAAW,IAAIE,SAMND,GAC5B,uBAKJ,CCjBA,IAGIK,GAAiB,4BAIjBvH,GAAmB,iBAGnBC,GAAU,qBACVC,GAAU,oBACVC,GAAS,6BACTqH,GAAY,kBASZxE,GAAe,8BAGfyE,GAAW,mBAGXrH,GAA8B,iBAAVC,EAAMC,gBAAgBD,EAAAA,gBAAUA,EAAAA,eAAO7C,SAAWA,QAAU6C,iBAGhFE,GAA0B,iBAARC,MAAoBA,MAAQA,KAAKhD,SAAWA,QAAUgD,KAGxEC,GAAOL,IAAcG,IAAYG,SAAS,cAATA,GA+BrC,SAASgH,GAAc9G,EAAOkB,GAE5B,SADalB,EAAQA,EAAM3C,OAAS,IAgGtC,SAAqB2C,EAAOkB,EAAO6F,GACjC,GAAI7F,GAAUA,EACZ,OAvBJ,SAAuBlB,EAAOc,EAAWiG,EAAWC,GAClD,IAAI3J,EAAS2C,EAAM3C,OACf6C,EAAQ6G,GAAaC,EAAY,GAAK,GAE1C,KAAQA,EAAY9G,MAAYA,EAAQ7C,GACtC,GAAIyD,EAAUd,EAAME,GAAQA,EAAOF,GACjC,OAAOE,EAGX,OAAQ,CACV,CAaW+G,CAAcjH,EAAOkH,GAAWH,GAEzC,IAAI7G,EAAQ6G,EAAY,EACpB1J,EAAS2C,EAAM3C,OAEnB,OAAS6C,EAAQ7C,GACf,GAAI2C,EAAME,KAAWgB,EACnB,OAAOhB,EAGX,OAAQ,CACV,CA5GqBiH,CAAYnH,EAAOkB,EAAO,IAAM,CACrD,CAWA,SAASkG,GAAkBpH,EAAOkB,EAAOmG,GAIvC,IAHA,IAAInH,GAAS,EACT7C,EAAS2C,EAAQA,EAAM3C,OAAS,IAE3B6C,EAAQ7C,GACf,GAAIgK,EAAWnG,EAAOlB,EAAME,IAC1B,OAAO,EAGX,OAAO,CACT,CAWA,SAASoH,GAAStH,EAAOuH,GAKvB,IAJA,IAAIrH,GAAS,EACT7C,EAAS2C,EAAQA,EAAM3C,OAAS,EAChC2D,EAASa,MAAMxE,KAEV6C,EAAQ7C,GACf2D,EAAOd,GAASqH,EAASvH,EAAME,GAAQA,EAAOF,GAEhD,OAAOgB,CACT,CAUA,SAASjB,GAAUC,EAAOC,GAKxB,IAJA,IAAIC,GAAS,EACT7C,EAAS4C,EAAO5C,OAChB8C,EAASH,EAAM3C,SAEV6C,EAAQ7C,GACf2C,EAAMG,EAASD,GAASD,EAAOC,GAEjC,OAAOF,CACT,CAwDA,SAASkH,GAAUhG,GACjB,OAAOA,GAAUA,CACnB,CA0CA,SAASsG,GAASC,EAAOlK,GACvB,OAAOkK,EAAMC,IAAInK,EACnB,CAyCA,SAASoK,GAAQ/E,EAAMC,GACrB,OAAO,SAASe,GACd,OAAOhB,EAAKC,EAAUe,GAC1B,CACA,CAGA,IASMjB,GATFiF,GAAa/F,MAAMrE,UACnBsF,GAAYhD,SAAStC,UACrB4C,GAAcxD,OAAOY,UAGrBuF,GAAalD,GAAK,sBAGlBmD,IACEL,GAAM,SAASM,KAAKF,IAAcA,GAAWG,MAAQH,GAAWG,KAAKC,UAAY,KACvE,iBAAmBR,GAAO,GAItCS,GAAeN,GAAUxC,SAGzB7C,GAAiB2C,GAAY3C,eAO7B4C,GAAiBD,GAAYE,SAG7B+C,GAAaC,OAAO,IACtBF,GAAa1F,KAAKD,IAAgB8F,QA/RjB,sBA+RuC,QACvDA,QAAQ,yDAA0D,SAAW,KAI5EhD,GAASV,GAAKU,OACdsH,GAAeF,GAAQ/K,OAAOkL,eAAgBlL,QAC9C4D,GAAuBJ,GAAYI,qBACnCiF,GAASmC,GAAWnC,OACpBhF,GAAmBF,GAASA,GAAOG,wBAAqBC,EAGxDoH,GAAmBnL,OAAOoL,sBAC1BC,GAAYC,KAAKC,IAGjBpE,GAAMD,GAAUjE,GAAM,OACtBuI,GAAetE,GAAUlH,OAAQ,UASrC,SAASyL,GAAKC,GACZ,IAAIpI,GAAS,EACT7C,EAASiL,EAAUA,EAAQjL,OAAS,EAGxC,IADAO,KAAK2K,UACIrI,EAAQ7C,GAAQ,CACvB,IAAImL,EAAQF,EAAQpI,GACpBtC,KAAK6K,IAAID,EAAM,GAAIA,EAAM,GAC1B,CACH,CAyFA,SAASE,GAAUJ,GACjB,IAAIpI,GAAS,EACT7C,EAASiL,EAAUA,EAAQjL,OAAS,EAGxC,IADAO,KAAK2K,UACIrI,EAAQ7C,GAAQ,CACvB,IAAImL,EAAQF,EAAQpI,GACpBtC,KAAK6K,IAAID,EAAM,GAAIA,EAAM,GAC1B,CACH,CAuGA,SAASG,GAASL,GAChB,IAAIpI,GAAS,EACT7C,EAASiL,EAAUA,EAAQjL,OAAS,EAGxC,IADAO,KAAK2K,UACIrI,EAAQ7C,GAAQ,CACvB,IAAImL,EAAQF,EAAQpI,GACpBtC,KAAK6K,IAAID,EAAM,GAAIA,EAAM,GAC1B,CACH,CAsFA,SAASI,GAAS3I,GAChB,IAAIC,GAAS,EACT7C,EAAS4C,EAASA,EAAO5C,OAAS,EAGtC,IADAO,KAAKiL,SAAW,IAAIF,KACXzI,EAAQ7C,GACfO,KAAKkL,IAAI7I,EAAOC,GAEpB,CA0CA,SAAS6I,GAAc7H,EAAO8H,GAG5B,IAAIhI,EAAUG,GAAQD,IAAUU,GAAYV,GA7e9C,SAAmB+H,EAAG1B,GAIpB,IAHA,IAAIrH,GAAS,EACTc,EAASa,MAAMoH,KAEV/I,EAAQ+I,GACfjI,EAAOd,GAASqH,EAASrH,GAE3B,OAAOc,CACT,CAseMkI,CAAUhI,EAAM7D,OAAQZ,QACxB,GAEAY,EAAS2D,EAAO3D,OAChB8L,IAAgB9L,EAEpB,IAAK,IAAIE,KAAO2D,GACT8H,IAAavL,GAAeC,KAAKwD,EAAO3D,IACvC4L,IAAuB,UAAP5L,GAAmB6L,GAAQ7L,EAAKF,KACpD2D,EAAOqI,KAAK9L,GAGhB,OAAOyD,CACT,CAUA,SAASsI,GAAatJ,EAAOzC,GAE3B,IADA,IAwbU2D,EAAOqI,EAxbblM,EAAS2C,EAAM3C,OACZA,KACL,IAsbQ6D,EAtbDlB,EAAM3C,GAAQ,OAsbNkM,EAtbUhM,IAubA2D,GAAUA,GAASqI,GAAUA,EAtbpD,OAAOlM,EAGX,OAAQ,CACV,CAqEA,SAASuD,GAAYZ,EAAOa,EAAOC,EAAWC,EAAUC,GACtD,IAAId,GAAS,EACT7C,EAAS2C,EAAM3C,OAKnB,IAHAyD,IAAcA,EAAYG,IAC1BD,IAAWA,EAAS,MAEXd,EAAQ7C,GAAQ,CACvB,IAAI6D,EAAQlB,EAAME,GACdW,EAAQ,GAAKC,EAAUI,GACrBL,EAAQ,EAEVD,GAAYM,EAAOL,EAAQ,EAAGC,EAAWC,EAAUC,GAEnDjB,GAAUiB,EAAQE,GAEVH,IACVC,EAAOA,EAAO3D,QAAU6D,EAE3B,CACD,OAAOF,CACT,CA0BA,SAAS2D,GAAazD,GACpB,IAAKM,GAASN,KAqNE0B,EArNiB1B,EAsNxB8B,IAAeA,MAAcJ,GArNpC,OAAO,EAoNX,IAAkBA,EAlNZiC,EAAWpD,GAAWP,IA/kB5B,SAAsBA,GAGpB,IAAIF,GAAS,EACb,GAAa,MAATE,GAA0C,mBAAlBA,EAAMZ,SAChC,IACEU,KAAYE,EAAQ,GAC1B,CAAM,MAAO4D,GAAK,CAEhB,OAAO9D,CACT,CAqkBsC+D,CAAa7D,GAAUmC,GAAajB,GACxE,OAAOyC,EAAQG,KA4QjB,SAAkBpC,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOQ,GAAa1F,KAAKkF,EAC/B,CAAM,MAAOkC,GAAK,CACd,IACE,OAAQlC,EAAO,EACrB,CAAM,MAAOkC,GAAK,CACf,CACD,MAAO,EACT,CAtRsBR,CAASpD,GAC/B,CASA,SAASsI,GAAWvE,GAClB,IAAKzD,GAASyD,GACZ,OAgOJ,SAAsBA,GACpB,IAAIjE,EAAS,GACb,GAAc,MAAViE,EACF,IAAK,IAAI1H,KAAOX,OAAOqI,GACrBjE,EAAOqI,KAAK9L,GAGhB,OAAOyD,CACT,CAxOWyI,CAAaxE,GAEtB,IA8MmB/D,EACfoE,EACAoE,EAhNAC,GA+MArE,GADepE,EA9MO+D,IA+MN/D,EAAMqE,YACtBmE,EAAwB,mBAARpE,GAAsBA,EAAK9H,WAAc4C,GAEtDc,IAAUwI,GAjNb1I,EAAS,GAEb,IAAK,IAAIzD,KAAO0H,GACD,eAAP1H,IAAyBoM,GAAYlM,GAAeC,KAAKuH,EAAQ1H,KACrEyD,EAAOqI,KAAK9L,GAGhB,OAAOyD,CACT,CAgFA,SAAS4I,GAAa3E,GACpB,OA1HF,SAAwBA,EAAQ4E,EAAUC,GACxC,IAAI9I,EAAS6I,EAAS5E,GACtB,OAAO9D,GAAQ8D,GAAUjE,EAASjB,GAAUiB,EAAQ8I,EAAY7E,GAClE,CAuHS8E,CAAe9E,EAAQ+E,GAAQC,GACxC,CAUA,SAASC,GAAWnO,EAAKwB,GACvB,IA+EiB2D,EACbK,EAhFA4I,EAAOpO,EAAI8M,SACf,OAgFgB,WADZtH,SADaL,EA9EA3D,KAgFmB,UAARgE,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAVL,EACU,OAAVA,GAjFDiJ,EAAmB,iBAAP5M,EAAkB,SAAW,QACzC4M,EAAKpO,GACX,CAUA,SAAS+H,GAAUmB,EAAQ1H,GACzB,IAAI2D,EA9tBN,SAAkB+D,EAAQ1H,GACxB,OAAiB,MAAV0H,OAAiBtE,EAAYsE,EAAO1H,EAC7C,CA4tBc2H,CAASD,EAAQ1H,GAC7B,OAAOoH,GAAazD,GAASA,OAAQP,CACvC,CA/iBA0H,GAAK7K,UAAU+K,MAnEf,WACE3K,KAAKiL,SAAWT,GAAeA,GAAa,MAAQ,CAAA,CACtD,EAkEAC,GAAK7K,UAAkB,OAtDvB,SAAoBD,GAClB,OAAOK,KAAK8J,IAAInK,WAAeK,KAAKiL,SAAStL,EAC/C,EAqDA8K,GAAK7K,UAAU4M,IA1Cf,SAAiB7M,GACf,IAAI4M,EAAOvM,KAAKiL,SAChB,GAAIT,GAAc,CAChB,IAAIpH,EAASmJ,EAAK5M,GAClB,OAAOyD,IAAW2F,QAAiBhG,EAAYK,CAChD,CACD,OAAOvD,GAAeC,KAAKyM,EAAM5M,GAAO4M,EAAK5M,QAAOoD,CACtD,EAoCA0H,GAAK7K,UAAUkK,IAzBf,SAAiBnK,GACf,IAAI4M,EAAOvM,KAAKiL,SAChB,OAAOT,QAA6BzH,IAAdwJ,EAAK5M,GAAqBE,GAAeC,KAAKyM,EAAM5M,EAC5E,EAuBA8K,GAAK7K,UAAUiL,IAXf,SAAiBlL,EAAK2D,GAGpB,OAFWtD,KAAKiL,SACXtL,GAAQ6K,SAA0BzH,IAAVO,EAAuByF,GAAiBzF,EAC9DtD,IACT,EAmHA8K,GAAUlL,UAAU+K,MAjFpB,WACE3K,KAAKiL,SAAW,EAClB,EAgFAH,GAAUlL,UAAkB,OArE5B,SAAyBD,GACvB,IAAI4M,EAAOvM,KAAKiL,SACZ3I,EAAQoJ,GAAaa,EAAM5M,GAE/B,QAAI2C,EAAQ,KAIRA,GADYiK,EAAK9M,OAAS,EAE5B8M,EAAKE,MAEL5E,GAAO/H,KAAKyM,EAAMjK,EAAO,IAEpB,EACT,EAwDAwI,GAAUlL,UAAU4M,IA7CpB,SAAsB7M,GACpB,IAAI4M,EAAOvM,KAAKiL,SACZ3I,EAAQoJ,GAAaa,EAAM5M,GAE/B,OAAO2C,EAAQ,OAAIS,EAAYwJ,EAAKjK,GAAO,EAC7C,EAyCAwI,GAAUlL,UAAUkK,IA9BpB,SAAsBnK,GACpB,OAAO+L,GAAa1L,KAAKiL,SAAUtL,IAAQ,CAC7C,EA6BAmL,GAAUlL,UAAUiL,IAjBpB,SAAsBlL,EAAK2D,GACzB,IAAIiJ,EAAOvM,KAAKiL,SACZ3I,EAAQoJ,GAAaa,EAAM5M,GAO/B,OALI2C,EAAQ,EACViK,EAAKd,KAAK,CAAC9L,EAAK2D,IAEhBiJ,EAAKjK,GAAO,GAAKgB,EAEZtD,IACT,EAiGA+K,GAASnL,UAAU+K,MA/DnB,WACE3K,KAAKiL,SAAW,CACdyB,KAAQ,IAAIjC,GACZtM,IAAO,IAAKgI,IAAO2E,IACnB6B,OAAU,IAAIlC,GAElB,EA0DAM,GAASnL,UAAkB,OA/C3B,SAAwBD,GACtB,OAAO2M,GAAWtM,KAAML,GAAa,OAAEA,EACzC,EA8CAoL,GAASnL,UAAU4M,IAnCnB,SAAqB7M,GACnB,OAAO2M,GAAWtM,KAAML,GAAK6M,IAAI7M,EACnC,EAkCAoL,GAASnL,UAAUkK,IAvBnB,SAAqBnK,GACnB,OAAO2M,GAAWtM,KAAML,GAAKmK,IAAInK,EACnC,EAsBAoL,GAASnL,UAAUiL,IAVnB,SAAqBlL,EAAK2D,GAExB,OADAgJ,GAAWtM,KAAML,GAAKkL,IAAIlL,EAAK2D,GACxBtD,IACT,EAwDAgL,GAASpL,UAAUsL,IAAMF,GAASpL,UAAU6L,KAnB5C,SAAqBnI,GAEnB,OADAtD,KAAKiL,SAASJ,IAAIvH,EAAOyF,IAClB/I,IACT,EAiBAgL,GAASpL,UAAUkK,IANnB,SAAqBxG,GACnB,OAAOtD,KAAKiL,SAASnB,IAAIxG,EAC3B,EAwTA,IAAIsJ,GAAazC,GAAmBJ,GAAQI,GAAkBnL,QAAU6N,GAUpER,GAAgBlC,GAA+B,SAAS9C,GAE1D,IADA,IAAIjE,EAAS,GACNiE,GACLlF,GAAUiB,EAAQwJ,GAAWvF,IAC7BA,EAAS4C,GAAa5C,GAExB,OAAOjE,CACT,EAPuCyJ,GAgBvC,SAASxJ,GAAcC,GACrB,OAAOC,GAAQD,IAAUU,GAAYV,OAChCT,IAAoBS,GAASA,EAAMT,IAC1C,CAUA,SAAS2I,GAAQlI,EAAO7D,GAEtB,SADAA,EAAmB,MAAVA,EAAiB+B,GAAmB/B,KAE1B,iBAAT6D,GAAqB2F,GAAS7B,KAAK9D,KAC1CA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQ7D,CAC7C,CAmEA,SAASqN,GAAMxJ,GACb,GAAoB,iBAATA,GA2Sb,SAAkBA,GAChB,MAAuB,iBAATA,GACXE,GAAaF,IAAUb,GAAe3C,KAAKwD,IAAU0F,EAC1D,CA9SkC+D,CAASzJ,GACvC,OAAOA,EAET,IAAIF,EAAUE,EAAQ,GACtB,MAAkB,KAAVF,GAAkB,EAAIE,IAvkCjB,SAukCwC,KAAOF,CAC9D,CA2EA,SAASY,GAAYV,GAEnB,OAmFF,SAA2BA,GACzB,OAAOE,GAAaF,IAAUQ,GAAYR,EAC5C,CArFSS,CAAkBT,IAAUzD,GAAeC,KAAKwD,EAAO,aAC1DV,GAAqB9C,KAAKwD,EAAO,WAAab,GAAe3C,KAAKwD,IAAU7B,GAClF,CAyBA,IAAI8B,GAAUU,MAAMV,QA2BpB,SAASO,GAAYR,GACnB,OAAgB,MAATA,GAkFT,SAAkBA,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GAAS9B,EAC7C,CArF0BiC,CAASH,EAAM7D,UAAYoE,GAAWP,EAChE,CAgDA,SAASO,GAAWP,GAGlB,IAAII,EAAME,GAASN,GAASb,GAAe3C,KAAKwD,GAAS,GACzD,OAAOI,GAAOhC,IAAWgC,GAAO/B,EAClC,CA0DA,SAASiC,GAASN,GAChB,IAAIK,SAAcL,EAClB,QAASA,IAAkB,UAARK,GAA4B,YAARA,EACzC,CA0BA,SAASH,GAAaF,GACpB,QAASA,GAAyB,iBAATA,CAC3B,CA+CA,SAAS8I,GAAO/E,GACd,OAAOvD,GAAYuD,GAAU8D,GAAc9D,GAAQ,GAAQuE,GAAWvE,EACxE,CAqBA,IAlhBkBrC,GAAMgI,GAkhBpBC,IAlhBcjI,GAkhBE,SAASqC,EAAQzJ,GACnC,OAAc,MAAVyJ,EACK,IAETzJ,EAAQ8L,GAAS1G,GAAYpF,EAAO,GAAIkP,IA9jB1C,SAAkBzF,EAAQzJ,GAExB,OAcF,SAAoByJ,EAAQzJ,EAAOsF,GAKjC,IAJA,IAAIZ,GAAS,EACT7C,EAAS7B,EAAM6B,OACf2D,EAAS,CAAA,IAEJd,EAAQ7C,GAAQ,CACvB,IAAIE,EAAM/B,EAAM0E,GACZgB,EAAQ+D,EAAO1H,GAEfuD,EAAUI,EAAO3D,KACnByD,EAAOzD,GAAO2D,EAEjB,CACD,OAAOF,CACT,CA5BS8J,CADP7F,EAASrI,OAAOqI,GACUzJ,GAAO,SAAS0F,EAAO3D,GAC/C,OAAOA,KAAO0H,CAClB,GACA,CA0jBS8F,CAAS9F,EA7sBlB,SAAwBjF,EAAOC,EAAQsH,EAAUF,GAC/C,IA1gBiBzE,EA0gBb1C,GAAS,EACT8K,EAAWlE,GACXmE,GAAW,EACX5N,EAAS2C,EAAM3C,OACf2D,EAAS,GACTkK,EAAejL,EAAO5C,OAE1B,IAAKA,EACH,OAAO2D,EAELuG,IACFtH,EAASqH,GAASrH,GArhBH2C,EAqhBqB2E,EAphB/B,SAASrG,GACd,OAAO0B,EAAK1B,EAChB,KAohBMmG,GACF2D,EAAW5D,GACX6D,GAAW,GAEJhL,EAAO5C,QAjvBK,MAkvBnB2N,EAAWxD,GACXyD,GAAW,EACXhL,EAAS,IAAI2I,GAAS3I,IAExBkL,EACA,OAASjL,EAAQ7C,GAAQ,CACvB,IAAI6D,EAAQlB,EAAME,GACdkL,EAAW7D,EAAWA,EAASrG,GAASA,EAG5C,GADAA,EAASmG,GAAwB,IAAVnG,EAAeA,EAAQ,EAC1C+J,GAAYG,GAAaA,EAAU,CAErC,IADA,IAAIC,EAAcH,EACXG,KACL,GAAIpL,EAAOoL,KAAiBD,EAC1B,SAASD,EAGbnK,EAAOqI,KAAKnI,EACb,MACS8J,EAAS/K,EAAQmL,EAAU/D,IACnCrG,EAAOqI,KAAKnI,EAEf,CACD,OAAOF,CACT,CAkqB0BsK,CAAe1B,GAAa3E,GAASzJ,IAC/D,EAvhBEoP,GAAQ3C,QAAoBtH,IAAViK,GAAuBhI,GAAKvF,OAAS,EAAKuN,GAAO,GAC5D,WAML,IALA,IAAItE,EAAOlJ,UACP8C,GAAS,EACT7C,EAAS4K,GAAU3B,EAAKjJ,OAASuN,GAAO,GACxC5K,EAAQ6B,MAAMxE,KAET6C,EAAQ7C,GACf2C,EAAME,GAASoG,EAAKsE,GAAQ1K,GAE9BA,GAAS,EAET,IADA,IAAIqL,EAAY1J,MAAM+I,GAAQ,KACrB1K,EAAQ0K,IACfW,EAAUrL,GAASoG,EAAKpG,GAG1B,OADAqL,EAAUX,IAAS5K,EAv3BvB,SAAe4C,EAAM4I,EAASlF,GAC5B,OAAQA,EAAKjJ,QACX,KAAK,EAAG,OAAOuF,EAAKlF,KAAK8N,GACzB,KAAK,EAAG,OAAO5I,EAAKlF,KAAK8N,EAASlF,EAAK,IACvC,KAAK,EAAG,OAAO1D,EAAKlF,KAAK8N,EAASlF,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAO1D,EAAKlF,KAAK8N,EAASlF,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE3D,OAAO1D,EAAKjF,MAAM6N,EAASlF,EAC7B,CAg3BW3I,CAAMiF,GAAMhF,KAAM2N,EAC7B,GA0hBA,SAASd,KACP,MAAO,EACT,CAEA,IAAAgB,GAAiBZ,GC57CjB,SAASa,IAAUrP,MACjBA,EAAQ,wBAAuBsP,OAC/BA,EAAS,sBAAqB1P,KAC9BA,EAAO,cAAa2P,OACpBA,EAAS,sBAAqBzP,OAC9BA,EAAS,gBAAe0G,UACxBA,EAAY,SAEZ,OAAOgJ,EAAGA,GAAA;aACCC,EAAAA,SAASzP;mBACHyP,EAAAA,SAASH;iBACXG,EAAAA,SAAS7P;mBACP6P,EAAAA,SAASF;mBACTE,EAAAA,SAAS3P;sBACN0G;;;GAItB,CCOO,MAAMkJ,GAA6C,CACxD,aAAc,CACZC,SAAU,cACVC,WAAY,gBACZC,WAAY,oBAEd,aAAc,CACZF,SAAU,cACVC,WAAY,gBACZC,WAAY,sBAEd,kBAAmB,CACjBF,SAAU,cACVC,WAAY,gBACZC,WAAY,oBAEd,aAAc,CACZF,SAAU,cACVC,WAAY,gBACZC,WAAY,sBAEd,kBAAmB,CACjBF,SAAU,cACVC,WAAY,gBACZC,WAAY,oBAEdC,KAAM,CACJH,SAAU,cACVC,WAAY,gBACZC,WAAY,sBAEd,YAAa,CACXF,SAAU,cACVC,WAAY,gBACZC,WAAY,oBAEdE,QAAS,CACPJ,SAAU,cACVC,WAAY,gBACZC,WAAY,sBAEd,eAAgB,CACdF,SAAU,cACVC,WAAY,gBACZC,WAAY,oBAEd,YAAa,CACXG,WAAY,wBACZL,SAAU,cACVC,WAAY,gBACZC,WAAY,sBAEd,YAAa,CACXG,WAAY,wBACZL,SAAU,cACVC,WAAY,gBACZC,WAAY,sBAEd,YAAa,CACXF,SAAU,cACVC,WAAY,gBACZC,WAAY,mBACZI,cAAe,aAEjB,YAAa,CACXN,SAAU,cACVC,WAAY,gBACZC,WAAY,mBACZI,cAAe,aAEjB,YAAa,CACXN,SAAU,cACVC,WAAY,gBACZC,WAAY,mBACZI,cAAe,aAEjB,kBAAmB,CACjBN,SAAU,cACVC,WAAY,gBACZC,WAAY,oBAEd,kBAAmB,CACjBF,SAAU,cACVC,WAAY,gBACZC,WAAY,mBACZI,cAAe,aAEjB,WAAY,CACVN,SAAU,cACVC,WAAY,gBACZC,WAAY,mBACZI,cAAe,aAEjBC,KAAM,CACJP,SAAU,cACVC,WAAY,gBACZC,WAAY,qBACZ7P,MAAO,iBAILmQ,GAAsC,OAgB5C,SAASC,GACPC,EAAuDF,GACvDxR,GAEA,GAAIyG,EAAAA,WAAWiL,GACb,OAASlR,GAAaiR,GAAWC,EAAQlR,GAA8BR,GAKzE,MAAM2R,EAxBR,SAAgCD,GAC9B,OAAOA,KAAWX,GACdA,GAAqBW,GACrBX,GAAqBS,GAC3B,CAoBqBI,CAAuBF,GAE1C,OAAOb,EAAGA,GAAA;MACNH,GAAU,CACVE,OAAQe,EAAWN,WACnBlQ,OAAQwQ,EAAWV,WACnBhQ,KAAM0Q,EAAWX,SACjBL,OAAQgB,EAAWT,WACnBrJ,UAAW8J,EAAWL,cACtBjQ,MAAOsQ,EAAWtQ,QAASrB,aAAA,EAAAA,EAASqB;;MAGpCwQ,cAAY,CACZ,sBAAuB7R,aAAA,EAAAA,EAAS8R;GAGtC,CCxLA,MAEMC,GAAYC,EAASA,SAAA;;;;;;EAYrBC,GAAQ5R,EAAAA,QAAO6R,IAAgB;oBACjBH;wBAfO;sBAiBJvR,GAAqB,GAAXA,EAAM0E;;ECbhC,MAAMiN,GAAYC,GAAoDvB,EAAAA,GAAG;IAC5EgB,cAAY,CACZ,aAAcQ,EAAAA,UAAU,CAAEC,CAACF,GAAO,SAClC,YAAaC,EAAAA,UAAU,CAAEC,CAACF,GAAO,QACjC,WAAYC,EAAAA,UAAU,CAAEC,CAACF,GAAO,OAChC,UAAWC,EAAAA,UAAU,CAAEC,CAACF,GAAO,MAC/B,UAAWC,EAAAA,UAAU,CAAEC,CAACF,GAAO,MAC/B,UAAWC,EAAAA,UAAU,CAAEC,CAACF,GAAO,MAC/B,WAAYC,EAAAA,UAAU,CAAEC,CAACF,GAAO,OAChC,YAAaC,EAAAA,UAAU,CAAEC,CAACF,GAAO,QACjC,YAAaC,EAAAA,UAAU,CAAEC,CAACF,GAAO;ECD/BG,GAAiBlS,EAAAA,QAAOmS,GAI5B;;;SAGOL,GAAS;;iBAEDN,cAAY,CACzBY,OAAQJ,EAASA,UAAC,CAAEK,OAAQ,WAC5B,aAAcL,EAASA,UAAC,CAAEK,OAAQ,eAClC,WAAYL,EAASA,UAAC,CAAEK,OAAQ,aAChCC,QAASN,EAASA,UAAC,CAAEK,OAAQ;;qBAGZb,cAAY,CAC7BY,OAAQJ,EAASA,UAAC,CAAEO,SAAU,WAC9B,aAAcP,EAASA,UAAC,CAAEO,SAAU,eACpC,WAAYP,EAASA,UAAC,CAAEO,SAAU,aAClC,gBAAiBP,EAASA,UAAC,CAAEO,SAAU,kBACvC,eAAgBP,EAASA,UAAC,CAAEO,SAAU,iBACtC,eAAgBP,EAASA,UAAC,CAAEO,SAAU;EAQpC,SAAUC,GAAMrS,GACpB,MAAMsS,MAAEA,EAAQ,IAAGC,QAAEA,EAAU,aAAYC,MAAEA,EAAQ,aAAYC,SAAEA,GAAsBzS,EAATc,WAASd,EAAnF,CAAgF,QAAA,UAAA,QAAA,aAEtF,OACEI,EAAAA,QAAAC,cAAC0R,GAAc3Q,OAAAC,OAAA,CAAAqR,OAASJ,EAAiBF,SAAAG,EAAiBL,OAAAM,GAAW1R,GAClE2R,EAGP,CCtCO,MAAME,GAAiB9S,EAAAA,QAAOmS,GAInC;;;;iBAIeX,cAAY,CACzBY,OAAQJ,EAASA,UAAC,CAAEK,OAAQ,WAC5B,aAAcL,EAASA,UAAC,CAAEK,OAAQ,eAClC,WAAYL,EAASA,UAAC,CAAEK,OAAQ,aAChCC,QAASN,EAASA,UAAC,CAAEK,OAAQ;;qBAGZb,cAAY,CAC7BY,OAAQJ,EAASA,UAAC,CAAEO,SAAU,WAC9B,aAAcP,EAASA,UAAC,CAAEO,SAAU,eACpC,WAAYP,EAASA,UAAC,CAAEO,SAAU,aAClC,gBAAiBP,EAASA,UAAC,CAAEO,SAAU,kBACvC,eAAgBP,EAASA,UAAC,CAAEO,SAAU,iBACtC,eAAgBP,EAASA,UAAC,CAAEO,SAAU;;;;;;;;kBASxBT,GAAS;;EAQrB,SAAUiB,GAAM5S,GACpB,MAAMsS,MAAEA,EAAQ,IAAGC,QAAEA,EAAU,aAAYC,MAAEA,EAAQ,UAASC,SAAEA,GAAsBzS,EAATc,WAASd,EAAhF,CAA6E,QAAA,UAAA,QAAA,aAEnF,OACEI,EAAAA,QAAAC,cAACsS,GAAcvR,OAAAC,OAAA,CAAAqR,OAASJ,EAAiBF,SAAAG,EAAiBL,OAAAM,GAAW1R,GAClE2R,EAGP,CC3CA,MAAMI,GAAehT,EAAAA,QAAOmS,GAO1B;aACWL,GAAS;;WAEXzR,EAAAA,SAAM;;gBAEDmR,cAAY,CACxByB,KAAMjB,EAASA,UAAC,CAAEkB,WAAY,SAC9Bd,OAAQJ,EAASA,UAAC,CAAEkB,WAAY,WAChCC,MAAOnB,EAASA,UAAC,CAAEkB,WAAY;;sBAGb1B,cAAY,CAC9B,oBAAqBQ,EAASA,UAAC,CAAEoB,YAAa,gBAC9C,sBAAuBpB,EAASA,UAAC,CAAEoB,YAAa,kBAChD,wBAAyBpB,EAASA,UAAC,CAAEoB,YAAa,oBAClD,yBAA0BpB,EAASA,UAAC,CAAEoB,YAAa;;kBAGrC5B,cAAY,CAC1B,uBAAwBQ,EAASA,UAAC,CAAEqB,aAAc,mBAClD,sBAAuBrB,EAASA,UAAC,CAAEqB,aAAc,kBACjD,wBAAyBrB,EAASA,UAAC,CAAEqB,aAAc,oBACnD,sBAAuBrB,EAASA,UAAC,CAAEqB,aAAc,kBACjD,gBAAiBrB,EAASA,UAAC,CAAEqB,aAAc;;;;kBAK7B7B,cAAY,CAC1B,sBAAuBQ,EAASA,UAAC,CAAEsB,aAAc,WACjD,oBAAqBtB,EAASA,UAAC,CAAEsB,aAAc,SAC/C,oBAAqBtB,EAASA,UAAC,CAAEsB,aAAc;;mBAGhC9B,cAAY,CAC3B,qBAAsBQ,EAASA,UAAC,CAAEuB,cAAe,SACjD,kBAAmBvB,EAASA,UAAC,CAAEuB,cAAe,MAC9C,kBAAmBvB,EAASA,UAAC,CAAEuB,cAAe,MAC9C,kBAAmBvB,EAASA,UAAC,CAAEuB,cAAe;EAQ5C,SAAUC,GAAIrT,GAClB,MAAMsT,WACJA,EAAa,cAAaC,YAC1BA,EAAc,gBAAeC,aAC7BA,EAAe,IAAGC,YAClBA,EAAc,OAAMC,QACpBA,EAAU,IAAGC,UACbA,EAAY,OAAMlB,SAClBA,GAEEzS,EADCc,EACDC,SAAAf,EATE,CAAA,aAAA,cAAA,eAAA,cAAA,UAAA,YAAA,aAWN,OACEI,wBAACyS,GAAYzR,OAAAC,OAAA,CAAA4R,YACEK,EACCJ,aAAAK,gBACCC,EAAYL,aACbM,EACJG,SAAAF,aACEC,GACR7S,GAEH2R,EAGP,CC/EA,MAAMoB,GAAmBhU,EAAAA,QAAOmS,GAK9B;;;;SAIOL,GAAS;;;QAGVN,cAAY,CACd,eAAgBQ,EAASA,UAAC,CAAEiC,WAAW,IACvC,cAAejC,EAASA,UAAC,CAAEiC,WAAW;kBAE1BlC,EAAAA,KAAK;;;;;QAKfP,cAAY,CACd,eAAgBQ,EAASA,UAAC,CAAEiC,WAAW,IACvC,cAAejC,EAASA,UAAC,CAAEiC,WAAW;;;iBAI3BlC,EAAAA,KAAK;;EC9BtB,MAAMmC,GAAoBlU,EAAAA,QAAOmS,GAI/B;;;SAGOL,GAAS;;;wBAGMC,EAAAA,KAAK;;;;4BAIDA,EAAAA,KAAK;4BACLA,EAAAA,KAAK;;;ECfjC,MAAMoC,GAAgBnU,EAAAA,QAAOmS,GAG3B;;cAEYL,GAAS;;0BAEGC,EAAAA,KAAK;;2DAE4BA,EAAAA,KAAK;;;ECjB1D,MAAAqC,GAAS,IACN,KAGTA,GAAO5B,MAAQA,GACf4B,GAAOrB,MAAQA,GACfqB,GAAOZ,IAAMA,GACbY,GAAOC,QHuCD,SAAkBlU,GACtB,MAAMmU,gBACJA,EAAkB,MAAKC,SACvBA,GAAW,EAAKC,UAChBA,EAAY,OAAM/B,MAClBA,EAAQ,IAAGG,SACXA,GAEEzS,EADCc,EAAIC,SACLf,EAPE,CAOL,kBAAA,WAAA,YAAA,QAAA,aAED,OACEI,EAAAA,QAACC,cAAAwT,GACmBzS,OAAAC,OAAA,CAAAiT,iBAAAH,YACPC,EAAQG,WACPF,EAAS3B,OACbJ,GACJxR,GAEH2R,EAGP,EG3DAwB,GAAOO,SFwBD,SAAmBxU,GACvB,MAAMyU,MAAEA,EAAQ,EAACnC,MAAEA,EAAQ,IAAGoC,UAAEA,EAAY,QAAOjC,SAAEA,GAAsBzS,EAATc,WAASd,EAArE,CAAkE,QAAA,QAAA,YAAA,aAExE,OACEI,EAAAA,QAACC,cAAA0T,GAA0B3S,OAAAC,OAAA,CAAAqR,OAAAJ,aAAmBoC,EAASC,OAAUF,EAAQ,GAAO3T,GAC7E2R,EAGP,EE/BAwB,GAAOW,KDiBD,SAAe5U,GACnB,MAAMsS,MAAEA,EAAQ,IAAGuC,eAAEA,EAAiB,MAAKpC,SAAEA,GAAsBzS,EAATc,EAAIC,EAAAA,OAAKf,EAA7D,CAAA,QAAA,iBAAA,aAEN,OACEI,EAAA,QAAAC,cAAC2T,GAAa5S,OAAAC,OAAA,CAAAqR,OAASJ,EAAKwC,gBAAmBD,GAAoB/T,GAChE2R,EAGP,EEpCA,MAAMsC,GAAUvD,EAASA,SAAA;;;;;;;EASZwD,GAAMnV,EAAAA,QAAOmS,GAA0C;;;WAGzD,EAAGtR,WAAaA,EAAQ,GAAGA,MAAY;YACtCR,EAAAA,SAAM;;;sBAGIA,EAAAA,SAAM;mBACTA,EAAAA,SAAM;;;;;;;cAOXA,EAAAA,SAAM;;wBAEIA,EAAAA,SAAM;;iBAEb6U,MAAW,EAAGE,cAAgBA,GAAYA,EAAW,EAAIA,EAAW;;;;;EC3BrF,MAAMC,GAAQ1D,EAASA,SAAA;;;;;;;;EAUjB5R,GAAUC,EAAAA,QAAOmS,GAAG;;;;iBAITkD;;;;iBAIAA;;;;iBAIAA;;EASXC,GAAMtV,EAAAA,QAAOmS,GAAa;;WAErBJ,EAAAA,KAAK;YACJA,EAAAA,KAAK;YACL1R,EAAAA,SAAM;;sBAEImR,cAAY,CAC9B,sBAAuBQ,EAASA,UAAC,CAAEX,QAAS,UAC5C,qBAAsBW,EAASA,UAAC,CAAEX,QAAS;mBAE5BhR,EAAAA,SAAM;EAQD,SAAAkV,GAAYC,GAAA,IAAA5U,KAClCA,EAAO,GAAEyQ,QACTA,EAAU,QAAMmE,EACbrV,EAH+Be,EAAAA,OAAAsU,EAAA,CAAA,OAAA,YAKlC,OACEjV,UAACC,cAAAT,GAAQwB,OAAAC,OAAA,CAAAiU,KAAK,cAAa,aAAY,WAActV,GACnDI,EAAC,QAAAC,cAAA8U,IAAI1U,KAAMA,EAAMyQ,QAASA,IAC1B9Q,EAAC,QAAAC,cAAA8U,IAAI1U,KAAMA,EAAMyQ,QAASA,IAC1B9Q,UAAAC,cAAC8U,GAAG,CAAC1U,KAAMA,EAAMyQ,QAASA,IAGhC,CChCA,MAAMqE,GAAa1V,EAAAA,QAAOC,IAAI;;;;;;aAMjB0V,EAAAA,IAAI;EAGXC,GAAU5V,EAAAA,QAAO0V,GAAW;;EAI5BG,GAAW7V,EAAAA,QAAO0V,GAAW;;EAItBI,GAAW9V,EAAAA,QAAOC,IAAiB;IAC5C,EAAG2S,cACiB,iBAAbA,EChDF,sFDkDD;;aAOK+C,EAAAA,IAAI;EAGXI,GAAmB/V,EAAAA,QAAOgW,MAG9B;IACE9V;;IAEAkR,GACAI,EAAAA,YAAY,CACV,YAAaQ,EAASA,UAAC,CAAEiE,OAAQ,YACjC,YAAajE,EAASA,UAAC,CAAEiE,OAAQ,UACjC,YAAajE,EAASA,UAAC,CAAEiE,OAAQ;;;;;;;;;;;;;;mBAgBpB5V,EAAAA,SAAM;kBACPA,EAAAA,SAAM;;kBAENA,EAAAA,SAAM;;YAEZmR,cAAY,CACpB,gBAAiBQ,EAASA,UAAC,CAAEiE,OAAQ,YACrC,sBAAuBjE,EAASA,UAAC,CAAEiE,OAAQ,UAC3C,sBAAuBjE,EAASA,UAAC,CAAEiE,OAAQ;;;;IAK3CC;;IAEA,EAAGC,cACHA,EACI3F,EAAAA,GAAG;;;UAIH;;IAEJoF;gBACYvV,EAAAA,SAAM;;;IAGlBwV;oBACgBxV,EAAAA,SAAM;;EAIpB+V,GAAepW,EAAAA,QAAO+V,GAI1B;WACSvE,cAAY,CACnB,eAAgBQ,EAAAA,UAAU,CAAEqE,SAAU,CAAC,UAAW,YAAa,UAAW,cAC1E,oBAAqBrE,EAASA,UAAC,CAAEqE,SAAU,OAAQJ,OAAQ,YAC3D,0BAA2BjE,EAASA,UAAC,CAAEqE,SAAU,OAAQJ,OAAQ,UACjE,0BAA2BjE,EAASA,UAAC,CAAEqE,SAAU,OAAQJ,OAAQ;;YAGzDzE,cAAY,CACpB,gBAAiBQ,EAASA,UAAC,CAAEiE,OAAQ,YACrC,sBAAuBjE,EAASA,UAAC,CAAEiE,OAAQ,UAC3C,sBAAuBjE,EAASA,UAAC,CAAEiE,OAAQ;;WAGpCzE,cAAY,CACnB,uBAAwBQ,EAASA,UAAC,CAAEqE,SAAU,YAC9C,yBAA0BrE,EAASA,UAAC,CAAEqE,SAAU,YAAaC,QAAS,UACtE,8BAA+BtE,EAAAA,UAAU,CACvCqE,SAAU,YACVC,QAAS,SAEX,wBAAyBtE,EAASA,UAAC,CAAEqE,SAAU,aAC/C,uBAAwBrE,EAASA,UAAC,CAAEqE,SAAU,YAC9C,oBAAqBrE,EAASA,UAAC,CAAEqE,SAAU;;gBAG/B7E,cAAY,CACxB,4BAA6BQ,EAASA,UAAC,CAAEqE,SAAU,YACnD,8BAA+BrE,EAAAA,UAAU,CACvCqE,SAAU,YACVC,QAAS,UAEX,mCAAoCtE,EAAAA,UAAU,CAC5CqE,SAAU,YACVC,QAAS,SAEX,6BAA8BtE,EAAAA,UAAU,CACtCqE,SAAU,aAEZ,4BAA6BrE,EAASA,UAAC,CAAEqE,SAAU,YACnD,yBAA0BrE,EAASA,UAAC,CAAEqE,SAAU;;kBAGlC7E,cAAY,CAC1B,8BAA+BQ,EAASA,UAAC,CAAEqE,SAAU,YACrD,gCAAiCrE,EAASA,UAAC,CAAEqE,SAAU,YAAaC,QAAS,UAC7E,qCAAsCtE,EAASA,UAAC,CAAEqE,SAAU,YAAaC,QAAS,SAClF,+BAAgCtE,EAASA,UAAC,CAAEqE,SAAU,aACtD,8BAA+BrE,EAASA,UAAC,CAAEqE,SAAU,YACrD,2BAA4BrE,EAASA,UAAC,CAAEqE,SAAU;mBAEnC7E,cAAY,CAC3B,uBAAwBQ,EAASA,UAAC,CAAEqE,SAAU,CAAC,UAAW,YAAa,aACvE,4BAA6BrE,EAASA,UAAC,CAAEqE,SAAU;;IAGnDE,EAAS;kBACK/E,cAAY,CACxB,mCAAoCQ,EAASA,UAAC,CAAEqE,SAAU,YAC1D,qCAAsCrE,EAAAA,UAAU,CAC9CqE,SAAU,YACVC,QAAS,UAEX,0CAA2CtE,EAAAA,UAAU,CACnDqE,SAAU,YACVC,QAAS,SAEX,oCAAqCtE,EAAAA,UAAU,CAC7CqE,SAAU,aAEZ,mCAAoCrE,EAASA,UAAC,CAAEqE,SAAU,YAC1D,gCAAiCrE,EAASA,UAAC,CAAEqE,SAAU;oBAEzC7E,cAAY,CAC1B,qCAAsCQ,EAASA,UAAC,CAAEqE,SAAU,YAC5D,uCAAwCrE,EAAAA,UAAU,CAChDqE,SAAU,YACVC,QAAS,UAEX,4CAA6CtE,EAAAA,UAAU,CACrDqE,SAAU,YACVC,QAAS,SAEX,sCAAuCtE,EAASA,UAAC,CAAEqE,SAAU,aAC7D,qCAAsCrE,EAASA,UAAC,CAAEqE,SAAU,YAC5D,kCAAmCrE,EAASA,UAAC,CAAEqE,SAAU;aAElD7E,cAAY,CACnB,8BAA+BQ,EAASA,UAAC,CAAEqE,SAAU,YACrD,gCAAiCrE,EAAAA,UAAU,CACzCqE,SAAU,YACVC,QAAS,UAEX,qCAAsCtE,EAAAA,UAAU,CAC9CqE,SAAU,YACVC,QAAS,SAEX,+BAAgCtE,EAASA,UAAC,CAAEqE,SAAU,aACtD,8BAA+BrE,EAASA,UAAC,CAAEqE,SAAU,YACrD,2BAA4BrE,EAASA,UAAC,CAAEqE,SAAU;;;IAIpDH,EAAW;kBACG1E,cAAY,CACxB,sCAAuCQ,EAASA,UAAC,CAAEqE,SAAU,YAC7D,wCAAyCrE,EAAAA,UAAU,CACjDqE,SAAU,YACVC,QAAS,UAEX,6CAA8CtE,EAAAA,UAAU,CACtDqE,SAAU,YACVC,QAAS,SAEX,uCAAwCtE,EAASA,UAAC,CAAEqE,SAAU,aAC9D,sCAAuCrE,EAASA,UAAC,CAAEqE,SAAU,YAC7D,mCAAoCrE,EAASA,UAAC,CAAEqE,SAAU;oBAE5C7E,cAAY,CAC1B,wCAAyCQ,EAASA,UAAC,CAAEqE,SAAU,YAC/D,0CAA2CrE,EAAAA,UAAU,CACnDqE,SAAU,YACVC,QAAS,UAEX,+CAAgDtE,EAAAA,UAAU,CACxDqE,SAAU,YACVC,QAAS,SAEX,yCAA0CtE,EAASA,UAAC,CAAEqE,SAAU,aAChE,wCAAyCrE,EAASA,UAAC,CAAEqE,SAAU,YAC/D,qCAAsCrE,EAASA,UAAC,CAAEqE,SAAU;aAErD7E,cAAY,CACnB,iCAAkCQ,EAASA,UAAC,CAAEqE,SAAU,YACxD,mCAAoCrE,EAAAA,UAAU,CAC5CqE,SAAU,YACVC,QAAS,UAEX,wCAAyCtE,EAAAA,UAAU,CACjDqE,SAAU,YACVC,QAAS,SAEX,kCAAmCtE,EAASA,UAAC,CAAEqE,SAAU,aACzD,iCAAkCrE,EAASA,UAAC,CAAEqE,SAAU,YACxD,8BAA+BrE,EAASA,UAAC,CAAEqE,SAAU;;;IAIvDG,EAAS;kBACKhF,cAAY,CACxB,mCAAoCQ,EAASA,UAAC,CAAEqE,SAAU,YAC1D,qCAAsCrE,EAAAA,UAAU,CAC9CqE,SAAU,YACVC,QAAS,UAEX,0CAA2CtE,EAAAA,UAAU,CACnDqE,SAAU,YACVC,QAAS,SAEX,oCAAqCtE,EAASA,UAAC,CAAEqE,SAAU,aAC3D,mCAAoCrE,EAASA,UAAC,CAAEqE,SAAU,YAC1D,gCAAiCrE,EAASA,UAAC,CAAEqE,SAAU;oBAEzC7E,cAAY,CAC1B,qCAAsCQ,EAASA,UAAC,CAAEqE,SAAU,YAC5D,uCAAwCrE,EAAAA,UAAU,CAChDqE,SAAU,YACVC,QAAS,UAEX,4CAA6CtE,EAAAA,UAAU,CACrDqE,SAAU,YACVC,QAAS,SAEX,sCAAuCtE,EAASA,UAAC,CAAEqE,SAAU,aAC7D,qCAAsCrE,EAASA,UAAC,CAAEqE,SAAU,YAC5D,kCAAmCrE,EAASA,UAAC,CAAEqE,SAAU;aAElD7E,cAAY,CACnB,8BAA+BQ,EAASA,UAAC,CAAEqE,SAAU,YACrD,gCAAiCrE,EAAAA,UAAU,CACzCqE,SAAU,YACVC,QAAS,UAEX,qCAAsCtE,EAASA,UAAC,CAAEqE,SAAU,YAAaC,QAAS,SAClF,+BAAgCtE,EAASA,UAAC,CAAEqE,SAAU,aACtD,8BAA+BrE,EAASA,UAAC,CAAEqE,SAAU,YACrD,2BAA4BrE,EAASA,UAAC,CAAEqE,SAAU;;kBAGtC7E,cAAY,CACxB,4BAA6BQ,EAASA,UAAC,CAAEqE,SAAU,YACnD,8BAA+BrE,EAASA,UAAC,CAAEqE,SAAU,cACrD,4BAA6BrE,EAASA,UAAC,CAAEqE,SAAU,YACnD,6BAA8BrE,EAASA,UAAC,CAAEqE,SAAU,aACpD,yBAA0BrE,EAASA,UAAC,CAAEqE,SAAU;;eAGvC7E,cAAY,CACrB,yBAA0BQ,EAASA,UAAC,CAAEqE,SAAU,YAChD,2BAA4BrE,EAASA,UAAC,CAAEqE,SAAU,cAClD,0BAA2BrE,EAASA,UAAC,CAAEqE,SAAU,aACjD,yBAA0BrE,EAASA,UAAC,CAAEqE,SAAU,YAChD,sBAAuBrE,EAASA,UAAC,CAAEqE,SAAU;;sBAG7BhW,EAAAA,SAAM;;;IAGxBoW,EAAW;kBACGjF,cAAY,CACxB,oCAAqCQ,EAASA,UAAC,CAAEqE,SAAU,YAC3D,sCAAuCrE,EAAAA,UAAU,CAC/CqE,SAAU,CAAC,YAAa,YACxBC,QAAS,UAEX,2CAA4CtE,EAAAA,UAAU,CACpDqE,SAAU,CAAC,YAAa,YACxBC,QAAS,SAEX,oCAAqCtE,EAASA,UAAC,CAAEqE,SAAU,YAC3D,iCAAkCrE,EAASA,UAAC,CAAEqE,SAAU;oBAE1C7E,cAAY,CAC1B,sCAAuCQ,EAASA,UAAC,CAAEqE,SAAU,YAC7D,wCAAyCrE,EAAAA,UAAU,CACjDqE,SAAU,YACVC,QAAS,UAEX,6CAA8CtE,EAAAA,UAAU,CACtDqE,SAAU,YACVC,QAAS,SAEX,sCAAuCtE,EAASA,UAAC,CAAEqE,SAAU,YAC7D,mCAAoCrE,EAASA,UAAC,CAAEqE,SAAU,SAC1D,oBAAqBrE,EAASA,UAAC,CAAEqE,SAAU;aAEpC7E,cAAY,CACnB,+BAAgCQ,EAASA,UAAC,CAAEqE,SAAU,YACtD,iCAAkCrE,EAAAA,UAAU,CAC1CqE,SAAU,CAAC,YAAa,YACxBC,QAAS,UAEX,sCAAuCtE,EAASA,UAAC,CAAEqE,SAAU,YAAaC,QAAS,SACnF,+BAAgCtE,EAASA,UAAC,CAAEqE,SAAU,YACtD,4BAA6BrE,EAASA,UAAC,CAAEqE,SAAU;;;IAIrDP;gBACYzV,EAAAA,SAAM;;;IAGlBuV;oBACgBvV,EAAAA,SAAM;;;IAGtBwV;gBACYxV,EAAAA,SAAM;;EAIhBqW,GAAiB1W,EAAAA,QAAOoW,GAAa;IACvCN;;;;IAIAD;;;EAKEc,GAAa3W,EAAAA,QAAOC,IAAI;;EAQxB2W,GAAoB5W,EAAM,QAACuV,IAAasB,MAAM,CAClD,kBAAcvR,EACdmQ,KAAM,gBACN;;;;;;;;;EAWIqB,GAAqBtB,QAAAuB,cACzBA,EAAgB,aAAWvB,EACxBwB,EAAc9V,EAAAA,OAAAsU,EAFQ,mBAIzB,MAIMyB,EAJsB,IAAIrO,IAAI,CAAC,YAAa,UAAW,OAAQ,aAIJyD,IAAI0K,GACjE,OACA,QAEJ,OAAOxW,UAAAC,cAACoW,GAAsBrV,OAAAC,OAAA,GAAAwV,GAAgB3F,QAAS4F,IAAsB,EAG/E,SAASC,IAAsBhC,QAC7BA,EAAOtC,SACPA,EAAQvB,QACRA,IAEA,OAAI6D,EAEA3U,UAAAC,cAAAD,EAAA,QAAA4W,SAAA,KACE5W,EAAAA,QAAAC,cAACsW,GAAiB,CAACC,cAAe1F,IAClC9Q,EAAAA,QAAAC,cAACmW,GAAY,KAAA/D,IAKZrS,EAAAA,QAAAC,cAAAD,EAAAA,QAAA4W,SAAA,KAAGvE,EACZ,CAEa,MAAAwE,GAAaC,EAAAA,YAA2C,SACnE7B,EAUA8B,OAVAC,MACEA,EAAQ,UAAS3E,SACjBA,EAAQ4E,QACRA,EAAOC,SACPA,EAAQvC,QACRA,EAAOwC,SACPA,EAAQrG,QACRA,GAAOmE,EACJmC,EAAMzW,EAAAA,OAAAsU,EARX,0EAYA,OACEjV,EAAC,QAAAC,cAAAuV,GACCxU,OAAAC,OAAA,CAAA8V,IAAKA,GACDK,EACW,CAAA,gBAAAzC,EAAU,YAAS5P,EAClCoS,SAAUA,EAAQzB,OACVsB,EAAKpB,SACHjB,IAEV3U,EAAC,QAAAC,cAAA0W,IAAsBhC,QAASA,EAAS7D,QAASA,GAC/CmG,GAAWjX,EAAC,QAAAC,cAAAoV,kBAAoB,QAAQ4B,GACzCjX,EAAA,QAAAC,cAACsV,GAAS,CAAAZ,QAASA,GAAUtC,GAC5B6E,GAAYlX,EAAAA,QAACC,cAAAqV,GAAqB,CAAA,cAAA,QAAQ4B,IAInD,IAEMG,GAASP,EAAAA,YAA2C,SACxD7B,EAYA8B,GAZA,IAAApR,KACEA,EAAO,SAAQ2R,OACfA,EAAS,QAAON,MAChBA,EAAQ,UAASlG,QACjBA,EAAU,YAAWuB,SACrBA,EAAQ4E,QACRA,EAAOC,SACPA,EAAQC,SACRA,EAAQxC,QACRA,GAEYM,EADTmC,EAAMzW,EAAAA,OAAAsU,EAVX,0FAcA,OACEjV,EAAA,QAAAC,cAAC4V,GAAY7U,OAAAC,OAAA,CACX8V,IAAKA,GACDK,GACJzR,KAAMA,EAAI,gBACKgP,EAAU,YAAS5P,EAClCoS,SAAUA,EAAQpB,QACTuB,EACD5B,OAAAsB,EACElB,SAAAhF,WACA6D,IAEV3U,EAAC,QAAAC,cAAA0W,IAAsBhC,QAASA,EAAS7D,QAASA,GAC/CmG,GAAWjX,EAAAA,QAAAC,cAACoV,GAAO,KAAE4B,GACtBjX,EAAAA,QAACC,cAAAsV,GAAU,KAAAlD,GACV6E,GAAYlX,wBAACsV,GAAQ,KAAE4B,IAIhC,IAMa,MAAAK,GAAiBT,EAAAA,YAA2C,SACvE7B,EAWA8B,GAXA,IAAAO,OACEA,EAAS,QAAON,MAChBA,EAAQ,UAASrR,KACjBA,EAAO,SAAQmL,QACfA,EAAU,YAAWuB,SACrBA,EAAQ6E,SACRA,EAAQC,SACRA,EAAQxC,QACRA,GAAOM,EACJmC,EATLzW,EAAAA,OAAAsU,EAAA,CAAA,SAAA,QAAA,OAAA,UAAA,WAAA,WAAA,WAAA,YAeA,OAFAmC,EAASnI,GAAkBmI,EAAQ,CAAC,YAGlCpX,EAAA,QAAAC,cAACkW,GAAcnV,OAAAC,OAAA,CACb8V,IAAKA,GACDK,GACJzR,KAAMA,EAAI,gBACKgP,EAAU,YAAS5P,EAClCoS,SAAUA,EAAQvB,SACRjB,EACDoB,QAAAuB,EACD5B,OAAAsB,WACElG,IAEV9Q,EAAC,QAAAC,cAAA0W,IAAsBhC,QAASA,EAAS7D,QAASA,GAChD9Q,EAAAA,QAACC,cAAAsV,GAAU,KAAAlD,GACV6E,GAAYlX,wBAACsV,GAAQ,KAAE4B,IAIhC,IAIaM,GAAaV,EAAAA,YAA2C,SACnE7B,EACA8B,GADA,IAAAO,OAAEA,EAAS,QAAON,MAAEA,EAAQ,UAASrR,KAAEA,EAAO,SAAQ0M,SAAEA,GAAQ4C,EAAKmC,EAAMzW,EAAAA,OAAAsU,EAA3E,sCAKA,OAFAmC,EAASnI,GAAkBmI,EAAQ,CAAC,UAAW,WAAY,YAGzDpX,EAAC,QAAAC,cAAA4V,kBAAakB,IAAKA,GAASK,EAAQ,CAAAzR,KAAMA,EAAIoQ,QAAWuB,EAAgB5B,OAAAsB,WAAgB,SACvFhX,EAAAA,QAAAC,cAACsV,GAAU,KAAAlD,GAGjB,IE9iBMgF,GAAS5X,EAAAA,QAAOoX,GAAW;;mBAEd/W,EAAAA,SAAM;;WAEdA,EAAAA,SAAM;;gBAEDA,EAAAA,SAAM;;aAETA,EAAAA,SAAM;;eAEJA,EAAAA,SAAM;;;;;;WAMVmR,cAAY,CACnB,gBAAiBQ,EAASA,UAAC,CAAEuF,MAAO,YACpC,sBAAuBvF,EAASA,UAAC,CAAEuF,MAAO,UAC1C,sBAAuBvF,EAASA,UAAC,CAAEuF,MAAO;;IAG1Cf,EAAS;kBACKnW,EAAAA,SAAM;;eAETA,EAAAA,SAAM;sBACCA,EAAAA,SAAM;;EAK5B,SAAS2X,GAAYxC,GAAA,IAAA+B,MAAEA,EAAQ,QAAO3W,KAAEA,EAAO,IAAE4U,EAAKmC,EAAjCzW,EAAAA,OAAAsU,EAAA,CAAA,QAAA,SACnB,OACEjV,wBAACqX,GAAMrW,OAAAC,OAAA,CAAC+V,MAAOA,GAAWI,GACxBpX,UAAAC,cAACiC,GAAI,CAAC9B,KAAK,QAAQC,KAAMA,IAG/B,CC3CA,SAASqX,GAAWzC,OAAA+B,MAAEA,EAAQ,SAAO/B,EAAKmC,EAAMzW,EAAAA,OAAAsU,EAA5B,WAClB,OACEjV,wBAACwX,GAAUxW,OAAAC,OAAA,CAAC+V,MAAOA,GAAWI,GAC5BpX,UAAAC,cAACiC,GAAI,CAAC9B,KAAK,OAAOC,KAAM,KAG9B,CCfA,SAASsX,GAAMC,GACd,IAAIC,EAAGC,EAAGC,EAAI,GAEd,GAAmB,iBAARH,GAAmC,iBAARA,EACrCG,GAAOH,OACD,GAAmB,iBAARA,EACjB,GAAI3R,MAAMV,QAAQqS,GACjB,IAAKC,EAAE,EAAGA,EAAID,EAAInW,OAAQoW,IACrBD,EAAIC,KACHC,EAAIH,GAAMC,EAAIC,OACjBE,IAAQA,GAAO,KACfA,GAAOD,QAKV,IAAKD,KAAKD,EACLA,EAAIC,KACPE,IAAQA,GAAO,KACfA,GAAOF,GAMX,OAAOE,CACR,CAEe,SAAAC,KAEd,IADA,IAASC,EAAKC,EAAV3W,EAAE,EAAWwW,EAAI,GACdxW,EAAIC,UAAUC,SAChBwW,EAAMzW,UAAUD,QACf2W,EAAIP,GAAMM,MACbF,IAAQA,GAAO,KACfA,GAAOG,GAIV,OAAOH,CACR,CCbA,MAAMI,GAAkB1Y,EAAAA,QAAOC,IAAI;;;;;;;EAS7ByV,GAAa1V,EAAAA,QAAOC,IAAI;;;;;EAOxB2V,GAAU5V,EAAAA,QAAO0V,GAAW;;EAI5BG,GAAW7V,EAAAA,QAAO0V,GAAW;;EAI7BI,GAAW9V,EAAAA,QAAOC,IAAI;;EAItB0Y,GAAc3Y,EAAAA,QAAO4Y,KAA0B;;;IAGjD1Y;IACA2Y,GAAK,CACLvI,OAAQ;;;;;;;;;mBAUOjQ,EAAAA,SAAM;;eAEVmR,cAAY,CACvB,qBAAsBQ,EAASA,UAAC,CAAEuF,MAAO,YACzC,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO;;WAGxC/F,cAAY,CACnB,iBAAkBQ,EAASA,UAAC,CAAE6F,OAAQ,UACtC,sBAAuB7F,EAASA,UAAC,CAAE6F,OAAQ;;IAG3C/B;gBACYzV,EAAAA,SAAM;;;IAGlBqY;gBACYrY,EAAAA,SAAM;;;IAGlBuV;gBACYvV,EAAAA,SAAM;;;IAGlBwV;oBACgBxV,EAAAA,SAAM;;;IAGtB6V;;IAEAM,EAAS;eACEnW,EAAAA,SAAM;sBACCA,EAAAA,SAAM;;EAI5B,SAASyY,GAAiBtD,GAAA,IAAAuD,SACxBA,EAAQnG,SACRA,EAAQ4E,QACRA,EAAOC,SACPA,EAAQ1W,UACRA,EAAS2W,SACTA,GAAW,GAAKlC,EACbmC,EAAMzW,SAAAsU,EAPe,qEASxB,OACEjV,wBAACoY,GAAWpX,OAAAC,OAAA,CACVT,UAAWwX,GAAKxX,EAAW,CACzB,cAAe2W,KAEbC,GAEHoB,GAAYxY,EAAAA,QAAAC,cAACkY,GAAe,KAAEK,GAC9BvB,GAAWjX,EAAC,QAAAC,cAAAoV,kBAAoB,qBAAqB4B,GACtDjX,EAAAA,QAACC,cAAAsV,GAAU,KAAAlD,GACV6E,GAAYlX,EAAAA,QAACC,cAAAqV,GAAqB,CAAA,cAAA,sBAAsB4B,GAG/D,CC3GA,MAAMuB,GAAQhZ,EAAAA,QAAOyC,GAA0B;;;;;;;;;EAWzCwW,GAAWjZ,EAAAA,QAAOkZ,KAA0B;IAC9ChZ;;;;;;;;;;;;;;YAcQG,EAAAA,SAAM;WACPA,EAAAA,SAAM;;mBAEEA,EAAAA,SAAM;kBACPA,EAAAA,SAAM;;;kBAGNmR,cAAY,CAC1B,iCAAkCQ,EAASA,UAAC,CAAE6F,OAAQ,UACtD,sCAAuC7F,EAASA,UAAC,CAAE6F,OAAQ;;gBAG/CrG,cAAY,CACxB,+BAAgCQ,EAASA,UAAC,CAAE6F,OAAQ,UACpD,oCAAqC7F,EAASA,UAAC,CAAE6F,OAAQ;;;wBAIrCxX,EAAAA,SAAM;oBACVA,EAAAA,SAAM;;;eAGX2Y;aACF3Y,EAAAA,SAAM;;;qBAGE2Y;;;;IAIjB9C,EAAW;kBACG1E,cAAY,CACxB,yCAA0CQ,EAASA,UAAC,CAAE6F,OAAQ,UAC9D,8CAA+C7F,EAASA,UAAC,CAAE6F,OAAQ;oBAErDrG,cAAY,CAC1B,2CAA4CQ,EAASA,UAAC,CAAE6F,OAAQ,UAChE,gDAAiD7F,EAASA,UAAC,CAAE6F,OAAQ;;0BAGjDxX,EAAAA,SAAM;sBACVA,EAAAA,SAAM;;;;IAIxBkW,EAAS;kBACK/E,cAAY,CACxB,sCAAuCQ,EAASA,UAAC,CAAE6F,OAAQ,UAC3D,2CAA4C7F,EAASA,UAAC,CAAE6F,OAAQ;oBAElDrG,cAAY,CAC1B,wCAAyCQ,EAASA,UAAC,CAAE6F,OAAQ,UAC7D,6CAA8C7F,EAASA,UAAC,CAAE6F,OAAQ;;;0BAI9CxX,EAAAA,SAAM;sBACVA,EAAAA,SAAM;;;iBAGX2Y;eACF3Y,EAAAA,SAAM;;;;IAIjBmW,EAAS;kBACKhF,cAAY,CACxB,sCAAuCQ,EAASA,UAAC,CAAE6F,OAAQ,UAC3D,2CAA4C7F,EAASA,UAAC,CAAE6F,OAAQ;oBAElDrG,cAAY,CAC1B,wCAAyCQ,EAASA,UAAC,CAAE6F,OAAQ,UAC7D,6CAA8C7F,EAASA,UAAC,CAAE6F,OAAQ;;;0BAI9CxX,EAAAA,SAAM;sBACVA,EAAAA,SAAM;;iBAEX2Y;eACF3Y,EAAAA,SAAM;;;kBAGHA,EAAAA,SAAM;;EAIxB,SAAS8Y,GAAS3D,OAAAzU,UAChBA,EAAS2W,SACTA,EAAQ9E,SACRA,EAAQ4E,QACRA,EAAOC,SACPA,EAAQI,OACRA,EAAS,QAAON,MAChBA,EAAQ,aACLI,EARazW,SAAAsU,EAAA,CAAA,YAAA,WAAA,WAAA,UAAA,WAAA,SAAA,UAUhB,OACEjV,EAAA,QAAAC,cAACsY,GAAgB,CACfjB,OAAQA,EACRN,MAAOA,EACPwB,SACExY,EAAAA,sBAAC4W,EAAQA,SAAA,KACP5W,EAAA,QAAAC,cAACyY,GACa1X,OAAAC,OAAA,CAAA,cAAA,YACRmW,GACJE,OAAQA,EACRH,SAAUA,EACVxR,KAAK,cAEP3F,EAAAA,QAAAC,cAACwY,GAAM,CAAArY,KAAK,QAAQC,KAAM,GAAIG,UAAU,WAG5CyW,QAASA,EACTC,SAAUA,EACV1W,UAAWwX,GAAK,CAAE,cAAeb,GAAY3W,GACjC,cAAA,YAEX6R,EAGP,CCnJA,MAAMoG,GAAQhZ,EAAAA,QAAOyC,GAA0B;;;;;;;;;;;;;;EAgBzCwW,GAAWjZ,EAAAA,QAAOkZ,KAA0B;IAC9ChZ;;;;;;;;;;;;;;YAcQG,EAAAA,SAAM;WACPA,EAAAA,SAAM;;mBAEEA,EAAAA,SAAM;kBACPA,EAAAA,SAAM;;;gBAGRmR,cAAY,CACxB,4BAA6BQ,EAASA,UAAC,CAAE6F,OAAQ,UACjD,iCAAkC7F,EAASA,UAAC,CAAE6F,OAAQ;;;oBAItCrG,cAAY,CAC1B,8BAA+BQ,EAASA,UAAC,CAAE6F,OAAQ,UACnD,mCAAoC7F,EAASA,UAAC,CAAE6F,OAAQ;;QAGtDmB;;;;;;oBAMY3Y,EAAAA,SAAM;;QAElB2Y;eACO3Y,EAAAA,SAAM;;;;IAIjB6V,EAAW;kBACG1E,cAAY,CACxB,sCAAuCQ,EAASA,UAAC,CAAE6F,OAAQ,UAC3D,2CAA4C7F,EAASA,UAAC,CAAE6F,OAAQ;oBAElDrG,cAAY,CAC1B,wCAAyCQ,EAASA,UAAC,CAAE6F,OAAQ,UAC7D,6CAA8C7F,EAASA,UAAC,CAAE6F,OAAQ;;;IAIpEtB,EAAS;kBACK/E,cAAY,CACxB,mCAAoCQ,EAASA,UAAC,CAAE6F,OAAQ,UACxD,wCAAyC7F,EAASA,UAAC,CAAE6F,OAAQ;oBAE/CrG,cAAY,CAC1B,qCAAsCQ,EAASA,UAAC,CAAE6F,OAAQ,UAC1D,0CAA2C7F,EAASA,UAAC,CAAE6F,OAAQ;;;IAIjErB,EAAS;kBACKhF,cAAY,CACxB,mCAAoCQ,EAASA,UAAC,CAAE6F,OAAQ,UACxD,wCAAyC7F,EAASA,UAAC,CAAE6F,OAAQ;oBAE/CrG,cAAY,CAC1B,qCAAsCQ,EAASA,UAAC,CAAE6F,OAAQ,UAC1D,0CAA2C7F,EAASA,UAAC,CAAE6F,OAAQ;;kBAGnDxX,EAAAA,SAAM;;EAIxB,SAAS+Y,GAAM5D,GAAA,IAAAzU,UACbA,EAAS2W,SACTA,EAAQ9E,SACRA,EAAQ4E,QACRA,EAAOC,SACPA,EAAQI,OACRA,EAAS,SAAOrC,EACbmC,EAAMzW,SAAAsU,EAPI,mEASb,OACEjV,UAACC,cAAAsY,GACC,CAAAjB,OAAQA,EACRkB,SACExY,EAAA,QAAAC,cAAC2W,EAAAA,SAAQ,KACP5W,EAAA,QAAAC,cAACyY,GACa1X,OAAAC,OAAA,CAAA,cAAA,YACRmW,GACJE,OAAQA,EACRH,SAAUA,EACVxR,KAAK,WAEP3F,EAAAA,QAAAC,cAACwY,GAAM,CAAArY,KAAK,SAASI,UAAU,WAGnCyW,QAASA,EACTC,SAAUA,EACV1W,UAAWwX,GAAK,CAAE,cAAeb,GAAY3W,GACjC,cAAA,SAEX6R,EAGP,CCxIA,SAASyG,GAAkBlZ,EAA6B,IAItD,MAAMmZ,QAAEA,EAAOC,OAAEA,GAAWpZ,GACrBqZ,EAASC,GAAcC,EAAQA,UAAC,GACjCC,EAAeC,SAAU,MAE/B,SAASC,IACP,OAAOF,EAAaG,OACrB,CAED,MAAMC,EAAcC,eAClB,WACEV,SAAAA,IACAG,GAAW,EACb,GACA,CAACH,IAGGW,EAAaD,eACjB,WACET,SAAAA,IACAE,GAAW,EACb,GACA,CAACF,IAgBH,OAbAW,EAASA,WACP,mBAIE,OAHgB,QAAhB1E,EAAAqE,WAAgB,IAAArE,GAAAA,EAAA2E,iBAAiB,UAAWJ,GAC5B,QAAhBK,EAAAP,WAAgB,IAAAO,GAAAA,EAAAD,iBAAiB,WAAYF,GAEtC,mBACW,QAAhBzE,EAAAqE,WAAgB,IAAArE,GAAAA,EAAA6E,oBAAoB,UAAWN,GAC/B,QAAhBK,EAAAP,WAAgB,IAAAO,GAAAA,EAAAC,oBAAoB,WAAYJ,EAClD,CACD,GACD,CAACN,EAAcM,EAAYF,IAGtB,CACLzC,IAAKqC,EACLH,UAEJ,CC3DA,IAAKc,IAAL,SAAKA,GACHA,EAAA,QAAA,UACAA,EAAA,OAAA,SACAA,EAAA,KAAA,OACAA,EAAA,QAAA,SACD,CALD,CAAKA,KAAAA,GAKJ,CAAA,IAED,IAAAC,GAAeD,GCuBf,MAAME,GAAexa,EAAAA,QAAOmS,GAAwB;IAChDjS;;;;;YAKQsR,cAAY,CACpB,oBAAqBQ,EAASA,UAAC,CAAEuF,MAAO,YACxC,0BAA2BvF,EAASA,UAAC,CAAEuF,MAAO,UAC9C,0BAA2BvF,EAASA,UAAC,CAAEuF,MAAO;;;IAI9CsB,GAAK,CACL/X,OAAQ;;eAGG0Q,cAAY,CACvB,uBAAwBQ,EAASA,UAAC,CAAEuF,MAAO,YAC3C,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO,UACjD,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO;;mBAGlClX,EAAAA,SAAM;;;;gBAITmR,cAAY,CACxB,wBAAyBQ,EAASA,UAAC,CAAE6F,OAAQ,UAC7C,6BAA8B7F,EAASA,UAAC,CAAE6F,OAAQ;;kBAGpCrG,cAAY,CAC1B,0BAA2BQ,EAASA,UAAC,CAAE6F,OAAQ,QAAS4C,OAAQH,GAAOI,UACvE,+BAAgC1I,EAASA,UAAC,CAAE6F,OAAQ,OAAQ4C,OAAQH,GAAOI,UAC3E,iCAAkC1I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOK,SAC7D,kCAAmC3I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOM;;WAGvDpJ,cAAY,CACnB,mBAAoBQ,EAASA,UAAC,CAAE6F,OAAQ,UACxC,wBAAyB7F,EAASA,UAAC,CAAE6F,OAAQ;;IAG7CtB,EAAS;kBACK/E,cAAY,CACxB,+BAAgCQ,EAASA,UAAC,CAAE6F,OAAQ,UACpD,oCAAqC7F,EAASA,UAAC,CAAE6F,OAAQ;;oBAG3CrG,cAAY,CAC1B,iCAAkCQ,EAASA,UAAC,CAAE6F,OAAQ,UACtD,sCAAuC7F,EAASA,UAAC,CAAE6F,OAAQ;;;IAI7DrB,EAAS;kBACKhF,cAAY,CACxB,+BAAgCQ,EAASA,UAAC,CAAE6F,OAAQ,UACpD,oCAAqC7F,EAASA,UAAC,CAAE6F,OAAQ;;oBAG3CrG,cAAY,CAC1B,iCAAkCQ,EAASA,UAAC,CAAE6F,OAAQ,UACtD,sCAAuC7F,EAASA,UAAC,CAAE6F,OAAQ;;kBAG/CrG,cAAY,CACxB,wBAAyBQ,EAASA,UAAC,CAAE6F,OAAQ,UAC7C,6BAA8B7F,EAASA,UAAC,CAAE6F,OAAQ;;eAGzCxX,EAAAA,SAAM;sBACCA,EAAAA,SAAM;;;IAGxB6V;EAGER,GAAa1V,EAAAA,QAAOC,IAAyB;IAC/CC;;;;;;;WAOOsR,cAAY,CACnB,0BAA2BQ,EAASA,UAAC,CAAE6F,OAAQ,QAAS4C,OAAQH,GAAOI,UACvE,+BAAgC1I,EAASA,UAAC,CAAE6F,OAAQ,OAAQ4C,OAAQH,GAAOI,UAC3E,iCAAkC1I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOK,SAC7D,kCAAmC3I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOM;EAIrDhF,GAAU5V,EAAAA,QAAO0V,GAAgC;;MAExDlE,cAAY,CACZ,uBAAwBQ,EAASA,UAAC,CAAEuF,MAAO,CAAC,UAAW,WACvD,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO;EAI1C1B,GAAW7V,EAAAA,QAAO0V,GAAgC;;MAEzDlE,cAAY,CACZ,uBAAwBQ,EAASA,UAAC,CAAEuF,MAAO,CAAC,UAAW,WACvD,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO;;EAKjDsD,GAAc7a,EAAAA,QAAOkZ,KAA0B;IACjDhZ;;IAEA2Y,GAAK,CACL/X,OAAQ;;;;aAKC0Q,cAAY,CACnB,uBAAwBQ,EAASA,UAAC,CAAEuF,MAAO,YAC3C,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO,UACjD,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO;;;;MAKjD/F,cAAY,CACZ,uBAAwBQ,EAASA,UAAC,CAAEuF,MAAO,CAAC,UAAW,WACvD,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO;;;;;;;;IASnDf;IACAN;;;;;;;;;;;;;;;;;EAmBE4E,GAAYzD,EAAAA,YAA6C,SAC7DlX,EACAmX,GAEA,MAAMI,SACJA,GAAW,EAAK+C,OAChBA,EAASH,GAAOI,QAAO7C,OACvBA,EAAS,QAAON,MAChBA,EAAQ,UAASxW,UACjBA,EAASyW,QACTA,EAAOC,SACPA,GAEEtX,EADCwX,EACDzW,EAAAA,OAAAf,EATE,CAAA,WAAA,SAAA,SAAA,QAAA,YAAA,UAAA,cAUEmX,IAAKqC,EAAYH,QAAEA,GAAYH,KAEvC,OACE9Y,EAAAA,sBAACia,GAAY,CACXzZ,UAAWwX,GAAKxX,EAAW,CACzB,cAAe2W,EACf,aAAc8B,IAEhB3B,OAAQA,EACR4C,OAAQA,EACRlD,MAAOA,EACPD,IAAKqC,GAEJnC,GACCjX,EAAAA,QAAAC,cAACoV,GAAQ,CAAA6E,OAAQA,EAAQ5C,OAAQA,EAAQN,MAAOA,GAC7CC,GAGLjX,EAAAA,QAAAC,cAACqa,GACCtZ,OAAAC,OAAA,CAAA8V,IAAKA,EACLpR,KAAK,OAAM,cACC,SACRyR,EACJ,CAAAJ,MAAOA,EACPkD,OAAQA,EACR5C,OAAQA,EACRL,QAASA,EACTC,SAAUA,EACVC,SAAUA,KAEXD,GACClX,EAAAA,QAACC,cAAAqV,IAAS4E,OAAQA,EAAQ5C,OAAQA,EAAQN,MAAOA,GAC9CE,GAKX,ICjNA,MAAMsD,GAAkB/a,EAAAA,QAAOmS,GAAwB;IACnDjS;;;;;gBAKYG,EAAAA,SAAM;;IAElBwY,GAAK,CACL/X,OAAQ;;eAGG0Q,cAAY,CACvB,qBAAsBQ,EAASA,UAAC,CAAEuF,MAAO,YACzC,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO,UAC/C,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO;;mBAGhClX,EAAAA,SAAM;;;;gBAITmR,cAAY,CACxB,sBAAuBQ,EAASA,UAAC,CAAE6F,OAAQ,UAC3C,2BAA4B7F,EAASA,UAAC,CAAE6F,OAAQ;;kBAGlCrG,cAAY,CAC1B,wBAAyBQ,EAASA,UAAC,CAAE6F,OAAQ,QAAS4C,OAAQH,GAAOI,UACrE,6BAA8B1I,EAASA,UAAC,CAAE6F,OAAQ,OAAQ4C,OAAQH,GAAOI,UACzE,+BAAgC1I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOK,SAC3D,gCAAiC3I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOM;;WAGrDpJ,cAAY,CACnB,iBAAkBQ,EAASA,UAAC,CAAE6F,OAAQ,UACtC,sBAAuB7F,EAASA,UAAC,CAAE6F,OAAQ;;IAG3CtB,EAAS;kBACK/E,cAAY,CACxB,6BAA8BQ,EAASA,UAAC,CAAE6F,OAAQ,UAClD,kCAAmC7F,EAASA,UAAC,CAAE6F,OAAQ;;oBAGzCrG,cAAY,CAC1B,+BAAgCQ,EAASA,UAAC,CAAE6F,OAAQ,UACpD,oCAAqC7F,EAASA,UAAC,CAAE6F,OAAQ;;;IAI3DrB,EAAS;kBACKhF,cAAY,CACxB,6BAA8BQ,EAASA,UAAC,CAAE6F,OAAQ,UAClD,kCAAmC7F,EAASA,UAAC,CAAE6F,OAAQ;;oBAGzCrG,cAAY,CAC1B,+BAAgCQ,EAASA,UAAC,CAAE6F,OAAQ,UACpD,oCAAqC7F,EAASA,UAAC,CAAE6F,OAAQ;;kBAG7CrG,cAAY,CACxB,sBAAuBQ,EAASA,UAAC,CAAE6F,OAAQ,UAC3C,2BAA4B7F,EAASA,UAAC,CAAE6F,OAAQ;;eAGvCxX,EAAAA,SAAM;sBACCA,EAAAA,SAAM;;;IAGxB6V;EAGER,GAAa1V,EAAAA,QAAOC,IAAyB;IAC/CC;;;;;;;WAOOsR,cAAY,CACnB,wBAAyBQ,EAASA,UAAC,CAAE6F,OAAQ,QAAS4C,OAAQH,GAAOI,UACrE,6BAA8B1I,EAASA,UAAC,CAAE6F,OAAQ,OAAQ4C,OAAQH,GAAOI,UACzE,+BAAgC1I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOK,SAC3D,gCAAiC3I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOM;EAI1DhF,GAAU5V,EAAAA,QAAO0V,GAAgC;;;;MAIjDlE,cAAY,CACZ,uBAAwBQ,EAASA,UAAC,CAAEuF,MAAO,CAAC,UAAW,WACvD,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO;;aAG1ClX,EAAAA,SAAM;EAGbwV,GAAW7V,EAAAA,QAAO0V,GAAgC;;;;MAIlDlE,cAAY,CACZ,uBAAwBQ,EAASA,UAAC,CAAEuF,MAAO,CAAC,UAAW,WACvD,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO;;;aAI1ClX,EAAAA,SAAM;EAGb2a,GAAiBhb,EAAAA,QAAOib,QAA6B;IACvD/a;;IAEA2Y,GAAK,CACL/X,OAAQ;;;;aAKC0Q,cAAY,CACnB,qBAAsBQ,EAASA,UAAC,CAAEuF,MAAO,YACzC,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO,UAC/C,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO;;;;MAK/C/F,cAAY,CACZ,qBAAsBQ,EAASA,UAAC,CAAEuF,MAAO,CAAC,UAAW,WACrD,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO;;;;;;IAOjDf;IACAN;EAGEgF,GAAW7D,EAAAA,YAA+C,SAC9DlX,EACAmX,GAEA,MAAMI,SACJA,GAAW,EAAK+C,OAChBA,EAASH,GAAOI,QAAO7C,OACvBA,EAAS,QAAON,MAChBA,EAAQ,UAASxW,UACjBA,EAASyW,QACTA,EAAOC,SACPA,GAEEtX,EADCwX,EACDzW,EAAAA,OAAAf,EATE,CAAA,WAAA,SAAA,SAAA,QAAA,YAAA,UAAA,cAUEmX,IAAKqC,EAAYH,QAAEA,GAAYH,KAEvC,OACE9Y,EAAAA,sBAACwa,GAAe,CACdha,UAAWwX,GAAKxX,EAAW,CACzB,cAAe2W,EACf,aAAc8B,IAEhB3B,OAAQA,EACRN,MAAOA,EACPkD,OAAQA,EACRnD,IAAKqC,GAEJnC,GACCjX,EAAAA,QAAAC,cAACoV,GAAQ,CAAA6E,OAAQA,EAAQ5C,OAAQA,EAAQN,MAAOA,GAC7CC,GAGLjX,EAAAA,QAAAC,cAACwa,GAAczZ,OAAAC,OAAA,CACb8V,IAAKA,EACO,cAAA,YACRK,EACJ,CAAAJ,MAAOA,EACPkD,OAAQA,EACR5C,OAAQA,EACRL,QAASA,EACTC,SAAUA,EACVC,SAAUA,KAEXD,GACClX,EAAAA,QAACC,cAAAqV,IAAS4E,OAAQA,EAAQ5C,OAAQA,EAAQN,MAAOA,GAC9CE,GAKX,oBClOAlW,OAAO4Z,eAAeC,GAAS,aAAc,CAAEvV,OAAO,IACzBuV,GAAAA,2BAAG,EACHA,GAAAA,sBAAG,SAAUC,GACxC,OAAKA,GACS,MAAVA,EAAG,KACLA,EAAKA,EAAGC,MAAM,IAETC,KAAKC,MACV,KAAOH,EAAGnT,QAAQ,KAAM,OAAOA,QAAQ,KAAM,OAAS,MACtD,SAAUhG,EAAK2D,GACb,MAAe,KAAR3D,EAAa2D,EAAQ4V,mBAAmB5V,EAChD,KARa,IAUlB,YCbAtE,OAAO4Z,eAAeO,GAAS,aAAc,CAAE7V,OAAO,IACzB6V,GAAAA,2BAAG,EACHA,GAAAA,sBAAG,SAAUC,GACxC,IAAKA,GAAmC,IAA5Bpa,OAAOsG,KAAK8T,GAAK3Z,OAAc,OAAO,KAClD,IAAIqZ,EACF,IACA9Z,OAAOsG,KAAK8T,GACTC,QAAO,SAAU1Z,GAChB,OAAoB,OAAbyZ,EAAIzZ,SAA8BoD,IAAbqW,EAAIzZ,EACxC,IACO0Z,QAAO,SAAU1Z,GAChB,MACsB,iBAAbyZ,EAAIzZ,IACS,iBAAbyZ,EAAIzZ,IACS,kBAAbyZ,EAAIzZ,EAErB,IACOxB,KAAI,SAAUwB,GACb,OAAOA,EAAM,IAAMyZ,EAAIzZ,EAC/B,IACO2Z,KAAK,KACV,MAAc,MAAPR,EAAa,KAAOA,CAC7B,YCtBA9Z,OAAO4Z,eAAeW,GAAS,aAAc,CAAEjW,OAAO,IACvBiW,GAAAC,6BAAG,EAClC,IAAIC,GAAyB,SAAUC,GACrC,OAAOA,EAAKC,OAAO,GAAGC,cAAgBF,EAAKX,MAAM,EACnD,EAKAQ,GAAAC,wBAJ8B,SAAUE,GACtC,OAAKA,EACEA,EAAKG,MAAM,KAAK1b,IAAIsb,IAAwBH,KAAK,KADtC,EAEpB,YCRAta,OAAO4Z,eAAekB,GAAS,aAAc,CAAExW,OAAO,IACjBwW,GAAAC,mCAAG,EAcxCD,GAAAC,8BAVoC,SAAUL,EAAMM,GAClD,IAAKN,EAAM,MAAO,GAClB,IAAIO,EAAgBD,GAAUE,UAAUC,SACxC,OAAOT,EACJG,MAAM,KACN1b,KAAI,SAAUic,GACb,OAT6B,SAAUV,EAAMM,GACjD,OAAON,EAAKC,OAAO,GAAGU,kBAAkBL,GAAUN,EAAKX,MAAM,EAC/D,CAOauB,CAA6BF,EAAMH,EAChD,IACKX,KAAK,IACV,YCdAta,OAAO4Z,eAAe2B,GAAS,aAAc,CAAEjX,OAAO,IAQtDiX,GAAAC,QAPA,SAAiBC,GACf,OAAY,MAARA,GAIkB,IADJ5b,OAAO4b,GAAMC,MAEjC,cCPA1b,OAAO4Z,eAAclU,EAAU,aAAc,CAAEpB,OAAO,IACtDoB,EAAA8U,wBAAkC9U,EAAwCqV,8BAAArV,EAAAyU,sBAAgCzU,EAAgCmU,sBAAAnU,EAAAiW,aAAkB,EAC5J,IAAIC,EAA0BC,GAC9B7b,OAAO4Z,eAAelU,EAAS,wBAAyB,CACtDoW,YAAY,EACZtO,IAAK,WACH,OAAOoO,EAAwB/B,qBAChC,IAEH,IAAIkC,EAA0BC,GAC9Bhc,OAAO4Z,eAAelU,EAAS,wBAAyB,CACtDoW,YAAY,EACZtO,IAAK,WACH,OAAOuO,EAAwB5B,qBAChC,IAEH,IAAII,EAA4B0B,GAChCjc,OAAO4Z,eAAelU,EAAS,0BAA2B,CACxDoW,YAAY,EACZtO,IAAK,WACH,OAAO+M,EAA0BC,uBAClC,IAEH,IAAIM,EAAkCoB,GACtClc,OAAO4Z,eAAelU,EAAS,gCAAiC,CAC9DoW,YAAY,EACZtO,IAAK,WACH,OAAOsN,EAAgCC,6BACxC,IAEH,IAAIQ,EAAYY,GAChBzW,EAAkBiW,QAAAJ,EAAUC,aC7B5B,MAAMY,GAAgB,gBAqCtB,SAASC,GACPzd,GAEA,MAAM0d,IAAEA,EAAGhc,OAAEA,GAvBf,UAAqBA,OAAEA,EAAMgc,IAAEA,IAC7B,GAAIX,GAAOA,QAACrb,GAAU,IACpB,MAAO,CAAEA,SAAQgc,OAGnB,MAAMC,EAAe,IAAIlV,KAAKiV,GAAO,IAAIzB,MAAM,OAAOR,OAAOmC,UAY7D,MAVe,WAAXlc,GACFic,EAAarQ,IAAI,YAOnBqQ,EAAarQ,IAAI,cAEV,CAAEoQ,IAAKrX,MAAMwX,KAAKF,GAAcjC,KAAK,KAAMha,SACpD,CAK0Boc,CAAY9d,IAAU,GAE9C,OAAYoB,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAxCd,SAAmBrB,GACjB,MAAM+d,KAAEA,GAAoB/d,EAAXwX,EAAMzW,EAAAA,OAAKf,EAAtB,CAAmB,SAEzB,OAAI+c,GAAOA,QAACgB,GAAQ,IACX/d,EAGLwd,GAAchU,KAAK,GAAGuU,GAAQ,MAEzBvG,EAGFxX,CACT,CA2Bcge,CAAUhe,KAAQ0d,MAAKhc,UACrC,CC3BA,MAAMuc,GAAmBpe,EAAAA,QAAOqe,CAAC;IAC7BxF,GAAK,CACL/X,OAAQ,mBACRwP,OAAQ;IAERpQ;;IlBlBK;;;;;;;;ekB4BMG,EAAAA,SAAM;WACVA,EAAAA,SAAM;;;;;mBAKEA,EAAAA,SAAM;;IAErBkW,EAAS;;mBAEMlW,EAAAA,SAAM;;;IAGrBmW,EAAS;kBACKnW,EAAAA,SAAM;eACTA,EAAAA,SAAM;sBACCA,EAAAA,SAAM;;;IAGxB6V,EAAW;;IAEX,EAAGtD,cACH,iBAAmBA,GAEnBpC,EAAAA,GAAG;;;;;uBAKgBnQ,EAAAA,SAAM;;;;;;;;;;;;;;EAgBhBie,GAAWjH,EAAAA,YAAW,SACjC7B,EACA+I,OADA7G,SAAEA,GAAW,GAAKlC,EAGlB,MAAM4E,EAAmEwD,GAH7C1c,EAAAA,OAAAsU,EAA5B,gBAGM0I,KAAEA,EAAO,IAAGtL,SAAEA,EAAQ7R,UAAEA,EAASc,OAAEA,EAAS,SAAOuY,EAAKzC,EAAMzW,EAAAA,OAAAkZ,EAA9D,CAAgE,OAAA,WAAA,YAAA,WAEtE,OACE7Z,EAAAA,QAACC,cAAA4d,kBACCrd,UAAWwX,GACT,CACE,cAAeb,GAEjB3W,GAEFmd,KAAMA,EACNrc,OAAQA,GACJ8V,EACJ,CAAAL,IAAKiH,EAAY,YACN,iBAAmB3L,EAAWA,EAAW,iBACxC,SAEXA,EAGP,IAEM4L,GAAexe,EAAAA,QAAOse,GAAoB;WACrCje,EAAAA,SAAM;EAGjB,SAASoe,GAAKte,GACZ,OAAOI,EAAC,QAAAC,cAAAge,GAAiBjd,OAAAC,OAAA,CAAA,EAAArB,GAC3B,CC9FA,MAAMue,GAAa1e,EAAAA,QAAOye,GAAK;eAChBpe,EAAAA,SAAM;iBACJA,EAAAA,SAAM;EAGjBse,GAAW3e,EAAAA,QAAO4e,EAAmB;IACvC/F,GAAK,CACL/X,OAAQ,0BACRwP,OAAQ;;;;;;;iBAQKkB,cAAY,CACzB,0BAA2BQ,EAASA,UAAC,CAAE6M,QAAQ,IAC/C,kCAAmC7M,EAASA,UAAC,CAAE6M,QAAQ;;eAG5Cxe,EAAAA,SAAM;iBACJA,EAAAA,SAAM;;;oBAGHA,EAAAA,SAAM;;;;;;;mBAOPA,EAAAA,SAAM;iBACRA,EAAAA,SAAM;;mBAEJA,EAAAA,SAAM;;;;EA0BzB,SAASye,GAAWtJ,OAAAqJ,OAAEA,EAAMjG,MAAEA,EAAKmG,IAAEA,KAAQ9d,EAAzBC,EAAAA,OAAAsU,EAAA,CAAA,SAAA,QAAA,QAClB,OACEjV,UAACC,cAAAme,GACC,CAAA5d,UAAWwX,GAAK,CAAE,YAAasG,IAC/BjG,MAAOA,EACK,cAAA,aACZiG,OAAQA,GA1Bd,SAAyB1e,GACvB,MAAM4e,IAAEA,EAAGnG,MAAEA,EAAKoG,QAAEA,EAAOH,OAAEA,GAAoB1e,EAATc,EAAIC,EAAAA,OAAKf,EAA3C,CAAA,MAAA,QAAA,UAAA,WAEN,OAAI8e,QAAMF,KAASC,EACVpG,EAIPrY,EAAA,QAAAC,cAACke,GAAUnd,OAAAC,OAAA,CACT0c,KAAMa,EACNld,OAAO,QACPmd,QAASA,GACJH,GAAU,CAAE,eAAgB,QAC7B5d,GAEH2X,EAGP,CAUOsG,CAAkB3d,OAAAC,OAAA,CAAAoX,QAAOmG,MAAKF,UAAW5d,IAGhD,CC3EA,MAAMke,GAAgBnf,EAAAA,QAAOof,GAAG;;;EAK1BC,GAAWrf,EAAAA,QAAOsf,EAAE;;;;;;;;EAUpBC,GAAmBvf,EAAAA,QAAOiY,GAAW;cAC7B5X,EAAAA,SAAM;ECrBpB,SAASmf,KACP,MAAMC,EAAU7F,SAAO,GAMvB,OAJAM,EAASA,WAAC,WACRuF,EAAQ3F,QAAU,CACnB,GAAE,IAEI2F,EAAQ3F,QAAU,CAC3B,CCHA,MAAM4F,GAA6C,CACjDC,OAAOC,GACE7Q,EAAG8Q,WAACD,EAAG,UAIlB,SAASE,GAA8C3f,GAIrD,MAAM4f,SAAEA,EAAQC,SAAEA,GAAa7f,EAEzB8f,EAAwC,CAC5CC,WAAWha,GACG,MAARA,EACKwZ,GAGFK,EAAS7Z,IAASwZ,IAI7B,OAAIM,EAuDA,SACJC,GAEA,MAAO,CACL/Z,KAAI,IACK,WAETia,KAAKC,GACH,OAAO7d,KAAK8d,OAAOD,EAAO,IAAI1X,IAC/B,EACD2X,OAAOD,EAAYE,GACjB,MAAMC,EAAe,IAAI7X,IAA0B4X,GAEnD,IAAK,IAAIxe,EAAI,EAAGA,EAAIse,EAAMpe,OAAQF,IAAK,CACrC,MAAM0e,EAAUP,EAAQC,WAAWE,EAAMte,GAAG2e,OAC5CF,EAAanT,IAAIoT,EAAQb,OAAOS,EAAMte,IAAKse,EAAMte,GAClD,CAED,OAAOye,CACR,EACDG,SAAS7Y,EAA2ByY,GAClC,MAAMC,EAAe,IAAI7X,IAA0B4X,GAEnD,IAAK,IAAIxe,EAAI,EAAGA,EAAI+F,EAAK7F,OAAQF,IAC/Bye,EAAaI,OAAO9Y,EAAK/F,IAG3B,OAAOye,CACR,EACDK,OAAOR,EAAYE,GACjB,MAAMC,EAAe,IAAI7X,IAA0B4X,GAEnD,IAAK,IAAIxe,EAAI,EAAGA,EAAIse,EAAMpe,OAAQF,IAAK,CACrC,MACMI,EADU+d,EAAQC,WAAWE,EAAMte,GAAG2e,OACxBd,OAAOS,EAAMte,IAE5Bwe,EAAUjU,IAAInK,GAGjBqe,EAAaI,OAAOze,GAFpBqe,EAAanT,IAAIlL,EAAKke,EAAMte,GAI/B,CAED,OAAOye,CACR,EACDrT,MAAK,IACI,IAAIxE,IAGjB,CAvGWmY,CAA0BZ,GAM/B,SACJA,GAEA,MAAO,CACL/Z,KAAI,IACK,SAETia,KAAKC,GACH,OAAO7d,KAAK8d,OAAOD,EAAO,IAAI1X,IAC/B,EACD2X,OAAOD,GACL,MAAMG,EAAe,IAAI7X,IAEzB,IAAK,IAAI5G,EAAI,EAAGA,EAAIse,EAAM9E,MAAM,EAAG,GAAGtZ,OAAQF,IAAK,CACjD,MAAM0e,EAAUP,EAAQC,WAAWE,EAAMte,GAAG2e,OAC5CF,EAAanT,IAAIoT,EAAQb,OAAOS,EAAMte,IAAKse,EAAMte,GAClD,CAED,OAAOye,CACR,EACDG,SAAS7Y,EAA2ByY,GAClC,MAAMC,EAAe,IAAI7X,IAA0B4X,GAEnD,IAAK,IAAIxe,EAAI,EAAGA,EAAI+F,EAAK7F,OAAQF,IAC/Bye,EAAaI,OAAO9Y,EAAK/F,IAG3B,OAAOye,CACR,EACDK,OAAOR,EAAYE,GACjB,MAAMC,EAAe,IAAI7X,IAEzB,IAAK,IAAI5G,EAAI,EAAGA,EAAIse,EAAM9E,MAAM,EAAG,GAAGtZ,OAAQF,IAAK,CACjD,MAAM0e,EAAUP,EAAQC,WAAWE,EAAMte,GAAG2e,OAEvCH,EAAUjU,IAAImU,EAAQb,OAAOS,EAAMte,MACtCye,EAAanT,IAAIoT,EAAQb,OAAOS,EAAMte,IAAKse,EAAMte,GAEpD,CAED,OAAOye,CACR,EACDrT,MAAK,IACI,IAAIxE,IAGjB,CAjDSoY,CAAwBb,EACjC,CC/BA,IAAIc,GAAW,IACXhd,GAAmB,iBACnBid,GAAc,sBACdC,GAAM,IAGNhd,GAAU,oBACVC,GAAS,6BACTqH,GAAY,kBAGZ2V,GAAS,aAGTC,GAAa,qBAGbC,GAAa,aAGbC,GAAY,cAGZ7V,GAAW,mBAGX8V,GAAeC,SAUfvc,GAPczD,OAAOY,UAOQ8C,SAG7Buc,GAAa3U,KAAK4U,KAClB7U,GAAYC,KAAKC,IA0OrB,SAAS3G,GAASN,GAChB,IAAIK,SAAcL,EAClB,QAASA,IAAkB,UAARK,GAA4B,YAARA,EACzC,CA2EA,SAASwb,GAAS7b,GAChB,OAAKA,GAGLA,EA+BF,SAAkBA,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAnEF,SAAkBA,GAChB,MAAuB,iBAATA,GAtBhB,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC3B,CAqBKE,CAAaF,IAAUb,GAAe3C,KAAKwD,IAAU0F,EAC1D,CAgEM+D,CAASzJ,GACX,OAAOob,GAET,GAAI9a,GAASN,GAAQ,CACnB,IAAIqI,EAAgC,mBAAjBrI,EAAMkD,QAAwBlD,EAAMkD,UAAYlD,EACnEA,EAAQM,GAAS+H,GAAUA,EAAQ,GAAMA,CAC1C,CACD,GAAoB,iBAATrI,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQA,EAAMqC,QAAQgZ,GAAQ,IAC9B,IAAIS,EAAWP,GAAWzX,KAAK9D,GAC/B,OAAQ8b,GAAYN,GAAU1X,KAAK9D,GAC/Byb,GAAazb,EAAMyV,MAAM,GAAIqG,EAAW,EAAI,GAC3CR,GAAWxX,KAAK9D,GAASob,IAAOpb,CACvC,CAlDU+b,CAAS/b,MACHkb,IAAYlb,KAAWkb,IACvBlb,EAAQ,GAAK,EAAI,GACfmb,GAETnb,GAAUA,EAAQA,EAAQ,EAPd,IAAVA,EAAcA,EAAQ,CAQjC,CAuFA,IAzXqB8F,GAyXjBkW,GAxXK,SAAStS,EAAOuS,EAAKC,GAa1B,OAZIA,GAAuB,iBAARA,GAyCvB,SAAwBlc,EAAOhB,EAAO+E,GACpC,IAAKzD,GAASyD,GACZ,OAAO,EAET,IAAI1D,SAAcrB,EAClB,SAAY,UAARqB,EAsEN,SAAqBL,GACnB,OAAgB,MAATA,GAqDT,SAAkBA,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GAAS9B,EAC7C,CAxD0BiC,CAASH,EAAM7D,UAoBzC,SAAoB6D,GAGlB,IAAII,EAAME,GAASN,GAASb,GAAe3C,KAAKwD,GAAS,GACzD,OAAOI,GAAOhC,IAAWgC,GAAO/B,EAClC,CAzBqDkC,CAAWP,EAChE,CAvEWQ,CAAYuD,IAvBvB,SAAiB/D,EAAO7D,GAEtB,SADAA,EAAmB,MAAVA,EAAiB+B,GAAmB/B,KAE1B,iBAAT6D,GAAqB2F,GAAS7B,KAAK9D,KAC1CA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQ7D,CAC7C,CAkBkC+L,CAAQlJ,EAAO+E,EAAO5H,QACrC,UAARkE,GAAoBrB,KAAS+E,IAuCxC,SAAY/D,EAAOqI,GACjB,OAAOrI,IAAUqI,GAAUrI,GAAUA,GAASqI,GAAUA,CAC1D,CAvCW8T,CAAGpY,EAAO/E,GAAQgB,EAG7B,CArD2Coc,CAAe1S,EAAOuS,EAAKC,KAChED,EAAMC,OAAOzc,GAGfiK,EAAQmS,GAASnS,QACLjK,IAARwc,GACFA,EAAMvS,EACNA,EAAQ,GAERuS,EAAMJ,GAASI,GA9BrB,SAAmBvS,EAAOuS,EAAKC,EAAMpW,GAKnC,IAJA,IAAI9G,GAAS,EACT7C,EAAS4K,GAAU4U,IAAYM,EAAMvS,IAAUwS,GAAQ,IAAK,GAC5Dpc,EAASa,MAAMxE,GAEZA,KACL2D,EAAOgG,EAAY3J,IAAW6C,GAAS0K,EACvCA,GAASwS,EAEX,OAAOpc,CACT,CAuBWuc,CAAU3S,EAAOuS,EADxBC,OAAgBzc,IAATyc,EAAsBxS,EAAQuS,EAAM,GAAK,EAAKJ,GAASK,GAC3BpW,GACvC,EA4WAwW,GAAiBN,GCvXjB,MAAMO,GA1EA,UAAsBC,YAC1BA,EAAWC,gBACXA,EAAeC,SACfA,IAMA,IAAIC,EAAgBF,EAGhBG,EAAmB,IACjBjc,MAAM6b,EAAcG,GAAe7f,MAAM,MACzC6D,MAAMgc,GAAe7f,KAAK,IAG5B+f,EAAeb,GAAMS,EAAiBD,EAAc,GAAGM,QAEzD,CAACC,EAAahV,IAAcgV,EAAM/V,KAAKgW,IAAIN,EAASvgB,OAAQ4L,IAC5D,GAGF,OAAO,WACL,GAAoB,GAAhB8U,EACF,MAAM,IAAII,MAAM,mEAGlBJ,IACA,MAAMK,EAAQN,EAAiBnH,OAAO,EAAIkH,GAAe9hB,KAAKsiB,GAAeT,EAASS,KAMtF,IAAIA,EAAKP,EAAiBzgB,OAW1B,GACEghB,IACAP,EAAiBO,IAAOP,EAAiBO,GAAM,GAAKT,EAASvgB,aAC9B,GAAxBygB,EAAiBO,IAAYA,GAAMP,EAAiBzgB,OAASwgB,GAoBtE,OAJIC,EAAiBzgB,OAASghB,EAAKR,GACjCA,IAGK,SAASO,EAAMlH,KAAK,KAC7B,CACF,CAGcoH,CAAY,CACxBZ,YArFiB,GAsFjBE,SApFe,yDAqFfD,gBAtFqB,ICgBvB,MAAMY,GAAmB,CAAA,EAMzB,SAASC,KACP,OAAO,SAAuBhjB,GAC5B,MAAM4f,SAAEA,EAAQC,SAAEA,EAAQoD,SAAEA,GAAajjB,EAEnCkjB,EAAW7D,KAEX8D,EAAWC,EAAAA,SAA+B,IACvCzD,GAA2B,CAChCC,SAAUA,GAAYmD,GACtBlD,SAAUjC,QAAQiC,MAEnB,CAACD,EAAUC,IAiBd,SAASwD,IACP,OAAOF,EAASnD,KAAKzV,EAAAA,QAAQvK,EAAMsjB,UACpC,CAED,MAAOA,EAAUC,GAAYC,EAAAA,YAnB7B,SAAiBC,EAA2BC,GAC1C,OAAQA,EAAO3d,MACb,IAAK,SACH,OAAOod,EAASjD,OAAOwD,EAAOC,QAASF,GACzC,IAAK,WACH,OAAON,EAAS5C,SAASmD,EAAOC,QAASF,GAC3C,IAAK,SACH,OAAON,EAAS1C,OAAOiD,EAAOC,QAASF,GACzC,IAAK,QACH,OAAON,EAASpW,MAAM0W,GACxB,IAAK,QACH,OAAOC,EAAOC,QAEnB,GAMgD,IAAIpb,IAA6B8a,IAC5EO,iBAAEA,EAAgBC,mBAAEA,GCzC9B,SACExD,EACAJ,GAOA,MAAM6D,EAAWrK,SAAO,CAAA,IACjBsK,EAAaC,GAAkBzK,EAAQA,UAAC,IAAM0K,EAAe,GAAIhE,GAAO,KAS/E,SAASgE,EAAeC,EAA4BjE,EAAoBkE,GAAS,SAC/E,MAAMC,EAAQN,EAASnK,QAEjB0K,EAAYpE,GAAS,GAE3B,IAAIqE,EAAuC,CAAA,EACvCC,EAAenjB,OAAOsG,KAAK0c,GAAOviB,SAAWwiB,EAAUxiB,OAE3D,IAAK,IAAIF,EAAI,EAAGA,EAAI0iB,EAAUxiB,OAAQF,IAAK,CACzC,MAAM6a,EAAO6H,EAAU1iB,GACjBI,EAAMse,EAAQ7D,GAEpB+H,EAAeA,GAA8B,MAAdH,EAAMriB,GAErCuiB,iCACKA,GAAQ,CAEXviB,CAACA,GAAoB,QAAdsT,EAAA+O,EAAMriB,UAAQ,IAAAsT,EAAAA,EAAA4M,MAExB,CAED,OAAIsC,EACKL,GAGLC,IACFL,EAASnK,QAAU2K,GAGDljB,OAAOsG,KAAK4c,GAC7B7gB,OACA+e,QAAO,CAACuB,EAAavH,IACb,GAAGuH,IAAcO,EAAS9H,MAChC,IAGN,CAED,MAAO,CACLuH,cACAE,eAAc,CAAChE,EAAoBkE,GAAS,IACnCF,EAAeF,EAAa9D,EAAOkE,GAE5CP,iBAAiB3D,GACf+D,EAAeC,EAAeF,EAAa9D,GAAO,GACnD,EAMD4D,mBAAmBW,GACVT,IAAgBE,EAAeF,EAAaS,GAGzD,CDjCqDC,CAC/CC,EAAAA,SACA,IAAIpB,EAAS5b,QAAQnH,IAAIU,SAErB0jB,EAAqBlL,UAAO,GAiFlC,OAxCAM,EAASA,WACP,WACMmJ,GAAYyB,EAAmBhL,UACjCsJ,SAAAA,EAAWK,IAGbqB,EAAmBhL,SAAU,CAC9B,GAMD,CAAC2J,IAGHvJ,EAASA,WACP,WACE,MAAM6K,EAAcvB,IACd3b,EAAO,IAAIkd,EAAYld,QAAQnH,IAAIU,QAErC4iB,EAAmBnc,KAIvBid,EAAmBhL,SAAU,EAE7BiK,EAAiBlc,GACjB6b,EAAS,CACPxd,KAAM,QACN4d,QAASiB,IAEZ,GAKD,CAAC5kB,EAAMsjB,SAAUO,EAAoBD,IAGhC,CAAE7d,KA/ET,WACE,OAAOod,EAASpd,MACjB,EA6Ecud,WAAUpD,OA3EzB,SAAgBD,GACd0E,EAAmBhL,SAAU,EAE7B4J,EAAS,CACPxd,KAAM,SACN4d,QAASpZ,EAAOA,QAAC0V,IAEpB,EAoEgCM,SAlEjC,SAAkB7Y,GAChBid,EAAmBhL,SAAU,EAE7B4J,EAAS,CACPxd,KAAM,WACN4d,QAASpZ,EAAOA,QAAC7C,IAEpB,EA2D0C+Y,OAzD3C,SAAgBR,GACd0E,EAAmBhL,SAAU,EAE7B4J,EAAS,CACPxd,KAAM,SACN4d,QAASpZ,EAAOA,QAAC0V,IAEpB,EAkDkDlT,MAhDnD,WACE4X,EAAmBhL,SAAU,EAE7B4J,EAAS,CACPxd,KAAM,SAET,EA2CH,CACF,UAEgB8e,KAOd,MAAO,CAAEC,kBAHiBC,gBAAsC,CAAA,GAGpCC,cAFNhC,KAGxB,CEtJA,MAAMiC,GAAqB7kB,EAAK,QAAC2kB,cAA4D,CAC3F3N,MAAO,UACPG,UAAU,uBAGGuN,GAAiBE,cAAEA,IAAkBH,KCK9CK,GAAerlB,EAAAA,QAAOoX,GAAuC;oBAC/C/W,EAAAA,SAAM;;sBAEJmR,cAAY,CAC9B,0BAA2BQ,EAASA,UAAC,CAAE,gBAAgB,IACvD,kCAAmCA,EAASA,UAAC,CAAE,gBAAgB;;kBAGjDR,cAAY,CAC1B,6BAA8BQ,EAASA,UAAC,CAAEsT,MAAO,SAAU,gBAAgB,IAC3E,qCAAsCtT,EAASA,UAAC,CAAEsT,MAAO,SAAU,gBAAgB,IACnF,+BAAgCtT,EAASA,UAAC,CAAEsT,MAAO,WAAY,gBAAgB,IAC/E,uCAAwCtT,EAASA,UAAC,CAAEsT,MAAO,WAAY,gBAAgB;;WAGhF9T,cAAY,CACnB,eAAgBQ,EAASA,UAAC,CAAE,gBAAgB,IAC5C,uBAAwBA,EAASA,UAAC,CAAE,gBAAgB;;aAG3C3R,EAAAA,SAAM,eAAeA,EAAKoQ,SAAC;;IAEpC8F,EAAS;oBACO/E,cAAY,CAC1B,sCAAuCQ,EAASA,UAAC,CAAEsT,MAAO,aAC1D,oCAAqCtT,EAASA,UAAC,CAAEsT,MAAO;;wBAGtC9T,cAAY,CAC9B,iCAAkCQ,EAASA,UAAC,CAAE,gBAAgB,IAC9D,yCAA0CA,EAASA,UAAC,CAAE,gBAAgB;;aAG/DR,cAAY,CACnB,sBAAuBQ,EAASA,UAAC,CAAE,gBAAgB,IACnD,8BAA+BA,EAASA,UAAC,CAAE,gBAAgB;;;IAI7DwE,EAAS;oBACOhF,cAAY,CAC1B,sCAAuCQ,EAASA,UAAC,CAAEsT,MAAO,aAC1D,oCAAqCtT,EAASA,UAAC,CAAEsT,MAAO;;wBAGtC9T,cAAY,CAC9B,iCAAkCQ,EAASA,UAAC,CAAE,gBAAgB,IAC9D,yCAA0CA,EAASA,UAAC,CAAE,gBAAgB;;aAG/DR,cAAY,CACnB,sBAAuBQ,EAASA,UAAC,CAAE,gBAAgB,IACnD,8BAA+BA,EAASA,UAAC,CAAE,gBAAgB;;kBAG/C3R,EAAAA,SAAM;eACTA,EAAAA,SAAM;sBACCA,EAAAA,SAAM;;;IAGxBoW,EAAW;qBACMjF,cAAY,CAC3B,uCAAwCQ,EAASA,UAAC,CAAEsT,MAAO,aAC3D,qCAAsCtT,EAASA,UAAC,CAAEsT,MAAO;;wBAGvC9T,cAAY,CAC9B,kCAAmCQ,EAASA,UAAC,CAAE,gBAAgB,IAC/D,0CAA2CA,EAASA,UAAC,CAAE,gBAAgB;;aAGhER,cAAY,CACnB,uBAAwBQ,EAASA,UAAC,CAAE,gBAAgB,IACpD,+BAAgCA,EAASA,UAAC,CAAE,gBAAgB;;;IAI9DkE,EAAW;wBACS1E,cAAY,CAC9B,oCAAqCQ,EAASA,UAAC,CAAE,gBAAgB,IACjE,4CAA6CA,EAASA,UAAC,CAAE,gBAAgB;;oBAG3DR,cAAY,CAC1B,uCAAwCQ,EAASA,UAAC,CAAEsT,MAAO,SAAU,gBAAgB,IACrF,+CAAgDtT,EAAAA,UAAU,CACxDsT,MAAO,SACP,gBAAgB,IAElB,yCAA0CtT,EAAAA,UAAU,CAClDsT,MAAO,WACP,gBAAgB,IAElB,iDAAkDtT,EAAAA,UAAU,CAC1DsT,MAAO,WACP,gBAAgB;;aAIX9T,cAAY,CACnB,yBAA0BQ,EAASA,UAAC,CAAE,gBAAgB,IACtD,iCAAkCA,EAASA,UAAC,CAAE,gBAAgB;;EAKpE,SAASuT,GAAWrf,GAClB,MAAgB,aAATA,CACT,CAkCA,IAAAsf,GAAexlB,WAhCf,SAAgBwV,OAAA3P,MAAEA,EAAK+M,SAAEA,EAAQ8E,SAAEA,KAAaC,EAAhCzW,EAAAA,OAAAsU,EAAA,CAAA,QAAA,WAAA,aACd,MAAMiQ,EAAQC,aAAWN,IACnBO,EAAaD,aAAWT,IAE9B,GAAIra,GAAQ+a,GACV,MAAM7C,MAAM,0DAGd,MAAMW,EAAWkC,EAAWlC,SAASpX,IAAIxG,GAEzC,OACEtF,wBAAC8kB,GAAY9jB,OAAAC,OAAA,CAAA,EACPmW,EACG,CAAA2N,MAAAK,EAAWzf,OAClBA,KAAK,SACLuP,KAAM8P,GAAWI,EAAWzf,QAAU,WAAa,QAAO,eAC5Cud,EACd/L,SAAUqG,QAAQrG,GAAY+N,EAAM/N,UACpCsH,QAAS,KACHuG,GAAWI,EAAWzf,QACxByf,EAAW/E,OAAO,CAAE/a,UAEpB8f,EAAWtF,OAAO,CAAExa,SACrB,EAEH0R,MAAOkO,EAAMlO,QAEZ3E,EAGP,GAEe5S,CAAe,ICzI9B,MAAM4lB,GAAY5lB,EAAAA,QAAOwS,GAAiE;aAC7EhB,cAAY,CACrB,gCAAiCQ,EAASA,UAAC,CAAE6T,WAAW,IACxD,8BAA+B7T,EAASA,UAAC,CAAE6T,WAAW;;kBAGxCrU,cAAY,CAC1B,qCAAsCQ,EAASA,UAAC,CAAE6T,WAAW,IAC7D,mCAAoC7T,EAASA,UAAC,CAAE6T,WAAW;;kBAG7CrU,cAAY,CAC1B,qCAAsCQ,EAASA,UAAC,CAAE6T,WAAW,IAC7D,mCAAoC7T,EAASA,UAAC,CAAE6T,WAAW;;kBAG7CrU,cAAY,CAC1B,qCAAsCQ,EAASA,UAAC,CAAE6T,WAAW,IAC7D,mCAAoC7T,EAASA,UAAC,CAAE6T,WAAW;;mBAG5CrU,cAAY,CAC3B,sCAAuCQ,EAASA,UAAC,CAAE6T,WAAW,IAC9D,oCAAqC7T,EAASA,UAAC,CAAE6T,WAAW;;;oBAI5CxlB,EAAAA,SAAM;;;IAGtBylB;cACUtU,cAAY,CACpB,uBAAwBQ,EAASA,UAAC,CAAE6T,WAAW,EAAO5P,OAAQ,YAC9D,6BAA8BjE,EAASA,UAAC,CAAE6T,WAAW,EAAO5P,OAAQ,UACpE,yBAA0BjE,EAASA,UAAC,CAAE6T,WAAW,EAAM5P,OAAQ,YAC/D,+BAAgCjE,EAASA,UAAC,CAAE6T,WAAW,EAAM5P,OAAQ;;iBAG1DzE,cAAY,CACvB,0BAA2BQ,EAASA,UAAC,CAAE6T,WAAW,EAAO5P,OAAQ,YACjE,gCAAiCjE,EAASA,UAAC,CAAE6T,WAAW,EAAO5P,OAAQ,UACvE,4BAA6BjE,EAASA,UAAC,CAAE6T,WAAW,EAAM5P,OAAQ,YAClE,kCAAmCjE,EAASA,UAAC,CAAE6T,WAAW,EAAM5P,OAAQ;;EAa9E,SAAS8P,GACPtC,EACAzD,GAEA,MAAMgG,EAAQxf,MAAMwX,KAAKyF,GAEzB,GAAIzD,EAAU,CACZ,MAAMna,EAAkC,GACxC,IAAK,MAAM,CAAGogB,KAAWD,EACvBngB,EAAMmI,KAAKiY,EAAOpgB,OAGpB,OAAOA,CACR,CAAM,CACL,GAAI+E,GAAQob,GACV,OAAO,KAET,OAAU,CAAAC,IAAWD,EACrB,OAAOC,EAAOpgB,KACf,CACH,CAEA,MAAMqgB,GAAmB,GAEzB,SAASC,GAAYhmB,SACnB,MAAMuX,SACJA,GAAW,EAAKsI,SAChBA,GAAW,EAAKzI,MAChBA,EAAQ,UAAS6O,GACjBA,EAAEzlB,KACFA,EAAIyiB,SACJA,EAAQzjB,QACRA,EAAOiT,SACPA,EAAQ7R,UACRA,GAEEZ,EADCwX,EACDzW,EAAAA,OAAAf,EAXE,CAAA,WAAA,WAAA,QAAA,KAAA,OAAA,WAAA,UAAA,WAAA,cAYAwlB,EAAaR,GAAc,CAC/BnF,WACAyD,UA9CF5d,EA8C+C,QAAf2P,EAAArV,EAAM0F,aAAS,IAAA2P,EAAAA,EAAA0Q,GA5C1Bxb,UAAQ7E,GAETnF,KAAKmF,IAAK,CAAQA,aA2CpCud,SAAUpJ,EAAWA,aACnB,SAA+ByJ,GAC7BL,SAAAA,EAAW,CACTvhB,OAAQ,CAAEukB,KAAIzlB,KAAMA,QAAAA,EAAQ,GAAIkF,MAAOkgB,GAAoBtC,EAAUzD,KAExE,GACD,CAACoG,EAAIpG,EAAUrf,EAAMyiB,MAtD3B,IACEvd,EAyDA,OACEtF,UAACC,cAAAolB,GACKrkB,OAAAC,OAAA,CAAA,EAAAmW,EACJ,CAAA5W,UAAWwX,GAAKxX,EAAW,CACzB,eAAgB2W,IAElB0O,GAAIA,EACJ3Q,KAAMuK,EAAW,QAAU,aAC3BrN,MAAM,SACNF,MAAM,KAAIoT,UACC7F,EAAQ/J,OACXsB,IAERhX,UAACC,cAAA4kB,GAAmBiB,SAAS,CAAAxgB,MAAO,CAAE0R,QAAOG,aAC3CnX,UAACC,cAAAykB,GAAkBoB,SAAS,CAAAxgB,MAAO8f,GAChC/S,QAAAA,GACEjT,GAAW,IAAIe,KAAI,SAAsBulB,GACxC,MAAMrN,MAAEA,EAAK/S,MAAEA,GAAqBogB,EAAXtO,EAAWzW,EAAAA,OAAA+kB,EAA9B,CAAA,QAAA,UACA/jB,EAAMd,OAAOyE,GAEnB,OACEtF,EAAA,QAAAC,cAACslB,GAAMvkB,OAAAC,OAAA,CACLU,IAAKA,GACDyV,EAAM,CACVD,SAAUqG,QAAQrG,GAAYuO,EAAOvO,UACrC7R,MAAOA,IAEN+S,EAGP,MAKZ,CAEAuN,GAAYG,OAASR,GCzJd,MAAMS,GAAarB,EAAaA,cAAkB,ICLzD,SAASsB,GAAMC,GACb,MAAOL,EAAIM,GAASnmB,EAAAA,QAAMmZ,UAAS,IAAM+M,GAAUrE,OASnD,OAPA7hB,UAAM2Z,WACJ,WACEwM,EAAMD,GAAUrE,KAClB,GACA,CAACqE,IAGIL,CACT,CCOA,MAAMO,GAAmB3mB,EAAAA,QAAO4mB,EAAE;;;;;yBAKTvmB,EAAAA,SAAM;;;EAKzBqV,GAAa1V,EAAAA,QAAOC,IAAI;;;;;;;EASxB6V,GAAW9V,EAAAA,QAAO0V,GAAW;;EAI7BE,GAAU5V,EAAAA,QAAO0V,GAAW;;EAI5BmR,GAAiB7mB,EAAAA,QAAO4e,EAAE;;EAI1BjG,GAAc3Y,EAAAA,QAAO4Y,KAA2C;IAClEC,GAAK,CACL/X,OAAQ,gBACRwP,OAAQ;IAERpQ;;eAEWG,EAAAA,SAAM;;gBAELmR,cAAY,CACxBY,OAAQJ,EAASA,UAAC,CAAE8U,UAAW,aAC/BpU,QAASV,EAASA,UAAC,CAAE8U,UAAW;;IAGhCvQ,EAAS;aACAlW,EAAAA,SAAM;wBACKA,EAAAA,SAAM;;;IAG1B6V,EAAW;aACF7V,EAAAA,SAAM;wBACKA,EAAAA,SAAM;;;aAGjBA,EAAAA,SAAM,cAAcA,EAAKoQ,SAAC;;oBAEnBe,cAAY,CAC5BuV,IAAK/U,EAASA,UAAC,CAAE8U,UAAW,eAC5BE,OAAQhV,EAASA,UAAC,CAAE8U,UAAW;;;;;;;;;;kBAWjBtV,cAAY,CAC1B,oBAAqBQ,EAASA,UAAC,CAAE6M,QAAQ,IACzC,gBAAiB7M,EAASA,UAAC,CAAE6M,QAAQ;;WAG9BrN,cAAY,CACnB,gBAAiBQ,EAASA,UAAC,CAAE6M,QAAQ,IACrC,iBAAkB7M,EAASA,UAAC,CAAE6M,QAAQ;;IAGtCjJ,QAAaE;cACHtE,cAAY,CAClB,EAAKQ,EAASA,UAAC,CAAE8U,UAAW,eAC5B,YAAa9U,EAASA,UAAC,CAAE8U,UAAW;;QAGpCtV,cAAY,CACZ,UAAWQ,EAASA,UAAC,CAAE8U,UAAW,eAClC,EAAK9U,EAASA,UAAC,CAAE8U,UAAW;;EA8EpC,MAAMG,GAAqBjnB,EAAAA,QAAOmS,GAAG;;EAI/B+U,GAAoBlnB,EAAAA,QAAOmnB,OAAO;aAC3B3V,cAAY,CACrB4V,MAAOpV,EAASA,UAAC,CAAE,eAAe,IAClCqV,KAAMrV,EAASA,UAAC,CAAE,eAAe;EAiBrC,SAASsV,GAAW9R,OAAA5C,SAAEA,EAAQjS,KAAEA,EAAI4mB,KAAEA,KAASpnB,EAA3Be,EAAAA,OAAAsU,EAAA,CAAA,WAAA,OAAA,SAClB,MAAMgS,UAAEA,GAAc9B,EAAUA,WAACa,IAE3BkB,EAASD,IAAc7mB,EAE7B,OACEJ,EAAAA,QAACC,cAAA0mB,GAAsB3lB,OAAAC,OAAA,CAAA,EAAArB,GAAOsV,KAAK,WAAU,cAAcgS,IACxDF,GAAQE,EAAS,KAAO7U,EAG/B,CAEA0U,GAAWI,aAAe,CACxBH,MAAM,GAQR,MAAMI,GAAc3nB,EAAAA,QAAOmS,GAAG;IAC1BwU,QAAsBM;cACZ5mB,EAAAA,SAAM;;EAmBpB,SAASunB,GAAKpS,OAAA5C,SACZA,EAAQkU,UACRA,EAAY,aACZV,GAAIK,EACJe,UAAWK,EAAU,GAAEC,YACvBA,KACG3nB,EANSe,SAAAsU,EAAA,CAAA,WAAA,YAAA,KAAA,YAAA,gBAQZ,MAAOgS,EAAWO,GAAgBrO,EAAQA,SAACmO,GACrCzB,EAAKI,GAAMC,GAajB,OAXAvM,EAAAA,WAAU,KACJ2N,GACFE,EAAaF,EACd,GACA,CAACA,IAEJ3N,EAAAA,WAAU,KACR4N,SAAAA,EAAcN,EAAU,GAEvB,CAACA,IAGFjnB,EAAAA,QAAAC,cAACmnB,GAAWpmB,OAAAC,OAAA,CAAA,EAAKrB,GACfI,EAAAA,QAACC,cAAA+lB,GAAWF,SAAQ,CAACxgB,MAAO,CAAE2hB,YAAWO,eAAc3B,KAAIU,cACxDlU,GAIT,CAEAgV,GAAKI,MAxKL,SAAmBxS,GAAA,IAAA5C,SAAEA,GAAoC4C,EAAvBrV,EAAKe,EAAAA,OAAAsU,EAApB,cACjB,OACEjV,EAAA,QAAAC,cAACmmB,GAAgBplB,OAAAC,OAAA,CAAA,EAAKrB,EAAK,CAAEsV,KAAK,YAC/B7C,EAGP,EAmKAgV,GAAKK,KA1JL,SAAkBzS,OAAA5C,SAChBA,EAAQjS,KACRA,EACAoc,QAASmL,EAASnnB,UAClBA,EAASqiB,SACTA,EAAQ5L,QACRA,EAAOE,SACPA,GAAW,KACRvX,EARae,SAAAsU,EAAA,CAAA,WAAA,OAAA,UAAA,YAAA,WAAA,UAAA,aAUhB,MAAQ4Q,GAAI+B,EAAKJ,aAAEA,EAAYP,UAAEA,EAASV,UAAEA,GAAcpB,aAAWa,IAE/D6B,EAAWZ,IAAc7mB,EAa/B,OANAuZ,EAAAA,WAAU,MACHsN,GAAaU,GAChBH,EAAapnB,EACd,GACA,CAAC6mB,EAAW7mB,EAAMonB,EAAcG,IAGjC3nB,EAAC,QAAAC,cAAAqmB,GAAe,CAAApR,KAAK,MAAK,gBAAgB2S,EAAW,OAAS,SAC5D7nB,EAAAA,QAAAC,cAACmY,GAAW,CACV5X,UAAWwX,GACT,CACE,cAAeb,GAEjB3W,GAEF8d,OAAQ2I,IAAc7mB,EACtBmmB,UAAWA,GAEXvmB,EAAAA,QACMC,cAAA,QAAAe,OAAAC,OAAA,GAAArB,EACJ,CAAA0F,MAAOlF,EACP0nB,QAASD,EACT1Q,SAAUA,EACVxR,KAAK,QACLvF,KAAMwnB,EACN/E,SA9BR,SAAsBkF,GACpBP,EAAapnB,GACbyiB,SAAAA,EAAWkF,EACZ,EA4BOb,QACA,KACDjQ,GAAWjX,EAAAA,QAAAC,cAACoV,GAAO,KAAE4B,GACrB5E,GAAYrS,wBAACuV,GAAQ,KAAElD,IAIhC,EAuGAgV,GAAKW,OAxFL,SAAqB/S,GAAA,IAAA5C,SAAEA,GAAsC4C,EAAzBrV,EAAKe,EAAAA,OAAAsU,EAApB,cACnB,OAAOjV,wBAAC0mB,GAAkB1lB,OAAAC,OAAA,GAAKrB,GAAQyS,EACzC,EAuFAgV,GAAKY,MAAQlB,GCzRb,MAAMmB,GAAgBzoB,EAAAA,QAAO0oB,OAAO;IAChC7P,GAAK,CACL/X,OAAQ;EAIN6nB,GAAqB3oB,EAAAA,QAAO0oB,OAAO;IACrC7P,GAAK,CACLvI,OAAQ,mBACRxP,OAAQ;;eAGGT,EAAAA,SAAM;WACVA,EAAAA,SAAM;;6BAEYA,EAAAA,SAAM;;aAEtBA,EAAAA,SAAM,cAAcA,EAAKoQ,SAAC;mBACpBpQ,EAAAA,SAAM;EAGnBqV,GAAa1V,EAAAA,QAAOC,IAAI;;;;;;;EASxB2V,GAAU5V,EAAAA,QAAO0V,GAAW;cACpBrV,EAAAA,SAAM;EAiBpB,SAASuoB,GAAQpT,GAAA,IAAA5C,SAAEA,GAAmC4C,EAAtBmC,EAAMzW,EAAAA,OAAAsU,EAArB,cACf,OACEjV,UAACC,cAAAioB,GAA0BlnB,OAAAC,OAAA,CAAA,cAAA,WAAcmW,GACtC/E,EAGP,CCxDA,SAASiW,GAAYC,GAAa,GAChC,OAAIA,EACK,+XAeF,iEAIT,CDqCAF,GAAQG,MAjBR,SAAsBvT,OAAA5C,SAAEA,EAAQ4E,QAAEA,GAAOhC,EAAKmC,EAAMzW,EAAAA,OAAAsU,EAA9B,wBACpB,OACEjV,EAAC,QAAAC,cAAAmoB,GAA+BpnB,OAAAC,OAAA,CAAA,cAAA,iBAAoBmW,GACjDH,GAAWjX,EAAAA,QAAAC,cAACoV,GAAO,KAAE4B,GACrB5E,EAGP,EElDA,MAAMoW,GAAmB9D,EAAAA,mBAAgD5f,GAEzE,SAAS2jB,IAAkBC,SACzBA,EAAQtW,SACRA,EAAQuW,iBACRA,EAAgBC,gBAChBA,GAAkB,IAOlB,MAAOC,EAAWC,GAAgB5P,EAAQA,SAAC0P,GACrCG,EAAOL,QAAAA,EAAYG,EAOzB,OAAO9oB,UAACC,cAAAwoB,GAAiB3C,UAASxgB,MAAO,CAAC0jB,EAL1C,WACEJ,SAAAA,GAAoBI,GACpBD,GAAcC,EACf,IAEyD3W,EAC5D,CAEA,SAAS4W,KACP,MAAMvJ,EAAU1f,EAAAA,QAAMmlB,WAAWsD,IACjC,IAAK/I,EACH,MAAM,IAAI6C,MAAM,gEAElB,OAAO7C,CACT,CCfA,MAAMd,GAAgBnf,EAAAA,QAAOmnB,OAA0B;gBACvC9mB,EAAAA,SAAM;;MAEhBmR,cAAY,CACZ,sBAAuBQ,EAASA,UAAC,CAAEuX,MAAM,IACzC,eAAgBvX,EAASA,UAAC,CAAEuX,MAAM;mBAErBlpB,EAAAA,SAAM;;IAErBkW,EAAS;oBACOlW,EAAAA,SAAM;;EAIpBopB,GAAezpB,EAAAA,QAAOgW,MAAyB;IACjD6C,GAAK,CACL/X,OAAQ;;IAGRZ;;;;;;;eAOWG,EAAAA,SAAM;iBACJmR,cAAY,CACzB,sBAAuBQ,EAASA,UAAC,CAAEuX,MAAM,IACzC,mBAAoBvX,EAASA,UAAC,CAAEuX,MAAM;;;;;WAM/BlpB,EAAAA,SAAM;;sBAEKA,EAAAA,SAAM;mBACTA,EAAAA,SAAM;;;;aAIZA,EAAAA,SAAM,cAAcA,EAAKoQ,SAAC;;;;IAInC8F,EAAS;kBACKlW,EAAAA,SAAM;;;IAGpBmW,EAAS;kBACKnW,EAAAA,SAAM;;EAIlBqpB,GAAgB1pB,EAAAA,QAAO0oB,OAA0B;IACnD7P,GAAK,CACL/X,OAAQ,gBACRwP,OAAQ;;kBAGMkB,cAAY,CAC1B,EAAKQ,EAASA,UAAC,CAAEuX,MAAM,IACvB,UAAWvX,EAASA,UAAC,CAAEuX,MAAM;mBAEd/X,cAAY,CAC3B,EAAKQ,EAASA,UAAC,CAAEuX,MAAM,IACvB,UAAWvX,EAASA,UAAC,CAAEuX,MAAM;iBAEhB/X,cAAY,CACzB,EAAKQ,EAASA,UAAC,CAAEuX,MAAM,IACvB,WAAYvX,EAASA,UAAC,CAAEuX,MAAM;oBAEd/X,cAAY,CAC5B,EAAKQ,EAASA,UAAC,CAAEuX,MAAM,IACvB,UAAWvX,EAASA,UAAC,CAAEuX,MAAM;;;;EAO3BI,GAAc3pB,EAAAA,QAAOkZ,KAAK;IAC5BuO;;sBAEkBiC;;;;gBAINA;;;EAKVhU,GAAa1V,EAAAA,QAAOC,IAAI;;;;;;;EASxB2V,GAAU5V,EAAAA,QAAO0V,GAAW;cACpBrV,EAAAA,SAAM;EAGdwV,GAAW7V,EAAAA,QAAO0V,GAAW;;EAI7BI,GAAW9V,EAAAA,QAAOC,IAAI;;;IpC3HnB;EoCiIT,SAAS2pB,IAAgBL,KAAEA,IACzB,OAAOhpB,wBAACkC,GAAI,CAAC9B,KAAM4oB,EAAO,QAAU,OAAQ3oB,KAAM,IACpD,CAEA,SAASipB,GAAiBrU,GAAA,IAAA5C,SACxBA,GAE+C4C,EAD5CmC,EAAMzW,EAAAA,OAAAsU,EAFe,cAIxB,MAAO+T,GAAQC,KACf,OACEjpB,EAAA,QAAAC,cAAC2e,GAAa5d,OAAAC,OAAA,CAAA,cAAa,YAAY+nB,KAAMA,GAAU5R,GACpD/E,EAGP,CA8DA,SAASkX,GAAUtU,GAAA,IAAA5C,SACjBA,EAAQsW,SACRA,EAAQE,gBACRA,EAAeD,iBACfA,GAAgB3T,EACbmC,EALczW,EAAAA,OAAAsU,EAAA,CAAA,WAAA,WAAA,kBAAA,qBAOjB,OACEjV,EAAA,QAAAC,cAACyoB,GAAiB,CAChBC,SAAUA,EACVE,gBAAiBA,EACjBD,iBAAkBA,GAElB5oB,UAACC,cAAAqpB,oBAAqBlS,GAAS/E,GAGrC,CAEAkX,GAAUhE,OAzEV,UAAyBtO,QACvBA,EACAC,SAAUsS,EAAanX,SACvBA,IAEA,MAAO2W,EAAM3I,GAAU4I,KAEjB/R,OAA6BnS,IAAlBykB,EAA8BxpB,UAAAC,cAACopB,GAAgB,CAAAL,KAAMA,IAAWQ,EAEjF,OACExpB,UAACC,cAAAipB,GAAa,CAAAF,KAAMA,EAAMvK,QAAS4B,EAAQ1a,KAAK,uBAAqB,oBAClEsR,GACCjX,EAAAA,QAACC,cAAAoV,kBAAoB,4BAClBxP,EAAUA,WAACoR,GAAWA,EAAQ+R,GAAQ/R,GAG3CjX,EAAAA,QAACC,cAAAsV,GAAU,KAAAlD,GACV6E,GACClX,EAAA,QAAAC,cAACqV,GAAQ,CAAA,cAAa,6BACnBzP,EAAUA,WAACqR,GAAYA,EAAS8R,GAAQ9R,GAKnD,EAkDAqS,GAAUE,KA9CV,SAAuBxU,GAAA,IAAA5C,SAAEA,GAA2D4C,EAA9CrV,EAAKe,EAAAA,OAAAsU,EAApB,cACrB,MAAO+T,GAAQC,KAEf,OACEjpB,wBAAC4W,EAAAA,SAAQ,KACP5W,UAAAC,cAACmpB,GAAW,CAACzjB,KAAK,WAAWmiB,QAASkB,EAAMnG,SAAUyB,EAAAA,WACtDtkB,UAACC,cAAAkpB,kBACCH,KAAMA,EACNxoB,UAAWwX,GAAK,CACd,UAAWgR,IACX,cACYA,EAAgB,QAAT,OACT,cAAA,qBACRppB,GAEHyS,GAIT,EC1KA,MAAMqX,GAAcjqB,EAAAA,QAAOmS,GAAG;WACnB9R,EAAAA,SAAM;eACFA,EAAAA,SAAM;iBACJA,EAAAA,SAAM;;EAIjB0oB,GAAQ/oB,EAAAA,QAAOmS,GAAiB;iBACrB9R,EAAAA,SAAM;eACRA,EAAAA,SAAM;iBACJA,EAAAA,SAAM;;EAIjB6pB,GAAclqB,EAAAA,QAAOmS,GAA+B;;;;;mBAKvCX,cAAY,CAC3B,WAAYQ,EAASA,UAAC,CAAEmY,cAAc;EAIpCC,GAAepqB,EAAAA,QAAOmS,GAAqC;;;;eAIlDX,cAAY,CACvB6Y,KAAMrY,EAASA,UAAC,CAAEuF,MAAO,YACzB,UAAWvF,EAASA,UAAC,CAAEuF,MAAO;;eAGnBlX,EAAAA,SAAM;;gBAELmR,cAAY,CACxB,wBAAyBQ,EAASA,UAAC,CAAEuF,MAAO;aAEnC/F,cAAY,CACnB,2BAA4BQ,EAASA,UAAC,CAAEuF,MAAO,YAC/C,uBAAwBvF,EAASA,UAAC,CAAEuF,MAAO;MAE3C/F,cAAY,CACZ,2BAA4BQ,EAASA,UAAC,CAAEuF,MAAO,YAC/C,uBAAwBvF,EAASA,UAAC,CAAEuF,MAAO;;WAGtC/F,cAAY,CACnB,6BAA8BQ,EAASA,UAAC,CAAEX,QAAS,YACnD,4BAA6BW,EAASA,UAAC,CAAEX,QAAS,WAClD,6BAA8BW,EAASA,UAAC,CAAEX,QAAS,YACnD,6BAA8BW,EAASA,UAAC,CAAEX,QAAS;;gBAGvCG,cAAY,CACxB,4BAA6BQ,EAASA,UAAC,CAAEX,QAAS,YAClD,4BAA6BW,EAASA,UAAC,CAAEX,QAAS,YAClD,2BAA4BW,EAASA,UAAC,CAAEX,QAAS,WACjD,4BAA6BW,EAASA,UAAC,CAAEX,QAAS;;kBAGpCG,cAAY,CAC1B,8BAA+BQ,EAASA,UAAC,CAAEX,QAAS,YACpD,8BAA+BW,EAASA,UAAC,CAAEX,QAAS,YACpD,6BAA8BW,EAASA,UAAC,CAAEX,QAAS,WACnD,8BAA+BW,EAASA,UAAC,CAAEX,QAAS;;kBAGtChR,EAAAA,SAAM;;mBAELA,EAAAA,SAAM;EAGZ2X,GAAchY,EAAAA,QAAOsqB,GAAmB;;SAE5C9Y,cAAY,CACjB,2BAA4BQ,EAASA,UAAC,CAAEuF,MAAO,YAC/C,yBAA0BvF,EAASA,UAAC,CAAEuF,MAAO;WAEtC/F,cAAY,CACnB,6BAA8BQ,EAASA,UAAC,CAAEuF,MAAO,YACjD,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO;;WAGxClX,EAAAA,SAAM;YACLA,EAAAA,SAAM;EAGZkqB,GAAcvqB,EAAAA,QAAOC,IAAuB;;;;gBAIlCuR,cAAY,CACxB,gCAAiCQ,EAASA,UAAC,CAAEuF,MAAO,YACpD,8BAA+BvF,EAASA,UAAC,CAAEuF,MAAO;;;kBAIpClX,EAAAA,SAAM;EAGXoC,GAAOzC,EAAAA,QAAOwqB,GAAY;WAC5BnqB,EAAAA,SAAM;YACLA,EAAAA,SAAM;EAGZuX,GAAS5X,EAAAA,QAAOoX,GAAW;;gBAEjB/W,EAAAA,SAAM;iBACLmR,cAAY,CACzB,EAAKQ,EAASA,UAAC,CAAEX,QAAS,YAC1B,sCAAuCW,EAASA,UAAC,CAAEX,QAAS;;WAGrDG,cAAY,CACnB,2BAA4BQ,EAASA,UAAC,CAAEX,QAAS,YACjD,kCAAmCW,EAASA,UAAC,CAAEX,QAAS,YAAatQ,UAAW,WAChF,mCAAoCiR,EAASA,UAAC,CAAEX,QAAS,YAAatQ,UAAW,YACjF,mCAAoCiR,EAASA,UAAC,CAAEX,QAAS,YAAatQ,UAAW,YACjF,mCAAoCiR,EAASA,UAAC,CAAEX,QAAS,YAAatQ,UAAW;;sBAG/DyQ,cAAY,CAC9B,mCAAoCQ,EAASA,UAAC,CAAEX,QAAS,UAAWtQ,UAAW,YAC/E,kCAAmCiR,EAASA,UAAC,CAAEX,QAAS,UAAWtQ,UAAW,WAC9E,mCAAoCiR,EAASA,UAAC,CAAEX,QAAS,UAAWtQ,UAAW,YAC/E,mCAAoCiR,EAASA,UAAC,CAAEX,QAAS,UAAWtQ,UAAW,YAC/E,qCAAsCiR,EAASA,UAAC,CAAEX,QAAS;;kBAG7CG,cAAY,CAC1B,mCAAoCQ,EAASA,UAAC,CAAEjR,UAAW,YAC3D,kCAAmCiR,EAASA,UAAC,CAAEjR,UAAW,WAC1D,mCAAoCiR,EAASA,UAAC,CAAEjR,UAAW,YAC3D,mCAAoCiR,EAASA,UAAC,CAAEjR,UAAW;EAGzD0pB,GAAezqB,EAAAA,QAAO4X,GAAO;;;EAK7B8S,GAAgB1qB,EAAAA,QAAOmS,GAAG;;iBAEf9R,EAAAA,SAAM;;;EAKjBsqB,GAAqB3qB,EAAAA,QAAOmS,GAAG;;;EAK/ByY,GAAc5qB,EAAAA,QAAOmS,GAAG;;;kBAGZ9R,EAAAA,SAAM;EAGlBwqB,GAAe,CAACxZ,EAAiBkG,EAAeuT,KACpD,GAAIA,EACF,OAAOvqB,EAAAA,QAAAC,cAAC+pB,GAAY,CAAAhT,MAAOA,GAAQuT,GAGrC,IAAIC,EAAW,GACf,OAAQ1Z,GACN,IAAK,UACH0Z,EAAW,QACX,MACF,IAAK,SACL,IAAK,UACHA,EAAW,UACX,MACF,QACEA,EAAW,cAGf,OACExqB,EAAC,QAAAC,cAAA+pB,GAAY,CAAAhT,MAAOA,GAClBhX,UAAAC,cAACiC,GAAI,CAAC9B,KAAMoqB,EAAUnqB,KAAM,KAE/B,EC5MH,IAAAoqB,GAAehrB,EAAM,QAACC,IAAe;IACjC,EAAGoR,UAASI,SAAQzQ,WAAYoQ,GAAWC,EAAS,CAAEI,SAAQzQ;ECqBlE,MAAMiqB,GAAejrB,EAAAA,QAAOmS,GAAsB;;;;;aAKrC9R,EAAAA,SAAM;;aAENmR,cAAY,CACrB0Z,KAAMlZ,EAASA,UAAC,CAAEuX,MAAM,IACxBlC,KAAMrV,EAASA,UAAC,CAAEuX,MAAM;;;;;;;gBAQZlpB,EAAAA,SAAM;EAGhB8qB,GAAgBnrB,EAAAA,QAAOmS,GAAG;;;;;YAKpB9R,EAAAA,SAAM;mBACCA,EAAAA,SAAM;oBACLA,EAAAA,SAAM;;6BAEGA,EAAAA,SAAM;EAE7B+qB,GAAQprB,EAAM,QAACgY,IAAanB,MAAM,CACtCjW,KAAM,IACN;;SAEO+U,EAAAA,IAAI;WACFA,EAAAA,IAAI;EAGT0V,GAAUrrB,EAAAA,QAAOmS,GAAiB;;mBAErB9R,EAAAA,SAAM;gBACTA,EAAAA,SAAM;;aAETA,EAAAA,SAAM;;;;;;;;aAQNA,EAAAA,SAAM;;IAEf,EAAGirB,gBACHA,GACA9a,EAAAA,GAAG;;;;;;;;;IASH,EAAG8a,iBACFA,GACD9a,EAAAA,GAAG;;;;;mBAKYgB,cAAY,CACvB,wBAAyBQ,EAASA,UAAC,CAAEuF,MAAO,UAC5C,kBAAmBvF,EAASA,UAAC,CAAEuF,MAAO,YACtC,wBAAyBvF,EAASA,UAAC,CAAEuF,MAAO;;;EAmBpD,SAASgU,GAAM/V,OAAA+B,MACbA,EAAQ,UAAS3E,SACjBA,EAAQ2W,KACRA,EAAI+B,WACJA,GAAa,EAAKE,eAClBA,EAAiB,KAAM,SACpB7T,EANUzW,EAAAA,OAAAsU,EAAA,CAAA,QAAA,WAAA,OAAA,aAAA,mBAQb,OAAOiW,EAAAA,QAASC,aACdnrB,wBAAC0qB,GAAY1pB,OAAAC,OAAA,CACX+nB,KAAMA,EACN+B,WAAYA,EACZtM,QAASwM,EAAc,cACX,iBACR7T,GAEJpX,EAAAA,QAACC,cAAA6qB,IACC5V,KAAK,SACM,aAAA,OACX6V,WAAYA,EACZ/T,MAAOA,EACPyH,QAAUvV,IACRA,EAAEkiB,iBAAiB,GAGpB/Y,IAGLgZ,SAAS9a,KAEb,CAEAya,GAAMM,OA7CS,EAAGC,QAAOlZ,cAErBrS,wBAAC4qB,GAAa,KACXW,GACCvrB,EAAC,QAAAC,cAAAurB,IAAK1a,QAAQ,kBAAkBrQ,MAAM,yBACnC8qB,GAGJlZ,GAsCP2Y,GAAMH,MAAQA,GCzId,MAAMS,GAAS7rB,EAAAA,QAAOgsB,EAAE;oBACJ3rB,EAAAA,SAAM;;WAEfA,EAAAA,SAAM;iBACAA,EAAAA,SAAM;eACRA,EAAAA,SAAM;iBACJA,EAAAA,SAAM;;;6BAGMA,EAAAA,SAAM;EAE7B2pB,GAAOhqB,EAAAA,QAAOmS,GAAG;gBACP9R,EAAAA,SAAM;mBACHA,EAAAA,SAAM;;WAEdA,EAAAA,SAAM;eACFA,EAAAA,SAAM;iBACJA,EAAAA,SAAM;;EAIjB4rB,GAAgBjsB,EAAAA,QAAOmS,GAAG;;;qBAGX9R,EAAAA,SAAM;;EAIrB+qB,GAAQprB,EAAM,QAACurB,GAAMH,MAAM;SACxB/qB,EAAAA,SAAM;WACJsV,EAAAA,IAAI;EAGTuW,GAAsBlsB,EAAAA,QAAOmS,GAA2C;;eAE/DX,cAAY,CACvB,cAAeQ,EAASA,UAAC,CAAEma,WAAY,eACvCnF,OAAQhV,EAASA,UAAC,CAAEma,WAAY;qBAEf3a,cAAY,CAC7BY,OAAQJ,EAASA,UAAC,CAAEiE,OAAQ,UAC5B6L,IAAK9P,EAASA,UAAC,CAAEiE,OAAQ,CAAC,UAAW;;IAGrCgW;oBACgBza,cAAY,CAC1B,UAAWQ,EAASA,UAAC,CAAEma,WAAY,eACnCC,QAASpa,EAASA,UAAC,CAAEma,WAAY;;EAyDvC,SAASE,GAAO7W,OAAA+B,MAAEA,EAAQ,UAASgS,KAAEA,KAAS5R,EAA9BzW,EAAAA,OAAAsU,EAAA,CAAA,QAAA,SACd,OAAOjV,EAAC,QAAAC,cAAA+qB,GAAMhqB,OAAAC,OAAA,CAAA+nB,KAAMA,EAAMhS,MAAOA,GAAWI,GAC9C,CCzHA,SAAS2U,IAAY/C,KAAMgD,EAAQC,OAAEA,EAAMC,QAAEA,IAM3C,MAAOlD,EAAMmD,GAAWhT,EAAQA,SAAC6S,GAE3BI,EAAO3S,eACX,WACE0S,GAAQ,GACRF,SAAAA,GACF,GACA,CAACA,IAGGI,EAAO5S,eACX,WACE0S,GAAQ,GACRD,SAAAA,GACF,GACA,CAACA,IAGG7L,EAAS5G,eACb,WACMuP,EACFqD,IAEAD,GAEH,GACD,CAACC,EAAMrD,EAAMoD,IAUf,OAPAzS,EAASA,WACP,WACEwS,EAAQH,EACV,GACA,CAACA,IAGI,CACLhD,OACAoD,OACAC,OACAhM,SAEJ,CCxDA,SAASiM,GAAaC,GACpB,OAAOA,EAAU1Q,MAAM,KAAK,EAC9B,CAEA,SAAS2Q,GAAkBC,GACzB,MAAgB,MAATA,EAAe,SAAW,OACnC,CAEA,SAASC,GAAQH,GACf,OAAOA,EAAU1Q,MAAM,KAAK,EAC9B,CAEA,SAAS8Q,GAAyBJ,GAChC,MAAO,CAAC,MAAO,UAAUnd,SAASsd,GAAQH,IAAc,IAAM,GAChE,CAEA,SAASK,GAA2BC,EAAMN,EAAWO,GACnD,IAAIC,UACFA,EAASC,SACTA,GACEH,EACJ,MAAMI,EAAUF,EAAU7U,EAAI6U,EAAUzsB,MAAQ,EAAI0sB,EAAS1sB,MAAQ,EAC/D4sB,EAAUH,EAAUjV,EAAIiV,EAAUxsB,OAAS,EAAIysB,EAASzsB,OAAS,EACjE4sB,EAAWR,GAAyBJ,GACpC9qB,EAAS+qB,GAAkBW,GAC3BC,EAAcL,EAAUtrB,GAAU,EAAIurB,EAASvrB,GAAU,EAEzD4rB,EAA0B,MAAbF,EACnB,IAAIG,EACJ,OAHaZ,GAAQH,IAInB,IAAK,MACHe,EAAS,CACPpV,EAAG+U,EACHnV,EAAGiV,EAAUjV,EAAIkV,EAASzsB,QAE5B,MACF,IAAK,SACH+sB,EAAS,CACPpV,EAAG+U,EACHnV,EAAGiV,EAAUjV,EAAIiV,EAAUxsB,QAE7B,MACF,IAAK,QACH+sB,EAAS,CACPpV,EAAG6U,EAAU7U,EAAI6U,EAAUzsB,MAC3BwX,EAAGoV,GAEL,MACF,IAAK,OACHI,EAAS,CACPpV,EAAG6U,EAAU7U,EAAI8U,EAAS1sB,MAC1BwX,EAAGoV,GAEL,MACF,QACEI,EAAS,CACPpV,EAAG6U,EAAU7U,EACbJ,EAAGiV,EAAUjV,GAGnB,OAAQwU,GAAaC,IACnB,IAAK,QACHe,EAAOH,IAAaC,GAAeN,GAAOO,GAAc,EAAI,GAC5D,MACF,IAAK,MACHC,EAAOH,IAAaC,GAAeN,GAAOO,GAAc,EAAI,GAGhE,OAAOC,CACT,CF8DAxB,GAAOR,OAASA,GAChBQ,GAAOrC,KAAOA,GACdqC,GAAOyB,cAtCP,SAA6BtY,GAAA,IAAAuY,UAC3BA,EAAY,MAAY,GAAAnb,SACxBA,EAAW,WAEc4C,EADtBmC,EAAMzW,EAAAA,OAAAsU,EAHkB,0BAK3B,OACEjV,wBAAC0rB,GAAa,KACZ1rB,EAAA,QAAAC,cAACoX,GAAWrW,OAAAC,OAAA,CAAA,EAAAmW,EAAQ,CAAAqH,QAAS+O,EAAW1c,QAAQ,YAC7CuB,GAIT,EA2BAyZ,GAAO2B,aArBP,SAA4BxY,GAAA,IAAAyY,SAC1BA,EAAW,MAAY,GAAArb,SACvBA,EAAW,UAEa4C,EADrBmC,EAAMzW,EAAAA,OAAAsU,EAHiB,yBAK1B,OACEjV,wBAAC0rB,GAAa,KACZ1rB,EAAA,QAAAC,cAACoX,GAAWrW,OAAAC,OAAA,CAAA,EAAAmW,EAAQ,CAAAqH,QAASiP,EAAU5c,QAAQ,cAC5CuB,GAIT,EAUAyZ,GAAO6B,QA5DP,UAAuB3W,MACrBA,EAAQ,UAASuP,UACjBA,EAAY,WAAUlU,SACtBA,IAMA,OACErS,EAAC,QAAAC,cAAA0rB,GAA4B,CAAAjW,OAAAsB,EAAmB4U,WAAArF,GAC7ClU,EAGP,EA+CAyZ,GAAOjB,MAAQA,GEqCf,SAAS+C,GAAyBta,GAChC,MAA0B,iBAAZA,EAXhB,SAA6BA,GAC3B,MAAO,CACLua,IAAK,EACLjb,MAAO,EACPkb,OAAQ,EACRpb,KAAM,KACHY,EAEP,CAGuCya,CAAoBza,GAAW,CAClEua,IAAKva,EACLV,MAAOU,EACPwa,OAAQxa,EACRZ,KAAMY,EAEV,CAEA,SAAS0a,GAAiBC,GACxB,MAAO,IACFA,EACHJ,IAAKI,EAAKnW,EACVpF,KAAMub,EAAK/V,EACXtF,MAAOqb,EAAK/V,EAAI+V,EAAK3tB,MACrBwtB,OAAQG,EAAKnW,EAAImW,EAAK1tB,OAE1B,CAUA2tB,eAAeC,GAAe9K,EAAOjkB,GACnC,IAAIgvB,OACY,IAAZhvB,IACFA,EAAU,CAAA,GAEZ,MAAM8Y,EACJA,EAACJ,EACDA,EAACuW,SACDA,EAAQC,MACRA,EAAKC,SACLA,EAAQxL,SACRA,GACEM,GACEmL,SACJA,EAAW,oBAAmBC,aAC9BA,EAAe,WAAUC,eACzBA,EAAiB,WAAUC,YAC3BA,GAAc,EAAKrb,QACnBA,EAAU,GACRlU,EACEwvB,EAAgBhB,GAAyBta,GAEzC/I,EAAUgkB,EAASI,EADa,aAAnBD,EAAgC,YAAc,WACbA,GAC9CG,EAAqBb,SAAuBK,EAASS,gBAAgB,CACzEvkB,QAAiH,OAAtG6jB,QAAqD,MAAtBC,EAASU,eAAoB,EAASV,EAASU,UAAUxkB,MAAqB6jB,EAAgC7jB,EAAUA,EAAQykB,sBAAyD,MAA/BX,EAASY,wBAA6B,EAASZ,EAASY,mBAAmBV,EAASvB,WACxRwB,WACAC,eACA1L,cAEIkL,EAA0B,aAAnBS,EAAgC,IACxCJ,EAAMtB,SACT9U,IACAJ,KACEwW,EAAMvB,UACJmC,QAAkD,MAA5Bb,EAASc,qBAA0B,EAASd,EAASc,gBAAgBZ,EAASvB,WACpGoC,QAA4C,MAAtBf,EAASU,eAAoB,EAASV,EAASU,UAAUG,WAA+C,MAArBb,EAASgB,cAAmB,EAAShB,EAASgB,SAASH,KAGlK,CACFhX,EAAG,EACHJ,EAAG,GAECwX,EAAoBtB,GAAiBK,EAASkB,4DAA8DlB,EAASkB,sDAAsD,CAC/KtB,OACAiB,eACAnM,aACGkL,GACL,MAAO,CACLJ,KAAMgB,EAAmBhB,IAAMyB,EAAkBzB,IAAMe,EAAcf,KAAOuB,EAAYtX,EACxFgW,QAASwB,EAAkBxB,OAASe,EAAmBf,OAASc,EAAcd,QAAUsB,EAAYtX,EACpGpF,MAAOmc,EAAmBnc,KAAO4c,EAAkB5c,KAAOkc,EAAclc,MAAQ0c,EAAYlX,EAC5FtF,OAAQ0c,EAAkB1c,MAAQic,EAAmBjc,MAAQgc,EAAchc,OAASwc,EAAYlX,EAEpG,CAEA,MAAMsX,GAAMljB,KAAKkjB,IACXjjB,GAAMD,KAAKC,IAEjB,SAASkjB,GAAOC,EAAOpqB,EAAOqqB,GAC5B,OAAOpjB,GAAImjB,EAAOF,GAAIlqB,EAAOqqB,GAC/B,CAOA,MAAMC,GAAQxwB,IAAY,CACxBgB,KAAM,QACNhB,UACA8uB,SAAS7K,GAEP,MAAM9Y,QACJA,EAAO+I,QACPA,EAAU,GACRlU,GAAW,CAAA,GACT8Y,EACJA,EAACJ,EACDA,EAACyU,UACDA,EAAS+B,MACTA,EAAKD,SACLA,EAAQE,SACRA,GACElL,EACJ,GAAe,MAAX9Y,EACF,MAAO,GAET,MAAMqkB,EAAgBhB,GAAyBta,GACzCga,EAAS,CACbpV,IACAJ,KAEI2U,EAAOE,GAAyBJ,GAChC9qB,EAAS+qB,GAAkBC,GAC3BoD,QAAwBxB,EAASyB,cAAcvlB,GAC/CwlB,EAAmB,MAATtD,EACVuD,EAAUD,EAAU,MAAQ,OAC5BE,EAAUF,EAAU,SAAW,QAC/BG,EAAaH,EAAU,eAAiB,cACxCI,EAAU7B,EAAMvB,UAAUtrB,GAAU6sB,EAAMvB,UAAUN,GAAQa,EAAOb,GAAQ6B,EAAMtB,SAASvrB,GAC1F2uB,EAAY9C,EAAOb,GAAQ6B,EAAMvB,UAAUN,GAC3C4D,QAAuD,MAA5BhC,EAASc,qBAA0B,EAASd,EAASc,gBAAgB5kB,IACtG,IAAI+lB,EAAaD,EAAoBA,EAAkBH,GAAc,EAGhEI,SAA6C,MAAtBjC,EAASU,eAAoB,EAASV,EAASU,UAAUsB,MACnFC,EAAa/B,EAASvB,SAASkD,IAAe5B,EAAMtB,SAASvrB,IAE/D,MAAM8uB,EAAoBJ,EAAU,EAAIC,EAAY,EAI9CZ,EAAMZ,EAAcoB,GACpBzjB,EAAM+jB,EAAaT,EAAgBpuB,GAAUmtB,EAAcqB,GAC3Dpe,EAASye,EAAa,EAAIT,EAAgBpuB,GAAU,EAAI8uB,EACxDhsB,EAASkrB,GAAOD,EAAK3d,EAAQtF,GAM7BikB,EAA6C,MAA3BlE,GAAaC,IAAsB1a,GAAUtN,GAAU+pB,EAAMvB,UAAUtrB,GAAU,GAAKoQ,EAAS2d,EAAMZ,EAAcoB,GAAWpB,EAAcqB,IAAYJ,EAAgBpuB,GAAU,EAAI,EAE9M,MAAO,CACLgrB,CAACA,GAAOa,EAAOb,IAFO+D,EAAkB3e,EAAS2d,EAAMA,EAAM3d,EAAStF,EAAMsF,EAAS,GAGrFtD,KAAM,CACJke,CAACA,GAAOloB,EACRksB,aAAc5e,EAAStN,GAG5B,IAMGmsB,GAAkB,CACtBhe,KAAM,QACNE,MAAO,OACPkb,OAAQ,MACRD,IAAK,UAEP,SAAS8C,GAAqBpE,GAC5B,OAAOA,EAAU5kB,QAAQ,0BAA0BipB,GAAQF,GAAgBE,IAC7E,CAmBA,MAAMC,GAAuB,CAC3B7hB,MAAO,MACPuS,IAAK,SAEP,SAASuP,GAA8BvE,GACrC,OAAOA,EAAU5kB,QAAQ,cAAcopB,GAAaF,GAAqBE,IAC3E,CAoJA,MAAMC,GAAO,SAAU5xB,GAIrB,YAHgB,IAAZA,IACFA,EAAU,CAAA,GAEL,CACLgB,KAAM,OACNhB,UACA8uB,SAAS7K,GACP,IAAI4N,EACJ,MAAM1E,UACJA,EAAS2E,eACTA,EAAc5C,MACdA,EAAK6C,iBACLA,EAAgB9C,SAChBA,EAAQE,SACRA,GACElL,GAEF8J,SAAUiE,GAAgB,EAC1BC,UAAWC,GAAiB,EAC5BC,mBAAoBC,EAA2BC,iBAC/CA,EAAmB,UAASC,0BAC5BA,EAA4B,OAAMC,cAClCA,GAAgB,KACbC,GACDxyB,EACEwxB,EAAOlE,GAAQH,GACfsF,EAAkBnF,GAAQyE,KAAsBA,EAChDrE,QAA+B,MAAlBuB,EAASyD,WAAgB,EAASzD,EAASyD,MAAMvD,EAASvB,WACvEuE,EAAqBC,IAAgCK,IAAoBF,EAAgB,CAAChB,GAAqBQ,IArE3H,SAA+B5E,GAC7B,MAAMwF,EAAoBpB,GAAqBpE,GAC/C,MAAO,CAACuE,GAA8BvE,GAAYwF,EAAmBjB,GAA8BiB,GACrG,CAkEgJC,CAAsBb,IAC3JK,GAA6D,SAA9BE,GAClCH,EAAmB9jB,QAjD3B,SAAmC8e,EAAWoF,EAAepL,EAAWuG,GACtE,MAAMiE,EAAYzE,GAAaC,GAC/B,IAAI0F,EAnBN,SAAqBrB,EAAMsB,EAASpF,GAClC,MAAMqF,EAAK,CAAC,OAAQ,SACdC,EAAK,CAAC,QAAS,QACfC,EAAK,CAAC,MAAO,UACbC,EAAK,CAAC,SAAU,OACtB,OAAQ1B,GACN,IAAK,MACL,IAAK,SACH,OAAI9D,EAAYoF,EAAUE,EAAKD,EACxBD,EAAUC,EAAKC,EACxB,IAAK,OACL,IAAK,QACH,OAAOF,EAAUG,EAAKC,EACxB,QACE,MAAO,GAEb,CAGaC,CAAY7F,GAAQH,GAA0B,UAAdhG,EAAuBuG,GAOlE,OANIiE,IACFkB,EAAOA,EAAK9xB,KAAIywB,GAAQA,EAAO,IAAMG,IACjCY,IACFM,EAAOA,EAAKtnB,OAAOsnB,EAAK9xB,IAAI2wB,OAGzBmB,CACT,CAuCmCO,CAA0BrB,EAAkBQ,EAAeD,EAA2B5E,IAEnH,MAAM2F,EAAa,CAACtB,KAAqBI,GACnCmB,QAAiBvE,GAAe9K,EAAOuO,GACvCe,EAAY,GAClB,IAAIC,GAAiE,OAA/C3B,EAAuBC,EAAeF,WAAgB,EAASC,EAAqB0B,YAAc,GAIxH,GAHIvB,GACFuB,EAAUllB,KAAKilB,EAAS9B,IAEtBU,EAAgB,CAClB,MAAMuB,KACJA,EAAIC,MACJA,GAtNV,SAA2BvG,EAAW+B,EAAOxB,QAC/B,IAARA,IACFA,GAAM,GAER,MAAMiE,EAAYzE,GAAaC,GACzBY,EAAWR,GAAyBJ,GACpC9qB,EAAS+qB,GAAkBW,GACjC,IAAI4F,EAAiC,MAAb5F,EAAmB4D,KAAejE,EAAM,MAAQ,SAAW,QAAU,OAAuB,UAAdiE,EAAwB,SAAW,MAIzI,OAHIzC,EAAMvB,UAAUtrB,GAAU6sB,EAAMtB,SAASvrB,KAC3CsxB,EAAoBpC,GAAqBoC,IAEpC,CACLF,KAAME,EACND,MAAOnC,GAAqBoC,GAEhC,CAwMYC,CAAkBzG,EAAW+B,EAAOxB,GACxC6F,EAAUllB,KAAKilB,EAASG,GAAOH,EAASI,GACzC,CAOD,GANAF,EAAgB,IAAIA,EAAe,CACjCrG,YACAoG,eAIGA,EAAUM,OAAMrC,GAAQA,GAAQ,IAAI,CACvC,IAAIsC,EAAuBC,EAC3B,MAAMC,IAA+D,OAAhDF,EAAwBhC,EAAeF,WAAgB,EAASkC,EAAsB5uB,QAAU,GAAK,EACpH+uB,EAAgBZ,EAAWW,GACjC,GAAIC,EAEF,MAAO,CACL9kB,KAAM,CACJjK,MAAO8uB,EACPT,UAAWC,GAEbU,MAAO,CACL/G,UAAW8G,IAOjB,IAAIE,EAAgJ,OAA9HJ,EAAwBP,EAAcvX,QAAO/Y,GAAKA,EAAEqwB,UAAU,IAAM,IAAGtvB,MAAK,CAACya,EAAG0V,IAAM1V,EAAE6U,UAAU,GAAKa,EAAEb,UAAU,KAAI,SAAc,EAASQ,EAAsB5G,UAG1L,IAAKgH,EACH,OAAQ9B,GACN,IAAK,UACH,CACE,IAAIgC,EACJ,MAAMlH,EAAyM,OAA5LkH,EAAwBb,EAAczyB,KAAImC,GAAK,CAACA,EAAEiqB,UAAWjqB,EAAEqwB,UAAUtX,QAAOqX,GAAYA,EAAW,IAAGtQ,QAAO,CAACC,EAAKqQ,IAAarQ,EAAMqQ,GAAU,MAAKrvB,MAAK,CAACya,EAAG0V,IAAM1V,EAAE,GAAK0V,EAAE,KAAI,SAAc,EAASC,EAAsB,GACjPlH,IACFgH,EAAiBhH,GAEnB,KACD,CACH,IAAK,mBACHgH,EAAiBpC,EAIvB,GAAI5E,IAAcgH,EAChB,MAAO,CACLD,MAAO,CACL/G,UAAWgH,GAIlB,CACD,MAAO,EACR,EAEL,EA0PA,MAAMhvB,GAAS,SAAUe,GAIvB,YAHc,IAAVA,IACFA,EAAQ,GAEH,CACLlF,KAAM,SACNhB,QAASkG,EACT4oB,SAAS7K,GACP,MAAMnL,EACJA,EAACJ,EACDA,GACEuL,EACEqQ,QA5DZxF,eAAoC7K,EAAO/d,GACzC,MAAMinB,UACJA,EAAS8B,SACTA,EAAQE,SACRA,GACElL,EACEyJ,QAA+B,MAAlBuB,EAASyD,WAAgB,EAASzD,EAASyD,MAAMvD,EAASvB,WACvE4D,EAAOlE,GAAQH,GACfwE,EAAYzE,GAAaC,GACzBc,EAAqD,MAAxCV,GAAyBJ,GACtCoH,EAAgB,CAAC,OAAQ,OAAOvkB,SAASwhB,IAAS,EAAI,EACtDgD,EAAiB9G,GAAOO,GAAc,EAAI,EAC1CwG,EAA4B,mBAAVvuB,EAAuBA,EAAM+d,GAAS/d,EAG9D,IAAI6nB,SACFA,EAAQkE,UACRA,EAASyC,cACTA,GACsB,iBAAbD,EAAwB,CACjC1G,SAAU0G,EACVxC,UAAW,EACXyC,cAAe,MACb,CACF3G,SAAU,EACVkE,UAAW,EACXyC,cAAe,QACZD,GAKL,OAHI9C,GAAsC,iBAAlB+C,IACtBzC,EAA0B,QAAdN,GAAuC,EAAjB+C,EAAqBA,GAElDzG,EAAa,CAClBnV,EAAGmZ,EAAYuC,EACf9b,EAAGqV,EAAWwG,GACZ,CACFzb,EAAGiV,EAAWwG,EACd7b,EAAGuZ,EAAYuC,EAEnB,CAqB+BG,CAAqB1Q,EAAO/d,GACrD,MAAO,CACL4S,EAAGA,EAAIwb,EAAWxb,EAClBJ,EAAGA,EAAI4b,EAAW5b,EAClBvJ,KAAMmlB,EAET,EAEL,EAWA,MAAMM,GAAQ,SAAU50B,GAItB,YAHgB,IAAZA,IACFA,EAAU,CAAA,GAEL,CACLgB,KAAM,QACNhB,UACA8uB,SAAS7K,GACP,MAAMnL,EACJA,EAACJ,EACDA,EAACyU,UACDA,GACElJ,GAEF8J,SAAUiE,GAAgB,EAC1BC,UAAWC,GAAiB,EAAK2C,QACjCA,EAAU,CACRC,GAAIrH,IACF,IAAI3U,EACFA,EAACJ,EACDA,GACE+U,EACJ,MAAO,CACL3U,IACAJ,IACD,MAGF8Z,GACDxyB,EACEkuB,EAAS,CACbpV,IACAJ,KAEI4a,QAAiBvE,GAAe9K,EAAOuO,GACvCzE,EAAWR,GAAyBD,GAAQH,IAC5C8E,EA5CM,MA4CmBlE,EA5Cb,IAAM,IA6CxB,IAAIgH,EAAgB7G,EAAOH,GACvBiH,EAAiB9G,EAAO+D,GAC5B,GAAID,EAAe,CACjB,MACMiD,EAAuB,MAAblH,EAAmB,SAAW,QAG9CgH,EAAgB1E,GAFJ0E,EAAgBzB,EAFC,MAAbvF,EAAmB,MAAQ,QAIfgH,EADhBA,EAAgBzB,EAAS2B,GAEtC,CACD,GAAI/C,EAAgB,CAClB,MACM+C,EAAwB,MAAdhD,EAAoB,SAAW,QAG/C+C,EAAiB3E,GAFL2E,EAAiB1B,EAFC,MAAdrB,EAAoB,MAAQ,QAIf+C,EADjBA,EAAiB1B,EAAS2B,GAEvC,CACD,MAAMC,EAAgBL,EAAQC,GAAG,IAC5B7Q,EACH8J,CAACA,GAAWgH,EACZ9C,CAACA,GAAY+C,IAEf,MAAO,IACFE,EACH/lB,KAAM,CACJ2J,EAAGoc,EAAcpc,EAAIA,EACrBJ,EAAGwc,EAAcxc,EAAIA,GAG1B,EAEL,ECp8BA,SAASyc,GAAUC,GACjB,IAAIC,EACJ,OAAsD,OAA7CA,EAAsBD,EAAKE,oBAAyB,EAASD,EAAoBE,cAAgBC,MAC5G,CAEA,SAASC,GAAmBtqB,GAC1B,OAAOgqB,GAAUhqB,GAASuqB,iBAAiBvqB,EAC7C,CAEA,SAASwqB,GAAOzvB,GACd,OAAOA,aAAiBivB,GAAUjvB,GAAO0vB,IAC3C,CACA,SAASC,GAAYT,GACnB,OAAOO,GAAOP,IAASA,EAAKU,UAAY,IAAIp0B,cAAgB,EAC9D,CAEA,IAAIq0B,GACJ,SAASC,KACP,GAAID,GACF,OAAOA,GAET,MAAME,EAASnZ,UAAUoZ,cACzB,OAAID,GAAUpvB,MAAMV,QAAQ8vB,EAAOE,SACjCJ,GAAWE,EAAOE,OAAOp1B,KAAIic,GAAQA,EAAKoZ,MAAQ,IAAMpZ,EAAKqZ,UAASna,KAAK,KACpE6Z,IAEFjZ,UAAUwZ,SACnB,CAEA,SAASC,GAAcrwB,GACrB,OAAOA,aAAiBivB,GAAUjvB,GAAOswB,WAC3C,CACA,SAAS7G,GAAUzpB,GACjB,OAAOA,aAAiBivB,GAAUjvB,GAAOuwB,OAC3C,CACA,SAASC,GAAatB,GAEpB,GAA0B,oBAAfuB,WACT,OAAO,EAGT,OAAOvB,aADYD,GAAUC,GAAMuB,YACEvB,aAAgBuB,UACvD,CACA,SAASC,GAAkBzrB,GACzB,MAAMmoB,SACJA,EAAQuD,UACRA,EAASC,UACTA,EAASC,QACTA,GACEtB,GAAmBtqB,GACvB,MAAO,kCAAkCnB,KAAKspB,EAAWwD,EAAYD,KAAe,CAAC,SAAU,YAAY7mB,SAAS+mB,EACtH,CACA,SAASC,GAAe7rB,GACtB,MAAO,CAAC,QAAS,KAAM,MAAM6E,SAAS6lB,GAAY1qB,GACpD,CACA,SAAS8rB,GAAkB9rB,GAEzB,MAAM+rB,EAAY,WAAWltB,KAAKgsB,MAC5BnlB,EAAM4kB,GAAmBtqB,GACzBgsB,EAAiBtmB,EAAIsmB,gBAAkBtmB,EAAIumB,qBAKjD,MAAyB,SAAlBvmB,EAAIhJ,WAA4C,SAApBgJ,EAAIwmB,eAA2BF,GAAoC,SAAnBA,GAAsCD,GAAgC,WAAnBrmB,EAAIymB,YAA2BJ,KAAcrmB,EAAIoL,QAAwB,SAAfpL,EAAIoL,QAA8B,CAAC,YAAa,eAAesb,MAAKrxB,GAAS2K,EAAIymB,WAAWtnB,SAAS9J,MAAW,CAAC,QAAS,SAAU,SAAU,WAAWqxB,MAAKrxB,IAE5V,MAAMsxB,EAAU3mB,EAAI2mB,QACpB,OAAkB,MAAXA,GAAkBA,EAAQxnB,SAAS9J,EAAc,GAE5D,CAQA,SAASuxB,KAQP,MAAO,iCAAiCztB,KAAKgsB,KAC/C,CACA,SAAS0B,GAAsBtC,GAC7B,MAAO,CAAC,OAAQ,OAAQ,aAAaplB,SAAS6lB,GAAYT,GAC5D,CAEA,MAAMhF,GAAMljB,KAAKkjB,IACXjjB,GAAMD,KAAKC,IACXwqB,GAAQzqB,KAAKyqB,MAEnB,SAASC,GAAiBzsB,GACxB,MAAM0F,EAAM4kB,GAAmBtqB,GAG/B,IAAIjK,EAAQ22B,WAAWhnB,EAAI3P,QAAU,EACjCC,EAAS02B,WAAWhnB,EAAI1P,SAAW,EACvC,MAAM22B,EAAYvB,GAAcprB,GAC1B4sB,EAAcD,EAAY3sB,EAAQ4sB,YAAc72B,EAChD82B,EAAeF,EAAY3sB,EAAQ6sB,aAAe72B,EAClD82B,EAAiBN,GAAMz2B,KAAW62B,GAAeJ,GAAMx2B,KAAY62B,EAKzE,OAJIC,IACF/2B,EAAQ62B,EACR52B,EAAS62B,GAEJ,CACL92B,QACAC,SACA+2B,SAAUD,EAEd,CAEA,SAASE,GAAchtB,GACrB,OAAQwkB,GAAUxkB,GAAoCA,EAAzBA,EAAQykB,cACvC,CAEA,MAAMwI,GAAiB,CACrBtf,EAAG,EACHJ,EAAG,GAEL,SAASuX,GAAS9kB,GAChB,MAAMktB,EAAaF,GAAchtB,GACjC,IAAKorB,GAAc8B,GACjB,OAAOD,GAET,MAAMvJ,EAAOwJ,EAAWC,yBAClBp3B,MACJA,EAAKC,OACLA,EAAM+2B,SACNA,GACEN,GAAiBS,GACrB,IAAIvf,GAAKof,EAAWP,GAAM9I,EAAK3tB,OAAS2tB,EAAK3tB,OAASA,EAClDwX,GAAKwf,EAAWP,GAAM9I,EAAK1tB,QAAU0tB,EAAK1tB,QAAUA,EAUxD,OANK2X,GAAMyf,OAAOC,SAAS1f,KACzBA,EAAI,GAEDJ,GAAM6f,OAAOC,SAAS9f,KACzBA,EAAI,GAEC,CACLI,IACAJ,IAEJ,CAEA,SAAS4f,GAAsBntB,EAASstB,EAAcC,EAAiB5I,GACrE,IAAI6I,EAAqBC,OACJ,IAAjBH,IACFA,GAAe,QAEO,IAApBC,IACFA,GAAkB,GAEpB,MAAMG,EAAa1tB,EAAQmtB,wBACrBD,EAAaF,GAAchtB,GACjC,IAAIyM,EAAQwgB,GACRK,IACE3I,EACEH,GAAUG,KACZlY,EAAQqY,GAASH,IAGnBlY,EAAQqY,GAAS9kB,IAGrB,MAAM2tB,EAAMT,EAAalD,GAAUkD,GAAc7C,OAC3CuD,EAAmBtB,MAAqCiB,EAC9D,IAAI5f,GAAK+f,EAAWvlB,MAAQylB,IAAkE,OAA7CJ,EAAsBG,EAAIE,qBAA0B,EAASL,EAAoBM,aAAmB,IAAMrhB,EAAMkB,EAC7JJ,GAAKmgB,EAAWpK,KAAOsK,IAAmE,OAA9CH,EAAuBE,EAAIE,qBAA0B,EAASJ,EAAqBM,YAAkB,IAAMthB,EAAMc,EAC7JxX,EAAQ23B,EAAW33B,MAAQ0W,EAAMkB,EACjC3X,EAAS03B,EAAW13B,OAASyW,EAAMc,EACvC,GAAI2f,EAAY,CACd,MAAMS,EAAM3D,GAAUkD,GAChBc,EAAYrJ,GAAgBH,GAAUG,GAAgBqF,GAAUrF,GAAgBA,EACtF,IAAIsJ,EAAgBN,EAAIO,aACxB,KAAOD,GAAiBtJ,GAAgBqJ,IAAcL,GAAK,CACzD,MAAMQ,EAAcrJ,GAASmJ,GACvBG,EAAaH,EAAcd,wBAC3BznB,EAAM6kB,iBAAiB0D,GAC7BG,EAAWzgB,IAAMsgB,EAAcI,WAAa3B,WAAWhnB,EAAI4oB,cAAgBH,EAAYxgB,EACvFygB,EAAW7gB,IAAM0gB,EAAcM,UAAY7B,WAAWhnB,EAAI8oB,aAAeL,EAAY5gB,EACrFI,GAAKwgB,EAAYxgB,EACjBJ,GAAK4gB,EAAY5gB,EACjBxX,GAASo4B,EAAYxgB,EACrB3X,GAAUm4B,EAAY5gB,EACtBI,GAAKygB,EAAWzgB,EAChBJ,GAAK6gB,EAAW7gB,EAChB0gB,EAAgBjE,GAAUiE,GAAeC,YAC1C,CACF,CACD,OAAOzK,GAAiB,CACtB1tB,QACAC,SACA2X,IACAJ,KAEJ,CAEA,SAASmX,GAAmBuF,GAC1B,QAASO,GAAOP,GAAQA,EAAKE,cAAgBF,EAAKnJ,WAAauJ,OAAOvJ,UAAU2N,eAClF,CAEA,SAASC,GAAc1uB,GACrB,OAAIwkB,GAAUxkB,GACL,CACL2uB,WAAY3uB,EAAQ2uB,WACpBC,UAAW5uB,EAAQ4uB,WAGhB,CACLD,WAAY3uB,EAAQ6uB,YACpBD,UAAW5uB,EAAQ8uB,YAEvB,CA4CA,SAASC,GAAoB/uB,GAG3B,OAAOmtB,GAAsBzI,GAAmB1kB,IAAUmI,KAAOumB,GAAc1uB,GAAS2uB,UAC1F,CAuBA,SAASK,GAAc/E,GACrB,GAA0B,SAAtBS,GAAYT,GACd,OAAOA,EAET,MAAMpvB,EAENovB,EAAKgF,cAELhF,EAAKiF,YAEL3D,GAAatB,IAASA,EAAKkF,MAE3BzK,GAAmBuF,GACnB,OAAOsB,GAAa1wB,GAAUA,EAAOs0B,KAAOt0B,CAC9C,CAEA,SAASu0B,GAA2BnF,GAClC,MAAMiF,EAAaF,GAAc/E,GACjC,OAAIsC,GAAsB2C,GAGjBA,EAAW/E,cAAcnkB,KAE9BolB,GAAc8D,IAAezD,GAAkByD,GAC1CA,EAEFE,GAA2BF,EACpC,CAEA,SAASG,GAAqBpF,EAAMvC,GAClC,IAAIwC,OACS,IAATxC,IACFA,EAAO,IAET,MAAM4H,EAAqBF,GAA2BnF,GAChDsF,EAASD,KAAsE,OAA7CpF,EAAsBD,EAAKE,oBAAyB,EAASD,EAAoBlkB,MACnH2nB,EAAM3D,GAAUsF,GACtB,OAAIC,EACK7H,EAAKtnB,OAAOutB,EAAKA,EAAIE,gBAAkB,GAAIpC,GAAkB6D,GAAsBA,EAAqB,IAE1G5H,EAAKtnB,OAAOkvB,EAAoBD,GAAqBC,GAC9D,CA+CA,SAASE,GAAkCxvB,EAASyvB,EAAkBjX,GACpE,IAAIkL,EACJ,GAAyB,aAArB+L,EACF/L,EAhDJ,SAAyB1jB,EAASwY,GAChC,MAAMmV,EAAM3D,GAAUhqB,GAChB0vB,EAAOhL,GAAmB1kB,GAC1B6tB,EAAiBF,EAAIE,eAC3B,IAAI93B,EAAQ25B,EAAKC,YACb35B,EAAS05B,EAAKE,aACdjiB,EAAI,EACJJ,EAAI,EACR,GAAIsgB,EAAgB,CAClB93B,EAAQ83B,EAAe93B,MACvBC,EAAS63B,EAAe73B,OACxB,MAAM65B,EAAsBvD,OACvBuD,GAAuBA,GAAoC,UAAbrX,KACjD7K,EAAIkgB,EAAeC,WACnBvgB,EAAIsgB,EAAeE,UAEtB,CACD,MAAO,CACLh4B,QACAC,SACA2X,IACAJ,IAEJ,CAyBWuiB,CAAgB9vB,EAASwY,QAC3B,GAAyB,aAArBiX,EACT/L,EAhHJ,SAAyB1jB,GACvB,MAAM0vB,EAAOhL,GAAmB1kB,GAC1B+vB,EAASrB,GAAc1uB,GACvBgG,EAAOhG,EAAQmqB,cAAcnkB,KAC7BjQ,EAAQiM,GAAI0tB,EAAKM,YAAaN,EAAKC,YAAa3pB,EAAKgqB,YAAahqB,EAAK2pB,aACvE35B,EAASgM,GAAI0tB,EAAKO,aAAcP,EAAKE,aAAc5pB,EAAKiqB,aAAcjqB,EAAK4pB,cACjF,IAAIjiB,GAAKoiB,EAAOpB,WAAaI,GAAoB/uB,GACjD,MAAMuN,GAAKwiB,EAAOnB,UAIlB,MAH2C,QAAvCtE,GAAmBtkB,GAAMgW,YAC3BrO,GAAK3L,GAAI0tB,EAAKC,YAAa3pB,EAAK2pB,aAAe55B,GAE1C,CACLA,QACAC,SACA2X,IACAJ,IAEJ,CA+FW2iB,CAAgBxL,GAAmB1kB,SACrC,GAAIwkB,GAAUiL,GACnB/L,EA1BJ,SAAoC1jB,EAASwY,GAC3C,MAAMkV,EAAaP,GAAsBntB,GAAS,EAAmB,UAAbwY,GAClD8K,EAAMoK,EAAWpK,IAAMtjB,EAAQuuB,UAC/BpmB,EAAOulB,EAAWvlB,KAAOnI,EAAQquB,WACjC5hB,EAAQ2e,GAAcprB,GAAW8kB,GAAS9kB,GAAW,CACzD2N,EAAG,EACHJ,EAAG,GAML,MAAO,CACLxX,MALYiK,EAAQ2vB,YAAcljB,EAAMkB,EAMxC3X,OALagK,EAAQ4vB,aAAenjB,EAAMc,EAM1CI,EALQxF,EAAOsE,EAAMkB,EAMrBJ,EALQ+V,EAAM7W,EAAMc,EAOxB,CAQW4iB,CAA2BV,EAAkBjX,OAC/C,CACL,MAAM4X,EAAc,IACfX,GAEL,GAAInD,KAAmC,CACrC,IAAIkB,EAAqBC,EACzB,MAAME,EAAM3D,GAAUhqB,GACtBowB,EAAYziB,IAAoD,OAA7C6f,EAAsBG,EAAIE,qBAA0B,EAASL,EAAoBM,aAAe,EACnHsC,EAAY7iB,IAAqD,OAA9CkgB,EAAuBE,EAAIE,qBAA0B,EAASJ,EAAqBM,YAAc,CACrH,CACDrK,EAAO0M,CACR,CACD,OAAO3M,GAAiBC,EAC1B,CACA,SAAS2M,GAAyBrwB,EAASswB,GACzC,MAAMpB,EAAaF,GAAchvB,GACjC,QAAIkvB,IAAeoB,IAAa9L,GAAU0K,IAAe3C,GAAsB2C,MAG5B,UAA5C5E,GAAmB4E,GAAYqB,UAAwBF,GAAyBnB,EAAYoB,GACrG,CAoEA,SAASE,GAAoBxwB,EAASywB,GACpC,OAAKrF,GAAcprB,IAAqD,UAAzCsqB,GAAmBtqB,GAASuwB,SAGvDE,EACKA,EAASzwB,GAEXA,EAAQ2kB,aALN,IAMX,CAeA,SAASC,GAAgB5kB,EAASywB,GAChC,MAAMpG,EAASL,GAAUhqB,GACzB,IAAKorB,GAAcprB,GACjB,OAAOqqB,EAET,IAAI1F,EAAe6L,GAAoBxwB,EAASywB,GAChD,KAAO9L,GAAgBkH,GAAelH,IAA+D,WAA9C2F,GAAmB3F,GAAc4L,UACtF5L,EAAe6L,GAAoB7L,EAAc8L,GAEnD,OAAI9L,IAA+C,SAA9B+F,GAAY/F,IAA0D,SAA9B+F,GAAY/F,IAA0E,WAA9C2F,GAAmB3F,GAAc4L,WAA0BzE,GAAkBnH,IACzK0F,EAEF1F,GA1BT,SAA4B3kB,GAC1B,IAAI0wB,EAAc1B,GAAchvB,GAChC,KAAOorB,GAAcsF,KAAiBnE,GAAsBmE,IAAc,CACxE,GAAI5E,GAAkB4E,GACpB,OAAOA,EAEPA,EAAc1B,GAAc0B,EAE/B,CACD,OAAO,IACT,CAgByBC,CAAmB3wB,IAAYqqB,CACxD,CAEA,SAASuG,GAA8B5wB,EAAS2kB,EAAcnM,GAC5D,MAAMqY,EAA0BzF,GAAczG,GACxC8J,EAAkB/J,GAAmBC,GACrCjB,EAAOyJ,GAAsBntB,GAAS,EAAmB,UAAbwY,EAAsBmM,GACxE,IAAIoL,EAAS,CACXpB,WAAY,EACZC,UAAW,GAEb,MAAMkC,EAAU,CACdnjB,EAAG,EACHJ,EAAG,GAEL,GAAIsjB,IAA4BA,GAAwC,UAAbrY,EAIzD,IAHkC,SAA9BkS,GAAY/F,IAA4B8G,GAAkBgD,MAC5DsB,EAASrB,GAAc/J,IAErByG,GAAczG,GAAe,CAC/B,MAAMoM,EAAa5D,GAAsBxI,GAAc,GACvDmM,EAAQnjB,EAAIojB,EAAWpjB,EAAIgX,EAAa0J,WACxCyC,EAAQvjB,EAAIwjB,EAAWxjB,EAAIoX,EAAa4J,SACzC,MAAUE,IACTqC,EAAQnjB,EAAIohB,GAAoBN,IAGpC,MAAO,CACL9gB,EAAG+V,EAAKvb,KAAO4nB,EAAOpB,WAAamC,EAAQnjB,EAC3CJ,EAAGmW,EAAKJ,IAAMyM,EAAOnB,UAAYkC,EAAQvjB,EACzCxX,MAAO2tB,EAAK3tB,MACZC,OAAQ0tB,EAAK1tB,OAEjB,CAEA,MAAM8tB,GAAW,CACfS,gBArGF,SAAyBjC,GACvB,IAAItiB,QACFA,EAAOikB,SACPA,EAAQC,aACRA,EAAY1L,SACZA,GACE8J,EACJ,MACM0O,EAAoB,IADoB,sBAAb/M,EAxCnC,SAAqCjkB,EAASsB,GAC5C,MAAM2vB,EAAe3vB,EAAM2C,IAAIjE,GAC/B,GAAIixB,EACF,OAAOA,EAET,IAAIp2B,EAASw0B,GAAqBrvB,GAAS8Q,QAAOogB,GAAM1M,GAAU0M,IAA2B,SAApBxG,GAAYwG,KACjFC,EAAsC,KAC1C,MAAMC,EAA0D,UAAzC9G,GAAmBtqB,GAASuwB,SACnD,IAAIG,EAAcU,EAAiBpC,GAAchvB,GAAWA,EAG5D,KAAOwkB,GAAUkM,KAAiBnE,GAAsBmE,IAAc,CACpE,MAAMW,EAAgB/G,GAAmBoG,GACnCY,EAA0BxF,GAAkB4E,GAC7CY,GAAsD,UAA3BD,EAAcd,WAC5CY,EAAsC,OAEVC,GAAkBE,IAA4BH,GAAuCG,GAAsD,WAA3BD,EAAcd,UAA2BY,GAAuC,CAAC,WAAY,SAAStsB,SAASssB,EAAoCZ,WAAa9E,GAAkBiF,KAAiBY,GAA2BjB,GAAyBrwB,EAAS0wB,IAG5Y71B,EAASA,EAAOiW,QAAOygB,GAAYA,IAAab,IAGhDS,EAAsCE,EAExCX,EAAc1B,GAAc0B,EAC7B,CAED,OADApvB,EAAMgB,IAAItC,EAASnF,GACZA,CACT,CAWsE22B,CAA4BxxB,EAASvI,KAAKg6B,IAAM,GAAGrxB,OAAO6jB,GACtEC,GAClDwN,EAAwBV,EAAkB,GAC1CW,EAAeX,EAAkBnZ,QAAO,CAAC+Z,EAASnC,KACtD,MAAM/L,EAAO8L,GAAkCxvB,EAASyvB,EAAkBjX,GAK1E,OAJAoZ,EAAQtO,IAAMthB,GAAI0hB,EAAKJ,IAAKsO,EAAQtO,KACpCsO,EAAQvpB,MAAQ4c,GAAIvB,EAAKrb,MAAOupB,EAAQvpB,OACxCupB,EAAQrO,OAAS0B,GAAIvB,EAAKH,OAAQqO,EAAQrO,QAC1CqO,EAAQzpB,KAAOnG,GAAI0hB,EAAKvb,KAAMypB,EAAQzpB,MAC/BypB,CAAO,GACbpC,GAAkCxvB,EAAS0xB,EAAuBlZ,IACrE,MAAO,CACLziB,MAAO47B,EAAatpB,MAAQspB,EAAaxpB,KACzCnS,OAAQ27B,EAAapO,OAASoO,EAAarO,IAC3C3V,EAAGgkB,EAAaxpB,KAChBoF,EAAGokB,EAAarO,IAEpB,EA8EE0B,sDArUF,SAA+D1C,GAC7D,IAAIoB,KACFA,EAAIiB,aACJA,EAAYnM,SACZA,GACE8J,EACJ,MAAMuO,EAA0BzF,GAAczG,GACxC8J,EAAkB/J,GAAmBC,GAC3C,GAAIA,IAAiB8J,EACnB,OAAO/K,EAET,IAAIqM,EAAS,CACXpB,WAAY,EACZC,UAAW,GAETniB,EAAQ,CACVkB,EAAG,EACHJ,EAAG,GAEL,MAAMujB,EAAU,CACdnjB,EAAG,EACHJ,EAAG,GAEL,IAAIsjB,IAA4BA,GAAwC,UAAbrY,MACvB,SAA9BkS,GAAY/F,IAA4B8G,GAAkBgD,MAC5DsB,EAASrB,GAAc/J,IAErByG,GAAczG,IAAe,CAC/B,MAAMoM,EAAa5D,GAAsBxI,GACzClY,EAAQqY,GAASH,GACjBmM,EAAQnjB,EAAIojB,EAAWpjB,EAAIgX,EAAa0J,WACxCyC,EAAQvjB,EAAIwjB,EAAWxjB,EAAIoX,EAAa4J,SACzC,CAEH,MAAO,CACLx4B,MAAO2tB,EAAK3tB,MAAQ0W,EAAMkB,EAC1B3X,OAAQ0tB,EAAK1tB,OAASyW,EAAMc,EAC5BI,EAAG+V,EAAK/V,EAAIlB,EAAMkB,EAAIoiB,EAAOpB,WAAaliB,EAAMkB,EAAImjB,EAAQnjB,EAC5DJ,EAAGmW,EAAKnW,EAAId,EAAMc,EAAIwiB,EAAOnB,UAAYniB,EAAMc,EAAIujB,EAAQvjB,EAE/D,EA8REiX,aACAe,cA9EF,SAAuBvlB,GACrB,OAAOysB,GAAiBzsB,EAC1B,EA6EE4kB,mBACAF,sBACAI,YACAnB,sBAAsBrB,GACpB,IAAIE,UACFA,EAASC,SACTA,EAAQjK,SACRA,GACE8J,EACJ,MAAMuP,EAAoBp6B,KAAKmtB,iBAAmBA,GAC5CkN,EAAkBr6B,KAAK8tB,cAC7B,MAAO,CACL/C,UAAWoO,GAA8BpO,QAAiBqP,EAAkBpP,GAAWjK,GACvFiK,SAAU,CACR9U,EAAG,EACHJ,EAAG,WACOukB,EAAgBrP,IAG/B,EACDsP,eAAgB/xB,GAAWtE,MAAMwX,KAAKlT,EAAQ+xB,kBAC9CxK,MAAOvnB,GAAqD,QAA1CsqB,GAAmBtqB,GAASgc,WAWhD,SAASgW,GAAWxP,EAAWC,EAAUjJ,EAAQ3kB,QAC/B,IAAZA,IACFA,EAAU,CAAA,GAEZ,MAAMo9B,eACJA,GAAiB,EAAIC,eACrBA,GAAiB,EAAIC,cACrBA,GAAgB,EAAIC,eACpBA,GAAiB,GACfv9B,EACEw9B,EAAYJ,GAAkBC,EAAiB,IAAK1N,GAAUhC,GAAa6M,GAAqB7M,GAAaA,EAAUiC,eAAiB4K,GAAqB7M,EAAUiC,gBAAkB,MAAQ4K,GAAqB5M,IAAa,GACzO4P,EAAUC,SAAQf,IAEhB,MAAMgB,GAAoB/N,GAAU+M,IAAaA,EAASp3B,WAAW0K,SAAS,MAC1EotB,GAAmBG,IAAiBG,GACtChB,EAASliB,iBAAiB,SAAUmK,EAAQ,CAC1CgZ,SAAS,IAGbN,GAAkBX,EAASliB,iBAAiB,SAAUmK,EAAO,IAE/D,IAWIiZ,EAXAC,EAAW,KACXP,IACFO,EAAW,IAAIC,gBAAe,KAC5BnZ,GAAQ,IAEVgL,GAAUhC,KAAe4P,GAAkBM,EAASE,QAAQpQ,GACvDgC,GAAUhC,KAAcA,EAAUiC,gBAAmB2N,GACxDM,EAASE,QAAQpQ,EAAUiC,gBAE7BiO,EAASE,QAAQnQ,IAGnB,IAAIoQ,EAAcT,EAAiBjF,GAAsB3K,GAAa,KAatE,OAZI4P,GAGJ,SAASU,IACP,MAAMC,EAAc5F,GAAsB3K,IACtCqQ,GAAgBE,EAAYplB,IAAMklB,EAAYllB,GAAKolB,EAAYxlB,IAAMslB,EAAYtlB,GAAKwlB,EAAYh9B,QAAU88B,EAAY98B,OAASg9B,EAAY/8B,SAAW68B,EAAY78B,QACtKwjB,IAEFqZ,EAAcE,EACdN,EAAUO,sBAAsBF,EACjC,CATCA,GAUFtZ,IACO,KACL,IAAIyZ,EACJZ,EAAUC,SAAQf,IAChBU,GAAkBV,EAAShiB,oBAAoB,SAAUiK,GACzD0Y,GAAkBX,EAAShiB,oBAAoB,SAAUiK,EAAO,IAExC,OAAzByZ,EAAYP,IAA6BO,EAAUC,aACpDR,EAAW,KACPN,GACFe,qBAAqBV,EACtB,CAEL,CAOA,MAAMW,GAAkB,CAAC5Q,EAAWC,EAAU5tB,KAI5C,MAAMyM,EAAQ,IAAI1D,IACZy1B,EAAgB,CACpBvP,eACGjvB,GAECy+B,EAAoB,IACrBD,EAAcvP,SACjB2N,GAAInwB,GAEN,MDzkBsBqiB,OAAOnB,EAAWC,EAAU8Q,KAClD,MAAMvR,UACJA,EAAY,SAAQxJ,SACpBA,EAAW,WAAUgb,WACrBA,EAAa,GAAE1P,SACfA,GACEyP,EACEE,EAAkBD,EAAW1iB,OAAOmC,SACpCsP,QAA+B,MAAlBuB,EAASyD,WAAgB,EAASzD,EAASyD,MAAM9E,IACpE,IAAIsB,QAAcD,EAAS4P,gBAAgB,CACzClR,YACAC,WACAjK,cAEE7K,EACFA,EAACJ,EACDA,GACE8U,GAA2B0B,EAAO/B,EAAWO,GAC7CoR,EAAoB3R,EACpB2E,EAAiB,CAAA,EACjBiN,EAAa,EACjB,IAAK,IAAI58B,EAAI,EAAGA,EAAIy8B,EAAgBv8B,OAAQF,IAAK,CAC/C,MAAMnB,KACJA,EAAI8zB,GACJA,GACE8J,EAAgBz8B,IAElB2W,EAAGkmB,EACHtmB,EAAGumB,EAAK9vB,KACRA,EAAI+kB,MACJA,SACQY,EAAG,CACXhc,IACAJ,IACAqZ,iBAAkB5E,EAClBA,UAAW2R,EACXnb,WACAmO,iBACA5C,QACAD,WACAE,SAAU,CACRxB,YACAC,cAGJ9U,EAAa,MAATkmB,EAAgBA,EAAQlmB,EAC5BJ,EAAa,MAATumB,EAAgBA,EAAQvmB,EAC5BoZ,EAAiB,IACZA,EACH9wB,CAACA,GAAO,IACH8wB,EAAe9wB,MACfmO,IAGH+kB,GAAS6K,GAAc,KACzBA,IACqB,iBAAV7K,IACLA,EAAM/G,YACR2R,EAAoB5K,EAAM/G,WAExB+G,EAAMhF,QACRA,GAAwB,IAAhBgF,EAAMhF,YAAuBD,EAAS4P,gBAAgB,CAC5DlR,YACAC,WACAjK,aACGuQ,EAAMhF,SAGXpW,IACAJ,KACE8U,GAA2B0B,EAAO4P,EAAmBpR,KAE3DvrB,GAAK,EAGR,CACD,MAAO,CACL2W,IACAJ,IACAyU,UAAW2R,EACXnb,WACAmO,iBACD,ECufMoN,CAAkBvR,EAAWC,EAAU,IACzC4Q,EACHvP,SAAUwP,GACV,EC9oBEjO,GAAQxwB,IACZ,MAAMmL,QACJA,EAAO+I,QACPA,GACElU,EAIJ,MAAO,CACLgB,KAAM,QACNhB,UACA80B,GAAGxpB,GACD,OAAIH,IAPOjF,EAOUiF,EANhB,CAAE,EAAC1I,eAAeC,KAAKwD,EAAO,YAOV,MAAnBiF,EAAQgP,QACHglB,GAAQ,CACbh0B,QAASA,EAAQgP,QACjBjG,YACC4gB,GAAGxpB,GAED,GACEH,EACFg0B,GAAQ,CACbh0B,UACA+I,YACC4gB,GAAGxpB,GAED,GArBX,IAAepF,CAsBZ,EACF,EAGH,IAAIhB,GAA4B,oBAAb+mB,SAA2BmT,EAAAA,gBAAkB7kB,EAAAA,UAIhE,SAAS8kB,GAAU3gB,EAAG0V,GACpB,GAAI1V,IAAM0V,EACR,OAAO,EAET,UAAW1V,UAAa0V,EACtB,OAAO,EAET,GAAiB,mBAAN1V,GAAoBA,EAAEpZ,aAAe8uB,EAAE9uB,WAChD,OAAO,EAET,IAAIjD,EAAQF,EAAG+F,EACf,GAAIwW,GAAK0V,GAAiB,iBAAL1V,EAAe,CAClC,GAAI7X,MAAMV,QAAQuY,GAAI,CAEpB,GADArc,EAASqc,EAAErc,OACPA,GAAU+xB,EAAE/xB,OAAQ,OAAO,EAC/B,IAAKF,EAAIE,EAAgB,GAARF,KACf,IAAKk9B,GAAU3gB,EAAEvc,GAAIiyB,EAAEjyB,IACrB,OAAO,EAGX,OAAO,CACR,CAGD,GAFA+F,EAAOtG,OAAOsG,KAAKwW,GACnBrc,EAAS6F,EAAK7F,OACVA,IAAWT,OAAOsG,KAAKksB,GAAG/xB,OAC5B,OAAO,EAET,IAAKF,EAAIE,EAAgB,GAARF,KACf,IAAK,CAAE,EAACM,eAAeC,KAAK0xB,EAAGlsB,EAAK/F,IAClC,OAAO,EAGX,IAAKA,EAAIE,EAAgB,GAARF,KAAY,CAC3B,MAAMI,EAAM2F,EAAK/F,GACjB,IAAY,WAARI,IAAoBmc,EAAE4gB,YAGrBD,GAAU3gB,EAAEnc,GAAM6xB,EAAE7xB,IACvB,OAAO,CAEV,CACD,OAAO,CACR,CACD,OAAOmc,GAAMA,GAAK0V,GAAMA,CAC1B,CAEA,SAASmL,GAAOp0B,GACd,GAAsB,oBAAXqqB,OACT,OAAO,EAGT,OADYrqB,EAAQmqB,cAAcC,aAAeC,QACtCgK,kBAAoB,CACjC,CAEA,SAASC,GAAWt0B,EAASjF,GAC3B,MAAMw5B,EAAMH,GAAOp0B,GACnB,OAAO+B,KAAKyqB,MAAMzxB,EAAQw5B,GAAOA,CACnC,CAEA,SAASC,GAAaz5B,GACpB,MAAMyR,EAAM/W,EAAMqZ,OAAO/T,GAIzB,OAHAhB,IAAM,KACJyS,EAAIwC,QAAUjU,CAAK,IAEdyR,CACT,CCnGA,MAAMioB,GAAiBh/B,EAAK,QAAC2kB,mBAA4C5f,YAEzDk6B,KACd,MAAM35B,EAAQtF,EAAAA,QAAMmlB,WAAW6Z,IAE/B,IAAK15B,EACH,MAAM,IAAIid,MAAM,uDAGlB,OAAOjd,CACT,CAEA,SAAS45B,GAAQt/B,WACf,MAAMu/B,EAAW9lB,SAA2B,OAEtCyhB,SAAEA,EAAW,SAAQ1oB,MAAEA,EAAQ,QAAO2Q,SAAEA,EAAW,SAAYnjB,EAM/DotB,EDoFR,SAAqB5tB,QACH,IAAZA,IACFA,EAAU,CAAA,GAEZ,MAAMmtB,UACJA,EAAY,SAAQxJ,SACpBA,EAAW,WAAUgb,WACrBA,EAAa,GAAE1P,SACfA,EACAE,UACExB,UAAWqS,EACXpS,SAAUqS,GACR,CAAE,EAAAp4B,UACNA,GAAY,EAAIq4B,qBAChBA,EAAoBtW,KACpBA,GACE5pB,GACGmP,EAAMgxB,GAAWv/B,EAAMmZ,SAAS,CACrCjB,EAAG,EACHJ,EAAG,EACHiL,WACAwJ,YACA2E,eAAgB,CAAE,EAClBsO,cAAc,KAETC,EAAkBC,GAAuB1/B,EAAMmZ,SAAS4kB,GAC1DU,GAAUgB,EAAkB1B,IAC/B2B,EAAoB3B,GAEtB,MAAO4B,EAAYC,GAAiB5/B,EAAMmZ,SAAS,OAC5C0mB,EAAWC,GAAgB9/B,EAAMmZ,SAAS,MAC3C4mB,EAAe//B,EAAMyZ,aAAY+a,IACjCA,GAAQwL,EAAazmB,UACvBymB,EAAazmB,QAAUib,EACvBoL,EAAcpL,GACf,GACA,CAACoL,IACEK,EAAcjgC,EAAMyZ,aAAY+a,IAChCA,IAAS0L,EAAY3mB,UACvB2mB,EAAY3mB,QAAUib,EACtBsL,EAAatL,GACd,GACA,CAACsL,IACEK,EAAcf,GAAqBO,EACnCS,EAAaf,GAAoBQ,EACjCG,EAAehgC,EAAMqZ,OAAO,MAC5B6mB,EAAclgC,EAAMqZ,OAAO,MAC3BgnB,EAAUrgC,EAAMqZ,OAAO9K,GACvB+xB,EAA0BvB,GAAaO,GACvCiB,EAAcxB,GAAa1Q,GAC3BtK,EAAS/jB,EAAMyZ,aAAY,KAC/B,IAAKumB,EAAazmB,UAAY2mB,EAAY3mB,QACxC,OAEF,MAAMukB,EAAS,CACbvR,YACAxJ,WACAgb,WAAY0B,GAEVc,EAAYhnB,UACdukB,EAAOzP,SAAWkS,EAAYhnB,SAEhCokB,GAAgBqC,EAAazmB,QAAS2mB,EAAY3mB,QAASukB,GAAQ0C,MAAKjyB,IACtE,MAAMkyB,EAAW,IACZlyB,EACHixB,cAAc,GAEZkB,EAAannB,UAAYklB,GAAU4B,EAAQ9mB,QAASknB,KACtDJ,EAAQ9mB,QAAUknB,EAClBvV,EAASyV,WAAU,KACjBpB,EAAQkB,EAAS,IAEpB,GACD,GACD,CAAChB,EAAkBlT,EAAWxJ,EAAUwd,IAC3Cj8B,IAAM,MACS,IAAT0kB,GAAkBqX,EAAQ9mB,QAAQimB,eACpCa,EAAQ9mB,QAAQimB,cAAe,EAC/BD,GAAQhxB,IAAS,IACZA,EACHixB,cAAc,MAEjB,GACA,CAACxW,IACJ,MAAM0X,EAAe1gC,EAAMqZ,QAAO,GAClC/U,IAAM,KACJo8B,EAAannB,SAAU,EAChB,KACLmnB,EAAannB,SAAU,CAAK,IAE7B,IACHjV,IAAM,KAGJ,GAFI67B,IAAaH,EAAazmB,QAAU4mB,GACpCC,IAAYF,EAAY3mB,QAAU6mB,GAClCD,GAAeC,EAAY,CAC7B,GAAIE,EAAwB/mB,QAC1B,OAAO+mB,EAAwB/mB,QAAQ4mB,EAAaC,EAAYrc,GAEhEA,GAEH,IACA,CAACoc,EAAaC,EAAYrc,EAAQuc,IACrC,MAAMM,EAAO5gC,EAAMgjB,SAAQ,KAAO,CAChC+J,UAAWiT,EACXhT,SAAUkT,EACVH,eACAE,iBACE,CAACF,EAAcE,IACb1R,EAAWvuB,EAAMgjB,SAAQ,KAAO,CACpC+J,UAAWoT,EACXnT,SAAUoT,KACR,CAACD,EAAaC,IACZS,EAAiB7gC,EAAMgjB,SAAQ,KACnC,MAAM8d,EAAgB,CACpBhG,SAAU/X,EACVrQ,KAAM,EACNmb,IAAK,GAEP,IAAKU,EAASvB,SACZ,OAAO8T,EAET,MAAM5oB,EAAI2mB,GAAWtQ,EAASvB,SAAUze,EAAK2J,GACvCJ,EAAI+mB,GAAWtQ,EAASvB,SAAUze,EAAKuJ,GAC7C,OAAI7Q,EACK,IACF65B,EACH75B,UAAW,aAAeiR,EAAI,OAASJ,EAAI,SACvC6mB,GAAOpQ,EAASvB,WAAa,KAAO,CACtC0J,WAAY,cAIX,CACLoE,SAAU/X,EACVrQ,KAAMwF,EACN2V,IAAK/V,EACN,GACA,CAACiL,EAAU9b,EAAWsnB,EAASvB,SAAUze,EAAK2J,EAAG3J,EAAKuJ,IACzD,OAAO9X,EAAMgjB,SAAQ,KAAO,IACvBzU,EACHwV,SACA6c,OACArS,WACAsS,oBACE,CAACtyB,EAAMwV,EAAQ6c,EAAMrS,EAAUsS,GACrC,CCrOmBE,CAAY,CAC3BxU,UALkC,GAAGuO,IAC3B,WAAV1oB,EAAqB,GAAK,IAAIA,MAK9B2Q,WACAgb,WAAY,CAACx5B,GAAO,IAAKysB,KAAQgD,KAASpE,GAAM,CAAErlB,QAAS40B,EAAU7rB,QAAS,KAI9EgsB,qBAAsB/C,MAGjByE,EAAiBlG,EAAUmG,EAAc7uB,GAAS4a,EAAST,UAAU1Q,MAAM,KAK5EvW,EAAQ0d,EAAAA,SACZ,aAAM,MAAC,CACLD,WACAme,SAAU,CACRnB,aAAc/S,EAAS4T,KAAKb,aAC5BE,YAAajT,EAAS4T,KAAKX,YAC3BkB,SAAUhC,GAEZ/5B,OAAQ,CACNy7B,eAAgB7T,EAAS6T,eACzBjR,MAAO,CAAE/B,IAAkC,UAA7Bb,EAASkE,eAAetB,aAAK,IAAA3a,OAAA,EAAAA,EAAE6C,EAAGpF,KAAqC,QAA/BmH,EAAAmT,EAASkE,eAAetB,aAAO,IAAA/V,OAAA,EAAAA,EAAA3B,GACrF4iB,SAAUkG,EACV5uB,MAAO6uB,GAET,GACF,CACEjU,EAAS4T,KAAKX,oBACdhrB,EAAA+X,EAASkE,eAAetB,4BAAO1X,UAC/B2B,EAAAmT,EAASkE,eAAetB,4BAAO9X,EAC/BkV,EAAS4T,KAAKb,aACd/S,EAAS6T,eACTI,EACAD,EACAje,IAIJ,OAAO/iB,EAAC,QAAAC,cAAA++B,GAAelZ,SAAS,CAAAxgB,MAAOA,GAAQ1F,EAAMyS,SACvD,CChEA,IAAY+uB,GAOAC,GDsFZnC,GAAQoC,SAjBR,SAAyBrsB,OAAA5C,SAAEA,EAAQkvB,MAAEA,GAAKtsB,EAAKmC,EAAMzW,EAAAA,OAAAsU,EAA5B,sBACvB,MAAMisB,SAAEA,EAAQ97B,OAAEA,GAAW65B,KAE7B,OACEj/B,6CACE+W,IAAKmqB,EAASjB,aACV7oB,EAAM,CACVmqB,MACKvgC,OAAAC,OAAAD,OAAAC,OAAA,GAAAmE,EAAOy7B,gBACPU,KAGJlvB,EAGP,EAGA6sB,GAAQsC,UA5BR,SAA0BvsB,GAAA,IAAA5C,SAAEA,GAA4C4C,EAA/BmC,EAAMzW,EAAAA,OAAAsU,EAArB,cACxB,MAAMisB,SAAEA,GAAajC,KAErB,OACEj/B,EAAA,QAAAC,cAAA,MAAAe,OAAAC,OAAA,CAAK8V,IAAKmqB,EAASnB,cAAkB3oB,GAClC/E,EAGP,EC1EY+uB,QAKXA,qBAAA,GALWA,GAAAA,0BAAAA,QAAAA,gBAKX,CAAA,IAJC,IAAA,MACAA,GAAA,OAAA,SACAA,GAAA,KAAA,OACAA,GAAA,MAAA,QAGUC,QAIXA,kBAAA,GAJWA,GAAAA,uBAAAA,QAAAA,aAIX,CAAA,IAHC,MAAA,QACAA,GAAA,OAAA,SACAA,GAAA,IAAA,MAYF,MAAMhc,GAAY5lB,EAAAA,QAAOmS,GAAmB;;;;;;;IAOxCqE,EAAS;eACEhF,cAAY,CACrB,mBAAoBQ,EAASA,UAAC,CAAE6F,OAAQ,UACxC,wBAAyB7F,EAASA,UAAC,CAAE6F,OAAQ;;EAK7CmqB,GAAShiC,EAAM,QAACy/B,GAAQoC,SAAS;IACnCzwB,GAAW;;;;eAIA/Q,EAAAA,SAAM;eACNA,EAAAA,SAAM;;;aAGRA,EAAAA,SAAM;;gBAEHA,EAAAA,SAAM;gBACNA,EAAAA,SAAM;mBACHA,EAAAA,SAAM;;aAEZA,EAAAA,SAAM,wBAAwBA,EAAKoQ,SAAC;;WAEtCpQ,EAAAA,SAAM;eACFA,EAAAA,SAAM;iBACJA,EAAAA,SAAM;EAQjB4hC,GAAcjiC,EAAAA,QAAOC,IAAgB;;;;;;;;;;aAU9BI,EAAAA,SAAM;;IAEf,EAAG+tB,SAAUA,GAAO,QAAQA;IAC5B,EAAGnb,UAAWA,GAAQ,SAASA;;IAE/B,EAAGooB,cACU,QAAbA,GACA7qB,EAAAA,GAAG;;;sBAGenQ,EAAAA,SAAM;;;;IAIxB,EAAGg7B,cACU,WAAbA,GACA7qB,EAAAA,GAAG;;;8CAGuCnQ,EAAAA,SAAM;;;;IAIhD,EAAGg7B,cACU,SAAbA,GACA7qB,EAAAA,GAAG;;;0DAGmDnQ,EAAAA,SAAM;;;;IAI5D,EAAGg7B,cACU,UAAbA,GACA7qB,EAAAA,GAAG;;;kCAG2BnQ,EAAAA,SAAM;;;EAKxC,SAAS6hC,KACP,MAAMT,SAAEA,EAAQ97B,OAAEA,GAAW65B,KAE7B,OACEj/B,wBAAC0hC,GAAW,CACV3qB,IAAMxM,GAAa22B,EAASC,SAAS5nB,QAAUhP,EAC/CuwB,SAAU11B,EAAO01B,SACjBjN,IAAKzoB,EAAOwqB,MAAM/B,IAClBnb,KAAMtN,EAAOwqB,MAAMld,MAGzB,CAEA,SAASkvB,GAAQ3sB,OAAA5C,SACfA,EAAQwvB,QACRA,EAAOvqB,OACPA,EAAMwjB,SACNA,EAAWsG,QAAAA,gBAAgBU,IAAG1vB,MAC9BA,EAAQivB,QAAAA,aAAaU,UAClBrhC,EANYC,SAAAsU,EAAA,CAAA,WAAA,UAAA,SAAA,WAAA,UAQf,MAAO+sB,EAASC,GAAc9oB,EAAQA,UAAC,GAEjC+oB,EAAczoB,EAAAA,aAAY,KAC9BwoB,GAAW,EAAK,GACf,IAEGE,EAAc1oB,EAAAA,aAAY,KAC9BwoB,GAAW,EAAM,GAChB,IAEH,OACEjiC,EAAA,QAAAC,cAAColB,GAASrkB,OAAAC,OAAA,GACJP,EAAI,CACRqY,QAASmpB,EACTlpB,OAAQmpB,EACRC,aAAcF,EACdG,aAAcF,EACdG,SAAU,EACVhrB,OAAQA,IAERtX,EAAC,QAAAC,cAAAi/B,IAAQpE,SAAUA,EAAU1oB,MAAOA,GACjC4vB,GACChiC,EAAA,QAAAC,cAACwhC,GAAO,CAAAvsB,KAAK,WACV2sB,EACD7hC,EAAAA,QAACC,cAAA0hC,GAAQ,OAIb3hC,EAAC,QAAAC,cAAAi/B,GAAQsC,UAAS,KAAEnvB,IAI5B,CCtJA,MAAMuM,GAAgBnf,EAAAA,QAAOmS,GAAG;;;;;iBAKf9R,EAAAA,SAAM;IACnB6V;EAGE4sB,GAAiB9iC,EAAAA,QAAOC,IAAyB;;;IAGnD4Y,GAAK,CACL/X,OAAQ,oBACRwP,OAAQ;;eAGGjQ,EAAAA,SAAM;WACVmR,cAAY,CACnB,mBAAoBQ,EAASA,UAAC,CAAE6F,OAAQ,UACxC,sBAAuB7F,EAASA,UAAC,CAAE6F,OAAQ;I/C9CtC;E+CmDHkrB,GAAiB/iC,EAAAA,QAAOgjC,GAAG;;;WAGtB3iC,EAAAA,SAAM;eACFA,EAAAA,SAAM;EAGf4iC,GAAsBjjC,EAAAA,QAAOC,IAAyB;;;;;;kBAM1CI,EAAAA,SAAM;;WAEbmR,cAAY,CACnB,2BAA4BQ,EAASA,UAAC,CAAE6F,OAAQ,UAChD,gCAAiC7F,EAASA,UAAC,CAAE6F,OAAQ;iBAExCxX,EAAAA,SAAM;eACRA,EAAAA,SAAM;;gBAELmR,cAAY,CACxB,iCAAkCQ,EAASA,UAAC,CAAE6F,OAAQ,UACtD,sCAAuC7F,EAASA,UAAC,CAAE6F,OAAQ;mBAE5CxX,EAAAA,SAAM;ECnFlB,MAAM6iC,GAAuB,CAClCC,YAAa,eACbC,KAAM,OACNC,KAAM,OACNC,SAAU,WACVC,cAAe,kBCUXxrB,GAAa/X,EAAAA,QAAOwjC,GAAkB;YAChCnjC,EAAAA,SAAM;EAGZojC,GAAazjC,EAAAA,QAAOoX,GAAW;;;;IAIjCZ,EAAS;kBACKnW,EAAAA,SAAM;;;IAGpBkW,EAAS;;;eAGElW,EAAAA,SAAM;;;;IAIjB0rB;aACSva,cAAY,CACnB,eAAgBQ,EAASA,UAAC,CAAE,gBAAgB;uBAE3BR,cAAY,CAC7BkyB,UAAW1xB,EAASA,UAAC,CAAE,gBAAgB;;EAKvC2xB,GAAqC,CACzCL,SAAU,aACVF,KAAM,eAGR,SAASQ,GAAezjC,SACtB,MAAQ0jC,SAAU39B,EAAIm9B,KAAEA,GAAoBljC,EAAXwX,EAAWzW,EAAAA,OAAAf,EAAtC,CAAA,WAAA,SAEA4qB,EAAW4Y,GAAWz9B,GAE5B,OAAI6kB,EAEAxqB,EAAAA,QAAAC,cAACuX,GAAUxW,OAAAC,OAAA,CAAA,EAAKmW,EAAM,CAAEyO,GAAI2E,EAAQ,aAAc,SAAS7kB,WACzD3F,UAAAC,cAACiC,GAAI,CAAC9B,KAAMoqB,EAAUnqB,KAAM,MAMhCL,EAAC,QAAAC,cAAAijC,oBAAe9rB,EAAM,CAAA,aAAc,cAA8B,QAAhBnC,EAAA6tB,eAAAA,EAAMp+B,kBAAU,IAAAuQ,EAAAA,EAAI,OACpEjV,EAAAA,QAAAC,cAACurB,GAAK,CAAA1a,QAAQ,QACX,CAAC6xB,GAAqBC,YAAaD,GAAqBK,eAAe5zB,SAASzJ,GAC7E,MACAm9B,GAIZ,OCpEaS,GAMX55B,aAAY65B,cAAEA,EAAaC,MAAEA,EAAKX,KAAEA,EAAIY,aAAEA,IACxC1hC,KAAKwhC,cAAgBA,EACrBxhC,KAAKyhC,MAAQA,EACbzhC,KAAK8gC,KAAOA,EACZ9gC,KAAK0hC,aAAeA,CACrB,CAEDpiB,MAAMtS,EAAeuS,GACnB,MAAM9f,EAAS8f,EAAMvS,EAAQ,EAC7B,OAAO/I,MAAMwX,KAAK,CAAEhc,WAAU,CAACkiC,EAAGpiC,IAAMyN,EAAQzN,GACjD,CAEDqiC,gBACE,OAAO5hC,KAAKsf,MAAM,EAAGhV,KAAKkjB,IAAIxtB,KAAKwhC,cAAexhC,KAAKyhC,OACxD,CAEDI,cACE,OAAO7hC,KAAKsf,MACVhV,KAAKC,IAAIvK,KAAKyhC,MAAQzhC,KAAKwhC,cAAgB,EAAGxhC,KAAKwhC,cAAgB,GACnExhC,KAAKyhC,MAER,CAEDK,oBACE,OAAOx3B,KAAKC,IACVD,KAAKkjB,IAEHxtB,KAAK8gC,KAAO9gC,KAAK0hC,aAEjB1hC,KAAKyhC,MAAQzhC,KAAKwhC,cAAoC,EAApBxhC,KAAK0hC,aAAmB,GAG5D1hC,KAAKwhC,cAAgB,EAExB,CAEDO,kBACE,MAAMC,EAAWhiC,KAAK6hC,cAEtB,OAAOv3B,KAAKkjB,IACVljB,KAAKC,IAEHvK,KAAK8gC,KAAO9gC,KAAK0hC,aAEjB1hC,KAAKwhC,cAAoC,EAApBxhC,KAAK0hC,aAAmB,GAG/CM,EAASviC,OAAS,EAAIuiC,EAAS,GAAK,EAAIhiC,KAAKyhC,MAAQ,EAExD,CAEDQ,mBAGE,OAFsBjiC,KAAK8hC,oBAEP9hC,KAAKwhC,cAAgB,EAChC,CAACb,GAAqBK,eAG3BhhC,KAAKwhC,cAAgB,EAAIxhC,KAAKyhC,MAAQzhC,KAAKwhC,cACtC,CAACxhC,KAAKwhC,cAAgB,GAGxB,EACR,CAEDU,iBAGE,OAFoBliC,KAAK+hC,kBAEP/hC,KAAKyhC,MAAQzhC,KAAKwhC,cAAgB,EAC3C,CAACb,GAAqBC,aAG3B5gC,KAAKyhC,MAAQzhC,KAAKwhC,cAAgBxhC,KAAKwhC,cAClC,CAACxhC,KAAKyhC,MAAQzhC,KAAKwhC,eAGrB,EACR,EClFH,SAASW,GAAcvkC,GACrB,MAAM4jC,cACJA,EAAgB,EAACC,MACjBA,EAAKtsB,SACLA,GAAW,EACX0L,SAAUuhB,EAAYtB,KACtBA,EAAIY,aACJA,EAAe,GACb9jC,EAEEykC,EAAmB,IAAId,GAAiB,CAAEC,gBAAeC,QAAOX,OAAMY,iBAQ5E,MAAMY,EAAaD,EAAiBT,gBAC9BI,EAAWK,EAAiBR,cAE5BU,EAAgBF,EAAiBP,oBACjCU,EAAcH,EAAiBN,kBAqBrC,SAASU,EAAcroB,GACrB,GAAoB,iBAATA,EACT,OAAOA,EAEP,OAAQA,GACN,KAAKumB,GAAqBI,SACxB,OAAOD,EAAO,EAChB,KAAKH,GAAqBE,KACxB,OAAOC,EAAO,EAChB,KAAKH,GAAqBK,cACxB,OAAOuB,EAAgB,EACzB,KAAK5B,GAAqBC,YACxB,OAAO4B,EAAc,EACvB,QACE,OAAO,KAGd,CAED,SAASE,EAAWtoB,GAClB,OAAIA,IAASumB,GAAqBI,SAAiBD,GAAQ,EACvD1mB,IAASumB,GAAqBE,MAAaC,GAAQW,CAGxD,CAED,MA3CiB,CACfd,GAAqBI,YAClBuB,KAGAD,EAAiBJ,sBAGjBI,EAAiB/iB,MAAMijB,EAAeC,MAGtCH,EAAiBH,oBAEjBF,EACHrB,GAAqBE,MA6BP1iC,KAAKic,IACnB,MAAMuoB,EAA2B,iBAATvoB,EAExB,OAAApb,OAAAC,OAAA,CACEwd,QAAS,IA7Db,UAAqBqkB,KAAEA,IACjBA,GACFsB,EAAa,CAAEtB,QAElB,CAyDkB8B,CAAY,CAAE9B,KAAM2B,EAAcroB,KACjDknB,SAAUqB,EAAWhC,GAAqBG,KAAO1mB,EAAK1X,WACtDo+B,KAAM2B,EAAcroB,GACpBjF,SAAUA,GAAYutB,EAAWtoB,IAC7BuoB,GAAY,CAAE,eAAgBvoB,IAAS0mB,GAC5C,GAEL,CC9EA,MAAMluB,GAAMnV,EAAAA,QAAOmS,GAAyB;;;;;;;;;;;;YAYhC9R,EAAAA,SAAM;;IAEd,EAAG+kC,aACHA,GACA50B,EAAAA,GAAG;uBACgBnQ,EAAAA,SAAM;;EAIvBglC,GAAOrlC,EAAAA,QAAOC,IAAI;;;;gBAIRI,EAAAA,SAAM;;EAKhBilC,GAAWtlC,EAAAA,QAAOC,IAAmB;;;;;WAKhC,EAAG4F,WAAYA;YACdxF,EAAAA,SAAM;;gBAEFmR,cAAY,CACxB,2BAA4BQ,EAAAA,UAAU,CAAEyI,OAAQH,GAAOI,UACvD,2BAA4B1I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOM,UACvD,2BAA4B5I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOirB,OACvD,0BAA2BvzB,EAAAA,UAAU,CAAEyI,OAAQH,GAAOK;mBAEvCnJ,cAAY,CAC3B,qBAAwBQ,EAASA,UAAC,CAAEozB,SAAS;;;EAa3C,SAAUI,GAAYhwB,OAAA3P,MAC1BA,EAAQ,GAAE4U,OACVA,EAASH,GAAOI,QAAO0qB,QACvBA,GAAU,EAAKK,SACfA,GAAW,KACRC,EALuBxkC,EAAAA,OAAAsU,EAAA,CAAA,QAAA,SAAA,UAAA,aAO1B,MAAMmwB,EAAe94B,KAAKC,IAAI,EAAGD,KAAKkjB,IAAIlqB,EAAO,MAEjD,OACEtF,EAAAA,QAACC,cAAA2U,kBACCM,KAAK,cACU,gBAAAkwB,EACA,gBAAA,kBACA,IACfP,QAASA,GACLM,GAEHD,GAAYllC,EAAC,QAAAC,cAAA6kC,GAAO,MACrB9kC,EAAAA,QAAAC,cAAC8kC,GAAS,CAAAz/B,MAAO8/B,EAAcP,QAASA,EAAS3qB,OAAQA,IAG/D,CC7DA,MAAMmrB,GAAgB5lC,EAAAA,QAAO4Y,KAA0B;IACnD1Y;;IAEA2Y,GAAK,CAAA;;;;;;;;;;;WAWErH,cAAY,CACnB,eAAgBQ,EAASA,UAAC,CAAEuF,MAAO,YACnC,qBAAsBvF,EAASA,UAAC,CAAEuF,MAAO;YAEjC/F,cAAY,CACpB,gBAAiBQ,EAASA,UAAC,CAAEuF,MAAO,YACpC,sBAAuBvF,EAASA,UAAC,CAAEuF,MAAO;;sBAGxB/F,cAAY,CAC9B,mCAAoCQ,EAASA,UAAC,CAAE6M,QAAQ,IACxD,iCAAkC7M,EAASA,UAAC,CAAE6M,QAAQ;;mBAGvCrN,cAAY,CAC3B,uBAAwBQ,EAASA,UAAC,CAAEuF,MAAO,YAC3C,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO;;IAGjDhB,EAAS;kBACK/E,cAAY,CACxB,0CAA2CQ,EAASA,UAAC,CAAE6M,QAAQ,IAC/D,wCAAyC7M,EAASA,UAAC,CAAE6M,QAAQ;;;IAI/DrI,EAAS;kBACKnW,EAAAA,SAAM;eACTA,EAAAA,SAAM;sBACCA,EAAAA,SAAM;;;IAGxB6V,EAAW;EAGT2vB,GAAS7lC,EAAAA,QAAOC,IAAyB;;;;;;;;;cASjCuR,cAAY,CACpB,kBAAmBQ,EAASA,UAAC,CAAEuF,MAAO,UAAWsH,QAAQ,IACzD,yBAA0B7M,EAASA,UAAC,CAAEuF,MAAO,UAAWsH,QAAQ,IAChE,wBAAyB7M,EAASA,UAAC,CAAEuF,MAAO,QAASsH,QAAQ,IAC7D,+BAAgC7M,EAASA,UAAC,CAAEuF,MAAO,QAASsH,QAAQ;YAE9DrN,cAAY,CAClB,kBAAmBQ,EAASA,UAAC,CAAEuF,MAAO,UAAWsH,QAAQ,IACzD,yBAA0B7M,EAASA,UAAC,CAAEuF,MAAO,UAAWsH,QAAQ,IAChE,wBAAyB7M,EAASA,UAAC,CAAEuF,MAAO,QAASsH,QAAQ,IAC7D,+BAAgC7M,EAASA,UAAC,CAAEuF,MAAO,QAASsH,QAAQ;;aAG7DrN,cAAY,CACnB,qBAAsBQ,EAASA,UAAC,CAAEuF,MAAO,YACzC,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO;;cAGvC/F,cAAY,CACpB,qBAAsBQ,EAASA,UAAC,CAAEuF,MAAO,YACzC,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO;;wBAG7BlX,EAAAA,SAAM;qBACTA,EAAAA,SAAM;;MAErBH,EAAW,CACXL,eAAgB,WAChBC,SAAU;;;;EAOV6pB,GAAc3pB,EAAAA,QAAOkZ,KAAK;IAC5BuO,IAAO;EAGLqe,GAAa9lC,EAAAA,QAAOyC,GAA0B;;SAE3C+O,cAAY,CACjB,uBAAwBQ,EAASA,UAAC,CAAEuF,MAAO,YAC3C,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO;UAE3C/F,cAAY,CAClB,uBAAwBQ,EAASA,UAAC,CAAEuF,MAAO,YAC3C,6BAA8BvF,EAASA,UAAC,CAAEuF,MAAO;;WAG1C/F,cAAY,CACnB,oBAAqBQ,EAASA,UAAC,CAAEuF,MAAO,YACxC,0BAA2BvF,EAASA,UAAC,CAAEuF,MAAO;;YAGtC/F,cAAY,CACpB,qBAAsBQ,EAASA,UAAC,CAAEuF,MAAO,YACzC,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO;;WAGxClX,EAAAA,SAAM;EAGX0lC,GAAe/lC,EAAAA,QAAOyC,GAA0B;;SAE7C+O,cAAY,CACjB,yBAA0BQ,EAASA,UAAC,CAAEuF,MAAO,YAC7C,+BAAgCvF,EAASA,UAAC,CAAEuF,MAAO;UAE7C/F,cAAY,CAClB,yBAA0BQ,EAASA,UAAC,CAAEuF,MAAO,YAC7C,+BAAgCvF,EAASA,UAAC,CAAEuF,MAAO;;WAG5C/F,cAAY,CACnB,oBAAqBQ,EAASA,UAAC,CAAEuF,MAAO,YACxC,0BAA2BvF,EAASA,UAAC,CAAEuF,MAAO;;YAGtC/F,cAAY,CACpB,qBAAsBQ,EAASA,UAAC,CAAEuF,MAAO,YACzC,2BAA4BvF,EAASA,UAAC,CAAEuF,MAAO;;WAGxClX,EAAAA,SAAM;EC/HjB,MAAM2lC,GAAYhmC,EAAAA,QAAOC,IAAI;;;;;;;;;IASzBiW,EAAW;eACA7V,EAAAA,SAAM;;EAIfqV,GAAa1V,EAAAA,QAAOC,IAAc;IACpCC;;;;;;;;;;IAUAkR,GACAI,EAAAA,YAAY,CACV,WAAYQ,EAASA,UAAC,CAAEpR,KAAM,UAC9B,eAAgBoR,EAASA,UAAC,CAAEpR,KAAM,YAClC,YAAaoR,EAASA,UAAC,CAAEpR,KAAM;;;;oBAMjB4Q,cAAY,CAC5B,gBAAiBQ,EAASA,UAAC,CAAEpR,KAAM,YACnC,sBAAuBoR,EAASA,UAAC,CAAEpR,KAAM,UACzC,sBAAuBoR,EAASA,UAAC,CAAEpR,KAAM;;aAGhC4Q,cAAY,CACrB,oBAAqBQ,EAAAA,UAAU,CAAEpR,KAAM,QAASqlC,UAAYA,IAAeA,IAC3E,cAAej0B,EAAAA,UAAU,CACvBpR,KAAOA,IAAU,CAAC,QAAS,SAAS+O,SAAS/O,QAAAA,EAAQ,IACrDqlC,UAAYA,IAAeA,IAE7B,oBAAqBj0B,EAAAA,UAAU,CAAEpR,KAAM,QAASqlC,UAAYA,IAAeA,IAC3E,wBAAyBj0B,EAASA,UAAC,CAAC,CAAEpR,KAAOA,GAAkB,UAATA,EAAkBqlC,WAAW,KACnF,8BAA+Bj0B,EAASA,UAAC,CAAC,CAAEpR,KAAM,QAASqlC,WAAW;;eAG3D5lC,EAAAA,SAAM;YACTmR,cAAY,CACpB,aAAcQ,EAASA,UAAC,CAAEpR,KAAM,YAChC,mBAAoBoR,EAASA,UAAC,CAAEpR,KAAM,UACtC,mBAAoBoR,EAASA,UAAC,CAAEpR,KAAM;;iBAGzB4Q,cAAY,CACzB,kBAAmBQ,EAASA,UAAC,CAAEpR,KAAM,YACrC,wBAAyBoR,EAASA,UAAC,CAAEpR,KAAM,UAC3C,wBAAyBoR,EAASA,UAAC,CAAEpR,KAAM;;WAGpC4Q,cAAY,CACnB,oBAAqBQ,EAASA,UAAC,CAAEX,QAAS,YAC1C,qBAAsBW,EAASA,UAAC,CAAEX,QAAS,aAC3C,mBAAoBW,EAASA,UAAC,CAAEX,QAAS,WACzC,oBAAqBW,EAASA,UAAC,CAAEX,QAAS,YAC1C,oBAAqBW,EAASA,UAAC,CAAEX,QAAS,YAC1C,mBAAoBW,EAASA,UAAC,CAAEX,QAAS;;gBAG7BG,cAAY,CACxB,yBAA0BQ,EAASA,UAAC,CAAEX,QAAS,YAC/C,0BAA2BW,EAASA,UAAC,CAAEX,QAAS,aAChD,wBAAyBW,EAASA,UAAC,CAAEX,QAAS,WAC9C,yBAA0BW,EAASA,UAAC,CAAEX,QAAS,YAC/C,yBAA0BW,EAASA,UAAC,CAAEX,QAAS,YAC/C,wBAAyBW,EAASA,UAAC,CAAEX,QAAS;;mBAG/BhR,EAAAA,SAAM;kBACPA,EAAAA,SAAM;;;kBAGNmR,cAAY,CAC1B,2BAA4BQ,EAASA,UAAC,CAAEX,QAAS,YACjD,4BAA6BW,EAASA,UAAC,CAAEX,QAAS,aAClD,0BAA2BW,EAASA,UAAC,CAAEX,QAAS,WAChD,2BAA4BW,EAASA,UAAC,CAAEX,QAAS,YACjD,2BAA4BW,EAASA,UAAC,CAAEX,QAAS,YACjD,0BAA2BW,EAASA,UAAC,CAAEX,QAAS;;IAGhDkF,EAAS;kBACK/E,cAAY,CACxB,gCAAiCQ,EAAAA,UAAU,CACzC,CAAEX,QAAS,UAAW40B,WAAW,GACjC,CAAE50B,QAAS,UAAW6M,KAAMH,WAE9B,iCAAkC/L,EAAAA,UAAU,CAC1C,CAAEX,QAAS,WAAY40B,WAAW,GAClC,CAAE50B,QAAS,WAAY6M,KAAMH,WAE/B,+BAAgC/L,EAAAA,UAAU,CACxC,CAAEX,QAAS,SAAU40B,WAAW,GAChC,CAAE50B,QAAS,SAAU6M,KAAMH,WAE7B,gCAAiC/L,EAAAA,UAAU,CACzC,CAAEX,QAAS,UAAW40B,WAAW,GACjC,CAAE50B,QAAS,UAAW6M,KAAMH,WAE9B,gCAAiC/L,EAAAA,UAAU,CACzC,CAAEX,QAAS,UAAW40B,WAAW,GACjC,CAAE50B,QAAS,UAAW6M,KAAMH,WAE9B,+BAAgC/L,EAAAA,UAAU,CACxC,CAAEX,QAAS,SAAU40B,WAAW,GAChC,CAAE50B,QAAS,SAAU6M,KAAMH;;oBAIfvM,cAAY,CAC1B,kCAAmCQ,EAAAA,UAAU,CAC3C,CAAEX,QAAS,UAAW40B,WAAW,GACjC,CAAE50B,QAAS,UAAW6M,KAAMH,WAE9B,mCAAoC/L,EAAAA,UAAU,CAC5C,CAAEX,QAAS,WAAY40B,WAAW,GAClC,CAAE50B,QAAS,WAAY6M,KAAMH,WAE/B,iCAAkC/L,EAAAA,UAAU,CAC1C,CAAEX,QAAS,SAAU40B,WAAW,GAChC,CAAE50B,QAAS,SAAU6M,KAAMH,WAE7B,kCAAmC/L,EAAAA,UAAU,CAC3C,CAAEX,QAAS,UAAW40B,WAAW,GACjC,CAAE50B,QAAS,UAAW6M,KAAMH,WAE9B,kCAAmC/L,EAAAA,UAAU,CAC3C,CAAEX,QAAS,UAAW40B,WAAW,GACjC,CAAE50B,QAAS,UAAW6M,KAAMH,WAE9B,iCAAkC/L,EAAAA,UAAU,CAC1C,CAAEX,QAAS,SAAU40B,WAAW,GAChC,CAAE50B,QAAS,SAAU6M,KAAMH;;aAItBvM,cAAY,CACnB,2BAA4BQ,EAAAA,UAAU,CACpC,CAAEX,QAAS,UAAW40B,WAAW,GACjC,CAAE50B,QAAS,UAAW6M,KAAMH,WAE9B,4BAA6B/L,EAAAA,UAAU,CACrC,CAAEX,QAAS,WAAY40B,WAAW,GAClC,CAAE50B,QAAS,WAAY6M,KAAMH,WAE/B,0BAA2B/L,EAAAA,UAAU,CACnC,CAAEX,QAAS,SAAU40B,WAAW,GAChC,CAAE50B,QAAS,SAAU6M,KAAMH,WAE7B,2BAA4B/L,EAAAA,UAAU,CACpC,CAAEX,QAAS,UAAW40B,WAAW,GACjC,CAAE50B,QAAS,UAAW6M,KAAMH,WAE9B,2BAA4B/L,EAAAA,UAAU,CACpC,CAAEX,QAAS,UAAW40B,WAAW,GACjC,CAAE50B,QAAS,UAAW6M,KAAMH,WAE9B,0BAA2B/L,EAAAA,UAAU,CACnC,CAAEX,QAAS,SAAU40B,WAAW,GAChC,CAAE50B,QAAS,SAAU6M,KAAMH;;;IAK/BvH,EAAS;aACAhF,cAAY,CACnB,2BAA4BQ,EAASA,UAAC,CAAEX,QAAS,YACjD,4BAA6BW,EAASA,UAAC,CAAEX,QAAS,aAClD,0BAA2BW,EAASA,UAAC,CAAEX,QAAS,WAChD,2BAA4BW,EAASA,UAAC,CAAEX,QAAS,YACjD,2BAA4BW,EAASA,UAAC,CAAEX,QAAS,YACjD,0BAA2BW,EAASA,UAAC,CAAEX,QAAS;kBAEpCG,cAAY,CACxB,gCAAiCQ,EAASA,UAAC,CAAEX,QAAS,YACtD,iCAAkCW,EAASA,UAAC,CAAEX,QAAS,aACvD,+BAAgCW,EAASA,UAAC,CAAEX,QAAS,WACrD,gCAAiCW,EAASA,UAAC,CAAEX,QAAS,YACtD,gCAAiCW,EAASA,UAAC,CAAEX,QAAS,YACtD,+BAAgCW,EAASA,UAAC,CAAEX,QAAS;kBAEzChR,EAAAA,SAAM;eACTmR,cAAY,CACrB,sBAAuBQ,EAASA,UAAC,CAAEX,QAAS,YAC5C,uBAAwBW,EAASA,UAAC,CAAEX,QAAS,aAC7C,qBAAsBW,EAASA,UAAC,CAAEX,QAAS,WAC3C,sBAAuBW,EAASA,UAAC,CAAEX,QAAS,YAC5C,sBAAuBW,EAASA,UAAC,CAAEX,QAAS,YAC5C,qBAAsBW,EAASA,UAAC,CAAEX,QAAS;sBAE3BhR,EAAAA,SAAM;;;IAGxB6V,EAAW;eACA7V,EAAAA,SAAM;;EAIfuV,GAAU5V,EAAAA,QAAOC,IAAmB;aAC7BuR,cAAY,CACrB,sBAAuBQ,EAASA,UAAC,CAAEpR,KAAM,YACzC,4BAA6BoR,EAASA,UAAC,CAAEpR,KAAM,UAC/C,4BAA6BoR,EAASA,UAAC,CAAEpR,KAAM;cAErCP,EAAAA,SAAM;;;;;EAOd6lC,GAAoBlmC,EAAAA,QAAOgW,MAAwC;;;;;;;;;gBASzD3V,EAAAA,SAAM;mBACHA,EAAAA,SAAM;;;WAGdmR,cAAY,CACnB,yBAA0BQ,EAASA,UAAC,CAAEpR,KAAM,YAC5C,+BAAgCoR,EAASA,UAAC,CAAEpR,KAAM,UAClD,+BAAgCoR,EAASA,UAAC,CAAEpR,KAAM;;YAG1C4Q,cAAY,CACpB,yBAA0BQ,EAASA,UAAC,CAAEpR,KAAM,YAC5C,+BAAgCoR,EAASA,UAAC,CAAEpR,KAAM,UAClD,+BAAgCoR,EAASA,UAAC,CAAEpR,KAAM;;;;IAKlDsV,EAAW;eACA7V,EAAAA,SAAM;;;IAGjBmW,EAAS;;cAECd;aACDlE,cAAY,CACnB,2BAA4BQ,EAASA,UAAC,CAAEX,QAAS,YACjD,4BAA6BW,EAASA,UAAC,CAAEX,QAAS,aAClD,0BAA2BW,EAASA,UAAC,CAAEX,QAAS,WAChD,2BAA4BW,EAASA,UAAC,CAAEX,QAAS,YACjD,2BAA4BW,EAASA,UAAC,CAAEX,QAAS,YACjD,0BAA2BW,EAASA,UAAC,CAAEX,QAAS;;kBAGpCG,cAAY,CACxB,gCAAiCQ,EAASA,UAAC,CAAEX,QAAS,YACtD,iCAAkCW,EAASA,UAAC,CAAEX,QAAS,aACvD,+BAAgCW,EAASA,UAAC,CAAEX,QAAS,WACrD,gCAAiCW,EAASA,UAAC,CAAEX,QAAS,YACtD,gCAAiCW,EAASA,UAAC,CAAEX,QAAS,YACtD,+BAAgCW,EAASA,UAAC,CAAEX,QAAS;kBAEzChR,EAAAA,SAAM;;EAIlB8lC,GAAYnmC,EAAAA,QAAOyC,GAAuC;WACrD+O,cAAY,CACnB,8BAA+BQ,EAASA,UAAC,CAAEpR,KAAM,YACjD,oCAAqCoR,EAASA,UAAC,CAAEpR,KAAM,UACvD,oCAAqCoR,EAASA,UAAC,CAAEpR,KAAM;;YAG/C4Q,cAAY,CACpB,8BAA+BQ,EAASA,UAAC,CAAEpR,KAAM,YACjD,oCAAqCoR,EAASA,UAAC,CAAEpR,KAAM,UACvD,oCAAqCoR,EAASA,UAAC,CAAEpR,KAAM;;WAGhD4Q,cAAY,CACnB,oBAAqBQ,EAASA,UAAC,CAAEX,QAAS,YAC1C,qBAAsBW,EAASA,UAAC,CAAEX,QAAS,aAC3C,mBAAoBW,EAASA,UAAC,CAAEX,QAAS,WACzC,oBAAqBW,EAASA,UAAC,CAAEX,QAAS,YAC1C,oBAAqBW,EAASA,UAAC,CAAEX,QAAS,YAC1C,mBAAoBW,EAASA,UAAC,CAAEX,QAAS;;;EAMvC+0B,GAAepmC,EAAAA,QAAOC,IAAmB;;WAEpCuR,cAAY,CACnB,EAAKQ,EAASA,UAAC,CAAEpR,KAAM,UACvB,WAAYoR,EAASA,UAAC,CAAEpR,KAAM,YAC9B,UAAWoR,EAASA,UAAC,CAAEpR,KAAM;EAKjC,SAASylC,GAAIlmC,GACX,MAAMyS,SACJA,EAAQ4E,QACRA,EAAO5W,KACPA,EAAO,UAAS0lC,SAChBA,EAAQj1B,QACRA,EAAO40B,UACPA,EAASM,qBACTA,EAAoB7uB,SACpBA,GAAW,GAETvX,EADCwX,EACDzW,SAAAf,EAVE,CAAA,WAAA,UAAA,OAAA,WAAA,UAAA,YAAA,uBAAA,aAYN,OACEI,wBAACylC,GAAS,KACRzlC,EAAAA,QAACC,cAAAkV,GAAWnU,OAAAC,OAAA,CAAAZ,KAAMA,EAAMyQ,QAASA,GAAasG,GAC3CH,GAAWjX,wBAACqV,GAAO,CAAChV,KAAMA,GAAO4W,GACjC5E,EACAqzB,IAAcvuB,GACbnX,EAAAA,QAAAC,cAAAD,EAAAA,QAAA4W,SAAA,KACE5W,EAAA,QAAAC,cAAC4lC,GAAyB,CAAA,cAAA,OAAOxlC,KAAMA,IACvCL,UAAAC,cAAC0lC,GACC3kC,OAAAC,OAAA,CAAA0E,KAAK,UACDqgC,eAAAA,KACJ3lC,KAAMA,EACNoe,QAASsnB,IAET/lC,EAAAA,QAACC,cAAA2lC,IAAUxlC,KAAK,QAAQ0Q,QAASA,EAASzQ,KAAMA,OAO9D,CCzXA,MAAMglB,GAAY5lB,EAAAA,QAAOmS,GAAmB;;;WAGjC9R,EAAAA,SAAM;;aAEJA,EAAAA,SAAM,sBAAsBA,EAAKoQ,SAAC;;;WAGpCpQ,EAAAA,SAAM;iBACAA,EAAAA,SAAM;eACRA,EAAAA,SAAM;iBACJA,EAAAA,SAAM;;gBAEPmR,cAAY,CACxB,2BAA4BQ,EAAAA,UAAU,CAAEyI,OAAQH,GAAOI,UACvD,2BAA4B1I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOM,UACvD,2BAA4B5I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOirB,OACvD,0BAA2BvzB,EAAAA,UAAU,CAAEyI,OAAQH,GAAOK;mBAEvCta,EAAAA,SAAM;gBACTA,EAAAA,SAAM;EAGhBgrB,GAAUrrB,EAAAA,QAAOmS,GAAG;;;;EAMpByD,GAAU5V,EAAAA,QAAOC,IAAI;;EAIrBumC,GAAiBxmC,EAAAA,QAAOwlC,GAAY;;;;EAKpCxtB,GAAchY,EAAAA,QAAOsqB,GAAmB;;;SAGrCjqB,EAAAA,SAAM;WACJA,EAAAA,SAAM;;WAENA,EAAAA,SAAM;EA+DjB,SAASomC,IAAUhsB,OAAEA,IACnB,IAAIsQ,EAAW,GAEf,OAAQtQ,GACN,KAAKH,GAAOM,QACVmQ,EAAW,QACX,MAEF,KAAKzQ,GAAOirB,KACZ,KAAKjrB,GAAOK,OACVoQ,EAAW,UACX,MAEF,QACEA,EAAW,cAGf,OAAOxqB,EAAA,QAAAC,cAACiC,GAAI,CAAC9B,KAAMoqB,EAAUnqB,KAAM,IACrC,CClIM,SAAU8lC,GAAgBtgB,GAC9B,MAAO,wBAAwBA,GACjC,CCRA,MAAMugB,GAAepmC,EAAAA,QAAM2kB,cAA+B,ICcpD0hB,GAAgB5mC,EAAAA,QAAOC,IAA2B;;SAE/CuR,cAAY,CACjB,qBAAsBQ,EAASA,UAAC,CAAE60B,UAAU,IAC5C,+BAAgC70B,EAASA,UAAC,CAAE60B,UAAU;uBAEnCxmC,EAAAA,SAAM;qBACRA,EAAAA,SAAM;;;;YAIfmR,cAAY,CACpB,wBAAyBQ,EAASA,UAAC,CAAE60B,UAAU,IAC/C,kCAAmC70B,EAASA,UAAC,CAAE60B,UAAU;;gBAG7Cr1B,cAAY,CACxB,uCAAwCQ,EAASA,UAAC,CAAE60B,UAAU,IAC9D,iDAAkD70B,EAASA,UAAC,CAAE60B,UAAU;EAItEC,GAAsB9mC,EAAAA,QAAO4e,EAAE;;;;;;;;;iBASpBgoB;;;EAKXG,GAAwB/mC,EAAAA,QAAOmS,GAAG;;;;;;eAMzB9R,EAAAA,SAAM;EAGf2mC,GAAgBhnC,EAAAA,QAAOC,IAA6C;IACtEC;;IAEA2Y,GAAK,CACLvI,OAAQ,mBACRxP,OAAQ;;eAGGT,EAAAA,SAAM;;YAETA,EAAAA,SAAM;WACPA,EAAAA,SAAM;;;;;;;;kBAQCmR,cAAY,CAC1B,iDAAkDQ,EAAAA,UAAU,CAC1D,CAAE8H,SAAS,EAAM+sB,SAAU,EAAC,GAAM,IAClC,CAAE/sB,SAAS,EAAO+sB,UAAU,KAE9B,uCAAwC70B,EAASA,UAAC,CAAE8H,SAAS,EAAO+sB,UAAU;mBAE/DxmC,EAAAA,SAAM;;gBAETmR,cAAY,CACxB,iDAAkDQ,EAAAA,UAAU,CAC1D,CAAE8H,SAAS,EAAO+sB,UAAU,KAE9B,sBAAuB70B,EAAAA,UAAU,CAC/B,CAAE8H,SAAS,EAAM+sB,SAAU,EAAC,GAAM,IAClC,CAAE/sB,SAAS,EAAO+sB,UAAU;;WAIvBr1B,cAAY,CACnB,uCAAwCQ,EAASA,UAAC,CAAE8H,SAAS,EAAO+sB,UAAU,IAC9E,sBAAuB70B,EAASA,UAAC,CAAE8H,SAAS,EAAO+sB,UAAU,IAC7D,iDAAkD70B,EAASA,UAAC,CAAE8H,SAAS;EAIrEmtB,GAAYjnC,EAAAA,QAAOC,IAA6C;IAClE4Y,GAAK,CACL/X,OAAQ;;;;iBAKK0Q,cAAY,CACzB,qBAAsBQ,EAASA,UAAC,CAAE8H,SAAS,IAC3C,mBAAoB9H,EAASA,UAAC,CAAE8H,SAAS;;WAGlCtI,cAAY,CACnB,uBAAwBQ,EAASA,UAAC,CAAC,CAAE8H,SAAS,GAAQ,CAAEA,SAAS,EAAO+sB,UAAU,KAClF,gBAAiB70B,EAASA,UAAC,CAAE8H,SAAS,EAAO+sB,UAAU;;eAG5CxmC,EAAAA,SAAM;;;;;;;;;;YAUTA,EAAAA,SAAM;EAGlB,SAAS6mC,GAAa/mC,GACpB,MAAM4hB,KAAEA,EAAIjI,QAAEA,EAAOqtB,UAAEA,GAAchnC,EAErC,OACEI,wBAACumC,GAAmB,KAClBvmC,EAAA,QAAAC,cAACumC,GACa,CAAA,cAAA,uBACZhmC,UAAWwX,GAAK,CACd,aAAcuB,EACd,cAAeiI,EAAK8kB,YAGtBtmC,EAAAA,QAAAC,cAACwmC,GAAa,CAAA,cAAa,OAAOltB,QAASA,EAAS+sB,SAAU9kB,EAAK8kB,UAChEM,GAGH5mC,EAAAA,QAAAC,cAACymC,GAAS,CAACntB,QAASA,EAAS+sB,SAAU9kB,EAAK8kB,UACzC9kB,EAAKnJ,OAGRrY,UAACC,cAAAomC,GAAc,CAAAC,SAAU9kB,EAAK8kB,YAItC,CCnJA,MAAMO,GAAkBpnC,EAAAA,QAAOsf,EAAqB;;;;;;aAMvCjf,EAAAA,SAAM,+BAA+BA,EAAKoQ,SAAC;EAGxD,SAAS42B,GAAclnC,GACrB,MAAMmnC,MAAEA,EAAKxtB,QAAEA,GAAY3Z,EAE3B,OACEI,EAAAA,sBAAC6mC,GAAe,CAACE,MAAOA,GAAS,KAC7BA,GAAS,IAAI5mC,KAAI,SAAoBqhB,EAAMld,GAC3C,MAAMuhB,GAAEA,GAAOrE,EAEf,OAAOxhB,EAAAA,QAAAC,cAAC0mC,GAAa,CAAAhlC,IAAKkkB,EAAItM,QAASA,IAAYsM,EAAI+gB,UAAWtiC,EAAQ,EAAGkd,KAAMA,GACpF,IAGP,CCnBA,MAAM9I,GAAWjZ,EAAAA,QAAOkZ,KAAK;IACzBuO,IAAO;EAGE8f,GAAcvnC,EAAAA,QAAOmnB,OAAO;IACrCtO,GAAK,CACLvI,OAAQ,qBACRxP,OAAQ;;eAGGT,EAAAA,SAAM,2BAA2BA,EAAKoQ,SAAC;;IAElDwI;;;;IAIAA;;;ECXJ,MAAMuuB,GAAexnC,EAAAA,QAAO0oB,OAAO;;;;WAIxBroB,EAAAA,SAAM;EAIjB,SAASonC,GAAMjyB,GAAA,IAAA4Q,GACbA,EAAExT,SACFA,EAAQkH,QACRA,EAAOwtB,MACPA,GAAK9xB,EACFmC,EALUzW,EAAAA,OAAAsU,EAAA,CAAA,KAAA,WAAA,UAAA,UAcb,OAPA0E,EAASA,WACP,YLpCE,SAAgBkM,GACpB,MAAMshB,EAAe9b,SAAS+b,eAAevhB,GAEzCshB,IACFA,EAAarf,SAAU,EAE3B,CK+BMnlB,CAAMwjC,GAAgB5sB,GACxB,GACA,CAACA,IAIDvZ,UAACC,cAAAgnC,GAAajmC,OAAAC,OAAA,CAAA4kB,GAAIhlB,OAAOglB,IAASzO,GAChCpX,EAAC,QAAAC,cAAA6mC,IAAcvtB,QAASA,EAASwtB,MAAOA,IACxC/mC,UAAAC,cAACmmC,GAAatgB,SAAQ,CAACxgB,MAAOugB,GAAKxT,GAGzC,CAEA60B,GAAM/f,aAAe,CACnB7P,OAAQ,SAGV4vB,GAAMG,KDlBN,SAAmBpyB,OAAA5C,SAAEA,EAAQwT,GAAEA,GAAE5Q,EAAKmC,EAAMzW,EAAAA,OAAAsU,EAAzB,mBACjB,MAAMqyB,EAAUniB,aAAWihB,IAE3B,OACEpmC,wBAAC4W,EAAAA,SAAQ,KACP5W,UAAAC,cAACyY,GAAQ,CACP/S,KAAK,QACLnF,UAAU,kBACVqlB,GAAIsgB,GAAgBtgB,GACpBzlB,KAAMS,OAAOymC,GACbhiC,MAAOugB,EAAE,cACG,cACZyc,UAAW,IAEbtiC,EAAA,QAAAC,cAAC+mC,GAAwBhmC,OAAAC,OAAA,CAAA,cAAA,cAAiBmW,GAAQyO,GAAIhlB,OAAOglB,KAC1DxT,GAIT,EE9CA,MAAM8C,GAAa1V,EAAAA,QAAOC,IAAI;;;;;;;EASxB2V,GAAU5V,EAAAA,QAAO0V,GAAW;kBAChBrV,EAAAA,SAAM;EAGlBN,GAAUC,EAAAA,QAAOmS,GAAG;aACb9R,EAAAA,SAAM,qBAAqBA,EAAKoQ,SAAC;;WAEnCpQ,EAAAA,SAAM;iBACAA,EAAAA,SAAM;eACRA,EAAAA,SAAM;iBACJA,EAAAA,SAAM;ECbvB,MAAMynC,GAAe9nC,EAAAA,QAAOmS,GAAG;eAChB9R,EAAAA,SAAM,qBAAqBA,EAAKoQ,SAAC;;WAErCpQ,EAAAA,SAAM;iBACAA,EAAAA,SAAM;eACRA,EAAAA,SAAM;EAGf0nC,GAAgB/nC,EAAAA,QAAOgoC,EAAE;;;;;;6BAMF3nC,EAAAA,SAAM;EAG7B4nC,GAAWjoC,EAAAA,QAAOmS,GAAG;aACd9R,EAAAA,SAAM,qBAAqBA,EAAKoQ,SAAC;EAGxC1Q,GAAUC,EAAAA,QAAOmS,GAAG;IACtB0G,GAAK,CAAA;;;;;WAKExY,EAAAA,SAAM;;IAEb6nC,QAAsBJ;kBACRznC,EAAAA,SAAM;;;IAGpB6nC,QAAsBH;kBACR1nC,EAAAA,SAAM;;;sBAGFA,EAAAA,SAAM;mBACTA,EAAAA,SAAM;gBACTA,EAAAA,SAAM;EAGhBulB,GAAY5lB,EAAAA,QAAOmS,GAAyB;;;;;iBAKjC9R,EAAAA,SAAM;;IAEnB,EAAG8nC,aACHA,GACA33B,EAAAA,GAAG;QACCu3B;iCACyB1nC,EAAAA,SAAM;;;EAKjC+nC,GAAOpoC,EAAAA,QAAOC,IAAwB;;cAE9BI,EAAAA,SAAM;;gBAEJmR,cAAY,CACxB,+BAAgCQ,EAAAA,UAAU,CAAEyI,OAAQH,GAAOI,UAC3D,8BAA+B1I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOK,SAC1D,+BAAgC3I,EAAAA,UAAU,CAAEyI,OAAQH,GAAOirB,OAC3D,+BAAgCvzB,EAAAA,UAAU,CAAEyI,OAAQH,GAAOM;mBAE5Cva,EAAAA,SAAM,6BAA6BA,EAAKoQ,SAAC;EAG5D,SAAS43B,GAAK7yB,GAAA,IAAA2yB,QACZA,GAAU,EAAK1tB,OACfA,EAASH,GAAOI,QAAO9H,SACvBA,GAEU4C,EADPmC,EAAMzW,EAAAA,OAAAsU,EAJG,iCAMZ,OACEjV,EAAAA,QAAAC,cAACT,GAAOwB,OAAAC,OAAA,CAAA,EAAKmW,GACVwwB,GAAW5nC,EAAAA,sBAAC6nC,GAAI,CAAC3tB,OAAQA,EAAoB,aAAAA,IAC9Cla,EAAC,QAAAC,cAAAolB,GAAU,CAAAuiB,QAASA,GAAUv1B,GAGpC,CAEAy1B,GAAKtf,MDrEL,SAAmBvT,OAAA5C,SAAEA,EAAQ4E,QAAEA,GAAOhC,EAAKmC,EAAMzW,EAAAA,OAAAsU,EAA9B,wBACjB,OACEjV,EAAAA,QAAAC,cAACT,GAAOwB,OAAAC,OAAA,CAAA,EAAKmW,GACVH,GAAWjX,EAAAA,QAAAC,cAACoV,GAAO,KAAE4B,GACrB5E,EAGP,EC+DAy1B,GAAKC,SAAWR,GAChBO,GAAKE,UAAYR,GACjBM,GAAKre,KAAOie,GCpGN,MAAAO,GAAkBtjB,EAAAA,cAAqC,CAC3DxN,UAAU,EACV+wB,gBAAgB,EAChBvf,UAAU,EACVtI,OAAQ,WAEP,ICgBG8nB,GAAgB1oC,EAAM,QAACy/B,GAAQoC,SAAS;aACjCxhC,EAAAA,SAAM;;;;gBAIHA,EAAAA,SAAM;sBACAA,EAAAA,SAAM;mBACTA,EAAAA,SAAM;gBACTA,EAAAA,SAAM;;EAIhBqV,GAAa1V,EAAAA,QAAOC,IAAI;;;;;;;EASxB2V,GAAU5V,EAAAA,QAAO0V,GAAW;;EAI5BG,GAAW7V,EAAAA,QAAO0V,GAAW;;EAI7BI,GAAW9V,EAAAA,QAAOC,IAAI;;;;;aAKfI,EAAAA,SAAM;;;EAKbsoC,GAAsB3oC,EAAAA,QAAOgW,MAAM;IACrC9V;;;;;;IAMA2Y,GAAK,CACL/X,OAAQ,gBACRwP,OAAQ;eAEGjQ,EAAAA,SAAM;;;;;;mBAMFA,EAAAA,SAAM;gBACTA,EAAAA,SAAM;;WAEXA,EAAAA,SAAM;;eAEFA,EAAAA,SAAM;;cAEPA,EAAAA,SAAM;;;;IAIhBkW,EAAS;kBACKlW,EAAAA,SAAM;;;IAGpBmW,EAAS;kBACKnW,EAAAA,SAAM;;;IAGpB6V;;IAEAJ;;;;;;IAMAF,OAAYC;;;;IAIZD,QAAaE;oBACGzV,EAAAA,SAAM;;;IAGtByV,QAAcD;oBACExV,EAAAA,SAAM;;EAIpBuoC,GAAwB5oC,EAAAA,QAAO6oC,MAAM;;;;;IAKvChwB,GAAK,CACL/X,OAAQ,gBACRwP,OAAQ;;eAGGjQ,EAAAA,SAAM;;cAEPA,EAAAA,SAAM;EAGdyoC,GAAyB9oC,EAAAA,QAAOmS,GAAG;;;EAKnC42B,GAA6B/oC,EAAAA,QAAOmS,GAAG;;;aAGhC9R,EAAAA,SAAM;;IAEfwY,GAAK,CACL/X,OAAQ,gBACRwP,OAAQ;;eAGGjQ,EAAAA,SAAM;EAGf2oC,GAAsBhpC,EAAAA,QAAO+oC,GAA2B;;;;;;IAM1DJ,QAAyBA;IACzBC,QAA2BD;kBACbtoC,EAAAA,SAAM;;;IAGpByoC,QAA4BA;cAClBzoC,EAAAA,SAAM;;;IAGhB0oC;QACIA;IACJA,QAAgCA;4BACR1oC,EAAAA,SAAM;;EAIrB4oC,GAAoBjpC,EAAAA,QAAOgoC,GAAGnxB,MAAM,CAC/C,eAAe,GACf;;;;YAIUxW,EAAAA,SAAM;;;6BAGWA,EAAAA,SAAM;EAGtB6oC,GAAe7xB,EAAAA,YAA8C,SACxElX,EACAmX,GAEA,MAAM2I,EAAUyF,aAAW8iB,IAE3B,IAAKvoB,EACH,MAAM,IAAI6C,MAAM,iDAGlB,MAAMlQ,SAAEA,EAAQu2B,OAAEA,EAAMC,OAAEA,GAAsBjpC,EAAXwX,EAAWzW,EAAAA,OAAAf,EAA1C,CAAA,WAAA,SAAA,YACA+oB,SAAEA,GAAajJ,EAErB,OAAKiJ,EAKH3oB,EAAC,QAAAC,cAAAkoC,GAAc,CAAAjzB,KAAK,gBACjB0zB,GAAU5oC,EAAAA,QAAAC,cAACuoC,GAA0B,KAAEI,GACvCv2B,GACCrS,EAAA,QAAAC,cAACwoC,GAAoBznC,OAAAC,OAAA,CAAA8V,IAAKA,EAAK7B,KAAK,qBAAmB,iBAAoBkC,GACxE/E,GAGJw2B,GAAU7oC,wBAACwoC,GAA0B,KAAEK,IAXnC,IAcX,IAEM,SAAUC,GAAiBlpC,GAC/B,MAAM8f,EAAUyF,aAAW8iB,KACrBhxB,QAAEA,EAAO5E,SAAEA,EAAQ6E,SAAEA,EAAQuH,QAAEA,GAAuB7e,EAAXwX,EAAMzW,EAAAA,OAAKf,EAAtD,CAAA,UAAA,WAAA,WAAA,YACAimB,EAAKI,GAAM7O,EAAOyO,IAExB,IAAKnG,EACH,MAAM,IAAI6C,MAAM,qDAGlB,MAAMlC,OAAEA,GAAWX,EAEnB,OACE1f,wBAACooC,GAAmBpnC,OAAAC,OAAA,CAClBiU,KAAK,WACLvP,KAAK,uBACO,sBACRyR,EAAM,CAAA,kBACOyO,EACjBpH,QAAUvV,IACRA,EAAE6/B,WAEqBtqB,eAAAA,EAAUvV,KAG/BmX,GACD,IAGFpJ,GAAWjX,EAAAA,QAAAC,cAACoV,GAAO,KAAE4B,GACtBjX,EAAA,QAAAC,cAACsV,GAAS,CAAAsQ,GAAIA,GAAKxT,GAClB6E,GAAYlX,wBAACsV,GAAQ,KAAE4B,GAG9B,CCtPA,MAAM8xB,GAAiB,CACrBC,IAAK,MACLC,WAAY,YACZC,WAAY,YACZC,YAAa,aACbC,SAAU,UACVC,QAAS,UACTC,MAAO,QACPC,OAAQ,SACRC,MAAO,QACPC,MAAO,IACPC,IAAK,MACLC,YAAa,IACbC,IAAK,IACLC,KAAM,IACNC,MAAO,KAMH,SAAUC,GAAe9gC,GAE7B,OAAIA,EAAE+gC,SAAW,IAAM/gC,EAAE+gC,SAAW,IAAiC,IAA3B/gC,EAAEvH,IAAIuoC,QAAQ,SAC/C,QAAQhhC,EAAEvH,MAGZuH,EAAEvH,GACX,CAEA,SAASwoC,GAAYjhC,GAGnB,MAAMvH,EAAMqoC,GAAe9gC,GAE3B,MAAO,CACLkhC,GAAGC,GACD,MAAMC,EAAengC,UAAQkgC,GAAWlqC,KAAKoqC,GAAavB,GAAeuB,KAEzE,OAAOpgC,EAAOA,QAACmgC,GAAcl7B,SAASzN,EACvC,EAEL,CCzCA,SAAS6oC,GACPC,EACAC,EACAvzB,GAAW,GAEX,MAAOmH,EAAQqsB,GAAaxxB,EAAQA,UAAC,GAE/BG,EAAeG,eACnB,WACE,OAAOgxB,EAAUlxB,OACnB,GACA,CAACkxB,IAGGG,EAAcnxB,EAAAA,aAClB,SAAqBsO,SAKnB,IAAKzO,KAAkBnC,EACrB,OAGF,MAAM7V,EAASymB,EAAMzmB,OACfupC,UAAY51B,EAAAqE,0BAAgBwxB,SAASxpC,IAEtCgd,GAAUusB,EACbF,GAAU,IACDrsB,GAAYusB,IAZdV,GAAYpiB,GAAyCqiB,GAAG,YAa/DO,GAAU,GACVD,EAAS3iB,GAEZ,GACD,CAACzJ,EAAQosB,EAAUvzB,EAAUmC,IAG/BK,EAAAA,WAAU,KAEN0R,SAASzR,iBAAiB,YAAagxB,GAAa,GACpDvf,SAASzR,iBAAiB,WAAYgxB,GAAa,GACnDvf,SAASzR,iBAAiB,QAASgxB,GAW9B,KAPLvf,SAASvR,oBAAoB,YAAa8wB,GAAa,GACvDvf,SAASvR,oBAAoB,WAAY8wB,GAAa,GACtDvf,SAASvR,oBAAoB,QAAS8wB,EAMzB,IAEd,CAACA,GACN,CCvBA,MAAMG,GAAwB96B,EAAGA,GAAA;;aAEpBnQ,EAAAA,SAAM;;EAgBbkrC,GAAgBvrC,EAAM,QAC1B8X,IACAjB,OAd0B1W,GACiB,kBAAnBA,EAAMqrC,UAAyBrrC,EAAMqrC,SAEpDrrC,EAGToB,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACKrB,GAAK,CACRkR,QAAS,cAMc;;;;;;;YAOfhR,EAAAA,SAAM;;oBAEEmR,cAAY,CAC5Bi6B,WAAYz5B,EAASA,UAAC,CAAEw5B,UAAU,EAAOn6B,QAAS,aAClDq6B,UAAW15B,EAASA,UAAC,CAAEw5B,UAAU;;iBAGpBh6B,cAAY,CACzB,sBAAuBQ,EAASA,UAAC,CAAEw5B,UAAU;;IAG7Cj1B,EAAS;sBACS/E,cAAY,CAC1B,oBAAqBQ,EAASA,UAAC,CAAEw5B,UAAU;;qBAG9Bh6B,cAAY,CACzB,mBAAoBQ,EAASA,UAAC,CAAEw5B,UAAU;;QAG1CF;;;IAGJ90B,EAAS;oBACOhF,cAAY,CACxB6V,KAAMrV,EAASA,UAAC,CAAEw5B,UAAU;;0BAGVh6B,cAAY,CAC9B,oBAAqBQ,EAASA,UAAC,CAAEw5B,UAAU;;qBAG9Bh6B,cAAY,CACzB,mBAAoBQ,EAASA,UAAC,CAAEw5B,UAAU;;;QAI1CF;;;MAGF,EAAG14B,WAAU44B,eACf,IAAiB,IAAbA,GAA0C,iBAAb54B,EAC/B,OAAOpC,EAAGA,GAAA;;;;;;;;;;;;;;yBAcSnQ,EAAAA,SAAM;;;;;;;;sBAQTuS;sBACAA;;;;;;;;OASjB;EAIC+4B,GAAyB3rC,EAAAA,QAAOmS,GAAgC;IAClEjS;;IAEAkR,GACAI,EAAAA,YAAY,CACV,YAAaQ,EAASA,UAAC,CAAEiE,OAAQ,YACjC,YAAajE,EAASA,UAAC,CAAEiE,OAAQ,UACjC,YAAajE,EAASA,UAAC,CAAEiE,OAAQ;;;;;;mBAQpB5V,EAAAA,SAAM;kBACPA,EAAAA,SAAM;;kBAENmR,cAAY,CAC1B,gCAAiCQ,EAASA,UAAC,CAAE6F,OAAQ,QAAS+zB,WAAW,IACzE,qCAAsC55B,EAASA,UAAC,CAAE6F,OAAQ,OAAQ+zB,WAAW,IAC7E,yCAA0C55B,EAASA,UAAC,CAAE45B,WAAW;;eAGtDvrC,EAAAA,SAAM;;WAEVA,EAAAA,SAAM;;;;;;IAMbkW,EAAS;oBACO/E,cAAY,CAC1B,uCAAwCQ,EAASA,UAAC,CAAE6F,OAAQ,QAAS+zB,WAAW,IAChF,4CAA6C55B,EAAAA,UAAU,CACrD6F,OAAQ,OACR+zB,WAAW;;;IAKf11B,EAAW;oBACK1E,cAAY,CAC1B,0CAA2CQ,EAASA,UAAC,CAAE6F,OAAQ,UAC/D,+CAAgD7F,EAAAA,UAAU,CACxD6F,OAAQ;;;IAKZrB,EAAS;oBACOhF,cAAY,CAC1B,qCAAsCQ,EAASA,UAAC,CAAEX,QAAS,UAAWu6B,WAAW,IACjF,uCAAwC55B,EAASA,UAAC,CAAE6F,OAAQ,QAAS+zB,WAAW,IAChF,4CAA6C55B,EAAAA,UAAU,CACrD6F,OAAQ,OACR+zB,WAAW,IAEb,qCAAsC55B,EAASA,UAAC,CAAEX,QAAS,UAAWu6B,WAAW,IACjF,kCAAmC55B,EAASA,UAAC,CAAEX,QAAS,OAAQu6B,WAAW,IAC3E,oBAAqB55B,EAASA,UAAC,CAAE45B,WAAW;;kBAGhCp6B,EAAWA,YAAC,CAAE,8BAA+BQ,EAASA,UAAC,CAAE45B,WAAW;eACvEvrC,EAAAA,SAAM;sBACCA,EAAAA,SAAM;;;IAGxBoW,EAAW;oBACKjF,cAAY,CAC1B,wCAAyCQ,EAASA,UAAC,CAAE6F,OAAQ,QAAS+zB,WAAW,IACjF,6CAA8C55B,EAAAA,UAAU,CACtD6F,OAAQ,OACR+zB,WAAW;;EAMbC,GAAgB7rC,EAAAA,QAAOoX,GAAW;IACpCZ;;gBAEYnW,EAAAA,SAAM;qBACDA,EAAAA,SAAM,sBAAsBA,EAAKoQ,SAAC;;;YAG3CpQ,EAAAA,SAAM;EAGZyrC,GAAgB9rC,EAAAA,QAAOwqB,GAAkC;IAC3DhZ,cAAY,CACZ,6BAA8BQ,EAASA,UAAC,CAAE+5B,SAAS;EAQvD,SAASC,GAAM7rC,GACb,OAAOI,EAAC,QAAAC,cAAAsrC,GAAcvqC,OAAAC,OAAA,CAAAZ,KAAM,IAAQT,EAAO,CAAAQ,KAAK,iBAClD,CAEA,SAASsrC,GAAsB9rC,GAC7B,MAAM+rC,EAAexmB,aAAW8iB,KAC1B5nB,OAAEA,EAAMlJ,SAAEA,EAAQwR,SAAEA,GAAagjB,GACjCt5B,SAAEA,EAAQoM,QAAEA,GAAuB7e,EAAXwX,EAAWzW,EAAAA,OAAAf,EAAnC,CAAA,WAAA,YAkBN,OACEI,EAAAA,QAACC,cAAA+qC,GACChqC,OAAAC,OAAA,CAAAiW,SAAUlX,EAAC,QAAAC,cAAAwrC,GAAe,CAAAD,QAAA7iB,IAC1BlK,QAnBJ,SAAqBvV,GACnBA,EAAE6/B,UAEF1oB,IACA5B,SAAAA,EAAUvV,EACX,GAeOkO,EAAM,CACVzR,KAAK,SACS,gBAAA,OACC,gBAAAgjB,kBACAxR,EACfA,SAAUA,IAjBRtR,EAAAA,WAAWwM,GACNA,EAASs5B,GAGXt5B,EAkBX,CAkCM,SAAUu5B,GAAuBhsC,GACrC,MAAM8f,EAAUyF,aAAW8iB,KACrBlxB,IAAEA,EAAGkC,QAAEA,GAAYH,KAEzB,IAAK4G,EACH,MAAM,IAAI6C,MAAM,oDAGlB,MAAMlQ,SAAEA,EAAQ7R,UAAEA,EAAS8W,OAAEA,EAAS,QAAO2zB,SAAEA,GAAW,EAAIj0B,MAAEA,GAAqBpX,EAAXwX,WAAWxX,EAA/E,CAA4E,WAAA,YAAA,SAAA,WAAA,WAC5EuX,SAAEA,GAAauI,EAErB,OACE1f,EAAC,QAAAC,cAAAmrC,GACCpqC,OAAAC,OAAA,CAAAiU,KAAK,gBACDkC,EAAM,CACVL,IAAKA,EACLvW,UAAWwX,GACT,CACE,cAAeb,EACf,aAAc8B,GAEhBzY,GAEF2W,SAAUA,EACVG,OAAQA,EAAM5B,OACNsB,EACGq0B,UAAAJ,IAEV54B,EAGP,CAEA,SAASw5B,GAAgBjsC,GACvB,MAAMyS,SAAEA,EAAQ7R,UAAEA,GAAyBZ,EAAXwX,EAAWzW,EAAAA,OAAAf,EAArC,CAAA,WAAA,cAEN,OACEI,UAAAC,cAACi/B,GAAQsC,UAAS,KAChBxhC,EAAAA,QAAAC,cAAC2rC,GAAuB,CAAAprC,UAAWA,EAAWyqC,SAAUrrC,EAAMqrC,SAAUj0B,MAAOpX,EAAMoX,OACnFhX,EAAAA,QAACC,cAAAyrC,GAA0B1qC,OAAAC,OAAA,CAAA,EAAAmW,EAAmB,CAAA,YAAA/E,IAC3CA,IAKX,CC/VA,SAASy5B,IAAY30B,SAAEA,EAAQ+wB,eAAEA,IAM/B,MAAOvf,EAAUojB,GAAe5yB,EAAQA,UAAC,GAEnCkH,EAAS5G,eACb,WACMtC,GAAY+wB,GAIhB6D,GAAaC,IAAgBA,GAC/B,GACA,CAAC70B,EAAU+wB,IAGP+D,EAASxyB,eACb,WACMtC,GAAY+wB,GAIhB6D,GAAY,EACd,GACA,CAAC50B,EAAU+wB,IAGPgE,EAAWzyB,eACf,WACMtC,GAAY+wB,GAIhB6D,GAAY,EACd,GACA,CAAC50B,EAAU+wB,IAYb,OATAvuB,EAASA,WACP,YACOxC,GAAY+wB,IAAmBvf,GAClCojB,GAAY,EAEf,GACD,CAAC50B,EAAU+wB,EAAgBvf,IAGtB,CAAEA,WAAUtI,SAAQ4rB,SAAQC,WACrC,CD8SAL,GAAgBx0B,OAASq0B,GACzBG,GAAgBM,OAhFhB,SAA+BvsC,GAC7B,MAAMygB,OAAEA,EAAMsI,SAAEA,EAAQxR,SAAEA,EAAQ+wB,eAAEA,GAAmB/iB,EAAAA,WAAW8iB,KAC5DxpB,QAAEA,GAAuB7e,EAAXwX,EAAMzW,EAAAA,OAAKf,EAAzB,CAAsB,YAS5B,OACEI,EAAC,QAAAC,cAAAqrC,GACCtqC,OAAAC,OAAA,CAAAwd,QATJ,SAAqBvV,GACnBA,EAAE6/B,UAEF1oB,IACA5B,SAAAA,EAAUvV,EACX,EAIuB,cACR,2BACRkO,EAAM,CACVD,SAAUA,GAAY+wB,EACtBviC,KAAK,SACL28B,UAAW,IAEXtiC,EAAA,QAAAC,cAACwrC,GAAe,CAAAD,QAAA7iB,IAGtB,EEjSA,MAAMyjB,GAAkB3sC,EAAAA,QAAOmS,GAAG;;EAI5By6B,GAAoB5sC,EAAAA,QAAOgW,OAAOa,MAAM,CAC5C3Q,KAAM,SACN28B,UAAW,GACX;IACEpb,IAAO;EAkCL,SAAUolB,GAAgB1sC,GAC9B,MAAMyS,SACJA,EAAQsW,SACRA,EAAQtI,OACRA,EAAMlJ,SACNA,GAAW,EAAK+wB,eAChBA,GAAiB,EAAKlvB,OACtBA,EAAM8hB,SACNA,GAEEl7B,EADCwX,EAAMzW,SACPf,EATE,CASL,WAAA,WAAA,SAAA,WAAA,iBAAA,SAAA,aACK+rC,EAAe3oB,EAAOA,SAC1B,KAAO,CAAE2F,WAAUtI,SAAQlJ,WAAU+wB,oBACrC,CAACvf,EAAUtI,EAAQlJ,EAAU+wB,IAEzBnxB,EAAMsC,SAAO,MAEbjH,EAhDR,UAAoCC,SAClCA,EAAQD,MACRA,IAEA,IAAIhN,EAEJ,OAAIgN,IAIJpS,EAAAA,QAAMuV,SAASsnB,QAAQxqB,GAAWk6B,IAC5BvsC,EAAAA,QAAMwsC,eAAkCD,IAAUA,EAAM5mC,OAASgjC,KACnEvjC,EAASmnC,EAAM3sC,MAAMwS,MACtB,IAGKhN,GAAUgN,EACpB,CA+BgBq6B,CAA2B7sC,GAezC,OAbA4qC,GACEzzB,GACA,SAA4BgR,GAC1B/O,SAAAA,EAAS+O,GAEJY,GAILtI,GACF,IAIArgB,EAAA,QAAAC,cAACmsC,GAAeprC,OAAAC,OAAA,CAAA,EAAKmW,EAAM,CAAElC,KAAK,UAAU6B,IAAKA,IAC/C/W,EAAA,QAAAC,cAACgoC,GAAgBniB,SAAS,CAAAxgB,MAAOqmC,GAC/B3rC,UAACC,cAAAosC,IAAkBl1B,SAAUA,EAAUsH,QAAS4B,GAE5B,SACpBrgB,EAAAA,QAAAC,cAACi/B,GAAQ,CAAAnc,SAAS,QAAQ+X,SAAUA,EAAU1oB,MAAOA,GAClDC,IAKX,CAuBA,SAASq6B,GAAS9sC,GAChB,MAAM+sC,EAAgBb,GAAYlsC,GAElC,OAAOI,wBAACssC,GAAetrC,OAAAC,OAAA,GAAKrB,EAAW+sC,GACzC,CAEAD,GAASE,QAAUf,GACnBa,GAASG,KAAOlE,GAChB+D,GAASrkB,QLqHH,SAA8BzoB,GAClC,MAAMyS,SAAEA,EAAQu2B,OAAEA,GAAsBhpC,EAAXwX,EAAWzW,EAAAA,OAAAf,EAAlC,CAAA,WAAA,WAEN,OACEI,EAAC,QAAAC,cAAAsoC,GAAmCvnC,OAAAC,OAAA,CAAA,cAAA,yBAA4BmW,EAAM,CAAElC,KAAK,iBAC3ElV,EAAAA,QAACC,cAAAooC,GAAuB,KAAAO,GACvBv2B,EAGP,EK7HAq6B,GAAShlB,KAAOohB,GAChB4D,GAAS1E,UAAYU,GCrIrB,MAAMhkB,kBAAEA,GAAiBE,cAAEA,IAAkBH,KAIvCqoB,GAAgBnoB,EAAaA,cAAyB,MCIpC,SAAAooB,GAAUtJ,EAAeuJ,EAAS,IAAKC,EAAW,IACxE,OAAiB,IAAVxJ,EAAcuJ,EAASC,CAChC,CCHA,MAAMC,GAAuBztC,EAAAA,QAAOmsC,GAAuB;gBAC3C9rC,EAAAA,SAAM;EAGhBqtC,GAA2B1tC,EAAAA,QAAO8a,GAAU;IAC9CtE,EAAS;;;;;;;mBAOMnW,EAAAA,SAAM,0BAA0BA,EAAKoQ,SAAC;;YAE7CpQ,EAAAA,SAAM;;;;IAIdwV;gBACYxV,EAAAA,SAAM;;EAIhBkoC,GAAYvoC,EAAAA,QAAOC,IAAI;;;;;wBAKLI,EAAAA,SAAM;;;EAKxBstC,GAAgBt2B,EAAAA,YAAiD,SACrElX,EACAmX,GAEA,MAAMvW,UAAEA,GAAyBZ,EAAXwX,EAAMzW,EAAAA,OAAKf,EAA3B,CAAwB,eACxBuX,SAAEA,EAAQwR,SAAEA,EAAQtI,OAAEA,GAAW8E,EAAAA,WAAW8iB,KAE5C/G,SAAEA,GAAajC,KAQrB,OACEj/B,EAAC,QAAAC,cAAAitC,GAAqB,CAAA1sC,UAAWA,GAC/BR,EAAAA,QAACC,cAAAktC,GACKnsC,OAAAC,OAAA,CAAA,EAAAmW,EACQ,CAAA,cAAA,8BACZL,IAAMyd,IACA3uB,EAAAA,WAAWkR,IACbA,EAAIyd,GAGN0M,EAASnB,aAAavL,EAAK,EAE7B7uB,KAAK,SACLwR,SAAUA,EACVsH,QApBN,WACOkK,GACHtI,GAEH,KAkBGrgB,UAAAC,cAAC+nC,GAAY,MACbhoC,EAAC,QAAAC,cAAA4rC,GAAgBM,OAAM,CAAA,cAAa,0BAG1C,IC/BA,SAASkB,GAA8C5C,GACrD,OAAiB,MAAbA,EACK,GAIFxkC,MAAMwX,KAAKgtB,EAAU6C,iBAAiB,WAAa,GAC5D,CAgBA,SAASC,GACP3tC,GAOA,MAAM0H,KAAEA,EAAIkmC,WAAEA,EAAUC,aAAEA,GAAiB7tC,GAEpC0e,EAAQqsB,GAAaxxB,EAAQA,UAAC,IAC9Bu0B,EAAgBC,GAAqBx0B,EAAAA,UAAU,GAChDy0B,EAAsBv0B,EAAAA,UACrBw0B,EAAsBC,GAA2B30B,EAAQA,SAAgB,IAUhF,SAAS40B,UACPJ,GAAmB,GACfC,EAAoBr0B,UACO,QAA7BtE,EAAA24B,EAAoBr0B,eAAS,IAAAtE,GAAAA,EAAAwoB,aAEhC,CAED,MAAMrkB,EAAeK,EAAAA,aAAY,SAAoBgxB,GAClC,MAAbA,GACFqD,EAAwBT,GAAuB5C,IAjBnD,SAAsCA,GACpCmD,EAAoBr0B,QAAU,IAAIy0B,kBAAiB,WACjDF,EAAwBT,GAAuB5C,GACjD,IAEAmD,EAAoBr0B,QAAQ4jB,QAAQsN,EAAW,CAAEwD,WAAW,GAC7D,CAYGC,CAA6BzD,IAE7BsD,GAEH,GAAE,IAEHp0B,EAASA,WAAC,WACR,OAAO,WACLo0B,GACF,CACD,GAAE,IAEHp0B,EAASA,WACP,WACE,SAASw0B,EAAmBC,GAK1B,MAAMllC,EAAIklC,EAEJC,EAAgB,IAAK/mC,GAAQ,CAAC,QAEpC,IAAK6iC,GAAYjhC,GAAGkhC,GAAGiE,IAAkBhkC,GAAQwjC,GAC/C,OAGF3kC,EAAEolC,iBAEF,MAAMC,EAzHd,SACErlC,EACAwkC,EACAc,GAEA,MAAMC,EAAqF,CACzFC,IAAIxlC,GACKA,EAAEylC,UAAY,EAAI,EAE3BC,QAAO,KACG,EAEVC,UAAS,IACA,GASLC,GAAaL,EADPzE,GAAe9gC,KAJ3B,WACE,OAAO,CACR,GAGiDA,GAElD,OAAwB,IAApBwkC,IAAwC,IAAfoB,GAMnBA,EAAYN,GAAoBA,GAGlCd,EAAiBoB,EAAYN,GAAoBA,CAC3D,CAuFkCO,CACxB7lC,EACAwkC,EACAG,EAAqBpsC,QAEvBksC,EAAkBY,GAClBV,EAAqBU,GAAmBS,OACzC,CAcD,OAJI1wB,GAPF+M,SAASzR,iBAAiB,UAAWu0B,GAWhC,WAPL9iB,SAASvR,oBAAoB,UAAWq0B,EAS1C,CACD,GACD,CAAC7vB,EAAQhX,EAAMomC,EAAgBG,IAGjC,MAAMoB,EAAWx1B,eACf,WACEkxB,GAAU,GACV6C,SAAAA,GACF,GACA,CAACA,IAGG0B,EAAaz1B,eACjB,WACEkxB,GAAU,GACV8C,SAAAA,GACF,GACA,CAACA,IAGH,MAAO,CACLr0B,eACAkF,SACA2wB,WACAC,aAEJ,CCpLO,MAAM/vB,GAAyC,CACpDC,OAAOC,GACE7Q,EAAG8Q,WAACD,EAAG,SAEhB8vB,SAAS9vB,GACA7Q,EAAG8Q,WAACD,EAAG,UCFF,SAAAM,GAAWH,EAAoB7Z,GAC7C,OAAY,MAARA,EACKwZ,GAGFK,EAAS7Z,IAASwZ,EAC3B,CAEgB,SAAA7V,GAASyW,EAAwBN,GAC/C,MAAMgG,EAAQxf,MAAMwX,KAAKsC,GAEzB,GAAI1V,GAAQob,GACV,OAAO,KAGT,GAAIhG,EAAU,CACZ,MAAMrgB,EAAU,GAChB,IAAK,MAAM,CAAGsmB,KAAWD,EACvBrmB,EAAQqO,KAAKiY,GAGf,OAAOtmB,CACR,CAAM,CACL,OAAU,CAAAsmB,IAAWD,EACrB,OAAOC,CACR,CACH,UAQgB0pB,GACd5vB,EACAO,EACAN,SAEA,GAAsB,GAAlBM,EAAU1f,KACZ,MAAO,GAGT,GAAIof,EACF,MAAO,GACF,CACL,MAAMna,EAAQgE,GAASyW,EAAWN,GAElC,OAAkC,QAA3BxK,EADS0K,GAAWH,EAAWla,EAAiB4a,OACxCivB,SAAS7pC,UAAU,IAAA2P,EAAAA,EAAA,EACnC,CACH,CCrBA,SAAeo6B,GAAQC,EAAsCC,sDAC3D,MAAMC,EAAQ,IAAI9nC,ODwBX7G,OCxB+B0uC,GDwBf,IAAI5nC,QAAQ,sBAAuB,QCxBZ,KAE9C,MAAM8nC,EAAW,GACXC,EAAkB,GAExB,IAAK,MAAMC,KAAML,EACfG,EAAShiC,KAAKrF,QAAQqB,QAAQkmC,EAAGC,MAAM,CAAEL,QAAOC,YAChDE,EAAMjiC,KAAKkiC,EAAGhqC,MAKhB,MAAMkqC,QAAgBznC,QAAQ0nC,WAAWL,GAEzC,IAAI5vB,EAAkB,GAmBtB,OAjBAgwB,EAAQhT,SAAQ,CAACz3B,EAAQd,KACvB,GAAsB,aAAlBc,EAAO8U,OACT,OAGF,MAAMvU,EAAO+pC,EAAMprC,GAEnBub,EAAQA,EAAMlV,QACXvF,EAAOE,OAAS,IAAInF,KAAKic,GACjBpb,+BACFob,GAAI,CACP8D,MAAOva,MAGZ,IAGIka,IACR,CAwCD,SAASkwB,GAAsB7mC,GAC7BA,EAAE5H,OAAOwe,QACX,CAaA,SAASkwB,GAAoBpwC,GAC3B,MAAM0vC,YAAEA,EAAW9vB,SAAEA,GAAa5f,GAC3BR,EAAS6wC,GAAc92B,EAAAA,SAAS,IAAIhR,MACpC+R,EAAQg2B,GAAa/2B,EAAQA,SAAe,QAE7Cg3B,EAAa92B,EAAAA,SAEnB,SAAS+2B,IACmB,MAAtBD,EAAW52B,SACb82B,aAAaF,EAAW52B,QAE3B,CAED,MAAM+2B,EAAoB72B,EAAAA,aACxB,SAA2B81B,GAUzB,SAAeK,uDACbK,EAAW,IAAI9nC,KACf+nC,EAAU,YAEV,MAAMrwB,QAAcwvB,GAAQC,EAAaC,GAEzCU,EAzCR,SAAoBpwB,EAAiBL,GACnC,MAAMpgB,EAAU,IAAI+I,IAOpB,OALA0X,EAAMgd,SAASzgB,IACb,MAAM6D,EAAUN,GAAWH,EAAUpD,EAAK8D,OAC1C9gB,EAAQyN,IAAIoT,EAAQb,OAAOhD,GAAOA,EAAK,IAGlChd,CACT,CAgCmBmxC,CAAW1wB,EAAOL,IAC7B0wB,EAAU,aACX,CAjBDE,IAOAF,EAAU,iBAYVC,EAAW52B,QAAUi3B,YAAW,KAAWZ,GAAO,GAAE,IACtD,GACA,CAACpwB,EAAU8vB,IAGP3iC,EAAQ8M,eAAY,WACxBy2B,EAAU,QACVD,EAAW,IAAI9nC,IAChB,GAAE,IAEGqG,EAAMiL,eACV,WACE,OAAOxT,MAAMwX,KAAKre,EAAQiF,SAC5B,GACA,CAACjF,IAGGk0B,EAAQ7Z,eACZ,WACE9M,IACA2jC,EAAkB,GACpB,GACA,CAAC3jC,EAAO2jC,IAGJG,EAAiBh3B,EAAAA,aACrB,SAAwB9X,GACtB,OAAOvC,EAAQoP,IAAI7M,EACrB,GACA,CAACvC,IASH,OANAua,EAAAA,WAAU,IACD,KACLy2B,GAAoB,GAErB,IAEI,CACL5hC,MACAohC,MAAOU,EACP3jC,QACAuN,SACAu2B,iBACAnd,QAEJ,CASA,SAASod,GAAU9wC,GACjB,MAAMkjB,EAAW7D,MACXQ,SACJA,EAAQkxB,cACRA,EAAa9tB,SACbA,EAAQ+tB,SACRA,EAAQC,cACRA,EAAahrB,GACbA,EAAEzlB,KACFA,EAAI+W,SACJA,GAAW,EAAK6B,OAChBA,EAAM83B,iBACNA,EAAmB,CAACvB,GAAkB/xB,QAAQ+xB,IAAMwB,qBACpDA,EAAuB,QACrBnxC,EAGE0vC,EAActsB,EAAAA,SAClB,IAhKJ,SAAwBpjB,GAqBtB,IAAI0vC,EAA+C,GApBnD,IACElwC,EAwBF,OAHAkwC,EAAcA,EAAY3kC,OAAO/K,EAAM0vC,aAAe,IACtDA,EAAcA,EAAY3kC,QAtBxBvL,EAsBwDQ,EAAMR,SAhBvD,CACL,WACE,MAAO,CACLuG,KAAM,UACNsa,QAASd,GACTywB,MAAO,UAAeJ,MAAEA,IACtB,OAAOpwC,EAAQic,QAAO,EAAGhD,WAAYm3B,EAAMpmC,KAAKiP,IACjD,EAEJ,GAZM,IAqBJi3B,EAAYnvC,KAAKwvC,GAAOA,KACjC,CAqIUqB,CAAepxC,IACrB,CAACA,EAAM0vC,YAAa1vC,EAAMR,UAEtBogB,EAAWwD,EAAAA,SAAkB,IAtIrC,SAAyBssB,GACvB,OAAOnlC,EAAAA,QAAQmlC,GAAaltB,QAAO,CAACjiB,EAAKwvC,IAElC3uC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAd,GACH,CAAA,CAACwvC,EAAGhqC,MAAOgqC,EAAG1vB,WAEf,CAAE,EACP,CA+H2CgxB,CAAgB3B,IAAc,CAACA,IAElElqB,EAAaR,GAAc,CAC/B1B,UD5MwB5d,EC4MF1F,EAAM0F,MD3MZ6E,EAAAA,QAAQ7E,GAAS,IAElB+V,QAAQqK,IAAYrb,GAAQqb,MC0M3CjG,WACAD,WACAqD,SAAUpJ,EAAWA,aACnB,SAA+ByJ,GAC7BL,SAAAA,EAAW,CAAEvhB,OAAQ,CAAEukB,KAAIzlB,OAAMkF,MAAOgE,GAAS4Z,EAAUzD,KAC5D,GACD,CAACoG,EAAIpG,EAAUrf,EAAMyiB,MDnNrB,IAAsBvd,ECuN1B,MAAM4rC,EAAa73B,EAAAA,SACb83B,EAAY5D,GAAa,CAC7BjmC,KAAM,CAAC,WAAY,cACnBmmC,qBACsB,QAApBx4B,EAAAi8B,EAAW33B,eAAS,IAAAtE,GAAAA,EAAA+5B,OACrB,KAGIoC,EAAYC,GAAiBl4B,EAAQA,UAAC,IACtCo2B,EAAO+B,GAAYn4B,WACxBi2B,GAAgB5vB,EAAU4F,EAAWlC,SAAUzD,IAE3CrgB,EAAU4wC,GAAW,CAAEV,cAAa9vB,aAEpC0oB,EAAiBllB,EAAAA,SACrB,KACGusB,EAAM9tC,QACP4I,GAAQjL,EAAQoP,QAChBnE,GAAQ+a,EAAWlC,WACnBrd,EAAAA,WAAWirC,IACNA,EAAiBvB,IACjBuB,GACP,CAACvB,EAAOnwC,EAASgmB,EAAWlC,SAAU4tB,IAGlCS,EAAWzF,GAAW9qC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAMrB,GAAO,CAAAsoC,oBAEzCvuB,EAAAA,WAAU,KACJy3B,IACFhyC,EAAQwwC,MAAML,GACdgC,EAAStF,SACV,GACA,CAACsD,EAAO6B,IAEX,MAAMI,EAAsB/3B,EAAAA,aAC1B,SAA6BiM,GAC3B,MAAMzF,EAAUN,GAAWH,EAAUkG,EAAOxF,OAEtC5a,EAAQ2a,EAAQb,OAAOsG,GAI7B,MAAO,CAAErN,MAHK4H,EAAQkvB,SAASzpB,GAGfpgB,QAAOwiB,QAFP1C,EAAWlC,SAASpX,IAAIxG,GAGzC,GACD,CAACka,EAAU4F,EAAWlC,WAGlBuuB,EAAYh4B,EAAAA,aAChB,SAAmBnU,GACjB,IAAIogB,EAAStmB,EAAQqxC,eAAenrC,GAMpC,OAJKogB,IACHA,EAASN,EAAWlC,SAAS1U,IAAIlJ,IAG5BogB,CACR,GACD,CAACtmB,EAASgmB,EAAWlC,WAGjBwuB,EAAej4B,EAAAA,aACnB,SAAsBiM,GACpBN,EAAW/E,OAAOqF,EACpB,GACA,CAACN,IAGGusB,EAAmBl4B,eACvB,WACE,MAAO,CACL4G,OAAQkxB,EAASlxB,OACjBsI,SAAU4oB,EAAS5oB,SACnB3P,OAAO+O,GACLspB,GAAc,GAKZC,EAHG7xB,EAGM,GAFA2vB,GAAgB5vB,EAAU4F,EAAWlC,SAAUzD,IAI1DrgB,EAAQk0B,QACRta,SAAAA,EAAS+O,EACV,EACDmgB,iBAEJ,GACA,CACE1oB,EACA+xB,EAAS5oB,SACT4oB,EAASlxB,OACTZ,EACArgB,EACAgmB,EAAWlC,SACXlK,EACAkvB,IAIE0J,EAAkBn4B,eACtB,WACE,OAAAzY,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACK4vC,eAAAA,MACHhrB,KACA9O,IAAIyd,GACU,MAARA,IACF0c,EAAW33B,QAAUib,EAExB,EACDlvB,MAAOiqC,EACP1sB,SAAS3Z,GACP,MAAM2oC,EAAiB3oC,EAAE5H,OAAOgE,MAAMqC,QAAQ,MAAO,IAErD0pC,EAAiC,KAAnBQ,GACdlB,SAAAA,EAAgBznC,GAChBooC,EAASpoC,EAAE5H,OAAOgE,MACpB,EACAyT,QAASg3B,IAEb,GACA,CAAClqB,EAAI0pB,EAAOoB,EAAeY,EAAUnyC,EAASgmB,EAAWlC,WAGrD4uB,EAAgBr4B,eACpB,WACE,MAAO,CACLgF,gBACE4yB,GAAc,GACdC,EAAS,IACTlsB,EAAWzY,QACXvN,EAAQk0B,QACY,QAApBre,EAAAi8B,EAAW33B,eAAS,IAAAtE,GAAAA,EAAA+5B,OACrB,EAEL,GACA,CAAC5vC,EAASgmB,IAGN2sB,EAAet4B,eACnB,WACE,MAAO,CACL1C,IAAKo6B,EAAU/3B,aACflE,KAAM,UAEV,GACA,CAACi8B,EAAU/3B,eAGP44B,EAAiBv4B,EAAWA,aAChC,UAAwBiM,OAAEA,IACxB,MAAMpgB,MAAEA,EAAKwiB,QAAEA,EAAOzP,MAAEA,GAAUm5B,EAAoB9rB,GAEtD,MAAO,CACLxQ,KAAM,SACN,gBAAiB4S,EACjBjC,GAAIhlB,OAAOyE,GACXmZ,QAAO,KACL4yB,GAAc,GAET5xB,GACH4xB,GAAc,GAEhBK,EAAahsB,GAENjG,GAET6iB,UAAW,EAEd,GACD,CAACkP,EAAqBE,EAAcjyB,IAGhCwyB,EAAoBx4B,eACxB,WACE,MAAO,CACLgF,QAAS,WAwBP,OAvBA,uDACE,IAAK5Y,EAAUA,WAAC+qC,GAAW,OAE3B,MAAMsB,EAAiBtB,EAASrB,GAEhC,IAAI7pB,ECnaV,IAAqBrc,EDoaX6oC,ICpaW7oC,EDqaE6oC,EACbxsB,ECraP9f,EAAAA,SAASyD,IAAWxD,EAAUA,WAAEwD,EAA0B,YDqapC6oC,EAENA,GAIb9yC,EAAQwwC,MAAML,GAEV7pB,GACFgsB,EAAahsB,KAEhB,CAEIysB,GAEE1yB,CACR,EACD6iB,UAAW,EAEf,GACA,CAAC7iB,EAAUmxB,EAAUrB,EAAOnwC,EAASsyC,IAGjCU,EAAc34B,eAClB,WACE,MAAM44B,EAAej2B,GACnBo1B,EAAoBp1B,GAAM/D,MAAMi6B,sBAAwB/C,EAAM+C,oBAgBhE,OAAOzsC,EAAAA,WAAW+qC,IAAgC,YAAnBxxC,EAAQ8a,SAPjCrU,EAAAA,WAAWirC,GACNA,EAAiBvB,MAPlB7wB,EAAKA,MACX,IAAItf,EAAQoP,SAAUvI,MAAMwX,KAAK2H,EAAWlC,SAAS7e,WAAWkuC,KAAKF,IAShEvB,EAIX,GACA,CAACU,EAAqBV,EAAkBF,EAAUxxC,EAASmwC,EAAOnqB,EAAWlC,WAwC/E,OArCAvJ,EAASA,WACP,WACEva,EAAQwwC,MAAM,GACf,GAGD,CAACN,IAGH31B,EAASA,WACP,YACO/Z,EAAM4yC,WAAc1vB,KAGrByuB,EAAS5oB,SACXwoB,EAAUlC,WAEVkC,EAAUjC,aAEb,GAMD,CAACqC,EAAS5oB,WAGZhP,EAASA,WACP,WACO8F,GACH6xB,EAASlC,GAAgB5vB,EAAU4F,EAAWlC,SAAUzD,GAE3D,GACD,CAACD,EAAUC,EAAU2F,EAAWlC,WAG3B,CACLhJ,OAAQ9a,EAAQ8a,OAChB9a,QAASA,EAAQoP,MACjBlJ,MAAOgE,GAAS8b,EAAWlC,SAAUzD,GACrC8vB,QACAp4B,WAEAiO,aAEA2sB,eACAP,sBACAC,YACAO,iBACAJ,kBACAE,gBACAH,mBACAM,oBACAG,cACArB,uBAEJ,CE9gBA,MAAM0B,GAAwBhzC,EAAAA,QAAOC,IAAI;;;;;;;mBAOtBI,EAAAA,SAAM;;wBAEDA,EAAAA,SAAM;;EAIxB4yC,GAAkBz9B,QAAAwH,KAAEA,EAAIk2B,MAAEA,GAAK19B,EAAKrV,EAAKe,EAAAA,OAAAsU,EAAvB,kBACtB,OAAOjV,UAACC,cAAAwyC,GAA0BzxC,OAAAC,OAAA,GAAArB,GCftB,SAAyBmY,EAAa46B,GAClD,GAAW,MAAP56B,GAAwB,MAAT46B,EACjB,OAAO3yC,EAAAA,QAAAC,cAAAD,EAAAA,QAAA4W,SAAA,KAAGmB,GAIZ,MAAMzT,EAAQzD,OAAOkX,GAAKjX,cAAcopC,QAAQrpC,OAAO8xC,GAAO7xC,eAE9D,IAAe,IAAXwD,EAAc,OAAOtE,EAAAA,QAAAC,cAAAD,EAAAA,QAAA4W,SAAA,KAAGmB,GAE5B,MAAM66B,EAAM76B,EAAIgD,MAAM,EAAGzW,GACnBuuC,EAAM96B,EAAIgD,MAAMzW,EAAOA,EAAQquC,EAAMlxC,QACrCqxC,EAAO/6B,EAAIgD,MAAMzW,EAAQquC,EAAMlxC,QAErC,OACEzB,UAAAC,cAAAD,EAAA,QAAA4W,SAAA,KACGg8B,EACD5yC,EAAAA,QAAAC,cAAA,OAAA,KAAO4yC,GACNC,EAGP,CDN4CC,CAAet2B,EAAMk2B,GAA+B,EET1F1gC,GAAQxS,EAAM,QAACuzC,IAAc18B,MAAM,CACvC28B,GAAI,QACJ;;EAII/wC,GAAOzC,EAAAA,QAAOwqB,GAAY;WACrBnqB,EAAAA,SAAM;EAGXozC,GAAsBzzC,EAAM,QAACitC,GAAShlB,KAA4B;gBACxDzW,cAAY,CACxB,0CAA2CQ,EAASA,UAAC,CAAE,iBAAiB,IACxE,sBAAuBA,EAASA,UAAC,CAAE,iBAAiB;EAIxD,SAAS0hC,GAAal+B,GAAA,IAAA5C,SACpBA,EAAQ/M,MACRA,EAAK2R,QACLA,EAAOC,SACPA,GAAQjC,EACLvU,EALiBC,EAAAA,OAAAsU,EAAA,CAAA,WAAA,QAAA,UAAA,aAOpB,MAAM6K,EACJqF,EAAUA,WAAC2nB,KACX,MACE,MAAM,IAAIvqB,MAAM,+CACjB,EAFD,GAII5c,EAAOma,EAAOsF,WAAWzf,OACzB+f,EAAS5F,EAAO2xB,UAAUnsC,IAAU,CAAA,GACpCwiB,QAAEA,EAAOzP,MAAEA,GAAUyH,EAAO0xB,oBAAoB9rB,GAStD,OACE1lB,UAAAC,cAACizC,GAAmBlyC,OAAAC,OAAA,CAAA,EACdP,EACAof,EAAOkyB,eAAe,CAAEtsB,WAC5B,CAAAzO,QACW,aAATtR,EACE3F,UAAAC,cAACgS,GAAK,CAACG,MAAM,SAASF,MAAM,KAC1BlS,EAAC,QAAAC,cAAA2Y,IAAS5B,MAAM,QAAQo8B,eAAgBtrB,IACvC7Q,GACK,EAKZC,SAAmB,WAATvR,EAAoBmiB,EAAU9nB,EAAAA,QAAAC,cAACiC,GAAK,CAAA9B,KAAK,UAAa,KAAO8W,IApBrE7E,IACAyV,GAAoB,aAATniB,EAA4B0S,EAEpCrY,EAAC,QAAAC,cAAAyyC,GAAe,CAAAj2B,KAAMpE,EAAOs6B,MAAO7yB,EAAOyvB,SAsBtD,CCtEA,MAAM/vC,GAAUC,EAAAA,QAAOmS,GAAG;;;;;;;cAOZ9R,EAAAA,SAAM;aACPA,EAAAA,SAAM;;WAERA,EAAAA,SAAM;;;iBAGAA,EAAAA,SAAM;;gBAEPA,EAAAA,SAAM;EAGtB,SAASuzC,GAAYp+B,GAAA,IAAA5C,SAAEA,GAAuC4C,EAA1BmC,EAAMzW,EAAAA,OAAAsU,EAArB,cACnB,OAAOjV,wBAACR,GAAOwB,OAAAC,OAAA,GAAKmW,GAAS/E,EAC/B,CCrBA,SAASihC,GAAsBr+B,GAAA,IAAA5C,SAAEA,GAA+C4C,EAAlCvU,EAAIC,EAAAA,OAAAsU,EAAnB,cAC7B,MAAM6K,EACJqF,EAAUA,WAAC2nB,KACX,MACE,MAAM,IAAIvqB,MAAM,6DACjB,EAFD,GAIF,OACEviB,EAAAA,sBAAC0sC,GAAShlB,KAAS1mB,OAAAC,OAAA,CAAA,EAAAP,EAAUof,EAAOmyB,qBACjC5/B,GAAY,QAAQyN,EAAOyvB,SAGlC,CCZA,MAAMgE,GAAoB,CACxBxtB,OAAQotB,GACRK,MAAOH,GACPI,gBAAiBH,IAGb,SAAUI,GAAcC,GAC5B,OAAY3yC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAsyC,IAAsBI,EACpC,CCgBA,MAAMC,GAAgB,CACpB,KACA,OACA,cACA,WACA,gBACA,WACA,UACA,SAGIC,GAAUp0C,EAAAA,QAAOC,IAAI;;;;;;;;aAQdI,EAAAA,SAAM;;eAEJA,EAAAA,SAAM;EAGrB,SAASg0C,KACP,MAAO,CACL,cAAe,uBAEnB,CAEA,MAAMC,GAAaj9B,EAAAA,YAA8C,SAC/DlX,EACAmX,GAEA,OAAO/W,EAAAA,QAACC,cAAAysC,GAASG,oBAAK91B,IAAKA,GAASnX,EAAO,CAAAsV,KAAK,YAClD,IAEA,SAAS8+B,IAAcl0B,OAAEA,IACvB,MAAMrB,QAAEA,GAAYqB,EAAOgyB,gBACrBmC,EAAQ9pC,EAAOA,QAAC2V,EAAOxa,OAAO7D,OAEpC,OACEzB,6CAAiB,gCACfA,EAAAA,QAAAC,cAAC6lC,GACC,CAAAJ,aACArlC,KAAK,UACLyQ,QAAQ,SACRi1B,SAAUtnB,EACV8M,MAAO,GAAG0oB,oBAAwBlH,GAAUkH,KAC5CjO,qBAAsB8N,GACtB38B,SAAU2I,EAAO3I,UAEhB88B,GAIT,CAEA,MAAMC,GAAUz0C,EAAAA,QAAOgoC,EAAE;uBACF3nC,EAAAA,SAAM;;YAEjBA,EAAAA,SAAM,cAAcA,EAAKoQ,SAAC;;sBAEhBpQ,EAAAA,SAAM;;EAItBq0C,GAAc10C,EAAAA,QAAO+rB,GAAK;;SAEvB1rB,EAAAA,SAAM;;mBAEIA,EAAAA,SAAM;kBACPA,EAAAA,SAAM;;sBAEFA,EAAAA,SAAM;EAG5B,SAASs0C,GAAWl6B,GAClB,MAAO,CAAC,gBAAiB,YAAY9K,SAAS8K,EAChD,CAQA,SAAS8tB,IAAU9tB,OAAEA,EAAMm6B,MAAEA,EAAQ,GAAEC,OAAEA,EAAS,KAChD,IAAKF,GAAWl6B,GAAS,CACvB,GAAI7P,GAAQgqC,KAAWhqC,GAAQiqC,GAAS,OAAOt0C,UAAAC,cAACi0C,GAAO,MACvD,GAAI7pC,GAAQgqC,GAAQ,OAAOr0C,UAAAC,cAAC2W,EAAQA,SAAA,KACrC,CAED,OACE5W,EAAAA,6BAAKuhC,MAAO,CAAEzG,SAAU,aACtB96B,UAAAC,cAACi0C,GAAU,MACXl0C,UAAAC,cAACk0C,GAAY,CAAArjC,QAAQ,eAAerQ,MAAM,uBACvC2zC,GAAWl6B,GAAU,aAAe,GAAGm6B,EAAM5yC,gBAAgBsrC,GAAUsH,EAAM5yC,WAItF,CA6EA,SAAS8yC,GAAO30C,GACd,MAAM6f,SAAEA,EAAQ+0B,YAAEA,EAAWb,WAAEA,EAAUc,UAAEA,GAAY,GAAqB70C,EAAXwX,EAAMzW,EAAAA,OAAKf,EAAtE,CAAA,WAAA,cAAA,aAAA,cAEAkgB,EAAS4wB,GAAU9wC,GAqCzB,OACEI,EAAA,QAAAC,cAACqsC,GAAetrC,OAAAC,OAAA,CAAA,EAAKgO,GAAKmI,EAAQw8B,IAAoB9zB,EAAO6xB,oBAC3D3xC,EAAC,QAAAC,cAAAykB,GAAkBoB,SAAQ,CAACxgB,MAAOwa,EAAOsF,YACxCplB,UAACC,cAAAmtC,oBACKttB,EAAO8xB,kBAAiB,CAC5B16B,SA/BFk9B,GAAWt0B,EAAO5F,QACbla,EAAAA,QAACC,cAAA4zC,GAAoB,CAAA,cAAA,iCAGzB/zB,EAAOxa,MAIRma,EACKzf,EAAAA,sBAACg0C,GAAa,CAACl0B,OAAQA,IAG5BA,EAAO3I,UAAYs9B,EACd,KAIPz0C,EAAAA,sBAACyX,GAAWzW,OAAAC,OAAA,CACVZ,KAAM,IAzLL,CACL,cAAe,wBA0LPyf,EAAOgyB,gBAAe,CAC1BnsC,KAAK,YAhBA,KA2BH6uC,YAAaA,EACbE,aAAa,MACK,oBAAA,UAEpB10C,UAAAC,cAAC8zC,GAAU/yC,OAAAC,OAAA,GAAK6e,EAAOiyB,gBACrB/xC,EAAAA,QAAAC,cAAC6sC,GAAchnB,SAAQ,CAACxgB,MAAOwa,GA7CjCL,EArDR,SAA+BK,EAAyB6zB,GACtD,MAAM5tB,OAAEA,EAAMytB,MAAEA,EAAKC,gBAAEA,GAAoBC,GAAcC,GACnDvB,EAActyB,EAAOsyB,cAErBuC,EAAkB1uC,MAAMwX,KAAKqC,EAAOsF,WAAWlC,SAAS7e,UAAUlE,KAAKilB,GAC3EtF,EAAO0xB,oBAAoBpsB,KAGvBwvB,EAAmB90B,EAAO1gB,QAAQgjB,QAAO,CAACyyB,EAAWzvB,KACzD,MAAMM,EAAS5F,EAAO0xB,oBAAoBpsB,GAE1C,OAAIM,EAAOoC,QACF+sB,EAGF,IAAIA,EAAWnvB,EAAO,GAC5B,IAEH,IAAImvB,EACF70C,EAAAA,QAAAC,cAAC2W,EAAQA,SAAA,KAC0B,UAAhCkJ,EAAOixB,sBAAoCqB,EAAcpyC,wBAACyzC,EAAe,MAAM,KAC/EmB,EAAiBz0C,KAAKulB,GACrB1lB,EAAAA,QAAAC,cAAC8lB,EAAM,CAACpkB,IAAKd,OAAO6kB,EAAOpgB,OAAQA,MAAOogB,EAAOpgB,UAElB,SAAhCwa,EAAOixB,sBAAmCqB,EAAcpyC,EAAC,QAAAC,cAAAwzC,QAAqB,MAYnF,OARKW,GAAWt0B,EAAO5F,SAAW7P,GAAQuqC,KACxCC,EAAYzC,EAAcpyC,UAACC,cAAAwzC,EAAkB,MAAGzzC,EAAAA,QAACC,cAAAuzC,6BAG9CY,GAAWt0B,EAAO5F,SAAW7P,GAAQyV,EAAO1gB,WAC/Cy1C,EAAYzC,EAAcpyC,UAACC,cAAAwzC,EAAkB,MAAGzzC,EAAAA,QAACC,cAAAuzC,6BAIjDxzC,wBAAC4W,EAAAA,SAAQ,KACN+9B,EAAgBx0C,KAAKulB,GACpB1lB,EAAAA,QAAAC,cAAC8lB,EAAM,CAACpkB,IAAKd,OAAO6kB,EAAOpgB,OAAQA,MAAOogB,EAAOpgB,UAEnDtF,EAAAA,QAAAC,cAAC+nC,GAAS,CAAC9tB,OAAQ4F,EAAO5F,OAAQo6B,OAAQK,EAAiBN,MAAOO,IACjEC,EAGP,CASaC,CAAsBh1B,EAAQ6zB,GAlF3C,SAA6B7zB,EAAyB6zB,GACpD,MAAM5tB,OAAEA,EAAMytB,MAAEA,EAAKC,gBAAEA,GAAoBC,GAAcC,GACnDvB,EAActyB,EAAOsyB,cAE3B,OAAIgC,GAAWt0B,EAAO5F,SAAW7P,GAAQyV,EAAO1gB,SACvCY,EAAA,QAAAC,cAACozC,GAAW,KAAA,cAGjBhpC,GAAQyV,EAAO1gB,SACbgzC,EACKpyC,UAAAC,cAACwzC,EAAe,MAGlBzzC,EAAA,QAAAC,cAACuzC,EAAK,KAAA,qBAIbxzC,UAAAC,cAAAD,EAAA,QAAA4W,SAAA,KACmC,UAAhCkJ,EAAOixB,sBAAoCqB,EAAcpyC,wBAACyzC,EAAe,MAAM,KAC/E3zB,EAAO1gB,QAAQe,KAAKulB,IACnB,MAAMpgB,MAAEA,GAAUwa,EAAO0xB,oBAAoB9rB,GAC7C,OAAO1lB,UAACC,cAAA8lB,EAAO,CAAApkB,IAAKd,OAAOyE,GAAQA,MAAOA,GAAS,IAEpB,SAAhCwa,EAAOixB,sBAAmCqB,EAAcpyC,EAAAA,QAACC,cAAAwzC,QAAqB,KAGrF,CA2DWsB,CAAoBj1B,EAAQ6zB,MA8CvC,CAEAY,GAAO3H,QAAUQ,GACjBmH,GAAOxuB,OAASotB,GAChBoB,GAAOf,MAAQH,GACfkB,GAAOd,gBAAkBH,GChQzB,MAAMjuB,GAAY5lB,EAAAA,QAAOmS,GAAG;mBACT9R,EAAAA,SAAM;kBACPA,EAAAA,SAAM;EAWxB,IAAAk1C,GAAev1C,WARf,UAAce,UAAEA,EAASge,IAAEA,EAAGnM,SAAEA,IAC9B,OACErS,EAAC,QAAAC,cAAAolB,GAAU,CAAA7kB,UAAWA,GACpBR,EAAC,QAAAC,cAAA8d,GAAS,CAAAJ,KAAMa,GAAMnM,GAG5B,GAEe5S,CAAwB,ICpBvC,SAASw1C,GAAapoC,EAA8B4uB,GAClD,GAAIA,EAAI,CACN,MAAMl7B,OAAEA,GAAWk7B,EAAG/D,wBACtB7qB,EAAItM,EACL,CACH,CCQA,MAAM20C,GAAiBz1C,EAAAA,QAAOgW,MAAM;IAChC9V,EAAW,CAAEJ,SAAU;;;;;;aAMdO,EAAAA,SAAM;mBACAsV,EAAAA,IAAI;kBACLtV,EAAAA,SAAM;;WAEbA,EAAAA,SAAM;iBACAA,EAAAA,SAAM;eACRA,EAAAA,SAAM;iBACJA,EAAAA,SAAM;;;;IAInBmW,EAAS;aACAnW,EAAAA,SAAM;;EAIbuV,GAAU5V,EAAAA,QAAOmS,GAAG;;;mBAGP9R,EAAAA,SAAM;EAGnBq1C,GAAO11C,EAAAA,QAAOmS,GAAG;;EAIvB,SAASwjC,GAAangC,OAAAoD,MAAEA,EAAKpB,QAAEA,EAAOC,SAAEA,KAAatX,EAA/Be,EAAAA,OAAAsU,EAAA,CAAA,QAAA,UAAA,aACpB,OACEjV,EAAAA,QAAAC,cAACi1C,GAAcl0C,OAAAC,OAAA,CAAA,EAAKrB,GAClBI,UAAAC,cAACk1C,GAAI,KACFl+B,GAAWjX,EAAAA,QAAAC,cAACoV,GAAO,KAAE4B,GACrBoB,GAEFnB,GAAYA,EAGnB,CCrDA,MAAMg+B,GAAiBz1C,EAAAA,SAAQwV,IAAA,IAAAuJ,IAAEA,GAAevJ,EAAPrV,EAAKe,EAAAA,OAAAsU,EAAf,SAAsB,OACnDjV,EAAC,QAAAC,cAAAm1C,kBAAanC,GAAIz0B,EAAM,IAAM,UAAc5e,GAC7C,GAAC;IACEoW,EAAS;aACAlW,EAAAA,SAAM;;;IAGf,EAAGwe,YACHA,EACIrO,EAAAA,GAAG;8BACmBnQ,EAAAA,SAAM;8BACNA,EAAAA,SAAM;cACtBA,EAAAA,SAAM;UAEZ;EAcR,IAAAu1C,GAAe51C,WAJf,SAAkBwV,GAAA,IAAAuJ,IAAEA,GAA8BvJ,EAAtBrV,EAAKe,EAAAA,OAAAsU,EAAf,SAChB,OAAOjV,EAAAA,sBAACk1C,GAAcl0C,OAAAC,OAAA,CAAC0c,KAAMa,EAAKA,IAAKA,GAAS5e,EAAK,CAAEsV,KAAK,aAC9D,GAEezV,CAAiB,ICjBhC,MAAMuqB,GAAcvqB,EAAAA,QAAOmS,GAAG;;;iBAGb9R,EAAAA,SAAM;EAGjBw1C,GAAa71C,EAAAA,QAAOyC,GAAkB;WACjCpC,EAAAA,SAAM;;;MAGXmR,cAAY,CACZ,OAAQQ,EAASA,UAAC,CAAE8jC,WAAW,IAC/B,SAAU9jC,EAASA,UAAC,CAAE8jC,WAAW;;EAKjCC,GAAkB/1C,EAAAA,QAAOmS,GAAgB;;IAE3CjS,EAAW,CAAEN,SAAU;;YAEfmS,EAAIA,KAAC,UAAW;;IAExBikC;oBACgB31C,EAAAA,SAAM;;EAIpB41C,GAAej2C,EAAAA,QAAOmS,GAAgB;IACxCjS;;aAESsR,cAAY,CACrB,EAAGQ,EAASA,UAAC,CAAE8jC,WAAW,IAC1B,EAAG9jC,EAASA,UAAC,CAAE8jC,WAAW;;;MAIxBtkC,cAAY,CACZ,OAAQQ,EAASA,UAAC,CAAE8jC,WAAW,IAC/B,KAAM9jC,EAASA,UAAC,CAAE8jC,WAAW;;EAUnC,SAASI,GAAe1gC,OAAAoD,MAAEA,EAAKhG,SAAEA,GAAQ4C,EAAKrV,EAAKe,EAAAA,OAAAsU,EAA3B,sBACtB,MAAM2gC,EAAqBv8B,SAAuB,OAC5CsP,SAAEA,EAAQtI,OAAEA,EAAM9f,OAAEA,GH/C5B,SAAmCs1C,GACjC,MAAOxyB,EAAOyyB,GAAe1yB,EAAAA,YAAY2yB,IAAeA,IAAW,IAC5DC,EAAaC,GAAkB98B,EAAQA,SAA0B,GAqBxE,OAnBAqlB,EAAAA,iBAAgB,KACdyW,GAAagB,EAAgBJ,EAAYt8B,QAAQ,GAChD,CAACs8B,IAEJl8B,EAAAA,WAAU,KACR,MAAMsjB,EAAW,IAAI+Q,kBAAiB,KACpCiH,GAAagB,EAAgBJ,EAAYt8B,QAAQ,IAOnD,OAJIs8B,EAAYt8B,SACd0jB,EAASE,QAAQ0Y,EAAYt8B,QAAS,CAAE00B,WAAW,IAG9C,IAAMhR,EAASQ,YAAY,GACjC,CAACoY,IAKG,CACLltB,SAAUtF,EACVhD,OAAQy1B,EACRv1C,OANc0e,KACwBoE,EAAQ2yB,EAAc,EAA/B,OAOjC,CGmBuCE,CAA0BN,GAE/D,OACE51C,UAASC,cAAA,MAAAe,OAAAC,OAAA,CAAA,EAAArB,EAAO,CAAAsV,KAAK,SACnBlV,EAAAA,QAAAC,cAACm1C,GAAY,CACX32B,QAAS4B,EACThI,MAAOA,EACPnB,SACElX,EAAAA,sBAACgqB,GAAW,KACVhqB,EAAA,QAAAC,cAACq1C,GAAsB,CAAAC,UAAA5sB,EAAUvoB,KAAK,eAAeC,KAAM,sBAGjD,OAAM,gBACLsoB,IAEjB3oB,EAAA,QAAAC,cAACu1C,GAAyB,CAAAW,QAAA51C,EAAQ2U,KAAK,QACrClV,EAAC,QAAAC,cAAAy1C,cAAwB/sB,EAAU5R,IAAK6+B,EAAoB1gC,KAAK,gBAC9DlV,EAAAA,QAAMuV,SAASpV,IAAIkS,GAAWk6B,GACxBA,EAEgB,iBAAVA,GAAsB,SAAUA,EAClCvsC,EAAK,QAACo2C,aAAa7J,EAAO,CAC/B5qC,IAAK0W,EACLiqB,SAAU3Z,EAAW,GAAK,EAC1B0tB,YAAa1tB,IAIV4jB,EAVY31B,eAgB/B,CC5FA,MAAM0/B,GAAY72C,EAAAA,QAAOmS,GAAG;aACf9R,EAAAA,SAAM;kBACDA,EAAAA,SAAM;;WAEbA,EAAAA,SAAM;;iBAEAA,EAAAA,SAAM;eACRA,EAAAA,SAAM;iBACJA,EAAAA,SAAM;;EA8BvB,MAAMy2C,GAAa92C,EAAM,SAtBzB,SAAcwV,OAAAoD,MAAEA,EAAKhG,SAAEA,GAAQ4C,EAAKrV,EAAKe,EAAAA,OAAAsU,EAA3B,sBACZ,MAAMuhC,EAASvwB,KAEf,OACEjmB,6CAAKkV,KAAK,UAA2B,kBAAAshC,GAAY52C,GAC9CyY,GAASrY,wBAACs2C,GAAS,CAACzwB,GAAI2wB,GAASn+B,GAEjChG,EAGP,GAYmB5S,CAAa,CAAE,GAElC,ICrCEg3C,GAAWC,GDqCbC,ICrCEF,GDqC6BF,GCrClBG,GDqC8B,CAAEhvB,KAV7C,SAAkB9nB,GAChB,OAAIA,EAAMyS,SACDrS,EAAC,QAAAC,cAAA01C,GAAmB30C,OAAAC,OAAA,CAAA,EAAArB,IAGtBI,EAAC,QAAAC,cAAAw1C,GAAaz0C,OAAAC,OAAA,CAAA,EAAArB,GACvB,EAI6Dg3C,QAASnB,ICpCpEz0C,OAAOsG,KAAKovC,IAAW7Z,SAASl7B,IAE9B80C,GAAO90C,GAAO+0C,GAAU/0C,EAAI,IAEvB80C,ICfT,MAAM3R,GAAOrlC,EAAAA,QAAOgoC,EAAE;YACV3nC,EAAAA,SAAM;;WAEPA,EAAAA,SAAM;ECGjB,MAAMulB,GAAY5lB,EAAAA,QAAOo3C,KAAK;aACjB/2C,EAAAA,SAAM;;cAELA,EAAAA,SAAM;WACTA,EAAAA,SAAM;;iBAEAA,EAAAA,SAAM;oBACHA,EAAAA,SAAM;;;sBAGJA,EAAAA,SAAM;;IAExBg3C;kBACch3C,EAAAA,SAAM;;;IAGpB+sC,QAAUA;kBACI/sC,EAAAA,SAAM;;EASxB,SAASi3C,IAAev2C,UAAEA,EAAS6R,SAAEA,IACnC,OAAOrS,EAAAA,QAAAC,cAAColB,GAAU,CAAA7kB,UAAWA,GAAY6R,EAC3C,CAEA0kC,GAAeD,KAAOA,GACtBC,GAAelK,KAAOA,GACtBkK,GAAe/O,UD5Bf,SAAmBpoC,GACjB,OAAOI,UAAAC,cAAC6kC,GAAS9jC,OAAAC,OAAA,GAAArB,GAAOsV,KAAK,cAC/B,EC2BA6hC,GAAet/B,YAAchY,EAAAA,QAAOgY,GAAPhY,CAAsC,CAAA,GC1BnE,MAAMu3C,GAAcv3C,EAAAA,QAAOo3C,KAAgC;;;;;aAK9C/2C,EAAAA,SAAM;;;;;;;;gBAQHA,EAAAA,SAAM;;gBAENmR,cAAY,CACxB+wB,QAASvwB,EAASA,UAAC,CAAEuX,MAAM,IAC3B9B,OAAQzV,EAASA,UAAC,CAAEuX,MAAM;EAIxBvR,GAAchY,EAAAA,QAAOsqB,GAAmB;;;;;sBAKxBjqB,EAAAA,SAAM;EAGtBooB,GAAgBzoB,EAAAA,QAAO0oB,OAAkC;;;;;;;;;;;sBAWzCroB,EAAAA,SAAM;mBACTA,EAAAA,SAAM;gBACTA,EAAAA,SAAM;;eAEPmR,cAAY,CACvB,mBAAoBQ,EAAAA,UAAU,CAC5BuX,MAAM,IAER,kBAAmBvX,EAAAA,UAAU,CAC3BuX,MAAM;;IAIRrpB,EAAW,CACXN,SAAU,YACVE,SAAU;EAIR03C,GAAex3C,EAAAA,QAAOmpC,MAAM;;;;;aAKrB9oC,EAAAA,SAAM;;WAERA,EAAAA,SAAM;iBACAA,EAAAA,SAAM;eACRA,EAAAA,SAAM;;;yBAGIA,EAAAA,SAAM;;;EAKzBo3C,GAAaz3C,EAAAA,QAAOmS,GAAG;;;;;aAKhB9R,EAAAA,SAAM;;;EAKbq3C,GAAe13C,EAAAA,QAAOopC,MAAM;;;aAGrB/oC,EAAAA,SAAM;;sBAEGA,EAAAA,SAAM;;;EAqD5B,SAASs3C,GAAOniC,GAAA,IAAAzU,UACdA,EAAS6R,SACTA,EAAQ2W,KACRA,EAAIkD,QACJA,EAAOmrB,eACPA,GAEYpiC,EADTmC,EAAMzW,EAAAA,OAAAsU,EANK,4DAQd,MAAOqiC,EAAWC,GAAgBp+B,EAAAA,UAAU6P,GACtCjS,EAAMsC,SAAoB,MA8BhC,OAtBAM,EAAAA,WAAU,KACJqP,GACFuuB,GAAa,EACd,GACA,CAACvuB,IAEJrP,EAAAA,WAAU,KACR,MAAM69B,EAAazgC,EAAIwC,QAEvB,GAAIi+B,GAAcH,EAAgB,CAChC,MAAMzS,EAAe7c,IACOyvB,EAAWC,WAAW1vB,EAAMzmB,SAE/B+1C,GAAgB,EAKzC,OAFAG,EAAW59B,iBAAiB,UAAWgrB,GAEhC,IAAM4S,EAAW19B,oBAAoB,UAAW8qB,EACxD,IACA,CAACyS,IAEGnsB,UAASC,aACdnrB,wBAACg3C,GAAW,CAAChuB,MAAOsuB,EAAWvgC,IAAKA,GAClC/W,UAACC,cAAAioB,oBACK9Q,EAAM,CACV5W,UAAWA,EACXwoB,KAAMA,EACN0uB,gBAlCN,WACO1uB,GACHuuB,GAAa,EAEhB,EA+BKriC,KAAK,SAAQ,aACF,OAAM,aACN,WAEVsI,QAAQ0O,IAAYlsB,EAAC,QAAAC,cAAAwX,GAAY,CAAAgH,QAASyN,EAAoB,aAAA,UAC9D7Z,IAGLgZ,SAAS9a,KAEb,CCjKM,SAAUonC,GACd7Z,GAEA,MAAMlZ,cAAEA,GAAkBH,MAEnBmzB,EAAYC,GAAiB1+B,EAAQA,SAAM,IAE5C2+B,EA/BR,SACEha,GAEA,MAAMia,EAAwC,CAC5Ct4B,UAAU,EACVyD,SAAU,GACVL,WAAa,EACbrD,SAAU,CACRw4B,QAAS,CAGP54B,OAASoH,GAAQA,EAAIlhB,SAK3B,OAAKw4B,IAAqB,IAAXA,EAGV98B,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAA82C,GACAja,GAJkCia,CAMzC,CAS0BE,CAAmBna,IAErC5a,SAAEA,EAAQ7C,OAAEA,EAAMP,OAAEA,EAAMK,SAAEA,EAAQxT,MAAEA,GAAUiY,EAAa5jB,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAC9D62C,GACH,CAAAj1B,SAASvd,GACAwyC,EAAgBj1B,SAASvd,EAAQ,IAAIA,EAAMjB,UAAY,OAI5D6zC,EAAqBh1B,EAAS7iB,OAASu3C,EAAWn2C,OAElD2d,EAAS3F,eACZ+M,UACC,MAAMhH,SAAEA,GAAas4B,EAEf73B,EAAUT,aAAA,EAAAA,EAAWgH,EAAItG,OAAS,WAGxC,OAFgC,QAApBjL,EAAAgL,aAAO,EAAPA,EAASb,OAAOoH,UAAI,IAAAvR,EAAAA,EAAI,EAE1B,GAEZ,CAAC6iC,IAGG5W,EAAWznB,eACd+M,IACC,IAAKA,EAAK,OAEV,MAAM7kB,EAAMyd,EAAOoH,GAEnBqxB,GAAeM,GACaA,EAAKxhB,MAAMyhB,GAAYh5B,EAAOg5B,KAAaz2C,IAG5Dw2C,EAGF,IAAIA,EAAM3xB,IACjB,GAEJ,CAACpH,IAiBH,MAAO,CACL84B,qBACApa,OAAQga,EACR50B,WACA7C,SACAg4B,UAnBF,WACMH,EACFN,EAAW/a,SAASrW,IAClB,MAAM7kB,EAAMyd,EAAOoH,GAEd7kB,GAELwe,EAASxe,EAAI,IAGfi2C,EAAW/a,SAASrW,GAAQ1G,EAAO0G,IAEtC,EAQC7Z,QACAu0B,WAEJ,CD2FAkW,GAAO9rB,OAtGP,SAAsBrW,OAAA5C,SACpBA,EAAQ7R,UACRA,GAASyU,EACNmC,EAAMzW,EAAAA,OAAAsU,EAHW,0BAKpB,OACEjV,EAAA,QAAAC,cAACg3C,GAAYj2C,OAAAC,OAAA,CAAA,EAAKmW,EAAM,CAAE5W,UAAWA,IAClC6R,EAGP,EA6FA+kC,GAAO3tB,KAvFP,SAAoBxU,OAAA5C,SAClBA,EAAQ7R,UACRA,GAASyU,EACNmC,EAAMzW,EAAAA,OAAAsU,EAHS,0BAKlB,OACEjV,EAAA,QAAAC,cAACi3C,GAAUl2C,OAAAC,OAAA,CAAA,EAAKmW,EAAM,CAAE5W,UAAWA,IAChC6R,EAGP,EA8EA+kC,GAAOkB,OAxEP,SAAsBrjC,OAAA5C,SACpBA,EAAQ7R,UACRA,GAASyU,EACNmC,EAAMzW,EAAAA,OAAAsU,EAHW,0BAKpB,OACEjV,EAAA,QAAAC,cAACk3C,GAAYn2C,OAAAC,OAAA,CAAA,EAAKmW,EAAM,CAAE5W,UAAWA,IAClC6R,EAGP,EC7BO,MAAMkmC,GAAwB5zB,EAAAA,cAAkC,CACrEzB,cAAUne,EACV+4B,OAAQ,CAA8B,EACtCoa,oBAAoB,EACpB73B,SAAW,EACXg4B,YAAc,EACd1rC,QAAU,EACVu0B,WAAa,aAOCsX,IAAuBnmC,SACrCA,EAAQ0N,UACRA,IAEA,MAAM04B,EAAgBd,GAAsB53B,GAE5C,OACE/f,EAAA,QAAAC,cAACs4C,GAAsBzyB,SAAQ,CAACxgB,MAAOmzC,GACpCpmC,EAGP,UAEgBqmC,KAKd,OAAOvzB,EAAAA,WAAWozB,GACpB,UAgBgBI,GACdrzC,EACAszC,EACA9a,GAEA,MAAMte,SAAEA,GAAase,EAEf7d,EAAUT,aAAA,EAAAA,EAAWla,EAAM4a,OAAS,WACpCve,EAAMse,aAAO,EAAPA,EAASb,OAAO9Z,GAE5B,QAAK3D,GAEEi3C,EAAa9sC,IAAInK,EAC1B,CCnLA,MAAMsR,GAAMxT,EAAAA,QAAOo5C,GAAW;;;;;iBAKb/4C,EAAAA,SAAM;ECqBvB,MAAMg5C,GAAkBr5C,EAAAA,QAAOs5C,KAAK;;EAI9BC,GAAkBv5C,EAAAA,QAAOw5C,KAAK;yBACXn5C,EAAAA,SAAM;EAGzBo5C,GAAqBz5C,EAAAA,QAAO+Q,OAAyC;IACvES,cAAY,CACZ,gBAAmBQ,EAASA,UAAC,CAAC,CAAE0nC,UAAW,CAAC,WAAOp0C,MACnD,aAAgB0M,EAASA,UAAC,CAAE0nC,UAAW,2BACxBr5C,WAAM;;IAErBmR,cAAY,CACZ,gBAAmBQ,EAASA,UAAC,CAAC,CAAE0nC,UAAW,CAAC,WAAOp0C,MACnD,aAAgB0M,EAASA,UAAC,CAAE0nC,UAAW,iBAClCr5C,WAAM;aACFA,EAAAA,SAAM,cAAcA,EAAKoQ,SAAC;;;;kBAIrBsB,EAAIA,KAAC,YAAa;sBACd1R,EAAAA,SAAM;EAGtBs5C,GAAanpC,EAAGA,GAAwB;WACnCnQ,EAAAA,SAAM;gBACD0R,EAAIA,KAAC,YAAa;;EAI5B6nC,GAAkB55C,EAAAA,QAAO65C,EAA2C;IACtEF;;iBAEanoC,cAAY,CACzB,wBAAyBQ,EAASA,UAAC,CAAE8nC,OAAQ,CAAC,SAAU,cACxD,sBAAuB9nC,EAASA,UAAC,CAAE8nC,OAAQ;EAIzCC,GAAsB/5C,EAAAA,QAAOg6C,EAGjC;IACEL;;iBAEat5C,EAAAA,SAAM;;iBAENA,EAAAA,SAAM;;;;YAIXmR,cAAY,CACpByoC,QAASjoC,EAASA,UAAC,CAAEkoC,WAAW,IAChCC,OAAQnoC,EAASA,UAAC,CAAEkoC,WAAW;EAI7BE,GAAkBp6C,EAAAA,QAAOq6C,KAAK;sBACdh6C,EAAAA,SAAM;;IAExBu5C;eACWv5C,EAAAA,SAAM;;mBAEFA,EAAAA,SAAM;;;EAKnBi6C,GAAiBt6C,EAAAA,QAAOu6C,EAA8C;IACxEH;wBACoB/5C,EAAAA,SAAM;;;IAG1Bk5C;wBACoBl5C,EAAAA,SAAM;;;sBAGRmR,cAAY,CAC9B,2BAA4BQ,EAASA,UAAC,CAAEyR,UAAU,IAClD,sBAAuBzR,EAASA,UAAC,CAAEyR,UAAU;IAE7ClN,EAAS;wBACW/E,cAAY,CAC9B,2BAA4BQ,EAASA,UAAC,CAAEyR,UAAU;;;kBAItCpjB,EAAAA,SAAM;;;;;yBAKCmR,cAAY,CACjCgpC,MAAOxoC,EAASA,UAAC,CAAEu6B,YAAY,IAC/B9kB,OAAQzV,EAASA,UAAC,CAAEu6B,YAAY;;gBAGpB/6B,cAAY,CACxB,0BAA2BQ,EAASA,UAAC,CAAEu6B,YAAY,IACnDllB,KAAMrV,EAASA,UAAC,CAAEu6B,YAAY;;IAG9B8M;MACE9iC,EAAS;0BACWlW,EAAAA,SAAM;;;MAG1BmW,EAAS;0BACWnW,EAAAA,SAAM;;;EAK1Bo6C,GAA6Bz6C,EAAAA,QAAOu6C,EAAE;kBAC1Bl6C,EAAAA,SAAM;;;;;;EAQlBq6C,GAAc16C,EAAAA,QAAO26C,KAAyB;;;;;sBAK9Bt6C,EAAAA,SAAM;;;;IAIxBg5C,MAAmBiB;cACT9oC,cAAY,CACpB,OAAQQ,EAASA,UAAC,CAAEuF,MAAO,UAC3B,OAAQvF,EAASA,UAAC,CAAEuF,MAAO,YAC3B,OAAQvF,EAASA,UAAC,CAAEuF,MAAO;;;IAI7BwiC;IACAH;eACWpoC,cAAY,CACrB,WAAYQ,EAASA,UAAC,CAAEuF,MAAO,UAC/B,UAAWvF,EAASA,UAAC,CAAEuF,MAAO,CAAC,UAAW;;iBAG/B/F,cAAY,CACvB,cAAeQ,EAASA,UAAC,CAAEuF,MAAO,UAClC,cAAevF,EAASA,UAAC,CAAEuF,MAAO,CAAC,UAAW;;EAK9Cu0B,GAAgB9rC,EAAAA,QAAOyC,GAA2B;IACpD+O,cAAY,CACZ,4BAA6BQ,EAASA,UAAC,CAAE+5B,SAAS;EAItD,SAAS6O,GAASplC,GAAA,IAAA5C,SAChBA,EAAQ0N,UACRA,EAAS/I,MACTA,EAAQ,WAAS/B,EACdmC,EAJazW,EAAAA,OAAAsU,EAAA,CAAA,WAAA,YAAA,UAMhB,OAGEjV,EAAAA,QAAAC,cAACu4C,GAAsB,CAACz4B,UAAWA,GACjC/f,EAAAA,QAAAC,cAACk6C,GAAWn5C,OAAAC,OAAA,CAAC+V,MAAOA,GAAWI,GAC5B/E,GAIT,CAEA,MAAMioC,GAAoB76C,EAAAA,QAAOmS,GAAyB;;;;gBAI1CJ,EAAIA,KAAC,UAAW;EAmBhC,SAAS+oC,GAAUtlC,GAAA,IAAA5C,SACjBA,EAAQ0e,UACRA,EAAY,OAAMwoB,OAClBA,EAAS,WAEMtkC,EADZmC,EAAMzW,EAAAA,OAAAsU,EAJQ,mCAMjB,OACEjV,EAAC,QAAAC,cAAAo5C,GAAgBr4C,OAAAC,OAAA,CAAA8vB,UAAWA,EAAWwoB,OAAQA,GAAYniC,GACxD/E,EAGP,CAEA,SAASmoC,GAAiBvlC,GAAA,IAAA3P,MAAEA,GAAwC2P,EAA9BrV,EAAKe,EAAAA,OAAAsU,EAAjB,WACxB,MAAMoL,OAAEA,EAAM6gB,SAAEA,EAAQpD,OAAEA,GAAW4a,KAE/Bx1B,EF9DF,SAAuE5d,GAC3E,MAAM4d,SAAEA,EAAQ4a,OAAEA,GAAW4a,KAE7B,SAAKpzC,IAAU4d,IAERy1B,GAAerzC,EAAO4d,EAAU4a,EACzC,CEwDmB2c,CAAkBn1C,GAE7Bge,EAAS,IAAMjD,EAAO/a,GAM5B,GAJAqU,EAAAA,WAAU,KACRunB,EAAS57B,EAAM,GACd,CAACA,EAAO47B,IAEPthC,EAAMyS,SACR,OACErS,EAAAA,QAACC,cAAAs6C,QACE36C,EAAMyS,SAAS,CACd6Q,WACA7C,OAAQiD,KAMhB,MAAMo3B,EAAQ5c,EAAOre,SAAW7G,GAAWC,GAE3C,OACE7Y,EAAA,QAAAC,cAACs6C,GAASv5C,OAAAC,OAAA,GAAKrB,GACZ0F,EAAQtF,EAAC,QAAAC,cAAAy6C,GAAM5yB,QAAS5E,EAAUlM,MAAM,QAAQ6L,SAAUS,IAAa,KAG9E,CA2EA,SAASq3B,GAAc1lC,GAAA,IAAA8b,UACrBA,EAAY,OAAM1e,SAClBA,EAAQoM,QACRA,GAAOxJ,EACJmC,EAJkBzW,EAAAA,OAAAsU,EAAA,CAAA,YAAA,WAAA,YAMrB,OACEjV,EAAAA,QAACC,cAAAu5C,kBACCG,UAAsB,MAAXl7B,EACXsS,UAAWA,EACXtS,QAASA,GACLrH,GAEJpX,EAAAA,QAAAC,cAAC4T,GAAO5B,MAAM,CAAAC,MAAM,KAAKE,MAAM,UAC5BC,GAIT,CAEA,MAAMuoC,GAAiBn7C,EAAAA,QAAOmS,GAAG;;SAExB9R,EAAAA,SAAM;;EA8Bf,MAAM+6C,GAAsBp7C,EAAAA,QAAOitC,GAASE,QAAQv1B,OAAO;;;IAGvDyjC;cACUh7C,EAAAA,SAAM;;EAIpB,SAASi7C,GAAmB9lC,OAAAyQ,OAC1BA,EAAMoC,QACNA,EAAOzV,SACPA,KACGzS,EAJuBe,EAAAA,OAAAsU,EAAA,CAAA,SAAA,UAAA,aAM1B,OACEjV,EAAC,QAAAC,cAAAysC,GAAShlB,oBACRzQ,QACE6Q,EACE9nB,wBAACkC,GAAI,CAAC9B,KAAK,QAAQC,KAAK,KAAKI,MAAM,mBAEnCT,UAACC,cAAA4T,GAAOZ,IAAG,CAACK,QAAQ,MAGxB4B,KAAK,SACU,gBAAA4S,EAAU,OAAS,SAC9BloB,GAEHyS,GAAaqT,IAAWA,EAAOA,QAAUA,EAAO6F,OAAS7F,EAAO/jB,MAAS,SAGhF,CAEA,MAAMq5C,GAAcv7C,EAAM,QAACyC,IAAMoU,MAAM,CACrClW,KAAM,kBACNC,KAAM,KACNI,MAAO,kBACP;;EAIF,SAASw6C,GAAehmC,GAAA,IAAA3P,MACtBA,EAAKud,SACLA,EAAQzjB,QACRA,EAAOgT,MACPA,EAAKC,SACLA,EACA6oC,QAASC,GAAYlmC,EAClBrV,EAAKe,SAAAsU,EAPc,6DAStB,OACEjV,EAAC,QAAAC,cAAAysC,GAAS,CAAAt6B,MAAOA,GACfpS,EAAAA,QAACC,cAAA46C,GAAoB75C,OAAAC,OAAA,CAAAiW,SAAU,KAAMF,MAAM,SAAYpX,QACnCmF,IAAjBo2C,EAA0B,EACtBxyB,cAAgB9iB,EAAUA,WAACs1C,GAAgBA,EAAaxyB,GAAYwyB,EAEvEn7C,EAAAA,QAACC,cAAA+6C,GAAc,OAGnBh7C,EAAC,QAAAC,cAAAysC,GAASG,KAAI,CAAC33B,KAAK,WACjB7C,IACCjT,aAAA,EAAAA,EAASe,KAAI,CAACulB,EAAQnkB,IACpBvB,EAAAA,QAAAC,cAAC86C,GAAe,CACdp5C,IAAKJ,EACLmkB,OAAQA,EACRoC,QAASpC,EAAO/jB,OAAQ2D,aAAK,EAALA,EAAO3D,KAC/B8c,QAAS,IAAMoE,aAAQ,EAARA,EAAW6C,SAMxC,CAEA,SAAS01B,GAAiB/oC,GACxB,MAAM6Q,SAAEA,EAAQ4a,OAAEA,GAAW4a,KAE7B,IAAKx1B,EAAU,OAAO,EAEtB,MAEMm4B,EAFc9lC,EAAAA,SAASpL,QAAQkI,GAEEkgC,MAAMhG,GACpCC,EAAcA,eAACD,IAAUA,EAAM5mC,OAAS60C,KAGjD,IAAKa,EAAoB,OAAO,EAEhC,MAAM/1C,MAAEA,GAAW+1C,EAA0Cz7C,MAE7D,QAAK0F,GAEEqzC,GAAerzC,EAAO4d,EAAU4a,EACzC,CAEAuc,GAAMiB,KA9QN,SAAmBrmC,GAAA,IAAA5C,SAAEA,GAAwC4C,EAA3BmC,EAAMzW,EAAAA,OAAAsU,EAArB,cACjB,OAAOjV,wBAAC65C,GAAe74C,OAAAC,OAAA,GAAKmW,GAAS/E,EACvC,EA6QAgoC,GAAM5wB,KA3QN,SAAmBxU,GAAA,IAAA5C,SAAEA,GAAwC4C,EAA3BmC,EAAMzW,EAAAA,OAAAsU,EAArB,cACjB,OAAOjV,wBAAC84C,GAAe93C,OAAAC,OAAA,GAAKmW,GAAS/E,EACvC,EA0QAgoC,GAAMkB,IAzMN,SAAkBtmC,GAAA,IAAA5C,SAAEA,GAAoC4C,EAAvBmC,EAAMzW,EAAAA,OAAAsU,EAArB,cAChB,MAAMiO,EAAWk4B,GAAiB/oC,GAElC,OACErS,EAAAA,QAACC,cAAA85C,GAAmB/4C,OAAAC,OAAA,CAAA,EAAAmW,GAAQ8L,SAAUA,EAAU8oB,YAAY,IACzD35B,EAGP,EAkMAgoC,GAAMmB,KAAOjB,GACbF,GAAMoB,SAAWd,GACjBN,GAAMqB,KAAO1C,GACbqB,GAAMsB,QA5RN,UAAsBtpC,SAAEA,EAAQyoB,SAAEA,EAAQv6B,OAAEA,IAC1C,OACEP,EAAA,QAAAC,cAACi5C,GAAkB,CAAAC,UAAYre,GAC7B96B,EAAC,QAAAC,cAAAq6C,YAA2B/5C,GAAS8R,GAG3C,EAuRAgoC,GAAMuB,UAAY,CAChBjuB,QA/HF,SAA+B1Y,OAAA4mC,QAAEA,EAAOxpC,SAAEA,GAAQ4C,EAAKmC,EAAMzW,EAAAA,OAAAsU,EAA9B,wBAC7B,MAAM5Q,OAAEA,EAAMsI,MAAEA,cFrNhB,MAAMuW,SAAEA,EAAQvW,MAAEA,GAAU+rC,KAE5B,MAAO,CACLr0C,OAAQ6e,EAAW,IAAIA,EAAS7e,UAAY,GAC5CsI,QAEJ,CE+M4BmvC,GAE1B,OACE97C,EAAAA,QAAAC,cAAC26C,GAAc55C,OAAAC,OAAA,CAAA,EAAKmW,GACjB/S,EAAO5C,OAAS,EACfzB,EAAAA,QAAAC,cAAAD,EAAAA,QAAA4W,SAAA,KACGilC,EAAQ17C,KAAI,CAAC47C,EAAQx6C,IACpBvB,wBAAC+7C,EAAM,CAACp6C,IAAKJ,EAAG8C,OAAQA,MAE1BrE,EAAAA,QAAAC,cAACie,GACC,CAAAO,QAAUvV,IACRA,EAAEolC,iBACF3hC,GAAO,GAGT3M,EAAAA,QAAAC,cAACurB,GAAK,CAAA1a,QAAQ,sBAQ1B,EAwGE0qC,KAAMhB,GACNiB,SApOF,SAA8B77C,GAC5B,MAAMs4C,mBAAEA,EAAkBG,UAAEA,EAASva,OAAEA,GAAW4a,KAE5Cx1B,EAAWg1B,EACX50B,EAAS,IAAM+0B,IAErB,GAAIz4C,EAAMyS,SACR,OAAOrS,EAAAA,sBAAC26C,GAAa35C,OAAAC,OAAA,CAAA,EAAKrB,GAAQA,EAAMyS,SAAS,CAAE6Q,WAAU7C,OAAQiD,KAGvE,MAAMo3B,EAAQ5c,EAAOre,SAAW7G,GAAWhC,EAAAA,SAE3C,OACE5W,EAAAA,QAAAC,cAAC06C,GAAa35C,OAAAC,OAAA,CAAA,EAAKrB,GACjBI,EAAAA,QAAAC,cAACy6C,EAAM,CAAA5yB,QAAS5E,EAAUlM,MAAM,QAAQ6L,SAAUS,IAGxD,GAqNA+2B,GAAM2B,cAzMN,SAA4B/mC,OAAAgnC,kBAC1BA,EAAiBtzB,SACjBA,EACA1R,QAASilC,EAAY7pC,SACrBA,EAAQuW,iBACRA,EAAgBC,gBAChBA,GAAkB,GAAK5T,EACpBmC,EAAMzW,EAAAA,OAAAsU,EAPiB,4FAS1B,MAAO6T,EAAWC,GAAgB5P,EAAQA,SAAC0P,GAErC3F,EAAWk4B,GAAiB/oC,GAE5B2W,EAAOL,QAAAA,EAAYG,EACnBkjB,EAAaxuB,QAAQwL,GAAQizB,GAC7BE,EAAUl2C,MAAMV,QAAQ8M,GAAYA,EAAS5Q,OAAS,EAAI,EAEhE,IAAIwV,EAAqBjX,UAAAC,cAACsrC,GAAa,CAACnrC,KAAK,cAAaorC,QAAUxiB,IAYpE,OAXIkzB,IACFjlC,EAAUpR,EAAUA,WAACq2C,GAAgBA,EAAalzB,GAAQkzB,GAW1Dl8C,UAAAC,cAAAD,EAAA,QAAA4W,SAAA,KACE5W,EAAAA,QAAAC,cAAC85C,GAAc/4C,OAAAC,OAAA,CAAA,EAAKmW,EAAM,CAAEqH,QAThC,WACOw9B,IAELrzB,SAAAA,GAAoBI,GACpBD,GAAcC,GACf,EAIgDgjB,WAAYA,EAAY9oB,SAAUA,IAC7EljB,EAAAA,QAAAC,cAACs6C,GAAS,KAAE0B,GAAqBhlC,GAChC5E,GAEF25B,GACChsC,EAAA,QAAAC,cAACi6C,GAA0B,KACzBl6C,UAAAC,cAACo5C,GAAe,CAAC8C,QAASA,GAAUF,IAK9C,EAgKA5B,GAAM+B,WD9eN,SAAyBnnC,GAAA,IAAAonC,MAAEA,GAAsCpnC,EAA5BvU,EAAIC,EAAAA,OAAAsU,EAAhB,WACvB,OACEjV,wBAACiT,GAAGjS,OAAAC,OAAA,CAAA,EAAKP,EAAM,CAAA4S,QAAQ,SACrBtT,EAAA,QAAAC,cAACiC,GAAI,CAAC9B,KAAe,MAATi8C,EAAgB,QAAQA,IAAU,OAAQ/7C,MAAM,SAASC,OAAO,WAGlF,ECyeA06C,GAAYvzB,KAAOqzB,GACnBV,GAAMiC,OAASrB,GCnff,IAAAsB,GAAe98C,WARf,UAAc+e,IAAEA,EAAGhe,UAAEA,EAAS6R,SAAEA,IAC9B,OACErS,EAAA,QAAAC,cAAC8d,GAAQ,CAACvd,UAAWA,EAAWmd,KAAMa,GACnCnM,EAGP,GAEe5S,CAAwB,ICJhC,MAAM+8C,GAAe/8C,EAAM,QAACitC,GAAPjtC,CAAiB,CAAE,GAElCg9C,GAAwBh9C,EAAAA,QAAOgoC,EAAE;YAClC3nC,EAAAA,SAAM,cAAcA,EAAKoQ,SAAC;;WAE3BpQ,EAAAA,SAAM;EAGX48C,GAAsBj9C,EAAM,QAACosC,GAAgBM,OAAO;WAC/CrsC,EAAAA,SAAM;EAGJ68C,GAAoBl9C,EAAAA,QAAO4Y,KAAK;IACzC1Y;;;;;IAKAkR,GAAW,YAAa,CAAEpQ,MAAO;;;;IAIjCwV,EAAS;aACAnW,EAAAA,SAAM;;EAIb88C,GAAen9C,EAAAA,QAAOC,IAAsB;IpGpCzC;;eoGuCOE,GAAUA,EAAMi9C;EAG1B7yB,GAAcvqB,EAAAA,QAAOmS,GAAG;WACnB9R,EAAAA,SAAM;EAGXg9C,GAA0Br9C,EAAAA,QAAOse,GAAS;;IAE5ClN,GAAW,OAAQ,CAAEpQ,MAAO;;IAE5BuV,EAAS;;;;;IAKTC,EAAS;;0BAEanW,EAAAA,SAAM;;;EAmChC,SAASi9C,GAAiBn9C,GACxB,MAAMyY,MAAEA,EAAKhG,SAAEA,GAAsBzS,EAATc,EAASC,EAAAA,OAAAf,EAA/B,CAAA,QAAA,aACAo9C,EAAU/2B,KAEhB,OACEjmB,EAAAA,QAACC,cAAAu8C,GAAa,CAAApqC,MAAM,MAAMzQ,IAAK0W,GAC7BrY,EAAAA,QAACC,cAAAi/B,GAAQsC,UAAS,KAChBxhC,UAAAC,cAAC08C,GAAiB,KAChB38C,UAACC,cAAA28C,SAAmB,IAAK/2B,GAAIm3B,GAC1B3kC,GAEHrY,EAAAA,QAACC,cAAAy8C,GAAwB17C,OAAAC,OAAA,CAAA,EAAAP,EAAM,CAAA4hC,SAAU,EAAoB,kBAAA0a,OAGjEh9C,EAAAA,QAAAC,cAAC0oC,GAAc,KAAAt2B,GAGrB,CCxGA,MAAMojC,GAAWh2C,EAAAA,QAAOse,GAAgC;IACpDlN,GAAW;;WAEJI,cAAY,CACnB,iCAAkCQ,EAASA,UAAC,CAAEwrC,SAAS,IACvD,4BAA6BxrC,EAASA,UAAC,CAAEwrC,SAAS;;IAGlDjnC,EAAS;;aAEAlW,EAAAA,SAAM;;;IAGfmW,EAAS;aACAnW,EAAAA,SAAM;;EAUb,SAAUo9C,GAAajoC,OAAAuJ,IAAEA,EAAG+L,KAAEA,EAAIlS,MAAEA,KAAU3X,EAAvBC,EAAAA,OAAAsU,EAAA,CAAA,MAAA,OAAA,UAC3B,OAAIsV,EAEAvqB,EAAAA,QAACC,cAAAw1C,oBAAa/0C,EAAI,CAAEid,KAAMa,EAAKy+B,SAAO,EAAC1xB,MAAOlT,IAC3CkS,GAMLvqB,EAAA,QAAAC,cAACw1C,GAAQz0C,OAAAC,OAAA,CAAA,EAAKP,EAAI,CAAEid,KAAMa,IACvBnG,EAGP,CCxBA,MAAM8kC,GAAgB19C,EAAAA,QAAOof,GAAmC;IAC5D5N,cAAY,CACZ,qBAAsBQ,EAASA,UAAC,CAAEK,OAAQ;;;;;;;mBAQ3BhS,EAAAA,SAAM;;;YAGb08C;mBACO18C,EAAAA,SAAM;;EAYzB,SAAS+sC,GAAKjtC,GACZ,MAAMwS,MAAEA,EAAQ,QAAWxS,EAE3B,OAAOI,EAAA,QAAAC,cAACk9C,GAAsB,CAAArrC,OAAAM,GAAQxS,EAAMyS,SAC9C,CAEAw6B,GAAKnlB,KAdL,SAAkB9nB,GAChB,OAAIA,EAAMyS,SACDrS,EAAC,QAAAC,cAAA88C,GAAqB/7C,OAAAC,OAAA,CAAA,EAAArB,IAGxBI,EAAC,QAAAC,cAAAi9C,GAAiBl8C,OAAAC,OAAA,CAAA,EAAArB,GAC3B,EASAitC,GAAK+J,QFiBC,SAA8B3hC,OAAAsV,KAClCA,EAAIlS,MACJA,EAAKmG,IACLA,KACG9d,EAJ+BC,EAAAA,OAAAsU,EAAA,CAAA,OAAA,QAAA,QAMlC,OAAOuJ,EACLxe,EAAAA,QAAAC,cAAC68C,GAAuB97C,OAAAC,OAAA,CAAA,EAAKP,EAAI,CAAEid,KAAMa,IACvCxe,EAAA,QAAAC,cAAC6oC,GAAiB,CAAAxG,UAAW,EAAGrrB,QAASjX,EAAA,QAAAC,cAAC+pB,GAAa,KAAAO,IACpDlS,IAILrY,EAAA,QAAAC,cAAC6oC,GAAiB9nC,OAAAC,OAAA,CAAAgW,QAASjX,EAAAA,QAACC,cAAA+pB,GAAa,KAAAO,IAAyB7pB,GAC/D2X,EAGP,EEjCAw0B,GAAK7E,UAAYyU,GChDjB,MAAMp3B,GAAY5lB,EAAAA,QAAOgW,MAAM;kBACb3V,EAAAA,SAAM;;;;;EAexB,IAAAs9C,GAAe39C,WARf,UAA2Be,UAAEA,EAASie,QAAEA,IACtC,OACEze,EAAAA,QAACC,cAAAolB,GAAU,CAAA7kB,UAAWA,EAAWie,QAASA,GACxCze,EAAAA,QAAAC,cAACiC,GAAI,CAAC9B,KAAK,eAAeC,KAAM,GAAgB,cAAA,mBAGtD,GAEeZ,CAAkD,ICbjE,MAAM49C,GAAqBptC,EAAGA,GAAA;kBACZ0sC;qBACG78C,EAAAA,SAAM;;EAIrBulB,GAAY5lB,EAAAA,QAAOmS,GAAG;;;;;YAKhB9R,EAAAA,SAAM;eACHA,EAAAA,SAAM;;sBAECA,EAAAA,SAAM;6BACCA,EAAAA,SAAM;;IAE/Bu9C;EAOJ,SAASC,IAAcjrC,SAAEA,IACvB,OAAOrS,EAAC,QAAAC,cAAAolB,GAAW,KAAAhT,EACrB,CAEAirC,GAAcxG,KAAOA,GACrBwG,GAAczQ,KAAOA,GACrByQ,GAAcC,kBAAoBA,GCnClC,MAAMC,GAAkB/9C,EAAAA,QAAO+S,GAAM;;EAI/BirC,GAAmDxoC,IAAA,IAAAnE,QACvDA,EAAU,OAAMyZ,KAChBA,EAAIgB,MACJA,EAAKjI,OACLA,EAAMjR,SACNA,GAEwB4C,EADrBrV,EAAKe,SAAAsU,EAN+C,gDAQvD,MAAMyoC,EAA2B,oBAAZ5sC,EACftR,EAAUk+C,EAAezrC,GAAQurC,GAEvC,OACEx9C,EAAA,QAAAC,cAACT,EAAOwB,OAAAC,OAAA,CAAA,EAAKrB,EAAK,CAAEsS,MAAOwrC,EAAe,IAAM,KAAMtrC,MAAM,SAASD,QAAQ,WAC1EE,GACCrS,wBAAC4W,EAAAA,SAAQ,KACN2T,EACDvqB,EAAA,QAAAC,cAACurB,GAAK,CAAA1a,QAAQ,gBAAgBya,GAC7BjI,GACCtjB,EAAA,QAAAC,cAACoX,GAAMrW,OAAAC,OAAA,CAAC6P,QAAQ,UAAUkG,MAAM,SAAYsM,GACzCA,EAAOjL,QAMnB,EC/BG7Y,GAAUC,EAAAA,QAAOmS,GAAqC;;;cAG9CX,cAAY,CACpB,QAASQ,EAASA,UAAC,CAAEuF,MAAO,UAC5B,QAASvF,EAASA,UAAC,CAAEuF,MAAO;;;EAMrB2mC,GAAuC1oC,QAAA2oC,aAClDA,EAAY5mC,MACZA,GAAK/B,EACFrV,EAAKe,EAAAA,OAAAsU,EAH0C,0BAI3B,OACvBjV,UAAAC,cAACT,GAAOwB,OAAAC,OAAA,CAAC+V,MAAOA,GAAWpX,GACA,iBAAjBg+C,EAA4B59C,UAAAC,cAAA,MAAA,CAAK49C,IAAKD,EAAcE,IAAI,KAAQF,EAE3E,EChBKp+C,GAAUC,EAAAA,QAAO+S,GAAM;;;;EAMvBurC,GAAmE9oC,IAAA,IAAAnE,QACvEA,EAAU,OAAM8sC,aAChBA,EAAYryB,MACZA,EAAKyyB,YACLA,EAAW16B,OACXA,EAAMjR,SACNA,GAAQ4C,EACLrV,EAAKe,SAAAsU,EAP+D,sEASvE,MAAMgpC,EAA4B,SAAZntC,EAEtB,OACE9Q,wBAACR,GAAOwB,OAAAC,OAAA,CAAA,EAAKrB,EAAO,CAAAwS,MAAM,SAASD,QAAQ,SAASD,MAAM,MACvDG,GACCrS,EAAA,QAAAC,cAAC2W,EAAAA,SAAQ,KACNgnC,GACC59C,EAAC,QAAAC,cAAA09C,IAAaC,aAAcA,EAAc5mC,MAAOinC,EAAgB,QAAU,aAE3E1yB,GAASyyB,IACTh+C,EAAA,QAAAC,cAACuS,GAAK,CAACN,MAAM,MACVqZ,GACCvrB,EAAC,QAAAC,cAAAurB,GACC,CAAA1a,QAASmtC,EAAgB,kBAAoB,YAC7Cx9C,MAAOw9C,EAAgB,wBAA0B,wBAEhD1yB,GAGJyyB,GACCh+C,EAAA,QAAAC,cAACurB,GAAI,CAAA,cACS,0BACZ1a,QAASmtC,EAAgB,OAAS,UAClCx9C,MAAM,yBAELu9C,IAKR16B,GACCtjB,EAAAA,QAAAC,cAACoX,GAAMrW,OAAAC,OAAA,CACLT,UAAU,qBACVsQ,QAAQ,UACRkG,MAAOinC,EAAgB,UAAY,SAC/B36B,GAEHA,EAAOjL,QAMnB,ECxDG6lC,GAAct+C,GACd,CAAC,OAAQ,mBAAmBwP,SAASxP,EAAMkR,SACtC9Q,EAAC,QAAAC,cAAAw9C,GAAwBz8C,OAAAC,OAAA,CAAA,EAAArB,IAE3BI,EAAC,QAAAC,cAAA89C,GAAgC/8C,OAAAC,OAAA,CAAA,EAAArB,IChB1B,SAAAu+C,GAAWC,EAAsCC,GAC/D,OAAOD,EAASv9C,OAAOw9C,GAAOv9C,cAChC,CDiBAo9C,GAAWP,aAAeA,GCfnB,MAAMW,GAAiB,CAC5B,EAAG,UACHC,IAAK,UACLC,QAAS,UAET,EAAG,WACHC,IAAK,WACLC,SAAU,WAEV,EAAG,QACHC,IAAK,QACLC,MAAO,QAEP,EAAG,QACHC,IAAK,QACLC,MAAO,QAEP,EAAG,MACHC,IAAK,MAEL,EAAG,OACHC,IAAK,OACLC,KAAM,OAEN,EAAG,OACHC,IAAK,OACLC,KAAM,OAEN,EAAG,SACHC,IAAK,SACLC,OAAQ,SAER,EAAG,YACHC,IAAK,YACLC,UAAW,YAEX,EAAG,UACHC,IAAK,UACLC,QAAS,UAET,GAAI,WACJC,IAAK,WACLC,SAAU,WAEV,GAAI,WACJC,IAAK,WACLC,SAAU,YAcCC,GAA+C,CAC1DtB,QAAS,CACPp+C,KAAM,UACNkE,MAAO,GAETo6C,SAAU,CACRt+C,KAAM,WACNkE,MAAO,GAETs6C,MAAO,CACLx+C,KAAM,QACNkE,MAAO,GAETw6C,MAAO,CACL1+C,KAAM,QACNkE,MAAO,GAETy6C,IAAK,CACH3+C,KAAM,MACNkE,MAAO,GAET26C,KAAM,CACJ7+C,KAAM,OACNkE,MAAO,GAET66C,KAAM,CACJ/+C,KAAM,OACNkE,MAAO,GAET+6C,OAAQ,CACNj/C,KAAM,SACNkE,MAAO,GAETi7C,UAAW,CACTn/C,KAAM,YACNkE,MAAO,GAETm7C,QAAS,CACPr/C,KAAM,UACNkE,MAAO,GAETq7C,SAAU,CACRv/C,KAAM,WACNkE,MAAO,IAETu7C,SAAU,CACRz/C,KAAM,WACNkE,MAAO,KAIX,SAASy7C,GAAgB1B,GAGvB,OAFAA,EAAQF,GAAQG,GAAgBD,GAEzByB,GAAczB,EACvB,CAQA,SAAS2B,GAAY3B,GAKnB,MAAM4B,EAAQF,GAAgB1B,GAE9B,MAAO,CACL7vC,IAAG,IACMyxC,EAUT1G,OAAO2G,EAAsE,QAC3E,OAAQA,GACN,IAAK,UACH,OAAOr/C,OAAOo/C,EAAM37C,MAAQ,GAC9B,IAAK,UACH,OAAOzD,OAAOo/C,EAAM37C,MAAQ,GAAG67C,SAAS,EAAG,KAC7C,IAAK,QACH,OAAOF,EAAM7/C,KAAK2a,MAAM,EAAG,GAC7B,IAAK,SACH,OAAOklC,EAAM7/C,KAAK2a,MAAM,EAAG,GAC7B,QACE,OAAOklC,EAAM7/C,KAElB,EACDgqC,GAAGz8B,GAE2B,MAA1BoyC,GAAgBpyC,IAChBwwC,GAAQG,GAAgBD,KAAWF,GAAQG,GAAgB3wC,GAInE,CAEAqyC,GAAYI,OAhDZ,WACE,OAAQp/C,OAAOsG,KAAKw4C,IAAwC3/C,KAAKk+C,GACxD0B,GAAgB1B,IAE3B,EChHA,MAAMhnC,GAAS5X,EAAAA,QAAOoX,GAAW;;;IAG7BhG,GACAI,EAAAA,YAAY,CACV,YAAaQ,EAASA,UAAC,CAAE,iBAAiB,IAC1ClB,KAAMkB,EAASA,UAAC,CAAE,iBAAiB;;;;WAM9B3R,EAAAA,SAAM;;IAEbmW,EAAS;kBACKnW,EAAAA,SAAM;;;IAGpB6V,EAAW;;;;EAMT81B,GAAQhsC,EAAAA,QAAOyC,GAA2B;IAC5C+O,cAAY,CACZ,6BAA8BQ,EAASA,UAAC,CAAE+5B,SAAS;EAIvD,SAAS6U,GACPzgD,GAEA,MAAM+oB,SAAEA,EAAQxR,SAAEA,GAAwBvX,EAAXwX,EAAWzW,EAAAA,OAAAf,EAApC,CAAA,WAAA,aAEN,OACEI,EAAAA,QAACC,cAAAoX,GACCrW,OAAAC,OAAA,CAAA0E,KAAK,UACDyR,EAAM,CAAA,gBACI,OACC,gBAAAuR,EACfxR,SAAUA,EACVD,UAAWC,GAAYnX,EAAAA,QAAAC,cAACwrC,GAAK,CAACrrC,KAAK,eAAeC,KAAM,GAAEmrC,QAAW7iB,MAG3E,CCnDO,MAAM23B,GAAqC,CAChDC,WAAW,GAgKb,SAASC,GAAWC,EAAqBC,EAAaJ,IACpD,MAAMlhD,EAAe4B,OAAAC,OAAAD,OAAAC,OAAA,GAAAq/C,IAAoBI,GACnCC,EAAU,WACd,IAAIC,EAAO,IAAIC,KAEA,MAAXJ,IACFG,EAAO,IAAIC,KAAKJ,IAgBlB,OAZgB,IAAII,KAClBA,KAAKC,IACHF,EAAKG,iBACLH,EAAKI,cACLJ,EAAKK,aACL7hD,EAAQmhD,UAAY,GAAKK,EAAKM,cAC9B9hD,EAAQmhD,UAAY,EAAIK,EAAKO,gBAC7B/hD,EAAQmhD,UAAY,EAAIK,EAAKQ,gBAC7BhiD,EAAQmhD,UAAY,EAAIK,EAAKS,sBAKlC,CArBe,GAuBhB,MAAO,CACL7yC,IAAG,IACMmyC,EAETW,QAAO,IACEX,EAAQI,iBAEjBQ,SAAQ,IACCZ,EAAQK,cAEjBQ,QAAO,IACEb,EAAQM,aAEjBQ,QAAO,IACEd,EAAQc,UAEjBC,WAAU,IACDf,EAAQgB,YAEjBC,SAAQ,IACCjB,EAAQO,cAEjBW,WAAU,IACDlB,EAAQQ,gBAEjBW,WAAU,IACDnB,EAAQS,gBAEjBW,gBAAe,IACNpB,EAAQU,qBAEjBW,WAAWC,GACT,GAAI53C,GAAQ43C,GACV,OAAO,EAGT,MAAMC,EAAuBD,EAAY9hD,IAAIgiD,IACvCvB,EAAOJ,GAAWG,GAExB,OAAOuB,EAAqBvrB,MAAMyrB,GACzBA,EAAUxB,IAEpB,EACD1zC,IAAG,CAACm1C,EAAY/8C,IACP4H,GAAIyzC,EAAS0B,EAAM/8C,GAE5Bg9C,SAAQ,CAACD,EAAY/8C,IACZ4H,GAAIyzC,EAAS0B,GAAO,EAAI/8C,GAEjCuH,IAAIw1C,EAAY/8C,GACd,MAAMi9C,EAAW,CACfC,KAAM7B,EAAQI,iBACdd,MAAOU,EAAQK,cACfyB,IAAK9B,EAAQM,aACbyB,KAAM/B,EAAQO,cACdyB,OAAQhC,EAAQQ,gBAChByB,OAAQjC,EAAQS,gBAChByB,YAAalC,EAAQU,qBACrBgB,CAACA,GAAO/8C,GAWV,OARAq7C,EAAQmC,eAAeP,EAASC,MAChC7B,EAAQoC,YAAYR,EAAStC,OAC7BU,EAAQqC,WAAWT,EAASE,KAC5B9B,EAAQsC,YAAYV,EAASG,MAC7B/B,EAAQuC,cAAcX,EAASI,QAC/BhC,EAAQwC,cAAcZ,EAASK,QAC/BjC,EAAQyC,mBAAmBb,EAASM,aAE7B7gD,IACR,EACDooC,GAAE,CAACiZ,EAAoB11C,EAAqB21C,IAC1C,SAAiBxlC,EAAW0V,GAC1B,IAAIpuB,EAEJ,OAAQi+C,GACN,IAAK,KACHj+C,EAAS0Y,GAAK0V,EACd,MACF,IAAK,IACHpuB,EAAS0Y,EAAI0V,EACb,MACF,IAAK,IACHpuB,EAAS0Y,EAAI0V,EACb,MACF,IAAK,KACHpuB,EAAS0Y,GAAK0V,EACd,MACF,QACEpuB,EAAS0Y,IAAM0V,EAInB,OAAOpuB,CACR,CAEMm+C,CACLC,GAAkB7C,EAAS2C,GAC3BE,GAAkB71C,EAAMa,MAAO80C,IAGnC5+C,SAAQ,IACCi8C,EAAQ8C,cAGrB,UAkBgBD,GAAkB5C,EAAY0C,EAAkB,OAC9D,MAAMI,EAAYC,GAAmBj/C,WAU/Bk/C,EATa,CACjBpB,KAAM,EACNvC,MAAO,EACPwC,IAAK,GACLC,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACRC,YAAa,IAEeS,GAE9B,GAAkB,MAAdM,EACF,MAAM,IAAIrhC,MAAM,aAAa+gC,sBAG/B,MAAMO,EAAiBH,EAAU3oC,MAAM6oC,GACjCE,EAAWlD,EAAK6C,cAAc1oC,MAAM,EAAG6oC,GAG7C,OAAO,IAAI/C,KAFY,GAAGiD,IAAWD,KAELpC,SAClC,CAoDA,SAASv0C,GAAI0zC,EAAYyB,EAAY/8C,GACnC,MAAMwpC,EAAY,CAChB0T,KAAM,EACNvC,MAAO,EACPwC,IAAK,EACLC,KAAM,EACNC,OAAQ,EACRC,OAAQ,EACRC,YAAa,EACbR,CAACA,GAAO/8C,GAgBV,OAAOk7C,GAbS,IAAIK,KAClBA,KAAKC,IACHF,EAAKG,iBAAmBjS,EAAU0T,KAClC5B,EAAKI,cAAgBlS,EAAUmR,MAC/BW,EAAKK,aAAenS,EAAU2T,IAC9B7B,EAAKM,cAAgBpS,EAAU4T,KAC/B9B,EAAKO,gBAAkBrS,EAAU6T,OACjC/B,EAAKQ,gBAAkBtS,EAAU8T,OACjChC,EAAKS,qBAAuBvS,EAAU+T,cAKf,CAAEtC,WAAW,GAC1C,CAOM,SAAU4B,GACd4B,GAEA,GAAIl+C,EAAAA,WAAWk+C,GACb,OAAOA,EAGT,MAAO/0C,EAAOuS,GA/DV,SAA6ByiC,GACjC,IAAI1iC,EAEJ,GAAKrb,MAAMV,QAAQy+C,GAGZ,CACL,MAAMC,EAA4B,MAAfD,EAAS,GAAaxD,GAAWwD,EAAS,IAAML,GAC7DO,EAA0B,MAAfF,EAAS,GAAaxD,GAAWwD,EAAS,IAAMG,GAEjE7iC,EAAQ,CAAC2iC,EAAWxC,UAAWyC,EAASzC,UACzC,KAR6B,CAC5B,MAAM2C,EAAY5D,GAAWwD,GAAUvC,UACvCngC,EAAQ,CAAC8iC,EAAWA,EACrB,CAOD,OAAO9iC,CACT,CAiDuB+iC,CAAmBN,GAExC,OAAO,SAAiBtB,GACtB,GAAIzzC,EAAQuS,EACV,MAAM,IAAI+iC,GAA2B,CAACt1C,EAAOuS,IAG/C,OAAOvS,GAASyzC,EAAIhB,WAAagB,EAAIhB,WAAalgC,CACpD,CACF,UAEgBgjC,GAAOj/C,EAAwBk/C,EAAY,GACzD,OAAO3jD,OAAOyE,GAAO66C,SAASqE,EAAW,IAC3C,CAEM,MAAOF,WAAmC/hC,MAC9C5Y,aAAaqF,EAAOuS,IAClBkjC,MAAM,wBAAwBz1C,MAAUuS,KACzC,EAGI,MAAMmjC,GAAQlE,KAMRmD,GAAqBnD,GAAW,EAAG,CAAED,WAAW,IAChD4D,GAAqB3D,GAAW,kBClc7C,SAASmE,GAAY/kD,GACnB,MAAMqiD,YAAEA,EAAW2C,SAAEA,EAAQC,KAAEA,EAAO,UAAajlD,EAC7CklD,EAAiC,UAARD,EAAmB,EAAI,EAEhD/hC,EAAW7D,MACViE,EAAU6hC,GAAe5rC,EAAAA,UAA8C,IAC5E6rC,GAAiBplD,EAAMsjB,aAElB+hC,EAAkBC,GAAuB/rC,EAAQA,UACtD,KACE,MAAM8mC,EAAuB,MAAfrgD,EAAMqgD,MAAgBrgD,EAAMqgD,MAAQyE,GAAMnD,WAGxD,OAAO4D,GAFoB,MAAdvlD,EAAM4iD,KAAe5iD,EAAM4iD,KAAOkC,GAAMpD,UAEpBrB,EAAO6E,EAAuB,IAUnE,SAASj4C,EAAInC,WACX,MAAO06C,GAAgBH,EACjBrE,EAAO,IAAIC,KAAkB,QAAb5rC,EAAAvK,EAAK83C,YAAQ,IAAAvtC,EAAAA,EAAAmwC,EAAa5C,aAAM3oC,EAAAnP,EAAKu1C,qBAASmF,EAAanF,OAEjFiF,EACEC,GAAoBvE,EAAKyE,cAAezE,EAAKW,WAAYuD,GAE5D,CAMD,SAAShlC,EAAOwB,GACd,MAAOtS,EAAOuS,GAAOyjC,GAAiB1jC,GAEtC,SAASgkC,EAAqB92B,GAC5B,OAAgB,MAAZA,EACKgyB,GAAWhyB,GAAU9pB,WAGvB,IACR,CAEDqgD,EAAY,CAAC/1C,EAAOuS,IAEhBuB,IAEF8hC,SAAAA,EAAW,CAACU,EAAqBt2C,GAAQs2C,EAAqB/jC,KAEjE,CAiCD,OAxBA5H,EAASA,WACP,WACE9M,EAAI,CACFozC,MAAOrgD,EAAMqgD,MACbuC,KAAM5iD,EAAM4iD,MAEf,GAED,CAAC5iD,EAAMqgD,MAAOrgD,EAAM4iD,OAGtB7oC,EAASA,WACP,WACE,MAAM6K,EAAcwgC,GAAiBplD,EAAMsjB,UAEvCsB,EAAY,IAAMtB,EAAS,IAAMsB,EAAY,IAAMtB,EAAS,IAC9D6hC,EAAYvgC,EAEf,GAGD,CAAC5kB,EAAMsjB,WAGF,CACL2hC,OACAU,OAAQN,EACR/hC,WACA++B,YAAa93C,EAAAA,QAAQ83C,GAAe,IACpCt1C,MAjCF,WACEmT,EAAO,CAAC,KAAM,MACf,EAgCCjT,MACAiT,SAEJ,CAEA,MAAM0lC,GAAsB,MAQZ,SAAAC,GAAmBjD,EAAcvC,GAC/C,MAAMW,EAAOJ,GAAWK,KAAKC,IAAI0B,EAAMvC,IAEjCyF,EAAoB9E,EAAKc,aACzBiE,EAAmB,GAAK,IAAI9E,KAAKA,KAAKC,IAAI0B,EAAMvC,EAAO,KAAKgB,aAE5D2E,EAAO,GAOb,IAAK,IAAIthD,EAAQohD,EAAmBphD,EAAQ,EAAGA,IAC7CshD,EAAKn4C,KAAK+yC,GAAWI,EAAKa,UAAYn9C,EAAQkhD,KAIhD,IAAK,IAAIlhD,EAAQ,EAAGA,EAAQqhD,EAAkBrhD,IAC5CshD,EAAKn4C,KAAK+yC,GAAWI,EAAKa,UAAYn9C,EAAQkhD,KAMhD,IAAK,IAAIlhD,EAAQ,GAAIohD,EAAoBC,EAAmBrhD,GAAS,GAAK,EAAGA,IAC3EshD,EAAKn4C,KAAK+yC,GAAWI,EAAKa,WAAakE,EAAmBrhD,GAASkhD,KAGrE,MAAO,CACLvF,MAAOW,EAAKW,WACZiB,KAAM5B,EAAKU,UACXsE,OAEJ,CASM,SAAUT,GACd3C,EACAvC,EACA4F,EAAS,GAET,GAAI5F,EAAQ,GAAKA,EAAQ,GACvB,MAAM,IAAI19B,MACR,kFAMJ,MAAMgjC,EAAS,IAAIt/C,MAEnB,IAAK,IAAI1E,EAAI,EAAGA,EAAIskD,EAAQtkD,IAC1BgkD,EAAO93C,KAAKg4C,GAAmBjD,EAAMvC,EAAQ1+C,IAG/C,OAAOgkD,CACT,CAEM,SAAUP,GACd9hC,GAEA,MAAOlU,EAAOuS,GAAOpX,EAAOA,QAAC+Y,GAE7B,MAAO,CACI,MAATlU,EAAgBwxC,GAAWxxC,GAAOyyC,UAAY,KACvC,MAAPlgC,EAAci/B,GAAWj/B,QAAAA,EAAOvS,GAAOyyC,UAAY,KAEvD,CC3LO,MCUDqE,GAAgB,CAAClF,EAAoB9gD,KACzC,MAAMwF,EAAQygD,GAAmBjmD,GAAOy5C,OAAOqH,EAAKpyC,OAEpD,OAAQw3C,GAAsBlmD,IAAUwkB,EAAQA,UAAEhf,EAAM,EAOlC,SAAA2gD,GAAiB1M,GACvC,MAAM2M,EAiDF,SAAoB3M,GACxB,SAAS4M,EAAQC,GACf,OACUrhD,MAARqhD,GACA,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAKh3C,SAASg3C,GAE1D,QAGF,QACR,CAED,MAAMF,EAAmB,GAEzB,IACI/N,EADA52C,EAAI,EAEJ8kD,GAAa,EAEjB,KAAO9kD,EAAIg4C,EAAO93C,QAAQ,CACxB,MAAMghB,EAAKnW,KAAKC,IAAI,EAAG25C,EAAOzkD,OAAS,GAEjC2kD,EAAO7M,EAAO59B,OAAOpa,GAC3BA,IAEI,CAAC,IAAK,KAAK6N,SAASg3C,GACtBC,EAAsB,MAATD,EACJC,EACTH,EAAOzjC,GAAM,GAAGyjC,EAAOzjC,IAAO,KAAK2jC,IAC1BjO,IAASiO,GAAQ,CAACD,EAAQhO,GAAOgO,EAAQC,IAAOh3C,SAAS,SAElE82C,EAAOz4C,KAAK24C,GAEZF,EAAOzjC,GAAM,GAAGyjC,EAAOzjC,IAAO,KAAK2jC,IAGrCjO,EAAOiO,CACR,CAED,OAAOF,CACT,CAxFiBI,CAAU/M,GAEzB,MAAO,CACLA,OAAOqH,GACEsF,EACJ/lD,KAAI,CAACL,EAAOwE,KACX,MACMiiD,EAAgBL,EADA5hD,EAAQ,GAG9B,OAAIxE,KAASimD,GACJD,GAAclF,EAAM9gD,GAGzBA,KAAS0mD,IAAuBA,GAAoB1mD,GAAO2mD,MAAMF,GAC5DC,GAAoB1mD,GAAOy5C,OAAOuM,GAAclF,EAAM2F,IAGxDzmD,CAAK,IAEbwb,KAAK,IAGd,CA4EA,MAAMyqC,GAA0D,CAC9DW,GAAI,IAAIC,KAAKC,eAAe,QAAS,CACnC3G,MAAO,YAET4G,IAAK,IAAIF,KAAKC,eAAe,QAAS,CACpC3G,MAAO,UAET6G,KAAM,IAAIH,KAAKC,eAAe,QAAS,CACrC3G,MAAO,SAET8G,EAAG,IAAIJ,KAAKC,eAAe,QAAS,CAClCnE,IAAK,YAEPuE,GAAI,IAAIL,KAAKC,eAAe,QAAS,CACnCnE,IAAK,YAEPwE,IAAK,IAAIN,KAAKC,eAAe,QAAS,CACpCM,QAAS,UAEXC,KAAM,IAAIR,KAAKC,eAAe,QAAS,CACrCM,QAAS,SAEXE,KAAM,IAAIT,KAAKC,eAAe,QAAS,CACrCpE,KAAM,YAER6E,GAAI,IAAIV,KAAKC,eAAe,QAAS,CACnClE,KAAM,UACN4E,QAAQ,IAEVC,GAAI,IAAIZ,KAAKC,eAAe,QAAS,CACnClE,KAAM,UACN4E,QAAQ,IAEVE,GAAI,IAAIb,KAAKC,eAAe,QAAS,CACnCjE,OAAQ,UACR2E,QAAQ,IAEVG,GAAI,IAAId,KAAKC,eAAe,QAAS,CACnChE,OAAQ,UACR0E,QAAQ,IAEVxpC,EAAG,IAAI6oC,KAAKC,eAAe,QAAS,CAClClE,KAAM,UACN4E,QAAQ,IAEVI,EAAG,IAAIf,KAAKC,eAAe,QAAS,CAClClE,KAAM,UACN4E,QAAQ,KASNtB,GAAmE,CACvEuB,GAAKjiD,GAAmBA,EAAQi/C,GAAOj/C,EAAMuW,MAAM,MAAM,GAAI,GAAKvW,EAClE+hD,GAAK/hD,GAAmBA,EAAQi/C,GAAOj/C,EAAO,GAAKA,EACnDkiD,GAAKliD,GAAmBA,EAAQi/C,GAAOj/C,EAAO,GAAKA,EACnDmiD,GAAKniD,GAAmBA,EAAQi/C,GAAOj/C,EAAO,GAAKA,EACnDwY,EAAIxY,GAAmBA,GAASA,EAAMuW,MAAM,MAAM,IAAM,IAAI/a,cAAgBwE,EAC5EoiD,EAAIpiD,GAAmBA,GAASA,EAAMuW,MAAM,MAAM,IAAM,IAAID,cAAgBtW,GAQxEkhD,GAAyD,CAC7DnnC,EAAG,CACDonC,MAAQ3mD,GAAU,IAAIuI,IAAI,CAAC,IAAK,OAAOyD,IAAIhM,GAC3Cy5C,OAASj0C,IAAkBqiD,ODhMEC,ECgMe5mC,SAAS1b,EAAO,KD/LjD,IAAO,GAAgB,KAAXsiD,EAChB,KAGLA,EAAS,IAAO,GAAgB,KAAXA,EAChB,KAGLA,EAAS,IAAO,GAAgB,KAAXA,EAChB,KAGF,KAbuB,IAACA,CCgMmC,ICrL9DC,GAAepoD,EAAAA,QAAOoX,GAS1B;IACEhG,GACAI,EAAAA,YAAY,CACVV,KAAMkB,EAASA,UAAC,CAAEq2C,QAAS,CAAC,UAAW,WACvC,YAAar2C,EAAAA,UAAU,CACrBq2C,QAAS,CAAC,cAAe,kBAAmB,YAAa;;;;;;;;WAWtD72C,cAAY,CACnB,wBAAyBQ,EAAAA,UAAU,CACjCq2C,QAAS,CAAC,kBAAmB,YAAa,mBAE5C,uBAAwBr2C,EAASA,UAAC,CAAEq2C,QAAS,CAAC,UAAW,WACzD,qBAAsBr2C,EAASA,UAAC,CAAEq2C,QAAS,mBAC3C,eAAgBr2C,EAASA,UAAC,CAAEq2C,QAAS;;gBAGzB72C,cAAY,CACxB,oBAAqBQ,EAASA,UAAC,CAAEq2C,QAAS,CAAC,UAAW,QAAS,oBAC/D,uBAAwBr2C,EAASA,UAAC,CAAEq2C,QAAS,CAAC,kBAAmB,mBACjE,gBAAiBr2C,EAASA,UAAC,CAAEq2C,QAAS,cACtC,yBAA0Br2C,EAASA,UAAC,CAAEq2C,QAAS;;kBAGjC72C,cAAY,CAC1B,oBAAqBQ,EAASA,UAAC,CAAEq2C,QAAS,CAAC,UAAW,QAAS,oBAC/D,uBAAwBr2C,EAASA,UAAC,CAAEq2C,QAAS,CAAC,kBAAmB,mBACjE,gBAAiBr2C,EAASA,UAAC,CAAEq2C,QAAS,cACtC,sBAAuBr2C,EAASA,UAAC,CAAEq2C,QAAS;;IAG5C72C,cAAY,CACZ,gBAAiBQ,EAASA,UAAC,CAAEq2C,QAAS,UACtC,cAAer2C,EAASA,UAAC,CAAEq2C,QAAU5tC,GAAsB,UAAXA;;aAGvCpa,EAAAA,SAAM,eAAeA,EAAKoQ,SAAC;;IAEpC8F,EAAS;oBACOlW,EAAAA,SAAM;wBACFmR,cAAY,CAC9B,oBAAqBQ,EAASA,UAAC,CAAEq2C,QAAS,CAAC,UAAW,QAAS,oBAC/D,qBAAsBr2C,EAAAA,UAAU,CAC9Bq2C,QAAS,CAAC,kBAAmB,YAAa,mBAE5C,yBAA0Br2C,EAASA,UAAC,CAAEq2C,QAAS;aAExC72C,cAAY,CACnB,qBAAsBQ,EAASA,UAAC,CAAEq2C,QAAS,CAAC,UAAW,WACvD,yBAA0Br2C,EAAAA,UAAU,CAClCq2C,QAAS,CAAC,kBAAmB,YAAa;;mBAI/BhoD,EAAAA,SAAM;;;IAGrBmW,EAAS;kBACKnW,EAAAA,SAAM;mBACLA,EAAAA,SAAM;;;IAGrBoW,EAAW;oBACKpW,EAAAA,SAAM;wBACFmR,cAAY,CAC9B,oBAAqBQ,EAASA,UAAC,CAAE,gBAAgB,IACjD,gBAAiBA,EAASA,UAAC,CAAE,gBAAgB;aAEtCR,cAAY,CACnB,gBAAiBQ,EAASA,UAAC,CAAE,gBAAgB,IAC7C,sBAAuBA,EAASA,UAAC,CAAE,gBAAgB;;;IAIrDkE,EAAW;wBACS7V,EAAAA,SAAM;oBACVmR,cAAY,CAC1B,wBAAyBQ,EAASA,UAAC,CAAE,gBAAgB,IACrD,oBAAqBA,EAASA,UAAC,CAAE,gBAAgB;;aAG1C3R,EAAAA,SAAM;;;gBAGHmR,cAAY,CACxB+wB,QAASvwB,EAASA,UAAC,CAAE,eAAe,IACpCyV,OAAQzV,EAASA,UAAC,CAAE,eAAe;EAIvC,IAAAs2C,GAAetoD,UAAOooD,GAAPpoD,CAAqB,ICzG7B,MAAMuoD,GAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAChDC,GAAYhC,GAAiB,cA+B1C,MAAMz6B,GAAO/rB,EAAAA,QAAOyoD,GAAY;;;;;;EAQ1B1zC,GAAO/U,EAAAA,QAAOmS,GAAG;;cAET9R,EAAAA,SAAM;;;EASpB,SAASqoD,IAAkB5lD,SAAEA,EAAQ6lD,WAAEA,IAerC,SAASC,EAAkBpI,GACzB,MAAMgC,EAAc1/C,EAAS0/C,aAAe,GAE5C,OAAOhC,EAAM2F,KAAKzlD,KAAKsiD,IACrB,MAAMvoC,EAnEZ,SAAmB3X,EAA6Bq+C,GAC9C,MAAM0H,EACJ1H,EAAKU,UAAY/+C,EAASgjD,OAAO,GAAG/C,MAAQ5B,EAAKW,WAAah/C,EAASgjD,OAAO,GAAGtF,MAEnF,OAAI19C,EAAS2gB,SAAS,IAAM09B,EAAKa,UACxB,kBACEl/C,EAAS2gB,SAAS,IAAM09B,EAAKa,UAC/B,gBAEiB,MAAxBl/C,EAAS2gB,SAAS,IAClB09B,EAAKa,UAAYl/C,EAAS2gB,SAAS,IACX,MAAxB3gB,EAAS2gB,SAAS,IAClB09B,EAAKa,UAAYl/C,EAAS2gB,SAAS,GAE5B,YAEW,WAAlB3gB,EAASsiD,OACRyD,GAAiB1H,EAAKW,WAAah/C,EAASgjD,OAAO,GAAGtF,OAEhD,QACoB,WAAlB19C,EAASsiD,MAAqBjE,EAAKW,WAAah/C,EAASgjD,OAAO,GAAGtF,MACrE,iBACEW,EAAKa,WAAaiD,GAAMjD,UAC1B,cAGF,SACT,CAwCqB8G,CAAUhmD,EAAUkgD,GAC7B+F,EAAYP,GAAU1O,OAAOkJ,GAC7B/d,EAAa+d,EAAIT,WAAWC,GAElC,MAAsB,UAAlB1/C,EAASsiD,MAAoBpC,EAAIlB,aAAetB,EAAMA,MACjDjgD,EAAM,QAAAC,cAAA,OAAA,CAAA0B,IAAK6mD,qBAIlBxoD,UAACC,cAAA4nD,GACC,CAAAlmD,IAAK6mD,EACL7iD,KAAK,SACLuP,KAAK,WAAU,eACD,CAAC,kBAAmB,YAAa,iBAAiB9F,SAAS8K,GAAO,aACpEsuC,EACZrxC,SAAUutB,EACVjmB,QAAS,MACFimB,GAAc0jB,GACjBA,EAAW3F,EAAIhB,UAChB,UAEMvnC,GAETla,EAAAA,QAAAC,cAAA,OAAA,CAAMwoD,SAAUhG,EAAI/9C,YAAa+9C,EAAIjB,WAExC,GAEJ,CAED,OACExhD,EAAA,QAAAC,cAACgS,GAAK,KACH1P,EAASgjD,OAAOplD,KAAK8/C,GAElBjgD,EAAAA,sBAACwU,GAAI,CAAC7S,IAAK,GAAGs+C,EAAMuC,OAAOvC,EAAMA,QAAS/qC,KAAK,sBAAoB,uBAlDlE8yC,GAAS7nD,KAAK+mD,GACnBlnD,EAAA,QAAAC,cAACurB,GACC,CAAA7pB,IAAKulD,EACLjU,GAAG,OACHniC,QAAQ,WACRrQ,MAAM,gBACN8gC,MAAO,CAAEmnB,eAAgB,SAExBxB,KA4CImB,EAAkBpI,MAM/B,CClHA,MAAM56B,GAAY5lB,EAAAA,QAAOmS,GAAG;;;cAGd9R,EAAAA,SAAM;;EAIpB,SAASyoD,GAAUhmD,EAA6B09C,GAC9C,OAAI19C,EAASgjD,OAAO,GAAGtF,OAASA,EAAM37C,MAC7B,kBAGF,SACT,CAEA,SAASqkD,IAAoBpmD,SAAEA,EAAQsiD,KAAEA,IACvC,OACE7kD,EAAA,QAAAC,cAAColB,GAAS,CAACnQ,KAAK,aAAY,cAAa,yBACtC8qC,GAAYI,SAASjgD,KAAK8/C,GACzBjgD,EAAAA,QAAAC,cAAC4nD,GAAY,CACXlmD,IAAKs+C,EAAM37C,MACXqB,KAAK,SACLuP,KAAK,QACS,eAAA+qC,EAAM37C,OAAS/B,EAASgjD,OAAO,GAAGtF,MAAK,aACzC,gBAAgBA,EAAM7/C,OAClCqe,QAAS,KACPlc,EAASsK,IAAI,CAAEozC,MAAOA,EAAM37C,QAC5BugD,EAAK1hC,SAAS,CAAExd,KAAM,WAAY4d,QAAS,cAAe,UAEnDglC,GAAUhmD,EAAU09C,IAE7BjgD,EAAAA,QAAAC,cAAA,OAAA,CAAMwoD,SAAU,GAAGlmD,EAASgjD,OAAO,GAAG/C,QAAQvC,EAAM37C,MAAQ,KACzD07C,GAAYC,EAAM7/C,MAA4Bm5C,OAAO,aAMlE,CCvCA,MAAMl0B,GAAY5lB,EAAAA,QAAOmS,GAAG;;;cAGd9R,EAAAA,SAAM;;EAId+nD,GAAepoD,EAAAA,QAAOsoD,GAAoB;;EAIhD,SAASQ,GAAUhmD,EAA6BigD,GAC9C,OAAIjgD,EAASgjD,OAAO,GAAG/C,MAAQA,EACtB,kBAGF,SACT,CAEA,SAASoG,IAAmBrmD,SAAEA,EAAQsiD,KAAEA,IACtC,OACE7kD,EAAAA,QAACC,cAAAolB,GAAU,CAAAnQ,KAAK,aAAyB,cAAA,wBACtCoM,GAAM,KAAM,MAAMnhB,KAAKqiD,GACtBxiD,EAAC,QAAAC,cAAA4nD,GACC,CAAAlmD,IAAK6gD,EACL78C,KAAK,SACLuP,KAAK,QAAO,eACEstC,GAAQjgD,EAASgjD,OAAO,GAAG/C,KAC7B,aAAA,eAAeA,IAC3B/jC,QAAS,KACPlc,EAASsK,IAAI,CAAE21C,SACfqC,EAAK1hC,SAAS,CAAExd,KAAM,WAAY4d,QAAS,gBAAiB,EAErDukC,QAAAS,GAAUhmD,EAAUigD,IAE5BA,KAKX,CC9BA,MAAMn9B,GAAY5lB,EAAAA,QAAO+S,GAAM;IAC3B3B,GAAW;wCACyB/Q,EAAAA,SAAM;EAGxC+oD,GAAmBppD,EAAAA,QAAOoX,GAAW;IACvChG,GAAW;;;;WAIJ/Q,EAAAA,SAAM;;;;gBAIDmR,cAAY,CACxB+wB,QAASvwB,EAASA,UAAC,CAAE,eAAe,IACpCyV,OAAQzV,EAASA,UAAC,CAAE,eAAe;;IAGnCuE,EAAS;aACAlW,EAAAA,SAAM;;;IAGfmW,EAAS;kBACKnW,EAAAA,SAAM;;EASlB,SAAUgpD,GAAgBlpD,GAC9B,MAAM2C,SAAEA,EAAQ6lD,WAAEA,EAAUW,aAAEA,EAAYC,YAAEA,GAA2BppD,EAAXwX,EAAMzW,EAAAA,OAAKf,EAAjE,CAAA,WAAA,aAAA,eAAA,gBACAilD,ECzCR,SAAuBjlD,GAgBrB,MAAOilD,EAAM1hC,GAAYC,EAAAA,YAfzB,SAAiBC,EAAmBC,GAClC,OAAQA,EAAO3d,MACb,IAAK,WACH,OAAO2d,EAAOC,QAChB,IAAK,cACH,OAAIF,GAASC,EAAOC,QACXD,EAAOC,QAGT,aACT,QACE,OAAOF,EAEZ,IAE4CzjB,aAAA,EAAAA,EAAOilD,OAAQ,cAE5D,MAAO,CACLr2C,IAAG,IACMq2C,EAETza,GAAGz8B,GACe,MAATA,GAAiBA,IAAUk3C,EAEpC1hC,WACAm5B,OAAQ,CACN,aAAc2M,GACd,eAAgBC,GAChB,cAAeC,IACftE,GAEN,CDSeuE,IAEP9M,OAAEA,GAAWuI,EAEnB,OACE7kD,wBAACqlB,GAASrkB,OAAAC,OAAA,CAACiR,MAAM,MAASkF,GACxBpX,UAAAC,cAACgS,GAAK,KACJjS,EAAAA,QAAAC,cAAC4oD,GACC,CAAAljD,KAAK,SAAQ,aACF,6BACE,eAACk/C,EAAKza,GAAG,cACtB3rB,QAAS,KACPlc,EAASsK,IAAI,CAAEozC,MAAO19C,EAASgjD,OAAO,GAAGtF,MAAQ,GAAI,GAGvDjgD,UAACC,cAAAiC,GAAK,CAAA9B,KAAK,aAAaC,KAAM,MAG/BkC,EAASgjD,OAAOplD,KAAK8/C,GAElBjgD,EAAAA,QAAAC,cAACgS,GAAK,CAACtQ,IAAKs+C,EAAMA,MAAO/tC,MAAM,KAAKE,MAAM,SAASD,QAAQ,SAASovB,MAAO,CAAE5W,KAAM,IACjF3qB,EAAA,QAAAC,cAACogD,GACY,CAAA,aAAA,uBACX5hC,QAAS,KACPomC,EAAK1hC,SAAS,CAAExd,KAAM,cAAe4d,QAAS,gBAAiB,EAEjEoF,SAAUk8B,EAAKza,GAAG,gBAClBjzB,SAA2B,SAAjB5U,EAASsiD,MAElB7E,GAAYC,EAAMA,OAA6B1G,OAAO,SAGzDv5C,EAAA,QAAAC,cAACogD,GACY,CAAA,aAAA,sBACX5hC,QAAS,KACPomC,EAAK1hC,SAAS,CAAExd,KAAM,cAAe4d,QAAS,eAAgB,EAEhEoF,SAAUk8B,EAAKza,GAAG,eAClBjzB,SAA2B,SAAjB5U,EAASsiD,MAElB5E,EAAMuC,SAKfxiD,EAAAA,QAAAC,cAAC4oD,GACC,CAAAljD,KAAK,SAAQ,aACF,yBACE,eAACk/C,EAAKza,GAAG,cACtB3rB,QAAS,KACPlc,EAASsK,IAAI,CAAEozC,MAAO19C,EAASgjD,OAAO,GAAGtF,MAAQ,GAAI,GAGvDjgD,UAACC,cAAAiC,GAAK,CAAA9B,KAAK,cAAcC,KAAM,OAInCL,EAAC,QAAAC,cAAAq8C,EACC,CAAA/5C,SAAUA,EACVsiD,KAAMA,EACNuD,WAAYA,EACZW,aAAcA,EACdC,YAAaA,IAIrB,CEnHM,SAAUK,GACdtpC,GAEA,MAAO/Q,EAAOuS,GAAOtb,MAAMV,QAAQwa,GAAaA,EAAY,CAACA,EAAWA,GAExE,MAAO,CACI,MAAT/Q,EAAgBwxC,GAAWxxC,GAAOyyC,UAAY,KACvC,MAAPlgC,EAAci/B,GAAWj/B,GAAKkgC,UAAY,KAE9C,CAXyBwE,GAAiB,cCOnC,MAAMgC,GAAYhC,GAAiB,cAEpC,SAAUqD,GAAW1I,GACzB,OAAKA,GAAQjpB,OAAO4xB,MAAM,IAAI1I,KAAKD,GAAMa,WAChC,GAGFwG,GAAU1O,OAAOiH,GAAWI,GACrC,CAEM,SAAU4I,GACdzpC,GAEA,MAAO0pC,GAAkBJ,GAAatpC,GAEtC,IAAK0pC,EACH,MAAO,CACLxJ,MAAOyE,GAAMnD,WACbiB,KAAMkC,GAAMpD,WAIhB,MAAMoI,EAAYlJ,GAAWiJ,GAE7B,MAAO,CACLxJ,MAAOyJ,EAAUnI,WACjBiB,KAAMkH,EAAUpI,UAEpB,CAEgB,SAAAqI,GAAchxC,EAAgCrT,GAC/C,MAATqT,IACFA,EAAMrT,MAAQA,EAElB,CAEM,SAAUskD,GAAcjxC,GAC5B,OAAa,MAATA,EACKA,EAAMrT,MAGR,IACT,CC9BA,MAAMukD,GAAa,8DAEM5D,GAAiB,cAE1C,MAAM1rC,GAAY9a,EAAAA,QAAOqqD,GAAiB;;;;EAMpCnhB,GAAelpC,EAAM,QAACitC,GAASG,KAAK;;;;aAI7B/sC,EAAAA,SAAM;;EAINiqD,GAActqD,EAAAA,QAAOgY,GAAY;;;;2BAInB3X,EAAAA,SAAM;EAOpBkqD,GAAYlzC,EAAAA,YAA6C,SACpElX,EACAmX,GAEA,MAAM8L,SAAEA,GAAsBjjB,EAATc,EAAIC,EAAAA,OAAKf,EAAxB,CAAqB,aACrB2xC,EAAWpsB,aAAW8iB,IAe5B,OACEjoC,EAAC,QAAAC,cAAAsa,GACCvZ,OAAAC,OAAA,CAAAuzC,YAAY,cACR9zC,EAAI,CACRqW,IAAKA,EACLpR,KAAK,OACLwR,SAAUo6B,EAASp6B,SACnBF,QAASjX,EAAA,QAAAC,cAACiC,GAAK,CAAA9B,KAAK,aACpByiB,SArBJ,SAA2BkF,GACzB,MACEzmB,QAAQgE,MAAEA,IACRyiB,EAEC8hC,GAAWzgD,KAAK9D,IAIrBud,EAAS29B,GAAWl7C,GACrB,IAcH,ICxEA,MAAM2kD,GAAiB,EACjBC,GAAe,ECGIjE,GAAiB,cAE1C,MAAMtd,GAAelpC,EAAM,QAACitC,GAASG,KAAK;;;;aAI7B/sC,EAAAA,SAAM;;EAIbqqD,GAAiB1qD,EAAAA,QAAOmS,GAAG;mBACd9R,EAAAA,SAAM;kBACPA,EAAAA,SAAM;ECpBxB,MCWasqD,GAAsB3qD,EAAAA,QAAO+S,GAAiC;;;;kBAIzDvB,cAAY,CACxB,UAAWQ,EAASA,UAAC,CAAE44C,cAAc,IACrC,UAAW54C,EAASA,UAAC,CAAE44C,cAAc;;EAK9BC,GAAkB7qD,EAAM,SAAEG,GAAsBI,EAAAA,QAACC,cAAAuS,kBAAMygC,GAAG,SAAYrzC,KAElF;IACGD,EAAW,CAAEN,SAAU;;;;sBAIL6Q,EAAAA,SAAS;mBACZA,EAAAA,SAAS;;kBAEVe,cAAY,CAC1B,sBAAuBQ,EAASA,UAAC,CAAE84C,OAAO,IAC1C,eAAgB94C,EAASA,UAAC,CAAE0F,UAAU,EAAOozC,OAAO;;aAG3Cr6C,EAAAA,SAAS,cAAcA,EAAQA,SAAC;;;;IAIzC8F,EAAS;oBACO/E,cAAY,CAC1B,eAAgBQ,EAASA,UAAC,CAAE0F,UAAU,EAAOozC,OAAO;;;IAItDt0C,EAAS;oBACOhF,cAAY,CAC1B,eAAgBQ,EAASA,UAAC,CAAE0F,UAAU,EAAOozC,OAAO;kBAExCr6C,EAAAA,SAAS;;;IAGvByF;EAGSyT,GAAc3pB,EAAAA,QAAOkZ,KAAK;IACnCuO;EAGSsjC,GAAa/qD,EAAAA,QAAOyC,GAAK;WAC3BgO,EAAAA,SAAS;EAGPu6C,GAAahrD,EAAM,SAAEG,GAAsBI,EAAAA,QAACC,cAAAuS,kBAAMygC,GAAG,MAASrzC,KAAU;;EAIxEs0C,GAAUz0C,EAAAA,QAAOmS,GAAG;;;;sBAIX1B,EAAAA,SAAS;EC9ElBw6C,GAA0B,CAAC,IAAK,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OCYxFC,GAAW,EAAGC,UAClBA,EAAKvqD,KACHL,EAAAA,QAAAC,cAACgS,GAAK,CAACC,MAAM,IAAIE,MAAM,UACrBpS,EAAC,QAAAC,cAAAurB,IAAK1a,QAAQ,WAAW85C,EAAKxqD,MAC9BJ,UAAAC,cAACurB,GAAI,CAAC1a,QAAQ,aDdA,EAAC+5C,EAAeC,EAAW,KAC7C,MAAMC,EAAapzB,OAAOkzB,GAE1B,IAAKE,GAAcA,EAAa,EAC9B,MAAO,KAGT,MAAMC,EAAK1+C,KAAKC,IAAI,EAAGu+C,GACjBzI,EAAO/1C,KAAK2+C,MAAM3+C,KAAK4+C,IAAIH,GAAcz+C,KAAK4+C,IAXpB,OAY1BC,EAAWT,GAAwBp+C,KAAKkjB,IAAI6yB,EAAMqI,GAAwBjpD,OAAS,IAEzF,MAAO,GAAGw1B,YAAY8zB,EAAaz+C,KAAKgW,IAdR,KAcgC+/B,IAAO+I,QAAQJ,MAAOG,GAAU,ECGjEE,CAAYT,EAAKvqD,QAG9CL,UAACC,cAAAurB,IAAK1a,QAAQ,WAAW85C,EAAKxqD,MAO5BkrD,GAAmB,EACvB3lD,OACAogC,WACAwlB,UACAp0C,eAEA,MAAMqT,SAAEA,EAAQnS,MAAEA,EAAKoG,QAAEA,GACd,WAAT9Y,EACI,CACE6kB,SAAU,QACVnS,MAAO,SACPoG,QAASsnB,GAEX,CACEvb,SAAU,UACVnS,MAAO,QACPoG,QAAS8sC,GAGjB,OACEvrD,UAACC,cAAAoX,GACC,CAAAL,MAAM,QACNlG,QAAQ,WACRmG,QAASjX,EAAAA,QAAAC,cAACiC,GAAK,CAAA9B,KAAMoqB,EAAUnqB,KAAM,KACrCoe,QAASA,EACTtH,SAAUA,GAETkB,EAEJ,EAgDGmzC,GAAiF,CACrF72C,QA9CmBM,IAAA,IAAA21C,KAAEA,GAAqC31C,EAA5Bw2C,EAAW9qD,EAAAA,OAAAsU,EAAtB,UAAyD,OAC5EjV,EAAAA,QAACC,cAAAuS,GAAM,CAAAygC,GAAG,KAAK/gC,MAAM,KACnBlS,EAAC,QAAAC,cAAAgS,IAAMG,MAAM,SAASD,QAAQ,iBAC5BnS,EAAAA,QAAAC,cAAC0qD,GAAQ,CAACC,KAAMA,IAChB5qD,UAACC,cAAAqrD,kBAAiB3lD,KAAK,UAAa8lD,KAEtCzrD,EAAAA,QAAAC,cAAC2U,GAAG,MAEP,EAuCC21C,MArCiBt1C,QAAA21C,KAAEA,EAAIc,aAAEA,GAAYz2C,EAAKw2C,EAAW9qD,EAAAA,OAAAsU,EAApC,yBAAuE,OACxFjV,EAAAA,QAACC,cAAAuS,GAAM,CAAAygC,GAAG,KAAK/gC,MAAM,KACnBlS,EAAC,QAAAC,cAAAgS,IAAMG,MAAM,SAASD,QAAQ,iBAC5BnS,EAAC,QAAAC,cAAAgS,IAAMC,MAAM,IAAIE,MAAM,UACrBpS,EAAC,QAAAC,cAAAiC,IAAK9B,KAAK,UAAUC,KAAM,KAC3BL,EAAA,QAAAC,cAAC0qD,GAAS,CAAAC,KAAMA,KAEjBa,EAAYF,QACXvrD,EAAA,QAAAC,cAACgS,GAAK,CAACC,MAAM,OAAOE,MAAM,UACxBpS,UAAAC,cAACqrD,GAAiBtqD,OAAAC,OAAA,CAAA0E,KAAK,SAAY8lD,IACnCzrD,UAAAC,cAACi0C,GAAU,MACXl0C,UAACC,cAAAqrD,GAAiBtqD,OAAAC,OAAA,CAAA0E,KAAK,UAAa8lD,KAGtCzrD,EAAAA,QAAAC,cAACqrD,GAAgBtqD,OAAAC,OAAA,CAAC0E,KAAK,UAAa8lD,KAGvCC,GACC1rD,EAAA,QAAAC,cAACurB,GAAK,CAAA1a,QAAQ,UAAUrQ,MAAM,gBAC3BirD,GAIR,EAeCC,QAbmB12C,IAAA,IAAA21C,KAAEA,GAAqC31C,EAA5Bw2C,EAAW9qD,EAAAA,OAAAsU,EAAtB,UAAyD,OAC5EjV,EAAA,QAAAC,cAACgS,GAAK,CAACghC,GAAG,KAAK7gC,MAAM,SAASD,QAAQ,iBACpCnS,EAAC,QAAAC,cAAAgS,IAAMC,MAAM,IAAIE,MAAM,UACrBpS,EAAC,QAAAC,cAAAiC,IAAK9B,KAAK,QAAQC,KAAM,KACzBL,EAAA,QAAAC,cAAC0qD,GAAS,CAAAC,KAAMA,KAElB5qD,EAAAA,QAACC,cAAAqrD,GAAiBtqD,OAAAC,OAAA,CAAA0E,KAAK,UAAa8lD,IAEvC,GAQKG,GAAYhsD,IAChB,MAAMisD,EAAoBL,GAAoB5rD,EAAMsa,QAEpD,OAAOla,EAAC,QAAAC,cAAA4rD,EAAsB7qD,OAAAC,OAAA,CAAA,EAAArB,GAAS,EC7GnCksD,GAAe,IAAY,KAEjCA,GAAatsD,QCKIyV,IAAA,IAAA5C,SAAEA,GAAkC4C,EAArBrV,EAAKe,EAAAA,OAAAsU,EAApB,cACf,MAAM82C,SAAEA,GAAaC,EAAAA,yBAErB,OACEhsD,EAAAA,sBAACoqD,GAAmBppD,OAAAC,OAAA,CAACiR,MAAM,IAAIm4C,cAAehgD,GAAQ0hD,IAAensD,GAClEyS,EAEJ,EDXHy5C,GAAaG,SEOKh3C,QAAAzU,UAChBA,EAAS0rD,KACTA,EAAIzsC,SACJA,GAAW,EAAK0sC,OAChBA,EAAMh1C,SACNA,GAAW,EAAKozC,MAChBA,GAAQ,EAAK6B,oBACbA,KACGxsD,EARae,EAAAA,OAAAsU,EAAA,CAAA,YAAA,OAAA,WAAA,SAAA,WAAA,QAAA,wBAUhB,MAAMo3C,aAAEA,GAAiBL,EAAAA,yBAEnBM,EAAWjzC,SAAyB,OACnCkzC,EAAYC,GAAiBrzC,EAAQA,UAAC,GAEvCszC,EAAgBhzC,eACnBsO,IACCA,EAAMumB,iBACNvmB,EAAMqD,kBAENihC,EAAapmD,MAAMwX,KAAKsK,EAAM2kC,cAAcC,OAAS,IAAI,GAE3D,CAACN,IAGGO,EAAanzC,eAChBsO,KACM5Q,GAAYm1C,EAAS/yC,SAAW4wB,GAAYpiB,GAAOqiB,GAAG,UACzDkiB,EAAS/yC,QAAQszC,OAClB,GAEH,CAAC11C,EAAUm1C,IAGPQ,EAASrzC,eACZsO,IACCA,EAAMumB,iBACNvmB,EAAMqD,kBAEDjU,IACCo1C,GACFC,GAAc,GAGhBH,EAAapmD,MAAMwX,KAAKsK,EAAMglC,aAAaJ,OAAS,KACrD,GAEH,CAACx1C,EAAUo1C,EAAYF,IAGnBW,EAAcvzC,eAAasO,IAC/BA,EAAMumB,gBAAgB,GACrB,IAEG2e,EAAaxzC,eAChBsO,IACCA,EAAMumB,iBAEDn3B,GAAao1C,GAChBC,GAAc,EACf,GAEH,CAACr1C,EAAUo1C,IAGPW,EAAczzC,eACjBsO,IACCA,EAAMumB,iBAEFie,GACFC,GAAc,EACf,GAEH,CAACD,IAGGY,EAAuB1zC,EAAAA,aAC3B,IACEzZ,EAAAA,QAAAC,cAAAD,EAAAA,QAAA4W,SAAA,KACE5W,EAAC,QAAAC,cAAAuqD,IAAWpqD,KAAK,SAASC,KAAM,KAChCL,EAAC,QAAAC,cAAAurB,IAAK1a,QAAQ,OAAOrQ,MAAM,wBACxB,sBAAsBssC,GAAUpV,QAAQlY,GAAW,QAAS,mBAC7Dzf,UAAAC,cAACurB,GAAK,CAAAynB,GAAG,IAAIxyC,MAAO0W,EAAW,gBAAkB,eAAgBrG,QAAQ,aACtE,UAAUi8B,GAAUpV,QAAQlY,GAAW,QAAS,YAGpDysC,GACClsD,EAAA,QAAAC,cAACurB,GAAI,CAAC1a,QAAQ,UAAUrQ,MAAM,sBAC3ByrD,KAKT,CAACzsC,EAAUtI,EAAU+0C,IAGvB,OACElsD,wBAACsqD,GAAe,CACdp4C,MAAM,IACNE,MAAM,SACND,QAAQ,SACR3R,UAAWwX,GAAKxX,EAAW,CACzB,cAAe2W,EACf,aAAco1C,IAEhBp1C,SAAUA,EACVozC,MAAOA,EACPjoB,SAAU,EACVptB,KAAK,SACQ,eAAA,QACb03C,WAAYA,EACZE,OAAQA,EACRE,YAAaA,EACbC,WAAYA,EACZC,YAAaA,IAEXd,GAAuBe,GAAsB,CAAEZ,eACjDvsD,EAAAA,QAACC,cAAAmpB,kBACCgkC,QAASX,EACT9mD,KAAK,OACLoR,IAAKu1C,EACLH,OAAQA,EAAShiD,EAAOA,QAACgiD,GAAQ7wC,KAAK,UAAOvW,EAC7CoS,SAAUA,EACVsI,SAAUA,GACN7f,IAGT,EFrIHksD,GAAauB,SGOKp4C,IAAA,IAAAkC,SAAEA,GAAmClC,EAAtBrV,EAAKe,EAAAA,OAAAsU,EAApB,cAChB,MAAM82C,SAAEA,EAAQuB,aAAEA,EAAYC,cAAEA,GAAkBvB,EAAsBA,yBAExE,GAAI3hD,GAAQ0hD,GACV,OAAO,KAGT,MAAMyB,EAAgBzB,EAAS1wC,QAAQuvC,GAAyB,YAAhBA,EAAK1wC,SAAsBzY,OAE3E,OACEzB,wBAACwS,GAAKxR,OAAAC,OAAA,CAACiR,MAAM,KAAQtS,GACnBI,EAAA,QAAAC,cAACurB,GAAK,CAAA1a,QAAQ,mBAAmB,GAAG08C,KAAiBzgB,GACnDygB,EACA,QACA,oBAEFxtD,UAAAC,cAACwqD,GAAW,CAAAv4C,MAAM,KACf65C,EAAS5rD,KAAI,CAACic,EAAM9X,IACnBtE,EAAAA,QAACC,cAAA2rD,kBACCjqD,IAAK,QAAQya,EAAKwuC,KAAKxqD,QAAQkE,IAC/B6S,SAAUA,EACV4uB,SAAU,IAAMunB,EAAalxC,EAAM9X,GACnCinD,QAASgC,EAAgB,IAAMA,EAAcnxC,EAAM9X,QAASS,GACxDqX,OAKb,ECxCI,MAAMqxC,GAAkBhuD,EAAM,QAAC4X,IAAQf,MAAM,CAClDxF,QAAS,WACTkG,MAAO,SACP;;;;;;ECMW02C,GAAajuD,EAAM,QAACyC,IAAMoU,MAAM,CAC3C7V,MAAO,iBACPJ,KAAM,MAC2B;sBACbmR,EAAIA,KAAC,SAAU;EAGrC,SAASm8C,IAAuB78C,QAC9BA,EAAU,UAASqG,SACnBA,GAAW,EAAKy2C,aAChBA,EAAY9qB,KACZA,EAAIW,MACJA,EAAKoqB,YACLA,IAEA,MAAMC,EAAaxhD,KAAK4U,KAAKuiB,EAAQoqB,IAC9BE,EAAWC,GAAgB70C,EAAAA,SAAsB2pB,EAAO,GACzDmrB,EAAwB,YAAZn9C,EAElB6I,EAAAA,WAAU,KACRq0C,EAAalrB,EAAO,EAAE,GACrB,CAACA,IAEJ,MAgBMorB,EAAoB,KACpBH,GAAaA,EAAY,IAAMjrB,GACjC8qB,EAAaG,EAAY,EAC1B,EA4BH,OACE/tD,EAAA,QAAAC,cAAC4T,GAAO5B,MAAK,CAACC,MAAM,IAAIE,MAAM,WAC1B67C,GACAjuD,EAAA,QAAAC,cAACwtD,GACC,CAAAhvC,QAnDqB,KAC3BmvC,EAAa,EAAE,EAmDTz2C,SAAmB,IAAT2rB,GAAc3rB,EACxBoU,MAAM,cAENvrB,UAACC,cAAAytD,GAAW,CAAAttD,KAAK,mBAAmB+tD,OAAQ,OAGhDnuD,EAAAA,QAAAC,cAACwtD,GACC,CAAAhvC,QAvD0B,KAC9BmvC,EAAa9qB,EAAO,EAAE,EAuDlB3rB,SAAmB,IAAT2rB,GAAc3rB,EACxBoU,MAAM,iBAENvrB,EAAA,QAAAC,cAACytD,GAAW,CAAAttD,KAAK,iBAEjB6tD,GACAjuD,EAAA,QAAAC,cAAAD,EAAA,QAAA4W,SAAA,KACE5W,EAAAA,QAACC,cAAAsa,GACC,CAAA5U,KAAK,SACL6pB,IAAK,EACLjjB,IAAKuhD,EACL32C,SAAUA,GAA2B,IAAf22C,EACtBjrC,SAtCgB3Z,IACxB,GAAuB,KAAnBA,EAAE5H,OAAOgE,MAEX,YADA0oD,EAAa,IAIf,MAAMI,EAAcz2B,OAAOzuB,EAAE5H,OAAOgE,QAE/B8oD,GAAeA,EAAc,GAAKA,EAAcN,GAErDE,EAAaI,EAAY,EA6BjBp1C,OAAQk1C,EACRG,QApDWnlD,IACfolD,GAASplD,GAAGkhC,GAAG,UACjB8jB,GACD,EAkDOK,UA/CarlD,IACjBolD,GAASplD,GAAGkhC,GAAG,CAAC,cAAe,MAAO,QAAS,UACjDlhC,EAAEolC,gBACH,EA6COt3B,MAAM,QACN1R,MAAOm+B,EAAQsqB,EAAY,EAC3BxiC,MAAM,SAERvrB,UAAAC,cAACurB,GAAK,CAAA1a,QAAQ,OAAOrQ,MAAO0W,EAAW,gBAAkB,2BACpD,IACHnX,EAAAA,QAACC,cAAAurB,IAAK1a,QAAQ,YAAYrQ,MAAO0W,EAAW,gBAAkB,sBAC3D22C,KAKT9tD,EAAAA,QAAAC,cAACwtD,GACC,CAAAhvC,QAjFsB,KAC1BmvC,EAAa9qB,EAAO,EAAE,EAiFlB3rB,SAAU2rB,GAAQgrB,EAAa,GAAK32C,EACpCoU,MAAM,aAENvrB,EAAA,QAAAC,cAACytD,GAAW,CAAAttD,KAAK,kBAEjB6tD,GACAjuD,EAAA,QAAAC,cAACwtD,GACC,CAAAhvC,QArFoB,KAC1BmvC,EAAaE,EAAa,EAAE,EAqFtB32C,SAAU2rB,GAAQgrB,EAAa,GAAK32C,EACpCoU,MAAM,aAENvrB,EAAC,QAAAC,cAAAytD,GAAW,CAAAttD,KAAK,sBAK3B,CCnIA,MAAM4qC,GAAiBprC,IACrB,MAAMygB,OAAEA,GAAWrgB,EAAK,QAACmlB,WAAW8iB,IAEpC,OACEjoC,UAAAC,cAACi/B,GAAQsC,UAAS,KAChBxhC,EAAAA,QAACC,cAAAwtD,gCAA4B,uBAAuBhvC,QAAS4B,GAAYzgB,GACvEI,EAAAA,QAAAC,cAACiC,GAAK,CAAA9B,KAAK,aAAaC,KAAM,GAAII,MAAM,oBAG7C,EAGH,SAAS+tD,IAAY1rB,KACnBA,EAAI+qB,YACJA,EAAWY,oBACXA,EAAmBC,iBACnBA,EAAgBjrB,MAChBA,EAAKkrB,mBACLA,EAAkBx3C,SAClBA,GAAW,EAAK2jB,SAChBA,EAAW,SAAQ1oB,MACnBA,EAAQ,UAiBR,OACEpS,EAAA,QAAAC,cAAC4T,GAAO5B,MAAK,CAACC,MAAM,IAAIE,MAAM,UAC5BpS,EAAAA,QAAAC,cAACurB,GAAK,CAAA1a,QAAQ,UAAUrQ,MAAO0W,EAAW,gBAAkB,sBACzDu3C,GAEH1uD,UAAAC,cAACurB,GAAK,CAAA1a,QAAQ,OAAOrQ,MAAO0W,EAAW,gBAAkB,sBACvDnX,EAAAA,QAACC,cAAAurB,IAAK1a,QAAQ,YAAYrQ,MAAO0W,EAAW,gBAAkB,sBArB9C,MACpB,IAAKssB,EACH,OAAO,EAIT,IAAImrB,GAAM9rB,EAAO,GAAK+qB,EAMtB,OAJIe,EAAKnrB,IACPmrB,EAAKnrB,GAGA,GAPMX,EAAO+qB,EAAc,KAOhBe,GAAI,EAUfC,IACK,SACL,IACH7uD,EAAAA,QAACC,cAAAurB,IAAK1a,QAAQ,YAAYrQ,MAAO0W,EAAW,gBAAkB,sBAC3DssB,IAGLzjC,EAAC,QAAAC,cAAAysC,IAAS5R,SAAUA,EAAU1oB,MAAOA,GACnCpS,EAAAA,QAAAC,cAAC+qC,GAAa,CAAC7zB,SAAUA,IACzBnX,EAAC,QAAAC,cAAAysC,GAASG,KACP,KAAA8hB,EAAmBxuD,KAAKulB,GACvB1lB,EAAA,QAAAC,cAACysC,GAAShlB,KAAI,CACZ/lB,IAAK+jB,EACLjH,QAAS,IAAMgwC,EAAoB/oC,GACnCxO,SAAUwO,IAAWmoC,GAAe7tD,EAAA,QAAAC,cAACiC,GAAK,CAAA9B,KAAK,QAAQC,KAAM,GAAII,MAAM,YAEtEilB,EACa,iBAM5B,CC3Ea,MAAAopC,GAAiBrvD,EAAAA,QAAOC,IAAI;IACrC4oB,IAAY;wKpGsNhB,SAAgBrT,OAAA+B,MACdA,EAAQ,UAASlG,QACjBA,EAAU,UAASyZ,KACnBA,EAAIgB,MACJA,EAAKyyB,YACLA,EAAW9xB,QACXA,EAAO6iC,YACPA,GAAc,KACX33C,EARWzW,EAAAA,OAAAsU,EAAA,CAAA,QAAA,UAAA,OAAA,QAAA,cAAA,UAAA,gBAUd,MAAO+sB,EAASC,GAAc9oB,EAAQA,UAAU,GAEhD,OAAK6oB,EAGHhiC,EAAA,QAAAC,cAAC4pB,GAAY7oB,OAAAC,OAAA,CAAA,EAAKmW,EAAM,CAAEJ,MAAOA,EAAOlG,QAASA,IAC/C9Q,UAAAC,cAACoqB,GAAW,KACTC,GAAaxZ,EAASkG,EAAOuT,GAC9BvqB,EAAAA,QAAAC,cAAC0pB,GAA0B,CAAAC,aAAAmlC,GACd,YAAV/3C,EACChX,EAAAA,QAAMwsC,eAAejhB,GACnB,EAEAvrB,EAAA,QAAAC,cAACuoB,GAAM,CAAA1X,QAASA,GAAUya,GAG5BvrB,EAAAA,QAAAC,cAAAD,EAAA,QAAA4W,SAAA,KACG5W,UAAMwsC,eAAejhB,GAASA,EAAQvrB,EAAA,QAAAC,cAACuoB,GAAK,KAAE+C,GAC9CyyB,IACEh+C,EAAAA,QAAMwsC,eAAewR,GACpB,EAEAh+C,EAAAA,QAACC,cAAAypB,GAAa,KAAAs0B,OAMzB+Q,GACC/uD,EAAC,QAAAC,cAAAwX,GACC,CAAAT,MAAOA,EACPyH,QAAS,KACPyN,SAAAA,IACA+V,GAAW,EAAM,EAEnBt8B,KAAK,uBACO,gBAEZ3F,UAAAC,cAACiC,GAAI,CAAC9B,KAAK,QAAQC,KAAM,OApCZ,IAyCvB,uBAuCM,SAAuB4U,OAAA+B,MAC3BA,EAAQ,UAASlG,QACjBA,EAAU,UAASyZ,KACnBA,EAAIgB,MACJA,EAAKjI,OACLA,EAAM0rC,gBACNA,EAAeC,oBACfA,EAAmBC,6BACnBA,KACG93C,EATwBzW,SAAAsU,EAAA,CAAA,QAAA,UAAA,OAAA,QAAA,SAAA,kBAAA,sBAAA,iCAW3B,OACEjV,EAAA,QAAAC,cAAC4pB,GAAY7oB,OAAAC,OAAA,CAAA,EAAKmW,EAAM,CAAEJ,MAAOA,EAAOlG,QAASA,IAC/C9Q,UAAAC,cAACoqB,GAAW,KACTC,GAAaxZ,EAASkG,EAAOuT,GAC9BvqB,EAAC,QAAAC,cAAA0pB,GACE,KAAA3pB,EAAAA,QAAMwsC,eAAejhB,GAASA,EAAQvrB,EAAAA,QAACC,cAAAuoB,GAAM,CAAA1X,QAASA,GAAUya,KAGrEvrB,UAAAC,cAACkqB,GAAa,KACZnqB,EAAC,QAAAC,cAAAiqB,IACClT,MAAM,QACNlG,QAAQ,UACRtQ,UAAWsQ,EACXnL,KAAK,SACL8Y,QAASwwC,GAER3rC,GAEF0rC,GACChvD,EAAC,QAAAC,cAAAiqB,GACC,CAAAlT,MAAM,QACNxW,UAAWsQ,EACXA,QAAQ,YACRnL,KAAK,SACL8Y,QAASywC,GAERF,IAMb,4BAEM,SAA4B/5C,GAAA,IAAA+B,MAChCA,EAAQ,QAAOlG,QACfA,EAAU,UAASyZ,KACnBA,EAAIgB,MACJA,EAAKyyB,YACLA,EAAW16B,OACXA,EAAM0rC,gBACNA,EAAeC,oBACfA,EAAmBC,6BACnBA,EAA4BhjC,QAC5BA,EAAO6iC,YACPA,GAAc,GAEI95C,EADfmC,EAAMzW,EAAAA,OAAAsU,EAZuB,0JAchC,MAAO+sB,EAASC,GAAc9oB,EAAQA,UAAU,GAEhD,OAAK6oB,EAGHhiC,EAAA,QAAAC,cAAC4pB,GAAY7oB,OAAAC,OAAA,CAAA,EAAKmW,EAAM,CAAEJ,MAAOA,EAAOlG,QAASA,IAC9CwZ,GAAaxZ,EAASkG,EAAOuT,GAC9BvqB,EAAAA,QAACC,cAAA0pB,iBAA0BolC,GACxB/uD,UAAMwsC,eAAejhB,GAASA,EAAQvrB,EAAA,QAAAC,cAACuoB,GAAK,KAAE+C,GAC9CvrB,UAAMwsC,eAAewR,GAAeA,EAAch+C,EAAA,QAAAC,cAACypB,GAAW,KAAEs0B,GACjEh+C,UAAAC,cAACmqB,GAAkB,KACjBpqB,EAAC,QAAAC,cAAAoX,IACCL,MAAM,QACNlG,QAAQ,UACRtQ,UAAWsQ,EACXnL,KAAK,SACL8Y,QAASwwC,GAER3rC,GAEF0rC,GACChvD,EAAC,QAAAC,cAAAoX,GACC,CAAAL,MAAM,QACNxW,UAAWsQ,EACXA,QAAQ,YACRnL,KAAK,SACL8Y,QAASywC,GAERF,KAKRD,GACC/uD,EAAC,QAAAC,cAAAwX,GACC,CAAAT,MAAOA,EACPyH,QAAS,KACPyN,SAAAA,IACA+V,GAAW,EAAM,GAGnBjiC,UAAAC,cAACiC,GAAI,CAAC9B,KAAK,QAAQC,KAAM,OAvCZ,IA4CvB,sBA9IM,SAAsB4U,OAAA+B,MAC1BA,EAAQ,QAAOlG,QACfA,EAAU,UAASyZ,KACnBA,EAAIgB,MACJA,EAAKyyB,YACLA,EAAW9xB,QACXA,EAAO6iC,YACPA,GAAc,KACX33C,EARuBzW,EAAAA,OAAAsU,EAAA,CAAA,QAAA,UAAA,OAAA,QAAA,cAAA,UAAA,gBAU1B,MAAO+sB,EAASC,GAAc9oB,EAAQA,UAAU,GAEhD,OAAK6oB,EAGHhiC,EAAA,QAAAC,cAAC4pB,GAAY7oB,OAAAC,OAAA,CAAA,EAAKmW,EAAM,CAAEJ,MAAOA,EAAOlG,QAASA,IAC9CwZ,GAAaxZ,EAASkG,EAAOuT,GAC9BvqB,EAAAA,QAACC,cAAA0pB,iBAA0BolC,GACxB/uD,UAAMwsC,eAAejhB,GAASA,EAAQvrB,EAAA,QAAAC,cAACuoB,GAAK,KAAE+C,GAC9CvrB,UAAMwsC,eAAewR,GAAeA,EAAch+C,UAAAC,cAACypB,GAAa,KAAAs0B,IAElE+Q,GACC/uD,EAAC,QAAAC,cAAAwX,GACC,CAAAT,MAAOA,EACPyH,QAAS,KACPyN,SAAAA,IACA+V,GAAW,EAAM,EAEnBt8B,KAAK,UAEL3F,UAAAC,cAACiC,GAAI,CAAC9B,KAAK,QAAQC,KAAM,OAlBZ,IAuBvB,4CjBnRA,SAAqB4U,GAAA,IAAAvI,QAAEA,EAAU,GAAEyiD,OAAEA,EAAMh4C,SAAEA,GAAQlC,EAAKmC,EAArCzW,EAAAA,OAAAsU,EAAA,CAAA,UAAA,SAAA,aACnB,OACEjV,EAAC,QAAAC,cAAA2e,GAAyB5d,OAAAC,OAAA,CAAA,aAAA,cAAiBmW,GACxC+3C,GACCnvD,EAAAA,QAAAC,cAAC+e,GAAgB,CAAA,cACH,mBACZP,QAAS0wC,EACTh4C,SAAUA,EACC,aAAA,0BAIfnX,UAACC,cAAA6e,GAAqB,CAAA,cAAA,eACnBpS,EAAQvM,KAAKyM,GACL5M,UAAAC,cAACse,GAAUvd,OAAAC,OAAA,CAACU,IAAKiL,EAAMyL,OAAWzL,OAKnD,qCmGsEA,SAAkBhN,GAChB,MAAM4iD,KAAEA,EAAIvC,MAAEA,EAAK/8B,SAAEA,EAAQ++B,YAAEA,EAAW2C,SAAEA,EAAQC,KAAEA,GAAkBjlD,EAATc,WAASd,EAAlE,CAA+D,OAAA,QAAA,WAAA,cAAA,WAAA,SAC/D2C,EAAWoiD,GAAY,CAAEnC,OAAMvC,QAAO/8B,WAAU++B,cAAa4C,OAAMD,aAEzE,OAAO5kD,UAAAC,cAAC6oD,GAAgB9nD,OAAAC,OAAA,CAAAsB,SAAUA,GAAc7B,GAClD,gCxHyYM,SAAgBd,GACpB,OAAOI,EAAC,QAAAC,cAAAiC,GAAKlB,OAAAC,OAAA,CAAAZ,KAAM,IAAQT,EAAO,CAAAQ,KAAK,eACzC,kH4HtbA,SAAoBR,GAClB,MAAMimB,GACJA,EAAEzlB,KACFA,EAAIkF,MACJA,EAAKud,SACLA,EAAQ1L,SACRA,EAAQ8qC,YACRA,EAAWpR,cACXA,EAAaue,iBACbA,EAAgB7iC,UAChBA,GACE3sB,EAEEyvD,ED3CR,SAAuBzvD,GACrB,MAAMqiD,YAAEA,EAAW9qC,SAAEA,EAAQ0O,GAAEA,EAAEzlB,KAAEA,EAAIyiB,SAAEA,EAAQvd,MAAEA,GAAmB1F,EAATc,WAASd,EAAhE,CAA6D,cAAA,WAAA,KAAA,OAAA,WAAA,UAE7D2xC,EAAWzF,GAAY,CAAE30B,aACzB5U,EAAWoiD,GAAY,CAC3BE,KAAM,SACN5C,cACA2C,SAKF,SAA0B7kC,GACxB,IAAKusC,EAAS/yC,QACZ,OAGF,MAAO+1C,GAAiBjG,GAAatpC,GAAW5f,IAAImpD,IAQhDgG,GAAiBhG,GAAWM,GAAc0C,EAAS/yC,WACrDowC,GAAc2C,EAAS/yC,QAAS+1C,GAGlCzsC,SAAAA,EAAW,CAAEvhB,OAAQ,CAAEukB,KAAIzlB,OAAMkF,MAAOya,EAAU,KACnD,IApBKusC,EAAWjzC,EAAAA,SAsBjB,SAASk2C,EAAsB3O,GAC7B,GAAY,MAARA,EAAc,CAChB,MAAMwD,EAAYxD,EAAKa,UAEvBl/C,EAASud,OAAO,CAACskC,EAAWA,GAC7B,MACC7hD,EAASoK,OAEZ,CAED,SAAS6iD,IACFje,EAAS5oB,WACZpmB,EAASsK,IAAI28C,GAAwBjnD,EAAS2gB,WAC9CquB,EAASlxB,SAEZ,CAED,SAASovC,EAAerL,GACtB7hD,EAASud,OAAO,CAACskC,EAAWA,IAC5B7S,EAASrF,UACV,CAED,SAASwjB,UACPntD,EAASoK,QACS,QAAlBsI,EAAAq3C,EAAS/yC,eAAS,IAAAtE,GAAAA,EAAA+5B,OACnB,CA+ED,OArBAr1B,EAASA,WACP,WACE,IAAK2yC,EAAS/yC,QACZ,OAGF,MAAOyG,GAAgBqpC,GAAa/jD,IAC7BqqD,GAAiBptD,EAAS2gB,SAE7BlD,GAAgB2vC,IAClBhG,GAAc2C,EAAS/yC,QAAS+vC,GAAWtpC,IAE3Czd,EAASud,OAAO,CAACE,EAAcA,IAC/Bzd,EAASsK,IAAI28C,GAAwB,CAACxpC,EAAcA,KAEvD,GAGD,CAAC1a,IAGI,CACLA,MAAO+jD,GAAa9mD,EAAS2gB,UAAU/iB,IAAImpD,IAE3C3X,iBAhFF,WACE,MAAO,CACLx6B,WACAkJ,OAAQkxB,EAASlxB,OACjBsI,SAAU4oB,EAAS5oB,SACnB3P,SACE,IAAKszC,EAAS/yC,QACZ,OAGF,MAAOq2C,GAAoBvG,GAAa9mD,EAAS2gB,UAAU/iB,IAAImpD,IACzDuG,EAAiBjG,GAAc0C,EAAS/yC,SAE1Cs2C,GAAkBD,IAIjBC,EAGHlG,GAAc2C,EAAS/yC,QAASq2C,GAFhCrtD,EAASoK,QAIZ,EAEJ,EAyDCkkC,cA/CF,iBACE,OACK7vC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,UAAAgU,EAAAvU,EAAKmwC,yCAALnwC,KACHmlB,KACAzlB,OACA+W,WACA0L,SAAU0sC,EACV9wC,QAAS+wC,EACTz4C,IAAIyd,GACU,MAARA,IACF83B,EAAS/yC,QAAUib,EAEtB,GAEJ,EAkCCsd,cAhCF,WACE,MAAO,CACLrzB,QAASixC,EAEZ,EA6BCN,iBAzDF,iBACE,OAAApuD,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACK,QAAAgU,EAAAvU,EAAK0uD,wBAAL,IAAAn6C,OAAA,EAAAA,EAAAnT,KAAApB,IAAyB,CAC5B6B,WACA6lD,WAAYqH,GAEf,EAqDH,CCrGqBK,CAAc,CAC/B7N,cACA9qC,WACA0O,KACAzlB,OACAkF,QACAud,WACAguB,gBACAue,qBAoBF,OACEpvD,wBAACssC,GAAetrC,OAAAC,OAAA,CAAA,EAAKsrB,EAAe8iC,EAAW1d,oBAC7C3xC,EAAAA,QAACC,cAAAi/B,GAAQsC,UAAS,KAChBxhC,EAAAA,QAAAC,cAACgS,GAAK,CAACC,MAAM,KACXlS,EAAAA,QAAAC,cAAC+pD,GAAShpD,OAAAC,OAAA,CAACiW,SArBnB,WACE,MAAO04C,GAAoBP,EAAW/pD,MAEtC,OAAK6R,GAAYy4C,EAEb5vD,EAAAA,sBAAC+pD,GAAW/oD,OAAAC,OAAA,CACVZ,KAAM,GACNsF,KAAK,SACM,aAAA,mBACP0pD,EAAWvd,kBAKd,IACR,CAM4Bie,IAAsBV,EAAWxe,oBAG1D7wC,UAAAC,cAAC0oC,GAAY,KACX3oC,EAAAA,QAACC,cAAA6oD,GAAoB9nD,OAAAC,OAAA,GAAAouD,EAAWD,sBAIxC,0BE5GA,SAAyBxvD,GACvB,MAAMimB,GACJA,EAAEzlB,KACFA,EAAIkF,MACJA,EAAKud,SACLA,EAAQ1L,SACRA,EAAQ8qC,YACRA,EAAW+N,wBACXA,EAAuBC,sBACvBA,EAAqBb,iBACrBA,EAAgB7iC,UAChBA,GACE3sB,EAEEswD,ED9BR,SAA4BtwD,GAC1B,MAAMqiD,YAAEA,EAAW9qC,SAAEA,EAAQ0O,GAAEA,EAAEzlB,KAAEA,EAAIyiB,SAAEA,EAAQvd,MAAEA,GAAmB1F,EAATc,WAASd,EAAhE,CAA6D,cAAA,WAAA,KAAA,OAAA,WAAA,UAE7D2xC,EAAWzF,GAAY,CAAE30B,aACzB5U,EAAWoiD,GAAY,CAC3BE,KAAM,QACN5C,cACA2C,SAMF,SAA0B1hC,GACvB,CAAC+mC,GAAgBC,IAAcrtB,SAASv4B,IACvC,MAAMqU,EAAQw3C,EAAU52C,QAAQjV,GAC1BgrD,EAAgBhG,GAAWpmC,EAAS5e,IAQtCgrD,GAAiBhG,GAAWM,GAAcjxC,KAC5CgxC,GAAchxC,EAAO22C,EACtB,IAGHzsC,SAAAA,EAAW,CAAEvhB,OAAQ,CAAEukB,KAAIzlB,OAAMkF,MAAO4d,IACzC,IApBKitC,EAAY92C,EAAMA,OAAqD,CAAC,KAAM,OAC9E+2C,EAAsB/2C,SAA6C,QAqBzE,SAASg3C,EAA0B/rD,GACjC,OAAO,SAA+Bs8C,GACpC,GAAY,MAARA,EAAc,CAChB,MAAMwD,EAAYxD,EAAKa,UAEjBj9B,EAAwC,IAAIjiB,EAAS2gB,UAC3DsB,EAAYlgB,GAAS8/C,EAErB7hD,EAASud,OAAO0E,EACjB,MACCjiB,EAASoK,OAEb,CACD,CAED,SAAS6iD,IACFje,EAAS5oB,WACZpmB,EAASsK,IAAI28C,GAAwBjnD,EAAS2gB,WAC9CquB,EAASlxB,SAEZ,CAED,SAASovC,EAAerL,aACtB,MAAOH,EAAYC,GAAY3hD,EAAS2gB,SAEL,eAA/BktC,EAAoB72C,QACN,MAAZ2qC,GACF3hD,EAASud,OAAO,CAACskC,EAAWF,GAAU7gD,QACL,QAAjC4R,EAAAk7C,EAAU52C,QAAQ0wC,WAAe,IAAAh1C,GAAAA,EAAE+5B,UAEnCzsC,EAASud,OAAO,CAACskC,EAAWF,IACG,QAA/BrqC,EAAAs2C,EAAU52C,QAAQ2wC,WAAa,IAAArwC,GAAAA,EAAEm1B,SAEK,aAA/BohB,EAAoB72C,UACX,MAAd0qC,EACF1hD,EAASud,OAAO,CAACmkC,EAAYG,GAAW/gD,QAExCd,EAASud,OAAO,CAACmkC,EAAYG,IAGA,QAA/BpoB,EAAAm0B,EAAU52C,QAAQ2wC,WAAa,IAAAluB,GAAAA,EAAEgT,QAEpC,CAED,SAAS0gB,UACPntD,EAASoK,QACwB,QAAjCsI,EAAAk7C,EAAU52C,QAAQ0wC,WAAe,IAAAh1C,GAAAA,EAAE+5B,OACpC,CAED,SAASshB,IAGP,GAFAF,EAAoB72C,QAAU,QAE1B,CAAC0wC,GAAgBC,IAAcvzB,MAAMryB,IAAW6rD,EAAU52C,QAAQjV,KAItE,GAAI,CAAC2lD,GAAgBC,IAAcj3B,OAAO3uB,IAAWslD,GAAcuG,EAAU52C,QAAQjV,MACnF/B,EAASoK,YACJ,CACL,MAAMuW,EAAWmmC,GAAa9mD,EAAS2gB,UAAU/iB,IAAImpD,IAEpD,CAACW,GAAgBC,IAAcrtB,SAASv4B,IACvCqlD,GAAcwG,EAAU52C,QAAQjV,GAAQ4e,EAAS5e,GAAO,GAE3D,CACF,CAED,SAASisD,IACPD,IACA/e,EAASrF,UACV,CAgGD,OA3BAvyB,EAASA,WACP,WACE,GAAI,CAACswC,GAAgBC,IAAcvzB,MAAMryB,IAAW6rD,EAAU52C,QAAQjV,KACpE,OAGF,MAAMkgB,EAAc6kC,GAAa/jD,GAC3BkrD,EAAejuD,EAAS2gB,SAExButC,EAAa,CAACxG,GAAgBC,IAAcvzB,MAAMryB,GAC/CkgB,EAAYlgB,IAAUksD,EAAalsD,KAGxCmsD,IACD,CAACxG,GAAgBC,IAAcrtB,SAASv4B,IACvCqlD,GAAcwG,EAAU52C,QAAQjV,GAAQglD,GAAW9kC,EAAYlgB,IAAQ,IAGzE/B,EAASud,OAAO0E,GAChBjiB,EAASsK,IAAI28C,GAAwBhlC,IAExC,GAGD,CAAClf,IAGI,CACLA,MAAO+jD,GAAa9mD,EAAS2gB,UAAU/iB,IAAImpD,IAE3C3X,iBAjGF,WACE,MAAO,CACLx6B,WACAkJ,OAAQkxB,EAASlxB,OACjBsI,SAAU4oB,EAAS5oB,SACnB3P,OAAQs3C,EAEX,EA2FCN,wBAjFF,iBACE,OACKhvD,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAA4B,QAA5BgU,EAAAvU,EAAKsvD,+BAAuB,IAAA/6C,OAAA,EAAAA,EAAAnT,KAA5BpB,IAAgC,CACnCmlB,GAAU,MAANA,EAAa,GAAGA,UAAaA,EACjCzlB,KAAc,MAARA,EAAe,GAAGA,UAAeA,EACvC+W,WACA0L,SAAUwtC,EAA0BpG,IACpCxrC,QAAS+wC,EACTz2C,UACEq3C,EAAoB72C,QAAU,aAC/B,EACDxC,IAAIyd,GACU,MAARA,IACF27B,EAAU52C,QAAQ0wC,IAAkBz1B,EAEvC,GAEJ,EAiECy7B,sBA/DF,iBACE,OACKjvD,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAA0B,QAA1BgU,EAAAvU,EAAKuvD,6BAAqB,IAAAh7C,OAAA,EAAAA,EAAAnT,KAA1BpB,IAA8B,CACjCmlB,GAAU,MAANA,EAAa,GAAGA,QAAWA,EAC/BzlB,KAAc,MAARA,EAAe,GAAGA,QAAaA,EACrC+W,WACA0L,SAAUwtC,EAA0BnG,IACpCzrC,QAAS+wC,EACTz2C,UACEq3C,EAAoB72C,QAAU,WAC/B,EACDxC,IAAIyd,GACU,MAARA,IACF27B,EAAU52C,QAAQ2wC,IAAgB11B,EAErC,GAEJ,EA+CCsd,cA7CF,WACE,MAAO,CACLrzB,QAASixC,EAEZ,EA0CCN,iBA5FF,iBACE,OAAApuD,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACK,QAAAgU,EAAAvU,EAAK0uD,wBAAL,IAAAn6C,OAAA,EAAAA,EAAAnT,KAAApB,IAAyB,CAC5B6B,WACA6lD,WAAYqH,GAEf,EAuFCiB,aAzCF,WACE,MAAO,CACLjyC,QAAS8xC,EAEZ,EAuCH,CClL0BI,CAAmB,CACzC1O,cACA9qC,WACA0O,KACAzlB,OACAkF,QACAud,WACAmtC,0BACAC,wBACAb,qBAmCF,OACEpvD,wBAACssC,GAAetrC,OAAAC,OAAA,CAAA,EAAKsrB,EAAe2jC,EAAgBve,oBAClD3xC,EAAAA,QAACC,cAAAi/B,GAAQsC,UAAS,KAChBxhC,EAAAA,QAAAC,cAACgS,GAAK,CAACC,MAAM,KACXlS,EAAAA,QAACC,cAAA+pD,oBACKkG,EAAgBF,0BAAyB,CAAA,cACjC,4BAEdhwD,EAAA,QAAAC,cAAC+pD,GAAShpD,OAAAC,OAAA,CACRiW,SAzCV,WACE,MAAO05C,EAAgBC,GAAgBX,EAAgB5qD,MAEvD,OAAK6R,IAAay5C,IAAkBC,EAW7B,KATH7wD,EAAAA,sBAAC+pD,GAAW/oD,OAAAC,OAAA,CACVZ,KAAM,GACNsF,KAAK,SACM,aAAA,mBACPuqD,EAAgBpe,iBAM3B,CA0BmBgf,IACNZ,EAAgBD,wBAAuB,CAAA,cAC/B,4BAIlBjwD,EAAAA,QAAAC,cAAC0oC,GAAY,CAACE,OA5Bd7oC,wBAACmqD,GAAc,KACbnqD,EAAC,QAAAC,cAAAgS,IAAMC,MAAM,IAAIC,QAAQ,YACvBnS,EAAAA,QAAAC,cAACoX,GAAMrW,OAAAC,OAAA,CAAC0E,KAAK,SAASqR,MAAM,SAAYk5C,EAAgBpe,iBAE/C,SACT9xC,EAAC,QAAAC,cAAAoX,kBAAO1R,KAAK,SAASqR,MAAM,QAAQlG,QAAQ,WAAco/C,EAAgBQ,gBAEjE,WAsBX1wD,EAAAA,QAACC,cAAA6oD,GAAoB9nD,OAAAC,OAAA,GAAAivD,EAAgBd,sBAI7C,wJCrGsBn6C,IAAA,IAAA5C,SAAEA,GAAuC4C,EAA1BrV,EAAKe,EAAAA,OAAAsU,EAApB,cACpB,OAAK5C,EAKHrS,EAAAA,sBAACwrB,GAAIxqB,OAAAC,OAAA,CAACgyC,GAAG,IAAIniC,QAAQ,eAAerQ,MAAM,gBAAmBb,GAC1DyS,GALI,IAOR,sF/EuEH,SAAe4C,GAAA,IAAAg+B,GACbA,EAAK,QAAO5gC,SACZA,EAAQ7R,UACRA,EAAS2W,SACTA,GAAW,EAAK45C,SAChBA,EAAQz5C,OACRA,EAAS,QAAO05C,IAChBA,EAAGC,SACHA,EAAW,CAAE,GAAAh8C,EACVmC,EATUzW,EAAAA,OAAAsU,EAAA,CAAA,KAAA,WAAA,YAAA,WAAA,WAAA,SAAA,MAAA,aAWb,MAAMvP,EAAM7E,OAAOoyC,GAAM,SAEzB,OACEjzC,EAAA,QAAAC,cAAC2e,GAAa5d,OAAAC,OAAA,CAAA,cACA,QACZgyC,GAAIvtC,EACJlF,UAAWwX,GAAKxX,EAAW,CACzB,cAAe2W,KAEbC,GAEJpX,EAAA,QAAAC,cAACsiC,GAAe,CAAAjrB,OAAQA,GAASjF,GAChC0+C,GAAY/wD,EAAAA,QAACC,cAAAuiC,GAAiC,KAAA,MAC7C9jB,EAAAA,MAAMsyC,IACNhxD,wBAAC4hC,GAAO5gC,OAAAC,OAAA,CAACqW,OAAQA,EAAQuqB,QAASmvB,GAAO,IAAQC,GAC/CjxD,UAACC,cAAAyiC,GAAoB,CAAAprB,OAAQA,SAKvC,uDlDrEc,UAAqByZ,UACjCA,EAASxF,MACTA,EAAK2lC,eACLA,EAAc5wD,MACdA,EAAiBuU,SACjBA,EAAW,MAEX,OACE7U,EAAAA,sBAAC6T,GAAOZ,IAAI,CAAAM,UAAWwd,GACrB/wB,EAAA,QAAAC,cAAC4T,GAAOrB,MAAM,CAAAN,MAAM,KACjBqZ,EACDvrB,EAAC,QAAAC,cAAA2U,IAAItU,MAAOA,EAAOuU,SAAUA,IAC5Bq8C,GAIT,6D6IvDA,SAAoBtxD,GAClB,MAAM4jC,cACJA,EAAgB,EAACC,MACjBA,EAAKtsB,SACLA,GAAW,EAAK0L,SAChBA,EAAQigB,KACRA,EAAIY,aACJA,EAAe,GAEb9jC,EADCwX,EAAMzW,EAAAA,OACPf,EARE,CAQL,gBAAA,QAAA,WAAA,WAAA,OAAA,iBAEKigB,EAAQskB,GAAc,CAAEX,gBAAeC,QAAOtsB,WAAU0L,WAAUigB,OAAMY,iBAE9E,OACE1jC,EAAA,QAAAC,cAAA,MAAAe,OAAAC,OAAA,CAAA,aAAgB,yBAA4BmW,GAC1CpX,EAAC,QAAAC,cAAA4T,GAAO5B,MAAK,CAACC,MAAM,OAAOE,MAAM,UAC9ByN,EAAM1f,KAAKic,GACVpc,EAAAA,QAAAC,cAACojC,GAAmBriC,OAAAC,OAAA,CAAA,EAAAmb,GAAMza,IAAK,GAAGya,EAAKknB,WAAWlnB,EAAK0mB,MAAQ,WAKzE,sKtJFwB,SAAQ7tB,OAAAsW,MAAEA,EAAKlrB,KAAEA,GAAI4U,EAAKrV,EAAKe,EAAAA,OAAAsU,EAAvB,kBAC9B,OACEjV,UAAAC,cAAA,MAAAe,OAAAC,OAAA,CAAA,EACMrB,EAAK,CACTuC,QAAQ,YACRM,SAAS,UACT0uD,eAAe,QACfC,iBAAiB,IACjB5uD,SAAS,UACTlC,MAAOD,EACPE,OAAQF,IAERL,EAAAA,QAAQC,cAAA,QAAA,KAAAsrB,GAAS,WACjBvrB,EAAAA,QAAAC,cAAA,IAAA,CACE4lB,GAAG,WACH5e,UAAU,6CACV7E,KAAK,UACLK,SAAS,WAETzC,EAAC,QAAAC,cAAAoR,IACC/M,MAAO,EACPhC,EAAE,6NAEJtC,EAAC,QAAAC,cAAAoR,IACC/M,MAAO,EACPhC,EAAE,oLAEJtC,EAAC,QAAAC,cAAAoR,IACC/M,MAAO,EACPhC,EAAE,gLAEJtC,UAAAC,cAACoR,GAAK,CACJ/M,MAAO,EACPhC,EAAE,8NAKZ,kCiEuGA,SAAgB2S,OAAAqJ,OACdA,GAAS,EAAK9d,UACdA,EAAS2W,SACTA,GAAW,EAAK/W,KAChBA,EAAIixD,SACJA,EAAQr6C,MACRA,EAAQ,aACLI,EAPWzW,EAAAA,OAAAsU,EAAA,CAAA,SAAA,YAAA,WAAA,OAAA,WAAA,UASd,OACEjV,EAAAA,QAAAC,cAAColC,GAAa,CACZisB,QAASlxD,EACTmrB,MAAOjN,EAAS,SAAW,WAC3BA,OAAQA,EACR9d,UAAWwX,GAAKxX,EAAW,CACzB,cAAe2W,IAEjBH,MAAOA,GAENsH,EACCte,EAAAA,sBAACulC,GAAU,CAACnlC,KAAK,QAAQ4W,MAAOA,gBAAmB,uBAEnDhX,EAAAA,QAACC,cAAAulC,IAAaplC,KAAK,QAAQ4W,MAAOA,EAAmB,cAAA,yBAEvDhX,EAAC,QAAAC,cAAAqlC,IAAOhnB,OAAQA,EAAQtH,MAAOA,IAC/BhX,UAAAC,cAACmpB,GAAWpoB,OAAAC,OAAA,CACV0E,KAAK,YACDyR,EAAM,CACVyO,GAAIzlB,EACJA,KAAMA,EACN0nB,QAASxJ,EACTnH,SAAUA,EACV0L,SAAUwuC,KAIlB,2CsFtMA,SAAyBzxD,GACvB,MAAMkR,QACJA,EAAU,UAAS2yB,MACnBA,EAAKirB,iBACLA,EAAmB,iBAAgBd,aACnCA,EAAYa,oBACZA,EAAmB3rB,KACnBA,EAAI+qB,YACJA,EAAc,GAAEc,mBAChBA,EAAqB,CAAC,GAAI,GAAI,GAAI,KAAIx3C,SACtCA,GAAW,EAAKo6C,qBAChBA,GAEE3xD,EADCc,WACDd,EAZE,CAYL,UAAA,QAAA,mBAAA,eAAA,sBAAA,OAAA,cAAA,qBAAA,WAAA,yBAED,OACEI,EAAAA,QAACC,cAAA4T,GAAO5B,MAAKjR,OAAAC,OAAA,CAACiR,MAAM,KAAKE,MAAM,SAASD,QAAQ,iBAAoBzR,GAClEV,EAAC,QAAAC,cAAAuuD,GACC,CAAA1rB,KAAMA,EACNW,MAAOA,EACPgrB,oBAAqBA,EACrBZ,YAAaA,EACbc,mBAAoBA,EACpBD,iBAAkBA,EAClBv3C,SAAUA,IAAassB,EACvB3I,SAAUy2B,aAAA,EAAAA,EAAsBz2B,SAChC1oB,MAAOm/C,aAAA,EAAAA,EAAsBn/C,QAE/BpS,UAAAC,cAAC0tD,GAAsB,CACrB78C,QAASA,EACTgyB,KAAMA,EACN8qB,aAAcA,EACdC,YAAaA,EACbpqB,MAAOA,EACPtsB,SAAUA,IAAassB,IAI/B,wGpFwBA,UAAe5B,QACbA,EAAO3V,QACPA,EAAOslC,QACPA,EAAOC,SACPA,GAAW,EAAKv3C,OAChBA,EAASH,GAAOI,UAEhB,MAAOspB,EAAOiuB,GAAYv4C,EAAQA,SAAC,KAyBnC,OAlBAQ,EAAAA,WAAU,KACR,IAAK63C,EAAS,OAEd,MAAMG,EAAc,IAAmBH,EACjCI,EAAWh9B,OAAO4b,YAAW,KAC7B/M,GAAS,GACX7O,OAAOyb,aAAauhB,GACpB1lC,KAEAwlC,GAAUpsD,GAAUA,EAAQqsD,GAC7B,GA1BU,KA6Bb,MAAO,KACL/8B,OAAOyb,aAAauhB,EAAS,CAC9B,GACA,CAACnuB,EAAOvX,EAASslC,IAGlBxxD,EAAA,QAAAC,cAAColB,GAAS,CAACnL,OAAQA,EAAM,YAAY,SAAShF,KAAK,SAChDu8C,GACCzxD,EAAA,QAAAC,cAACoV,GAAO,KACNrV,EAAA,QAAAC,cAACimC,GAAU,CAAAhsB,OAAQA,KAGvBla,EAAAA,QAACC,cAAA6qB,GAAS,KAAA+W,GACTrkB,QAAQg0C,IAAYxxD,wBAACimC,GAAc,CAAC3gC,MAAOm+B,EAAOvpB,OAAQA,IAC1DgS,GAAWlsB,EAAAA,QAAAC,cAACwX,GAAW,CAACgH,QAASyN,EAAS7rB,KAAM,KAGvD,mNqF5GE,MAAMyf,EACJqF,EAAUA,WAAC2nB,KACX,MACE,MAAM,IAAIvqB,MAAM,iDACjB,EAFD,GAIIsvC,EAAYp4C,EAAAA,aAChB,SAAmBiM,GACjB,MAAMoC,QAAEA,GAAYhI,EAAO0xB,oBAAoB9rB,GAC/C,OAAOoC,CACT,GACA,CAAChI,IAGH,MAAO,CACLyvB,MAAOzvB,EAAOyvB,MACdkC,UAAW3xB,EAAO2xB,UAClBogB,YAEJ,4BCHA,WACE,MAAMxxD,ECrBR,WACE,MAAOyxD,EAAYC,GAAiB54C,WAGjC,CACD7Y,MAAOs0B,OAAOo9B,WACdzxD,OAAQq0B,OAAOq9B,cAejB,OAZAt4C,EAAAA,WAAU,KACR,SAASu4C,IACPH,EAAc,CACZzxD,MAAOs0B,OAAOo9B,WACdzxD,OAAQq0B,OAAOq9B,aAElB,CAID,OAFAr9B,OAAOhb,iBAAiB,SAAUs4C,GAE3B,IAAMt9B,OAAO9a,oBAAoB,SAAUo4C,EAAa,GAC9D,IACIJ,CACT,CDDeK,GACPC,EAAQC,EAAAA,WAQd,OAAOtmC,GAAU,CAAE/C,KANAhG,EAAAA,SAAQ,KACzB,MAAMsvC,EAAaxyD,EAAKoQ,SAAC,wCAAyC,CAAEkiD,UAC9DG,GAdiBjtD,EAcsBgtD,GAbrCpoB,QAAQ,QAAU,EACnBjT,WAAW3xB,GAASktD,cAGtBv7B,WAAW3xB,GALpB,IAA2BA,EAevB,OAAOjF,EAAKC,MAAQiyD,CAAkB,GACrC,CAAClyD,KAGN,mBEfA,UAAkB0mC,MAAEA,EAAOxtB,QAASk5C,IAClC,MAAMC,EAAgBr5C,SAAwC,CAAA,GAE9DM,EAASA,WACP,WACE+4C,EAAcn5C,QAAU,IACtBwtB,GAAS,IAAIlK,SAAQ,CAACrb,EAAMld,KAC5BouD,EAAcn5C,QAAQiI,EAAKqE,IAAMvhB,CAAK,GAE1C,GACA,CAACyiC,IAGH,MAAO1jB,EAAOF,GAAYC,EAAUA,YAEpC,SAAiBC,EAAcC,eAC7B,MAAM/J,QAAEA,GAAY8J,EAGpB,OAAQC,EAAO3d,MACb,IAAK,WAAY,CACf,MAAMgtD,EAAeC,EAAar5C,GAElC,GAAoB,MAAhBo5C,EACF,OAAOtvC,EAGT,MAAMwvC,EAAkBvmD,KAAKC,IAAIomD,EAAe,EAAG,GAEnD,OACK3xD,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAoiB,GACH,CAAA9J,QAAiC,QAAxBtE,EAAA8xB,EAAM8rB,UAAkB,IAAA59C,OAAA,EAAAA,EAAA4Q,IAEpC,CACD,IAAK,OAAQ,CACX,MAAM8sC,EAAeC,EAAar5C,GAElC,GAAoB,MAAhBo5C,EACF,OAAOtvC,EAGT,MAAMwvC,EAAkBvmD,KAAKkjB,IAAImjC,EAAe,EAAG5rB,EAAMtlC,OAAS,GAElE,OACKT,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAoiB,GACH,CAAA9J,QAAiC,QAAxBM,EAAAktB,EAAM8rB,UAAkB,IAAAh5C,OAAA,EAAAA,EAAAgM,IAEpC,CACD,IAAK,WAAY,CACf,MAAMitC,OAAEA,GAAWxvC,EAAOC,QACpBovC,EAAeC,EAAar5C,GAC5Bw5C,EAAYH,EAAaE,GAG/B,OAFatkD,EAAAA,WAAIu4B,EAAOgsB,GAOnB/xD,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAoiB,IACH9J,iBAASyiB,EAAA+K,EAAMgsB,yBAAYltC,MAAyB,UAAnBkhB,EAAM4rB,UAAa,IAAAK,OAAA,EAAAA,EAAEntC,MAL/CxC,CAOV,CACD,IAAK,WAAY,CACf,MAAMyvC,OAAEA,GAAWxvC,EAAOC,SACpBwjB,MAAEA,GAAU1jB,EAEZ0vC,EAAYH,EAAaE,GACzBtxC,EAAOhT,EAAAA,WAAIu4B,EAAOgsB,GAExB,OAAKvxC,EAKAxgB,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAoiB,GACH,CAAA0jB,MAAO,IACFA,EAAMhsB,MAAM,EAAGg4C,kCACbvxC,GAAI,CAAE8kB,UAAU,OAClBS,EAAMhsB,MAAMg4C,EAAY,MARtB1vC,CAWV,CACD,IAAK,QAAS,CACZ,MAAM0jB,MAAEA,EAAKxtB,QAAEA,GAAY+J,EAAOC,QAElC,OACKviB,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAoiB,GACAzD,EAAKmnB,EAAOxtB,GAElB,CACD,QACE,OAAO8J,EAEZ,GAjF6CzD,EAAKmnB,EAAO0rB,IAoF1D,SAAS7yC,EAAKmnB,EAAoBxtB,GAChC,MAAO,CACLA,QAASA,GAAY/K,aAAIu4B,EAAO,QAChCA,QAEH,CAED,SAAS6rB,EAAaE,GACpB,OAAOJ,EAAcn5C,QAAQu5C,EAC9B,CAGD,MAAO,CAACzvC,EAAOF,EACjB,uBCxHA,UAAwBN,SAAUowC,EAAc3tD,MAAO4tD,IACrD,MAAO5tD,EAAO6tD,GAAYh6C,EAAAA,SAAS+5C,GAAa,IAE1CrwC,EAAWpJ,EAAAA,aACf,SAAsBvQ,GACpB,MACE5H,QAAQgE,MAAEA,IACR4D,EACJiqD,EAAS7tD,GACT2tD,SAAAA,EAAe/pD,EACjB,GACA,CAAC+pD,IAGH,MAAO,CAAC3tD,EAAOud,EACjB"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/styles/transition.tsx","../src/components/IconFactory/IconFactory.tsx","../src/components/Icon/assets/back.svg","../src/components/Icon/assets/burger-menu.svg","../src/components/Icon/assets/calendar.svg","../src/components/Icon/assets/caret-down.svg","../src/components/Icon/assets/caret-left.svg","../src/components/Icon/assets/check.svg","../src/components/Icon/assets/chevron-down.svg","../src/components/Icon/assets/caret-right.svg","../src/components/Icon/assets/circle.svg","../src/components/Icon/assets/close.svg","../src/components/Icon/assets/information.svg","../src/components/Icon/assets/minus.svg","../src/components/Icon/assets/plus.svg","../src/components/Icon/assets/refresh.svg","../src/components/Icon/assets/sort-asc.svg","../src/components/Icon/assets/sort-desc.svg","../src/components/Icon/assets/sort.svg","../src/components/Icon/assets/upload.svg","../src/components/Icon/assets/warning.svg","../src/components/Icon/assets/dots-horizontal.svg","../src/components/Icon/assets/caret-right-last.svg","../src/components/Icon/Icon.tsx","../node_modules/lodash.flatten/index.js","../node_modules/lodash.isempty/index.js","../src/utils/toolset/interleave.ts","../src/styles/activatable.tsx","../src/styles/disableable.tsx","../src/styles/focusable.tsx","../src/styles/hoverable.tsx","../node_modules/lodash.omit/index.js","../src/styles/font.tsx","../src/styles/typography.ts","../src/components/Loaders/Spinner.tsx","../src/components/Layout/Layout.utils.ts","../src/components/Layout/Group.tsx","../src/components/Layout/Stack.tsx","../src/components/Layout/Box.tsx","../src/components/Layout/Sidebar.tsx","../src/components/Layout/Switcher.tsx","../src/components/Layout/Grid.tsx","../src/components/Layout/Layout.tsx","../src/components/Loaders/LoadingBar.tsx","../src/components/Loaders/LoadingDots.tsx","../src/components/Button/Button.tsx","../src/styles/ellipsizable.tsx","../src/common/CloseButton/CloseButton.tsx","../src/common/BackButton/BackButton.tsx","../node_modules/clsx/dist/clsx.m.js","../src/common/SelectionWrapper.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/hooks/useFocusWithin/useFocusWithin.ts","../src/utils/types/Status.ts","../src/components/TextField/TextField.tsx","../src/components/Textarea/Textarea.tsx","../node_modules/@loadsmart/utils-string/lib/objectFromQueryString.js","../node_modules/@loadsmart/utils-string/lib/queryStringFromObject.js","../node_modules/@loadsmart/utils-string/lib/toCapitalizeFirstLetter.js","../node_modules/@loadsmart/utils-string/lib/toLocaleCapitalizeFirstLetter.js","../node_modules/@loadsmart/utils-string/lib/isBlank.js","../node_modules/@loadsmart/utils-string/lib/index.js","../src/components/Link/useSafeLink.ts","../src/components/Link/Link.tsx","../src/components/Breadcrumbs/Breadcrumb.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/hooks/useDidMount/useDidMount.ts","../src/hooks/useSelectable/SelectableStrategy.ts","../node_modules/lodash.range/index.js","../src/utils/toolset/getID.ts","../src/hooks/useSelectable/useSelectable.ts","../src/hooks/useFingerprint/useFingerprint.ts","../src/components/ToggleGroup/ToggleGroupContext.ts","../src/components/ToggleGroup/Toggle.tsx","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Tabs/TabsContext.ts","../src/hooks/useID/useID.ts","../src/components/Tabs/Tabs.tsx","../src/components/Section/Section.tsx","../src/styles/hidden.tsx","../src/components/Accordion/Accordion.context.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Banner/Banner.tsx","../src/components/Text/Text.tsx","../src/components/Modal/Modal.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Dialog/useDialog.tsx","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js","../src/components/Popover/Popover.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Label/Label.tsx","../src/components/Pagination/Pagination.constants.ts","../src/components/Pagination/PaginationItem.tsx","../src/components/Pagination/Pagination.helper.ts","../src/components/Pagination/usePagination.ts","../src/components/ProgressBar/ProgressBar.tsx","../src/components/Switch/Switch.tsx","../src/components/Tag/Tag.tsx","../src/components/Toast/Toast.tsx","../src/components/Steps/Steps.helpers.ts","../src/components/Steps/StepsContext.ts","../src/components/Steps/ProgressSteps/ProgressStep.tsx","../src/components/Steps/ProgressSteps/ProgressSteps.tsx","../src/components/Steps/StepsStep.tsx","../src/components/Steps/Steps.tsx","../src/components/Card/CardTitle.tsx","../src/components/Card/Card.tsx","../src/components/Dropdown/Dropdown.context.ts","../src/components/Dropdown/DropdownMenu.tsx","../src/utils/toolset/keyboard.ts","../src/hooks/useClickOutside/useClickOutside.ts","../src/components/Dropdown/DropdownTrigger.tsx","../src/components/Dropdown/useDropdown.ts","../src/components/Dropdown/Dropdown.tsx","../src/components/Select/Select.context.ts","../src/utils/toolset/pluralize.ts","../src/components/Select/SelectTrigger.tsx","../src/hooks/useFocusTrap/useFocusTrap.ts","../src/components/Select/Select.constants.ts","../src/components/Select/useSelect.helpers.ts","../src/components/Select/useSelect.ts","../src/utils/toolset/isThenable.ts","../src/components/HighlightMatch/HighlightMatch.tsx","../src/utils/toolset/highlightMatch.tsx","../src/components/Select/SelectOption.tsx","../src/components/Select/SelectEmpty.tsx","../src/components/Select/SelectCreatableOption.tsx","../src/components/Select/components.tsx","../src/components/Select/Select.tsx","../src/components/SideNavigation/Logo/Logo.tsx","../src/hooks/useHeightExpansionToggler/useHeightExpansionToggler.ts","../src/components/SideNavigation/Menu/MenuBaseItem.tsx","../src/components/SideNavigation/Menu/MenuLink.tsx","../src/components/SideNavigation/Menu/MenuExpandable.tsx","../src/components/SideNavigation/Menu/Menu.tsx","../src/utils/toolset/styledCompounds.ts","../src/components/SideNavigation/Separator/Separator.tsx","../src/components/SideNavigation/SideNavigation.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Table/Selection.tsx","../src/components/Table/TableSortHandle.tsx","../src/components/Table/Table.tsx","../src/components/TopNavigation/Logo/Logo.tsx","../src/components/TopNavigation/Menu/MenuItemDropdown.tsx","../src/components/TopNavigation/Menu/MenuItemIcon.tsx","../src/components/TopNavigation/Menu/Menu.tsx","../src/components/TopNavigation/OpenSideNavButton/OpenSideNavButton.tsx","../src/components/TopNavigation/TopNavigation.tsx","../src/components/EmptyState/EmptyStateWithIcon.tsx","../src/components/EmptyState/Illustration.tsx","../src/components/EmptyState/EmptyStateWithIllustration.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Calendar/Month.helper.ts","../src/components/Calendar/PickerModeToggle.tsx","../src/components/Calendar/Date.helper.ts","../src/components/Calendar/useCalendar.ts","../src/utils/toolset/getOrdinalSuffix.ts","../src/components/Calendar/DateFormat.helper.ts","../src/components/Calendar/Pickers/PickerButton.tsx","../src/components/Calendar/Pickers/DayPicker.tsx","../src/components/Calendar/Pickers/MonthPicker.tsx","../src/components/Calendar/Pickers/YearPicker.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Calendar/usePickerMode.ts","../src/components/Calendar/Calendar.helpers.ts","../src/components/DatePicker/useDatePicker.ts","../src/components/DatePicker/DatePicker.tsx","../src/components/DatePicker/useDateRangePicker.ts","../src/components/DatePicker/DateRangePicker.tsx","../src/components/ErrorMessage/ErrorMessage.tsx","../src/components/DragDropFile/styles.tsx","../src/utils/toolset/formatBytes.ts","../src/components/DragDropFile/components/FileItem.tsx","../src/components/DragDropFile/DragDropFile.tsx","../src/components/DragDropFile/components/Wrapper.tsx","../src/components/DragDropFile/components/DropZone.tsx","../src/components/DragDropFile/components/FileList.tsx","../src/components/TablePagination/TablePagination.styles.ts","../src/components/TablePagination/TablePaginationActions.tsx","../src/components/TablePagination/RowsPerPage.tsx","../src/components/VisuallyHidden/VisuallyHidden.tsx","../src/components/Pagination/Pagination.tsx","../src/components/TablePagination/TablePagination.tsx","../src/components/Select/useSelectExternal.ts","../src/components/SideNavigation/useSideNavigation.ts","../src/hooks/useWindowResize/useWindowResize.ts","../src/components/Steps/useSteps.ts","../src/components/TextField/useTextField.tsx"],"sourcesContent":["interface TransitionStyleOptions {\n property?: string\n timingFunction?: string\n duration?: string\n}\n\n/**\n * Add basic CSS style for default transition parameters\n * @returns {string}\n */\nfunction transitionStyle(options?: TransitionStyleOptions): string {\n // TODO: add parameter to type of transition\n\n return `\n transition-property: ${\n options?.property ||\n 'background, border-color, box-shadow, color, fill, left, stroke, transform, opacity'\n };\n transition-timing-function: ${options?.timingFunction || 'cubic-bezier(0.4, 0, 0.2, 1)'};\n transition-duration: ${options?.duration || '450ms'};\n transition-delay: 0ms;\n `\n}\n\nexport default transitionStyle\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\n\nimport transition from 'styles/transition'\nimport { getToken as token } from 'theming'\n\nimport type { ThemeToken } from 'theming'\n\ntype ThemeColors = keyof {\n [ColorToken in ThemeToken as ColorToken extends `color-${infer Token}`\n ? Token\n : never]: ColorToken\n}\n\nconst Wrapper = styled.span<{ $color?: ThemeColors }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n &,\n & > svg {\n ${transition({\n property: 'transform',\n })}\n\n /*\n * prop('$color', 'currentColor')\n * Not using the prop helper function since we can't return\n * an evaluated token from it\n */\n color: ${(props) =>\n props.$color ? token(`color-${props.$color}` as ThemeToken, props) : 'currentColor'};\n\n fill: currentColor;\n }\n`\n\nexport interface IconProps<T> {\n name: keyof T\n size?: string | number\n width?: string | number\n height?: string | number\n className?: string\n color?: ThemeColors\n}\n\nexport type IconMapping = Record<string, JSX.Element | ((props: never) => JSX.Element)>\n\nexport function UnknownIcon(): JSX.Element {\n return <span aria-label=\"Unknown icon\">☹</span>\n}\n\nfunction IconFactory(map: IconMapping): (props: IconProps<typeof map>) => JSX.Element {\n function getIcon(name: keyof typeof map): ReactNode | null {\n // eslint-disable-next-line no-param-reassign\n name = String(name || '').toLowerCase()\n\n if (!(name in map)) return UnknownIcon\n\n return map[name]\n }\n\n return function Icon(props: IconProps<typeof map>) {\n const { name, size, width = '1em', height = '1em', className, color, ...rest } = props\n\n const I = getIcon(name) as typeof React.Component\n return (\n <Wrapper className={className} $color={color}>\n <I width={size || width} height={size || height} {...rest} />\n </Wrapper>\n )\n }\n}\n\nexport default IconFactory\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\" />\n</svg>\n","<svg viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4 37.6667H44V33.2222H4V37.6667ZM4 26.5556H44V22.1111H4V26.5556ZM4 11V15.4444H44V11H4Z\" fill=\"#313336\"/>\n</svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path\n d=\"M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V10h16v11zm0-13H4V5h16v3z\" />\n</svg>\n","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M24 30L13 19H35L24 30Z\" clip-rule=\"evenodd\" />\n</svg>\n","<svg viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M30 42.3848L34.2426 38.1421L20.1005 24L34.2426 9.85786L30 5.61522L15.8579 19.7574L11.6152 24L15.8579 28.2426L30 42.3848Z\" />\n</svg>\n","<svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M44.4203 13.3431L40.1777 9.1005L18.9645 30.3137L9.06496 20.4142L4.82232 24.6569L14.7218 34.5563L18.9645 38.799L23.2071 34.5563L44.4203 13.3431Z\" />\n</svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z\" />\n</svg>\n","<svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M18 5.61522L13.7574 9.85786L27.8995 24L13.7574 38.1421L18 42.3848L32.1421 28.2426L36.3848 24L32.1421 19.7574L18 5.61522Z\" />\n</svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\">\n <circle cx=\"9\" cy=\"9\" r=\"9\" fill-rule=\"evenodd\" />\n</svg>\n","<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M17.0711 4.69671L15.3033 2.92894L10 8.23224L4.6967 2.92894L2.92893 4.69671L8.23223 10L2.92893 15.3033L4.6967 17.0711L10 11.7678L15.3033 17.0711L17.0711 15.3033L11.7678 10L17.0711 4.69671Z\" />\n</svg>\n","<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M12 2C6.48625 2 2 6.48625 2 12C2 17.5138 6.48625 22 12 22C17.5138 22 22 17.5138 22 12C22 6.48625 17.5138 2 12 2ZM12 19.2727C11.2473 19.2727 10.6364 18.6618 10.6364 17.9091C10.6364 17.1564 11.2473 16.5455 12 16.5455C12.7527 16.5455 13.3636 17.1564 13.3636 17.9091C13.3636 18.6618 12.7527 19.2727 12 19.2727ZM13.3636 14.2727H10.6364L10.6364 5.18182L13.3636 5.18182L13.3636 14.2727Z\" />\n</svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 13H5v-2h14v2z\" />\n</svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <rect fill=\"none\" height=\"24\" width=\"24\" />\n <path d=\"M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6V13z\" />\n</svg>\n","<svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.782 1.5a4.499 4.499 0 0 0-4.437 3.785l-.89-.888-.705.705 2.123 2.123 2.12-2.122-.708-.708-.935.935A3.503 3.503 0 0 1 6.782 2.5c1.93 0 3.5 1.57 3.5 3.5s-1.57 3.5-3.5 3.5v1a4.5 4.5 0 0 0 0-9Z\" />\n</svg>\n","<svg viewBox=\"0 0 10 11\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\">\n <path id=\"svg_1\" fill=\"#313336\" d=\"m4.58334,0l4.58332,4.41667l-9.16666,0l4.58334,-4.41667z\" clip-rule=\"evenodd\"\n fill-rule=\"evenodd\" />\n <path id=\"svg_2\" fill=\"#CACCCF\" d=\"m4.58335,10.83337l-4.58333,-4.4167l9.16664,0l-4.58331,4.4167z\"\n clip-rule=\"evenodd\" fill-rule=\"evenodd\" />\n\n</svg>\n","<svg viewBox=\"0 0 10 11\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\">\n <path id=\"svg_1\" fill=\"#CACCCF\" d=\"m4.58334,0l4.58332,4.41667l-9.16666,0l4.58334,-4.41667z\" clip-rule=\"evenodd\"\n fill-rule=\"evenodd\" />\n <path id=\"svg_2\" fill=\"#313336\" d=\"m4.58335,10.83337l-4.58333,-4.4167l9.16664,0l-4.58331,4.4167z\"\n clip-rule=\"evenodd\" fill-rule=\"evenodd\" />\n\n</svg>\n","<svg viewBox=\"0 0 10 11\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\">\n <path id=\"svg_1\" fill=\"#313336\" d=\"m4.58334,0l4.58332,4.41667l-9.16666,0l4.58334,-4.41667z\" clip-rule=\"evenodd\"\n fill-rule=\"evenodd\" />\n <path id=\"svg_2\" fill=\"#313336\" d=\"m4.58335,10.83337l-4.58333,-4.4167l9.16664,0l-4.58331,4.4167z\"\n clip-rule=\"evenodd\" fill-rule=\"evenodd\" />\n\n</svg>\n","<svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M39.0129 20.0894H29.9817V36.097H19.0291V20.0894H9.01953L24.1351 5L39.0129 20.0894ZM9 40V44H39V40H9Z\" />\n</svg>\n","<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path clip-rule=\"evenodd\"\n d=\"M3.79753 20.9444H20.2031C21.1809 20.9444 21.8064 19.9034 21.3454 19.0421L13.142 3.68477C12.655 2.77174 11.3443 2.77174 10.856 3.68477L2.65392 19.0421C2.19415 19.9034 2.8197 20.9444 3.79753 20.9444ZM10.7045 9.30522H13.2948V14.4782H10.7045V9.30522ZM11.9996 15.7715C12.7146 15.7715 13.2948 16.3508 13.2948 17.0647C13.2948 17.7786 12.7146 18.358 11.9996 18.358C11.2847 18.358 10.7045 17.7786 10.7045 17.0647C10.7045 16.3508 11.2847 15.7715 11.9996 15.7715Z\" />\n</svg>\n","<svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14 24a5 5 0 11-10 0 5 5 0 0110 0zm15 0a5 5 0 11-10 0 5 5 0 0110 0zm15 0a5 5 0 11-10 0 5 5 0 0110 0z\" fill=\"currentColor\" fill-rule=\"evenodd\"/></svg>","<svg viewBox=\"0 0 48 48\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18.2501 6.38126L14.1842 10.4471L27.7371 24L14.1842 37.5529L18.2501 41.6187L31.803 28.0659L35.8688 24L31.803 19.9341L18.2501 6.38126Z\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M40.2922 38.375L44.1256 38.375L44.1256 9.625L40.2922 9.625L40.2922 38.375Z\"/>\n</svg>\n","import { IconFactory } from '../IconFactory'\n\nimport BackIcon from './assets/back.svg'\nimport BurguerMenuIcon from './assets/burger-menu.svg'\nimport CalendarIcon from './assets/calendar.svg'\nimport CaretDownIcon from './assets/caret-down.svg'\nimport CaretLeftIcon from './assets/caret-left.svg'\nimport CheckIcon from './assets/check.svg'\nimport ChevronDownIcon from './assets/chevron-down.svg'\nimport ChevronRightIcon from './assets/caret-right.svg'\nimport CircleIcon from './assets/circle.svg'\nimport CloseIcon from './assets/close.svg'\nimport InformationIcon from './assets/information.svg'\nimport MinusIcon from './assets/minus.svg'\nimport PlusIcon from './assets/plus.svg'\nimport RefreshIcon from './assets/refresh.svg'\nimport SortAscIcon from './assets/sort-asc.svg'\nimport SortDescIcon from './assets/sort-desc.svg'\nimport SortIcon from './assets/sort.svg'\nimport UploadIcon from './assets/upload.svg'\nimport WarningIcon from './assets/warning.svg'\nimport DotsHorizontalIcon from './assets/dots-horizontal.svg'\nimport CaretRightLastIcon from './assets/caret-right-last.svg'\n\nimport type { IconProps as GenericIconProps } from '../IconFactory'\n\nconst icons = {\n 'burguer-menu': BurguerMenuIcon as JSX.Element,\n calendar: CalendarIcon as JSX.Element,\n 'caret-down': CaretDownIcon as JSX.Element,\n 'caret-left': CaretLeftIcon as JSX.Element,\n 'caret-right': ChevronRightIcon as JSX.Element,\n 'chevron-down': ChevronDownIcon as JSX.Element,\n back: BackIcon as JSX.Element,\n check: CheckIcon as JSX.Element,\n circle: CircleIcon as JSX.Element,\n close: CloseIcon as JSX.Element,\n information: InformationIcon as JSX.Element,\n minus: MinusIcon as JSX.Element,\n plus: PlusIcon as JSX.Element,\n refresh: RefreshIcon as JSX.Element,\n sort: SortIcon as JSX.Element,\n 'sort-asc': SortAscIcon as JSX.Element,\n 'sort-desc': SortDescIcon as JSX.Element,\n upload: UploadIcon as JSX.Element,\n warning: WarningIcon as JSX.Element,\n 'dots-horizontal': DotsHorizontalIcon as JSX.Element,\n 'caret-right-last': CaretRightLastIcon as JSX.Element,\n}\n\nconst Icon = IconFactory(icons)\n\nexport type IconProps = GenericIconProps<typeof icons>\n\nexport default Icon\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array ? array.length : 0;\n return length ? baseFlatten(array, 1) : [];\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = flatten;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap');\n\n/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */\nvar nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' ||\n typeof value.splice == 'function' || isBuffer(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (nonEnumShadows || isPrototype(value)) {\n return !nativeKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEmpty;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport flatten from './flatten'\nimport isEmpty from './isEmpty'\nimport toArray from './toArray'\n\n// TODO: add this helper to @loadsmart/utils\n\nfunction interleave<T>(array1: Array<T>, array2: Array<T>): T[] {\n const safeArray1 = toArray(array1)\n const safeArray2 = toArray(array2)\n\n if (isEmpty(safeArray1) && isEmpty(safeArray2)) {\n return []\n } else if (isEmpty(safeArray1)) {\n return safeArray2\n } else if (isEmpty(safeArray2)) {\n return safeArray1\n }\n\n return flatten(safeArray1.map((element, index) => [element, safeArray2[index]]))\n}\n\nexport default interleave\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport interleave from 'utils/toolset/interleave'\nimport type { InterpolatedStyle } from 'utils/types/InterpolatedStyle'\n\n/**\n * Add basic CSS style wrapping block for `:active` state.\n * It returns an array to allow handling of nested interpolation\n * @param {ReadonlyArray<string> | Array<string>} strings - String parts for the interpolation.\n * @param {any[]} args - Interpolated items.\n * @returns {any[]}\n */\nfunction activatableStyle(\n strings?: ReadonlyArray<string> | Array<string>,\n ...args: any[]\n): InterpolatedStyle {\n const safeStrings = (strings || []).concat() // ReadonlyArray -> Array\n\n return [\n `\n &:enabled:not(.is-disabled) {\n &:active {`,\n ...(interleave(safeStrings, args) as InterpolatedStyle),\n `\n }\n }\n `,\n ]\n}\n\nexport default activatableStyle\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport interleave from 'utils/toolset/interleave'\nimport type { InterpolatedStyle } from 'utils/types/InterpolatedStyle'\n\n/**\n * Add basic CSS style wrapping block for `:disabled` state or `.is-disabled` class.\n * It returns an array to allow handling of nested interpolation\n * @param {ReadonlyArray<string> | Array<string>} strings - String parts for the interpolation.\n * @param {any[]} args - Interpolated items.\n * @returns {any[]}\n */\nfunction disableableStyle(\n strings?: ReadonlyArray<string> | Array<string>,\n ...args: any[]\n): InterpolatedStyle {\n const safeStrings = (strings || []).concat() // ReadonlyArray -> Array\n\n return [\n `\n &.is-disabled,\n &:disabled {\n cursor: not-allowed;\n opacity: 0.40;\n\n user-select: none;\n\n &:active {\n pointer-events: none;\n }`,\n ...(interleave(safeStrings, args) as InterpolatedStyle),\n `\n }\n\n // prevent overlapping the opacity for nested disabled elements\n .is-disabled &.is-disabled,\n .is-disabled &[disabled],\n [disabled] &[disabled],\n [disabled] &.is-disabled {\n opacity: 1 !important;\n }\n `,\n ]\n}\n\nexport default disableableStyle\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport interleave from 'utils/toolset/interleave'\nimport type { InterpolatedStyle } from 'utils/types/InterpolatedStyle'\n/**\n * Add basic CSS style wrapping block for `:active` state.\n * It returns an array to allow handling of nested interpolation\n * @param {ReadonlyArray<string> | Array<string>} strings - String parts for the interpolation.\n * @param {any[]} args - Interpolated items.\n * @returns {any[]}\n */\nfunction focusableStyle(\n strings?: ReadonlyArray<string> | Array<string>,\n ...args: any[]\n): InterpolatedStyle {\n const safeStrings = (strings || []).concat() // ReadonlyArray -> Aray\n\n return [\n `\n outline: none;\n\n &:focus,\n &:focus-within,\n &.is-focused {\n outline: none;`,\n ...(interleave(safeStrings, args) as InterpolatedStyle),\n `\n }\n `,\n ]\n}\n\nexport default focusableStyle\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport interleave from 'utils/toolset/interleave'\nimport type { InterpolatedStyle } from 'utils/types/InterpolatedStyle'\n\n/**\n * Add basic CSS style wrapping block for `:hover` state; it includes check for non-disabled (`:enabled` or not `.is-disabled`) elements.\n * It returns an array to allow handling of nested interpolation\n * @param {ReadonlyArray<string> | Array<string>} strings - String parts for the interpolation.\n * @param {any[]} args - Interpolated items.\n * @returns {any[]}\n */\nfunction hoverableStyle(\n strings?: ReadonlyArray<string> | Array<string>,\n ...args: any[]\n): InterpolatedStyle {\n const safeStrings = (strings || []).concat() // ReadonlyArray -> Array\n\n return [\n `\n &:not(.is-disabled):not(:disabled) {\n &:hover {`,\n ...(interleave(safeStrings, args) as InterpolatedStyle),\n `\n }\n }\n `,\n ]\n}\n\nexport default hoverableStyle\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeMax = Math.max;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, props) {\n object = Object(object);\n return basePickBy(object, props, function(value, key) {\n return key in object;\n });\n}\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick from.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, props, predicate) {\n var index = -1,\n length = props.length,\n result = {};\n\n while (++index < length) {\n var key = props[index],\n value = object[key];\n\n if (predicate(value, key)) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Creates an array of the own and inherited enumerable symbol properties\n * of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable string keyed properties of `object` that are\n * not omitted.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [props] The property identifiers to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = baseRest(function(object, props) {\n if (object == null) {\n return {};\n }\n props = arrayMap(baseFlatten(props, 1), toKey);\n return basePick(object, baseDifference(getAllKeysIn(object), props));\n});\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = omit;\n","import { css } from 'styled-components'\nimport type { FlattenInterpolation } from 'styled-components'\n\nimport { getToken } from 'theming'\nimport type { ThemedProps, ThemeToken } from 'theming'\n\ninterface FontStyleOptions {\n size?: ThemeToken\n family?: ThemeToken\n weight?: ThemeToken\n height?: ThemeToken\n color?: ThemeToken\n transform?: 'uppercase' | 'none'\n}\n\n/**\n * Add basic CSS style for default font\n * @returns {FlattenInterpolation}\n */\nfunction fontStyle({\n color = 'color-neutral-darkest',\n weight = 'font-weight-regular',\n size = 'font-size-4',\n family = 'font-family-default',\n height = 'font-height-3',\n transform = 'none',\n}: FontStyleOptions): FlattenInterpolation<ThemedProps> {\n return css`\n color: ${getToken(color)};\n font-weight: ${getToken(weight)};\n font-size: ${getToken(size)};\n font-family: ${getToken(family)};\n line-height: ${getToken(height)};\n text-transform: ${transform};\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n `\n}\n\nexport default fontStyle\n","import { css, ThemedStyledProps } from 'styled-components'\nimport type { FlattenInterpolation } from 'styled-components'\nimport { isFunction } from '@loadsmart/utils-function'\n\nimport conditional from 'tools/conditional'\nimport type { CustomTheme, ThemeToken } from 'theming'\nimport fontStyle from './font'\n\nexport type TypographyOptions = {\n italic?: boolean\n color?: ThemeToken\n}\n\ntype PropertiesToken = {\n fontSize: ThemeToken\n lineHeight: ThemeToken\n fontWeight: ThemeToken\n fontFamily?: ThemeToken\n textTransform?: 'none' | 'uppercase'\n color?: ThemeToken\n}\n\nexport type TypographyVariants =\n | 'heading-lg'\n | 'heading-md'\n | 'heading-md-bold'\n | 'heading-sm'\n | 'heading-sm-bold'\n | 'body'\n | 'body-bold'\n | 'caption'\n | 'caption-bold'\n | 'number-sm'\n | 'number-md'\n | 'button-sm'\n | 'button-md'\n | 'button-lg'\n | 'table-header-sm'\n | 'table-header-md'\n | 'chips-sm'\n | 'link'\n\ntype TypographyProperties = Record<TypographyVariants, PropertiesToken>\n\nexport const typographyProperties: TypographyProperties = {\n 'heading-lg': {\n fontSize: 'font-size-1',\n lineHeight: 'font-height-1',\n fontWeight: 'font-weight-bold',\n },\n 'heading-md': {\n fontSize: 'font-size-2',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-medium',\n },\n 'heading-md-bold': {\n fontSize: 'font-size-2',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-bold',\n },\n 'heading-sm': {\n fontSize: 'font-size-3',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-medium',\n },\n 'heading-sm-bold': {\n fontSize: 'font-size-3',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-bold',\n },\n body: {\n fontSize: 'font-size-4',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-medium',\n },\n 'body-bold': {\n fontSize: 'font-size-4',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-bold',\n },\n caption: {\n fontSize: 'font-size-5',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-medium',\n },\n 'caption-bold': {\n fontSize: 'font-size-5',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-bold',\n },\n 'number-sm': {\n fontFamily: 'font-family-monospace',\n fontSize: 'font-size-5',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-medium',\n },\n 'number-md': {\n fontFamily: 'font-family-monospace',\n fontSize: 'font-size-4',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-medium',\n },\n 'button-sm': {\n fontSize: 'font-size-5',\n lineHeight: 'font-height-1',\n fontWeight: 'font-weight-bold',\n textTransform: 'uppercase',\n },\n 'button-md': {\n fontSize: 'font-size-4',\n lineHeight: 'font-height-1',\n fontWeight: 'font-weight-bold',\n textTransform: 'uppercase',\n },\n 'button-lg': {\n fontSize: 'font-size-3',\n lineHeight: 'font-height-1',\n fontWeight: 'font-weight-bold',\n textTransform: 'uppercase',\n },\n 'table-header-sm': {\n fontSize: 'font-size-5',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-bold',\n },\n 'table-header-md': {\n fontSize: 'font-size-4',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-bold',\n textTransform: 'uppercase',\n },\n 'chips-sm': {\n fontSize: 'font-size-6',\n lineHeight: 'font-height-3',\n fontWeight: 'font-weight-bold',\n textTransform: 'uppercase',\n },\n link: {\n fontSize: 'font-size-4',\n lineHeight: 'font-height-2',\n fontWeight: 'font-weight-medium',\n color: 'color-accent',\n },\n}\n\nconst DEFAULT_VARIANT: TypographyVariants = 'body'\n\nfunction getPropertiesByVariant(variant: TypographyVariants) {\n return variant in typographyProperties\n ? typographyProperties[variant]\n : typographyProperties[DEFAULT_VARIANT]\n}\n\ntype StyledTemplate<P> = FlattenInterpolation<ThemedStyledProps<P, CustomTheme>>\n\n/**\n * Standard styles for screen-rendered text\n * @param {TypographyVariants} variant Name of the variant\n * @param {TypographyOptions} options Add boldness, italics and color\n * @returns {FlattenInterpolation}\n */\nfunction typography<P>(\n variant: TypographyVariants | ((props: P) => string) = DEFAULT_VARIANT,\n options?: TypographyOptions\n): StyledTemplate<P> | ((props: P) => StyledTemplate<P>) {\n if (isFunction(variant)) {\n return ((props: P) => typography(variant(props) as TypographyVariants, options)) as (\n props: P\n ) => StyledTemplate<P>\n }\n\n const properties = getPropertiesByVariant(variant)\n\n return css`\n ${fontStyle({\n family: properties.fontFamily,\n height: properties.lineHeight,\n size: properties.fontSize,\n weight: properties.fontWeight,\n transform: properties.textTransform,\n color: properties.color || options?.color,\n })}\n\n ${conditional({\n 'font-style: italic;': options?.italic,\n })};\n `\n}\n\nexport default typography\n","import React from 'react'\nimport styled, { keyframes } from 'styled-components'\n\nconst ANIMATION_DURATION = 0.8\n\nconst animation = keyframes`\n 0% { opacity: 0 }\n 25% { opacity: 1 }\n 50% { opacity: 0.66 }\n 75% { opacity: 0.33; }\n 100% { opacity: 0 }\n`\n\ninterface LayerProps {\n index: number\n}\n\nconst Layer = styled.path<LayerProps>`\n animation-name: ${animation};\n animation-duration: ${ANIMATION_DURATION}s;\n animation-delay: -${(props) => props.index * (ANIMATION_DURATION / 4)}s;\n animation-iteration-count: infinite;\n`\n\nexport interface SpinnerProps {\n title?: string\n size: number\n}\n\nexport default function Spinner({ title, size, ...props }: SpinnerProps): JSX.Element {\n return (\n <svg\n {...props}\n viewBox=\"0 0 48 48\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n strokeMiterlimit=\"2\"\n clipRule=\"evenodd\"\n width={size}\n height={size}\n >\n <title>{title || 'Loading'}</title>\n <g\n id=\"surface1\"\n transform=\"matrix(0.0806777,0,0,0.0806777,0,-9.96047)\"\n fill=\"#33CC60\"\n fillRule=\"nonzero\"\n >\n <Layer\n index={0}\n d=\"M362.176,638.695C366.445,638.695 370.535,637 373.527,633.996L505.332,502.211L224.305,502.211C222.074,502.211 220.066,501.316 218.617,499.855L84.488,633.996C87.395,636.902 91.406,638.695 95.82,638.695L362.176,638.695Z\"\n />\n <Layer\n index={1}\n d=\"M376.164,482.289L512.648,482.289L512.648,217.34C512.648,212.906 510.855,208.898 507.945,205.988L373.809,340.121C375.266,341.578 376.164,343.59 376.164,345.805L376.164,482.289Z\"\n />\n <Layer\n index={2}\n d=\"M500.48,201.746L235.535,201.746L235.535,338.23L372.02,338.23C374.234,338.23 376.246,339.129 377.703,340.586L511.832,206.445C508.926,203.539 504.918,201.746 500.48,201.746Z\"\n />\n <Layer\n index={3}\n d=\"M215.449,495.488L215.449,214.461L83.668,346.262C80.66,349.289 78.965,353.359 78.965,357.625L78.965,623.973C78.965,628.398 80.758,632.406 83.668,635.313L217.805,501.176C216.348,499.715 215.449,497.707 215.449,495.488Z\"\n />\n </g>\n </svg>\n )\n}\n","import { css } from 'styled-components'\n\nimport type { FlattenInterpolation } from 'styled-components'\nimport type { ThemedProps } from 'theming'\n\nimport conditional, { whenProps } from 'tools/conditional'\n\nexport const getSpace = (prop: string): FlattenInterpolation<ThemedProps> => css`\n ${conditional({\n 'space-none': whenProps({ [prop]: 'none' }),\n 'space-2xs': whenProps({ [prop]: '2xs' }),\n 'space-xs': whenProps({ [prop]: 'xs' }),\n 'space-s': whenProps({ [prop]: 's' }),\n 'space-m': whenProps({ [prop]: 'm' }),\n 'space-l': whenProps({ [prop]: 'l' }),\n 'space-xl': whenProps({ [prop]: 'xl' }),\n 'space-2xl': whenProps({ [prop]: '2xl' }),\n 'space-3xl': whenProps({ [prop]: '3xl' }),\n })}\n`\n","import React from 'react'\nimport type { HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\n\nimport { getSpace } from './Layout.utils'\nimport type { Spacing, JustifyValue, AlignValue } from './Layout.types'\n\nexport interface GroupProps extends HTMLAttributes<HTMLElement> {\n space?: Spacing\n justify?: JustifyValue\n align?: AlignValue\n as?: string | React.ComponentType<any>\n}\n\nconst GroupContainer = styled.div<{\n $space: GroupProps['space']\n $justify: GroupProps['justify']\n $align: GroupProps['align']\n}>`\n display: flex;\n flex-wrap: wrap;\n gap: ${getSpace('$space')};\n\n align-items: ${conditional({\n center: whenProps({ $align: 'center' }),\n 'flex-start': whenProps({ $align: 'flex-start' }),\n 'flex-end': whenProps({ $align: 'flex-end' }),\n stretch: whenProps({ $align: 'stretch' }),\n })};\n\n justify-content: ${conditional({\n center: whenProps({ $justify: 'center' }),\n 'flex-start': whenProps({ $justify: 'flex-start' }),\n 'flex-end': whenProps({ $justify: 'flex-end' }),\n 'space-between': whenProps({ $justify: 'space-between' }),\n 'space-around': whenProps({ $justify: 'space-around' }),\n 'space-evenly': whenProps({ $justify: 'space-evenly' }),\n })};\n`\n\n/**\n * Group layout component.\n * @param {GroupProps} props\n */\nexport function Group(props: GroupProps): JSX.Element {\n const { space = 'm', justify = 'flex-start', align = 'flex-start', children, ...rest } = props\n\n return (\n <GroupContainer $space={space} $justify={justify} $align={align} {...rest}>\n {children}\n </GroupContainer>\n )\n}\n","import React from 'react'\nimport type { HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\n\nimport { getSpace } from './Layout.utils'\nimport type { Spacing, JustifyValue, AlignValue } from './Layout.types'\n\nexport interface StackProps extends HTMLAttributes<HTMLElement> {\n space?: Spacing\n justify?: JustifyValue\n align?: AlignValue\n as?: string | React.ComponentType<any>\n}\n\nexport const StackContainer = styled.div<{\n $space: StackProps['space']\n $justify: StackProps['justify']\n $align: StackProps['align']\n}>`\n display: flex;\n flex-direction: column;\n\n align-items: ${conditional({\n center: whenProps({ $align: 'center' }),\n 'flex-start': whenProps({ $align: 'flex-start' }),\n 'flex-end': whenProps({ $align: 'flex-end' }),\n stretch: whenProps({ $align: 'stretch' }),\n })};\n\n justify-content: ${conditional({\n center: whenProps({ $justify: 'center' }),\n 'flex-start': whenProps({ $justify: 'flex-start' }),\n 'flex-end': whenProps({ $justify: 'flex-end' }),\n 'space-between': whenProps({ $justify: 'space-between' }),\n 'space-around': whenProps({ $justify: 'space-around' }),\n 'space-evenly': whenProps({ $justify: 'space-evenly' }),\n })};\n\n & > * {\n margin-top: 0;\n margin-bottom: 0;\n }\n\n & > * + * {\n margin-top: ${getSpace('$space')};\n }\n`\n\n/**\n * Stack layout component.\n * @param {StackProps} props\n */\nexport function Stack(props: StackProps): JSX.Element {\n const { space = 'm', justify = 'flex-start', align = 'stretch', children, ...rest } = props\n\n return (\n <StackContainer $space={space} $justify={justify} $align={align} {...rest}>\n {children}\n </StackContainer>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport type { Spacing } from './Layout.types'\nimport { getSpace } from './Layout.utils'\n\nimport type { HTMLAttributes } from 'react'\n\nexport interface BoxProps extends HTMLAttributes<HTMLElement> {\n background?: 'transparent' | 'neutral-white' | 'neutral-lighter' | 'neutral-lightest'\n padding?: Spacing\n borderRadius?: 'none' | 's' | 'm' | 'l'\n borderWidth?: 'medium' | 'thin' | 'none'\n borderColor?: 'neutral-darker' | 'neutral-light' | 'neutral-lighter' | 'neutral-white' | 'primary'\n textAlign?: 'left' | 'center' | 'right'\n}\n\nconst BoxContainer = styled.div<{\n $background: BoxProps['background']\n $padding: BoxProps['padding']\n $borderRadius: BoxProps['borderRadius']\n $borderWidth: BoxProps['borderWidth']\n $borderColor: BoxProps['borderColor']\n $textAlign: BoxProps['textAlign']\n}>`\n padding: ${getSpace('$padding')};\n\n color: ${token('color-neutral-darker')};\n\n text-align: ${conditional({\n left: whenProps({ $textAlign: 'left' }),\n center: whenProps({ $textAlign: 'center' }),\n right: whenProps({ $textAlign: 'right' }),\n })};\n\n background-color: ${conditional({\n 'color-transparent': whenProps({ $background: 'transparent' }),\n 'color-neutral-white': whenProps({ $background: 'neutral-white' }),\n 'color-neutral-lighter': whenProps({ $background: 'neutral-lighter' }),\n 'color-neutral-lightest': whenProps({ $background: 'neutral-lightest' }),\n })};\n\n border-color: ${conditional({\n 'color-neutral-darker': whenProps({ $borderColor: 'neutral-darker' }),\n 'color-neutral-light': whenProps({ $borderColor: 'neutral-light' }),\n 'color-neutral-lighter': whenProps({ $borderColor: 'neutral-lighter' }),\n 'color-neutral-white': whenProps({ $borderColor: 'neutral-white' }),\n 'color-primary': whenProps({ $borderColor: 'primary' }),\n })};\n\n border-style: solid;\n\n border-width: ${conditional({\n 'border-width-medium': whenProps({ $borderWidth: 'medium' }),\n 'border-width-thin': whenProps({ $borderWidth: 'thin' }),\n 'border-width-none': whenProps({ $borderWidth: 'none' }),\n })};\n\n border-radius: ${conditional({\n 'border-radius-none': whenProps({ $borderRadius: 'none' }),\n 'border-radius-s': whenProps({ $borderRadius: 's' }),\n 'border-radius-m': whenProps({ $borderRadius: 'm' }),\n 'border-radius-l': whenProps({ $borderRadius: 'l' }),\n })};\n`\n\n/**\n * Box layout component.\n * @param {BoxProps} props\n */\nexport function Box(props: BoxProps): JSX.Element {\n const {\n background = 'transparent',\n borderColor = 'neutral-light',\n borderRadius = 's',\n borderWidth = 'none',\n padding = 'm',\n textAlign = 'left',\n children,\n ...rest\n } = props\n\n return (\n <BoxContainer\n $background={background}\n $borderColor={borderColor}\n $borderRadius={borderRadius}\n $borderWidth={borderWidth}\n $padding={padding}\n $textAlign={textAlign}\n {...rest}\n >\n {children}\n </BoxContainer>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\nimport prop from 'tools/prop'\n\nimport type { Spacing } from './Layout.types'\nimport { getSpace } from './Layout.utils'\n\nimport type { HTMLAttributes } from 'react'\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement> {\n space?: Spacing\n reversed?: boolean\n sideWidth?: string\n minContentWidth?: string\n}\n\nconst SidebarContainer = styled.div<{\n $space: SidebarProps['space']\n $reversed: SidebarProps['reversed']\n $sideWidth: SidebarProps['sideWidth']\n $minContentWidth: SidebarProps['minContentWidth']\n}>`\n display: flex;\n flex-wrap: wrap;\n\n gap: ${getSpace('$space')};\n\n &\n > ${conditional({\n ':first-child': whenProps({ $reversed: false }),\n ':last-child': whenProps({ $reversed: true }),\n })} {\n flex-basis: ${prop('$sideWidth')};\n flex-grow: 1;\n }\n\n &\n > ${conditional({\n ':first-child': whenProps({ $reversed: true }),\n ':last-child': whenProps({ $reversed: false }),\n })} {\n flex-basis: 0;\n flex-grow: 999;\n min-width: ${prop('$minContentWidth')};\n }\n`\n\n/**\n * Sidebar layout component.\n * @param {SidebarProps} props\n */\nexport function Sidebar(props: SidebarProps): JSX.Element {\n const {\n minContentWidth = '50%',\n reversed = false,\n sideWidth = 'auto',\n space = 'm',\n children,\n ...rest\n } = props\n\n return (\n <SidebarContainer\n $minContentWidth={minContentWidth}\n $reversed={reversed}\n $sideWidth={sideWidth}\n $space={space}\n {...rest}\n >\n {children}\n </SidebarContainer>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport prop from 'tools/prop'\n\nimport type { Spacing } from './Layout.types'\nimport { getSpace } from './Layout.utils'\n\nimport type { HTMLAttributes } from 'react'\n\nexport interface SwitcherProps extends HTMLAttributes<HTMLElement> {\n space?: Spacing\n threshold?: string\n limit?: number\n}\n\nconst SwitcherContainer = styled.div<{\n $space: SwitcherProps['space']\n $threshold: SwitcherProps['threshold']\n $limit: SwitcherProps['limit']\n}>`\n display: flex;\n flex-wrap: wrap;\n gap: ${getSpace('$space')};\n\n > * {\n flex-basis: calc((${prop('$threshold')} - 100%) * 999);\n flex-grow: 1;\n }\n\n & > :nth-last-child(n + ${prop('$limit')}),\n & > :nth-last-child(n + ${prop('$limit')}) ~ * {\n flex-basis: 100%;\n }\n`\n\n/**\n * Switcher layout component.\n * @param {SwitcherProps} props\n */\nexport function Switcher(props: SwitcherProps): JSX.Element {\n const { limit = 4, space = 's', threshold = '10rem', children, ...rest } = props\n\n return (\n <SwitcherContainer $space={space} $threshold={threshold} $limit={limit + 1} {...rest}>\n {children}\n </SwitcherContainer>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport prop from 'tools/prop'\n\nimport { getSpace } from 'components/Layout/Layout.utils'\nimport type { Spacing } from './Layout.types'\n\nimport type { HTMLAttributes } from 'react'\n\nexport interface GridProps extends HTMLAttributes<HTMLElement> {\n space?: Spacing\n minColumnWidth?: string\n}\n\nconst GridContainer = styled.div<{\n $space: GridProps['space']\n $minColumnWidth: GridProps['minColumnWidth']\n}>`\n display: grid;\n grid-gap: ${getSpace('$space')};\n\n @supports (width: min(${prop('$minColumnWidth')}, 100%)) {\n & {\n grid-template-columns: repeat(auto-fit, minmax(min(${prop('$minColumnWidth')}, 100%), 1fr));\n }\n }\n`\n\n/**\n * Grid layout component.\n * @param {GridProps} props\n */\nexport function Grid(props: GridProps): JSX.Element {\n const { space = 'm', minColumnWidth = '50%', children, ...rest } = props\n\n return (\n <GridContainer $space={space} $minColumnWidth={minColumnWidth} {...rest}>\n {children}\n </GridContainer>\n )\n}\n","import { Group } from './Group'\nimport { Stack } from './Stack'\nimport { Box } from './Box'\nimport { Sidebar } from './Sidebar'\nimport { Switcher } from './Switcher'\nimport { Grid } from './Grid'\n\nconst Layout = (): null => {\n return null\n}\n\nLayout.Group = Group\nLayout.Stack = Stack\nLayout.Box = Box\nLayout.Sidebar = Sidebar\nLayout.Switcher = Switcher\nLayout.Grid = Grid\n\nexport default Layout\n","import { Layout } from 'components/Layout'\nimport React from 'react'\nimport styled, { keyframes } from 'styled-components'\nimport { getToken as token } from 'theming'\n\nconst loading = keyframes` \n from {\n width: 0\n }\n to {\n width: 100%\n } \n`\n\nexport const Bar = styled.div<{ width?: number; velocity?: number }>`\n position: relative;\n\n width: ${({ width }) => (width ? `${width}px` : '100%')};\n height: ${token('space-s')};\n overflow: hidden;\n\n background-color: ${token('color-neutral-light')};\n border-radius: ${token('border-radius-m')};\n\n &:before {\n position: absolute;\n\n display: block;\n width: 100%;\n height: ${token('space-s')};\n\n background-color: ${token('color-primary')};\n\n animation: ${loading} ${({ velocity }) => (velocity && velocity > 0 ? velocity : 2.5)}s linear\n infinite;\n\n content: '';\n }\n`\n\nexport interface LoadingBarProps {\n alignment?: 'left' | 'center' | 'right'\n title?: React.ReactNode\n secondaryTitle?: React.ReactNode\n width?: number | undefined\n velocity?: number | undefined\n}\n\nexport default function LoadingBar({\n alignment,\n title,\n secondaryTitle,\n width = undefined,\n velocity = 2.5,\n}: LoadingBarProps): JSX.Element {\n return (\n <Layout.Box textAlign={alignment}>\n <Layout.Stack space=\"s\">\n {title}\n <Bar width={width} velocity={velocity} />\n {secondaryTitle}\n </Layout.Stack>\n </Layout.Box>\n )\n}\n","import React from 'react'\nimport styled, { keyframes } from 'styled-components'\nimport conditional, { whenProps } from 'tools/conditional'\nimport prop from 'tools/prop'\nimport { getToken as token } from 'theming'\n\nconst pulse = keyframes`\n 50% {\n opacity: 0.2;\n }\n\n 100% {\n opacity: 1;\n }\n`\n\nconst Wrapper = styled.div`\n text-align: center;\n\n div:nth-child(1) {\n animation: ${pulse} 1s infinite ease-in-out -0.2s;\n }\n\n div:nth-child(2) {\n animation: ${pulse} 1s infinite ease-in-out -0.1s;\n }\n\n div:nth-child(3) {\n animation: ${pulse} 1s infinite ease-in-out 0s;\n }\n`\n\ninterface DotProps {\n size?: number\n variant?: 'light' | 'dark'\n}\n\nconst Dot = styled.div<DotProps>`\n display: inline-block;\n width: ${prop('size')}px;\n height: ${prop('size')}px;\n margin: ${token('space-2xs')};\n\n background-color: ${conditional({\n 'color-neutral-white': whenProps({ variant: 'light' }),\n 'color-neutral-dark': whenProps({ variant: 'dark' }),\n })};\n border-radius: ${token('border-radius-circle')};\n`\n\nexport interface LoadingDotsProps {\n size?: number\n variant?: 'dark' | 'light'\n}\n\nexport default function LoadingDots({\n size = 10,\n variant = 'dark',\n ...props\n}: LoadingDotsProps): JSX.Element {\n return (\n <Wrapper role=\"progressbar\" aria-label=\"Loading\" {...props}>\n <Dot size={size} variant={variant} />\n <Dot size={size} variant={variant} />\n <Dot size={size} variant={variant} />\n </Wrapper>\n )\n}\n","import React, { forwardRef } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\nimport activatable from 'styles/activatable'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport ellipsizable from 'styles/ellipsizable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport omit from 'utils/toolset/omit'\nimport rem from 'utils/toolset/rem'\nimport transition from 'styles/transition'\nimport typography from 'styles/typography'\n\nimport { LoadingDots } from 'components/Loaders'\n\nimport type { ButtonHTMLAttributes, ForwardedRef, ReactNode } from 'react'\nimport type { IconProps } from 'components/Icon'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport type { LoadingDotsProps } from 'components/Loaders'\n\nexport type ButtonVariants = 'primary' | 'secondary' | 'warning' | 'icon' | 'tertiary'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n className?: string\n leading?: ReactNode\n scheme?: ColorScheme\n trailing?: ReactNode\n variant?: ButtonVariants\n scale?: 'small' | 'default' | 'large'\n loading?: boolean\n}\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n padding: ${rem('6px')} 0;\n`\n\nconst Leading = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst Trailing = styled(StyledSpan)`\n /* placeholder */\n`\n\nexport const Children = styled.span<ButtonProps>`\n ${({ children }) =>\n typeof children === 'string'\n ? ellipsizable()\n : `\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n `}\n\n padding: ${rem('6px')} 0;\n`\n\nconst BaseStyledButton = styled.button<{\n $scale: ButtonProps['scale']\n $loading?: ButtonProps['loading']\n}>`\n ${transition()}\n\n ${typography(\n conditional({\n 'button-md': whenProps({ $scale: 'default' }),\n 'button-sm': whenProps({ $scale: 'small' }),\n 'button-lg': whenProps({ $scale: 'large' }),\n })\n )}\n\n box-sizing: border-box;\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n text-transform: uppercase;\n text-align: center;\n\n cursor: pointer;\n\n border-radius: ${token('border-radius-s')};\n border-width: ${token('border-width-thin')};\n border-style: solid;\n border-color: ${token('color-neutral-darker')};\n\n height: ${conditional({\n 'button-height': whenProps({ $scale: 'default' }),\n 'button-small-height': whenProps({ $scale: 'small' }),\n 'button-large-height': whenProps({ $scale: 'large' }),\n })};\n\n padding: 0 8px;\n\n ${disableable()}\n\n ${({ $loading }) =>\n $loading\n ? css`\n pointer-events: none;\n position: relative;\n `\n : ''}\n\n ${Leading} {\n margin: 0 ${token('space-xs')} 0 0;\n }\n\n ${Trailing} {\n margin: 0 0 0 ${token('space-xs')};\n }\n`\n\nconst StyledButton = styled(BaseStyledButton)<{\n $variant: ButtonProps['variant']\n $scale: ButtonProps['scale']\n $scheme: ButtonProps['scheme']\n}>`\n width: ${conditional({\n 'button-width': whenProps({ $variant: ['primary', 'secondary', 'warning', 'tertiary'] }),\n 'button-icon-width': whenProps({ $variant: 'icon', $scale: 'default' }),\n 'button-icon-small-width': whenProps({ $variant: 'icon', $scale: 'small' }),\n 'button-icon-large-width': whenProps({ $variant: 'icon', $scale: 'large' }),\n })};\n\n height: ${conditional({\n 'button-height': whenProps({ $scale: 'default' }),\n 'button-small-height': whenProps({ $scale: 'small' }),\n 'button-large-height': whenProps({ $scale: 'large' }),\n })};\n\n color: ${conditional({\n 'button-primary-color': whenProps({ $variant: 'primary' }),\n 'button-secondary-color': whenProps({ $variant: 'secondary', $scheme: 'light' }),\n 'button-secondary-dark-color': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-color': whenProps({ $variant: 'tertiary' }),\n 'button-warning-color': whenProps({ $variant: 'warning' }),\n 'button-icon-color': whenProps({ $variant: 'icon' }),\n })};\n\n background: ${conditional({\n 'button-primary-background': whenProps({ $variant: 'primary' }),\n 'button-secondary-background': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-background': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-background': whenProps({\n $variant: 'tertiary',\n }),\n 'button-warning-background': whenProps({ $variant: 'warning' }),\n 'button-icon-background': whenProps({ $variant: 'icon' }),\n })};\n\n border-color: ${conditional({\n 'button-primary-border-color': whenProps({ $variant: 'primary' }),\n 'button-secondary-border-color': whenProps({ $variant: 'secondary', $scheme: 'light' }),\n 'button-secondary-dark-border-color': whenProps({ $variant: 'secondary', $scheme: 'dark' }),\n 'button-tertiary-border-color': whenProps({ $variant: 'tertiary' }),\n 'button-warning-border-color': whenProps({ $variant: 'warning' }),\n 'button-icon-border-color': whenProps({ $variant: 'icon' }),\n })};\n border-radius: ${conditional({\n 'button-border-radius': whenProps({ $variant: ['primary', 'secondary', 'warning'] }),\n 'button-icon-border-radius': whenProps({ $variant: 'icon' }),\n })};\n\n ${hoverable`\n background: ${conditional({\n 'button-primary-background--hover': whenProps({ $variant: 'primary' }),\n 'button-secondary-background--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-background--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-background--hover': whenProps({\n $variant: 'tertiary',\n }),\n 'button-warning-background--hover': whenProps({ $variant: 'warning' }),\n 'button-icon-background--hover': whenProps({ $variant: 'icon' }),\n })};\n border-color: ${conditional({\n 'button-primary-border-color--hover': whenProps({ $variant: 'primary' }),\n 'button-secondary-border-color--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-border-color--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-border-color--hover': whenProps({ $variant: 'tertiary' }),\n 'button-warning-border-color--hover': whenProps({ $variant: 'warning' }),\n 'button-icon-border-color--hover': whenProps({ $variant: 'icon' }),\n })};\n color: ${conditional({\n 'button-primary-color--hover': whenProps({ $variant: 'primary' }),\n 'button-secondary-color--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-color--hover': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-color--hover': whenProps({ $variant: 'tertiary' }),\n 'button-warning-color--hover': whenProps({ $variant: 'warning' }),\n 'button-icon-color--hover': whenProps({ $variant: 'icon' }),\n })};\n `}\n\n ${disableable`\n background: ${conditional({\n 'button-primary-background--disabled': whenProps({ $variant: 'primary' }),\n 'button-secondary-background--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-background--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-background--disabled': whenProps({ $variant: 'tertiary' }),\n 'button-warning-background--disabled': whenProps({ $variant: 'warning' }),\n 'button-icon-background--disabled': whenProps({ $variant: 'icon' }),\n })};\n border-color: ${conditional({\n 'button-primary-border-color--disabled': whenProps({ $variant: 'primary' }),\n 'button-secondary-border-color--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-border-color--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-border-color--disabled': whenProps({ $variant: 'tertiary' }),\n 'button-warning-border-color--disabled': whenProps({ $variant: 'warning' }),\n 'button-icon-border-color--disabled': whenProps({ $variant: 'icon' }),\n })};\n color: ${conditional({\n 'button-primary-color--disabled': whenProps({ $variant: 'primary' }),\n 'button-secondary-color--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-color--disabled': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-color--disabled': whenProps({ $variant: 'tertiary' }),\n 'button-warning-color--disabled': whenProps({ $variant: 'warning' }),\n 'button-icon-color--disabled': whenProps({ $variant: 'icon' }),\n })};\n `}\n\n ${focusable`\n background: ${conditional({\n 'button-primary-background--focus': whenProps({ $variant: 'primary' }),\n 'button-secondary-background--focus': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-background--focus': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-background--focus': whenProps({ $variant: 'tertiary' }),\n 'button-warning-background--focus': whenProps({ $variant: 'warning' }),\n 'button-icon-background--focus': whenProps({ $variant: 'icon' }),\n })};\n border-color: ${conditional({\n 'button-primary-border-color--focus': whenProps({ $variant: 'primary' }),\n 'button-secondary-border-color--focus': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-border-color--focus': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-tertiary-border-color--focus': whenProps({ $variant: 'tertiary' }),\n 'button-warning-border-color--focus': whenProps({ $variant: 'warning' }),\n 'button-icon-border-color--focus': whenProps({ $variant: 'icon' }),\n })};\n color: ${conditional({\n 'button-primary-color--focus': whenProps({ $variant: 'primary' }),\n 'button-secondary-color--focus': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-color--focus': whenProps({ $variant: 'secondary', $scheme: 'dark' }),\n 'button-tertiary-color--focus': whenProps({ $variant: 'tertiary' }),\n 'button-warning-color--focus': whenProps({ $variant: 'warning' }),\n 'button-icon-color--focus': whenProps({ $variant: 'icon' }),\n })};\n\n box-shadow: ${conditional({\n 'button-primary-box-shadow': whenProps({ $variant: 'primary' }),\n 'button-secondary-box-shadow': whenProps({ $variant: 'secondary' }),\n 'button-warning-box-shadow': whenProps({ $variant: 'warning' }),\n 'button-tertiary-box-shadow': whenProps({ $variant: 'tertiary' }),\n 'button-icon-box-shadow': whenProps({ $variant: 'icon' }),\n })};\n\n outline: ${conditional({\n 'button-primary-outline': whenProps({ $variant: 'primary' }),\n 'button-secondary-outline': whenProps({ $variant: 'secondary' }),\n 'button-tertiary-outline': whenProps({ $variant: 'tertiary' }),\n 'button-warning-outline': whenProps({ $variant: 'warning' }),\n 'button-icon-outline': whenProps({ $variant: 'icon' }),\n })};\n\n outline-offset: ${token('button-outline-offset')};\n `}\n\n ${activatable`\n background: ${conditional({\n 'button-primary-background--active': whenProps({ $variant: 'primary' }),\n 'button-secondary-background--active': whenProps({\n $variant: ['secondary', 'tertiary'],\n $scheme: 'light',\n }),\n 'button-secondary-dark-background--active': whenProps({\n $variant: ['secondary', 'tertiary'],\n $scheme: 'dark',\n }),\n 'button-warning-background--active': whenProps({ $variant: 'warning' }),\n 'button-icon-background--active': whenProps({ $variant: 'icon' }),\n })};\n border-color: ${conditional({\n 'button-primary-border-color--active': whenProps({ $variant: 'primary' }),\n 'button-secondary-border-color--active': whenProps({\n $variant: 'secondary',\n $scheme: 'light',\n }),\n 'button-secondary-dark-border-color--active': whenProps({\n $variant: 'secondary',\n $scheme: 'dark',\n }),\n 'button-warning-border-color--active': whenProps({ $variant: 'warning' }),\n 'button-icon-border-color--active': whenProps({ $variant: 'icon' }),\n 'color-transparent': whenProps({ $variant: 'tertiary' }),\n })};\n color: ${conditional({\n 'button-primary-color--active': whenProps({ $variant: 'primary' }),\n 'button-secondary-color--active': whenProps({\n $variant: ['secondary', 'tertiary'],\n $scheme: 'light',\n }),\n 'button-secondary-dark-color--active': whenProps({ $variant: 'secondary', $scheme: 'dark' }),\n 'button-warning-color--active': whenProps({ $variant: 'warning' }),\n 'button-icon-color--active': whenProps({ $variant: 'icon' }),\n })};\n `}\n\n ${Children} {\n margin: 0 ${token('button-spacing-x')};\n }\n\n ${Leading} {\n margin: 0 0 0 ${token('button-spacing-x')};\n }\n\n ${Trailing} {\n margin: 0 ${token('button-spacing-x')} 0 0;\n }\n`\n\nconst StyledSelector = styled(StyledButton)`\n ${Children} {\n flex: 1;\n }\n\n ${Trailing} {\n margin: 0;\n }\n`\n\nconst TextHidden = styled.span`\n transform: scale(0);\n`\n\n/**\n * Accessible attributes in `LoadingDots` aren't necessary\n * because the `Button` will keep its content, but invisible\n */\nconst StyledLoadingDots = styled(LoadingDots).attrs({\n 'aria-label': undefined,\n role: 'presentation',\n})`\n position: absolute;\n left: 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 100%;\n`\n\nconst ButtonLoadingDots = ({\n buttonVariant = 'secondary',\n ...remainingProps\n}: Omit<LoadingDotsProps, 'variant'> & { buttonVariant?: ButtonVariants }) => {\n const buttonLightVariants = new Set(['secondary', 'warning', 'icon', 'tertiary'])\n /**\n * Change LoadingDots variant between `light` and `dark` to have contrast with Button's variant\n */\n const loadingDotsVariant: 'dark' | 'light' = buttonLightVariants.has(buttonVariant)\n ? 'dark'\n : 'light'\n\n return <StyledLoadingDots {...remainingProps} variant={loadingDotsVariant} />\n}\n\nfunction ButtonChildrenWrapper({\n loading,\n children,\n variant,\n}: Pick<ButtonProps, 'loading' | 'children' | 'variant'>) {\n if (loading) {\n return (\n <>\n <ButtonLoadingDots buttonVariant={variant} />\n <TextHidden>{children}</TextHidden>\n </>\n )\n }\n\n return <>{children}</>\n}\n\nexport const BaseButton = forwardRef<HTMLButtonElement, ButtonProps>(function BaseButton(\n {\n scale = 'default',\n children,\n leading,\n trailing,\n loading,\n disabled,\n variant,\n ...others\n }: ButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) {\n return (\n <BaseStyledButton\n ref={ref}\n {...others}\n aria-disabled={loading ? 'true' : undefined}\n disabled={disabled}\n $scale={scale}\n $loading={loading}\n >\n <ButtonChildrenWrapper loading={loading} variant={variant}>\n {leading && <Leading aria-hidden=\"true\">{leading}</Leading>}\n <Children loading={loading}>{children}</Children>\n {trailing && <Trailing aria-hidden=\"true\">{trailing}</Trailing>}\n </ButtonChildrenWrapper>\n </BaseStyledButton>\n )\n})\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n type = 'button',\n scheme = 'light',\n scale = 'default',\n variant = 'secondary',\n children,\n leading,\n trailing,\n disabled,\n loading,\n ...others\n }: ButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) {\n return (\n <StyledButton\n ref={ref}\n {...others}\n type={type}\n aria-disabled={loading ? 'true' : undefined}\n disabled={disabled}\n $scheme={scheme}\n $scale={scale}\n $variant={variant}\n $loading={loading}\n >\n <ButtonChildrenWrapper loading={loading} variant={variant}>\n {leading && <Leading>{leading}</Leading>}\n <Children>{children}</Children>\n {trailing && <Trailing>{trailing}</Trailing>}\n </ButtonChildrenWrapper>\n </StyledButton>\n )\n})\n\nexport function Caret(props: Omit<IconProps, 'name'>): JSX.Element {\n return <Icon size={20} {...props} name=\"caret-down\" />\n}\n\nexport const SelectorButton = forwardRef<HTMLButtonElement, ButtonProps>(function SelectorButton(\n {\n scheme = 'light',\n scale = 'default',\n type = 'button',\n variant = 'secondary',\n children,\n trailing,\n disabled,\n loading,\n ...others\n }: ButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) {\n others = omit<ButtonProps>(others, ['leading'])\n\n return (\n <StyledSelector\n ref={ref}\n {...others}\n type={type}\n aria-disabled={loading ? 'true' : undefined}\n disabled={disabled}\n $loading={loading}\n $scheme={scheme}\n $scale={scale}\n $variant={variant}\n >\n <ButtonChildrenWrapper loading={loading} variant={variant}>\n <Children>{children}</Children>\n {trailing && <Trailing>{trailing}</Trailing>}\n </ButtonChildrenWrapper>\n </StyledSelector>\n )\n})\n\nexport type IconButtonProps = Omit<ButtonProps, 'leading' | 'trailing' | 'variant' | 'loading'>\n\nexport const IconButton = forwardRef<HTMLButtonElement, ButtonProps>(function IconButton(\n { scheme = 'light', scale = 'default', type = 'button', children, ...others }: IconButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) {\n others = omit<ButtonProps>(others, ['leading', 'trailing', 'variant'])\n\n return (\n <StyledButton ref={ref} {...others} type={type} $scheme={scheme} $scale={scale} $variant=\"icon\">\n <Children>{children}</Children>\n </StyledButton>\n )\n})\n\nexport default Button\n","/**\n * Add basic CSS style for ellipsizing the content of an element.\n * Setting `max-width` is a responsability of the caller.\n * @returns {string}\n */\nfunction ellipsizableStyle(): string {\n return `\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n `\n}\n\nexport default ellipsizableStyle\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { BaseButton } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\nimport conditional, { whenProps } from 'tools/conditional'\nimport focusable from 'styles/focusable'\n\nimport type { ButtonProps } from 'components/Button'\n\nexport interface CloseButtonProps extends ButtonProps {\n size?: string | number\n}\n\nconst Button = styled(BaseButton)`\n border: none;\n border-radius: ${token('border-radius-circle')};\n\n color: ${token('color-neutral-darker')};\n\n background: ${token('color-transparent')};\n\n padding: ${token('space-xs')};\n\n font-size: ${token('font-size-3')};\n\n /*\n * button height is set in the BaseButton component\n * we set width here to ensure a perfectly rounded button\n */\n width: ${conditional({\n 'button-height': whenProps({ scale: 'default' }),\n 'button-small-height': whenProps({ scale: 'small' }),\n 'button-large-height': whenProps({ scale: 'large' }),\n })};\n\n ${focusable`\n box-shadow: ${token('button-icon-box-shadow')};\n\n outline: ${token('button-icon-outline')};\n outline-offset: ${token('button-outline-offset')};\n `}\n`\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction CloseButton({ scale = 'small', size = 16, ...others }: CloseButtonProps): JSX.Element {\n return (\n <Button scale={scale} {...others}>\n <Icon name=\"close\" size={size} />\n </Button>\n )\n}\n\nexport default CloseButton\n","import React from 'react'\n\nimport { IconButton } from 'components/Button'\nimport { Icon } from 'components/Icon'\n\nimport type { ButtonProps } from 'components/Button'\n\nexport type BackButtonProps = Omit<ButtonProps, 'children'>\n\nfunction BackButton({ scale = 'small', ...others }: BackButtonProps): JSX.Element {\n return (\n <IconButton scale={scale} {...others}>\n <Icon name=\"back\" size={16} />\n </IconButton>\n )\n}\n\nexport default BackButton\n","function toVal(mix) {\n\tvar k, y, str='';\n\n\tif (typeof mix === 'string' || typeof mix === 'number') {\n\t\tstr += mix;\n\t} else if (typeof mix === 'object') {\n\t\tif (Array.isArray(mix)) {\n\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tif (y = toVal(mix[k])) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (k in mix) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\tstr += k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn str;\n}\n\nexport default function () {\n\tvar i=0, tmp, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (tmp = arguments[i++]) {\n\t\t\tif (x = toVal(tmp)) {\n\t\t\t\tstr && (str += ' ');\n\t\t\t\tstr += x\n\t\t\t}\n\t\t}\n\t}\n\treturn str;\n}\n","import React, { LabelHTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport styled from 'styled-components'\n\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport font from 'styles/font'\nimport { getToken as token } from 'theming'\nimport transition from 'styles/transition'\n\nexport interface SelectionStyleProps {\n scale?: 'small' | 'default'\n scheme?: ColorScheme\n disabled?: boolean\n}\n\nexport interface SelectionWrapperProps\n extends LabelHTMLAttributes<HTMLLabelElement>,\n SelectionStyleProps {\n selector: ReactNode\n leading?: ReactNode\n trailing?: ReactNode\n}\n\nconst SelectorWrapper = styled.span`\n position: relative;\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n`\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n`\n\nconst Leading = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst Trailing = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst Children = styled.span`\n /* placeholder */\n`\n\nconst StyledLabel = styled.label<SelectionStyleProps>`\n box-sizing: border-box;\n\n ${transition()}\n ${font({\n weight: 'checkbox-font-weight',\n })}\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: flex-start;\n\n cursor: pointer;\n\n border-radius: ${token('border-radius-s')};\n\n font-size: ${conditional({\n 'checkbox-font-size': whenProps({ scale: 'default' }),\n 'checkbox-small-font-size': whenProps({ scale: 'small' }),\n })};\n\n color: ${conditional({\n 'checkbox-color': whenProps({ scheme: 'light' }),\n 'checkbox-dark-color': whenProps({ scheme: 'dark' }),\n })};\n\n ${Children} {\n margin: 0 ${token('space-xs')};\n }\n\n ${SelectorWrapper} {\n margin: 0 ${token('space-xs')} 0 0;\n }\n\n ${Leading} {\n margin: 0 ${token('space-xs')};\n }\n\n ${Trailing} {\n margin: 0 0 0 ${token('space-xs')};\n }\n\n ${disableable()}\n\n ${focusable`\n outline: ${token('checkbox-selector-outline')};\n outline-offset: ${token('checkbox-selector-outline-offset')};\n `}\n`\n\nfunction SelectionWrapper({\n selector,\n children,\n leading,\n trailing,\n className,\n disabled = false,\n ...others\n}: SelectionWrapperProps): JSX.Element {\n return (\n <StyledLabel\n className={clsx(className, {\n 'is-disabled': disabled,\n })}\n {...others}\n >\n {selector && <SelectorWrapper>{selector}</SelectorWrapper>}\n {leading && <Leading data-testid=\"selection-leading\">{leading}</Leading>}\n <Children>{children}</Children>\n {trailing && <Trailing data-testid=\"selection-trailing\">{trailing}</Trailing>}\n </StyledLabel>\n )\n}\n\nexport default SelectionWrapper\n","import React, { Fragment, InputHTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nimport { Icon } from 'components/Icon'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport SelectionWrapper, { SelectionStyleProps } from 'common/SelectionWrapper'\nimport styled from 'styled-components'\nimport { getToken as token } from 'theming'\nimport transition from 'styles/transition'\n\nexport interface CheckboxProps extends InputHTMLAttributes<HTMLInputElement>, SelectionStyleProps {\n leading?: ReactNode\n scheme?: ColorScheme\n trailing?: ReactNode\n}\n\nconst Check = styled(Icon)<SelectionStyleProps>`\n position: absolute;\n top: 50%;\n\n left: 50%;\n\n transform: translate(-50%, -50%);\n\n pointer-events: none;\n`\n\nconst Selector = styled.input<SelectionStyleProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n\n cursor: pointer;\n\n appearance: none;\n\n outline: none;\n\n color: white;\n\n height: ${token('checkbox-selector-size')};\n width: ${token('checkbox-selector-size')};\n\n border-radius: ${token('checkbox-selector-border-radius')};\n border-width: ${token('button-border-width')};\n border-style: solid;\n\n border-color: ${conditional({\n 'checkbox-selector-border-color': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-border-color': whenProps({ scheme: 'dark' }),\n })};\n\n background: ${conditional({\n 'checkbox-selector-background': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-background': whenProps({ scheme: 'dark' }),\n })};\n\n :checked {\n background-color: ${token('checkbox-selector-checked-background')};\n border-color: ${token('checkbox-selector-checked-border-color')};\n }\n\n :checked + ${Check} {\n color: ${token('checkbox-selector-icon-color')};\n }\n\n :not(:checked) + ${Check} {\n color: transparent;\n }\n\n ${disableable`\n background: ${conditional({\n 'checkbox-selector-background--disabled': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-background--disabled': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'checkbox-selector-border-color--disabled': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-border-color--disabled': whenProps({ scheme: 'dark' }),\n })};\n :checked {\n background-color: ${token('checkbox-selector-checked-background--disabled')};\n border-color: ${token('checkbox-selector-checked-border-color--disabled')};\n }\n `}\n\n ${hoverable`\n background: ${conditional({\n 'checkbox-selector-background--hover': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-background--hover': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'checkbox-selector-border-color--hover': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-border-color--hover': whenProps({ scheme: 'dark' }),\n })};\n\n :checked {\n background-color: ${token('checkbox-selector-checked-background--hover')};\n border-color: ${token('checkbox-selector-checked-border-color--hover')};\n }\n\n :checked + ${Check} {\n color: ${token('checkbox-selector-icon-color')};\n }\n `}\n\n ${focusable`\n background: ${conditional({\n 'checkbox-selector-background--focus': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-background--focus': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'checkbox-selector-border-color--focus': whenProps({ scheme: 'light' }),\n 'checkbox-dark-selector-border-color--focus': whenProps({ scheme: 'dark' }),\n })};\n\n :checked {\n background-color: ${token('checkbox-selector-checked-background--focus')};\n border-color: ${token('checkbox-selector-checked-border-color--focus')};\n }\n :checked + ${Check} {\n color: ${token('checkbox-selector-icon-color')};\n }\n\n box-shadow: ${token('checkbox-selector-box-shadow')};\n `}\n`\n\nfunction Checkbox({\n className,\n disabled,\n children,\n leading,\n trailing,\n scheme = 'light',\n scale = 'default',\n ...others\n}: CheckboxProps): JSX.Element {\n return (\n <SelectionWrapper\n scheme={scheme}\n scale={scale}\n selector={\n <Fragment>\n <Selector\n data-testid=\"selector\"\n {...others}\n scheme={scheme}\n disabled={disabled}\n type=\"checkbox\"\n />\n <Check name=\"check\" size={14} className=\"check\" />\n </Fragment>\n }\n leading={leading}\n trailing={trailing}\n className={clsx({ 'is-disabled': disabled }, className)}\n data-testid=\"checkbox\"\n >\n {children}\n </SelectionWrapper>\n )\n}\n\nexport default Checkbox\n","import React, { Fragment, InputHTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nimport { Icon } from 'components/Icon'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport SelectionWrapper, { SelectionStyleProps } from 'common/SelectionWrapper'\nimport styled from 'styled-components'\nimport { getToken as token } from 'theming'\nimport transition from 'styles/transition'\n\nexport interface RadioProps extends InputHTMLAttributes<HTMLInputElement>, SelectionStyleProps {\n leading?: ReactNode\n scheme?: ColorScheme\n trailing?: ReactNode\n}\n\nconst Check = styled(Icon)<SelectionStyleProps>`\n position: absolute;\n top: 50%;\n\n left: 50%;\n\n width: 10px;\n height: 10px;\n\n transform: translate(-50%, -50%);\n\n pointer-events: none;\n\n fill: currentColor;\n`\n\nconst Selector = styled.input<SelectionStyleProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n\n cursor: pointer;\n\n appearance: none;\n\n outline: none;\n\n color: white;\n\n height: ${token('radio-small-selector-size')};\n width: ${token('radio-small-selector-size')};\n\n border-radius: ${token('radio-selector-border-radius')};\n border-width: ${token('button-border-width')};\n border-style: solid;\n\n background: ${conditional({\n 'radio-selector-background': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-background': whenProps({ scheme: 'dark' }),\n })};\n\n &:not(:checked) {\n border-color: ${conditional({\n 'radio-selector-border-color': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-border-color': whenProps({ scheme: 'dark' }),\n })};\n\n + ${Check} {\n color: transparent;\n }\n }\n\n &:checked {\n border-color: ${token('radio-selector-border-color--checked')};\n\n + ${Check} {\n color: ${token('radio-selector-border-color--checked')};\n }\n }\n\n ${disableable`\n background: ${conditional({\n 'radio-selector-background--disabled': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-background--disabled': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'radio-selector-border-color--disabled': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-border-color--disabled': whenProps({ scheme: 'dark' }),\n })};\n `}\n\n ${hoverable`\n background: ${conditional({\n 'radio-selector-background--hover': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-background--hover': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'radio-selector-border-color--hover': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-border-color--hover': whenProps({ scheme: 'dark' }),\n })};\n `}\n\n ${focusable`\n background: ${conditional({\n 'radio-selector-background--focus': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-background--focus': whenProps({ scheme: 'dark' }),\n })};\n border-color: ${conditional({\n 'radio-selector-border-color--focus': whenProps({ scheme: 'light' }),\n 'radio-dark-selector-border-color--focus': whenProps({ scheme: 'dark' }),\n })};\n\n box-shadow: ${token('radio-selector-box-shadow')};\n `}\n`\n\nfunction Radio({\n className,\n disabled,\n children,\n leading,\n trailing,\n scheme = 'light',\n ...others\n}: RadioProps): JSX.Element {\n return (\n <SelectionWrapper\n scheme={scheme}\n selector={\n <Fragment>\n <Selector\n data-testid=\"selector\"\n {...others}\n scheme={scheme}\n disabled={disabled}\n type=\"radio\"\n />\n <Check name=\"circle\" className=\"check\" />\n </Fragment>\n }\n leading={leading}\n trailing={trailing}\n className={clsx({ 'is-disabled': disabled }, className)}\n data-testid=\"radio\"\n >\n {children}\n </SelectionWrapper>\n )\n}\n\nexport default Radio\n","import { useEffect, useState, useCallback, useRef } from 'react'\n\nimport type { RefObject } from 'react'\n\nexport interface useFocusWithinProps {\n onFocus?: () => void\n onBlur?: () => void\n}\n\n/**\n * As CSS's focus-within is not fully supported, this hook\n * helps with identifying focus within elements.\n * @param {Object} props - Hook props\n */\nfunction useFocusWithin<T>(props: useFocusWithinProps = {}): {\n ref: RefObject<T>\n focused: boolean\n} {\n const { onFocus, onBlur } = props\n const [focused, setFocused] = useState(false)\n const containerRef = useRef<T>(null)\n\n function getContainer() {\n return containerRef.current as unknown as HTMLElement\n }\n\n const handleFocus = useCallback(\n function handleFocus() {\n onFocus?.()\n setFocused(true)\n },\n [onFocus]\n )\n\n const handleBlur = useCallback(\n function handleBlur() {\n onBlur?.()\n setFocused(false)\n },\n [onBlur]\n )\n\n useEffect(\n function updateContainerRef() {\n getContainer()?.addEventListener('focusin', handleFocus)\n getContainer()?.addEventListener('focusout', handleBlur)\n\n return function unsubscribe() {\n getContainer()?.removeEventListener('focusin', handleFocus)\n getContainer()?.removeEventListener('focusout', handleBlur)\n }\n },\n [containerRef, handleBlur, handleFocus]\n )\n\n return {\n ref: containerRef,\n focused,\n }\n}\n\nexport default useFocusWithin\n","enum Status {\n Success = 'success',\n Danger = 'danger',\n Warn = 'warn',\n Neutral = 'neutral',\n}\n\nexport default Status\n","import React, { forwardRef } from 'react'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nimport { getToken as token } from 'theming'\nimport { useFocusWithin } from 'hooks/useFocusWithin'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport font from 'styles/font'\nimport hoverable from 'styles/hoverable'\nimport Status from 'utils/types/Status'\nimport transition from 'styles/transition'\n\nimport type { InputHTMLAttributes, ReactNode } from 'react'\n\ninterface WithAdditionalProps {\n scale?: 'small' | 'default' | 'large'\n status?: Status\n scheme?: ColorScheme\n leading?: ReactNode\n trailing?: ReactNode\n}\n\nexport interface TextFieldProps extends InputHTMLAttributes<HTMLInputElement>, WithAdditionalProps {\n className?: string\n children?: ReactNode\n}\n\nconst InputWrapper = styled.div<WithAdditionalProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n\n height: ${conditional({\n 'text-field-height': whenProps({ scale: 'default' }),\n 'text-field-small-height': whenProps({ scale: 'small' }),\n 'text-field-large-height': whenProps({ scale: 'large' }),\n })};\n min-width: 0;\n\n ${font({\n height: 'text-field-font-height',\n })}\n\n font-size: ${conditional({\n 'text-field-font-size': whenProps({ scale: 'default' }),\n 'text-field-small-font-size': whenProps({ scale: 'small' }),\n 'text-field-large-font-size': whenProps({ scale: 'large' }),\n })};\n\n border-radius: ${token('text-field-border-radius')};\n border-width: 1px;\n border-style: solid;\n\n background: ${conditional({\n 'text-field-background': whenProps({ scheme: 'light' }),\n 'text-field-dark-background': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'text-field-border-color': whenProps({ scheme: 'light', status: Status.Neutral }),\n 'text-field-dark-border-color': whenProps({ scheme: 'dark', status: Status.Neutral }),\n 'text-field-danger-border-color': whenProps({ status: Status.Danger }),\n 'text-field-success-border-color': whenProps({ status: Status.Success }),\n })};\n\n color: ${conditional({\n 'text-field-color': whenProps({ scheme: 'light' }),\n 'text-field-dark-color': whenProps({ scheme: 'dark' }),\n })};\n\n ${hoverable`\n background: ${conditional({\n 'text-field-background--hover': whenProps({ scheme: 'light' }),\n 'text-field-dark-background--hover': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'text-field-border-color--hover': whenProps({ scheme: 'light' }),\n 'text-field-dark-border-color--hover': whenProps({ scheme: 'dark' }),\n })};\n `}\n\n ${focusable`\n background: ${conditional({\n 'text-field-background--focus': whenProps({ scheme: 'light' }),\n 'text-field-dark-background--focus': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'text-field-border-color--focus': whenProps({ scheme: 'light' }),\n 'text-field-dark-border-color--focus': whenProps({ scheme: 'dark' }),\n })};\n\n box-shadow: ${conditional({\n 'text-field-box-shadow': whenProps({ scheme: 'light' }),\n 'text-field-dark-box-shadow': whenProps({ scheme: 'dark' }),\n })};\n\n outline: ${token('text-field-outline')};\n outline-offset: ${token('text-field-outline-offset')};\n `}\n\n ${disableable()}\n`\n\nconst StyledSpan = styled.span<WithAdditionalProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n color: ${conditional({\n 'text-field-border-color': whenProps({ scheme: 'light', status: Status.Neutral }),\n 'text-field-dark-border-color': whenProps({ scheme: 'dark', status: Status.Neutral }),\n 'text-field-danger-border-color': whenProps({ status: Status.Danger }),\n 'text-field-success-border-color': whenProps({ status: Status.Success }),\n })};\n`\n\nexport const Leading = styled(StyledSpan)<WithAdditionalProps>`\n margin: 0 0 0\n ${conditional({\n 'text-field-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'text-field-small-padding-x': whenProps({ scale: 'small' }),\n })};\n`\n\nexport const Trailing = styled(StyledSpan)<WithAdditionalProps>`\n margin: 0\n ${conditional({\n 'text-field-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'text-field-small-padding-x': whenProps({ scale: 'small' }),\n })}\n 0 0;\n`\n\nconst StyledInput = styled.input<WithAdditionalProps>`\n ${transition()}\n\n ${font({\n height: 'text-field-font-height',\n })}\n\n background: transparent;\n\n padding: ${conditional({\n 'text-field-padding-y': whenProps({ scale: 'default' }),\n 'text-field-small-padding-y': whenProps({ scale: 'small' }),\n 'text-field-large-padding-y': whenProps({ scale: 'large' }),\n })}\n 0;\n\n margin: 0\n ${conditional({\n 'text-field-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'text-field-small-padding-x': whenProps({ scale: 'small' }),\n })};\n\n border: none;\n\n flex: 1;\n\n min-width: 0;\n\n ${focusable()}\n ${disableable()}\n\n /* suppress the clear button for IE */\n &[type=\"search\"]::-ms-clear,\n &[type=\"search\"]::-ms-reveal {\n display: none;\n width: 0;\n height: 0;\n }\n\n /* suppress the clear button for Chromium-based browsers */\n &[type='search']::-webkit-search-decoration,\n &[type='search']::-webkit-search-cancel-button,\n &[type='search']::-webkit-search-results-button,\n &[type='search']::-webkit-search-results-decoration {\n display: none;\n }\n`\n\nconst TextField = forwardRef<HTMLInputElement, TextFieldProps>(function TextField(\n props: TextFieldProps,\n ref\n): JSX.Element {\n const {\n disabled = false,\n status = Status.Neutral,\n scheme = 'light',\n scale = 'default',\n className,\n leading,\n trailing,\n ...others\n } = props\n const { ref: containerRef, focused } = useFocusWithin<HTMLDivElement>()\n\n return (\n <InputWrapper\n className={clsx(className, {\n 'is-disabled': disabled,\n 'is-focused': focused,\n })}\n scheme={scheme}\n status={status}\n scale={scale}\n ref={containerRef}\n >\n {leading && (\n <Leading status={status} scheme={scheme} scale={scale}>\n {leading}\n </Leading>\n )}\n <StyledInput\n ref={ref}\n type=\"text\"\n data-testid=\"input\"\n {...others}\n scale={scale}\n status={status}\n scheme={scheme}\n leading={leading}\n trailing={trailing}\n disabled={disabled}\n />\n {trailing && (\n <Trailing status={status} scheme={scheme} scale={scale}>\n {trailing}\n </Trailing>\n )}\n </InputWrapper>\n )\n})\n\nexport default TextField\n","import React, { forwardRef } from 'react'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nimport { getToken as token } from 'theming'\nimport { useFocusWithin } from 'hooks/useFocusWithin'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport font from 'styles/font'\nimport hoverable from 'styles/hoverable'\nimport Status from 'utils/types/Status'\nimport transition from 'styles/transition'\n\nimport type { TextareaHTMLAttributes, ReactNode } from 'react'\n\ninterface WithAdditionalProps {\n scale?: 'small' | 'default' | 'large'\n status?: Status\n scheme?: ColorScheme\n leading?: ReactNode\n trailing?: ReactNode\n}\n\nexport interface TextareaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement>,\n WithAdditionalProps {\n className?: string\n children?: ReactNode\n}\n\nconst TextareaWrapper = styled.div<WithAdditionalProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n\n min-height: ${token('textarea-min-height')};\n\n ${font({\n height: 'textarea-font-height',\n })}\n\n font-size: ${conditional({\n 'textarea-font-size': whenProps({ scale: 'default' }),\n 'textarea-small-font-size': whenProps({ scale: 'small' }),\n 'textarea-large-font-size': whenProps({ scale: 'large' }),\n })};\n\n border-radius: ${token('textarea-border-radius')};\n border-width: 1px;\n border-style: solid;\n\n background: ${conditional({\n 'textarea-background': whenProps({ scheme: 'light' }),\n 'textarea-dark-background': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'textarea-border-color': whenProps({ scheme: 'light', status: Status.Neutral }),\n 'textarea-dark-border-color': whenProps({ scheme: 'dark', status: Status.Neutral }),\n 'textarea-danger-border-color': whenProps({ status: Status.Danger }),\n 'textarea-success-border-color': whenProps({ status: Status.Success }),\n })};\n\n color: ${conditional({\n 'textarea-color': whenProps({ scheme: 'light' }),\n 'textarea-dark-color': whenProps({ scheme: 'dark' }),\n })};\n\n ${hoverable`\n background: ${conditional({\n 'textarea-background--hover': whenProps({ scheme: 'light' }),\n 'textarea-dark-background--hover': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'textarea-border-color--hover': whenProps({ scheme: 'light' }),\n 'textarea-dark-border-color--hover': whenProps({ scheme: 'dark' }),\n })};\n `}\n\n ${focusable`\n background: ${conditional({\n 'textarea-background--focus': whenProps({ scheme: 'light' }),\n 'textarea-dark-background--focus': whenProps({ scheme: 'dark' }),\n })};\n\n border-color: ${conditional({\n 'textarea-border-color--focus': whenProps({ scheme: 'light' }),\n 'textarea-dark-border-color--focus': whenProps({ scheme: 'dark' }),\n })};\n\n box-shadow: ${conditional({\n 'textarea-box-shadow': whenProps({ scheme: 'light' }),\n 'textarea-dark-box-shadow': whenProps({ scheme: 'dark' }),\n })};\n\n outline: ${token('textarea-outline')};\n outline-offset: ${token('textarea-outline-offset')};\n `}\n\n ${disableable()}\n`\n\nconst StyledSpan = styled.span<WithAdditionalProps>`\n ${transition()}\n\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n color: ${conditional({\n 'textarea-border-color': whenProps({ scheme: 'light', status: Status.Neutral }),\n 'textarea-dark-border-color': whenProps({ scheme: 'dark', status: Status.Neutral }),\n 'textarea-danger-border-color': whenProps({ status: Status.Danger }),\n 'textarea-success-border-color': whenProps({ status: Status.Success }),\n })};\n`\n\nconst Leading = styled(StyledSpan)<WithAdditionalProps>`\n align-items: flex-start;\n\n margin: 0 0 0\n ${conditional({\n 'text-field-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'text-field-small-padding-x': whenProps({ scale: 'small' }),\n })};\n\n padding: ${token('space-s')} 0;\n`\n\nconst Trailing = styled(StyledSpan)<WithAdditionalProps>`\n align-items: flex-start;\n\n margin: 0\n ${conditional({\n 'text-field-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'text-field-small-padding-x': whenProps({ scale: 'small' }),\n })}\n 0 0;\n\n padding: ${token('space-s')} 0;\n`\n\nconst StyledTextarea = styled.textarea<WithAdditionalProps>`\n ${transition()}\n\n ${font({\n height: 'textarea-font-height',\n })}\n\n background: transparent;\n\n padding: ${conditional({\n 'textarea-padding-y': whenProps({ scale: 'default' }),\n 'textarea-small-padding-y': whenProps({ scale: 'small' }),\n 'textarea-large-padding-y': whenProps({ scale: 'large' }),\n })}\n 0;\n\n margin: 0\n ${conditional({\n 'textarea-padding-x': whenProps({ scale: ['default', 'large'] }),\n 'textarea-small-padding-x': whenProps({ scale: 'small' }),\n })};\n\n border: none;\n\n flex: 1 0 auto;\n\n ${focusable()}\n ${disableable()}\n`\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n props: TextareaProps,\n ref\n): JSX.Element {\n const {\n disabled = false,\n status = Status.Neutral,\n scheme = 'light',\n scale = 'default',\n className,\n leading,\n trailing,\n ...others\n } = props\n const { ref: containerRef, focused } = useFocusWithin<HTMLDivElement>()\n\n return (\n <TextareaWrapper\n className={clsx(className, {\n 'is-disabled': disabled,\n 'is-focused': focused,\n })}\n scheme={scheme}\n scale={scale}\n status={status}\n ref={containerRef}\n >\n {leading && (\n <Leading status={status} scheme={scheme} scale={scale}>\n {leading}\n </Leading>\n )}\n <StyledTextarea\n ref={ref}\n data-testid=\"textarea\"\n {...others}\n scale={scale}\n status={status}\n scheme={scheme}\n leading={leading}\n trailing={trailing}\n disabled={disabled}\n />\n {trailing && (\n <Trailing status={status} scheme={scheme} scale={scale}>\n {trailing}\n </Trailing>\n )}\n </TextareaWrapper>\n )\n})\n\nexport default Textarea\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nexports.objectFromQueryString = void 0\nexports.objectFromQueryString = function (qs) {\n if (!qs) return null\n if (qs[0] === '?') {\n qs = qs.slice(1)\n }\n return JSON.parse(\n '{\"' + qs.replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}',\n function (key, value) {\n return key === '' ? value : decodeURIComponent(value)\n }\n )\n}\n//# sourceMappingURL=objectFromQueryString.js.map\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nexports.queryStringFromObject = void 0\nexports.queryStringFromObject = function (obj) {\n if (!obj || Object.keys(obj).length === 0) return null\n var qs =\n '?' +\n Object.keys(obj)\n .filter(function (key) {\n return obj[key] !== null && obj[key] !== undefined\n })\n .filter(function (key) {\n return (\n typeof obj[key] === 'string' ||\n typeof obj[key] === 'number' ||\n typeof obj[key] === 'boolean'\n )\n })\n .map(function (key) {\n return key + '=' + obj[key]\n })\n .join('&')\n return qs === '?' ? null : qs\n}\n//# sourceMappingURL=queryStringFromObject.js.map\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nexports.toCapitalizeFirstLetter = void 0\nvar toUpperCaseFirstLetter = function (word) {\n return word.charAt(0).toUpperCase() + word.slice(1)\n}\nvar toCapitalizeFirstLetter = function (word) {\n if (!word) return ''\n return word.split(' ').map(toUpperCaseFirstLetter).join(' ')\n}\nexports.toCapitalizeFirstLetter = toCapitalizeFirstLetter\n//# sourceMappingURL=toCapitalizeFirstLetter.js.map\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nexports.toLocaleCapitalizeFirstLetter = void 0\nvar toLocaleUpperCaseFirstLetter = function (word, locale) {\n return word.charAt(0).toLocaleUpperCase(locale) + word.slice(1)\n}\nvar toLocaleCapitalizeFirstLetter = function (word, locale) {\n if (!word) return ''\n var localeDefined = locale || navigator.language\n return word\n .split(' ')\n .map(function (item) {\n return toLocaleUpperCaseFirstLetter(item, localeDefined)\n })\n .join(' ')\n}\nexports.toLocaleCapitalizeFirstLetter = toLocaleCapitalizeFirstLetter\n//# sourceMappingURL=toLocaleCapitalizeFirstLetter.js.map\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nfunction isBlank(text) {\n if (text == null) {\n return true\n }\n var trimmedText = String(text).trim()\n return trimmedText == ''\n}\nexports.default = isBlank\n//# sourceMappingURL=isBlank.js.map\n","'use strict'\nObject.defineProperty(exports, '__esModule', { value: true })\nexports.toCapitalizeFirstLetter = exports.toLocaleCapitalizeFirstLetter = exports.queryStringFromObject = exports.objectFromQueryString = exports.isBlank = void 0\nvar objectFromQueryString_1 = require('./objectFromQueryString')\nObject.defineProperty(exports, 'objectFromQueryString', {\n enumerable: true,\n get: function () {\n return objectFromQueryString_1.objectFromQueryString\n },\n})\nvar queryStringFromObject_1 = require('./queryStringFromObject')\nObject.defineProperty(exports, 'queryStringFromObject', {\n enumerable: true,\n get: function () {\n return queryStringFromObject_1.queryStringFromObject\n },\n})\nvar toCapitalizeFirstLetter_1 = require('./toCapitalizeFirstLetter')\nObject.defineProperty(exports, 'toCapitalizeFirstLetter', {\n enumerable: true,\n get: function () {\n return toCapitalizeFirstLetter_1.toCapitalizeFirstLetter\n },\n})\nvar toLocaleCapitalizeFirstLetter_1 = require('./toLocaleCapitalizeFirstLetter')\nObject.defineProperty(exports, 'toLocaleCapitalizeFirstLetter', {\n enumerable: true,\n get: function () {\n return toLocaleCapitalizeFirstLetter_1.toLocaleCapitalizeFirstLetter\n },\n})\nvar isBlank_1 = require('./isBlank')\nexports.isBlank = isBlank_1.default\n//# sourceMappingURL=index.js.map\n","import type { AnchorHTMLAttributes } from 'react'\nimport { isBlank } from '@loadsmart/utils-string'\n\nconst INSECURE_HREF = /^javascript:/i\n\nfunction checkHref(props: AnchorHTMLAttributes<HTMLAnchorElement>) {\n const { href, ...others } = props\n\n if (isBlank(href || '')) {\n return props\n }\n\n if (INSECURE_HREF.test(`${href || ''}`)) {\n // security risk, thus, removing it\n return others\n }\n\n return props\n}\n\nfunction checkTarget({ target, rel }: AnchorHTMLAttributes<HTMLAnchorElement>) {\n if (isBlank(target || '')) {\n return { target, rel }\n }\n\n const sanitizedRel = new Set((rel || '').split(/\\s+/).filter(Boolean))\n\n if (target === '_blank') {\n sanitizedRel.add('noopener')\n }\n\n /**\n * To avoid exploitation of the window.opener API, Adding noreferrer,\n * as recommended in https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a\n */\n sanitizedRel.add('noreferrer')\n\n return { rel: Array.from(sanitizedRel).join(' '), target }\n}\n\nfunction useSafeLink(\n props: AnchorHTMLAttributes<HTMLAnchorElement>\n): AnchorHTMLAttributes<HTMLAnchorElement> {\n const { rel, target } = checkTarget(props) || {}\n\n return { ...checkHref(props), rel, target }\n}\n\nexport default useSafeLink\n","import React, { forwardRef } from 'react'\nimport type { AnchorHTMLAttributes, ForwardedRef } from 'react'\nimport clsx from 'clsx'\nimport styled, { css } from 'styled-components'\n\nimport useSafeLink from './useSafeLink'\nimport font from 'styles/font'\nimport transition from 'styles/transition'\nimport ellipsizable from 'styles/ellipsizable'\nimport hoverable from 'styles/hoverable'\nimport focusable from 'styles/focusable'\nimport disableable from 'styles/disableable'\nimport { getToken as token } from 'theming'\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n className?: string\n disabled?: boolean\n}\n\nconst StyledBaseAnchor = styled.a`\n ${font({\n height: 'link-font-height',\n weight: 'link-font-weight',\n })}\n ${transition()}\n\n ${ellipsizable()}\n\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n text-align: center;\n font-size: ${token('link-font-size')};\n color: ${token('color-neutral-darker')};\n text-decoration: none;\n\n min-height: 24px;\n\n border-radius: ${token('border-radius-s')};\n\n ${hoverable`\n text-decoration: underline;\n font-weight: ${token('link-font-weight--hover')};\n `}\n\n ${focusable`\n box-shadow: ${token('link-box-shadow')};\n outline: ${token('link-outline')};\n outline-offset: ${token('link-outline-offset')};\n `}\n\n ${disableable``}\n\n ${({ children }) =>\n 'string' == typeof children &&\n // to prevent layout shift on hover, https://css-tricks.com/bold-on-hover-without-the-layout-shift/\n css`\n &::after {\n height: 0;\n overflow: hidden;\n\n font-weight: ${token('link-font-weight--hover')};\n\n visibility: hidden;\n\n content: attr(data-text);\n content: attr(data-text) / '';\n user-select: none;\n pointer-events: none;\n\n @media speech {\n display: none;\n }\n }\n `}\n`\n\nexport const BaseLink = forwardRef(function BaseLink(\n { disabled = false, ...props }: LinkProps,\n forwardedRef: ForwardedRef<HTMLAnchorElement>\n): JSX.Element {\n const { href = '/', children, className, target = '_self', ...others } = useSafeLink(props)\n\n return (\n <StyledBaseAnchor\n className={clsx(\n {\n 'is-disabled': disabled,\n },\n className\n )}\n href={href}\n target={target}\n {...others}\n ref={forwardedRef}\n data-text={'string' == typeof children ? children : ''}\n data-testid=\"link\"\n >\n {children}\n </StyledBaseAnchor>\n )\n})\n\nconst StyledAnchor = styled(BaseLink)<LinkProps>`\n color: ${token('link-color')};\n`\n\nfunction Link(props: LinkProps): JSX.Element {\n return <StyledAnchor {...props} />\n}\n\nexport default Link\n","import React, { HTMLAttributes } from 'react'\nimport { isNil } from '@loadsmart/utils-object'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nimport conditional, { whenProps } from 'tools/conditional'\nimport font from 'styles/font'\nimport { getToken as token } from 'theming'\n\nimport { Link } from '../Link'\n\nexport interface BreadcrumbProps extends HTMLAttributes<HTMLElement> {\n active?: boolean\n label: string\n url?: string\n}\n\nconst StyledLink = styled(Link)`\n font-size: ${token('breadcrumbs-font-size')};\n line-height: ${token('breadcrumbs-font-height')};\n`\n\nconst StyledLi = styled.li<BreadcrumbProps>`\n ${font({\n height: 'breadcrumbs-font-height',\n weight: 'breadcrumbs-font-weight',\n })}\n\n position: relative;\n\n display: inline-flex;\n align-items: center;\n\n font-weight: ${conditional({\n 'breadcrumbs-font-weight': whenProps({ active: false }),\n 'breadcrumbs-font-weight--active': whenProps({ active: true }),\n })};\n\n font-size: ${token('breadcrumbs-font-size')};\n line-height: ${token('breadcrumbs-font-height')};\n\n & + & {\n margin: 0 0 0 ${token('breadcrumbs-spacing-x')};\n }\n\n &:not(:only-child):not(:last-child)::after {\n position: absolute;\n left: calc(100% + 14px);\n\n font-weight: ${token('font-weight-bold')};\n font-size: ${token('breadcrumbs-font-size')};\n\n line-height: ${token('breadcrumbs-font-height')};\n\n content: '/';\n }\n`\n\nfunction getWrappedLabel(props: Partial<BreadcrumbProps>) {\n const { url, label, onClick, active, ...rest } = props\n\n if (isNil(url) && !onClick) {\n return label\n }\n\n return (\n <StyledLink\n href={url}\n target=\"_self\"\n onClick={onClick}\n {...(active && { 'aria-current': 'page' })}\n {...rest}\n >\n {label}\n </StyledLink>\n )\n}\n\nfunction Breadcrumb({ active, label, url, ...rest }: BreadcrumbProps): JSX.Element {\n return (\n <StyledLi\n className={clsx({ 'is-active': active })}\n label={label}\n data-testid=\"breadcrumb\"\n active={active}\n >\n {getWrappedLabel({ label, url, active, ...rest })}\n </StyledLi>\n )\n}\n\nexport default Breadcrumb\n","import React, { MouseEvent } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport Breadcrumb, { BreadcrumbProps } from './Breadcrumb'\nimport BackButton from 'common/BackButton'\n\nexport interface BreadcrumbsProps {\n className?: string\n disabled?: boolean\n entries: BreadcrumbProps[]\n onBack?: (e: MouseEvent<HTMLButtonElement>) => void\n}\n\nconst StyledWrapper = styled.nav`\n display: flex;\n flex-direction: row;\n`\n\nconst StyledOl = styled.ol`\n display: flex;\n flex-direction: row;\n margin: 0;\n\n padding: 0;\n\n list-style: none;\n`\n\nconst StyledBackButton = styled(BackButton)`\n margin: 0 ${token('space-m')} 0 0;\n`\n\nfunction Breadcrumbs({ entries = [], onBack, disabled, ...others }: BreadcrumbsProps): JSX.Element {\n return (\n <StyledWrapper aria-label=\"Breadcrumb\" {...others}>\n {onBack && (\n <StyledBackButton\n data-testid=\"breadcrumbs-back\"\n onClick={onBack}\n disabled={disabled}\n aria-label=\"Back to previous page\"\n />\n )}\n\n <StyledOl data-testid=\"breadcrumbs\">\n {entries.map((entry: BreadcrumbProps) => {\n return <Breadcrumb key={entry.label} {...entry} />\n })}\n </StyledOl>\n </StyledWrapper>\n )\n}\nexport default Breadcrumbs\n","import { useRef, useEffect } from 'react'\n\n/**\n * Hook useful to trigger action conditionally based\n * on if the component is mounted.\n * Be aware that your effect, callback, memo, etc cannot list is\n * as a dependency, otherwise it will be triggered at the wrong moment.\n * @returns {boolean} Whether the component is mounted or not.\n */\nfunction useDidMount(): boolean {\n const counter = useRef(0)\n\n useEffect(function onMount() {\n counter.current = 1\n }, [])\n\n return counter.current > 0\n}\n\nexport default useDidMount\n","import get from 'utils/toolset/get'\n\nimport type {\n Selectable,\n SelectableAdapter,\n SelectableKeyType,\n SelectableState,\n SelectableStrategy,\n} from './useSelectable.types'\n\nexport type SelectableStrategyContext<T extends Selectable> = {\n getAdapter: (type?: string) => SelectableAdapter<T>\n}\n\nconst GenericAdapter: SelectableAdapter<unknown> = {\n getKey(o): string {\n return get(o, 'value') as string\n },\n}\n\nfunction createSelectionStrategy<T extends Selectable>(props: {\n multiple?: boolean\n adapters: Record<string, SelectableAdapter<T>>\n}): SelectableStrategy<T> {\n const { adapters, multiple } = props\n\n const context: SelectableStrategyContext<T> = {\n getAdapter(type?: string) {\n if (type == null) {\n return GenericAdapter\n }\n\n return adapters[type] || GenericAdapter\n },\n }\n\n if (multiple) {\n return MultipleSelectionStrategy(context)\n }\n\n return SingleSelectionStrategy(context)\n}\n\nexport function SingleSelectionStrategy<T extends Selectable>(\n context: SelectableStrategyContext<T>\n): SelectableStrategy<T> {\n return {\n type() {\n return 'single'\n },\n init(items: T[]) {\n return this.select(items, new Map())\n },\n select(items: T[]) {\n const newSelection = new Map<SelectableKeyType, T>()\n\n for (let i = 0; i < items.slice(0, 1).length; i++) {\n const adapter = context.getAdapter(items[i]._type)\n newSelection.set(adapter.getKey(items[i]), items[i])\n }\n\n return newSelection\n },\n unselect(keys: SelectableKeyType[], selection: SelectableState<T>) {\n const newSelection = new Map<SelectableKeyType, T>(selection)\n\n for (let i = 0; i < keys.length; i++) {\n newSelection.delete(keys[i])\n }\n\n return newSelection\n },\n toggle(items: T[], selection: SelectableState<T>) {\n const newSelection = new Map<SelectableKeyType, T>()\n\n for (let i = 0; i < items.slice(0, 1).length; i++) {\n const adapter = context.getAdapter(items[i]._type)\n\n if (!selection.has(adapter.getKey(items[i]))) {\n newSelection.set(adapter.getKey(items[i]), items[i])\n }\n }\n\n return newSelection\n },\n clear() {\n return new Map<SelectableKeyType, T>()\n },\n }\n}\n\nexport function MultipleSelectionStrategy<T extends Selectable>(\n context: SelectableStrategyContext<T>\n): SelectableStrategy<T> {\n return {\n type() {\n return 'multiple'\n },\n init(items: T[]) {\n return this.select(items, new Map<SelectableKeyType, T>())\n },\n select(items: T[], selection: SelectableState<T>) {\n const newSelection = new Map<SelectableKeyType, T>(selection)\n\n for (let i = 0; i < items.length; i++) {\n const adapter = context.getAdapter(items[i]._type)\n newSelection.set(adapter.getKey(items[i]), items[i])\n }\n\n return newSelection\n },\n unselect(keys: SelectableKeyType[], selection: SelectableState<T>) {\n const newSelection = new Map<SelectableKeyType, T>(selection)\n\n for (let i = 0; i < keys.length; i++) {\n newSelection.delete(keys[i])\n }\n\n return newSelection\n },\n toggle(items: T[], selection: SelectableState<T>) {\n const newSelection = new Map<SelectableKeyType, T>(selection)\n\n for (let i = 0; i < items.length; i++) {\n const adapter = context.getAdapter(items[i]._type)\n const key = adapter.getKey(items[i])\n\n if (!selection.has(key)) {\n newSelection.set(key, items[i])\n } else {\n newSelection.delete(key)\n }\n }\n\n return newSelection\n },\n clear() {\n return new Map<SelectableKeyType, T>()\n },\n }\n}\n\nexport default createSelectionStrategy\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n","import range from './range'\n\nconst MAX_LENGTH = 15\nconst INITIAL_LENGTH = 2\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-'\n\n/**\n *\n * @param {Object} options - Options\n * @param\n * @returns\n */\nexport function IDGenerator({\n maxIDLength,\n initialIDLength,\n alphabet,\n}: {\n maxIDLength: number\n initialIDLength: number\n alphabet: string\n}): () => string {\n let currentLength = initialIDLength\n\n // eslint-disable-next-line prefer-const\n let filledCharacters = [\n ...(Array(maxIDLength - currentLength).fill(-1) as number[]),\n ...(Array(currentLength).fill(0) as number[]),\n ]\n\n let availableIDs = range(initialIDLength, maxIDLength + 1).reduce(\n // using arrangement with repetition formula\n (acc: number, n: number) => acc + Math.pow(alphabet.length, n),\n 0\n )\n\n return function getID() {\n if (availableIDs == 0) {\n throw new Error(`No more IDs available with the provided alphabet and max length`)\n }\n\n availableIDs--\n const newID = filledCharacters.slice(-1 * currentLength).map((at: number) => alphabet[at])\n\n /**\n * [0, 0, 0, 0]\n * ^ at\n */\n let at = filledCharacters.length\n\n /**\n * move to the left in the `filledCharacters` array if\n * we have surpassed the last possible character in `alphabet`.\n * That means:\n * [0,0,0,(alphabet.length - 1)]\n * Becomes:\n * [0,0,1,0]\n */\n\n do {\n at--\n filledCharacters[at] = (filledCharacters[at] + 1) % alphabet.length\n } while (filledCharacters[at] == 0 && at >= filledCharacters.length - currentLength)\n\n /**\n * if we moved to the left as much as `currentLength` allowed,\n * and we have incremented as many times as we could, for each\n * position so we're back to `0`, due to the module operation,\n * i.e., if `currentLength = 3`, for example:\n *\n * [0, 0, 0, 0]\n * ^ currentLength\n * ^at\n *\n * So we need to increase `currentLength` to start incrementing from there:\n * [0, 0, 0, 0]\n * ^ currentLength\n */\n if (filledCharacters.length - at > currentLength) {\n currentLength++\n }\n\n return `genid-${newID.join('')}`\n }\n}\n\n// this configuration is capable of generating 469172025408063600 different IDs.\nconst getID = IDGenerator({\n maxIDLength: MAX_LENGTH,\n alphabet: ALPHABET,\n initialIDLength: INITIAL_LENGTH,\n})\n\nexport default getID\n","import { createContext, useEffect, useMemo, useReducer, useRef } from 'react'\nimport { identity } from '@loadsmart/utils-function'\n\nimport { useDidMount } from 'hooks/useDidMount'\nimport createSelectionStrategy from './SelectableStrategy'\nimport toArray from 'utils/toolset/toArray'\nimport useFingerprint from 'hooks/useFingerprint'\n\nimport type { Context } from 'react'\nimport type {\n Selectable,\n SelectableAction,\n SelectableKeyType,\n SelectableState,\n SelectableStrategy,\n useSelectableProps,\n useSelectableReturn,\n} from './useSelectable.types'\n\nconst DEFAULT_ADAPTERS = {}\n\n/**\n * Create a generic manager for collection selection.\n * @returns\n */\nfunction createUseSelectable<T extends Selectable>() {\n return function useSelectable(props: useSelectableProps<T>): useSelectableReturn<T> {\n const { adapters, multiple, onChange } = props\n\n const didMount = useDidMount()\n\n const strategy = useMemo<SelectableStrategy<T>>(() => {\n return createSelectionStrategy<T>({\n adapters: adapters || DEFAULT_ADAPTERS,\n multiple: Boolean(multiple),\n })\n }, [adapters, multiple])\n\n function reducer(state: SelectableState<T>, action: SelectableAction<T>) {\n switch (action.type) {\n case 'select':\n return strategy.select(action.payload, state)\n case 'unselect':\n return strategy.unselect(action.payload, state)\n case 'toggle':\n return strategy.toggle(action.payload, state)\n case 'clear':\n return strategy.clear(state)\n case 'reset':\n return action.payload\n }\n }\n\n function initializer() {\n return strategy.init(toArray(props.selected))\n }\n\n const [selected, dispatch] = useReducer(reducer, new Map<SelectableKeyType, T>(), initializer)\n const { resetFingerprint, hasSameFingerprint } = useFingerprint<string>(\n identity,\n [...selected.keys()].map(String)\n )\n const propagateChangeRef = useRef(false)\n\n function type() {\n return strategy.type()\n }\n\n function select(items: T | T[]) {\n propagateChangeRef.current = true\n\n dispatch({\n type: 'select',\n payload: toArray(items),\n })\n }\n\n function unselect(keys: SelectableKeyType | SelectableKeyType[]) {\n propagateChangeRef.current = true\n\n dispatch({\n type: 'unselect',\n payload: toArray(keys),\n })\n }\n\n function toggle(items: T | T[]) {\n propagateChangeRef.current = true\n\n dispatch({\n type: 'toggle',\n payload: toArray(items),\n })\n }\n\n function clear() {\n propagateChangeRef.current = true\n\n dispatch({\n type: 'clear',\n })\n }\n\n useEffect(\n function handleChange() {\n if (didMount && propagateChangeRef.current) {\n onChange?.(selected)\n }\n\n propagateChangeRef.current = false\n },\n /**\n * We don't want to update when didMount or the onChange callback changes, because we're only interested\n * in changes to the selected state.\n */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [selected]\n )\n\n useEffect(\n function updateOnSelectedPropChange() {\n const newSelected = initializer()\n const keys = [...newSelected.keys()].map(String)\n\n if (hasSameFingerprint(keys)) {\n return\n }\n\n propagateChangeRef.current = false\n\n resetFingerprint(keys)\n dispatch({\n type: 'reset',\n payload: newSelected,\n })\n },\n /**\n * initializer is not relevant for our changes, that's why its ommitted.\n */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.selected, hasSameFingerprint, resetFingerprint]\n )\n\n return { type, selected, select, unselect, toggle, clear }\n }\n}\n\nexport function createSelectable<T extends Selectable>(): {\n SelectableContext: Context<useSelectableReturn<T>>\n useSelectable: (props: useSelectableProps<T>) => useSelectableReturn<T>\n} {\n const SelectableContext = createContext<useSelectableReturn<T>>({} as useSelectableReturn<T>)\n const useSelectable = createUseSelectable<T>()\n\n return { SelectableContext, useSelectable }\n}\n","import { useState, useRef } from 'react'\n\nimport getID from 'utils/toolset/getID'\nimport isEmpty from 'utils/toolset/isEmpty'\n\ntype FingerprintAdapter<T> = (item: T) => string\n\n/**\n * This hook helps with stabilizing changes for components that rely on non-primitive props, more specifically, arrays,\n * objects, maps, sets and so on; when we need to update an internal state based on such types of prop, we might run into an infinite loop.\n * By creating a fingerprint - a string that identifies that set of items - we can garantee that the same set of items will\n * always return the same fingerprint, thus, making check for changes more predictable.\n *\n * @param adapter - adapter function that gets a unique identifier for each item in the `items` prop\n * @param items - list of items whose fingerprint should be checked.\n * @returns\n */\nfunction useFingerprint<T>(\n adapter: FingerprintAdapter<T>,\n items: T[]\n): {\n fingerprint: string\n getFingerprint: (items?: T[] | null, insert?: boolean) => string\n resetFingerprint: (items: T[]) => void\n hasSameFingerprint: (otherItems: T[]) => boolean\n} {\n const knownRef = useRef({} as Record<string, T | string>)\n const [fingerprint, setFingerprint] = useState(() => getFingerprint('', items, true))\n\n /**\n * Get a fingerprint based on the sorted items identifiers.\n *\n * @param {string[]} items - array of items\n * @param {boolean} update - update `known` with the provided `items`, if it contains different set of items.\n * @returns {string}\n */\n function getFingerprint(currentFingerprint: string, items?: T[] | null, update = false) {\n const known = knownRef.current\n\n const safeItems = items || []\n\n let newKnown: Record<string, T | string> = {}\n let hasSameItems = Object.keys(known).length === safeItems.length\n\n for (let i = 0; i < safeItems.length; i++) {\n const item = safeItems[i]\n const key = adapter(item)\n\n hasSameItems = hasSameItems && known[key] != null\n\n newKnown = {\n ...newKnown,\n // we associate a previously created or a new random value to compose the fingerprint\n [key]: known[key] ?? getID(),\n }\n }\n\n if (hasSameItems) {\n return currentFingerprint\n }\n\n if (update) {\n knownRef.current = newKnown\n }\n\n const fingerprint = Object.keys(newKnown)\n .sort()\n .reduce((fingerprint, item) => {\n return `${fingerprint}${newKnown[item] as string}`\n }, '')\n\n return fingerprint\n }\n\n return {\n fingerprint,\n getFingerprint(items?: T[] | null, update = false) {\n return getFingerprint(fingerprint, items, update)\n },\n resetFingerprint(items: T[]) {\n setFingerprint(getFingerprint(fingerprint, items, true))\n },\n /**\n * Check if the provided items have the same fingerprint.\n * @param {string[]} otherItems - items\n * @returns {boolean}\n */\n hasSameFingerprint(otherItems: T[]) {\n return fingerprint === getFingerprint(fingerprint, otherItems)\n },\n }\n}\n\nexport default useFingerprint\n","import React from 'react'\nimport { createSelectable } from 'hooks/useSelectable'\n\nimport type { ToggleGroupProps, ToggleOption } from './ToggleGroup.types'\n\nconst ToggleGroupContext = React.createContext<Pick<ToggleGroupProps, 'scale' | 'disabled'>>({\n scale: 'default',\n disabled: false,\n})\n\nexport const { SelectableContext, useSelectable } = createSelectable<ToggleOption>()\n\nexport default ToggleGroupContext\n","import React, { useContext } from 'react'\nimport styled from 'styled-components'\n\nimport { BaseButton } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport activatable from 'styles/activatable'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport isEmpty from 'utils/toolset/isEmpty'\nimport ToggleGroupContext, { SelectableContext } from './ToggleGroupContext'\n\nimport type { ToggleGroupOptionProps, ToggleGroupType } from './ToggleGroup.types'\n\nconst ToggleButton = styled(BaseButton)<{ $type: ToggleGroupType }>`\n text-transform: ${token('toggle-text-transform')};\n\n background-color: ${conditional({\n 'toggle-background-color': whenProps({ 'aria-checked': false }),\n 'toggle-checked-background-color': whenProps({ 'aria-checked': true }),\n })};\n\n border-color: ${conditional({\n 'toggle-single-border-color': whenProps({ $type: 'single', 'aria-checked': false }),\n 'toggle-single-checked-border-color': whenProps({ $type: 'single', 'aria-checked': true }),\n 'toggle-multiple-border-color': whenProps({ $type: 'multiple', 'aria-checked': false }),\n 'toggle-multiple-checked-border-color': whenProps({ $type: 'multiple', 'aria-checked': true }),\n })};\n\n color: ${conditional({\n 'toggle-color': whenProps({ 'aria-checked': false }),\n 'toggle-checked-color': whenProps({ 'aria-checked': true }),\n })};\n\n padding: ${token('space-xs')} ${token('space-s')};\n\n ${hoverable`\n border-color: ${conditional({\n 'toggle-multiple-border-color--hover': whenProps({ $type: 'multiple' }),\n 'toggle-single-border-color--hover': whenProps({ $type: 'single' }),\n })};\n\n background-color: ${conditional({\n 'toggle-background-color--hover': whenProps({ 'aria-checked': false }),\n 'toggle-checked-background-color--hover': whenProps({ 'aria-checked': true }),\n })};\n\n color: ${conditional({\n 'toggle-color--hover': whenProps({ 'aria-checked': false }),\n 'toggle-checked-color--hover': whenProps({ 'aria-checked': true }),\n })};\n `}\n\n ${focusable`\n border-color: ${conditional({\n 'toggle-multiple-border-color--focus': whenProps({ $type: 'multiple' }),\n 'toggle-single-border-color--focus': whenProps({ $type: 'single' }),\n })};\n\n background-color: ${conditional({\n 'toggle-background-color--focus': whenProps({ 'aria-checked': false }),\n 'toggle-checked-background-color--focus': whenProps({ 'aria-checked': true }),\n })};\n\n color: ${conditional({\n 'toggle-color--focus': whenProps({ 'aria-checked': false }),\n 'toggle-checked-color--focus': whenProps({ 'aria-checked': true }),\n })};\n\n box-shadow: ${token('toggle-box-shadow')};\n outline: ${token('toggle-outline')};\n outline-offset: ${token('toggle-outline-offset')};\n `}\n\n ${activatable`\n border-color: ${conditional({\n 'toggle-multiple-border-color--active': whenProps({ $type: 'multiple' }),\n 'toggle-single-border-color--active': whenProps({ $type: 'single' }),\n })};\n\n background-color: ${conditional({\n 'toggle-background-color--active': whenProps({ 'aria-checked': false }),\n 'toggle-checked-background-color--active': whenProps({ 'aria-checked': true }),\n })};\n\n color: ${conditional({\n 'toggle-color--active': whenProps({ 'aria-checked': false }),\n 'toggle-checked-color--active': whenProps({ 'aria-checked': true }),\n })};\n `}\n\n ${disableable`\n background-color: ${conditional({\n 'toggle-background-color--disabled': whenProps({ 'aria-checked': false }),\n 'toggle-checked-background-color--disabled': whenProps({ 'aria-checked': true }),\n })};\n\n border-color: ${conditional({\n 'toggle-single-border-color--disabled': whenProps({ $type: 'single', 'aria-checked': false }),\n 'toggle-single-checked-border-color--disabled': whenProps({\n $type: 'single',\n 'aria-checked': true,\n }),\n 'toggle-multiple-border-color--disabled': whenProps({\n $type: 'multiple',\n 'aria-checked': false,\n }),\n 'toggle-multiple-checked-border-color--disabled': whenProps({\n $type: 'multiple',\n 'aria-checked': true,\n }),\n })};\n\n color: ${conditional({\n 'toggle-color--disabled': whenProps({ 'aria-checked': false }),\n 'toggle-checked-color--disabled': whenProps({ 'aria-checked': true }),\n })};\n `}\n`\n\nfunction isMultiple(type: ToggleGroupType) {\n return type === 'multiple'\n}\n\nfunction Toggle({ value, children, disabled, ...others }: ToggleGroupOptionProps): JSX.Element {\n const group = useContext(ToggleGroupContext)\n const selectable = useContext(SelectableContext)\n\n if (isEmpty(selectable)) {\n throw Error('A Toggle options must be rendered inside a ToggleGroup')\n }\n\n const selected = selectable.selected.has(value)\n\n return (\n <ToggleButton\n {...others}\n $type={selectable.type()}\n type=\"button\"\n role={isMultiple(selectable.type()) ? 'checkbox' : 'radio'}\n aria-checked={selected}\n disabled={Boolean(disabled || group.disabled)}\n onClick={() => {\n if (isMultiple(selectable.type())) {\n selectable.toggle({ value })\n } else {\n selectable.select({ value })\n }\n }}\n scale={group.scale}\n >\n {children}\n </ToggleButton>\n )\n}\n\nexport default styled(Toggle)({})\n","import React, { useCallback } from 'react'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nimport { getToken as token } from 'theming'\nimport { Group } from 'components/Layout'\nimport conditional, { whenProps } from 'tools/conditional'\nimport isEmpty from 'utils/toolset/isEmpty'\nimport toArray from 'utils/toolset/toArray'\nimport Toggle from './Toggle'\nimport ToggleGroupContext, { SelectableContext, useSelectable } from './ToggleGroupContext'\n\nimport type {\n ToggleGroupOptionProps,\n ToggleGroupProps,\n ToggleOption,\n ToggleGroupOptionValue,\n SelectedToggleGroupOptions,\n} from './ToggleGroup.types'\n\nconst Container = styled(Group)<{ $multiple: boolean; $scale: ToggleGroupProps['scale'] }>`\n padding: ${conditional({\n 'toggle-group-multiple-padding': whenProps({ $multiple: true }),\n 'toggle-group-single-padding': whenProps({ $multiple: false }),\n })};\n\n border-color: ${conditional({\n 'toggle-group-multiple-border-color': whenProps({ $multiple: true }),\n 'toggle-group-single-border-color': whenProps({ $multiple: false }),\n })};\n\n border-style: ${conditional({\n 'toggle-group-multiple-border-style': whenProps({ $multiple: true }),\n 'toggle-group-single-border-style': whenProps({ $multiple: false }),\n })};\n\n border-width: ${conditional({\n 'toggle-group-multiple-border-width': whenProps({ $multiple: true }),\n 'toggle-group-single-border-width': whenProps({ $multiple: false }),\n })};\n\n border-radius: ${conditional({\n 'toggle-group-multiple-border-radius': whenProps({ $multiple: true }),\n 'toggle-group-single-border-radius': whenProps({ $multiple: false }),\n })};\n\n &.are-disabled {\n border-color: ${token('toggle-group-border-color--disabled')};\n }\n\n ${Toggle} {\n height: ${conditional({\n 'toggle-single-height': whenProps({ $multiple: false, $scale: 'default' }),\n 'toggle-single-small-height': whenProps({ $multiple: false, $scale: 'small' }),\n 'toggle-multiple-height': whenProps({ $multiple: true, $scale: 'default' }),\n 'toggle-multiple-small-height': whenProps({ $multiple: true, $scale: 'small' }),\n })};\n\n font-size: ${conditional({\n 'toggle-single-font-size': whenProps({ $multiple: false, $scale: 'default' }),\n 'toggle-single-small-font-size': whenProps({ $multiple: false, $scale: 'small' }),\n 'toggle-multiple-font-size': whenProps({ $multiple: true, $scale: 'default' }),\n 'toggle-multiple-small-font-size': whenProps({ $multiple: true, $scale: 'small' }),\n })};\n }\n`\n\nfunction fromValueToSelected(\n value: ToggleGroupOptionValue | ToggleGroupOptionValue[]\n): ToggleOption[] {\n const valueAsArray = toArray(value)\n\n return valueAsArray.map((value) => ({ value }))\n}\n\nfunction fromSelectedToValue(\n selected: SelectedToggleGroupOptions,\n multiple: boolean\n): ToggleGroupOptionValue | ToggleGroupOptionValue[] | null {\n const pairs = Array.from(selected)\n\n if (multiple) {\n const value: ToggleGroupOptionValue[] = []\n for (const [, option] of pairs) {\n value.push(option.value)\n }\n\n return value\n } else {\n if (isEmpty(pairs)) {\n return null\n }\n const [[, option]] = pairs\n return option.value\n }\n}\n\nconst DEFAULT_SELECTED = [] as ToggleGroupOptionValue[]\n\nfunction ToggleGroup(props: ToggleGroupProps): JSX.Element {\n const {\n disabled = false,\n multiple = false,\n scale = 'default',\n id,\n name,\n onChange,\n options,\n children,\n className,\n ...others\n } = props\n const selectable = useSelectable({\n multiple,\n selected: fromValueToSelected(props.value ?? DEFAULT_SELECTED),\n onChange: useCallback(\n function handleSelectionChange(selected) {\n onChange?.({\n target: { id, name: name ?? '', value: fromSelectedToValue(selected, multiple) },\n })\n },\n [id, multiple, name, onChange]\n ),\n })\n\n return (\n <Container\n {...others}\n className={clsx(className, {\n 'are-disabled': disabled,\n })}\n id={id}\n role={multiple ? 'group' : 'radiogroup'}\n align=\"center\"\n space=\"xs\"\n $multiple={multiple}\n $scale={scale}\n >\n <ToggleGroupContext.Provider value={{ scale, disabled }}>\n <SelectableContext.Provider value={selectable}>\n {children ??\n (options || []).map(function renderOption(option: ToggleGroupOptionProps) {\n const { label, value, ...others } = option\n const key = String(value)\n\n return (\n <Toggle\n key={key}\n {...others}\n disabled={Boolean(disabled || option.disabled)}\n value={value}\n >\n {label}\n </Toggle>\n )\n })}\n </SelectableContext.Provider>\n </ToggleGroupContext.Provider>\n </Container>\n )\n}\n\nToggleGroup.Option = Toggle\n\nexport default ToggleGroup\n","import { createContext } from 'react'\n\ninterface TabContextValue {\n id: string\n activeTab: string\n setActiveTab: (name: string) => void\n direction?: 'horizontal' | 'vertical'\n}\n\nexport const TabContext = createContext<TabContextValue>({} as TabContextValue)\n","import React from 'react'\n\nimport getID from 'utils/toolset/getID'\n\nfunction useID(propId?: string): string {\n const [id, setID] = React.useState(() => propId || getID())\n\n React.useEffect(\n function updateID() {\n setID(propId || getID())\n },\n [propId]\n )\n\n return id\n}\n\nexport default useID\n","import React, {\n HTMLAttributes,\n useContext,\n useState,\n useEffect,\n ChangeEvent,\n ReactNode,\n} from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { TabContext } from './TabsContext'\nimport conditional, { whenProps } from 'tools/conditional'\nimport font from 'styles/font'\nimport hoverable from 'styles/hoverable'\nimport disableable from 'styles/disableable'\nimport transition from 'styles/transition'\nimport useID from 'hooks/useID'\n\nimport type { WithDirectionProps, WithActiveProps } from './Tabs.types'\nimport clsx from 'clsx'\n\nconst TabsItemsWrapper = styled.ul`\n display: flex;\n\n padding: 0;\n\n border-bottom-color: ${token('color-neutral-lighter')};\n border-bottom-width: 2px;\n border-bottom-style: solid;\n`\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n pointer-events: none;\n`\n\nconst Children = styled(StyledSpan)`\n flex: 1;\n`\n\nconst Leading = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst StyledListItem = styled.li`\n display: flex;\n`\n\nconst StyledLabel = styled.label<WithActiveProps & WithDirectionProps>`\n ${font({\n height: 'font-height-2',\n weight: 'font-weight-bold',\n })}\n ${transition()}\n\n font-size: ${token('font-size-4')};\n text-transform: uppercase;\n text-align: ${conditional({\n center: whenProps({ direction: 'vertical' }),\n justify: whenProps({ direction: 'horizontal' }),\n })};\n\n ${hoverable`\n color: ${token('color-neutral-darker')};\n background-color: ${token('color-neutral-light')}33;\n `}\n\n ${disableable`\n color: ${token('color-neutral-dark')}33;\n background-color: ${token('color-neutral-light')};\n `}\n\n padding: ${token('space-m')} ${token('space-l')};\n display: inline-flex;\n flex-direction: ${conditional({\n row: whenProps({ direction: 'horizontal' }),\n column: whenProps({ direction: 'vertical' }),\n })};\n\n cursor: pointer;\n\n position: relative;\n bottom: -2px;\n\n border-bottom-width: 2px;\n border-bottom-style: solid;\n\n border-color: ${conditional({\n 'color-transparent': whenProps({ active: false }),\n 'color-primary': whenProps({ active: true }),\n })};\n\n color: ${conditional({\n 'color-neutral': whenProps({ active: false }),\n 'neutral-darker': whenProps({ active: true }),\n })};\n\n ${Leading} + ${Children} {\n margin: ${conditional({\n '0': whenProps({ direction: 'horizontal' }),\n 'space-2xs': whenProps({ direction: 'vertical' }),\n })}\n 0 0\n ${conditional({\n 'space-s': whenProps({ direction: 'horizontal' }),\n '0': whenProps({ direction: 'vertical' }),\n })};\n }\n`\n\ntype TabsItemsProps = HTMLAttributes<HTMLUListElement>\n\nfunction TabsItems({ children, ...props }: TabsItemsProps) {\n return (\n <TabsItemsWrapper {...props} role=\"tablist\">\n {children}\n </TabsItemsWrapper>\n )\n}\n\ninterface TabsItemProps extends HTMLAttributes<HTMLInputElement> {\n name: string\n default?: boolean\n leading?: ReactNode\n disabled?: boolean\n}\n\nfunction TabsItem({\n children,\n name,\n default: isDefault,\n className,\n onChange,\n leading,\n disabled = false,\n ...props\n}: TabsItemProps) {\n const { id: tabId, setActiveTab, activeTab, direction } = useContext(TabContext)\n\n const isActive = activeTab === name\n\n function handleSelect(event: ChangeEvent<HTMLInputElement>) {\n setActiveTab(name)\n onChange?.(event)\n }\n\n useEffect(() => {\n if (!activeTab && isDefault) {\n setActiveTab(name)\n }\n }, [activeTab, name, setActiveTab, isDefault])\n\n return (\n <StyledListItem role=\"tab\" aria-selected={isActive ? 'true' : 'false'}>\n <StyledLabel\n className={clsx(\n {\n 'is-disabled': disabled,\n },\n className\n )}\n active={activeTab === name}\n direction={direction}\n >\n <input\n {...props}\n value={name}\n checked={isActive}\n disabled={disabled}\n type=\"radio\"\n name={tabId}\n onChange={handleSelect}\n hidden\n />\n {leading && <Leading>{leading}</Leading>}\n {children && <Children>{children}</Children>}\n </StyledLabel>\n </StyledListItem>\n )\n}\n\ntype PanelsItemsProps = HTMLAttributes<HTMLDivElement>\n\nconst PanelsItemsWrapper = styled.div`\n /* placeholder */\n`\n\nconst PanelsItemWrapper = styled.article`\n display: ${conditional({\n block: whenProps({ 'aria-hidden': false }),\n none: whenProps({ 'aria-hidden': true }),\n })};\n`\n\nfunction PanelsItems({ children, ...props }: PanelsItemsProps) {\n return <PanelsItemsWrapper {...props}>{children}</PanelsItemsWrapper>\n}\n\ninterface PanelsItemProps extends HTMLAttributes<HTMLElement> {\n name: string\n /**\n * Renders the Panel.Item only when is visible\n * @default false\n */\n lazy?: boolean\n}\n\nfunction PanelsItem({ children, name, lazy, ...props }: PanelsItemProps) {\n const { activeTab } = useContext(TabContext)\n\n const hidden = activeTab !== name\n\n return (\n <PanelsItemWrapper {...props} role=\"tabpanel\" aria-hidden={hidden}>\n {lazy && hidden ? null : children}\n </PanelsItemWrapper>\n )\n}\n\nPanelsItem.defaultProps = {\n lazy: false,\n}\n\nexport interface TabsProps extends HTMLAttributes<HTMLElement>, WithDirectionProps {\n activeTab?: string\n onTabChange?: (tab: string) => void\n}\n\nconst TabsWrapper = styled.div`\n ${TabsItemsWrapper} + ${PanelsItemsWrapper} {\n margin: ${token('space-xl')} 0 0 0;\n }\n`\n\n/**\n * @example\n * <Tabs>\n <Tabs.Items>\n <Tabs.Item name=\"tab-1\" default>\n Tabs 1\n </Tabs.Item>\n <Tabs.Item name=\"tab-2\">Tabs 2</Tabs.Item>\n </Tabs.Items>\n <Tabs.Panels>\n <Tabs.Panel name=\"tab-1\">first content</Tabs.Panel>\n <Tabs.Panel name=\"tab-2\">second content</Tabs.Panel>\n </Tabs.Panels>\n * </Tabs>\n */\nfunction Tabs({\n children,\n direction = 'horizontal',\n id: propId,\n activeTab: propTab = '',\n onTabChange,\n ...props\n}: TabsProps): JSX.Element {\n const [activeTab, setActiveTab] = useState(propTab)\n const id = useID(propId)\n\n useEffect(() => {\n if (propTab) {\n setActiveTab(propTab)\n }\n }, [propTab])\n\n useEffect(() => {\n onTabChange?.(activeTab)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeTab])\n\n return (\n <TabsWrapper {...props}>\n <TabContext.Provider value={{ activeTab, setActiveTab, id, direction }}>\n {children}\n </TabContext.Provider>\n </TabsWrapper>\n )\n}\n\nTabs.Items = TabsItems\nTabs.Item = TabsItem\nTabs.Panels = PanelsItems\nTabs.Panel = PanelsItem\n\nexport default Tabs\n","import React, { HTMLAttributes, ReactNode } from 'react'\nimport styled from 'styled-components'\nimport font from 'styles/font'\nimport { getToken as token } from 'theming'\n\nexport type SectionProps = HTMLAttributes<HTMLElement>\n\nconst StyledSection = styled.section`\n ${font({\n height: 'font-height-2',\n })}\n`\n\nconst StyledSectionTitle = styled.section`\n ${font({\n weight: 'font-weight-bold',\n height: 'font-height-2',\n })}\n\n font-size: ${token('font-size-3')};\n color: ${token('color-neutral-darker')};\n\n border-bottom: 2px solid ${token('color-neutral-light')};\n\n padding: ${token('space-s')} ${token('space-xs')};\n margin-bottom: ${token('space-l')};\n`\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n pointer-events: none;\n`\n\nconst Leading = styled(StyledSpan)`\n margin: 0 ${token('button-spacing-x')} 0 0;\n`\n\nexport interface SectionTitleProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode\n leading?: ReactNode\n}\n\nfunction SectionTitle({ children, leading, ...others }: SectionTitleProps) {\n return (\n <StyledSectionTitle data-testid=\"section-title\" {...others}>\n {leading && <Leading>{leading}</Leading>}\n {children}\n </StyledSectionTitle>\n )\n}\n\nfunction Section({ children, ...others }: SectionProps): JSX.Element {\n return (\n <StyledSection data-testid=\"section\" {...others}>\n {children}\n </StyledSection>\n )\n}\n\nSection.Title = SectionTitle\n\nexport default Section\n","/**\n * Add basic CSS style for hide elements\n * @param {boolean} accessible - should keep element visible for screen readers\n * @returns {string}\n */\nfunction hiddenStyle(accessible = false): string {\n if (accessible) {\n return `\n border: 0 !important;\n clip: rect(0 0 0 0) !important;\n clip-path: inset(50%) !important;\n height: 1px !important;\n margin: -1px !important;\n overflow: hidden !important;\n padding: 0 !important;\n position: absolute !important;\n white-space: nowrap !important;\n width: 1px !important;\n pointer-events: none;\n `\n }\n\n return `\n display: none !important;\n opacity: 0 !important;\n `\n}\n\nexport default hiddenStyle\n","import React, { createContext, ReactNode, useState } from 'react'\n\ntype AccordionContextType = [boolean, () => void]\nconst AccordionContext = createContext<AccordionContextType | undefined>(undefined)\n\nfunction AccordionProvider({\n expanded,\n children,\n onExpandedChange,\n initialExpanded = false,\n}: {\n children: ReactNode\n initialExpanded?: boolean\n expanded?: boolean\n onExpandedChange?: (expanded: boolean) => void\n}): JSX.Element {\n const [openState, setOpenState] = useState(initialExpanded)\n const open = expanded ?? openState\n\n function toggle() {\n onExpandedChange?.(!open)\n setOpenState(!open)\n }\n\n return <AccordionContext.Provider value={[open, toggle]}>{children}</AccordionContext.Provider>\n}\n\nfunction useAccordionContext(): AccordionContextType {\n const context = React.useContext(AccordionContext)\n if (!context) {\n throw new Error('useAccordionContext must be used within an AccordionProvider')\n }\n return context\n}\n\nexport { AccordionProvider, useAccordionContext }\n","import React, { Fragment } from 'react'\nimport type { PropsWithChildren, HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport styled from 'styled-components'\nimport { identity, isFunction } from '@loadsmart/utils-function'\n\nimport font from 'styles/font'\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\nimport conditional, { whenProps } from 'tools/conditional'\nimport hoverable from 'styles/hoverable'\nimport focusable from 'styles/focusable'\nimport transition from 'styles/transition'\nimport ellipsizable from 'styles/ellipsizable'\nimport hidden from 'styles/hidden'\n\nimport { AccordionProvider, useAccordionContext } from './Accordion.context'\n\nconst StyledWrapper = styled.article<{ open: boolean }>`\n background: ${token('color-neutral-white')};\n border: 1px solid\n ${conditional({\n 'color-neutral-light': whenProps({ open: false }),\n 'color-accent': whenProps({ open: true }),\n })};\n border-radius: ${token('border-radius-s')};\n\n ${hoverable`\n border-color: ${token('color-accent')};\n `}\n`\n\nconst StyledToggle = styled.button<{ open: boolean }>`\n ${font({\n height: 'font-height-2',\n })}\n\n ${transition()}\n\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n\n font-size: ${token('font-size-3')};\n font-weight: ${conditional({\n 'font-weight-regular': whenProps({ open: false }),\n 'font-weight-bold': whenProps({ open: true }),\n })};\n text-align: left;\n\n cursor: pointer;\n\n color: ${token('color-neutral-darker')};\n\n background-color: ${token('color-transparent')};\n border-radius: ${token('border-radius-s')};\n border: none;\n box-sizing: border-box;\n\n padding: ${token('space-s')} ${token('space-m')};\n\n width: 100%;\n\n ${hoverable`\n background: ${token('color-neutral-lighter')};\n `}\n\n ${focusable`\n box-shadow: ${token('shadow-glow-primary')};\n `}\n`\n\nconst StyledContent = styled.section<{ open: boolean }>`\n ${font({\n height: 'font-height-2',\n weight: 'font-weight-medium',\n })}\n\n padding-left: ${conditional({\n '0': whenProps({ open: false }),\n 'space-m': whenProps({ open: true }),\n })};\n padding-right: ${conditional({\n '0': whenProps({ open: false }),\n 'space-m': whenProps({ open: true }),\n })};\n padding-top: ${conditional({\n '0': whenProps({ open: false }),\n 'space-xl': whenProps({ open: true }),\n })};\n padding-bottom: ${conditional({\n '0': whenProps({ open: false }),\n 'space-s': whenProps({ open: true }),\n })};\n\n overflow-x: hidden;\n overflow-y: auto;\n`\n\nconst HiddenInput = styled.input`\n ${hidden()}\n\n &:not(:checked) + ${StyledContent} {\n height: 0;\n }\n\n &:checked + ${StyledContent} {\n height: 100%;\n }\n`\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n pointer-events: none;\n`\n\nconst Leading = styled(StyledSpan)`\n margin: 0 ${token('space-xs')} 0 0;\n`\n\nconst Trailing = styled(StyledSpan)`\n margin: 0 0 0 auto;\n`\n\nconst Children = styled.span`\n pointer-events: none;\n\n ${ellipsizable()}\n`\n\nfunction ToggleIndicator({ open }: { open: boolean }) {\n return <Icon name={open ? 'minus' : 'plus'} size={16} />\n}\n\nfunction AccordionWrapper({\n children,\n ...others\n}: PropsWithChildren<HTMLAttributes<HTMLElement>>): JSX.Element {\n const [open] = useAccordionContext()\n return (\n <StyledWrapper data-testid=\"accordion\" open={open} {...others}>\n {children}\n </StyledWrapper>\n )\n}\n\nexport type AccordionToggleProps = {\n leading?: ReactNode | ((expanded: boolean) => ReactNode)\n trailing?: ReactNode | ((expanded: boolean) => ReactNode)\n}\n\nfunction AccordionToggle({\n leading,\n trailing: propsTrailing,\n children,\n}: PropsWithChildren<AccordionToggleProps>): JSX.Element {\n const [open, toggle] = useAccordionContext()\n\n const trailing = propsTrailing === undefined ? <ToggleIndicator open={open} /> : propsTrailing\n\n return (\n <StyledToggle open={open} onClick={toggle} type=\"button\" data-testid=\"accordion-toggle\">\n {leading && (\n <Leading data-testid=\"accordion-toggle-leading\">\n {isFunction(leading) ? leading(open) : leading}\n </Leading>\n )}\n <Children>{children}</Children>\n {trailing && (\n <Trailing data-testid=\"accordion-toggle-trailing\">\n {isFunction(trailing) ? trailing(open) : trailing}\n </Trailing>\n )}\n </StyledToggle>\n )\n}\n\nexport type AccordionBodyProps = HTMLAttributes<HTMLElement>\n\nfunction AccordionBody({ children, ...props }: PropsWithChildren<AccordionBodyProps>): JSX.Element {\n const [open] = useAccordionContext()\n\n return (\n <Fragment>\n <HiddenInput type=\"checkbox\" checked={open} onChange={identity} />\n <StyledContent\n open={open}\n className={clsx({\n 'is-open': open,\n })}\n aria-hidden={!open ? 'true' : 'false'}\n data-testid=\"accordion-content\"\n {...props}\n >\n {children}\n </StyledContent>\n </Fragment>\n )\n}\n\nexport interface AccordionProps extends HTMLAttributes<HTMLElement> {\n expanded?: boolean\n initialExpanded?: boolean\n onExpandedChange?: (expanded: boolean) => void\n}\n\nfunction Accordion({\n children,\n expanded,\n initialExpanded,\n onExpandedChange,\n ...others\n}: AccordionProps): JSX.Element {\n return (\n <AccordionProvider\n expanded={expanded}\n initialExpanded={initialExpanded}\n onExpandedChange={onExpandedChange}\n >\n <AccordionWrapper {...others}>{children}</AccordionWrapper>\n </AccordionProvider>\n )\n}\n\nAccordion.Toggle = AccordionToggle\nAccordion.Body = AccordionBody\n\nexport default Accordion\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport React, { ReactElement, useState } from 'react'\nimport styled from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\nimport { getToken as token } from 'theming'\nimport { Icon as DefaultIcon } from 'components/Icon'\n\nimport { BaseButton } from 'components/Button'\nimport DefaultCloseButton from 'common/CloseButton'\n\nexport interface BannerProps {\n className?: string\n variant?: 'success' | 'danger' | 'warning' | 'neutral'\n icon?: JSX.Element\n scale?: 'default' | 'large'\n title?: string | ReactElement\n description?: string | ReactElement\n onClose?: () => void\n dismissible?: boolean\n}\n\nexport interface BannerActionProps extends BannerProps {\n action?: string\n secondaryAction?: string\n onActionButtonClick?: () => void\n onSecondaryActionButtonClick?: () => void\n}\n\ninterface VariantProps {\n variant?: 'success' | 'danger' | 'warning' | 'neutral'\n}\n\nconst Description = styled.div`\n color: ${token('banner-description-color')};\n font-size: ${token('banner-font-size')};\n line-height: ${token('banner-font-height')};\n text-align: left;\n`\n\nconst Title = styled.div<VariantProps>`\n font-weight: ${token('banner-title-font-weight')};\n font-size: ${token('banner-font-size')};\n line-height: ${token('banner-font-height')};\n text-align: left;\n`\n\nconst TextSection = styled.div<{ $dismissible?: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-items: center;\n padding-right: ${conditional({\n 'space-xl': whenProps({ $dismissible: true }),\n })};\n`\n\nconst StyledBanner = styled.div<Omit<BannerProps, 'dismissible'>>`\n position: relative;\n\n display: flex;\n flex-wrap: ${conditional({\n wrap: whenProps({ scale: 'default' }),\n 'no-wrap': whenProps({ scale: 'large' }),\n })};\n align-items: center;\n min-width: ${token('banner-min-width')};\n\n min-height: ${conditional({\n 'banner-default-height': whenProps({ scale: 'default' }),\n })};\n padding: ${conditional({\n 'banner-default-padding-y': whenProps({ scale: 'default' }),\n 'banner-large-padding': whenProps({ scale: 'large' }),\n })}\n ${conditional({\n 'banner-default-padding-x': whenProps({ scale: 'default' }),\n 'banner-large-padding': whenProps({ scale: 'large' }),\n })};\n\n color: ${conditional({\n 'banner-title-color-success': whenProps({ variant: 'success' }),\n 'banner-title-color-danger': whenProps({ variant: 'danger' }),\n 'banner-title-color-warning': whenProps({ variant: 'warning' }),\n 'banner-title-color-neutral': whenProps({ variant: 'neutral' }),\n })};\n\n background: ${conditional({\n 'banner-background-success': whenProps({ variant: 'success' }),\n 'banner-background-warning': whenProps({ variant: 'warning' }),\n 'banner-background-danger': whenProps({ variant: 'danger' }),\n 'banner-background-neutral': whenProps({ variant: 'neutral' }),\n })};\n\n border-color: ${conditional({\n 'banner-border-color-success': whenProps({ variant: 'success' }),\n 'banner-border-color-warning': whenProps({ variant: 'warning' }),\n 'banner-border-color-danger': whenProps({ variant: 'danger' }),\n 'banner-border-color-neutral': whenProps({ variant: 'neutral' }),\n })};\n border-style: solid;\n border-width: ${token('banner-border-width')};\n\n border-radius: ${token('banner-border-radius')};\n`\n\nexport const CloseButton = styled(DefaultCloseButton)`\n position: absolute;\n top: ${conditional({\n 'banner-default-close-top': whenProps({ scale: 'default' }),\n 'banner-large-close-top': whenProps({ scale: 'large' }),\n })};\n right: ${conditional({\n 'banner-default-close-right': whenProps({ scale: 'default' }),\n 'banner-large-close-right': whenProps({ scale: 'large' }),\n })};\n\n width: ${token('banner-icon-width')};\n height: ${token('banner-icon-height')};\n`\n\nconst IconWrapper = styled.span<{ scale: string }>`\n display: inline-flex;\n align-items: center;\n\n align-self: ${conditional({\n 'banner-default-icon-alignment': whenProps({ scale: 'default' }),\n 'banner-large-icon-alignment': whenProps({ scale: 'large' }),\n })};\n justify-content: center;\n\n margin-right: ${token('banner-icon-margin-right')};\n`\n\nexport const Icon = styled(DefaultIcon)`\n width: ${token('banner-icon-width')};\n height: ${token('banner-icon-height')};\n`\n\nconst Button = styled(BaseButton)`\n min-width: 88px;\n margin-top: ${token('space-s')};\n margin-left: ${conditional({\n '0': whenProps({ variant: 'primary' }),\n 'banner-secondary-button-margin-left': whenProps({ variant: 'secondary' }),\n })};\n\n color: ${conditional({\n 'banner-button-text-color': whenProps({ variant: 'primary' }),\n 'banner-button-background-danger': whenProps({ variant: 'secondary', className: 'danger' }),\n 'banner-button-background-warning': whenProps({ variant: 'secondary', className: 'warning' }),\n 'banner-button-background-neutral': whenProps({ variant: 'secondary', className: 'neutral' }),\n 'banner-button-background-success': whenProps({ variant: 'secondary', className: 'success' }),\n })};\n\n background-color: ${conditional({\n 'banner-button-background-success': whenProps({ variant: 'primary', className: 'success' }),\n 'banner-button-background-danger': whenProps({ variant: 'primary', className: 'danger' }),\n 'banner-button-background-warning': whenProps({ variant: 'primary', className: 'warning' }),\n 'banner-button-background-neutral': whenProps({ variant: 'primary', className: 'neutral' }),\n 'banner-button-background-secondary': whenProps({ variant: 'secondary' }),\n })};\n\n border-color: ${conditional({\n 'banner-button-background-success': whenProps({ className: 'success' }),\n 'banner-button-background-danger': whenProps({ className: 'danger' }),\n 'banner-button-background-warning': whenProps({ className: 'warning' }),\n 'banner-button-background-neutral': whenProps({ className: 'neutral' }),\n })};\n`\nconst InlineButton = styled(Button)`\n flex-shrink: 0;\n align-self: center;\n`\n\nconst ButtonWrapper = styled.div`\n display: flex;\n margin-top: -${token('space-s')};\n margin-right: 0;\n margin-left: auto;\n`\n\nconst LargeButtonWrapper = styled.div`\n display: flex;\n margin-left: 0;\n`\n\nconst TextWrapper = styled.div`\n display: flex;\n align-items: center;\n margin-right: ${token('space-s')};\n`\n\nconst getAlertIcon = (variant: string, scale: string, icon?: JSX.Element) => {\n if (icon) {\n return <IconWrapper scale={scale}>{icon}</IconWrapper>\n }\n\n let iconName = ''\n switch (variant) {\n case 'success':\n iconName = 'check'\n break\n case 'danger':\n case 'warning':\n iconName = 'warning'\n break\n default:\n iconName = 'information'\n }\n\n return (\n <IconWrapper scale={scale}>\n <Icon name={iconName} size={24} />\n </IconWrapper>\n )\n}\n\nfunction Banner({\n scale = 'default',\n variant = 'neutral',\n icon,\n title,\n description,\n onClose,\n dismissible = true,\n ...others\n}: BannerProps) {\n const [visible, setVisible] = useState<boolean>(true)\n\n if (!visible) return null\n\n return (\n <StyledBanner {...others} scale={scale} variant={variant}>\n <TextWrapper>\n {getAlertIcon(variant, scale, icon)}\n <TextSection $dismissible={dismissible}>\n {scale === 'default' ? (\n React.isValidElement(title) ? (\n title\n ) : (\n <Title variant={variant}>{title}</Title>\n )\n ) : (\n <>\n {React.isValidElement(title) ? title : <Title>{title}</Title>}\n {description &&\n (React.isValidElement(description) ? (\n description\n ) : (\n <Description>{description}</Description>\n ))}\n </>\n )}\n </TextSection>\n </TextWrapper>\n {dismissible && (\n <CloseButton\n scale={scale}\n onClick={() => {\n onClose?.()\n setVisible(false)\n }}\n type=\"button\"\n data-testid=\"close-button\"\n >\n <Icon name=\"close\" size={20} />\n </CloseButton>\n )}\n </StyledBanner>\n )\n}\n\nexport function BannerLarge({\n scale = 'large',\n variant = 'neutral',\n icon,\n title,\n description,\n onClose,\n dismissible = true,\n ...others\n}: BannerProps) {\n const [visible, setVisible] = useState<boolean>(true)\n\n if (!visible) return null\n\n return (\n <StyledBanner {...others} scale={scale} variant={variant}>\n {getAlertIcon(variant, scale, icon)}\n <TextSection $dismissible={dismissible}>\n {React.isValidElement(title) ? title : <Title>{title}</Title>}\n {React.isValidElement(description) ? description : <Description>{description}</Description>}\n </TextSection>\n {dismissible && (\n <CloseButton\n scale={scale}\n onClick={() => {\n onClose?.()\n setVisible(false)\n }}\n type=\"button\"\n >\n <Icon name=\"close\" size={16} />\n </CloseButton>\n )}\n </StyledBanner>\n )\n}\n\nexport function BannerAction({\n scale = 'default',\n variant = 'neutral',\n icon,\n title,\n action,\n secondaryAction,\n onActionButtonClick,\n onSecondaryActionButtonClick,\n ...others\n}: BannerActionProps): JSX.Element {\n return (\n <StyledBanner {...others} scale={scale} variant={variant}>\n <TextWrapper>\n {getAlertIcon(variant, scale, icon)}\n <TextSection>\n {React.isValidElement(title) ? title : <Title variant={variant}>{title}</Title>}\n </TextSection>\n </TextWrapper>\n <ButtonWrapper>\n <InlineButton\n scale=\"small\"\n variant=\"primary\"\n className={variant}\n type=\"button\"\n onClick={onActionButtonClick}\n >\n {action}\n </InlineButton>\n {secondaryAction && (\n <InlineButton\n scale=\"small\"\n className={variant}\n variant=\"secondary\"\n type=\"button\"\n onClick={onSecondaryActionButtonClick}\n >\n {secondaryAction}\n </InlineButton>\n )}\n </ButtonWrapper>\n </StyledBanner>\n )\n}\n\nexport function BannerActionLarge({\n scale = 'large',\n variant = 'neutral',\n icon,\n title,\n description,\n action,\n secondaryAction,\n onActionButtonClick,\n onSecondaryActionButtonClick,\n onClose,\n dismissible = false,\n ...others\n}: BannerActionProps) {\n const [visible, setVisible] = useState<boolean>(true)\n\n if (!visible) return null\n\n return (\n <StyledBanner {...others} scale={scale} variant={variant}>\n {getAlertIcon(variant, scale, icon)}\n <TextSection $dismissible={dismissible}>\n {React.isValidElement(title) ? title : <Title>{title}</Title>}\n {React.isValidElement(description) ? description : <Description>{description}</Description>}\n <LargeButtonWrapper>\n <Button\n scale=\"small\"\n variant=\"primary\"\n className={variant}\n type=\"button\"\n onClick={onActionButtonClick}\n >\n {action}\n </Button>\n {secondaryAction && (\n <Button\n scale=\"small\"\n className={variant}\n variant=\"secondary\"\n type=\"button\"\n onClick={onSecondaryActionButtonClick}\n >\n {secondaryAction}\n </Button>\n )}\n </LargeButtonWrapper>\n </TextSection>\n {dismissible && (\n <CloseButton\n scale={scale}\n onClick={() => {\n onClose?.()\n setVisible(false)\n }}\n >\n <Icon name=\"close\" size={16} />\n </CloseButton>\n )}\n </StyledBanner>\n )\n}\n\nexport default Banner\n","import type { PropsWithChildren } from 'react'\nimport styled from 'styled-components'\n\nimport typography, { TypographyOptions, TypographyVariants } from 'styles/typography'\n\nexport type TextProps = PropsWithChildren<{\n variant?: TypographyVariants\n italic?: TypographyOptions['italic']\n color?: TypographyOptions['color']\n}>\n\nexport default styled.span<TextProps>`\n ${({ variant, italic, color }) => typography(variant, { italic, color })}\n`\n","import React, { PropsWithChildren } from 'react'\nimport ReactDOM from 'react-dom'\nimport styled, { css } from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\nimport { getToken as token } from 'theming'\nimport { Text } from 'components/Text'\nimport CloseButton from 'common/CloseButton'\nimport rem from 'utils/toolset/rem'\n\ninterface WithScaleProps {\n scale?: 'small' | 'default' | 'large'\n}\n\nexport interface ModalProps extends WithScaleProps {\n className?: string\n id?: string\n open: boolean\n fullscreen?: boolean\n onOverlayClick?: () => void\n}\n\ninterface ModalWrapperProps {\n className?: string\n id?: string\n open: boolean\n fullscreen: boolean\n}\n\ninterface ContentProps extends WithScaleProps {\n fullscreen: boolean\n}\n\nconst ModalWrapper = styled.div<ModalWrapperProps>`\n position: fixed;\n top: 0;\n left: 0;\n\n z-index: ${token('z-index-overlay')};\n\n display: ${conditional({\n flex: whenProps({ open: true }),\n none: whenProps({ open: false }),\n })};\n align-items: center;\n justify-content: center;\n width: 100%;\n\n height: 100%;\n\n background: ${token('modal-overlay-background')};\n`\n\nconst HeaderWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: content-box;\n height: ${token('space-xl')};\n margin-bottom: ${token('space-l')};\n padding-bottom: ${token('space-s')};\n\n border-bottom: 1px solid ${token('color-neutral-light')};\n`\nconst Close = styled(CloseButton).attrs({\n size: 16,\n})`\n position: absolute;\n top: ${rem('36px')};\n right: ${rem('36px')};\n`\n\nconst Content = styled.div<ContentProps>`\n background: white;\n border-radius: ${token('border-radius-s')};\n box-shadow: ${token('shadow-modal')};\n\n padding: ${token('space-xl')};\n\n margin: 0 auto;\n\n position: relative;\n\n outline: none;\n\n z-index: ${token('z-index-modal')};\n\n ${({ fullscreen }) =>\n fullscreen &&\n css`\n position: absolute;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 100vh;\n `}\n\n ${({ fullscreen }) =>\n !fullscreen &&\n css`\n position: relative;\n left: auto;\n\n width: 80%;\n max-width: ${conditional({\n 'modal-small-max-width': whenProps({ scale: 'small' }),\n 'modal-max-width': whenProps({ scale: 'default' }),\n 'modal-large-max-width': whenProps({ scale: 'large' }),\n })};\n height: auto;\n `}\n`\n\nconst Header = ({ title, children }: PropsWithChildren<{ title: string }>) => {\n return (\n <HeaderWrapper>\n {title && (\n <Text variant=\"heading-md-bold\" color=\"color-neutral-darkest\">\n {title}\n </Text>\n )}\n {children}\n </HeaderWrapper>\n )\n}\n\nfunction Modal({\n scale = 'default',\n children,\n open,\n fullscreen = false,\n onOverlayClick = () => null,\n ...others\n}: PropsWithChildren<ModalProps>): JSX.Element {\n return ReactDOM.createPortal(\n <ModalWrapper\n open={open}\n fullscreen={fullscreen}\n onClick={onOverlayClick}\n data-testid=\"modal-overlay\"\n {...others}\n >\n <Content\n role=\"dialog\"\n aria-modal=\"true\"\n fullscreen={fullscreen}\n scale={scale}\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n {children}\n </Content>\n </ModalWrapper>,\n document.body\n )\n}\n\nModal.Header = Header\nModal.Close = Close\n\nexport default Modal\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\n\nimport { Modal } from '../Modal'\nimport { Button } from '../Button'\nimport type { ButtonProps } from '../Button'\nimport conditional, { whenProps } from 'tools/conditional'\nimport rem from 'utils/toolset/rem'\n\ninterface WithScaleProps {\n scale?: 'small' | 'default' | 'large'\n}\n\nexport interface DialogProps extends WithScaleProps {\n className?: string\n id?: string\n open: boolean\n children: ReactNode\n onOverlayClick?: () => void\n}\n\nconst Header = styled.h1`\n padding-bottom: ${token('space-s')};\n\n color: ${token('dialog-header-color')};\n font-weight: ${token('font-weight-bold')};\n font-size: ${token('font-size-2')};\n line-height: ${token('font-height-2')};\n text-align: center;\n\n border-bottom: 1px solid ${token('dialog-header-border-color')};\n`\nconst Body = styled.div`\n margin-top: ${token('space-l')};\n margin-bottom: ${token('space-l')};\n\n color: ${token('dialog-body-font-color')};\n font-size: ${token('font-size-4')};\n line-height: ${token('font-height-3')};\n text-align: center;\n`\n\nconst ActionWrapper = styled.div`\n button {\n width: 100%;\n margin-bottom: ${token('space-s')};\n }\n`\n\nconst Close = styled(Modal.Close)`\n top: ${token('space-xl')};\n right: ${rem('36px')};\n`\n\nconst StyledDialogActions = styled.div<{ $scale: string; $direction: string }>`\n display: flex;\n flex-flow: ${conditional({\n 'row-reverse': whenProps({ $direction: 'horizontal' }),\n column: whenProps({ $direction: 'vertical' }),\n })};\n justify-content: ${conditional({\n center: whenProps({ $scale: 'small' }),\n end: whenProps({ $scale: ['default', 'large'] }),\n })};\n\n ${ActionWrapper}:last-child {\n margin-right: ${conditional({\n 'space-m': whenProps({ $direction: 'horizontal' }),\n initial: whenProps({ $direction: 'vertical' }),\n })}};\n }\n`\n\nfunction DialogActions({\n scale = 'default',\n direction = 'vertical',\n children,\n}: {\n scale?: 'small' | 'default' | 'large'\n direction?: 'vertical' | 'horizontal'\n children: ReactNode\n}) {\n return (\n <StyledDialogActions $scale={scale} $direction={direction}>\n {children}\n </StyledDialogActions>\n )\n}\n\nexport interface DialogActionConfirmProps extends Omit<ButtonProps, 'onClick' | 'variant'> {\n onConfirm: () => void\n}\n\nfunction DialogActionConfirm({\n onConfirm = () => void 0,\n children = 'CONFIRM',\n ...others\n}: DialogActionConfirmProps) {\n return (\n <ActionWrapper>\n <Button {...others} onClick={onConfirm} variant=\"primary\">\n {children}\n </Button>\n </ActionWrapper>\n )\n}\n\nexport interface DialogActionCancelProps extends Omit<ButtonProps, 'onClick' | 'variant'> {\n onCancel: () => void\n}\n\nfunction DialogActionCancel({\n onCancel = () => void 0,\n children = 'CANCEL',\n ...others\n}: DialogActionCancelProps) {\n return (\n <ActionWrapper>\n <Button {...others} onClick={onCancel} variant=\"secondary\">\n {children}\n </Button>\n </ActionWrapper>\n )\n}\n\nfunction Dialog({ scale = 'default', open, ...others }: DialogProps): JSX.Element {\n return <Modal open={open} scale={scale} {...others} />\n}\n\nDialog.Header = Header\nDialog.Body = Body\nDialog.ActionConfirm = DialogActionConfirm\nDialog.ActionCancel = DialogActionCancel\nDialog.Actions = DialogActions\nDialog.Close = Close\n\nexport default Dialog\n","import { useCallback, useEffect, useState } from 'react'\n\nexport interface useDialogProps {\n open: boolean\n onOpen?: () => void\n onClose?: () => void\n}\n\nfunction useDialog({ open: openProp, onOpen, onClose }: useDialogProps): {\n open: boolean\n show: () => void\n hide: () => void\n toggle: () => void\n} {\n const [open, setOpen] = useState(openProp)\n\n const show = useCallback(\n function show() {\n setOpen(true)\n onOpen?.()\n },\n [onOpen]\n )\n\n const hide = useCallback(\n function hide() {\n setOpen(false)\n onClose?.()\n },\n [onClose]\n )\n\n const toggle = useCallback(\n function toggle() {\n if (open) {\n hide()\n } else {\n show()\n }\n },\n [hide, open, show]\n )\n\n useEffect(\n function updateState() {\n setOpen(openProp)\n },\n [openProp]\n )\n\n return {\n open,\n show,\n hide,\n toggle,\n }\n}\n\nexport default useDialog\n","function getAlignment(placement) {\n return placement.split('-')[1];\n}\n\nfunction getLengthFromAxis(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\n\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\n\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y';\n}\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n const commonAlign = reference[length] / 2 - floating[length] / 2;\n const side = getSide(placement);\n const isVertical = mainAxis === 'x';\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain positioning strategy.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n continue;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\n\nfunction getSideObjectFromPadding(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\n\nfunction rectToClientRect(rect) {\n return {\n ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = options;\n const paddingObject = getSideObjectFromPadding(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n ...rects.floating,\n x,\n y\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\nconst min = Math.min;\nconst max = Math.max;\n\nfunction within(min$1, value, max$1) {\n return max(min$1, min(value, max$1));\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = options || {};\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements\n } = state;\n if (element == null) {\n return {};\n }\n const paddingObject = getSideObjectFromPadding(padding);\n const coords = {\n x,\n y\n };\n const axis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min = paddingObject[minProp];\n const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = within(min, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. This stops `shift()` from taking action, but can\n // be worked around by calling it again after the `arrow()` if desired.\n const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min ? paddingObject[minProp] : paddingObject[maxProp]) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min ? min - center : max - center : 0;\n return {\n [axis]: coords[axis] - alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset\n }\n };\n }\n});\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst allPlacements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-start\", side + \"-end\"), []);\n\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\n\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return {\n main: mainAlignmentSide,\n cross: getOppositePlacement(mainAlignmentSide)\n };\n}\n\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = allPlacements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = options;\n const placements = alignment !== undefined || allowedPlacements === allPlacements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const {\n main,\n cross\n } = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[main], overflow[cross]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\n\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = options;\n const side = getSide(placement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const {\n main,\n cross\n } = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[main], overflow[cross]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$map$so;\n const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = options;\n const {\n rects\n } = state;\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = options;\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getSideObjectFromPadding(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getMainAxisFromPlacement(placement) === 'x') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nasync function convertValueToCoords(state, value) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getMainAxisFromPlacement(placement) === 'x';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = typeof value === 'function' ? value(state) : value;\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null,\n ...rawValue\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (value) {\n if (value === void 0) {\n value = 0;\n }\n return {\n name: 'offset',\n options: value,\n async fn(state) {\n const {\n x,\n y\n } = state;\n const diffCoords = await convertValueToCoords(state, value);\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: diffCoords\n };\n }\n };\n};\n\nfunction getCrossAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = options;\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const mainAxis = getMainAxisFromPlacement(getSide(placement));\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = within(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = within(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = options;\n const coords = {\n x,\n y\n };\n const mainAxis = getMainAxisFromPlacement(placement);\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = typeof offset === 'function' ? offset(state) : offset;\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = options;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const axis = getMainAxisFromPlacement(placement);\n const isXAxis = axis === 'x';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const overflowAvailableHeight = height - overflow[heightSide];\n const overflowAvailableWidth = width - overflow[widthSide];\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if (isXAxis) {\n const maximumClippingWidth = width - overflow.left - overflow.right;\n availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n } else {\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isXAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, rectToClientRect, shift, size };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\n\nfunction getWindow(node) {\n var _node$ownerDocument;\n return ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\n\nfunction getComputedStyle$1(element) {\n return getWindow(element).getComputedStyle(element);\n}\n\nfunction isNode(value) {\n return value instanceof getWindow(value).Node;\n}\nfunction getNodeName(node) {\n return isNode(node) ? (node.nodeName || '').toLowerCase() : '';\n}\n\nlet uaString;\nfunction getUAString() {\n if (uaString) {\n return uaString;\n }\n const uaData = navigator.userAgentData;\n if (uaData && Array.isArray(uaData.brands)) {\n uaString = uaData.brands.map(item => item.brand + \"/\" + item.version).join(' ');\n return uaString;\n }\n return navigator.userAgent;\n}\n\nfunction isHTMLElement(value) {\n return value instanceof getWindow(value).HTMLElement;\n}\nfunction isElement(value) {\n return value instanceof getWindow(value).Element;\n}\nfunction isShadowRoot(node) {\n // Browsers without `ShadowRoot` support.\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n const OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle$1(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n // TODO: Try to use feature detection here instead.\n const isFirefox = /firefox/i.test(getUAString());\n const css = getComputedStyle$1(element);\n const backdropFilter = css.backdropFilter || css.WebkitBackdropFilter;\n\n // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n return css.transform !== 'none' || css.perspective !== 'none' || (backdropFilter ? backdropFilter !== 'none' : false) || isFirefox && css.willChange === 'filter' || isFirefox && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective'].some(value => css.willChange.includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => {\n // Add type check for old browsers.\n const contain = css.contain;\n return contain != null ? contain.includes(value) : false;\n });\n}\n\n/**\n * Determines whether or not `.getBoundingClientRect()` is affected by visual\n * viewport offsets. In Safari, the `x`/`y` offsets are values relative to the\n * visual viewport, while in other engines, they are values relative to the\n * layout viewport.\n */\nfunction isClientRectVisualViewportBased() {\n // TODO: Try to use feature detection here instead. Feature detection for\n // this can fail in various ways, making the userAgent check the most\n // reliable:\n // • Always-visible scrollbar or not\n // • Width of <html>\n\n // Is Safari.\n return /^((?!chrome|android).)*safari/i.test(getUAString());\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\n\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n fallback: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nconst FALLBACK_SCALE = {\n x: 1,\n y: 1\n};\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return FALLBACK_SCALE;\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n fallback\n } = getCssDimensions(domElement);\n let x = (fallback ? round(rect.width) : rect.width) / width;\n let y = (fallback ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n var _win$visualViewport, _win$visualViewport2;\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = FALLBACK_SCALE;\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const win = domElement ? getWindow(domElement) : window;\n const addVisualOffsets = isClientRectVisualViewportBased() && isFixedStrategy;\n let x = (clientRect.left + (addVisualOffsets ? ((_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) || 0 : 0)) / scale.x;\n let y = (clientRect.top + (addVisualOffsets ? ((_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) || 0 : 0)) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentIFrame = win.frameElement;\n while (currentIFrame && offsetParent && offsetWin !== win) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle(currentIFrame);\n iframeRect.x += (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n iframeRect.y += (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += iframeRect.x;\n y += iframeRect.y;\n currentIFrame = getWindow(currentIFrame).frameElement;\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\nfunction getDocumentElement(node) {\n return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;\n}\n\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n if (offsetParent === documentElement) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = {\n x: 1,\n y: 1\n };\n const offsets = {\n x: 0,\n y: 0\n };\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n };\n}\n\nfunction getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\n\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n // `getParentNode` will never return a `Document` due to the fallback\n // check, so it's either the <html> or <body> element.\n return parentNode.ownerDocument.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\n\nfunction getOverflowAncestors(node, list) {\n var _node$ownerDocument;\n if (list === void 0) {\n list = [];\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor));\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isClientRectVisualViewportBased();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : {\n x: 1,\n y: 1\n };\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const mutableRect = {\n ...clippingAncestor\n };\n if (isClientRectVisualViewportBased()) {\n var _win$visualViewport, _win$visualViewport2;\n const win = getWindow(element);\n mutableRect.x -= ((_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) || 0;\n mutableRect.y -= ((_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) || 0;\n }\n rect = mutableRect;\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n return getCssDimensions(element);\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n return element.offsetParent;\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n currentNode = getParentNode(currentNode);\n }\n }\n return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const window = getWindow(element);\n if (!isHTMLElement(element)) {\n return window;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n return window;\n }\n return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const rect = getBoundingClientRect(element, true, strategy === 'fixed', offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = {\n x: 0,\n y: 0\n };\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent, true);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\nconst platform = {\n getClippingRect,\n convertOffsetParentRelativeRectToViewportRelativeRect,\n isElement,\n getDimensions,\n getOffsetParent,\n getDocumentElement,\n getScale,\n async getElementRects(_ref) {\n let {\n reference,\n floating,\n strategy\n } = _ref;\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n return {\n reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n floating: {\n x: 0,\n y: 0,\n ...(await getDimensionsFn(floating))\n }\n };\n },\n getClientRects: element => Array.from(element.getClientRects()),\n isRTL: element => getComputedStyle$1(element).direction === 'rtl'\n};\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = true,\n animationFrame = false\n } = options;\n const ancestors = ancestorScroll || ancestorResize ? [...(isElement(reference) ? getOverflowAncestors(reference) : reference.contextElement ? getOverflowAncestors(reference.contextElement) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n // ignores Window, checks for [object VisualViewport]\n const isVisualViewport = !isElement(ancestor) && ancestor.toString().includes('V');\n if (ancestorScroll && (animationFrame ? isVisualViewport : true)) {\n ancestor.addEventListener('scroll', update, {\n passive: true\n });\n }\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n let observer = null;\n if (elementResize) {\n observer = new ResizeObserver(() => {\n update();\n });\n isElement(reference) && !animationFrame && observer.observe(reference);\n if (!isElement(reference) && reference.contextElement && !animationFrame) {\n observer.observe(reference.contextElement);\n }\n observer.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _observer;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n (_observer = observer) == null ? void 0 : _observer.disconnect();\n observer = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain CSS positioning\n * strategy.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { autoUpdate, computePosition, getOverflowAncestors, platform };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => {\n const {\n element,\n padding\n } = options;\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(args) {\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$1({\n element: element.current,\n padding\n }).fn(args);\n }\n return {};\n } else if (element) {\n return arrow$1({\n element,\n padding\n }).fn(args);\n }\n return {};\n }\n };\n};\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length, i, keys;\n if (a && b && typeof a == 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/react\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node != referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, [_setReference]);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, [_setFloating]);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n isPositioned: true\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n } else {\n update();\n }\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\nexport { arrow, useFloating };\n","import React, { CSSProperties, useMemo, useRef } from 'react'\nimport { useFloating, offset, flip, shift, arrow, autoUpdate } from '@floating-ui/react-dom'\nimport type { Placement } from '@floating-ui/react-dom'\n\nimport type {\n PopoverAlign,\n PopoverFloatingProps,\n PopoverPosition,\n PopoverProps,\n PopoverReferenceProps,\n UsePopoverReturn,\n} from './Popover.types'\n\nconst PopoverContext = React.createContext<UsePopoverReturn | undefined>(undefined)\n\nexport function usePopover(): UsePopoverReturn {\n const value = React.useContext(PopoverContext)\n\n if (!value) {\n throw new Error('usePopover must be used within a <Popover> Provider')\n }\n\n return value\n}\n\nfunction Popover(props: PopoverProps): JSX.Element {\n const arrowRef = useRef<HTMLElement | null>(null)\n\n const { position = 'bottom', align = 'start', strategy = 'fixed' } = props\n\n const desiredPlacement: Placement = `${position}${\n align === 'center' ? '' : `-${align}`\n }` as Placement\n\n const floating = useFloating({\n placement: desiredPlacement,\n strategy,\n middleware: [offset(10), flip(), shift(), arrow({ element: arrowRef, padding: 8 })],\n // TODO: FloatingUI docs states that `autoUpdate` is expensive.\n // This should be properly investidated since it's the way to\n // update fixed positions after scrolling.\n whileElementsMounted: autoUpdate,\n })\n\n const [resultPosition = position, resultAlign = align] = floating.placement.split('-') as [\n PopoverPosition,\n PopoverAlign\n ]\n\n const value = useMemo<UsePopoverReturn>(\n () => ({\n strategy,\n register: {\n setReference: floating.refs.setReference,\n setFloating: floating.refs.setFloating,\n setArrow: arrowRef,\n },\n result: {\n floatingStyles: floating.floatingStyles,\n arrow: { top: floating.middlewareData.arrow?.y, left: floating.middlewareData.arrow?.x },\n position: resultPosition,\n align: resultAlign,\n },\n }),\n [\n floating.refs.setFloating,\n floating.middlewareData.arrow?.x,\n floating.middlewareData.arrow?.y,\n floating.refs.setReference,\n floating.floatingStyles,\n resultAlign,\n resultPosition,\n strategy,\n ]\n )\n\n return <PopoverContext.Provider value={value}>{props.children}</PopoverContext.Provider>\n}\n\nfunction PopoverReference({ children, ...others }: PopoverReferenceProps): JSX.Element {\n const { register } = usePopover()\n\n return (\n <div ref={register.setReference} {...others}>\n {children}\n </div>\n )\n}\n\nfunction PopoverFloating({ children, style, ...others }: PopoverFloatingProps): JSX.Element {\n const { register, result } = usePopover()\n\n return (\n <div\n ref={register.setFloating}\n {...others}\n style={{\n ...result.floatingStyles,\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n\nPopover.Floating = PopoverFloating\nPopover.Reference = PopoverReference\n\nexport default Popover\n","import React, { HTMLAttributes, ReactNode, useCallback, useState } from 'react'\nimport type { PropsWithChildren } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport focusable from 'styles/focusable'\nimport conditional, { whenProps } from 'tools/conditional'\nimport { getToken as token } from 'theming'\nimport { Popover, usePopover } from 'components/Popover'\nimport typography from 'styles/typography'\n\nimport type { PopoverAlign, PopoverPosition } from 'components/Popover'\n\nexport enum TooltipPosition {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n}\n\nexport enum TooltipAlign {\n Start = 'start',\n Center = 'center',\n End = 'end',\n}\n\nexport interface TooltipProps extends HTMLAttributes<HTMLDivElement> {\n message: ReactNode\n scheme?: ColorScheme\n position?: TooltipPosition | PopoverPosition\n align?: TooltipAlign | PopoverAlign\n}\n\ntype ContainerProps = Pick<TooltipProps, 'scheme'>\n\nconst Container = styled.div<ContainerProps>`\n display: inline-block;\n\n position: relative;\n\n cursor: help;\n\n ${focusable`\n outline: ${conditional({\n '$tooltip-outline': whenProps({ scheme: 'light' }),\n '$tooltip-dark-outline': whenProps({ scheme: 'dark' }),\n })};\n `}\n`\n\nconst Bubble = styled(Popover.Floating)`\n ${typography('body')}\n\n white-space: initial;\n\n min-width: ${token('tooltip-min-width')};\n max-width: ${token('tooltip-max-width')};\n width: max-content;\n\n z-index: ${token('z-index-tooltip')};\n\n background: ${token('tooltip-background')};\n box-shadow: ${token('tooltip-shadow')};\n border-radius: ${token('tooltip-border-radius')};\n\n padding: ${token('tooltip-padding-y')} ${token('tooltip-padding-x')};\n\n color: ${token('tooltip-color')};\n font-size: ${token('tooltip-font-size')};\n line-height: ${token('tooltip-font-height')};\n`\n\ntype ArrowProps = Pick<TooltipProps, 'position'> & {\n top?: number\n left?: number\n}\n\nconst StyledArrow = styled.span<ArrowProps>`\n position: absolute;\n\n width: 0;\n height: 0;\n display: block;\n\n background: transparent;\n border-style: solid;\n\n z-index: ${token('z-index-tooltip')};\n\n ${({ top }) => top && `top: ${top}px;`}\n ${({ left }) => left && `left: ${left}px;`}\n\n ${({ position }) =>\n position === 'top' &&\n css`\n bottom: -8px;\n\n border-color: ${token('tooltip-background')} transparent transparent transparent;\n border-width: 12px 10px 0 10px;\n `}\n\n ${({ position }) =>\n position === 'bottom' &&\n css`\n top: -8px;\n\n border-color: transparent transparent ${token('tooltip-background')} transparent;\n border-width: 0 10px 12px 10px;\n `}\n\n ${({ position }) =>\n position === 'left' &&\n css`\n right: -8px;\n\n border-color: transparent transparent transparent ${token('tooltip-background')};\n border-width: 10px 0 10px 12px;\n `}\n\n ${({ position }) =>\n position === 'right' &&\n css`\n left: -8px;\n\n border-color: transparent ${token('tooltip-background')} transparent transparent;\n border-width: 10px 12px 10px 0;\n `}\n`\n\nfunction Arrow() {\n const { register, result } = usePopover()\n\n return (\n <StyledArrow\n ref={(element) => (register.setArrow.current = element)}\n position={result.position}\n top={result.arrow.top}\n left={result.arrow.left}\n />\n )\n}\n\nfunction Tooltip({\n children,\n message,\n scheme,\n position = TooltipPosition.Top,\n align = TooltipAlign.Center,\n ...rest\n}: PropsWithChildren<TooltipProps>): JSX.Element {\n const [visible, setVisible] = useState(false)\n\n const showTooltip = useCallback(() => {\n setVisible(true)\n }, [])\n\n const hideTooltip = useCallback(() => {\n setVisible(false)\n }, [])\n\n return (\n <Container\n {...rest}\n onFocus={showTooltip}\n onBlur={hideTooltip}\n onMouseEnter={showTooltip}\n onMouseLeave={hideTooltip}\n tabIndex={0}\n scheme={scheme}\n >\n <Popover position={position} align={align}>\n {visible && (\n <Bubble role=\"tooltip\">\n {message}\n <Arrow />\n </Bubble>\n )}\n\n <Popover.Reference>{children}</Popover.Reference>\n </Popover>\n </Container>\n )\n}\n\nexport default Tooltip\n","import React, { ReactNode } from 'react'\nimport type { LabelHTMLAttributes } from 'react'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\nimport { isNil } from '@loadsmart/utils-object'\n\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport ellipsizable from 'styles/ellipsizable'\nimport font from 'styles/font'\nimport { getToken as token } from 'theming'\n\nimport { Tooltip, TooltipProps } from '../Tooltip'\n\ntype AcceptedType = 'label' | 'div' | 'span'\n\ninterface WithAdditionalProps {\n as?: AcceptedType\n disabled?: boolean\n required?: boolean\n scheme?: ColorScheme\n tip?: ReactNode\n tipProps?: Omit<TooltipProps, 'message'>\n}\n\nexport interface LabelProps\n extends LabelHTMLAttributes<HTMLLabelElement | HTMLDivElement | HTMLSpanElement>,\n WithAdditionalProps {\n className?: string\n}\n\nconst StyledWrapper = styled.div`\n display: inline-flex;\n align-items: center;\n justify-content: flex-start;\n\n line-height: ${token('font-height-2')};\n ${disableable()}\n`\n\nconst StyledChildren = styled.span<WithAdditionalProps>`\n display: inline-block;\n\n ${font({\n height: 'label-font-height',\n weight: 'label-font-weight',\n })}\n\n font-size: ${token('label-font-size')};\n color: ${conditional({\n 'label-font-color': whenProps({ scheme: 'light' }),\n 'color-neutral-white': whenProps({ scheme: 'dark' }),\n })};\n ${ellipsizable()}\n`\n\nconst StyledRequired = styled.sup`\n top: 0;\n\n color: ${token('label-required-color')};\n font-size: ${token('label-font-size')};\n`\n\nconst StyledTooltipAnchor = styled.span<WithAdditionalProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin: 0 0 0 ${token('label-tooltip-margin-left')};\n\n color: ${conditional({\n 'label-tooltip-font-color': whenProps({ scheme: 'light' }),\n 'label-tooltip-dark-font-color': whenProps({ scheme: 'dark' }),\n })};\n font-weight: ${token('label-tooltip-font-weight')};\n font-size: ${token('label-tooltip-font-size')};\n\n background: ${conditional({\n 'label-tooltip-background-color': whenProps({ scheme: 'light' }),\n 'label-tooltip-dark-background-color': whenProps({ scheme: 'dark' }),\n })};\n border-radius: ${token('border-radius-circle')};\n`\n\nfunction Label({\n as = 'label',\n children,\n className,\n disabled = false,\n required,\n scheme = 'light',\n tip,\n tipProps = {},\n ...others\n}: LabelProps): JSX.Element {\n const tag = String(as || 'label') as AcceptedType\n\n return (\n <StyledWrapper\n data-testid=\"label\"\n as={tag}\n className={clsx(className, {\n 'is-disabled': disabled,\n })}\n {...others}\n >\n <StyledChildren scheme={scheme}>{children}</StyledChildren>\n {required && <StyledRequired>*</StyledRequired>}\n {!isNil(tip) && (\n <Tooltip scheme={scheme} message={tip || ''} {...tipProps}>\n <StyledTooltipAnchor scheme={scheme}>?</StyledTooltipAnchor>\n </Tooltip>\n )}\n </StyledWrapper>\n )\n}\n\nexport default Label\n","export const PAGINATION_ITEM_TYPE = {\n endEllipsis: 'end-ellipsis',\n next: 'next',\n page: 'page',\n previous: 'previous',\n startEllipsis: 'start-ellipsis',\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport hoverable from 'styles/hoverable'\nimport focusable from 'styles/focusable'\n\nimport { BaseButton, IconButton as IconButtonDefault } from 'components/Button'\nimport { Icon } from 'components/Icon'\nimport { Text } from 'components/Text'\n\nimport type { PaginationItemProps } from './Pagination.types'\nimport { PAGINATION_ITEM_TYPE } from './Pagination.constants'\n\nconst IconButton = styled(IconButtonDefault)`\n margin: ${token('space-xs')};\n`\n\nconst PageButton = styled(BaseButton)`\n background-color: transparent;\n border: none;\n\n ${focusable`\n box-shadow: ${token('button-primary-outline')};\n `}\n\n ${hoverable`\n * {\n text-decoration: underline;\n color: ${token('color-neutral-dark')};\n }\n `}\n\n ${Text} {\n color: ${conditional({\n 'color-accent': whenProps({ 'aria-current': true }),\n })};\n text-decoration: ${conditional({\n underline: whenProps({ 'aria-current': true }),\n })};\n }\n`\n\nconst ICONS_NAME: Record<string, string> = {\n previous: 'caret-left',\n next: 'caret-right',\n}\n\nfunction PaginationItem(props: PaginationItemProps): JSX.Element {\n const { itemType: type, page, ...others } = props\n\n const iconName = ICONS_NAME[type]\n\n if (iconName) {\n return (\n <IconButton {...others} id={iconName} aria-label={`Go to ${type} page`}>\n <Icon name={iconName} size={16} />\n </IconButton>\n )\n }\n\n return (\n <PageButton {...others} aria-label={`Go to page ${page?.toString() ?? ''}`}>\n <Text variant=\"body\">\n {[PAGINATION_ITEM_TYPE.endEllipsis, PAGINATION_ITEM_TYPE.startEllipsis].includes(type)\n ? '...'\n : page}\n </Text>\n </PageButton>\n )\n}\n\nexport default PaginationItem\n","import { PAGINATION_ITEM_TYPE } from './Pagination.constants'\nimport type { PaginationHelperArgs } from './Pagination.types'\n\nexport class PaginationHelper {\n boundaryCount: number\n count: number\n page: number\n siblingCount: number\n\n constructor({ boundaryCount, count, page, siblingCount }: PaginationHelperArgs) {\n this.boundaryCount = boundaryCount\n this.count = count\n this.page = page\n this.siblingCount = siblingCount\n }\n\n range(start: number, end: number): number[] {\n const length = end - start + 1\n return Array.from({ length }, (_, i) => start + i)\n }\n\n getStartPages(): number[] {\n return this.range(1, Math.min(this.boundaryCount, this.count))\n }\n\n getEndPages(): number[] {\n return this.range(\n Math.max(this.count - this.boundaryCount + 1, this.boundaryCount + 1),\n this.count\n )\n }\n\n getSibilingsStart(): number {\n return Math.max(\n Math.min(\n // Natural start\n this.page - this.siblingCount,\n // Lower boundary when page is high\n this.count - this.boundaryCount - this.siblingCount * 2 - 1\n ),\n // Greater than startPages\n this.boundaryCount + 2\n )\n }\n\n getSibilingsEnd(): number {\n const endPages = this.getEndPages()\n\n return Math.min(\n Math.max(\n // Natural end\n this.page + this.siblingCount,\n // Upper boundary when page is low\n this.boundaryCount + this.siblingCount * 2 + 2\n ),\n // Less than endPages\n endPages.length > 0 ? endPages[0] - 2 : this.count - 1\n )\n }\n\n getStartEllipsis(): number[] | string[] {\n const siblingsStart = this.getSibilingsStart()\n\n if (siblingsStart > this.boundaryCount + 2) {\n return [PAGINATION_ITEM_TYPE.startEllipsis]\n }\n\n if (this.boundaryCount + 1 < this.count - this.boundaryCount) {\n return [this.boundaryCount + 1]\n }\n\n return []\n }\n\n getEndEllipsis(): number[] | string[] {\n const siblingsEnd = this.getSibilingsEnd()\n\n if (siblingsEnd < this.count - this.boundaryCount - 1) {\n return [PAGINATION_ITEM_TYPE.endEllipsis]\n }\n\n if (this.count - this.boundaryCount > this.boundaryCount) {\n return [this.count - this.boundaryCount]\n }\n\n return []\n }\n}\n","import { PAGINATION_ITEM_TYPE } from './Pagination.constants'\nimport { PaginationHelper } from './Pagination.helper'\nimport type { usePaginationProps, usePaginationReturn } from './Pagination.types'\n\nfunction usePagination(props: usePaginationProps): usePaginationReturn[] {\n const {\n boundaryCount = 1,\n count,\n disabled = false,\n onChange: handleChange,\n page,\n siblingCount = 1,\n } = props\n\n const paginationHelper = new PaginationHelper({ boundaryCount, count, page, siblingCount })\n\n function handleClick({ page }: { page: number | null }) {\n if (page) {\n handleChange({ page })\n }\n }\n\n const startPages = paginationHelper.getStartPages()\n const endPages = paginationHelper.getEndPages()\n\n const siblingsStart = paginationHelper.getSibilingsStart()\n const siblingsEnd = paginationHelper.getSibilingsEnd()\n\n // Basic list of items to render\n // e.g. itemList = ['previous', 1, 'ellipsis', 4, 5, 6, 'ellipsis', 10, 'next']\n const itemList = [\n PAGINATION_ITEM_TYPE.previous,\n ...startPages,\n\n // Start ellipsis\n ...paginationHelper.getStartEllipsis(),\n\n // Sibling pages\n ...paginationHelper.range(siblingsStart, siblingsEnd),\n\n // End ellipsis\n ...paginationHelper.getEndEllipsis(),\n\n ...endPages,\n PAGINATION_ITEM_TYPE.next,\n ]\n\n function getButtonPage(item: string | number): number | null {\n if (typeof item === 'number') {\n return item\n } else {\n switch (item) {\n case PAGINATION_ITEM_TYPE.previous:\n return page - 1\n case PAGINATION_ITEM_TYPE.next:\n return page + 1\n case PAGINATION_ITEM_TYPE.startEllipsis:\n return siblingsStart - 1\n case PAGINATION_ITEM_TYPE.endEllipsis:\n return siblingsEnd + 1\n default:\n return null\n }\n }\n }\n\n function isDisabled(item: string | number): boolean {\n if (item === PAGINATION_ITEM_TYPE.previous) return page <= 1\n if (item === PAGINATION_ITEM_TYPE.next) return page >= count\n\n return false\n }\n\n return itemList.map((item) => {\n const isNumber = typeof item === 'number'\n\n return {\n onClick: () => handleClick({ page: getButtonPage(item) }),\n itemType: isNumber ? PAGINATION_ITEM_TYPE.page : item.toString(),\n page: getButtonPage(item),\n disabled: disabled || isDisabled(item),\n ...(isNumber && { 'aria-current': item === page }),\n }\n })\n}\n\nexport default usePagination\n","import React, { BaseHTMLAttributes } from 'react'\nimport styled, { css } from 'styled-components'\nimport { getToken as token } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport Status from 'utils/types/Status'\n\nconst Bar = styled.div<{ rounded: boolean }>`\n align-items: center;\n display: flex;\n flex-grow: 0;\n flex-shrink: 1;\n\n justify-content: center;\n overflow: hidden;\n width: 100%;\n\n position: relative;\n\n height: ${token('progressbar-height')};\n\n ${({ rounded }) =>\n rounded &&\n css`\n border-radius: ${token('progressbar-height')};\n `}\n`\n\nconst Line = styled.span`\n width: 100%;\n height: 1px;\n\n background: ${token('progressbar-line')};\n background: black;\n`\n\ntype ProgressProps = Pick<ProgressBarProps, 'value' | 'rounded' | 'status'>\nconst Progress = styled.span<ProgressProps>`\n position: absolute;\n top: 0;\n left: 0;\n\n width: ${({ value }) => value}%;\n height: ${token('progressbar-height')};\n\n background: ${conditional({\n 'progressbar-neutral-fill': whenProps({ status: Status.Neutral }),\n 'progressbar-success-fill': whenProps({ status: Status.Success }),\n 'progressbar-warning-fill': whenProps({ status: Status.Warn }),\n 'progressbar-danger-fill': whenProps({ status: Status.Danger }),\n })};\n border-radius: ${conditional({\n ['progressbar-height']: whenProps({ rounded: true }),\n })};\n\n transition: 600ms ease;\n`\n\nexport interface ProgressBarProps extends BaseHTMLAttributes<HTMLDivElement> {\n value?: number\n status?: string\n rounded?: boolean\n showLine?: boolean\n}\n\nexport function ProgressBar({\n value = 60,\n status = Status.Neutral,\n rounded = false,\n showLine = false,\n ...extra\n}: ProgressBarProps): JSX.Element {\n const clampedValue = Math.max(0, Math.min(value, 100))\n\n return (\n <Bar\n role=\"progressBar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n rounded={rounded}\n {...extra}\n >\n {showLine && <Line />}\n <Progress value={clampedValue} rounded={rounded} status={status} />\n </Bar>\n )\n}\n\nexport default ProgressBar\n","import React, { ChangeEvent, InputHTMLAttributes } from 'react'\nimport clsx from 'clsx'\nimport styled from 'styled-components'\n\nimport { Icon } from 'components/Icon'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport font from 'styles/font'\nimport hidden from 'styles/hidden'\nimport hoverable from 'styles/hoverable'\nimport { getToken as token } from 'theming'\n\nimport transition from 'styles/transition'\n\ninterface WithAdditionalProps {\n active?: boolean\n onToggle?: (event: ChangeEvent<HTMLInputElement>) => void\n scale?: 'default' | 'large'\n}\n\nexport interface SwitchProps extends InputHTMLAttributes<HTMLInputElement>, WithAdditionalProps {\n className?: string\n}\n\nconst SwitchWrapper = styled.label<WithAdditionalProps>`\n ${transition()}\n\n ${font({})};\n\n user-select: none;\n\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n position: relative;\n\n display: inline-flex;\n\n width: ${conditional({\n 'switch-width': whenProps({ scale: 'default' }),\n 'switch-large-width': whenProps({ scale: 'large' }),\n })};\n height: ${conditional({\n 'switch-height': whenProps({ scale: 'default' }),\n 'switch-large-height': whenProps({ scale: 'large' }),\n })};\n\n background-color: ${conditional({\n 'switch-inactive-background-color': whenProps({ active: false }),\n 'switch-active-background-color': whenProps({ active: true }),\n })};\n\n border-radius: ${conditional({\n 'switch-border-radius': whenProps({ scale: 'default' }),\n 'switch-large-border-radius': whenProps({ scale: 'large' }),\n })};\n\n ${hoverable`\n background: ${conditional({\n 'switch-inactive-background-color--hover': whenProps({ active: false }),\n 'switch-active-background-color--hover': whenProps({ active: true }),\n })};\n `}\n\n ${focusable`\n box-shadow: ${token('switch-box-shadow')};\n outline: ${token('switch-outline')};\n outline-offset: ${token('switch-outline-offset')};\n `}\n\n ${disableable``}\n`\n\nconst Slider = styled.span<WithAdditionalProps>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n :before {\n position: absolute;\n bottom: ${conditional({\n 'switch-slider-y': whenProps({ scale: 'default', active: false }),\n 'switch-slider-active-y': whenProps({ scale: 'default', active: true }),\n 'switch-slider-large-y': whenProps({ scale: 'large', active: false }),\n 'switch-slider-large-active-y': whenProps({ scale: 'large', active: true }),\n })};\n left: ${conditional({\n 'switch-slider-x': whenProps({ scale: 'default', active: false }),\n 'switch-slider-active-x': whenProps({ scale: 'default', active: true }),\n 'switch-slider-large-x': whenProps({ scale: 'large', active: false }),\n 'switch-slider-large-active-x': whenProps({ scale: 'large', active: true }),\n })};\n\n width: ${conditional({\n 'switch-slider-size': whenProps({ scale: 'default' }),\n 'switch-slider-large-size': whenProps({ scale: 'large' }),\n })};\n\n height: ${conditional({\n 'switch-slider-size': whenProps({ scale: 'default' }),\n 'switch-slider-large-size': whenProps({ scale: 'large' }),\n })};\n\n background-color: ${token('switch-slider-background-color')};\n border-radius: ${token('switch-slider-border-radius')};\n\n ${transition({\n timingFunction: 'ease-out',\n duration: '150ms',\n })}\n\n content: '';\n }\n`\n\nconst HiddenInput = styled.input`\n ${hidden(true)}\n`\n\nconst ActiveIcon = styled(Icon)<WithAdditionalProps>`\n position: absolute;\n top: ${conditional({\n 'switch-icon-active-y': whenProps({ scale: 'default' }),\n 'switch-large-icon-active-y': whenProps({ scale: 'large' }),\n })};\n left: ${conditional({\n 'switch-icon-active-x': whenProps({ scale: 'default' }),\n 'switch-large-icon-active-x': whenProps({ scale: 'large' }),\n })};\n\n width: ${conditional({\n 'switch-icon-width': whenProps({ scale: 'default' }),\n 'switch-large-icon-width': whenProps({ scale: 'large' }),\n })};\n\n height: ${conditional({\n 'switch-icon-height': whenProps({ scale: 'default' }),\n 'switch-large-icon-height': whenProps({ scale: 'large' }),\n })};\n\n color: ${token('switch-icon-color')};\n`\n\nconst InactiveIcon = styled(Icon)<WithAdditionalProps>`\n position: absolute;\n top: ${conditional({\n 'switch-icon-inactive-y': whenProps({ scale: 'default' }),\n 'switch-large-icon-inactive-y': whenProps({ scale: 'large' }),\n })};\n left: ${conditional({\n 'switch-icon-inactive-x': whenProps({ scale: 'default' }),\n 'switch-large-icon-inactive-x': whenProps({ scale: 'large' }),\n })};\n\n width: ${conditional({\n 'switch-icon-width': whenProps({ scale: 'default' }),\n 'switch-large-icon-width': whenProps({ scale: 'large' }),\n })};\n\n height: ${conditional({\n 'switch-icon-height': whenProps({ scale: 'default' }),\n 'switch-large-icon-height': whenProps({ scale: 'large' }),\n })};\n\n color: ${token('switch-icon-color')};\n`\n\nfunction Switch({\n active = false,\n className,\n disabled = false,\n name,\n onToggle,\n scale = 'default',\n ...others\n}: SwitchProps): JSX.Element {\n return (\n <SwitchWrapper\n htmlFor={name}\n title={active ? 'active' : 'inactive'}\n active={active}\n className={clsx(className, {\n 'is-disabled': disabled,\n })}\n scale={scale}\n >\n {active ? (\n <ActiveIcon name=\"check\" scale={scale} data-testid=\"switch-icon-active\" />\n ) : (\n <InactiveIcon name=\"close\" scale={scale} data-testid=\"switch-icon-inactive\" />\n )}\n <Slider active={active} scale={scale} />\n <HiddenInput\n type=\"checkbox\"\n {...others}\n id={name}\n name={name}\n checked={active}\n disabled={disabled}\n onChange={onToggle}\n />\n </SwitchWrapper>\n )\n}\n\nexport default Switch\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\n\nimport { Icon } from 'components/Icon'\n\n// tools\nimport conditional, { whenProps } from 'tools/conditional'\n// styles\nimport typography from 'styles/typography'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport transition from 'styles/transition'\nimport { getToken as token } from 'theming'\n\nimport type { ButtonHTMLAttributes } from 'react'\n\n// interfaces\ninterface WithSizeProps {\n size?: 'small' | 'default' | 'large'\n}\n\ninterface WithVariantProps {\n variant?: 'accent' | 'danger' | 'default' | 'outlined' | 'success' | 'warning'\n}\n\nexport interface TagProps extends React.HTMLAttributes<HTMLElement>, WithSizeProps {\n className?: string\n children?: ReactNode\n disabled?: boolean\n leading?: ReactNode\n removable?: boolean\n variant?: 'accent' | 'danger' | 'default' | 'outlined' | 'success' | 'warning'\n onRemove?: () => void\n getRemoveButtonProps?: () => Partial<ButtonHTMLAttributes<HTMLButtonElement>> & {\n 'data-testid'?: string\n }\n}\n\n// styled elements\nconst StyledTag = styled.span`\n display: inline-flex;\n\n position: relative;\n\n width: auto;\n\n z-index: 0;\n\n ${disableable`\n opacity: ${token('opacity-60')};\n `}\n`\n\nconst StyledSpan = styled.span<TagProps>`\n ${transition()}\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n box-sizing: border-box;\n\n text-decoration: none;\n\n ${typography(\n conditional({\n 'chips-sm': whenProps({ size: 'small' }),\n 'caption-bold': whenProps({ size: 'default' }),\n 'body-bold': whenProps({ size: 'large' }),\n })\n )}\n\n line-height: initial;\n\n text-transform: ${conditional({\n 'tag-transform': whenProps({ size: 'default' }),\n 'tag-small-transform': whenProps({ size: 'small' }),\n 'tag-large-transform': whenProps({ size: 'large' }),\n })};\n\n padding: ${conditional({\n 'tag-small-spacing': whenProps({ size: 'small', removable: (removable) => !removable }),\n 'tag-spacing': whenProps({\n size: (size) => !['small', 'large'].includes(size ?? ''),\n removable: (removable) => !removable,\n }),\n 'tag-large-spacing': whenProps({ size: 'large', removable: (removable) => !removable }),\n 'tag-removable-spacing': whenProps([{ size: (size) => size !== 'small', removable: true }]),\n 'tag-small-removable-spacing': whenProps([{ size: 'small', removable: true }]),\n })};\n\n min-width: ${token('tag-width')};\n height: ${conditional({\n 'tag-height': whenProps({ size: 'default' }),\n 'tag-small-height': whenProps({ size: 'small' }),\n 'tag-large-height': whenProps({ size: 'large' }),\n })};\n\n font-weight: ${conditional({\n 'tag-font-weight': whenProps({ size: 'default' }),\n 'tag-small-font-weight': whenProps({ size: 'small' }),\n 'tag-large-font-weight': whenProps({ size: 'large' }),\n })};\n\n color: ${conditional({\n 'tag-default-color': whenProps({ variant: 'default' }),\n 'tag-outlined-color': whenProps({ variant: 'outlined' }),\n 'tag-accent-color': whenProps({ variant: 'accent' }),\n 'tag-success-color': whenProps({ variant: 'success' }),\n 'tag-warning-color': whenProps({ variant: 'warning' }),\n 'tag-danger-color': whenProps({ variant: 'danger' }),\n })};\n\n background: ${conditional({\n 'tag-default-background': whenProps({ variant: 'default' }),\n 'tag-outlined-background': whenProps({ variant: 'outlined' }),\n 'tag-accent-background': whenProps({ variant: 'accent' }),\n 'tag-success-background': whenProps({ variant: 'success' }),\n 'tag-warning-background': whenProps({ variant: 'warning' }),\n 'tag-danger-background': whenProps({ variant: 'danger' }),\n })};\n\n border-radius: ${token('tag-border-radius')};\n border-width: ${token('tag-border-width')};\n border-style: solid;\n\n border-color: ${conditional({\n 'tag-default-border-color': whenProps({ variant: 'default' }),\n 'tag-outlined-border-color': whenProps({ variant: 'outlined' }),\n 'tag-accent-border-color': whenProps({ variant: 'accent' }),\n 'tag-success-border-color': whenProps({ variant: 'success' }),\n 'tag-warning-border-color': whenProps({ variant: 'warning' }),\n 'tag-danger-border-color': whenProps({ variant: 'danger' }),\n })};\n\n ${hoverable`\n background: ${conditional({\n 'tag-default-background--hover': whenProps([\n { variant: 'default', removable: true },\n { variant: 'default', href: Boolean },\n ]),\n 'tag-outlined-background--hover': whenProps([\n { variant: 'outlined', removable: true },\n { variant: 'outlined', href: Boolean },\n ]),\n 'tag-accent-background--hover': whenProps([\n { variant: 'accent', removable: true },\n { variant: 'accent', href: Boolean },\n ]),\n 'tag-success-background--hover': whenProps([\n { variant: 'success', removable: true },\n { variant: 'success', href: Boolean },\n ]),\n 'tag-warning-background--hover': whenProps([\n { variant: 'warning', removable: true },\n { variant: 'warning', href: Boolean },\n ]),\n 'tag-danger-background--hover': whenProps([\n { variant: 'danger', removable: true },\n { variant: 'danger', href: Boolean },\n ]),\n })};\n\n border-color: ${conditional({\n 'tag-default-border-color--hover': whenProps([\n { variant: 'default', removable: true },\n { variant: 'default', href: Boolean },\n ]),\n 'tag-outlined-border-color--hover': whenProps([\n { variant: 'outlined', removable: true },\n { variant: 'outlined', href: Boolean },\n ]),\n 'tag-accent-border-color--hover': whenProps([\n { variant: 'accent', removable: true },\n { variant: 'accent', href: Boolean },\n ]),\n 'tag-success-border-color--hover': whenProps([\n { variant: 'success', removable: true },\n { variant: 'success', href: Boolean },\n ]),\n 'tag-warning-border-color--hover': whenProps([\n { variant: 'warning', removable: true },\n { variant: 'warning', href: Boolean },\n ]),\n 'tag-danger-border-color--hover': whenProps([\n { variant: 'danger', removable: true },\n { variant: 'danger', href: Boolean },\n ]),\n })};\n\n color: ${conditional({\n 'tag-default-color--hover': whenProps([\n { variant: 'default', removable: true },\n { variant: 'default', href: Boolean },\n ]),\n 'tag-outlined-color--hover': whenProps([\n { variant: 'outlined', removable: true },\n { variant: 'outlined', href: Boolean },\n ]),\n 'tag-accent-color--hover': whenProps([\n { variant: 'accent', removable: true },\n { variant: 'accent', href: Boolean },\n ]),\n 'tag-success-color--hover': whenProps([\n { variant: 'success', removable: true },\n { variant: 'success', href: Boolean },\n ]),\n 'tag-warning-color--hover': whenProps([\n { variant: 'warning', removable: true },\n { variant: 'warning', href: Boolean },\n ]),\n 'tag-danger-color--hover': whenProps([\n { variant: 'danger', removable: true },\n { variant: 'danger', href: Boolean },\n ]),\n })};\n `}\n\n ${focusable`\n color: ${conditional({\n 'tag-default-color--focus': whenProps({ variant: 'default' }),\n 'tag-outlined-color--focus': whenProps({ variant: 'outlined' }),\n 'tag-accent-color--focus': whenProps({ variant: 'accent' }),\n 'tag-success-color--focus': whenProps({ variant: 'success' }),\n 'tag-warning-color--focus': whenProps({ variant: 'warning' }),\n 'tag-danger-color--focus': whenProps({ variant: 'danger' }),\n })};\n background: ${conditional({\n 'tag-default-background--focus': whenProps({ variant: 'default' }),\n 'tag-outlined-background--focus': whenProps({ variant: 'outlined' }),\n 'tag-accent-background--focus': whenProps({ variant: 'accent' }),\n 'tag-success-background--focus': whenProps({ variant: 'success' }),\n 'tag-warning-background--focus': whenProps({ variant: 'warning' }),\n 'tag-danger-background--focus': whenProps({ variant: 'danger' }),\n })};\n box-shadow: ${token('tag-box-shadow')};\n outline: ${conditional({\n 'tag-default-outline': whenProps({ variant: 'default' }),\n 'tag-outlined-outline': whenProps({ variant: 'outlined' }),\n 'tag-accent-outline': whenProps({ variant: 'accent' }),\n 'tag-success-outline': whenProps({ variant: 'success' }),\n 'tag-warning-outline': whenProps({ variant: 'warning' }),\n 'tag-danger-outline': whenProps({ variant: 'danger' }),\n })};\n outline-offset: ${token('tag-outline-offset')};\n `}\n\n ${disableable`\n opacity: ${token('opacity-60')};\n `}\n`\n\nconst Leading = styled.span<WithSizeProps>`\n display: ${conditional({\n 'tag-leading-display': whenProps({ size: 'default' }),\n 'tag-small-leading-display': whenProps({ size: 'small' }),\n 'tag-large-leading-display': whenProps({ size: 'large' }),\n })};\n margin: 0 ${token('tag-icon-spacing')} 0 0;\n\n color: currentColor;\n\n fill: currentColor;\n`\n\nconst StyledCloseButton = styled.button<WithSizeProps & WithVariantProps>`\n z-index: 2;\n\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n cursor: pointer;\n\n background: ${token('tag-remove-button-background')};\n border-radius: ${token('tag-remove-button-border-radius')};\n border: 0;\n\n width: ${conditional({\n 'tag-remove-button-size': whenProps({ size: 'default' }),\n 'tag-small-remove-button-size': whenProps({ size: 'small' }),\n 'tag-large-remove-button-size': whenProps({ size: 'large' }),\n })};\n\n height: ${conditional({\n 'tag-remove-button-size': whenProps({ size: 'default' }),\n 'tag-small-remove-button-size': whenProps({ size: 'small' }),\n 'tag-large-remove-button-size': whenProps({ size: 'large' }),\n })};\n\n padding: 0;\n\n ${disableable`\n opacity: ${token('opacity-60')};\n `}\n\n ${focusable``}\n\n &:focus + ${StyledSpan} {\n color: ${conditional({\n 'tag-default-color--focus': whenProps({ variant: 'default' }),\n 'tag-outlined-color--focus': whenProps({ variant: 'outlined' }),\n 'tag-accent-color--focus': whenProps({ variant: 'accent' }),\n 'tag-success-color--focus': whenProps({ variant: 'success' }),\n 'tag-warning-color--focus': whenProps({ variant: 'warning' }),\n 'tag-danger-color--focus': whenProps({ variant: 'danger' }),\n })};\n\n background: ${conditional({\n 'tag-default-background--focus': whenProps({ variant: 'default' }),\n 'tag-outlined-background--focus': whenProps({ variant: 'outlined' }),\n 'tag-accent-background--focus': whenProps({ variant: 'accent' }),\n 'tag-success-background--focus': whenProps({ variant: 'success' }),\n 'tag-warning-background--focus': whenProps({ variant: 'warning' }),\n 'tag-danger-background--focus': whenProps({ variant: 'danger' }),\n })};\n box-shadow: ${token('tag-outline')};\n }\n`\n\nconst CloseIcon = styled(Icon)<WithSizeProps & WithVariantProps>`\n width: ${conditional({\n 'tag-remove-button-icon-size': whenProps({ size: 'default' }),\n 'tag-small-remove-button-icon-size': whenProps({ size: 'small' }),\n 'tag-large-remove-button-icon-size': whenProps({ size: 'large' }),\n })};\n\n height: ${conditional({\n 'tag-remove-button-icon-size': whenProps({ size: 'default' }),\n 'tag-small-remove-button-icon-size': whenProps({ size: 'small' }),\n 'tag-large-remove-button-icon-size': whenProps({ size: 'large' }),\n })};\n\n color: ${conditional({\n 'tag-default-color': whenProps({ variant: 'default' }),\n 'tag-outlined-color': whenProps({ variant: 'outlined' }),\n 'tag-accent-color': whenProps({ variant: 'accent' }),\n 'tag-success-color': whenProps({ variant: 'success' }),\n 'tag-warning-color': whenProps({ variant: 'warning' }),\n 'tag-danger-color': whenProps({ variant: 'danger' }),\n })};\n\n fill: currentColor;\n`\n\nconst StyledSpacer = styled.span<WithSizeProps>`\n display: inline-block;\n width: ${conditional({\n '0': whenProps({ size: 'small' }),\n 'space-xs': whenProps({ size: 'default' }),\n 'space-s': whenProps({ size: 'large' }),\n })};\n`\n\n// components\nfunction Tag(props: TagProps): JSX.Element {\n const {\n children,\n leading,\n size = 'default',\n onRemove,\n variant,\n removable,\n getRemoveButtonProps,\n disabled = false,\n ...others\n } = props\n\n return (\n <StyledTag>\n <StyledSpan size={size} variant={variant} {...others}>\n {leading && <Leading size={size}>{leading}</Leading>}\n {children}\n {removable && !disabled && (\n <>\n <StyledSpacer aria-hidden=\"true\" size={size} />\n <StyledCloseButton\n type=\"button\"\n {...getRemoveButtonProps?.()}\n size={size}\n onClick={onRemove}\n >\n <CloseIcon name=\"close\" variant={variant} size={size} />\n </StyledCloseButton>\n </>\n )}\n </StyledSpan>\n </StyledTag>\n )\n}\n\nexport default Tag\n","import React, { BaseHTMLAttributes, useEffect, useState } from 'react'\nimport styled from 'styled-components'\n\nimport { Icon } from 'components/Icon'\nimport { getToken as token } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport Status from 'utils/types/Status'\n\nimport DefaultCloseButton from 'common/CloseButton'\n\nimport { ProgressBar } from 'components/ProgressBar'\n\ntype ContainerProps = Pick<ToastProps, 'status'>\nconst Container = styled.div<ContainerProps>`\n position: relative;\n\n width: ${token('toast-width')};\n max-width: 100%;\n padding: ${token('toast-padding-y')} ${token('toast-padding-x')};\n overflow: hidden;\n\n color: ${token('toast-font-color')};\n font-weight: ${token('toast-font-weight')};\n font-size: ${token('toast-font-size')};\n line-height: ${token('toast-font-height')};\n\n background: ${conditional({\n 'toast-neutral-background': whenProps({ status: Status.Neutral }),\n 'toast-success-background': whenProps({ status: Status.Success }),\n 'toast-warning-background': whenProps({ status: Status.Warn }),\n 'toast-danger-background': whenProps({ status: Status.Danger }),\n })};\n border-radius: ${token('toast-border-radius')};\n box-shadow: ${token('toast-shadow')};\n`\n\nconst Content = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-around;\n`\n\nconst Leading = styled.span`\n position: absolute;\n`\n\nconst ToastCountDown = styled(ProgressBar)`\n position: absolute;\n bottom: 0;\n left: 0;\n`\nconst CloseButton = styled(DefaultCloseButton)`\n position: absolute;\n\n top: ${token('toast-close-y')};\n right: ${token('toast-close-x')};\n\n color: ${token('color-neutral-white')};\n`\n\nexport interface ToastProps extends BaseHTMLAttributes<HTMLDivElement> {\n message: string\n status?: Status\n timeout?: number\n showIcon?: boolean\n onClose: () => void\n}\n\nconst INTERVAL = 300 //ms\n\nfunction Toast({\n message,\n onClose,\n timeout,\n showIcon = false,\n status = Status.Neutral,\n}: ToastProps): JSX.Element {\n const [count, setCount] = useState(100)\n\n /**\n * this is a quick solution for the progress/countdown effect,\n * we can use requestAnimationFrame or some other library to\n * better implement this in the future\n */\n useEffect(() => {\n if (!timeout) return\n\n const decrementBy = (INTERVAL * 100) / timeout\n const interval = window.setTimeout(() => {\n if (count <= 0) {\n window.clearTimeout(interval)\n onClose()\n } else {\n setCount((value) => value - decrementBy)\n }\n }, INTERVAL)\n\n return () => {\n window.clearTimeout(interval)\n }\n }, [count, onClose, timeout])\n\n return (\n <Container status={status} aria-live=\"polite\" role=\"alert\">\n {showIcon && (\n <Leading>\n <ToastIcon status={status} />\n </Leading>\n )}\n <Content>{message}</Content>\n {Boolean(timeout) && <ToastCountDown value={count} status={status} />}\n {onClose && <CloseButton onClick={onClose} size={14} />}\n </Container>\n )\n}\n\ninterface ToastIconProps {\n status: Status\n}\n\nfunction ToastIcon({ status }: ToastIconProps) {\n let iconName = ''\n\n switch (status) {\n case Status.Success:\n iconName = 'check'\n break\n\n case Status.Warn:\n case Status.Danger:\n iconName = 'warning'\n break\n\n default:\n iconName = 'information'\n }\n\n return <Icon name={iconName} size={20} />\n}\n\nexport default Toast\n","export function check(id: string): void {\n const radioElement = document.getElementById(id) as HTMLInputElement\n\n if (radioElement) {\n radioElement.checked = true\n }\n}\n\nexport function getPanelRadioID(id: number | string): string {\n return `rg-wizard-step-radio-${id}`\n}\n","import React from 'react'\n\nconst StepsContext = React.createContext<string | number>('')\n\nexport default StepsContext\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nimport { getToken as token } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport font from 'styles/font'\nimport transition from 'styles/transition'\n\nimport type { Step } from '../Steps.types'\n\nexport interface StepsProgressProps {\n steps: Array<Step>\n current: number | string\n}\n\nconst StepConnector = styled.span<{ complete: boolean }>`\n position: absolute;\n top: ${conditional({\n 'steps-conector-top': whenProps({ complete: false }),\n 'steps-conector-top--complete': whenProps({ complete: true }),\n })};\n right: calc(-50% + ${token('steps-indicator-size')} / 2);\n left: calc(50% + ${token('steps-indicator-size')} / 2);\n\n z-index: 0;\n\n height: ${conditional({\n 'steps-conector-height': whenProps({ complete: false }),\n 'steps-conector-height--complete': whenProps({ complete: true }),\n })};\n\n background: ${conditional({\n 'steps-progress-step-background-color': whenProps({ complete: false }),\n 'steps-progress-step-background-color--complete': whenProps({ complete: true }),\n })};\n`\n\nconst ProgressStepWrapper = styled.li`\n position: relative;\n\n flex: 1;\n\n text-align: center;\n\n list-style: none;\n\n &:last-child ${StepConnector} {\n display: none;\n }\n`\n\nconst ProgressStepContainer = styled.div`\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n padding: 0 ${token('space-s')};\n`\n\nconst StepIndicator = styled.span<{ current: boolean; complete: boolean }>`\n ${transition()}\n\n ${font({\n weight: 'font-weight-bold',\n height: 'steps-indicator-size',\n })}\n\n font-size: ${token('font-size-4')};\n\n height: ${token('steps-indicator-size')};\n width: ${token('steps-indicator-size')};\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border-width: 2px;\n border-style: solid;\n border-color: ${conditional({\n 'steps-progress-step-background-color--complete': whenProps([\n { current: true, complete: [true, false] },\n { current: false, complete: true },\n ]),\n 'steps-progress-step-background-color': whenProps({ current: false, complete: false }),\n })};\n border-radius: ${token('border-radius-circle')};\n\n background: ${conditional({\n 'steps-progress-step-background-color--complete': whenProps([\n { current: false, complete: true },\n ]),\n 'color-neutral-white': whenProps([\n { current: true, complete: [true, false] },\n { current: false, complete: false },\n ]),\n })};\n\n color: ${conditional({\n 'steps-progress-step-background-color': whenProps({ current: false, complete: false }),\n 'color-neutral-white': whenProps({ current: false, complete: true }),\n 'steps-progress-step-background-color--complete': whenProps({ current: true }),\n })};\n`\n\nconst StepLabel = styled.span<{ current: boolean; complete: boolean }>`\n ${font({\n height: 'font-height-2',\n })}\n\n position: relative;\n\n font-weight: ${conditional({\n 'font-weight-medium': whenProps({ current: false }),\n 'font-weight-bold': whenProps({ current: true }),\n })};\n\n color: ${conditional({\n 'color-neutral-darker': whenProps([{ current: true }, { current: false, complete: true }]),\n 'color-neutral': whenProps({ current: false, complete: false }),\n })};\n\n font-size: ${token('font-size-4')};\n\n display: flex;\n flex-direction: row;\n\n align-items: center;\n justify-content: center;\n\n text-align: center;\n\n margin: ${token('space-xs')} 0 0 0;\n`\n\nfunction ProgressStep(props: { step: Step; current: boolean; indicator: ReactNode }): JSX.Element {\n const { step, current, indicator } = props\n\n return (\n <ProgressStepWrapper>\n <ProgressStepContainer\n data-testid=\"steps-timeline-entry\"\n className={clsx({\n 'is-current': current,\n 'is-complete': step.complete,\n })}\n >\n <StepIndicator aria-hidden=\"true\" current={current} complete={step.complete}>\n {indicator}\n </StepIndicator>\n\n <StepLabel current={current} complete={step.complete}>\n {step.label}\n </StepLabel>\n\n <StepConnector complete={step.complete} />\n </ProgressStepContainer>\n </ProgressStepWrapper>\n )\n}\n\nexport default ProgressStep\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport ProgressStep from './ProgressStep'\n\nimport type { Step } from '../Steps.types'\n\nexport interface StepsProgressProps {\n steps: Array<Step>\n current: number | string\n}\n\nconst ProgressWrapper = styled.ol<{ steps: Step[] }>`\n position: relative;\n\n display: flex;\n flex-direction: row;\n\n padding: ${token('steps-progress-padding-y')} ${token('steps-progress-padding-x')};\n`\n\nfunction StepsProgress(props: StepsProgressProps): JSX.Element {\n const { steps, current } = props\n\n return (\n <ProgressWrapper steps={steps || []}>\n {(steps || []).map(function renderStep(step, index) {\n const { id } = step\n\n return <ProgressStep key={id} current={current === id} indicator={index + 1} step={step} />\n })}\n </ProgressWrapper>\n )\n}\n\nexport default StepsProgress\n","import React, { Fragment, useContext } from 'react'\nimport type { PropsWithChildren } from 'react'\nimport styled from 'styled-components'\n\nimport { getPanelRadioID } from './Steps.helpers'\nimport { getToken as token } from 'theming'\nimport font from 'styles/font'\nimport hidden from 'styles/hidden'\nimport StepsContext from './StepsContext'\n\nexport interface StepsStepProps {\n id: number | string\n className?: string\n}\n\nconst Selector = styled.input`\n ${hidden(true)}\n`\n\nexport const StepWrapper = styled.article`\n ${font({\n weight: 'font-weight-medium',\n height: 'font-height-2',\n })}\n\n padding: 0 ${token('steps-step-padding-x')} ${token('steps-step-padding-y')};\n\n ${Selector} + & {\n display: none;\n }\n\n ${Selector}:checked + & {\n display: block;\n }\n`\n\nfunction StepsStep({ children, id, ...others }: PropsWithChildren<StepsStepProps>): JSX.Element {\n const StepsID = useContext(StepsContext)\n\n return (\n <Fragment>\n <Selector\n type=\"radio\"\n className=\"visually-hidden\"\n id={getPanelRadioID(id)}\n name={String(StepsID)}\n value={id}\n data-testid=\"panel-radio\"\n tabIndex={-1}\n />\n <StepWrapper data-testid=\"steps-step\" {...others} id={String(id)}>\n {children}\n </StepWrapper>\n </Fragment>\n )\n}\n\nexport default StepsStep\n","import React, { useEffect } from 'react'\nimport type { PropsWithChildren } from 'react'\nimport styled from 'styled-components'\n\nimport { check, getPanelRadioID } from './Steps.helpers'\nimport { getToken as token } from 'theming'\nimport StepsContext from './StepsContext'\nimport StepsProgress from './ProgressSteps'\nimport StepsStep from './StepsStep'\n\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport type { Step } from './Steps.types'\nexport interface StepsProps {\n current: number | string\n id: number | string\n steps: Array<Step>\n className?: string\n scheme?: ColorScheme\n}\n\nconst StepsWrapper = styled.section`\n display: block;\n width: 100%;\n\n color: ${token('steps-color')};\n`\n\n// TODO: improve by extracting steps props right from children.\nfunction Steps({\n id,\n children,\n current,\n steps,\n ...others\n}: PropsWithChildren<StepsProps>): JSX.Element {\n useEffect(\n function showCurrentStep() {\n check(getPanelRadioID(current))\n },\n [current]\n )\n\n return (\n <StepsWrapper id={String(id)} {...others}>\n <StepsProgress current={current} steps={steps} />\n <StepsContext.Provider value={id}>{children}</StepsContext.Provider>\n </StepsWrapper>\n )\n}\n\nSteps.defaultProps = {\n scheme: 'light',\n}\n\nSteps.Step = StepsStep\n\nexport default Steps\n","import React, { ReactNode, HTMLAttributes } from 'react'\n\nimport styled from 'styled-components'\nimport { getToken as token } from 'theming'\n\nexport interface CardTitleProps extends HTMLAttributes<HTMLElement> {\n leading?: ReactNode\n}\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n pointer-events: none;\n`\n\nconst Leading = styled(StyledSpan)`\n margin-right: ${token('space-xs')};\n`\n\nconst Wrapper = styled.div`\n padding: ${token('card-padding-y')} ${token('card-padding-x')} 0;\n\n color: ${token('card-color')};\n font-weight: ${token('card-title-font-weight')};\n font-size: ${token('card-title-font-size')};\n line-height: ${token('card-title-font-height')};\n`\n\nfunction CardTitle({ children, leading, ...others }: CardTitleProps): JSX.Element {\n return (\n <Wrapper {...others}>\n {leading && <Leading>{leading}</Leading>}\n {children}\n </Wrapper>\n )\n}\n\nexport { Wrapper as CardTitleWrapper }\n\nexport default CardTitle\n","import React, { HTMLAttributes, ReactNode } from 'react'\n\nimport { getToken as token } from 'theming'\nimport CardTitle, { CardTitleWrapper } from './CardTitle'\nimport conditional, { whenProps } from 'tools/conditional'\nimport font from 'styles/font'\nimport Status from 'utils/types/Status'\nimport styled, { css } from 'styled-components'\n\nexport interface CardProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode\n status?: Status\n flagged?: boolean\n}\n\nconst CardSubtitle = styled.div`\n padding: 0 ${token('card-padding-x')} ${token('card-padding-y')};\n\n color: ${token('card-color')};\n font-weight: ${token('card-subtitle-font-weight')};\n font-size: ${token('card-subtitle-font-size')};\n`\n\nconst CardSeparator = styled.hr`\n display: block;\n height: 1px;\n margin: 0;\n\n border: 0;\n border-bottom: 1px solid ${token('card-separator-background')};\n`\n\nconst CardBody = styled.div`\n padding: ${token('card-padding-y')} ${token('card-padding-x')};\n`\n\nconst Wrapper = styled.div`\n ${font({})}\n\n display: flex;\n flex-direction: row;\n\n color: ${token('card-color')};\n\n ${CardTitleWrapper} + ${CardSubtitle} {\n margin-top: ${token('space-xs')};\n }\n\n ${CardTitleWrapper} + ${CardSeparator} {\n margin-top: ${token('card-padding-y')};\n }\n\n border: 1px solid ${token('card-border-color')};\n border-radius: ${token('card-border-radius')};\n background: ${token('card-background')};\n`\n\nconst Container = styled.div<{ flagged: boolean }>`\n display: flex;\n flex: 1;\n flex-direction: column;\n\n line-height: ${token('card-font-height')};\n\n ${({ flagged }) =>\n flagged &&\n css`\n ${CardSeparator} {\n margin-left: calc(-1 * ${token('space-s')});\n }\n `}\n`\n\nconst Flag = styled.span<{ status: Status }>`\n display: block;\n flex: 0 0 ${token('card-flag-width')};\n\n background: ${conditional({\n 'card-flag-background-neutral': whenProps({ status: Status.Neutral }),\n 'card-flag-background-danger': whenProps({ status: Status.Danger }),\n 'card-flag-background-warning': whenProps({ status: Status.Warn }),\n 'card-flag-background-success': whenProps({ status: Status.Success }),\n })};\n border-radius: ${token('card-border-radius')} 0 0 ${token('card-border-radius')};\n`\n\nfunction Card({\n flagged = false,\n status = Status.Neutral,\n children,\n ...others\n}: CardProps): JSX.Element {\n return (\n <Wrapper {...others}>\n {flagged && <Flag status={status} aria-label={status} />}\n <Container flagged={flagged}>{children}</Container>\n </Wrapper>\n )\n}\n\nCard.Title = CardTitle\nCard.Subtitle = CardSubtitle\nCard.Separator = CardSeparator\nCard.Body = CardBody\n\nexport default Card\n","import { createContext } from 'react'\nimport type { DropdownContextReturn } from './Dropdown.types'\n\nconst DropdownContext = createContext<DropdownContextReturn>({\n disabled: false,\n expandDisabled: false,\n expanded: false,\n toggle: function () {\n // nothing\n },\n})\n\nexport default DropdownContext\n","import React, { forwardRef, useContext } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Popover } from 'components/Popover'\nimport disableable from 'styles/disableable'\nimport DropdownContext from './Dropdown.context'\nimport focusable from 'styles/focusable'\nimport font from 'styles/font'\nimport hoverable from 'styles/hoverable'\nimport transition from 'styles/transition'\nimport useID from 'hooks/useID'\n\nimport type {\n DropdownMenuItemProps,\n DropdownMenuProps,\n DropdownMenuSectionProps,\n} from './Dropdown.types'\n\n/**\n * TODO: add aria-labelledby that should refer to the dropdown label to the role=\"menu\" container.\n * TODO: navigate through items using arrow keys.\n * TODO: add animation for a smooth open/close effect.\n */\n\nconst StyledPopover = styled(Popover.Floating)`\n z-index: ${token('z-index-droplist')};\n\n min-width: 10em;\n\n background: ${token('dropdown-background')};\n border: 1px solid ${token('dropdown-border-color')};\n border-radius: ${token('dropdown-border-radius')};\n box-shadow: ${token('dropdown-shadow')};\n width: max-content;\n`\n\nconst StyledSpan = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n\n font-size: 1em;\n`\n\nconst Leading = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst Trailing = styled(StyledSpan)`\n /* placeholder */\n`\n\nconst Children = styled.span`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: flex-start;\n padding: ${token('space-s')} 0;\n\n white-space: nowrap;\n`\n\nconst DropdownItemWrapper = styled.button`\n ${transition()}\n\n display: inline-flex;\n justify-content: flex-start;\n align-items: center;\n\n ${font({\n height: 'font-height-3',\n weight: 'font-weight-medium',\n })}\n font-size: ${token('font-size-4')};\n\n min-height: 36px;\n flex: 1 0;\n\n border: none;\n border-radius: ${token('border-radius-s')};\n background: ${token('color-neutral-white')};\n\n color: ${token('color-neutral-darker')};\n\n padding: 0 ${token('space-s')};\n\n margin: 0 ${token('space-s')};\n\n cursor: pointer;\n\n ${hoverable`\n background: ${token('color-neutral-lighter')};\n `}\n\n ${focusable`\n background: ${token('color-neutral-lighter')};\n `}\n\n ${disableable()}\n\n ${Children} {\n flex: 1 0 auto;\n\n text-align: left;\n }\n\n ${Leading}, ${Trailing} {\n flex: 0 1 auto;\n }\n\n ${Leading} + ${Children} {\n margin: 0 0 0 ${token('space-s')};\n }\n\n ${Children} + ${Trailing} {\n margin: 0 0 0 ${token('space-s')};\n }\n`\n\nconst DropdownSectionHeader = styled.strong`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n ${font({\n height: 'font-height-3',\n weight: 'font-weight-bold',\n })}\n\n font-size: ${token('font-size-4')};\n\n margin: 0 ${token('space-s')};\n`\n\nconst DropdownSectionWrapper = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nconst GenericDropdownMenuWrapper = styled.div`\n display: flex;\n flex-direction: column;\n padding: ${token('space-s')} 0;\n\n ${font({\n height: 'font-height-3',\n weight: 'font-weight-medium',\n })}\n\n font-size: ${token('font-size-4')};\n`\n\nconst DropdownMenuWrapper = styled(GenericDropdownMenuWrapper)`\n max-height: 240px;\n overflow-y: auto;\n max-width: 100%;\n width: 100%;\n\n ${DropdownItemWrapper} + ${DropdownItemWrapper},\n ${DropdownSectionHeader} + ${DropdownItemWrapper} {\n margin-top: ${token('space-2xs')};\n }\n\n ${DropdownSectionWrapper} + ${DropdownSectionWrapper} {\n margin: ${token('space-m')} 0 0 0;\n }\n\n ${GenericDropdownMenuWrapper} + &,\n & + ${GenericDropdownMenuWrapper},\n ${GenericDropdownMenuWrapper} + ${GenericDropdownMenuWrapper} {\n border-top: 2px solid ${token('color-neutral-lighter')};\n }\n`\n\nexport const DropdownSeparator = styled.hr.attrs({\n 'aria-hidden': true,\n})`\n display: block;\n height: 2px;\n\n margin: ${token('space-s')} 0;\n\n border: 0;\n border-bottom: 2px solid ${token('card-separator-background')};\n`\n\nexport const DropdownMenu = forwardRef<HTMLDivElement, DropdownMenuProps>(function DropdownMenu(\n props: DropdownMenuProps,\n ref\n): JSX.Element | null {\n const context = useContext(DropdownContext)\n\n if (!context) {\n throw new Error('DropdownMenu must be inside a DropdownContext')\n }\n\n const { children, header, footer, ...others } = props\n const { expanded } = context\n\n if (!expanded) {\n return null\n }\n\n return (\n <StyledPopover role=\"presentation\">\n {header && <GenericDropdownMenuWrapper>{header}</GenericDropdownMenuWrapper>}\n {children && (\n <DropdownMenuWrapper ref={ref} role=\"menu\" data-testid=\"dropdown-menu\" {...others}>\n {children}\n </DropdownMenuWrapper>\n )}\n {footer && <GenericDropdownMenuWrapper>{footer}</GenericDropdownMenuWrapper>}\n </StyledPopover>\n )\n})\n\nexport function DropdownMenuItem(props: DropdownMenuItemProps): JSX.Element {\n const context = useContext(DropdownContext)\n const { leading, children, trailing, onClick, ...others } = props\n const id = useID(others.id)\n\n if (!context) {\n throw new Error('DropdownMenuItem must be inside a DropdownContext')\n }\n\n const { toggle } = context\n\n return (\n <DropdownItemWrapper\n role=\"menuitem\"\n type=\"button\"\n data-testid=\"dropdown-menu-item\"\n {...others}\n aria-labelledby={id}\n onClick={(e) => {\n e.persist()\n\n const shouldKeepOpen = onClick?.(e)\n\n if (!shouldKeepOpen) {\n toggle()\n }\n }}\n >\n {leading && <Leading>{leading}</Leading>}\n <Children id={id}>{children}</Children>\n {trailing && <Trailing>{trailing}</Trailing>}\n </DropdownItemWrapper>\n )\n}\n\nexport function DropdownMenuSection(props: DropdownMenuSectionProps): JSX.Element {\n const { children, header, ...others } = props\n\n return (\n <DropdownSectionWrapper data-testid=\"dropdown-menu-section\" {...others} role=\"presentation\">\n <DropdownSectionHeader>{header}</DropdownSectionHeader>\n {children}\n </DropdownSectionWrapper>\n )\n}\n","import toArray from './toArray'\n\nimport type { KeyboardEvent } from 'react'\n\n// this is merely a helper for key code names\nconst SUPPORTED_KEYS = {\n ALT: 'Alt',\n ARROW_DOWN: 'ArrowDown',\n ARROW_LEFT: 'ArrowLeft',\n ARROW_RIGHT: 'ArrowRight',\n ARROW_UP: 'ArrowUp',\n CONTROL: 'Control',\n ENTER: 'Enter',\n ESCAPE: 'Escape',\n SHIFT: 'Shift',\n SPACE: ' ',\n TAB: 'Tab',\n E_LOWERCASE: 'e',\n DOT: '.',\n PLUS: '+',\n MINUS: '-',\n}\n\nexport type SupportedKey = keyof typeof SUPPORTED_KEYS\n\n// Based on https://github.com/downshift-js/downshift/blob/26c93a539dad09e41adba69ddc3a7d7ecccfc8bb/src/utils.js#L285\nexport function getKeyboardKey(e: KeyboardEvent): KeyboardEvent['key'] {\n // IE\n if (e.keyCode >= 37 && e.keyCode <= 40 && e.key.indexOf('Arrow') !== 0) {\n return `Arrow${e.key}`\n }\n\n return e.key\n}\n\nfunction KeyboardKey(e: KeyboardEvent): {\n is(otherKeys: SupportedKey | SupportedKey[]): boolean\n} {\n const key = getKeyboardKey(e)\n\n return {\n is(otherKeys: SupportedKey | SupportedKey[]) {\n const expectedKeys = toArray(otherKeys).map((otherKey) => SUPPORTED_KEYS[otherKey])\n\n return toArray(expectedKeys).includes(key)\n },\n }\n}\n\nexport default KeyboardKey\n","import React, { useCallback, useEffect, useState } from 'react'\n\nimport KeyboardKey from 'utils/toolset/keyboard'\n\nimport type { RefObject } from 'react'\n\nfunction useClickOutside<T extends HTMLElement>(\n container: RefObject<T>,\n callback: (event?: MouseEvent | TouchEvent | KeyboardEvent) => void,\n disabled = false\n): void {\n const [active, setActive] = useState(false)\n\n const getContainer = useCallback(\n function getContainer() {\n return container.current\n },\n [container]\n )\n\n const handleEvent = useCallback(\n function handleEvent(event: MouseEvent | TouchEvent | KeyboardEvent) {\n function hasPressedEsc() {\n return KeyboardKey(event as unknown as React.KeyboardEvent).is('ESCAPE')\n }\n\n if (!getContainer() || disabled) {\n return\n }\n\n const target = event.target as Node\n const hasTarget = getContainer()?.contains(target)\n\n if (!active && hasTarget) {\n setActive(true)\n } else if (active && (!hasTarget || hasPressedEsc())) {\n setActive(false)\n callback(event)\n }\n },\n [active, callback, disabled, getContainer]\n )\n\n useEffect(() => {\n function subscribe() {\n document.addEventListener('mousedown', handleEvent, true)\n document.addEventListener('touchend', handleEvent, true)\n document.addEventListener('keyup', handleEvent)\n }\n\n function unsubscribe() {\n document.removeEventListener('mousedown', handleEvent, true)\n document.removeEventListener('touchend', handleEvent, true)\n document.removeEventListener('keyup', handleEvent)\n }\n\n subscribe()\n\n return () => {\n unsubscribe()\n }\n }, [handleEvent])\n}\n\nexport default useClickOutside\n","import React, { useContext } from 'react'\nimport clsx from 'clsx'\nimport styled, { css } from 'styled-components'\nimport { isFunction } from '@loadsmart/utils-function'\n\nimport { BaseButton, SelectorButton, ButtonProps } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport { Icon as DefaultIcon } from 'components/Icon'\nimport { useFocusWithin } from 'hooks/useFocusWithin'\nimport activatable from 'styles/activatable'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport DropdownContext from './Dropdown.context'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport transition from 'styles/transition'\nimport typography from 'styles/typography'\n\nimport type { ButtonHTMLAttributes, HTMLAttributes, MouseEvent } from 'react'\nimport type { DropdownTriggerProps, DropdownContextReturn } from './Dropdown.types'\nimport type { IconProps } from 'components/Icon'\nimport type ColorScheme from 'utils/types/ColorScheme'\nimport { Popover } from 'components/Popover'\n\n/**\n * TODO: throw an error if context is not available\n */\n\ntype DropdownTriggerWrapperProps = {\n disabled: boolean\n scheme: ColorScheme\n $outlined: boolean\n $scale: DropdownTriggerProps['scale']\n}\n\ntype TriggerButtonProps = ButtonProps & {\n outlined: boolean\n}\n\nconst dropdownExpandedStyle = css`\n &[aria-expanded='true'] {\n color: ${token('dropdown-trigger-expanded-color')};\n }\n`\n\nconst triggerButtonAttrs = (props: { outlined: boolean }) => {\n const outlined = typeof props.outlined === 'boolean' ? props.outlined : true\n if (outlined) {\n return props\n }\n\n return {\n ...props,\n variant: 'tertiary',\n }\n}\n\nconst TriggerButton = styled(\n SelectorButton as React.ForwardRefExoticComponent<TriggerButtonProps>\n).attrs(triggerButtonAttrs)`\n flex: 1;\n\n justify-content: flex-start;\n\n border: none;\n\n height: ${token('dropdown-trigger-height')};\n\n text-transform: ${conditional({\n capitalize: whenProps({ outlined: false, variant: 'tertiary' }),\n uppercase: whenProps({ outlined: true }),\n })};\n\n font-weight: ${conditional({\n 'font-weight-regular': whenProps({ outlined: false }),\n })};\n\n ${hoverable`\n border-color: ${conditional({\n 'color-transparent': whenProps({ outlined: false }),\n })};\n\n font-weight: ${conditional({\n 'font-weight-bold': whenProps({ outlined: false }),\n })};\n\n ${dropdownExpandedStyle}\n `}\n\n ${focusable`\n box-shadow: ${conditional({\n none: whenProps({ outlined: false }),\n })};\n\n background-color: ${conditional({\n 'color-transparent': whenProps({ outlined: false }),\n })};\n\n font-weight: ${conditional({\n 'font-weight-bold': whenProps({ outlined: false }),\n })};\n\n\n ${dropdownExpandedStyle}\n `}\n\n ${({ children, outlined }) => {\n if (outlined === false && typeof children === 'string') {\n return css`\n & > span:first-child {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n\n text-decoration: none;\n }\n\n & > span:first-child::after {\n height: 0;\n overflow: hidden;\n\n font-weight: ${token('font-weight-bold')};\n\n visibility: hidden;\n\n /* @REVIEW: since this is a span descendant of a button\n I'm using the direct value of children the solution inside Link\n relies on data-text attribute */\n\n content: '${children}';\n content: '${children}' / '';\n user-select: none;\n pointer-events: none;\n\n @media speech {\n display: none;\n }\n }\n `\n }\n }}\n`\n\nconst DropdownTriggerWrapper = styled.div<DropdownTriggerWrapperProps>`\n ${transition()}\n\n ${typography(\n conditional({\n 'button-md': whenProps({ $scale: 'default' }),\n 'button-sm': whenProps({ $scale: 'small' }),\n 'button-lg': whenProps({ $scale: 'large' }),\n })\n )}\n\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n border-radius: ${token('button-border-radius')};\n border-width: ${token('button-border-width')};\n border-style: solid;\n border-color: ${conditional({\n 'dropdown-trigger-border-color': whenProps({ scheme: 'light', $outlined: true }),\n 'dropdown-trigger-dark-border-color': whenProps({ scheme: 'dark', $outlined: true }),\n 'dropdown-trigger-outlined-border-color': whenProps({ $outlined: false }),\n })};\n\n font-size: ${token('font-size-4')};\n\n color: ${token('color-neutral-darker')};\n\n box-sizing: border-box;\n\n flex: 1;\n\n ${hoverable`\n border-color: ${conditional({\n 'button-secondary-border-color--hover': whenProps({ scheme: 'light', $outlined: true }),\n 'button-secondary-dark-border-color--hover': whenProps({\n scheme: 'dark',\n $outlined: true,\n }),\n })};\n `}\n\n ${disableable`\n border-color: ${conditional({\n 'button-secondary-border-color--disabled': whenProps({ scheme: 'light' }),\n 'button-secondary-dark-border-color--disabled': whenProps({\n scheme: 'dark',\n }),\n })};\n `}\n\n ${focusable`\n border-color: ${conditional({\n 'button-primary-border-color--focus': whenProps({ variant: 'primary', $outlined: true }),\n 'button-secondary-border-color--focus': whenProps({ scheme: 'light', $outlined: true }),\n 'button-secondary-dark-border-color--focus': whenProps({\n scheme: 'dark',\n $outlined: true,\n }),\n 'button-warning-border-color--focus': whenProps({ variant: 'warning', $outlined: true }),\n 'button-icon-border-color--focus': whenProps({ variant: 'icon', $outlined: true }),\n 'color-transparent': whenProps({ $outlined: false }),\n })};\n\n box-shadow: ${conditional({ 'dropdown-trigger-box-shadow': whenProps({ $outlined: true }) })};\n outline: ${token('dropdown-trigger-outline')};\n outline-offset: ${token('dropdown-trigger-outline-offset')};\n `}\n\n ${activatable`\n border-color: ${conditional({\n 'button-secondary-border-color--active': whenProps({ scheme: 'light', $outlined: true }),\n 'button-secondary-dark-border-color--active': whenProps({\n scheme: 'dark',\n $outlined: true,\n }),\n })};\n `}\n`\n\nconst TriggerHandle = styled(BaseButton)`\n ${focusable()}\n\n background: ${token('color-transparent')};\n border-radius: 0 ${token('border-radius-s')} ${token('border-radius-s')} 0;\n border: none;\n\n height: ${token('dropdown-trigger-height')};\n`\n\nconst RotatableIcon = styled(DefaultIcon)<{ $rotate: boolean }>`\n ${conditional({\n 'transform: rotate(180deg);': whenProps({ $rotate: true }),\n })}\n`\n\nexport interface DropdownTriggerButtonProps extends DropdownTriggerProps {\n children: DropdownTriggerProps['children'] | ((args: DropdownContextReturn) => React.ReactNode)\n}\n\nfunction Caret(props: Omit<IconProps, 'name'> & { $rotate: boolean }) {\n return <RotatableIcon size={20} {...props} name=\"chevron-down\" />\n}\n\nfunction DropdownTriggerButton(props: DropdownTriggerButtonProps): JSX.Element {\n const contextValue = useContext(DropdownContext)\n const { toggle, disabled, expanded } = contextValue\n const { children, onClick, ...others } = props\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n e.persist()\n\n toggle()\n onClick?.(e)\n }\n\n function renderChildren() {\n if (isFunction(children)) {\n return children(contextValue)\n }\n\n return children\n }\n\n // TODO: add aria-labelledby that should refer to the button and the dropdown label\n return (\n <TriggerButton\n trailing={<Caret $rotate={expanded} />}\n onClick={handleClick}\n {...others}\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded={expanded}\n aria-disabled={disabled}\n disabled={disabled}\n >\n {renderChildren()}\n </TriggerButton>\n )\n}\n\nfunction DropdownTriggerHandle(props: ButtonHTMLAttributes<HTMLButtonElement>): JSX.Element {\n const { toggle, expanded, disabled, expandDisabled } = useContext(DropdownContext)\n const { onClick, ...others } = props\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n e.persist()\n\n toggle()\n onClick?.(e)\n }\n\n return (\n <TriggerHandle\n onClick={handleClick}\n data-testid=\"dropdown-trigger-handle\"\n {...others}\n disabled={disabled || expandDisabled}\n type=\"button\"\n tabIndex={-1}\n >\n <Caret $rotate={expanded} />\n </TriggerHandle>\n )\n}\n\nexport interface GenericDropdownTriggerProps extends HTMLAttributes<HTMLDivElement> {\n disabled?: boolean\n scheme?: ColorScheme\n outlined?: boolean\n scale?: DropdownTriggerProps['scale']\n}\n\nexport function GenericDropdownTrigger(props: GenericDropdownTriggerProps): JSX.Element {\n const context = useContext(DropdownContext)\n const { ref, focused } = useFocusWithin<HTMLDivElement>()\n\n if (!context) {\n throw new Error('DropdownTrigger must be inside a DropdownContext')\n }\n\n const { children, className, scheme = 'light', outlined = true, scale, ...others } = props\n const { disabled } = context\n\n return (\n <DropdownTriggerWrapper\n role=\"presentation\"\n {...others}\n ref={ref}\n className={clsx(\n {\n 'is-disabled': disabled,\n 'is-focused': focused,\n },\n className\n )}\n disabled={disabled}\n scheme={scheme}\n $scale={scale}\n $outlined={outlined}\n >\n {children}\n </DropdownTriggerWrapper>\n )\n}\n\nfunction DropdownTrigger(props: DropdownTriggerProps): JSX.Element {\n const { children, className, ...others } = props\n\n return (\n <Popover.Reference>\n <GenericDropdownTrigger className={className} outlined={props.outlined} scale={props.scale}>\n <DropdownTriggerButton {...others} data-text={children}>\n {children}\n </DropdownTriggerButton>\n </GenericDropdownTrigger>\n </Popover.Reference>\n )\n}\n\nDropdownTrigger.Button = DropdownTriggerButton\nDropdownTrigger.Handle = DropdownTriggerHandle\n\nexport default DropdownTrigger\n","import { useCallback, useEffect, useState } from 'react'\n\nimport type { DropdownProps } from './Dropdown.types'\n\nexport interface useDropdownProps {\n expanded: boolean\n toggle: () => void\n}\n\nexport interface GenericDropdownProps extends DropdownProps, useDropdownProps {}\n\nfunction useDropdown({ disabled, expandDisabled }: DropdownProps): {\n expanded: boolean\n toggle: () => void\n expand: () => void\n collapse: () => void\n} {\n const [expanded, setExpanded] = useState(false)\n\n const toggle = useCallback(\n function toggle() {\n if (disabled || expandDisabled) {\n return\n }\n\n setExpanded((isExpanded) => !isExpanded)\n },\n [disabled, expandDisabled]\n )\n\n const expand = useCallback(\n function toggle() {\n if (disabled || expandDisabled) {\n return\n }\n\n setExpanded(true)\n },\n [disabled, expandDisabled]\n )\n\n const collapse = useCallback(\n function toggle() {\n if (disabled || expandDisabled) {\n return\n }\n\n setExpanded(false)\n },\n [disabled, expandDisabled]\n )\n\n useEffect(\n function closeWhenDisabled() {\n if ((disabled || expandDisabled) && expanded) {\n setExpanded(false)\n }\n },\n [disabled, expandDisabled, expanded]\n )\n\n return { expanded, toggle, expand, collapse }\n}\n\nexport default useDropdown\n","import React, { useMemo, useRef } from 'react'\nimport styled from 'styled-components'\n\nimport {\n DropdownMenu,\n DropdownMenuItem,\n DropdownMenuSection,\n DropdownSeparator,\n} from './DropdownMenu'\nimport { useClickOutside } from 'hooks/useClickOutside'\nimport DropdownContext from './Dropdown.context'\nimport DropdownTrigger from './DropdownTrigger'\nimport hidden from 'styles/hidden'\nimport useDropdown from './useDropdown'\nimport { Popover } from 'components/Popover'\n\nimport type { DropdownProps, GenericDropdownProps, DropdownMenuProps } from './Dropdown.types'\nimport type { PopoverAlign } from 'components/Popover'\n\nconst DropdownWrapper = styled.div`\n position: relative;\n`\n\nconst HiddenCloseButton = styled.button.attrs({\n type: 'button',\n tabIndex: -1,\n})`\n ${hidden(true)}\n`\n\nfunction useDeprecatedAlignFromMenu({\n children,\n align,\n}: React.PropsWithChildren<{ align?: PopoverAlign }>): PopoverAlign {\n let result: PopoverAlign | undefined\n\n if (align) {\n return align\n }\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<DropdownMenuProps>(child) && child.type === DropdownMenu) {\n result = child.props.align\n }\n })\n\n return (result || align) as PopoverAlign\n}\n\n// TODO: add focus trap here to allow navigating options with keyboard\n\n/**\n * Generic dropdown component that allows composing its pieces as desired.\n *\n * Based on:\n * - https://www.w3.org/TR/2017/REC-wai-aria-1.1-20171214/#menu\n * - https://www.w3.org/WAI/tutorials/menus/application-menus/\n *\n * @param props\n * @returns\n */\nexport function GenericDropdown(props: GenericDropdownProps): JSX.Element {\n const {\n children,\n expanded,\n toggle,\n disabled = false,\n expandDisabled = false,\n onBlur,\n position,\n ...others\n } = props\n const contextValue = useMemo(\n () => ({ expanded, toggle, disabled, expandDisabled }),\n [expanded, toggle, disabled, expandDisabled]\n )\n const ref = useRef(null)\n\n const align = useDeprecatedAlignFromMenu(props)\n\n useClickOutside(\n ref,\n function handleClickOutside(event?: MouseEvent | TouchEvent | KeyboardEvent) {\n onBlur?.(event)\n\n if (!expanded) {\n return\n }\n\n toggle()\n }\n )\n\n return (\n <DropdownWrapper {...others} role=\"menubar\" ref={ref}>\n <DropdownContext.Provider value={contextValue}>\n <HiddenCloseButton disabled={disabled} onClick={toggle}>\n Close\n </HiddenCloseButton>\n <Popover strategy=\"fixed\" position={position} align={align}>\n {children}\n </Popover>\n </DropdownContext.Provider>\n </DropdownWrapper>\n )\n}\n\n/**\n * @example\n <Dropdown>\n <Dropdown.Trigger>Download</Dropdown.Trigger>\n <Dropdown.Menu\n header={<p className=\"px-2\">Header</p>}\n footer={<p className=\"px-2\">A cool footer</p>}\n >\n {[{label: 'Hello', value: 'hi'}, { label: 'World', value: 'planet' }].map(({ label, value }) => (\n <Dropdown.Item\n key={value}\n onClick={() => {\n setMessage(label)\n }}\n >\n {label}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n */\nfunction Dropdown(props: DropdownProps): JSX.Element {\n const dropdownProps = useDropdown(props)\n\n return <GenericDropdown {...props} {...dropdownProps} />\n}\n\nDropdown.Trigger = DropdownTrigger\nDropdown.Menu = DropdownMenu\nDropdown.Section = DropdownMenuSection\nDropdown.Item = DropdownMenuItem\nDropdown.Separator = DropdownSeparator\n\nexport default Dropdown\n","import { createContext } from 'react'\nimport { createSelectable } from 'hooks/useSelectable'\n\nimport type { Option, useSelectReturn } from './Select.types'\n\nconst { SelectableContext, useSelectable } = createSelectable<Option>()\n\nexport { SelectableContext, useSelectable }\n\nconst SelectContext = createContext<useSelectReturn | null>(null)\nexport { SelectContext }\n","/**\n * Helper that returns the plural form if count is different than 1, otherwise the singular one.\n * @example\n * let total = 3\n * `Item${pluralize(total)}` // \"Items\"\n * `Child${pluralize(total, 'ren')}` // \"Children\"\n * `Pe${pluralize(total, 'ople', 'rson')}` // \"People\"\n * `${pluralize(total, 'People', 'Person')}` // \"People\"\n * @param count - total of items\n * @param plural - defaults to \"s\"\n * @param singular - defaults to \"\"\n * @returns plural or singular.\n */\nexport default function pluralize(count: number, plural = 's', singular = ''): string {\n return count !== 1 ? plural : singular\n}\n","import React, { useContext, forwardRef } from 'react'\nimport styled from 'styled-components'\n\nimport { DropdownContext, DropdownTrigger, GenericDropdownTrigger } from 'components/Dropdown'\nimport { getToken as token } from 'theming'\nimport { TextField, Trailing } from 'components/TextField'\nimport focusable from 'styles/focusable'\n\nimport type { SelectTriggerProps } from './Select.types'\nimport { isFunction } from '@loadsmart/utils-function'\nimport { usePopover } from 'components/Popover'\n\nconst GenericSelectTrigger = styled(GenericDropdownTrigger)`\n background: ${token('color-neutral-white')};\n`\n\nconst SelectTriggerSearchField = styled(TextField)`\n ${focusable`\n box-shadow: none;\n `}\n\n background-color: transparent;\n\n border: none;\n border-radius: ${token('border-radius-s')} 0 0 ${token('border-radius-s')};\n\n height: ${token('select-trigger-height')};\n\n flex: 1;\n\n ${Trailing} {\n margin: 0 ${token('space-xs')} 0 0;\n }\n`\n\nconst Separator = styled.span`\n height: 100%;\n\n margin: 0;\n\n border-right-color: ${token('color-neutral-light')};\n border-right-width: 1px;\n border-right-style: solid;\n`\n\nconst SelectTrigger = forwardRef<HTMLInputElement, SelectTriggerProps>(function SelectTrigger(\n props: SelectTriggerProps,\n ref\n) {\n const { className, ...others } = props\n const { disabled, expanded, toggle } = useContext(DropdownContext)\n\n const { register } = usePopover()\n\n function handleClick() {\n if (!expanded) {\n toggle()\n }\n }\n\n return (\n <GenericSelectTrigger className={className}>\n <SelectTriggerSearchField\n {...others}\n data-testid=\"select-trigger-search-field\"\n ref={(node) => {\n if (isFunction(ref)) {\n ref(node)\n }\n\n register.setReference(node)\n }}\n type=\"search\"\n disabled={disabled}\n onClick={handleClick}\n />\n <Separator />\n <DropdownTrigger.Handle data-testid=\"select-trigger-handle\" />\n </GenericSelectTrigger>\n )\n})\n\nexport default SelectTrigger\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport KeyboardKey, { getKeyboardKey } from 'utils/toolset/keyboard'\nimport isEmpty from 'utils/toolset/isEmpty'\n\nimport type { SupportedKey } from 'utils/toolset/keyboard'\n\nexport interface useFocusTrapProps {\n onActivate?: () => void\n onDeactivate?: () => void\n keys?: SupportedKey[]\n}\n\nfunction getFocusedIndexAfterKeyPress(\n e: React.KeyboardEvent,\n currentFocused: number,\n focusableCounter: number\n): number {\n const keyHandler: Record<React.KeyboardEvent['key'], (e: React.KeyboardEvent) => number> = {\n Tab(e: React.KeyboardEvent): number {\n return e.shiftKey ? -1 : 1\n },\n ArrowUp() {\n return -1\n },\n ArrowDown() {\n return 1\n },\n }\n\n function unknownKey() {\n return 0\n }\n\n const key = getKeyboardKey(e)\n const increment = (keyHandler[key] || unknownKey)(e)\n\n if (currentFocused === -1 && increment === -1) {\n /**\n * Prevent to skip one element when the initial increment is -1\n * and `currentFocused` is -1, we don't .\n * e.g.: focus has just been activated and user presses arrow up.\n */\n return (increment + focusableCounter) % focusableCounter\n }\n\n return (currentFocused + increment + focusableCounter) % focusableCounter\n}\n\nfunction getTabbableDescendants<T extends HTMLElement>(container: T | null) {\n if (container == null) {\n return []\n }\n\n // TODO: add support for other focusable elements\n return Array.from(container.querySelectorAll('button') || [])\n}\n\n/**\n * Custom hook that limits the focusable elements within a container, when activated.\n *\n * Based on https://developer.mozilla.org/en-US/docs/Web/Accessibility/Keyboard-navigable_JavaScript_widgets.\n *\n * @param {useFocusTrapProps} props\n * @param {RefObject} props.containerRef - Ref to the container that will be the boundary for the focus trap.\n * @param {() => void} props.onActivate - Called when the focus trap is activated.\n * @param {() => void} props.onDeactivate - Called when the focus trap is deactivated.\n * @param {(KeyboardEvent['key'])[]} props.keys - Keys that will move the focus inside\n * the container (The current implementation only track focus for button elements). We current\n * support `Tab`, `ArrowUp`, and `ArrowDown` keys. If not provided, only the `Tab` key will be used.\n * @returns {Object}\n */\nfunction useFocusTrap<T extends HTMLElement>(\n props: useFocusTrapProps\n): {\n containerRef: (container: T | null) => void\n active: boolean\n activate: () => void\n deactivate: () => void\n} {\n const { keys, onActivate, onDeactivate } = props\n\n const [active, setActive] = useState(false)\n const [currentFocused, setCurrentFocused] = useState(-1)\n const mutationObserverRef = useRef<MutationObserver>()\n const [focusableDescendants, setFocusableDescendants] = useState<HTMLElement[]>([])\n\n function subscribeToDOMMutationEvents(container: HTMLElement) {\n mutationObserverRef.current = new MutationObserver(function () {\n setFocusableDescendants(getTabbableDescendants(container))\n })\n\n mutationObserverRef.current.observe(container, { childList: true })\n }\n\n function unsubscribeToDOMMutationEvents() {\n setCurrentFocused(-1)\n if (mutationObserverRef.current) {\n mutationObserverRef.current?.disconnect()\n }\n }\n\n const containerRef = useCallback(function initialize(container: HTMLElement | null) {\n if (container != null) {\n setFocusableDescendants(getTabbableDescendants(container))\n subscribeToDOMMutationEvents(container)\n } else {\n unsubscribeToDOMMutationEvents()\n }\n }, [])\n\n useEffect(function onMount() {\n return function onUnmount() {\n unsubscribeToDOMMutationEvents()\n }\n }, [])\n\n useEffect(\n function subscribeToKeyEvents() {\n function handleKeyDownEvent(evt: KeyboardEvent) {\n /**\n * Brace yourselves for the nasty casting from globalThis.KeyboardEvent, which is\n * the type used in the `addEventListener` callback, to React.KeyboardEvent ¯\\_(ツ)_/¯\n */\n const e = evt as unknown as React.KeyboardEvent\n\n const supportedKeys = [...(keys || ['TAB'])]\n\n if (!KeyboardKey(e).is(supportedKeys) || isEmpty(focusableDescendants)) {\n return\n }\n\n e.preventDefault()\n\n const newCurrentFocused = getFocusedIndexAfterKeyPress(\n e,\n currentFocused,\n focusableDescendants.length\n )\n setCurrentFocused(newCurrentFocused)\n focusableDescendants[newCurrentFocused].focus()\n }\n\n function subscribe() {\n document.addEventListener('keydown', handleKeyDownEvent)\n }\n\n function unsubscribe() {\n document.removeEventListener('keydown', handleKeyDownEvent)\n }\n\n if (active) {\n subscribe()\n }\n\n return function unsubscribeToKeyEvents() {\n unsubscribe()\n }\n },\n [active, keys, currentFocused, focusableDescendants]\n )\n\n const activate = useCallback(\n function activate() {\n setActive(true)\n onActivate?.()\n },\n [onActivate]\n )\n\n const deactivate = useCallback(\n function deactivate() {\n setActive(false)\n onDeactivate?.()\n },\n [onDeactivate]\n )\n\n return {\n containerRef,\n active,\n activate,\n deactivate,\n }\n}\n\nexport default useFocusTrap\n","import get from 'utils/toolset/get'\n\nimport type { SelectAdapter } from './Select.types'\n\nexport const GenericAdapter: SelectAdapter<unknown> = {\n getKey(o): string {\n return get(o, 'value') as string\n },\n getLabel(o): string {\n return get(o, 'label') as string\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { GenericAdapter } from './Select.constants'\nimport isEmpty from 'utils/toolset/isEmpty'\nimport toArray from 'utils/toolset/toArray'\n\nimport type { SelectAdapter, SelectValue, Option, Adapters, SelectProps } from './Select.types'\n\nexport function getAdapter(adapters: Adapters, type?: string): SelectAdapter<any> {\n if (type == null) {\n return GenericAdapter\n }\n\n return adapters[type] || GenericAdapter\n}\n\nexport function getValue(selection: SelectValue, multiple?: boolean): Option | Option[] | null {\n const pairs = Array.from(selection)\n\n if (isEmpty(pairs)) {\n return null\n }\n\n if (multiple) {\n const options = []\n for (const [, option] of pairs) {\n options.push(option)\n }\n\n return options\n } else {\n const [[, option]] = pairs\n return option\n }\n}\n\nexport function toSelection(value: SelectProps['value']): Option[] {\n const safeValue = toArray(value || [])\n\n return safeValue.filter((option) => !isEmpty(option))\n}\n\nexport function getDisplayValue(\n adapters: Adapters,\n selection: SelectValue,\n multiple?: boolean\n): string {\n if (selection.size == 0) {\n return ''\n }\n\n if (multiple) {\n return ''\n } else {\n const value = getValue(selection, multiple)\n const adapter = getAdapter(adapters, (value as Option)._type)\n return adapter.getLabel(value) ?? ''\n }\n}\n\n// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\nexport function escapeRegExp(value: string): string {\n return String(value || '').replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isFunction } from '@loadsmart/utils-function'\nimport { isNil } from '@loadsmart/utils-object'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport isEmpty from 'utils/toolset/isEmpty'\nimport { useDropdown } from 'components/Dropdown'\nimport { useDidMount } from 'hooks/useDidMount'\nimport { useFocusTrap } from 'hooks/useFocusTrap'\nimport type { SelectableKeyType } from 'hooks/useSelectable'\nimport to from 'utils/toolset/awaitTo'\nimport { isThenable } from 'utils/toolset/isThenable'\nimport toArray from 'utils/toolset/toArray'\nimport { GenericAdapter } from './Select.constants'\nimport { useSelectable } from './Select.context'\nimport {\n escapeRegExp,\n getAdapter,\n getDisplayValue,\n getValue,\n toSelection,\n} from './useSelect.helpers'\n\nimport type { ChangeEvent, FocusEvent } from 'react'\nimport type {\n Adapters,\n GenericOption,\n Option,\n SelectDatasource,\n SelectDatasourceFunction,\n SelectProps,\n SelectStatus,\n SelectValue,\n useSelectReturn,\n} from './Select.types'\n\nasync function getData(datasources: SelectDatasource<any>[], query: string) {\n const regex = new RegExp(escapeRegExp(query), 'i')\n\n const promises = []\n const types: string[] = []\n\n for (const ds of datasources) {\n promises.push(Promise.resolve(ds.fetch({ query, regex })))\n types.push(ds.type)\n }\n\n // We use Promise.allSettled here because Promise.all rejects as soon as one promise fails\n // But we want to continue with the next datasource when one fails.\n const results = await Promise.allSettled(promises)\n\n let items: Option[] = []\n\n results.forEach((result, index) => {\n if (result.status === 'rejected') {\n return\n }\n\n const type = types[index]\n\n items = items.concat(\n (result.value || []).map((item) => {\n return {\n ...item,\n _type: type,\n } as Option\n })\n )\n })\n\n return items\n}\n\nfunction getDatasources(props: SelectProps) {\n function getDatasourceFromOptions(\n options?: GenericOption[] | null\n ): SelectDatasourceFunction<any>[] {\n if (!options) {\n return []\n }\n\n return [\n function useGenericDatasource() {\n return {\n type: 'generic',\n adapter: GenericAdapter,\n fetch: function fetch({ regex }) {\n return options.filter(({ label }) => regex.test(label))\n },\n }\n },\n ]\n }\n\n let datasources: SelectDatasourceFunction<any>[] = []\n\n datasources = datasources.concat(props.datasources || [])\n datasources = datasources.concat(getDatasourceFromOptions(props.options))\n\n return datasources.map((ds) => ds())\n}\n\nfunction extractAdapters(datasources: SelectDatasource<any>[]) {\n return toArray(datasources).reduce((map, ds) => {\n return {\n ...map,\n [ds.type]: ds.adapter,\n }\n }, {})\n}\n\nfunction TriggerOnFocusHandler(e: FocusEvent<HTMLInputElement>) {\n e.target.select()\n}\n\nfunction mapOptions(items: Option[], adapters: Adapters) {\n const options = new Map<SelectableKeyType, Option>()\n\n items.forEach((item) => {\n const adapter = getAdapter(adapters, item._type)\n options.set(adapter.getKey(item), item)\n })\n\n return options\n}\n\nfunction useOptions<T = any>(props: { datasources: SelectDatasource<T>[]; adapters: Adapters }) {\n const { datasources, adapters } = props\n const [options, setOptions] = useState(new Map<SelectableKeyType, Option>())\n const [status, setStatus] = useState<SelectStatus>('idle')\n\n const timeoutRef = useRef<NodeJS.Timeout>()\n\n function cancelPendingFetch() {\n if (timeoutRef.current != null) {\n clearTimeout(timeoutRef.current)\n }\n }\n\n const fetchAfterTimeout = useCallback(\n function fetchAfterTimeout(query: string) {\n cancelPendingFetch()\n /**\n * The `pending-query` status represents that the 'fetching' has been started\n * but it has been debounced and the internal fetch has not yet been called.\n * This is important because at this point the status is not idle\n * as the fetching has already started.\n */\n setStatus('pending-query')\n\n async function fetch() {\n setOptions(new Map<SelectableKeyType, Option>())\n setStatus('querying')\n\n const items = await getData(datasources, query)\n\n setOptions(mapOptions(items, adapters))\n setStatus('queried')\n }\n\n timeoutRef.current = setTimeout(() => void fetch(), 750)\n },\n [adapters, datasources]\n )\n\n const clear = useCallback(function clear() {\n setStatus('idle')\n setOptions(new Map<SelectableKeyType, Option>())\n }, [])\n\n const get = useCallback(\n function get() {\n return Array.from(options.values())\n },\n [options]\n )\n\n const reset = useCallback(\n function reset() {\n clear()\n fetchAfterTimeout('')\n },\n [clear, fetchAfterTimeout]\n )\n\n const getOptionByKey = useCallback(\n function getOptionByKey(key: SelectableKeyType) {\n return options.get(key)\n },\n [options]\n )\n\n useEffect(() => {\n return () => {\n cancelPendingFetch()\n }\n }, [])\n\n return {\n get,\n fetch: fetchAfterTimeout,\n clear,\n status,\n getOptionByKey,\n reset,\n }\n}\n\n// TODO: keep adapter resolution in a single place\n// TODO: prevent state changes after unmount (`useMounted` hook from Alice Frontend)\n/**\n * Based on https://www.w3.org/TR/wai-aria-practices-1.1/examples/combobox/aria1.1pattern/listbox-combo.html\n * @param props\n * @returns\n */\nfunction useSelect(props: SelectProps): useSelectReturn {\n const didMount = useDidMount()\n const {\n multiple,\n onQueryChange,\n onChange,\n onCreate,\n getInputProps,\n id,\n name,\n disabled = false,\n onBlur,\n isValidNewOption = (query: string) => Boolean(query),\n createOptionPosition = 'last',\n } = props\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const datasources = useMemo<SelectDatasource<any>[]>(\n () => getDatasources(props),\n [props.datasources, props.options]\n )\n const adapters = useMemo<Adapters>(() => extractAdapters(datasources), [datasources])\n\n const selectable = useSelectable({\n selected: toSelection(props.value),\n multiple,\n adapters,\n onChange: useCallback(\n function handleSelectionChange(selected: SelectValue) {\n onChange?.({ target: { id, name, value: getValue(selected, multiple) } })\n },\n [id, multiple, name, onChange]\n ),\n })\n\n const triggerRef = useRef<HTMLInputElement>()\n const focusTrap = useFocusTrap({\n keys: ['ARROW_UP', 'ARROW_DOWN'],\n onDeactivate() {\n triggerRef.current?.focus()\n },\n })\n\n const [queryTyped, setQueryTyped] = useState(false)\n const [query, setQuery] = useState<string>(\n getDisplayValue(adapters, selectable.selected, multiple)\n )\n const options = useOptions({ datasources, adapters })\n\n const expandDisabled = useMemo(\n () =>\n !query.length &&\n isEmpty(options.get()) &&\n isEmpty(selectable.selected) &&\n isFunction(isValidNewOption)\n ? !isValidNewOption(query)\n : !isValidNewOption,\n [query, options, selectable.selected, isValidNewOption]\n )\n\n const dropdown = useDropdown({ ...props, expandDisabled })\n\n useEffect(() => {\n if (queryTyped) {\n options.fetch(query)\n dropdown.expand()\n }\n }, [query, queryTyped])\n\n const getSelectableOption = useCallback(\n function getSelectableOption(option: Option) {\n const adapter = getAdapter(adapters, option._type)\n\n const value = adapter.getKey(option)\n const label = adapter.getLabel(option)\n const checked = selectable.selected.has(value)\n\n return { label, value, checked }\n },\n [adapters, selectable.selected]\n )\n\n const getOption = useCallback(\n function getOption(value: SelectableKeyType) {\n let option = options.getOptionByKey(value)\n\n if (!option) {\n option = selectable.selected.get(value)\n }\n\n return option\n },\n [options, selectable.selected]\n )\n\n const toggleOption = useCallback(\n function toggleOption(option: Option) {\n selectable.toggle(option)\n },\n [selectable]\n )\n\n const getDropdownProps = useCallback(\n function getDropdownProps() {\n return {\n toggle: dropdown.toggle,\n expanded: dropdown.expanded,\n onBlur(event?: MouseEvent | TouchEvent | KeyboardEvent) {\n setQueryTyped(false)\n\n if (!multiple) {\n setQuery(getDisplayValue(adapters, selectable.selected, multiple))\n } else {\n setQuery('')\n }\n options.reset()\n onBlur?.(event)\n },\n expandDisabled,\n }\n },\n [\n adapters,\n dropdown.expanded,\n dropdown.toggle,\n multiple,\n options,\n selectable.selected,\n onBlur,\n expandDisabled,\n ]\n )\n\n const getTriggerProps = useCallback(\n function getTriggerProps() {\n return {\n ...getInputProps?.(),\n id,\n ref(node: HTMLInputElement | null) {\n if (node != null) {\n triggerRef.current = node\n }\n },\n value: query,\n onChange(e: ChangeEvent<HTMLInputElement>) {\n const sanitizedValue = e.target.value.replace(/\\s+/, '')\n\n setQueryTyped(sanitizedValue !== '')\n onQueryChange?.(e)\n setQuery(e.target.value)\n },\n onFocus: TriggerOnFocusHandler,\n }\n },\n [id, query, onQueryChange, dropdown, options, selectable.selected]\n )\n\n const getClearProps = useCallback(\n function getClearProps() {\n return {\n onClick() {\n setQueryTyped(false)\n setQuery('')\n selectable.clear()\n options.reset()\n triggerRef.current?.focus()\n },\n }\n },\n [options, selectable]\n )\n\n const getMenuProps = useCallback(\n function getMenuProps() {\n return {\n ref: focusTrap.containerRef,\n role: 'listbox',\n }\n },\n [focusTrap.containerRef]\n )\n\n const getOptionProps = useCallback(\n function getOptionProps({ option }: { option: Option }) {\n const { value, checked, label } = getSelectableOption(option)\n\n return {\n role: 'option',\n 'aria-selected': checked,\n id: String(value),\n onClick() {\n setQueryTyped(false)\n\n if (!multiple) {\n setQueryTyped(false)\n }\n toggleOption(option)\n\n return multiple\n },\n tabIndex: -1,\n }\n },\n [getSelectableOption, toggleOption, multiple]\n )\n\n const getCreatebleProps = useCallback(\n function getCreatebleProps() {\n return {\n onClick: function onClick() {\n async function asyncOnClick() {\n if (!isFunction(onCreate)) return\n\n const onCreateReturn = onCreate(query)\n\n let option\n if (onCreateReturn) {\n if (isThenable(onCreateReturn)) {\n option = await onCreateReturn\n } else {\n option = onCreateReturn\n }\n }\n\n options.fetch(query)\n\n if (option) {\n toggleOption(option)\n }\n }\n\n void asyncOnClick()\n\n return multiple\n },\n tabIndex: -1,\n }\n },\n [multiple, onCreate, query, options, toggleOption]\n )\n\n const isCreatable = useCallback(\n function isCreatable() {\n const findByLabel = (item: Option) =>\n getSelectableOption(item).label.toLocaleLowerCase() === query.toLocaleLowerCase()\n\n function isQueryEqualAnOption() {\n return !isNil(\n [...options.get(), ...Array.from(selectable.selected.values())].find(findByLabel)\n )\n }\n\n function getIsValidNewOption() {\n if (isFunction(isValidNewOption)) {\n return isValidNewOption(query) && !isQueryEqualAnOption()\n }\n\n return isValidNewOption\n }\n\n return isFunction(onCreate) && options.status === 'queried' && getIsValidNewOption()\n },\n [getSelectableOption, isValidNewOption, onCreate, options, query, selectable.selected]\n )\n\n useEffect(\n function onInit() {\n options.fetch('')\n },\n // we just want to load any initial options that a datasource may have available\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [datasources]\n )\n\n useEffect(\n function onDropdownToggle() {\n if (!props.autoFocus && !didMount) {\n return\n }\n if (dropdown.expanded) {\n focusTrap.activate()\n } else {\n focusTrap.deactivate()\n }\n },\n /**\n * We are interested in activating/deactivating our\n * focus trap when the dropdown changes its expanded state.\n */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dropdown.expanded]\n )\n\n useEffect(\n function updateOnSelectedChange() {\n if (!multiple) {\n setQuery(getDisplayValue(adapters, selectable.selected, multiple))\n }\n },\n [adapters, multiple, selectable.selected]\n )\n\n return {\n status: options.status,\n options: options.get(),\n value: getValue(selectable.selected, multiple),\n query,\n disabled,\n\n selectable,\n\n getMenuProps,\n getSelectableOption,\n getOption,\n getOptionProps,\n getTriggerProps,\n getClearProps,\n getDropdownProps,\n getCreatebleProps,\n isCreatable,\n createOptionPosition,\n }\n}\n\nexport default useSelect\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { isObject } from '@loadsmart/utils-object'\nimport { isFunction } from '@loadsmart/utils-function'\n\ninterface Thenable {\n then(): any\n}\n\n// TODO: add this helper to @loadsmart/utils\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function isThenable(object: any): object is Thenable {\n return isObject(object) && isFunction((object as Thenable)['then'])\n}\n","import React, { HTMLAttributes } from 'react'\nimport styled from 'styled-components'\nimport { getToken as token } from 'theming'\n\nimport highlightMatch from 'utils/toolset/highlightMatch'\n\nexport type HighlightMatchProps = {\n text: string\n match: string\n} & HTMLAttributes<HTMLSpanElement>\n\nconst HighlightMatchWrapper = styled.span`\n /* highlightMatch splits the label into separate HTML elements, thus we need\n to preserve white-spaces, otherwise the browser wouldn't render them. */\n white-space: pre;\n\n mark {\n color: inherit;\n font-weight: ${token('font-weight-bold')};\n\n background-color: ${token('color-transparent')};\n }\n`\n\nconst HighlightMatch = ({ text, match, ...props }: HighlightMatchProps): JSX.Element => {\n return <HighlightMatchWrapper {...props}>{highlightMatch(text, match)}</HighlightMatchWrapper>\n}\n\nexport default HighlightMatch\n","import React from 'react'\n\n/**\n * A function that wraps a match into `mark` element to be highlighted.\n * @example\n *\n * @param {string} - label to be split\n * @param {string} - match to be found\n * @returns {ReactNode} - an element with marked match\n */\nexport default function highlightMatch(str: string, match: string): JSX.Element {\n if (str == null || match == null) {\n return <>{str}</>\n }\n\n // the explicit coercion here ensures that we'll be dealing with strings even in vanilla JS code\n const index = String(str).toLowerCase().indexOf(String(match).toLowerCase())\n\n if (index === -1) return <>{str}</>\n\n const pre = str.slice(0, index)\n const mid = str.slice(index, index + match.length)\n const post = str.slice(index + match.length)\n\n return (\n <>\n {pre}\n <mark>{mid}</mark>\n {post}\n </>\n )\n}\n","import React, { useContext } from 'react'\nimport styled from 'styled-components'\n\nimport { Checkbox } from 'components/Checkbox'\nimport { Dropdown } from 'components/Dropdown'\nimport { HighlightMatch } from 'components/HighlightMatch'\nimport { Icon as DefaultIcon } from 'components/Icon'\nimport { Group as DefaultGroup } from 'components/Layout'\nimport conditional, { whenProps } from 'tools/conditional'\nimport { getToken as token } from 'theming'\n\nimport { SelectContext } from './Select.context'\n\nimport type { DropdownMenuItemProps } from 'components/Dropdown'\nimport type { SelectOptionProps } from './Select.types'\n\nconst Group = styled(DefaultGroup).attrs({\n as: 'span',\n})`\n /* placeholder */\n`\n\nconst Icon = styled(DefaultIcon)`\n color: ${token('select-selected-option-check-color')};\n`\n\nconst DefaultSelectOption = styled(Dropdown.Item)<DropdownMenuItemProps>`\n background: ${conditional({\n 'select-selected-option-background-color': whenProps({ 'aria-selected': true }),\n 'color-neutral-white': whenProps({ 'aria-selected': false }),\n })};\n`\n\nfunction SelectOption({\n children,\n value,\n leading,\n trailing,\n ...rest\n}: SelectOptionProps): JSX.Element {\n const select =\n useContext(SelectContext) ||\n (() => {\n throw new Error('Options should be wrapped in a SelectContext')\n })()\n\n const type = select.selectable.type()\n const option = select.getOption(value) || {}\n const { checked, label } = select.getSelectableOption(option)\n\n function renderContent() {\n if (children) return children\n if (checked && type === 'multiple') return label\n\n return <HighlightMatch text={label} match={select.query} />\n }\n\n return (\n <DefaultSelectOption\n {...rest}\n {...select.getOptionProps({ option })}\n leading={\n type === 'multiple' ? (\n <Group align=\"center\" space=\"s\">\n <Checkbox scale=\"small\" defaultChecked={checked} />\n {leading}\n </Group>\n ) : (\n leading\n )\n }\n trailing={type === 'single' ? checked ? <Icon name=\"check\" /> : null : trailing}\n >\n {renderContent()}\n </DefaultSelectOption>\n )\n}\n\nexport default SelectOption\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport type { SelectEmptyProps } from './Select.types'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n box-sizing: border-box;\n margin: 0 ${token('space-s')};\n padding: ${token('space-s')};\n\n color: ${token('color-neutral')};\n\n font-size: 1em;\n line-height: ${token('font-height-3')};\n\n background: ${token('color-transparent')};\n`\n\nfunction SelectEmpty({ children, ...others }: SelectEmptyProps): JSX.Element {\n return <Wrapper {...others}>{children}</Wrapper>\n}\n\nexport default SelectEmpty\n","import React, { useContext } from 'react'\nimport { Dropdown } from 'components/Dropdown'\nimport { SelectContext } from './Select.context'\nimport type { SelectCreatableOptionProps } from './Select.types'\n\nfunction SelectCreatableOption({ children, ...rest }: SelectCreatableOptionProps): JSX.Element {\n const select =\n useContext(SelectContext) ||\n (() => {\n throw new Error('SelectCreatableOption should be wrapped in a SelectContext')\n })()\n\n return (\n <Dropdown.Item {...rest} {...select.getCreatebleProps()}>\n {children || `Add \"${select.query}\"`}\n </Dropdown.Item>\n )\n}\n\nexport default SelectCreatableOption\n","import type { Components, CreatableOptionType } from './Select.types'\nimport SelectCreatableOption from './SelectCreatableOption'\nimport SelectEmpty from './SelectEmpty'\nimport SelectOption from './SelectOption'\n\nconst defaultComponents = {\n Option: SelectOption,\n Empty: SelectEmpty,\n CreatableOption: SelectCreatableOption as CreatableOptionType,\n}\n\nexport function getComponents(components?: Components): Required<Components> {\n return { ...defaultComponents, ...components }\n}\n","import React, { Fragment, forwardRef } from 'react'\nimport styled from 'styled-components'\n\nimport { Dropdown, GenericDropdown } from 'components/Dropdown'\nimport { getToken as token } from 'theming'\nimport { SelectableContext, SelectContext } from './Select.context'\nimport { Tag } from 'components/Tag'\nimport { Text } from 'components/Text'\nimport CloseButton from 'common/CloseButton'\nimport isEmpty from 'utils/toolset/isEmpty'\nimport omit from 'utils/toolset/omit'\nimport pluralize from 'utils/toolset/pluralize'\nimport SelectTrigger from './SelectTrigger'\nimport toArray from 'utils/toolset/toArray'\nimport useSelect from './useSelect'\nimport SelectOption from './SelectOption'\nimport SelectEmpty from './SelectEmpty'\nimport SelectCreatableOption from './SelectCreatableOption'\nimport { getComponents } from './components'\n\nimport type { DropdownMenuProps } from 'components/Dropdown'\nimport type {\n SelectProps,\n useSelectReturn,\n SelectStatus,\n Components,\n SelectableOption,\n} from './Select.types'\n\nconst OMITTED_PROPS = [\n 'id',\n 'name',\n 'datasources',\n 'onChange',\n 'onQueryChange',\n 'onCreate',\n 'options',\n 'value',\n]\n\nconst Loading = styled.span`\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n width: 2em;\n\n height: 2em;\n padding: ${token('space-xs')};\n\n font-size: ${token('font-size-3')};\n`\n\nfunction getCommonClearButtonProps() {\n return {\n 'data-testid': 'select-trigger-clear',\n }\n}\n\nconst SelectMenu = forwardRef<HTMLDivElement, DropdownMenuProps>(function SelectMenu(\n props: DropdownMenuProps,\n ref\n): JSX.Element {\n return <Dropdown.Menu ref={ref} {...props} role=\"listbox\" />\n})\n\nfunction ClearMultiple({ select }: { select: useSelectReturn }) {\n const { onClick } = select.getClearProps()\n const total = toArray(select.value).length\n\n return (\n <div data-testid=\"select-trigger-clear-counter\">\n <Tag\n removable\n size=\"default\"\n variant=\"accent\"\n onRemove={onClick}\n title={`${total} selected option${pluralize(total)}`}\n getRemoveButtonProps={getCommonClearButtonProps}\n disabled={select.disabled}\n >\n {total}\n </Tag>\n </div>\n )\n}\n\nconst Divider = styled.hr`\n width: calc(100% - ${token('space-m')});\n height: 1px;\n margin: ${token('space-m')} ${token('space-s')};\n\n background-color: ${token('color-neutral-lighter')};\n border: 0;\n`\n\nconst DividerText = styled(Text)`\n position: absolute;\n top: ${token('space-s')};\n\n padding-right: ${token('space-xs')};\n padding-left: ${token('space-m')};\n\n background-color: ${token('color-neutral-white')};\n`\n\nfunction isQuerying(status: SelectStatus) {\n return ['pending-query', 'querying'].includes(status)\n}\n\ntype SeparatorProps = {\n status: SelectStatus\n after?: unknown[]\n before?: unknown[]\n}\n\nfunction Separator({ status, after = [], before = [] }: SeparatorProps): JSX.Element {\n if (!isQuerying(status)) {\n if (isEmpty(after) && !isEmpty(before)) return <Divider />\n if (isEmpty(after)) return <Fragment />\n }\n\n return (\n <div style={{ position: 'relative' }}>\n <Divider />\n <DividerText variant=\"caption-bold\" color=\"color-neutral-light\">\n {isQuerying(status) ? 'Loading...' : `${after.length} option${pluralize(after.length)}`}\n </DividerText>\n </div>\n )\n}\n\nfunction renderOptionsSingle(select: useSelectReturn, components?: Components): JSX.Element {\n const { Option, Empty, CreatableOption } = getComponents(components)\n const isCreatable = select.isCreatable()\n\n if (isQuerying(select.status) && isEmpty(select.options)) {\n return <SelectEmpty>Loading...</SelectEmpty>\n }\n\n if (isEmpty(select.options)) {\n if (isCreatable) {\n return <CreatableOption />\n }\n\n return <Empty>No results found.</Empty>\n }\n\n return (\n <>\n {select.createOptionPosition === 'first' && isCreatable ? <CreatableOption /> : null}\n {select.options.map((option) => {\n const { value } = select.getSelectableOption(option)\n return <Option key={String(value)} value={value} />\n })}\n {select.createOptionPosition === 'last' && isCreatable ? <CreatableOption /> : null}\n </>\n )\n}\n\nfunction renderOptionsMultiple(select: useSelectReturn, components?: Components): JSX.Element {\n const { Option, Empty, CreatableOption } = getComponents(components)\n const isCreatable = select.isCreatable()\n\n const selectedOptions = Array.from(select.selectable.selected.values()).map((selectable) =>\n select.getSelectableOption(selectable)\n )\n\n const remainingOptions = select.options.reduce((remaining, selectable) => {\n const option = select.getSelectableOption(selectable)\n\n if (option.checked) {\n return remaining\n }\n\n return [...remaining, option]\n }, [] as SelectableOption[])\n\n let remaining = (\n <Fragment>\n {select.createOptionPosition === 'first' && isCreatable ? <CreatableOption /> : null}\n {remainingOptions.map((option) => (\n <Option key={String(option.value)} value={option.value} />\n ))}\n {select.createOptionPosition === 'last' && isCreatable ? <CreatableOption /> : null}\n </Fragment>\n )\n\n if (!isQuerying(select.status) && isEmpty(remainingOptions)) {\n remaining = isCreatable ? <CreatableOption /> : <Empty>No more options.</Empty>\n }\n\n if (!isQuerying(select.status) && isEmpty(select.options)) {\n remaining = isCreatable ? <CreatableOption /> : <Empty>No results found.</Empty>\n }\n\n return (\n <Fragment>\n {selectedOptions.map((option) => (\n <Option key={String(option.value)} value={option.value} />\n ))}\n <Separator status={select.status} before={selectedOptions} after={remainingOptions} />\n {remaining}\n </Fragment>\n )\n}\n\nfunction Select(props: SelectProps): JSX.Element {\n const { multiple, placeholder, components, hideClear = false, ...others } = props\n\n const select = useSelect(props)\n\n function renderOptions() {\n if (multiple) {\n return renderOptionsMultiple(select, components)\n }\n\n return renderOptionsSingle(select, components)\n }\n\n function getTrailing() {\n if (isQuerying(select.status)) {\n return <Loading data-testid=\"select-trigger-loading\">···</Loading>\n }\n\n if (!select.value) {\n return null\n }\n\n if (multiple) {\n return <ClearMultiple select={select} />\n }\n\n if (select.disabled || hideClear) {\n return null\n }\n\n return (\n <CloseButton\n size={12}\n {...getCommonClearButtonProps()}\n {...select.getClearProps()}\n type=\"button\"\n />\n )\n }\n\n return (\n <GenericDropdown {...omit(others, OMITTED_PROPS)} {...select.getDropdownProps()}>\n <SelectableContext.Provider value={select.selectable}>\n <SelectTrigger\n {...select.getTriggerProps()}\n trailing={getTrailing()}\n placeholder={placeholder}\n autoComplete=\"off\"\n aria-autocomplete=\"none\"\n />\n <SelectMenu {...select.getMenuProps()}>\n <SelectContext.Provider value={select}>{renderOptions()}</SelectContext.Provider>\n </SelectMenu>\n </SelectableContext.Provider>\n </GenericDropdown>\n )\n}\n\nSelect.Trigger = SelectTrigger\nSelect.Option = SelectOption\nSelect.Empty = SelectEmpty\nSelect.CreatableOption = SelectCreatableOption\n\nexport default Select\n","import React from 'react'\nimport type { PropsWithChildren } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { BaseLink } from 'components/Link'\n\nexport type LogoProps = PropsWithChildren<{\n url: string\n className?: string\n}>\n\nconst Container = styled.div`\n padding-right: ${token('space-l')};\n padding-left: ${token('space-l')};\n`\n\nfunction Logo({ className, url, children }: LogoProps): JSX.Element {\n return (\n <Container className={className}>\n <BaseLink href={url}>{children}</BaseLink>\n </Container>\n )\n}\n\nexport default styled(Logo)<LogoProps>({})\n","import { RefObject, useEffect, useLayoutEffect, useReducer, useState } from 'react'\nimport type { CSSProperties } from 'styled-components'\n\nimport { useDidMount } from 'hooks/useDidMount'\n\nfunction updateHeight(set: (value: number) => void, el: HTMLElement | null) {\n if (el) {\n const { height } = el.getBoundingClientRect()\n set(height)\n }\n}\n\nexport type HeightExpansionToggler = {\n expanded: boolean\n toggle: () => void\n height: CSSProperties['height']\n}\n\n/**\n * A React Hook to help you expand or collapse an element by\n * checking its total height and controlling a boolean flag\n * @param {React.RefObject} targetElRef - Ref of the wrapper element\n */\nfunction useHeightExpansionToggler(targetElRef: RefObject<HTMLElement>): HeightExpansionToggler {\n const [state, toggleState] = useReducer((prevState) => !prevState, false)\n const [totalHeight, setTotalHeight] = useState<CSSProperties['height']>(0)\n\n useLayoutEffect(() => {\n updateHeight(setTotalHeight, targetElRef.current)\n }, [targetElRef])\n\n useEffect(() => {\n const observer = new MutationObserver(() => {\n updateHeight(setTotalHeight, targetElRef.current)\n })\n\n if (targetElRef.current) {\n observer.observe(targetElRef.current, { childList: true })\n }\n\n return () => observer.disconnect()\n }, [targetElRef])\n\n const mounted = useDidMount()\n const finalHeight = !mounted ? 'auto' : state ? totalHeight : 0\n\n return {\n expanded: state,\n toggle: toggleState,\n height: finalHeight,\n }\n}\n\nexport default useHeightExpansionToggler\n","import React from 'react'\nimport type { ReactNode, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nimport focusable from 'styles/focusable'\nimport transition from 'styles/transition'\nimport { getToken as token } from 'theming'\nimport rem from 'utils/toolset/rem'\nimport type { MenuLinkProps } from './MenuLink'\n\nexport type MenuBaseItemProps = HTMLAttributes<HTMLElement> & {\n label: string\n leading?: ReactNode\n trailing?: ReactNode\n url?: string\n subItems?: MenuLinkProps[]\n}\n\nconst StyledMenuItem = styled.button`\n ${transition({ duration: '0.25s' })};\n\n display: flex;\n width: 100%;\n align-items: center;\n justify-content: space-between;\n padding: ${token('space-s')} 0;\n padding-right: ${rem('12px')};\n padding-left: ${token('space-l')};\n\n color: ${token('color-neutral-white')};\n font-weight: ${token('font-weight-bold')};\n font-size: ${token('font-size-4')};\n line-height: ${token('font-height-3')};\n\n cursor: pointer;\n\n ${focusable`\n color: ${token('side-navigation-menu-item-color--focus')};\n `}\n`\n\nconst Leading = styled.div`\n display: flex;\n align-items: center;\n padding-right: ${token('space-s')};\n`\n\nconst Flex = styled.div`\n display: flex;\n`\n\nfunction MenuBaseItem({ label, leading, trailing, ...props }: MenuBaseItemProps): JSX.Element {\n return (\n <StyledMenuItem {...props}>\n <Flex>\n {leading && <Leading>{leading}</Leading>}\n {label}\n </Flex>\n {trailing && trailing}\n </StyledMenuItem>\n )\n}\n\nexport default MenuBaseItem\n","import React from 'react'\nimport type { ReactNode } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport hoverable from 'styles/hoverable'\nimport MenuBaseItem from './MenuBaseItem'\n\nconst StyledMenuItem = styled(({ url, ...props }) => (\n <MenuBaseItem as={url ? 'a' : 'button'} {...props} />\n))`\n ${hoverable`\n color: ${token('side-navigation-menu-link-color--hover')};\n `}\n\n ${({ active }) =>\n active\n ? css`\n background-color: ${token('side-navigation-menu-link-background-color--active')};\n box-shadow: inset ${token('space-xs')} 0\n ${token('side-navigation-menu-link-box-shadow-color--active')};\n `\n : ''}\n`\n\nexport type MenuLinkProps = React.HTMLAttributes<HTMLAnchorElement> & {\n label: string\n leading?: ReactNode\n trailing?: ReactNode\n url?: string\n}\n\nfunction MenuLink({ url, ...props }: MenuLinkProps): JSX.Element {\n return <StyledMenuItem href={url} url={url} {...props} role=\"menuitem\" />\n}\n\nexport default styled(MenuLink)({})\n","import React, { Fragment, useRef } from 'react'\nimport type { PropsWithChildren, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\nimport type { CSSProperties } from 'styled-components'\n\nimport { Icon } from 'components/Icon'\nimport { conditional, whenProps, prop } from 'tools/index'\nimport { getToken as token } from 'theming'\nimport transition from 'styles/transition'\nimport { useHeightExpansionToggler } from 'hooks/useHeightExpansionToggler'\n\nimport MenuLink from './MenuLink'\nimport MenuBaseItem from './MenuBaseItem'\n\ninterface IExpandable {\n $expanded?: boolean\n $height?: CSSProperties['height']\n}\n\nconst IconWrapper = styled.div`\n display: flex;\n align-items: center;\n margin-left: ${token('space-s')};\n`\n\nconst StyledIcon = styled(Icon)<IExpandable>`\n color: ${token('color-neutral')};\n\n transform: rotate(\n ${conditional({\n '0deg': whenProps({ $expanded: true }),\n '-90deg': whenProps({ $expanded: false }),\n })}\n );\n`\n\nconst ExpandableItems = styled.div<IExpandable>`\n overflow: hidden;\n ${transition({ property: 'height' })}\n\n height: ${prop('$height', 0)}px;\n\n ${MenuLink} {\n padding-left: ${token('space-xl')};\n }\n`\n\nconst ItemsWrapper = styled.div<IExpandable>`\n ${transition()}\n\n opacity: ${conditional({\n 0: whenProps({ $expanded: false }),\n 1: whenProps({ $expanded: true }),\n })};\n\n transform: translateY(\n ${conditional({\n '-10%': whenProps({ $expanded: false }),\n '0%': whenProps({ $expanded: true }),\n })}\n );\n`\n\nexport type MenuExpandableProps = HTMLAttributes<HTMLDivElement> &\n PropsWithChildren<{\n label: string\n }>\n\nfunction MenuExpandable({ label, children, ...props }: MenuExpandableProps): JSX.Element {\n const expandableItemsRef = useRef<HTMLDivElement>(null)\n const { expanded, toggle, height } = useHeightExpansionToggler(expandableItemsRef)\n\n return (\n <div {...props} role=\"none\">\n <MenuBaseItem\n onClick={toggle}\n label={label}\n trailing={\n <IconWrapper>\n <StyledIcon $expanded={expanded} name=\"chevron-down\" size={16} />\n </IconWrapper>\n }\n aria-haspopup=\"true\"\n aria-expanded={expanded}\n />\n <ExpandableItems $height={height} role=\"menu\">\n <ItemsWrapper $expanded={expanded} ref={expandableItemsRef} role=\"presentation\">\n {React.Children.map(children, (child) => {\n if (!child) return Fragment\n\n if (typeof child === 'object' && 'type' in child) {\n return React.cloneElement(child, {\n key: label,\n tabIndex: expanded ? 0 : -1,\n ariaHidden: !expanded,\n })\n }\n\n return child\n })}\n </ItemsWrapper>\n </ExpandableItems>\n </div>\n )\n}\n\nexport default MenuExpandable\n","import React, { PropsWithChildren } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\n\nimport MenuExpandable from './MenuExpandable'\nimport type { MenuExpandableProps } from './MenuExpandable'\nimport MenuLink from './MenuLink'\nimport type { MenuLinkProps } from './MenuLink'\nimport useID from 'hooks/useID'\nimport { styledCompounds } from 'utils/toolset/styledCompounds'\n\nconst MenuTitle = styled.div`\n padding: ${token('space-s')} 0;\n padding-left: ${token('space-l')};\n\n color: ${token('color-neutral')};\n\n font-weight: ${token('side-navigation-menu-title-font-weight')};\n font-size: ${token('side-navigation-menu-title-font-size')};\n line-height: ${token('side-navigation-menu-title-line-height')};\n text-transform: uppercase;\n`\n\nexport interface MenuProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: string\n}\n\nfunction Menu({ label, children, ...props }: MenuProps): JSX.Element {\n const menuId = useID()\n\n return (\n <div role=\"menubar\" aria-labelledby={menuId} {...props}>\n {label && <MenuTitle id={menuId}>{label}</MenuTitle>}\n\n {children}\n </div>\n )\n}\n\ntype MenuItemProps = { active?: boolean } & PropsWithChildren<MenuLinkProps & MenuExpandableProps>\n\nfunction MenuItem(props: MenuItemProps) {\n if (props.children) {\n return <MenuExpandable {...props} />\n }\n\n return <MenuLink {...props} />\n}\n\nconst StyledMenu = styled(Menu)({})\n\nexport default styledCompounds(StyledMenu, { Item: MenuItem, SubItem: MenuLink })\n","import type { StyledComponent } from 'styled-components'\n\n/**\n * Helper that returns the plural form if count is different than 1, otherwise the singular one.\n * @example\n * const StyledParent = styled.div``\n * styledCompounds(StyledParent, { Child: (props) => <div /> })\n * <StyledParent.Child />\n * @param StyledComponent - Parent instance of a styled-component\n * @param compounds - Object with compound components\n * @returns Parent component with type-safe accessable compound components\n */\nexport function styledCompounds<\n A extends StyledComponent<React.ComponentType, Record<string, unknown>>,\n B extends Record<string, unknown>\n>(Parent: A, compounds: B): A & B {\n Object.keys(compounds).forEach((key) => {\n // @ts-expect-error StyledComponent is read-only\n Parent[key] = compounds[key]\n })\n return Parent as A & B\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\n\nconst Line = styled.hr`\n margin: ${token('side-navigation-component-margin-top')} 0;\n\n color: ${token('side-navigation-separator-color')};\n`\n\nexport interface SeparatorProps {\n className?: string\n}\n\nfunction Separator(props: SeparatorProps): JSX.Element {\n return <Line {...props} role=\"separator\" />\n}\n\nexport default Separator\n","import CloseButton from 'common/CloseButton'\nimport type { CloseButtonProps } from 'common/CloseButton'\nimport React, { ReactNode } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport { getToken as token } from 'theming'\n\nimport { Logo } from './Logo'\nimport { Menu } from './Menu'\nimport { Separator } from './Separator'\n\nconst Container = styled.aside`\n z-index: ${token('z-index-overlay')};\n /* this was needed to force the side-navigation-width inside flex containers */\n flex: 0 0 ${token('side-navigation-width')};\n width: ${token('side-navigation-width')};\n min-height: 100vh;\n padding-top: ${token('space-l')};\n padding-bottom: ${token('space-l')};\n overflow: auto;\n\n background-color: ${token('side-navigation-background-color')};\n\n ${Logo} + * {\n margin-top: ${token('space-xl')};\n }\n\n ${Menu} + ${Menu} {\n margin-top: ${token('space-m')};\n }\n`\n\nexport interface SideNavigationProps {\n className?: string\n children: ReactNode\n}\n\nfunction SideNavigation({ className, children }: SideNavigationProps): JSX.Element {\n return <Container className={className}>{children}</Container>\n}\n\nSideNavigation.Logo = Logo\nSideNavigation.Menu = Menu\nSideNavigation.Separator = Separator\nSideNavigation.CloseButton = styled(CloseButton)<CloseButtonProps>({})\n\nexport default SideNavigation\n","import type { PropsWithChildren } from 'react'\nimport React, { ReactNode, useEffect, useRef, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport styled from 'styled-components'\n\nimport transition from 'styles/transition'\nimport conditional, { whenProps } from 'tools/conditional'\nimport { getToken as token } from 'theming'\nimport DefaultCloseButton from 'common/CloseButton'\n\nexport interface DrawerProps {\n children?: ReactNode\n className?: string\n open: boolean\n onClose?: () => void\n onClickOutside?: () => void\n}\n\nconst StyledAside = styled.aside<Pick<DrawerProps, 'open'>>`\n position: fixed;\n top: 0;\n left: 0;\n\n z-index: ${token('z-index-overlay')};\n\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n\n background: ${token('modal-overlay-background')};\n\n visibility: ${conditional({\n visible: whenProps({ open: true }),\n hidden: whenProps({ open: false }),\n })};\n`\n\nconst CloseButton = styled(DefaultCloseButton)`\n position: absolute;\n top: 32px;\n left: -48px;\n\n background-color: ${token('color-neutral-lighter')};\n`\n\nconst StyledSection = styled.section<Pick<DrawerProps, 'open'>>`\n position: fixed;\n top: 0;\n right: 0;\n\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n width: 40vw;\n height: 100%;\n\n background-color: ${token('color-neutral-lightest')};\n border-radius: ${token('border-radius-s')};\n box-shadow: ${token('shadow-modal')};\n\n transform: ${conditional({\n 'translateX(100%)': whenProps({\n open: false,\n }),\n 'translateX(0px)': whenProps({\n open: true,\n }),\n })};\n\n ${transition({\n property: 'transform',\n duration: '200ms',\n })}\n`\n\nconst StyledHeader = styled.header`\n display: flex;\n align-items: center;\n justify-content: center;\n\n padding: ${token('space-xl')};\n\n color: ${token('color-neutral-darker')};\n font-weight: ${token('font-weight-bold')};\n font-size: ${token('font-size-2')};\n text-align: center;\n\n border-bottom-color: ${token('color-neutral-light')};\n border-bottom-width: 1px;\n border-bottom-style: solid;\n`\n\nconst StyledBody = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n\n padding: ${token('space-xl')};\n\n overflow: auto;\n`\n\nconst StyledFooter = styled.footer`\n display: flex;\n\n padding: ${token('space-xl')};\n\n border-top-color: ${token('color-neutral-light')};\n border-top-width: 1px;\n border-top-style: solid;\n`\n\nexport interface DrawerHeaderProps {\n className?: string\n}\n\nfunction DrawerHeader({\n children,\n className,\n ...others\n}: PropsWithChildren<DrawerHeaderProps>): JSX.Element {\n return (\n <StyledHeader {...others} className={className}>\n {children}\n </StyledHeader>\n )\n}\n\nexport interface DrawerBodyProps {\n className?: string\n}\n\nfunction DrawerBody({\n children,\n className,\n ...others\n}: PropsWithChildren<DrawerHeaderProps>): JSX.Element {\n return (\n <StyledBody {...others} className={className}>\n {children}\n </StyledBody>\n )\n}\n\nexport interface DrawerFooterProps {\n className?: string\n}\n\nfunction DrawerFooter({\n children,\n className,\n ...others\n}: PropsWithChildren<DrawerFooterProps>): JSX.Element {\n return (\n <StyledFooter {...others} className={className}>\n {children}\n </StyledFooter>\n )\n}\n\nfunction Drawer({\n className,\n children,\n open,\n onClose,\n onClickOutside,\n ...others\n}: DrawerProps): JSX.Element {\n const [invisible, setInvisible] = useState(!open)\n const ref = useRef<HTMLElement>(null)\n\n function handleTransitionEnd() {\n if (!open) {\n setInvisible(true)\n }\n }\n\n useEffect(() => {\n if (open) {\n setInvisible(false)\n }\n }, [open])\n\n useEffect(() => {\n const currentRef = ref.current\n\n if (currentRef && onClickOutside) {\n const handleClick = (event: MouseEvent) => {\n const hasClickedOutside = currentRef.isSameNode(event.target as Element)\n\n if (hasClickedOutside) onClickOutside()\n }\n\n currentRef.addEventListener('mouseup', handleClick)\n\n return () => currentRef.removeEventListener('mouseup', handleClick)\n }\n }, [onClickOutside])\n\n return ReactDOM.createPortal(\n <StyledAside open={!invisible} ref={ref}>\n <StyledSection\n {...others}\n className={className}\n open={open}\n onTransitionEnd={handleTransitionEnd}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"drawer\"\n >\n {Boolean(onClose) && <CloseButton onClick={onClose} aria-label=\"close\" />}\n {children}\n </StyledSection>\n </StyledAside>,\n document.body\n )\n}\n\nDrawer.Header = DrawerHeader\nDrawer.Body = DrawerBody\nDrawer.Footer = DrawerFooter\n\nexport default Drawer\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport React, { useCallback, useState, createContext, useContext } from 'react'\nimport type { PropsWithChildren } from 'react'\n\nimport { createSelectable } from 'hooks/useSelectable'\nimport type { Selectable, SelectableState, SelectableKeyType } from 'hooks/useSelectable'\nimport type { useSelectableProps } from 'hooks/useSelectable/useSelectable.types'\n\nexport type TableSelectableRow = Selectable & {\n value?: string | number | boolean\n}\n\nexport type TableSelectionSelectable<T extends Selectable = TableSelectableRow> = Omit<\n useSelectableProps<T>,\n 'onChange'\n> & {\n onChange: (selected: T[]) => void\n}\n\nexport type TableSelectionConfig<T extends Selectable = TableSelectableRow> =\n | boolean\n | Partial<TableSelectionSelectable<T>>\n\nexport interface TableSelectionCore<T extends Selectable = TableSelectableRow> {\n selected?: SelectableState<T>\n config: TableSelectionSelectable<T>\n allRowsAreSelected: boolean\n toggle: (key: T) => void\n toggleAll: () => void\n clear: () => void\n register: (key?: T) => void\n}\n\nfunction getSelectableProps<T extends Selectable = TableSelectableRow>(\n config?: TableSelectionConfig<T>\n): TableSelectionSelectable<T> {\n const defaults: TableSelectionSelectable<T> = {\n multiple: true,\n selected: [],\n onChange() {},\n adapters: {\n generic: {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n getKey: (row) => row.value as string,\n },\n },\n }\n\n if (!config || config === true) return defaults\n\n return {\n ...defaults,\n ...config,\n }\n}\n\nexport function useTableSelectionCore<T extends Selectable>(\n config?: TableSelectionConfig<T>\n): TableSelectionCore<T> {\n const { useSelectable } = createSelectable<T>()\n\n const [registered, setRegistered] = useState<T[]>([])\n\n const selectableProps = getSelectableProps(config)\n\n const { selected, toggle, select, unselect, clear } = useSelectable({\n ...selectableProps,\n onChange(value) {\n return selectableProps.onChange(value ? [...value.values()] : [])\n },\n })\n\n const allRowsAreSelected = selected.size === registered.length\n\n const getKey = useCallback(\n (row: T): SelectableKeyType => {\n const { adapters } = selectableProps\n\n const adapter = adapters?.[row._type || 'generic']\n const key = adapter?.getKey(row) ?? ''\n\n return key\n },\n [selectableProps]\n )\n\n const register = useCallback(\n (row?: T) => {\n if (!row) return\n\n const key = getKey(row)\n\n setRegistered((prev) => {\n const alreadyRegistered = prev.some((prevRow) => getKey(prevRow) === key)\n\n if (alreadyRegistered) {\n return prev\n }\n\n return [...prev, row]\n })\n },\n [getKey]\n )\n\n function toggleAll() {\n if (allRowsAreSelected) {\n registered.forEach((row) => {\n const key = getKey(row)\n\n if (!key) return\n\n unselect(key)\n })\n } else {\n registered.forEach((row) => select(row))\n }\n }\n\n return {\n allRowsAreSelected,\n config: selectableProps,\n selected,\n toggle,\n toggleAll,\n clear,\n register,\n }\n}\n\nexport const TableSelectionContext = createContext<TableSelectionCore>({\n selected: undefined,\n config: {} as TableSelectionSelectable,\n allRowsAreSelected: false,\n toggle() {},\n toggleAll() {},\n clear() {},\n register() {},\n})\n\ntype TableSelectionProviderProps = PropsWithChildren<{\n selection?: TableSelectionConfig\n}>\n\nexport function TableSelectionProvider({\n children,\n selection,\n}: TableSelectionProviderProps): JSX.Element {\n const selectionCore = useTableSelectionCore(selection)\n\n return (\n <TableSelectionContext.Provider value={selectionCore}>\n {children}\n </TableSelectionContext.Provider>\n )\n}\n\nexport function useTableSelection<\n T extends Selectable = TableSelectableRow\n>(): TableSelectionCore<T> {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return useContext(TableSelectionContext)\n}\n\ntype TableSelectionHook<T extends Selectable = TableSelectableRow> = {\n values: T[]\n clear: TableSelectionCore<T>['clear']\n}\n\nexport function useSelection<T extends Selectable = TableSelectableRow>(): TableSelectionHook<T> {\n const { selected, clear } = useTableSelection<T>()\n\n return {\n values: selected ? [...selected.values()] : [],\n clear,\n }\n}\n\nexport function isCellSelected<T extends Selectable>(\n value: T,\n selectedRows: SelectableState<T>,\n config: TableSelectionSelectable<T>\n): boolean {\n const { adapters } = config\n\n const adapter = adapters?.[value._type || 'generic']\n const key = adapter?.getKey(value)\n\n if (!key) return false\n\n return selectedRows.has(key)\n}\n\nexport function useIsCellSelected<T extends Selectable = TableSelectableRow>(value?: T): boolean {\n const { selected, config } = useTableSelection<T>()\n\n if (!value || !selected) return false\n\n return isCellSelected(value, selected, config)\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\nimport { Box as DefaultBox } from 'components/Layout'\nimport type { SortDirection } from './useSortBy.types'\n\nimport type { BoxProps } from 'components/Layout/Box'\n\ninterface TableSortHandleProps extends BoxProps {\n order?: SortDirection | null\n}\n\nconst Box = styled(DefaultBox)`\n display: inline-flex;\n flex-flow: row nowrap;\n align-items: center;\n\n margin-left: ${token('space-xs')};\n`\n\nfunction TableSortHandle({ order, ...rest }: TableSortHandleProps): JSX.Element | null {\n return (\n <Box {...rest} padding=\"none\">\n <Icon name={order != null ? `sort-${order}` : 'sort'} width=\"0.75em\" height=\"0.85em\" />\n </Box>\n )\n}\n\nexport default TableSortHandle\n","import React, { Children, Fragment, isValidElement, useEffect, useState } from 'react'\nimport styled, { css } from 'styled-components'\nimport type { ReactNode } from 'react'\nimport { isFunction } from '@loadsmart/utils-function'\n\nimport { getToken as token } from 'theming'\nimport { conditional, whenProps, prop } from 'tools/index'\nimport hoverable from 'styles/hoverable'\nimport focusable from 'styles/focusable'\nimport { Checkbox } from 'components/Checkbox'\nimport { Radio } from 'components/Radio'\nimport { Link } from 'components/Link'\nimport { Text } from 'components/Text'\nimport { Dropdown } from 'components/Dropdown'\nimport { Layout } from 'components/Layout'\nimport { Icon } from 'components/Icon'\nimport { Children as InternalButton } from 'components/Button/Button'\n\nimport {\n isCellSelected,\n TableSelectionProvider,\n useIsCellSelected,\n useSelection,\n useTableSelection,\n} from './Selection'\nimport TableSortHandle from './TableSortHandle'\n\nimport type {\n TableProps,\n TableSectionProps,\n TableRowProps,\n TableCellProps,\n TableCaptionProps,\n TableSelectionProps,\n SelectionCellProps,\n TablePickerItemProps,\n TablePickerProps,\n ExpandableTableRowProps,\n} from './Table.types'\n\nconst StyledTableBody = styled.tbody`\n /* placeholder */\n`\n\nconst StyledTableFoot = styled.tfoot`\n box-shadow: 0 -1px 0 ${token('color-neutral')};\n`\n\nconst StyledTableCaption = styled.caption<{ $position?: 'top' | 'bottom' }>`\n ${conditional({\n ['border-bottom']: whenProps([{ $position: ['top', undefined] }]),\n ['border-top']: whenProps({ $position: 'bottom' }),\n })}: solid 1px ${token('color-neutral-lighter')};\n\n ${conditional({\n ['margin-bottom']: whenProps([{ $position: ['top', undefined] }]),\n ['margin-top']: whenProps({ $position: 'bottom' }),\n })}: ${token('space-m')};\n padding: ${token('space-m')} ${token('space-s')};\n\n text-align: left;\n\n caption-side: ${prop('$position', 'top')};\n background-color: ${token('color-neutral-white')};\n`\n\nconst StyledCell = css<{ alignment?: string }>`\n color: ${token('color-neutral-darker')};\n text-align: ${prop('alignment', 'left')};\n vertical-align: middle;\n`\n\nconst StyledTableCell = styled.td<{ alignment?: string; format?: string }>`\n ${StyledCell}\n\n font-family: ${conditional({\n 'font-family-monospace': whenProps({ format: ['number', 'currency'] }),\n 'font-family-default': whenProps({ format: 'default' }),\n })};\n`\n\nconst StyledTableHeadCell = styled.th<{\n alignment?: string\n clickable: boolean\n}>`\n ${StyledCell}\n\n font-family: ${token('font-family-default')};\n\n font-weight: ${token('font-weight-bold')};\n\n text-transform: capitalize;\n\n cursor: ${conditional({\n pointer: whenProps({ clickable: true }),\n normal: whenProps({ clickable: false }),\n })};\n`\n\nconst StyledTableHead = styled.thead`\n border: 1px solid ${token('color-neutral-lighter')};\n\n ${StyledTableCell} {\n padding: ${token('space-s')};\n\n font-weight: ${token('font-weight-bold')};\n text-transform: capitalize;\n }\n`\n\nconst StyledTableRow = styled.tr<{ selected: boolean; isExpanded: boolean }>`\n ${StyledTableHead} > & {\n background-color: ${token('color-neutral-lightest')};\n }\n\n ${StyledTableFoot} > & {\n background-color: ${token('color-neutral-lightest')};\n }\n\n background-color: ${conditional({\n 'table-row-selected-color': whenProps({ selected: true }),\n 'color-neutral-white': whenProps({ selected: false }),\n })};\n ${hoverable`\n background-color: ${conditional({\n 'table-row-selected-color': whenProps({ selected: true }),\n })} !important;\n `}\n\n border-color: ${token('color-neutral-lighter')};\n border-width: 1px;\n border-top-style: solid;\n border-right-style: solid;\n border-left-style: solid;\n border-bottom-style: ${conditional({\n solid: whenProps({ isExpanded: false }),\n hidden: whenProps({ isExpanded: true }),\n })};\n\n box-shadow: ${conditional({\n '0px 3px 3px 0px #C1CED9': whenProps({ isExpanded: true }),\n none: whenProps({ isExpanded: false }),\n })};\n\n ${StyledTableBody} > & {\n ${hoverable`\n background-color: ${token('color-neutral-lighter')};\n `}\n\n ${focusable`\n box-shadow: inset ${token('shadow-glow-primary')};\n `}\n }\n`\n\nconst StyledExpandableContentRow = styled.tr`\n border-color: ${token('color-neutral-lighter')};\n border-width: 1px;\n border-top-style: hidden;\n border-right-style: solid;\n border-left-style: solid;\n border-bottom-style: solid;\n`\n\nconst StyledTable = styled.table<{ scale?: string }>`\n width: 100%;\n\n white-space: nowrap;\n\n background-color: ${token('color-neutral-lightest')};\n\n border-collapse: collapse;\n\n ${StyledTableBody} ${StyledTableRow} {\n height: ${conditional({\n '24px': whenProps({ scale: 'small' }),\n '48px': whenProps({ scale: 'default' }),\n '80px': whenProps({ scale: 'large' }),\n })};\n }\n\n ${StyledTableHeadCell},\n ${StyledTableCell} {\n padding: ${conditional({\n 'space-xs': whenProps({ scale: 'small' }),\n 'space-s': whenProps({ scale: ['default', 'large'] }),\n })};\n\n font-size: ${conditional({\n 'font-size-5': whenProps({ scale: 'small' }),\n 'font-size-4': whenProps({ scale: ['default', 'large'] }),\n })};\n }\n`\n\nconst RotatableIcon = styled(Icon)<{ $rotate: boolean }>`\n ${conditional({\n 'transform: rotate(90deg);': whenProps({ $rotate: true }),\n })}\n`\n\nfunction Table<T>({\n children,\n selection,\n scale = 'default',\n ...others\n}: TableProps<T>): JSX.Element {\n return (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n <TableSelectionProvider selection={selection}>\n <StyledTable scale={scale} {...others}>\n {children}\n </StyledTable>\n </TableSelectionProvider>\n )\n}\n\nconst TableCaptionInner = styled.div<{ $height?: number }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: ${prop('$height', 36)}px;\n`\n\nfunction TableCaption({ children, position, height }: TableCaptionProps): JSX.Element {\n return (\n <StyledTableCaption $position={position}>\n <TableCaptionInner $height={height}>{children}</TableCaptionInner>\n </StyledTableCaption>\n )\n}\n\nfunction TableHead({ children, ...others }: TableSectionProps): JSX.Element {\n return <StyledTableHead {...others}>{children}</StyledTableHead>\n}\n\nfunction TableBody({ children, ...others }: TableSectionProps): JSX.Element {\n return <StyledTableBody {...others}>{children}</StyledTableBody>\n}\n\nfunction TableCell({\n children,\n alignment = 'left',\n format = 'default',\n ...others\n}: TableCellProps): JSX.Element {\n return (\n <StyledTableCell alignment={alignment} format={format} {...others}>\n {children}\n </StyledTableCell>\n )\n}\n\nfunction SelectionCell<T>({ value, ...props }: SelectionCellProps<T>): JSX.Element {\n const { toggle, register, config } = useTableSelection()\n\n const selected = useIsCellSelected(value)\n\n const action = () => toggle(value as T)\n\n useEffect(() => {\n register(value)\n }, [value, register])\n\n if (props.children) {\n return (\n <TableCell>\n {props.children({\n selected,\n toggle: action,\n })}\n </TableCell>\n )\n }\n\n const Input = config.multiple ? Checkbox : Radio\n\n return (\n <TableCell {...props}>\n {value ? <Input checked={selected} scale=\"small\" onChange={action} /> : null}\n </TableCell>\n )\n}\n\nfunction SelectionHeadCell<T>(props: SelectionCellProps<T>): JSX.Element {\n const { allRowsAreSelected, toggleAll, config } = useTableSelection()\n\n const selected = allRowsAreSelected\n const action = () => toggleAll()\n\n if (props.children) {\n return <TableHeadCell {...props}>{props.children({ selected, toggle: action })}</TableHeadCell>\n }\n\n const Input = config.multiple ? Checkbox : Fragment\n\n return (\n <TableHeadCell {...props}>\n <Input checked={selected} scale=\"small\" onChange={action} />\n </TableHeadCell>\n )\n}\n\nfunction TableRow({ children, ...others }: TableRowProps): JSX.Element {\n const selected = useIsRowSelected(children)\n\n return (\n <StyledTableRow {...others} selected={selected} isExpanded={false}>\n {children}\n </StyledTableRow>\n )\n}\n\nfunction ExpandableTableRow({\n expandableContent,\n expanded,\n leading: propsLeading,\n children,\n onExpandedChange,\n initialExpanded = false,\n ...others\n}: ExpandableTableRowProps): JSX.Element {\n const [openState, setOpenState] = useState(initialExpanded)\n\n const selected = useIsRowSelected(children)\n\n const open = expanded ?? openState\n const isExpanded = Boolean(open && expandableContent)\n const colSpan = Array.isArray(children) ? children.length + 1 : 1\n\n let leading: ReactNode = <RotatableIcon name=\"caret-right\" $rotate={open} />\n if (propsLeading) {\n leading = isFunction(propsLeading) ? propsLeading(open) : propsLeading\n }\n\n function toggle() {\n if (!expandableContent) return\n\n onExpandedChange?.(!open)\n setOpenState(!open)\n }\n\n return (\n <>\n <StyledTableRow {...others} onClick={toggle} isExpanded={isExpanded} selected={selected}>\n <TableCell>{expandableContent && leading}</TableCell>\n {children}\n </StyledTableRow>\n {isExpanded && (\n <StyledExpandableContentRow>\n <StyledTableCell colSpan={colSpan}>{expandableContent}</StyledTableCell>\n </StyledExpandableContentRow>\n )}\n </>\n )\n}\n\nfunction TableHeadCell({\n alignment = 'left',\n children,\n onClick,\n ...others\n}: TableCellProps): JSX.Element {\n return (\n <StyledTableHeadCell\n clickable={onClick != null}\n alignment={alignment}\n onClick={onClick}\n {...others}\n >\n <Layout.Group space=\"xs\" align=\"center\">\n {children}\n </Layout.Group>\n </StyledTableHeadCell>\n )\n}\n\nconst ActionsWrapper = styled.div`\n display: flex;\n gap: ${token('space-s')};\n margin-left: auto;\n`\n\nfunction TableSelectionActions({ buttons, children, ...others }: TableSelectionProps): JSX.Element {\n const { values, clear } = useSelection()\n\n return (\n <ActionsWrapper {...others}>\n {values.length > 0 ? (\n <>\n {buttons.map((Action, i) => (\n <Action key={i} values={values} />\n ))}\n <Link\n onClick={(e) => {\n e.preventDefault()\n clear()\n }}\n >\n <Text variant=\"link\">CANCEL</Text>\n </Link>\n </>\n ) : (\n children\n )}\n </ActionsWrapper>\n )\n}\n\nconst StyledPickerTrigger = styled(Dropdown.Trigger.Button)`\n padding: 0;\n\n ${InternalButton} {\n margin: ${token('space-2xs')};\n }\n`\n\nfunction TablePickerItem<T>({\n option,\n checked,\n children,\n ...props\n}: TablePickerItemProps<T>): JSX.Element {\n return (\n <Dropdown.Item\n leading={\n checked ? (\n <Icon name=\"check\" size=\"16\" color=\"neutral-darker\" />\n ) : (\n <Layout.Box padding=\"s\" />\n )\n }\n role=\"option\"\n aria-selected={checked ? 'true' : 'false'}\n {...props}\n >\n {children || (option && (option.option || option.title || option.key)) || 'Column'}\n </Dropdown.Item>\n )\n}\n\nconst TriggerIcon = styled(Icon).attrs({\n name: 'dots-horizontal',\n size: '12',\n color: 'neutral-darker',\n})`\n transform: rotate(90deg);\n`\n\nfunction TablePicker<T>({\n value,\n onChange,\n options,\n align,\n children,\n trigger: propsTrigger,\n ...props\n}: TablePickerProps<T>): JSX.Element {\n return (\n <Dropdown align={align}>\n <StyledPickerTrigger trailing={null} scale=\"small\" {...props}>\n {propsTrigger !== undefined ? (\n ({ expanded }) => (isFunction(propsTrigger) ? propsTrigger(expanded) : propsTrigger)\n ) : (\n <TriggerIcon />\n )}\n </StyledPickerTrigger>\n <Dropdown.Menu role=\"listbox\">\n {children ||\n options?.map((option, i) => (\n <TablePickerItem\n key={i}\n option={option}\n checked={option.key === value?.key}\n onClick={() => onChange?.(option)}\n />\n ))}\n </Dropdown.Menu>\n </Dropdown>\n )\n}\n\nfunction useIsRowSelected(children: ReactNode): boolean {\n const { selected, config } = useTableSelection()\n\n if (!selected) return false\n\n const arrChildren = Children.toArray(children)\n\n const selectionCellChild = arrChildren.find((child) => {\n return isValidElement(child) && child.type === SelectionCell\n })\n\n if (!selectionCellChild) return false\n\n const { value } = (selectionCellChild as React.ReactElement).props as SelectionCellProps\n\n if (!value) return false\n\n return isCellSelected(value, selected, config)\n}\n\nTable.Head = TableHead\nTable.Body = TableBody\nTable.Row = TableRow\nTable.Cell = TableCell\nTable.HeadCell = TableHeadCell\nTable.Foot = StyledTableFoot\nTable.Caption = TableCaption\nTable.Selection = {\n Actions: TableSelectionActions,\n Cell: SelectionCell,\n HeadCell: SelectionHeadCell,\n}\nTable.ExpandableRow = ExpandableTableRow\nTable.SortHandle = TableSortHandle\nTablePicker.Item = TablePickerItem\nTable.Picker = TablePicker\n\nexport { useSelection }\n\nexport default Table\n","import React from 'react'\nimport type { PropsWithChildren } from 'react'\n\nimport { BaseLink } from 'components/Link'\nimport styled from 'styled-components'\n\nexport type LogoProps = PropsWithChildren<{\n url: string\n className?: string\n}>\n\nfunction Logo({ url, className, children }: LogoProps): JSX.Element {\n return (\n <BaseLink className={className} href={url}>\n {children}\n </BaseLink>\n )\n}\n\nexport default styled(Logo)<LogoProps>({})\n","import React from 'react'\nimport type { PropsWithChildren, ReactNode, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport transition from 'styles/transition'\nimport { Dropdown, DropdownMenu, DropdownMenuItem, DropdownTrigger } from 'components/Dropdown'\nimport { BaseLink } from 'components/Link'\nimport useID from 'hooks/useID'\nimport ellipsizable from 'styles/ellipsizable'\nimport typography from 'styles/typography'\nimport { Popover } from 'components/Popover'\n\nexport const MenuDropdown = styled(Dropdown)({})\n\nexport const MenuDropdownSeparator = styled.hr`\n margin: ${token('space-s')} ${token('space-m')};\n\n color: ${token('top-navigation-dropdown-separator-color')};\n`\n\nconst MenuDropdownTrigger = styled(DropdownTrigger.Handle)`\n color: ${token('top-navigation-dropdown-trigger-color')};\n`\n\nexport const MenuDropdownLabel = styled.label`\n ${transition()}\n\n align-items: center;\n display: flex;\n\n ${typography('body-bold', { color: 'top-navigation-item-color' })}\n\n cursor: pointer;\n\n ${focusable`\n color: ${token('top-navigation-item-color--hover')};\n `}\n`\n\nconst Ellipsizable = styled.span<{ $max: number }>`\n ${ellipsizable()}\n\n max-width: ${(props) => props.$max}px;\n`\n\nconst IconWrapper = styled.div`\n width: ${token('space-m')};\n`\n\nconst MenuDropdownSubItemLink = styled(BaseLink)`\n align-items: stretch;\n ${typography('body', { color: 'top-navigation-dropdown-subitem-color' })}\n\n ${hoverable`\n text-decoration: none;\n font-weight: inherit;\n `}\n\n ${focusable`\n > * {\n background-color: ${token('color-neutral-lighter')}\n }\n `}\n`\n\ntype MenuDropdownSubItemProps = HTMLAttributes<HTMLElement> & {\n label: string\n url?: string\n icon?: ReactNode\n separator?: boolean\n}\n\nexport function MenuDropdownSubItem({\n icon,\n label,\n url,\n ...rest\n}: MenuDropdownSubItemProps): JSX.Element {\n return url ? (\n <MenuDropdownSubItemLink {...rest} href={url}>\n <DropdownMenuItem tabIndex={-1} leading={<IconWrapper>{icon}</IconWrapper>}>\n {label}\n </DropdownMenuItem>\n </MenuDropdownSubItemLink>\n ) : (\n <DropdownMenuItem leading={<IconWrapper>{icon}</IconWrapper>} {...rest}>\n {label}\n </DropdownMenuItem>\n )\n}\n\nexport type MenuItemDropdownProps = PropsWithChildren<{\n label: string\n}>\n\nfunction MenuItemDropdown(props: MenuItemDropdownProps): JSX.Element {\n const { label, children, ...rest } = props\n const labelId = useID()\n\n return (\n <MenuDropdown align=\"end\" key={label}>\n <Popover.Reference>\n <MenuDropdownLabel>\n <Ellipsizable $max={120} id={labelId}>\n {label}\n </Ellipsizable>\n <MenuDropdownTrigger {...rest} tabIndex={0} aria-labelledby={labelId} />\n </MenuDropdownLabel>\n </Popover.Reference>\n <DropdownMenu>{children}</DropdownMenu>\n </MenuDropdown>\n )\n}\n\nexport { MenuItemDropdown }\n","import React from 'react'\nimport type { ReactNode } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport { BaseLink } from 'components/Link'\nimport conditional, { whenProps } from 'tools/conditional'\nimport typography from 'styles/typography'\n\nconst MenuLink = styled(BaseLink)<{ hasIcon?: boolean }>`\n ${typography('body-bold')}\n\n color: ${conditional({\n 'top-navigation-item-icon-color': whenProps({ hasIcon: true }),\n 'top-navigation-item-color': whenProps({ hasIcon: false }),\n })};\n\n ${hoverable`\n text-decoration: none;\n color: ${token('top-navigation-item-color--hover')};\n `}\n\n ${focusable`\n color: ${token('top-navigation-item-color--hover')};\n `}\n`\n\ntype MenuItemIconProps = {\n label: string\n icon?: ReactNode\n url?: string\n}\n\nexport function MenuItemIcon({ url, icon, label, ...rest }: MenuItemIconProps): JSX.Element {\n if (icon) {\n return (\n <MenuLink {...rest} href={url} hasIcon title={label}>\n {icon}\n </MenuLink>\n )\n }\n\n return (\n <MenuLink {...rest} href={url}>\n {label}\n </MenuLink>\n )\n}\n","import React from 'react'\nimport type { PropsWithChildren, ReactNode, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport {\n MenuItemDropdown,\n MenuDropdown,\n MenuDropdownSubItem,\n MenuDropdownSeparator,\n} from './MenuItemDropdown'\nimport { MenuItemIcon } from './MenuItemIcon'\nimport conditional, { whenProps } from 'tools/conditional'\n\ntype MenuItemProps = HTMLAttributes<HTMLElement> &\n PropsWithChildren<{\n label: string\n icon?: ReactNode\n url?: string\n }>\n\nexport type MenuProps = PropsWithChildren<{\n align?: 'left' | 'right'\n}>\n\nconst MenuContainer = styled.nav<{ $align: MenuProps['align'] }>`\n ${conditional({\n 'margin-left: auto;': whenProps({ $align: 'right' }),\n })}\n\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${token('space-m')};\n }\n\n & > * + ${MenuDropdown} {\n margin-left: ${token('space-xl')};\n }\n`\n\nfunction MenuItem(props: MenuItemProps): JSX.Element {\n if (props.children) {\n return <MenuItemDropdown {...props} />\n }\n\n return <MenuItemIcon {...props} />\n}\n\nfunction Menu(props: MenuProps): JSX.Element {\n const { align = 'left' } = props\n\n return <MenuContainer $align={align}>{props.children}</MenuContainer>\n}\n\nMenu.Item = MenuItem\nMenu.SubItem = MenuDropdownSubItem\nMenu.Separator = MenuDropdownSeparator\n\nexport default Menu\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\n\nexport type OpenSideNavButtonProps = {\n className?: string\n onClick: () => void\n}\n\nconst Container = styled.button`\n margin-right: ${token('space-2xl')};\n\n background: none;\n border: none;\n cursor: pointer;\n`\n\nfunction OpenSideNavButton({ className, onClick }: OpenSideNavButtonProps): JSX.Element {\n return (\n <Container className={className} onClick={onClick}>\n <Icon name=\"burguer-menu\" size={24} data-testid=\"toggle-sidenav\" />\n </Container>\n )\n}\n\nexport default styled(OpenSideNavButton)<OpenSideNavButtonProps>({})\n","import React from 'react'\nimport type { ReactNode } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Logo } from './Logo'\nimport { Menu } from './Menu'\nimport { MenuDropdownLabel } from './Menu/MenuItemDropdown'\nimport { OpenSideNavButton } from './OpenSideNavButton'\n\n/* We need to remove the 8px padding-right that DropdownTrigger adds (because of\n BaseStyledButton), in order to keep it always 40px to the right, but only when\n it's the last child. DropdownTigger isn't a StyledComponent so we need to use\n MenuDropdownLabel here since it's the one that wraps DropdownTigger */\nconst removeRightPadding = css`\n > :last-child ${MenuDropdownLabel} {\n margin-right: -${token('space-m')};\n }\n`\n\nconst Container = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n height: ${token('top-navigation-height')};\n padding: 0 ${token('space-2xl')};\n\n background-color: ${token('top-navigation-background-color')};\n border-bottom: solid 1px ${token('top-navigation-border-color')};\n\n ${removeRightPadding}\n`\n\nexport interface TopNavigationProps {\n children?: ReactNode\n}\n\nfunction TopNavigation({ children }: TopNavigationProps): JSX.Element {\n return <Container>{children}</Container>\n}\n\nTopNavigation.Logo = Logo\nTopNavigation.Menu = Menu\nTopNavigation.OpenSideNavButton = OpenSideNavButton\n\nexport default TopNavigation\n","import React, { FC, Fragment } from 'react'\nimport styled from 'styled-components'\n\nimport type { EmptyStateWithIconProps } from './EmptyState.types'\n\nimport { Stack, Group } from 'components/Layout'\nimport Text from 'components/Text/Text'\nimport Button from 'components/Button/Button'\n\nconst VerticalWrapper = styled(Stack)`\n text-align: center;\n`\n\nconst EmptyStateWithIcon: FC<EmptyStateWithIconProps> = ({\n variant = 'card',\n icon,\n title,\n action,\n children,\n ...props\n}: EmptyStateWithIconProps) => {\n const isHorizontal = variant === 'horizontal-card'\n const Wrapper = isHorizontal ? Group : VerticalWrapper\n\n return (\n <Wrapper {...props} space={isHorizontal ? 's' : 'xs'} align=\"center\" justify=\"center\">\n {children || (\n <Fragment>\n {icon}\n <Text variant=\"caption-bold\">{title}</Text>\n {action && (\n <Button variant=\"primary\" scale=\"small\" {...action}>\n {action.label}\n </Button>\n )}\n </Fragment>\n )}\n </Wrapper>\n )\n}\n\nexport default EmptyStateWithIcon\n","import React, { FC } from 'react'\nimport styled from 'styled-components'\n\nimport conditional, { whenProps } from 'tools/conditional'\n\nimport type { IllustrationProps } from './EmptyState.types'\n\nconst Wrapper = styled.div<Pick<IllustrationProps, 'scale'>>`\n & > img:first-of-type,\n SVG:first-of-type {\n height: ${conditional({\n '240px': whenProps({ scale: 'large' }),\n '120px': whenProps({ scale: 'default' }),\n })};\n object-fit: cover;\n }\n`\n\nexport const Illustration: FC<IllustrationProps> = ({\n illustration,\n scale,\n ...props\n}: IllustrationProps) => (\n <Wrapper scale={scale} {...props}>\n {typeof illustration === 'string' ? <img src={illustration} alt=\"\" /> : illustration}\n </Wrapper>\n)\n\nexport default Illustration\n","import React, { FC, Fragment } from 'react'\nimport styled from 'styled-components'\n\nimport { Stack } from 'components/Layout'\nimport Text from 'components/Text/Text'\nimport Button from 'components/Button/Button'\n\nimport type { EmptyStateWithIllustrationProps } from './EmptyState.types'\nimport Illustration from './Illustration'\n\nconst Wrapper = styled(Stack)`\n max-width: 320px;\n\n text-align: center;\n`\n\nconst EmptyStateWithIllustration: FC<EmptyStateWithIllustrationProps> = ({\n variant = 'page',\n illustration,\n title,\n description,\n action,\n children,\n ...props\n}: EmptyStateWithIllustrationProps) => {\n const isPageVariant = variant === 'page'\n\n return (\n <Wrapper {...props} align=\"center\" justify=\"center\" space=\"m\">\n {children || (\n <Fragment>\n {illustration && (\n <Illustration illustration={illustration} scale={isPageVariant ? 'large' : 'default'} />\n )}\n {(title || description) && (\n <Stack space=\"xs\">\n {title && (\n <Text\n variant={isPageVariant ? 'heading-sm-bold' : 'body-bold'}\n color={isPageVariant ? 'color-neutral-darkest' : 'color-neutral-darker'}\n >\n {title}\n </Text>\n )}\n {description && (\n <Text\n data-testid=\"empty-state-description\"\n variant={isPageVariant ? 'body' : 'caption'}\n color=\"color-neutral-darkest\"\n >\n {description}\n </Text>\n )}\n </Stack>\n )}\n {action && (\n <Button\n className=\"empty-state-action\"\n variant=\"primary\"\n scale={isPageVariant ? 'default' : 'small'}\n {...action}\n >\n {action.label}\n </Button>\n )}\n </Fragment>\n )}\n </Wrapper>\n )\n}\n\nexport default EmptyStateWithIllustration\n","import React from 'react'\n\nimport type {\n EmptyStateProps,\n EmptyStateWithIconProps,\n EmptyStateWithIllustrationProps,\n} from './EmptyState.types'\n\nimport EmptyStateWithIcon from './EmptyStateWithIcon'\nimport EmptyStateWithIllustration from './EmptyStateWithIllustration'\nimport Illustration from './Illustration'\n\nconst EmptyState = (props: EmptyStateProps): JSX.Element => {\n if (['card', 'horizontal-card'].includes(props.variant)) {\n return <EmptyStateWithIcon {...(props as EmptyStateWithIconProps)} />\n }\n return <EmptyStateWithIllustration {...(props as EmptyStateWithIllustrationProps)} />\n}\n\nEmptyState.Illustration = Illustration\n\nexport default EmptyState\n","export function aliased<T>(aliasMap: Record<number | string, T>, alias: number | string): T {\n return aliasMap[String(alias).toLowerCase()]\n}\n\nexport const MONTH_BY_ALIAS = {\n 0: 'january',\n jan: 'january',\n january: 'january',\n\n 1: 'february',\n feb: 'february',\n february: 'february',\n\n 2: 'march',\n mar: 'march',\n march: 'march',\n\n 3: 'april',\n apr: 'april',\n april: 'april',\n\n 4: 'may',\n may: 'may',\n\n 5: 'june',\n jun: 'june',\n june: 'june',\n\n 6: 'july',\n jul: 'july',\n july: 'july',\n\n 7: 'august',\n aug: 'august',\n august: 'august',\n\n 8: 'september',\n sep: 'september',\n september: 'september',\n\n 9: 'october',\n oct: 'october',\n october: 'october',\n\n 10: 'november',\n nov: 'november',\n november: 'november',\n\n 11: 'december',\n dec: 'december',\n december: 'december',\n}\n\nexport type CalendarMonthAlias = keyof typeof MONTH_BY_ALIAS\n\nexport type CalendarMonth = {\n name: string\n /**\n * Integer value representing the month, beginning with 0 for January to 11 for December.\n * Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date\n */\n index: number\n}\n\nexport const MONTH_BY_NAME: Record<string, CalendarMonth> = {\n january: {\n name: 'January',\n index: 0,\n },\n february: {\n name: 'February',\n index: 1,\n },\n march: {\n name: 'March',\n index: 2,\n },\n april: {\n name: 'April',\n index: 3,\n },\n may: {\n name: 'May',\n index: 4,\n },\n june: {\n name: 'June',\n index: 5,\n },\n july: {\n name: 'July',\n index: 6,\n },\n august: {\n name: 'August',\n index: 7,\n },\n september: {\n name: 'September',\n index: 8,\n },\n october: {\n name: 'October',\n index: 9,\n },\n november: {\n name: 'November',\n index: 10,\n },\n december: {\n name: 'December',\n index: 11,\n },\n}\n\nfunction getMonthByAlias(alias: CalendarMonthAlias): CalendarMonth {\n alias = aliased(MONTH_BY_ALIAS, alias) as CalendarMonthAlias\n\n return MONTH_BY_NAME[alias]\n}\n\nfunction getAllMonths() {\n return (Object.keys(MONTH_BY_NAME) as CalendarMonthAlias[]).map((alias) => {\n return getMonthByAlias(alias)\n })\n}\n\nfunction MonthHelper(alias: CalendarMonthAlias): {\n get(): CalendarMonth\n format(representation?: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow'): string\n is(other: CalendarMonthAlias): boolean\n} {\n const month = getMonthByAlias(alias)\n\n return {\n get() {\n return month\n },\n /**\n * Follows same values available in https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat.\n * * \"numeric\" (e.g., 3)\n * * \"2-digit\" (e.g., 03)\n * * \"long\" (e.g., March)\n * * \"short\" (e.g., Mar)\n * * \"narrow\" (e.g., M)\n */\n format(representation: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow' = 'long') {\n switch (representation) {\n case 'numeric':\n return String(month.index + 1)\n case '2-digit':\n return String(month.index + 1).padStart(2, '0')\n case 'short':\n return month.name.slice(0, 3)\n case 'narrow':\n return month.name.slice(0, 1)\n default:\n return month.name\n }\n },\n is(other: CalendarMonthAlias) {\n return (\n getMonthByAlias(other) != null &&\n aliased(MONTH_BY_ALIAS, alias) === aliased(MONTH_BY_ALIAS, other)\n )\n },\n }\n}\n\nMonthHelper.getAll = getAllMonths\n\nexport default MonthHelper\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { BaseButton } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport { Icon } from 'components/Icon'\nimport conditional, { whenProps } from 'tools/conditional'\nimport focusable from 'styles/focusable'\nimport disableable from 'styles/disableable'\nimport typography from 'styles/typography'\n\nimport type { ButtonProps } from 'components/Button'\n\nconst Button = styled(BaseButton)`\n user-select: none;\n\n ${typography(\n conditional({\n 'body-bold': whenProps({ 'aria-expanded': true }),\n body: whenProps({ 'aria-expanded': false }),\n })\n )};\n border-color: transparent;\n background-color: transparent;\n\n color: ${token('color-neutral-dark')};\n\n ${focusable`\n box-shadow: ${token('button-primary-outline')};\n `}\n\n ${disableable`\n pointer-events: none;\n opacity: 1;\n `}\n`\n\nconst Caret = styled(Icon)<{ $rotate: boolean }>`\n ${conditional({\n 'transform: rotate(180deg);': whenProps({ $rotate: true }),\n })}\n`\n\nfunction PickerModeToggle(\n props: Omit<ButtonProps & { expanded: boolean }, 'trailing'>\n): JSX.Element {\n const { expanded, disabled, ...others } = props\n\n return (\n <Button\n type=\"button\"\n {...others}\n aria-haspopup=\"true\"\n aria-expanded={expanded}\n disabled={disabled}\n trailing={!disabled && <Caret name=\"chevron-down\" size={16} $rotate={expanded} />}\n />\n )\n}\n\nexport default PickerModeToggle\n","import { isFunction } from '@loadsmart/utils-function'\nimport isEmpty from 'utils/toolset/isEmpty'\n\nexport type DateHelperOptions = {\n normalize?: boolean\n}\n\nexport const DEFAULT_OPTIONS: DateHelperOptions = {\n normalize: true,\n}\n\nexport type InputDate = string | number | Date\n\ntype Unit = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'millisecond'\ntype Operator = '>=' | '>' | '=' | '<' | '<='\n\nexport type DateConstraint =\n | InputDate\n | [InputDate, InputDate]\n | [null, InputDate]\n | [InputDate, null]\n\nexport type FunctionConstraint = (day: CalendarDate) => boolean\n\nexport type CalendarConstraint = DateConstraint | FunctionConstraint\n\nexport interface CalendarDate {\n /**\n * Get `Date` object representing this date.\n * @returns {Date}\n */\n get(): Date\n /**\n * Get the year using Universal Coordinated Time (UTC).\n * @returns {number}\n */\n getYear(): number\n /**\n * Gets the month using Universal Coordinated Time (UTC).\n * @returns {number}\n */\n getMonth(): number\n /**\n * Get the day-of-the-month, using Universal Coordinated Time (UTC).\n * @returns {number}\n */\n getDate(): number\n /**\n * Get the time value in milliseconds.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getTime(): number\n /**\n * Get the day of the week.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getWeekday(): number\n /**\n * Get the hours value.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getHours(): number\n /**\n * Get the minutes value.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getMinutes(): number\n /**\n * Get the seconds value.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getSeconds(): number\n /**\n * Get the milliseconds value.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @returns {number}\n */\n getMilliseconds(): number\n /**\n * Check if the current date matches **at least one** of the provided constraints.\n *\n * [!] Be aware that all dates in this comparison will be normalized to 12:00:00 (UTC).\n *\n * @param {...CalendarConstraint[]} constraintsArg\n * @returns {boolean}\n */\n matches(...constraints: CalendarConstraint[]): boolean\n /**\n * Set the given `value` to the `unit` property of this instance.\n * This function mutates the internal date instance.\n * @param {Unit} unit\n * @param {number} value\n * @returns {CalendarDate}\n */\n set(unit: Unit, value: number): CalendarDate\n /**\n * Return a copy of this instance, adding the given `value` to the `unit` property.\n * @param {Unit} unit\n * @param {number} value\n * @returns {CalendarDate}\n */\n add(unit: Unit, value: number): CalendarDate\n /**\n * Return a copy of this instance, subtracting the given `value` from the `unit` property.\n * @param {Unit} unit\n * @param {number} value\n * @returns {CalendarDate}\n */\n subtract(unit: Unit, value: number): CalendarDate\n /**\n * Compare this date with the given `other`.\n *\n * [!] Be aware that it might be normalized to 12:00:00 (UTC), if you did not call the helper with\n * `options.normalize: false`.\n *\n * @param {Operator} operator - type of comparison to be performed.\n * @param {CalendarDate} other - Other `CalendarDate` to compare with.\n * @param {Unit} [precision] - notice that the precision increases with the evaluated period, so year < month < day < hour < minute < second < millisecond. Default is 'day'.\n * @return {boolean} comparison result\n */\n is(operator: Operator, other: CalendarDate, precision?: string): boolean\n /**\n * Return this date as a string value in ISO format.\n * @returns {string}\n */\n toString(): string\n}\n\nexport type CalendarDateRange = [CalendarDate | null, CalendarDate | null]\n\n/**\n * Ideally, follow the date/time string formats:\n * * `YYYY-MM-DD`\n * * `YYYY-MM-DDTHH:mm:ss.sssZ`\n * * `YYYY-MM-DDTHH:mm:ss.sss+00:00`\n *\n * `dateArg` is expected to have timezone information or to be UTC.\n *\n * By default, we normalize the input date to 12:00:00 (UTC); this simplifies comparison of dates; be mindful\n * of this when using this helper for time relate logic.\n * You can disable this behavior by passing `options.normalize: false`.\n *\n * @param {InputDate} [dateArg]\n * @return {CalendarDate}\n */\nfunction DateHelper(dateArg?: InputDate, optionsArg = DEFAULT_OPTIONS): CalendarDate {\n const options = { ...DEFAULT_OPTIONS, ...optionsArg }\n const utcDate = (function normalizeToUTC() {\n let date = new Date()\n\n if (dateArg != null) {\n date = new Date(dateArg)\n }\n\n // create a date with local timezone based on the UTC input date\n const utcDate = new Date(\n Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n options.normalize ? 12 : date.getUTCHours(),\n options.normalize ? 0 : date.getUTCMinutes(),\n options.normalize ? 0 : date.getUTCSeconds(),\n options.normalize ? 0 : date.getUTCMilliseconds()\n )\n )\n\n return utcDate\n })()\n\n return {\n get() {\n return utcDate\n },\n getYear() {\n return utcDate.getUTCFullYear()\n },\n getMonth() {\n return utcDate.getUTCMonth()\n },\n getDate() {\n return utcDate.getUTCDate()\n },\n getTime() {\n return utcDate.getTime()\n },\n getWeekday() {\n return utcDate.getUTCDay()\n },\n getHours() {\n return utcDate.getUTCHours()\n },\n getMinutes() {\n return utcDate.getUTCMinutes()\n },\n getSeconds() {\n return utcDate.getUTCSeconds()\n },\n getMilliseconds() {\n return utcDate.getUTCMilliseconds()\n },\n matches(...constraints: CalendarConstraint[]): boolean {\n if (isEmpty(constraints)) {\n return false\n }\n\n const constraintEvaluators = constraints.map(getConstraintEvaluator)\n const date = DateHelper(utcDate)\n\n return constraintEvaluators.some((evaluator) => {\n return evaluator(date)\n })\n },\n add(unit: Unit, value: number) {\n return add(utcDate, unit, value)\n },\n subtract(unit: Unit, value: number) {\n return add(utcDate, unit, -1 * value)\n },\n set(unit: Unit, value: number) {\n const newValue = {\n year: utcDate.getUTCFullYear(),\n month: utcDate.getUTCMonth(),\n day: utcDate.getUTCDate(),\n hour: utcDate.getUTCHours(),\n minute: utcDate.getUTCMinutes(),\n second: utcDate.getUTCSeconds(),\n millisecond: utcDate.getUTCMilliseconds(),\n [unit]: value,\n }\n\n utcDate.setUTCFullYear(newValue.year)\n utcDate.setUTCMonth(newValue.month)\n utcDate.setUTCDate(newValue.day)\n utcDate.setUTCHours(newValue.hour)\n utcDate.setUTCMinutes(newValue.minute)\n utcDate.setUTCSeconds(newValue.second)\n utcDate.setUTCMilliseconds(newValue.millisecond)\n\n return this\n },\n is(operator: Operator, other: CalendarDate, precision?: Unit): boolean {\n function compare(a: number, b: number) {\n let result\n\n switch (operator) {\n case '>=':\n result = a >= b\n break\n case '>':\n result = a > b\n break\n case '<':\n result = a < b\n break\n case '<=':\n result = a <= b\n break\n default:\n result = a === b\n break\n }\n\n return result\n }\n\n return compare(\n getComparableDate(utcDate, precision),\n getComparableDate(other.get(), precision)\n )\n },\n toString(): string {\n return utcDate.toISOString()\n },\n }\n}\n\n/**\n * This method takes a date and a unit of precision and then normalizes the given date based on that precision.\n * The return will be the timestamp of the normalized date\n *\n * @example\n * ```js\n * getComparableDate(new Date('2022-10-13T17:42:19.948Z'), 'hour')) // returns 1665680400000\n *\n * // '2022-10-13T17:42:19.948Z' will be normalized to '2022-10-13T17:00:00.000Z'\n * // 1665680400000 is equal to: new Date('2022-10-13T17:00:00.000Z').getTime()\n * ```\n *\n * @param {Date} date\n * @param {Unit} precision\n * @returns {number}\n */\nexport function getComparableDate(date: Date, precision: Unit = 'day'): number {\n const DATE_ZERO = MIN_SUPPORTED_DATE.toString()\n const COMPARE_TO = {\n year: 4,\n month: 7,\n day: 10,\n hour: 13,\n minute: 16,\n second: 19,\n millisecond: 24,\n }\n const sliceIndex = COMPARE_TO[precision]\n\n if (sliceIndex == null) {\n throw new Error(`precision ${precision} is not supported`)\n }\n\n const normalizedPart = DATE_ZERO.slice(sliceIndex)\n const datePart = date.toISOString().slice(0, sliceIndex)\n const normalizedDate = `${datePart}${normalizedPart}`\n\n return new Date(normalizedDate).getTime()\n}\n\n/**\n * Constraints represent ranges of dates, inclusive in both ends.\n * Returns an array representing the initial and final timestamps (after the transformations applied by `DateHelper`).\n *\n * @example\n * ```js\n * // to represent a range that starts and ends in the same date\n * getConstraintRange(1643371200000) // returns [1643371200000, 1643371200000]\n * getConstraintRange([1643371200000, 1643371200000]) // returns [1643371200000, 1643371200000]\n * getConstraintRange('2022-01-28T12:00:00.000Z') // returns [1643371200000, 1643371200000]\n * getConstraintRange(['2022-01-28T12:00:00.000Z', '2022-01-28T12:00:00.000Z']) // returns [1643371200000, 1643371200000]\n *\n * // to represent a range that starts at one date and ends at another\n * getConstraintRange([1641038400000, 1643371200000]) // returns [1641038400000, 1643371200000]\n * getConstraintRange(['2022-01-01T12:00:00.000Z', '2022-01-28T12:00:00.000Z']) // returns [1641038400000, 1643371200000]\n *\n * // to represent a range that starts at one date and has no end\n * getConstraintRange([1641038400000, null]) // returns [1641038400000, `MAX_SUPPORTED_DATE`]\n * getConstraintRange(['2022-01-01T12:00:00.000Z', null]) // returns [1641038400000, `MAX_SUPPORTED_DATE`]\n *\n * // to represent a range that ends at one date and has no start\n * getConstraintRange([null, 1643371200000]) // returns [0, 1643371200000]\n * getConstraintRange([null, '2022-01-28T12:00:00.000Z']) // returns [0, 1643371200000]\n * ```\n * @param rangeArg\n * @returns\n */\nexport function getConstraintRange(rangeArg: DateConstraint): [number, number] {\n let range: [number, number]\n\n if (!Array.isArray(rangeArg)) {\n const timestamp = DateHelper(rangeArg).getTime()\n range = [timestamp, timestamp]\n } else {\n const rangeStart = rangeArg[0] != null ? DateHelper(rangeArg[0]) : MIN_SUPPORTED_DATE\n const rangeEnd = rangeArg[1] != null ? DateHelper(rangeArg[1]) : MAX_SUPPORTED_DATE\n\n range = [rangeStart.getTime(), rangeEnd.getTime()]\n }\n\n return range\n}\n\n/**\n * Add the given `value` to the provided `unit` of the provided `date`.\n * @param {Date} date - Date where the operation should be performed.\n * @param {Unit} unit - period\n * @param {number} value - value to be added\n * @returns {Date} new date after the operation.\n */\nfunction add(date: Date, unit: Unit, value: number): CalendarDate {\n const increment = {\n year: 0,\n month: 0,\n day: 0,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n [unit]: value,\n }\n\n const newDate = new Date(\n Date.UTC(\n date.getUTCFullYear() + increment.year,\n date.getUTCMonth() + increment.month,\n date.getUTCDate() + increment.day,\n date.getUTCHours() + increment.hour,\n date.getUTCMinutes() + increment.minute,\n date.getUTCSeconds() + increment.second,\n date.getUTCMilliseconds() + increment.millisecond\n )\n )\n\n // Do not normalize the clone since all units must be preserved.\n return DateHelper(newDate, { normalize: false })\n}\n\n/**\n * Wrap range constraint into a function and return a function constraint untouched.\n * @param {CalendarConstraint} constraint\n * @returns {(day: CalendarDate) => boolean}\n */\nexport function getConstraintEvaluator(\n constraint: CalendarConstraint\n): (day: CalendarDate) => boolean {\n if (isFunction(constraint)) {\n return constraint\n }\n\n const [start, end] = getConstraintRange(constraint)\n\n return function matches(day: CalendarDate): boolean {\n if (start > end) {\n throw new InvalidDateConstraintError([start, end])\n }\n\n return start <= day.getTime() && day.getTime() <= end\n }\n}\n\nexport function padded(value: number | string, maxLength = 2): string {\n return String(value).padStart(maxLength, '0')\n}\n\nexport class InvalidDateConstraintError extends Error {\n constructor([start, end]: [number, number]) {\n super(`Invalid constraint: [${start}, ${end}]`)\n }\n}\n\nexport const TODAY = DateHelper()\n\n/**\n * Maximum and minimum supported `Date`.\n * Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#the_ecmascript_epoch_and_timestamps\n */\nexport const MIN_SUPPORTED_DATE = DateHelper(0, { normalize: false })\nexport const MAX_SUPPORTED_DATE = DateHelper(8.64e15 - 1)\n\nexport default DateHelper\n","import { useEffect, useState } from 'react'\n\nimport { useDidMount } from 'hooks/useDidMount'\nimport toArray from 'utils/toolset/toArray'\n\nimport DateHelper, { TODAY } from './Date.helper'\nimport type { useCalendarProps, useCalendarReturn, RenderableMonth } from './Calendar.types'\n\nfunction useCalendar(props: useCalendarProps): useCalendarReturn {\n const { constraints, onSelect, mode = 'single' } = props\n const amountOfMonthsToRender = mode == 'single' ? 1 : 2\n\n const didMount = useDidMount()\n const [selected, setSelected] = useState<ReturnType<typeof getSelectionPair>>(() =>\n getSelectionPair(props.selected)\n )\n const [renderableMonths, setRenderableMonths] = useState<ReturnType<typeof getRenderableMonths>>(\n () => {\n const month = props.month != null ? props.month : TODAY.getMonth()\n const year = props.year != null ? props.year : TODAY.getYear()\n\n return getRenderableMonths(year, month, amountOfMonthsToRender)\n }\n )\n\n /**\n * Set the month to be rendered (or initial month when calendar is in range mode).\n * @param {Object} args\n * @param {number} [args.month] - Initial month to be rendered, if not provided, the current initial month will be used.\n * @param {number} [args.year] - Initial year to be rendered, if not provided, the current initial month will be used.\n */\n function set(args: { month?: number; year?: number }) {\n const [initialMonth] = renderableMonths\n const date = new Date(args.year ?? initialMonth.year, args.month ?? initialMonth.month)\n\n setRenderableMonths(\n getRenderableMonths(date.getFullYear(), date.getMonth(), amountOfMonthsToRender)\n )\n }\n\n /**\n * Select day or day range.\n * @param range `null` to clear selection, selection range start, or an array with selection start and end.\n */\n function select(range: useCalendarProps['selected']) {\n const [start, end] = getSelectionPair(range)\n\n function getSelectionBoundary(boundary?: string | number | null): string | null {\n if (boundary != null) {\n return DateHelper(boundary).toString()\n }\n\n return null\n }\n\n setSelected([start, end])\n\n if (didMount) {\n // prevent calling onSelect when initialized with value\n onSelect?.([getSelectionBoundary(start), getSelectionBoundary(end)])\n }\n }\n\n /**\n * Clear calendar selection.\n */\n function clear() {\n select([null, null])\n }\n\n useEffect(\n function onMonthOrYearPropsChange() {\n set({\n month: props.month,\n year: props.year,\n })\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.month, props.year]\n )\n\n useEffect(\n function onSelectedPropChange() {\n const newSelected = getSelectionPair(props.selected)\n\n if (newSelected[0] != selected[0] || newSelected[1] != selected[1]) {\n setSelected(newSelected)\n }\n },\n // we just intend to update the internal state when the prop changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.selected]\n )\n\n return {\n mode,\n months: renderableMonths,\n selected,\n constraints: toArray(constraints || []),\n clear,\n set,\n select,\n }\n}\n\nconst DAY_IN_MILLISECONDS = 24 * 60 * 60 * 1000\n\n/**\n * Generate the whole grid of days,\n * @param {number} year\n * @param {number }month\n * @returns {RenderableMonth}\n */\nexport function getRenderableMonth(year: number, month: number): RenderableMonth {\n const date = DateHelper(Date.UTC(year, month))\n\n const firstDayOfTheWeek = date.getWeekday()\n const totalDaysInMonth = 32 - new Date(Date.UTC(year, month, 32)).getUTCDate()\n\n const days = []\n\n /**\n * Filling days of previous month.\n * If the month does not start on Sunday, then we need to generate only the days of\n * the previous month to fill out the grid.\n */\n for (let index = firstDayOfTheWeek; index > 0; index--) {\n days.push(DateHelper(date.getTime() - index * DAY_IN_MILLISECONDS))\n }\n\n // Filling days of current month\n for (let index = 0; index < totalDaysInMonth; index++) {\n days.push(DateHelper(date.getTime() + index * DAY_IN_MILLISECONDS))\n }\n\n /**\n * Filling days of next month, just enough to complete the grid.\n */\n for (let index = 0; (firstDayOfTheWeek + totalDaysInMonth + index) % 7 != 0; index++) {\n days.push(DateHelper(date.getTime() + (totalDaysInMonth + index) * DAY_IN_MILLISECONDS))\n }\n\n return {\n month: date.getMonth(),\n year: date.getYear(),\n days,\n }\n}\n\n/**\n *\n * @param {number} year\n * @param {number} month\n * @param {number?} amount - number of months to be generated. Default value is 1.\n * @returns\n */\nexport function getRenderableMonths(\n year: number,\n month: number,\n amount = 1\n): ReturnType<typeof getRenderableMonth>[] {\n if (month < 0 || month > 11) {\n throw new Error(\n 'Invalid month! Please, provide a number between 0 (January) and 11 (December).'\n )\n }\n\n // TODO: validate accepted year range?\n\n const months = new Array<ReturnType<typeof getRenderableMonth>>()\n\n for (let i = 0; i < amount; i++) {\n months.push(getRenderableMonth(year, month + i))\n }\n\n return months\n}\n\nexport function getSelectionPair(\n selected?: null | [string | number | null, string | number | null]\n): [number | null, number | null] {\n const [start, end] = toArray(selected)\n\n return [\n start != null ? DateHelper(start).getTime() : null,\n end != null ? DateHelper(end ?? start).getTime() : null,\n ]\n}\n\nexport default useCalendar\n","export const getOrdinalSuffix = (number: number): 'st' | 'nd' | 'rd' | 'th' => {\n if (number % 10 === 1 && number !== 11) {\n return 'st'\n }\n\n if (number % 10 === 2 && number !== 12) {\n return 'nd'\n }\n\n if (number % 10 === 3 && number !== 13) {\n return 'rd'\n }\n\n return 'th'\n}\n","import { identity } from '@loadsmart/utils-function'\nimport { padded } from './Date.helper'\n\nimport type { CalendarDate } from './Date.helper'\nimport { getOrdinalSuffix } from 'utils/toolset/getOrdinalSuffix'\n\nexport interface DateFormat {\n format(date: CalendarDate): string\n}\n\nconst getTokenValue = (date: CalendarDate, token: string) => {\n const value = DEFAULT_FORMATTERS[token].format(date.get())\n\n return (ADDITIONAL_FORMATTERS[token] || identity)(value)\n}\n\n/**\n * This helpers provides a convenient layer on top of `Intl.DateTimeFormat`,\n * using common tokens (based on `momentjs`) to format dates.\n */\nexport default function DateFormatHelper(format: string): DateFormat {\n const tokens = tokenizer(format)\n\n return {\n format(date: CalendarDate) {\n return tokens\n .map((token, index) => {\n const previousIndex = index - 1\n const previousToken = tokens[previousIndex]\n\n if (token in DEFAULT_FORMATTERS) {\n return getTokenValue(date, token)\n }\n\n if (token in COMPOUND_FORMATTERS && COMPOUND_FORMATTERS[token].valid(previousToken)) {\n return COMPOUND_FORMATTERS[token].format(getTokenValue(date, previousToken))\n }\n\n return token\n })\n .join('')\n },\n }\n}\n\n/**\n * Supported tokens:\n *\n *| | Token | Output |\n *| :----------------------------- | :---- | :---------------------------------------- |\n *| Month | MM | 01, 02, ..., 11, 12 |\n *| | MMM | Jan, Feb, ..., Nov, Dec |\n *| | MMMM | January, February, ..., November,December |\n *| Day of Month | D | 1, 2, ..., 30, 31 |\n *| Day of Month with leading 0 | DD | 01, 02, ..., 30, 31 |\n *| Day of week | ddd | Sun, Mon, ... Fri, Sat |\n *| | dddd | Sunday, Monday, ..., Friday, Saturday |\n *| Year | YYYY | 1970, 1971, ..., 2029, 2030 |\n *| Hour | HH | 00, 01, ..., 22, 23 |\n *| | hh | 00, 01, ..., 11, 12 |\n *| Minute | mm | 01, 02, ..., 58, 59 |\n *| Seconds | ss | 01, 02, ..., 58, 59 |\n *| Post or ante meridiem | a | am, pm |\n *| | A | AM, PM |\n *| Ordinal numbers | o | 1st, 2nd, 3rd, ..., 10th |\n *| Scaped sequence | [] | |\n *\n * @param format\n * @returns\n */\nexport function tokenizer(format: string): string[] {\n function getType(char?: string): string {\n if (\n char != undefined &&\n ['M', 'd', 'D', 'Y', 'H', 'h', 'm', 's', 'A', 'a', 'o'].includes(char)\n ) {\n return 'token'\n }\n\n return 'string'\n }\n\n const tokens: string[] = []\n\n let i = 0\n let prev\n let isEscaping = false\n\n while (i < format.length) {\n const at = Math.max(0, tokens.length - 1)\n\n const char = format.charAt(i)\n i++\n\n if (['[', ']'].includes(char)) {\n isEscaping = char === '['\n } else if (isEscaping) {\n tokens[at] = `${tokens[at] || ''}${char}`\n } else if (prev !== char && [getType(prev), getType(char)].includes('token')) {\n // we just need to start a new piece of string if we found a possible valid token\n tokens.push(char)\n } else {\n tokens[at] = `${tokens[at] || ''}${char}`\n }\n\n prev = char\n }\n\n return tokens\n}\n\n/**\n * TODO: Evaluate the need to add the following pollyfills:\n * - https://formatjs.io/docs/polyfills/intl-datetimeformat/\n * - https://formatjs.io/docs/polyfills/intl-getcanonicallocales/\n * - https://formatjs.io/docs/polyfills/intl-locale/\n * - https://formatjs.io/docs/polyfills/intl-numberformat/\n * - https://formatjs.io/docs/polyfills/intl-pluralrules/\n */\nconst DEFAULT_FORMATTERS: Record<string, Intl.DateTimeFormat> = {\n MM: new Intl.DateTimeFormat('en-US', {\n month: '2-digit',\n }),\n MMM: new Intl.DateTimeFormat('en-US', {\n month: 'short',\n }),\n MMMM: new Intl.DateTimeFormat('en-US', {\n month: 'long',\n }),\n D: new Intl.DateTimeFormat('en-US', {\n day: 'numeric',\n }),\n DD: new Intl.DateTimeFormat('en-US', {\n day: '2-digit',\n }),\n ddd: new Intl.DateTimeFormat('en-US', {\n weekday: 'short',\n }),\n dddd: new Intl.DateTimeFormat('en-US', {\n weekday: 'long',\n }),\n YYYY: new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n }),\n HH: new Intl.DateTimeFormat('en-US', {\n hour: '2-digit',\n hourCycle: 'h23',\n }),\n hh: new Intl.DateTimeFormat('en-US', {\n hour: '2-digit',\n hour12: true,\n }),\n mm: new Intl.DateTimeFormat('en-US', {\n minute: '2-digit',\n hour12: false,\n }),\n ss: new Intl.DateTimeFormat('en-US', {\n second: '2-digit',\n hour12: false,\n }),\n a: new Intl.DateTimeFormat('en-US', {\n hour: '2-digit',\n hour12: true,\n }),\n A: new Intl.DateTimeFormat('en-US', {\n hour: '2-digit',\n hour12: true,\n }),\n}\n\n/**\n * Apply additional formatting.\n *\n * Padding, for example, is applied in some cases due to [this](https://bugs.chromium.org/p/chromium/issues/detail?id=527926) bug.\n */\nconst ADDITIONAL_FORMATTERS: Record<string, (value: string) => string> = {\n hh: (value: string) => (value ? padded(value.split(/\\s/)[0], 2) : value),\n HH: (value: string) => (value ? padded(value, 2) : value),\n mm: (value: string) => (value ? padded(value, 2) : value),\n ss: (value: string) => (value ? padded(value, 2) : value),\n a: (value: string) => (value ? (value.split(/\\s/)[1] || '').toLowerCase() : value),\n A: (value: string) => (value ? (value.split(/\\s/)[1] || '').toUpperCase() : value),\n}\n\ntype CompoundFormatter = {\n valid: (token: string) => boolean\n format: (value: string) => string\n}\n\nconst COMPOUND_FORMATTERS: Record<string, CompoundFormatter> = {\n o: {\n valid: (token) => new Set(['D', 'DD']).has(token),\n format: (value: string) => getOrdinalSuffix(parseInt(value, 10)),\n },\n}\n","import styled from 'styled-components'\n\nimport { BaseButton } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport activatable from 'styles/activatable'\nimport conditional, { whenProps } from 'tools/conditional'\nimport disableable from 'styles/disableable'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport typography from 'styles/typography'\n\nconst PickerButton = styled(BaseButton)<{\n $status:\n | 'default'\n | 'current-day'\n | 'faded'\n | 'selection-start'\n | 'selection-end'\n | 'selection'\n | 'next-month-day'\n}>`\n ${typography(\n conditional({\n body: whenProps({ $status: ['default', 'faded'] }),\n 'body-bold': whenProps({\n $status: ['current-day', 'selection-start', 'selection', 'selection-end'],\n }),\n })\n )}\n\n user-select: none;\n\n height: 100%;\n\n border-radius: 0;\n\n color: ${conditional({\n 'color-neutral-lighter': whenProps({\n $status: ['selection-start', 'selection', 'selection-end'],\n }),\n 'color-neutral-darker': whenProps({ $status: ['default', 'faded'] }),\n 'color-neutral-dark': whenProps({ $status: 'next-month-day' }),\n 'color-accent': whenProps({ $status: 'current-day' }),\n })};\n\n background: ${conditional({\n 'color-transparent': whenProps({ $status: ['default', 'faded', 'next-month-day'] }),\n 'color-neutral-darker': whenProps({ $status: ['selection-start', 'selection-end'] }),\n 'color-neutral': whenProps({ $status: 'selection' }),\n 'color-neutral-lightest': whenProps({ $status: 'current-day' }),\n })};\n\n border-color: ${conditional({\n 'color-transparent': whenProps({ $status: ['default', 'faded', 'next-month-day'] }),\n 'color-neutral-darker': whenProps({ $status: ['selection-start', 'selection-end'] }),\n 'color-neutral': whenProps({ $status: 'selection' }),\n 'color-neutral-light': whenProps({ $status: 'current-day' }),\n })};\n\n ${conditional({\n 'opacity: 0.4;': whenProps({ $status: 'faded' }),\n 'opacity: 1;': whenProps({ $status: (status) => status !== 'faded' }),\n })}\n\n padding: ${token('space-xs')} ${token('space-s')};\n\n ${hoverable`\n border-color: ${token('color-neutral')};\n background-color: ${conditional({\n 'color-transparent': whenProps({ $status: ['default', 'faded', 'next-month-day'] }),\n 'color-neutral-dark': whenProps({\n $status: ['selection-start', 'selection', 'selection-end'],\n }),\n 'color-neutral-lightest': whenProps({ $status: 'current-day' }),\n })};\n color: ${conditional({\n 'color-neutral-dark': whenProps({ $status: ['default', 'faded'] }),\n 'color-neutral-lightest': whenProps({\n $status: ['selection-start', 'selection', 'selection-end'],\n }),\n })};\n\n font-weight: ${token('font-weight-bold')};\n `}\n\n ${focusable`\n box-shadow: ${token('button-primary-outline')};\n font-weight: ${token('font-weight-bold')};\n `}\n\n ${activatable`\n border-color: ${token('color-neutral')};\n background-color: ${conditional({\n 'color-transparent': whenProps({ 'aria-checked': false }),\n 'color-neutral': whenProps({ 'aria-checked': true }),\n })};\n color: ${conditional({\n 'color-neutral': whenProps({ 'aria-checked': false }),\n 'color-neutral-white': whenProps({ 'aria-checked': true }),\n })};\n `}\n\n ${disableable`\n background-color: ${token('color-transparent')};\n border-color: ${conditional({\n 'color-neutral-darkest': whenProps({ 'aria-checked': true }),\n 'color-transparent': whenProps({ 'aria-checked': false }),\n })};\n\n color: ${token('color-neutral-darker')};\n `}\n\n visibility: ${conditional({\n visible: whenProps({ 'aria-hidden': false }),\n hidden: whenProps({ 'aria-hidden': true }),\n })};\n`\n\nexport default styled(PickerButton)({})\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport { Group } from 'components/Layout'\nimport { Text as DefaultText } from 'components/Text'\nimport { TODAY } from '../Date.helper'\nimport DateFormatHelper from '../DateFormat.helper'\nimport PickerButton from './PickerButton'\n\nimport type { CalendarDate } from '../Date.helper'\nimport type { CalendarPickerProps, RenderableMonth, useCalendarReturn } from '../Calendar.types'\n\nexport const WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nexport const formatter = DateFormatHelper('MM/DD/YYYY')\n\nfunction getStatus(calendar: useCalendarReturn, date: CalendarDate) {\n const isPastYearDay =\n date.getYear() < calendar.months[0].year && date.getMonth() > calendar.months[0].month\n\n if (calendar.selected[0] == date.getTime()) {\n return 'selection-start'\n } else if (calendar.selected[1] == date.getTime()) {\n return 'selection-end'\n } else if (\n calendar.selected[0] != null &&\n date.getTime() > calendar.selected[0] &&\n calendar.selected[1] != null &&\n date.getTime() < calendar.selected[1]\n ) {\n return 'selection'\n } else if (\n calendar.mode === 'single' &&\n (isPastYearDay || date.getMonth() < calendar.months[0].month)\n ) {\n return 'faded'\n } else if (calendar.mode === 'single' && date.getMonth() > calendar.months[0].month) {\n return 'next-month-day'\n } else if (date.getTime() == TODAY.getTime()) {\n return 'current-day'\n }\n\n return 'default'\n}\n\nconst Text = styled(DefaultText)`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n user-select: none;\n`\n\nconst Grid = styled.div`\n display: grid;\n grid-gap: ${token('space-2xs')};\n grid-template-rows: 1.25rem repeat(auto-fill, 2.5rem);\n grid-template-columns: repeat(7, 2.5rem);\n`\n\n/**\n * filling days of previous month\n * TODO: supress this for range selection\n */\nfunction CalendarDayPicker({ calendar, onDayClick }: CalendarPickerProps): JSX.Element {\n function renderDaysOfWeek() {\n return WEEKDAYS.map((weekday) => (\n <Text\n key={weekday}\n as=\"abbr\"\n variant=\"chips-sm\"\n color=\"color-neutral\"\n style={{ textDecoration: 'none' }}\n >\n {weekday}\n </Text>\n ))\n }\n\n function renderDaysOfMonth(month: RenderableMonth) {\n const constraints = calendar.constraints || []\n\n return month.days.map((day) => {\n const status = getStatus(calendar, day)\n const formatted = formatter.format(day)\n const isDisabled = day.matches(...constraints)\n\n if (calendar.mode === 'range' && day.getMonth() !== month.month) {\n return <span key={formatted} aria-hidden></span>\n }\n\n return (\n <PickerButton\n key={formatted}\n type=\"button\"\n role=\"checkbox\"\n aria-checked={['selection-start', 'selection', 'selection-end'].includes(status)}\n aria-label={formatted}\n disabled={isDisabled}\n onClick={() => {\n if (!isDisabled && onDayClick) {\n onDayClick(day.getTime())\n }\n }}\n $status={status}\n >\n <time dateTime={day.toString()}>{day.getDate()}</time>\n </PickerButton>\n )\n })\n }\n\n return (\n <Group>\n {calendar.months.map((month) => {\n return (\n <Grid key={`${month.year}${month.month}`} role=\"group\" data-testid=\"calendar-day-picker\">\n {renderDaysOfWeek()}\n {renderDaysOfMonth(month)}\n </Grid>\n )\n })}\n </Group>\n )\n}\n\nexport default CalendarDayPicker\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport MonthHelper from '../Month.helper'\nimport PickerButton from './PickerButton'\n\nimport type { useCalendarReturn, CalendarPickerProps } from '../Calendar.types'\nimport type { CalendarMonth, CalendarMonthAlias } from '../Month.helper'\n\nconst Container = styled.div`\n display: grid;\n grid-auto-rows: 3.75rem;\n grid-gap: ${token('space-2xs')};\n grid-template-columns: repeat(3, 1fr);\n`\n\nfunction getStatus(calendar: useCalendarReturn, month: CalendarMonth) {\n if (calendar.months[0].month == month.index) {\n return 'selection-start'\n }\n\n return 'default'\n}\n\nfunction CalendarMonthPicker({ calendar, mode }: CalendarPickerProps): JSX.Element {\n return (\n <Container role=\"radiogroup\" data-testid=\"calendar-month-picker\">\n {MonthHelper.getAll().map((month) => (\n <PickerButton\n key={month.index}\n type=\"button\"\n role=\"radio\"\n aria-checked={month.index == calendar.months[0].month}\n aria-label={`Select month ${month.name}`}\n onClick={() => {\n calendar.set({ month: month.index })\n mode.dispatch({ type: 'set-mode', payload: 'day-picker' })\n }}\n $status={getStatus(calendar, month)}\n >\n <time dateTime={`${calendar.months[0].year}-${month.index + 1}`}>\n {MonthHelper(month.name as CalendarMonthAlias).format('short')}\n </time>\n </PickerButton>\n ))}\n </Container>\n )\n}\n\nexport default CalendarMonthPicker\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken as token } from 'theming'\nimport DefaultPickerButton from './PickerButton'\nimport range from 'utils/toolset/range'\n\nimport type { useCalendarReturn, CalendarPickerProps } from '../Calendar.types'\n\nconst Container = styled.div`\n display: grid;\n grid-auto-rows: 2.875rem;\n grid-gap: ${token('space-2xs')};\n grid-template-columns: repeat(4, 1fr);\n`\n\nconst PickerButton = styled(DefaultPickerButton)`\n block-size: 46px;\n`\n\nfunction getStatus(calendar: useCalendarReturn, year: number) {\n if (calendar.months[0].year == year) {\n return 'selection-start'\n }\n\n return 'default'\n}\n\nfunction CalendarYearPicker({ calendar, mode }: CalendarPickerProps): JSX.Element {\n return (\n <Container role=\"radiogroup\" data-testid=\"calendar-year-picker\">\n {range(2012, 2032).map((year) => (\n <PickerButton\n key={year}\n type=\"button\"\n role=\"radio\"\n aria-checked={year == calendar.months[0].year}\n aria-label={`Select year ${year}`}\n onClick={() => {\n calendar.set({ year })\n mode.dispatch({ type: 'set-mode', payload: 'month-picker' })\n }}\n $status={getStatus(calendar, year)}\n >\n {year}\n </PickerButton>\n ))}\n </Container>\n )\n}\n\nexport default CalendarYearPicker\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { BaseButton } from 'components/Button'\nimport { getToken as token } from 'theming'\nimport { Group, Stack } from 'components/Layout'\nimport { Icon } from 'components/Icon'\nimport conditional, { whenProps } from 'tools/conditional'\nimport focusable from 'styles/focusable'\nimport hoverable from 'styles/hoverable'\nimport MonthHelper from './Month.helper'\nimport PickerModeToggle from './PickerModeToggle'\nimport typography from 'styles/typography'\nimport useCalendar from './useCalendar'\nimport usePickerMode from './usePickerMode'\n\nimport type { CalendarMonthAlias } from './Month.helper'\nimport type { CalendarProps, GenericCalendarProps } from './Calendar.types'\n\nconst Container = styled(Stack)`\n ${typography('body')}\n min-width: calc((7 * 2.5rem) + (6 * ${token('space-2xs')}));\n`\n\nconst BorderlessButton = styled(BaseButton)`\n ${typography('body-bold')}\n border-color: transparent;\n background-color: transparent;\n\n color: ${token('color-neutral')};\n\n inline-size: 40px;\n\n visibility: ${conditional({\n visible: whenProps({ 'aria-hidden': false }),\n hidden: whenProps({ 'aria-hidden': true }),\n })};\n\n ${hoverable`\n color: ${token('color-neutral-dark')};\n `}\n\n ${focusable`\n box-shadow: ${token('button-primary-outline')};\n `}\n`\n\n/**\n * Implementation based on\n * * https://medium.com/swlh/build-a-date-picker-in-15mins-using-javascript-react-from-scratch-f6932c77db09\n * * https://codepen.io/zellwk/pen/xNpKwp\n */\nexport function GenericCalendar(props: GenericCalendarProps): JSX.Element {\n const { calendar, onDayClick, onMonthClick, onYearClick, ...others } = props\n const mode = usePickerMode()\n\n const { Picker } = mode\n\n return (\n <Container space=\"xs\" {...others}>\n <Group>\n <BorderlessButton\n type=\"button\"\n aria-label=\"Navigate to previous month\"\n aria-hidden={!mode.is('day-picker')}\n onClick={() => {\n calendar.set({ month: calendar.months[0].month - 1 })\n }}\n >\n <Icon name=\"caret-left\" size={16} />\n </BorderlessButton>\n\n {calendar.months.map((month) => {\n return (\n <Group key={month.month} space=\"xs\" align=\"center\" justify=\"center\" style={{ flex: 1 }}>\n <PickerModeToggle\n aria-label=\"Open month selection\"\n onClick={() => {\n mode.dispatch({ type: 'toggle-mode', payload: 'month-picker' })\n }}\n expanded={mode.is('month-picker')}\n disabled={calendar.mode == 'range'}\n >\n {MonthHelper(month.month as CalendarMonthAlias).format('long')}\n </PickerModeToggle>\n\n <PickerModeToggle\n aria-label=\"Open year selection\"\n onClick={() => {\n mode.dispatch({ type: 'toggle-mode', payload: 'year-picker' })\n }}\n expanded={mode.is('year-picker')}\n disabled={calendar.mode == 'range'}\n >\n {month.year}\n </PickerModeToggle>\n </Group>\n )\n })}\n <BorderlessButton\n type=\"button\"\n aria-label=\"Navigate to next month\"\n aria-hidden={!mode.is('day-picker')}\n onClick={() => {\n calendar.set({ month: calendar.months[0].month + 1 })\n }}\n >\n <Icon name=\"caret-right\" size={16} />\n </BorderlessButton>\n </Group>\n\n <Picker\n calendar={calendar}\n mode={mode}\n onDayClick={onDayClick}\n onMonthClick={onMonthClick}\n onYearClick={onYearClick}\n />\n </Container>\n )\n}\n\nfunction Calendar(props: CalendarProps): JSX.Element {\n const { year, month, selected, constraints, onSelect, mode, ...rest } = props\n const calendar = useCalendar({ year, month, selected, constraints, mode, onSelect })\n\n return <GenericCalendar calendar={calendar} {...rest} />\n}\n\nexport default Calendar\n","import { useReducer } from 'react'\n\nimport DayPicker from './Pickers/DayPicker'\nimport MonthPicker from './Pickers/MonthPicker'\nimport YearPicker from './Pickers/YearPicker'\n\nimport type {\n PickerMode,\n PickerModeAction,\n usePickerModeProps,\n usePickerModeReturn,\n} from './Calendar.types'\n\nfunction usePickerMode(props?: usePickerModeProps): usePickerModeReturn {\n function reducer(state: PickerMode, action: PickerModeAction) {\n switch (action.type) {\n case 'set-mode':\n return action.payload\n case 'toggle-mode':\n if (state != action.payload) {\n return action.payload\n }\n\n return 'day-picker'\n default:\n return state\n }\n }\n\n const [mode, dispatch] = useReducer(reducer, props?.mode || 'day-picker')\n\n return {\n get() {\n return mode\n },\n is(other: PickerMode) {\n return other != null && other === mode\n },\n dispatch,\n Picker: {\n 'day-picker': DayPicker,\n 'month-picker': MonthPicker,\n 'year-picker': YearPicker,\n }[mode],\n }\n}\n\nexport default usePickerMode\n","import DateFormatHelper from './DateFormat.helper'\nimport DateHelper from './Date.helper'\n\nexport const formatter = DateFormatHelper('MM/DD/YYYY')\n\nexport function getSelection(\n selection?: number | string | null | [number | string | null, number | string | null]\n): [null | number, null | number] {\n const [start, end] = Array.isArray(selection) ? selection : [selection, selection]\n\n return [\n start != null ? DateHelper(start).getTime() : null,\n end != null ? DateHelper(end).getTime() : null,\n ]\n}\n","import { useEffect, useRef } from 'react'\n\nimport { useDropdown } from 'components/Dropdown'\nimport { TODAY, DateFormatHelper, DateHelper, useCalendar } from 'components/Calendar'\n\nimport { getSelection } from '../Calendar/Calendar.helpers'\n\nimport type { CalendarDate } from 'components/Calendar'\nimport type { DatePickerProps } from './DatePicker.types'\n\nexport const formatter = DateFormatHelper('MM/DD/YYYY')\n\nexport function formatDate(date?: number | string | null): string {\n if (!date || Number.isNaN(new Date(date).getTime())) {\n return ''\n }\n\n return formatter.format(DateHelper(date))\n}\n\nexport function getInitialCalendarSetup(\n selection: number | string | null | [number | string | null, number | string | null]\n) {\n const [selectionStart] = getSelection(selection)\n\n if (!selectionStart) {\n return {\n month: TODAY.getMonth(),\n year: TODAY.getYear(),\n }\n }\n\n const startDate = DateHelper(selectionStart)\n\n return {\n month: startDate.getMonth(),\n year: startDate.getYear(),\n }\n}\n\nexport function setInputValue(input: HTMLInputElement | null, value: string) {\n if (input != null) {\n input.value = value\n }\n}\n\nexport function getInputValue(input?: HTMLInputElement | null) {\n if (input != null) {\n return input.value\n }\n\n return null\n}\n\nfunction useDatePicker(props: DatePickerProps) {\n const { constraints, disabled, id, name, onChange, value, ...rest } = props\n\n const dropdown = useDropdown({ disabled })\n const calendar = useCalendar({\n mode: 'single',\n constraints,\n onSelect: handleDateSelect,\n })\n\n const inputRef = useRef<HTMLInputElement>()\n\n function handleDateSelect(selection: [string | null, string | null]) {\n if (!inputRef.current) {\n return\n }\n\n const [formattedDate] = getSelection(selection).map(formatDate)\n\n /**\n * This check ensures we will keep the valid date the user typed as-is and, since we're using\n * an uncontrolled input, ensures that the formatting that happens in `getFormattedSelection`\n * will not interfere with cursor position when we set the input value.\n * Bottom line is: if the input already contains the select date, no change is necessary.\n */\n if (formattedDate != formatDate(getInputValue(inputRef.current))) {\n setInputValue(inputRef.current, formattedDate)\n }\n\n onChange?.({ target: { id, name, value: selection[0] } })\n }\n\n function handleDateInputChange(date: CalendarDate) {\n if (date != null) {\n const timestamp = date.getTime()\n\n calendar.select([timestamp, timestamp])\n } else {\n calendar.clear()\n }\n }\n\n function handleDateInputClick() {\n if (!dropdown.expanded) {\n calendar.set(getInitialCalendarSetup(calendar.selected))\n dropdown.toggle()\n }\n }\n\n function handleDayClick(timestamp: number) {\n calendar.select([timestamp, timestamp])\n dropdown.collapse()\n }\n\n function handleClearClick() {\n calendar.clear()\n inputRef.current?.focus()\n }\n\n function getDropdownProps() {\n return {\n disabled,\n toggle: dropdown.toggle,\n expanded: dropdown.expanded,\n onBlur() {\n if (!inputRef.current) {\n return\n }\n\n const [currSelectedDate] = getSelection(calendar.selected).map(formatDate)\n const currInputValue = getInputValue(inputRef.current)\n\n if (currInputValue == currSelectedDate) {\n return\n }\n\n if (!currInputValue) {\n calendar.clear()\n } else {\n setInputValue(inputRef.current, currSelectedDate)\n }\n },\n }\n }\n\n function getCalendarProps() {\n return {\n ...rest.getCalendarProps?.(),\n calendar,\n onDayClick: handleDayClick,\n }\n }\n\n function getInputProps() {\n return {\n ...rest.getInputProps?.(),\n id,\n name,\n disabled,\n onChange: handleDateInputChange,\n onClick: handleDateInputClick,\n ref(node: HTMLInputElement | null) {\n if (node != null) {\n inputRef.current = node\n }\n },\n }\n }\n\n function getClearProps() {\n return {\n onClick: handleClearClick,\n }\n }\n\n useEffect(\n function onValuePropChange() {\n if (!inputRef.current) {\n return\n }\n\n const [newSelection] = getSelection(value)\n const [currSelection] = calendar.selected\n\n if (newSelection != currSelection) {\n setInputValue(inputRef.current, formatDate(newSelection))\n\n calendar.select([newSelection, newSelection])\n calendar.set(getInitialCalendarSetup([newSelection, newSelection]))\n }\n },\n // we just intend to update the selection when the prop changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [value]\n )\n\n return {\n value: getSelection(calendar.selected).map(formatDate),\n\n getDropdownProps,\n getInputProps,\n getClearProps,\n getCalendarProps,\n }\n}\n\nexport default useDatePicker\n","import React, { useContext, forwardRef } from 'react'\nimport styled from 'styled-components'\n\nimport { DateFormatHelper, DateHelper, GenericCalendar } from 'components/Calendar'\nimport { Dropdown, DropdownContext, GenericDropdown } from 'components/Dropdown'\nimport { getToken as token } from 'theming'\nimport { Group } from 'components/Layout'\nimport { Icon } from 'components/Icon'\nimport { TextField as DefaultTextField } from 'components/TextField'\nimport CloseButton from 'common/CloseButton'\nimport useDatePicker from './useDatePicker'\nimport { Popover } from 'components/Popover'\n\nimport type { CalendarDate } from 'components/Calendar'\nimport type { ChangeEvent } from 'react'\nimport type { DatePickerProps } from './DatePicker.types'\nimport type { TextFieldProps } from 'components/TextField'\n\n/**\n * https://www.regular-expressions.info/dates.html\n * https://learning.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s04.html#validation-dates-problem\n */\nconst DATE_REGEX = /^(1[0-2]|0?[1-9])\\/(3[01]|[12][0-9]|0?[1-9])\\/(19|20)\\d{2}$/\n\nexport const formatter = DateFormatHelper('MM/DD/YYYY')\n\nconst TextField = styled(DefaultTextField)`\n & > input {\n width: 10ch;\n }\n`\n\nconst DropdownMenu = styled(Dropdown.Menu)`\n width: max-content;\n min-width: initial;\n max-height: initial;\n padding: ${token('space-m')};\n overflow-y: initial;\n`\n\nexport const ClearButton = styled(CloseButton)`\n width: 1em;\n height: 1em;\n\n margin-left: calc(-1 * ${token('space-s')}); // compensate for input's padding-left\n`\n\ninterface DateInputProps extends Omit<TextFieldProps, 'onChange'> {\n onChange: (date: CalendarDate) => void\n}\n\nexport const DateInput = forwardRef<HTMLInputElement, DateInputProps>(function DateInput(\n props: DateInputProps,\n ref\n): JSX.Element {\n const { onChange, ...rest } = props\n const dropdown = useContext(DropdownContext)\n\n function handleInputChange(event: ChangeEvent<HTMLInputElement>) {\n const {\n target: { value },\n } = event\n\n if (!DATE_REGEX.test(value)) {\n return\n }\n\n onChange(DateHelper(value))\n }\n\n // TODO: use type=\"date\" when IE is no longer in the way\n return (\n <TextField\n placeholder=\"00/00/0000\"\n {...rest}\n ref={ref}\n type=\"text\"\n disabled={dropdown.disabled}\n leading={<Icon name=\"calendar\" />}\n onChange={handleInputChange}\n />\n )\n})\n\nfunction DatePicker(props: DatePickerProps): JSX.Element {\n const {\n id,\n name,\n value,\n onChange,\n disabled,\n constraints,\n getInputProps,\n getCalendarProps,\n placement,\n } = props\n\n const datePicker = useDatePicker({\n constraints,\n disabled,\n id,\n name,\n value,\n onChange,\n getInputProps,\n getCalendarProps,\n })\n\n function renderTrailing() {\n const [currSelectedDate] = datePicker.value\n\n if (!disabled && currSelectedDate) {\n return (\n <ClearButton\n size={12}\n type=\"button\"\n aria-label=\"Clear selection\"\n {...datePicker.getClearProps()}\n />\n )\n }\n\n return null\n }\n\n return (\n <GenericDropdown {...placement} {...datePicker.getDropdownProps()}>\n <Popover.Reference>\n <Group space=\"s\">\n <DateInput trailing={renderTrailing()} {...datePicker.getInputProps()} />\n </Group>\n </Popover.Reference>\n <DropdownMenu>\n <GenericCalendar {...datePicker.getCalendarProps()} />\n </DropdownMenu>\n </GenericDropdown>\n )\n}\n\nexport default DatePicker\n","import { useEffect, useRef } from 'react'\n\nimport { formatDate, getInitialCalendarSetup, getInputValue, setInputValue } from './useDatePicker'\nimport { getSelection } from '../Calendar/Calendar.helpers'\nimport { useCalendar } from 'components/Calendar'\nimport { useDropdown } from 'components/Dropdown'\n\nimport type { CalendarDate } from 'components/Calendar'\nimport type { DateRangePickerProps } from './DatePicker.types'\n\nconst AT_RANGE_START = 0\nconst AT_RANGE_END = 1\n\nfunction useDateRangePicker(props: DateRangePickerProps) {\n const { constraints, disabled, id, name, onChange, value, ...rest } = props\n\n const dropdown = useDropdown({ disabled })\n const calendar = useCalendar({\n mode: 'range',\n constraints,\n onSelect: handleDateSelect,\n })\n\n const inputsRef = useRef<[HTMLInputElement | null, HTMLInputElement | null]>([null, null])\n const currentlyPickingRef = useRef<'range-start' | 'range-end' | 'none'>('none')\n\n function handleDateSelect(selected: [string | null, string | null]) {\n ;[AT_RANGE_START, AT_RANGE_END].forEach((index) => {\n const input = inputsRef.current[index]\n const formattedDate = formatDate(selected[index])\n\n /**\n * This check ensures we will keep the valid date the user typed as-is and, since we're using\n * an uncontrolled input, ensures that the formatting that happens in `formatDate`\n * will not interfere with cursor position when we set the input value.\n * Bottom line is: if the input already contains the select date, no change is necessary.\n */\n if (formattedDate != formatDate(getInputValue(input))) {\n setInputValue(input, formattedDate)\n }\n })\n\n onChange?.({ target: { id, name, value: selected } })\n }\n\n function getDateInputChangeHandler(index: number) {\n return function handleDateInputChange(date: CalendarDate) {\n if (date != null) {\n const timestamp = date.getTime()\n\n const newSelected: typeof calendar.selected = [...calendar.selected]\n newSelected[index] = timestamp\n\n calendar.select(newSelected)\n } else {\n calendar.clear()\n }\n }\n }\n\n function handleDateInputClick() {\n if (!dropdown.expanded) {\n calendar.set(getInitialCalendarSetup(calendar.selected))\n dropdown.toggle()\n }\n }\n\n function handleDayClick(timestamp: number) {\n const [rangeStart, rangeEnd] = calendar.selected\n\n if (currentlyPickingRef.current == 'range-start') {\n if (rangeEnd != null) {\n calendar.select([timestamp, rangeEnd].sort() as [number, number])\n inputsRef.current[AT_RANGE_START]?.focus()\n } else {\n calendar.select([timestamp, rangeEnd])\n inputsRef.current[AT_RANGE_END]?.focus()\n }\n } else if (currentlyPickingRef.current == 'range-end') {\n if (rangeStart != null) {\n calendar.select([rangeStart, timestamp].sort() as [number, number])\n } else {\n calendar.select([rangeStart, timestamp])\n }\n\n inputsRef.current[AT_RANGE_END]?.focus()\n }\n }\n\n function handleClearClick() {\n calendar.clear()\n inputsRef.current[AT_RANGE_START]?.focus()\n }\n\n function handleDropdownBlur() {\n currentlyPickingRef.current = 'none'\n\n if ([AT_RANGE_START, AT_RANGE_END].some((index) => !inputsRef.current[index])) {\n return\n }\n\n if ([AT_RANGE_START, AT_RANGE_END].every((index) => !getInputValue(inputsRef.current[index]))) {\n calendar.clear()\n } else {\n const selected = getSelection(calendar.selected).map(formatDate)\n\n ;[AT_RANGE_START, AT_RANGE_END].forEach((index) => {\n setInputValue(inputsRef.current[index], selected[index])\n })\n }\n }\n\n function handleDoneClick() {\n handleDropdownBlur()\n dropdown.collapse()\n }\n\n function getDropdownProps() {\n return {\n disabled,\n toggle: dropdown.toggle,\n expanded: dropdown.expanded,\n onBlur: handleDropdownBlur,\n }\n }\n\n function getCalendarProps() {\n return {\n ...rest.getCalendarProps?.(),\n calendar,\n onDayClick: handleDayClick,\n }\n }\n\n function getRangeStartInputProps() {\n return {\n ...rest.getRangeStartInputProps?.(),\n id: id != null ? `${id}-start` : id,\n name: name != null ? `${name}-start` : name,\n disabled,\n onChange: getDateInputChangeHandler(AT_RANGE_START),\n onClick: handleDateInputClick,\n onFocus() {\n currentlyPickingRef.current = 'range-start'\n },\n ref(node: HTMLInputElement | null) {\n if (node != null) {\n inputsRef.current[AT_RANGE_START] = node\n }\n },\n }\n }\n\n function getRangeEndInputProps() {\n return {\n ...rest.getRangeEndInputProps?.(),\n id: id != null ? `${id}-end` : id,\n name: name != null ? `${name}-end` : name,\n disabled,\n onChange: getDateInputChangeHandler(AT_RANGE_END),\n onClick: handleDateInputClick,\n onFocus() {\n currentlyPickingRef.current = 'range-end'\n },\n ref(node: HTMLInputElement | null) {\n if (node != null) {\n inputsRef.current[AT_RANGE_END] = node\n }\n },\n }\n }\n\n function getClearProps() {\n return {\n onClick: handleClearClick,\n }\n }\n\n function getDoneProps() {\n return {\n onClick: handleDoneClick,\n }\n }\n\n useEffect(\n function onValuePropChange() {\n if ([AT_RANGE_START, AT_RANGE_END].some((index) => !inputsRef.current[index])) {\n return\n }\n\n const newSelected = getSelection(value)\n const currSelected = calendar.selected\n\n const hasChanged = [AT_RANGE_START, AT_RANGE_END].some((index) => {\n return newSelected[index] != currSelected[index]\n })\n\n if (hasChanged) {\n ;[AT_RANGE_START, AT_RANGE_END].forEach((index) => {\n setInputValue(inputsRef.current[index], formatDate(newSelected[index]))\n })\n\n calendar.select(newSelected)\n calendar.set(getInitialCalendarSetup(newSelected))\n }\n },\n // we just intend to update the selection when the prop changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [value]\n )\n\n return {\n value: getSelection(calendar.selected).map(formatDate),\n\n getDropdownProps,\n getRangeStartInputProps,\n getRangeEndInputProps,\n getClearProps,\n getCalendarProps,\n getDoneProps,\n }\n}\n\nexport default useDateRangePicker\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { Button } from 'components/Button'\nimport { ClearButton, DateInput } from './DatePicker'\nimport { DateFormatHelper, GenericCalendar } from 'components/Calendar'\nimport { Dropdown, GenericDropdown } from 'components/Dropdown'\nimport { getToken as token } from 'theming'\nimport { Group } from 'components/Layout'\nimport { Popover } from 'components/Popover'\nimport useDateRangePicker from './useDateRangePicker'\n\nimport type { DateRangePickerProps } from './DatePicker.types'\n\nexport const formatter = DateFormatHelper('MM/DD/YYYY')\n\nconst DropdownMenu = styled(Dropdown.Menu)`\n width: max-content;\n min-width: initial;\n max-height: initial;\n padding: ${token('space-m')};\n overflow-y: initial;\n`\n\nconst DropdownFooter = styled.div`\n padding-right: ${token('space-m')};\n padding-left: ${token('space-m')};\n`\n\nfunction DateRangePicker(props: DateRangePickerProps): JSX.Element {\n const {\n id,\n name,\n value,\n onChange,\n disabled,\n constraints,\n getRangeStartInputProps,\n getRangeEndInputProps,\n getCalendarProps,\n placement,\n } = props\n\n const dateRangePicker = useDateRangePicker({\n constraints,\n disabled,\n id,\n name,\n value,\n onChange,\n getRangeStartInputProps,\n getRangeEndInputProps,\n getCalendarProps,\n })\n\n function renderRangeEndTrailing() {\n const [currRangeStart, currRangeEnd] = dateRangePicker.value\n\n if (!disabled && (currRangeStart || currRangeEnd)) {\n return (\n <ClearButton\n size={12}\n type=\"button\"\n aria-label=\"Clear selection\"\n {...dateRangePicker.getClearProps()}\n />\n )\n }\n\n return null\n }\n\n function renderDropdownFooter() {\n return (\n <DropdownFooter>\n <Group space=\"s\" justify=\"flex-end\">\n <Button type=\"button\" scale=\"small\" {...dateRangePicker.getClearProps()}>\n Clear\n </Button>\n <Button type=\"button\" scale=\"small\" variant=\"primary\" {...dateRangePicker.getDoneProps()}>\n Done\n </Button>\n </Group>\n </DropdownFooter>\n )\n }\n\n return (\n <GenericDropdown {...placement} {...dateRangePicker.getDropdownProps()}>\n <Popover.Reference>\n <Group space=\"s\">\n <DateInput\n {...dateRangePicker.getRangeStartInputProps()}\n data-testid=\"input-date-range-start\"\n />\n <DateInput\n trailing={renderRangeEndTrailing()}\n {...dateRangePicker.getRangeEndInputProps()}\n data-testid=\"input-date-range-end\"\n />\n </Group>\n </Popover.Reference>\n <DropdownMenu footer={renderDropdownFooter()}>\n <GenericCalendar {...dateRangePicker.getCalendarProps()} />\n </DropdownMenu>\n </GenericDropdown>\n )\n}\n\nexport default DateRangePicker\n","import React from 'react'\n\nimport { TextProps, Text } from 'components/Text'\n\nexport type ErrorMessageProps = Partial<TextProps>\n\nconst ErrorMessage = ({ children, ...props }: ErrorMessageProps) => {\n if (!children) {\n return null\n }\n\n return (\n <Text as=\"p\" variant=\"caption-bold\" color=\"color-danger\" {...props}>\n {children}\n </Text>\n )\n}\n\nexport default ErrorMessage\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { getToken } from 'theming'\nimport conditional, { whenProps } from 'tools/conditional'\nimport prop from 'tools/prop'\nimport transition from 'styles/transition'\nimport hoverable from 'styles/hoverable'\nimport focusable from 'styles/focusable'\nimport disableable from 'styles/disableable'\nimport hidden from 'styles/hidden'\n\nimport { StackProps, Stack } from 'components/Layout/Stack'\nimport { Icon } from 'components/Icon'\n\nimport type { DropZoneProps } from './types'\n\nexport const DragDropFileWrapper = styled(Stack)<{ withFileList: boolean }>`\n width: 100%;\n\n & > label + p {\n margin-top: ${conditional({\n 'space-m': whenProps({ withFileList: true }),\n 'space-l': whenProps({ withFileList: false }),\n })};\n }\n`\n\nexport const DropZoneWrapper = styled((props: StackProps) => <Stack as=\"label\" {...props} />)<\n Pick<DropZoneProps, 'disabled' | 'error'>\n>`\n ${transition({ property: 'border-color, box-shadow, opacity' })}\n\n cursor: pointer;\n\n background-color: ${getToken('color-neutral-white')};\n border-radius: ${getToken('border-radius-s')};\n border: 2px dashed;\n border-color: ${conditional({\n 'color-neutral-light': whenProps({ error: false }),\n 'color-danger': whenProps({ disabled: false, error: true }),\n })};\n\n padding: ${getToken('space-l')} ${getToken('space-3xl')};\n\n text-align: center;\n\n ${hoverable`\n border-color: ${conditional({\n 'color-accent': whenProps({ disabled: false, error: false }),\n })};\n `}\n\n ${focusable`\n border-color: ${conditional({\n 'color-accent': whenProps({ disabled: false, error: false }),\n })};\n box-shadow: ${getToken('shadow-glow-primary')};\n `}\n\n ${disableable()}\n`\n\nexport const HiddenInput = styled.input`\n ${hidden()}\n`\n\nexport const UploadIcon = styled(Icon)`\n color: ${getToken('color-neutral')};\n`\n\nexport const FileListUL = styled((props: StackProps) => <Stack as=\"ul\" {...props} />)`\n padding: 0;\n`\n\nexport const Divider = styled.div`\n width: 1px;\n height: 16px;\n\n background-color: ${getToken('color-neutral-darker')};\n`\n","export const BYTES_PER_KILOBYTE = 1024\nexport const FILE_SIZE_ABBREVIATIONS = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']\n\nconst formatBytes = (bytes: number, decimals = 2) => {\n const bytesValue = Number(bytes)\n\n if (!bytesValue || bytesValue < 0) {\n return '0B'\n }\n\n const dm = Math.max(0, decimals)\n const unit = Math.floor(Math.log(bytesValue) / Math.log(BYTES_PER_KILOBYTE))\n const unitAbbr = FILE_SIZE_ABBREVIATIONS[Math.min(unit, FILE_SIZE_ABBREVIATIONS.length - 1)]\n\n return `${parseFloat((bytesValue / Math.pow(BYTES_PER_KILOBYTE, unit)).toFixed(dm))}${unitAbbr}`\n}\n\nexport default formatBytes\n","import React from 'react'\n\nimport formatBytes from 'utils/toolset/formatBytes'\n\nimport { Stack, Group } from 'components/Layout'\nimport { Bar } from 'components/Loaders/LoadingBar'\nimport { Button } from 'components/Button'\nimport { Icon } from 'components/Icon'\nimport { Text } from 'components/Text'\n\nimport type { FileItemProps, FileStatus } from '../types'\nimport { Divider } from '../styles'\n\nconst FileName = ({ file }: Pick<FileItemProps, 'file'>): JSX.Element =>\n file.size ? (\n <Group space=\"m\" align=\"center\">\n <Text variant=\"caption\">{file.name}</Text>\n <Text variant=\"number-sm\">{formatBytes(file.size)}</Text>\n </Group>\n ) : (\n <Text variant=\"caption\">{file.name}</Text>\n )\n\ntype FileActionButtonProps = Pick<FileItemProps, 'onRemove' | 'onRetry' | 'disabled'> & {\n type: 'remove' | 'retry'\n}\n\nconst FileActionButton = ({\n type,\n onRemove,\n onRetry,\n disabled,\n}: FileActionButtonProps): JSX.Element => {\n const { iconName, label, onClick } =\n type === 'remove'\n ? {\n iconName: 'close',\n label: 'REMOVE',\n onClick: onRemove,\n }\n : {\n iconName: 'refresh',\n label: 'RETRY',\n onClick: onRetry,\n }\n\n return (\n <Button\n scale=\"small\"\n variant=\"tertiary\"\n leading={<Icon name={iconName} size={12} />}\n onClick={onClick}\n disabled={disabled}\n >\n {label}\n </Button>\n )\n}\n\nconst LoadingFile = ({ file, ...actionProps }: FileItemProps): JSX.Element => (\n <Stack as=\"li\" space=\"s\">\n <Group align=\"center\" justify=\"space-between\">\n <FileName file={file} />\n <FileActionButton type=\"remove\" {...actionProps} />\n </Group>\n <Bar />\n </Stack>\n)\n\nconst ErrorFile = ({ file, errorMessage, ...actionProps }: FileItemProps): JSX.Element => (\n <Stack as=\"li\" space=\"s\">\n <Group align=\"center\" justify=\"space-between\">\n <Group space=\"s\" align=\"center\">\n <Icon name=\"warning\" size={12} />\n <FileName file={file} />\n </Group>\n {actionProps.onRetry ? (\n <Group space=\"none\" align=\"center\">\n <FileActionButton type=\"retry\" {...actionProps} />\n <Divider />\n <FileActionButton type=\"remove\" {...actionProps} />\n </Group>\n ) : (\n <FileActionButton type=\"remove\" {...actionProps} />\n )}\n </Group>\n {errorMessage && (\n <Text variant=\"caption\" color=\"color-danger\">\n {errorMessage}\n </Text>\n )}\n </Stack>\n)\n\nconst SuccessFile = ({ file, ...actionProps }: FileItemProps): JSX.Element => (\n <Group as=\"li\" align=\"center\" justify=\"space-between\">\n <Group space=\"s\" align=\"center\">\n <Icon name=\"check\" size={12} />\n <FileName file={file} />\n </Group>\n <FileActionButton type=\"remove\" {...actionProps} />\n </Group>\n)\n\nconst FILE_ITEM_BY_STATUS: Record<FileStatus, (props: FileItemProps) => JSX.Element> = {\n loading: LoadingFile,\n error: ErrorFile,\n success: SuccessFile,\n}\n\nconst FileItem = (props: FileItemProps): JSX.Element => {\n const FileItemComponent = FILE_ITEM_BY_STATUS[props.status]\n\n return <FileItemComponent {...props} />\n}\n\nexport default FileItem\n","import Wrapper from './components/Wrapper'\nimport DropZone from './components/DropZone'\nimport FileList from './components/FileList'\n\nconst DragDropFile = (): null => null\n\nDragDropFile.Wrapper = Wrapper\nDragDropFile.DropZone = DropZone\nDragDropFile.FileList = FileList\n\nexport default DragDropFile\n","import React from 'react'\n\nimport isEmpty from 'utils/toolset/isEmpty'\n\nimport { useDragDropFileContext } from '../DragDropFile.context'\nimport { DragDropFileWrapper } from '../styles'\nimport type { WrapperProps } from '../types'\n\n/**\n * This is a `Stack` component customized with the needed spacing between the DragDropFile inner components\n */\nconst Wrapper = ({ children, ...props }: WrapperProps) => {\n const { fileList } = useDragDropFileContext()\n\n return (\n <DragDropFileWrapper space=\"l\" withFileList={!isEmpty(fileList)} {...props}>\n {children}\n </DragDropFileWrapper>\n )\n}\n\nexport default Wrapper\n","import React, { useRef, useState, useCallback } from 'react'\nimport clsx from 'clsx'\n\nimport toArray from 'utils/toolset/toArray'\nimport KeyboardKey from 'utils/toolset/keyboard'\nimport pluralize from 'utils/toolset/pluralize'\n\nimport { Text } from 'components/Text'\n\nimport { useDragDropFileContext } from '../DragDropFile.context'\n\nimport { DropZoneWrapper, HiddenInput, UploadIcon } from '../styles'\nimport type { DropZoneProps } from '../types'\n\nconst DropZone = ({\n className,\n hint,\n multiple = false,\n accept,\n disabled = false,\n error = false,\n renderCustomContent,\n ...props\n}: DropZoneProps): JSX.Element => {\n const { onFilesAdded } = useDragDropFileContext()\n\n const inputRef = useRef<HTMLInputElement>(null)\n const [isDragging, setIsDragging] = useState(false)\n\n const onChangeInput = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault()\n event.stopPropagation()\n\n onFilesAdded(Array.from(event.currentTarget.files || []))\n },\n [onFilesAdded]\n )\n\n const onKeyPress = useCallback(\n (event: React.KeyboardEvent) => {\n if (!disabled && inputRef.current && KeyboardKey(event).is('ENTER')) {\n inputRef.current.click()\n }\n },\n [disabled, inputRef]\n )\n\n const onDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!disabled) {\n if (isDragging) {\n setIsDragging(false)\n }\n\n onFilesAdded(Array.from(event.dataTransfer.files || []))\n }\n },\n [disabled, isDragging, onFilesAdded]\n )\n\n const onDragStart = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n }, [])\n\n const onDragOver = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n\n if (!disabled && !isDragging) {\n setIsDragging(true)\n }\n },\n [disabled, isDragging]\n )\n\n const onDragLeave = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n\n if (isDragging) {\n setIsDragging(false)\n }\n },\n [isDragging]\n )\n\n const renderDefaultContent = useCallback(\n () => (\n <>\n <UploadIcon name=\"upload\" size={48} />\n <Text variant=\"body\" color=\"color-neutral-darker\">\n {`Drag and drop your ${pluralize(Number(!multiple), 'files', 'file')} here or `}\n <Text as=\"a\" color={disabled ? 'color-neutral' : 'color-accent'} variant=\"body-bold\">\n {`Browse ${pluralize(Number(!multiple), 'Files', 'File')}`}\n </Text>\n </Text>\n {hint && (\n <Text variant=\"caption\" color=\"color-neutral-dark\">\n {hint}\n </Text>\n )}\n </>\n ),\n [multiple, disabled, hint]\n )\n\n return (\n <DropZoneWrapper\n space=\"m\"\n align=\"center\"\n justify=\"center\"\n className={clsx(className, {\n 'is-disabled': disabled,\n 'is-focused': isDragging,\n })}\n disabled={disabled}\n error={error}\n tabIndex={0}\n role=\"button\"\n aria-pressed=\"false\"\n onKeyPress={onKeyPress}\n onDrop={onDrop}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n >\n {(renderCustomContent || renderDefaultContent)({ isDragging })}\n <HiddenInput\n onInput={onChangeInput}\n type=\"file\"\n ref={inputRef}\n accept={accept ? toArray(accept).join(',') : undefined}\n disabled={disabled}\n multiple={multiple}\n {...props}\n />\n </DropZoneWrapper>\n )\n}\n\nexport default DropZone\n","import React from 'react'\n\nimport isEmpty from 'utils/toolset/isEmpty'\nimport pluralize from 'utils/toolset/pluralize'\n\nimport { Stack } from 'components/Layout'\nimport { Text } from 'components/Text'\n\nimport { useDragDropFileContext } from '../DragDropFile.context'\n\nimport type { FileListProps } from '../types'\nimport { FileListUL } from '../styles'\n\nimport FileItem from './FileItem'\n\nconst FileList = ({ disabled, ...props }: FileListProps): JSX.Element | null => {\n const { fileList, onRemoveFile, onRetryUpload } = useDragDropFileContext()\n\n if (isEmpty(fileList)) {\n return null\n }\n\n const uploadedFiles = fileList.filter((file) => file.status === 'success').length\n\n return (\n <Stack space=\"m\" {...props}>\n <Text variant=\"heading-sm-bold\">{`${uploadedFiles} ${pluralize(\n uploadedFiles,\n 'Files',\n 'File'\n )} uploaded`}</Text>\n <FileListUL space=\"m\">\n {fileList.map((item, index) => (\n <FileItem\n key={`file-${item.file.name}-${index}`}\n disabled={disabled}\n onRemove={() => onRemoveFile(item, index)}\n onRetry={onRetryUpload ? () => onRetryUpload(item, index) : undefined}\n {...item}\n />\n ))}\n </FileListUL>\n </Stack>\n )\n}\n\nexport default FileList\n","import styled from 'styled-components'\nimport { Button } from 'components/Button'\n\nexport const NoPaddingButton = styled(Button).attrs({\n variant: 'tertiary',\n scale: 'small',\n})`\n padding: 0;\n\n > span {\n margin: 0 !important;\n }\n`\n","import React, { ChangeEvent, KeyboardEvent, useEffect, useState } from 'react'\n\nimport { Layout } from 'components/Layout'\nimport { Text } from 'components/Text'\nimport { TextField } from 'components/TextField'\nimport type { TablePaginationActionsProps } from 'components/TablePagination/TablePagination.types'\nimport styled from 'styled-components'\nimport { Icon, IconProps } from 'components/Icon'\nimport Keyboard from 'utils/toolset/keyboard'\nimport { NoPaddingButton } from './TablePagination.styles'\nimport { prop } from 'tools/index'\n\nexport const ActionIcon = styled(Icon).attrs({\n color: 'neutral-darker',\n size: '16',\n})<IconProps & { rotate?: number }>`\n transform: rotate(${prop('rotate', 0)}deg);\n`\n\nfunction TablePaginationActions({\n variant = 'default',\n disabled = false,\n onPageChange,\n page,\n count,\n rowsPerPage,\n}: TablePaginationActionsProps): JSX.Element {\n const totalPages = Math.ceil(count / rowsPerPage)\n const [pageValue, setPageValue] = useState<number | ''>(page + 1)\n const isCompact = variant === 'compact'\n\n useEffect(() => {\n setPageValue(page + 1)\n }, [page])\n\n const handleFirstPageClick = () => {\n onPageChange(0)\n }\n\n const handlePreviousPageClick = () => {\n onPageChange(page - 1)\n }\n\n const handleNextPageClick = () => {\n onPageChange(page + 1)\n }\n\n const handleLastPageClick = () => {\n onPageChange(totalPages - 1)\n }\n\n const publishPageChange = () => {\n if (pageValue && pageValue - 1 !== page) {\n onPageChange(pageValue - 1)\n }\n }\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (Keyboard(e).is('ENTER')) {\n publishPageChange()\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (Keyboard(e).is(['E_LOWERCASE', 'DOT', 'MINUS', 'PLUS'])) {\n e.preventDefault()\n }\n }\n\n const handlePageChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.value === '') {\n setPageValue('')\n return\n }\n\n const numberValue = Number(e.target.value)\n\n if (!numberValue || numberValue < 1 || numberValue > totalPages) return\n\n setPageValue(numberValue)\n }\n\n return (\n <Layout.Group space=\"s\" align=\"center\">\n {!isCompact && (\n <NoPaddingButton\n onClick={handleFirstPageClick}\n disabled={page === 0 || disabled}\n title=\"First page\"\n >\n <ActionIcon name=\"caret-right-last\" rotate={180} />\n </NoPaddingButton>\n )}\n <NoPaddingButton\n onClick={handlePreviousPageClick}\n disabled={page === 0 || disabled}\n title=\"Previous page\"\n >\n <ActionIcon name=\"caret-left\" />\n </NoPaddingButton>\n {!isCompact && (\n <>\n <TextField\n type=\"number\"\n min={1}\n max={totalPages}\n disabled={disabled || totalPages === 1}\n onChange={handlePageChange}\n onBlur={publishPageChange}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDown}\n scale=\"small\"\n value={count ? pageValue : 0}\n title=\"Page\"\n />\n <Text variant=\"body\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n of{' '}\n <Text variant=\"body-bold\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n {totalPages}\n </Text>\n </Text>\n </>\n )}\n <NoPaddingButton\n onClick={handleNextPageClick}\n disabled={page >= totalPages - 1 || disabled}\n title=\"Next page\"\n >\n <ActionIcon name=\"caret-right\" />\n </NoPaddingButton>\n {!isCompact && (\n <NoPaddingButton\n onClick={handleLastPageClick}\n disabled={page >= totalPages - 1 || disabled}\n title=\"Last page\"\n >\n <ActionIcon name=\"caret-right-last\" />\n </NoPaddingButton>\n )}\n </Layout.Group>\n )\n}\n\nexport default TablePaginationActions\n","import React from 'react'\nimport { Text } from 'components/Text'\nimport { Dropdown, DropdownContext } from 'components/Dropdown'\nimport { Layout } from 'components/Layout'\nimport { Icon } from 'components/Icon'\nimport type { RowsPerPageProps } from './TablePagination.types'\nimport type { ButtonProps } from 'components/Button'\nimport { NoPaddingButton } from './TablePagination.styles'\nimport { Popover } from 'components/Popover'\n\nconst TriggerButton = (props: Omit<ButtonProps, 'scale' | 'variant'>) => {\n const { toggle } = React.useContext(DropdownContext)\n\n return (\n <Popover.Reference>\n <NoPaddingButton data-testid=\"rows-per-page-button\" onClick={toggle} {...props}>\n <Icon name=\"caret-down\" size={16} color=\"neutral-darker\" />\n </NoPaddingButton>\n </Popover.Reference>\n )\n}\n\nfunction RowsPerPage({\n page,\n rowsPerPage,\n onRowsPerPageChange,\n labelRowsPerPage,\n count,\n rowsPerPageOptions,\n disabled = false,\n position = 'bottom',\n align = 'start',\n}: RowsPerPageProps): JSX.Element {\n const getItemsRange = () => {\n if (!count) {\n return 0\n }\n\n const from = page * rowsPerPage + 1\n let to = (page + 1) * rowsPerPage\n\n if (to > count) {\n to = count\n }\n\n return `${from}-${to}`\n }\n\n return (\n <Layout.Group space=\"s\" align=\"center\">\n <Text variant=\"caption\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n {labelRowsPerPage}\n </Text>\n <Text variant=\"body\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n <Text variant=\"body-bold\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n {getItemsRange()}\n </Text>{' '}\n of{' '}\n <Text variant=\"body-bold\" color={disabled ? 'color-neutral' : 'color-neutral-dark'}>\n {count}\n </Text>\n </Text>\n <Dropdown position={position} align={align}>\n <TriggerButton disabled={disabled} />\n <Dropdown.Menu>\n {rowsPerPageOptions.map((option) => (\n <Dropdown.Item\n key={option}\n onClick={() => onRowsPerPageChange(option)}\n trailing={option === rowsPerPage && <Icon name=\"check\" size={20} color=\"accent\" />}\n >\n {option} per page\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </Layout.Group>\n )\n}\n\nexport default RowsPerPage\n","import styled from 'styled-components'\nimport hiddenStyle from 'styles/hidden'\n\nexport const VisuallyHidden = styled.span`\n ${hiddenStyle(true)}\n`\n","import React from 'react'\n\nimport { Layout } from 'components/Layout'\n\nimport PaginationItem from './PaginationItem'\nimport usePagination from './usePagination'\n\nimport type { PaginationProps } from './Pagination.types'\n\nfunction Pagination(props: PaginationProps): JSX.Element {\n const {\n boundaryCount = 1,\n count,\n disabled = false,\n onChange,\n page,\n siblingCount = 1,\n ...others\n } = props\n\n const items = usePagination({ boundaryCount, count, disabled, onChange, page, siblingCount })\n\n return (\n <nav aria-label=\"pagination navigation\" {...others}>\n <Layout.Group space=\"none\" align=\"center\">\n {items.map((item) => (\n <PaginationItem {...item} key={`${item.itemType}${item.page || ''}`} />\n ))}\n </Layout.Group>\n </nav>\n )\n}\n\nexport default Pagination\n","import React from 'react'\n\nimport { Layout } from 'components/Layout'\n\nimport type { TablePaginationProps } from './TablePagination.types'\nimport TablePaginationActions from 'components/TablePagination/TablePaginationActions'\nimport RowsPerPage from 'components/TablePagination/RowsPerPage'\n\nfunction TablePagination(props: TablePaginationProps): JSX.Element {\n const {\n variant = 'default',\n count,\n labelRowsPerPage = 'Rows per page:',\n onPageChange,\n onRowsPerPageChange,\n page,\n rowsPerPage = 50,\n rowsPerPageOptions = [10, 25, 50, 100],\n disabled = false,\n rowsPerPagePlacement,\n ...rest\n } = props\n\n return (\n <Layout.Group space=\"xl\" align=\"center\" justify=\"space-between\" {...rest}>\n <RowsPerPage\n page={page}\n count={count}\n onRowsPerPageChange={onRowsPerPageChange}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={rowsPerPageOptions}\n labelRowsPerPage={labelRowsPerPage}\n disabled={disabled || !count}\n position={rowsPerPagePlacement?.position}\n align={rowsPerPagePlacement?.align}\n />\n <TablePaginationActions\n variant={variant}\n page={page}\n onPageChange={onPageChange}\n rowsPerPage={rowsPerPage}\n count={count}\n disabled={disabled || !count}\n />\n </Layout.Group>\n )\n}\n\nexport default TablePagination\n","import { useCallback, useContext } from 'react'\n\nimport { SelectContext } from './Select.context'\nimport type { Option, useSelectExternalReturn } from './Select.types'\n\nexport function useSelectExternal(): useSelectExternalReturn {\n const select =\n useContext(SelectContext) ||\n (() => {\n throw new Error('useSelect should be wrapped in a SelectContext')\n })()\n\n const isChecked = useCallback(\n function isChecked(option: Option) {\n const { checked } = select.getSelectableOption(option)\n return checked\n },\n [select]\n )\n\n return {\n query: select.query,\n getOption: select.getOption,\n isChecked,\n }\n}\n","import { CustomTheme, getToken as token } from 'theming'\nimport { useTheme } from 'styled-components'\nimport useDialog from 'components/Dialog/useDialog'\nimport { useMemo } from 'react'\nimport useWindowResize from 'hooks/useWindowResize'\nimport { BASE_PIXELS } from 'utils/toolset/rem'\n\nexport interface useSideNavigationProps {\n open: boolean\n show: () => void\n hide: () => void\n toggle: () => void\n}\n\nfunction transformInPixels(value: string): number {\n if (value.indexOf('rem') >= 0) {\n return parseFloat(value) * BASE_PIXELS\n }\n\n return parseFloat(value)\n}\n\nfunction useSideNavigation(): useSideNavigationProps {\n const size = useWindowResize()\n const theme = useTheme() as CustomTheme\n\n const shouldOpen = useMemo(() => {\n const breakpoint = token('side-navigation-collapsing-breakpoint', { theme }) as string\n const breakpointInPixels = transformInPixels(breakpoint)\n return size.width > breakpointInPixels\n }, [size])\n\n return useDialog({ open: shouldOpen })\n}\n\nexport default useSideNavigation\n","import { useState, useEffect } from 'react'\n\nfunction useWindowSize() {\n const [windowSize, setWindowSize] = useState<{\n width: number\n height: number\n }>({\n width: window.innerWidth,\n height: window.innerHeight,\n })\n\n useEffect(() => {\n function handleResize() {\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight,\n })\n }\n\n window.addEventListener('resize', handleResize)\n\n return () => window.removeEventListener('resize', handleResize)\n }, [])\n return windowSize\n}\n\nexport default useWindowSize\n","import { useEffect, useReducer, useRef, Dispatch } from 'react'\n\nimport get from 'utils/toolset/get'\nimport type { Step } from './Steps.types'\n\nexport interface useStepsProps {\n steps: Array<Step>\n current?: number | string\n}\n\ntype State = { current: number | string; steps: Array<Step> }\ntype Action =\n | { type: 'navigate'; payload: { stepID: number | string } }\n | { type: 'next' }\n | { type: 'previous' }\n | { type: 'complete'; payload: { stepID: number | string } }\n | { type: 'reset'; payload: State }\n\nfunction useSteps({ steps, current: currentProp }: useStepsProps): [State, Dispatch<Action>] {\n const stepIndexByID = useRef<Record<number | string, number>>({})\n\n useEffect(\n function initStepIndexByIDMap() {\n stepIndexByID.current = {}\n ;(steps || []).forEach((step, index) => {\n stepIndexByID.current[step.id] = index\n })\n },\n [steps]\n )\n\n const [state, dispatch] = useReducer(reducer, init(steps, currentProp))\n\n function reducer(state: State, action: Action): State {\n const { current } = state\n\n // TODO: improve using object to map each case as individual functions\n switch (action.type) {\n case 'previous': {\n const currentIndex = getStepIndex(current)\n\n if (currentIndex == null) {\n return state\n }\n\n const newCurrentIndex = Math.max(currentIndex - 1, 0)\n\n return {\n ...state,\n current: steps[newCurrentIndex]?.id,\n }\n }\n case 'next': {\n const currentIndex = getStepIndex(current)\n\n if (currentIndex == null) {\n return state\n }\n\n const newCurrentIndex = Math.min(currentIndex + 1, steps.length - 1)\n\n return {\n ...state,\n current: steps[newCurrentIndex]?.id,\n }\n }\n case 'navigate': {\n const { stepID } = action.payload\n const currentIndex = getStepIndex(current)\n const stepIndex = getStepIndex(stepID)\n const step = get(steps, stepIndex)\n\n if (!step) {\n return state\n }\n\n return {\n ...state,\n current: steps[stepIndex]?.id || steps[currentIndex]?.id,\n }\n }\n case 'complete': {\n const { stepID } = action.payload\n const { steps } = state\n\n const stepIndex = getStepIndex(stepID)\n const step = get(steps, stepIndex)\n\n if (!step) {\n return state\n }\n\n return {\n ...state,\n steps: [\n ...steps.slice(0, stepIndex),\n { ...step, complete: true },\n ...steps.slice(stepIndex + 1),\n ],\n }\n }\n case 'reset': {\n const { steps, current } = action.payload\n\n return {\n ...state,\n ...init(steps, current),\n }\n }\n default:\n return state\n }\n }\n\n // TODO: gather step info to feed Steps component\n function init(steps: Array<Step>, current?: number | string): State {\n return {\n current: current || (get(steps, '0.id') as number | string),\n steps,\n }\n }\n\n function getStepIndex(stepID: number | string): number {\n return stepIndexByID.current[stepID]\n }\n\n // TODO: write helper functions to abstract inner dispatch mechanism\n return [state, dispatch]\n}\n\nexport default useSteps\n","import { useCallback, useState } from 'react'\n\nimport type { ChangeEvent } from 'react'\nimport type { TextFieldProps } from './TextField'\n\ntype InputValue = string | number | readonly string[] | undefined\ntype ReturnType = [InputValue, (e: ChangeEvent<HTMLInputElement>) => void]\n\nfunction useTextField({ onChange: onChangeProp, value: valueProp }: TextFieldProps): ReturnType {\n const [value, setValue] = useState(valueProp || '')\n\n const onChange = useCallback(\n function handleChange(e: ChangeEvent<HTMLInputElement>) {\n const {\n target: { value },\n } = e\n setValue(value)\n onChangeProp?.(e)\n },\n [onChangeProp]\n )\n\n return [value, onChange]\n}\n\nexport default useTextField\n"],"names":["transitionStyle","options","property","timingFunction","duration","Wrapper","styled","span","transition","props","$color","token","UnknownIcon","React","createElement","IconFactory","map","name","size","width","height","className","color","rest","__rest","I","String","toLowerCase","getIcon","Object","assign","_path","_path2","_extends","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_circle","Icon","viewBox","fill","xmlns","d","calendar","clipRule","fillRule","back","check","circle","cx","cy","r","close","information","minus","plus","refresh","sort","upload","warning","MAX_SAFE_INTEGER","argsTag","funcTag","genTag","freeGlobal","global","commonjsGlobal","freeSelf","self","root","Function","arrayPush","array","values","index","offset","objectProto","objectToString","toString","Symbol","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","undefined","baseFlatten","depth","predicate","isStrict","result","isFlattenable","value","isArray","isObjectLike","isLength","tag","type","isObject","isFunction","isArrayLike","isArrayLikeObject","isArguments","Array","lodash_flatten","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","reIsHostCtor","freeExports","exports","nodeType","freeModule","module","moduleExports","uid","func","transform","funcProto","coreJsData","maskSrcKey","exec","keys","IE_PROTO","funcToString","reIsNative","RegExp","replace","Buffer","nativeIsBuffer","isBuffer","nativeKeys","arg","DataView","getNative","Map","Promise","Set","WeakMap","nonEnumShadows","valueOf","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","baseIsNative","isMasked","pattern","e","isHostObject","test","object","getValue","getTag","ArrayBuffer","resolve","Ctor","constructor","ctorString","splice","isPrototype","interleave","array1","array2","safeArray1","toArray","safeArray2","isEmpty","flatten","element","activatableStyle","strings","args","concat","disableableStyle","focusableStyle","hoverableStyle","HASH_UNDEFINED","symbolTag","reIsUint","arrayIncludes","fromIndex","fromRight","baseFindIndex","baseIsNaN","baseIndexOf","arrayIncludesWith","comparator","arrayMap","iteratee","cacheHas","cache","has","overArg","arrayProto","getPrototype","getPrototypeOf","nativeGetSymbols","getOwnPropertySymbols","nativeMax","Math","max","nativeCreate","Hash","entries","clear","entry","set","ListCache","MapCache","SetCache","__data__","add","arrayLikeKeys","inherited","n","baseTimes","skipIndexes","isIndex","push","assocIndexOf","other","baseKeysIn","nativeKeysIn","proto","isProto","getAllKeysIn","keysFunc","symbolsFunc","baseGetAllKeys","keysIn","getSymbolsIn","getMapData","data","get","pop","hash","string","getSymbols","stubArray","toKey","isSymbol","start","omit","basePickBy","basePick","includes","isCommon","valuesLength","outer","computed","valuesIndex","baseDifference","otherArgs","thisArg","lodash_omit","fontStyle","weight","family","css","getToken","typographyProperties","fontSize","lineHeight","fontWeight","body","caption","fontFamily","textTransform","link","DEFAULT_VARIANT","typography","variant","properties","getPropertiesByVariant","conditional","italic","animation","keyframes","Layer","path","getSpace","prop","whenProps","prop$1","GroupContainer","div","center","$align","stretch","$justify","Group","space","justify","align","children","$space","StackContainer","Stack","BoxContainer","left","$textAlign","right","$background","$borderColor","$borderWidth","$borderRadius","Box","background","borderColor","borderRadius","borderWidth","padding","textAlign","$padding","SidebarContainer","$reversed","SwitcherContainer","GridContainer","Layout","Sidebar","minContentWidth","reversed","sideWidth","$minContentWidth","$sideWidth","Switcher","limit","threshold","$limit","Grid","minColumnWidth","$minColumnWidth","loading","Bar","velocity","pulse","Dot","LoadingDots","_a","role","StyledSpan","rem","Leading","Trailing","Children","BaseStyledButton","button","$scale","disableable","$loading","StyledButton","$variant","$scheme","hoverable","focusable","activatable","StyledSelector","TextHidden","StyledLoadingDots","attrs","ButtonLoadingDots","buttonVariant","remainingProps","loadingDotsVariant","ButtonChildrenWrapper","Fragment","BaseButton","forwardRef","ref","scale","leading","trailing","disabled","others","Button","scheme","SelectorButton","IconButton","CloseButton","BackButton","toVal","mix","k","y","str","clsx","tmp","x","SelectorWrapper","StyledLabel","label","font","SelectionWrapper","selector","Check","Selector","input","Checkbox","Radio","useFocusWithin","onFocus","onBlur","focused","setFocused","useState","containerRef","useRef","getContainer","current","handleFocus","useCallback","handleBlur","useEffect","addEventListener","_b","removeEventListener","Status","Status$1","InputWrapper","status","Neutral","Danger","Success","StyledInput","TextField","TextareaWrapper","StyledTextarea","textarea","Textarea","defineProperty","objectFromQueryString","qs","slice","JSON","parse","decodeURIComponent","queryStringFromObject","obj","filter","join","toCapitalizeFirstLetter_1","toCapitalizeFirstLetter","toUpperCaseFirstLetter","word","charAt","toUpperCase","split","toLocaleCapitalizeFirstLetter_1","toLocaleCapitalizeFirstLetter","locale","localeDefined","navigator","language","item","toLocaleUpperCase","toLocaleUpperCaseFirstLetter","isBlank_1","default","text","trim","isBlank","objectFromQueryString_1","require$$0","enumerable","queryStringFromObject_1","require$$1","require$$2","require$$3","require$$4","INSECURE_HREF","useSafeLink","rel","sanitizedRel","Boolean","from","checkTarget","href","checkHref","StyledBaseAnchor","a","BaseLink","forwardedRef","StyledAnchor","Link","StyledLink","StyledLi","li","active","Breadcrumb","url","onClick","isNil","getWrappedLabel","StyledWrapper","nav","StyledOl","ol","StyledBackButton","useDidMount","counter","GenericAdapter","getKey","o","lodash_get","createSelectionStrategy","adapters","multiple","context","getAdapter","init","items","select","selection","newSelection","adapter","_type","unselect","delete","toggle","MultipleSelectionStrategy","SingleSelectionStrategy","INFINITY","MAX_INTEGER","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","nativeCeil","ceil","toFinite","isBinary","toNumber","range","end","step","eq","isIterateeCall","baseRange","lodash_range","getID","maxIDLength","initialIDLength","alphabet","currentLength","filledCharacters","availableIDs","reduce","acc","pow","Error","newID","at","IDGenerator","DEFAULT_ADAPTERS","createUseSelectable","onChange","didMount","strategy","useMemo","initializer","selected","dispatch","useReducer","state","action","payload","resetFingerprint","hasSameFingerprint","knownRef","fingerprint","setFingerprint","getFingerprint","currentFingerprint","update","known","safeItems","newKnown","hasSameItems","otherItems","useFingerprint","identity","propagateChangeRef","newSelected","createSelectable","SelectableContext","createContext","useSelectable","ToggleGroupContext","ToggleButton","$type","isMultiple","Toggle$1","group","useContext","selectable","Container","$multiple","Toggle","fromSelectedToValue","pairs","option","DEFAULT_SELECTED","ToggleGroup","id","Provider","Option","TabContext","useID","propId","setID","TabsItemsWrapper","ul","StyledListItem","direction","row","column","PanelsItemsWrapper","PanelsItemWrapper","article","block","none","PanelsItem","lazy","activeTab","hidden","defaultProps","TabsWrapper","Tabs","propTab","onTabChange","setActiveTab","Items","Item","isDefault","tabId","isActive","checked","event","Panels","Panel","StyledSection","section","StyledSectionTitle","Section","hiddenStyle","accessible","Title","AccordionContext","AccordionProvider","expanded","onExpandedChange","initialExpanded","openState","setOpenState","open","useAccordionContext","StyledToggle","StyledContent","HiddenInput","ToggleIndicator","AccordionWrapper","Accordion","propsTrailing","Body","Description","TextSection","$dismissible","StyledBanner","wrap","DefaultCloseButton","IconWrapper","DefaultIcon","InlineButton","ButtonWrapper","LargeButtonWrapper","TextWrapper","getAlertIcon","icon","iconName","Text$1","ModalWrapper","flex","HeaderWrapper","Close","Content","fullscreen","Modal","onOverlayClick","ReactDOM","createPortal","stopPropagation","document","Header","title","Text","h1","ActionWrapper","StyledDialogActions","$direction","initial","Dialog","useDialog","openProp","onOpen","onClose","setOpen","show","hide","getAlignment","placement","getLengthFromAxis","axis","getSide","getMainAxisFromPlacement","computeCoordsFromPlacement","_ref","rtl","reference","floating","commonX","commonY","mainAxis","commonAlign","isVertical","coords","ActionConfirm","onConfirm","ActionCancel","onCancel","Actions","getSideObjectFromPadding","top","bottom","expandPaddingObject","rectToClientRect","rect","async","detectOverflow","_await$platform$isEle","platform","rects","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","min","within","min$1","max$1","arrow","arrowDimensions","getDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","shouldAddOffset","centerOffset","oppositeSideMap","getOppositePlacement","side","oppositeAlignmentMap","getOppositeAlignmentPlacement","alignment","flip","_middlewareData$flip","middlewareData","initialPlacement","checkMainAxis","crossAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","isBasePlacement","isRTL","oppositePlacement","getExpandedPlacements","list","isStart","lr","rl","tb","bt","getSideList","getOppositeAxisPlacements","placements","overflow","overflows","overflowsData","main","cross","mainAlignmentSide","getAlignmentSides","every","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","reset","resetPlacement","b","_overflowsData$map$so","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","alignmentAxis","convertValueToCoords","shift","limiter","fn","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","getWindow","node","_node$ownerDocument","ownerDocument","defaultView","window","getComputedStyle$1","getComputedStyle","isNode","Node","getNodeName","nodeName","uaString","getUAString","uaData","userAgentData","brands","brand","version","userAgent","isHTMLElement","HTMLElement","Element","isShadowRoot","ShadowRoot","isOverflowElement","overflowX","overflowY","display","isTableElement","isContainingBlock","isFirefox","backdropFilter","WebkitBackdropFilter","perspective","willChange","some","contain","isClientRectVisualViewportBased","isLastTraversableNode","round","getCssDimensions","parseFloat","hasOffset","offsetWidth","offsetHeight","shouldFallback","fallback","unwrapElement","FALLBACK_SCALE","domElement","getBoundingClientRect","Number","isFinite","includeScale","isFixedStrategy","_win$visualViewport","_win$visualViewport2","clientRect","win","addVisualOffsets","visualViewport","offsetLeft","offsetTop","offsetWin","currentIFrame","frameElement","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","documentElement","getNodeScroll","scrollLeft","scrollTop","pageXOffset","pageYOffset","getWindowScrollBarX","getParentNode","assignedSlot","parentNode","host","getNearestOverflowAncestor","getOverflowAncestors","scrollableAncestor","isBody","getClientRectFromClippingAncestor","clippingAncestor","html","clientWidth","clientHeight","visualViewportBased","getViewportRect","scroll","scrollWidth","scrollHeight","getDocumentRect","getInnerBoundingClientRect","mutableRect","hasFixedPositionAncestor","stopNode","position","getTrueOffsetParent","polyfill","currentNode","getContainingBlock","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","offsetRect","clippingAncestors","cachedResult","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingElementAncestors","_c","firstClippingAncestor","clippingRect","accRect","getOffsetParentFn","getDimensionsFn","getClientRects","autoUpdate","ancestorScroll","ancestorResize","elementResize","animationFrame","ancestors","forEach","isVisualViewport","passive","frameId","observer","ResizeObserver","observe","prevRefRect","frameLoop","nextRefRect","requestAnimationFrame","_observer","disconnect","cancelAnimationFrame","computePosition","mergedOptions","platformWithCache","config","middleware","validMiddleware","getElementRects","statefulPlacement","resetCount","nextX","nextY","computePosition$1","arrow$1","useLayoutEffect","deepEqual","$$typeof","getDPR","devicePixelRatio","roundByDPR","dpr","useLatestRef","PopoverContext","usePopover","Popover","arrowRef","externalReference","externalFloating","whileElementsMounted","setData","isPositioned","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","referenceEl","floatingEl","dataRef","whileElementsMountedRef","platformRef","then","fullData","isMountedRef","flushSync","refs","floatingStyles","initialStyles","useFloating","resultPosition","resultAlign","register","setArrow","TooltipPosition","TooltipAlign","Floating","style","Reference","Bubble","StyledArrow","Arrow","Tooltip","message","Top","Center","visible","setVisible","showTooltip","hideTooltip","onMouseEnter","onMouseLeave","tabIndex","StyledChildren","StyledRequired","sup","StyledTooltipAnchor","PAGINATION_ITEM_TYPE","endEllipsis","next","page","previous","startEllipsis","IconButtonDefault","PageButton","underline","ICONS_NAME","PaginationItem","itemType","PaginationHelper","boundaryCount","count","siblingCount","_","getStartPages","getEndPages","getSibilingsStart","getSibilingsEnd","endPages","getStartEllipsis","getEndEllipsis","usePagination","handleChange","paginationHelper","startPages","siblingsStart","siblingsEnd","getButtonPage","isDisabled","isNumber","handleClick","rounded","Line","Progress","Warn","ProgressBar","showLine","extra","clampedValue","SwitchWrapper","Slider","ActiveIcon","InactiveIcon","StyledTag","removable","StyledCloseButton","CloseIcon","StyledSpacer","Tag","onRemove","getRemoveButtonProps","ToastCountDown","ToastIcon","getPanelRadioID","StepsContext","StepConnector","complete","ProgressStepWrapper","ProgressStepContainer","StepIndicator","StepLabel","ProgressStep","indicator","ProgressWrapper","StepsProgress","steps","StepWrapper","StepsWrapper","Steps","radioElement","getElementById","Step","StepsID","CardSubtitle","CardSeparator","hr","CardBody","CardTitleWrapper","flagged","Flag","Card","Subtitle","Separator","DropdownContext","expandDisabled","StyledPopover","DropdownItemWrapper","DropdownSectionHeader","strong","DropdownSectionWrapper","GenericDropdownMenuWrapper","DropdownMenuWrapper","DropdownSeparator","DropdownMenu","header","footer","DropdownMenuItem","persist","SUPPORTED_KEYS","ALT","ARROW_DOWN","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","CONTROL","ENTER","ESCAPE","SHIFT","SPACE","TAB","E_LOWERCASE","DOT","PLUS","MINUS","getKeyboardKey","keyCode","indexOf","KeyboardKey","is","otherKeys","expectedKeys","otherKey","useClickOutside","container","callback","setActive","handleEvent","hasTarget","contains","dropdownExpandedStyle","TriggerButton","outlined","capitalize","uppercase","DropdownTriggerWrapper","$outlined","TriggerHandle","RotatableIcon","$rotate","Caret","DropdownTriggerButton","contextValue","GenericDropdownTrigger","DropdownTrigger","useDropdown","setExpanded","isExpanded","expand","collapse","Handle","DropdownWrapper","HiddenCloseButton","GenericDropdown","child","isValidElement","useDeprecatedAlignFromMenu","Dropdown","dropdownProps","Trigger","Menu","SelectContext","pluralize","plural","singular","GenericSelectTrigger","SelectTriggerSearchField","SelectTrigger","getTabbableDescendants","querySelectorAll","useFocusTrap","onActivate","onDeactivate","currentFocused","setCurrentFocused","mutationObserverRef","focusableDescendants","setFocusableDescendants","unsubscribeToDOMMutationEvents","MutationObserver","childList","subscribeToDOMMutationEvents","handleKeyDownEvent","evt","supportedKeys","preventDefault","newCurrentFocused","focusableCounter","keyHandler","Tab","shiftKey","ArrowUp","ArrowDown","increment","getFocusedIndexAfterKeyPress","focus","activate","deactivate","getLabel","getDisplayValue","getData","datasources","query","regex","promises","types","ds","fetch","results","allSettled","TriggerOnFocusHandler","useOptions","setOptions","setStatus","timeoutRef","cancelPendingFetch","clearTimeout","fetchAfterTimeout","mapOptions","setTimeout","getOptionByKey","useSelect","onQueryChange","onCreate","getInputProps","isValidNewOption","createOptionPosition","getDatasources","extractAdapters","triggerRef","focusTrap","queryTyped","setQueryTyped","setQuery","dropdown","getSelectableOption","getOption","toggleOption","getDropdownProps","getTriggerProps","sanitizedValue","getClearProps","getMenuProps","getOptionProps","getCreatebleProps","onCreateReturn","asyncOnClick","isCreatable","findByLabel","toLocaleLowerCase","find","autoFocus","HighlightMatchWrapper","HighlightMatch","match","pre","mid","post","highlightMatch","DefaultGroup","as","DefaultSelectOption","SelectOption","defaultChecked","SelectEmpty","SelectCreatableOption","defaultComponents","Empty","CreatableOption","getComponents","components","OMITTED_PROPS","Loading","getCommonClearButtonProps","SelectMenu","ClearMultiple","total","Divider","DividerText","isQuerying","after","before","Select","placeholder","hideClear","autoComplete","selectedOptions","remainingOptions","remaining","renderOptionsMultiple","renderOptionsSingle","Logo$3","updateHeight","StyledMenuItem","Flex","MenuBaseItem","MenuLink$2","StyledIcon","$expanded","ExpandableItems","MenuLink","ItemsWrapper","MenuExpandable","expandableItemsRef","targetElRef","toggleState","prevState","totalHeight","setTotalHeight","useHeightExpansionToggler","$height","cloneElement","ariaHidden","MenuTitle","StyledMenu","menuId","Parent","compounds","Menu$2","SubItem","aside","Logo","SideNavigation","StyledAside","StyledHeader","StyledBody","StyledFooter","Drawer","onClickOutside","invisible","setInvisible","currentRef","isSameNode","onTransitionEnd","useTableSelectionCore","registered","setRegistered","selectableProps","defaults","generic","getSelectableProps","allRowsAreSelected","prev","prevRow","toggleAll","Footer","TableSelectionContext","TableSelectionProvider","selectionCore","useTableSelection","isCellSelected","selectedRows","DefaultBox","StyledTableBody","tbody","StyledTableFoot","tfoot","StyledTableCaption","$position","StyledCell","StyledTableCell","td","format","StyledTableHeadCell","th","pointer","clickable","normal","StyledTableHead","thead","StyledTableRow","tr","solid","StyledExpandableContentRow","StyledTable","table","Table","TableCaptionInner","TableCell","SelectionCell","useIsCellSelected","Input","TableHeadCell","ActionsWrapper","StyledPickerTrigger","InternalButton","TablePickerItem","TriggerIcon","TablePicker","trigger","propsTrigger","useIsRowSelected","selectionCellChild","Head","Row","Cell","HeadCell","Foot","Caption","Selection","buttons","useSelection","Action","ExpandableRow","expandableContent","propsLeading","colSpan","SortHandle","order","Picker","Logo$1","MenuDropdown","MenuDropdownSeparator","MenuDropdownTrigger","MenuDropdownLabel","Ellipsizable","$max","MenuDropdownSubItemLink","MenuItemDropdown","labelId","hasIcon","MenuItemIcon","MenuContainer","OpenSideNavButton$1","removeRightPadding","TopNavigation","OpenSideNavButton","VerticalWrapper","EmptyStateWithIcon","isHorizontal","Illustration","illustration","src","alt","EmptyStateWithIllustration","description","isPageVariant","EmptyState","aliased","aliasMap","alias","MONTH_BY_ALIAS","jan","january","feb","february","mar","march","apr","april","may","jun","june","jul","july","aug","august","sep","september","oct","october","nov","november","dec","december","MONTH_BY_NAME","getMonthByAlias","MonthHelper","month","representation","padStart","getAll","PickerModeToggle","DEFAULT_OPTIONS","normalize","DateHelper","dateArg","optionsArg","utcDate","date","Date","UTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","getYear","getMonth","getDate","getTime","getWeekday","getUTCDay","getHours","getMinutes","getSeconds","getMilliseconds","matches","constraints","constraintEvaluators","getConstraintEvaluator","evaluator","unit","subtract","newValue","year","day","hour","minute","second","millisecond","setUTCFullYear","setUTCMonth","setUTCDate","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","operator","precision","compare","getComparableDate","toISOString","DATE_ZERO","MIN_SUPPORTED_DATE","sliceIndex","normalizedPart","datePart","constraint","rangeArg","rangeStart","rangeEnd","MAX_SUPPORTED_DATE","timestamp","getConstraintRange","InvalidDateConstraintError","padded","maxLength","super","TODAY","useCalendar","onSelect","mode","amountOfMonthsToRender","setSelected","getSelectionPair","renderableMonths","setRenderableMonths","getRenderableMonths","initialMonth","getFullYear","getSelectionBoundary","months","DAY_IN_MILLISECONDS","getRenderableMonth","firstDayOfTheWeek","totalDaysInMonth","days","amount","getTokenValue","DEFAULT_FORMATTERS","ADDITIONAL_FORMATTERS","DateFormatHelper","tokens","getType","char","isEscaping","tokenizer","previousToken","COMPOUND_FORMATTERS","valid","MM","Intl","DateTimeFormat","MMM","MMMM","D","DD","ddd","weekday","dddd","YYYY","HH","hourCycle","hh","hour12","mm","ss","A","getOrdinalSuffix","number","PickerButton","$status","DefaultPickerButton","WEEKDAYS","formatter","DefaultText","CalendarDayPicker","onDayClick","renderDaysOfMonth","isPastYearDay","getStatus","formatted","dateTime","textDecoration","CalendarMonthPicker","CalendarYearPicker","BorderlessButton","GenericCalendar","onMonthClick","onYearClick","DayPicker","MonthPicker","YearPicker","usePickerMode","getSelection","formatDate","isNaN","getInitialCalendarSetup","selectionStart","startDate","setInputValue","getInputValue","DATE_REGEX","DefaultTextField","ClearButton","DateInput","AT_RANGE_START","AT_RANGE_END","DropdownFooter","DragDropFileWrapper","withFileList","DropZoneWrapper","error","UploadIcon","FileListUL","FILE_SIZE_ABBREVIATIONS","FileName","file","bytes","decimals","bytesValue","dm","floor","log","unitAbbr","toFixed","formatBytes","FileActionButton","onRetry","FILE_ITEM_BY_STATUS","actionProps","errorMessage","success","FileItem","FileItemComponent","DragDropFile","fileList","useDragDropFileContext","DropZone","hint","accept","renderCustomContent","onFilesAdded","inputRef","isDragging","setIsDragging","onChangeInput","currentTarget","files","onKeyPress","click","onDrop","dataTransfer","onDragStart","onDragOver","onDragLeave","renderDefaultContent","onInput","FileList","onRemoveFile","onRetryUpload","uploadedFiles","NoPaddingButton","ActionIcon","TablePaginationActions","onPageChange","rowsPerPage","totalPages","pageValue","setPageValue","isCompact","publishPageChange","rotate","numberValue","onKeyUp","Keyboard","onKeyDown","RowsPerPage","onRowsPerPageChange","labelRowsPerPage","rowsPerPageOptions","to","getItemsRange","VisuallyHidden","dismissible","secondaryAction","onActionButtonClick","onSecondaryActionButtonClick","onBack","getCalendarProps","datePicker","formattedDate","handleDateInputChange","handleDateInputClick","handleDayClick","handleClearClick","currSelection","currSelectedDate","currInputValue","useDatePicker","renderTrailing","getRangeStartInputProps","getRangeEndInputProps","dateRangePicker","inputsRef","currentlyPickingRef","getDateInputChangeHandler","handleDropdownBlur","handleDoneClick","currSelected","hasChanged","getDoneProps","useDateRangePicker","currRangeStart","currRangeEnd","renderRangeEndTrailing","required","tip","tipProps","secondaryTitle","strokeLinejoin","strokeMiterlimit","onToggle","htmlFor","rowsPerPagePlacement","timeout","showIcon","setCount","decrementBy","interval","isChecked","windowSize","setWindowSize","innerWidth","innerHeight","handleResize","useWindowResize","theme","useTheme","breakpoint","breakpointInPixels","BASE_PIXELS","currentProp","stepIndexByID","currentIndex","getStepIndex","newCurrentIndex","stepID","stepIndex","_d","onChangeProp","valueProp","setValue"],"mappings":"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"}
|